From acce6779de44e24996a23d98b48d4b42f3a588e9 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Fri, 25 May 2018 09:53:11 +0800 Subject: [PATCH 01/80] update supportLibraryVersion 27 --- demo/build.gradle | 19 ++++----- library/build.gradle | 14 +++---- .../springview/widget/SpringView.java | 39 ++++++++++++++++--- 3 files changed, 49 insertions(+), 23 deletions(-) diff --git a/demo/build.gradle b/demo/build.gradle index 9cddc0c..ac2907d 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion "25.0.2" + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { applicationId "com.liaoinstan.demospring" - minSdkVersion 14 - targetSdkVersion 25 + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" } @@ -23,13 +23,10 @@ tasks.withType(JavaCompile) { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:25.3.1' - compile 'com.android.support:design:25.3.1' + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation "com.android.support:appcompat-v7:$supportLibraryVersion" + implementation "com.android.support:design:$supportLibraryVersion" // compile 'com.liaoinstan.springview:library:1.3.0' - compile project(':library') - - //recycleView header - compile 'com.bartoszlipinski:recyclerviewheader2:2.0.1' + implementation project(':library') } diff --git a/library/build.gradle b/library/build.gradle index c958cd6..c467b52 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -3,12 +3,12 @@ apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' android { - compileSdkVersion 25 - buildToolsVersion "25.0.2" + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { - minSdkVersion 14 - targetSdkVersion 25 + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" } @@ -21,9 +21,9 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:25.3.1' - compile 'com.android.support:design:25.3.1' + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation "com.android.support:appcompat-v7:$supportLibraryVersion" + implementation "com.android.support:design:$supportLibraryVersion" } version = "1.3.2" // #CONFIG# // project version diff --git a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java index 886a581..5c3f861 100644 --- a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java +++ b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java @@ -3,6 +3,7 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Rect; +import android.os.Handler; import android.support.design.widget.AppBarLayout; import android.support.v4.view.MotionEventCompat; import android.support.v4.view.ViewCompat; @@ -27,6 +28,7 @@ public class SpringView extends ViewGroup { private Context context; private LayoutInflater inflater; private OverScroller mScroller; + private Handler handler = new Handler(); private OnFreshListener listener; //监听回调 private boolean isCallDown = false; //用于判断是否在下拉时到达临界点 private boolean isCallUp = false; //用于判断是否在上拉时到达临界点 @@ -137,7 +139,7 @@ protected void onFinishInflate() { return; } setPadding(0, 0, 0, 0); - contentView.setPadding(0, contentView.getPaddingTop(), 0, contentView.getPaddingBottom()); + //contentView.setPadding(0, contentView.getPaddingTop(), 0, contentView.getPaddingBottom()); if (headerResoureId != 0) { inflater.inflate(headerResoureId, this, true); header = getChildAt(getChildCount() - 1); @@ -229,9 +231,10 @@ public boolean dispatchTouchEvent(MotionEvent event) { hasCallFull = false; hasCallRefresh = false; mfirstY = event.getY(); - boolean isTop = isChildScrollToTop(); - boolean isBottom = isChildScrollToBottom(); - if (isTop || isBottom) isNeedMyMove = false; +// boolean isTop = isChildScrollToTop(); +// boolean isBottom = isChildScrollToBottom(); +// if (isTop || isBottom) isNeedMyMove = false; + isNeedMyMove = false; break; } case MotionEvent.ACTION_MOVE: @@ -341,7 +344,7 @@ public boolean onTouchEvent(MotionEvent event) { case MotionEvent.ACTION_CANCEL: break; } - return true; + return false; } /** @@ -937,6 +940,19 @@ public void onFinishFreshAndLoad() { } } + public void onFinishFreshAndLoadDelay(int delay) { + handler.postDelayed(new Runnable() { + @Override + public void run() { + onFinishFreshAndLoad(); + } + }, delay); + } + + public void onFinishFreshAndLoadDelay() { + onFinishFreshAndLoadDelay(100); + } + /** * 手动调用该方法使SpringView进入拉动更新的状态 */ @@ -944,6 +960,19 @@ public void callFresh() { _callFresh(); } + public void callFreshDelay(int delay) { + handler.postDelayed(new Runnable() { + @Override + public void run() { + callFresh(); + } + }, delay); + } + + public void callFreshDelay() { + callFreshDelay(100); + } + public void setMoveTime(int time) { this.MOVE_TIME = time; } From 17a6395bac72a85a243bfd414e892c95b20529ef Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Fri, 25 May 2018 09:54:56 +0800 Subject: [PATCH 02/80] update supportLibraryVersion 27 --- build.gradle | 16 +++++++++------- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index a923934..774844c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,17 +1,19 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.1' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' + classpath 'com.android.tools.build:gradle:3.1.2' + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0' + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' } } allprojects { repositories { jcenter() + google() } tasks.withType(Javadoc) { options.addStringOption('Xdoclint:none', '-quiet') @@ -31,9 +33,9 @@ task clean(type: Delete) { } ext { - buildToolsVersion = '25.0.2' - compileSdkVersion = 25 + buildToolsVersion = '27.0.3' + compileSdkVersion = 27 minSdkVersion = 16 - targetSdkVersion = 25 - supportLibraryVersion = '25.3.1' + targetSdkVersion = 27 + supportLibraryVersion = '27.1.0' } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f301b41..2fd8e67 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Oct 21 11:34:03 PDT 2015 +#Fri May 25 09:35:44 CST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip From 6086f1d017fed7bb8488976d1112ff1238ca00ed Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Fri, 25 May 2018 10:08:35 +0800 Subject: [PATCH 03/80] update supportLibraryVersion 27 --- demo/build.gradle | 4 ++-- library/build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/demo/build.gradle b/demo/build.gradle index ac2907d..bde689f 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -27,6 +27,6 @@ dependencies { implementation "com.android.support:appcompat-v7:$supportLibraryVersion" implementation "com.android.support:design:$supportLibraryVersion" -// compile 'com.liaoinstan.springview:library:1.3.0' - implementation project(':library') + implementation 'com.liaoinstan.springview:library:1.3.3' +// implementation project(':library') } diff --git a/library/build.gradle b/library/build.gradle index c467b52..eb3aa82 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation "com.android.support:design:$supportLibraryVersion" } -version = "1.3.2" // #CONFIG# // project version +version = "1.3.3" // #CONFIG# // project version // 根节点添加 def siteUrl = 'https://github.com/liaoinstan/SpringView' // #CONFIG# // project homepage def gitUrl = 'https://github.com/liaoinstan/SpringView.git' // #CONFIG# // project git From b66686564919290826f804db1aae7f528297a1e3 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Fri, 25 May 2018 10:54:40 +0800 Subject: [PATCH 04/80] update to 1.3.3 --- README.md | 9 ++++++--- README_CN.md | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 46f55df..148774c 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Add Spring View in the layout file, note that Spring View and ScrollView have th app:header="@layout/myheader" app:footer="@layout/myfooter"> - @@ -68,7 +68,7 @@ springView.setListener(new SpringView.OnFreshListener() { use Gradle: ``` dependencies { - compile 'com.liaoinstan.springview:library:1.3.2' + compile 'com.liaoinstan.springview:library:1.3.3' } ``` or Maven: @@ -76,7 +76,7 @@ or Maven: com.liaoinstan.springview library - 1.3.2 + 1.3.3 pom ``` @@ -84,6 +84,9 @@ or Maven: **Update log** -------- +####**v1.3.3** + - Optimize several experiential issues,Added onFinishFreshAndLoadDelay(int delay), callFreshDelay(int delay) method,Optimizing performance with BottomSheetBehavior,Optimize the performance used in BottomSheetDialog + ####**v1.3.2** - fix the bug of the linkage damping of AppBarLayout in the case of null data, new setEnableFooter(Boolean), setEnableHeader(Boolean) disable or enable header/footer. diff --git a/README_CN.md b/README_CN.md index f8b00c8..2bdb7e0 100644 --- a/README_CN.md +++ b/README_CN.md @@ -35,7 +35,7 @@ SpringView app:header="@layout/myheader" app:footer="@layout/myfooter"> -             @@ -68,7 +68,7 @@ springView.setListener(new SpringView.OnFreshListener() { 使用 Gradle: ``` dependencies { - compile 'com.liaoinstan.springview:library:1.3.2' + compile 'com.liaoinstan.springview:library:1.3.3' } ``` 或者 Maven: @@ -76,7 +76,7 @@ dependencies { com.liaoinstan.springview library - 1.3.2 + 1.3.3 pom ``` @@ -84,6 +84,9 @@ dependencies { **更新日志** -------- +####**v1.3.3** + - 优化几个体验性问题,新增onFinishFreshAndLoadDelay(int delay),callFreshDelay(int delay)方法,优化和BottomSheetBehavior联用的表现,优化在BottomSheetDialog中使用的表现 + ####**v1.3.2** - 修复空数据情况下和AppBarLayout联动阻尼的bug,新增setEnableFooter(boolean),setEnableHeader(boolean)禁用或启用header/footer From e69250d783b7e0a42cbddf21b0f60018c8a8c2a8 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Mon, 11 Jun 2018 10:17:52 +0800 Subject: [PATCH 05/80] fix bug --- .../main/java/com/liaoinstan/springview/widget/SpringView.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java index 5c3f861..4798fe3 100644 --- a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java +++ b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java @@ -586,7 +586,9 @@ private boolean isNeedMyMove() { return false; } + //在完成全部动作后会回调此方法 private void callOnAfterFullAnim() { + //如果在回弹动作中没有进行回调,那么在这里进行 if (callFreshORload != 0) { callOnFinishAnim(); } @@ -604,6 +606,7 @@ private void callOnAfterFullAnim() { } } + //在回弹到刷新位置的时候会回调此方法 private void callOnAfterRefreshAnim() { if (type == Type.FOLLOW) { if (isTop()) { From b96e5f15dc9f301dbbfcd55a6d13daaba5417df5 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Mon, 11 Jun 2018 14:30:08 +0800 Subject: [PATCH 06/80] add new type DRAG: springView.setType(Type.DRAG) --- demo/build.gradle | 4 +- .../demospring/test/TestActivity.java | 3 + .../demospring/warning/WarningActivity.java | 18 +- demo/src/main/res/layout/activity_demo3.xml | 2 - demo/src/main/res/layout/activity_test.xml | 7 + demo/src/main/res/layout/activity_warning.xml | 94 ++---- demo/src/main/res/layout/header_recycle.xml | 13 - .../springview/widget/SpringView.java | 286 +++++------------- library/src/main/res/values/attrs.xml | 1 + 9 files changed, 118 insertions(+), 310 deletions(-) delete mode 100644 demo/src/main/res/layout/header_recycle.xml diff --git a/demo/build.gradle b/demo/build.gradle index bde689f..d9a31cf 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -27,6 +27,6 @@ dependencies { implementation "com.android.support:appcompat-v7:$supportLibraryVersion" implementation "com.android.support:design:$supportLibraryVersion" - implementation 'com.liaoinstan.springview:library:1.3.3' -// implementation project(':library') +// implementation 'com.liaoinstan.springview:library:1.3.3' + implementation project(':library') } diff --git a/demo/src/main/java/com/liaoinstan/demospring/test/TestActivity.java b/demo/src/main/java/com/liaoinstan/demospring/test/TestActivity.java index 73e0cb6..0f3e715 100644 --- a/demo/src/main/java/com/liaoinstan/demospring/test/TestActivity.java +++ b/demo/src/main/java/com/liaoinstan/demospring/test/TestActivity.java @@ -61,6 +61,9 @@ public void onCheckedChanged(RadioGroup group, int checkedId) { case R.id.follow: springView.setType(SpringView.Type.FOLLOW); break; + case R.id.drag: + springView.setType(SpringView.Type.DRAG); + break; case R.id.both: springView.setGive(SpringView.Give.BOTH); break; diff --git a/demo/src/main/java/com/liaoinstan/demospring/warning/WarningActivity.java b/demo/src/main/java/com/liaoinstan/demospring/warning/WarningActivity.java index f356871..c4c8fb8 100644 --- a/demo/src/main/java/com/liaoinstan/demospring/warning/WarningActivity.java +++ b/demo/src/main/java/com/liaoinstan/demospring/warning/WarningActivity.java @@ -12,7 +12,7 @@ import com.liaoinstan.springview.utils.DensityUtil; import com.liaoinstan.springview.widget.SpringView; -public class WarningActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener { +public class WarningActivity extends AppCompatActivity { private TextView textView; private SpringView springView; @@ -24,8 +24,6 @@ protected void onCreate(Bundle savedInstanceState) { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); - ((RadioGroup) findViewById(R.id.group_text)).setOnCheckedChangeListener(this); - springView = (SpringView) findViewById(R.id.springview); springView.setListener(new SpringView.OnFreshListener() { @Override @@ -50,18 +48,4 @@ public void run() { }); springView.setHeader(new WarningHeader()); } - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - switch (checkedId) { - case R.id.setwrap: - textView = (TextView) springView.getHeaderView().findViewById(R.id.textView); - textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; - break; - case R.id.sethard: - textView = (TextView) springView.getHeaderView().findViewById(R.id.textView); - textView.getLayoutParams().width = DensityUtil.dp2px(120); - break; - } - } } diff --git a/demo/src/main/res/layout/activity_demo3.xml b/demo/src/main/res/layout/activity_demo3.xml index 1f622c9..f8470c5 100644 --- a/demo/src/main/res/layout/activity_demo3.xml +++ b/demo/src/main/res/layout/activity_demo3.xml @@ -33,8 +33,6 @@ android:layout_height="match_parent" android:layout_weight="1" android:background="#ffffff" - app:footer="@layout/header_recycle" - app:header="@layout/header_recycle" app:type="follow"> diff --git a/demo/src/main/res/layout/activity_test.xml b/demo/src/main/res/layout/activity_test.xml index 2cba2c7..95acbeb 100644 --- a/demo/src/main/res/layout/activity_test.xml +++ b/demo/src/main/res/layout/activity_test.xml @@ -160,6 +160,13 @@ android:text="follow(跟随)" android:textSize="12sp" /> + + + android:layout_height="match_parent" + android:fillViewport="true"> - - - - - - - - - - + android:layout_marginTop="600dp" + android:text="关注我" + android:textColor="#ffffff" /> + + + + - - - - - - - diff --git a/demo/src/main/res/layout/header_recycle.xml b/demo/src/main/res/layout/header_recycle.xml deleted file mode 100644 index c42c99b..0000000 --- a/demo/src/main/res/layout/header_recycle.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java index 4798fe3..e10cf59 100644 --- a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java +++ b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java @@ -8,12 +8,14 @@ import android.support.v4.view.MotionEventCompat; import android.support.v4.view.ViewCompat; import android.util.AttributeSet; +import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; +import android.widget.FrameLayout; import android.widget.ListView; import android.widget.OverScroller; @@ -49,7 +51,7 @@ public enum Give { BOTH, TOP, BOTTOM, NONE } - public enum Type {OVERLAP, FOLLOW} + public enum Type {OVERLAP, FOLLOW, DRAG} private Give give = Give.BOTH; private Type type = Type.FOLLOW; @@ -81,7 +83,8 @@ public enum Type {OVERLAP, FOLLOW} private View header; private View footer; //目标View,即被SpringView包裹的View - private View contentView; + private ViewGroup contentLay; + // private View contentView; //头尾布局资源id private int headerResoureId; private int footerResoureId; @@ -134,12 +137,12 @@ public SpringView(Context context, AttributeSet attrs) { @Override protected void onFinishInflate() { - contentView = getChildAt(0); - if (contentView == null) { + View content = getChildAt(0); + if (content == null) { return; } setPadding(0, 0, 0, 0); - //contentView.setPadding(0, contentView.getPaddingTop(), 0, contentView.getPaddingBottom()); + //contentLay.setPadding(0, contentLay.getPaddingTop(), 0, contentLay.getPaddingBottom()); if (headerResoureId != 0) { inflater.inflate(headerResoureId, this, true); header = getChildAt(getChildCount() - 1); @@ -147,10 +150,21 @@ protected void onFinishInflate() { if (footerResoureId != 0) { inflater.inflate(footerResoureId, this, true); footer = getChildAt(getChildCount() - 1); - footer.setVisibility(INVISIBLE); } - contentView.bringToFront(); //把内容放在最前端 + //TODO:给contentView添加外层布局contentLay +// if (content instanceof FrameLayout) { +// contentLay = (ViewGroup) content; +// contentView = ((FrameLayout) content).getChildAt(0); +// } else { +// removeView(content); +// contentLay = new FrameLayout(getContext()); +// contentLay.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); +// contentLay.addView(content); +// contentView = content; +// addView(contentLay); +// } + contentLay = (ViewGroup) content; super.onFinishInflate(); } @@ -196,15 +210,8 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { - if (contentView != null) { - if (type == Type.OVERLAP) { - if (header != null) { - header.layout(0, 0, getWidth(), header.getMeasuredHeight()); - } - if (footer != null) { - footer.layout(0, getHeight() - footer.getMeasuredHeight(), getWidth(), getHeight()); - } - } else if (type == Type.FOLLOW) { + if (contentLay != null) { + if (type == Type.FOLLOW || type == Type.OVERLAP) { if (header != null) { header.layout(0, -header.getMeasuredHeight(), getWidth(), 0); } @@ -212,7 +219,16 @@ protected void onLayout(boolean changed, int l, int t, int r, int b) { footer.layout(0, getHeight(), getWidth(), getHeight() + footer.getMeasuredHeight()); } } - contentView.layout(0, 0, contentView.getMeasuredWidth(), contentView.getMeasuredHeight()); + contentLay.layout(0, 0, contentLay.getMeasuredWidth(), contentLay.getMeasuredHeight()); + + if (type == Type.OVERLAP) { + //overlap模式需要把内容放在最前端 + contentLay.bringToFront(); + } else if (type == Type.DRAG) { + //drag模式需要把头尾部分放在最前端 + if (header != null) header.bringToFront(); + if (footer != null) footer.bringToFront(); + } } } @@ -231,9 +247,6 @@ public boolean dispatchTouchEvent(MotionEvent event) { hasCallFull = false; hasCallRefresh = false; mfirstY = event.getY(); -// boolean isTop = isChildScrollToTop(); -// boolean isBottom = isChildScrollToBottom(); -// if (isTop || isBottom) isNeedMyMove = false; isNeedMyMove = false; break; } @@ -288,14 +301,13 @@ public boolean onInterceptTouchEvent(MotionEvent event) { @Override public boolean onTouchEvent(MotionEvent event) { - if (contentView == null) { + if (contentLay == null) { return false; } int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: isFirst = true; - //if (!mScroller.isFinished()) mScroller.abortAnimation();//不需要处理 break; case MotionEvent.ACTION_MOVE: //getParent().requestDisallowInterceptTouchEvent(true); @@ -405,40 +417,28 @@ public void dealMulTouchEvent(MotionEvent ev) { //执行位移操作 private void doMove() { - if (type == Type.OVERLAP) { - //记录移动前的位置 - if (mRect.isEmpty()) { - mRect.set(contentView.getLeft(), contentView.getTop(), contentView.getRight(), contentView.getBottom()); - } + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { //根据下拉高度计算位移距离,(越拉越慢) int movedy; if (dy > 0) { - movedy = (int) ((float) ((MAX_HEADER_PULL_HEIGHT - contentView.getTop()) / (float) MAX_HEADER_PULL_HEIGHT) * dy / MOVE_PARA); + movedy = (int) ((float) ((MAX_HEADER_PULL_HEIGHT + getScrollY()) / (float) MAX_HEADER_PULL_HEIGHT) * dy / MOVE_PARA); } else { - movedy = (int) ((float) ((MAX_FOOTER_PULL_HEIGHT - (getHeight() - contentView.getBottom())) / (float) MAX_FOOTER_PULL_HEIGHT) * dy / MOVE_PARA); + movedy = (int) ((float) ((MAX_FOOTER_PULL_HEIGHT - getScrollY()) / (float) MAX_FOOTER_PULL_HEIGHT) * dy / MOVE_PARA); } - int top = contentView.getTop() + movedy; - contentView.layout(contentView.getLeft(), top, contentView.getRight(), top + contentView.getMeasuredHeight()); - } else if (type == Type.FOLLOW) { - //根据下拉高度计算位移距离,(越拉越慢) - int movedx; - if (dy > 0) { - movedx = (int) ((float) ((MAX_HEADER_PULL_HEIGHT + getScrollY()) / (float) MAX_HEADER_PULL_HEIGHT) * dy / MOVE_PARA); - } else { - movedx = (int) ((float) ((MAX_FOOTER_PULL_HEIGHT - getScrollY()) / (float) MAX_FOOTER_PULL_HEIGHT) * dy / MOVE_PARA); + scrollBy(0, (int) (-movedy)); + + if (type == Type.OVERLAP) { + if (header != null) header.setTranslationY(header.getHeight() + getScrollY()); + if (footer != null) footer.setTranslationY(-footer.getHeight() + getScrollY()); + } else if (type == Type.DRAG) { + if (contentLay != null) contentLay.setTranslationY(getScrollY()); } - scrollBy(0, (int) (-movedx)); } } //回调自定义header/footer OnDropAnim接口 private void callOnDropAnim() { - if (type == Type.OVERLAP) { - if (contentView.getTop() > 0) - if (headerHander != null) headerHander.onDropAnim(header, contentView.getTop()); - if (contentView.getTop() < 0) - if (footerHander != null) footerHander.onDropAnim(footer, contentView.getTop()); - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (getScrollY() < 0) if (headerHander != null) headerHander.onDropAnim(header, -getScrollY()); if (getScrollY() > 0) @@ -464,9 +464,7 @@ private void callOnPreDrag() { //回调自定义header/footer OnLimitDes接口 private void callOnLimitDes() { boolean topORbottom = false; - if (type == Type.OVERLAP) { - topORbottom = contentView.getTop() >= 0 && isChildScrollToTop(); - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { topORbottom = getScrollY() <= 0 && isChildScrollToTop(); } if (isFirst) { @@ -515,11 +513,19 @@ private void callOnLimitDes() { public void computeScroll() { if (mScroller.computeScrollOffset()) { scrollTo(0, mScroller.getCurrY()); + if (type == Type.OVERLAP) { + if (header != null) header.setTranslationY(header.getHeight() + getScrollY()); + if (footer != null) footer.setTranslationY(-footer.getHeight() + getScrollY()); + } else if (type == Type.DRAG) { + if (contentLay != null) contentLay.setTranslationY(getScrollY()); + } invalidate(); } //在滚动动画完全结束后回调接口 //滚动回调过程中mScroller.isFinished会多次返回true,导致判断条件被多次进入,设置标志位保证只调用一次 - if (!isMoveNow && type == Type.FOLLOW && mScroller.isFinished()) { + if (!isMoveNow + && (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) + && mScroller.isFinished()) { if (isFullAnim) { if (!hasCallFull) { hasCallFull = true; @@ -543,7 +549,7 @@ public void computeScroll() { * 判断是否需要由该控件来控制滑动事件 */ private boolean isNeedMyMove() { - if (contentView == null) { + if (contentLay == null) { return false; } if (Math.abs(dy) < Math.abs(dx)) { @@ -559,18 +565,7 @@ private boolean isNeedMyMove() { if (!enableFooter && isBottom && dy < 0) { return false; } - if (type == Type.OVERLAP) { - if (header != null) { - if (isTop && dy > 0 || contentView.getTop() > 0 + 20) { - return true; - } - } - if (footer != null) { - if (isBottom && dy < 0 || contentView.getBottom() < mRect.bottom - 20) { - return true; - } - } - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (header != null) { //其中的20是一个防止触摸误差的偏移量 if (isTop && dy > 0 || getScrollY() < 0 - 20) { @@ -608,22 +603,12 @@ private void callOnAfterFullAnim() { //在回弹到刷新位置的时候会回调此方法 private void callOnAfterRefreshAnim() { - if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (isTop()) { listener.onRefresh(); } else if (isBottom()) { listener.onLoadmore(); } - } else if (type == Type.OVERLAP) { - if (!isMoveNow) { - long nowtime = System.currentTimeMillis(); - if (nowtime - lastMoveTime >= MOVE_TIME_OVER) { - if (callFreshORload == 1) - listener.onRefresh(); - if (callFreshORload == 2) - listener.onLoadmore(); - } - } } } @@ -633,39 +618,10 @@ private void callOnAfterRefreshAnim() { private void resetPosition() { isFullAnim = true; isInControl = false; //重置位置的时候,滑动事件已经不在控件的控制中了 - if (type == Type.OVERLAP) { - if (mRect.bottom == 0 || mRect.right == 0) return; - //根据下拉高度计算弹回时间,时间最小100,最大400 - int time = 0; - if (contentView.getHeight() > 0) { - time = Math.abs(400 * contentView.getTop() / contentView.getHeight()); - } - if (time < 100) time = 100; - - Animation animation = new TranslateAnimation(0, 0, contentView.getTop(), mRect.top); - animation.setDuration(time); - animation.setFillAfter(true); - animation.setAnimationListener(new Animation.AnimationListener() { - @Override - public void onAnimationStart(Animation animation) { - } - - @Override - public void onAnimationEnd(Animation animation) { - callOnAfterFullAnim(); - } - - @Override - public void onAnimationRepeat(Animation animation) { - } - }); - contentView.startAnimation(animation); - contentView.layout(mRect.left, mRect.top, mRect.right, mRect.bottom); - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { mScroller.startScroll(0, getScrollY(), 0, -getScrollY(), MOVE_TIME); invalidate(); } - //mRect.setEmpty(); } private void callOnFinishAnim() { @@ -691,50 +647,7 @@ private void callOnFinishAnim() { private void resetRefreshPosition() { isFullAnim = false; isInControl = false; //重置位置的时候,滑动事件已经不在控件的控制中了 - if (type == Type.OVERLAP) { - if (mRect.bottom == 0 || mRect.right == 0) return; - if (contentView.getTop() > mRect.top) { //下拉 - Animation animation = new TranslateAnimation(0, 0, contentView.getTop() - HEADER_SPRING_HEIGHT, mRect.top); - animation.setDuration(MOVE_TIME_OVER); - animation.setFillAfter(true); - animation.setAnimationListener(new Animation.AnimationListener() { - @Override - public void onAnimationStart(Animation animation) { - } - - @Override - public void onAnimationEnd(Animation animation) { - callOnAfterRefreshAnim(); - } - - @Override - public void onAnimationRepeat(Animation animation) { - } - }); - contentView.startAnimation(animation); - contentView.layout(mRect.left, mRect.top + HEADER_SPRING_HEIGHT, mRect.right, mRect.bottom + HEADER_SPRING_HEIGHT); - } else { //上拉 - Animation animation = new TranslateAnimation(0, 0, contentView.getTop() + FOOTER_SPRING_HEIGHT, mRect.top); - animation.setDuration(MOVE_TIME_OVER); - animation.setFillAfter(true); - animation.setAnimationListener(new Animation.AnimationListener() { - @Override - public void onAnimationStart(Animation animation) { - } - - @Override - public void onAnimationEnd(Animation animation) { - callOnAfterRefreshAnim(); - } - - @Override - public void onAnimationRepeat(Animation animation) { - } - }); - contentView.startAnimation(animation); - contentView.layout(mRect.left, mRect.top - FOOTER_SPRING_HEIGHT, mRect.right, mRect.bottom - FOOTER_SPRING_HEIGHT); - } - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (getScrollY() < 0) { //下拉 mScroller.startScroll(0, getScrollY(), 0, -getScrollY() - HEADER_SPRING_HEIGHT, MOVE_TIME); invalidate(); @@ -749,34 +662,7 @@ public void onAnimationRepeat(Animation animation) { * {@link #callFresh()}的执行方法,不要暴露在外部 */ private void _callFresh() { - header.setVisibility(VISIBLE); - if (type == Type.OVERLAP) { - if (mRect.isEmpty()) { - mRect.set(contentView.getLeft(), contentView.getTop(), contentView.getRight(), contentView.getBottom()); - } - Animation animation = new TranslateAnimation(0, 0, contentView.getTop() - HEADER_SPRING_HEIGHT, mRect.top); - animation.setDuration(MOVE_TIME_OVER); - animation.setFillAfter(true); - animation.setAnimationListener(new Animation.AnimationListener() { - @Override - public void onAnimationStart(Animation animation) { - if (headerHander != null) headerHander.onStartAnim(); - } - - @Override - public void onAnimationEnd(Animation animation) { - callFreshORload = 1; - needResetAnim = true; - listener.onRefresh(); - } - - @Override - public void onAnimationRepeat(Animation animation) { - } - }); - contentView.startAnimation(animation); - contentView.layout(mRect.left, mRect.top + HEADER_SPRING_HEIGHT, mRect.right, mRect.bottom + HEADER_SPRING_HEIGHT); - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { isFullAnim = false; hasCallRefresh = false; callFreshORload = 1; @@ -815,20 +701,12 @@ private void restSmartPosition() { private void callFreshORload() { if (isTop()) { //下拉 callFreshORload = 1; - if (type == Type.OVERLAP) { - if (dsY > 200 || HEADER_LIMIT_HEIGHT >= HEADER_SPRING_HEIGHT) { - if (headerHander != null) headerHander.onStartAnim(); - } - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (headerHander != null) headerHander.onStartAnim(); } } else if (isBottom()) { callFreshORload = 2; - if (type == Type.OVERLAP) { - if (dsY < -200 || FOOTER_LIMIT_HEIGHT >= FOOTER_SPRING_HEIGHT) { - if (footerHander != null) footerHander.onStartAnim(); - } - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (footerHander != null) footerHander.onStartAnim(); } } @@ -838,23 +716,21 @@ private void callFreshORload() { * 判断目标View是否滑动到顶部 还能否继续滑动 */ private boolean isChildScrollToTop() { - return !ViewCompat.canScrollVertically(contentView, -1); + return !contentLay.canScrollVertically(-1); } /** * 是否滑动到底部 */ private boolean isChildScrollToBottom() { - return !ViewCompat.canScrollVertically(contentView, 1); + return !contentLay.canScrollVertically(1); } /** * 判断顶部拉动是否超过临界值 */ private boolean isTopOverFarm() { - if (type == Type.OVERLAP) { - return contentView.getTop() > HEADER_LIMIT_HEIGHT; - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { return -getScrollY() > HEADER_LIMIT_HEIGHT; } else return false; @@ -864,9 +740,7 @@ private boolean isTopOverFarm() { * 判断底部拉动是否超过临界值 */ private boolean isBottomOverFarm() { - if (type == Type.OVERLAP) { - return getHeight() - contentView.getBottom() > FOOTER_LIMIT_HEIGHT; - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { return getScrollY() > FOOTER_LIMIT_HEIGHT; } else return false; @@ -876,9 +750,7 @@ private boolean isBottomOverFarm() { * 判断当前状态是否拉动到顶部 */ private boolean isTop() { - if (type == Type.OVERLAP) { - return contentView.getTop() > 0; - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { return getScrollY() < 0; } else return false; @@ -888,9 +760,7 @@ private boolean isTop() { * 判断当前状态是否拉动到底部 */ private boolean isBottom() { - if (type == Type.OVERLAP) { - return contentView.getTop() < 0; - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { return getScrollY() > 0; } else return false; @@ -900,9 +770,7 @@ private boolean isBottom() { * 判断当前滚动位置是否已经进入可折叠范围了 */ private boolean isFlow() { - if (type == Type.OVERLAP) { - return contentView.getTop() < 30 && contentView.getTop() > -30; - } else if (type == Type.FOLLOW) { + if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { return getScrollY() > -30 && getScrollY() < 30; } else return false; @@ -914,10 +782,10 @@ private boolean isFlow() { */ private void changeType(Type type) { this.type = type; - if (header != null && header.getVisibility() != INVISIBLE) header.setVisibility(INVISIBLE); - if (footer != null && footer.getVisibility() != INVISIBLE) footer.setVisibility(INVISIBLE); requestLayout(); needChange = false; + if (header != null) header.setTranslationY(0); + if (footer != null) footer.setTranslationY(0); } //############################################# @@ -932,11 +800,11 @@ public void onFinishFreshAndLoad() { boolean needTop = isTop() && (give == Give.TOP || give == Give.BOTH); boolean needBottom = isBottom() && (give == Give.BOTTOM || give == Give.BOTH); if (needTop || needBottom) { - if (contentView instanceof ListView) { - //((ListView) contentView).smoothScrollByOffset(1); + if (contentLay instanceof ListView) { + //((ListView) contentLay).smoothScrollByOffset(1); //刷新后调用,才能正确显示刷新的item,如果调用上面的方法,listview会被固定在底部 //在版本更新中,这个问题已经被修复,保留注释 - //((ListView) contentView).smoothScrollBy(-1,0); + //((ListView) contentLay).smoothScrollBy(-1,0); } resetPosition(); } @@ -1103,7 +971,7 @@ private void setHeaderIn(DragHander headerHander) { } headerHander.getView(inflater, this); this.header = getChildAt(getChildCount() - 1); - contentView.bringToFront(); //把内容放在最前端 + contentLay.bringToFront(); //把内容放在最前端 requestLayout(); } @@ -1124,7 +992,7 @@ private void setFooterIn(DragHander footerHander) { } footerHander.getView(inflater, this); this.footer = getChildAt(getChildCount() - 1); - contentView.bringToFront(); //把内容放在最前端 + contentLay.bringToFront(); //把内容放在最前端 requestLayout(); } diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml index eb96317..d927a34 100644 --- a/library/src/main/res/values/attrs.xml +++ b/library/src/main/res/values/attrs.xml @@ -4,6 +4,7 @@ + From 5a04dd99b4fc87b1ccefa31cae61dc4a04e241cb Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Mon, 11 Jun 2018 15:28:21 +0800 Subject: [PATCH 07/80] add new type DRAG: springView.setType(Type.DRAG) --- .../springview/widget/SpringView.java | 47 ++----------------- 1 file changed, 4 insertions(+), 43 deletions(-) diff --git a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java index e10cf59..d187375 100644 --- a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java +++ b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java @@ -211,14 +211,12 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { if (contentLay != null) { - if (type == Type.FOLLOW || type == Type.OVERLAP) { if (header != null) { header.layout(0, -header.getMeasuredHeight(), getWidth(), 0); } if (footer != null) { footer.layout(0, getHeight(), getWidth(), getHeight() + footer.getMeasuredHeight()); } - } contentLay.layout(0, 0, contentLay.getMeasuredWidth(), contentLay.getMeasuredHeight()); if (type == Type.OVERLAP) { @@ -417,7 +415,6 @@ public void dealMulTouchEvent(MotionEvent ev) { //执行位移操作 private void doMove() { - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { //根据下拉高度计算位移距离,(越拉越慢) int movedy; if (dy > 0) { @@ -428,22 +425,19 @@ private void doMove() { scrollBy(0, (int) (-movedy)); if (type == Type.OVERLAP) { - if (header != null) header.setTranslationY(header.getHeight() + getScrollY()); if (footer != null) footer.setTranslationY(-footer.getHeight() + getScrollY()); + if (header != null) header.setTranslationY(header.getHeight() + getScrollY()); } else if (type == Type.DRAG) { if (contentLay != null) contentLay.setTranslationY(getScrollY()); } - } } //回调自定义header/footer OnDropAnim接口 private void callOnDropAnim() { - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (getScrollY() < 0) if (headerHander != null) headerHander.onDropAnim(header, -getScrollY()); if (getScrollY() > 0) if (footerHander != null) footerHander.onDropAnim(footer, -getScrollY()); - } } private boolean _firstDrag = true; @@ -464,9 +458,7 @@ private void callOnPreDrag() { //回调自定义header/footer OnLimitDes接口 private void callOnLimitDes() { boolean topORbottom = false; - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { topORbottom = getScrollY() <= 0 && isChildScrollToTop(); - } if (isFirst) { if (topORbottom) { isCallUp = true; @@ -523,9 +515,7 @@ public void computeScroll() { } //在滚动动画完全结束后回调接口 //滚动回调过程中mScroller.isFinished会多次返回true,导致判断条件被多次进入,设置标志位保证只调用一次 - if (!isMoveNow - && (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) - && mScroller.isFinished()) { + if (!isMoveNow && mScroller.isFinished()) { if (isFullAnim) { if (!hasCallFull) { hasCallFull = true; @@ -565,7 +555,6 @@ private boolean isNeedMyMove() { if (!enableFooter && isBottom && dy < 0) { return false; } - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (header != null) { //其中的20是一个防止触摸误差的偏移量 if (isTop && dy > 0 || getScrollY() < 0 - 20) { @@ -577,7 +566,6 @@ private boolean isNeedMyMove() { return true; } } - } return false; } @@ -603,13 +591,11 @@ private void callOnAfterFullAnim() { //在回弹到刷新位置的时候会回调此方法 private void callOnAfterRefreshAnim() { - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (isTop()) { listener.onRefresh(); } else if (isBottom()) { listener.onLoadmore(); } - } } /** @@ -618,10 +604,8 @@ private void callOnAfterRefreshAnim() { private void resetPosition() { isFullAnim = true; isInControl = false; //重置位置的时候,滑动事件已经不在控件的控制中了 - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { mScroller.startScroll(0, getScrollY(), 0, -getScrollY(), MOVE_TIME); invalidate(); - } } private void callOnFinishAnim() { @@ -647,7 +631,6 @@ private void callOnFinishAnim() { private void resetRefreshPosition() { isFullAnim = false; isInControl = false; //重置位置的时候,滑动事件已经不在控件的控制中了 - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (getScrollY() < 0) { //下拉 mScroller.startScroll(0, getScrollY(), 0, -getScrollY() - HEADER_SPRING_HEIGHT, MOVE_TIME); invalidate(); @@ -655,14 +638,12 @@ private void resetRefreshPosition() { mScroller.startScroll(0, getScrollY(), 0, -getScrollY() + FOOTER_SPRING_HEIGHT, MOVE_TIME); invalidate(); } - } } /** * {@link #callFresh()}的执行方法,不要暴露在外部 */ private void _callFresh() { - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { isFullAnim = false; hasCallRefresh = false; callFreshORload = 1; @@ -670,7 +651,6 @@ private void _callFresh() { if (headerHander != null) headerHander.onStartAnim(); mScroller.startScroll(0, getScrollY(), 0, -getScrollY() - HEADER_SPRING_HEIGHT, MOVE_TIME); invalidate(); - } } /** @@ -701,14 +681,10 @@ private void restSmartPosition() { private void callFreshORload() { if (isTop()) { //下拉 callFreshORload = 1; - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (headerHander != null) headerHander.onStartAnim(); - } } else if (isBottom()) { callFreshORload = 2; - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { if (footerHander != null) footerHander.onStartAnim(); - } } } @@ -730,50 +706,35 @@ private boolean isChildScrollToBottom() { * 判断顶部拉动是否超过临界值 */ private boolean isTopOverFarm() { - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { return -getScrollY() > HEADER_LIMIT_HEIGHT; - } else - return false; } /** * 判断底部拉动是否超过临界值 */ private boolean isBottomOverFarm() { - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { return getScrollY() > FOOTER_LIMIT_HEIGHT; - } else - return false; } /** * 判断当前状态是否拉动到顶部 */ private boolean isTop() { - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { return getScrollY() < 0; - } else - return false; } /** * 判断当前状态是否拉动到底部 */ private boolean isBottom() { - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { return getScrollY() > 0; - } else - return false; } /** * 判断当前滚动位置是否已经进入可折叠范围了 */ private boolean isFlow() { - if (type == Type.FOLLOW || type == Type.OVERLAP || type == Type.DRAG) { return getScrollY() > -30 && getScrollY() < 30; - } else - return false; } /** @@ -971,7 +932,7 @@ private void setHeaderIn(DragHander headerHander) { } headerHander.getView(inflater, this); this.header = getChildAt(getChildCount() - 1); - contentLay.bringToFront(); //把内容放在最前端 +// contentLay.bringToFront(); //把内容放在最前端 requestLayout(); } @@ -992,7 +953,7 @@ private void setFooterIn(DragHander footerHander) { } footerHander.getView(inflater, this); this.footer = getChildAt(getChildCount() - 1); - contentLay.bringToFront(); //把内容放在最前端 +// contentLay.bringToFront(); //把内容放在最前端 requestLayout(); } From 3012d466994649755230fc87ceadd9dfcf6cacd1 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Tue, 12 Jun 2018 14:06:01 +0800 Subject: [PATCH 08/80] nested layout support --- demo/src/main/AndroidManifest.xml | 8 + .../liaoinstan/demospring/MainActivity.java | 25 ++- .../demospring/demo10/Demo10Activity.java | 57 +++++++ .../demospring/demo11/Demo11Activity.java | 55 +++++++ demo/src/main/res/drawable-xxhdpi/adver.jpg | Bin 0 -> 101346 bytes demo/src/main/res/layout/activity_demo10.xml | 101 ++++++++++++ demo/src/main/res/layout/activity_demo11.xml | 114 +++++++++++++ demo/src/main/res/layout/activity_main.xml | 25 +++ demo/src/main/res/layout/activity_warning.xml | 5 +- demo/src/main/res/values/strings.xml | 2 + .../springview/widget/SpringView.java | 154 +++++++++--------- library/src/main/res/layout/ali_header.xml | 9 +- 12 files changed, 459 insertions(+), 96 deletions(-) create mode 100644 demo/src/main/java/com/liaoinstan/demospring/demo10/Demo10Activity.java create mode 100644 demo/src/main/java/com/liaoinstan/demospring/demo11/Demo11Activity.java create mode 100644 demo/src/main/res/drawable-xxhdpi/adver.jpg create mode 100644 demo/src/main/res/layout/activity_demo10.xml create mode 100644 demo/src/main/res/layout/activity_demo11.xml diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml index 7c9e7dc..f7015b2 100644 --- a/demo/src/main/AndroidManifest.xml +++ b/demo/src/main/AndroidManifest.xml @@ -56,6 +56,14 @@ android:name=".demo9.Demo9Activity" android:label="@string/title_activity_demo9" android:theme="@style/AppTheme.NoActionBar" /> + + 5UAx7YWfgc202Qja>A;<-`{)gKOrtl4h0l*+2 z@Pwqm9Rx$JxCMdx%n?tB=^O4X@O}dc_wIop`8D6)x~~2%WJwDT{}BIR5B~s3eSJwJ z9D$Kku<`VB^$!nLgn(B~9ga~)ASDrSbp%QsfrTK(E3lvZU19i6gLUr}#_w*1ctDSS zvA`I=!Ls}+3ry;#EU-<#%EAEqo(2rb@FQ)`h}GmEBk%^fvihdIrFB615E}~%D+@Cl zD=RBII~xa=AU78$C)Zkj0baok>mNHlu?nFl-evUCZ?dKxEYQ>qtO!bcr6@K zQw4=a(i4HPv$Jz?a*1+tiy}9QZAAXt7wr+m#|G&_R~TU%AqGAeBOi=b4M_lQnL%08 zi~HLJV_;-rW?^Mx=imeY#cLo27$YMC6C*P-6DTZLEQp7g_?Y=OB6L{l+Y=hDOF)t+(&kX=7`* zi{wgnbNBG{3JwVk3y+A5I&kpN;Uhsqop2MS0b_pu4;ow{1^m|YrWH6i2@)Wjhy zgYK4{q>Hv9+20dv|9?rcAA{zYl9rn#PGuE&KUXJx5%L;4_dH>-QOL_P$!&~njd&_wG1hwJ2pP$`>O?T{w z)tG8O>*}d@Otfq_u{VuxId&vDx3Ati_4WR~a@aYe80*ZVZ<#O2855h%K`df3T?12? zDYY8DJn!^1#aUyb<{R>w+aGboV~IEWEUpiT4d6bVcC_6Ze5>5$_Dcl6Ww^T-I<-$G zbqD^lL*PQQ+3DD{<#h4Kb@OfEZvrJ=%;!(xmvc4Jjp7=^+GgX{zPVD7b~i3c6Mih2 za02-${miB7m$S{CA2n(}ad>_Fc;C6co1r0s+fVEt{=$hSUOf7-n{Njv3h`Nx!5q5G z3h_sHkcd5xKkO!8U1>M{iHgxvRDDyk1<5Umhr%T)CpIUT)CsHF}ryTa)XLXQ~o%T|6NSxPF;;tyWtMS%_kcck0xI=J{0$&NV;Sk9tB(yv1 zRB68Uhg}F7w9RnJ%On!X9JFKpT?my4^L0}DM64zaT83V8ap>Ps0izE@a^5cZ$FL(MdP*F*7g_G z$4a$XH)dKI+s;Ys)A_>OLW4%Sb*9(Nqj$EWDU!oE8 zijnlnM+IH4Csf&~JROddc^Lg{oy_M?>b3U%u*vek%aNa2YcAzJqXbey`>r?Fp8OhE zPToNb;xS@6U2(c@1HRUXh56xe_l%)eLvsrU{l2_2DClU68Cra+9UgJv((}rYOILi~ z@@QeF@xF0SeY+p*?{{7Pv|r;~+7*|uzKh4jSzx#Z9!L!0-m1WOrj7FH%DmxnN9VF| zaihQTjbWv-ORcASwJJj*76Q|&TQT8=yG1k;GN_d>C=PUjz_L9?ASXp7LNdsVrY6(@NNm#Q z%Jy{G^@FH{50R1<%w@UVhs_Z}rCkXx`;u^t*3_p<*?iYMUq~69!%jXEwMaa*sql~} zv_>6*>TU|c6pD_T$$e0}AoZoFzl38z3w4496`xpaiQd5f#OzHmw_Yp%d9}}Z0X5Iw zZ(oDcQono#c9j4HrHn6~kzl9XkETJ_TFXVrA3URUh8if#!Yv8AkGP3=ZeTqj^De(i zXXpcETJDz5jiGwFE^ntYd30dM`8=IwJ65u7A%{|9*CVmWZn~^g$*AIJ&U#d5AIP<> z!)#+$J+6zX>A#oQ^&ShR7!&y~VBZ)Unq+#y5$@zE2D8aG3S^T*fb6SU`;L$2aUdH5hiv zRPg!h@x-CqUz{}3YDoiHC8a(=sFAc0UhbjG5~Z(SeRLQt+*z`({|xs>k{qKDBVHk! zRsSU1Oo1V#eQ;Mm@|Z@s&*ilTkNr82&CYqyA$NecN^XxxZ6Zg%hCoi@xq-&-%`Y!dbP5}GcM z85NWoSk1efbnR)-TMLb^rD`J9jfb3YTb+Z10$>Q=r_aJ34>}g?+Y8ASy;jckA6Iqm z9N5iPU6ZO2&v0c?Y>)VRp0D)_P#>oAtAaK^4GNp1L4>@3u%Q0+k79+c|x5bDwP~WGtlH<)T@C^9Jwh`|$bV@-G+2z642ZQJjV>x2$bTL5tk`n3`QtnA;w4h8Rz*of1_1P#aMv zDm|Gm>uq1Z$v!oD#O~_Z(M$uqauqu^Sm4R`cf{ONYO|wI`J6JhFTR@pTDK&#^V1sL zVh29zV(X5yGU=30Ig^D$OKgMFc4`p^wuw(s1{v<4M+jwaH1*|>loCHfs-{xv2J3g- z{{6viM>KOCu?je)Q+D;43T}>9;-@@%+BJvY?oc_hqf05!TRT%!^y@~Q+_UX%&CUaj zTajb_Tg6UVeiqzWyN>_~TEJEwmi7MJ&zUZZ_HEH;KBdoX-(Tt_^1I@7oRUY)6g5)yisB2riLYk7 zH<+~!4>w4?I%dPyz!B2{Nv4T)!G}IpIQ7U^=?FVU^jf_^U&4&%sk(We9Ff|8C~<4r zsaFG{jiTcxRnCY>yAh1Dwhs1-bn_;?`V`^kv-pgU>T61a4(arcFNny~pvop1G`Zs{ z>%AD>3BRK54Xl>bcS)b892;^=su`XN@+Chy8GP!|P*R+h+3yEFI<$ARQNHP)vj&t3 z9Kz`to6?7`;1Uso?SdHB%NqW8gSiQPda?o|y8^SO&QYW{3ZL+Cj4=+!jIL1xarHD|@{qR`12b=!z=m+`f|Md8U{Pb*d@d^GB zW9A+b_QON)^)dM20Xg?GX+4s+`!~^7^98ap)YAvt&?lvkm8+zrtAD7=7XL1~cjYn+ z^82SSJ)eJu(+hIlzQZqsC~f6KFU=p9o{y{KpM_fm`-H57TSWM5ae4F|o+FG*3h@sz za1L>%OR&PEg}X)YcRirH>9F8UXB*l^c3Vy6AINS8bKXBAYfbW54Yvp)ZLy=LuyU;- z1^EZqc#uKi0-f~qbN`-wJoE@Fz>}VTNQl3$kH4S$Hx#b#F?1Gw3FrPEZsqCj@oNO< z_Xxn-4|sa*U>sfLfo?MZTF3DHy;5`JR^oWR5d|-uz2E8^_evPOX3DNWuKnQ`UrBXp z#m~O-1P|DXmI4a_{o?pmEr7zVz|O3M8bPXVZXm`7Ji(kET(EB;S1+dg2tlrd?*h;7 zFqoAPy5@fiSxIvq_#r3&*g^jEVjQGL|7jHMzZ18T7xbj*O%vaWkKRNSFCHuK z@D(8bAG6>ej+I!toGZ=VijQr@_pQb=YylDA{#HWbbk~Z_W3`1?NB1(CfX8Y+(Y+Ae zp2E5pI5;75$O8P#As5IQ@&i9I6tt5HV!l;X;QD#}5=O`VVU_s-@e9C@uy1VA{eGc7 z^cItzH7qXvp?caj&hj}Fq1oMNNb;V8qd;VyZ3D)$~%~!%e8r;sI zA^wJBKXQ-+oo2mO+{e5>i}8UBc%=dqc;A3d+xL;M3k zS07CNwMFFc0Zr#Wg>t#9G`0T}&IyXx;~&9S>YxIh5X1#;2Azo&_iBBkTS`||c+UzP z9RgxI10M9saRuDK%VliXd$d6#wwR9Gc3fzZe5d>B}J!u&stH&-VbkP1LeOB3I z>xu43QZPpNTHygXgVWnx2~`;(SdrH|ddOdj4nAoP?VTdZpSgbM?%C=$pQba5Yg+nd zcDjWfK6j&}wzYp&&Ctd@{K)y6rFCrsbHKLv&A12*slfD$Sz%!#f}aU+5GWRSr}28ZeO|;!4$t@A_^0J;|qKvhK^Z4~HHJo<&y_?Df+ij^_5hAFsD_=?L;3 z7HTr~AeZ&;@8v2C@7=B1abI3wI(j^xEE3iEGV=}3Fm%#f_x>vpOr_DjNks;>Q&mF# zkpWCY69kX;SDi3+#gJrUSw)#-%*tE%uVtQ7IwE7_G0_A33_)j*1TSds#b(yVk+%d+h~hXi@Oq zy1e{ChYyWlW{c|^Xc#r9$Zc#78{R7!MNaVWcMw$?wn(A@jP*<$E}X0NN=so+lXY#G%DarKeN0_Fag zdw^qG2gpE&Oh3mdL>mR0TypeV?&@_9PPyYafHv6lz∨pCWDpS+Hv>dt+b(7HGKGjpZ zuUgY%E;iMXb>7KqtG9+kj#hs3=GZ_>-_4F5i`<2VXyuRNRvqhcpKlMuomy0)EWgkrQ*1c3h+cIP7Hdo7gL6L6 zAU~~9;@VgN@{u>|*E(hH(YQ-eOSrdq-!?gA*1Dxv;fSqC+Q6&YcR967hu^6AE!(?& zR$J83A8K208t}K@F*e;%v43#=(XPuAh1xAM!LnzQEVQofJKK0mE0_COVkhBYYRidj z4X2I}vBH?tP3slw+{@o5HQm+fNVdLK?vulbQa`p~;ka%qdXa}?*k(gZ?z^*Zc#|w8 z7M=H}>YOQbrUog$JdW*k7FW{%lTB?UTmQJ)<6>geF^_iMSv4JMmYe&#Qh^)k0;g!u z&K7r$p`_#-ozy{{!J@>6K{V)k_i}Kqo&Q$WeTU~K7Hmh3y|`N2*0SDo4?aOmIQ>I< zpGxP*vExyOQ~^p~t;0uC?Hg@(3*N46DI5*qGlM||aMJrgs;svte5pZV<5 z9D+UKJgsSFJ6HaSwhfx+znLu)y~xDZm3%om5C1Vo_tyKcyNCo>L)(z>5lWlRh{v+Z z=B(?W-t_o8hn2k9l$p|# zPs@8;-eX=veE!UkBo}sUGHGVQ%2*ath!_ig8~Cw3ZED~y$43JJ7HkQd$ zQ613|>D7>0v@gj`n^93|i z{K9OG>;X?rq9Pt<&p#THuN&2w@v(k%e`gZn>&`JsOBz?MdZ4FDwP-_dR;UFjt^`qE zX4{6Wi*EH;C};^hiks{G^!Vgv?;&-{rXpY@?(nLZ-1?dGT?(GmW@@}>VxHH1;>Ciu zQM&of^ReT#oEp*@j1HxSC`U~lyu-qW8PbT~ZV8icz30=&iEP|E?Mt;8B$vDre}>A& z%+3rNbkL!3sgVY)cU(AhlLqOV&)xV`^D-^XB8{|RlN=2Sf74X|y!*K;c|Gzy)oeh2 zXsmXjrdfHZIdpH#WMSJiRkelm8S{}=)mAQ_kCiDS@B-!}A@!+%(8Rp?&xieHeP+^V zkY$u!LDKu~WoQ2Lf$wkubzHcO#TR4qX|HFtpMRbub94Cmf9pkiw=zE22u2tXt z4G;o+NtHwo`5rK8Qwp&6kb;Tzyf4sn)@@b&Qv zR*%qLY2E5j^FTT=^3eg7b`Bt`|ROhOZWdGK>S7x__UmK0!jRSw^PA1VK7 zj(rCV_`U-F=ioo0SF-s#k}K&4bO4w;tT63LQYHJ4eaU_y!2lLP&$#cLn410o|5ILk zeSbg)hY-Sm82_rQgXu$hRV#9^e`pYiOb7!MrN0vk4zVKt%+fz4_D6I8zJeT}t{+5p z28NyO{{BASi~6UX@t<}l&D(dbuTj4}eb{rldAKLGo?db&maCFqaBQD2$SnEJZ{K2TDUKf{gn^?^0e&C>@& z1OrQ&q%lDsi@;;C%19N2l%y+3-OWG9*BRuvr?0a+S=B3m?7qUUsj0fLUvP-CABk*i zpd|%_Rq^z6RmWg}#ycZ1$|N;1Ng0hrJ1aZG@d#ySX9V1hw;58AjoRU&Lmf~va2%=iz2zf)o`x3@2RcMpPhYv zO_k1-E1fG69EEZtA(ctaaGbI;0!>oJsi9EH7`Pi8<>rDUt6^PNs}8&7PwMn}>Ne*{ za!@e6W`b*_a_Tv|fAg;TeLR23&J}RF=~hc>@b;a)2WJNgAND=S8n~Q0bpEcSC!zrNG^`YQGgT{!a_YJVU9@A1=j=vH6aJ#2qk zdf%ah{(bqsA^T5Ye=qg^;|T+YZVsdz?8~?_lwS0k#QzcMd)k_+^w#%>)@Z8!Ucr9R zz3*DA3+h)eXm$QV1+|eVEJ7EF*F~amL=;93htt!;>Kf>yPzHK9JvAhLl?xxwe^3=| zBo0MDVz3AVN>3M#AsXQE270<^qyYh^i^js$2*1Na5ivM8To7g-1v>KpEfMX1ZSOfusB_MEkyzX!5VX`0vd-mz#Cu?zs1wj!x4diNCF;>#2e@mi8zoD zCiv#SeK;Boha<4Mx^OgJ53Ytrseu9kwDd4I132Qh`J%6f)zdS;>lqjz zbunmtBu*cJL7@SzJ`#n|$Nskb4AA-nT?877!@`k7tgadojl!#8KxtwLdito}>n9P8 z&_fxZ;CMV-4~xU=>f&|rM7W-s9zqusEME6_@)40pB0&vpV4w!qMF35s^Qeo|g<~>v9$pP-6b_3)AP8!@23Udt0SgKUiNossUJJkDqj73TH8=`^*GK3Q z)DQ?94v)iQaJm=*UXQ4cBmOSezvE-|bWsSL9%v5mNI)NGH36v$>Hr+Ai_^uT;D3#; z4;oLD{(lu;4Ua?Oa7e;W`3VFZ9)Z*cLg<5*^sngS)!=9x7K;OQpSZ%mo*rFrJPu6& z?IQdy_1kOrWkCjO8gsgKqL zVi>?tXbfog|BAkzu0Bf5fT;hSzOEid4U{~Q-lie{M*i#R!*OVgE?s}obouoNYM=?m zfFK-NA8+uFt^F!Hf7+%0rr*{Cl7bPlkte+`kNkBwX-y9NhdxD{4eJstJH)2-9o~hgUGt>V1WL2raRw6c*4BwI`c{uyIlYwPGRqDShl{4t@NTAzOCL^8U^yv^;8HYx@DdTW(XDk_v%bc-l zeKLqMFp*wzEA|idKWjw(uBrlqh&q_3|HaIm3`T`mEE1)RgriZbqY4}Xucqt@dL(dT zP;O)wy5iGQTU`zRZ_M0R6>K#}eldH|+tt-TU{C`dkVoH*dBFGG?Dl{2{U0L#R_^{M zyZ)11|5gtCTfqO(uK#4$zm)_37V!V9cKuwHE?a#>768N1K2dj4tDT??Qzbe-~dx=B7K`N1Wf;u^fdsw z`{y;=y1IL>S=q=!Qu1f`-*WMh0)oJ1T9^fZM!A9&Dd0W`+&wAYtAYDySSWqF9OE|NJ{;yr z4hQZxz%Anw>gx&I^xd3-zGP>xg^!88k4h$lO!5G3IB;_XZMV_~ZcVU@ip%{Mx63c? z5MY-Fu#mogK;+6!E=dKFq9j<0!$}&E!+pphA<7nDiP1U86|DdH1~~ggLeQ$rbS#Mf zpVn7af>$5^GV&L=f90f??P~m#NqL=LvSsGM@Yy=5i5&N)JJh zX#3AFnJZu|_aFq7H2xxwFkN4MS)24ElT_##`s4abfFF>*cl<(6g--9s+LWZh>c&4w zx>l3GM!wJ>$zZU;OO{mrMZ-3{sl{lN_OTk}GK&{{|wl7OHdklL9Yl6Llb;E{WUtkLij0{{1f(#oNMAaTlW-V-RB;V?5(I#%qkX8SgRHF*Y-HF@9$J%EZDXz$D3}%%s6&#I%En#1zOB z$8>@zh3OVk2~#ywGgCLy1QV5+n^}xmiCLZ5nAw)uojIKOF!MR)8_dPbHOwu{eay2g zEG)t-@+@jBMl5zLUM$fpCs;1ApUALn*VM8IXR^`@tl^No}7C*FL2)Be9GC)`IU>G zYZI3~mjhQQS0dLmYn({SmYi9Ta_z-;Ne7<}q z__Fz)@eT5`^2_lP_+9xA@@Mcr;qMh-6p$9s7a$275V$T-BhV+vA}B9tEa)Y8Trf|t zL2yEdUkELV74g2)CDT@kX#F_GIMuSMoW*Nbiu zC5y(3=8Lw7F07SYOIYi@_SD+awI9|ot=qKDa$Wek%j;^^eO@oPUSmCJef;{u_3dH| zVw=RQ#G=JA#9oTcY!KgIxFKM}#SKq3d=?iL-y-fMen$ME_>hEvgtmmI#2JZ7iD5}0 zNnJ@F$qSOzk`v(5e4~w_8?SC`*tjSqFSSEzzf``|2WbvzoV1(t8R;tN2^k3)Q<)f< z9GP}mc3GUPhwORTI@vinc{v-oBXXs3gYu&C#`00}Ir8rnxD|910u`<)yisIP#3_0! zUQ&FuiD46FlgFmiO^r$nN?0XNrAtapo0&J`H~VeAwz*B2OIcSrOgTrnTSZu9o63Hb zQk5}P8P#2?r&Q}ysc;P32Ywyif#64MMeIl1LwrGQLXwcF$Tui%6cI&1m7yllN@z0r zGWsn>0Aq?df~mqRW7V)h*xT44H5s)%YH4b1I6<5R?gZ{Bo*A!)r{F8_U)8bdA?k(d z;~L5u-Wu5&gPQW1WXU!zs>W=Bb^@8+@_2%@|^<(uP888|c8pInk5cml@2q}b*L@A;>F^4!|h%t;dd}PFI zWMXv6sLgnTG08Z~cw(#C*4VApCR`@gCMhO8+cs?r+IG*B!E~$XY18*+vSxl}rRI>i zvH5B94;Jzkffn~ISu8CqQ!V?g5LPi(b=CsbPS)Ahv)lEyCvET8p|B%#N7YW=oen#* zcFx%t*d*I@*{a&c+P<(`XXj~Gwu^Pw&RsWl&Day{&)WAnU>puRv^vT=MmRp(y>7S9 z?gvi1PR>q6dzkmw?8)A<&U#wXvG&3BJ)xgWouw_mltxPOFy zQ-D&y;ef6{^}w@%6G0|HH-cfoj=^Oif?zQ9GE^b-5coV?J1jM9K740*Q3PLvU&PDE zO_9eU2cn2knbAzqr0A-cjWPRTx?^=?ug1aRT;i%I(v*XgzP*NfZ|&pQ=e@6fKYV}k z{^%h6R&|zIR#vuHc2W*QPH4_h zu0!stJcGQl+se1E<_qT^zXRO~y)#^}r=Ydaq_C<8S9JTX?A^3tf#UcQSV?5bM5#w< zSD9T|Q~B2Ns(Tvuitnr3zge-dBK3jLgQSNX4-Y=1RYq0LJPLU9`LX-s-YTc6jwiNH z-c(ywH`JKaJgp_xKB?2Kt9+{UwBniiv-0P-=cO;OFG^lwUKZD5>Wdq&4JD0gjb*R! zukJNzHa&c;^ZIeKL38aJ<2Nr_%vzdSceK83b7<>&>-u)^ozJ_;_OSNFj=k@h-^YJg z^Woe_v5(g}6+830uw4(j4Z2_USod`Fl6prz1%F!VJJ`?Ne{MixAZrjgSTRH#dNpi6 z+&2<1viSM%DBoz>n8MiI@h#&oCu}GBCW9tvUrtP|ow_-Vp01j)nE5#CJG(d+KfiYV z)>quux&@nsfyMA8)};%}ip%$?Ce-&dU+{es{Tvep7>xe+?P6qRq+cxH3=Oc;9&}gW zW@G1MXJg|4N1bqRb8v9dKN(u^#7;39+M_DCZjNB3aQ7}wZ=($#BH!@Tc|znCX#SPAKz*XgCQVcqWNZI(^8^`j7 zUoV@x*UNcV-Oi`Vc!6^%zV`C+3}#2=C1hRNyKqM+HGE=j(Uwv@Qny>FC3r4*tpQ*9 zmHx8fKxWyAnx%H99Ll~Hu5%glnRDRt4TDO7j~H_y&lD-tZZ9nMe$>~ZO{6Kz(~-`* zG-zLpdga4O=G@VD%4cuNQ|DPK8tS@L_lL}Kg+vy!>r_UEd~qK}vJN@2T;w@>mGV?a zuj%vTM~&^=Uwbii+ES_W+igD5pr<2;4JC@h=TxUuOcwWeo*ykGOpG6!x$)WMZhPMR zr}WoXDG3z5&@M`mCL_<~o7Yp$4m!lz^kIDFvu6n%{e`@QuI=Wrf%vbPZVM^Bm&12C z`7R|pU23>M7CisX3ESC6lD7g!b(H7VR{0Ce+dmopkmvg{xAHg(HMB0`_-t^Srt8`m z<4H-t#M*migxcx=l5LJhbKXBY!rw_J)Fm1J%)_pXk#tjr>(k!YcRJycbz-fCqp*pnj$Rt{*wmVk@)4h( z*Bzb8@T7lA$o$#mE4Z%SH{w^eJLh0jB0O44Oh@`2_EuXvR1{;555I0+7!I%GiNiT~ zty_o)u1Sg6C30+iz>yaxi!WcZk@>ngK!1<>3%|f*PRMB5+37Mk+{o*NPP^0Wj+92* zho@q^yP`{8tK5D!`~LX^bF_Ev48Q1ee#*c#tyurXwQ;XrEE>gd6|}m0(4dmLU+uTG zG~qZyg^`cKcrslX@5F@VXFm@n@Af-!sl7#eq_I9!I~@7KQ8c@0r#bPyj;j2tnRo?3 zn~I3X1VOjG>(MX#1&pOP2iAg9&K_B)Cwotwr*inxAl5ZY+RMihS`T#Nd^PQR%G$=C zVKD`k{DbCWM?0O)wB)r&rP?~DU z9a;JDKFMi)lOc+6l#K>;-IEZ@(2OXuUGih679)Xp;o9n1H0V^$_9b$Dyhp~xLrEp4 zsho|IJt!I^ZMqn1yY3>T>!Fjl1?6dd==>qf#Ij&8T>F#LylQ7%vBVc-{d{eDx0%F5 z0B>Cl@EX&gIO`>)Zor!}X^b*|RG@c!nJbynd4UF1CCwk@{l)uG^je}D>-#z?4{Uy( z(oasME*nw>>uAva<)!FAKpx#Yw2pVkiO13q#VHY>wj|Qn+e~@c7&^b{jX98dXnvxX zN=)sZmU<{dPpKVz8OHo!eqs=782%7k4~f=I@|WO_X7;=R-PGug8e z6Sn3j+G7{q>-LU|@7h*zOu2ZdCvbYxBWm%NSdg}kWhL2s9$(kn`Pk8`-oGOBR>X1B zgL_+dZzNR26M7Fw$4!-5N?opK8&h2p5TSBDo*189E;wNP=HZKOCsAj8`-`Q!8jK-d zoaA5-kbTdmKsI#(;v9&9(^ebFXZ1^TSPsO#>0+=MF^~Xz@K_SXqlJrAie&6_MnK_A*MY zS$Oo9`=fImeWcfk&IfNgy(J2pnB@4+ISm9)_nJ+p?VCQ&&3kBc?D_`r1@|(Y(+G*o zkf`uu8=FqA^E;n8G^`$bxn)gKHOIiYh|#89cG8Dj_ryC^jggv&Q3aY19#gmE+%l7= z?=+ErAV%w!!(b_ObJ-b(;jku|QeokOO=IvQ%mzu)wfB!|*hDf)k_J4Vo4(VC6Tcs( z_55Q)n%F?$*UNXQ@HhSsm*1rCyH)e4Iq0>~yBV)O?F|v6?Gqc$r0^8?uuLj1ALU

