From 6f0f7c4c097fa5dc107cf44c2cdc5afe1e221811 Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Thu, 26 Mar 2026 10:05:33 +0800 Subject: [PATCH] =?UTF-8?q?1.1.8=20=E5=A2=9E=E5=8A=A0=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E5=92=8C=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- .../category/list/CategoryListActivity.java | 24 ++- .../category/list/CategoryListViewModel.java | 79 ++++++- .../category/local/LocalCategoryActivity.java | 13 ++ .../local/LocalCategoryViewModel.java | 45 +++- .../online/CategoryVideoActivity.java | 12 ++ .../online/CategoryVideoViewModel.java | 43 ++++ .../vc/activity/main/MainActivity.java | 84 ++++++++ .../vc/activity/main/MainViewModel.java | 50 ++++- .../player/DecryptionPlayerActivity.java | 19 +- .../vc/activity/tiktok/TikTokActivity.java | 3 + .../hainaos/vc/adapter/CategoryAdapter.java | 16 +- .../hainaos/vc/bean/CategoryUpdateInfo.java | 26 +++ .../java/com/hainaos/vc/bean/VideoUpdate.java | 26 +++ .../com/hainaos/vc/config/CommonConfig.java | 9 + .../com/hainaos/vc/dialog/UpdateDialog.java | 194 +++++++++++++++++ .../vc/network/NetInterfaceManager.java | 27 +++ .../com/hainaos/vc/network/UrlAddress.java | 4 + .../com/hainaos/vc/network/api/VideoApi.java | 21 ++ .../java/com/hainaos/vc/utils/TimeUtils.java | 6 + .../com/hainaos/vc/video/AesDataSource2.java | 201 +++++++++--------- .../drawable-hdpi/icon_download_manager.png | Bin 5491 -> 27607 bytes .../res/drawable-hdpi/icon_user_center.png | Bin 3460 -> 52559 bytes app/src/main/res/drawable/ic_video_update.xml | 15 ++ .../res/layout/activity_category_local.xml | 67 +++--- .../res/layout/activity_category_video.xml | 18 +- app/src/main/res/layout/dialog_update.xml | 90 ++++++++ app/src/main/res/layout/item_category.xml | 14 +- 28 files changed, 963 insertions(+), 147 deletions(-) create mode 100644 app/src/main/java/com/hainaos/vc/bean/CategoryUpdateInfo.java create mode 100644 app/src/main/java/com/hainaos/vc/bean/VideoUpdate.java create mode 100644 app/src/main/java/com/hainaos/vc/dialog/UpdateDialog.java create mode 100644 app/src/main/res/drawable/ic_video_update.xml create mode 100644 app/src/main/res/layout/dialog_update.xml diff --git a/app/build.gradle b/app/build.gradle index 82e7456..3d09f37 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { //There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature. minSdkVersion 23 targetSdkVersion 29 - versionCode 16 - versionName "1.1.5" + versionCode 19 + versionName "1.1.8" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/hainaos/vc/activity/category/list/CategoryListActivity.java b/app/src/main/java/com/hainaos/vc/activity/category/list/CategoryListActivity.java index 613b8e6..2f421bc 100644 --- a/app/src/main/java/com/hainaos/vc/activity/category/list/CategoryListActivity.java +++ b/app/src/main/java/com/hainaos/vc/activity/category/list/CategoryListActivity.java @@ -9,9 +9,13 @@ import com.hainaos.vc.R; import com.hainaos.vc.adapter.CategoryAdapter; import com.hainaos.vc.base.mvvm.BaseMvvmActivity; import com.hainaos.vc.bean.CategoryInfo; +import com.hainaos.vc.bean.CategoryUpdateInfo; +import com.hainaos.vc.bean.VideoUpdate; import com.hainaos.vc.databinding.ActivityCategoryListBinding; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; public class CategoryListActivity extends BaseMvvmActivity { private static final String TAG = "CategoryListActivity"; @@ -46,8 +50,26 @@ public class CategoryListActivity extends BaseMvvmActivity() { + @Override + public void onChanged(VideoUpdate videoUpdate) { + if (videoUpdate.getHas_new() == 1) { + mViewModel.getCategoryUpdate(); + } + } + }); + + mViewModel.mCategoryUpdateInfoListData.observe(this, new Observer>() { + @Override + public void onChanged(List categoryUpdateInfos) { + Map map = categoryUpdateInfos.stream().collect(Collectors.toMap(CategoryUpdateInfo::getCategory_uuid, CategoryUpdateInfo::getCount)); + mCategoryAdapter.setCategoryUpdateInfoMap(map); + } + }); + + mViewModel.getCategoryList(); + mViewModel.getVideoUpdate(); } diff --git a/app/src/main/java/com/hainaos/vc/activity/category/list/CategoryListViewModel.java b/app/src/main/java/com/hainaos/vc/activity/category/list/CategoryListViewModel.java index a972ff8..bec3760 100644 --- a/app/src/main/java/com/hainaos/vc/activity/category/list/CategoryListViewModel.java +++ b/app/src/main/java/com/hainaos/vc/activity/category/list/CategoryListViewModel.java @@ -7,9 +7,14 @@ import androidx.lifecycle.MutableLiveData; import com.hainaos.vc.base.mvvm.BaseViewModel; import com.hainaos.vc.bean.BaseResponse; import com.hainaos.vc.bean.CategoryInfo; +import com.hainaos.vc.bean.CategoryUpdateInfo; +import com.hainaos.vc.bean.VideoUpdate; +import com.hainaos.vc.config.CommonConfig; import com.hainaos.vc.databinding.ActivityCategoryListBinding; import com.hainaos.vc.network.NetInterfaceManager; +import com.hainaos.vc.utils.TimeUtils; import com.hjq.toast.Toaster; +import com.tencent.mmkv.MMKV; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; @@ -20,9 +25,10 @@ import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class CategoryListViewModel extends BaseViewModel { - private static final String TAG = "CategoryViewModel"; + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + @Override public ActivityCategoryListBinding getVDBinding() { return binding; @@ -66,4 +72,75 @@ public class CategoryListViewModel extends BaseViewModel mVideoUpdateMutableLiveData = new MutableLiveData<>(); + + public void getVideoUpdate() { + String currentTime = TimeUtils.transferMillisecondToDate(System.currentTimeMillis()); + String time = mMMKV.decodeString(CommonConfig.CATEGORY_VIDEOS_CHECK_UPDATE_TIME, currentTime); + Log.e(TAG, "getVideoUpdate: " + time); + NetInterfaceManager.getInstance().getVideoUpdateObservable(time) + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY)) + .subscribe(new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getVideoUpdate", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse baseResponse) { + Log.e("getVideoUpdate", "onNext: " + baseResponse); + mMMKV.encode(CommonConfig.CATEGORY_VIDEOS_CHECK_UPDATE_TIME, currentTime); + if (baseResponse.code == 200) { + VideoUpdate videoUpdate = baseResponse.data; + mVideoUpdateMutableLiveData.setValue(videoUpdate); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getVideoUpdate", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("getVideoUpdate", "onComplete: "); + } + }); + } + + public MutableLiveData> mCategoryUpdateInfoListData = new MutableLiveData<>(); + + public void getCategoryUpdate() { + String currentTime = TimeUtils.transferMillisecondToDate(System.currentTimeMillis()); + String time = mMMKV.decodeString(CommonConfig.CHECK_CATEGORY_UPDATE_NUMBER_TIME, currentTime); + Log.e(TAG, "getCategoryUpdate: " + time); + NetInterfaceManager.getInstance().getCategoryUpdateObservable(time) + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY)) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getCategoryUpdate", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse> listBaseResponse) { + Log.e("getCategoryUpdate", "onNext: " + listBaseResponse); + if (listBaseResponse.code == 200) { + List categoryUpdateInfos = listBaseResponse.data; + mCategoryUpdateInfoListData.setValue(categoryUpdateInfos); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getCategoryUpdate", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("getCategoryUpdate", "onComplete: "); + } + }); + } } diff --git a/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryActivity.java b/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryActivity.java index dff26c3..6c12cf9 100644 --- a/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryActivity.java +++ b/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryActivity.java @@ -17,6 +17,7 @@ import com.hainaos.vc.bean.CategoryInfo; import com.hainaos.vc.bean.CategoryVideoInfo; import com.hainaos.vc.bean.LocalVideoInfo; import com.hainaos.vc.bean.VideoListData; +import com.hainaos.vc.bean.VideoUpdate; import com.hainaos.vc.databinding.ActivityCategoryLocalBinding; import com.hainaos.vc.fragment.passwd.PasswdDialogFragment; import com.hainaos.vc.utils.FileUtils; @@ -135,6 +136,18 @@ public class LocalCategoryActivity extends BaseMvvmActivity() { + @Override + public void onChanged(VideoUpdate videoUpdate) { + if (videoUpdate.getHas_new() == 1) { + mViewDataBinding.ivUpdate.setVisibility(View.VISIBLE); + } else { + mViewDataBinding.ivUpdate.setVisibility(View.GONE); + } + } + }); + if (TextUtils.isEmpty(mPasswd)) { mViewModel.getVideoList(mCategoryInfo.getFolder()); } else { diff --git a/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryViewModel.java b/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryViewModel.java index ec4572f..bf9b055 100644 --- a/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryViewModel.java +++ b/app/src/main/java/com/hainaos/vc/activity/category/local/LocalCategoryViewModel.java @@ -8,10 +8,14 @@ import com.hainaos.vc.base.mvvm.BaseViewModel; import com.hainaos.vc.bean.BaseResponse; import com.hainaos.vc.bean.LocalVideoInfo; import com.hainaos.vc.bean.VideoListData; +import com.hainaos.vc.bean.VideoUpdate; +import com.hainaos.vc.config.CommonConfig; import com.hainaos.vc.databinding.ActivityCategoryLocalBinding; import com.hainaos.vc.network.NetInterfaceManager; import com.hainaos.vc.utils.FileUtils; +import com.hainaos.vc.utils.TimeUtils; import com.hainaos.vc.utils.VideoUtils; +import com.tencent.mmkv.MMKV; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; @@ -33,9 +37,10 @@ import io.reactivex.rxjava3.schedulers.Schedulers; import wseemann.media.FFmpegMediaMetadataRetriever; public class LocalCategoryViewModel extends BaseViewModel { - private static final String TAG = "LocalCategoryViewModel"; + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + @Override public ActivityCategoryLocalBinding getVDBinding() { return binding; @@ -49,6 +54,7 @@ public class LocalCategoryViewModel extends BaseViewModel> mCategoryVideoInfoListData = new MutableLiveData<>(); public void getVideoList(String uuid, String password) { +// getVideoUpdate(uuid); NetInterfaceManager.getInstance().getVideoListObservable(uuid, password) .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY)) .subscribe(new Observer>() { @@ -138,6 +144,7 @@ public class LocalCategoryViewModel extends BaseViewModel>() { @Override public void onSubscribe(@NonNull Disposable d) { @@ -164,4 +171,40 @@ public class LocalCategoryViewModel extends BaseViewModel mVideoUpdateMutableLiveData = new MutableLiveData<>(); + + public void getVideoUpdate(String uuid) { + String currentTime = TimeUtils.transferMillisecondToDate(System.currentTimeMillis()); + String time = mMMKV.decodeString(uuid, currentTime); + Log.e(TAG, "getVideoUpdate: " + time); + NetInterfaceManager.getInstance().getVideoUpdateObservable(time) + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY)) + .subscribe(new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getVideoUpdate", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse baseResponse) { + Log.e("getVideoUpdate", "onNext: " + baseResponse); + mMMKV.encode(uuid, currentTime); + if (baseResponse.code == 200) { + VideoUpdate videoUpdate = baseResponse.data; + mVideoUpdateMutableLiveData.setValue(videoUpdate); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getVideoUpdate", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("getVideoUpdate", "onComplete: "); + } + }); + } } diff --git a/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoActivity.java b/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoActivity.java index 18cf5b5..59a1c41 100644 --- a/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoActivity.java +++ b/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoActivity.java @@ -17,6 +17,7 @@ import com.hainaos.vc.bean.BaseResponse; import com.hainaos.vc.bean.CategoryInfo; import com.hainaos.vc.bean.CategoryVideoInfo; import com.hainaos.vc.bean.VideoListData; +import com.hainaos.vc.bean.VideoUpdate; import com.hainaos.vc.config.CommonConfig; import com.hainaos.vc.databinding.ActivityCategoryVideoBinding; import com.hainaos.vc.fragment.passwd.PasswdDialogFragment; @@ -146,6 +147,17 @@ public class CategoryVideoActivity extends BaseMvvmActivity() { + @Override + public void onChanged(VideoUpdate videoUpdate) { + if (videoUpdate.getHas_new() == 1) { + mViewDataBinding.ivUpdate.setVisibility(View.VISIBLE); + } else { + mViewDataBinding.ivUpdate.setVisibility(View.GONE); + } + } + }); + mViewModel.getVideoList(mCategoryInfo.getUuid(), mPasswd); } diff --git a/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoViewModel.java b/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoViewModel.java index 63c2a22..475bdbb 100644 --- a/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoViewModel.java +++ b/app/src/main/java/com/hainaos/vc/activity/category/online/CategoryVideoViewModel.java @@ -8,9 +8,13 @@ import com.hainaos.vc.base.mvvm.BaseViewModel; import com.hainaos.vc.bean.BaseResponse; import com.hainaos.vc.bean.LocalVideoInfo; import com.hainaos.vc.bean.VideoListData; +import com.hainaos.vc.bean.VideoUpdate; +import com.hainaos.vc.config.CommonConfig; import com.hainaos.vc.databinding.ActivityCategoryVideoBinding; import com.hainaos.vc.network.NetInterfaceManager; import com.hainaos.vc.utils.FileUtils; +import com.hainaos.vc.utils.TimeUtils; +import com.tencent.mmkv.MMKV; import com.trello.rxlifecycle4.RxLifecycle; import com.trello.rxlifecycle4.android.ActivityEvent; @@ -29,6 +33,8 @@ public class CategoryVideoViewModel extends BaseViewModel> mCategoryVideoInfoListData = new MutableLiveData<>(); public void getVideoList(String uuid, String password) { +// getVideoUpdate(uuid); NetInterfaceManager.getInstance().getVideoListObservable(uuid, password) .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY)) .subscribe(new Observer>() { @@ -97,4 +104,40 @@ public class CategoryVideoViewModel extends BaseViewModel mVideoUpdateMutableLiveData = new MutableLiveData<>(); + + public void getVideoUpdate(String uuid) { + String currentTime = TimeUtils.transferMillisecondToDate(System.currentTimeMillis()); + String time = mMMKV.decodeString(uuid, currentTime); + Log.e(TAG, "getVideoUpdate: " + time); + NetInterfaceManager.getInstance().getVideoUpdateObservable(time) + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY)) + .subscribe(new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getVideoUpdate", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse baseResponse) { + Log.e("getVideoUpdate", "onNext: " + baseResponse); + mMMKV.encode(uuid, currentTime); + if (baseResponse.code == 200) { + VideoUpdate videoUpdate = baseResponse.data; + mVideoUpdateMutableLiveData.setValue(videoUpdate); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getVideoUpdate", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("getVideoUpdate", "onComplete: "); + } + }); + } } diff --git a/app/src/main/java/com/hainaos/vc/activity/main/MainActivity.java b/app/src/main/java/com/hainaos/vc/activity/main/MainActivity.java index 941d4c6..13ec959 100644 --- a/app/src/main/java/com/hainaos/vc/activity/main/MainActivity.java +++ b/app/src/main/java/com/hainaos/vc/activity/main/MainActivity.java @@ -10,8 +10,11 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.util.Log; +import android.view.Gravity; import android.view.KeyEvent; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.Toast; import androidx.core.app.ActivityCompat; @@ -21,15 +24,18 @@ import androidx.lifecycle.Observer; import com.hainaos.vc.BuildConfig; import com.hainaos.vc.R; +import com.hainaos.vc.activity.category.list.CategoryListActivity; import com.hainaos.vc.activity.login.LoginActivity; import com.hainaos.vc.base.BaseFragmentPagerAdapter; import com.hainaos.vc.base.mvvm.BaseMvvmActivity; +import com.hainaos.vc.bean.VideoUpdate; import com.hainaos.vc.bean.uiuios.AppUpdateInfo; import com.hainaos.vc.config.CommonConfig; import com.hainaos.vc.config.Permissions; import com.hainaos.vc.databinding.ActivityMainBinding; import com.hainaos.vc.dialog.PermissionsDialog; import com.hainaos.vc.dialog.PrivacyPolicyDialog; +import com.hainaos.vc.dialog.UpdateDialog; import com.hainaos.vc.fragment.app.AppFragment; import com.hainaos.vc.fragment.category.CategoryFragment; import com.hainaos.vc.utils.ApkUtils; @@ -40,6 +46,8 @@ import com.hainaos.vc.utils.VideoUtils; import com.hjq.permissions.OnPermissionCallback; import com.hjq.permissions.XXPermissions; import com.tencent.mmkv.MMKV; +import com.trello.rxlifecycle4.RxLifecycle; +import com.trello.rxlifecycle4.android.ActivityEvent; import java.io.File; import java.io.FileInputStream; @@ -47,8 +55,12 @@ import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.concurrent.TimeUnit; +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.disposables.CompositeDisposable; +import io.reactivex.rxjava3.subjects.PublishSubject; public class MainActivity extends BaseMvvmActivity { private static final String TAG = "MainActivity"; @@ -61,6 +73,10 @@ public class MainActivity extends BaseMvvmActivity clickSubject = PublishSubject.create(); + private CompositeDisposable disposables = new CompositeDisposable(); + + @Override public boolean setNightMode() { return true; @@ -96,6 +112,16 @@ public class MainActivity extends BaseMvvmActivity { + // 这里执行需要防抖的操作,例如网络请求、计算等 + performAction(); + })); + mViewModel.mAppUpdateInfoUiUiOSData.observe(this, new Observer() { @Override public void onChanged(AppUpdateInfo appUpdateInfo) { @@ -115,8 +141,26 @@ public class MainActivity extends BaseMvvmActivity() { + @Override + public void onChanged(VideoUpdate videoUpdate) { + if (videoUpdate.getHas_new() == 1) { + showUpdateDialog(); + } else { + + } + } + }); + + clickSubject.onNext(new Object()); + } + + private void performAction() { + Log.e(TAG, "performAction: "); mViewModel.checkUpdateUiUiOS(BuildConfig.APPLICATION_ID); mViewModel.checkUpdate(); + mViewModel.getVideoUpdate(); } private void initDatas() { @@ -126,11 +170,51 @@ public class MainActivity extends BaseMvvmActivity { private static final String TAG = "MainViewModel"; + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + @Override public ActivityMainBinding getVDBinding() { return binding; @@ -84,12 +90,12 @@ public class MainViewModel extends BaseViewModel>() { @Override public void onSubscribe(@NonNull Disposable d) { - Log.e("checkUpdate", "onSubscribe: "); + Log.e("checkUpdateUiUiOS", "onSubscribe: "); } @Override public void onNext(@NonNull BaseResponse appUpdateInfoBaseResponse) { - Log.e("checkUpdate", "onNext: " + appUpdateInfoBaseResponse); + Log.e("checkUpdateUiUiOS", "onNext: " + appUpdateInfoBaseResponse); if (appUpdateInfoBaseResponse.code == 200) { AppUpdateInfo appUpdateInfo = appUpdateInfoBaseResponse.data; mAppUpdateInfoUiUiOSData.setValue(appUpdateInfo); @@ -100,13 +106,13 @@ public class MainViewModel extends BaseViewModel mVideoUpdateMutableLiveData = new MutableLiveData<>(); + + public void getVideoUpdate() { + String currentTime = TimeUtils.transferMillisecondToDate(System.currentTimeMillis()); + String time = mMMKV.decodeString(CommonConfig.MAIN_VIDEOS_CHECK_UPDATE_TIME, currentTime); + Log.e(TAG, "getVideoUpdate: " + time); + NetInterfaceManager.getInstance().getVideoUpdateObservable(time) + .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY)) + .subscribe(new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("getVideoUpdate", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse baseResponse) { + Log.e("getVideoUpdate", "onNext: " + baseResponse); + mMMKV.encode(CommonConfig.MAIN_VIDEOS_CHECK_UPDATE_TIME, currentTime); + if (baseResponse.code == 200) { + VideoUpdate videoUpdate = baseResponse.data; + mVideoUpdateMutableLiveData.setValue(videoUpdate); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getVideoUpdate", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("getVideoUpdate", "onComplete: "); + } + }); + } } diff --git a/app/src/main/java/com/hainaos/vc/activity/player/DecryptionPlayerActivity.java b/app/src/main/java/com/hainaos/vc/activity/player/DecryptionPlayerActivity.java index 7cd423a..b7c347e 100644 --- a/app/src/main/java/com/hainaos/vc/activity/player/DecryptionPlayerActivity.java +++ b/app/src/main/java/com/hainaos/vc/activity/player/DecryptionPlayerActivity.java @@ -5,6 +5,7 @@ import android.net.Uri; import android.text.TextUtils; import android.util.Log; import android.view.View; +import android.view.WindowManager; import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.MediaItem; @@ -12,12 +13,13 @@ import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.ProgressiveMediaSource; import com.google.android.exoplayer2.upstream.DataSource; +import com.google.android.exoplayer2.upstream.FileDataSource; import com.google.android.exoplayer2.util.Util; import com.hainaos.vc.R; import com.hainaos.vc.base.mvvm.BaseMvvmActivity; import com.hainaos.vc.databinding.ActivityDecryptionPlayerBinding; import com.hainaos.vc.utils.JgyUtils; -import com.hainaos.vc.video.AesDataSource; +import com.hainaos.vc.video.AesDataSource2; import com.hjq.toast.Toaster; public class DecryptionPlayerActivity extends BaseMvvmActivity { @@ -46,6 +48,8 @@ public class DecryptionPlayerActivity extends BaseMvvmActivity { try { - return new AesDataSource(key, iv); -// DataSource upstream = new FileDataSource(); -// return new AesDataSource2(upstream, key, iv); +// return new AesDataSource(key, iv); + DataSource upstream = new FileDataSource(); + return new AesDataSource2(upstream, key, iv); } catch (Exception e) { Log.e(TAG, "initData: " + e.getMessage()); throw new RuntimeException(e); @@ -131,6 +135,13 @@ public class DecryptionPlayerActivity extends BaseMvvmActivity mCategoryUpdateInfoMap; + + public void setCategoryUpdateInfoMap(Map categoryUpdateInfoMap) { + mCategoryUpdateInfoMap = categoryUpdateInfoMap; + notifyDataSetChanged(); + } + @NonNull @Override public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { @@ -61,6 +69,11 @@ public class CategoryAdapter extends RecyclerView.Adapter> getVideoUpdateObservable(String category_uuid, String current_time) { + String bearerToken = LoginUtils.getInstance().getBearerToken(); + return getVideoApi() + .getVideoUpdate(bearerToken, category_uuid, current_time) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public Observable> getVideoUpdateObservable(String current_time) { + String bearerToken = LoginUtils.getInstance().getBearerToken(); + return getVideoApi() + .getVideoUpdate(bearerToken, current_time) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public Observable>> getCategoryUpdateObservable(String current_time) { + String bearerToken = LoginUtils.getInstance().getBearerToken(); + return getVideoApi() + .categoryUpdateNumber(bearerToken, current_time) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + public Observable> getCheckUpdateObservable() { return mRetrofit.create(AppApi.class) .checkUpdate(BuildConfig.APPLICATION_ID) diff --git a/app/src/main/java/com/hainaos/vc/network/UrlAddress.java b/app/src/main/java/com/hainaos/vc/network/UrlAddress.java index 079c191..fa8dd3f 100644 --- a/app/src/main/java/com/hainaos/vc/network/UrlAddress.java +++ b/app/src/main/java/com/hainaos/vc/network/UrlAddress.java @@ -22,6 +22,10 @@ public class UrlAddress { public static final String VIDEO_LIST = "videos/video-list"; /*点击下载后统计上报*/ public static final String VIDEOS_DOWNLOAD = "videos/download"; + /*检查视频分类更新*/ + public static final String VIDEOS_CHECK_UPDATE = "videos/check-update"; + /*检查分类列表是否有视频更新*/ + public static final String VIDEOS_CATEGORY_UPDATE = "videos/category-update-number"; /*获取修改密码验证码*/ diff --git a/app/src/main/java/com/hainaos/vc/network/api/VideoApi.java b/app/src/main/java/com/hainaos/vc/network/api/VideoApi.java index 40de544..1b056bd 100644 --- a/app/src/main/java/com/hainaos/vc/network/api/VideoApi.java +++ b/app/src/main/java/com/hainaos/vc/network/api/VideoApi.java @@ -2,7 +2,9 @@ package com.hainaos.vc.network.api; import com.hainaos.vc.bean.BaseResponse; import com.hainaos.vc.bean.CategoryInfo; +import com.hainaos.vc.bean.CategoryUpdateInfo; import com.hainaos.vc.bean.VideoListData; +import com.hainaos.vc.bean.VideoUpdate; import com.hainaos.vc.network.UrlAddress; import java.util.List; @@ -34,4 +36,23 @@ public interface VideoApi { @Header("Authorization") String token, @Query("uuid") String uuid ); + + @GET(UrlAddress.VIDEOS_CHECK_UPDATE) + Observable> getVideoUpdate( + @Header("Authorization") String token, + @Query("category_uuid") String category_uuid, + @Query("current_time") String current_time + ); + + @GET(UrlAddress.VIDEOS_CHECK_UPDATE) + Observable> getVideoUpdate( + @Header("Authorization") String token, + @Query("current_time") String current_time + ); + + @GET(UrlAddress.VIDEOS_CATEGORY_UPDATE) + Observable>> categoryUpdateNumber( + @Header("Authorization") String token, + @Query("current_time") String current_time + ); } diff --git a/app/src/main/java/com/hainaos/vc/utils/TimeUtils.java b/app/src/main/java/com/hainaos/vc/utils/TimeUtils.java index 5b89582..d16413d 100644 --- a/app/src/main/java/com/hainaos/vc/utils/TimeUtils.java +++ b/app/src/main/java/com/hainaos/vc/utils/TimeUtils.java @@ -29,4 +29,10 @@ public class TimeUtils { Date date = new Date(second * 1000); return sdf.format(date); } + + public static String transferMillisecondToDate(long millisecond) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(millisecond); + return sdf.format(date); + } } diff --git a/app/src/main/java/com/hainaos/vc/video/AesDataSource2.java b/app/src/main/java/com/hainaos/vc/video/AesDataSource2.java index 6be0322..58282e6 100644 --- a/app/src/main/java/com/hainaos/vc/video/AesDataSource2.java +++ b/app/src/main/java/com/hainaos/vc/video/AesDataSource2.java @@ -2,14 +2,15 @@ package com.hainaos.vc.video; import android.net.Uri; +import androidx.annotation.Nullable; + import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.upstream.DataSource; -import com.google.android.exoplayer2.upstream.DataSourceInputStream; import com.google.android.exoplayer2.upstream.DataSpec; import com.google.android.exoplayer2.upstream.TransferListener; +import java.io.EOFException; import java.io.IOException; -import java.io.InputStream; import java.math.BigInteger; import java.util.List; import java.util.Map; @@ -42,132 +43,80 @@ public class AesDataSource2 implements DataSource { @Override public long open(DataSpec dataSpec) throws IOException { - // 1. 获取请求的绝对位置 + // 1. 先关闭之前的流(如果存在) + close(); + + final int AES_BLOCK_SIZE = 16; long position = dataSpec.position; - // AES 块大小通常为 16 字节 - final int AES_BLOCK_SIZE = 16; - - // 2. 计算块索引 (Block Index) 和 块内偏移 (Offset inside the block) - // 例如:position = 100,blockIndex = 6 (96字节处),offset = 4 + // 2. 计算 CTR 块索引和块内偏移 long blockIndex = position / AES_BLOCK_SIZE; int offsetInBlock = (int) (position % AES_BLOCK_SIZE); - - // 3. 计算对齐后的起始读取位置 (必须是 16 的倍数) long startPosition = blockIndex * AES_BLOCK_SIZE; + // 3. 构建新的 DataSpec,从 16 字节对齐的位置开始读取 + // 如果原始请求了长度,我们需要增加 offsetInBlock 以保证能读够对应的数据 + long requestLength = dataSpec.length != C.LENGTH_UNSET + ? dataSpec.length + offsetInBlock + : C.LENGTH_UNSET; + + DataSpec alignedSpec = dataSpec.buildUpon() + .setPosition(startPosition) + .setLength(requestLength) + .build(); + + // 4. 打开上层数据源并获取实际可读长度 + long upstreamLength = upstream.open(alignedSpec); + try { - // 4. 初始化 Cipher + // 5. 初始化 Cipher Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding"); SecretKeySpec keySpec = new SecretKeySpec(secretKey, "AES"); - // 【关键步骤】:根据 blockIndex 计算新的 IV - // CTR 模式下:NewIV = OriginalIV + blockIndex - byte[] newIv = getAdjustedIv(this.iv, blockIndex); - IvParameterSpec ivSpec = new IvParameterSpec(newIv); - + // 计算调整后的 IV (NewIV = OriginalIV + blockIndex) + byte[] adjustedIv = getAdjustedIv(this.iv, blockIndex); + IvParameterSpec ivSpec = new IvParameterSpec(adjustedIv); cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); - // 5. 让上层数据源 (FileDataSource) 从对齐的位置 (startPosition) 开始读 - // 注意:我们修改了 position,但保持 length 不变 (或者处理 open ended) - long length = dataSpec.length != C.LENGTH_UNSET ? dataSpec.length + offsetInBlock : C.LENGTH_UNSET; + // 6. 包装成解密流 + // 注意:我们直接包装 upstream 提供的 InputStream + cipherInputStream = new CipherInputStream(new UpstreamInputStream(upstream), cipher); - DataSpec newSpec = dataSpec.buildUpon() - .setPosition(startPosition) - .setLength(length) - .build(); - - // 打开上层流 - InputStream inputStream = new DataSourceInputStream(upstream, newSpec); - - // 创建解密流 - cipherInputStream = new CipherInputStream(inputStream, cipher); - - // 6. 【重要】跳过块内的偏移量 - // 因为我们要给 ExoPlayer 返回的是从 dataSpec.position 开始的数据, - // 但我们是从 startPosition (前一个16倍数) 开始解密的,所以前面多读的 offsetInBlock 个字节是无用的。 + // 7. 丢弃块内偏移量多出的字节 if (offsetInBlock > 0) { - forceSkip(cipherInputStream, offsetInBlock); + forceSkip(offsetInBlock); } - opened = true; - - // 计算剩余长度 + // 8. 计算返回给 ExoPlayer 的剩余长度 if (dataSpec.length != C.LENGTH_UNSET) { bytesRemaining = dataSpec.length; + } else if (upstreamLength != C.LENGTH_UNSET) { + bytesRemaining = upstreamLength - offsetInBlock; } else { - long upstreamLength = upstream.open(newSpec); // 这一步其实已经在 DataSourceInputStream 里做过了,这里仅作逻辑参考 - // 通常 upstream.open 返回的是从 startPosition 开始的长度 - // 如果 upstream 支持长度解析: - // bytesRemaining = upstreamLength != C.LENGTH_UNSET ? upstreamLength - offsetInBlock : C.LENGTH_UNSET; bytesRemaining = C.LENGTH_UNSET; } + opened = true; return bytesRemaining; } catch (Exception e) { - throw new IOException(e); - } - } - - /** - * 根据块索引计算新的 IV。 - * CTR 模式将 IV 视为一个大整数 (BigEndian),每过一个块,计数器 +1。 - */ - private byte[] getAdjustedIv(byte[] originalIv, long blockIndex) { - // 使用 BigInteger 处理大数加法,防止溢出 - BigInteger ivVal = new BigInteger(1, originalIv); - BigInteger offset = BigInteger.valueOf(blockIndex); - BigInteger newIvVal = ivVal.add(offset); - - byte[] newIv = newIvVal.toByteArray(); - - // BigInteger.toByteArray() 可能会因为符号位导致长度变为 17 (如果是正数且最高位是1) - // 或者因为数值较小导致长度小于 16。必须确保返回 16 字节。 - byte[] result = new byte[16]; - int srcOffset = newIv.length > 16 ? newIv.length - 16 : 0; - int dstOffset = newIv.length < 16 ? 16 - newIv.length : 0; - int copyLength = newIv.length > 16 ? 16 : newIv.length; - - System.arraycopy(newIv, srcOffset, result, dstOffset, copyLength); - return result; - } - - /** - * 强制跳过指定字节数。CipherInputStream 的 skip 有时不可靠,建议循环 read。 - */ - private void forceSkip(InputStream stream, int bytesToSkip) throws IOException { - long skipped = 0; - byte[] skipBuffer = new byte[1024]; - while (skipped < bytesToSkip) { - int toRead = (int) Math.min(bytesToSkip - skipped, skipBuffer.length); - int read = stream.read(skipBuffer, 0, toRead); - if (read == -1) { - break; - } - skipped += read; + throw new IOException("Failed to initialize AES cipher", e); } } @Override public int read(byte[] buffer, int offset, int readLength) throws IOException { - if (readLength == 0) { - return 0; - } - int bytesToRead = readLength; - if (bytesRemaining != C.LENGTH_UNSET) { - bytesToRead = (int) Math.min(readLength, bytesRemaining); - } - if (bytesToRead == 0) { - return C.RESULT_END_OF_INPUT; - } + if (readLength == 0) return 0; + + // 限制读取长度,不要超过 bytesRemaining + int bytesToRead = (bytesRemaining == C.LENGTH_UNSET) + ? readLength + : (int) Math.min(readLength, bytesRemaining); + + if (bytesToRead <= 0 && bytesRemaining != C.LENGTH_UNSET) return C.RESULT_END_OF_INPUT; int bytesRead = cipherInputStream.read(buffer, offset, bytesToRead); if (bytesRead == -1) { - if (bytesRemaining != C.LENGTH_UNSET) { - // 预期还要读数据但读不到了,抛错 - throw new IOException("End of stream reached prematurely"); - } return C.RESULT_END_OF_INPUT; } @@ -177,6 +126,41 @@ public class AesDataSource2 implements DataSource { return bytesRead; } + private void forceSkip(int bytesToSkip) throws IOException { + int skipped = 0; + byte[] skipBuffer = new byte[Math.min(bytesToSkip, 2048)]; + while (skipped < bytesToSkip) { + int toRead = Math.min(bytesToSkip - skipped, skipBuffer.length); + int read = cipherInputStream.read(skipBuffer, 0, toRead); + if (read == -1) throw new EOFException("Check your offset and file size."); + skipped += read; + } + } + + private byte[] getAdjustedIv(byte[] originalIv, long blockIndex) { + if (blockIndex == 0) return originalIv; + BigInteger ivVal = new BigInteger(1, originalIv); + BigInteger newIvVal = ivVal.add(BigInteger.valueOf(blockIndex)); + byte[] raw = newIvVal.toByteArray(); + byte[] result = new byte[16]; + int length = Math.min(raw.length, 16); + System.arraycopy(raw, Math.max(0, raw.length - 16), result, 16 - length, length); + return result; + } + + @Override + public void close() throws IOException { + if (opened) { + opened = false; + if (cipherInputStream != null) { + cipherInputStream.close(); + cipherInputStream = null; + } + upstream.close(); + } + } + + @Nullable @Override public Uri getUri() { return upstream.getUri(); @@ -187,14 +171,25 @@ public class AesDataSource2 implements DataSource { return upstream.getResponseHeaders(); } - @Override - public void close() throws IOException { - if (opened) { - opened = false; - if (cipherInputStream != null) { - cipherInputStream.close(); // 这也会关闭 upstream - cipherInputStream = null; - } + /** + * 一个简单的内部类,将 DataSource 转为 InputStream + */ + private static final class UpstreamInputStream extends java.io.InputStream { + private final DataSource dataSource; + private final byte[] singleByteArray = new byte[1]; + + public UpstreamInputStream(DataSource dataSource) { + this.dataSource = dataSource; + } + + @Override + public int read() throws IOException { + return read(singleByteArray) == -1 ? -1 : (singleByteArray[0] & 0xFF); + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + return dataSource.read(b, off, len); } } } \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/icon_download_manager.png b/app/src/main/res/drawable-hdpi/icon_download_manager.png index 2065548c1be38b732c7bbf1e50acaf9db6820b1f..6b230709c81bd0a5b90376450ffd008420af8d52 100644 GIT binary patch delta 27140 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 delta 4850 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 diff --git a/app/src/main/res/drawable-hdpi/icon_user_center.png b/app/src/main/res/drawable-hdpi/icon_user_center.png index 3504f34336849700b585f06c75dc0e81db870354..ee2bc0dd7e572693dc5be0cd3c8b80323fe85c71 100644 GIT binary patch delta 52323 zcmZ^KRZyNy6KwF{4#C~s-66QUYjAgef(CbYcXxMqaSssOEl6J6Ip3)|=kmYU-KweW z>bu>U>7G!6xhyEMNEIb%WCVPKFJHbO%gRWq{dbQ4-}M#tzr9wcF0YY{3erHFmsL!X zgM*iyhl_)a?K_(oE1#q|D<_+TB##7-l%zO0skei(q9VVfleve(4@Y-dNg?w8BFq*x z7X1GY%lE&q$wiQ?|DS;Se_bLcb#qtyVaadtzX^E$7dDw0N*pK*78>~SWnx%XQcS~p z-M!aty6&$kF*nEDYwePe-(|?-_BJ)Fy|W#P7&>GK0sdFAmKHIls#NY;H0(i#lnTXB zR1Li%TD7GzGv^{B$buGSxqP$FhyVPGGDc`F-Rd{<)W~@%+i} z&H3%l`{(EFlf;v);aiTK;eg*5sD-VLc#axHIzn^@1 z_sJQg$NzDuy?q7qaDc9VgQnhu;z_Q|FF>cWt9d+9Ag-wXU!xxQ&wzeR>uBq%(A_7e z(`pY60L~xrd&&lJ&E`Mb{e3gIWjdKBreI(kxkvff2Kz@6u|uPTnXYjtUmZ)odaYK zyymTn#~?EfC|(H(j9XlOfOh8y++vcP@Im9&J+yP9eg+R$Jj?zNw2np)Z>$CH>lb%7| z{T7n(&&-W|sYe7Hp>xqk_GEDEqbMwWygAXC^JwR2Z$2B3>eZ8U2uUI$@SI%gX^KeWRUI6Sl<1^3*_Lx19*p>yz!-Z znf2wF6!UI7-Da~Z6N(5OV;>ES!LzQ`Kb72L#vfZmrbkLR#b@(UH#j!dzn%?(I|CpV zHiaL}neTv_$`l4SWV>ryN-1*b7 z%uP=ye?RvL$TKxP(|$e^0xJh>pl4nlt~fWUF}g>r?YGSXT)? z;@sqv#=VN`DmLcJO;bm>pk3kD{`-d~^J&!g^~QqF{cp|6vGtz;Zx>E6Gy(HF%%DS8 zbXzG}(1V3=ILA8c@O$e~z`KX{cU(fmxPv(2`XCB=ltjF)j87pNpm0YaHDe&q$~-@I ziFA7)-q{W_65T9zFVMGV+$%QydHm_mTulB)CU`Lamg0J?3@e|YK3lrx8Qx0)^~fKH zO6{8q;wxJpYed|@!6b!D@gb*M=^cfqXpEj>U%S9$R*KyGYFUv&5*eG8?8SG*)XsuB z<()5Z!>1JNLp^E-5UuuP8y|u30?2&5IocH#ya~xHhBKU_3nLC19!GiV>Q(< zYVYtq{U0ASXk;q;l14O6wjE&$6&bMtgvd+=*VB=3EJ zO=pKE?>6j~-!jgX(1xbJ<2f%W(O#hgS@o{x8RT~;I;V1UXl_r4Xt~K98%88hyCW>6 zFzW^X{xq(KHVruHk?xZ}=#)A5E%EPZyWde3R15%TLbmnU;HGnE!o9-lZuW10u(8gc33 zC6_-O@oE>=X#$bu^~gUPe@eQxxAy2l*pEk%+GN8$LvS{9dDjY_bL4{+<;*5d-X1yq zva_S&8$*b~hIH)1G4|^8AYqv@;{ljcU9Yfjkvf(#HH3q72MToaKN;@K7=@uSOf*DM zXvl-@<~<5k1+{Op+%~x&Evp-N7rq}&(go~o;yoU8gPgvfdQ9^j#cj>>q+#yv@qb}- zJ$q`v;meU03*U4YlfXA`jlEVrfM@ULCK*=nv@*yK!Tf9vWiIuk-1mynegPuEb0maL zH{6*Mi`>cnpF6}71K<1+O}Gwxj(H(0d%8`VW{Fa>M#a<<)@%qV?>8^~r3VyG)+nw~nvGi4Og8 zuP4CcFsSh!aAKJ}|Ks8TuMN0#f%F|O0zcD(r=>i;;P^yQ-r`-YYrcQqEE;BNb|?{Gi`IB!nnfBOuS z-nN1e2Yt~?2>?f`9x3}g`(V>*^Nwln{SB=77K^&;68OD>BQi!bPzm@N)g^n`vBMvD zJ9R*^!^@+=LFg5E^~81spJ%xlm{Zc&Y(~x6`d%TPS(8DFi^S+gcA%_AON zmF?V(o>(#?wFlKKOZm!iy^mnZ9)3KudlEON_N;j2&ZldJ1g^`eKrr2#`;7Lfz~37+ zDB~cx1+P~;7`L%V!8 zX`K?GEjeg`{qY79-gyuBKOr-JEk=^+3H-)*fHg5|JJkIU*pYd+%d_6$tplfzUg#4s zd#Om9&)&94FEAwC8)UfjQ<&S_{vLMi>7=?i@k{vBM?|REng-y8lm)u^uKuCMq`%~Y zpsv9qiveEXmqFq^p}C^18g%Q!FFKk#$cUq|y`LGV~Q@J^1g*jaH1dQnidbJj;s+&bPzJEF@99@B6mAw)=I&Ep2nkSCzAV6Yz3+JI;s}ah_Jp z2Ue8e8AkY2^$ye7^x17PZ*9ZrR2fZKrYDHUp?*tB04bG5qPK28jW?}dcfChm%75-LD1Q+Uz=*b3{4UF+WrKlkXSAbYq}E`tuTi6~`} z)HTWK+aQ}Kiyjp2Ti?a)?&G`5YnfT@BI4lpp*_o3f=jw*gfw#eE0Fb_17c} z!0c8CLwjZ}r`xK5uthUm=+~OrQlkvqK9Y$;>Kh6IS_NKGHe&HHad|TK1<^8o>pch5 zmW4hozb=2=q*Caj2A_GbsEeV{GxO7Onv4Bil=w);8WR2!_HW70^F+Uow=^Vq1YxwlmX{t)Xms?A#XjZ+0CqXd zP#X{`Zp?3tXu;nxX*@$)!v!O&7pHZjCu^wO;G|SazxE)wGCQVmMr?@gG;BiihcFZ# zM(DluLL-GpO7ihA?~NrkRXIVpqaQMJ@HAIh#eQz{1-=e8@&$BqiH?$=D0~#Gia&tl z2-IW(snmX_d-6Q4JhYinQUxnRJ9zz`#LT(8h_T6lYW4k)b+~cz5noF=t9+w;g?4zPh#-l05rhYPQ}zi z6v>;fxXV@RPU!Tj(CJ!I2SxpqAi8rnh>Pb#b&=nz=A5*GVoMW(v?S)6RWI_2-bF*&=K6cv6F#@iLHaKoA- z1{Y<4mXaAG&pTg!wGp{AjqS>bG(kO!6(M*0*?-pJ%74ym8gGMRzPkS^ziD+dX4Z~$ z?6%)SSO_zE9l1)L`l}$E-cw09s=->=Bk*UyN(AjW+D9j!t?Jh(a=svGB-r^t@SH5vIlnm@%tJ0BtF(jn1!c#A^^ZTVCNzW|DN{tgf()W)pe~;G+Ek7=}l=&zy{0 zkop@TD!Ai_@{;qS2BLrmmoEnU9#z*2i}RMhWh=ah)jm#%PVwiUv+Z@z05%^hd=wTJ zjKk=pflN}Qor`6fZ3}!W+cA9>^&OE*Zt$LbK?I>+5KAj2K>G~8YKe@E9^P8CVKCC2 z|H1)x$nW8b*l6+N>p7m%>e-jEw!@S!n>G0g;<{VAT5jk!S-H}ilpvf%S{5VID=S@2aYbbyw_q11%F)Aa~j613+1uOLW|tf zMy%it8r|=^fb(9*ZnUl4A#+)1uHzJG*aBV959ZXf5%3yX>g-2L&t7=0ry8;4MVIuG z=-|fWDAmIEMpZM-*Bo+V`!9-cLu@+)tm&k z>1gH;;7>fM&MtAZQ<%MuVt8k9Mo6$<-p>xHuMLCZsWC3`*`uRbGteqQd)KX}&JorI zh&;#Eg19|&bq&!`ohr~ODD>e!--0Cx36ji;j_PVvr4wAcGe<5GcYVx~S9K2e;b6@Z! zNofZ59QmOx7DEuyJ%~1;yW*lDu3Xx;3^Hrau$ub@OnEN@O}m^m@}?m6NR*yD^u>#c zCN;YX`cU$lSjn{DVe`!ebUX6^$1uw5=kV|MK1FKM`2CD#DP|a6yh(SqqI2v|?DZ(jwV^eupou;hn;=~`QFTw&W zvX(ODZb$a3+tW(qh&=I9eRE-fQIIgfls@4lGyy`kG}U4Q2tKR&oKJE0CXi{ znIqwAt71WERVLUcqJwmjubXa$l^V_lP2`v;?rPbP4s3sy`+1vujQI(VXELHWAt@cL zr8EYbpYKH@)-X1kNmp#das{Od|weo9RVj7JhSlr)F(IB_^IE^JCA1AZ;s zJ2G4Wt@QOQ1HESda_Bd`ey`Z7sE#Uhq36qo%XC}G2Vs$2NBl$3@M`EE$*x_CYO&sI z%#ZqPUMCFT{@sq=iKN8hLLXq)z#!*0SYg!OScJjWo|l8Nz&=ma6qk+AKrP9WB0+cf z_J=mfHBrfpP5!X8&*#7F(;VfWC2$i2-V*SqSjvIWgu1chusM3QcmLyx_#6a2v}(Aq zdnYUT!c3+opx~N)Q)0qo`vteK;aBPQieK1BOT$xd1)>R04be|wG3WsD6k42b!`nMs z1b+U7IYRw=Ob9!ws1XF&TzGZ*7Z(Sc@h!=e*b^*M#E~Vi5`XyglUwivj)04S=9RZ) z@9!RRcA*!W;#ubC#@O!o@NL1c;#{1IRYRZn;mZAPmmZ9EKe1Y*NQLB^!%2#rgQc8as_CP zFk~~5brvWk7!L~C@k}(_34SMLu62WD{-V=%w@68A(e?q&wW@l`^g;yw*CwgoewSXH zfbNaOANsRHw;OeHa$A=sg%D9`lda=hL4!@PxPMu*-VT+Lxlj<(RRAx|@6z_EV|KnV zH6I&DdbB)MhxDJN1K5a_NG*`RGGKA6sT)oM`YBQ9#WPph<>?)K@Kgu64ZJyR+yOm? zQfdQz!Y+DuZgO+dg4vgq$zp{;ekTtBm6Dzh&w(fdE~7q@2}7l-K5{l%7@?#omrXqDw@iDc2gCY(?&u-zHSJ zEoVcMcnLRrgZsPss)MQ)hjR`iP9AJJ0N8&HaGE~vF92R8x z7>XK6t;Jg!R{M}EVq$YAedaXIeLfe4^&L7}Xwa$p`Q@(3ovU5%xKPn4_vWrY>Jl~r zZ5q?>G2q8$z8`!7Ry1`8ufXrH8SIvTxu?}=IzMv=88rbP@}ap6QE zqCk5`nW3VSdVow2IVv|INknVL`to1{ocNd%iUX?tQ9pEyy&cn?j&Kd@lY!EHLHC2x z>B8gh=Ni7tEmn8I&vS=Ch1s|#NvJ--yo;bgKEuTo9 zI-*EaH@)QE6_AL%z{p`5vuDtQPB67&^&gIBWVnVTivdtJ^^2|CAM9hxCH>sa5OtC) zDsSlRTQb|nWV4(DAC4&55q{&qx9uFZIyHLX-8+7C0W{7>QA6e|aS4wi`L?XJaigbs zg)1P^mlf~{Fj8AJ{$AVR(v-wJqwkzGTkH9Up#nPJb@3?|Y4-(E4LMMGB=L z(}OLk1#sJ`LX>E`-gxn_;qL-X+91VSj4Md>y*Z`mGl1%hYh>)TmUwEQV7%7-RE0~#*6t>yP;R|x5^^DLqf`ax`u&iHevO}AmNNj~06jeT?M-b&TqX{c;B|_j2 zLj}THjtWZoxQ<+NfK=@o>fflzhBmzk=>*Vbu0eN+mc>fd#L+8p=}m&mKAM(@X(^m; zt;~>C+aMB58pIIUn+s$Sg@9kBq%ZRD^HdG?>t9o0sUK?Gt%4aAjJ`mK!tSYb`g;GQ zvz$}XW)q8z6#c0H7SfcUFodP~RYBX+CX~`y$AIq7nj_V$=eOnta zPzz6PKU$&!p(u_fW$zuZ%y(3h|cj8a>GOFcAq@(UX8s~kI_A~tS;r7EH-1R1;X z%r>15xNZ4015M$S{l@2jVDO>%o@V^>~-_4tFh^_oPaFZx@z zM*<$D3z86COkCuUtF5$v0GJQK`=_XjUhYDSB;r;U^R8kzyV3qS992+t$hWoo(B#o7 zjzwE*AHzo+WfyphTkCmdbH`(m$;qetd>N2AY)LTq<7Y)X|S zBkY_hK6OJrZtIEiS8tbj?**`XTYrdYux1$ZDQWU*d{wj#CT>hT838>7l@5I2W*pKj zUtHT_`}F~3lM$_RkQ@{A#(@VM$ff_YnPGF2UcgWrpDh0w(o6=weE=&j+C?Q#hbAo( z{DNge%ddxpXlM0riIH})P*Sb2$Hx^1-VJ`#a216J+f}3CK&ZO0yu~|!{i;AsW3UF_ z-=FFbMT0D|#S zJOC_?qea@B;*#}aOCH9xXww_mKsu?laL=U!lVrj46LA)Kh{zqg6RO}uC$zFbyXU)VaSh(=VmBic!kb&w5OKGeR* zI%V3$_*eNx=ZUkj5<-OBuqLWp`_JZQP5TOH{tTDyB(rdlxY6sOq##JX_FmdqcGV)< zom5v%-m!0tZ_GB#z(W-RyrSarW3FLvy>&u1(3X z;#IdCVxTI@IrrJ7^wiAoyva9N9=<+$Mz*4;CWa`E7zM>(Jto1wykeD@t1%$3@{?%V z*vS#2!AX5SGX{vZ&cBt!dt=W((PPTvV{5uaidI$Cr{^nOtb$o8Qn!iiN;8!(>~N{| zRpu)+rV@aCT!Ws~`Z0asB63siMxQbAaz&0>@MLASU4j268!F7NrN~*cEz^(0{ncJe zh?eZ{`D7H zxM*FOs;XRr{9E_^daGefCQ~xs?cl|aMx0q}=^WgV$e+vD9NFDH7@7A z_A>-dio+E6cQ3OVnkls#p}1>W^sj|#Q{1F7ymeiiw<5RzOk^=LT?#){bncX%cG z8f1YWy?bvbBS|yig)MZE&7_Kx1g_)o6p?TZRFRee3@HUz@$laYDm9H|hAYo1k{&af zV)4rMi@r;(k#$_eI=A|j8fAVy&K{ygxMBKArrzU4^C*FN!#lRI3yCxxx|sM#)hNZ$ z1Lm0Fu*wtfhsfMV)jTaVUml8#29jH($KB}RNvGs4ak|a0KGnjH zy^Y~H>A%6uieKd>5aY{IT#DhOV1(Z#@255|hDh%#e>1(=(iaF=NS1W!FT7jH{yqm7 zvk7^4$P`WL@LIhrLltZPCjw8{6)VR8pSN%{FNb#K_VuWE)3I&Y1Y6x~#Hg|=kCf;# zfM+d-kxtJaArQO)Wr%>Mag5c{Cl@BEoCR`)7`h6ssr}VHwt^xX6~H>C!)*=sb7AVw zrIDU~n5}N2Y;mO=iGD&aOC^g=NFt!LQrGh%3%B;@$-D-h7}4SZA?Kq)ja)8r1JQFz zwsTg_ZY(U5lq*t=+7OF<>*?siQAs15w{$~;c1m2c4GVr5wH@yBk}Z&~}MV@K4rIz*3beK-G>kVc8owIU^b`|=&^nGg7|e(+x3 zZ5kGfJn)Gd-*YZ#3yrr+!?? zuik;v0~U7rx)+kmU5NZRg(BPFRa4za9vv#-(7qPJseB8UA+){RT7~-87-Zv6FyP#X zSFx;#)>g11oXF_0E`94_It^6n(IV}nXtI0Se#>A^aNZp&^?R^dN&Lh!ZS<_@fVs= zD8h-w;nayLYS;alGne!C#aj*aI(i`jq#vYLD|?c*`!Em`O{_l^^JD-m>yIMbpZZX9 zuv~HWj+2!6ER>;(7SvwL%EpMjd|Dt+`7`6d!Bc_ly1V*5(z`bO#V6ZkoZtfU9?5HZ z)GoH68ZRN!gXlA3zigIMWf6^+-D{B|lBaQs7qGIU`{zrPl2`rdb2dnP4>3N=$ekg$ zM4YqG#(dN&S&CoFECy&@j59D%)Lcx<`qesa;w8h?C?$_a!hATt-m~|x$!RMd-#2nh zH@a+1kbbYEYB!nm6>d0;;pp~8SZ@7vrju_abek8?$ynUK%VE$E{f9SyNe52WRp(&G zAOSh0|4Nn@lF;vzfLX+m6WMDQBZp%T3@#f*O(YkdD@oN3Og_LfHk?$$N7s$wd>={d#zke&FgxN__*lyU_>gb_dXwE z8?9vL)cXrH;vkmtO%a}U&Ac`2pv7-$2J>A%-^<+p@@^`>udM$e8}$r$KIICySkiWX z+~#)0iJXZhs0Wm?be`h6pi|(JaY$hK2yLyzJFdKQsOn!CP+fBX=`avb}7i z^P#Raga~C;AY!|$$d->S-XUi7z$rPcawV_GODZxOs6D2c7s^(C4+o|$!BZ@Fzt{tG zJu+eTMe05$o{o#1 zh(-Kmt_d(7>I2V^eNS=;kar!vml;y}m~PqHaki~cS4~h9tjA>;Pk!4Fxl4=v*l0%! zc*GScxCWk&R?q4`k0XuB1@7K@(Z>~zFm^7vloPQ`8`uY?J*vncA*%dBbDaakA?N<- z+Ds0+RKarnlAo{h4M)(^Oa>L$?Dsw|xbydmXk*$eOUk!D=)k}jt!s^_QK`b~(hv~j zQ}xT|PESw^1w1t!s2a!QK^{m25L(Bk^`N+G;Q}uEeZmB2pr$p4RMCNO;%oN5biYVg zs;FQ#i+HJR9FM#uO~B)+MLY(WL!%b!5_{SDUi!+rH7_IS8In_YQ9K$yl4tWqs}Ej? zV-t<%HZ8rg&Uj<_e4cUlf!B?D`sh21<*IKE8TzVtO525iP54U_? zPQb$F9hdR~Tz}A6b-qum@N?$h#DDRZX9Xu0$2T&1UB)<}%B7l;{2*h}5{DUkcZZc3 zA5)=^YljY9t6&+>I?eX5S;Ytq4YQ*<{jy53M3vI?erjp>jYgja#dxSqu0_`A+O$yn zWN|9NhX2PSm2~-@fK|sZAvcM5t}B$k0C0--XU8PE-mvRWS)Dx{lI;c;!^+k7sLTY1 z4%Mt<#uQivz1E1(f0M2pNz7IY4^=%&7+Td#-AImEE{NbsPZ;HxjuL10XndHtzEuiIJBFaaw?iECXgmXYiT)TDZ<`M*zLc`Z3POr3d?791APNM zMeal%rSpn>{>KpSR|L$-!@7wI4W$e*3Jt|qICf$4M3O&6#c}jP z%tz5oPFsjJfT)q_AUjLbmo zpAQF1#wEDEw-p^$?Jvw#5S@%+bc{2e3{`>J-WF>NoG@cbPj)!7S>5avKoLwRq2}Y? z=R?f*qens6&l8@nLgtTWUdH!&7}wH?cm9-^tyA=H<0=nGo!=@w{?o$EYvuAqp(vyo zgJ2!PzE{qY5}maVU|p0se>3y~Ttg;ea%U7_l6(fF`(1@vjm&9M1m)f@n~ zxyti%0hmkbuTyug`96owySndoj97o>gah$y6IMp~qGCuFvN`R|YFlt}G0RULDKsTdaXU zPf+G>b@LnaBec{x0JV$YG1D4Z=i4A09BHLJrP|zu^$5#CCV_5DGqaAiWzEV^ekk;3 z)ZtP3;D{CWzZ=$GDl<{tLS-0>F2%aH8P^96)e2#&-QvcF+!xaQpnZbSnE22~uWQ7u z1h_kOK=M?%$6J7&dz}&UVNNXvq0mNviF-j7dI8JCu8M^UXvK1X?YgfhOq4FYoX5r> zemoX@Hk31dyGXu^-f@lI4*W~?GBRZf!>WYVOI+{AozJUIle$a9JBW|{lLNjnJy_AT z32RhCtD2B1yBr6LdE~ny{-~tB7z-^`8_ZYp=x(2TV%6tFPE;nbS|%I>P3$~z)~y}= zVwEh!iLg-zKqTmi|HCgjM!tj3M=`nKbjv9vmU*Q@A*jK#PH+fyYSIFeN7S^=j!c)6 zITb%LT9G5dlUSIS(C?~AT=8fELy^MHQ9|RgE68L)3NF`0d0JaPY!k$ToMPUnPm33- zY#6`V_n8oAMtNZT`F1&)simlm;Hx(Vfv^@*@NEkZsC-Z5spK2iQ)zz`MAs9qT5ITX zgyXSf*Ot(YnOQKnt1G`=n0t%dpgd8I?V;lycK+bk!noeM#fUa@?W>5&cTA;0u4g}G z_%|flGtKAI=ytrBz>aqfiHg=Of0UFYTp#$Vmo+tLw_v~nUw0NfRx7=whc%;!LiZu8 z=X#U@q?T{aI}(e6lUq7HCA1dXWjboE6)b8m{;R!4d&$Dmj4bSMEW>BpIN9Kdg-`PA zew1KP_JrCpVe@y~5VR)Eip9%R;~QsP(WRnF@J;WTD_bkNoqiuS2XMEN|Ltbc;3$*yNs;#PBB6m}Gp+g}*%OOMDyoVL;kM}ggJcVsZ+L3`~#Qth2w}j z(JlB9sD_3XxhE_QcTAo)$KB>p;i{_}4jNw2$jA`zD+BWNf+ZraFyD6`eA+9W2|`kY z6WzJqaOm;A!LwFo3gM%3hc74$RfnemVv)X~g<-9$4mSbnp?D4pnqA0f1H);$hXno4 zS#v&7AFm>Ut|@apVyn^>m3jvaG*Jf$&KM9==quFd>cwc~TF-DT5y?i5iu=o1PtuGr zv(#;Zk-=n4XV2n>!io$q*7Q#*$%p6usVk7z3&tyl>))r=mD-?Dp$R2_?8b!yL@^!q zaeP%1x~x!eaDK%p_)*x3g53+7c;jA>!Q?PCo^L06oir;{SGAY-iVm#Mlw}BfnssV@ z!J1e_#3`A7EmLvo%*?7&BT-_$1w$4e{^txIiSK2;dsY@Ix&CBdCG89+^0Z@%6+TIF zcCbCEj4f5{MP*M{O!9;$XzeruY%mQDT}zs5zgN4kcTkZ{H7-+vL2sQb0a1O=(RF7> z+7IY)F?JgvGyH$4{AjBrgR`Z68|>=F%OW?w#fYNuj4z0juh1Xm+L}0^cB*UsVnBW*iUj`3>wW(z z?Djc{yPwz+Px-qS+Ur8mkwe9n6n4?1LfcZ=`|hU1MlBD65Iu}jEP`?b1844gHLr@3 z?sj&V(J>w*Gi4~g+OyPBvx?R5*0e;&i&B#}A3z*Y*rX~Kt!_;Zc&9VspENJ#_HIRC z%>^&Ry;Ckk7sW&RG#vXi{s667^uC1tX-kBhIj?D#>Y_+0mRnKmk%eltmAmO_ud7GU zq}5|gbk;{dtl}%jJZS)RWa$4LlQ76eX+8kz`z-HjuQ^{PPn23KVv5GhYK^I>5gGhN z4dQubjS2A^O*YN|B#+pHKeAmR%x%+gJ9CqP^jXbf;x>yTG;aK!LyiujI6^y0af0J~ zJj(5-{ZEtNt9p?FJ3b9@?zt+nBabAjdaZzws{RpsyTG%;e_5mDuY3|^?CUEO_jxV1PmynEymS}RMs6**!I@0$n z?z*xn7o8NWo3_{=e~fZ#QaRpBy##c@NE_S?B9GJ6&Vp{qO}c)KF5;Y_HSIVF3yX+z zi`|U&r8YW%&o7m{u|FV8rUexZq+M|)st|wwkIi(Wg^m0GQI>w<=^w~nBw=D8nww-3 zD%gip;T27opodNpVKr%NTEB+DnpLZEeRD-LYPqMV&CiYr(>ib6nbIKEnD zYsrAf3Hc+CC2#X`wrUF*BNq#UG54qCL&hAVnTHuOplVS(8rYGo&^6;iT;fOdvqu|- zuhbwT>(gVXiEgViJ>5t{X)A8epX{s3C}~jF5+3A|kDVX3@R-9DYkhy;Qvai8F-wo1 zt)>xOuqf&It43b&;;E6!Mg3Xsuwj6^ag8Xzq3Kz-Gq#kd)j#&T1GsXsmDt{9#LhRFN3x68 z%4&DZgAWbdki3ipho*qW?5CD3oxdfSwm6Cnj+f~D1zE*96KFb9l`llseG;ETw{rDB zziFYC+4wLuT)eBJgMbR~MMNyh|X zhAW)LG*emXqp;}kB!t1{{P&Tfh5t(=+vd*LEa zk4L%J&W4HWWGq~X;dz+6=Qx$t;|&ISsYYrwfvI9;aa3Ugt&$q;M(G^G>2)4qdRAlM z_0Ec~QqfBV6W-9In>{^nlY8*WLxKaRv{jf6B2N)2aO6TVh39u^E-b!zvvUQ|SdAR0 z8^37Kx@sIt?Ujfd(Xm=KR+=lgJ2F9X%*CQ9WLcZUwLaF$WWE+?nav0%E(9}CX{CMO zQvF-mKtqnLBNShTwmZZKVs?8>f{F6h!8=XjnZ7`i!1>$jMzn7a32JN21rvgwQK}$W zn%J7G+nLz}I9>h*bpB>;+3*B}*nM}R^ZX3V@m&?F_YG3%&7$8W%9hZ4B?tJrZ}`nS zARc@Uo87x~b2jYbN6)73AvNZPGxIrphB7@B1~URU_NOE$fAu%*1l;c~umo+9Ck7kMUdjhEm@k zr~fo+!uCWH>)MigwVkGS(kMjw%eR)P{oPPf_bW>hcY4vLquoN4Y%3iWE3%@Xvf`9A zUm7W)Bj>JWGN}o(reZRW_u6NgMh~ACUqqAnOB-mu*|^c}^-_k5 zB<+ubsn4K#8KamA1@Z#^g?Y9jo+H;XLFG`&O8vDN`s(L+&V=>jZL&S@lxQwaXiu0%mBqEZB~?f2vZgo)K7o~K$!IGLDW9E3Z9ltw#%tQ%HO8+1xV*d5Zx z{ij~Pvg>AL@hmTOZ|9Q{WQqyOBbOpe^&cf04z-+#HFg3yc&$G(tq98}k?Erkn+j)% zq^)lHFj3eY z=^ruSvh((h552hps>HKvAItQQP3JMALk|eNA$ulFCk_u|FIw~b3i6HG5zxMM=T z2MZ;+7RLh0S5W(!*KTlAXU-@Ct+gQb_$`$l#2d^Vt9bz-58TQa= zD=3O5PEsoh?9RXP{1}@&`j*?U8xo|JDm9Bim_lS5Ay-Waz>75ujA#`|lJiIZGizsW zgpkZe2>Ms(Syp#EP}*cVep-`>6ryjgvGtQ`L0L*JhJbRblGX-h1}Z_HCWm#eGYy8^ z4x<#^DBwuF?!bdN%@ACSmgeDvpud^gHRRN-X@aAq?MV_FksYFEpVh{LBsb+2I1W! z%eQ7W8UJJcZs!qqtTJpUo+69G*V2}&by@I?Q+&Y z(5zvIT#;1gIYL6O!XQsP-IB9#<=*nsHR%MrWi2UkL8i-TE^Ljj1%L}&G5FBE8BJnZCTuOrpvk#Hn!v0Xy<~SN%$yY zY#ISZ`ULfx=fWA?HgN4aS6P@=-m;v{e>+s5Q!kiEk?KU%+H%;y^BQ(7`+9AMO~U4A znmZDflhG*fcUyd;mEuA2t*C*YMR~)l{XSnFV8eoJlGa+Eic2E%n3<|j%jg_>r zK*GSMsUS`@?@G(#k`Fi^v@u}5X-}T$;(9>X7-gJsWcrw~2Tj>j$rO#GO5Yg)1*5Du zms`DrCW^qIwNvV=xlz=pk@oZ)DNRyp90MNyQ+M!4mI6UlL7UExvmz6LQaw&DTHEr4 z!YL0FWl;(2R2&!sI)M(9i*O{brpOajf|<9`tfPt#+z*Y7d?~nJ`P3)P3y23K%3B5B za}LTTRm13!Q=cysEE?&RxXz)0pcj*9HB;d}3^^mc;Hu23NYnpDKWGJigru^!YkjGw znoWi~?(Qn!_o*@hee1u(@nc}NGne%83nqt5Y0hdPFJSCFP7proRRN9Z!LshG$KZ)$ zY(Rxmu%+4pS={^ESYgf6g+K5Q`n!qucC2!p}r zG?RTJS!P@5n+@FpXC~FB0pYeM^iePue+8Th;TRaSvY$5a?p|v=p6>G}mlfoOrsbTVXo88-0>Og>Ekc3Qdq0%H^WMa7%(pf4(j#=-u850VlqbC1sP;o~wqgtuVgQ z4j1;7Y}n;Bl~a<|6le~ZYmUX9L9&z4-rtW0*K;D(_s|0%wOq?rUJpAdrK@+lmiWjl zSB_nl{8g5R|0WyICKp#m$`7HJv~Wr)EZCasME|%P%#e@fLZb))x}H$@&D+W3eRA9( zlEQFwiW_mz}(C8dcqdC>mQY_2ZeyjL(A<-XkGw%v>+pLtQ>F>*Qnw9eRUY+~4 zCi_JtD(WI2a#cOy)hunFq}oEo6@BZ*hgj{(B2vQjB!=I;Gw}T`5aX>=h(ds$8!U_< zR<`v9+nAW&L2NXj4{K(cdxd{2x%EPt{E7vZPoO?Y;Y{?ifu6ck8BvJ+cw`#cy=#7I zt4=wEm9EgcQkPBDw&t|cyI`WH!(wjF=?LePLKjb@#$;eKQoKBvPO#)-oRO-kS;Tg( zZELuk-`~o_rNW%YS!`!jZlE4T-OmE!;~wy~-Mo;}X;}ekraDvI3AI#<2z!m)<(9EI z^zlR{I%wP>^J44SVnUnz{!R7U1eG7AUDmvV8n+dh)*Q_f|EPA#*N=iFG^4l}ZpzUD zPft+@+sks>KCdeEwaxGC70p0Z!p+j)X|>cc-ARwa;5G0lzj%7Yny}cfMJCe-b#0mc z=4IfnPz=jt#{bTxw|3f?cM`iZu{@`a6L@LKQJVSje*if^#=o)BEI2LA^4&O5 z33UQXx(8=5sN>dKad5(u+SM<%>1A%wKWI?t&WW<2Nyc}gttEh4c5BBX*=uoRA@JxQ z$rHnx&>2uGDGgRcNBx?)Sp-Kvh*1> zCt*&vvRFt77kHi&CO|PyyjUI8eU5!w`*I)>$&vj9`I_imK7Vs z>e`}fSi~j$fKb|Bt*M!;h*OHOIlDj`f2jbL>c(3{e{b7P-{?K9N$rtRvoy07gb8)0 zSZ&&9n%ZI7UBswS`x`ZM5tCz(6`A^}LZGHkx3L%-_q5mGavee=y(J?si-7p&iHb#R z7pSNpRAaM+GLx=hi9(!8;jm~L^JYmxuTr^*mDqtnxR`3^oZ;PuPO@~7&B5SIx)McbvVQE~H?%tJc1Q|W232DZOr=k7jx8VZVModk?(^x>^J z;wG#ZkMA6>X6Fn;SgvrZs_+^f@K%W6qD=SU2!X%VCwnU>uKw;Ebgm4Rh=&PR$QCY;N-l?6ilfiYQ)Ten*#dTXg8 zatU8BsgY}G3f3J<%Z?{BRP)$nkk*)b^)edw*%mEW3%gRIl*-W(JGkUC;V{@DXWFCQ ze?rj8Rip*YY9V*4Am|;gN3ZQ$L(g>OF%iS7{IOmKj6qb>rF^_05d_w*H687hgeT!< zRUj*`w34M$k)yRYtftch>7u(cPmF4?YtU!>O+5SQCxzNJe)0_vA0z@|BNHEoNg3^ch&k)nvX;a39E z+A7hHOHHw2t15I68KYieiX^SHZCzXRQ`ZFbmFtE=X;4Pez70wq7qpmieT{C#e{>sw zpoEksAZPwmOIDd5=WI1UKkJjEku`lVwpFf)itogktaBLwIil61c+XHf1D+D$u zyg8@1gjH)+vz^y!pi6Ch59JANlzD0zi_!ks32rGoHj%eIP6AyQc^u)dJS2K__7>eN zIBJAQnv;ctu@=gR6!(XqdB9U{)F~{w)DiQPITU>uY;c8)?W}{KSkIgBe?+aq_T zFK8wE!anssudyH$GCjr7e}eZ$AUG3#%bg=A)PNS*7Vqo=|9A8S=u)ZRR$%0E;swt% zi%%Q!C*L>~)av8vuEq~PHDd9@+TahI>Hsy6Hm&;lj?gG2g0P7*7^j`9n+l55Ol-Pr zHKU$XRFqU>;XHYO2ucez3A-d}8qFBTKlu)5K3%7(wr1huOZ4&Ae~$$s09d$7~Y3c%%5rf82_IB*eXg&>afF(sj z$~c0%H$)NcEW$Kye@xL7pgwl6Eo%8&4GRWRlH!o44SQw(iSfMOe<1X+2QA+32^lO3 zvS-1-crNjIhUbT-vHcQSY^9rpPE6~H5lah#p9~vxchg+R>mPnuOT$R>Zjx%ZWn28q{bmcg2{{Od z+QK9+ES>45e>@_3u+cyI3>Tf7KZ}73uR9zyDa%qtTuUmu~f>_ zPbxPK>2}Ko#%^n}uF%g)E6fEC6e;O%y{hzyS58Nr5cgIS_RThf$d8;DtPpZzUbTR! zHGFA8yA9|u*x)I~SbE3*kqWA3sAAL%J_F22RhNa9f2bg9x=5cEA1;84TpY55$Fa!Z zz-7~ya*{?1=IzaV))MkQjnf({P?v~~5~|#_L=a$E)?#ATiw?)^(QbuGvW9Ts#NbAL zi=GEyFr|KO7nFm(SgE&I!q0?&p3Ui_`&74|3G0|hf9Df>?!84(X)>kS+GuymCNagN z(-0off5r&LsR9e@BJ6t3WoSOjFh=9O@ERPorY68+`P@9YsGVkg9xTMv?CtT1_6wgJ zpZE2hZb?Uuty$NVtwRxfJKMH5cu|uNU2})(r*CbudZES=1X&J;v813dxB2*(ogOWV z5Y_jE=2I=hoyeM<60AF%4Gu#cq3~(rG>u7of4Cp*(Vkj7o83=~Job0LDICEJEQfKd z6)8>N#Mfo<_ppM_pKVRXzc7A^oeDJ-^qOrK)$R@x=LFpsZwU*{;N!VdfM9P*H^=MU zH2U>dd@|gmt|s2Ljnw$+jZzt=qBd0|Nz`yGD%n~-kWL>dulG{Q=M;HD80U2Zo}T7i ze~YY@_TeF35z!8Hnz=alYD3*3?EKl^_O@u)d>bz|aFUXjL+#8g{*AmaFh`H2&z0tX{69C?uwv;vPEoqf$zG%sn z&mzvyx65sz5CSOV?Asv}M7AIG&g5k6z z?U>wJH8NUGAtv3_ESkoXE&d-pf5E%#MM;9SwEmG8bmh{43N`XH3VrHyO>e%z^mjjz zuCvk<&0BL$vPXjg;T?q)ChcjE$_}y4e>a~BrP*O|$F=KspeXZpw|$8T;)6VXm|N6^c?TH_HI-c@vzf6r1EYNcN; zg~?nhr=8)EXh5Dy6@^-u#*5v870?lhdFiw)PP7prCCaIQ?s=D@$e?FOLK7|-2r5ge z17@iTjNenGaHqnvvmIBuM-vvwsibPCya^53t0| z1zxGWW~Zgt;$UhjC2?<^e}@)`9*g66o6(Pb^wETOuNt_G6V+(Z*QIE?b-KfjCbGHk zW|*`saynq$<_?^-mh8TiUI>h^)3}uYxJi0)>0?<5xM`@>Sm#qUU%rGof8-xOB6`*6 z)|Cab6($wYx8XKz=>1oQK5=)GvSy93SQcdqv~9Q!QGq8QThA?|e`lc8ZlfL!XW!1w z%^BEiX*jcHlH<$}2_MEpsCGyGP}G(nsJ1yf{yr(djtEtbi;zHPl7Wjwyv2=oALpFKzr!Z zNPuP+n#j^T3-jcYi_E+H&7CK=Uu+J(7&l(~R#L%ZJF4H~T7U6lhr88Km(*&*5 z1|dW)sVXZLZ(1WH^?nE6Ey$JEq!mq)iBS@i!@AXL-|D0AksDY7cvmNIO-CVo2KWi#g4_?(D~+|6_x@=1D5Y1 zp7iMhqpyD3e-%A(bw&3V@wvw4g*v{Jr0R477VkLh(yQF6@4VJksA2l>q;Ea$DdZ3+ zWVq2D$f4jpod+cg!}@V1aF=R5uFs2)Uq36NZc#l6s+|N3r$}i?;IBe+XK1f8wWEb0}~fBn#P_C0UANpxeUM`w-tLdNSG zD)H8u=%y3Z5p68i0=-_91!wN?2u_Zrk<4h#bLS9j6g_t!Tk0Y*?Gb~0mJPr=Sle7m zic}VKvuK)jc)27~Pt4Nl9Jp2to33JHS*hL^e~d?)$XWrPGog&$0O0o8jS?+Z?}le7 z+BBuzOryux2&i#vT?7^FvK`)|-c2X5gd#V{op#Rv$T<85Ya}g>*h%-_HhS^aX(88C zfi3u1N-&jCrpBHvUq9U73nVT@OCacN^)u~;oXOC&iu)Dtf9Z8~numd{N-LMC6LXpf zf5i(=9GdJP+B(zLTFRUiiA=CsP(}LmJA`K6=l)G zO-tOugkv%A|tw?22<7&A(gA(iez_I;~X`1mNx3bZe_hitwlEb zNw#>C{eshy5|0_HrezuW-LrRDx7A0Gf4jW!zD%eY-$p2+pkOz;ptjADFA*FKohid4 zMBEq&2-hD{T*YIjPjnB$}-x&bQxeQ3>D{oCeTT%5+@0LZGeR6Z#88S|wlx0n`NF&?pmO2IE7ev7NwXxPMy-gW z4<&CB#1uFl)H;0kMN*SXH8C_%3u8~u2wHF-+!XWOoZk_MB?ySsJ6lwF z3yxm$mbTUig~ibP6MIb!g=8wpsI~ygn~@gns;;}7buddwDlXQqUsrRBe~RE@pW0y? zq5z6Egv@~jLWNmVGgApsZ`Hl@ zWY0Ue!)7gcH0c*oJ?LEO;%23Eg5nlIkbxs1bh-*RwY?H`@SyK{LV+KBqYRL7;98~n z7032;K`(qxx*$e~5kzfff065fyRMI!HWBNRTje4RHhvUn-dwcp1X}V$fF^F{cU%?~ zAA94P^i8H4TfzEC`mCJc6hH@GsE9=VCd~l0rD7Zc6kUNmZ8U-|3lxf#eW%g zDZ^jg0>U%y0>=uPx7TQdDpGIOTXJ4di82tCi++w)ugTqiQeU>}XUQg=K)kjtFrAjk zOU1v6O$_LIeBSMvKJ<#W-X0oq4^w|Qo4wM0OnBiXSyx?8^*`L)=GOssY!e_zb2}?< z#%0c8WX)c&wKx&&y2svX?evreFNGIJh#~#wpkO= zGn{U7!;z33Jx=MZheWoh*LSTxqrDZTTOKIZs4SsC(}d)*_vb+Rw(LYr8ChPT;p_`a zGo2D#6)$CIB5rkhdy8ba5zksp*ENF0mx8OpS<$rJ_a0>we+-g3;041-S`)gnf+f?Z zTdip+S)*-I8bj_&CtS8_^3qG(Mbt|L!!m~wYt}70mZEVHU$U*$wAN=>PYyV7C1v8}hfE1}o|i86Zs6TY>;-BBsd6|GF`fbl{$g#K2Z zN$I_472a~}f6^76WnD$-PVA_E^S8!xu5P-09t-+%sui*sqEZi!w28m9F3QY?0!V>J z2s9KT-!X3VM_%Q7E<8NAsUl_$Nw9G!LF$rD>dCn0sFUfi?NbNO9lyl6cP(<^B-%zM zN@=eKT8V8{kqFO1aPl+mW?P!5G(v++veO-P_IRY|e{pw@;&5OJ^F&+RQ>8pP7M7;f z4xhdzLCHWkkj*iThN8H>{BMgn*i_Q<@#Y%32le@xlhUVOGWy;Ry%F31k8dT+cQ`81 zxkKeCCp`&XHiYKS7uD!4(b-^|Mu|x84=EJ2A$Ln{qcrv)aKND?DNXNIBDXm1(XH{_ zKm7C?fAs%+_)MpJ66pKBTEcPMuVVzb)DHQga$OAY_*8m9Z?V>TKut6O@q)G-H&2KNnYKj{Oo|`(hf719o%)NF{;tdH`YW7CAUEX>z4$WP= zSHct1&xWvoP+-+LUi-$qEBdP+Qu_EC55{ClR#q&GD266`Nw^A|rO?;7OR0-1VF(n3 z!z2R2-4~W&T%4<^G!yC@UA!9#@{O?|nTUt)dUBhxKO%CRC&hET_y4U2MCT{y&JAt# zf1-2`4$Wdz=$n0>DSCDmWf|+a7c~|^Ax^d^UiKnpdI>cf7z;+q4Z*V*I!DGDjZs!mQq#)_ihNCuW!<~ z{>*Fh>h8uaBN1X9-)@n+&(aAOEuUNCQc3tr)LvRa7Lul`%M~@Vn#a`xV@J)2kzM!* zWjx7F;&8DV{1)CA7kls;zVH8im44~hZqgIaWLUKYaup}x{H$A37A~(z6dG8Oe+S@v zfuA9-tOIxrW@xER|E#qPYtVXjSITz|R@8lBqY!8`7cf-tIjyFgR{X3Y!*0+Z=vL#> zv;su9E)MM4-guOdTlQkJE{jO4tc791NX@gawNP31u%}@PZL2bP9CNC?Sdc+Vr_1mI zHEW9`b_YL6sMQy2*~zlsWgZynf0m%B(l|qpseyF^pZ%$4ZqZME^ag#$-~RM`jeC>} zq@-(3F#$ITxyr@*Ep{@Mh7=M&j}GygapO}F#104vGe5@a?;iG?9fD$0yViGq0S)LF z?ptFOKRF)z!@v0&{ilCxB<9cF7|FTL&}s`}wn%!*XXl=j2@p3j;N0x2e>O2K0%jNY zfx-K24qs5K!;*}H)dna?eGQb^`3;!5N`AsK#3D0Lj++c-6z z9~XLeJn#Sbr!UjL{evU4l3Vn|9ffHU2f8&wxwJFmy=XuQ$8xnke>)GYlquB-RCAHB z=#oQ1zbt16$ApHlrbR!wPF~pFd#^+T93cQV6I75UnhuTSQvRAJ#@2<<8;1(RuSJ&4 zqBB<`bGse3Fhret-YSyWyAdy!|kTRi+oVjovzb`0DNLL*N{!}3uzL^R(pn-Y;ucur5=uQ5?V4f93ly{j z8x%|!bGbz#wB}8xWVjv^|6q0+m*+w;N}DriB1cx*Sw1N>I^2prvXTt#f~L*wRMJQW zO9x3V8eSF;f5pVlb%T5mAm2WDI&mJ>#Dbe*Av!P@xrBr&SOr>W4EqATbxeb|JVAf| z6W8=de)K;5$uD?B-~O&E`i6JirnjCp`u(%cMdG`kSDI7bDQgN@H%N7jrKcpukWxCR zlNFOVD7M-cL&wP($TOVM2$9BhAGyY}V|I#P}Hd-8FE1kFJOJv74dFjL;GwERsiHX z*JNjCm}zT#YrG4qqGUVx)*k)rABlXLBh5H^PNeC;o%-bKNpNRi<{|^XDi%p;H8p(R zRz=31e}po(YNz(WleXH6F`7PcDL}`)2n2dY#KctBlF&VMFA(dBUfNV1onUzsgqZV0 ztlTFB8;-^ur&%rXT*LH|V{e|2qBLzw;J){&Yp3JZIg|iIGXi zum};%gt!;RmgA&{To*33(d`KGUoRSiWERr&c0}Bc58LaXGn1l0Kyu7NgB=BnqHO$ zWL(#55H>5bNV-(pn3H^O6?V_L?u=~qsb@wi|JHl-_da~0Km8LQpVR8ziK2~FAcj06 zl2m8m=6JP=gEkdjSz8Pc;%F0uqq0(tf6pLs+GSDhxsgl#!~@EAG9-Xx_$ya7m;HOqqF$%z|T zYtEq%!||wgSXcn7Bn*^+#_;Ged@Ez)FP6Bx`Q+=f2w9= zNM4_4W?0c$TRVwl!@blJI@_~TGNrh;SuBedVmky6cDnt!cjyOy=|q3w=RZbIjAz_A zdD42C96m41oi_8_K*JS2#_!nfee)p=O8P4sEX_Qm~se!Tgw zz5FJ9<6nDi{NfJXdPeC=&&7KhlVTf_VLO_{iu`W0gjL+M$Z`wT8bkY*r|G}^ai;(7 zS3XHk9pWJ2DR>eMC3EqAe~Y7n2iATf=M!-x*hzFufFWVXJSB2rK^;AclN(MCPm5m| ztL5X@Z_ro$53kWnpT0|Xo*j$z(ENg)SnT=}X^Qtd9lyMqi=^Uqsna3yR49f}8lP5Y zVD=rFaqC;`9`V$~A`0isf@xL5qrrO~UYBYusRdjl(p*S$LyJI6BEiq8==z55U_N4Q69rjlihc9A#zv2vO*jHf~L$*okXfut1LF?c`#| z0bz3VL_c|O{9e3Ae}DeR&h*zm{1QDgX5+1>vY(Ec1bct|M7p*x^#Q0W^90!1X*jRl z(g0|@#)OVzQqD!1lB&MQwqOptb(|cZdU#D=`+EX4oRvagxS@I2QMD zib*1W;lsk`#cdd250?%wbdW(@-rDIBi-eO9vzNFzP(^9Ne{`}GLE&G{Zq=7R-%Xk- zW7lsa2v7GGildKxW&qF}Gr-b?s%2Zav<14)YZi+*4xMSqHCn8HdonKYysIKh@UUzv z3ur6D#B4C)KwB1pHJnPaK+FctQKD3`uvW3loAYwgw}Ppwz-!f3y1#^V&XANiMOW;b zJ9)4=m&`Zge{H9JA83)V7nSZkF&59Ad-U!9>nrp(f9q9xdhEuhO(HK~k6=QGLbhX4 zIsw#u(HRx*ja`C&o0WO5sbpR;E%3}=%Zrj4;hK(|gX#V_DZc85UZ;=z#vQtP@kVSQ z6f~8aZbx<`+LFb?&Fd9;uMT$a40moI6y9gQ{uU6hf8p<}&6E_+UU~+-{dR_}cCit2 zlV2@AdjuW9|58q0`_j{5yjrjh4ladtBd7LP9g8$v2l0ST^!FOZJ@a{ zf*`QvH#PfqlUon2R@M%nGQ!o61LEK+Yg28W=V?;JE`ISO3hBrSr4&-+bsy566Ug zlD)^m7gFRQ;@xn*7Deo^jp6@ zPKFnpw{%Qyl~9J6FLdRL{h0Lg^JL$L%kNNZe+V^3u`o7j?oLrG*~F_{Ikl%Qm?7MCg-5(R{P58A{pF&ptX8|tNzhHKgbb5^xYKx@Y7tfSn8h<~v zZS=}`?cW*k`ft6o&50{Ph;&=C+_Cp*f01XAfP(=&dqQO8dmX#%Tqvi=GZp?Dj#^4} zl16=oQD2Mx5iYt6N6p0S+$_5_EdIL2ccNypc5cpf7pEJ{a|DK`OwAXb8QhBFy*6sS zI}i!nK=ds8%JT#%EMIHv3McDQJJhO|LE%=^NGLe?QUce(zbdsuTBP#fECfwje_8sW zEfaccP;OAOjjj1lw(hvJ4DZ4pP>pBkN`W@s?2|PhKgbK2HXe?LH3X*r`~QDUTQHRAfMXZ zg14%!1NP^#e-Hvm$RZID^lNOM&1yN3ad5ssl;9Gz^IB4te76Sbq`Hcrj-tyruC8rK zy_b|y?Ka}An9#g;qQzn9VYZ^VFYPgg8i6M>TT$CnC$i zlM52V2axC&p)IHj+-wF2C!BElLZ(9GF|l^^*q6PWT)04`vq~#Qc5yj4MA4*jq_ZQ8 z3O9oy_&iO=sJ?z4lk~jNTW$*d(^q$T>Cu_q^BmK&r;T14?t?8J3j0IQ2vwqe`9gH%yerk)TeJ4y?p=L7YT0>)=8YG0o_h;A(YKIjV(_h z^0r3}ipzRp76;2@X(6WP?wuw?!4fFtOlq-!LeC&kC8w<@PHyhbS&(H5fjATdtGhJy z?KN_oRN$$MmRs)Z(a{ldI$7}yTWYs)AShdM>pnace5U2#)8Nj0f2?pZNmKYBcP8w5 zU{d;x$cf7hB3)|!q1Gp%65m@?x$Q39_nTpxR@K@(17}E~{itSyXUT{ySJ}OG!X`eJ z+E1DESy>WAxFvzxZxK4gi725)5{>PzT`S!m6ZOvRjb0dEpLuXiKmBo~FMew5^mk>} zO5PaPbKVWbEoluse}LVE(K>rf_&ei$Z;o*}D)t|KmFV{$Fdf*y?JM8MKmBGXCUWop z2u1>P^o>(&D1ySMhj`I{apWzuSMq~!mJ!Zyt9KxDhy|02#Fmg7WoYCfiduRG$PEu- zT|~VXd8)3Tz|D;dr(O4t`&K5yTpc%hUv_t?HSeWl*p5UgCd-J{ERUn|F5ip7&SV;55 zfG5(Dn!UtaHIi7=T`vp33?oy(u9{We)OtCR;8!0hy?Iu;8+qx|H%|20BcfmY%uc`Y z#+lxIZ==s0e+%b;e2)y^!Le90dqM`5J=u`u6Nprr|S!vz3 zgR5#12&JYR)P>p#w+5f0qhwom)`-q^VxcXY+q?Kie=~25)kc)o8yQ_Bll%x#^YlDP z7Z@;GTvXF+-4d}vPeve1*&AS8vW%PhlD6Mz#DCHfZ;vY#?Yp6E3#m#$!f4Tx;+uV< zWTz?~c5you_?R0T@lwNyT|`}Hxa=4VPN@)%NQ*eD?m(~Uon~U|{V!e#S87n_7?cO& zISBUj#FM5?6Wz4Yn~~#*dQR)wjvRx zcVSj&(<-?zam9yGS~Xu6zD=`eE`hqTHA6$EHBH+1tlFhKOSm%F%B%JiM>pc+JZT8k zed}X7~+Nj)|i_X^z^(og>5=k9&RO)-OE>5Q<6=Vz$PP ze;lXJ>=2YBSW1u!qa<yCuh~R47{^s7$Bd4 zF2M1*PK_<3X!R#f(F_k|Z1MW*f3|D3NGHwo8(g~c)auQRRl;EaZ0{^73xP~~QWt-l zzt=)Q4T}4vVaDyV9UFox!|Zc2JK?0T)wmw6py(yvOM<`inc!I3y;8VI`b#ipyG~N) zkh$_iL5!_UH#kTbbgFh>?gc4p#*&TJR+9Qv!BxrAK}x`&2`-d!V%NFNe}!&9)6!Z@ zRcrECIR#-Rf3LtpQC&NFZS( zV*v&X0wV+E0FGUbQK%S)e}ElV*-0Eb29ipdib*+f2uaF?U6p{bO$7sXnUqt3$f$6{ z z*98leiZ)%N%rlm3wSLf`!9=DA@4b6<_ZT%anZg@PKx{MX{1RWF`>Wdx_RPaz+!E)! zA`rGsV-xR;xx@OVf7+0`%(&jry9CZKrKV!g>|V9g2B)W-6pq^fKucEAD08V5 zZB~!yXfE`S04}(c(p|IRX5A$wzc4ehx+VgNl>KY;;Gf;+QUjZuj=v-YeSJR4DH!39 zF9>;SlpS%4=eqM&Fx~<-Y>$*+>+Q%+5!Py8?VUZF#Y!}~f38>0#`cAXL(&QqoEfF! z^;Gf-spuXwhyYTE%62N-o501?dJhIHA0utW&lhhL%BDs&JxZgGQn-~%us5x4?;hN< zqJc3d^jft`m_eAp<`CZeYk7|{=luTo`&*svAH{HVEk3-iq6=4YDt!}&NkRB+{h~Q-NtE+u=wvzSj99?3*?=ozI-_bgi<49>hJy zA!TppA%#eOn1+&6%&M=*o#SS5PM;sD2qB6XZI#5FxH{?gSSyeg8WqQH(UKCDr6Dh0 zvsLvl@8kQ{<~r;SbL9++N>@nJr%zmEPexQJv~vzuf4!s!Zo5Sqv=79DF$DAJn7O6d z07;5(ys-kE#Uk4-z{fFbVIW|~6jGrFvFCd*X=|^ha^9qShHHzg5_UGRa`68}i`3Pf z%9|5k=5strGxWJwx-FK;F1>vmwg27mZ|<>KsE&r<;cL8R6HSX7V8lktuAF5|dOKWB zHrTude>@%sOgE*wrvR^!g`sv0H15|tDD)e*$Md-}ew|HxcoHZZT|1@42oB{X2D6KD zBUqR~=R%LsZ76B~JFJ`0e64vmEHo)5$}-G@%=Ouj%Z33j?_5~6>}^nn+h*esP_d_G zxi@mKx3~2fbj-FkZ?4r05WAwJ*9|wCm!lAvfAKL{%Wl0JjF2O$jFW{S9`xS|(58Hn zv3QPpF|?!fr5%tQQiM4D5R$IJx-&U5v#%T)`VEnk5iR|X<|*R62WvWX<3U9@=8zqk zCDn|$THaIez67*0hCTpORcHl5L#I6s^VtaBxHtZMW+lq?t4DgvXLS0qmu&RbM^5SG ze-98ndTI0&CrVG;1Q?)w7vPf?oL+e*66ZbuX^IyKLm|geYz#Zklx~g&|Jva|Kl;ZX zpikXt^gB0|e)VyspZj>H_dnC<_H)K?rOTJ->Cv2eR^cVtDSf*-ae?IsDCCCpcf~mA`F)+!jfpj<2CHQS=uplg; z)7~TK_QB6$)(e(URBozcC|0J zlu>d%{axO&1nycd)EqZu7T>ssm@qrkZI5jR^ zbkh?GPnBRM0l3Xj2Oqa^}|xa2E(k^auvk9nKQH=4?9&P$=meN;_{;J88GjnscFYqy~hef85#0DZS3G znT6bAx*R#7tDJ+@SgWn+mO_8hT|Xu2vlc8)fzG~LD$z{8>c}qidF`i1nWA^6;_i$- z^TAHv@MfW}edV|*9u|7#<&*VTH^?B`C(jirTeJ)w8q#c+?yC#33!U@hpM#XskF(h= z*#9zz5~T63j+C8jSE5hloP`y>8z{bgZXui3D#&e5^XI?$L02w1dUb%@yVQY z#D}?@(8b3oI)2^Zm*Gslz5@mXZeQx07mhq}xsVA_6GA9TD^U%j0z%Us%~qsb(M}0j ztK?25TeUj>e?0OzJgV*Xcz(BMV9q$^KkH@Z^cUX1^e0{;^y(|~J-I?pjqBk z-N{sK5(eYCAm&CVYJ#kZ^vxUX#we{OCu}~G7oDEce;<4O{6+MsyJz&1A34(BdS9dW zePVpWxOpx;G;W}iRCmG`rYvnMqu8nI(t;33h%;kQVUmd2gDSGQc+CS6f4C@C z|6&)-Md(rsW<=ZsQ_kF_cpbY_BA40M1{J3QBx+a>=QjMsD?L=hgut3#5Ftz{V=Xz} zqScxWf12K!uo_oi)jIUOWx@q5a&=~00~-%i(@LuzCDjq` z_pLEDh4oV%7`>NZ4mrD^jB#kS4&!OI*S17pf8Fdo*CH4z=!kmlAl8T<7rmrmb^{aU ziSP-d094?O7DDAqo4TT8U65M_vt4-e5CuM&$#m9u~||q zpD5fygIY4Ndn*G(3hA<5D4*T#Y5v>@MD4oE!emc`(w!(F$+IyhlMiKa23cS4uBbE^ za%~L7!srrZj5KfCtxI7?zDI}-Zyo(QpvUtP7Gx60pHOCWt@=l{C zi5F?|oo~D{ex1@UeEcr`^awPgVc6*dUL<7-kyz$#y;Gxc3OU}rPE2#S%qG~mQc zOR(+_?!w-=hgE%0L?Yu)3&kUcY+b4B05@!){RFg7Z#YCYf>2FZ&g`5OW64**`31S* zwm_N<%)l=axQhq-U$a^7PSHT$fAZx0v0(4sr!Ra(qrdVdrf+=R<@Fk#95vCs^Snvt z&uKXMeKRyfT(A6B^_xMFwrhw^+%D)tGHFZl&)%#%fmobrv>q1^Y7+dVAlN7CA9R*+)gOi&Kn4ix5lkaBlQA+}IHODO z`fiR@b?cVU>6N?mJzvu4FTd&1IyIi{v@{$PdFrMvYiOd^tpHw+l~>jtYBb**v2zXl zvfjM;?kJ~h7}(TnZ7B*njzv=yoleQ z(8E_CP%9B;uGi1(EFUmyFgE%=bkX4TP%<_ODUTF-Nt9+>;@k|~TD_VNdb>y2^*CY` z2&RIYmDRdtv^0{Ce_gKN&FR4hQlXPohT~E?w_CH_k}?r|nO*2>s>gJ%>eJHH?Yf#k z$*KcmrJlGM+U5!A1whyvziF}Qw6GPMFH|JxiP=!}`}8N@$n@Qxx6$WZze;nC_uQGr zk2XUy#zMCSeDw=WqaknDIHZP9wLqf$mN8wsXIf|^NuWGje@%TtpX=tC@A*0jT@|SX zx-2~x<^W;83F8AdkzE_eo2_OH;B~q)_)%@MTLkVUTL&we!Cjgf2qKt5jN5d)Hy<5U z=(W?0{=^#|pm)6XjQ+d#-lgyT^;`7JovZZl!;-yS@t@71XwvJ0xai{ZIIWX!m*sL1 z<0%LA%x#Pae`8?wkRDf!_L_{gl{joizvfdpV#;0)^on3<(xna@meiiFp&4_`PK|J0 zQ*Dy@1usHlAjrXO5!SfU_6*Yt*&*&6FT8h6sXrHQUN0skdeGR{dm=EgU>lv?9k=Vp#=3gtl~ekjx1Z8Cea>zA58w3+{l??h>G0Ca^x_k{ zIc>0+e{AE(oZrE;zDYP{WsWGRM|ClW33#Z3xSBxa!7d#KQMmKFuytoH|e=^rl+1er>}k8eR}^le;mfsnm_CCzVIKrD^-fo{7@7ojOR{8u#uhIMd zfAoX&Uwp|K9Y1}Oo_yZySOurJKPPvzT=Wgqop-q>0Z-Oh|3?!PxylSptgP43eFh!L)=V8lR<2qy8TUGw`j-nZEKNtfBT-< zr-3#f6RS9J;#(Y%&K=@RX$AeziG6;Xj@W{L(`FE8+*bk zRq6@t!+ab$b9?-`5XQgz$U*-+PsAwFCXm-A=x(=3Jtw2ff(_Sq=AG zaLx1|>+~eQl@iXa?~_Bd9!yDv4N$$Bsuib#3|WNV#T?wF$XY@`OO3zGf73KHD_V|C zbvjG*QMSn!G`yzmHlu02`TZd9TW8)ZJvAps{CU!2dN2j-CYm_GQ@6*Ba-ZpIKJ!8P zSO38kdds8F(lbw=+o$RW!}>^&i=u_@quwhrf{ZBmPg4AocZ5aPjZ=p1*e8@$=F75` zFeQfxP&K%=vsH>P%lUY{fB2B4F}8S(sNhc}>}F_zvKAeN7GGVdxwN4tDHFiryQGm} zZY5HZ*a*fAUN-fJ{YhQ9e@CKYNe%G01Vs$p{Q8s6b$aooyY#Eyp!CkyUZSV&jZ*6X zRY0o0zTHvAz3P#b-N;G^g(Kiv3{je(aqS#sQb$gTV)1d2a%xc&yM95H3xBNHf~8wq zF@vk!yRE}gRC0qb?;!3v$z67#tHO;8v%(}9TV>?3B7#8 z&CzYi*?VK9(AoInC&sP(#)q!aul=cq$7Xqsp8Lf4ViT-EuZO?()R-$5_CTZ-3t)H& z5}{BHa;m{h=BH&t!b7HDt$zjGiW5qPb{LUW!dp5S=~6~XZ8x=td7^8+i#2G}XIt7! zhTAzsrh`4-L;RgqcWgY4gaKTJ(%2QrK`Az-yE{=(z|LAsj@^ybu0te}!rPT_J62q~oIz39n!_?aoH+ z4h6%ct|Eax^oj+_5b97NQ*y~)?BQ!{TyNRA&XdYc4wfbD7B>$^IVuTp&Qh*t7KfEt zgtCfaKIA2Iz|I|nQ#BEkL)@|X$Phc5Co6qoQgrAt{nQ_OF}?FGH|hCtDxDvpA?XFm z?px8qY&(`lcw;$5aDSa(84b-o6lBjN=`eCIIRXQL^(+;P2aUZzCn-^;v^NTSR~!!M zHEke>l~|NhS+DKvN^K#7OysIv$Qq;z*hJ5uM9OI1bQ4j}zbYy)jigvZK3X*FTwJ%; zR@M@og>uKEHD;su+85uWU;Bp3^jX(0(I@Y^%BIC)n162MH-AC;fZ43VekovB5B$uM z$q_7@NA$q=HUFM8`vF%kx-?fAA6cHHkquHnh>XmpaH|*2+`&o=T}^19fyFF3sQul_ zDcB}C1nRHTnau0fx6`fA1M!A9)O15?HfIdZA@d2OXi8=w}M7f9FP`IAs@J zim2d*><74jJU)7kN3PtapLxeAJ$Sf0YGVyEHP0t^Nq?wzqEfvZ`qU{DY8nfOQE`G= z-rZAHqmN*(3(Na2;R?eMfFqn?LJQejNS{Q`x4Eo$0PY7kxO*G|4i9J3vVxz*r4jA$ z?}ac(OC=Gy3eHB=ozP1^r2r1PCJLo7Q{aH9ePeik+5xH0=Qw9gQ>gkQU;hw&&6{q} zb5GnfxqolV^3^BkZUjR8fcO27r@Z%9OZJRps6|l_;5ACe#;sC!XG)%>#m;CGk^C}D(WRuu3|}wf$B~}S!0CLSpy$H zPY*5yIKXAd%8_Q&i^o=)2<&{INRby}_&zDR|*ts1LP$~AIU(=YvulMzs+JC=sG^em&CMcX^dPzB^xH;V&M1X*jkE*O1Mk38{UF(uFbt!@nIP zGdJvwDSN$pm;TXL2z|~2SLwN9kA0=e#eZr@cKjWWv*uks2*n1JO0J7(uUClvI%OYD zUt@}Q0x^&U1&ycwT&B1UR!+#w8k{%DR=^PEOt6j6q0Bg3Gc^yy!RIAh!+x}wNpp(Y zxcZG0cN(mL2p$TZ3dIeSl+rXWPfEOP_{Z3lDK=CPmAb$*^ zeS#gLJlqiM^4dzyT%}i!IPmU*Eo=a;=I2or+1gzZ)6B>=*}@~tvt#OPChVZX$q?|N zcvGkfd93c>Sw`-jz3nZ$P{T%rt5(@H$pjMw-YMW?KFZ0L$x4^v+D~T@TBp&u9_iMN zyY!u3*y!JT)fKwkY$mabl-6|7Fn>0zTLAS04~jmVi#?76;?yJHo&oy|9a;oqI);#)}0CZ9DgHKc2&%s z3!=$8fW%#O$j#Eje4)i+ComqgYSQOb(>cqho_hE07Wt7z)dN(qLa_z#!RGu@4H0@t zg~c)!F1c;IKS8C(?Gff%9AW1<9cA7brDZ$61gp}-_Yyl={(rsQVq4gxrh%A!5SfUod-o5WzLh&UW(7b@3#GH)U{5f{uNkNZ1 zHjTMtJQkOmNZxg}@P)KlEe8#I#5Ve~Pmde^55DTf^jE)%>Gyf#yRg;&Dt>xho8SckB&R^zkTt^ zf{Sk)L6YOrlu1wKy?x4q9a)Qj zpwid)2mqf)rM7gHE zCa1E@Dd1;haiV#uaJ6^TogY>P%8WpPBE%g*@kz23!f=5KGkkKFkA0h+Av~jzc8j)(y0Bzcs`k zV`ctfAh@2xmIxI4F|(mB@xCQb@(tO2ZofI3`RH+k;yE82wm9|uRTZi?(s5BnCO)HVYd83 z+;K+I+>fg>r39ORRe}W(7PN>5R2cKk^?0-d8f@ln5gNw4px$RsIxy;kkGc~l}Kyfs#NuLe0vZ*N0p|HgF&_+0O2fERm+rWVwO&tEYJ4%mU zZ}dOE?SJZeCiff4l49?oRO(o%dih;;TQsK}*oH@F6z9W2eTfWs2Qi>blc@3GB8Ww~ zvE`w=Wt)-h>;@2+QF{{9#v0AIsr|%KZkIy|m8fV1c~9dullZqBufzKr!S{)m&)BqE zYONz$zyc=LfyX4r&9Usq^mSfE)ZlBX% ze1G$S4%-Rcf`w*+1ibTsb;)ja*(GAD7;k&C9W)zFR~JH)%VAHdC=VQ(&D%vvC@3Rn zlYmsMJaUvg8~g9YK}Opoh(EB6(_r;boNpXwRdc<$;Pk#>1Bq`C z%vxmcZZD7v2xSh5dl7^rLMy?v7hBRo34dCLn7#Mk`NiW_p;WXU)c}| zO__JTZU@grpZSB4myV4wAD1mQ;ox%;kHlueZNj@ANibLOEcf~QgO_ZZ-#!iw2<5cJ zAHN`LmH80Kvb8kTEMrAs4`t7%gMSfmcWjckz2XYJUR)6VbS5N5P z4#q9@WU zAzbE)hMLojYHcRT@AcUSBFck)VvT)m_BjwPkBs*J#?SHLqTp5vJ6QWnqIbfdy>FM2 zbts(ADdOJ9hsj(7arOb-ZGUEp@at-P)X?Jy;1s- z?NWY^7Q$j?=t+6Zt@yOPFiSCpuL0N9CZ$p_f=|_P`Z~I##X^&cYeXiqMh+eIaF%c} zlK{0cDXKXK2F*Ldt`0^m9DlgKUg&-Lwl|tlwviBvd7U~eS>4jRX@5vAFpo1C3LZ@X zjZ)U*>%_N{-a~LUxQ%f12%M!7=OfO4y8)t|{#4OC*99Dw3JCsAY7TV5v5UCxdOI_mO*TF=H$plHw)c^ z$s#~62?b(Y5MI(XI#^F2VPW5WipjdO!weD0Lb%+%rG;S|fu}_w$#3C|+c}+6QqJr8 zlNM7;iV#Kcf2IRP+u;1(==Ob~S3i89x4rBTX8V47G2AVDR)6C;co{9mf#dteY2@?> zdv1(0-=&}KKK+Kr6}X`ec?&lB<|YvwY?NSvQjr-i>WgqD?s5tDab=(nFQsVSSc@a1 z-;8^pAv-P)?ZHARr6+MBk!zFXIUUn_Ms$ItVs(^C8cv9ejhv0T_iLp*(PUpUM^L zMa``849LlNY4=c_ZOG@nQt0}&O(cECT6HK_V6+gOcYn`pLs7E}B8MnDZY{MFz4>5C zfP#3bB?{YEF3(=6`d!TL-`ts{XV9c_MFxS+^etIJoPwTo)t4d@h)Owqx%4vCWWzSg*(j;5 zZYT8CM}LKWwBMuFu0iNz`G%f_DV)*Uamd7wHbb4vIJ-jC@YmXzg`~X_1NgA#b5hi- z$#_T#{++RtoW^`}|_H@|(4wlb#&|u*ZtU697h#{j#G`Fr?tVkDS)z#aTd5i&b}6 zPgt~2D`+PuNzqSvqqNXLc9CioL@l?8a!IY_@}xR^3MAYnB6XBY;?mMsw8iecDyRF~ zs^)BPN;3rnT!GHI0!&qEIMuR03=}>b18%7ToCpjl|JKod6;metc!{I*U^qV4A1P4=_ z61w(vBZ+KrNuy2n0_EIc{O(03Hrz2Mm^m~&#P$ohE`)5OwZ1oP5`a;%*c+j&=Y0Tdd(S`)#7DdwPx_v(dZhH%^Ojt zba!0;1c`3;NN#1vW$>vH29&0IC4ZovOAdW3cx-a%MU7b;UDWgbJeI+evkH3*f6gMO z?}x;qJ2*6KUt?BNBv+99h7Mfv&kPq#E(1$n%bvl(TzmzPW6oUX4)%BFt7$tJ%&Hv( zL$eIB$804wuLbxLuUFIanQD5KXOMW~j#?w%#|wd|+#|c)%Cd%B7+ceaN`F|RePm=Q zdr)8dRna*UN9W7v`*>3>p_3i+27!%dhRi!Lx@`njjcB_ms;q=r+` z)d)!mqLCeEDbkTRgMJc@q<@_zKWOT^BwoLbx70rP5e_nGG_+tjnb)%hJt&5nVROUL z+}iiT(^s5I?~pJBWa^ZiL@rwn7P%5SHF|+h-qdNfMTco0-_1|gjIdg8C^9miFF>5P8m=`*@@c0$)rV@eVI0Qvij ze=nS-V{=n&8#Lu`(OAm98BEjnu6^Cj(>exFLXq{ZNK1037KOQ3B}r;c)RJNX=O%TS zQU@urF!T1Cq!)KWEq|%PbisWvT{}1g?+&#m>`nsZA|wpebBoKyj^Sw`oNmP_*t6<= za2WiwD5)eOGooL?b3K7s`p?&YU#1%b?L#OzaBjyN$Ba&HAK zaSY`4wVd>M6R}RUaTjxQ8!CWsC zre5Y(p7z_|hVSg*gQ29w|H?UWbAqm@6gZNnwm?2T*?($nGSxyD_6W8edc+yKRgyoF zGoO?Zbx%~7eA(CG5v#hVl(QC9q9Go6k9Z#;k*wrK3{DtxD*Os8xOSkw`rf9%aHLp$(Z;JB6VGCtA7BqvvE3?OT9eIL7Cc+{|B*}KIfCJY&0$r!+%A?Ov;@gB zVx>iknSWgYW<>&td4YY;F0-5Vx$Ru$0F*;FDvdC~iC-e~q6Y)nPgGYGiW_2}R}n6c z2MviB#D#vM=fF>L{vk1;E=0l78;MXcelv36h6d!X{oFme^~4FCK8kFP7(yFau|ptb zYhephIec)K$MxX(InbNcOE-kG$Y(QQN-)dYkbei#LAgsdJL^f*)`xmuCn5tE?9gN6 z;%0Xh;mjyh3~?}TM*SyI++?O9g%E%92`N)()H`5fb_F0d4ujV-|Mm5&OwT{D(SP!D zx9IP^;~}~-9{3)cv-!H%1tl%4O|34~h*{`0p<$k?-O8m6Iupwu0kR>Pr0W~kH_~)i zmw&MHM>8puaRs!`V^`hx-@zuOlH$vIP(($OB`XpJ8Ih*tWn7`Vq>P}K%t(|=tU;R( zyitK%fkH2!-;h=m3^xlE>!BD{W&&Bzaj4kJqSTv*$-F&2`20=!o}ai!^1uT%7$Hz4 zMn)ldELw+C;^nOkcgy1v{8+-}sidOn&YPX!v{zJWlQhQXaJ?9<$V*P? z@Biy_`us<3(tq~*9-zzP1>Qw-?^FnFIN9;xE6fpA$`V=jgo6UBiQBNKJC}rBzkf|6 zLRYw?uI>(qY(-TO<96L~gc7L<3Pmh@xd5MNVJK_j`O)K1FeDt#kF;6O z{o_QzDi1nIj2wMr;8V_kb@VZ2DV6gEv`lRAKfn`Dx=;V^-@h@I)it_w#hd*3Ih@0& z8pKt$gyEb`xHEix{YG%fdl=; zcikB;;0FEq&wmkJ8;^5aJzpEa7o>2{kQihNxIw)L3Jrx5kIyxS7ty`*2Y*LUb8*Aa z7bv^+Vq<DyxR0V-6s99{h1jZ9#X@pu#ZJh~ZLL z$)!7L3`fq3(@~^AxH;po&2@Es^*(*+|N1mN_Q40~(q~}WFSZyv8>~7XtMO@;Z?)9K z=h($TOU%#^C~IZd1Yq1zEPpE)-sRs&9O{YzHx;sFCGIQ~i-P!tH?&I<6*W=gj#Evd zLFy&qrJP!>y9mvCZDP{|rHvd-AAUA`#c)xJOQ=>uKLBcT=2?VViS8)p^xm`uhReY|DMy&eeyZ_;jg(yZ+!IXI;HO+Lx0e{q>@^Y^4O5OlNPI> zoOWx$`N^|V)HN^{ompsiD{L%fvY#4$l~$b1b08S$2QFzKOhPKy^(gfbJUj`Kn3FEv zQ#ad|`R1MPRG0JCy>_B>{ESojr6;b^oB#Ja^c`=zPk-P3g;(j}YnRpH_zQ3Wl#qK<)d`rAX;=_OFydnD*kLl4XwSF3~*8$T{mF(mOaZpvSO@*e%S?>VD? z{LAyXU4N(RkNPa>0Kr{DBsYAA=VzRg2rEg0{nL|2~BmrWEU1cPnYB zZ}-nuIqU>4*q+{+q1!jdUp%t51wIdtAdB3<0-q^91iw=4-)uSlXO1$-OSA^^oRCY5GfVJEcGO`Pb=@ ztEW+x-$j#b2kjQ5wX~+xqDD(3st3~RXw)I8>0Y*#tKI1+Ve0L-jo9@bLorG1ykIKt zlphausTOopA8%LkNcbId$h4`P6y}c|-3c zHtB_%q)96eI)xVnpaPVgz7}Z5B8b29kbh6ppJ=c)HDlmB_(XG7)5a!!(WUV-UVfRL zzAf}$kJIaa`PDo0&NtqnfB#Ka=*wPpI+{fjVx5ogKQCb|d0_aW^EaAykzYH~KlqJKcOD;q^T>F=U%_j!_66Gte5THw zpqwQ(XEC^WsqF`hZ${?0aRVrfp3Om+-0U5+9@YfZqr9f{X3k7SkQF&YX~)-|nOv-A z6Q$^3w#B*+$D|4!Mp4m2`0noJo_{9l_BH8oD|>j7sw4N7LoXz^uG6NbNzF|sn6y)w zsG|9n4Qj&i_YYn>rQ`VZ^lhTQ{ocFux8HZ9FMh>c`crQb`noq3F&m|s$ zcc@vV(ibQh4l`Vs4#C1MR;|&GvQ4t*9ON?XC9fa9eMUe2n`iWQfBB4l{bS=xqadM& zF45&zo-X!+fh(R~d)z7YncFVbS-el2GYqa~3U(O!g7=LpKJ*J0tYR*LJ|cQ3O_7;i zkaKj(NCbOc$MM+S+t5?v27jTCg;cdfTm{OZB}mg@R}ZDX=qE*4mpTqUF=-=|B?~od z;XKdbB6K->7Gcj(*~>jj4IKWq$oeo72}7;s)4g_WJkHf?D{}3DY*kp*0Qd4pC}K4+gsix1=!FTrk@OH45uv@EA{df($m z`sW{O^#A;}(ocVMl&w$A=K3YjM#{^%{?}(jR~xYIc(_$z`5r3GJQ#327w!+M?%t#5728F*axKJ4glE$u8kN&CeWWE;}Sqb|#JEsubMMmcBUR?=%*@kdTU86yd*J8cF~ zF%@O1m*GA3d0|xhA=1l0J2KbPWrsQ47Zv4NbvEG(6c&%m8-M=5q?)|HlHt0G*+XXP zi=u&sAz}2JEn81-U7QSy?K{h?=0r5qhti93Ie(jP#g!XTTS33*B|Z0;Lo=ts(4N{* z?S}-8?&K(%PX^c;va5#^qU#&=>of88(kjJ%^OHos`H@clxQ{k|Y^2i{$>>>_-f-=N zKL6!HpZCfm{ho)IUh|;PqjRy0M?7J1-sgWZ5R8@FY+3%gwDH5>>Zs>QdQLCCexOIMZS?8~JH2Wwo>yEyrANo6dHDlOFMELKW#ip^51{*$DcnP8)TG?caAnFnt!^CSz}!qulwYbP9Dx!i!9l;JsRf7VjxG@>|60I za4nE~1pts)XRoK$1 zG)OzmPDiCe=LS65p_>g$6jpu%<>$fi&UGDX< zK^`8P?xD-)^x$~6uU#HD&wpj5S3Yn;k6hX4(s=AEYo`u>g}PK5YD;7F0!~#EV!ajyt~G2y>H~x6+=pb&w}$BjM?_T;9AqA$Mpf z=!T@?a=zXssIkFn5S+*xPRPTleQlcFosMGRiZ2>)odPvHgnx9{Zzf^Cr4&v4NzAr( z^h(G!MKj;sIbVHO*QXK0dO5NgeZ)00?Bv6fy(1>r0ZXec={~a9+}y%_Kg)Gc@^LFE zQ_N3NV{j8oAI5)r{^T0kW+%4s2viJ!w!=3v9? zWeNvOy(>gO-E2}}y4D*?fVpTvOIElJO4Vt^u*n=J*Oniz?_>>S#=kx7ndG`)Tm%xV z)9PrB8W@Uo#A)07n7=KDtRT=6_}MCX&(L-jLvxXLH1vvcY;Keeft`u$wjD3e`WH!bZk^Rf zGj$*6scJBBYti0clS^fGQD>+)K8DM=_N6!(o|3P zm?>>xm48#wEryH461N5$7`H-{L<0H>&>cb3j}29^=t}9z=C^Dr7b(dR)C4UiY#QN5 ziz3a?JA-qh_%LQ^D2(j8ZZwA?&_g+Q66R|Rr5ma2oLQJ82b!#fxxQs&najbHgK{Hr z+e+BDrq7KONIR(+elt?Bb#>}UIGwO-AvWV#1%D5zmGuW?kDdJ+)Mp$yR(`D5H#{%Z zR6cT;;`IxRV-0u5h;ze+OfHm!6N$;>w-WESr3s!31j|^DIYoR5r%#qTVD1I(&P*D2 zWr>7drX)%5rkIzK0T%{*zbLl6jM!BGdcnRz&L2%=qMhfDY z+*(F<)6l__ukdG|`YyC(p7g$+;J)s*{9by>LQNcEE*3osWgP1Is$vTUuP;`TT);(} z;8dSvNJz%WxwKTAY<|S#zRa)!0O{!*Gk*`atw&6#fg0y!RskEGuqSng5h*sawWr)e z2%URqeDbug5-^_Iy4sr?rbe6{dHNIRCzB#?ehB~soEwMFXH^882xn!dtJ@;RAXj3R z#S2-o~4^o!DlZiBZ$BVY@QEZ zzZR{-dbPEg-8{jK5B!ARY}H$=0e{LO7fnUD=K&T-5|7JtTFNcFC*o3G{9E@Km2uTA@vAW!4@+O z7fMlKXsnXdgNSf&Rs$qI^aPtD*yQV}t@rN7Y}U6;w@r80rl0M)eQ12oXMY8x*89H3 z)xFM`yku}_t;8rNb)a}S;Tyb0W`|!pn*L512Rs{OvT%DYvy-p_&%E4Twb#THM4WcJt%|D+)q$4TkTvkCRh{W!pH*w?Xz}$V< z@M4|yCvc6*r8Eoh`IfFm# zK%Ae^nSCOwjMf-Vcurvq+u=qtO9FLheLUas6FxLSt950p_9*Dp^MAYB_or4IoqbKe za$8QW9;cZ;)dOaufOsQuRo&J;r=)XpHcdk?D@~jabAnyp3sGSrQf;aAT)k*YI5cZO zb(k~ZHFL-er0O8W#b9N<3k|2I0HN{IdQ!Ac@HJky%ffFbL^@|GlT$N$+{3}j_f6r& z19WNgNghfpp~GIEHjrYf;U~Ceob}or7Pm&bn;=J&h1*KsAs&dsWp(j^+p~RYNpPWV+}e` z_;TnYF<`A}&sI@Hw>wd`}OWyfgh z$pvXM8h<+$G@hewU44u>#PMNHmk;YUS~tu5+PsO--!N{rb&EOKPp}~vZiw4fE<>c* zxwXb(>)>BiqjK zq4KNjEO%LKOHhQ#YY{wa$zVw*Fm~ntFdp?k9uIJ}$DBi}H)b&@NcpUzQCb4oyUN~bwEHkh19#qf zB}}C7XBkV2`sgM~5t$S8^+FFO!h!N}O~*+>73b-uj<9jzNwE*OK+Rsr9ehjKog{(a z*?;^&B9kIUlOk!bjlOD9`vs4)7Mz0-Db>t~>A9(U+SkP6Vv?(tt7Qlp=2DSH?^+7f z=C(eLD|T8{vnl2Jn&BX`7UUsJ=9o(j?|-fqP9DFoHpclrFbT{A36-7+Awd9a^NPm)7G`x3vtDUmCON+>J2tFpc^{#F@t~DiFBS_mq0vx;-)-rhG!=RMX#T$e1_;;{T(mI+D#i(5 zcq?Oamf&-S15BH@Kn5*I+&N56K9sm+!q-esQZ-p_+!z3ZKwUfgru zmxTG4!%>t_idhs(K~ICS-f&nP7JsLDr>}{aYGi$cq?#$sn zKn{c00efq=uo1E`y#~dk$}z2KI;@h9xg_q!Er{}{Yd`C_=f+= zVBYi;N;3wSyR8btt=P+~-VLSW%|bM?nw4_*YqtbZdaBPty?}4{b*)8b9g|=uv3YKL z*h(BrTyQI5oswUITTJ)>FWQEaQ0byoTUzZ<$XnB@$1yjBo|$4goqx%*66OlgYzthc zBOo1ljH`6V^D_7dhc3q)Wc_y2pknFP&<`y)=?p-X&E_Dpd0uUS{W%^>obz=+&tPa2 zqkmYp-DKDHh7nh$JY zpW~3Y;VxV8gTje6HwDijFt8}k}jJ-2%e*la-8wfI1~QGb|g5W|lTmH=PmS`2Sk8{eTkjEJQ`?do}78yat0*r5KE# zg<8+}MX)Y%9-9;*XlUkP$HZqih&DKoR108%_=qCX%#OZ;(Md2A%z>gr7NyfhLJjER z?g+kVYk%=~=A8_WN`h6Tz5q@Hr~!Cg3EsWDD*z&DEqbv7f@tSs9iJWV=b!DXiMC^Q z3&$09@ur6PSU`aqZQV!5U;alh46-NNq*#$^@NKHxboL(NA}6;Qm2yJ6vpV3$9ujqq z8zoR|zX_1XzCO&^v@ROT(aJkg1kq0og$9wXyMHxh||K#8Z3NGMg8<*^62)l9pA&tG7b<9V>k1@S9WX1DE$ zEPqRl$^2@>V=Za%(bbr@lmteUwJq2k6QJqAjP?jN??+%T(#?QS;n-;iuzc(Iu8;a= z_EId&K~~nGCacs1RU9H%?yy)^V1{h0#86WuUxHDUc7O^?aI&< z3hX=QD09IdyWbeyW-HJji^HYbsRtIt_J8-Q|H#>kmw4)_wQH>2N?)Q$Dl}FYPCN;E zNjQSQrYIx;>jMx&)5yJbZEizS7N--|8RS2qh$Prxw{Kfda)8HXAhD8~LenmZoMGbu zr8PKI7&a5UdXer7TIYbVX4WFrMw&D8ufA6DORAJ<1zA}ee#^-0(Dm>kXd@*BF@I1l z4el66FPF}ova2XUZ|R3ixAo!{x!oDZ-Tb9JgvZNmkL_3-KU){yHxAB!5@j7Kf)1jn znPvCLS~F5%=aLSkMJCJNK7Ph~*Bgo2S`k7@pn5L~drR44*DQg;X?@)Wep+v#C)qm3 z=}oIF=}TBNOU=d8S|^0v66_{*>wkMdU+GdJ12C2C9OTD_p2c(tj>JHJ(Xo+LgGXr- z%CySKP*S(o*@{gOC%wO5N?IL9!n)OZf|V5INSqg|_?gVvP_8DOYlPVryf@{l;zJ*V z8*Cj7pv-VY=pBj)T+fgs7;MML#L1RU$zUp3l3V19*e!B`4XGfsOG*ABHw-W9$RFxtkkc0==GMShOSfbs06i)bWD}uV5y5>AmBt-_C_) z?7qwzhU50!Wph8&KnT)o%c&0IA5LNEA01!#u%8?~<|nCL=HS(AhJFYYpD54Ph7C@4 z456=pAZ17p+_Q|3 z8Qh?4WeaJ(qP$fp9TOECA&(61c-BV2kcexTuW6lIi(uIn&7pgO73lcgH&oCk1kfDYnz;=BJQBV0BFWLWw7X>IAYl@)QGf-hUqEQ?Hk5_e|CKBrN(*%i`4T8 zQ5G~GP&qG4!>}Cv4SxuDUBbzGu`1UCoo4>BqFxt#n4wHLAOGScEN@gY2wI5JnupTH zlf8-C#XNPFU*Nf7vlKsIr^$D)z?M|i^X#}x$qN^^%NC{A+HAo!f;K^m)p$>X1C3L< zM^);Lwr!+d0&j{WAzbT|((m8rIrLNv2`EB!q-bhVfyf}DYJX}Hq18AB8kCXR{vI`Z z_XTB5JcrzVF(+f^M^PHqh3>p#J=)D8pa!inQ8}sZHCts}{f1qwDyW+tsFyO*p3C;s zxcRgF}0$48ze}kHP(l42V?Y6y=))830axGL;~ zx<*7C6-d&qX0;ENB_f0=oKI4?WUOU3h!FA%xy5Pk{2}C~a*q^Y-Hqr@@cepCsuvFn zB?9*%TD4kf3v+1$J32hSj5K*n>W`On>bZnWc~2bnuYV^hZwZY>BhJz*kUv=agn7{h zkN`zxq#1(|jq*n0aN_7UG<5FGZv8OhfIrq+m=y1E4`u;;4^<$CIG|Lt61?>?{?x33 z458EK#&5o6ydRG#w+xeYmw!$AOR(4xg1yho)1FaeinWzGNKh?C>Oq#=q1@2H97;uo!%x=_%eE>y+i03|EJ!U+< znYvTU;rnIIMw(@j=82tewk}M4eGuVq)#A^tv|O(RSGt#JJ-|!!IUbTzDFkvXnStOQ z1tS)9_);+%+O-Sp;bYp1g3l(z1)eA^lk^M5*MCPWc8ZOy#Tz&)@}6|0U~wM-OgNih z3m8~pcxN+yS*0@NuuQC6G}2?LF2xn$5onad>PSL^uhptBJU3Ihq}96i>)fL|o*J*@ ztHw9|sslqVb5@e@SN1|)ozQA=bw$z{0q*wXS|D^jNq6X#-Z$RJuN>d}v5xC#)!2Rt zMt{NM@`JW>Kmp%&(Tx=lu(I_Dx-llS?txS^BCKZQjmc-IOHmnmi>;MPlcQJ zMTWRln@$aWnFi-LT@5>W8LfGMhI@OU+s@6f`a5|q5borFUps5&GUAl9&*P9>AwbQW zzpp^ynrmm6LNvxn7>d+kqssJ>Vc#6;L4O9JM9CFHLfkr55CA0$4i|;a$4fRvRGpd0 zv&Fj=h&LQNl_J|bLSCy74=O^_{jl-IKndz00y|j0$aF!5Ksg0xzvb8L=40cve#Q9m z`y53Sg+G8tANb)`8ubo+y3N2U-cF3{4BAbot#s9d(6l`^7R?tcAO6Lh05{fvQGe~A zlCaWeSA8iA9ZC*+P!2HJofBaVhNhQY9eLkJG?oW^m{|%j1o@2q#Q{nSwe(j z8iq}!@JCA1gmTJ4*Wj^i&KV113+6Y)jqpoFRugiFeFZJsLji4L&?2v<5enAaYs?}>zd`L#~6T{X7d=_`Z%Oa2Lz*@ z1-_j8()hPuIu6{&0(1(7fd)7gfvmx*Zjc#=>pa}5++9v{d{0HyXQx*$gA{&Zyrh4x z96#a*VFBJxjIF0IlC0ah_=?3?<-iE#`I` zs*}{tEam2O>)-eX$7Xu_s5(9w7Dv7~CbZwd=X1~ql7aL;Xs{@Ya6WLE!i0azuFDwx zb1fqn_Vg>l{oeRle`c)MZypbLgFEM>bj>4dDJh0Ei@mD$VTuol&>%IR;QO?D+K7rk zg~%mbvBWfVw-fCVi{@ahl|Oc7F?xgadZLJ4u<}CUAzSn=RkO{h#)FY)_5qSc2%b+7 zF6G|PZ$8_NiLL`6y(TGDZ(o0>hbVL&OXVg3N-(%-p(jTlXH#WKlBU}dsc#N?L1cyc z`xj<)gqzCvS>121h;ERDF4_%!#9^2whTh9|7(O^fX|bHKnS4gIyn9IkyPsk z2ZK+_0RpVox{$)n4Kr?x&*7U#DfVYZuX`_8&6L4BOMU4{RX71O^EH2VDaII=ZULbt zw8ufea5TZd8{;soxx%VR51!`w!=m!m@tyz75QS~cAWVY0!S1HT+{8+v6WeHOF32T) z>JS{RF0LrdmT@v8HjpH>=Fle47hSkyTKZ$us2LNN z-np4>$k7L7o=QV`HhzEVhB-~yka_giVO4rYDUi5ce;+z)H=ytYVwd!$raOz~jS~B^ z1<``k3A%n5KZCx}z2r<}v0<#&I;H4DPmz!s=xVhJz> z$cb*@#IVPvfjC%9s2v~4ko$Eye6+Rx)#Lj5ma)ShPue+^Bp~QV=9{}vp$7E9v3mRp z2$sSHBTdvA;LUj&f{+(6XI7UARI^bI!OGG^Jc2`#Q=jfvE50u#wN<6Y89A2h2j6%| zY9(WicK0NH!61J&y{%HdT3kp%)YU`#Fb9lQSe>IOw{mtu%T0RG=xmw1749=V9Qd6Y z-eilC&ds6CynvIV#vM0pFa4VWMeB$;Gr(o_37kE{Vr`2QDhfq9ZeP#YT_$Zn+iPBv zXxvtndCNh>$tZ2b%{HFbrAKt0D|mwK}&a?Ri11MpbZq%KDyeOyL z(L-c8#=(DtU6c`aGakWYyxD|(F4krY0keK2B zaaLo7Vsk%#pN?^R@64`y)oggm0Wf>lZ=|zEwSM&Bo2zVXQn~s9d*y3ET9Xb}L)9DO z*LRKwfBpE<-yCnz?U0meIe}I7(Yx_Ix_CFU(OWc>o>Z8uwdE?*h@o_dW@Ul>_^#biie*+x_n(?MSu#|v))#pi5EAOV?+B2?=y?%$2rTc*` zibab!x9lT026gEjRp4nCB>CY2FhOD5r#o0&V~;KCC9?d-kj!z*@}>i+Q_$ah?&F+a zfxK2I9NQn49pmRd z-vh!muii}2(BPdVZKoF_?^*+OYZ=_p(%ouGG;8pcN_TqyJ+HLPa?bzwUu{h@2asV^fN}PY5 zYB9})L&Y8ymX5*l+&y_8glWmPsML@USM{ic)qR6~@YK;~d2_DiIcpjsbo3TfS@k8P zbhk+y)zShrQ$8<8+FZY_J+nxDTQ7lwvcg1?5ZPrhu93 z9NxA>R}#a>ycM*NFsU3$bv?qqHJN{&A0EHPp*z;nTvN`+1lp*!F`9dT)W$gduV8tc3W2ySIOxD90#G zxR_?M(^8VZk3?1~URK8iDs(z#pQKrorl=wRPxFr$NIIF* zj(wmoBUe7gW-`N%W3F+7i;fm1Q^Y~@$`4VGe`sp?3v)5HAo77!ryD$#D2%~Mj9QC-Yx0zIG*~w!W~mx`xz6MoxbvKx2Q1sALCZ zgYoQko7@V-snPgn$}H#L$hF(On60^`X$=0(ca9z5l<0;F3JvtCthQjIy1{_q0kv$R z3>lx9*02pBQ*9$hQ!?g=Z)I2cMKf8uGh4~QL?SmOgnB-}SoXV*m z6DF73x;39?jkr4!Urc{2-fT1Cz3e@h$#=&B`Q`C!erEjPUE>@7rATk;@>$Z7u_z^5 z5XV91eTf{7`5MlQT5b&9sZ^!F<&fM~L+Q?3Tp+s|%%OyrUiRl2N}tGJ2aC2Xoct z0vRb?W4D$1PWLq^ z@$=t$Q*JIJhvGM;v7qgPaOLB9x~@CJSF?fTjH(S+_H>YOYoBU%;4brh7Zu@$PIx3o zmby{egZ~ycx5jlGX1SLzW;+Psj71lcS;@mr=+1aw?l$IU#zuO2tecOGfB4aH_CGcr z^*6@*_HU*Em&R;oF5E+aNE$a-1F}jB;7M&v`IZ}x*n`29w+t-mJVeUD`EXpv%QqK80LXu;StVoXK)~1vr z*BtrQOpH(~cYNK)uix{0|Lu>@=lwjN=ly!#|GfYB4CQmh1J9;hw>CY=C(Xyf!Ew^u z%*gJyM*V+yxqt5vXVW>#StU+aO{kW!wz00d2?7ey&@fTg(N_3Y za(HZrm6e`RFe(h|dkbf7bVdI6Ma?I`NAEvY<4ZTAT-p?-Nfqnoztk zu1ovq`k)%OHl=>?dM(PttE)uwf>&WF&ycSKvelXnA_BZ$(KFhnbIHuKAV;P1G6S__ zF5yy#&N7L)zVY=hTeQu0%K)`6(ey~x`e9bF@)wmtLMVw9N!nV7oI;H^rLEO@U)BVu zEThwQEyEbMO{2&B)4z^c%jM04)}hIrzMUey-rgWeX5LA{S<6MaaM6k6?}|gGkl-CT z9|T%_P4}y#x0nVGx5ny&gSxqVTh_lKz~rP9p1Jp#(Bq@*)`H}uMX0#cAm*!Y;q?`b3pPTIEgP{7B%`U{luW{ z^bKzX3X?r8`GP#?QDn)wc%yVZg`m_PH?YMxDFPb@+CA8}Y#j0JjPia+X`8*Mp5Vsf?E+ z7T!1eKvweWhIOol-oE&?1C;KvQ|W6H=q~q9+;Cu4On{OL?L|eZ-~e#&l!dNQ3(`0! z{iyE8{2Yk(Ir-(HPV`DVLOT*X9?d*mlmw#edMAjuzcYT%D3GC-y z;^%P&31gZ8?ATt08IYQzj(hys7;Fdy?xDFpWkHre<0ca$8^!l18BkAE=a0>%yx7zr zZZ29K)HR*0Cpmlc)a!vM|_f&m~@$?NdVledITDnmMdYoyp_5v>Uwl))n8=q zgDy5+EnPy-W*#=)z`JdoA0?%Gdg=|$0ly1-ey=8WK7qcciJKU?udPH_JD7iKFGN0C zxwCh;Yp=LzUb03UMVK}=S`bj{IvA%e*mkcp-#>!zvey~*&5g(a3Rj%dT20`-I~gnw zj&%XRLu&KGi5eUL{-IV=+FBL8XoXaA3OU0Uqk>imKPU}&oBoI%ETdiwk5UNRO?SU; zkDhm|f_|(}ht1Jj39Z`trXyFRThf{w0{s1~dD?BiktomXwZ``=vak&wP@3JT2z{NUdF9FZy^oiY;T0{fPjjG=LR`n!R_oa zwMDOEOaFQTjan91aZN?iVmetpMDes5nLhxh15(jt>0V-H2LN* z0my4Q7Wn+p8XMyk?AGtuiN~3QOd5h>FlIFOX3bf4ll%0hjK;|yP_?aVy5!$J{a@_* zn_VL0iS6&c;B@+V>qt3r5-g#*xKcaa@#6dV^;(7Z%kJ+z)G7dMl-?hrw6p91KUN2@pmkByz6Mu_9RD#70u zWH`bJ<>A=eSFkhtan!2AGOlce(=RYrkGD(4kMh27HQ1&HXsqlH3d}!r+u_95A8WbG z)n~Xfd5neO)-%tPQMvb0i=H22Y1rB(y6fP`O$a-G;&9czgv^7FJyEx;V!wx6nxpYl zM8quGqXAW`pP|u>P_Yi7p=0gsycKyuUmim!teK>PtDif$LO05C0c&Tg48WzR>8=c4 zA&%7V$9C%PjXRfZ7p2ZdPEoZ5aIEq=*5wyU6Tt@lnZs{J?b-254hC}x>lgEePVq7I z32hUlUfbgBBFrImBtkj^I&6V1(sO}(y^Buq%OsuDkz=Yu0x_)whC>Ixl;spYJ;@8+eONw$4CuLVr8AOvvKIeW>K&2oUY_1) z8S9@b$|?s>Wwwz8cfkHmNxty{qMq)YyZj*no2??xg#5!b^W9&LwLeeh{ z1)7}cPV@zfA=slA{nPLge?uA@ zAKR0Fd7H{}51YYJB{2-Rbczhso0gxPaMrwipfrtpUiElX{BlFp<+iIh_e_t>cg{Jf z-;$ldhflW7&TIv&&hdSAyuDVas*F5mZ}#|N%jz<{4&R6{5T98il{|>(J;QF zo-C7$G#tYmGz+zi5f+|s(n2E=n%uGVgNE2!Yva;*%M6jmB z!Zut`%Ja6Vw*2wAMbl*I(n%eYq(IbVrQ3xq`iBon-Fl-LuoPhwc>dHw=7FpTpOuXP zSSI$?;R@&{=P97!R@MzDGxERtpO^3?Erz>btjCU%;V!B-!$}}(ltHs>xP&{LOy70qiIl#Ap%!XTP zPf`xrb~stNb9zU1Up2i`d?*a+n)i8`U5@@Ba_LH(1aB diff --git a/app/src/main/res/drawable/ic_video_update.xml b/app/src/main/res/drawable/ic_video_update.xml new file mode 100644 index 0000000..b403d44 --- /dev/null +++ b/app/src/main/res/drawable/ic_video_update.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/activity_category_local.xml b/app/src/main/res/layout/activity_category_local.xml index 078592a..62afa2c 100644 --- a/app/src/main/res/layout/activity_category_local.xml +++ b/app/src/main/res/layout/activity_category_local.xml @@ -63,6 +63,19 @@ app:layout_constraintTop_toTopOf="parent" tools:text="海纳美业学习机" /> + + - + + + android:layout_height="match_parent" /> - + - - - - - + + + diff --git a/app/src/main/res/layout/activity_category_video.xml b/app/src/main/res/layout/activity_category_video.xml index 8db3131..2b53e8a 100644 --- a/app/src/main/res/layout/activity_category_video.xml +++ b/app/src/main/res/layout/activity_category_video.xml @@ -70,16 +70,30 @@ android:id="@+id/tv_total" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginEnd="16dp" + android:layout_marginEnd="8dp" android:text="视频:0个" android:textColor="@color/black" android:textSize="14sp" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintEnd_toStartOf="@+id/iv_update" app:layout_constraintTop_toTopOf="parent" tools:text="@string/video_total" /> + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_category.xml b/app/src/main/res/layout/item_category.xml index 35255d5..95fdd36 100644 --- a/app/src/main/res/layout/item_category.xml +++ b/app/src/main/res/layout/item_category.xml @@ -28,6 +28,18 @@ app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/icon_category" /> + +