?gKn~}tz*Ts7?cTae=rl?gkHRHyOKpT>SUIw8OO8J2AQe-^|lE}N+yAS za;J-E?rZF+&4B~O+m3BJ`sS9B?Zv0b=>D688bcwI6Dh57ND)89WO*TZOVhwpHZt3G zXByk2wdr@g!#dQ>juxN>Q0ToEjYjzI2M(tYnsTWurqD<)cM44NiM2%nMs8Pjdy3i;;fv=#pHjT zk(hg%-CntGMw#d7dxwtC$BdW`v#uSo1l_574&{~JIF-6CezE%e!llZyfsuje$cEM+ zU7f9Hh6H2oBC}i@QKwyrm&EFY!%9%CH{ZaToo~D@5*{%&yz*n>EMzW7|9>( zpt6_d8FivBiXu_5ZOx>*5vW>-D6Fj2@Qr-3$dE9r}lLFN``{D_2*J)t382 z_cE3X4N&FhUu1d7W|VqNYXsMB&#W1t;J`=mPmjE{(el}$?)}j{OhmcbMPjV?X7IiF zBa`+|bl9eKMpXsp4-hBD($iuyEGrV*k+HBKWZcqQaxph($vO|X`N?#()_Yccen4h*CrqL@6r{M@u8cK zm!mC{ryhM&xs*4JEsL!qK9sy0C@p^S#oZeX`}Ho=_BRfZqi_z}yq{dwK|QWVwqMvp zt&N&7zXyy1_snr$GiK{2Q@tbvLd-#)s6K-wIxEd*X&3*6|4Vr5SxVN>SJjws# zd+c(wwT_3fX|Za1XAMWBa6tQ(^3R$F{rmfm3%5TvWX0#dobpP%fy{^aj}O;*8D(iNj6;V@o=dFKXJu@&aCY^NpNus_z#=zUY50I`tmwJ*+w}=U?5CFG}sK zl8>L5+C2n@q_#BZKn$iavGT52=A=^h zh7ZN(mt@b&joUPnt%N@gRkoUncV19RD}cm}hjy3JASN(Z*stgiSEVB$H#v}4VMxmI zKG|`>M_DqETJUhX@Jm>BZ~@W;@$qeYwsuMBnpbu)S50qwUeEKjo*7z5N14dxP9Cd| zE(otAR$5Pc*U}))X^HqX9+UG2Opk0gW!zEH=EHR2k-d{W|ErhSQ^|*pL7$@6g(t+w zXYHQP*PWC*u6#GDc0c*J>wwpL`{x!<_dSx8KxAP738z4D)@ z&ueJcjZ*H6A9k%tYd=W17-)a6XgyP|5NX;%gaa1bh<8ef*$5GA2_x*6W%rrX1XkWp6TzLCbp^a z7&gachRQEb7p%LzH@1TyxP31ec+dwQ|NHODo+zhHaUEbln#2;m(EdD z>ure|M(uVI!MWy2ha_{^#8j8MU4Bh;&@&DB?Fz$^P!tr>gcm1kPRA!iB(@*l*E zNuzVLHeS=&@+jcpy5kRQ>Q$eNsX0~q2ov`0{NSc>o&8d?gbnFj@K|+9{y@>?$~?=& zZQBRG=3}k=cgD)9TkP-KU+`*v*JMUH=e$h~5S;fw`@k_UxVUkdx$>2J@>+~JC+E8= zex^!Sx6Rs_YvOjy5)Y_!)GV|KP3qOI&!1Odt=f5NM~XS8*W?atZbY-;5tP9Jy_H5mzQ{n7Pyt6fNcjtM!KFmuSp1t>s%qg+hWs`O4g>k<5 zo39P%_y=n#$Kr^^f|k1{C+e!e**7j_r)M8cmM8X+j>O)1_vvuVa?0jQ)x8pjO#N?s zTAH&-j*d)arK&UQPi8w-7SAQrEn`Y(&})zEmZC0>rP2-5DeEQkDIMY?8g##z25~GM zKewQDBhJIhJQ5{OJ!tA>N7zsXlTOr`+s@l(*V?$x=E~`mKJ^4#<`klS*S-<$55u3h zw}^E6_wDTQX%V%T$}?Dse#QLua;`y(mE5zOH7QWBz>b5OJ8T=6ZI3Q{>njRNx=j9H{B1 zB0+;ToS^Jl*2#a_Ij_ExS7Vle1S0C6@IK#kYfRB6P8?XwwpFO|Ch%6p%0;>!UO(cf zE)p?Wu3NC1=v}v@1iIn5qRF&2&YQ!#?$>!GYc{K2s}X+cn(mE-ugy5Dm+`QD&b(u3 zbkhIvWp%?F0g}b=>aTn%f&%I}MAAT_cumbuh;w1!|$esIrN zbtAv$ox95FT2;)ljMbUvVM$xI$S_7*gA6hp-nBUh)1NsT=(WzIaPCe|mE>#HONt%) z*1{jMZ8m@LrEjlx4r#KZdY4&>bHTYr^Rnb7pWCXVzDqeHPm_iBBV?`&1QDy16s*&P z-*1u1tgIQ06KQVs?tfU^JW4J!QL1X*RWEo$U*Q}w;3d_&Z$9oITyou_&0~D*^pmR2 z*}1RFok{6uik{i`p6{j_?wik;Wp9qzn2Sm1FSxaKhxA2p;dop3L<5^dg8=x`r_Xig z23VzvXi)bFw9W#TSLa+crF-{4PdfjHi2HWlBblX%`eFgscTOI?S{jeG?M)C2*+H;i zG44$^mKm^d#i`2nIlPVNY<22)nMyNPyKmX?DWW5;cGo%@^wMc34SFaIDuVwK;>KZ0 zziJMplMmSNqovcDy(-`2o~Q2XoqMtL!tSBc*Uqkp@g+pb5%9kSeC?@Ula>^9x)Y{# z7C5~s=UxJis+JWWc;4oCrZXt66I1!JIMt={5|#BN<;nU%%CtxeWt?sX1yfWn-X%oqaXKyQ6iLbBPEs)vp=yEbPA|Pb^4XFDV+!)Rn$8lYr8@qSH)@S zzBaHT^3th2B7cCg@6(alElrfc?{KWMdQG5v-?&OzsWpq!C22-U2Ap;tu{^$1vz!%A z4WAd^MsZaZtlNv4LXK99WF>!T zcQcq_D|cIfIo|wSyy!i@IIEVv>-3}2U5>da3)Q6wkuEC6d;=a1rxGjLVkd2=937LT zy*5uiSXbR^Ex4MXWOw{&88&K9X`13lA;BkWSo>i7q|$_=MBc8$!siR`eP~Q+cXIce zRUhh4o{d{J4vwjOIw|qCwaKS)kHqnlIl@LEFP=UT?{YLiIW>hZtr2hhtTSPn&!IYZ z!+ojyVB1vAqU0^7w>rK2w;2+&7ojj3v^B9ZBYl43wm6$5f%GcQ&)}#u*{=LY-UMP$ zeEa8x`Qg*rPe2pMus>em3NZivFTR!Pbv&Fpq`RFyr`_{k+MF*jZ~xddm!11yRNjKF za+m4VmmX#VoDYJw;NEL_FuoqVt=dHy73wl?x34N3N#|X1?507Yp4h2WyW4kD-;^h= z-NHqRy*}!jdy|!wY2By-qfSjq&%FDSb?2^wfBI0>YI1-Ej!y4BTWw5dnT)3B;L!iTsb0cJ)v1me?m9;%$*bg}q>2zR)%W{!<6@ z&gBzvaxtL#@6V3l7^#Xft!XhN=W`F8=gqZIkru0I||B_6JLZ|YHX zZ=mDs@`426T-SgNv#RUu_g(2XDsv2n16%#tY8N)NUcFhh;FKP`;ryA}ox#c}M=x6t z*BtRA;zf7hpWS{g-$iUpVh|lJGix<)x&E{1U@(D3VihzjJsGuMS2nYxwvC%}NC?GW|C?y62q(hd9(u;tC)F@S?1fFY7+L74Oz?FEMBu( z8r7aQGYB52L}oixDedCz?ZFz8BvA0Ziyq50>zl}!>A7-f_$PocMjP|gQ>FN>0{gu^ zzcBI{TrbuSzM)-!*du_9e3Nq*B%nhQQ}ZhOFx+=&>l`u@aRM;|u)y{tEB%dF*KhiG z%eFEU;*z`%vxipGdI6}~C0NxU_=JWjPsr2svSDcPs{XUC`(cD1aDHC83|Au`)M8>! zyAYT)qznKD&wq!XLOk82nU-74i@lgz-V*TBhO6VU&CWbJO|52cH^K94a7G;pjmD*? zzVPpL9DdLG)?mW6y%=iFx&2CQ7T~CtyASC1A3vd{l9UU+aqj2GcZ7{c3DJAKdwnd4Vy-n_ z_X>*ufNJ>*pau`Dff&m|(V!W#O2qDgzT7G%kkk($Ix4qX!1IsTQQv-Y|GmP^hhE>Z zPGduv?);ht7*n|eTH%Jk!)UaepW??d5bO9>zFx%W59lrCK4l|N1lJK3z)bA{3@a%a ze8Pj2GW)gEc6t}CtBeW)+y~o_AZTj==I0_7MoZS`uNM!iLy$#I?!y9c6XP_eZfNTR zDo!lYOpV7f(D+qJ#inl`klHQoas3A6<@yhlN~$L#i9Lt z>dT`*nrdTHW}X;+49w)*aO&B})g*}%5bq^A;9FXhOz@}=K(IQZNqJuvcW{{cUa z9L{jw__tc=((|W=qC)-upb~8gva3@p-rnluKJKK|$`mLf>A><(qbb#?Rqn@mYhCr$ zSnga=#UwTP-BW(q7f!)=q*_n)ztmy;ZqAP>=y=t0_)q5c4^^wDlyf-h6W0bA?5-bJ zhQ&wDGy$mkxK28iBfol@=HE`&yoGFouYl;h$V-f*SA$0Ko<2XM4kz519R%yPLGaj9 z;i5+j_Y>Cy$&uSo%-(%v&INC0Ak`~8{U14C{=eCA`-eJ<{DY@*rqh`@v)#(+%o;?| zv39lYZE<Vru(a-nP550Txsa5KYnW{$~)Rm4kVz@8tq zsDxNK!$j*83PmKC-DnEm1Mu~5FBRRZWJEFXy4SJ(+8d!7x?JND-S+a?Mii}Ywy45~ z9CKPt$MbMwDyGA5nv2R?o~mX;F)=d}ozlb~Xye;ksd~>kkIXMfFX?M!r0B{>uIx@t zeKW%6rwpATX!E0H;=~MNIVpErB_4SNZK&-sMv`OqhDoXWut*Q0E6rzo&#=kBo|3ZI zVc2SgtP4wD!UR?0*Shy%Tniz*I=O0voVrXZx^H*&f2U*(r2Nj5(!?&BOOXx->p2-D zMFzI{-p|XtfitMiE_;_F?@!h`p1z-Y`EVx;P2Mn>pBP3kUF* z0NG6)F|!`)*8yKY!y72`?!%gHbbzPX)Ubl*pQVP=@XITLzRVCGX*?5Y^Lgwq$)L7CQx^ zSB{A`h9w)$pojnF!I@us9tK*OM8oW{(g(=~M-}x4;Ic7j;l7+<{OH%?*WDF8^h+#T zt%j9tXC!a(u*q?4W$Mb44ZNf+>7VUR|N6?3TlhG5MqfSbd{*5^_ubz`A+ZS$4(a<7 z4FnP5*1_+6EO-)?(&Y{oGJ_mBTYj45P|D>5b zYqk5ZiY{n8dM@-Hc5NF`4R69?bX7R_7>Ku!0M8Sg+NsHSKqPXw;B7p#v$!@SS)mFc zLqFP|1LdP$L62>dOH%X5?i6nzwDC~6k)+q1`>+TxBlcmU3AQ+5jkr_oOaeLZy`dHb z;l*4Z!UhU4KJ}soUZhinF zZ3rM}-y*cX_hLy`C@w6mBG5uJvfKhrhLg%ELElp@Z_xH(m*g7WzI)qXi>q5_B}1eH zT7q*}KrE}@Yv>4h{+FRahg-Ks=QoOSOy=WJ`Dpvh;o+GeSEDz9ZryB=LU!LARWJd3 z-j6q$3zZ)?r6jC%dpe2PxIRyg!kO54;q%gVlU38NCdJwIJs937Uq)|hs-(8Zj$N!* zO?P;bYVvgG7rYDw%8V8E9glr|7~2vT=3>7f0sq$PlC7*HyKSI;&UEn@+t~vD_*U2J z;e57-87{;zr&Y?6sKnDjppt!nV9w*LZrb+<=F#4h-VemgBDHc2 zivC<`^+Jg;uq*B9nW?9~x|O4G3s|uTb98F4%8MPtACI12R?0g*G%S&Ac99xkkI7kl zxw^6PX{@)?>jv2qBHo!2_M^(A?g~C6N~GGS8twkkle)Tb*`{RTWBC`$3F1JvvWOR= zimX9otusH<`v*Q`&efCiIOZ~h_bEo>F3HI_&6BF#$nV0AN5c&8@)Nl(brXi*D zMruJNZq6xE@mG1wyBvoIhpn{FzgxXQeLYAgqbDWbAo(ibljA3C_TWKP7rpLu7P7>( zxYw8)k$E-I5>r#BCO&!Jo4IT^s!|~&IsS2#tl0Wq@sY%8O-)uK{lL+j%MuFDMBCy8 zQ}k^1VbXT@mYaz#-mb<*c;l=Kw@=0=<}Bv)<>znq>vyATj0{HQ)mwN%S6*ETA5n9Z zS2?d&xeD%!<+wV|GE8o%o6Pp&pH8^0QPgGsavLzN zKG)@!;q^{7uO{w9YfB5ie*V(Zfc?*f-$dqwMTz3R7I%^1$J=A8wn%QrN|H;EVHPGcjhrs|W~h9?$YVO!F&l@Sfg?!@vZ>)+uao zyndW?0$N0#H`bt}%;(~A@V3cegZ&Ngf4s^+)IurTW8TeLCWmh!R3^rEz#a(NQcaQJ zDLfVfN_M?*;5}kk?$vLR_M4ekn%0eSn>NKw0`JGd20ASP#WrpsejKN`cmYK)&(#np zjWWHf07`fD6Bdo=m%Yb}4XejNF%KQzYVcU7p(0&@Xe>+TrveC(l0OG%BSiID*oSRz zveJFUwyh@d)W}s)UL3*zh*PauWs(5L?s|Y)ew%YIk1$TxSo=p^2T#STydSno z#Xp=Q_uC>!JM-^U#yKVqVEU2BP?wAVIy|C4@9QM z(+qL!HG1K$3xYP6PR7n*Lf(Rd)6?mkyS#EgpD=e6Lms~iBU6#ZkzwRoGsK=QNv^4FSdI7Ss(2HL-;fCig44afEb2AcXQ*ukJQ%aX zaG?-m2ky`x0kN+36~QSjR?59b3W{=ijymApLc-?n=BmxRyN}MU*Q_;2JM{gy9%up& zfQoOglS2sl-cbJEDql{oGniMcAmg)ZKbLpVxllicuS_&-9zkoek`JyScnIsm4)RnT z@_9tX>uP`$&Q}G}-d*h_ay4Y5suL}3Bby9x{21{R={1jSuQuT(4r}j!@ipB&` z`yk#5PsCc*7V=>0WQz^!0TY_>qoTkI+x8di_`=rGP}|44kSjmU%p$hY7svzD9pO4e zwo2va;VljD-gfJTGCw@4m=+BEyb3Q^Em|LhNGK8^CvP8?ULLzK`0|y9x7YyQChk7{ z4fF*B8$Ii zqY(S0V>ww01_uuunPJo4j*H8-*DI;4EGem|s0dF_oN_-FF`_<`e?4zDCO{~%NvQuh zq5PKvRgIi68FqXGsg_zj#c$lN6|r}d`*NR6l+2}rZ*Kdx3!P95Eo5zg`*l#I$$3*@ z$A*{KmQU09d)KypuP5tdc;wzE2HZUOhEHPcDBt!CRQ~cQ8ZMt=fN!QXyQSz-Kr(cbp%EZ=Gc8%4{)*O-0G*Fk0$C)5mJhRmh=#Ub}(H`)X-E&P@8Y;R&J zvuP&d_=&D_Tb56Ics8NI+KJVj#`YoJUv%c~>2aqiExW!ykvq?V{v5v=vXH_4d&N_f zL-la#wb`C|$q%=XO(L1JMrWHIx7}*52lhk{ekApj-)+BIY%$o~nkcuvYw&tkSL?tl zT6S=eYXVJd`+4aajIS)RrlPZi zvk3V>w?;2`M>h~tWO!ZlSrU=MVK|0vsdp?eBzi6bADA5es<6l76zY<-s!a+M|ImLf z;!f;|-@l)q5-8AlTr!m;d@;VYy({jfPvLP@2d#^54lmwCE^{qiDp=Tc-s>o4ETnxz z%+%1Op@HjwY;}EE-n$R(mqgC^04vzR+pB*GlR+j8RRW> z zSQ;vYq{)sfx0v5;fE>+n>Q394i9i@lCWy{5OS#r`KGV&oPRjS}X*BaR%i61>G_etY z^}~kSCs|kZ&(}^M`4`GsDH%`G%Vo3aT-U<}=Z;=tWcrw55kDPE-HW6j4~aLjLx$)S zHjMZW*WA6ht~LI$?FNa?N!(feyQY0)067k>^<9?D)=jSH7@CCgshZzfg(DA6%yPDI zPDBR>6V$I86~)7#yY5L<9N>0cf~xOd^ zcf#|}D=^ND^Ezr8j(%dOqq@?Ps2mh&H|6m<0VU!gtnZd*W_@np+^kuY#vp&+6}HDS zS#}=KQ5;hrVxkzCFAydKQd~_F313S{0!`E)69JO zE7oo!{6rNZ|NTR0oWIwt^O-04UyFs{)}$G#cVPV*07^@$*^DG}gv}#`hN0>_#{%XTiGbTrfA3U?AO9r3C&H@>K31q<_nc@y_x ztlPABXyL{bg38uT=UjjeLlfCh{(7UdEpc?UmFC-gPePy`s43_2V{D1w%fA zzxs;%bXhCKZvLrGW{l7scpLFZ1557y@H2<095R1kIHON5SU>NNb9pmUqtA)4`5SnNDTm}*MES0hYj()WD+iP7%#G4)lH%|AoGjx)2p_EE@jV-WMzG>QBHO}H+<^s zW^nQ4S1w8APo_D^;+e}>9{fZWq98C0(A6_;i3FKDD7KB4S5YtDxcFW_`@ykPXf}ZR z^882E{&sedlUxul#!oCc8aGZK*L<|`C0X-%l39U~K=4AjU&(JUh;+E1iXWJ;ipzOy)|)B(1**FG%734$XgMiBl;R;r}KcQU-e7!f91`0!l!+)wnyr3r?J^M4{5 zS`%SbH@!V|m{y|ws4D5?e3inUg3RR`np%~?n)c2%(yhl9JfsyPveH2uH`BcVA4vdi z?RFlh`Z`8I?dx)vEuP@hgn3C-n_RB<9&)l96e6m+hr0c45n=qptncdrni@BG3^MI= zYz+GQoYWkw+}Ya?=EY}y|0SKP{Qji%f%?BGUzaH9ze0siw%#%5Nu$VNQ-?KNouv%y zMMZkbi%zk>`Wg?@GSA^9B?5KQmJB$;v$nr1<7Wrcn{lYx33_q;b``QtEH1k?lFP5~ zT=8<*D0HuWALh45Z$oSe5aIMA^M8FH?z9h(Wdzrn;=6u>SL*&7k zC+|)iIZH%-!XUsevGUSSU5wC}gaU!X-zD>tpI+x|w{CmdR)iNue}n0R*HfY={iq7% zk=9{*CHX0{(*P3{T-}tTh`$)1RwHdLU6x3h^b>t>%fK9lNFEaNp~XPf{Jf-8^6^P5 z+?qF9i+JH{{M{L@qEGA*H3QSH9mT#i9?W))`Fgk_h$mla=!dihu(<9JAv$v*MVZRl zWBIdR`J%NG^7fp3aaWg_Zl|BVeZJ6J^|dp>hV%B+)6;Zjzih9&ZHl;);g zn}5R>?}WbC*q75YrLKA6uGAF~LqX3>E78*>(4YnV2rtos^p@c5=U;K_yERBB1>Sm` zB}G9xY9&3EA-Vb?WfNz`+W33Ro~!9F>?tHe)eeXk-d4Jy%`uPYM{*!r`I3Xvm9oR*_6qlGe|p99LhyV_HDvYcyu zk@3|oYwRg1BEy#Xef^=eaPfFO`6re}7sRk;zEyX+w^@VX1Py4Y&_E@wHc_;*xuR%Q zI3a!6<>dpJf)BAruM8+jf5c3uH#5-qJ5Av$O&}kt(K3`7-7Ff1P8(_yFGP&EU#?E< z)48X~!q%`bV|Zt+aO{6L-TQC74P;9g^|U0GEMnCF3dTdwJn2$j-V4ReHUhx_ntnQd z2EXD71Z?%C#kKokRfvf(;&H*VO?e#T|43Qb>iF2dg#XITN$s}rq4V10R!AUh4~+s@B)4m*#YYFz`ST^M zhze4i85#o30CCGU<$sqD-u;J!VBiR7VSHamL406CVKjE$Snel!&+uFiYB(O9+1FnG z+(cO|8(9>6{*A2o%yb{lq{+v~rM=$VSG(cO)vsRqzj+ynSpz~Nwlm_bFzefcvbLvx zNXa=EBzeK_!76$6{aYUf7oimY>idB$C*Yd=krhQtAL47l_EVRsv<{ zp%Rc@o~`b~fQs+~wEFQgYZXWLVaO_Bpvxpy-j^h1?85>8Lf2Iq8m|V84thj;@%N-a zO8#^WUI;%icU7OzRxxbocTX!(&){rcO?r6DW&$H29hW6QUDv+Y;xF6LL|#YmuY&N@a6HwSa`t1mSFI_a(A z02MB|<9U=1;<93&fL0Ehd1Be+=$*W3KF_q6I%{bz2Vt1y1Z&1GPKxV?4Nb{xZ?FMK zJrKgJ)c>54#(QH&d#NKEa%~HIdZrJ zx%SVuf27#n`#uwSB9Gu?3}SckJVm8Iw2C9@p4z{XaRjvsNP~aK5EhUiUREN+XriothRW`U)k;wX@Sta4#51<%;Bmc=M`Nw;9;q-U>M z9y90dY3pB%g&x>i`!})p`UJ6u72PkoS68=U&IdX<3yPios9^TvM;(#ZlE5TTmW)K-~0zpUF__M^FNhSi*Xh^2wbCo#6d zeg&OdzXi{iRGQqA2dm z7g|4j^g~Q&d~5|vj|jUCn~pCB8S0z5Jv5>zSw(Et$$jkgP77iz8UoDqrmOx-*61ex0q>U@lVi4sFoa ztXqTv58>=lLCxWsH|^Y+*}r}lR@RgSJMwX_Mm7W8xsw)mTdUYp-j%n?VBNc@cd4&+ zsoN@DO))2;Fz559tkQ^KNQ+}sT*9eqX!jncDyJ%p|B#{OZ~EtaXVfDJ@!S!^)MU{R zO#NX~o&dUSq3EXm;44Jx{Upz8FLjTe8WdHVczACutKBgH72Yu_B6!%R>FaWE&XvFi zzVVn<*}V?yWA62;9$k@<8aEFq%24X}0?~?y?V#;+{$Hz*CF|}Ld@z=Dq6e{+rbv$j zH7(c=kt+|{3d?`xU3D~S7f1W(PV=b(I)wbcbO`XzJ87uN#|=TR1o_*y4s+c>2@T1aNJO+%>QIa8t9i0T2umInCX1;6uDI({ z+!a!kLsawf;ul8HBq#ojG@tZtZo%EKuTJY*%QxX4#`CS-ts^GB;t9H1C)&;H!ibD@ zo3>?TOm^rU4Ob_g#N?ez=W*%$A0XA(7cut9Hbo?tS9ef0HaxWlrOv8Ps_^PRI`Q`m z&V@r5I7sH@0^DI{v?|H96#W;SUKc#wxe+xDo{y!kEeCvYnZTxEraKr+?N?a{$a|pM zdekksnx{v%DV-dt9n};hv3_9?auwN!*}zdg1K)F+17UPmu-egBc3IXzaDaf?#N%}y zO}RJ|dzPh-^Rwq?Lo&rIem4IGfmFSU>^uZ1K*d_cR1q+^8C@rqd1J7XijpW~_dS^5 zUO&JX?0{!HJIyzrK@SmO++3!gPy^tdkAS0v8DRJ9drqjW)NpplCndEqrg za70kQ%zuDZJPJVhz$BZ_Q+e-0)BOK=2@LZ|SJgJHJZI3&Lba@?P^{eZxN^hA#Hp#N zTYNgI$(R2$zJYNIbudi`Q%~nls^F@D!M!m!G$MR(*zGO4kle+V-yG#u9aFN_orOzO zfa>Urm{vL>dJ4a?J|TIkb&k72bFvko|FMK2NE^+Ue%8`Te4u|qa&?xNW)FBCotZIb z3B%!wzCB)NoKW;(^0x~o%D>}6h0pxIDv6yT~D6hqE6%Lb- z#}^ICOs^Z-uDs(6cy;}l$kZDID7X`Ih+Q#=1+l^gfL(Gjt^k_wM{ER*`yzILJknjb z>SYEFaR6wr$%JeKz+2Ebji28;8K@<<5X8*&|GW(5ZKgABbSGm_3+-^qX?R3X?Xsi9 zZ203R8T?1ih6l!$fEgbIA61?r?Sn;JshO;6Hv)G5pOpVd3LvM7_WCZ`mN*idUQ`Lrh46 zVC%)YIc^P0kGMrPuug^OT%6Z*GnmBLNsl~vBJF!^H%3kG5TtUIVfO;~G?%IN5!3a^ z6Byp%KL)%eMipwFCl}TQWh+aSmjpp2uUcLJMpf69UMqqVNwkpox-SUsuPkWV^j%wq zVU9(8G^r>|ko*cKB9I@y$J!2#X|N9(29kyzoPF>#=#;&OG`n9Dj!?d3N6a%O#*_#b zD@>Qt(rF(nPUBDDpG*3dv1dF?AtSX4y}~1wQD>exG-z598?Q1f6zHnJFqgr$YCz<- zrq|+!3~L3Hy0Z<&;BcER74O-!)0!=}1H0G}0ZCD8>$8#VvOE1$Hp6MY@iX97CR8z@ zN>6K!9}B3saf$zciNa&1NxP1)?>7_;fv8>GG$R*NE#%T3-e1L<3d4l|9nvv8PSJ*% z3cUbA&a=`3(BDX`^uM9TI!sem)RUTYy*rb5%AqCX-u-RLAo3kVxFxx(!Ria<4Y)F( zMVbEf7uK+P44}K!&GQlsmO6~4x0KjN&f4pQ*ipQd`nIRH zmSxGi;6Ad@hs_1Znc(o1NyLY37Bh3iu`#*q9MfTSAzv}Pcv9f#V?M6C?wZrrB$5@5 z!I;3Utu9WyTG5BMwCA!eX1^M>2M-v{c7<=-$W~m|@w7Lv&y1xkH;xH{dx-co)Q9tL zCz-w9`QkE^-V%b19B}BXk^`Z}NM))d-=eUnW!vghaG5LjzUWI*)5r zn;oM^6f6!S>E=-JoDf&fqo~?dl$l~S_~X*-pO0lQ<Gb9|%jsq+sv^L%bBa zl|XXh5OF^K3~jun?aLL0KGvV2@zIsZ`qi)PgQ43rF5u|~yUvAJ6-U^iGiwow^?GxX z^YbG%mg+PG4kAe9PPw`ZyhaaIRLxvp5@RayQhoff~vh0z`Joojgz>#@mp?RS;43Eu~QalpVA)m zX-MQuoJ<2NgG8FdIlo}~?YngHHp8IT@8|Z8tH@;iU63RWH;$>t?lhnWyXn;t&^@wm7jhKW@$5gCXvu#t(NiVBWER-!Yg~M61Ty~Hy8aq{AX`Pk z!6>)ocjgt%$eX-n2V<&`7OEw~csnFuqW|QaKDF!gFL>lVOpzvL1kMD0w|VbAZ0r7Z zryse$Wm7FK7CN-22^z;%EqKDi39V4jF19!Y-;)M|fBy{|eK@|$w16N)`Q-f}m;A7;zt_z1@f3(>Q)1 zE8a6Uh!hnGFJ`SffnUyswjy|*r^I_w{@rTE@=vST%fY648{?+%#m7ZIskKzG2fcev zUBGT;KDawoa5+f*rv8hqU#*ryMe0qBFZT>1+_Y;*_=25Ks)PMh%c?O7$+FCvVoZL~ ztsC3G>!!;VwdVXGLL(Mk|M|;`K8ztg7PiNHB;lgI<&#n0A+NpO#E+fXv$F|t_gxw! zB-lC5ZSnfIPa;2qlZudm&bYyyDZl!4U-)q)-6?U`U-H=F_ReOIW@&F)4_9^c6S(-d z(ihUVjo#mBk=%!g`>#lC3;$|oqPGFl?LN%X{xCVS(EyCzD%}ewYd-kdSLkiKG^UY# z|Md3=HK7PZ3`@hE1Bd(Cl@e`BU*C_znvO0TcnA)QZ_g$~nya5L=Hf_Eb-lsH$W|Km z+%(b{b1KHmBBd%hxxk|ed#cN%$>|xe1x3h-oj-j)r1@9oi66HPG9rC>5MkTe#~1Ld z&Y79(>`1Spg!aboc1nz%KN@9w2fC9qcr5IWNH;Nm_kY8%TYPB#JpKvhBz+KjI7i8T z5;{hPPg&J26l$NcJuD7?&?S51b9&5<`b;g?Xxo{*a6@6AO+LfB))LNKu9yaWQH@*8 za^0oNeJ3^C73+^VY6)5$2`UXi!;jj!^kvH!<=^&^uyBq9)Ykfv5JvXfl*uyuIK&uMud3; z;ZYa>F$3igma=VQu1`6$u*Zi4?f{QXmGGIwDWGUR*PBxFy*``&=A=$ShVUng-#XGK zJR{9>P8;AfARsF&s&ArHw?q+ZINAklDwyTKRVrT<11A0xmh&}xJG4j^;B8bi>R*12 z0fn&oPZe`7eo_ZC+^`l6@9?bauiFcEo1v};-)w}V^Vhw9nYca}wf$C-*f`U^YMN-( zhuXNF2 z92s=7A!)ZsqguII+#Z0;#p+5L)4sji_GipkE(BB<@tot`@s57k+0qD?^Qv%JHa6aA z$jfj;nRZ2MJzljhXh947dih=heNg!UkI@152!#!`+guW!FtO9#N<7I9X){)vxDL^$ zHa2N}#m#-x=xwKsAqCO}^DZ*Zy9`KK!Pu?Og%xn(hYG>(M)%R%k4$)Z#cuJ3ej~ju zr(6x4w9-palD0n=$<6p}rgt3F`hxoq>(=T44hx)xN@Zz zQA({SY&zQ^TG7=uT|BhgwD3xSu(K>aZl!;z{UJ-;<1&|5iNn_A>BD7eh7<&F+fWc{ zUU>`48MM;D6amMY>@VgQng$-PZgRhAllHK>h@Hd@RZahjjxC7tIF!|~%;mdhSz|w!gObmv@zffl)h9zQ96IlR5ppeAg+0#&4>*Wl z_9#px6<#eeK&Ko39t<5Ak!_5S>i+YD#bf4eUqQv46QjLNX41>HaK`Sx5tF{iGr?3zz}N%0TI1~uEU@`9;+yX=kQ=E2+F`=w{@7pl5t zKD<+usnM6FzLQ%Lx6mMe4}I#9V`8glt)LPQ zVJ=~sAP%MLcI7#RVJu5>Mbq4WTG402_F?ehoA5{k0bSqKNO?*A$-!rmLeT0Ki(fxe zmD?QZ;1i!Hvk@9UPpZK)LKE*1?9a#`eH`K<^k!{benn2#uIg+lzS(*-fr-kj&Zc@j z7dL(m7z!Sm)!F{36aC&K{Ph$AbrGsIO4YzmBqL9AbDKghSAQ#TpKLfnJ<`}?xP?Tv z-N;FTP)PD6s;kQj&2os3s>*Tu5l7Jw`i`jEylsus3K!0U9{S&M-3>g+nufb)` zq^438h&F^(-@I4Fh7QmRqp_ow`a`@jb+Z_AWxYcfU|<0Z`~Pf^JHQEc@V8q?PE0#6 zf28(a^_J9&LY%Dg-!TaP^IQ3kA1wEpKo0|viYJ(94?WZ3M*D?kS;T0|qb6yHHjLBn zE4!GHvy0?@hN*qn5d81#KMJA?SrHGx~DYE>9qobqeO#j0)8-p_OSd+ow;USZTE8%y} zgq-wb`1O^wO_B^?JZKg_q$N}sqJf1tp|S!aRt$jOGwZ-*d6LF+(e6J>_X_GYn0?Mk zYh1|X*oq1iVccM(pRfR4uwp_!y_yTZr>M9KpKzse%1k$|j1p?K2=?!&F0bv6FU&o( zvZ95gkL)VH#K}-MZ>~8Bg^uJktX;Vxwj4%Q2&3N{uW6?oGzax*VR;!zK0jV7d7K4BUGP0 z{MS`s5=0PqD;3dLt<3f_JTI!ab9LGxR890<+3&NVeVn0SiucwBeO`Sv5PigPD!V=X zs1u5E*iCWWjCiWZBfTz+?dG|PlH%RTuGOEsE4g{FqQ_#_pB#R!b4|x&<*BL&ATq$| z;KKso_#p)O%b%>wvt2Pq&m2Si%xX}ZIEFJ|Lt7xp~at^`VIvh~0vWqa5%O z?oBR{*Mj?@3l>veTyB+3qD5)dZJ2n8M_4nC{`KvW<>@Cb^*!qXStmr9`?RXJW__Ol z@iQZH4NHdmeA>W(L!$a#nBw22XTh!@89}_au)6W0@8#6PL|35`+6&A2_=#E2e8@HS zk|$eC^rHKXeN&yY)xU;~3b7s00nJ~j5-+G^talM?2VCu-(k03X+t{9_!V29fROS~G zYu>McB2W0XuSF=}+jUs0{=O$MUs^hTW~k~MKqC2o@Lv8r(*OS;&?1bxnPe#ja9F&0LOlZFW`7Xl*y`SaLP4a)mMgRDTX+0u+mbrR3%QOsAB9XC1G!H*=~W;38Segezg#Zr3b$iv%HfJl1r=CEm{diimKmj+*k((-}&Ql zv#)~q^S<=c8yQPHvQI+DK1dMx)d&!M?-C`+VN;cob@(%9{c6Wfyie`uI$xoIEBr)h zPEC52TQ_2Ny`ttCgT^s=aP|F58*5n44 zJQ)02tZF3ctBpaCoE%|r(CF?*lWOLJp=WvyJ<{hp^bZm8F<4B;s0oQbaQ#vqGCfRk91r~AEqSf&D4~*p+GGL%oQN&B-Ecnz_1$wDpcFkF67S_c=?J*#peH z{R0uksa8+=iI;tL;)Ad8K6}sO%U@+XPsx|+c&nSZwcYrsT)45b3W&}j3^|kXlB!%n z!1`xXB~#p9OwC=7&hJ_=Gx~!ryV0d7Sj=>ARV;Ft&v5BQIHf?>#wLSWTqttWGY&=rM>cWxHkk2lA`*db{skAbvA3koqktAGx&BdE6x? zJ{cUU()-2EFf%co>ZZLK2H8u*xLP^6|1e%^RFiR2ysj`CsF`5D%3!fU{VCs!E!{Oa ztGW>(6`_poT#KZ$;|F&dc(~qf({3-<;5eg$W4kprE)qFcvgVE?Nv~)Q3bJV{mOMLf zMdw%55V0?7Z}Ga|)>40USxWxcZM3mi5Z`X@{Tc;FE(hk6+26=7AKLkP)t|RXwO5)F z;B}cub~pQ4kGW)vOl!rogtWV=pWOm3G{!$;nQdOE=ln<*5dW;h(1sEnCH%nqaXJff z6243>J^H-cTeP^m4`ZONmdR5Q!h4S1wrxM0D6hQu5!;f>jQg;&?M7q#UgPOtIDRj3 zo-{$e4k{}>56rV#W!6$rv%ASy89L(@1SaUT!2bL~9@p%VT}9LqMi2KD&@g>QtM~1= zEg%V%SL(GA9U9MtE}gk1#7x8d7ri4KBIsTZxpTYUUgBbC{T2;nn44cD(oXWPx%^Dk zE2N^S*cx8Lt2Bi-`!CIRT*TPs-?2OFnc=9<dIyn@Q19M%W?!5x}e; zMtSX<46OL@LdI#*BH5=Ow2=ky3m@qTVLk5Z2WQ^FGgsMW4l^6F+i>q&zT3T4 z@8MigdM%Um(+aI@g<_aR789!wLuuDLwA z0-_^)9xw90z3g3x{m3;LiA^;Q*?^3{F}?tY)&#=JLRyvLgL{r_(Y9b5t*^&e6k;%i z&3W@fWnqWl?TaFqJqFn=BW&Z z|8GaZUm^UTmVzR{DJZqTQXmFR%pu{+ECjJS0dVBdKI{lJ@o;(XJAdsVm9FujIt{Ps zmW}bX4{fSW9jv{gRB#V{;m?cEkz zNGk%s?>eT-f-Wsa!hm#|APLf#inrM8Y#6zJna=lUwz>y7PGh5{PtUBzO@jVnKYd(K zVWn6A;>mEZ0I15mC{ffGg|5MClA_fnKh|Asv-RXJyf@VzxR{>5Oy`Vqwv;g~e4gg_ zP3@FZ_rP3!AuoTP?CYOHFR8W(+kSB@k~?qLA2$@==}HdFzrWFbN+pDr`L=i1qPVY8 zus({yqhj~9KaTwNK)&Ha#J#2$si)LZ#^^gZkL7}XE*)|A)%Y>f?LjwC3mjOM&AxcV z@(-r+D}<-sDCSh1>%NickTh0kKGz<)z4-9E+w0}Q_}0-hhV88K%$Ksx@-FdCM)FZ^ z!hwV8+XS*td|7b=N^b5(w%PI7qOso3o~Wj&f(P@(es$czrD^&B9EqPGYX7!t)R9a z>apm4O5sc7>`(5eUYlV%MM?znMw+~c?raI4otk+sC6aQ6K89f3hoRg3Ts(?DYzJN2 z#-2m!bv#eNjHfn*#TZ??9QStkEbrqJjc1)ej)aph0&O0^tFM>?#l=18Xx4gTQ9Mbt z_!!2*WNoHi)YAQ94S!cK!?8$=tt6Y?8ZlBjKdkJQ^MT|A=3@ufi`i$cy zc1B#Sufb+n48+3d@A8pAcB?kUPh`+JXo>XWWWQgDZ2jW0VgB^9g^~BA22774CgGtf zVnW@D@j~A;24Y6IKl{U+c2Uj*EGdKhfqlWy98TW-F zUwkhrGf9TvZXNVOlIwGfM%^}eAwOlFO-57Mo(zW!E%-tIufZR)JYE=RRk{?x&ho$s z_RvbXGf|V2Q$h}Ke=&cH>~1^9J#sQ)iR(zGs!y=o?^r{nS?x~_o6NMb94^u;TD+Gq z+ly;rRQ5Fu{=hU3akW44qdUBI=iyT0Kdz~SsMH0Dcfu$^TiKnU{+T|myYG}RH z|K@j-E9y(iPgIXGg??fnZU1Ww0sayGU)|F~2*O?XuF85XoC1>B;t;6nrQm@BbQ&q=HK36NG<( z!ujK2N-{)V&BBPO>0hpnCbqYwB8ud%GsUXuv0DZ^blh+JD&#g!JsC%5MowaV1O&>+ zcZf^|#T{GAaeY+;QieO=pj?px=&T&fhWSHLrW$ zx!?2E)1=(Qzb@SL?vj4zC&Ht5x0w3yXAyR+Wck|qM0O(QTq!|M-AiL~HztMW`0P;a z_s6b-d=V!j&(8D4m>xT(&;ks`D%m53eVwhx!ds91;O0LgU2@}y;5)HMaz7Xg$LFWN z%Tc;BZO>+t$lrzjR2=6jV(=x@Mb&3My#4vj$0SZFZ5Y!I6$<~-*)zvZB16Xbi}ik6 zbY(lAD)Mf;%=uNo#B$@+1C%D1g1^5$WI>81ikh0bF*RVVzhpVuDvL-y&ATpzO3G!@#Dh){jTq&4a2 zGD9a|8pj!)(!L;Gz!}LW5JF9pm7*dNi5G?<&EzagKC-IC%-EB;Ja*&gM}cGI;PVau z$42$wJZ?3lmU@Wow33O^5lr>BwS)5EC5Iz!9~D4}emucx7%}e9@sEQfOyyTW;k?*O zWTn?9Xo6mpWzHPv+7Gd+loN%2Y4h3i$!(Y+ZFvsS3M<%xE4pq}1pZ)heEdeafZ?wn z`XKv0?9)fGJ-yl^njU!rLo%F}r?N$p&XY?CcSwW|uUk{=epMm_QUE#~*(koc9jC%9 z^Q-x5-kJu?aHSOnuoI^;w>5Cx@u4srM9x^`LgLwih~|yMbRmaeAL`|6=ln!(3Wg)w zk@f8`aE{DT4T`h7oV>J3Ci%LK*&Ve?=kwym^-UXtZyNL-@2H*kc{BEGKKQRq0CWti zt?^G(X?c*956;b{aa9085Y=!^7eY~5?+r|}+caLTJ5CIJustL-$8i&`f@wh%V0 zUQC4bFeM-tEGW+Ax}SYqbhCxJBnsg8)3J6NI(4<9F`lAR)FHr&MM0yJef)uF&0s;amT}q@QEz&^+ zr1u)7mxK}`DbKrb?|shR;~n1^=e)nZA1dSaCUvd3=Dg;0U2{y?e!+^r-Q=0%_p^3{ zV)~|O{Eh3yx%XSrbcL9L{SB?|W$r1)R`kMUJljNP66Kjnr$Q9a-=IVZ2$_8s>$_<~ z(zo`*w$!V}mN~pyO-T<*u2?Idn&pbsRsHqm1M95vo3@>+0ZA~9X;ce%KaSg>gI@{R zEJ#7qM%%x7a~SG`i{?XJdOt_F*#2PHyRnGkT1B235E-s6)oIfnDmC#MGpRiVKYnK< zvs<5-PQDLTE$9NYXnR2?LG1#4-pJ@nc|VUiIju6&nftCJp!Bz)z)B0>wYy;>u-GL{ zAu+Cu_7ZS7WuvN=yOfAO8;PFy8xQKHTZG3JQih9utNkwfYNKH7*{4#x$vQ4iW!`EY zMCdJA2>d9sA zQu9$=E0aa8UFRn^d7Sg|JL1M6PmLTktJ?B{D*p3BE+qWe zD=FnzsENn{CR~TgKH`_+!|dX)I@-C8X9pj$6kQPh`H2N9O6n|a5#{pW^APV;{W26~ zIr0X$t~^~Ty(2|W11ARjHCHfNwcSsCy4|u(;@OWwZN`j5FZ7^>#@58m_bW-R2!Zv# zX$1cih)+vD{Y}#jlkPotGm+Bvr$n>|Ut@MWG1WnnntvI!r%=3KxqyMNdI8(1&_A|Q zS3ugN0>O*_z-&AL;pR>h#+=IkA2utMNpPqZRkPbYqD^-cl`aQPtOLDB=yi;fN!R8C zo{?HV$y#tIENeVztwJ*Vo5rc2YjXiyZZJo!f~$j;QU7f`r3pH64WQ4xBPW^Hb5N>u zQ=SG|`oz5FZNO;e+qdz!b;|+><2t}>7 zcv-B5#O_I0PlWBn|-1_`#30<@|}~OF5}AzzHFu?t%)O~@lQM# zF)#X$TQz^dWBs@}WPx3Sz4O+!?!+5qC)A7>loy-c3YVHEQg;E_ z=Yzj&@(L)dyaAL+q4^N(sUEZdG~9_8oTq=+^L-Ralm{r#Ju1+nAIab#3Vo}g%=$6Q z2Z-@LWBB#~xSE{&Q1zm&%}y5~VVMv`$;PZNgX3n94W=6!A-fCRynwlXqj-a(^$5@c8P)8D!vV_R>A6qC{rx_C`4jPp`Wqf(K-;pP52rk-za7D>1vik=^oMLP5k zlyg2@9p8_Y()V^@z9(6usnde*NdYa`XQwMWnZqYt8s%ua3@Hg*sPq3+-Ig7x zZV#COD0AiA|FieAhGT-I@Iqs)$z+FxW8cX&)epgtqk&YXFN*?UOVs7w~+G7WafH1!yvjw)&shb~!TtFrJPQS2D#TlNP2l>V{?Ssdmm>IwMod zbA?^vO<$|&^M-TSvdeTDQA?-=FFz$}cs~<3&<0tlVpYmeY%gm^ExUT2v*P^%3Gt@E z!L6HVJo#D%&s0|E%#S#~G5YB@Zk@P(x#Q2PIvS=|IJ=~fA19Z zT|erEe(86(QfFDL@FVV9NIM1v;lO#SMzHXQe@-J*239FFHtCmpfmwDGx?nA3vZ*%H z(Vc!+X+pl^g7^n&rk_&f&B7nf$2It1P#W(5-Uv z9sP%xf&U$1i@FNM8AE?-Lp!BO=V2g26hf~aVp6k-;+?tmdSp&dEa&$`EetNB;#H`` z4M&J<-jS3x`& zkUM+U%)kpTn~1sVq%N&f%lTP0jj7S7(3Wqp(Po2L!LEgBFZB|6(P*u zGKkdb&o}!w%W;UmX@==cA-_)qEH%nXd7q@#mBnfFZx-QDXmYT3Ja7whji3ttMmj8f zM+H+LK#`IPzWjW2DX=k>>Zl??H^N3-(NCH!Ftav4rQ+Ev!)M=JF;FwmZsCQZ|C67! z6G1&~*R~4X$MaBMi0=m;xsuEPSCR`yt|WncB4sG);oqt_bgv{i;+NZ?Y47asW>X{O9F}!*jA4eSfh{VkEmzO`x>k0Oa#eur1sk zEKyFi_m2}DmBwKu z;pLmTU)IgJE8N#_oh9sSb--%DyB;x<8{FbTPSpFnW7hRqE-L<{0M4}=Chro#p%zff zj~K~h9Og|JBuEQffbgiC6W0K8tM%z4&Mws!<=1yvPH;Mu1qVn957loCBF1G8kcMvJ^o+H#P5i0oh)^ z{j#|YLO38?>PwNPRq8EIKZW>kBL+@eZx1zucvs%0|1KaTz=_?cV8}i`50v94(Rp;cu$*U>o8d<*5p~6n0*0(1 zpcJtDr*i+wk8hfN!+$J`zYbkr@PK^cmb&^S9X&4o*pb>QkxPzavgWo+Wm*b_BD}Ka z2v7HZxt_i!U|yFUi(%G_Ym^%@e@7iIHyEISj!7Fr#_A3Z#}I}xoqGM%-UFrfUcU4A zk*gy))+u<@Ao4Hb2XAq4y1Fy|4CRF_9RbUmH*pyxb~0ezN4Vw<(FQ~+gc}a(9hl;R z_}8s9{J1tXbac}oKho~o=|Wz_iKO&jQCL>2EYK>&9bW6% zA_05oD=f*an#QZCQexGeW7V4I`$gGew!<#T9$Ki(+dZKsUwsTqpA?r} z`FKr`;^fF9@+LZsXZ`lenfo;nFp{7u^f5FB_!5EqXYe(8WtVy~c0Nc*of1`b&ttHY z*E=YnU+>=SRnH}>NQn!kp+3L4-Z0q|Z67&H#z3+3&C;lGP&oZzvg83KOHn_WIK|#8+=k+3!fjh zc%Fro3n+1AXFgcBsl?RQ2en!VPT%Ts_J_Ze`xCuT~OXBbsk?JSv?n-&sO`l+V3bmwjH)$R1(DC((Gc)j+Bg@Y~>tKU#()&+c6 zL@V^=;aqstrhU5!%4t|5(?N)l@Dj)L;_-Aj-?vv+-y7YMhc5JF)1X#(u<>Lm?|7;< z`WoeJGp8A{GaF~N+RROa7~*AAY4MO&C{eqtDpuFLe)zqWnzwN+$NS8g(xa21exztB%Z_Qh*NKhvA=z9+sw+3d(%42{J%pD&wJq!$fmHW0^IbS&8M^WGPhG0d#DU3Gd z%@$QjCY!tYsdgvo^vRM?LU+sTsYy*zxFm0}McXb!8a7g92J!O=9F0IF~IyqQ0hwewzFE`Bm zJ8e6>)6kbhYA01rj|b+M=={Jjd`@H6t};&jXH%8{7 zMTp`o7RLaViclGC7O-*(sE*x!nLj4!vd;@I#l{ZgU&=v=Y4nR;Y!3N6M-=amlPy9D zQU_-tt~L){Pt46DQvyCQpF;8r`?CgqRAI2IgPFb)Y&;cSqGF8 zdLk9H2hT&);;`)|FBu4`HRWB;*v0>vrCqv{DBM;n^_g*QNckFG6btE4k#C=bzr@(1 zChQ5X<6F~9j02j&pLaqyF1!$8P3zpeA8S-I zx1V%tdiHXd3{8I$D}!p=Pq`N~O+$9R`zxg#w-BoonJmCME+fxTyX(7R=rV=clGbb3%^kKK3-i7ta@X#BcqPZK!S=jr`cdYD z?9O(VbPSXU;|l(+>Iz3KxRVudLe42vmLCjJTh)7UT^#`~$ERnj>wm`I6u1Uq`g&)> z#WtOW#MpkMY-VMpeuaG+YfXvQ8*Nm>8+KB8hM)^vILXf3!x~JXm8HeSmu_}q71xX9 zgfj)(be+TCR|_7a73{u!JF;@TrlK-pqOr>!I-KA8=W#+p~Ov z)#0}XBIo07bKM%Zyg?g6AH-Y+#QSu(^#wRtMn`)-V}`%YoX&AH>*^3Te8xwbJh;B z{%)pz4VXRH9W$`pYKv35bn67BoqsL{#sZkmsF#@I2v>aDqGnvxP?^=Sf}oQ05K`nx#m}` zLHv~KAg^yOylOAV_?On!27ZgF?%KH%JyTuC$rQkL6>Y;zMRz5v2}so98QR4$&udtek^8h54mF-d^Cp=LesMlKh=PJ8fuRh zB0R@0MdNB1B^fu7a`-s{aG3J-J!|S5G>Wc$5`Og1jq5XxpI}Jz#~%YO z>T`=PfK!L#LPmTv4^oJv(lKb+_Tj69Bo^X0^PFid?)PzAh4;^~WK_#lBu5*-bocP; z@vYnJ2pha_YtWN^OFgbN0jXnaGh`FT!WO1DH+D|g%_0BkxyDy+q8HqkVO6sAFlrB~ zM*VHu_v&UMrC`cZGdsm0Yh9Bmb}iSI?H0rUGEO1@_Ky^q?r)keBx&kROX&{ji95i6 z2Go@F%#_#r{b8y+17v|&vElt*=!4WdKH<#9LnJY6eOn{fM5%e+a{-=TKpkC4JrzMx zoFeKPI#5rNuf<}kUKbZclqSD^p>W|vw<^UMt2ZICq>B#6;O?a)Y9^$t!)}??o+&P{ z5{rLFL%Txrj&%ey0E1Oo>xiNFBtj6S8q_L!Jbu0lai8%#x^)>XIT}^Njdyq=ys9eW zwd&=^u3F8~ofywEVwXT{z2fdXRR$px5K~E}$njYkoU$TnBZDQ??!6yc6aSj01}MX2 zbXTf*HzAXX z@hn#Tt=`%93i=|87H-$?2aH_;t*s{j^LNIl8c;H+SDcwJEccR^BUO3*iXUYBa#dto znqD<*01oTV+6$h9LM~s+qj4Z}f~}iJ_9OO_)QHgwKOq(V)x(X9K?Re<8hyOHUa}YO zHqUqM8$ZP?+0NKcFjgWO?hoEVH;97~nSuuq`w(sf8@{X4%4v3S>LC%2vM zZ?5^KOG{^y3*x(lQ!?rf_OQPZ?h#}91RYT~r0>s*c; zLbSWLASToy5I$g=CSYf(5z$y_9!JzEWpU{UFIwLZYpT4M&%P%i)Qg@EtJ1I7#MiHS%E%g>;;~fJ`aF0(ArXjk=ce8m)olG zgT&oVC=)`uz+v`Eefr)EjB$FZJTM%d;q~Sz{Y%l~?546ln92xpUc_PqC5e>@wK7#t zLppJUWMGv4rg7sU29Yk4@1|fEH8=C{-@eFOi`8Wql>gX(vu|&F(v}Fj`%KMF;^nbd z-6dFv$aO8*Lq1qGlpiU%4x`7+R~-_{-yy{DkdE`(%^a(Q*7IDY2Fv$itCbQ5xig1O zcNl3ICb}oY1w(|1-w2yT=f|YmL~-2#l$&(?*c{6~qvUNp_I38D8OhPKXVH9>T0d47 z(rj%mJP~>(7n8ibC%VyqXIS9bl*gm);rgGW+%WOhf_Tn&LZnRb>b>CM<0vH!jKk0( zJK|&ehik6y;}m)|@oj`Y;`8F8rbhGe^<88ihNFt2r}?8%o4G7Pb~FnvYnLMaXy>l+ zljlz+8QmV;$H$DRC_g)X`v-Wx_6=rQic~2v#x8Ek8EubC??MCb?}>n}*db1asb`vTdJhF@1jUY=ZAW zpvf!59pX0DRkZ8yR|%@NVB^=qUiGk)pq12t)?jR3I=9BLS*x*@#%_FhEsaOP1p)C{ zj0#K#mG1 zRZ`Lsh9v%V7@IN|SozNtq2UO-Qf>bnhg7!dRmHy~-P*OnXNC2bWHQFZf|j3nXoEKg z1|bNM5D0s`{KjL_9fUAGm&$_QQ{~5NR4)kQ@4qjbSV{l2cQ)ud{p9&89P*bqi!1LU zjb5K1Wn_#gn~-!78k7=*KS`F%JL)Y>G(IaGSH-c-lP;YI_HtKiKU?R?BJWQrYO~f=UIH3S1{9gQn%Q@q|`P_y_~dG4_GX-{s%@4((~a7b zbzFqa|7HISjfT$S~i2%%^@?}7CF~AhAQ7uvPORy??>r!I907!xDM?Rc z*9S3oF|LO36PjJwgj1=9Cd-nI4NqW?{x72Et8bHK>Y~5*O6o+qx!kV!9eN#E4c!M; zLk3u`G^RRPH@@;)=Xt{I`rboS*7N7Gr}V(`qWr-JW!aI#;A$|V868#dI+ZH!4XI6MDsR>03~GH0h{O;Q)R zHu{e#aR+Yd-%W`Te@uyg{<|shcJ>LRDRqq91`K|Q?t=yafGqdfXi!OZsW}A=gMiGb z-3`b)p?h(szg1<({&rLPrzvqf=&boh91RjslY(|uZT#YeB!eE8xv|0KD$(T1pqqvE zmr_QvXG#Ia>LqVMQ|rdxG;8meiyh1Re{;Qe0W>Nb3n(<=m$}^FQm~xlTz&wdcy!PP zGFajI>o5uf7h(Oq7%U40+cg|dPK95xu1z|QtfDQTGa5Iqbp1JR1VBO=A(yBG+pi<0 zx!A+uhCPNH=NmXxa*E^l37n;Du&p!^s@ArjXeX?C&;M&d6`j3uI6NE3QRZ7Jdk- ztA&qoiz!`;2S=T%i%1$U7oroqlw85)q!Z1~lpH;>t^60re>JbvTWq38eQZTe97lsI z;(tj)FhAiD07Qh55HIPTWW@s?ewp_;=Z)17C|#nk{o<=11yPD)E>64&b-i~a@6U*d zF6JBjsH-@3Z7{8t+2Cp$s!3xy{mO{Ul9*Hd!?R5<2(|jcqX#E#QsjSG=^a1&`^I8_ zn?-!stVCkVL67~_>l1ybUnOQMdIzcRA$O)t#(oBjUBP=UyoLhn7uitPxHak7qg!I$ zxn~nBwz6%qMm8VemCO2V)`+^1Sr$>hK7wwa%B5eEFsY`I!|~r-_d5?wv=>xtx-*eZ z%lpi#K_XOVi$d$!rAdt_(`iKam-#54YK#{50>p+`*_dy6>{HmecSxD{V)Gy2908MrO4~zQiLJC#ri9y6#?#1@BLjHluhp1 zdj3E^^{6Fev@CwAmW28#n^*-pR>#`TP3+57iJ4_lc{qm@UTz{j^BUJ@ZeLVe`Bwkyu>W96ODsBxf>yDp2OR-j5u%FBLyjgs zwLUR~9ohLiry1yquku|G07Cx)=zJn{Cl(TtO%R(zt%x*7q5GlZLe$fDK!ls9CCCwd z=OH|PP%L-GBI=|A-qAd>g2-x+_Bcz>DA+r)i0`}_Ii71zx&`dBY_LP)<~Y32r&cB* z?Ne5|ruJHwMwIyqO(!pEP2OpC6gv6#B277;Fv}k8a&~q0MuYqYkS?wh;)uR@4sD{H zWXDKJHk(VMnnXOs#`4Jt9z8w@%ipfeH$2v0yaor5KL`&~wGVL8o6EQiYTP|R*dsDQQ|~I zF+zG&ve9e-_$yv&9;)VV5Z5;D`>O3N?#any#-(O!a69hH;W?TcKyqV6wz*>tXP+nO;C6E|Q%w>t3IwfvYB7wLC_ZuSO%86GC^>y#p1KLg z-yZIzM&wa@OZ^hq$R2)Kyl+FtUX|}-e;vqf*P@OqgE)V@hEgDe=V`^TuFqa4GUAnt zO&c}md!>Zjp&|SHFS#_{+nib6_};~OruE&PzCb@ntU{Xn?pqlW!YH}kyWH;v9J6Uk zWD0-n^iS+cH7C`(3DF0~^3&kXSE$e^rxNl9-iNn!ofS@3Em~|6g;5HXrQt<>$Wd%h zYWstGIaU3SPTE465Mo=8=v;2n-!aJtXWbhrFKfi)0f>ml33$SrxrqaQIJ8% zeD)XIml+c%l%-GxC4}JA589!TXKNyCf=V2Y-m}sC`s2b?Kc0H)O{OAXrS=HT?Hm5+ zme{G|CWDX~_y$IF1C6_VV2!umyhqZrG+R^OE7lEk6dFd3c?xqV-d&~7xSn(JEw}4O z1^VYg7kH`C@pph7@N_A(J?qL)Rj>2IAu4yYGb2T3#!X7%SNf&em=2*UwyvEQPA7at zE7QR^h*R?s5n#}IG*&vYtV-oNKm2*~6{7A(y_1z@f)=Pxy7a^MWAf5(THm#|w430p zxvzG(zNps<%HJb5ln`C&SIjZY0uP=c6VRJ}c+Ih&s7RL`^!nz*utDI!&zPT_rxbVt)ohYLYBSG`Ia-c%P;Uf-Mx74y@#)B zm%=+%bh89FgcQgSJRDmPfv{Tab<77UHGbjG1In~qjdIrKE1Fq_6W2ICK7M-q`kA<^ zd6tP^e`)rBL<+L$zt}%zLp@cE5A8JfN%}BOWRZ?EmrBL0?U?3i%f6A^x6sOM$X>b` zw#B(Q{_zWg!70nE)&m&vh_0+mw42AgFwWw}Yqris-0*{IXDq^^s!b}%*buAUF zvUVNdxYQ!DETT+)E*Fjn-9>dcqn`&rW4wX_=a<6~MvJfrIcr+5F)^&tan<5#BISka zXD06y^eBE`I`!nG8@~gsyvThG@vWwNstO2pN+B7nC4>&q{&ApO8g2^`F{$~2%or$F z8&quBTP*qAAn}Qw)YabdDdylW!Q+BeC>x+Gjd+2EK8@#^BzxnK(S?2)0KvyBNR90U zi7h$v-{Wi38XdjbR24aOfkXF;M?>D@)YB!mK=w5M5>vkXoC*PCm~MQ2hI2`NQw~B6 zFCFe`ZS{1^f%~iYr^r%9EgOHi!tXJ8{RW+lnuON_rHz^-LF$Bg&`+dy=0O)lb=L2I zYmR?%Hkc8&em_Tan0{= z|E0JI5C137UBxd$>m7Y-kdM&FJ}x+3;ecY!1-Uj;J@c46-=kT>`ZeLqY-ODr*-W# zJmf;ZFv#vMx5DGWeX5Gok?aa+TmQs2gArxJg}E2bzhKHStr;)| zKL!GnQZADzb>e!zI6{8ct@>2|T$ca6zExqk;TK+`(*SY=14nh{CO_!C#4x&1If)J0 zmAKT7_>f|r2*jOttsfK`3twMq`c)r82bXw!QcNyHL)G{;vK0Lt76q%as_leN87|m& z#50kPQ9hArv8*h!Qpu&(wQV%6h&wr7pAmfRH*bj*ziKsXc(SEr`jL~O_-7(1>rDzs z?ws^aQM;h@`_ku#Ujw`M8hEq>L;7aQq|jToN>6ITWl4itbC-KgE0#Yv1<8b+ZB|~# z9P^^+621^Ad2KnwEsHBvun?duvVW^B5}8!SJk#pULvN~F5R&jqi)ElQ`+auxcE^nK ze0+;iuV)*ERW?5A?9OxxykJGqBY)LR;Fe&brps@4p-ssPOb8rYI|PVV$uTrCB$0 z_R!D#*H5bBGIwSXq)uuuy^HHI4tKYeuYu(~MVU=+58IyKc`B>=V5mheg4^;`AeS2}S-;haz)%D2(wc&|# z^*Lr*bgow4ftpxIIE+s$NEiTc)mh5+E5vTb zyQn%$bMAb-){9_VguKA8AQh?Os49{7cxi$=u>-&Ta7a1GGk@HPdcL{N!b)sV;o=qB z+ty#`t~_;dy&w_Y??e(>lnx=Qk#s>oH%Ic`D|>g(ik zHG=tTRwi?RUYK`A|9PS)^%UB_%u27sYSwZ(=!5gvjh>rlpVIocq$toOC3W~hY8hH* zGzkhse*Z<*$hjKLj!kLZk;Y!JuQ$B{m69>_ewVyz#p!btSjwAC=V@3>jbIUw3TOvw zB!I|xb#xr)-)*RB^bAO!An8EL}lcLRL_Q|MEYe8p6OQZ=xpvU=q0=|B% z;k67p!!ORFIx&&?Yj<2ok}uNlzcuvl&q9!4Rq~18X1dp2)O@zu_Zy0lZGks&&mMvi#qC+wOT)-nf;Q#Os)e;IY zGO#@Es{RWk8{3D#zM;t6H>d^>d^EKSz#+Ls=7!U05Cp2F5w+vJiyDu12XM^~lZ_4} zNJIYf;@C#VUq=?*wS)-;N>U>zZXczg@{n)~T~glRX$pi=%L28k6w%aHRRzue>6 zH5r81M0A|mirp|jvj67<7xdOE?tC&r32l(%#k^Z#7 zI2lIC@uvVQFz|u>6GV&egW%B_7>CZTOs8d(-!B=_y z53^}r*HF}rH=2hKo&}mbFMeFS_42Vug6s~w3l%1bYv>@kj$kUh znZ7-po2Kq*&IAS&3G8pr&Xu*0>v-OB<`_snzi)`&T0s32TqtRale^%4bX0 zqgwprx{Vuj*DX0ZJOi3idKgcy`159d#mBRT1UO25-P!fUtU?=szv9CnT5%%>MFyydchwpApi(QVYX;MTn&@gu{-5W#a`nW!KH^!&gU9@Gt>%Cw`{k?37${$)^J zs74;n0^4NINB?3!|8M`zInq(`0_o!I=i#gu_64d>WapYYinWf8&JJsTJDGE;VLhr` zod(=-ndZOl{X^0|BJXMZe*|SF{eQP{j`^p2=+A?!AN>x~5uN?Xzu)se`56OF1O#gv^xExzT-FBLHG&M{O8E)^A|<^4P^-Jh{2;c9!sIEDwU9$AX5@Dh zER@U->KxI>|9$OYzk8R>SBx8o;@Oc9!b#8pSqjTplszcQuL z3g{eHgsVK=Bt{Cnug2m3q)(Urnr^LeF8b`Ddj{FoCc_`7ofO}1!`GArZ3B?&|p*CR6 zUCYdY3b2DH$iK(>*}Z?!s)38sKG^DG29UkZW$<7ot6YC3H}<>MQctZGk~%!eIsa&w z%x&_{;a@>%q3c+%^#?D)G^)~McO#BQdR_w9h$saCY!mK^ue5qNuT}5Ef>u>c+k)t+a zZLZ(caAKcwYV#@-J~xznKYxH`dN{4uggGkBye7}Qy@y@g)&z=|U)V>t_n(|`^flFZ z1rKqto%*V}{x{84&1d)ALUqK4bIc07j85-gei-X?e=xcp=|D_vYZNrjgr+*%gN=+Rx+ zX-&N7+TS!c4vSgI3Wq}LAA$KoZ^-{7YX1NE9!v`87+mQmb3(Dwlz4j(&vb z`A_yx+=J~H3_+!qnwa-z`tI0&26Os<2J?0(R(uJBeQxYOrtd}>g6X?EsHt2m;0J|* zT-_h!>W?jSBTZIe1=+QayEafj)A(iQNHo(>lXML|_%9dZf6db=;2iO|=>a|cEyR*! zRA~1%jcPI$^2q6qDAc@~vvJhr`cI13@O5z1pl_WQ{S&o&XPeHpFB95`YT)@KVZeN} z*V<;`%C(Q0`+I1ep(*NhAi|^lo2F0z4eWoOmR=@1AFjn&!f|%suoCf;Cv#%99bx;k z(v*`X>##PP?1*#-#Sc8#hf$0$*!g+=z)lErNR0l|@gBpCQMH#Mz=Ao0TB$}m3z3c# zF#bDBb^@j*Hv^2H#jrwTwNs#75^`v*aW>Kefaa@8|L z(1oztJnDRZsX@>lj{O3M(m{ImA}Z}rm6b9JS%4)}I*UTLjbq<_2J|wgt{NmIh~li# zXHD;MUgTHqTZ-n@0fTdYWwh z?4@zM3sg(_bLj<)%aBZ+qlk`5Z$O8;)-OQ|(a`I*2W7hp&wIb4^o{he@kN>N=UL)7 z95`DCsDgohPDdM04FEwCG0W7`?yQvPgSo!5KZrg@sk#<1c5|T^r1vL|(tEqnIdDxW zp4vg$1`*v<5BuZjgd4z)QR!j0t{v#D%O9dBG{jHnUJUUjr5qqm1W*ZhV1H}Ea+7~o zf+n~cJ9Iu<-ev^YY4fh-)a8{EYe{#3%w>)iwT=ZPHVEnJ9HFqA)B$@aM3oNpkCgs) zbBtkmPcPNCee93))VKWb7dZ{f3a6dcH}`QxTjvWc7?5`_mtbNOQC_tTo@KSMy?bS>dA8bFQA2BB6j->b{)((#I^p z?*pY$rVKz`Bg=j0(R?r9VKHwHtM_!?{gaPFSZ|B}0)0scBXq&S593{8>!=uRSKXx* zk5>mSSACl00^!Z?7zE2z1^oo37J0(lWTs-SxHt2;Q}gu?EDj+L?gfmyn23+rOfNL< znE6Pj!`f03t*sy*$z}D~3Pc`bXYp$KhOue~o>oGSslbeQi|wb+xTQ+jykS@7k=*br zX8=GBSr!^TyDuGnxRTCg?6g;8JlZvlmt(tsx=~iiMnL_Jj9IbDt$byFu934Ts%$!) zD!n*S?OWpk=|zR!p0;06OJQTp@ad&JQsHbM;!A22+{FbCg$wMmET`AGc(yWJ`AbS|BLa*{uPd>c{*2g9; zf>Z>+h94$7_l1Z_`=~TZPz04Ti05Ze5Ri4={Pe$)bz0xR#uG22zrez+rH7TFi_$SL z<~T|i=}&utjerCW01sz^Cm5VsV2)QocSzF{TZ05>uRBb# zG}wC=sXOc85Y|8HQY4wy%0eK!LTg&z)&2wRT4Fc!v+jXn9T9 z)!8N^KG~(|7E4^ri!~dTo0)&bQDMw}KY^0d<8%%!*M88CuWF8>Nss?=7_BEuD{_(7jo; zZ2K@x>V%DJ#~2OAE6>5IMqQFMSrUh8ZxU@uk8hV|m?Ab<)>|l@=OG#J3`>dFgz29y zcTeinIu@*QHtGv86>rfB0tWetR1+4$?jXSNW8N#yO4Dpuu)Hev?ZU%v;$p|Tf=~S% zOSA$doB`(PlxPABi)r=Q+0B;j;P#-4zg=;T3LxQt56uq4fY=2FmTsjw4Qb;sUtFSY z3Gxr!*j*`PgnThnW&qCOrOdu0Yh_NkrZ5 zc=uOU)z`FpBb@e8cvvvV@*&|zGfF2t7yDbA#C66b_R*m`6Kx-@ta8CLV>kU7<&ZMd z;4{ksX#JQU4AuJ9vLrj?T=r>jj=@i^PIk3#b4W#Sm)}q;m{NDWG%~Y$nVwviV=(oQ z?QIbu4l)vx;ZKWFuPTe5d{+P}PR1F+LImUYTzPIMJ$z&OEeLUbXyd)`g_pV-qL#Q1NmtSlt4+)gIK07<`;(pJ?*=JWvN=|L4fsMW3 z4GdMo=a|60Inp@?D+Y*nQ=wDtG;({HF_y^E6O+V6<5=#GU_b}Km!L@iGuJ12+0 zvxe}&HU(ii>(4-8JW-(QV6M$)6L-}tEspEf&qU|NIWAO7Yjy?f1wuP8uNQ3JOXaUy zcTHE!!$zuN6yN;P($Q*;$t_wt#VbQg$m80DMMLLHp~t;g$2&>b&dfze#Jzb*)vfcY zhIvzv+Ms-GoA~Y>k(~)!{R9m9K_;x#IDx*r)YSgMGO3+xw=26@AVQx zjfxA;%3l03r3+!blW^-i7uPwSYcsbi?yd@ZFn{g#6=!{*uANSEIY;?O9{n^1xa0W4 zUZ7ksw8S|=7QVKXpZWG?qa$vob7he3#j<|w=u?Y5UmH{>{K{xh@^(+T4uV*jec&xXzu$$TZ+xov^yHG**s_2NTc zShd;Jw8kl)iC4?VBdkw2Pf=N@Q;?G=2RJwQq&XJtpOYV#s=JNF+vGZ*v9^>DGcvy& z*}loNcB=Dw8=x59j@q4rP)9)Tf!}-`GMS}-i)|uAbE4fJ9gdXv>fnoPASrz(k=H^) z(|6-1M5(94aH)i9B1bN9ZLB?A^ToxH+$`BavU;)E~GE z4n?AVV+bHFgj6CpKcQwi z?1_T(^K6{;_Cy;Yiila*rt^cfTVJThvqni9w6-R{X-;n6RutaL6h5o!-RnyOZK?X)$YePQdyCRi(xj*x7_W;W^|IJGi@vfIsJ z;n0Osc*(KwT&eVQpN#m#pZA;timI9@EXn~A4~)`Mk*w=k%J|MwmX`}C)>e_mdT)Cn z2{tw(HG5wlBclhpH)zBc#(~=~{DpkCNIB7vbl1t)1M$OZ%FlS<{b#*}gj0>jiNl8eD5Rsqm$k^mo%r!w;3k_cd#dI#^H_bW!G$xU)Z0@OU;_#8M851R zfV)LXU#fK&eekiQ#dq^@%cC2!jW>W}6u0OtqBgEz0TsQ8k+qjIKOTCc^r?}mm+C@BA67=LK8j3(c`_yILg3%YtlZSeG6A8$hEv5*Mr*}B>~ zyl+ePBwdRlUEix2XY<-{b|t0rKQH^Ad{c8>^E9Kt*ZZ_I6qXN#eij{PQU8arH;;$% zecQ)J6lJUITcd2rma>#El{b>DQr4JC2x%&08#5yNG9f8sT1aIXJ7pQWDEl&Y#w6J? zV;MKIynk1p?fd+G&+GgAokrGg2Tsu77nK}S(- zCVwhc7GV70VYqX?~DSHZVFqQxfs9T@u`6@W> zPXnof5cKljW!-$i+*g@UZ(sWC)4yTOt%iz%JAvSK_n%V9tbFtLmVBndjk&8U~IM?g%@9a7m7Fi_&k=%a)Wj;c2OBcSg>ze5U zb5|OQ9y3oNHK2AN5P>&h?D}q#yU+`a^Ys`5Cifqg1Q4Jv;>&vQ4l`Qu+MkZ4hcjf=XGTFU|6TYA4j|jm9n<5$>@=Fj@}He@wM1 zr1K6*G*Ie759^yh5HdZIpa0R;cFz6~57T>o8V)Jfa?a*O8BDuoZdDdwKePHnuhKT! z3xP|i=@fP9PKkIx`fzY-Nd2pNXZ2S54LEGj zu07^5wifCwcBOO-Q!#E;Wi!z@d$(K9zN~%Y(?h49fUgY1XqSb0{^)L=`jm;9CNPE; z`|^E%eH^ycU#H)M)1nXntOJV$z@dI(4iY*Xat|Ek{((k_No$r;I5CqrnpVP)Lc72> zmcVomN4t$k5cibBNpFy(E1+;B{{ z)9iW>U_ru<11;{xMPLGgUMg0c(E@OVH4igOh=W~*M4~* zeB6oouwUW1hyLzswhFP!u%ARr;!G00Jd^-fHp&p|8Pl2yIPMu_yqe!A`f~1geX(|6 z1@tQBc>w<7v*jB+?iS}eb%Jgl<%|Val@6q<+!4eX0#cBzbO*7E=|r<`#O_5K(lf3e zzYc7*Mkf~S9(;Fu>2W8QzeFMChQ@T*L!IR7q?I>}YnTCGBBn7q?f^->XLo!dKE6$B zZA~#RTy#-Q3JE#7vU>Q7>b1f*;@{m+3aY>RqsP; z)ev?jl+&V^`W&CD-Iz2s8*)bFZ@>p@b%F5n^ z$4c6@sp*8A!3#{9>%7_5d}OluXXO^z{@l+r*>G`n!CM@gsJ0$RX$8M>1}sC)0Oo+# zlnyN*%5PebDKhY`jz}H)TJ~k|U1i|w<0+ksat|9jON%=-r0pi~WlGEg=5!y{GwsAP zwp1|8SH`?W?<&pN$!lkM&CBjmj|9K;S9!%#KWsT7OyZ1SCdW0`#M%(iJ4mK5Cwt#+ z@R7^jY#qpy=41+;cAd>6#=1z7x(Z12wQZ;6xyq~OUu(A{C^(R!j(u(Rbi(qn1t0`K zP*!}XTc!X*0|Wl7X?Zcxu?1W%LWWA!gKvi2%=*~P5089KKA<>0SDX%uZrgirtt2xn?*O%bg?03Ch_g9( z3NP5at-+T4mN(Yr^>eF7hqQ~vKgN8%eQV99b4}NGbN&g|6#*&2AL~2hE@jxo8uB_W zW~c#+S8!-GO=egt-pSI_86Lb?DRHiOm%!;gVFprc-Z{d;v>^7jCA>AGDuJyMXxMH{ zB1dL6IHrtDPifJyUM%nx5?*Sb0`biE$>M(eu)srZti-x_|1 z{h_ILv~%@YP9ML#_@Nn_v)im&?EWh94W8;N)IKW+Dcy^BJKhB!t978%DOn6mq}&Q} zIrCEZxkS^7$?5sLV2DHqd6N^^$Ov#yu5w}*`uD-M)Og9??XXl^jS=7GEyv0dN{k;e zDmXd@r9_kIpPCl`?L(N7$aDW2<{{eEms^r;bmb+zd z!{0DsXV8ZBFD%tYaNELq8C)823;=^MRj&mu8i}01Y71V z=cA;<*wpjOKZ>`FvUc6S!}+_*2n^n2oL(fYPdcLoA*TnvzH;VTrGfW`vh7@-yDOY9 z(@zN|foZO11xIXVi0xQNu{~Pfm|`7?*+sLhdywyS+5Cgo7lpc^?=k6oAKsf@X*oK> zM{{YUodjuecuWTk-oj5d@TU9Ynz}w-mytmAudkT9{j7SbFn-{WM|#<#y;5ay&?=j! zD+e=1!WL&oD>WL}%)BCmNnNRDsA3e%Q$OrQ)7Ptl9;A&E&jc-;g%@P20Cen7UaX|dnmaj=L$P=_K2$aGu>qxbb2hpylE%dy!;HU>zFQV)m4`WT_$b(4Lg0=FQmGH%k1|q{PUw*-{$woe*9LXd2ohvNh5NaYSN`a{{rsTBTQ#y zFd+E0 z-?0ZlKzf56ZE{&5f)x+`Z2Jl*{+H{eq=c8 zbM=X_G;A8%#N$$aW7Pfj!&hOU+Te2|CA8aE>iNt<@3stf-K@rez`Uk0difS;_|#r$ zh`L%WI%B4+R@HIg1>cP5DMAJ~!SVR=Li{oynz(4J*o{mSEKsB63b0J+0-jBq-jf$w z9e<9U*4}=-o*cIQ>WT&bwz#p(9+gcv{dwPAFgf`!^ZdXD+-Ho&)NEnu0Cn_ z@iWXIkG&UY@3@$!SXCG~_DJ?_+Fa5*r6*`zTICMA*=hjwqc~jRpf_}B1;^>t)_V5W zsSOcx_Fk|CT=}e2(4=u_FReY+Z#t5FthW|H#)~*Z0p|6FnqR(H1|NM?I(c*~lhaiG zcG2}+7bYHDt>?k?d4thBaIoYVfgK(UgU!4aAIEm9(A=21FSWH5Ri~u0%ui_2!2~Q) z6=)H(1KWriMvv>jGA6oYJ=%}IXFXD)xyRkFzVIW^|VbvKxk{x+|Mr#Guu ze!FU!K{W-igK!x=kM+LLgZ07iIQmR4TbyY&SZ*n2No6sM+kh^|`wLI*yXPk>4r*Pq z$%2J?k0Nd(w(axirGS~WI|~X<{uA|{tOP6yDTZmsR@$vRb|n+Tu)>C#Mukj=p(3R( z)Z8Z|&4q$=Qk>kgcD@(x-6j`iBw?GY;(>TNsK&yzm?4mzZesmOFRV112mKdK*hP2{ z-XeO-!2Dds-R*-xEAmOp2b{l&jm=7M7^@Z-W`Ykju*b8NSn*i*NqHustg0SLqlvYM z)*qxcb;rv;BH2mdvcI60y+fTp=1y3gm170{&E3Meu@^dWCf^B1_FwuG{q!ZTtkFgfQ_P4SK*L-QxVbAm%w5@SG%-l(CEQM+jIDDynk zs>&Z=)j5|7Jk{okO-@82pNX0Y-AASeqHo-=i?+u$ekbm+eCxTz=7739DUlqC)be1i zD@gg80Fmq8Uw^n>X*GQ8Wci_Ec&5}#N+k3u2RLZSI~y|0ko%c7^@EX#i$MW8E)Tb} zujVsPD6SNo*>4OB(P;b|7UsfF1=1J~`V-pEbegU)jXSaS8o5r7bd9PzQu~={AZ`1| zQ@G4>US{c7yA;RVd#>ixggq0 zKQbi>t&q?72$}cY7|gMJc%g84x$xerH+P24?~0yJoIZ3rXrGhF_DwQkq^Aj6ap>c$ zn)i(0a=@%L9Ie~$AG8sohS{1mAF0ggrJN{uc;cr0iKoKV5{-AmVSAL8FM~E0TiRBu zVB&L(48+gSgqqgR(n4F43O#01fE=32>g+n@?W`*XcEj6`w!EoIow4hO@-{-)drg6j z!DTSv+QP*vTMH6nXoDZ;)?1|ZZV0`rhxJjuOO>yVp4ppBkX#1`^ zx6upwTyiuI{Ahg9a(1pqKkO87+^zvx3~vUV99+v7v0r%pS^$~jTZeZ75{qur9@RYb z^HI)?yj^YUw0S_p2c8s}ohZO80f z&g}$$qkFwCKl`j!r>5j(k-ibB)_=n!;hgNRF5FJ5BkAP4))@b;ixlgACX%ou>66wI z^ZRz4pZT5P*&}NgN>4O=;1xagTHx$!!5sEJ%rKI}kPF**mwh5IqP6}QwF?(UrYc2i zO>-`aecCF{&G!tx8~1!oHe15#Sl>bQoX|)+Mxnqy_-RLb z2A|b#do#;#J2roQ;L4QZ<4z~%R%s<~+>3X&53~n^k=;kj{zw zHwq)ryXQ{V zN1zHhlyXO`M{6wYRpDUzSPu8yQVE$6GtplAl)~&_*WZ?aRGDWSS#m5ae1&fn88FQe{0tVR?n3SBDCoy++#xl=p$IvD9DIBEs5r%A|m|gkc`2~d^4j^hjeLR z<4jqhms*QE;^^n;pZ9nKSIt&?d}mRkoMiRKAb{@${&JNFUbf6=;C1F9pWDBvf%m%4 zaH7Aw8Y={S!ZA$hhcL6mhGPlTqnraEs#1W!1sNCt<|a_Ai$^D1LZhz?sQ=b~rhYT> z9)SaMurU*1gMm)yuGZYR|ID?#;w`B?F_9&IL~I6Zd)>>bZ)o^ZT!ho zwuApw&A3%^K`QJ7r{ToyFptZP!9M_7jFLdZf%OoQ1LCB6vJ%<*nRYb0M13g~r7hIj zqIf`U+3#D}dthF~d6-Z4Uh<=Z`BCyKspnV)^{26os%Xt13Qi0IG9f;U1XJ5P|Bk-t z2S~#PAP`qmuEmPSC_b&1Xt;KNe;G%e?!DK7qclyq3~G!Q&veK z`waRz1Y8u%>7F!?W)|>?$QiP@4=|5vz}3Wt?>$&(|NbmiG_5r%}Tj$yZX&{@9Yli57nzl|}E zKqTFd__08|C&*BB#Ie(+`oOV|V(;_*8)ocE_W@`583NnR?kiYvOO0r3WmFX~LrTYy zQ8+_^Upt$)7L{r=O1%Pg=G+Ibx3fRY)ZUMq@jR)17S<@RkNK{cdvTR1jBVG!0-pG$ zMqIY+puRy4RN8JzWwn0a(fLp?9Gvo@Bkod;Ok(d0={vI2bcLUWZ3X$e*fPa~3!wCf4X};CrQ{pJ^!7ykqtLo8Og5)EKaBO7sbDofk~MIlg}TAApP{tq1^dT-TwO z-ZZI8eVa&`b2CnnB=wCn71sy;W%GB8j_l8VX>2&OPFTiM<6FksY8Yxu8C$q=me@>p z9d(x=KQi#)d@H}3Vqvh4y8gn=QhE9BPbV5*3X5GA=se09#sZEL3=d4ZqepYiiaEWq zmkBoCUQ*mL^Qe$HH7Om%$|iA)ukdln>J@#zF_V>K9K5_^bW=g(}&z$zlV9NqW2!reRY&Ve==N) zxH)@UGCc;<9u(?E@Jtpnqg0O9w*4Nz_({xf*0IegosrvcA6;D=+$C)NG_pF5G*j@TIj7Uavi6a)(gPK%rl6>J^5 zA|S@YOCpxBSeD|&KO-(SI03;0CPNqF*)2{umUJ#A`%UDo{pv(xli80Jgr!d{dRarSjhu>Ym05j&av< z&4upG>g0j7{7dFNlsFo$SnEx?lD3!feMEA>NY2;%%jSUZ*Np%{Ahs6kxLJ5OnyKC1 z1phaOMVsaZQBMevsAq%p?Hvh=ioe_!BP!HL>k8KK)^~Q@m%y7U~)&3Eo zldS(=BJ^!u5Yv^O{!uvpliYH_fK=u`?3QT7%0E@=@V1)E|5T~p1I!B=I!PO+|4aqO zbf{PWzTxAoS#sf@^Bsb^{NPpQAPj~l{F%B!h)1xFgntfk&^@qCnyX&@hnO)FVG1(U ze~zoT3uZVxD!qT2nJ?Pu@?djfd6Adz1J6xS#`7v_CVY52X_gY8G3bXMbD zn3Z4R8m}@4)@_RF8VubQ`FWG=wSjv=$ox?MHil_F*qztVBMJEdOut+smPl8f{u`zO z%zKh=ga7RQE0x`vxyq72IbsFiAc@w9J2WLhWZU}V7>CSi*!z;fkNtRy@i)xG$*uw{ zPT;#g^cIk%{gd7@{6lZyV)rpY?2CAp1ayq6>`j1pwI3v!=dUB!0?7zk7?R!(_UqY; zAAT#}#b~g5O%aDMoPRo#UV@E&ZR6%5reYn}4&EX*KZ9VQ7w|jANK@S@?W=P>f^&b` z3jb~F;}^-Df$`FNxCX>}f=#AMia9nBmkHmlaKsIaNqkMltQefMNVxi;;z7ZUEnxz@ zGgEe=Le}z|^@aL-#-7r~5u+3DDZJN;4ic;dhP7>PPgIbkjeAW^Y^?Y#5?hUw_^lF` zf&=3vzg@MG3b+`2=$K@%G|5NbtmnuLNTi2pLJbD^#oD<@h6S>=%9W|Huwj7ExHvJ{ z#r4~9AOUP*w!Z&s4v1N)NEpa3Vtm^iR%im}+?GgPGNd(b_%v95#!_~r@*vGzb^=Nxz@ z4rGCc@iba)6aI&p(ghBB0pA#KCOBmYp+-P2ElPa13dzzY{{&?!jsy;WBV^Z5{psK` zMj0%`wWa7zwXmY-?RvdcY61~pg$2KZrK(^dypgn10 z4~4v*;>X&DIa+^OOpjVyk)5n=mfA0>r7B!(ygROF_E8bckcUQU>xo4ISyVluykfrD zI((jD`!49suS-*&lq*T?48z0kJ##ES_cgl}SHt`ZG$0lDN+{zT8r=MFEW|iZYhO;9 z=F`^*Wxb+L3t^ki?IzLPyDkn*~#u;a>DPdp^Q3If;IR>PEFFEfbjSz$|6$BU-tENZ%R zcz-bVk>om{Um~(DOgUq}UpxgSKi`EB28&XUEkiV7cT%wiCtV%@c*m6Wtex411dBiY4bMJ{S<2u9K4+;=;K1PA)u{dYL#X*4lWEI zk_zim8DEI$`cObK`KF}bEPlgG_BCMk5Y!*2QEPS#AriYf2Y#Xq!GZ;f(VMG4@KB6w z-m9-fB^mk1S$(P2O;5GFza?h3p2qvrTrS0I9}IT$?5{mmp%23ldf+1KN{kApF&%8q zM7wV^u{N2*S2)*IW5uwI${0cB zxgoZuv-jA&ihN_*u(KXg#IfUJ2cM0UgsnIBXln`Z#mphs-@QT03PUF{6w*kDnJT1! zu8Ik;BB(JRjlds&9!+4e4G>=p)26VEmhewy~(%$1hfPC+IZr?WCOL z{45(l_y~;eccTpnM6v#*-_Hq~N26FnPB)3x@AL+*gqK`0J@{n46nw-i-CA5#0jv ze~WFrUyk5rD)hMypm`bUkV%ks=3GmvSMbUPiZ}CRPnT-;^`%}|;+;jE54^}cBn-pz z3txt6#PLId&Dgu_MrvW4=P<%6z3ataS?WINbvb&+=8+-++oBCGO=sE_cYo_R8AL zaW`3y*sij9%iwLRIQ)K}BEK_&;v>3Ih6juTNG6pPPiq5m)c4xHyjaZE&{-Cc;K#%; zML;CDzY%$=LTg}Z!LfV=T~=Ph>xTa+u9>gQCE~`l|EwITR&1tA ziA;K;MHKv{7h071_E%+z{fL8;iCk1a&!GH+w@JG`g~5Q3y%Uj$s3HLxoCy5Ix!FCE z^awP$yq9Db9 zW+7^+4^bT99vB_7@#z^QlYDg7&Gcr1-IYT6Eyq>#ukBTrm|{8hI_q4*+*B>pusMG4a-< zSX*x^Uj{O6qeIny<@Cg3xBJ4a0e9zR!vvNO>B`9oh}+F+vf@^VGa#ES?@6?ok?Ch5 zAOu5qf&VS@^q|&4mcz97&lN((g~*qVdLcepDLdCa9WwXosD@R<{sE=KFBdj12(A>Y<@L^Ti+ zcMu6AJBWB^$7!->_RO!=rrc3n_t|{a(%Qu06^H#{I?t2_Ymp$mNu?wf3|^zvsnd~Yx1zv! z%U-{Der!vdT)x+FNBICp+_T4W>$f?5pInaQdV0Fu#zlzXgl&|^aA78}!m_mV7Q$W^ z?`+ws0ZKomI^LnS>{?ag4?pLpo%zid=TCL?xa@|Zml*p3Q?37Wsd2;D!x=v#L%a*_ zbdXmBzD_%IDpswh^tUPDf`8m|IGlE&$A09IwlA9pyjjVTaUVN+YY@9pM6a)9rC@Jq zfRnhm=W$W30hQQPSuZiLxwo~85}W(^bKTQj!r!zC`VD(8TvMxfcz=&&aAZ*?%2l4g zUwgc+8I_j2>!skwcAJi+vv82bS0W=f1tEFRlILs0dWTlN8KBgJO-N4;44HLFcjf$A znVzEi+kbcBsfn)jd9L*J^wsP87=;Ta^_e~9{OE!(K2w`)q zrFk0nN^s;}3F_u(v*Or@uQ`gMT+J5$dCfoB)|ih|nXlmF#Br`eEu7YV4*Tu^QR4|3N(HxP-+3IKCruFCgx>%nfQ36YRvdnd}>YhEb$$D^d$W( zRdCsu`Yce1+?_P05zU@7e0wt_x;pvi%hK=tr`4fLF}w%Qn?xu{e8QICmXR~Wkux(S zrYvTc^A!Uavg^aAMKEP0%`N@jDxPz0+k|85XBa{dL4Jwws0AhWYoMElK%)ZFy&lwq z5kY_}C+-8n)cP}?>;u&FM15W|1IcS&SQI(imw2lsz4FA~HnG(U&ZNg{dUnf7NlY0J znoz?|PxPkXDSPkAlM5t8#c|oVJ7c9yii=>Nz8|2PZ0DnJPaQu$o-*EaC z(zE{r_Kufc( zw$puhK~&RUPZjEc!Q{VOvHziETB*7AcEQdCMEHmRgan;Yg3h$OWo2qrJGRu3DNsvoInLBf8k_3U3h|tKB7ff^^}T}ax^7T%{>k4H zEhX|PmN0Y)2sEqD2U_4%2jaM{UFB0t>ES66oi!CSLHY}Z$v$&6E}9PTk7tYQQRF6t zyvmY`tIvnH8G?`?-3ua8P*Q=m{8y&!X`7X=JU^;+tzSQ1Vt@8VrG2wolw5xhELU2)0xp;32P61&%$Nd!(%ZJ zKnS>ZVY&?ulzdM{AEUPA&vxCqnOOPlfpke*UVT8TPZllq+4@()b2ZE%Cng%)tc#eb ze$O%^ze-Irj7{H#PnxvCX@@X#eg2uiHP zt?FTfdm`dmb)pqjF=hU4$#2TIbfCp0-4xTJW9dR*)FdATb3i{;UOAdcfu&@3TtY`#rnEV^yXrw#Xk zi5`~AJYW3kK7Gufa`SOp&=@&Q7+?GR7iI3g^$@ZGzAQr}(0hi^GX6BBrr|%S>=Q}4 z`HIfoA8wCd4yu?QQ{H7Cd-YagnxghsIoX}L!h%P(ea(Cin)!|$Jk@vp(@}94M+5A^ zk!N_&1>=@)4-o3VX{2e!LOz8N<&4<^^g+nz9TNrtEej`vT|tgu4i3on z-!&Z2czHZr_`rL5!^HU2+cWNA2zj8cnWj1jMq&Y5GO}s}Y0yHRgs^|Uw$}Rg);KXrj4q5=kIeI0JW<+mgz13F(Z6>IuOhN>L8tt$+Hd$Qa z#JXs+Ho_^%67`ZRv zwv{$@{tU|Xe0A|ievsP;^G&q0bR3M{11Y@K0#`?T%<+uCyp(aeQ6@3#FT1*Hp>h{0 zsO(hln>T$>ZmzEToW{o+#gmT8ofWx!_5P>VFxU)-?f;B}5#|5^y8_ZDl|T4D$n^i< z|E>ST|8IisUEMaNFOsYmgf=XA2|xDb|Gbp@ z$G0EOB3dC_;V~d-*bSOke$3^3PPD#jw*+Sj!zgr(KZ=zb4#4Q(qLW#L-7kdXcEJ*q zyn!&DncngQ71oByvnxX{;12-Gf9%w6uL<>&E}HZ`34(Ee;sscwijMN>d`c#j2|GKF6i zYY}%=4*=Xa5>tl;Iuas6&Mo~4xrYHY;s6dp|1qN z7|%6Vk>q=mhWCarV^((4*>?bLZ;{bgnJSl!%>~^qYq;)mAGZk*NF-rnm6`lw<%LS~ zam^K}83X0%j|7oTVLF9b5v#xjfx@KOSC&$KZ_$D4*&R;zF>4ZVF`GWMYCl}MPTDM# zvSWVWwB38+*nK7|^izTcfJ;8sb|2k^(p91n%%Q)wzu*>CzEv@&DK44RaEnRfP3Zw# zOP$$AYFWD>Xi=HTn-&hO)y6UlmIUdi@BvH_y_;35fw!0-H2A3HyOIa6Z9Rs^up?zy zkkR``FvN%;wcl;?nNF>v!MErmc7(@&!-D=n02s=#rU+of0Ve6PvB=J0+F>MkE7dQ# zohig%k4^kBm>Af{>;WlOt`#5!DC`<*Actwa8X#PW5HmECnU<;N1Pj~^RuwP+NfQ~{ zHIxtQh6c<%m;Z(#^pNaiyMZG^#G0wkD%XA_GYcsbPF++wAaH=Yf83nr#Zw=skf zjel9j^ zN8DYXv^>s?sZ$Y$jUHH=wwiE=D0waA#g$~m_?wGwswf{$3ot$Mw0WGl?h@eRrWCCm zU6l$sMX<;tq+Hh{#c1SP-s+Y{Y!EyzH+V$fAFpD-S0%DMo~sdsd{L<}Z=6vqq*$h9 zc0tP0OX)~mMV!c;wa%7n>ed-Y^|AfOsCxh#`f>+ z*<);zGVa%@nN>`%;eDyq_vHD*biLkhqrMp zzy8-IjQbaXl}0ct2?;5SHQ^v7Y_wK9U>+TZy0WHZlPLp!3@KY6emoF%+y7j` zk>8gbVkF!ouUH0*LS*ymJM7O?DHjo(2&-hl7-cC@N1x*$7{?lfSTrCSEC z+1K&;*@a0F`^1(=iCY|u^I`i`Kx-h5YFyR+6(iO$tD;TYY)fZV9Ez`C(#s}ny1OT9 z0+eNZllyB=(&xZEiU%{7{(=baAyhNIEU&dEemG#vBKTQGdt~|OZ`GBYp!W&mCr$Yx zx-K95%oQ$rm68G5`4q?Of`B5Cn-6+7lNX6}rll{()4nz7$v;%p_~31uYVY{2YTtVY zpEM)QUnf(MSFnwGhNkPmrjvZy= zheR$zZOEIR0GYoIq%`hi1-D0`E$>uSirp#5z9k(lVZX=Lmam|I!}bafmn7|P*e-BM z=C!;)uIxH1)~KB{+kOf1b=y6}uJQLr3A~gq<-v_UD-X9m6_gj2i}hD@xBv?a6*2Zj zP`@yx{)QO^L}96(0B909&-A2vSN6^J@TCO8yq@|3!QLfqOJmS!&lIj=?{l45g_Hyv z`Au6S6TT?cQA92%^rH`}muH01OL6|fC-gmTCx~hVJgs_uZY}PIKMa2HGExl^WAkc* zMCDzhq+#9%vjF(@YVGXwbI39g2pk!EXwvLqq5tBostg8~2Ldq+ABC>^pOnRP9PyQSk#!$D zS>e){R_sCI@?PBy!qck%Seo(E$E%}R*=ve}e^ zcJF{@o!d5b&p^FZqUum!mDE)`zye_AmqjNa!gR6irw~unv6L;ODB)*PptB+9b3y~ZX^2%V6GjZ~z|ux;U z<@DNHk6ij=({}@Vv84^qg&J1hk)DnOOqND97r{ffortR8A zS-7h9VnUYPfEn2We16P~D zFDs=76@s19wZ$GC7F@o#4eoiqGj1mh1)6643-6)N063!2lCAnLH>bNxuUOFntI)Bb zc~)G&JeYjwNGkbHK4YT98v92+llsqmh6DMMNcAi3S>}MV(EmtXFfZ+XBAGHe(5h{}(x3&_PWQwT)@VdE!9ang1jpr7BShm}Y4C}(fd zpJ{?q>)MuT#&Kl25BhybB3=6(Tw{0^|k8P<@(jmjB6QMollm1FKIw+&zxzXcT!XGs? zaVV-X-D3XK*2g_BQ=vXqu5aaOgG!UbrQ4q`XMFtViMf@{(O%)tpXa+3`l)uz{YrV> z3x}y6!yVgihj6Ed{N5H#Yt;FUMG~J)r7Z-v#a-8hzj`orxZlESTKOx>d*OKCrh@DG z^0@M=y}miVRD`x(k>$0vQLi87$^CWKK7&;Gq77KI)||vgQEB?Z!WD%|AlI;rp{qTO zY9vG=!owCti<;1M|UF1M#mY7=$k-p! zXhz-EtTx*pZE~z-&lR5KJDfCg@+wmVKZ8pABSPD6cpB|UB4nPY8h}|~NWMa~^3SN* z{rMMCrW3;=-C2~6O7hP5-)f<6z~)wAcb@(mmYfepds{hUY1(~geO4Y2!Q&ytsz|jz zLxr1y$glRGIG&eRmk-XQgpgHAUQT(6O6w=wp144Hx(5bBr!yX58_xrl1`o)HnUE&Eh&y7(&2~>%=>Db9a8%x6&8l}v3SOr3};l=nULnTig z`j(4qeSh{D22XdZrR{EIEq#htd45_CRWFN@F+(I%r%UEpB1jH^jtLW)?!dWxAM3fH z7`tnlufo!fthz-yBm(7rs7jOzQXg~j+&!zBTv6+G)l}@6>ouu>yMOW719zmk>_UbO zd+;ELMtA&(qGk-ek#?FbB3kXHSOk%*P^I}TFZ8`F!(%L9nLEgBG>iGU6_bVO0}Syh zKf7hRR3L&TMbT0rV-I=-Tb7qXw!>s~l-uAGS5Se^c1!m4gwEUD4SQxA4&d?n=Ky@! z3>Ico0>x6xt^*QY+-w~;d73FCHQQa4@A)NkZh1_(&u?3?%1klNY4pm7_~_$frWweD z`%eHh`3=GGXG$Od_Zy9{o+!v+8f+b${D8g+*$JHOJh-M6#06sAz#F*odeQs1Bc&kdQf2DPRedRm8#7l))V^>;c6jZrp2_*+ zSHwKW&g$<+XxGbOdh}4y^|IK;lZFQ@-!44*(xL*7t^F(3Q?g6`dGF|?_>UVodSd2j z_d5f87|p3J6oxK@w4}nB(s){gW$y+<4Q^EfS?*pQt~_2?d$5Q8N;Rk;W>{K4Ll--2>!BzK*O)uwjab6+?-*HdG99-^MG!tNrqWcbUo$>1EziKILyus=jH8 zjCLhEzyq=$RB;CwGhEo+(;~!~*hBmKF}mo}5Sb=7s}x@D>^MwnHQY~o{~ATEt;n|4 zK;MI17!TR~)%b?96(u}@gATl1TxUo?f)5r=7jp~|TOQ)$T&qN88MWx0dr`~~c(eQ2 zl1S4G?&V)edmb9PwqmZbzXG2Nw>lNN2LQ9;v95ygQ>SUFdRJ9GdhY~8=VTAqX2P{- z)t@hQPA2tj5J)IUd5#&3X9}rMLI*=?YjCi|()Z+usIsRCY=3GVQ)tPUMO0$N8Hy8| z3teZp40rqNnfT?IpF2ICLW0X?-gOJ06zvt}Si?1;qFf|E^7#gTL4$RA_)3NwFSH2GPN+_E2fy*sLqLvag94J#;g< zzU#*fP78R$&4aejW>qmZzdKEgfjqEZ5WA5X%sNeLXNo$}UGOv6B{@z^cWT|x`Y&Hc zlUSLa)!WBUz)p%i+I-E|1L>Zpd;_V&Uraqu`EhAG$9C2G`>~#rLK`xcXl)v4cAj~V z;sSNe7Mj}w?zcry#9QxqzHi8f#j()g5A?Cf@1Q#%p_o`c5t9hR$+yqPg3V+JraLX zflHZ;k&Wd0m%7o~r*k8x=pN2p{AEQek>_?-sZZ?JJbP&G-!NV{d#@Gt=UFHh3}KZ7 z2#TUz$`V`{dn-f`c;PfoIyHRZj?U5-`> z&pmh8BQQkxM0CeNDjp3oV6ez0EuT__t3{6qM*lzUy=PRD-`6G#qGH1+f=Dwe3L+vl zKmm!3CISKi0zy=zmxxG*L_k16h^T;q5)l!R66r__y(3aXPoqc)B$SYl;v9bMdDi@A z&3fj2pPBW(GxH%I#GKscKIgvA-uv3uzBVdPu|kG;SN7SLks@kRp@Zw=7sKV+;>59y zsn%kL?G8{zaKuz7?KWZ%PC?I|r^9P_lFV1!?_|gxKU=n8&v6tBLww0+ad&`QWbF8$2?*_V&bv=mj0!@cb5&@+GdIcUu zDC$R35K!<`dskh!Lc)fkAUsWjv|j;1>)3%S?uwdR`MMXmcLBOhG~%`Z7tquYF7_fPy}BuCVU zaiH`Y*r^XpHW?A4xq+k2oTg1RNtlK7bcUXA)LXV5c2#$E79PL&@+9ky;!?QDk?X=& z`1rvoyA4IL;L2bb7T}syVZcdbRM69{7e4*4dO8MW6N#)&3xPv za7XuCeAR%0bQ;mUZ=xP=Vd^KTds<&1(HD0A>HSwNFss#Ti?{&l- z*DFG7XPO%HDB1QKsR*1k?@F6Pk!`9;<AP`o4J51=t9aJ2z2dI`5ewF}~$a&Y3$&TE|le~B)+l{HUT>URX zPEJ>WqASv+-o)$X!QjyBh9f}5NsOE*_$%0@-RRX?e~<~CaN$_HiP!Rnoyj#uF%C*! zMCWlpji0!64X1z5ZpnYN*#Bm^2Qt>~ z0knG|N|2Z04qJ}eM#=f1`L@FwaN!9snhB`gTUm1a1M3zSxPxtX{ck|s66W1r4bIk@ zrnKy6$40d^a-n)P0D-dXB z@ZGXJbpUJ5JkBbM#v0pRetDOLwPeb&%AW*AseQCB&v<@#l3+!n@E`lL~ zU=FPS9fl_hpjwMCWT8cyE&<(Zc#5ECqbPVC?f${5RRA&N?OxcNDUO3eIonnVaA(j= z%%uN0?5Yb6NE)wMf=K*VMqN144pq~OE@5l{-jU1V-QRpKfX9ZPgmR>B3~(RMaTgq* ztSx_PIW0AGv2aDGxtXf6i1>A^drjcP`vi?`Oo+9SI-{KX?&fd4z3J%?&P(OB^O|qA zzuU&a#n5d##SKutD~?mQox>TWZ(#Gh?8*B*sypA~)E-a!EBCZ~o?-^_yf>D4=zu7_ z$}mNPdF`#soEK(rkSAf5M;$8p@iwHEZeXJh>7nO_$DZ_ej!i;RI+Kny z-JcB9HIT1^{kqS4K2P!$J=&9xtT3++K(Uk$P1l^Xsj+(`yz&X~UAiI&Fwl!Svup zv6E(B2w!1h9jEX*c6{K zsf&GozCn)RC>QqJe9ifj&)Usr86I%&$)xt|N2q&*)aIEXSn}2bkHj0i#8gtQ^5SP6 zPH#UH)OH&kRiV=V!_s2pjzv+T!?P;AGc_Hj174$oH)WW3CVJ^k#@^O>kNew^g<1l~=^R|Wf{%fCV)4X<>Hal&e+o#H1bX%tScYon zSNG=8Vbw5}ve9$+ybE;gb`cj4b2k9JvE==`!F!GcnURm!DFx!?Ic@^)l+wo;5IxEz z;L_mC1M2JOx(ic>SBB$7N9FxOeFO?Proi-Y;uzr~#wOmI);n?hXMG%*84UsO5YUk!dSV|R-zGo8zg)x>4|Bi`5J>2`!1S47_zn*AGgBLHop65PV}Y}{hcy39yUOGj z`(jV^KZYqFsx){%F~t@fkyFoPaO;bJS^f9ZuTpLebH zyx+Lg<6tG;HfW~bFaysVWuM};q{zS0E~h_Q9QNxZ*Et~+rhi%wAKb)$40k+>5wV35 z8Hn6sFSlYO+TesLNDK)&LodI@e3ikp(8>pz6>e!gMHf6IA0+zzlpW2KfmFuCJx|e% z;Xi!nF+WXgj!lu4V}Qsdlo({ftn>E%Jj7Aqz6;Vw+0yOpnt4^l^~<#%ubN+K%Ggxd z&)pAwh~4@_%B*wHwMk7Ch@k*HjIy(w6l`il-y7*j`z)mCu4C}tBS)r`ZT==G?U-;f zPlx3N)aA=O88?L@W^fcK{!qJ^#=syq3rP!hI}1- zK`{137oIA(l^dv<8x_IyVgiW($Q~SVCjQe<%mb!F57jqmbE->J$dE?((B<+C6QWf= z2ZEZ4N)f|?j68ZIM@+RgNvs;sHsD*TzFEZ&-PqGh$8X!C^30fOChyNaBDq5e#i8+wwhX#cgHZ z#=Itt`*U%DS$vicx3reaw-yKtUfEz>o7WgE<@xyQ*OOlb`S^hrPDfQLO})k(M$_wj z8pkxN2>#5`D`LiF_?gzHK=3QkuFa30b(3f3s9R#UJoo|gnI929@Pdy|l&#FZ$!j6x zM^+<3_sjNi^k^kSNVwVA=s|bKa#~fqt4#BYGsvk^oBjC}9=~;q3wfzfv92?@v70GP zM_J>QF9edf;f?8J_lKSJ0Xcn@6MgT7!dE^ysQbndO@Wp$Q%UE7EDf z;jnyg_Mmole3-G=+}ViRr;LC!NbUXhLZg{_|B>+7*f+N^Vu#;71%#@HDyMq>|M zkXT6A>5baqEQZ`vnvXVg-_yK%FxrpthH~?^yV*dx4@FY@R1}^WOj~byxRoQbUZ=bL zSCU2KqYLLZ`V>oef3>!*PRswum$vu;(hg-FhjI20z<1_6!IJ4$(56Cz6f!!zN$T$v zJ(Q<<$nGY;iiWo4%Dy{6uO!61_`2_C?PI}S=uVtd=RhuG$FIbnemxBPf^zFyvKGNc zS|#7Z8S*VVYPxFXF5U?s;(NzV(tKXgx7Q9uL}Hx-kVPM7eqP9-hOd;3SliUs2}#9$ zJJx!sX5%i`$xIaS89YC``;2N0e4G8V!wR>LPW{|^5(f0OFcB~yEKDz`6DuQxa-2yp zv0rO$IYOh1XIaBDd;9Z`3EuZV=wo*0dG@9Abpk)5IPbYBFQ*tOToAhwKN1Shp0qK@ z2+}R?D}+NF_Kqrthd*Z@Htq|F(iMrTcDn6zj(d?Q&)&;XQRA@A2ADx7w5abgZy0yAW9ox_u*p9h^3q5O!d1$9m^4x!fm(vj=T3_=C25~ zY5`wAKk7q(g*zJ{A2ml%j)Z|GGKwP$7YgDB_#5GwX3G)uFswvbp>w49X4zb6Y25jt z3Tkr`Ftcw^HT*CqVC$kW-!>F20sNOXB*Xrf(0QyRq2@edL*D z$p3p!19cqeuw{(0k(~Q1OB9*diO0>G<1$-$w{XOqS6Gh5c8Z9u+=m~*wXaqI=NSS>K{v1a`Y>(h(pAht>Dc5KYR)HGm%=LQbMgUA0pa&Ak zj>VB68`$(z^3?N^j4N;u;nQva4`QDlU7c4A9EF4M*c-Tcd@AK%GliGs05QnyDJI=m z?>q%cGS!i_RtBA1oODj8_tINlz^qdD*l}Fyjpk9ckJS(Y`XCfs&H4q|p|UU(O@jVa z*&MV)^oNnX#rmtlXf2)83pDgUX~O#FdCo8kiX6ZBYuL3z-A|VfPO47S5^f)Qt?RZSm3H= zf}-Ak<2*_1&6v!Q)S+Nq+DnkA=*67vK0w!I4Ji3KRkL*{7I%=SYd=B_19-|FTTgLk z_EY$bPtLLQpwikp8QeKgW%w8K3GZYlI7EE`CApfEPdf%{P_K=Qh+5 zhX)$MRw@r2X%tbkyXMn?*02a$l7&Ai@7p{EdnCJWe~h@l-JP+{VFB)deaxyARZ(GK-x~ysrqU2^YS7M&%+#y~n2G^czO4cf|N0b&^RGsuY}p9h_@n1pboEdUA!0htf{GGXng z#qetslYM-?_#FE+fc^%PQs?jwl>#*zcj5~CP-vaz?vHT=& z7*?S6n=jD38=UozwQ=TC-E|%;lp069o@0^UF0V9?qPDX}X17yav_Q8_=@W?&Y+SfS z;&qvlX&bjS^PZlZo5}k7rr{XVCXA}7(&Bl{9Hrp%1;0-Qu*qo~F@}TS=x3AzsWR*9 zIZE=3?AE-NA(yM)>gKOX28vTo znJGQ0Y~#A-$J#k~;@f(3l3gWKR_>NyMJH_mL!RN2Go`&PONyp2rmQG)fK!1Nr$B{R zKhJFZF{TxaG=2B56+gmReReKDdD=$N{L5rv8?10hCgA!0V`S&5KDo%8Vx5V&RYNV; zoN%B1#)mCwowfFy-dA}s+$2p*xO~s~In=fh>zz)#PRcxZrDyiu@dlYN);^(hqNAwk z&7a|Y1@gDi0W%U!DX$xQN+8oVg+08GYDM-KP zfQ2L0&)FmGZpm1|qhN*BL|3JtN7yvWrlPdmU(EPAn0dpP!l=D0jpx7koA1Oi1J#Sh zzEHag9}4!`jHyBEvPN%lfWvTe6`TV7QNePE?f<@jx^pEE`Uc=)f{E-?K@M;*RVOqD zBg)+e4s_In1acRM5%W>MO0!s9%yZ>12SN;V!R5+tzGEA39{~Xi!b#Jqg{=%3aW@=e z4|&kOb3G%?(?!Q|GSq8FKZf1;57uA*N9(lzmwyjCq0ZZW#@&}>#5~s7Xnj64xiz_d z!~E%8@#>8W+)W9%EC~*9rb0`>8z;^?fb1shzrzfnc~I(LLlV8H!BSaBP% z!2A$n2{Z$YG_THtSyGSM?a<{76Z3n2;9E(UcD#jAclO8Q6J~F(qL07)?r`tq25r85 zhq=FYY6<(=={yH>y7C4+5JnCW@RZopD0ux{0G?v=ezB!U*J-?QLun1n2wsbG0F;@N z+ziH1=7&l^7TI6c^nHsi^gZ%aQ?b*@R%u=Fjh=Aj_b6e_$Y1Xyc~lr3`4lG-HugF8 zI_BrQN7;R`x~RTl3wEp?G-L*5m7+k+5LUR_grCQxPP54CEhWzp&S#Q?wtYgcbQs2j z6BmyPWYA=&_=D5WC##;)GCQfNf7&M)qtS&`SKW=OUsPHR4;Cd^bW+dI(1go4=oftH_H9Tx zcpucLFvKE^G>#Gho1B<@9c+n+X#J%g96-NticP4B-u0GSgKH|=xnn>(TdU3gWZhc- z6QNo3CCe9ig53FcX1^rSOAQa-Yrhs0eYiDWr@w&YacSB-XJCmidr`tX-`+2)zjJBF z+EP?Uu}irJ@k`Ap=t=fY*lvHN3%8LP8T?G%H#R>$m9f#X=q&tpoQxa&x~A03JqO4L%XXw%oDz&UySHf$n$9K|!WMU7d(}8)fV-Qs z6Lwcfj&LIxFd4S}VZjWYwoW2Pa0Q2c^Yz;40n&pEJhx|>5*X~ds9rNWi5!C$Y*?FB z)8WM>abqw>Er=YHGPCO$!#`)!Z$86yefr%dk%hgJjy(@g#TJ>{oRLd^)IH6d=6o%m zX2N`M$I{}T@$HO zwAhUsdF^g~O>X@2Q+`+Na}q3I-R}|tvy6|^YgVY2t^M83aK5bl@a1q3vE7S4IR{*h}@q9TBOR$D(ld(>(KMcLQbK(4i5Og7~1U zryh4-AoOI2l+WTu$Htmy&AC@@cU3fhvcVZDbSo7uyqfRdoB3(pv>{;Nc88aZliw{) zk=_N!0SW(}q7(1w)^V2pPcO`@J}Xo@=01?&?8CD!#b#v2PKCau_X0o4(X2;4M*TsC zwECfpmCa?9kuuE9Ydd`Yr;C+ zdAX0!hbTU$lIDkvTDe0VxULep?M!@Xc>5gHtFyuW+BL>$H${Q;+r>R+yv5o$cC5Y_ zmFBcNQT=)O9lbCmI@YDEboTTYB4W>?9O-1!+yp%nHT@ZQKpES3QQ-X~^Z*V>}Kf6ZUu1(Qqs%tX^*jS}00x?LrdM?cv?8)^C287-u!vzLEakWzE&j<8-S zU+k|vqRbL-c=9p#;qn)##yL*dr;m(;^=0!?b&)sy((iR!hdmdJx?G2_NwHjLihOVE zaq3H%Q*g;ibl7HK#$y30o?CZxj8`LJ{BaiQd za2Jn#oSSzvQLOpo2Z~(WBRL>THw!eWwph#oJ$05`z~80;4lE|knAIm{&`IlnqO?WX zr)cd{q#t3RP=yIww!# z1f|>1r4Aol2_0NFnw-cD9$N25T-R8STKT8kqn!)t@E0I7Z1Z=4qvxhX12$aaDgf0z zuF&l#oV0lm_rRY_VK028mfv?=mY&rVWR>-mO77zo@~3%>fP24P@~Q{z^5gM1oz*w6 zW%#1RNmvKyLD?ilnYQ#-H>!5p}T)i%lg2_qu0?@jD00l!rDfpdbWDfA=>OG3B&BhGs6L&ueg9;7THFKU*u1r?If!rBiXmd(#%V zkY3SU9b3o()Ov zrMYj&&uuoK2Ny4>_w-9SRzK{&2UO*d5|IrNi7nv0sx zgvW)f_};Uf`C}1{r(I_roZ~s2J2T-qu+#GE(2bZ50e*Zq`E zf6|?AB^IYT&}Sugss+2=8ALjS*fqd%1$*1=GQ4_dUvke@wsn_OHBoile76mqn|yn^ z#>VYoR+0CgAH)5?8hv(T2HadT$XIiOEnt^&-#SQjeec{Mc03z- zf^&+c$rt1XT^_#qo3AGZbroPMX&&GqviH;BmAAs^1GB6lCU7_oi%}3<-#*kb1>ObW zNDi^VG5?0Q8@9Zp$_tZ5nUa9V0M%kaQ+4hKf7cQ*5C2cgOZ{i%xBj30j=vn$n=R?5 z%4lNxtAvqrR3wWUe>rSyItv+$!%u2UKgC*qjL6Myeg4j-e~Pp~1)Ru@t;{;MgiVJ( zNj_KesGs(sThsVA(YFfF+-I8O#6T({$FK7-^31QQbCtUjQeJTe2vI)gyy$6zA+1fz(J8#a! ztcC*-9IFU2G~LSXEkuQ^So-d@NOQUu%v_xXB_vbWw=B#aFVn+Mq$JRk#5qekj&ZEw zU5le9UA&wg`>~6Kn+on$P%xF5}jO6Q{b6c1+Uc4l;`E7{i z_Ys)DE$JqZCKS-t4!D84y6a*nhqqGYu4PrFCZc`W%M$J8+Lg4$6fszg>A0hhyBoU zr`KM|XqK)i5OXZUJYKoXfD4R?Os`XRut1}ES@+k3TN6!}{a{zDMdzU+$fIBnE`elt zU31k@mVP|j;4_gLhRM71?v9;kZFM`~yy{)>46}^~vzG0VybRu?S3y_JH<_=TWf#gZ z!z?dP&f)u1xAX3;AAWtygGNZSF-DpzABBY>Y7)i$je*L|sWL;)~m?F#%p+ z4LeroQGsilr!E8|;~#>E41TRGWKwWm`#0Zw6=4#VV;!-QxNzmcg$K!zJoO~LzL3@D z^9%i0>y|L?sauSp*C0kww6pcw;lqn4q(a;8)X^IFoQGRpjb>dQa(f=oZ%~nJUg&;* znhHb=a|(QNwmVRAQ91XART!M$0Q2xd(4Z@4$B3dKG%8(S+&eSA3f}lw)`B}#z!72?Z`*nL{dx9~;taAl9t~coanO#- zY}9nP7Ef4H8~YfsI)|be!=pON7cAj&v(5%!ot^ckP&MW&2(~B|x9nXMUX0AD#fE`J7FL-9_vKTB%v>u*I#|-Zc(@_reP82Z5%78LBe71E8!z ze^e`;s1gH(1hgBNK{r&duPz9ARInqG(Lv`a?|5cR6fF^`EhFZN0M~02kkxdDa9)Se zlQ1iu>Y9%Ec<0G1-g^{vQ8Q9LqeE|v7hzo!6=59|)#Imief9Wq)AOta$XD2d~8 z%>K4rMg>RT6wDu!KiK)3?<=;@@4_+F$Q*a6OV2a+mH50B?EdDRbH?w7LT<`1%<4yF z{*nmY_OqA-dES2@Tj{KumyZhTc7R!`W9Mkr?g7>rq_Vqv{(0=>&kELQQ7KS;aojyh zx_n*}t^aAUz|gy5j1euHSM0pvb<)zYq)2H1r`E$hp>y3N+90jS0xvMrsFAQw`e@Hw z@eDw^@LD|YZw!AcMK@Fr=^W6mkLENuOZh}RtX+ZaKuUSi&QKnJAR}fyh>*plVwtK) zqcfoO2nn{vE`@&b<}7k9P>ATpg*7IyRO7B|!eC#$?3X}wd5WlJ;wr$+E@G)cO6&^I zPC0N3`)kzEoNND5VE7*`MEw8g_fB(+h@+~FDh8WVU8QSJHtMn>f8qf~R=mpDtx!!U zJf82GWK&oMdvIvrvYxJN8b~m9tWjP4L&xDIao`u5k+ic%?!M{_zY!5;8Xu z_j`3yEv4MsUvRMR)AszMS5(zakLxuZZ`y!MMTl}>-5RcLT{C-cbe7ur!`~p4Njw$s z4kP>|>({buuVf7BJZJ)^k|fO7)@?CLXw(L(qZ57VXQV=5#Sot6!~v*AD2k(8!bDKA zup+Z64@UfwO`Z;n(-y|ki4PxNh~K+*`Ub51;+ ziM(j%>Q}o=#7x`1C1FAmtafb6Idf9#?q-;&&9YPDYyX3JL~@>)r>Kp~59&LIcrQ<3 ztnG!YZ$C9${qKn0A3g5R&fy9@`sugbAPg~YS-e(aRRW2~z9Zva=)XS=_M_;0XDflJ zs2X9R&&|<*k_Ya-RDg>(LGQ#hvkV%te|TaR_D#ZTw1NmbhI`PpI9nL;11@g@OZ8%_ zxmZa*S1INl?U7^~)vaFN@D#i2!Sm6VX6^33Bz?_9nLT#dHqI8SR<;=kmEV0bIfR3C(q5)N^VV!HVy(b4SH)%JZ`OVBj>VjaG~N#R^);gcUB?R!52u<`FELmm0 zp`5x7d&O^&iZ?mM{-t!Vdc5#R-=I!d^K0RL9nTmUV(kbCmiDFspX#4ehFy^!f|EHHhZ7U156Kr)A z#GT)KLHDWxZ7z^dqhq!@10J3rmTC&Yx^Yv;{dN^$bE`>ixRYdZUoWNsy0#u;J!XCe zVGo>k1O3b$vl1NuLenEIs~q7)xH@lJMpg;;S_y7VZKz_EA{XV*1w;Ji+pkEm%I>i> z*gLR&cLH0}s}ynx-B=E19uaC9LJ>2Q+5|AnbOdfWxG3N}oK5}5Vio>vv0lSzK9nci zryMEu;!5CtwD@5AhB&~%2rEAkgc)e7R=})O9enFK%X{8uJYq7yc}qt$#XuN#+>9!I z&Sm;x-z6ta2(G(Gay&2QeyLM``}m=Pql%rEwSotLZF>Zt>jqffGm8d8-125%%Eps8 z0Lck`d7H)CLQ7G%9I*S%$L~s6<4irTP-;1c5#3?y*x9jVG1t=4iaMJ%^J7FsEoVz< zZNKC4Q55kPVlW%c+Qb1zbd55=G7k5G;6d;bvLljr7cPRM8MuNwQ0A<5!R4T7Q`=6& zqi8Uu;FXT7DuO3>Gn9FLiQx`g+P+S24|PTG^gfqxq?Xt!7*;q3g!X^_Bz|dD%N5F3 zYUxgefzg{$LuMF6DK7-d+v&wkrZ*~p(+^BurN0r5=`xQ-|B zP``34LZnXOrlxp;zxntu)NR;2Ho!4xUPg0d)TB5a*oi-eUx(4Wl;*}!lVbn;3I4dy zJi2;J+&a*R1L5&Q#EluS;A9?XXZWs@Q_GVBq4Y37!=1oL$lTQWN*H!>L#Q~GEN+8S z4vf5oHuRehgJD8B8#If~toHB@!PiIDY5qM@9!D2mn41EY3ipig*NizrAG3G|FgsB_ zo$D8c-HKxqQN#({AaF$6mB_xlZHhS7p%-9%+F%8#(8cY{_h9*=5jAQ-#;#{+jYGV;#;VP8bMInPMEie3&1& zBw~=j3qkFH{rTe}zhK01)Zm!H(~)V^o^4qhP-J8G9@q*U9##lY(_N?oJkXsD;MJhp z)@ou6O4yo-V<4C%S(eZC;>~R?FY+H4BA-`U%_Y4Gix8g##*C>l1P6MS?j#JuTOTCo zKUge9vSmlyxiLXbn6d8kh2MNe^6;)mj^qVT251ME5Q-|#fh$c+;Ad_EzQQH9Lh&_z zEs-1l+kc`s^Wdp$MK)R~HQq9c(UA6XB`rKHyB~PM{^cG9Y?pT02Km;-`~&+eFCK=( z=YMeL?#_iZ!3F1n?&k}C&5;FlWUcie^Ep+2HxvJPy3ay;AV}-l88i9vGpr&I)IP0{ z$u{`xY9-ab+MjKr+f7#ap`NQdqWLx#ZNSaQc7JPeBX-FMu@+F`hv%)y2rgjsKptI&}Zjx}Pw za2@ZwoN_G2C{&Nr`AyMV^zLf8m(^bU?lr~AVTp8!&Z+9Xxk+pag*%PIjs^Wf6#!bQm!ZQ-*sYQ1BqHtJZx!SanO z@SJNNm-aEJ7xz*yrX_(ETENNgpg8>gZLY3*DGm6;T zBF=G}fUy;krT7VOvP#F$7*h=xnxUegMW~8jkP<~*z3rvgyv~uzj?%*n$%#wzx?f|- zfzVDP>hRYXM-n>BLuB6a`0<@6>Od6Bp(=`-nhSXfa{x@l+rg7PH!WLuZC8%Rp%gRd zqDwitwNXbuYsGTDTCQV z2|vd4%S%6oTc*d=9*PBe82pCB(|%S%zOhw;nxSFU6L>JnoQiS|FxQA;o1_)2z6RWo;-DRJs<$m;Tr3E!dAKNXX>AXCLsx zyz}qRg5ZP4@2#ult4Jk+lh4%YIx5<>_d)Q3U$Au4*)e_$8^SOtE@tPus)ZN2KB`yzVelocw!9z8N^tkbDRx(w zZMqg;P#eXFDTjQ9t!KN>eI8L0ZCb)&kSD>)iUr9~4!;=lGc_o4_|@2VD{N&0PUq+c zNIl^xXg+D9s^>3xDcP3BUc8uJ6?X$wy;XsEuR@`TK+{D(9orlKsmFWRKv%xm#z^00 ziZ|4dhuiPEcCfrBXCcw;X9Ku^`=#s)79{hqZ23LTw9vpW4G;UPNi(1g?^aH1l3(jG zZ)?#KELqwWxD|c0ykSjf+4mS2`dZ&Jpeo^&35{?)f^ssF3Q|w>$g{&bv(MRmaaweT zGP;FlnM8}_yJVw5u{x`n;(@+>fV?MQk?1!CsvXm2JzFM*2HPcz`CvKz@qWHrVd3Z2 zU`yW#Mj8z|KA3f50gc+fom;8ZvKu!rpM366KMNdZ1YtKsccuD8ZqYJ49$__8lgvXN zcm%xn4UI4>wj)K1vpcbtcU(_%lw_kxInPSz)8o+LDoi$Si{s~McNwSCu1VWtLmStw zUIISTVeGW6yN6g{cjhV<&*T4PN`|pmknaF}d_&mI>nam_Y6mZH*<0X?knu{UssTF29ePafTWc{)31UJd`ohW7(g zC|8@6xJZ@hrN%uoc19g`ODhq+9|$aDB>lypd;n}I@0V%k$^6lx8C>fWApr7}^t}>& zLX$R47|KIA!_j4l4F=nJBB;6xLy6BS49k_-LsMleG2>}o)rq!ZG*svuM{a+XELHy|Tb8TM z?y}Nusb225YjmX1(0sfkC$8u^VXG)IaBcr;IIet@dckBUwPkNZXu<&GNYBn#I0IB6^h1Ko}%*w!ol`;QcR&B^Mv zFgor{OB9xC&*2Ty{gTLSld%@s(+zyUy;f#=eerWyXut@0&*~L&O(dV)kJyTLdoiM| zVz3)J#uCk&c^P2QW|8plmQBmX)|TVPje8j~QM~6M<5Y>E={~DE>4GQh)7)SCa~6QO zZhfT42`3LhS>o<4shEbmClB>l(s@it_7$eb(lxreUgor~ghOHO-Cony;T*R_nfZkVsO_z=YA)15sv)Z3LJ{1qvimSB^oQkD9F!=GcWSS1mh{utDdgw>sz zDkp##+CJ9-2ts`Pg(~P|^n5LeMM@7w@D$!V-hpGA4SaZe=sJ&4_dR_xr_~ZLbS1KU z2(c$uxC8esNMkK~3%EDlD^;*d@<+~8jw>TQT%LT&l z^SH(@{W{3wkz7_vGP?DHRcMD`2|2T1TLs}?x9l<|FUX8qhzemv! zMjT;>CWb1FpN@|@Ugt+KdmJ2RZ#rpNJG-P8)|#;K>pZJC!LI!Yq^C90=OQ54{-0sq z{u`!`e=>87iEJ{qDHyVDhJ1xgSseYa6K2VjCUNbNu5cyp80x(z@(?$6`NA!z{GBN_ zoyfaa`7(-+g{p^tlMWwrFILIVT(04H*SkW2e<-UnvLV_S$Hu zZw5h4Jha&&MW3cEiej$NPqQWW0QCkugWsRMnQ2Rp)+1&4bRK3wxh`J-UQ;FXif3mgzZKVw*#ddZonU- zB>!zxrXXieQ%xGrUjNUZHEx$-2>}mR6u~9zLJ{|%=x5W2TDa99U}Ya0tl!KEaQ}BM z(j2+ld@xK1XrhwFlb#?F)>Us&WL|o=eIrrtR1ioIZZUbzi09p6T)cgR}%hfdjnD6nfUj+yS^r1 zJOBNf)Y!4Mf%!|jatQ#QBm$U>nG}Q)aQ6jSIl9b_<-I##3@cs*?!R75-1;7&S@DX0 zZL{hNXsc?S(qOq^pYpA%Wx?&o+WB9y4p)QSIQ9-dtHTk-lF)U~5Q+CGncSqZsi&f0 zOiq z#8c;F2Q&mFL0z$kxOd+^{sHTUVIaP|=Jd$r{DUL00`e=HOL3cmc6W15M0M + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/src/main/res/layout/activity_demo11.xml b/demo/src/main/res/layout/activity_demo11.xml new file mode 100644 index 0000000..dc1c5b4 --- /dev/null +++ b/demo/src/main/res/layout/activity_demo11.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/src/main/res/layout/activity_main.xml b/demo/src/main/res/layout/activity_main.xml index 78a8961..65ecd8a 100644 --- a/demo/src/main/res/layout/activity_main.xml +++ b/demo/src/main/res/layout/activity_main.xml @@ -13,16 +13,19 @@ android:id="@+id/demo1" android:layout_width="match_parent" android:layout_height="50dp" + android:onClick="onClick" android:text="demo1" />