From ad5b7c9b37c05317dd99ff8f5a529cdf5cb4ab56 Mon Sep 17 00:00:00 2001 From: SuperMonster003 <30370009+SuperMonster003@users.noreply.github.com> Date: Sat, 1 Jan 2022 19:53:25 +0800 Subject: [PATCH] =?UTF-8?q?6.0.1=20-=20=E5=A2=9E=E5=8A=A0=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF/=E6=9C=8D=E5=8A=A1=E7=AB=AF=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E6=96=B9=E5=BC=8F=20=E5=A2=9E=E5=8A=A0=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=85=A8=E5=B1=80=E5=AF=B9=E8=B1=A1=20=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=8F=92=E4=BB=B6=E5=8F=8A=E5=B7=A5=E5=85=B7=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 38 +- app/build.gradle | 51 ++- app/src/main/assets/doc/CHANGELOG.md | 19 +- .../java/org/autojs/autojs/autojs/AutoJs.java | 51 ++- .../autojs/ScriptExecutionGlobalListener.java | 29 +- .../model/explorer/ExplorerFileItem.java | 5 +- .../autojs/autojs/pluginclient/Buffer.java | 138 ++++++++ .../DevPluginResponseHandler.java | 44 ++- .../autojs/pluginclient/DevPluginService.java | 331 ++++++------------ .../autojs/pluginclient/JsonSocket.java | 283 +++++++++++++++ .../autojs/pluginclient/JsonSocketClient.java | 205 +++++++++++ .../autojs/pluginclient/JsonSocketServer.java | 212 +++++++++++ .../autojs/pluginclient/JsonWebSocket.java | 125 ------- .../java/org/autojs/autojs/tool/IOTool.java | 81 +++++ .../org/autojs/autojs/tool/ThreadTool.java | 32 ++ .../ui/main/community/CommunityWebView.java | 3 +- .../autojs/ui/main/drawer/DrawerFragment.java | 184 ++++++---- .../autojs/ui/main/drawer/DrawerMenuItem.java | 18 +- .../main/drawer/DrawerMenuItemViewHolder.java | 27 +- app/src/main/res/values-en/strings.xml | 11 +- app/src/main/res/values/strings.xml | 11 +- app/src/main/strings.xml | 4 +- autojs/build.gradle | 45 +-- autojs/src/main/AndroidManifest.xml | 1 + autojs/src/main/assets/init.js | 7 +- autojs/src/main/assets/modules/__$base64__.js | 27 ++ autojs/src/main/assets/modules/__images__.js | 44 +-- .../stardust/autojs/ScriptEngineService.java | 3 +- .../autojs/core/console/GlobalConsole.java | 29 +- .../stardust/autojs/core/looper/Timer.java | 3 + .../stardust/autojs/runtime/api/Device.java | 24 +- autojs/src/main/res/values-en/strings.xml | 8 +- autojs/src/main/res/values/strings.xml | 6 +- automator/build.gradle | 12 +- .../automator/filter/DfsFilterTest.kt | 2 +- build.gradle | 15 +- common/build.gradle | 45 ++- gradle.properties | 7 +- gradle/wrapper/gradle-wrapper.properties | 6 +- inrt/build.gradle | 48 +-- inrt/src/main/res/values/strings.xml | 2 +- libs/org.mozilla.rhino-1.7.14/build.gradle | 2 +- ...o-1.7.14-SNAPSHOT.jar => rhino-1.7.14.jar} | Bin 1393596 -> 1393820 bytes project-versions.json | 6 +- 44 files changed, 1537 insertions(+), 707 deletions(-) create mode 100644 app/src/main/java/org/autojs/autojs/pluginclient/Buffer.java create mode 100644 app/src/main/java/org/autojs/autojs/pluginclient/JsonSocket.java create mode 100644 app/src/main/java/org/autojs/autojs/pluginclient/JsonSocketClient.java create mode 100644 app/src/main/java/org/autojs/autojs/pluginclient/JsonSocketServer.java delete mode 100644 app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java create mode 100644 app/src/main/java/org/autojs/autojs/tool/IOTool.java create mode 100644 app/src/main/java/org/autojs/autojs/tool/ThreadTool.java create mode 100644 autojs/src/main/assets/modules/__$base64__.js rename libs/org.mozilla.rhino-1.7.14/{rhino-1.7.14-SNAPSHOT.jar => rhino-1.7.14.jar} (88%) diff --git a/README.md b/README.md index 75a4699f..9b747f02 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ * 支持将脚本文件或项目打包为 APK 文件 * 支持利用 Root 权限扩展功能 (屏幕点击/滑动/录制/Shell) * 支持作为 Tasker 插件使用 +* 支持与 VSCode 连接并进行桌面开发 (需要 [AutoJs6-VSCode-Ext](https://github.com/SuperMonster003/AutoJs6-VSCode-Ext) 插件) ****** @@ -98,24 +99,23 @@ [comment]: <> "Version history only shows last 3 versions" -# v6.0.1 Alpha2 +# v6.0.1 -###### 2021/12/07 +###### 2022/01/01 -* `修复` global.sleep及global.toast方法绑定错误 - -# v6.0.1 Alpha - -###### 2021/12/05 - -* `新增` polyfill (Object.getOwnPropertyDescriptors) -* `新增` polyfill (Array.prototype.flat) -* `新增` isInteger/isNullish/isPlainObject/isPrimitive/isReference -* `优化` 扩展global.sleep支持随机范围/负数兼容 -* `优化` 扩展global.toast支持时长控制/强制覆盖控制/dismiss方法 +* `新增` 连接 VSCode 插件支持客户端 (LAN) 及服务端 (LAN/ADB) 方式 (Ref to Auto.js Pro) +* `新增` 增加 $base64 全局对象 (Ref to Auto.js Pro) +* `新增` 增加 isInteger/isNullish/isPlainObject/isPrimitive/isReference 全局方法 +* `新增` 增加 polyfill (Object.getOwnPropertyDescriptors) +* `新增` 增加 polyfill (Array.prototype.flat) +* `优化` 扩展 global.sleep 支持 随机范围/负数兼容 +* `优化` 扩展 global.toast 支持 时长控制/强制覆盖控制/dismiss * `优化` 包名对象全局化 (okhttp3/androidx/de) * `优化` 升级 Android Material 版本 1.5.0-beta01 -> 1.6.0-alpha01 -* `优化` 升级 Android Gradle 插件版本 7.2.0-alpha04 -> 7.2.0-alpha05 +* `优化` 升级 Android Gradle 插件版本 7.2.0-alpha04 -> 7.2.0-alpha06 +* `优化` 升级 Kotlinx Coroutines 版本 1.5.2-native-mt -> 1.6.0-native-mt +* `优化` 升级 Kotlin Gradle 插件版本 1.6.0 -> 1.6.10 +* `优化` 升级 Gradle 发行版本 7.3 -> 7.3.3 # v6.0.0 @@ -190,11 +190,11 @@ ****** -* [Auto.js](https://github.com/hyb1996/Auto.js-VSCode-Extension) { author: [hyb1996](https://github.com/hyb1996) } - - `适用于 VS Code 的桌面开发插件` +* [AutoJs6-VSCode-Ext](https://github.com/SuperMonster003/AutoJs6-VSCode-Ext) { author: [SuperMonster003](https://github.com/SuperMonster003) } + - `适用于 VSCode 的桌面开发插件 (二次开发项目)` * [AutoX](https://github.com/kkevsekk1/AutoX) { author: [kkevsekk1](https://github.com/kkevsekk1) } - - `Auto.js 二次开发项目` + - `安卓平台 JavaScript 自动化工具 (二次开发项目)` -* [Auto.js-TypeScript-Declarations](https://github.com/SuperMonster003/Auto.js-TypeScript-Declarations) { author: [SuperMonster003](https://github.com/SuperMonster003) } - - `Auto.js 声明文件 (.d.ts)` +[//]: # (* [Auto.js-TypeScript-Declarations](https://github.com/SuperMonster003/Auto.js-TypeScript-Declarations) { author: [SuperMonster003](https://github.com/SuperMonster003) }) +[//]: # ( - `Auto.js 声明文件 (.d.ts)`) diff --git a/app/build.gradle b/app/build.gradle index 8f2b3c2e..21f48c8e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,9 +5,9 @@ plugins { id "kotlin-kapt" } -def AnnotationsVer = "4.8.0" -def SupportLibsVer = "28.0.0" -def ButterKnifeVer = "10.2.3" +def annotationsVer = "4.8.0" +def butterKnifeVer = "10.2.3" +def leakcanaryVer = "2.7" def properties = new Properties() def propFile = new File("sign.properties") @@ -15,21 +15,15 @@ def isPropFileExists = propFile.exists() isPropFileExists && properties.load(new FileInputStream(propFile)) -configurations.all { - resolutionStrategy { - force "com.android.support:support-v4:${SupportLibsVer}" - } -} - tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { jvmTarget = JavaVersion.VERSION_16 } } -tasks.withType(JavaCompile) { - options.compilerArgs << '-Xlint:deprecation' << '-Xlint:unchecked' -} +// tasks.withType(JavaCompile) { +// options.compilerArgs << "-Xlint:deprecation" << "-Xlint:unchecked" +// } android { signingConfigs { @@ -52,7 +46,7 @@ android { javaCompileOptions { annotationProcessorOptions { arguments = [ - 'resourcePackageName': applicationId, + "resourcePackageName": applicationId, "androidManifestFile": "$projectDir/src/main/AndroidManifest.xml".toString() ] } @@ -66,6 +60,10 @@ android { if (isPropFileExists) { signingConfig signingConfigs.release } + // Disable Crashlytics reports. + ext.enableCrashlytics = false + // Disables PNG crunching for the release build type. + crunchPngs false } release { shrinkResources false @@ -118,7 +116,7 @@ android { applicationVariants.all { variant -> variant.mergeAssetsProvider.configure { doLast { - delete(fileTree(dir: outputDir, includes: ['declarations/**'])) + delete(fileTree(dir: outputDir, includes: ["declarations/**"])) } } } @@ -129,18 +127,22 @@ repositories { } dependencies { - testImplementation "junit:junit:4.13.2" + // JUnit + testImplementation "junit:junit:${junitVer}" + + // LeakCanary + debugImplementation "com.squareup.leakcanary:leakcanary-android:${leakcanaryVer}" // Kotlin - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2-native-mt" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0-native-mt" // Android Annotations - kapt "org.androidannotations:androidannotations:${AnnotationsVer}" - implementation "org.androidannotations:androidannotations-api:${AnnotationsVer}" + kapt "org.androidannotations:androidannotations:${annotationsVer}" + implementation "org.androidannotations:androidannotations-api:${annotationsVer}" // ButterKnife - kapt "com.jakewharton:butterknife-compiler:${ButterKnifeVer}" - implementation "com.jakewharton:butterknife:${ButterKnifeVer}" + kapt "com.jakewharton:butterknife-compiler:${butterKnifeVer}" + implementation "com.jakewharton:butterknife:${butterKnifeVer}" // Android supports implementation "androidx.appcompat:appcompat:1.4.0" @@ -212,13 +214,10 @@ dependencies { // Android Job implementation "com.evernote:android-job:1.4.2" - // Leakcanary - debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7' - // Extracted from com.github.hyb1996:MutableTheme:1.0.0 - api 'com.jrummyapps:colorpicker:2.1.7' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.github.ozodrukh:CircularReveal:2.0.1' + implementation "com.jrummyapps:colorpicker:2.1.7" + implementation "androidx.recyclerview:recyclerview:1.2.1" + implementation "com.github.ozodrukh:CircularReveal:2.0.1" // Bugly implementation project(":libs:com.tencent.bugly.crashreport-2.6.6") diff --git a/app/src/main/assets/doc/CHANGELOG.md b/app/src/main/assets/doc/CHANGELOG.md index 2d4230de..eb524821 100644 --- a/app/src/main/assets/doc/CHANGELOG.md +++ b/app/src/main/assets/doc/CHANGELOG.md @@ -6,16 +6,21 @@ # v6.0.1 -###### 2021/12/07 +###### 2022/01/01 -* `新增` polyfill (Object.getOwnPropertyDescriptors) -* `新增` polyfill (Array.prototype.flat) -* `新增` isInteger/isNullish/isPlainObject/isPrimitive/isReference -* `优化` 扩展global.sleep支持随机范围/负数兼容 -* `优化` 扩展global.toast支持时长控制/强制覆盖控制/dismiss方法 +* `新增` 连接 VSCode 插件支持客户端 (LAN) 及服务端 (LAN/ADB) 方式 (Ref to Auto.js Pro) +* `新增` 增加 $base64 "工具类" (Ref to Auto.js Pro) +* `新增` 增加 isInteger/isNullish/isPlainObject/isPrimitive/isReference 全局方法 +* `新增` 增加 polyfill (Object.getOwnPropertyDescriptors) +* `新增` 增加 polyfill (Array.prototype.flat) +* `优化` 扩展 global.sleep 支持 随机范围/负数兼容 +* `优化` 扩展 global.toast 支持 时长控制/强制覆盖控制/dismiss * `优化` 包名对象全局化 (okhttp3/androidx/de) * `优化` 升级 Android Material 版本 1.5.0-beta01 -> 1.6.0-alpha01 -* `优化` 升级 Android Gradle 插件版本 7.2.0-alpha04 -> 7.2.0-alpha05 +* `优化` 升级 Android Gradle 插件版本 7.2.0-alpha04 -> 7.2.0-alpha06 +* `优化` 升级 Kotlinx Coroutines 版本 1.5.2-native-mt -> 1.6.0-native-mt +* `优化` 升级 Kotlin Gradle 插件版本 1.6.0 -> 1.6.10 +* `优化` 升级 Gradle 发行版本 7.3 -> 7.3.3 # v6.0.0 diff --git a/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java b/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java index cb2160e0..ec3dd525 100644 --- a/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java +++ b/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java @@ -6,6 +6,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Looper; + import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.stardust.app.GlobalAppContext; @@ -15,12 +16,15 @@ import com.stardust.autojs.runtime.accessibility.AccessibilityConfig; import com.stardust.autojs.runtime.api.AppUtils; import com.stardust.autojs.runtime.exception.ScriptException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException; +import com.stardust.view.accessibility.AccessibilityService; +import com.stardust.view.accessibility.LayoutInspector; +import com.stardust.view.accessibility.NodeInfo; -import org.autojs.autojs.BuildConfig; import org.autojs.autojs.Pref; import org.autojs.autojs.R; import org.autojs.autojs.external.fileprovider.AppFileProvider; import org.autojs.autojs.pluginclient.DevPluginService; +import org.autojs.autojs.tool.AccessibilityServiceTool; import org.autojs.autojs.ui.floating.FloatyWindowManger; import org.autojs.autojs.ui.floating.FullScreenFloatyWindow; import org.autojs.autojs.ui.floating.layoutinspector.LayoutBoundsFloatyWindow; @@ -28,12 +32,6 @@ import org.autojs.autojs.ui.floating.layoutinspector.LayoutHierarchyFloatyWindow import org.autojs.autojs.ui.log.LogActivity_; import org.autojs.autojs.ui.settings.SettingsActivity_; -import com.stardust.view.accessibility.AccessibilityService; -import com.stardust.view.accessibility.LayoutInspector; -import com.stardust.view.accessibility.NodeInfo; - -import org.autojs.autojs.tool.AccessibilityServiceTool; - /** * Created by Stardust on 2017/4/2. @@ -59,31 +57,30 @@ public class AutoJs extends com.stardust.autojs.AutoJs { FullScreenFloatyWindow create(NodeInfo nodeInfo); } - private BroadcastReceiver mLayoutInspectBroadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - try { - ensureAccessibilityServiceEnabled(); - String action = intent.getAction(); - if (LayoutBoundsFloatyWindow.class.getName().equals(action)) { - capture(LayoutBoundsFloatyWindow::new); - } else if (LayoutHierarchyFloatyWindow.class.getName().equals(action)) { - capture(LayoutHierarchyFloatyWindow::new); - } - } catch (Exception e) { - if (Looper.myLooper() != Looper.getMainLooper()) { - throw e; - } - } - } - }; - private AutoJs(final Application application) { super(application); getScriptEngineService().registerGlobalScriptExecutionListener(new ScriptExecutionGlobalListener()); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(LayoutBoundsFloatyWindow.class.getName()); intentFilter.addAction(LayoutHierarchyFloatyWindow.class.getName()); + BroadcastReceiver mLayoutInspectBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + try { + ensureAccessibilityServiceEnabled(); + String action = intent.getAction(); + if (LayoutBoundsFloatyWindow.class.getName().equals(action)) { + capture(LayoutBoundsFloatyWindow::new); + } else if (LayoutHierarchyFloatyWindow.class.getName().equals(action)) { + capture(LayoutHierarchyFloatyWindow::new); + } + } catch (Exception e) { + if (Looper.myLooper() != Looper.getMainLooper()) { + throw e; + } + } + } + }; LocalBroadcastManager.getInstance(application).registerReceiver(mLayoutInspectBroadcastReceiver, intentFilter); } @@ -115,7 +112,7 @@ public class AutoJs extends com.stardust.autojs.AutoJs { @Override public String println(int level, CharSequence charSequence) { String log = super.println(level, charSequence); - DevPluginService.getInstance().log(log); + DevPluginService.getInstance().print(log); return log; } }; diff --git a/app/src/main/java/org/autojs/autojs/autojs/ScriptExecutionGlobalListener.java b/app/src/main/java/org/autojs/autojs/autojs/ScriptExecutionGlobalListener.java index bdd62629..1c24b723 100644 --- a/app/src/main/java/org/autojs/autojs/autojs/ScriptExecutionGlobalListener.java +++ b/app/src/main/java/org/autojs/autojs/autojs/ScriptExecutionGlobalListener.java @@ -1,12 +1,16 @@ package org.autojs.autojs.autojs; +import android.annotation.SuppressLint; + import com.stardust.app.GlobalAppContext; -import com.stardust.autojs.engine.JavaScriptEngine; import com.stardust.autojs.execution.ScriptExecution; import com.stardust.autojs.execution.ScriptExecutionListener; -import org.autojs.autojs.App; +import com.stardust.autojs.runtime.api.Console; + import org.autojs.autojs.R; +import java.math.BigDecimal; + /** * Created by Stardust on 2017/5/3. */ @@ -24,13 +28,26 @@ public class ScriptExecutionGlobalListener implements ScriptExecutionListener { onFinish(execution); } + @SuppressLint("DefaultLocale") private void onFinish(ScriptExecution execution) { Long millis = (Long) execution.getEngine().getTag(ENGINE_TAG_START_TIME); - if (millis == null) - return; + if (millis != null) { + printSeconds(execution, millis); + } + } + + private void printSeconds(ScriptExecution execution, Long millis) { double seconds = (System.currentTimeMillis() - millis) / 1000.0; - AutoJs.getInstance().getScriptEngineService().getGlobalConsole() - .verbose(GlobalAppContext.getString(R.string.text_execution_finished), execution.getSource().toString(), seconds); + + @SuppressLint("DefaultLocale") + BigDecimal secondsString = new BigDecimal(String.format("%.3f", seconds)).stripTrailingZeros(); + + printSeconds(execution, secondsString); + } + + private void printSeconds(ScriptExecution execution, BigDecimal seconds) { + Console console = AutoJs.getInstance().getScriptEngineService().getGlobalConsole(); + console.verbose(GlobalAppContext.getString(R.string.text_execution_finished), execution.getSource().toString(), seconds); } @Override diff --git a/app/src/main/java/org/autojs/autojs/model/explorer/ExplorerFileItem.java b/app/src/main/java/org/autojs/autojs/model/explorer/ExplorerFileItem.java index e042bc1b..4732e66a 100644 --- a/app/src/main/java/org/autojs/autojs/model/explorer/ExplorerFileItem.java +++ b/app/src/main/java/org/autojs/autojs/model/explorer/ExplorerFileItem.java @@ -1,5 +1,7 @@ package org.autojs.autojs.model.explorer; +import androidx.annotation.NonNull; + import com.stardust.pio.PFile; import com.stardust.util.ObjectHelper; import com.stardust.util.Objects; @@ -18,7 +20,7 @@ public class ExplorerFileItem implements ExplorerItem { "js", "java", "xml", "json", "txt", "log", "ts" )); - private PFile mFile; + private final PFile mFile; private final ExplorerPage mParent; public ExplorerFileItem(PFile file, ExplorerPage parent) { @@ -104,6 +106,7 @@ public class ExplorerFileItem implements ExplorerItem { return type.equals("js") || type.equals("auto"); } + @NonNull @Override public String toString() { return getClass().getSimpleName() + "{" + diff --git a/app/src/main/java/org/autojs/autojs/pluginclient/Buffer.java b/app/src/main/java/org/autojs/autojs/pluginclient/Buffer.java new file mode 100644 index 00000000..284a2063 --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/pluginclient/Buffer.java @@ -0,0 +1,138 @@ +package org.autojs.autojs.pluginclient; + +import androidx.annotation.NonNull; + +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; + +public class Buffer { + + public final int length; + public final byte[] bytes; + + public Buffer(int length) { + this.bytes = new byte[length]; + this.length = this.bytes.length; + } + + public Buffer(byte[] bytes) { + this.bytes = bytes; + if (this.bytes != null) { + this.length = this.bytes.length; + } else { + this.length = 0; + } + } + + public int readInt8(int offset) { + return ((int) this.bytes[offset] & 0xff); + } + + public int readInt16BE(int offset) { + return (((int) this.bytes[offset + 2] & 0xff) << 8) | + ((int) this.bytes[offset + 3] & 0xff); + } + + public int readInt16LE(int offset) { + return ((int) this.bytes[offset] & 0xff) | + (((int) this.bytes[offset + 1] & 0xff) << 8); + } + + public int readInt32BE(int offset) { + return (((int) this.bytes[offset] & 0xff) << 24) | + (((int) this.bytes[offset + 1] & 0xff) << 16) | + (((int) this.bytes[offset + 2] & 0xff) << 8) | + ((int) this.bytes[offset + 3] & 0xff); + } + + public int readInt32LE(int offset) { + return ((int) this.bytes[offset] & 0xff) | + (((int) this.bytes[offset + 1] & 0xff) << 8) | + (((int) this.bytes[offset + 2] & 0xff) << 16) | + (((int) this.bytes[offset + 3] & 0xff) << 24); + } + + public int readUInt8(int offset) { + return this.readInt8(offset); + } + + public int readUInt16BE(int offset) { + return this.readInt16BE(offset); + } + + public int readUInt16LE(int offset) { + return this.readInt16LE(offset); + } + + public int readUInt32BE(int offset) { + return this.readInt32BE(offset); + } + + public int readUInt32LE(int offset) { + return this.readInt32LE(offset); + } + + public void writeInt8(int value, int offset) { + this.bytes[offset] = (byte) (value & 0xffL); + } + + public void writeInt16BE(int value, int offset) { + this.bytes[offset] = (byte) ((value >>> 8L) & 0xffL); + this.bytes[offset + 1] = (byte) (value & 0xffL); + + } + + public void writeInt16LE(int value, int offset) { + this.bytes[offset] = (byte) (value & 0xffL); + this.bytes[offset + 1] = (byte) ((value >>> 8L) & 0xffL); + } + + public void writeInt32BE(int value, int offset) { + this.bytes[offset] = (byte) ((value >>> 24L) & 0xffL); + this.bytes[offset + 1] = (byte) ((value >>> 16L) & 0xffL); + this.bytes[offset + 2] = (byte) ((value >>> 8L) & 0xffL); + this.bytes[offset + 3] = (byte) (value & 0xffL); + } + + public void writeInt32LE(int value, int offset) { + this.bytes[offset] = (byte) (value & 0xffL); + this.bytes[offset + 1] = (byte) ((value >>> 8L) & 0xffL); + this.bytes[offset + 2] = (byte) ((value >>> 16L) & 0xffL); + this.bytes[offset + 3] = (byte) ((value >>> 24L) & 0xffL); + } + + public void writeUInt8(int value, int offset) { + this.writeInt8(value, offset); + } + + public void writeUInt16BE(int value, int offset) { + this.writeInt16BE(value, offset); + } + + public void writeUInt16LE(int value, int offset) { + this.writeInt16LE(value, offset); + } + + public void writeUInt32BE(int value, int offset) { + this.writeInt32BE(value, offset); + } + + public void writeUInt32LE(int value, int offset) { + this.writeInt32LE(value, offset); + } + + public Buffer slice(int start, int end) { + int len = end - start; + if (len <= 0) { + return null; + } + ByteBuffer buffer = ByteBuffer.wrap(this.bytes, start, len); + return new Buffer(buffer.array()); + } + + @NonNull + @Override + public String toString() { + return StandardCharsets.UTF_8.decode(ByteBuffer.wrap(this.bytes)).toString(); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/pluginclient/DevPluginResponseHandler.java b/app/src/main/java/org/autojs/autojs/pluginclient/DevPluginResponseHandler.java index 189df3a0..527bfa3e 100644 --- a/app/src/main/java/org/autojs/autojs/pluginclient/DevPluginResponseHandler.java +++ b/app/src/main/java/org/autojs/autojs/pluginclient/DevPluginResponseHandler.java @@ -2,7 +2,6 @@ package org.autojs.autojs.pluginclient; import android.annotation.SuppressLint; import android.text.TextUtils; -import android.widget.Toast; import com.google.gson.JsonElement; import com.google.gson.JsonNull; @@ -37,8 +36,7 @@ import io.reactivex.schedulers.Schedulers; public class DevPluginResponseHandler implements Handler { - - private Router mRouter = new Router.RootRouter("type") + private final Router mRouter = new Router.RootRouter("type") .handler("command", new Router("command") .handler("run", data -> { String script = data.get("script").getAsString(); @@ -80,10 +78,10 @@ public class DevPluginResponseHandler implements Handler { return true; })); - - private HashMap mScriptExecutions = new HashMap<>(); + private final HashMap mScriptExecutions = new HashMap<>(); private final File mCacheDir; + @SuppressWarnings("ResultOfMethodCallIgnored") public DevPluginResponseHandler(File cacheDir) { mCacheDir = cacheDir; if (cacheDir.exists()) { @@ -101,14 +99,15 @@ public class DevPluginResponseHandler implements Handler { return mRouter.handle(data); } - public Observable handleBytes(JsonObject data, JsonWebSocket.Bytes bytes) { + public Observable handleBytes(JsonObject data, JsonSocket.Bytes bytes) { String id = data.get("data").getAsJsonObject().get("id").getAsString(); String idMd5 = MD5.md5(id); - return Observable.fromCallable(() -> { - File dir = new File(mCacheDir, idMd5); - Zip.unzip(new ByteArrayInputStream(bytes.byteString.toByteArray()), dir); - return dir; - }) + return Observable + .fromCallable(() -> { + File dir = new File(mCacheDir, idMd5); + Zip.unzip(new ByteArrayInputStream(bytes.byteString.toByteArray()), dir); + return dir; + }) .subscribeOn(Schedulers.io()); } @@ -121,7 +120,6 @@ public class DevPluginResponseHandler implements Handler { mScriptExecutions.put(viewId, Scripts.INSTANCE.run(new StringScriptSource("[remote]" + name, script))); } - private void launchProject(String dir) { try { new ProjectLauncher(dir) @@ -132,7 +130,6 @@ public class DevPluginResponseHandler implements Handler { } } - private void stopScript(String viewId) { ScriptExecution execution = mScriptExecutions.get(viewId); if (execution != null) { @@ -163,7 +160,7 @@ public class DevPluginResponseHandler implements Handler { GlobalAppContext.toast(R.string.text_script_save_successfully); } - + @SuppressWarnings("ResultOfMethodCallIgnored") @SuppressLint("CheckResult") private void saveProject(String name, String dir) { if (TextUtils.isEmpty(name)) { @@ -171,19 +168,20 @@ public class DevPluginResponseHandler implements Handler { } name = PFiles.getNameWithoutExtension(name); File toDir = new File(Pref.getScriptDirPath(), name); - Observable.fromCallable(() -> { - copyDir(new File(dir), toDir); - return toDir.getPath(); - }).subscribeOn(Schedulers.io()) + Observable + .fromCallable(() -> { + copyDir(new File(dir), toDir); + return toDir.getPath(); + }) + .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(dest -> - GlobalAppContext.toast(R.string.text_project_save_success, dest), - err -> - GlobalAppContext.toast(R.string.text_project_save_error, err.getMessage()) - ); + .subscribe(dest -> GlobalAppContext.toast(R.string.text_project_save_success, dest), + err -> GlobalAppContext.toast(R.string.text_project_save_error, err.getMessage()) + ); } + @SuppressWarnings("ResultOfMethodCallIgnored") private void copyDir(File fromDir, File toDir) throws FileNotFoundException { toDir.mkdirs(); File[] files = fromDir.listFiles(); diff --git a/app/src/main/java/org/autojs/autojs/pluginclient/DevPluginService.java b/app/src/main/java/org/autojs/autojs/pluginclient/DevPluginService.java index 1da3449b..c42694a7 100644 --- a/app/src/main/java/org/autojs/autojs/pluginclient/DevPluginService.java +++ b/app/src/main/java/org/autojs/autojs/pluginclient/DevPluginService.java @@ -1,34 +1,22 @@ package org.autojs.autojs.pluginclient; -import android.annotation.SuppressLint; -import android.os.Build; import android.os.Handler; import android.os.Looper; + import androidx.annotation.AnyThread; -import androidx.annotation.MainThread; -import androidx.annotation.WorkerThread; -import android.util.Log; -import android.util.Pair; +import androidx.annotation.Nullable; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; import com.stardust.app.GlobalAppContext; -import com.stardust.util.MapBuilder; -import org.autojs.autojs.BuildConfig; +import org.autojs.autojs.tool.ThreadTool; import java.io.File; -import java.net.SocketTimeoutException; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; +import java.io.IOException; +import java.net.ServerSocket; import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.schedulers.Schedulers; import io.reactivex.subjects.PublishSubject; -import okhttp3.OkHttpClient; -import okhttp3.Request; /** * Created by Stardust on 2017/5/11. @@ -36,11 +24,9 @@ import okhttp3.Request; public class DevPluginService { - private static final int CLIENT_VERSION = 2; - private static final String LOG_TAG = "DevPluginService"; - private static final String TYPE_HELLO = "hello"; - private static final String TYPE_BYTES_COMMAND = "bytes_command"; - private static final long HANDSHAKE_TIMEOUT = 10 * 1000; + public static DevPluginService getInstance() { + return sInstance; + } public static class State { @@ -69,234 +55,121 @@ public class DevPluginService { } } - private static final int PORT = 9317; - private static DevPluginService sInstance = new DevPluginService(); - private final PublishSubject mConnectionState = PublishSubject.create(); - private final DevPluginResponseHandler mResponseHandler; - private final HashMap mBytes = new HashMap<>(); - private final HashMap mRequiredBytesCommands = new HashMap<>(); - private final Handler mHandler = new Handler(Looper.getMainLooper()); - private volatile JsonWebSocket mSocket; - - public static DevPluginService getInstance() { - return sInstance; + @SuppressWarnings("unused") + public static class Port { + static int PC_CLIENT = 27139; + static int PC_SERVER = 6347; + static int AJ_CLIENT = -1; + static int AJ_SERVER = 9317; } + @SuppressWarnings("unused") + public static class Version { + static int CLIENT = 2; + static int SERVER = 3; + } + + public static final String TYPE_HELLO = "hello"; + public static final String TYPE_BYTES_COMMAND = "bytes_command"; + public static final int HANDSHAKE_TIMEOUT = JsonSocket.HANDSHAKE_TIMEOUT; + + private static final DevPluginService sInstance = new DevPluginService(); + + public final DevPluginResponseHandler mResponseHandler; + public final Handler mHandler = new Handler(Looper.getMainLooper()); + + private volatile JsonSocketClient mJsonSocketClient; + private volatile JsonSocketServer mJsonSocketServer; + private volatile ServerSocket mAJServerSocket; + public DevPluginService() { File cache = new File(GlobalAppContext.get().getCacheDir(), "remote_project"); mResponseHandler = new DevPluginResponseHandler(cache); } - @AnyThread - public boolean isConnected() { - return mSocket != null && !mSocket.isClosed(); + @Nullable + public JsonSocketClient getJsonSocketClient() { + return mJsonSocketClient; + } + + @Nullable + public JsonSocketServer getJsonSocketServer() { + return mJsonSocketServer; } @AnyThread - public boolean isDisconnected() { - return mSocket == null || mSocket.isClosed(); - } - - @AnyThread - public void disconnectIfNeeded() { - if (isDisconnected()) - return; - disconnect(); - } - - @AnyThread - public void disconnect() { - mSocket.close(); - mSocket = null; - } - - public Observable connectionState() { - return mConnectionState; - } - - @AnyThread - public Observable connectToServer(String host) { - int port = PORT; + public Observable connectToRemoteServer(String host) { + int port = Port.PC_SERVER; String ip = host; int i = host.lastIndexOf(':'); if (i > 0 && i < host.length() - 1) { port = Integer.parseInt(host.substring(i + 1)); ip = host.substring(0, i); } - mConnectionState.onNext(new State(State.CONNECTING)); - return socket(ip, port) - .observeOn(AndroidSchedulers.mainThread()) - .doOnError(this::onSocketError); - } - - @AnyThread - private Observable socket(String ip, int port) { - OkHttpClient client = new OkHttpClient.Builder() - .readTimeout(0, TimeUnit.MILLISECONDS) - .build(); - String url = ip + ":" + port; - if (!url.startsWith("ws://") && !url.startsWith("wss://")) { - url = "ws://" + url; - } - return Observable.just(new JsonWebSocket(client, new Request.Builder() - .url(url) - .build())) - .doOnNext(socket -> { - mSocket = socket; - subscribeMessage(socket); - sayHelloToServer(socket); + return Observable + .just(new JsonSocketClient(ip, port)) + .observeOn(Schedulers.newThread()) + .doOnNext(jsonSocketClient -> { + try { + mJsonSocketClient = jsonSocketClient; + if (ThreadTool.wait(jsonSocketClient::isSocketReady, HANDSHAKE_TIMEOUT)) { + jsonSocketClient + .subscribeMessage() + .monitorMessage() + .sayHello(); + } else { + jsonSocketClient.onHandshakeTimeout(); + } + } catch (IOException e) { + jsonSocketClient.onSocketError(e); + } }); } - @SuppressLint("CheckResult") - private void subscribeMessage(JsonWebSocket socket) { - socket.data() - .observeOn(AndroidSchedulers.mainThread()) - .doOnComplete(() -> mConnectionState.onNext(new State(State.DISCONNECTED))) - .subscribe(data -> onSocketData(socket, data), this::onSocketError); - socket.bytes() - .doOnComplete(() -> mConnectionState.onNext(new State(State.DISCONNECTED))) - .subscribe(data -> onSocketData(socket, data), this::onSocketError); - } - - @MainThread - private void onSocketError(Throwable e) { - e.printStackTrace(); - if (mSocket != null) { - mConnectionState.onNext(new State(State.DISCONNECTED, e)); - mSocket.close(); - mSocket = null; - } - } - - @MainThread - private void onSocketData(JsonWebSocket jsonWebSocket, JsonElement element) { - if (!element.isJsonObject()) { - Log.w(LOG_TAG, "onSocketData: not json object: " + element); - return; - } - try { - JsonObject obj = element.getAsJsonObject(); - JsonElement typeElement = obj.get("type"); - if (typeElement == null || !typeElement.isJsonPrimitive()) { - return; - } - String type = typeElement.getAsString(); - if (type.equals(TYPE_HELLO)) { - onServerHello(jsonWebSocket, obj); - return; - } - if (TYPE_BYTES_COMMAND.equals(type)) { - String md5 = obj.get("md5").getAsString(); - JsonWebSocket.Bytes bytes = mBytes.remove(md5); - if (bytes != null) { - handleBytes(obj, bytes); - } else { - mRequiredBytesCommands.put(md5, obj); - } - return; - } - mResponseHandler.handle(obj); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - @SuppressLint("CheckResult") - private void handleBytes(JsonObject obj, JsonWebSocket.Bytes bytes) { - mResponseHandler.handleBytes(obj, bytes) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(dir -> { - obj.get("data").getAsJsonObject().add("dir", new JsonPrimitive(dir.getPath())); - mResponseHandler.handle(obj); + @AnyThread + public Observable enableLocalServer() { + return Observable + .just(new JsonSocketServer(Port.AJ_SERVER)) + .observeOn(Schedulers.newThread()) + .doOnNext(jsonSocketServer -> { + try { + mJsonSocketServer = jsonSocketServer; + mAJServerSocket = jsonSocketServer.getServerSocket(); + if (mAJServerSocket != null) { + jsonSocketServer + .setStateConnected() + .setSocket(mAJServerSocket.accept()) + .subscribeMessage() + .monitorMessage() + .sayHello(); + } else { + jsonSocketServer.onHandshakeTimeout(); + } + } catch (IOException e) { + jsonSocketServer.onSocketError(e); + } }); - } - @WorkerThread - private void onSocketData(JsonWebSocket jsonWebSocket, JsonWebSocket.Bytes bytes) { - JsonObject command = mRequiredBytesCommands.remove(bytes.md5); - if (command != null) { - handleBytes(command, bytes); - } else { - mBytes.put(bytes.md5, bytes); + public static void setState(PublishSubject cxn, int state) { + cxn.onNext(new State(state)); + } + + public static void setState(PublishSubject cxn, int state, Throwable e) { + cxn.onNext(new State(state, e)); + } + + @AnyThread + // FIXME by SuperMonster003 on Dec 29, 2021 + // ! Would print double (may be even more times) the amount of + // ! messages on VSCode when multi connection were established. + public void print(String log) { + if (mJsonSocketClient != null) { + mJsonSocketClient.writeLog(log); + } + if (mJsonSocketServer != null) { + mJsonSocketServer.writeLog(log); } } - - @WorkerThread - private void sayHelloToServer(JsonWebSocket socket) { - writeMap(socket, TYPE_HELLO, new MapBuilder() - .put("device_name", Build.BRAND + " " + Build.MODEL) - .put("client_version", CLIENT_VERSION) - .put("app_version", BuildConfig.VERSION_NAME) - .put("app_version_code", BuildConfig.VERSION_CODE) - .build()); - mHandler.postDelayed(() -> { - if (mSocket != socket && !socket.isClosed()) { - onHandshakeTimeout(socket); - } - }, HANDSHAKE_TIMEOUT); - } - - @MainThread - private void onHandshakeTimeout(JsonWebSocket socket) { - Log.i(LOG_TAG, "onHandshakeTimeout"); - mConnectionState.onNext(new State(State.DISCONNECTED, new SocketTimeoutException("handshake timeout"))); - socket.close(); - } - - @MainThread - private void onServerHello(JsonWebSocket jsonWebSocket, JsonObject message) { - Log.i(LOG_TAG, "onServerHello: " + message); - mSocket = jsonWebSocket; - mConnectionState.onNext(new State(State.CONNECTED)); - } - - @AnyThread - private static boolean write(JsonWebSocket socket, String type, JsonObject data) { - JsonObject json = new JsonObject(); - json.addProperty("type", type); - json.add("data", data); - return socket.write(json); - } - - @AnyThread - private static boolean writePair(JsonWebSocket socket, String type, Pair pair) { - JsonObject data = new JsonObject(); - data.addProperty(pair.first, pair.second); - return write(socket, type, data); - } - - @AnyThread - private static boolean writeMap(JsonWebSocket socket, String type, Map map) { - JsonObject data = new JsonObject(); - for (Map.Entry entry : map.entrySet()) { - Object value = entry.getValue(); - if (value instanceof String) { - data.addProperty(entry.getKey(), (String) value); - } else if (value instanceof Character) { - data.addProperty(entry.getKey(), (Character) value); - } else if (value instanceof Number) { - data.addProperty(entry.getKey(), (Number) value); - } else if (value instanceof Boolean) { - data.addProperty(entry.getKey(), (Boolean) value); - } else if (value instanceof JsonElement) { - data.add(entry.getKey(), (JsonElement) value); - } else { - throw new IllegalArgumentException("cannot put value " + value + " into json"); - } - } - return write(socket, type, data); - } - - - @SuppressLint("CheckResult") - @AnyThread - public void log(String log) { - if (!isConnected()) - return; - writePair(mSocket, "log", new Pair<>("log", log)); - } -} +} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/pluginclient/JsonSocket.java b/app/src/main/java/org/autojs/autojs/pluginclient/JsonSocket.java new file mode 100644 index 00000000..286c3676 --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/pluginclient/JsonSocket.java @@ -0,0 +1,283 @@ +package org.autojs.autojs.pluginclient; + +import android.annotation.SuppressLint; +import android.os.Build; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; +import android.util.Pair; + +import androidx.annotation.AnyThread; +import androidx.annotation.NonNull; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonParser; +import com.google.gson.JsonPrimitive; +import com.google.gson.stream.JsonReader; +import com.stardust.app.GlobalAppContext; +import com.stardust.autojs.runtime.api.Device; +import com.stardust.util.MapBuilder; + +import org.autojs.autojs.BuildConfig; +import org.autojs.autojs.tool.IOTool; + +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.StringReader; +import java.net.Socket; +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.subjects.PublishSubject; +import okio.ByteString; + +abstract public class JsonSocket extends Socket { + + private final String TAG = "JsonSocket"; + + public static final int HEADER_SIZE = 8; + public static final int HANDSHAKE_TIMEOUT = 5 * 1000; + + public static final String TYPE_HELLO = DevPluginService.TYPE_HELLO; + public static final String TYPE_BYTES_COMMAND = DevPluginService.TYPE_BYTES_COMMAND; + + public static class Bytes { + public final String md5; + public final ByteString byteString; + public final long timestamp; + + public Bytes(String md5, ByteString byteString) { + this.md5 = md5; + this.byteString = byteString; + this.timestamp = System.currentTimeMillis(); + } + } + + @SuppressWarnings("unused") + public static class Type { + public static int TEXT = 1; + public static int BINARY = 2; + public static int GZIP_TEXT = 3; + public static int GZIP_BINARY = 4; + } + + public final android.os.Handler mHandler = new Handler(Looper.getMainLooper()); + public final DevPluginService devPlugin = DevPluginService.getInstance(); + + public abstract void switchOff() throws IOException; + + public abstract boolean isSocketReady(); + + public abstract Socket getSocket(); + + public abstract JsonSocket setSocket(Socket socket); + + public abstract JsonSocket monitorMessage(); + + public abstract JsonSocket subscribeMessage(); + + public abstract JsonSocket setStateConnected(); + + public abstract PublishSubject getJsonElementPublishSubject(); + + public abstract PublishSubject getBytesPublishSubject(); + + public void sayHello() { + writeMap(TYPE_HELLO, new MapBuilder() + .put("device_name", Build.BRAND + " " + Build.MODEL) + .put("app_version", BuildConfig.VERSION_NAME) + .put("app_version_code", BuildConfig.VERSION_CODE) + .put("server_version", DevPluginService.Version.SERVER) + .put("device_id", new Device(GlobalAppContext.get()).getAndroidId()) + .build()); + } + + public void onMessage(JsonSocket jsonSocket, String text) { + Log.d(TAG, "onMessage: text = " + text); + dispatchJson(jsonSocket, text); + } + + public void onMessage(JsonSocket jsonSocket, ByteString bytes) { + Log.d(TAG, "onMessage: ByteString = " + bytes.toString()); + jsonSocket.getBytesPublishSubject().onNext(new Bytes(bytes.md5().hex(), bytes)); + } + + private void onMessageDispatch(JsonSocket jsonSocket, String str) throws IOException { + Log.d(TAG, "Input total str: " + str); + Log.d(TAG, "Input total length: " + str.length()); + String header = str.substring(0, HEADER_SIZE); + Log.d(TAG, "Input data length: " + new Buffer(header.getBytes()).readInt32BE(0)); + Log.d(TAG, "Input data type: " + new Buffer(header.getBytes()).readInt32BE(4)); + String message = str.substring(HEADER_SIZE); + Log.d(TAG, "Input message length: " + message.length()); + Log.d(TAG, "Input message: " + message); + + // Log.d(TAG, "Input message gunzip: " + gunzip(str)); + + onMessage(jsonSocket, message); + } + + @SuppressWarnings("SameParameterValue") + private void writeMap(String type, Map map) { + JsonObject data = new JsonObject(); + for (Map.Entry entry : map.entrySet()) { + Object value = entry.getValue(); + if (value instanceof String) { + data.addProperty(entry.getKey(), (String) value); + } else if (value instanceof Character) { + data.addProperty(entry.getKey(), (Character) value); + } else if (value instanceof Number) { + data.addProperty(entry.getKey(), (Number) value); + } else if (value instanceof Boolean) { + data.addProperty(entry.getKey(), (Boolean) value); + } else if (value instanceof JsonElement) { + data.add(entry.getKey(), (JsonElement) value); + } else { + throw new IllegalArgumentException("cannot put value " + value + " into json"); + } + } + writeData(type, data); + } + + @SuppressWarnings("SameParameterValue") + @AnyThread + public void writePair(String type, Pair pair) { + JsonObject data = new JsonObject(); + data.addProperty(pair.first, pair.second); + writeData(type, data); + } + + public void writeLog(String log) { + if (isSocketReady()) { + writePair("log", new Pair<>("log", log)); + } + } + + private void writeData(String type, JsonObject data) { + JsonObject json = new JsonObject(); + + json.addProperty("type", type); + json.add("data", data); + + writeMessage(json); + } + + private void writeMessage(JsonElement element) { + String json = element.toString(); + Log.d(TAG, "writeMessage: length = " + json.length() + ", json = " + element); + try { + writeMessageWithType(getSocket(), json, Type.TEXT); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void writeMessageWithType(Socket socket, String message, int messageType) throws IOException { + if (socket != null) { + byte[] jsonBytes = getJsonBytes(message); + byte[] headerBytes = getHeaderBytes(new int[]{jsonBytes.length, messageType}); + + OutputStream os = socket.getOutputStream(); + BufferedOutputStream writer = new BufferedOutputStream(os); + + writer.write(headerBytes); + writer.write(jsonBytes); + writer.flush(); + } + } + + public void monitorMessage(Socket socket, JsonSocket jsonSocket) { + new Thread(() -> { + InputStream inputStream = null; + InputStreamReader inputStreamReader = null; + BufferedReader bufferedReader = null; + try { + inputStream = socket.getInputStream(); + inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); + bufferedReader = new BufferedReader(inputStreamReader); + final StringBuilder stringBuilder = new StringBuilder(); + String readLine; + Log.d(TAG, "bufferedReader is reading lines..."); + while ((readLine = bufferedReader.readLine()) != null && !socket.isClosed()) { + Log.d(TAG, "Reading line..."); + stringBuilder.append(readLine); + Log.d(TAG, "read line length: " + stringBuilder.toString().length()); + onMessageDispatch(jsonSocket, stringBuilder.toString()); + stringBuilder.setLength(0); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + IOTool.close(bufferedReader); + IOTool.close(inputStreamReader); + IOTool.close(inputStream); + try { + jsonSocket.switchOff(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }).start(); + } + + public void setState(PublishSubject cxn, int state) { + cxn.onNext(new DevPluginService.State(state)); + } + + public void setState(PublishSubject cxn, int state, Throwable e) { + cxn.onNext(new DevPluginService.State(state, e)); + } + + private void dispatchJson(@NonNull JsonSocket jsonSocket, String json) { + try { + Log.d(TAG, "JSON to parse: " + json); + JsonReader reader = new JsonReader(new StringReader(json)); + reader.setLenient(true); + JsonElement element = JsonParser.parseReader(reader); + jsonSocket.getJsonElementPublishSubject().onNext(element); + } catch (JsonParseException e) { + e.printStackTrace(); + } + } + + @SuppressWarnings("ResultOfMethodCallIgnored") + @SuppressLint("CheckResult") + public void handleBytes(JsonObject jsonObject, JsonSocket.Bytes bytes) { + devPlugin.mResponseHandler + .handleBytes(jsonObject, bytes) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(dir -> { + jsonObject + .get("data") + .getAsJsonObject() + .add("dir", new JsonPrimitive(dir.getPath())); + devPlugin.mResponseHandler.handle(jsonObject); + }); + + } + + private byte[] getJsonBytes(@NonNull String json) { + return json.getBytes(StandardCharsets.UTF_8); + } + + @NonNull + private byte[] getHeaderBytes(@NonNull int[] data) { + // byte order is big endian + // use Buffer#readInt32BE for a socket server in Node.js + ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES * data.length); + for (int i : data) { + // int, 4 bytes + buffer.putInt(i); + } + return buffer.array(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/pluginclient/JsonSocketClient.java b/app/src/main/java/org/autojs/autojs/pluginclient/JsonSocketClient.java new file mode 100644 index 00000000..29ad03eb --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/pluginclient/JsonSocketClient.java @@ -0,0 +1,205 @@ +package org.autojs.autojs.pluginclient; + +import android.annotation.SuppressLint; +import android.util.Log; + +import androidx.annotation.MainThread; +import androidx.annotation.WorkerThread; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import java.io.IOException; +import java.net.Socket; +import java.util.HashMap; + +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.subjects.PublishSubject; + +public class JsonSocketClient extends JsonSocket { + + private static final String TAG = JsonSocketClient.class.getSimpleName(); + + public static final PublishSubject cxnState = PublishSubject.create(); + + private final PublishSubject mJsonElementPublishSubject = PublishSubject.create(); + private final PublishSubject mBytesPublishSubject = PublishSubject.create(); + + private final HashMap mBytes = new HashMap<>(); + private final HashMap mRequiredBytesCommands = new HashMap<>(); + + private Socket mSocket; + + // @Constructor + public JsonSocketClient(String host, int port) { + new Thread(() -> { + try { + setStateConnecting(); + mSocket = new Socket(host, port); + } catch (IOException e) { + e.printStackTrace(); + } + }).start(); + } + + public boolean isSocketReady() { + return mSocket != null && mSocket.isConnected(); + } + + @Override + public Socket getSocket() { + return mSocket; + } + + @Override + public JsonSocket setSocket(Socket socket) { + mSocket = socket; + return this; + } + + @Override + public PublishSubject getJsonElementPublishSubject() { + return mJsonElementPublishSubject; + } + + @Override + public PublishSubject getBytesPublishSubject() { + return mBytesPublishSubject; + } + + @Override + public void switchOff() throws IOException { + close(); + setStateDisconnected(); + } + + public void close() throws IOException { + Log.w(TAG, "closing socket..."); + mJsonElementPublishSubject.onComplete(); + if (mSocket != null) { + mSocket.close(); + mSocket = null; + } + } + + @Override + public void sayHello() { + super.sayHello(); + mHandler.postDelayed(() -> { + if (!isSocketReady()) { + try { + onHandshakeTimeout(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }, HANDSHAKE_TIMEOUT); + } + + private void onHello(JsonObject message) { + Log.i(TAG, "onHello: " + message); + setStateConnected(); + } + + @MainThread + private void onSocketData(JsonElement element) { + Log.d(TAG, "onSocketData..."); + + try { + if (!element.isJsonObject()) { + onSocketError(new Error("Not a JSON object")); + return; + } + JsonObject obj = element.getAsJsonObject(); + JsonElement typeElement = obj.get("type"); + if (typeElement == null || !typeElement.isJsonPrimitive()) { + return; + } + String type = typeElement.getAsString(); + Log.d(TAG, "json type: " + type); + switch (type) { + case TYPE_HELLO -> onHello(obj); + case TYPE_BYTES_COMMAND -> { + String md5 = obj.get("md5").getAsString(); + JsonSocket.Bytes bytes = mBytes.remove(md5); + if (bytes != null) { + handleBytes(obj, bytes); + } else { + mRequiredBytesCommands.put(md5, obj); + } + } + default -> devPlugin.mResponseHandler.handle(obj); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @WorkerThread + private void onSocketData(JsonSocket.Bytes bytes) { + Log.d(TAG, "onSocketData bytes"); + JsonObject command = mRequiredBytesCommands.remove(bytes.md5); + if (command != null) { + handleBytes(command, bytes); + } else { + mBytes.put(bytes.md5, bytes); + } + } + + @MainThread + public void onSocketError(Throwable e) throws IOException { + Log.w(TAG, "onSocketError"); + e.printStackTrace(); + setStateDisconnected(e); + close(); + } + + @MainThread + public void onHandshakeTimeout() throws IOException { + Log.i(TAG, "onHandshakeTimeout"); + // setStateDisconnected(new SocketTimeoutException("handshake timeout")); + setStateDisconnected(); + close(); + } + + @SuppressWarnings("ResultOfMethodCallIgnored") + @SuppressLint("CheckResult") + @Override + public JsonSocket subscribeMessage() { + mJsonElementPublishSubject + .observeOn(AndroidSchedulers.mainThread()) + .doOnComplete(this::setStateDisconnected) + .subscribe(this::onSocketData, this::onSocketError); + mBytesPublishSubject + .doOnComplete(this::setStateDisconnected) + .subscribe(this::onSocketData, this::onSocketError); + + return this; + } + + public JsonSocket monitorMessage() { + super.monitorMessage(mSocket, this); + return this; + } + + public JsonSocket setStateConnected() { + setState(cxnState, DevPluginService.State.CONNECTED); + return this; + } + + public JsonSocket setStateConnecting() { + setState(cxnState, DevPluginService.State.CONNECTING); + return this; + } + + public JsonSocket setStateDisconnected() { + setState(cxnState, DevPluginService.State.DISCONNECTED); + return this; + } + + public JsonSocket setStateDisconnected(Throwable e) { + setState(cxnState, DevPluginService.State.DISCONNECTED, e); + return this; + } + +} diff --git a/app/src/main/java/org/autojs/autojs/pluginclient/JsonSocketServer.java b/app/src/main/java/org/autojs/autojs/pluginclient/JsonSocketServer.java new file mode 100644 index 00000000..25bdba73 --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/pluginclient/JsonSocketServer.java @@ -0,0 +1,212 @@ +package org.autojs.autojs.pluginclient; + +import android.annotation.SuppressLint; +import android.util.Log; + +import androidx.annotation.MainThread; +import androidx.annotation.WorkerThread; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.HashMap; + +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.subjects.PublishSubject; + +public class JsonSocketServer extends JsonSocket { + + private static final String TAG = JsonSocketServer.class.getSimpleName(); + + public static final PublishSubject cxnState = PublishSubject.create(); + + private final PublishSubject mJsonElementPublishSubject = PublishSubject.create(); + private final PublishSubject mBytesPublishSubject = PublishSubject.create(); + + private final HashMap mBytes = new HashMap<>(); + private final HashMap mRequiredBytesCommands = new HashMap<>(); + + private Socket mSocket; + private ServerSocket mServerSocket; + + // @Constructor + public JsonSocketServer(int port) { + try { + setStateConnecting(); + mServerSocket = new ServerSocket(port); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @SuppressWarnings("ResultOfMethodCallIgnored") + @SuppressLint("CheckResult") + @Override + public JsonSocket subscribeMessage() { + mJsonElementPublishSubject + .observeOn(AndroidSchedulers.mainThread()) + .doOnComplete(this::setStateDisconnected) + .subscribe(this::onSocketData, this::onSocketError); + mBytesPublishSubject + .doOnComplete(this::setStateDisconnected) + .subscribe(this::onSocketData, this::onSocketError); + + return this; + } + + public boolean isSocketReady() { + return mSocket != null && !mSocket.isClosed(); + } + + public boolean isServerSocketReady() { + return mServerSocket != null && !mServerSocket.isClosed(); + } + + @Override + public Socket getSocket() { + return mSocket; + } + + public ServerSocket getServerSocket() { + return mServerSocket; + } + + @Override + public JsonSocket setSocket(Socket socket) { + mSocket = socket; + return this; + } + + @Override + public PublishSubject getJsonElementPublishSubject() { + return mJsonElementPublishSubject; + } + + @Override + public PublishSubject getBytesPublishSubject() { + return mBytesPublishSubject; + } + + @Override + public void switchOff() throws IOException { + if (isServerSocketReady()) { + mServerSocket.close(); + mServerSocket = null; + } + close(); + setStateDisconnected(); + } + + public void close() throws IOException { + if (isSocketReady()) { + mSocket.close(); + mSocket = null; + } + } + + @Override + public void sayHello() { + super.sayHello(); + mHandler.postDelayed(() -> { + if (!isServerSocketReady()) { + try { + onHandshakeTimeout(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }, HANDSHAKE_TIMEOUT); + } + + public JsonSocket monitorMessage() { + super.monitorMessage(mSocket, this); + return this; + } + + @MainThread + private void onSocketData(JsonElement element) { + Log.d(TAG, "onSocketData..."); + + try { + if (!element.isJsonObject()) { + onSocketError(new Error("Not a JSON object")); + return; + } + JsonObject obj = element.getAsJsonObject(); + JsonElement typeElement = obj.get("type"); + if (typeElement == null || !typeElement.isJsonPrimitive()) { + return; + } + String type = typeElement.getAsString(); + Log.d(TAG, "json type: " + type); + switch (type) { + case TYPE_HELLO -> setStateConnected(); + case TYPE_BYTES_COMMAND -> { + String md5 = obj.get("md5").getAsString(); + Bytes bytes = mBytes.remove(md5); + if (bytes != null) { + handleBytes(obj, bytes); + } else { + mRequiredBytesCommands.put(md5, obj); + } + } + default -> devPlugin.mResponseHandler.handle(obj); + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + @WorkerThread + private void onSocketData(Bytes bytes) { + Log.d(TAG, "onSocketData bytes"); + JsonObject command = mRequiredBytesCommands.remove(bytes.md5); + if (command != null) { + handleBytes(command, bytes); + } else { + mBytes.put(bytes.md5, bytes); + } + } + + @MainThread + public void onSocketError(Throwable e) throws IOException { + e.printStackTrace(); + if (isServerSocketReady()) { + setStateDisconnected(e); + switchOff(); + } + } + + @MainThread + public void onHandshakeTimeout() throws IOException { + Log.i(TAG, "onHandshakeTimeout"); + // setStateDisconnected(new SocketTimeoutException("handshake timeout")); + setStateDisconnected(); + switchOff(); + } + + public JsonSocket setStateConnected() { + setState(cxnState, DevPluginService.State.CONNECTED); + return this; + } + + public JsonSocket setStateConnecting() { + setState(cxnState, DevPluginService.State.CONNECTING); + return this; + } + + public JsonSocket setStateDisconnected() { + setState(cxnState, DevPluginService.State.DISCONNECTED); + return this; + } + + public JsonSocket setStateDisconnected(Throwable e) { + setState(cxnState, DevPluginService.State.DISCONNECTED, e); + return this; + } + +} diff --git a/app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java b/app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java deleted file mode 100644 index 111074c8..00000000 --- a/app/src/main/java/org/autojs/autojs/pluginclient/JsonWebSocket.java +++ /dev/null @@ -1,125 +0,0 @@ -package org.autojs.autojs.pluginclient; - - -import android.util.Log; - -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonParser; -import com.google.gson.stream.JsonReader; - -import java.io.StringReader; - -import androidx.annotation.Nullable; - -import io.reactivex.Observable; -import io.reactivex.subjects.PublishSubject; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.WebSocket; -import okhttp3.WebSocketListener; -import okio.ByteString; - -public class JsonWebSocket extends WebSocketListener { - - public static class Bytes { - public final String md5; - public final ByteString byteString; - public final long timestamp; - - public Bytes(String md5, ByteString byteString) { - this.md5 = md5; - this.byteString = byteString; - this.timestamp = System.currentTimeMillis(); - } - } - - private static final String LOG_TAG = "JsonWebSocket"; - - private final WebSocket mWebSocket; - private final JsonParser mJsonParser = new JsonParser(); - private final PublishSubject mJsonElementPublishSubject = PublishSubject.create(); - private final PublishSubject mBytesPublishSubject = PublishSubject.create(); - private volatile boolean mClosed = false; - - public JsonWebSocket(OkHttpClient client, Request request) { - mWebSocket = client.newWebSocket(request, this); - } - - @Override - public void onMessage(WebSocket webSocket, String text) { - Log.d(LOG_TAG, "onMessage: text = " + text); - dispatchJson(text); - } - - @Override - public void onMessage(WebSocket webSocket, ByteString bytes) { - Log.d(LOG_TAG, "onMessage: ByteString = " + bytes.toString()); - mBytesPublishSubject.onNext(new Bytes(bytes.md5().hex(), bytes)); - } - - public Observable data() { - return mJsonElementPublishSubject; - } - - public Observable bytes(){ - return mBytesPublishSubject; - } - - public boolean write(JsonElement element) { - String json = element.toString(); - Log.d(LOG_TAG, "write: length = " + json.length() + ", json = " + element); - return mWebSocket.send(json); - } - - public void close() { - mJsonElementPublishSubject.onComplete(); - mClosed = true; - mWebSocket.close(1000, "close"); - } - - @Override - public void onClosed(WebSocket webSocket, int code, String reason) { - Log.d(LOG_TAG, "onFailure: code = " + code + ", reason = " + reason); - close(); - } - - @Override - public void onFailure(WebSocket webSocket, Throwable t, @Nullable Response response) { - Log.d(LOG_TAG, "onFailure: response = " + response, t); - close(t); - } - - @Override - public void onOpen(WebSocket webSocket, Response response) { - Log.d(LOG_TAG, "onOpen: response = " + response); - } - - - private void close(Throwable e) { - if (mClosed) { - return; - } - mJsonElementPublishSubject.onError(e); - mClosed = true; - mWebSocket.close(1011, "remote exception: " + e.getMessage()); - } - - private void dispatchJson(String json) { - try { - JsonReader reader = new JsonReader(new StringReader(json)); - reader.setLenient(true); - JsonElement element = mJsonParser.parse(reader); - mJsonElementPublishSubject.onNext(element); - } catch (JsonParseException e) { - e.printStackTrace(); - } - - } - - public boolean isClosed() { - return mClosed; - } - -} diff --git a/app/src/main/java/org/autojs/autojs/tool/IOTool.java b/app/src/main/java/org/autojs/autojs/tool/IOTool.java new file mode 100644 index 00000000..e59cb786 --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/tool/IOTool.java @@ -0,0 +1,81 @@ +package org.autojs.autojs.tool; + +import android.util.Log; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + +public class IOTool { + private static final String TAG = IOTool.class.getSimpleName(); + + public static void close(Closeable io) { + try { + if (io != null) { + io.close(); + } + } catch (IOException e) { + Log.w(TAG, "ex: " + e); + } + } + + public static void close(Closeable io, boolean exceptionMatters) throws IOException { + try { + if (io != null) { + io.close(); + } + } catch (IOException e) { + if (exceptionMatters) { + throw e; + } + } + } + + public static byte[] gzip(String str) { + ByteArrayOutputStream out = null; + GZIPOutputStream gzip = null; + try { + out = new ByteArrayOutputStream(); + gzip = new GZIPOutputStream(out); + + gzip.write(str.getBytes(StandardCharsets.UTF_8)); + gzip.finish(); + + return out.toByteArray(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + close(out); + close(gzip); + } + return null; + } + + public static String gunzip(byte[] bytes) { + ByteArrayOutputStream out = null; + GZIPInputStream gzip = null; + try { + out = new ByteArrayOutputStream(); + gzip = new GZIPInputStream(new ByteArrayInputStream(bytes)); + + int res; + byte[] buf = new byte[1024]; + while ((res = gzip.read(buf)) != -1) { + out.write(buf, 0, res); + } + out.flush(); + + return out.toString(String.valueOf(StandardCharsets.UTF_8)); + } catch (Exception e) { + e.printStackTrace(); + } finally { + close(out); + close(gzip); + } + return ""; + } +} diff --git a/app/src/main/java/org/autojs/autojs/tool/ThreadTool.java b/app/src/main/java/org/autojs/autojs/tool/ThreadTool.java new file mode 100644 index 00000000..6f97d2c2 --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/tool/ThreadTool.java @@ -0,0 +1,32 @@ +package org.autojs.autojs.tool; + +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Supplier; + +public class ThreadTool { + + public static boolean wait(Supplier condition, int timeout) throws InterruptedException { + AtomicBoolean result = new AtomicBoolean(false); + Thread thread = new Thread(() -> { + while (!condition.get()) { + try { + //noinspection BusyWait + Thread.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + result.set(true); + }); + thread.start(); + thread.join(timeout); + if (thread.isAlive()) { + thread.interrupt(); + } + return result.get(); + } + + public static boolean wait(Supplier condition) throws InterruptedException { + return wait(condition, 10 * 1000); + } +} diff --git a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java b/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java index a2a96a50..70d9a30b 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityWebView.java @@ -5,6 +5,7 @@ import android.content.Context; import android.net.Uri; import com.google.android.material.bottomsheet.BottomSheetDialog; +import com.google.android.material.snackbar.BaseTransientBottomBar; import com.google.android.material.snackbar.Snackbar; import android.util.AttributeSet; import android.webkit.ValueCallback; @@ -96,7 +97,7 @@ public class CommunityWebView extends EWebView { Scripts.INSTANCE.run(file); }, error -> { error.printStackTrace(); - Snackbar.make(CommunityWebView.this, R.string.text_download_failed, Toast.LENGTH_SHORT).show(); + Snackbar.make(CommunityWebView.this, R.string.text_download_failed, BaseTransientBottomBar.LENGTH_SHORT).show(); }); } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java index c9af70ea..f3fd626a 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java @@ -37,6 +37,8 @@ import org.autojs.autojs.Pref; import org.autojs.autojs.R; import org.autojs.autojs.external.foreground.ForegroundService; import org.autojs.autojs.pluginclient.DevPluginService; +import org.autojs.autojs.pluginclient.JsonSocketClient; +import org.autojs.autojs.pluginclient.JsonSocketServer; import org.autojs.autojs.tool.AccessibilityServiceTool; import org.autojs.autojs.tool.Observers; import org.autojs.autojs.tool.RootTool; @@ -49,6 +51,7 @@ import org.autojs.autojs.ui.settings.SettingsActivity; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Objects; @@ -58,10 +61,9 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; - /** * Created by Stardust on Jan 30, 2017. - * Modified by SuperMonster003 on Nov 16, 2021. + * Modified by SuperMonster003 as of Nov 16, 2021. */ @SuppressLint("NonConstantResourceId") @SuppressWarnings("ResultOfMethodCallIgnored") @@ -79,6 +81,11 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { private final DrawerMenuItem mAccessibilityServiceItem = new DrawerMenuItem(R.drawable.ic_accessibility_black_48dp, R.string.text_accessibility_service, 0, this::enableOrDisableAccessibilityService); private final DrawerMenuItem mForegroundServiceItem = new DrawerMenuItem(R.drawable.ic_service_green, R.string.text_foreground_service, R.string.key_foreground_service, this::toggleForegroundService); + private final DrawerMenuItem mFloatingWindowItem = new DrawerMenuItem(R.drawable.ic_robot_64, R.string.text_floating_window, 0, this::showOrDismissFloatingWindow); + + private final DrawerMenuItem mClientModeItem = new DrawerMenuItem(R.drawable.ic_computer_black_48dp, R.string.text_client_mode, 0, this::toggleRemoteServerCxn); + private final DrawerMenuItem mServerModeItem = new DrawerMenuItem(R.drawable.ic_smartphone_black_48dp, R.string.text_server_mode, 0, this::toggleLocalServerCxn); + private final DrawerMenuItem mNotificationPermissionItem = new DrawerMenuItem(R.drawable.ic_ali_notification, R.string.text_notification_permission, 0, this::goToNotificationServiceSettings); private final DrawerMenuItem mUsageStatsPermissionItem = new DrawerMenuItem(R.drawable.ic_assessment_black_48dp, R.string.text_usage_stats_permission, 0, this::goToUsageStatsSettings); private final DrawerMenuItem mIgnoreBatteryOptimizationsItem = new DrawerMenuItem(R.drawable.ic_battery_std_black_48dp, R.string.text_ignore_battery_optimizations, 0, this::toggleIgnoreBatteryOptimizations); @@ -86,36 +93,55 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { private final DrawerMenuItem mWriteSystemSettingsItem = new DrawerMenuItem(R.drawable.ic_settings_black_48dp, R.string.text_write_system_settings, 0, this::goToWriteSystemSettings); private final DrawerMenuItem mWriteSecuritySettingsItem = new DrawerMenuItem(R.drawable.ic_security_black_48dp, R.string.text_write_secure_settings, 0, this::toggleWriteSecureSettings); - private final DrawerMenuItem mFloatingWindowItem = new DrawerMenuItem(R.drawable.ic_robot_64, R.string.text_floating_window, 0, this::showOrDismissFloatingWindow); - private final DrawerMenuItem mConnectionItem = new DrawerMenuItem(R.drawable.ic_computer_black_48dp, R.string.debug, 0, this::connectOrDisconnectToRemote); + private final DevPluginService devPlugin = DevPluginService.getInstance(); private DrawerMenuAdapter mDrawerMenuAdapter; - private Disposable mConnectionStateDisposable; + private Disposable mClientConnectionStateDisposable; + private Disposable mServerConnectionStateDisposable; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mConnectionStateDisposable = DevPluginService.getInstance().connectionState() + + mClientConnectionStateDisposable = JsonSocketClient.cxnState .observeOn(AndroidSchedulers.mainThread()) - .subscribe(state -> { - setChecked(mConnectionItem, state.getState() == DevPluginService.State.CONNECTED); - setProgress(mConnectionItem, state.getState() == DevPluginService.State.CONNECTING); - if (state.getException() != null) { - showMessage(state.getException().getMessage()); - } - }); + .subscribe(state -> setItemState(mClientModeItem, state)); + + mServerConnectionStateDisposable = JsonSocketServer.cxnState + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(state -> setItemState(mServerModeItem, state)); + EventBus.getDefault().register(this); } + @Override + public void onResume() { + super.onResume(); + syncSwitchState(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mClientConnectionStateDisposable.dispose(); + mServerConnectionStateDisposable.dispose(); + EventBus.getDefault().unregister(this); + } + @AfterViews - void setUpViews() { + public void setUpViews() { ThemeColorManager.addViewBackground(mHeaderView); initMenuItems(); if (Pref.isFloatingMenuShown()) { FloatyWindowManger.showCircularMenuIfNeeded(); setChecked(mFloatingWindowItem, true); } - setChecked(mConnectionItem, DevPluginService.getInstance().isConnected()); + + JsonSocketClient jsonSocketClient = devPlugin.getJsonSocketClient(); + if (jsonSocketClient != null) { + setChecked(mClientModeItem, jsonSocketClient.isConnected()); + } + if (Pref.isForegroundServiceEnabled()) { ForegroundService.start(GlobalAppContext.get()); setChecked(mForegroundServiceItem, true); @@ -128,6 +154,13 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { mAccessibilityServiceItem, mForegroundServiceItem, + new DrawerMenuGroup(R.string.text_tools), + mFloatingWindowItem, + + new DrawerMenuGroup(R.string.text_connect_to_pc), + mClientModeItem, + mServerModeItem, + new DrawerMenuGroup(R.string.text_permission), mNotificationPermissionItem, mUsageStatsPermissionItem, @@ -136,10 +169,6 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { mWriteSystemSettingsItem, mWriteSecuritySettingsItem, - new DrawerMenuGroup(R.string.text_tools), - mFloatingWindowItem, - mConnectionItem, - new DrawerMenuGroup(R.string.text_appearance), new DrawerMenuItem(R.drawable.ic_night_mode, R.string.text_night_mode, R.string.key_night_mode, this::toggleNightMode), new DrawerMenuItem(R.drawable.ic_personalize, R.string.text_theme_color, this::openThemeColorSettings) @@ -148,8 +177,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { mDrawerMenu.setLayoutManager(new LinearLayoutManager(getContext())); } - - void enableOrDisableAccessibilityService(DrawerMenuItemViewHolder holder) { + public void enableOrDisableAccessibilityService(DrawerMenuItemViewHolder holder) { boolean isAccessibilityServiceEnabled = isAccessibilityServiceEnabled(); boolean checked = holder.getSwitchCompat().isChecked(); if (checked && !isAccessibilityServiceEnabled) { @@ -159,7 +187,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { } } - void goToNotificationServiceSettings(DrawerMenuItemViewHolder holder) { + public void goToNotificationServiceSettings(DrawerMenuItemViewHolder holder) { boolean enabled = NotificationListenerService.Companion.getInstance() != null; boolean checked = holder.getSwitchCompat().isChecked(); if ((checked && !enabled) || (!checked && enabled)) { @@ -167,7 +195,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { } } - void goToUsageStatsSettings(DrawerMenuItemViewHolder holder) { + public void goToUsageStatsSettings(DrawerMenuItemViewHolder holder) { Context context = getContext(); boolean enabled = false; if (context != null) { @@ -196,7 +224,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { .show(); } - void showOrDismissFloatingWindow(DrawerMenuItemViewHolder holder) { + public void showOrDismissFloatingWindow(DrawerMenuItemViewHolder holder) { boolean isFloatingWindowShowing = FloatyWindowManger.isCircularMenuShowing(); boolean checked = holder.getSwitchCompat().isChecked(); if (getActivity() != null && !getActivity().isFinishing()) { @@ -211,7 +239,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { } @SuppressLint("BatteryLife") - void toggleIgnoreBatteryOptimizations(DrawerMenuItemViewHolder holder) { + public void toggleIgnoreBatteryOptimizations(DrawerMenuItemViewHolder holder) { Context context = getContext(); try { Intent intent = new Intent(); @@ -235,15 +263,15 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { } } - void openThemeColorSettings(DrawerMenuItemViewHolder holder) { + public void openThemeColorSettings(DrawerMenuItemViewHolder holder) { SettingsActivity.selectThemeColor(getActivity()); } - void toggleNightMode(DrawerMenuItemViewHolder holder) { + public void toggleNightMode(DrawerMenuItemViewHolder holder) { ((BaseActivity) requireActivity()).setNightModeEnabled(holder.getSwitchCompat().isChecked()); } - void goToDisplayOverOtherAppsSettings(DrawerMenuItemViewHolder holder) { + public void goToDisplayOverOtherAppsSettings(DrawerMenuItemViewHolder holder) { boolean checked = holder.getSwitchCompat().isChecked(); Context context = getContext(); if (checked != FloatingPermission.canDrawOverlays(context)) { @@ -251,7 +279,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { } } - void goToWriteSystemSettings(DrawerMenuItemViewHolder holder) { + public void goToWriteSystemSettings(DrawerMenuItemViewHolder holder) { boolean checked = holder.getSwitchCompat().isChecked(); if (checked != Settings.System.canWrite(getContext())) { Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS) @@ -331,7 +359,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { if (context == null) { return; } - final int SNACKBAR_DURATION = 1000; + final int SNACK_BAR_DURATION = 1000; String scriptAction = state ? "grant" : "revoke"; String script = "adb shell pm " + scriptAction + " " + context.getPackageName() + " " + WRITE_SECURE_SETTINGS_PERMISSION; @@ -343,7 +371,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { View view = dialog.getView(); int resultRes = hasWriteSecureSettingsAccess() ? R.string.text_granted : R.string.text_not_granted; if (view != null) { - Snackbar.make(view, resultRes, SNACKBAR_DURATION).show(); + Snackbar.make(view, resultRes, SNACK_BAR_DURATION).show(); } else { Toast.makeText(context, resultRes, Toast.LENGTH_SHORT).show(); } @@ -356,7 +384,7 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { View view = dialog.getView(); int textRes = R.string.text_command_already_copied_to_clip; if (view != null) { - Snackbar.make(view, textRes, SNACKBAR_DURATION).show(); + Snackbar.make(view, textRes, SNACK_BAR_DURATION).show(); } else { Toast.makeText(context, textRes, Toast.LENGTH_SHORT).show(); } @@ -380,16 +408,36 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { } - void connectOrDisconnectToRemote(DrawerMenuItemViewHolder holder) { + private void toggleRemoteServerCxn(DrawerMenuItemViewHolder holder) throws IOException { + JsonSocketClient jsonSocketClient = devPlugin.getJsonSocketClient(); + boolean disconnected = jsonSocketClient == null || !jsonSocketClient.isSocketReady(); boolean checked = holder.getSwitchCompat().isChecked(); - boolean connected = DevPluginService.getInstance().isConnected(); - if (checked && !connected) { - inputRemoteHost(); - } else if (!checked && connected) { - DevPluginService.getInstance().disconnectIfNeeded(); + + if (checked) { + if (disconnected) { + inputRemoteHost(); + } + } else { + if (jsonSocketClient != null) { + jsonSocketClient.switchOff(); + } } } + @SuppressLint("CheckResult") + private void toggleLocalServerCxn(DrawerMenuItemViewHolder holder) throws IOException { + JsonSocketServer jsonSocketServer = devPlugin.getJsonSocketServer(); + boolean checked = holder.getSwitchCompat().isChecked(); + + if (checked) { + devPlugin.enableLocalServer() + .subscribe(Observers.emptyConsumer(), this::onAJServerConnectException); + } else { + if (jsonSocketServer != null) { + jsonSocketServer.switchOff(); + } + } + } private void toggleForegroundService(DrawerMenuItemViewHolder holder) { boolean checked = holder.getSwitchCompat().isChecked(); @@ -400,37 +448,46 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { } } - @SuppressLint("CheckResult") private void inputRemoteHost() { Context activity = getActivity(); String host = Pref.getServerAddressOrDefault(WifiTool.getRouterIp(Objects.requireNonNull(activity))); new MaterialDialog.Builder(activity) - .title(R.string.text_server_address) - .input("", host, (dialog, input) -> { + .title(R.string.text_pc_server_address) + .input(getInputHint(), host, (dialog, input) -> { Pref.saveServerAddress(input.toString()); - DevPluginService.getInstance().connectToServer(input.toString()) - .subscribe(Observers.emptyConsumer(), this::onConnectException); + devPlugin.connectToRemoteServer(input.toString()) + .subscribe(Observers.emptyConsumer(), this::onPCServerConnectException); }) .neutralText(R.string.text_help) .onNeutral((dialog, which) -> { - setChecked(mConnectionItem, false); + setChecked(mClientModeItem, false); IntentUtil.browse(activity, URL_DEV_PLUGIN); }) - .cancelListener(dialog -> setChecked(mConnectionItem, false)) + .cancelListener(dialog -> setChecked(mClientModeItem, false)) .show(); } - private void onConnectException(Throwable e) { - setChecked(mConnectionItem, false); - Toast.makeText(GlobalAppContext.get(), getString(R.string.error_connect_to_remote, e.getMessage()), + private String getInputHint() { + Context context = getContext(); + if (context != null) { + return context.getString(R.string.text_pc_server_address); + } + return "Input a server address"; + } + + private void onPCServerConnectException(Throwable e) { + setChecked(mClientModeItem, false); + Toast.makeText(getContext(), + getString(R.string.error_connect_to_remote, e.getMessage()), Toast.LENGTH_LONG).show(); } - @Override - public void onResume() { - super.onResume(); - syncSwitchState(); + private void onAJServerConnectException(Throwable e) { + setChecked(mServerModeItem, false); + Toast.makeText(getContext(), + getString(R.string.error_enable_server, e.getMessage()), + Toast.LENGTH_LONG).show(); } private void syncSwitchState() { @@ -456,6 +513,10 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { setChecked(mWriteSecuritySettingsItem, hasWriteSecureSettingsAccess()); } + private boolean isAccessibilityServiceEnabled() { + return AccessibilityServiceTool.isAccessibilityServiceEnabled(getActivity()); + } + private void enableAccessibilityService() { if (Pref.shouldEnableAccessibilityServiceByRoot() && RootTool.isRootAvailable()) { enableAccessibilityServiceByRoot(); @@ -485,27 +546,18 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { }); } - + @SuppressWarnings("unused") @Subscribe public void onCircularMenuStateChange(CircularMenu.StateChangeEvent event) { setChecked(mFloatingWindowItem, event.getCurrentState() != CircularMenu.STATE_CLOSED); } - @Override - public void onDestroy() { - super.onDestroy(); - mConnectionStateDisposable.dispose(); - EventBus.getDefault().unregister(this); - } - - private void showMessage(CharSequence text) { if (getContext() == null) return; Toast.makeText(getContext(), text, Toast.LENGTH_SHORT).show(); } - private void setProgress(DrawerMenuItem item, boolean progress) { item.setProgress(progress); mDrawerMenuAdapter.notifyItemChanged(item); @@ -516,7 +568,11 @@ public class DrawerFragment extends androidx.fragment.app.Fragment { mDrawerMenuAdapter.notifyItemChanged(item); } - private boolean isAccessibilityServiceEnabled() { - return AccessibilityServiceTool.isAccessibilityServiceEnabled(getActivity()); + private void setItemState(DrawerMenuItem item, DevPluginService.State state) { + setChecked(item, state.getState() == DevPluginService.State.CONNECTED); + setProgress(item, state.getState() == DevPluginService.State.CONNECTING); + if (state.getException() != null) { + showMessage(state.getException().getMessage()); + } } } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItem.java b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItem.java index 4b91932b..da378e48 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItem.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItem.java @@ -1,5 +1,7 @@ package org.autojs.autojs.ui.main.drawer; +import java.io.IOException; + /** * Created by Stardust on 2017/8/25. */ @@ -7,17 +9,17 @@ public class DrawerMenuItem { public interface Action { - void onClick(DrawerMenuItemViewHolder holder); + void onClick(DrawerMenuItemViewHolder holder) throws IOException; } - private int mIcon; - private int mTitle; + private final int mIcon; + private final int mTitle; + private final Action mAction; private boolean mAntiShake; - private boolean mSwitchEnabled; - private int mPrefKey; - private Action mAction; - private boolean mSwitchChecked; private boolean mOnProgress; + private boolean mSwitchEnabled; + private boolean mSwitchChecked; + private int mPrefKey; private int mNotificationCount; public DrawerMenuItem(int icon, int title, Action action) { @@ -81,7 +83,7 @@ public class DrawerMenuItem { return mPrefKey; } - public void performAction(DrawerMenuItemViewHolder holder) { + public void performAction(DrawerMenuItemViewHolder holder) throws IOException { if (mAction != null) mAction.onClick(holder); } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItemViewHolder.java b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItemViewHolder.java index eae6c1d8..1dfbb473 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItemViewHolder.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerMenuItemViewHolder.java @@ -1,24 +1,23 @@ package org.autojs.autojs.ui.main.drawer; -import android.content.pm.PackageManager; +import static android.view.View.GONE; +import static android.view.View.VISIBLE; + import android.view.View; -import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; import org.autojs.autojs.R; import org.autojs.autojs.ui.widget.BindableViewHolder; import org.autojs.autojs.ui.widget.PrefSwitch; import org.autojs.autojs.ui.widget.SwitchCompat; +import java.io.IOException; + import butterknife.BindView; import butterknife.ButterKnife; import me.zhanghai.android.materialprogressbar.MaterialProgressBar; -import static android.view.View.GONE; -import static android.view.View.VISIBLE; - /** * Created by Stardust on 2017/12/10. */ @@ -48,12 +47,22 @@ public class DrawerMenuItemViewHolder extends BindableViewHolder public DrawerMenuItemViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); - mSwitchCompat.setOnCheckedChangeListener((buttonView, isChecked) -> onClick()); + mSwitchCompat.setOnCheckedChangeListener((buttonView, isChecked) -> { + try { + onClick(); + } catch (IOException e) { + e.printStackTrace(); + } + }); itemView.setOnClickListener(v -> { if (mSwitchCompat.getVisibility() == VISIBLE) { mSwitchCompat.toggle(); } else { - onClick(); + try { + onClick(); + } catch (IOException e) { + e.printStackTrace(); + } } }); } @@ -93,7 +102,7 @@ public class DrawerMenuItemViewHolder extends BindableViewHolder } } - private void onClick() { + private void onClick() throws IOException { mDrawerMenuItem.setChecked(mSwitchCompat.isChecked()); if (mAntiShake && (System.currentTimeMillis() - mLastClickMillis < CLICK_TIMEOUT)) { // Toast.makeText(itemView.getContext(), R.string.text_click_too_frequently, Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 7173dec9..200887c0 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -51,7 +51,7 @@ Floating Window Bug Report Press again to exit - %d script(s) is(are) stopped + %d script(s) stopped Running Open by other apps Rename @@ -170,14 +170,17 @@ Prevent automation of scripts when Auto.js in the front Inspecting layout... Force stop - \\n------------\\n[%s]Finished,spent %f seconds. + [%s] finished in %s seconds.\n About app and developer Attribute Value View info View in layout bounds\' view /Scripts/ - Connect to PC + Connect to PC + Client mode + Server mode + PC server address Dark mode Stable mode Foreground service @@ -259,4 +262,6 @@ Auto.js has no root access to record a script. Continue? Record Quit + Can\'t connect to the remote server: %s + Can\'t enable the AutoJs6 server: %s diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f9c9900e..3428fe0a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -51,7 +51,7 @@ 悬浮窗 错误报告 再按一次退出程序 - 已停止%d个正在运行的脚本 + 已停止 %d 个正在运行的脚本 开始运行 用其他应用打开 重命名 @@ -142,13 +142,15 @@ key_guard_mode 布局分析中 强制停止 - \n------------\n[%s]运行结束,用时%f秒 + [%s] 运行结束 (用时 %s 秒)\n 又双 又双叒 又双叒叕 - 连接到计算机 - 服务器地址 + 连接到计算机 + 客户端模式 + 服务端模式 + PC 服务端地址 关于项目与开发者 属性 @@ -357,6 +359,7 @@ 关闭 执行 连接失败: %s + AutoJs6 服务启用失败: %s 确定要删除%s吗 广播触发任务 搜索Java包/类 diff --git a/app/src/main/strings.xml b/app/src/main/strings.xml index f49f91e0..d2c4516a 100644 --- a/app/src/main/strings.xml +++ b/app/src/main/strings.xml @@ -58,8 +58,8 @@ Press again to exit 常用函数 很抱歉(ಥ _ ಥ)程序遇到未知错误,即将停止运行\n错误代码: - No running script - 已停止%d个正在运行的脚本 + No running script + 已停止 %d 个正在运行的脚本 Running Open by other apps Rename diff --git a/autojs/build.gradle b/autojs/build.gradle index 51650087..dcff52d8 100644 --- a/autojs/build.gradle +++ b/autojs/build.gradle @@ -9,9 +9,9 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { } } -tasks.withType(JavaCompile) { - options.compilerArgs << '-Xlint:deprecation' << '-Xlint:unchecked' -} +// tasks.withType(JavaCompile) { +// options.compilerArgs << "-Xlint:deprecation" << "-Xlint:unchecked" +// } android { compileSdkVersion versions.compile @@ -24,7 +24,7 @@ android { buildTypes { release { minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } compileOptions { @@ -41,37 +41,22 @@ repositories { } dependencies { - testImplementation 'junit:junit:4.13.2' + testImplementation "junit:junit:${junitVer}" - api 'org.greenrobot:eventbus:3.2.0' + implementation "net.lingala.zip4j:zip4j:2.9.1" - api 'net.lingala.zip4j:zip4j:2.9.1' - - api 'com.afollestad.material-dialogs:core:0.9.6.0' - api 'com.google.android.material:material:1.6.0-alpha01' - - api 'com.github.hyb1996:EnhancedFloaty:0.31' - - api 'com.makeramen:roundedimageview:2.3.0' + implementation "com.afollestad.material-dialogs:core:0.9.6.0" + implementation "com.google.android.material:material:1.6.0-alpha01" // OkHttp - api 'com.squareup.okhttp3:okhttp:5.0.0-alpha.3' - - // JDeferred - api 'org.jdeferred:jdeferred-android-aar:1.2.6' - - // RootShell - api 'com.github.Stericson:RootShell:1.6' + implementation "com.squareup.okhttp3:okhttp:5.0.0-alpha.3" // Gson - api 'com.google.code.gson:gson:2.8.9' + implementation "com.google.code.gson:gson:2.8.9" // Log4j - api group: 'de.mindpipe.android', name: 'android-logging-log4j', version: '1.0.3' - api group: 'log4j', name: 'log4j', version: '1.2.17' - - // Preference - api 'androidx.preference:preference-ktx:1.1.1' + implementation group: "de.mindpipe.android", name: "android-logging-log4j", version: "1.0.3" + implementation group: "log4j", name: "log4j", version: "1.2.17" // Terminal emulator api project(":libs:jackpal.androidterm.libtermexec-1.0") @@ -80,8 +65,8 @@ dependencies { api project(":libs:com.android.dx-1.7.0") api project(":libs:org.mozilla.rhino-1.7.14") - api project(':libs:org.opencv-4.5.4') + api project(":libs:org.opencv-4.5.4") - api project(':common') - api project(':automator') + api project(":common") + api project(":automator") } \ No newline at end of file diff --git a/autojs/src/main/AndroidManifest.xml b/autojs/src/main/AndroidManifest.xml index e0480539..6fe4cae0 100644 --- a/autojs/src/main/AndroidManifest.xml +++ b/autojs/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ xmlns:tools="http://schemas.android.com/tools" package="com.stardust.autojs"> + diff --git a/autojs/src/main/assets/init.js b/autojs/src/main/assets/init.js index 8da5bfd6..fd5ea0aa 100644 --- a/autojs/src/main/assets/init.js +++ b/autojs/src/main/assets/init.js @@ -63,7 +63,7 @@ runtime.init(); (function (scope) { var modules = ['app', 'automator', 'console', 'dialogs', 'io', 'selector', 'shell', 'web', 'ui', 'images', 'threads', 'events', 'engines', 'RootAutomator', 'http', 'storages', 'floaty', - 'sensors', 'media', 'plugins', 'continuation']; + 'sensors', 'media', 'plugins', 'continuation', '$base64']; var len = modules.length; for (var i = 0; i < len; i++) { var m = modules[i]; @@ -78,6 +78,11 @@ runtime.init(); Canvas = com.stardust.autojs.core.graphics.ScriptCanvas; Image = com.stardust.autojs.core.image.ImageWrapper; + OkHttpClient = Packages.okhttp3.OkHttpClient; + MutableOkHttp = com.stardust.autojs.core.http.MutableOkHttp; + Intent = android.content.Intent; + BroadcastReceiver = com.stardust.autojs.core.content.BroadcastReceiver; + // 重定向require以便支持相对路径和npm模块 Module = require('jvm-npm.js'); require = Module.require; diff --git a/autojs/src/main/assets/modules/__$base64__.js b/autojs/src/main/assets/modules/__$base64__.js new file mode 100644 index 00000000..1d553e2d --- /dev/null +++ b/autojs/src/main/assets/modules/__$base64__.js @@ -0,0 +1,27 @@ +module.exports = function (runtime, global) { + const Base64 = android.util.Base64; + + const $base64 = () => void 0; + + let _ = { + charsetNames: [ + // charset names updated up to android sdk 27 + 'us-ascii', 'iso-8859-1', 'utf-8', 'utf-16be', 'utf-16le', 'utf-16', + ], + isValidEncoding(encode) { + return this.charsetNames.includes(encode); + }, + }; + + // noinspection JSValidateTypes + $base64.encode = (str, encoding) => _.isValidEncoding(encoding) + ? Base64.encodeToString(new java.lang.String(str).getBytes(encoding), Base64.NO_WRAP) + : Base64.encodeToString(new java.lang.String(str).getBytes(), Base64.NO_WRAP); + + // noinspection JSValidateTypes + $base64.decode = (str, encoding) => _.isValidEncoding(encoding) + ? String(new java.lang.String(Base64.decode(str, Base64.NO_WRAP), encoding)) + : String(new java.lang.String(Base64.decode(str, Base64.NO_WRAP))); + + return $base64; +}; \ No newline at end of file diff --git a/autojs/src/main/assets/modules/__images__.js b/autojs/src/main/assets/modules/__images__.js index d2a2e3db..7ed90868 100644 --- a/autojs/src/main/assets/modules/__images__.js +++ b/autojs/src/main/assets/modules/__images__.js @@ -2,38 +2,40 @@ module.exports = function (runtime, scope) { const ResultAdapter = require("result_adapter"); - var MatchingResult = (function () { - var comparators = { - "left": (l, r) => l.point.x - r.point.x, - "top": (l, r) => l.point.y - r.point.y, - "right": (l, r) => r.point.x - l.point.x, - "bottom": (l, r) => r.point.y - l.point.y - } + const MatchingResult = (function () { + let comparators = { + 'left': (l, r) => l.point.x - r.point.x, + 'top': (l, r) => l.point.y - r.point.y, + 'right': (l, r) => r.point.x - l.point.x, + 'bottom': (l, r) => r.point.y - l.point.y, + }; + function MatchingResult(list) { if (Array.isArray(list)) { this.matches = list; } else { this.matches = runtime.bridges.bridges.toArray(list); } - this.__defineGetter__("points", () => { + this.__defineGetter__('points', () => { if (typeof (this.__points__) == 'undefined') { this.__points__ = this.matches.map(m => m.point); } return this.__points__; }); } + MatchingResult.prototype.first = function () { if (this.matches.length == 0) { return null; } return this.matches[0]; - } + }; MatchingResult.prototype.last = function () { if (this.matches.length == 0) { return null; } return this.matches[this.matches.length - 1]; - } + }; MatchingResult.prototype.findMax = function (cmp) { if (this.matches.length == 0) { return null; @@ -45,32 +47,32 @@ module.exports = function (runtime, scope) { } }); return target; - } + }; MatchingResult.prototype.leftmost = function () { return this.findMax(comparators.left); - } + }; MatchingResult.prototype.topmost = function () { return this.findMax(comparators.top); - } + }; MatchingResult.prototype.rightmost = function () { return this.findMax(comparators.right); - } + }; MatchingResult.prototype.bottommost = function () { return this.findMax(comparators.bottom); - } + }; MatchingResult.prototype.worst = function () { return this.findMax((l, r) => l.similarity - r.similarity); - } + }; MatchingResult.prototype.best = function () { return this.findMax((l, r) => r.similarity - l.similarity); - } + }; MatchingResult.prototype.sortBy = function (cmp) { var comparatorFn = null; if (typeof (cmp) == 'string') { - cmp.split("-").forEach(direction => { + cmp.split('-').forEach(direction => { var buildInFn = comparators[direction]; if (!buildInFn) { - throw new Error("unknown direction '" + direction + "' in '" + cmp + "'"); + throw new Error('unknown direction \'' + direction + '\' in \'' + cmp + '\''); } (function (fn) { if (comparatorFn == null) { @@ -83,7 +85,7 @@ module.exports = function (runtime, scope) { return fn(l, r); } return cmpValue; - } + }; })(comparatorFn, fn); } })(buildInFn); @@ -94,7 +96,7 @@ module.exports = function (runtime, scope) { var clone = this.matches.slice(); clone.sort(comparatorFn); return new MatchingResult(clone); - } + }; return MatchingResult; })(); diff --git a/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java b/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java index db623ff6..97f48d17 100644 --- a/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java +++ b/autojs/src/main/java/com/stardust/autojs/ScriptEngineService.java @@ -25,6 +25,7 @@ import com.stardust.util.UiHandler; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; +import java.text.MessageFormat; import java.util.Collection; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -175,7 +176,7 @@ public class ScriptEngineService { @Subscribe public void onScriptExecution(ScriptExecutionEvent event) { if (event.getCode() == ScriptExecutionEvent.ON_START) { - mGlobalConsole.verbose(mContext.getString(R.string.text_start_running) + "[" + event.getMessage() + "]"); + mGlobalConsole.verbose(MessageFormat.format("{0} [{1}].", mContext.getString(R.string.text_start_running), event.getMessage())); } else if (event.getCode() == ScriptExecutionEvent.ON_EXCEPTION) { mUiHandler.toast(mContext.getString(R.string.text_error) + ": " + event.getMessage()); } diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/GlobalConsole.java b/autojs/src/main/java/com/stardust/autojs/core/console/GlobalConsole.java index 77edbf6f..577e30b8 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/GlobalConsole.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/GlobalConsole.java @@ -1,5 +1,7 @@ package com.stardust.autojs.core.console; +import android.annotation.SuppressLint; + import com.stardust.util.UiHandler; import org.apache.log4j.Level; @@ -15,6 +17,7 @@ import java.util.Locale; * Created by Stardust on 2017/10/22. */ +@SuppressLint("ConstantLocale") public class GlobalConsole extends ConsoleImpl { private static final String LOG_tAG = "GlobalConsole"; private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm:ss.SSS", Locale.getDefault()); @@ -37,7 +40,6 @@ public class GlobalConsole extends ConsoleImpl { private Priority toLog4jLevel(int level) { switch (level) { case android.util.Log.VERBOSE: - return Level.DEBUG; case android.util.Log.DEBUG: return Level.DEBUG; case android.util.Log.INFO: @@ -53,22 +55,15 @@ public class GlobalConsole extends ConsoleImpl { } private String getLevelChar(int level) { - switch (level) { - case android.util.Log.VERBOSE: - return "V"; - case android.util.Log.DEBUG: - return "D"; - case android.util.Log.INFO: - return "I"; - case android.util.Log.WARN: - return "W"; - case android.util.Log.ERROR: - return "E"; - case android.util.Log.ASSERT: - return "A"; - - } - return ""; + return switch (level) { + case android.util.Log.VERBOSE -> "V"; + case android.util.Log.DEBUG -> "D"; + case android.util.Log.INFO -> "I"; + case android.util.Log.WARN -> "W"; + case android.util.Log.ERROR -> "E"; + case android.util.Log.ASSERT -> "A"; + default -> ""; + }; } } diff --git a/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java b/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java index 1b386afa..fbc3bd79 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java +++ b/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java @@ -87,6 +87,9 @@ public class Timer { } } + public void post(Runnable r) { + + } public boolean clearInterval(int id) { return clearCallback(id); diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Device.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Device.java index bf2608f4..4dab0a5f 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Device.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Device.java @@ -15,8 +15,10 @@ import android.os.Build; import android.os.PowerManager; import android.os.Vibrator; import android.provider.Settings; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + import android.telephony.TelephonyManager; import com.stardust.autojs.R; @@ -73,13 +75,8 @@ public class Device { public static final String securityPatch; static { - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { - baseOS = Build.VERSION.BASE_OS; - securityPatch = Build.VERSION.SECURITY_PATCH; - } else { - baseOS = null; - securityPatch = null; - } + baseOS = Build.VERSION.BASE_OS; + securityPatch = Build.VERSION.SECURITY_PATCH; } public static final String codename = Build.VERSION.CODENAME; @@ -87,7 +84,7 @@ public class Device { @SuppressLint("HardwareIds") public static final String serial = Build.SERIAL; - private Context mContext; + private final Context mContext; private PowerManager.WakeLock mWakeLock; private int mWakeLockFlag; @@ -285,16 +282,13 @@ public class Device { return; } SettingsCompat.manageWriteSettings(mContext); - throw new SecurityException(mContext.getString(R.string.no_write_settings_permissin)); + throw new SecurityException(mContext.getString(R.string.no_write_settings_permission)); } private void checkReadPhoneStatePermission() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (mContext.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) - != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException(mContext.getString(R.string.no_read_phone_state_permissin)); - } + if (mContext.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException(mContext.getString(R.string.no_read_phone_state_permissin)); } } @@ -323,7 +317,9 @@ public class Device { return getMacByFile(); } + @SuppressLint("MissingPermission") String mac = wifiInf.getMacAddress(); + if (FAKE_MAC_ADDRESS.equals(mac)) { mac = null; } diff --git a/autojs/src/main/res/values-en/strings.xml b/autojs/src/main/res/values-en/strings.xml index f57a76fd..37fa0047 100644 --- a/autojs/src/main/res/values-en/strings.xml +++ b/autojs/src/main/res/values-en/strings.xml @@ -4,9 +4,9 @@ Script Running Path is empty File does not exist - No file reading&writing permission - No running script - Stop %d script(s) + No file r/w permission + No running scripts + %d script(s) stopped Required Android OS version: OK Cancel @@ -14,7 +14,7 @@ No drawing overlay permission Auto.js Key observing is disabled, please enable in settings - No writing settings permission + No writing settings permission 通知服务未运行,请重新启用通知权限 diff --git a/autojs/src/main/res/values/strings.xml b/autojs/src/main/res/values/strings.xml index e5f862ca..0e656f50 100644 --- a/autojs/src/main/res/values/strings.xml +++ b/autojs/src/main/res/values/strings.xml @@ -5,8 +5,8 @@ 路径为空 文件不存在 无文件读写权限 - 没有正在运行的脚本 - 已停止%d个正在运行的脚本 + 没有正在运行的脚本 + 已停止 %d 个正在运行的脚本 本脚本需要此安卓版本以上才能运行: 确定 取消 @@ -15,7 +15,7 @@ 使脚本自动操作(点击、长按、滑动等)所需,若关闭则只能执行不涉及自动操作的脚本。 按键监听未启用,请在软件设置中开启 手势监听未启用,请在软件设置中开启 - 沒有修改系統设置权限 + 沒有修改系統设置权限 通知服务未运行,请重新启用通知权限 本脚本需要Auto.js版本号%d以上才能运行 打开侧拉菜单 diff --git a/automator/build.gradle b/automator/build.gradle index d166c37d..a74f5da8 100644 --- a/automator/build.gradle +++ b/automator/build.gradle @@ -1,5 +1,5 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +apply plugin: "com.android.library" +apply plugin: "kotlin-android" tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { @@ -27,7 +27,7 @@ android { buildTypes { release { minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } } @@ -37,7 +37,7 @@ repositories { } dependencies { - testImplementation 'junit:junit:4.13.2' - api 'androidx.appcompat:appcompat:1.4.0' - api project(':common') + testImplementation "junit:junit:${junitVer}" + implementation "androidx.appcompat:appcompat:1.4.0" + api project(":common") } diff --git a/automator/src/test/java/com/stardust/automator/filter/DfsFilterTest.kt b/automator/src/test/java/com/stardust/automator/filter/DfsFilterTest.kt index 7a644d5c..c4c96b17 100644 --- a/automator/src/test/java/com/stardust/automator/filter/DfsFilterTest.kt +++ b/automator/src/test/java/com/stardust/automator/filter/DfsFilterTest.kt @@ -28,7 +28,7 @@ class DfsFilterTest { fun filter() { val filter = RandomFilter() val root = TestUiObject(10) - val list = DFS(filter).search(root) + val list = DFS.search(root, filter) for (uiObject in list) { if (root !== uiObject) uiObject.recycle() diff --git a/build.gradle b/build.gradle index 365e3af6..21032041 100644 --- a/build.gradle +++ b/build.gradle @@ -4,25 +4,22 @@ import org.apache.groovy.json.internal.LazyMap // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = "1.6.0" + ext.kotlinVer = "1.6.10" + ext.junitVer = "4.13.2" repositories { mavenCentral() google() - maven { url "https://maven.aliyun.com/repository/apache-snapshots" } maven { url "https://maven.aliyun.com/repository/central" } maven { url "https://maven.aliyun.com/repository/google" } maven { url "https://maven.aliyun.com/repository/gradle-plugin" } - maven { url "https://maven.aliyun.com/repository/grails-core" } maven { url "https://maven.aliyun.com/repository/jcenter" } maven { url "https://maven.aliyun.com/repository/public" } - maven { url "https://maven.aliyun.com/repository/spring" } - maven { url "https://maven.aliyun.com/repository/spring-plugin" } maven { url "https://repo.huaweicloud.com/repository/maven" } } dependencies { - classpath 'com.android.tools.build:gradle:7.2.0-alpha05' + classpath "com.android.tools.build:gradle:7.2.0-alpha06" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVer}" classpath "com.jakewharton:butterknife-gradle-plugin:10.2.1" classpath "org.codehaus.groovy:groovy-json:3.0.8" @@ -34,15 +31,11 @@ allprojects { maven { url "https://jitpack.io" } maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } mavenCentral() - maven { url "https://maven.aliyun.com/repository/apache-snapshots" } maven { url "https://maven.aliyun.com/repository/central" } maven { url "https://maven.aliyun.com/repository/google" } maven { url "https://maven.aliyun.com/repository/gradle-plugin" } - maven { url "https://maven.aliyun.com/repository/grails-core" } maven { url "https://maven.aliyun.com/repository/jcenter" } maven { url "https://maven.aliyun.com/repository/public" } - maven { url "https://maven.aliyun.com/repository/spring" } - maven { url "https://maven.aliyun.com/repository/spring-plugin" } maven { url "https://repo.huaweicloud.com/repository/maven" } google() } diff --git a/common/build.gradle b/common/build.gradle index eb7668ed..ee08221e 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,9 +1,9 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' +apply plugin: "com.android.library" +apply plugin: "kotlin-android" -tasks.withType(JavaCompile) { - options.compilerArgs << '-Xlint:deprecation' -} +// tasks.withType(JavaCompile) { +// options.compilerArgs << "-Xlint:deprecation" +// } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { @@ -24,7 +24,7 @@ android { buildTypes { release { minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } lintOptions { @@ -37,8 +37,33 @@ android { } dependencies { - testImplementation 'junit:junit:4.13.2' - api "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - api 'androidx.annotation:annotation:1.3.0' - api 'com.github.hyb1996:settingscompat:1.1.5' + testImplementation "junit:junit:${junitVer}" + + // Kotlin + api "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${kotlinVer}" + + // RoundedImageView + api "com.makeramen:roundedimageview:2.3.0" + + // EventBus + api "org.greenrobot:eventbus:3.3.1" + + // Annotation + api "androidx.annotation:annotation:1.3.0" + + // Preference + api "androidx.preference:preference-ktx:1.1.1" + + // RootShell + api "com.github.Stericson:RootShell:1.6" + + // JDeferred + api "org.jdeferred:jdeferred-android-aar:1.2.6" + + // Auto.js + api "com.github.hyb1996:settingscompat:1.1.5" + api "com.github.hyb1996:EnhancedFloaty:0.31" + + // Rhino + api project(":libs:org.mozilla.rhino-1.7.14") } diff --git a/gradle.properties b/gradle.properties index c317e028..06ed9ca1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,8 +12,11 @@ # org.gradle.parallel=true #Thu Nov 11 16:38:18 CST 2021 -org.gradle.jvmargs=-Xms2g -Xmx2g -Dkotlin.daemon.jvm.options\="-Xmx2g" -Dfile.encoding\=UTF-8 +org.gradle.jvmargs=-Xms2g -Xmx2g -Dkotlin.daemon.jvm.options\="-Xmx2g" -Dfile.encoding\=UTF-8 -XX:+UseParallelGC android.useAndroidX=true android.enableJetifier=true -android.injected.studio.version.check=false \ No newline at end of file +android.injected.studio.version.check=false + +org.gradle.daemon=true +org.gradle.parallel=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7f8f9af9..35475a35 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Nov 26 16:35:39 CST 2021 +#Thu Dec 30 20:07:37 CST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME \ No newline at end of file +zipStoreBase=GRADLE_USER_HOME diff --git a/inrt/build.gradle b/inrt/build.gradle index dae35709..8c5428f4 100644 --- a/inrt/build.gradle +++ b/inrt/build.gradle @@ -1,5 +1,5 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' +apply plugin: "com.android.application" +apply plugin: "kotlin-android" android { compileSdkVersion versions.compile @@ -15,8 +15,8 @@ android { } lintOptions { abortOnError false - disable 'MissingTranslation' - disable 'ExtraTranslation' + disable "MissingTranslation" + disable "ExtraTranslation" } compileOptions { sourceCompatibility JavaVersion.VERSION_16 @@ -46,51 +46,51 @@ android { buildTypes { debug { minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } release { minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } } def buildApkPluginForAbi(File pluginProjectDir, String abi) { copy { - from file('..\\app\\release\\') - into new File(pluginProjectDir, 'app\\src\\main\\assets') + from file("..\\app\\release\\") + into new File(pluginProjectDir, "app\\src\\main\\assets") def fileName = "inrt-" + abi + "-release.apk" include fileName - rename fileName, 'template.apk' + rename fileName, "template.apk" } exec { workingDir pluginProjectDir - commandLine 'gradlew.bat', 'assembleRelease' + commandLine "gradlew.bat", "assembleRelease" } copy { - from new File(pluginProjectDir, 'app\\build\\outputs\\apk\\release') - into file('..\\common\\release') - def fileName = '打包插件-' + versions.appVersionName + '-release.apk' + from new File(pluginProjectDir, "app\\build\\outputs\\apk\\release") + into file("..\\common\\release") + def fileName = "打包插件-" + versions.appVersionName + "-release.apk" include fileName - rename fileName, '打包插件-' + abi + '-' + versions.appVersionName + '-release.apk' + rename fileName, "打包插件-" + abi + "-" + versions.appVersionName + "-release.apk" } } task buildApkPlugin { doLast { - def pluginProjectDirPath = '..\\..\\AutoJsApkBuilderPlugin' + def pluginProjectDirPath = "..\\..\\AutoJsApkBuilderPlugin" def pluginProjectDir = file(pluginProjectDirPath) if (!pluginProjectDir.exists() || !pluginProjectDir.isDirectory()) { - println 'pluginProjectDir not exists' + println "pluginProjectDir not exists" return } - buildApkPluginForAbi(pluginProjectDir, 'armeabi-v7a') + buildApkPluginForAbi(pluginProjectDir, "armeabi-v7a") } } tasks.whenTaskAdded { task -> - if (task.name == 'assembleRelease') { - task.finalizedBy 'buildApkPlugin' + if (task.name == "assembleRelease") { + task.finalizedBy "buildApkPlugin" } } @@ -105,14 +105,14 @@ repositories { } dependencies { - testImplementation 'junit:junit:4.13.2' + testImplementation "junit:junit:${junitVer}" - implementation 'com.github.bumptech.glide:glide:4.12.0' + implementation "com.github.bumptech.glide:glide:4.12.0" implementation project(":libs:org.mozilla.rhino-1.7.14") implementation project(":libs:org.opencv-4.5.4") - implementation project(':automator') - implementation project(':common') - implementation project(':autojs') + implementation project(":automator") + implementation project(":common") + implementation project(":autojs") } diff --git a/inrt/src/main/res/values/strings.xml b/inrt/src/main/res/values/strings.xml index 0e6da344..c7ada45d 100644 --- a/inrt/src/main/res/values/strings.xml +++ b/inrt/src/main/res/values/strings.xml @@ -19,6 +19,6 @@ 打开应用后直接运行脚本 其他 Powered by Auto.js - \n------------\n[%s]运行结束,用时%f秒 + [%s] 运行结束 (用时 %f 秒) diff --git a/libs/org.mozilla.rhino-1.7.14/build.gradle b/libs/org.mozilla.rhino-1.7.14/build.gradle index 984d5207..650d5236 100644 --- a/libs/org.mozilla.rhino-1.7.14/build.gradle +++ b/libs/org.mozilla.rhino-1.7.14/build.gradle @@ -5,4 +5,4 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { } configurations.maybeCreate("default") -artifacts.add("default", file("rhino-1.7.14-SNAPSHOT.jar")) \ No newline at end of file +artifacts.add("default", file("rhino-1.7.14.jar")) \ No newline at end of file diff --git a/libs/org.mozilla.rhino-1.7.14/rhino-1.7.14-SNAPSHOT.jar b/libs/org.mozilla.rhino-1.7.14/rhino-1.7.14.jar similarity index 88% rename from libs/org.mozilla.rhino-1.7.14/rhino-1.7.14-SNAPSHOT.jar rename to libs/org.mozilla.rhino-1.7.14/rhino-1.7.14.jar index 019952039682e1e85181f0a5e3f3b9fe747a67d6..63532d7ddb014772de964e8b8f9ec520b54a8f54 100644 GIT binary patch delta 127956 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 m)BCXw`$RfO}7Gl??&;J2g#Gpa| delta 127992 zcmY&<1yGw^&@K=N!QG)~p+J#h#ogUqTPW_XDef-8i#rsGyBBvU?(SL~E+75pzxQUC z$uoQQ>^>{!yd<+p4^?XkRzp#g0l*?cL4iO}Y?48-DAWkAZz|YH-)KOwytLp)v}dRz zUN?l(K^d}GWp>|IDcP@;d`d^?Ylrqkgml8aE+;bt534ME)fc%NGeyt&&*9X8lrd%Ab|+DV52}zoUxJPMY~SkG~%MI$lPI|pmg9MxWFwemMG6MPV3ug9B1YHf&0P}`g zYGE)yZ)m&~W{f=^`xYI7rGrQWF}#OCuV1)?(f+6R`7cbzKXiW!!vp=M$KinfruY7B zf5<(I>_3e^k1&DgZ!!ZEKqV04m4wP5(btRV*NioQpr8~WM)&|$2wE04X}tqBpb`E} zmysAS2zWyeqyWEvoW6emkddJNx8LQOXZ3hIFd@>BV>9%p&jc=a1%08@0 z0NzSmub>T3LPLEGR>j>z6gB0w0NBuwPrqJw44DJ!-WHC&*9zW1LqYYyLhNs$Ng!y2 z*r56v3jpY?ZR*>t0L0M$rK^6$8ZadCmbkJiz{Q&=`xn6ZpBh0eK>i=Hs0UE~+Yr+L zApD2Q8v*_(Z{A=&QsBV7dRv2rte2p?d4q=_mtdpT+w}p^px=tfe#$-Z@~RU7`>!1h zO0Ws)yZZqMFwp7{BR(`b$ju-C^S^eeM;-z+|BG~R6d*(KR%-lnKm#-CYtdD*#i^P# zUpvVV7Gk7>MpFMk4(kQ;rsF{cTZ#B)fq@A&1?x>VAPjr_Z?#bjwhsEug0!f`jW!Mx z)D81nKcz~*y5PKVL_sWoCqjUND#dwgQV3cVHb%Xy9_)LBx8=}>g!!b`5Xk=}wLbkD zY!uvEH5sg6Ct)%EJ9Rx#5x@StR^ITCjaJ_cfV&61+3Y}u8%2LZ zu_SQ)fH$N|4mS?{hL|Yf%$?p)8U$|4^v$F73mgRY4Z*_#Phj8TzXbu^Vc&YV5yaFy z#PON{pZ}sFug^jOZg9M031FfK zwC2BdND2pHzPT<92d2ZmA?X;P1N?so(hdP~y@?(mz=MBW_fmk|89q-fISE^zU4+{Q=qm-uNN{fl+R+r@0LNUwziP zu@UM67J*^^xMHjVwf?o3^##!VpOgJ-AksgkH+R4g7>xhgH3ag-3HH^@$ZM&&AxfJd zviizLApO4$D=)wx7=YGm&zr))?;5^wR{9FR{f{5lH~3@Nw^dq8cmd=$Wa$de^)I$U zFgypsn`|uvo*V`B)rv~Yr7icxYlj8_Am9IDkU+AmK|sh;KQ>mqSQ0$opC_4Q_|AU_ zEe$^L?defpm<^8w|7NST2;Nxq%@*{!SZBd&AvdA^yIUwBf+z4m$oD~Pc!k8=L3}%WspohN=9o}WP4xe}j8uQC4f4i( zbLVCaasj-db32eO;u})*1Z}{+@r~|)bI5wNT}$vUGg)KU@bwnoL9dt3f6pS4a8T60 zBaXCoh@bSDA1@H31N8a`{*MG?EeAvimT_EE#eS|Zk%-Eru8^FX-Cl3|T3_e@Wpl zE3*w#w-awuhgm;&)+u7QYemM711jTx!B4FtrcX8+r$!oKn?&Ah6=A`jFv8~yPzqA< z-orcivjNJ9=|@hBpW$C|u9Zwxv~n;1VQR8z(5BX?_p5P=aRxBvu&^zxQX)IpXOxmL zVCM~Wk|{}v--khh1&rFj_isD}V`>DETRSUfB!3L}z~gHI*}zN)E*|GXu=g8W7$T3< z_@If)OS-wUIfBs=)DjgBlwWuHxZY?7eB!^c+%U>osON~N<}BQ7@s+~HzwlOWKeP(* zOrqp4MvNl0D-@eg)-wr_{)nT?Y=@yTEh{k*(HH9S@X6SFU2Dk(ajae!ylZ2U>C3=M zoa%_E<3Aa!>229nLtuPXK&q!S(fZrS!*UwI1O6}L`|Nb*6J z-6=rNZ~v0Xcc+1(PiEnU;L)8ngH4?cLkJHE!LLX6KiN;cZK=iU&?wUGPem=^bP#3bDWTmXH9s5+`?R#jf5OCs#^m#g#ScG5-HYo;- zh_Q#GO;BFE@$NUOuy<(Q-$XwaVVagm0=UF39*mCQglO?ntro)r&wgAc{$3g6_Vru- zg`%tRwx9}c|L%o)MDQn4ac6Y7ICqt*;dNByATt)xZ)J1Qx`)M)bX}M%px&6 zsgH)A5TBA~71w@pK4br6;q}XWOi_Li6FZ{xUX_@`TnP`53Pn&=g~psua}qElsHdQy zrxBM&`kZ|kwERc zc%aoCc2JGnCgPa%0RMkKoBVfuSLn@Z!cs#)k*YzU-C_Rk5e7mQ3P8x<>l?0{k*yI~ zecZV32s|JdEKE^o6C7bo1Y=(+(GIv^V-RJ$Y_hCinRC5`&Y`xYT{&V+Sl9=2jSe`g z(&P5>@|oFk?Ze60{Bm`%JD=UQ&+!Am2?eW*ljfTx$5FnUvYWOmhymXPEQZ{tNw2(q z<^hw~H09)PVmXoVsT8~5fUfn9ylR+3K>78AqKuWY2^p?7scuMAiJB?g;n%NuTDVB! zfYL6ZrwFke*$PF+55HBJ+gi|g+3(5Yt$0~AWQ#6igIlQYK1#n2r&Z~o2?UHp##`YR zBxw1$qQ-yH@0gifHo2z#J#@yQR= zwnfhRB3W>rT|M-o+7dc!;#6sL%4Hyqazt?*vAsS`wy58%?u7oIB7NmDeSWt#!iv*&o^8+fE&eoq1M)mx;yib5d8+j*cfk z%O)nuSDDeteI4{ylosi<>u%Wz3Ny5l%gdfw!6W0jOEaHDl&G_=Qgl-m%Mz>h$Pt?| z2dex&sOTA=LeXwWGnuf$6w$d88n61Dg;q3B2%Qg$|}3r;mvjupEsPBu3-XtA-< z#zA00vOPXNf?<%==W$)nC^_i6p~s z#C&E$lR)~m4Xos?lu0TWZ2dTdfXOwJGu87fK@zKi?`WcSJUCgBpV-UK?XRBdR3HYe z4M!S7HMOHzsZ_R%6+U+uyZj+-+%bis7#QwXlS)fNXca0-;;Kjxnkc@IN|YRRES4Yl zNv)o}Pgt%quKLiQp-M4N3&|u>jNCqOCCQ8mH?&g<0i0ip8(55xHa{6O!uzzikh1c( zgb^nv64Z)&yz7~BNB!3#xS&Xq7%`Kz4KFlxde#;6i=iN1l&;szpV^&biq<<^WbD3x zIL%2Of^KoSpX<2aOr2pmap%-&gnxpY;foNYNn}ooR)O|~93zw;>ApJF+v9+->Wrdk zE>GrT6F8x*kF715!2aTE*n;r7W)Xo-ET)Dd*udCB*6+kXUL*O+JKRT5z?jfJAQTj+ z*~IE;uUnpy^Q64#<2Xag70U3`pHsSLQARAA$Zqzh{YzJI>s^=SK6iXY{a&9FVCt+* zR~eRn)9UD_f-v~eF~8SE*|Hm*!q6bxAU@Z2W72~Uh--7srjM#rpF zN}zggH?BUC>myGTtI4nQ`P3$<8>dg}gB|!R+s@ptS=*9ZvNI{U(!W(z-ni4{VEX5}^%$ zqQxmEaw1Jaux460=k>3u6aqhBC}VQ+P=@A}M9UC^{fdv$?#}f8j^wp^>v)>$IJS<< z=ks0Vi78A>)oC-$(zb4%{r+1%tJgA*y8yPGfcC((XP%qJT;yb0_(0&yq>SOvUbClh zMaZ?2J}I!L7ymrp`~A2VF`QKMirgEP*szM)NxqVMyhWWQ zTwmh~_h~WbWgP5_^j^=>vZzX{t`f{fXnx>5ikNa)EcO!LvxH~CU@1N`r;ElYfLGA= zJtBUm3_)~V&${m-U(8^iMdj|Xqog_oHMAWKZbB1^nDmvB2xy?IL2!S5q zDjzw-@~G9ZB7q#KN5_i~i`&gX0RME0s`tnq;ee{FZUc{1+8RC`!$7-&UH~}2t|SDO zUZ120Ej1lwi2vxS!I7Du_;?~1u2y4zJD1FK^f-q-e_axa(%-}w)FQJh>7Lg(5nlGJ z$Aku%z|h;7Df3;uzW6{uuxz3~@mq6z=&M`VK%XYBymV-rbW8ro*-`cm8F3xWmYM$m z*4m$DI$@NOhOBo(!2=}cqP^hx?|#o62MhrxmsH`=+XI?X-cW2{lS0o2l^mhMTt)$b1p z$ui3r=*WBQS6DpadL7;0Ss~|pnlqzYhIf5#R4g1IKpCrVNS1LzF>MBi^FOLrMJw#U zQA4y^V(^?N!oviuP~v$k@EjQ3b^`qxyEX=m8znIBV43RNLN(Pqx(LjC^Df*fsv43Y zU1i;!JK~+;%!<^2Ld}*4$k(iQjyt_a?}u+DcD+h^3(xl}Z8OAFvwshh2(%B`E2j_2 zk`|szhmUQ2C$U|xh}8%0<%z1$aWwL`ad^{Z$)#x6kLRfBGl=5laDPSnS;g4{V$?UJ zJvDaDp7WmDpypZ~oQ};eem@yOg3)?uAD|aMF)RxPSc#T4>Yraua^$SnrN)OR}5Wvwoj{#?vO~B zjF^Yk^b;moYMNyBaskap2?nhUr#Y|F$V9*{Njx>RacL zS}I!99M;Vc^%G}K!d_dXoOUD$v4Id{T-9?Mapl%{FaR@nwf>g$QGo=XCp=1j^g}q@ zEdZMF69KKuY%!mz;+L*=hG(>wKT&vprFf>6D5rn%jlpghb^T_Z+EQ2-jvvgDl+$@4 z^kg0w^ZCt26{=X-#y}WmeFU3j>g^TN&UQy1jz*ie+UTtm@B_sDGrFwTM&Y#g_FiKv zMVj1E7ChNz$2o@&8Y}&YR#)fZkRP+Odt;o3e02zbQ6dTvP7Xz2CQtlAt0LRq%1s<9 zn%`$h`{SzNz(2bZUJQVe6T&t8H9yELwYha>n@qN&N5y2u4 z@t0#^RcnG^E7dnT2^6*&G8vNhu7>{Xf*&?O+29g}*-2c08T0oXx*;xjF1Uw{Tj`Wc z)8bCV#^zd~`;1(|D%J;TMU?7kyTBuFyNuy<=6+5`@)gL8j zQq=b67!*597Y1`RN3IIEtG=J*HGn{)P+~O(OEAe80~He>vhd923g6d>6D1~ zWN0%fmxZa<1saXWkTlaFiy?Y0BuZq!OdXhGh2U8<=BrD#^zZ4Gd3zMgJJwWTnS$du zJf;aWrI_fPslTY`23z_~D3TF#_q9n4S*Dvo-nv*cLi zzTO|Og?h(6aMAmo9-@v5Nk~#l0(qs7pCgsJ{-%Q@L1geKO&yxTN=gQ0cGRSqS}e6; zDszhRw7DZkM^hILehtRwV_EQZ?1ObVf7+}J-fdr6SQvMpbiPMZ#bNlEVn9zxyIe3_ zT9H|=3mle*$ryjPmSUi$rJ<~+qOR768E`nbBV^eiSvVW&J6JNC5D;e^x zrQT+X(UdxU`WP}g{=Svzu?=4=h0B9e7N64MQWj{vcs`>#_XC?5K`VV)s(1AwqAn79 zs$QOZ>Y%pipvV#5g4;i|=Im91PufS#-H)NGXCJ_De{;1wugWq(#<^d8KYUqkcvhRE z&x19y0cDP;UNGpkBJzJN_u>YB+5q)u=}#EaZ&0f&*9$f5wi%in9>>RHKjgwnAwEzh zti-_{?W77?LRh1pr6}{s@lk&_k?Qnr+GZ>W2ps-TVqu{sQL_((1;MTW}ZmvmHZR1GadD_(m$A(7UW< z9UA`ZLfFo++=n;SvQm?Y6uk5-g-4d72T|KS47{`E`PolyOr{VAIC5jDy^Hg|VC+2u zck3*K1<=jZVf(aPh=suB^m9ia{@B9y6E8zAuD_dkuz+5l^66}>zi`fMmdTrnCTNvE z*0=_djMI#a`r^&1kiJB9m>5{FDpTW#QodN~!hF@1O#1et{qNn3{^T`!fg5{6>#qch zzQvN+kU2fg4UgO%JE_ysrx#9kK;ySv#V#Vv8A5?9=2RHdq0<_^ehbL=fFKn z7!K4J>27TY{b8vWy)lB^%GK?k{O@@tbMo(D9{Ow){^+2}4(bPBD^)n3B@yp0#BO zHla1h*H5rYSArHnl!c^bqwt(PpN*o3#@4$U1;8{WcQhw?LeG8~Y;ywRwOD{=Gbb8} z?t$q;u=7M!2MYM}*V;T%4eE~TUF{qAN9Z{{%5w`P zZB7mmMDS4*#Uh9e=4d%#PgDGm7q+a>AC#<221Bb?V8dbm8qJCFbJ*h_sVfQzf?2eR zmXdjrL^3cTp@K-+8kyBK4QlnlkR{DL1k`(-u{-K~uBDY{CL<(<7Q=GnSKtlJl*?NQxKy$au3oLBH2cdBu8O@sP9PUvk}x^m z0=rmGv00T%{;^A}T%-eimBK7vf-To|_P-A;NVJ@q+z>h=2pFaF=py%M{ED(Eco6WE zKpFiQY#y64==Ze6I9KtRb#;E^{UR1G@}#y#a5*oWP9yT^P`0%x)e$vPk|$-2LIWXW z%|cf=bF;}IkzTjhCAhRU>O&B<=qECAM6e_LjLoXhP@OB51Yget6fR+W&nGq^H#1>k z5l`~rLy|5elCGqWL{SG(`KVk)?J7uW5WI1@g%W3OE3a^(86<+@i;$xDFd_`~K)&6Z@U zI2RA&=j%qEc^~;nkCBSLGv;BTD-7<%QK8i_cRmX{$5(41VI48m%)>{0Y2}3IheSvC zv(4p2YKa)LAAB=quT9?M?&85cuO@UpMVWnTPx`@%6&>4^7@;@PJF60|=Rn?rd%$@h z;?u7Oc(V}eG9v5hk%O$$qbwwzJr;ZF$Ys6$5l~dUAY1(;INND_s^J*Biso<9(-cufw`zT{m zvC0vL&I8o7aU7iSL7A`9p$*uqd2MW3%U?4t|3qoA$(SpJ+fwmBzkJE%#O_Da>W&Hm zdlHkZXY6U#i46C6sTXOMx~YRN>wN#c`AzZIdpUMY71tv8V=tL`f)5i@ckngUe(Ed5 zBK+NZfx8RW@h6=PuF}WJY$h4{f+{%56O=_dnv*Dcs4MjDIBSx2;anI zESZ)Y!!v*EyxX&(F%XA;T2+^x7h;0qXCECE)oRWV&;H$Ux@u(L6TNl=)73>39+eSFmnr!}$>T*e9B=XBEKis_!; zTk!Kla7`kA&hphKmUi$|{8e$%DOb$ddCVzwhTN#wAvq_7KOJVdGn?eGYBSmK5T>0@ zwp4ShWs@({O1 z%t5ppa13?I7MJ8^BWP@FfHOe9JI{&AZ%@)}kFqjFV&=^0k{dr+;0?!3N*ZT6Lyx`G39mdg_63)=e>dC~h%IJrM+6s=#hRdnez@yMEfP zJ6BkTY}ndtu$vuaxzFpIQ|_z;foq5%H2={Qf2{J|@CF z>?!i(;~eFSps}*5?cmLUA~_>DcS@}TG>}KwY-tp}J*i(bVGXynrA%&=g^=NMnB3h| z6=ozk8}Ky-()_iaKsP^TlN;+dE7WZ18X5tkW{65*wAWyK(78~lhAb)uD1~b|&^}B%) z-F}Qcb0Up%pneyTJHd}``a53KGq{!@CfF;nmMEqj^)^^aNX{-xi(Yp7PD{|wt;1Wo zl^%`D5if?-pnA_c51)`ltj--W1I%p(g)mL%hQ3DN+wsX59Q zmdTbC)oAc%kp*~Kq`H&qt)#PEkmBA@|5*`n-&&?0xi@I{TiWxGe0up+U*bx;KfF1P z2&IB0h)|?9DC-k43L0U~IBklDRbGv;BJxK#>6ra}C!+j*ix6A#c-!|(tH7c5j9<5f z34N~P=xy=hmwIeLpH=v6vtd@GRc=k4U|!O9&X&P!(WkznR=Hwc2Fh-wstO|f30wN( zfZ~{V(AV|b-D{7GYkvPW4GdT(+;|-&=~{d@`2)+-ed%)cM`o1}0!4fK5G{k5fGsme+6Soa1f_oUv1|`g z69*P6z2ibW|A|E~D=n?^ka6i>iAs^dGW8WfZZKyWyIdrOAVJ~_Tvs==W?qJLqU(+` ziSAsA;Qq9~!AaZ{AH8R;j&N+e3&K|qNE{Y8-@r*Kf%gIrw@$x_a_<^u3x$fx{EXx4 z(_F#hu^k&YHY+Pr0TIzLqr;BShp~ICy%T4_EAsL(&cKsip{?CNdh^(aNA$K9z*g

TTLW31WdoXbqkC9HLPxKekguiMdiCYA6G%W^$&)?{+M=* zD_|clFbQ8aqA;(k#-CS>4CX(knBZ3eQx)7fw-BcO+?)|C@R+`cibClhD$1+?D0P1W`oPO@^cwa*LDbKf3rDex$hSp+7^7hPzI*DpM(PBI(oAX zNLq~O@4n4#F@17B%oflv(V$?a24^mI z?k;xREoMI&Ikz>1v~LECUORF7w2NObIB>TkAFn+XRTdDsF4R zW)FX#~n<^k?(WF`jWrNrmjJ;c|`>rtP9Gg8od|FaJOZ*&>J#|b~;?jaW=}(FM zQrY8D!Nr}ITE9k#lvg5mlC5I=9kny>YDK|Ch6VR(`L{C>3tWMcZ4B33oFAFE2%6x7~>^GgzR7}WXI%30JR2i0mVz?Ir1ze~BD z%d`u=6>VGia?7a|O+niOJ=9CSb7M{F!np%y#7gw_atNn!_L`;3mHw2(SZJ6Q^UP>F zGiAAyP+#lds4n{FwAe3q~S^FbCWyd*fzoMqo#@x8T=p*Y;#sRxZ_0kGP zuo+B>%b@MAK9l;j0EN$YJhVUJA7b3D+@zT2h&SweNm%yVEScTssT zaS$A{ny7u?Xhj#grd0F{WtQ|3P3r7l0hu(W8JJ*Jy!=S;@$u?h9LTCmMRB&vqoAX20)wcB>rkVL@hQS@q{h zc6An^kuzzz$Txf1Uty$0@cV?<=+??S`|q%K(6Z-z5Vvok6FSC9`L0Z{v%q4w&$t&G zU~-K|{4s@T$0Ox2$C7*Y!eYF2lEYx!VKm6F`G>vvEp5V~zg!#dHPIUi@Y%M#kG0OI_Y@vg($vzRIci>q5 ziQf$bS^0XfWK7d3>C#L0W*?NCJY`7*pCnC%y3v$5kQd`qHtBH==3_{%4mn&zr@R zb44DM(W^cH#otSxhH&sQQ;OZJNDD+@sh1RD`@YogoCmHwc7`PWw6A}+`4$PjQFHBq z+o#}nnqZ|osB>YL45fTS;mVOVXW6_4muTd^5gG$LDlavbm0L;JAaM<6Qsj?*24U0n z7W+Cwo@&M{_Zd0$YqF}1rmBgXS=D;JMGb_Izl2rUJSA4VkbnT2gQa+&KPUN92nYVW zQ{AVS(a#RoF6ts>+gUeZguWwM$m^{o`rQSpH1`KitA~4*Ff>0)K96(j)IW#KvWVgk zp~AR;F&*byjJAd(NsqLxE@<9UznqfsvXPd3!eL^=(fm7LP{9>-XAKf%S$&W0IB}J* zgng`_yzL%+gvRngbH=`rc7tkiynJa&Wi2gl8{_u;^9t2kBVz=OuYt2|7brURY7t+Y z_BV*oI3j2LH$I_dM84E-&eU(W#XZTAIO0Z=;MQJDPll%JG8MOv6Bgx8GOBvICluGz z+O$&oo}udBTv}WZ>qeMaRVL*mKCcQNrFN-g)c$m?_;UG6t>nS};^XH>61wtljr8pz zCe!^=RL+gmECn%R$>M+rEVHan?~64DWX{q|FVlLIGP`3(I#$nE9I~j80hpM2SLQXA@a+y^ZP0?JGbs(r7VA)Zuv&Y;fa5PU) z5{-}il4_JLTOEmM=1H4Kh*UKEA@{vF7aO?6Pn}4uW>zzfGbGs`>dy5VRn~_k=dk&z zOpk&_p0fLZ@4Bs8pu3;gIV5NlCNwJTWo1ox^lD2vB35#d?CPc{Anof*dkBb`5%*@C=*8+3vVvLOhlOGk`UA+KR2tC@QJBd@Kq_Ju3qKtz;%Q6>6>;OkhV8pQ<%<~b%ksY*t81ErD!H75Ey!3qWy`O8O z(#?@V(-(nl-I}gGqPHd8rAft;CoAyhLBM>gk`{+eS&ion7^;X!)mY)U+LH140KFm z6BYKUBmA>GsEH8$ZzNV%7eV)*tXUsH^Pdd&3jznsn-zf&G->k>P*B=p<(V|df=?Dx?P+`#vP(P$E zh2<6DQtleph^uO*gr;n zC*`z)5iOOa;6d8Y$95YgfE8FHG8HipL8^LEq08KFOl(dGaAMA)Y(PKi-K5@*{=x5h zKNkub#a{^dn}LCe=jNyK)Rx86&@!mP`vYZe=DW>!hLa;CQLI^3RP7zuj;m|y@80aM z#;&9V+;77*A_{x?LbiZ=L4yDraJl5W(^6!Qq*%win6}N*Cm#h9X1_!BtQm5oi5NW( zVK4wF2=uG#*+f%}Mz2&1{`gBMD-^}4pPa&?Y#7ooRNBak zETng&C7(Zqp)6Iuk&hvR(@3AZh5XBSDlBdr=hACi)tOqjuRslpw_t-G+>S~q#p-}& zn@^)#+N}i&`W(~#ajzKJZD5o;U5=yp!ZRtRjlAY(oM^O|q)pdHHByBV$UWZ)*{2=K zy%oXGKD`s#DWjYK#K$(AOlcCtVjbv`iFMtLS59u~=zZ99Q=%7)WMN-m*HO+s3XFX> zSM*y;RrpQg3GerOpnM<*uF(rPQr9c!O&?4y?nY*DH&=~At(I&yG;`QvPD94JlKYz& zcVM&x$6LYsf!7BQqf^+G>~{tCuo!1K9V`y;g1(fV*QdTFi-^3F$ZP{D|C?u<1(+6N zoL4TB=TFU!r~>oe`B+A2w;#Th6zpN*oWl=WduO!-7kgw5*-{}maHEZrJa!Vq6SrZg z?;bD4f;TxolddkD#7i;1Gasl62(^7icH&p&ZYEF$MH9$Y ztirV;ZpGY-rMpKj!f7kWvuocR{09}%xlO2R)RAb1BmClW5xYC_UEY<+Y!*^EHEg8N zvhdw<4GsI2cZfG19B8t+yuA&&K6Y)b^ON-K(qE*)>rrZdA9h?b`2BFr!=V?Ei#X84 zLF(gHi2$J;>$vG>nF3zZ6+*R%zt*rCw1JyWNh6^>ZjHHJu#Z_fA6}rlu)=$gXYn!i|4gtnNe%TbNiN>5)W)f=Vsd_ z)Hr5fy1YHE#KI=YEKH(@K?1Ve=0JNIGMS>OsbxxoQy;m`XLE6jVg#jC4XBM0XSNff zTl@@*cN((0E!m;~{%yW(iqEZBE6j$tj~Tf4(DwIvooRCFV`dA_3INm&odmeENgC7J zhHYXiq)jt-y7N!%HC+t7O81R~&n6u_=}CwBVRI*g%F)163McCk662_T`YTUh3mWOT zqLK|*;@Lu7v=wf>tf6x+&*5wO2sCMDAEDQmj>5Ckc+mpf5jwVD^b4J6$+%p;XPeQs z7yL6WFQIuW&I$UD^ndXt6`4ddr~eM~%rKK8PI#x*iiup~c$Ig426`c_k|Vz`2%E(K z$YrN8G>jpCaUKmjqFacn+)}!sgV!p70+%1ak9gUpY2vxD7JqCwzM_UdCvLwJ!pG># zUE~w&L*_)KF_Y3haMg&syc^^@k&YsB{6eDxQos<+Ek~q4bnL?%s2|9)ZjxPklov_d z)-oQqh!p*bnGuOqm}~FGR#Wf889PRV_}N-8r;&4EoSE6zKO$pe16zSi&`7C|iqJF) z?9$SWFL~G1amOE~>>?{v7*tH0^ubaxRO;`5C7xZGY$qFFs>;6+3vGb4do1M`Mc_OM z=tMAwVD4{QXt;?6{O0bDq%#j+8EmKlXePJ5kDR-N3TP|0E&uu`(w9k<_Heq+U^d?& zm^X_0P*v~i9m8?MeY!l7n>;?ibYQFs7H-Y`4{Uh)%vTeIWM2ohLBNY&~3(%y&= zAwaH^F}q%4wUr)`LYOJk+!vo29(nz+Jan8KZc3OOOlfW<<%>`g<`zaj1abTVW)8mj zUh9_Rn|p3`X_epT=O{1M>5`EXsA6uOR>5oDN5Gk>0_GPWI4v!rIHn}1jJgBq&D9Re zjdvj0k_k#9mpMEP;7Cf4(8OJ)Oasy~whYN(P`5co+3i^5vth|Kf!t#xH=<~Hc8tQNzteu>Yc{piEa?pT zP7vc{ZrcEM&#@Jj`z4=@iVT{gL`)sXbj-5AczChfQZ7bX z-@odMr%Mg{tIFFGIC8S767F@=g()Ux<~uBq>5gYogAZ*|X5rd>p&J`-)PbfKojCLc z)@zu$(zw*yT%0wQfzkDNJOM*m(_yz#N4D`6eM9GnC_mZG=yVC>^Gp3#E`%nHp;sJl zOOo)W&Psfg9gS$3wI->M#gP ze%(#)ubq#XA2Q+YHl@7$w>+d}vo$$4R)XB6T}Jw|2RcOmbvD!emyvxjBIy+KaYBG? zr-0ZEGD8%Oy!F_4gdWg;(JgaXez61Eai@n!6Xi53WMx=_+7loI=Ba=S^s&qEW%ts| zYZw~De-8I`Js+O&<9FQ8Q9t2WlWl=t&shZn#>)hVke5PkCMe7@rFzpzD0LrsfQz`1 zro%PsfZMDfXCQw7+Gi;&O0Bwl!=o)sZ3LCg{Dq$94?j?UtoiVM>zFs(HotCwuHW4G zCgavzYq|SLi-F$=ycU0pT|B#Fcd^xe9W8eJ0}eyP-tih}vyCI{Q)7SWnuQt0{jP4E z1MtHLP%>3G(qF$`eft^36~6(?l{~^WKe5USdxH_>LVww+FxkoVvIg;r_G4Ymy;oUyw=C-a^NLPli>{PBBu$-CHHPsqwpQk@kob1vA+XgeXJ~kBB5m)MeK10ci zAe$#jUPEol{n07^_qZrOSW)|enxR-ms;=>_s26;}?Ur>MDNKcJc3bEBveA*}4uCtk zfZAq*$GEox%d0fSNb&);gA06R%w^b_m!>=JWX*E}Z@|c2(PQpbV!czlxY%PKQagsu z;ekFOq)L^gB?V_Z`}GWi_8x*nz6zpf^UO3KJAEP4*jn9lkbncv#`wzT3 z54;CFNB`y#pI@!vwsV{jJtno2G|}^paIDKE{oEk}-)KLsbda7&u)ZfIq6!}_MRj;w zn;H_P=IntD)|u~;4trtgWqRalh`fZO{pN~Qc+@1YqM?8C zsh%Dc8it)5IU9ttUgIX3K57p`M)J8eG_MOib4xR@0AU%OL%tw`LCUNjw+SG|CX+I2 zq!^C?_JX1laQV!)7~yv86Kfn|{8yX)7{4E{QQ;+zG}aXs<0c34IJ;k|f1mb4Rd zB##Q#R$0n%gVDsU?&}ZAa2LcRCg!2S_xzZ%)KvOdenG-)%KPf6Bl~qZEtHz~=(sI& zXnKAB+FeR`s0_Rto()cCwkRV=Kvp}ST~)yi1shJ}l1!wXM&F8pMUZ1cxgtBe&f8e{ zZP2AqZzYW>oS*?b1y+lHhbxZHs9{}a9 zgVTzmYZXiO%Yg-4VdKTLaz_mC1)P54t+Zm{I%u+g>4od#*>>1@1eG>w3RHK>K@|^7 zBTG9a$@NqXe|I@+cghhe_?Eiryu$q~QESa6TGTq71<0@XQ@BKK#FDT2aK8*A5$N6k zxMUn>@L#-<9^kb(dtI?L(+U?$pft@rQmnmW&&;(=SiqUd z1g()--4^{&@^b)$hPBRh;vo9*eT=JlA7K&4(Yn!zgS!wdIcDZQ=3iQFOm3buw}Pb~ zZbsRD^+~!gAW3oLr?*{Vxw)E@Y$BiT%oPksgDX|N*I}YeE|cZ&W1~tTjsjCAKiJda zSvPZ=uJ2ty-oSKFW0At=&q?y;St&M%NU*^%7IxW?q@lLsus+ezKYUw=%bB??DK*dt zc1dzk3#dSCOBjbP#iCRZ+GyJqic3SS%uU>ZB|(NnB)tcwD8+tygeDn06-8ucuHu12 z9R3cmU*CI2Lf@~-ZyaLQh!teb?tp#isvKNSZ(vJ?20k{nA5US}nmi#DnWLFQoDmCq zrXMjad@`G@%C^vM<-erhYW=+1&l)H$Z<#Z}g#%aG&cMWWYqF&C=H$j^^CMHI#9}oU zQ)kvaWVzjmj&xNSH9k7wBz!aIpFJqXM<46PJ)^4kt{f+}i|nQ~&Zn1X$qhs{Nan9KvZ!bF{=<7G+nE17)9t%4#W>S;b8N@(cdqLMO7s}-97Dc4 zZPsg+2h?ol7cr7wPfq9)heio8x+hDz?va^45T;#q($oB50_i4cS*C|emI-|S@e&Fx z<0-e+t+hu@j74>8W0u#(-MrS85()t*p3gz#D*j+^W;n}aGLS~|aQ9$`%*aF3?LjoVmL4v8!LH(XXpRo+Ga^6D*sq@kQC4o7LTon-*s zAqSz&wNw1Jsp{x%nFe!m$W5ho7}-@X>M1}q7{~P3Yu4Hsek1k5lDfrRc-2OlmR2F= zSD_?^TyVa+IYx@2A!|KUQrU-Lt;HC0uO^7TS;jY_cQSig`qJWkrOi#He&8EBG7}|y z^6#X!6C+p}UYqH-1;Mo6135oBqfg*^7dTq-zj*9jlrBqVAe>x-?-YYGc=`yj3tsa$ z7bI}$uIe}q;-Pl<5M_cJ@m2 zLp29GSOkqBLYP1^0@Uz57oJ@7ls(i;G-^|kLvbjXegy)=8Z)8A0l3Og7$4;6;4M|8 zhCv!1{ORzS=!1_+;?UBWaKk=CN@<~~PUup$Nu3_?kFaP9Z9*PjWPxa9+!`rF_roFT zFwLs!qFd_u@4u3r`Yq5(@%p6vVotN9XAJ%DW)DgtbGl;k&riRG=L;^)O`mFGXtUBw{YIxW+c59Tv(Vc<#Uo8pTx8q2~qU@jyaZGL1Q)FEU z*cR0K;G@QvkGy?HF4Sf^gK1av)nC!-BLpkGNDUQXJCK(LJzdxUHAkxIIu{%aOs^2u z(j2P#(BHO|Bf(mRpTuP;Ne4USu{Pt7ob=(m)!=yPLvE#9ZmBwBket-ubV&Q3s5?JU zb>d=eRwMn&Mso6m^R|HVmWA^+fa?$msfphm`#yj!Uq;L~22qZ~B+a17^O#Ra@&S+7 zvI7aBlCaz9*E_zz$G7%LL9nYj6!y;>kD5r_wxraow7dg#qx8B)H+OAe!<^5`EzKJA zsK+gY3l(iPr<4V4>Wb;onzCK|4;qz0iQC?DlJA#=SI(jepU{LkPfyWJU*hsNPO`*W zd9nUx4Vm;c%l~rxnHrpNDjZH0Vz*ZjNFp40YR5(HDJaSccw!LLG7d))^K>%{+V65@ zNE3D;Vm~fH@veNKZk2Pe<`~)PS}XenPfEO-kjJ{j-vVua!{Nye5tVV2WU$haZ07=feY^zYazH6$f1g(hS=%sG{!Gar@QJN4)wppbDLNIuK64 zq^!Wt$LNXp!ubo3^y_;h<|Mi&^=kf?j&m`K7ncU_!G0o_rq;i%r`@}SidzWeOi49M z;!f>~&R=G399TCru8xf5=rvSN{pp^@Y2>-pOgPT)0hzL7<;3@bGl3svzd{nT&$7#x z#PqF^I&g_Ti)oyTY3U9}X5X8;+!}{vDsO6QnrFG|Kd>pi(&89cM9Utp89n%Ul$sYS zY-QGk=_{o+6My`Q?h(yo*SB!iWP!FyQ?O*U^W?u44>wW89_H9ijJ_lWuwI5pI`lcN z!Uv+I;of`6WdyJjdw##WYHJEUOKPI|di#^R1QJ zcZl1Y2Fv8vxpF4+e^!nbaiy?#AfRRsX4Who07&X_o;tiP=j!ar#p`o4ZI)8{&9eFv zN+pz}X~!=74`15QpH;zq?7k6`tCObLlZD#$W9ktOMfKNK@+WQ%=r!|;vE0o~%U>+0 zODL6lvHU9b;c8k{YlPyb5?Pf;B7&6hFS(}`icIzb zY?Oz+po=;>ZUkJ0aYf5ZId*%2sGOpO84w0ojd3wL{QfbCYeX~!N5Um%dT(fVvuR--QZTjs9ABe*?oL* z)FFg)ayuxxI<=E@WqLaXn09CQig2GM?M>e_qRM}dZG;Y5JjiRQ=dO&$ki(QNUw`1C zrU$~LNEL8q(x>$6kCR$>HLZ#OA8c8oNqyyJeI&E5%LJ+6N9$Ru;=bt0+UnQa+CsD> z91y;)F{qe7&gdPb8nw24vMLjq1m>-7?>I*r;P1UDcm3%LUjW)+d5h&&(XPW%TceC zc4gbkWq6%^bMc#=!=i@SI2qbk|av>_6^a39=nV3WR;eZ)ucS7cEp9(|hUeluG9Ano$v>QvQ>0_g8d zWiEz#sPwiPE0u=mvS~HDQO(HWUqRu`2z3+s9t;?TMM6LfXhK^_bG!79L1uAJsLBzF zl2*_V*AYW`4UAwV-bLlvs=RU^YbxcvYPUJLC&h!-sJW;o6}oCHyQDCA%c3H?L0$Qc z8%bsTkoZ|VpRQ4&?5a^Tur1{KRJt?Q5#Oq+h|+I2*gYxWgxrXzJPJiW{(*^1WK z;Vbm9o>RZNA}MR5kizfLxzE02_KerEjw51N)cIeloQoLR2!G*T#%Nl8MthfT**DVXs9)i@ za&m;*u8AK)(-(1CWF2{FE%W*AMOwe$G!og`_So1?M!rPWH_F)RRPNv(`+zM{)EnR3 z8u|!?JfMB6e2epMmD#L836THPmvNua`RR9T!%4}t)|*g(Q9*+93I0J)Amg{H9XT#w zpyST-vHctL&K&v3pF5lDz&GhvF#uO|5o1^OIr6dT9jzA__;g?L_>~3gd!uI`o8#8i z2Ls@BormCiQ~Z##Bm86Dr4ZB10J-Dsm5l+wP1a--E$diwmFY-I*5NpW(>^7!nvWmj zSfJ|o8x(u#Z`SsvW9tR(GQy4M4V7!OiK6jOa9NLx)qK$_4h^h6u`Qq%SQ9R;={59d z`3GBVgcf(a`OS@fleuei#(cZLh<$&k7=n7yPIla(ce_9wrg)(@Z+t^xAA0X4_$dak zZ|-4M2+j{9MJmR*S;n@Ilnk#WxSHpd=qh>qz&Yj%F^5=WW$x?Jmh&%1V~7%$ZH zgMcla7(W^}Le|h)GwK8C_s)4;%6bk!J34KI$hFP2L)S`(p`P<>_**5Ap1m-xiPq;aS;Z$Kn;_GT-w*`LEFiyNJ%s_wB6pX6?AHzF=FE7R5Yk*y2HbmO~#*M_N!uH$dc1A2K^fz)?as z00;>82~Z`65t^__+Ub4CYiQ>)zd(!q}GlwV(a$lT< z)Am1w-+jKg@NE2X$@Wood&S3&vS8u6AeGY?HzQXeW8=Tjkhj6nVSW4Jx-z(n>4at( z=0Z$iwAf_%GFaL#d4Y(I$oB&hNbVaw?waI4>uCQM&g~kbwwD?p_RDEY@J*iYy6WUN zM#(^Zhr0UsQm|KnWto=}=XXL$RC8K*>do zj9hWnDg-_nW>?47=7q9~hCYe6gTKSt^`=wnrj0yi6am4cwu)*-n4j~VIey^wS_bIfL;1UX1!pD7>A#R za)5gF6d##{?rUs%MoKcyo0=|7!T?RPyW9D*qHFIb>65SfcV1BrVfFMlG6)!ds+7gw zY~O^wQlPD1`|7CIBtQ7kV|l@JNk9HL&378Guu=qEIE-)TT^TNWiEF-%D+f3_r+jTl%+;K%^?R*iVIikx z`KzEWqN49a$5LSXJ-syqSYc(6Hqd|HOiu?4oJ$OTOY2naDM29c4C>Z>yyuEd7>}QPmv#XT9*)#jefdKb?9Z#nxqLp*0q!v zGuaWGEQPa-PQgwsQ6ghpSIDx;{_R{OHLp4v~{DyGe*bZj+jd zAW%>y*@%co(rE4gp-7+)=+b?nR~|1xcabv9F!uoUn?NmEN~x zzL>0GZ8aGHk8|?!%nf^vR zEoe7X<-Wl#l2=lS;zoL^e}0C1bJm)TEuG8vA-Xpe@6ARL*sLz>O_c~>Fh^>3puQ};%$;zc>UtXYIUXWZqfV7gy`|DkxjFU(=@A*)e zA1>1}+AFaQLNu=h$atP`y9t5ntMOW@+4Br{ma8M~acPNVi^%i7Ne8#JwuzNq1zdrKq4t_MjRcTJanjI)#%23&Oa@Uy$m5G8JHq=So!ia3jGtU9drkt*O2-Ix>8p97KNxP zGehN9ePZ@vRG+Vfc)$YOajq+f+SuQ58demDkE7bqa29)WSai{C{M!{%xRYv$_$B~B zdv0T}@r*_&P&iQ<7GTyP8&NpI>d{;agFa$6EEYJ{@3Eb5p96(T4YYD&XwyC z_h#{{QP-k?+<=08!Jl*(*yQoZ2su0D(pDbz>iE=O@u_5SsXXC|7xl>o zk)I~qxrSH{ADXozs?27e;NXJ)G)CWi!v4#iFhG#@SNDf#&z_p)`eDgavcoaTX_2p| z$qAmLc>3#D&Io%N@cqi#dXkNtOIz>8-#X*R))m&u?~p_WO!88{&vI>03S zWJ{bdJUQLh0SezK^u3dGdg!~j$gj9)YWSNd7)wSHS!DC#MtHD}H=^>%Te8^fR1YD7 zw#|M@(lna+kG6Hz#n&7Tu2;#|1yrPcsJ(aDo=-EfVdJpd0+8~nfiE-r?)xe1q|&nb zhN86P^>^>Qz5cT~boGykV^}7-j{Az&ZI5_{e^LJbH0J*ai7(wY+<$>t`rz@r}0_nm1XWrHMPQ7RHkJY?}`+r2NqKP1+45K0tQb&Io$o+o- zc`HFQi2sE#ZU7DcuZ^x5G)(>bAXUSf(#4=#lreOp>yH?nO%3+|0!vS zwm=Nv|Io|h!Xr3;ekdqQ@Bg1iwZr`yl+6EMEW{7UxBr7R-&m37aQal> zve==N%l+53+=K%BFR*SaiUHPtZSBJ-Bk=!ee}PGqo&Wr;Sxbou5&!PB0`s2)I>Tfd z1u-M(2MP%=Vr=g4xp&7oP*pKLgsm7!9V@IjWd4sMY8S1tC64s#2Xd*aevGSBSHgsK0DN{l(&7t%pShRJFd4rP77ir+ zQ6-956MO>TDhkU#mNW~264st|M-&Zd$YITNennA0eb0gy{nY{tFQLbtd6a25FPy+~ z6(qJ2w&mCaG2?I{v1xpZ3`l0THu&)VQFIUUW^VUv9tmaOpZ`7lx;(bmQvfUyH3_MUR9xA; z&Eaw#J)a+=NcMo5ajgDCeSiBo!zwWWXGlbdtCFo&dd_R=hFL2CqHe-BX%AkO;_-vt z5VEx%WwZ5JYo#~lp9CL9j)i6pOvf{40I2^*?f*}o*}*%F(hCjxKau7u^wOWjjJFvS zX<$R0SQb+lHY}DvXaFC=cMUJ@Km(0UVG;U~;Nt*{Ym=2^h`WLIXJ5u9#moBK>Q{LY zYOP9%BTDk!-(%jT^TLzT3<+N%w@$b7L;|OOc+89f@2@Cg2uG}~g>A5o*abyKrknQ@ zRe^tWy4Bg${YMZ7d4*pnGZv|5vSoB`1Q~~?V_1@ojSHe z`SFD~Mx;@49+JpXzB1M3d`F8Tzw)gR;J7UWy*_@J6#(y?4RBYYOVRqd8ttlRxC9%w zocX5XfbWmd*p88eUPWah$V&&J&z;66Za6kmJBNLr0}ev9^c~*9QDL#&9yx+Q~?B8*@Kk=_2)SOcwwSbQ7!^M^?ldgVkLp8i*lOs ztgSi?uUnO>$5_(L-_dl4({e&}$Eos(x5xa^HkqO?uTeS-UVF$#{HMi3?#y`(*AR^f ztvHUf;xW#f<{^~B^JF_L1XhXZQO~PtDd^8O{V5qGZG){mG(6YpyV>Pw-hf+uMui`p zu^_5Zs!u%c{cOfw8_o{a3DdgOC{i_9+Q!eP10D^&bL!!~mOQt1J>fIIMup)%q}o8H zz6%F!(_*thn{29CG819@vMzF&I%6NAoWk5zldZOW0~p6xOIOE@gf`=?owlBp&2;#B ze8Yvx+}6{BM90l)c#bK;0HApW=k~!{ph4_)9tKuj-61zu=U1NAk|pn*X`dQe z)q0y?;TwxP_~%LH>k}i)Nd?Zb{E9Yx{9@I({a!@1Y&C-L{6CKYw-}OxoqrCQJw?TP z$DPv3(~fjWz>6KR2lwS{L5Jnrls9#}f3zhU)it63_PFHTq6;;@As~q%7|6Y8UBQ+t zG>}L1oU)I!4TPekokN2lCguoLX*7auAkK@&CYG+w#Z$#d~Vc-;a#~xzfy| z3hS;~?XHUJS2a88zsW-j!NML}3AwzW$1sO<{#(T`kYOvxI zlar&Mfi6u6`%+n16hVe0?Wg9N;xI5_&HKxV!O!cW7X@!o(gGhPdSa{UIJ(#0&*pdj z<+R2O@(tkpt+|_WEv)smq5Xt08Z!a9ua5jf~U(pQRu#Y!VYUFM6(b&al}w@ zH5z@#1U>Z&_N>%8B+dh>|7MAx)2b)djRg z^h>-|BHAU*B%odjd}55J8d%DEr^Hh4<7eX0tl6CYM)baXB0InqH3DYtbkDQjmWJe3 zoa|8X1O*;7?pmB=L<+(DF{(`DqBe@`-!HmAPj&26d6b8AQwsDN5zGRzc$s1p z*!X1I+$-*Y$EXA%#VY;;C;}xYRI|p$b108GR~UDK!<>&K!I~#1PlNX*KXu57E2DE% ze-t)`df~|~BMbmsIAz!}^IXS^T+$`MF1h7hBC0j{1|MUfRqJ4B?+?MgUU`h+}Y_76UZHRr+VOYPrtbD2^+5uOOED! zT|c`h`;i0Ss-<%tx(c*$-hoUg!KC$(a621~eB%>V zy;cC#>;iJR(qQP%IYh?@=Ins*H!t0cXR;<|tYEj+uq8N!hRT7?1tV#tDVY1S3{~Ym zU8FdsQo^bHbYul`(+8i>6k>&erzNlXYQ8!*iSomb7E$>A9lSt1;C@qD@juc=@8 z42*zK{W=yBguCenXGFlFNy!(nVz(?2@5eM4ItOxeV@f zk0h4o+zP8aRpsRWO;%~ThQOQS5*ua>P@N=5;eZBXbOZ9SQM00cz$fd@{&FGSq}%gK ztb*Blek3Z+6r|mhrjtn2jTa?BUo2*_6*CGe=^8DQvclJtDtV8$)P3A_QuqH;7CB%S z(Rl?8609`IHl!8YnzoUs2}9hYG*DK%A0{Toy4r6Y@Vi=+GRi&jH>0P#!9ZmKBB-^z zo~9nGg<#*|5;LzV!~RV||CFt$diD>+cDEJSc|xpvY*O^n{i_nCskSUUMz~eik=CQ- z()NZI*gw7HeX#QtD*qlL+i_`Qdo5iRBwsNL$*OZxerVepi_5x#>9HM9#5Ru5!F;QF zphVV8ouW}(H>0--|3e^jWma(0D z#TtDX5CCFX35SOBuHI^t{XnvvaRnU^wa!$%e$|-F+d~@6Xo+>`!LOMDWIPpS8@OH5AZ%CduBZNHZT8F6S{z3G5=Sj%+OsN$-4}R`J zC|gdY({z4Qzx!H3BDBVz5V5S$?2sPn5yB3oL5|3dsRxO`!Ki^a~jmvC{nSrQ*~Xk61(p&J>SX-_6Ca;^L1FH}f+u8*OG34# z8t zYesgv>E?zs=Li3Cc2F){w$yNS0Z}l`C06~3TnA^#px4Vt@!QyX@g!v9@lQxVjx~R=?a+* zPnHYF9Zzs`M87C?3mPys*Pz%LO)v{e(NfeNRCT?-EbQk8%U&0GYk!uk8f!t@z1)bc zP3V)MnLf=1ur`O;;RV}PDvJ~A%s$(l6_h;LCo%s}P5yHy#k5pFo)?U4qw9wy+kx&o zZ8<8BM+UjftD`Y8bWoF3325uZ}|SpGL>#( z#s%DiU^6l7^@K~aWHp+Jd^y;LUfzp?dy%+~9PFk6@CcY8=*VVWEG7&paS?P-p+){Y z_88}B;!FxY&qW05Du|+uE5}j$x~5y&r1W5p{a*a}6_Qu+DEbrGh^bes8D&kHA-*Y{ z*WrlETbk&%;s?BLxM*y>05K)A7=kB`aaQ`lA4nuChZw_^8y{%9V~Pg%2c4>_PWRSX zYrZIC18FP}qrrMA*=-Cnf(}Dk6pislY-`%{x|Ry-&9j!g91Kci=&WdT_>aH0fCqF*!}Hf7IzR|pnMbyIbqlgJ*j}Pg zIvV`s`C?0%i2BPNwa<_1-GRJU$@hTWV{{D`a#^@HVLQ(kP@5)f+Z;*bpLyvq<+H>< zRR1|CiTIT`6<43X7=rYg2ziSZ4pG96Lo5!$6`FKMW3qbF5jZ;FShKj8q4PK7IBK#4 zejC8cwvLeJL^70jb<_AmiUy0rai=u~S?lwqsRCr0ZPwhqXeL^A7c`pAXOprTBYG*; zV)GSCa;2F9^_q3Ygnr53LDVh4Xl3*b@(()IpFWj8T0n2071KM*J@EQTXybCE+(LPt z=RkU;y`*^f2a$l3?;?#{g=0(RzYBMPGI?a#iRzN~Y%x90Qm>NnZAE81WstP}^7CqU zoX9R=@pB^0OJ-Q?40$a4`QQRCmyGfQqhF_8wjMzguk>I(=)|I+5l9Mo&)p9v_3y0u zSvda9QZ*^!fOB=_qJZut!*b{2ovj}ootpv;Hu9rdt9>j!t2hd6g?)j|0a7LKo8~3| z4Uw_5iSZkSLc4x-%FkzrB8YZpZuAr6O=(}cTCS4!o5t#OSj`sXlJcBcM=xNMyJ#_9 zD{1q7^k4N59kddl#gcN8N97{V@Tzl=dx;hv;FG_Q+@tX;+%eR;&Bmsc4g@MmN?z!{bb?_=Z z`9x$^K<6Pf(krDAhsEpwg;f-`jcZ|%nyZk67L_j}d30$Q5Aw}jaXi{mvTEc)J6B5L zeu;8W;i1K&I3G0Qq!EKea@dB{5b2pRxxGgWa}bjLGP+jL&1VWEjI`H}L3|VEL|oDb z3Yu$!gsJ(ORr`G8Zjvl=e_EN`Djye2>X7)I}qOrIfUB}1>EHpRn90IvM z$(lY&VSV$XQtf`?GH(@M{O||Tah=Ns7L?`mwGjong25Uk5uF=f%LW>=PjzJa+?C;P z{U5(2h{&_~^|s6FLBAtZz@Pb34u?04wC_qkcS+rpk>n*fp}n^O?Zqu~Db}8!n$it$ ztY+~YSd=dm#&xc#m+b9?y3~RfIi>f^=J+l$-sTQ#G|aR4oV(adHhbya|Su>f=)4L``(wJb* z@nK=(glyb7DS#S_1tfRpGlx)(f}o0gbd5vvmvoKcEwm{HGdtfM7HtXq$vIAYs3(DR z%>{Buf2+aJd90;>fe|rQXRyY7+l!LM97IHf!5DR`+Ae%>F%KZ(E`HHn-L%k z8^s`WLVB4o_8^tL<04Ss483J}8x)vH{wRNdE%lXZ9{#ZKD?_mAtcrN-7PKrKS|I-C3hD^BlWTj076_f- z2xU)9V|n+!gI;vNK6Ls~TDx6mdebpKYLd$>YUPvtns;Yi?TG5zwxgJMGT~z6BFRzQ zag9OqH>s3tt{GeN)#$zHu%PqK2)8m;V-2u@{0*HLdo?1cHNmMEp0cS7XQTZ)(I%sH z7aBsuHcRuac;n1hx9OusmfO8%6!+7k2r~ZtoNxB`nC#)Oej9<{6#1W*#}1d0VL;9& zyB%BHpqeKXm;@lNHprXTs?_~|YYw~Ze&|D~$;<#L0c>?aR*Ri=Ud@&#jI8}Qtbl6s zh_@eJHn{7If87?Dvo|ZhQHMEsZw!n(#dJG5;ZT5IgrB9(Fj^5A`KA}FN^SSxSlkU3 zUQ{PksFChp@4M>~prM{GDXsvoQAIXy%?=e{S7JmkidrIs)7l2N%!9w4;CPQr<)c_f zZ%>cSWko$tUWrDrtYi$spouFU0`!*VsCx`3G*FC5#YqEh)~gBQSpB4mpBqN!kr3pH z0t%UNLA1I!DB0#o;LxT0j*gG~q5^?IX`k+}CFR++e_4c^cY>*rM4LtIE+e;DlZ!Ru zXxi%)^>LU~oT+q{X<4Mrs7p!-SkP%MHr7I-BPIm&_7v+Hhy>+gLgBjv0mAd-?=TNU z%Jg(E93AEMyQ+-nI4AgoZCEdtl&3rSc-O|H^us>v&=p0j*ljzPLm4;QxirI;YQac! zh?MN_kh=ypmFn8;ET&zI5jimOKwbPVX4d(iXkd(6950sXzu94k^a)AkMY>@>`P1k<)z`;g z=~uKd*^J`R3{!ns@7Hl~30x{fdqF)TCWZp*X9E=E86^NTX)obbPG7g+$WSIslSNCI8gO;Tvcwl%HT!lbA z%-BBTgmo~czm2P1fnqRyvg2|n_WMr+HN~)Vd`7G|6@&B-Ax%*74bb%1q;*9`INl+@rX>R9KORz>sVZ8^_#&0U#Z^|vKlg?#TE=`yG>hC9Vw|QA11F7>#lXA# zE5Z0$ZVv-@0bd=E492g)WU%_)X>s2Ft~ z<&>@NcllIrPCZ~(3~-irvi5?OWqMwQ+8pX=o#ZOTHv}5n5JZkL4iJg-_w}2UV{$+g z$ek6slf`;52E&d>Ozi|w>qfIe7m4|VO^evxAIF?W<>a9jCb7Ng#o8>sPHVtfbc6p? z2Tm#itX|i=7@#MUnFnLUI(kI5UVSvXF}uzL19a_WnO?*YUxF!=TJ|r-kI{|qrQlD| z6>5Kzea|aA@Ap}E)9lw->wUCij>l|n;d$T=Vsj~bfLT{B>zId!=wmy$nVK}T>lkoD z%nD||eSS9tp*WR&fHEH+e-BaZ^>%^}AISK($El{zm3Aut!;e~ge&#l(>PAq#rv}1j zi>f&Y{>{l(sDUy-zfFC$6KcbJ&E6bWvv2Fecljt4z%*<#q+&T%WkxRmB$@{OJ23kD z%4dNWyd>vn0HXY>LC+%E8GB%|d{rO~ndMvBzTma6TbM=LDzR{cXR}k@$CWwh-DCm9 z*HkEdkgR>aD1C(fz7G9a_MMd8ZTjj#Ef3wGrZ!Gugi;glTWbv|BhPjabx+-V=VDm- zn#|dJ*!HvvsI5AWKHZwHcK*wz1|I4P0uP{@eI!PR+He~g(uNEkAn_`EDosB{=JUQx zp6HgZ>n2ugoP=#_FOdJ#Qo6ig^iYFJPj}ACB5U8vz%O3?h?ij1wV;;2=;x1(GYK)7 z$j~?O8$bTW^?iB~d4b;fN8|Bg1ug}o6{ha{A_8XL7OvbX7y7-Ahes<64Ml*6oIMa~ z^khOivv_7}0!_;V^ zHnzgz9NM8Ma)q;8QbdZ`GZZz|GLn=Ls#V3TQ#u~xR40^?X17We#(=BrB0G$9HD(NN zrHLca`EqRSapph#6N=6+CVdCdmIFNbU&tGj)Ahr7hV$`hgajY*jh8#kR0I687t6b8 zEIWQx83hPv+!(a#W7fimvh2aytW`_1;gf^TQHPH8*Z)N&Z&Ws7l(s%T;;8|+9w&T_(B}&up<;d*L z{93ux$C(w7>Q!rL^ZD~eX;i76=K>K)^lBJPc|G%?ZjZi{ef+wsRBxEzgox%yqcX1@ z^MIE-KMRY@XH9hT)D~-dFnaP*oq^ND_PJU z{bjQ>kEP8$^@e`Hvv9REkG|~|W=1|FtWsBby@0$E#YnRbV9sv|bmV4srJp zo-VM`in}thFO>xd1r;WTo5Y@c;5aIqFrTYWTlZYQN0nkI49Hi(D-(jR-Ac0jvu0dW zwv{RcCLWh8C2N3zF4tU zz9s*|6MrqxND;0nkO#OVt8%2zk+&<8`a%#Wb}6F3Lbz*DVT&Q>7oqhkflj^z$H#g!Ts)foM)uB~#ETcGWfGUa)%`X6 zCsmqtdf2T>SQ1Bm%@Da!8EnjNyD}uDuRG2~8hxj4`!jwyUWA%;rc1L3{zTB^z_2Mp z&Wj^Pu6T)asR0OT{yKE8SPAy}-g*?W@NLoYf=_{8r|V6zDzGfD&H;bDb&qT1I$=Y~ z{pFu427F_K^z2;v;M^?DY3MN`7aTyprt8Qu{5p!`aAH~4th`cC`q1(a+dFUldxbD* z`J;KvEm%mE&)t*yJ(bTtk&EsjPRJQ)lq|HAZfnfQ z6egi=IuVehdY!F9%RYJ5fJg2PtB#Wi9Z_j6LA2*1Fy_~S3kpoK?C-2nSEkxrXsSFcV&gyH<`QAK}rZtEPfpI}eDa!{m!lYe0 zQ&sq*Pj`}cP31wAix|{d$&L8(|cUh@McOTHIAdnML z8q295)I1uZ#P) zl>uy?;9d?C2LZR0%D`8nK>m=52GfrnpC4Rx&Q{qi0@D@~HP4F=lag5{`vywNzUkB6 zA`X&T66tmApap$ZABy&$YX*MMqXzP`)F)Jkz^FHr?Amsu4!ig@%bbayZADey2Pv9# ze=0@m=kVlOm#yFxaQyv)TtR)*4{521Oahpmmwa|rPwXPwGKb?Y%O}h5OZmgK4weh- zGCm_dsd9^O@o*#~XS>Id+xjyyD$6yO-zDc$FWR-dP^5b-RaI~(6J0*vhwbn1H7I8B zlh*lCkUw(eg-4aMx*%$G==GD@zr<`+L794JlZWrnhksS7j=P3&qj{z?p5c+ZgAahs z;@HxlrZXlYq_0*P3U3_#oP*h>Mw=|X5@$N=VoQE##w_RqJ9lKj(W6IV}Ebe73DulwO#Fm5mST4*qnh_kf}CUHAv2rk5v8o1V|zjuE7(2E$cl#={6Oj|b7NB?YwPXunikSf7cs{|A?bAMd=E|dlD zH9>e8qwJ>;@vihnTlHPZ#{(zGh-;pthv|Oh?mN@u@-+?i7H8$zJhC>v&K2`pe7hG^ zbP(MBZ*@SUu8Et@tyKB#@-7p|#@8)~tLm`T-%n@|0{j=z3a(`X$5KWLGFz=O%3es9)CxUnpCN(275@u z9}YshhW#B*Zu^bMkBaqE(B=9U92DMom3jN}$kcHm9A%|Jv0YTy)8UVCN_KK9=N@OK z?9-iQ3}0<5R6X=W0>#x;K5e-Jyr$3Tf{z&gNv}c!x7l;+K!jPe!14}LC%MeJdaqVP#cD~;J z#?CFgc=4n}a<~Tyi%u??P6eQ#{x%NVE;Yp8T#^~n2*1*E`Q!s&KCU;$8P8!C$01XL z_EjYwecD5h-@ME!PM-OjD#d`Su|2ix0w15SC#y@QG*+MZh%Oglyd(aqH2HN(&(8nGc z$tr0aX&i-|iY5bbD#Acos`K3K^f+7YwT5V0ome7IqOT3MX0;5QwtvEXA1hN_eV9f~ zr^W~oB6j98s!0k}8+FpCCp?fitRPHKVNe>!Qrwp`Q6eP;AB3dQ;9||Sl&L%-jYfJw zVH0~$K{BHnO&ufFDM-%veMXc(iW))s2+@Zs+eUZCOXCE}Fv(P*awU1mMKey6#z`tu z$e)zhN)JwvhBDhTlz;YcY+vJaX>20O*24DA0^>|+oJGk&y_{VjsC1*jnxuBlk;b{k zd32~Z5s zX*}ib9Y-}vX){>*j5MAlE7fw&3PGBBT$@c#UXaF%Zh!q5!4Q%wmA)*ES6q={msT}W z`D@bnYijvIWCgU-58Urj`i$4vTFZFT(au3Psz~_=iqY};3;3b==%X8bWYI?+edOQ= z*;}t`w1d+4SQ?)gpCSjfN%}xr?K8sk zXT}Tk@qaRXyk;8zPQRt119*JKH)IBWLx}l?5c3To<{LuHH_G8KewM~BBtf&$;RxBn z$F*WCW4B|TQ`DQR1dE+*8G9Lsm^y>OWYXlOAg3!3UlXad!=-jk`=YM-3F#$_dd&TI07x+=`OmIYv${oBS16%Nciw6749wFJr_X%0?oTSHR~ z>3?jlA{ie$#T+WlVe~XVX~SEaTG+-2X%;8iSk$JCQfZFdw~a+@+88Cx(TO(ZMWPM< zP@;`7(mZJ2Hd1Ptd1x!*#~vEm3mHg{he`8r+I5lL=9E`|ln(7R$4PU%Ix05hv3r~W zHz!JSk~x_S4|4nx&Yo?H=e6gfpmO5fh=0Jkk#_86T!torIbE7F%$atQ*AY#TxH>6F zoxM2~>zI|&oNdmr2kt#~&ZpFdPaUz;H0P#YXl?6%nN?&U%rqBB^9XYx4uEWtHkIrn zWh!Z$i>0~5T*{!oZD6&j=s|;Km@A2Es>~iVs25E0nDn}IUjTgOYMc*qwLKNJ(hQJwMpLoS zzupP)nXAouX|5srMjegiU+h=Z9+N*TnrH%WOy_TSP)AC8)Hl zI#?eJqx6Zi_s~uIpJ^T^%_z0o!+&dcN|3_7rin73cU!`m(i9BUqB1vQkZ+mm8Sv57 z_{H2P&Ew4z7#RM>#sD2_GqOu3!8py0qb5$I^HCcu^JMfFM-ybHO7k=)+~|(j9_}XU zHbPa-l;&ArADZh_nHAVzndeZ24W@ZsdSiM@u)Z?v#PhKr}Cs=6}WJCH69$ zT?YxnO@wUl$JaP-2I>{)=bD$H3vXVojw|ZuOq#Z@5i?!cNocW&TvpHjm}y=u&CTW( z8!r2y;@xRJ^9u7?0^zz2eEDf=PpP?8nm4!+*pxlPkZ0Z`&EL~Ddpa>CRlvk7eh%%} z+>K7N*(}XlDOW_DKI$qIc7KX?k59kNyhECIs@0A9MA`&0-QCi>hr&bBKEut~u&Lk1 zKd{XEl5B@yxF%|u4~lFVZJZT59lne9*MKKW<(<@-Iq>Z z_=0~x@O~oAPtDJe3R7p(KEE%N-oi?XVzhURRTm~WDUpS{Z~E>d3|kC9nU4g5Q$T>gFD#=_G|3 zh9&7EOIkf$v48J|GO)26Y4sv`;hk4%@7cyDd59zneU?@KlL+esgTSqPY4s%*%~fXe z+@?6$c?$z|0aQRW0fMAZT19m1nosS|Q5r2%+hg^Y)&N?~%vK&iN*u|u24eMijPitH zk?4dBm}w1`)(~|Jqg{r^j5Q4HA!|5;!uAe|bFCiBqJM@EUOe{O6h>) zQ<*3D*fCa_WZkV%YK=RsVYTmpy4Hc#7}GjPS_dmTFHv=B$WM!Pc_EJKJ$-%^ z4hz3doqsib>YUY86;q~TLB=BFZEQD6DN=33!T7G6?lo~7g9WK4D2(sA6lyo;keWPb ze_&D3oBe)E9g$0K`4%jkzhL$Bd5agW5CFgsD>J7rP84uLQ*r^V9?zY=c-H)Bi82e# zm#OyAS!CAOe7e|9?aNkYk-G_SPN5cG6U5o<-+#&ZEI6g={71yA^I}GWeONyo)$eoe zE28yibXEuGQyKbJqqAZ{*(UDKPp}$F6;i*+fc=Nm?>PAAVjp+ne3|c5$T~LZY;@Zs zFl*eC1>M8r?Q)%#uWIRMKPdY;=3lRf&F4`&j?;`s)S2Hn9;CQPG~gXlsG|i&V-X0l z%6}B6^Sxts)}GPmoDQsoRAldfPRW2)4irqK`?LEI`wd1mpiJ@(txY-zcN|5f6^3kT zHmz{V??tHn81~#$?sMwxe|v6DBxQewSS4zSq07>PJ957*DqzPZO<&FnL)`$a~Z_} zc7Ae(g9cx!HXm`8eE6JLBCEifKuq&C!npW?ZE!8+Bou zy1RY?mpX|*5yhPvio}#;HG{DV%H2amHHJGmq}|^4M8`OXRUE0CI@2w2lwDdDP=Cvr zigj!4W9eo@oV{BaUNaO9P$nIEGilYeeUvo);7)F;fVaQ)DAz-Vt*%+Us*aRErt{iTBC>wRZBF7?cWjJ55k69;{6{0BsiXDQzm+ zNV%x-V2zyxpX26jEOJDOKN?SY&3_T8A=-vZOEpB>OV!cg2Y1G)?HmS1Ox|bU0|{B2FzM-e6Ors3UtNZR_3!X5xmr zP$x3p*~d$L)Tv}HmE_}W99BY8wddZ^3D0K0-am}|5e%!V7F1iiHA-|=-)iXB{V1Wy zN&J^;8>nNGDXhnxCan42OF zCMDhJiDp7=bfZlub>1G)PSj1x@i?SWYlyiFtaO5;ywtwgJAY`;t(qnoNsXjK%FDLD@X_C6G4j`?Qd{+zLI28^47~)<;2_9Y- zrc*pnNO*^=XQ(X=q$Tj3+6@h%a3}Umn_YFpi9`gW)4kKq*~uh5YnvK7F;?syWprX% zjKvF`Uq@O zK%KCvZ?LavnII)^eOxE%E|HF}NH?s0WhSQd-F^iqTnmMS(_#CZm(k@{HOj6f(n}C! zC!JEo8#;L-C0l(Q1+VG2T}lOBq_!}SOQH_bHR@Cv4w`hwb)s~Va;*u3C^97d z$VytwCo-VPXn(BhqT@qg5_cs1p6cTHil&UXV|1k@&vtW(Nl`ZVH`KJ&)f}zPb*2=9G6K{@3$M_B3{is6Hb!w&i{ zUMC$9ZhKg5S~b;9>eskb*SFK5bd=3TV@XRC9leON6!B7%Ix(%i!!xA~iUCDt-G(fRh=f}bH8vB}-{M*T*!8r@Y5(#xa zf6{EXP<;z zDz8*7JZ)6OCZl#9n-zC{S%L;_%LBPCDGJnfan_*^JwV6HlFinZFxm~tWT@UqzLM~^ z*LQWbgGhOhwG_5I<^S7yZ~Nhml?ci@J5Z@LDwaF-|KE~t#~{_%i3CR2S%qcOD9V9N z(0}Zh8D}!++wt-igF=<+-NA2}(biVCP*E#wI2k-<^yqY(MV$qa5vd_3V)6~6lN%Ys zU{cq9RL^Upy*3X_w0RH#cHsU1rdHFF8yG`BmD_co?A7>=8$5XQ=;SYB5?>CXCj&c$ zwKDmQF?6VJCvQ|HzcRLKovciLqbr@Pq<>ee@iif`wrTC!j*-p?l2@5&S1O~|P*_xk zQGKbkQWfK9vr1uR{J!J!qTJtj#x_%bP*}y78T4u|kZP~BCc=ww0B{%v07D?(Is|;c ztg*CM2p>To>(In^aRPontj+Vo6W_JZ@N+C2s-Bg@ICY&273vy*gVX}#BDNT4X@Bx$ zFx2-7`wG)wy1I_U_UQUo=eo(c-UZ#UpK`jl#^LuT;VHF#$?WI!yQ_4i;|f%Hlez-^ z4x+mHSf*+x!)Z@<`t1d|Uc2M*d(WhPCgAsON#7>|r!-sj-WYp4lvk_z-=Ny-YfVbv z!$bafX>7#gmGoVm{0(>$Pzm&yz_FcvPCHXT9lry<;*ydU=-+O~2l;^#Ki zN}gTQX@#EC%re#95U0Isunw&lk0@@1p~YecloV%|?SRq6B|G5Y;?f;(SbynbFn%*+ z7MDH><9EPB>Q1Qc27-m3cYp>bVV9es2i%EMaTnyn-7o;|f#Gnk0%L&Pfd|G22MoF+ z6601C-e&{bi?0Y1Cj|0LXi{|-z|{_*H{o>acpb$j^08X+12AP56w>7Zm@(15&T+oh z;`5TyqFk*7<|V-Gt7c^fHhzYZhAz@J>^po51$K5XKa|M>z1t9C&*nPzSfb!p%7K4p2)IK-p9FC&+p4T=hH7Uh+z8c$J0~CEh-gf! zakMS4qFlG<<|w3Hcl^gR!&EGtxC{EwC7-I);FE`-PKRa~hF=e}3ki2E5VS81_T{*T zAZ|bch5c}-052loFMlC{zl`5sK@`45>#ZdDQRqQd z=s{N9;jA6gwz+o^)c5|2S*!L4`E*1Om5d^wpM>r>RYItl>VJ>79gXXl#4Kd1jz7e? z_z3SmK?43PNid}$V1-)^cy<8+WKQ;2+fXeID!lYT_}#qXl96eFu(8oyb@m0m`Xx%v zuaYn_$OB-I2f!d}k-~@pMG6!fBMu$2QCOaVC5^=^9)Q!dV|Ku4Nfg}VOA7K{!gb@D>E0G){ut$yfNQC=9m`FcKjAJ+$##xK;&ct^PwU*#G zNuxA+_-OR-(de;4qsI!34l88C(Mhb3L#$AStneF@Fn@;EpHOgd%ER_Fo~63!>j~y; zoB4C~d?VLvg>w_bRFlR`@G%SWnNJO2q5ZZ8WM2=+z8;W$Js|r!KvLNfywla)Qmkj& z8p~+-t^m)+mzR5h{)8RTEH8ED*7BrPZYsbRG^46cns+NzX7y2XsS52k+7nW&7g#J8 zvRNJsW`DgAb$wtmnqx~?p*L>`i8tt_-k_IygI?+ldZ{<)rQV>IdV^kS4;n`|PtBW^ z5MhH!gwb?Wdsz6uq4jC|(7M(Bn9t~7%qjG%bQ>Fr6FUsYJRB!?1eCE7n94>bjdz+i z-f7-=r+MR@=8bonH{NO9c&B;eo#u=;8^$D!H-7`TO{cx^%PMw@Gu&~GeP^OP#X)ZO z{b+eg$iV8y;yp!r734^N_>lLLr-PGQ_8oA? zPPlhP(nPkv{r0z((pGqQo^yX6{P7kjxAE}j%`iIcOXXT|zP1CNz@jG#THxuC^g$hu zdVIGp ztM~9*2i>jZ=*`kZpW$Kp45j9nDqEp2JsOr+E3uw%ML_m$@S7-?IQ_1%gXLMuawb<1 z;jSuXID(Rd9I#c=v7ocHI5(jr4szW^9XV(fcEYgqQwZUEg!#G33I{k9TP@iPBpP46 z(=h3;TR`3<}gqv@G$$y2~4Un^mF>Rvzym{}3Htzqv8S?DHw-L()`C2Qy z*NoHY)qA+Oa0k3vTv&u%Wq;HRnmC1gOX}3a`fQ|GV5cJ1PXo!$fL`oOq}sEfA3GO{ z*?BOEoeyK!1#mFC5GJvUp^{w!3)!Wxf?WnjvMZpTZN?ed0>5L|cr&pO{eNA;HO<7S z4nlfCgEJF_5U`F^EY}ZetfNS%sF@fImi!HRGR87{75es~E329GL(`0$QI3u&cm+aT zt)rDxU`Q*Re(lCaGMX{WVUSk%co|_j!63F+*oqT(Lo$=tFebMLpLP_W%q+jWLY1CW+6a@PW13;i?hVF*t)12O6w^wCB8FX!YK>|2im_CZ_{2BG(<477$Bw;7V!%lYxJ5{y>+>I4eF!dEToNntJ zr=eeQK?nM(s1?3wD^H(ELP0+d1^qk}^i#r|tGi>aFlk z8to?LD1TXAMwWaPC*`#yCpFK5AkTv!&+tyUggkvPg}ZtzXkPb_Kz*_b6ZpVZwT4nkzC$NBKw{W3psscVc~D6pY4{% zI2`GCHoMy*_}!$2EO&VHds$w*&3?ZdzQ1=fm>P+)1itJ>K7UMVq+1d+=zM2RrV4p1 z$7%0uC*C%!q=oUhrMn;psexHH6FD-utQi>P{39B>TWWrP?SRy*fo#-U>j*vNBCrg`eA(MUA zPIQvf&j2~?Jb&%je07Me9x3X*2bGlAdKYgqQyykgiTe=8-V34Vy$c4?1-};1wS^sk zw?j(o`;vGID@`D$m?F6B2h`m^LJ|83HOJ3T&VE6y@hi+guAImAzzVKGfE!6{T<0OH z&Z@KO9X3X@IlJ%>9M-!YdIC=HmaI=TkcZfTlm`3|JAc?24*jPVwy?tz7*uSX&v(+IEO;BF{rhv3F93$--%k6-@2$IS-T598Bi5i?lW*$NM6}3X%}z z${)s7vVVHVqU7j(kZf9sgfVF|bl=IQtjJ;0TG@<8D12R`Bnq2F5o|=^oE_{49OTRu z#jK>Ll`Yu;Q;_eLqYb0&V3YE-?d2LZ(8`W}q+GYl^hXfp!%zawK%qs~1=!mRG&B}K zN;HHIL9`5o-h3Dwz=y*KUJQrvQkcjOgsFI)!GA}>EItYr;P+*GjAyXSLa}qKwN^>X zl^zmTS|P_sU#XT|2*oRv5o0Sk30ijEktRE`(zF@~A65j7cEa#G4n7vOgAW%K=srEj zR+kpFu)ua3NeU$;tbLRu5J7896+oa@!W?x?;y*qS5ikh~`D7Tzr$Q;82IKg2sNgek z@PE^x60ZyRtR#iD$Q$k=tI;}64R?_@+(k*lMV+4A%a21%=npGOFIq8M2wQO?9VClY zw!+g!V`(Om$6v+xoovmDf>w6y+~VTWl{;7nWt&pDtZ`z&SWO$NBc@_w4HA9pcCZ+I zL!-4+YhfG7L>O!4n%9BR3|HrxS;yS~2Y)Ej25X&&>Oe1NbBi2IlVhN@jLRx8a%0lhijDs5rcHSay9IM=`m%`mClEY4v!wXkhYpoq=d0)KgS z2*epK6A!ZHN8A^>m;3D7d>>K9X`59L>9hygU8<#f^Gyn}n2EMjNX1lf7A78I_ZvX( z-LVT6CXExZMQaUr2~CsrLYFp!u2o#-iOcG4Rlq@ho7^a zbY*>6q57@}l+hw4a5OXcT*&0}P_8UM0d@oo;EP}oUyR(k6b|IekYks_1b!59?9s@r zt6>hWfrY#lmhw8}+BI-A4?;CR7HW7stlU%-yym#|uXIXjMD!Or1VvfKGp zY&*Z2-OsOKJNdQjaef_pihp0vUgcXA0AaWooc2o?YHhTRN9XMj7_Q1pb~}0ti_r7TV8_7}>jd>K zvY@Np*sIDyWN1h{WBtxL5!t+mJ!qYzti}OshrL3C#{YfR$tq4Tf`8pjQ__A_d&B+HcF#DDL|k$eP$VgqlBiN#sV(artm7L)*rC;r|O9=Hjz3(T#^ zr8(?vG*_F^te#k4-hbfOiAeM-&}^ijeVcDMcR%E6C@t_of%_oe z*TQ~mhWnKe^X2;P0HyKK!r6;|N^RMHbY0Y>^D)n4R zK>RjQ3AKz|b2A*2pFu(`Ge1)aHM1EG$j@|zTAnA=e#y1AfQiP^uLy4j!Mk^njk8+9 zS+1o-)yVRUeGB`P%eIC2@)5_U8k>Qj{I;xU3*;APt;peAYvtNz6;iPu=Nq{hxq592 zH}j3{IPYP0EPp!@37xK&;(VXTPFB}T+2wR~^xU^F9_biqgKq=LZ-#!n8HV%Q(5AZ+ z#`3#hGQS)3+&!?E??7?U0!Q&y6c-OcnD2xr{{xDMKf+1;5x9Uq23PSv!;SoLxP|`( zw)0)k%AbUX`Lie{oP{4F+`zs(Ni z@38UwT{eZk$L8|)*+TvSTgE?RNAi!@G5m8@&%a>D@_(^7|ArmU|IJS1U$K+%`#Jdi zBK&?S-d~UR+wi`be}|&ud$xoBhwb7&uowA{?C<<1B{uGap0EKXS*HqeAufPo^8)KM zbj5l(qJJcV4fO5~MZcT`NG2r55u z9m{U9&QdOOCA&kaiaMTa|yMOJ4LXi7bV=Auw3lw41g(yuHqul7V z8-^wO`95|byU4L{8=Qd4fa1rvwHf*rKgz8Z?yD+!jCVsLwB%9Vt%dj4&JwZrJc`Sq zTW0b-(1ZU5c__^K3GNx!J)noxM9wd@YR6PvH$)3BE=8`@AL3;K&~wFZhvo2tZBE;OO^wB-kPFL= zd}9~*^7VY9g_qmSDsP;V&4NvtEqsb?b$?CD;nVOdyL1b5&*3xFEpcrQpGD@#6(jS_ zhxlv`cG-M-^9WV8h!X^vCD`j?YCh{oC93xpp@&_wlYOxw>&RA)Hf`xcdcdy8xQeg@GJYGm~N}-wyK2(T6nPB%-5*fhUUGGmt^(M*MC}g z7}1@>Blfs+_Q5z&iJIpY7>Sc)fDfJTzQTe6A)!cggCU{^l!z=iT=axVA{(ZQ9GD|| z!+g;PmWjS_j3|JhD1^8ug7u;wY!dz9TrmJH76-r;Vjx^A2E$Ea2;3ot!u?_xJS>L8 zOJW54U6jDbq7=RsBjE=z3Vs%&8GjQ8u}pCY>mkOnzTz-8K^)Geh;eMWC}&5B@vK%% zVD(}mi--#LJ28cwFQzFv+=NPS5*)&J3v!T;fnL_RYIW;e2wCS@=VRH$=tN(Dy5E31 zV2*Vm*#l4luPe6K*im3w7g-mhjW7X*S(jLsfTl`1%C`JgGTFe z$VK`e!q!+r5;k0ozt&USIWHYzc7RO=)PKOPA+-zc}R^+6&GlP0jjQv*VQu#=s#f|hPu`MKm86}0dR3ehb?BY|I>YoW~R zmYwoD0myyHoYX&2SKTw`ooS&I*JPB5ISu=uUL)?P)7JslAx|K_H zhsFqvv-^X5=d%0^k{N$cUDmYlM-UPe9FIC6pvA`@^PF=@r3`h(pYt=eBcaS=kFY0^ zF`i^k)74QL|D@bZF$XwG{Y)_zdWm_^Tg*qnas&((3t^;K1b+vM#V}4Rfg{9HSSeOO ztyl?Ru?nK%NN5sA!AW8@oG<*aS=2zYsD0j;%fG~*uvfv*RT&nGy6i^%Kj~GV|&Cs z+!Wh+mbg!`)rHU;WnJ`UyNyjK$_(hsezvv>TGsxY6@Obd;8P2Q)z3;WWw3ehgmt5J z6Zn*%xeR*mg(FbXsMR5~7)Z8kb8H4{P&ZkW<;$Lo;>TizyP*JWiypgSt;w&Nf_3)d zfMn{MWPRXMYJeOVRY^-zN!XQ?Z^LJzZIaQWELqObk99fb0driL)eg~3C_$}Uf}RC2 zsXy z8+v$TU~E_KC_dH-iH)@c8|Q1tvrxqf*dRppAU1@qjsdU*hT=4|fF&M;T=6jU7duh; z{{hOxqj0Er3?_@mp-Mafi^MKCN<0a5;wj|Ur{Q?AYO-mh&SL%@i+Khyv0DgjXe4eD-iD?kG{_a;k6jABgKd85b+TkFFs}! z;xjf|{DUnJpR*&ymx{lR2MKkk+JCQH{SO?Koe7UQD%%Iw!7`*J4rRlYLf2t3>wm8lx`BAgQM_cjs@>`9YJ6AKN7e4u-{OP; z${~{!I@$FBUv`$pKXNk3KPi2Tzqti` zczJs>lopqg67)GJ7JvTH zNTRqG+^?V7Uz_1%d|}*X@T<1***H?+cH5pMTtOOLPiS;KNu%qi(UGb26jK;qJ;E-u zZQ;IHdT=RncPa5DeCwLV348Qd=!@j|9dsApLyq_l^btS60pdp}7C)it_!(x3Utq5I z70K}zSSohIkzx;2<8_Vr4I*MM#DCFnJ5ghBh9=;AO@o^>9q!OfcvQ3C8O;aJYnkx2 zCgEePyCSbyC{Pc89A!D`a3aiARwCsjeBxP3pE%YZ-4Ri7bw^|))E$wHridlaeTF3B zKHK6Xu4F?-_u->=!{KD$_4)-ec%GB~e=|<}H?Bm4@12~8dS#|8-wN4Yw13l5%W;m? zLXy%fLH~kcH-)Y2{dprjj{ltes1;+i>me7Ns1;kG`$&p{wD2#Q_kQLkh8Ci1`Fdo+ zax&1mm>LUdRBr_ow+(=q$}i?{ zAdD4j1UZCLot1DK4ajSKc7H<;3W9ChO)fBg7Nl6A==x7|a536THDIm$pKa_~ZTP-v z1}W|A6=yo_Jm;hw*Y4!suE3_guTtjVe{A=tyXzk9;6D;Y{<4GbA@@nJw$Ftqd4TVE zOc>-t=Lj^l=sVK0eL<3*SCT-eT7b|Ff(-2tI6ylTMremag*E}^Xnzx7iB{(QONiA`YBbR9w_5vL0kD6N^h96TLR0Eh+NImK1%m%Zf@L6n#7An2iUMbN1+}eW$aWI&a1CsQ>m8hjp#Ynk1(r4&33(3m)T&^hHW!9z^N^V5 z!x;2z4%d!=N!mh~p)J9=m=E)`Ww1zF4y&{kP^Ybg6SP%urGIuLY|)N}Yqe_FsvQG2 zX!UTjwgzs~g7BIahBvfEcvFjec?iQ$McBIv7D1(TtGeq37g=X3d2ut0aZ-G6ew_KW z;A1=Ttmbzz`1YbRs}g!hcTj>a-%E)sUWsFR{X(i{4*MC{6bgc)$H>si;wgzG(xnRV zv7N8SkFZy-vwzh}wHUSwWeMBCdNYcZemud!=|nXnY!80)wr7N$uUZ9_MmY?xuQ(yu z_kot%>~h+8^_D$T>o*_r^gLxxi3Qu8AhYB8k}!6#q_v90RVCyr zeclZJ!Me+4K8m;U!8fg&wUV_&U#rZ7dHP0y7-T{kN zsVDYmcXDe5$-&|l5!vD_8?=h3Gw9-yR?(Cs=H8{9dD=$E(@sFW@jDozodo~TPJyqr z)8Sj~O!!ed2X<@cGp1d{4DC{usa?jpYge)y?SCqkr)^;c+BK}7c0C)SZDpm}jqE_} zW_E~n3!A7lv-#SsY>9RoTdv*7j?(U8joRHTs@=ynYWK6>X)Wv&t(9%n9%Q#`53#$n zKd}3>M_7yYDBGz$&K}YJ!k*NgV1L(kv5&PU*{9kw>C+?a^N4 zrhoPt&(PlB2WWregS0n!srDA1roGK)Ywz><+6OL+BTMyFtG^mAg?{!OF_y#5efZ&u z*%=h^gB@lc!b|P+BgNt?peXM*cv)G7n))+Mvzs=wH_I5US;ZMD*r4rAT9e=C*?$=u z9USWrw{BB7_CX{G$C;q-fx{Tf>6vAvV5L-yboAuASVnpDZz=mKzSXs=5==JU^+nME z6{oH!XcecIqvI(yQ4|`v|12l`)nvz?Dpb(g%C+n@cI9}ruLRFc>ZG97UYIf|9%JR3 z&4B(Vt)*M}TCP=4+afL?%bDy7aetwG_hUgVUWA~Bmtc|6A}&>dUxAi)QH!{mJU?*_ zd3!G2SE5k?I*0DMfNWiZ!MYA*x&a3xEltubsMIrHzV3r%dM3nl3G4OlaH`$|&eD6r z)p|DEsOP{PdN25so(oUtdGMUx8(z`-z~A(IH9vKT`T1~|qIcSX@|H7GeShIGXIXV1 zJfwJq!(eE&ZdZ!24DPbdwrG>)!O*OX9395PR_jhdrrjjC*1AhYI4S^VK45^w#^uO@AaG=ar6Z5x*}kZ56jDd-3*m-np|lYk7{iO9dWj?X^|h zGgfyasqW(HSd&rO#T_;uUS#WB#e=2zzaIa`+j>*w_s}wEgVVf^p<){WpPw~DjY z=7{^9cxe@_zLHMcfqbc9-^mY0b+~{^DG#ExdG9iO^FhVY+jokGSAXOht>O<9{K&Uj z#2>vtCH4QO{ES?r!bfbcLnntLo~viA-wF+Q*{~JrD5b=ot1Awv?7)O9_ff}>J_&vE zeP~Y7m&b3Qh$?;kOEdWFyC+nx%HAs#_qb)vd(Tv0?`r;yl;<-jg~~JOCO`9$QVM=7 zV;{25asEGNU((fKkADy0Fl3J+WRHHx9{r)OegF*82f_q>5X{ntz+8POEYyb~dlW;h zUINGIBjI=YC^%U^2+q(Ch70vW;3|DAY|#&er}V?&uX;JM#sqj*p9r7pli(|T3jAB2 z3P0)7;a7bIGxV7(L$725_1SE=K8Kb3AKKmnJc{aj06lkhdVkwZS;Ddjy>1eUK!DIY zQl%4$0)l`70s?{vC`AyIq99EnDjK_>utB3z6tMR$HteX_3kc+$bLZ}46Qb|;zW?|9 z40m?wEvL7u^kWw&{aH(8AnT+IVm+0?Y^XAXjaG)S1g&lz+XTOk}Sqm$7%1N$dk^p3K!uD5XTEbJpY9r!! z&d}Q-SAPVa2a~-9n*L~jw2L)tpuUUezinc@^xZs4Vk_&eKgNxjoe()6*Y_aZT+A-j z_i{~RIUB>#ULmYXpgsFgpnVBocVsN2muCsCV!abo`uGUy|inr!=ph zml-Ak$78uPuep5cVxjqIfiE~c%1xq}UwN!HS1`YCb1U+`@A#Crr?#N~r-g@hBF=XI6+<@z_0@qU1<9c1| z;R0xZPx*rR*um%wq?9wf7X{KPWE_N}oPQ|$xe@J(N`J1HbD-=5O}Pgwv^R+It z+brKHVS$3;zz_LuEaFmJdBTs1{Psr?gTM`|X>tc2E%H!#BUb(ssi!2L{3L8sWq0UY z4h_b_!Q#L#k{}uKLlKkf=+TIIATTN}Gf()~Ns}roIDe^hyPL)3 zC0WDY5qu&p8`xNJ*^Y!zz>$NIP*z+{#UE;14r8Ol<*JcTzEcGCOXMhhDGR^EpRDdZ zSqmFGF4v~J$b%Yj;&MHT!;eKAqJ;GC3VgGh$+uNp0Xd>Cgt->4EhsRq~|s?5%)iX^G3 zWT=`HQgta^HKYvHlz(cemef$Sr6#I_xavyzYO2&#O_O@6Ri%DvHEF0CmBy)=(j+xY zny%K6W~nu$IoK}1c9B{~TA|jJ)?m8@+dI_yQlZ*Fx?gQ5J*qb1l;}lBXX7BIKZ&F< z#EM~zUZOt*A*mKb^r!V_@MtI=5hV&iA^U`r&>+#61PhQh>wo(_ElOIK(4wR@`T-t| z)<9aVALOD~Oj@ZQ;=!r8(sKP-F2*&LmgvuMF|N6^SUSb^vpnhAfI`t|&_4ipE5 z^eZC5FP-j(3@d=|%-w}@3>`$|{hTEZfl)vy?_+rDaeuCS94DxaK~bB4rZxpfZ3bED z1(2;aht_HfXs5P>erhWiq_%+}YFjA4b`-Yb)pmXwl?FrjiqSVF`W$Uy65EXc&UZFW zik&W#5Wr)NJsB=}b~*(*3zqgKo~+FF+0~c;b=-ECP;a5iJViASu8gu z!4{c~8h=)~^w9L*R5~r9M38VcNk|vS#!6oetK`-qLfe$MSwtZcs6{kx{b2bCuzu#`-+wJ7HTl98(=(<8SC58=WW^7hM%eKR&N8m4@?+P6pQQwvFf)X+w~iaL=NgPHz|)OF*}!^8cC(_!IVg9Tz|@sq>!^T%`+m`CMRiHnUgdv$w`_P zhm9;BIsR;q&4v?S32}y&UIeO)gGaXJeKDyYL9!#rtwlfN`~&Qh{BR`9=d46-R}glJ z?isn1u%3zU z9_RtcAZ(Cl4fPhZAS`2tadpEo-7`9(AltnJWkVyPWXI*P5rw2e?l5Lu$Rwh60$1$} zscJXKP3OA|4 zVXayKx2PjwvpNb2)zR>TItC7?7sGSvCGes;7G6=u!8_`B_)NVNzEdZ_Np&Lpp-y6& zI+un*Lg$j5GEU#qLw&+1L=lzOuS>RPFa zx=yO8u9q6Cw@9tkTcx(@2IN^Ar2*<@X^^@_8l!HNE>pKjQ`Ot0tJEFRwQ8ZXRJ~JL zrQRj2SMQcKsXLKR-7DRz-X}ev-hVIcQXe83gQT(=QmhnS2|$A<#E}i(u>txENMmd` z$MW?T@yI~}+=_D)m&vRJ=O{s@v1a;9oX<68rv9>i6Qr;fOy=R2sjMgbqQ8QQR~nlE z&+D%u9ZP3VphEhZej|k0OE67;U4MgYmD1yawq;1S>u>Uc0X3uz`dgg$HGhz9^75~c zYe|D(oPLaWA9v%EOPSxVe=H)miy#9zUpCM4&|o*QAUTJjvh9@O zyxHZ>@>nQ%l@dW(XlI}XD}@G-Qu%)^URDT@{vqN&>ri+A)y;yPQur+N*4QVS+^$|m zDfa4LzmrDK!OomuIZEFx&|PRwCHsI68X}CXl}7Q zk>apWsGOW^V&-83>MlgU-H3pXL2dPMM8G&SQ};oh`UG@VpM;)jayh%+zJ`C>)Hf10 z6yi-Dr1N;*0CdKwU#Wj0!Um9?xj0MZiyX)^sD_Pq6AGuoA7zR;%w<1Pq3 zups9{GPi%jGQr|&P zco#w8J)E=mAy@qX!QexbaXvy?{3-NOKZgd#44tq%L(@}Q`gQ5)_SQ6@3i#!Vvu$c4@NXGnEq=miV)&v7jj7=d)T2@bax2(3&`+%3M`8uP z;w!lD|Gt6@7Y!G&Gc6iD8a$Ge)y>^&@^#!8-!E1%-sqJ&@7@H0T*E)(BL4; zMF9k#S|XM@0U{Q^%pWL`mx&d=0av(eX;*lwy^62!&B-gw{Yii7@3_K$;0phVEBqI( z@ZY$?r*MT&;|ia{6)uH78o*GE!DLN>S(*%MkZ^9-bhuwL;VI357c>`M)q?Pj7J_41 z3LMu`lUDpIf5l(&SNvIj#Y_AZ-=}{nR{RdJ;(cJN{uOF2D!jl~{A;n|IbfZ);yk!M z6Ez4U8Z`Buc))+oKvhj%R&L1$1qO>HpD!GTck?A*T)DVR6jZqCQCybt6fRV*sUXbB zT-;N+ptr8VHKjzpr68+V-jJ`wA{vRtIxYvL*=C_Ev@xQg1azCXPMhdLT;3efsP0-^ z-V)J}I&V#0ur8=tf>s5AI|EX+2xMqc$kj5Tt5zK@)M|giC0cEmqSb+!T3uME)q|y4 zeORS6fc08K*s3*xLM@h5d+hE6bB3GrZ#?D<%LL_a0N09I8!?#A#RD0aXf78I6u1yZ z>fdtr-W15kh4~Jd^GvvaE5Dw5uNt>Lw*b{=ay*kVTG6LB(vJ>%LHM_O(t@DA_Mb>d zMkOBeFQb3{vaNp+9^oUI6wJ{-H;SrXZUr8oHAbDY3F@a!k+)s|Ia+hb(^^6&trc|F zTKnv*IX<&eSQ>kZ>4`#)fZIAySHNv2gv6D;8^nb`@GR742ysUF0alamkrQ>-#)!Hc z>D4k9W$pksicMkV7!nTymsAQ&?u3Wa3?HJKwM+rhz zcM9k|z^edMC$`tT3=|T^@n_I0CdwXg8te-7^V$^0&Osi(T2fTZ3OJn z#=_&;csQUPINUNv7>)KR!SGy8E(q_O(Z6^tEFAdnrQQIUFWm@+BJV{ zkhXvg)2?MBwS{b=wuH^rma=QKWo)UooUPVwV4JiRY^S!8?b24Ur?j=~khacuPy*D_ zf8-9zO;C?#Jy>ihw9!xM%XyCGVL!I}uxIt)M?di_ih8V2Xa`AT(Hn-g#BE5^;BUs;igh%@VX}5DDo) zyA-OHhTI)70!FF%yZ5_OZ@I$`QHAK9M^oMECKDaNtV(Y%D;g z=cmgIS@JWn9P%vW6iX+ElXfrf=bCv^(13g}r$1SYxdDqT$J~C^90qgrDnNhaDkyKi z(l#Iy*@#T!HmIg;LYlZ48dFZSwhh{7w<9#&0Ry$|Fc>jyIJO1YUZUNZM3u(-T)mg? ze(Z=NO_TvjM-jgiWk}Ec$O7k^uCDNdT`v>S@q75J%q!1}jp^ z$ZBShq+UT@*6zW1y%*=T2&!oJ;oRPjs>6dgpAVrF^$1MV9)+peZkVe*h75WyEYad{ zi&hLvIC+QaBBmZiJws&a?1j`K z9`%u$n^3-JnvOurSR%hHlTX+C`3lbLF%(ecPw1b|QEa6X_|oIq-p?Ftzu>PDsSdj< zK@Phnhm$Eup-!mvJ zu*}oomV@BweqioiJV#XRNe;mc#2oJT)p6u2*=h1Oyg(thH^+aa&r;xq9Z;K~DW^hc zX8+urJ@U7E2h+6gVTSet%-4Q|<=ROUz<+`b+RuORfc6V=<6n^*{|@`LQ}CR2 z8oBX5@S1i8HK()isdf%dXr)l91B>d6)zB4ISJzl~U1vjdgALbBHWJT`!*fgU+ z0ncsHUG|tBWc&1xFWmPKrBMU$4)o>$>{f2H zk)Qy-MRd;|WU6d0RyQT8t~$NC2@IfH^cO zZzN=DGa*yUVZ$qfU{D!^CcF%SkZR?Kc2GX+nQ}_QCQ6+qsrWI<56mor3FNa-Seeg4 zkBCx(Q{qa%b5k@G94_A?e}%;vU0RydBiZZkIV~*8)sBku*s!=1OL$Z)J|+rk5X^B4 ziQj+hc)k;Hct=YVxj=NVSW)v`igv9TagOq;ij1>Tg}dAFN?b80%FjieRxz+~;))e< zqjAL^j=$`<;zZoA6<1uGJvXid69pAW=vRx*?G^q4C5`+AN_sM z7pn1lP?y}sGm0-@z4Q%Sifzfdb4gi;wyYzUiVf(-^7MarU6WtnMlJzZ@E0uQ)^rK$iLnh!X|&IEeX%H^)t|uXS3+RbI_1^7tbJ>RAfUfrFWEj zl7e-Tg^@et?H=w)b3C&QODj<_5ciZwS-6=}jjS(9RD|UwCB7+Hv0M_6Q{aw7+(>a? zNWM&@U8zoX8Krh5Pt}cX0WZV_F|vP>432tcv7Ap9oq{x_9!ES;IZ34Q|0sW6(}!Nu zAQ!P;X_$*&k1LIa7eOzsvQo$!mm~Qd3f_UA%Ozf%Tagzd70Hb&vAB{QQS-gX4{eth z5@I7kq2Ky`5$txFQD&^pXup62J}g0*9Q4aj=a~fQ`ebOVPl4w86$t-Rk@`=A;reu# zpwEDr`Yf2EUxn~L8zr7OuvUMc3)}Up5%%Z7ZhbyHpDR&`eIdM}FM_x9#qgef zJ^ZLIfj{-7hzBd+oW7JXeFanWl}yLh#WqF1(dRsipe;|GQcw$Q$$5qfKVq*)CRO1O zbQA?Xy1~N+$*oX4Qok8_&6*^g z$gl2-M*{Ca=kg?#n#_@Mz4uB_PyuZm0c0|S>O%YNU zaiJsJ;H$LYMJ`nOJ)VD@_S<(rG|HQFlE9dLFZ8DKcN9XG7{7tcKT4Y-Xe>_SueL={ zGpvRd@gMDrAPs-a z%HkEw7*hVOl#{_@r4F)Oir`FBy2X_qyXj1c(y}0$Q>^rgE4_br(^wjK-Er}z_W1F5 z5!AyoBMYHAp6TzMA;0|8q$e-pPttn_;zSKT?<$wWeN5r`@%nm%fm=|PzZK=6jR>2Y zpt`;pImZ_0sBc9~*$xx+9WYHVgsb#BVS#=ZT(92^EA^eQM!yF(;_PnIi(m)dcb9%Y z+^s)|9OGg5On-j_e$^j^Q~EB%l*bTmA7_@nkA+Y;t*t-F8tEmhh5iidrXN6=?pfp* zN7x|!c{W~ufnBPP8#1Tg)md*tL48|>CajI2q8Ow=N7l&D z$!p57Wguh(WzT$t6EF_}rU0+hy@kZZPBDaWW zp(-gsutOk8XMAJES0YDsJjn=sDI=-9VB%X~K*DYwOQfq-%jW5-X)&IXnn_7TnTeEC zvNe+IFcf8n66uqI(CBP>XI8N?yl+wI!xgh|^*2zxeG}RLTex^{L#F-?V>B^-=(3HnNQP9cZBTy%Y*V3T# zRT2Brks91b_HlYKqQZoJNujqqD_{Qv=kQao^v`gJ$00-i0wVgChzMVyDD^ee)4ze3 z{vG7$CvaX*A}jd?dLaq#k7~nU{Vy1;pMt3?{H^u1(|u zDI>jHDD-H5VUFWD$|HRYmtj)hSm<&OAa_>c&>^7}c|8SuaWPkog%v!e!ljybh^iyy z*(jHv@AAR>HG+AnHH3UVtWU@@N|dPu6t90-tV}1vZ)RM%GGb=Ol^GF}WQ41*LAiKt z#LU9mVvl})jh66#vg$yGIwT&<|G^#+Z z5rO7L6xtY>&<@*f*!DECV2n{6E;VYvRYpx*omy~%Q5$YD>cFi=UD#^WgS(CT@UVZ; z0CpLT{L&oFQH1c)wlZJ~-)BaG8nE85IQGP;HJ>P zxWMP_84%(?OHl%i{O;FH>b_2;`5RPlZzPhS$03+^P7cCO4#rLn!A=gvP7eFOck*VRL{<}9 zx-(+$cO76PQyh5m!8M2Yvg&OCfX5(ar zoI=n-O(+5VlY+2JV_qXT`r0B0Bn_MA6B{FO*rOrU7=vVNJajTHg|5Z~7+_omqm4;$ znK1?C8kfU-V=7#0O!qyuT_Mj1d0H&Y5}DemaJkR$7x_~(KWU1pg6e-w5mo196xL-R zt3OpkrP+aw;|D{h?XSeHu%?)eiQrQdHfMx zQUGTulO}1sn55gwPZE#JGG^f<&BjTZ1AUFFVVJQ9MjDG@ig6uGHI~4Y#xh^(G5w8b zQjr%Vremf*9aEF0Bb9%GjlJpU!I%-QI1#t{6LCmPL{IGKh6)q$fB=nDAomZ2FpIx( z!`mQ+cclFAxR>5oiNjlk!&?nG##&?<>!72t9=aH}LU&_h($L!aLu>92t*1Yj}?)!U(&u>)EdcP9-Z<`1H_KZrbk5Y3VX5#k%p@Ih2%sI`X6jbTfrtF!fARwpBQ zWzJijt^c(;ML4MYaZnH7>O6w0^C+&)E?k|*aCP?l|FJr^`y=~KjI03rct<4&NZUt~ zx=o)*$v!B*L?wTq)0D#Oxb)dR#IH`YDn$I5r=GWOwEpTx12KwaZ$$TptA z@g6{0^9%}F2cd)UEROp*7-$@ZA;wV{ZoH5*{(k=WyZhrW@W(%-a>T37SmeA3*pZk3 z=@nj!7}zR4c5nMEPrOGya*rR?Pm{rjMq8rfi|$b+MihT2jDObw2^0W@oZV0rV~TL` z+8TVKiOqPwr{muN{JT=LOXxhGLh_P|`KJXbR_^PYo#odoq06EFx9eH|ab3B;?DZ&l zFD+IcBy&hsTzQDxR?5Q>dDs8Y4{yo6{eHGUidRS+@7rB0E!@Rl%u{-6x6ces-vM@J z=*k_SMwEZ^`Vdj@n|sJi=k-9P9;jsyb1!j4<5h&1*T6PjM+W@{R59K{)PDy>?+;;_ z@eyn`j-g`oG3+otL(%&<>@&WAr;RURzwr$`YkUXq8zt*U}fN8QJrp3mZHoMex z*(5W_7MLM+y_v#Rn5lk^hs~hrlezM{&p&$KKRN|L>5PGx$!aFfu>pwF1hooVfPzUX zUZt&qRwZDXEl=!u#-?($As}*C%(Dn=$X}NRRKtgdIAMWCxFhd%BDc}N(>8ge(P zyQ6=6jWll$Ib|& z|L)H%QJyKcyPwptSUC_^4pM%GvM(u>k?VZ$WvBpo08eF1L`#L`3B`d^MWA_BUv4w@ z9xPD~<82Yt+>a9Mc)fo>|cA6yDNE+-iuyqUsT$_2f@pT zmYW&inpL5?8G#(L8ZCSr2Y9>%&H~A#67r!5%XPPny|q z*vx@9&0P4zYz#k|P2e}PDg0?RXF;VrD^_Qw0Fut|jlL4KR}V-s!Enz)Ba*_>H08-CmBZ@FlXu%!D;Gwi zd@jrQ3<9m@?Mj=w1~ zVIY(*Q>|~Yi=$ubdpB)4$f$Uy!jFF<%6{%$c$cp?@{j;d&M+vz?pB8xyu`;mRII6$ z%OY;g4q%&|Al>W?5wi;}S9fS&_Jo*uAud^O$T#~!N3$RFG6%pga}X4m7r`iOFE)q3 zW#%xLVUB<~W&zB@b}_a~%u#T&Iojtx9Z_YdB4QX5o}hGCU?6bdGDJ{{Ce?pk@^d5j zHKVGphMV?TN^p3US;0~qhRn6@SGhx%X>7E78Z?8Kflb;ehnGGyA|Of2B~hkN8s!yf zfp5#WH8H4AbtJV&gx{wre!863r9}CN_N`Dprkc^b&a+4(i>PEb`9#Vy{G!o5S{nGS zPs!RsMV?I_c98l7&jePECnbM|C29xY%S>|F(%u!ymtv2Gutjbi_TnQ)=-=fe%=HL%uP0Na1eYvBQNDI)4J zMAYSQ(7XYjH&-IE-U#oStKpb=6MSXf%vXOi>Kzdg!79TBAnwxL~)a8M@79y)_ zM2$>5ZUhgDJr7#IT}GBs9buv^Y}3EuCY&y?!K>8+ePI<3|D}N8Z+-v9w?+-_r%~Vw zfz%FsBx3g7g;ddluONS5)Fjg2!y4}s!kSmvxDBXhA(OFE7@Ke{B8Vv;dF58&Rf@{X zLUGs4D#iCFqP;6xfTYFJbs`6{8+Hh_52c^t9rg0adYCT=f77? z^4N#%xJs^j{3?H5>{kT)qugg-lJqfdbXJ2UYHC4Nv6`MAj0Ev5;Yg64suBr`kJ11# zIQoVnAwu6!GWx1jDUu)<3B}cF#PSA$E*?B23A|Lk*r-%k`&rOQI z$VR;-oU)hNv_#*s`W1PB24}y@DN8@B4hTi&Rxr$M$Vq>9Ac-!75$4@6&fE!8%zNNU z^In)`-j7K70FvDYVYT@XBI(0$tN93QF&~9Oa~C{p?uNMe80qmcU=;Gw_eOpK0a+7BUaAD&`^Nu+OrX`5bF*9%k*#qpY|2JiEwz zfeklbM4^A~B^2mhW|y0)BIjaF@KP% zm_H&={Ul|XKTCDYU!?lxZ&D-k4=Km|lM|UwkcEGZgA`FRZ#7I6M~h(|S9VlX6XtMo zqrn!q*r>%zJr}}oZ|f9z1!6{RqYjuX1Y^8sSr%O6U1c&%(TUtxi079XbtzSmRe|AL z!f;q`sAJSK>VwM`!W{AJIv8&>Fd9OT?S{^r;Dy-VP|Ik9S5qKe3Mc9sNsax&?TrQb zqH}+qx51Taio$b(RC#YhQWfH)>I9@1XYgxh;XLw6GK!R(yMPNKHQB|CcB@%Kr7b2x(Tz zztKKbq4ua+!>{!+OVoO)hKiF~vtNl?r=WjWt=B&{JFeExMeJ^nTUODRTdd8~pql?6 z9-&}|dO%h4Tv8FhYCbEeCj4+Jq^q^PwLm2*W@MM&X;%4F`Ax)U?Z>y%#(RJJR6bD2 zwibLN;uN^Gkm`%bhcw}d{Cz8oK5wc*RvJ$-yhG z(%(}2y8&oFc7TO3(eX63jTlR@+BPO3`Rqu!V1;Fe8_RC(TG_30V#R8AI+&UW3eyu$ zMD)rY=;lvB=#A_gy(NMUd4P})L+9}SBbRH8Vp4yOZk1l<)^ z3z8EeK7>5lNE!^wfGo>|T9yqBEeCQe7aChB(Ar9c4ptgmXr;qos|t*?GGKq46^2Px z1g2Y=aJ7{M%dP5glT`!OTD9R8t1fJ|>cPuaL-^ck1m9UP_`zxnzgtbdj_Zeb_ZtU$)R1z?NAT zu^X+yY@IcP-DeGDCDt%@&>DZvp0`G@cdP>TsWp;)YmH(jtd_*(pl_BqX`$((%F}Sc4x7V zjHaAQ-oh?3nsI;LW;WKifT%c9*vaw{z5&*Ka1p8s&5=$YgjSqhdV+skE`*G8P?wPs z*P5xPq2^g=M?|HDSwnBo!a4(C)L+GA);+25fb@<{$Bh^Kk)P! zLZwCmm1+wit~-_HRXgsg94*APOePhpBTlzquEl3LTndE;P^2Up~bzr2?!jB*@DT1IWV`@|@H_*;%7vX;S5uYV-`eanv z0a~;O%%ormkBU*MA(67T_(nXGXq5sRJk?}2j}a@Qa)C!_hK3|fP)tlvEipm8dDJN4 zY@5obC?N5#kRKxIku^S1V}0z_jzTbVD_Btpb?Jz@t3(}Nki~ydmW0F!L@%Oobz($E zElr(_1W}2rS43#n8g;ry9%mwXgmShDYZX+pRwLHlgcy4>WLs+?&sqoh)_Uk_-3pVf z+Ym!H!Axr#++f`fYpgq9y>%ySvv$H=);&;U-4A=M2VkG|FuY(r0dOK(svb zlgTKzcv~e9v7Uk&*3(emdIp+X`=On60J>X;V5s#hBEoY>Iu9f1Jc0{z6iMgvzC95~ z;ZN{2{sdnmzlhT%@pCqxU;}3AUMi^#)46b`ASjIE)34%0j^bjT2K8Zx&_0Lqsct2* zxl$l-7Ab!T>&(tUE*DzL>48z7lw2WFEh8~`uQG;=4Siz)Jj&kHkGDDdc@ItQmrHWJ zTCad&y$YuFIs~yz!8XHsBWYuTNYd8pC_oNO=8AT(xS!BI z4!n3fkKCiEy$^s#>hbqe^xi|B2*R!xBFJ&@qWGQ%uI#d_xvr#m<;TgGu3jq+lyAL* zfB?i|d0XO^#k>5hEtEpMAJNQWRlI|!@$$sIEB#vNnQ`@|ax{N8;hWhw_$RoxONB6%y+$C z!t5%X2|ln<1-xy24ewjuz*p7@ zlqSB1lh#T2)%pqkw0?$vtlyy2`kkrPDQ16Kr&)@1j)kpKR?QBu>bAn_+bU~iYplDi zvw^n3#@HqsYlqkbJB3ZPQ`sCljV-mSuoZR&yVml7XP5mF}UfW1lopJ>XTaiCZ&L}5HiCR%k@nXzR!?P2p-3M?x` z@fIIQf%|qq)g;?`(nG$5K2I%?j!=Ituo^+ucsG$`B&$1x@^OwfJhN3oq zUf-2(ct^&5?h@<|FLAV7%G=fOEN@>zZTKZ0rnuSAZVrl#B-GA>pxp{G?AB1zZUb%Y zeCTGkh5mLw7>w;OyFHAvJHTAKBP_H#!BRZG65G{w7uaNXg?sI8@Q~ddcG-VDV6WW^ zp0F>3{dOOC7Vmo=+n2C?)9&w=X$ZnoJU)+7;PwbZUQKw=$meU`7S{1ZLj?&%3+YBq zuJ46<`bwiMx23(~%S5kp?W1AD^Clc44f8Z^Vg&!Mk(rYl@~Wt zm-!-7hUXZ9c>-n~EHq=1CpdbWA(kP2V^TeBoHBbbRI`Ubjy)VY+asW-U4RQS5*OwYxWpa@ zQ|$3D!=B(fOgclDXB(2+VxG?}=LrO&BhQYi!wjPxWgsGNnq;)+(_eoLE;c$4w-iwRhHn~P=o%B z)#>FzjE$=gMdUEbDUW}KRTPCTjYV_AYO(rQ5sbhWAa>WLuV;DB$%T*>%MBzl3~>PQ zU9{J;gCzV3PQvTZ-KO|SdnO(CdgxViEh?oKmCq!M_`AjLL?KF!7;&|vsPv17Oa+J4 zXS_;Do{@h$F==}Wxc22x-M#|q+f$*bJq?=M(;?5k657}^p`(923wqdBL2r9D0>>N} zVb6t&?RhZUo)6d93t)+TE!=1?gmv~J*kCV%+wJA>n0*6c>k4?$z7amNSHaKrYWTyx z3C`FzL#e%%$@V&C*|)GN_N^>pZ(y1BZLEg9iM6*kvu^el*3;g~2H4wt;jAOdx4fV~ zYY!U7V#==>q;7;Z{Fum8dZg7Zvq5eO3(1*Vhvu^qz^@|eO(sCOLas-y?=@9Qg~37YM*o^zz?GJ zTZIeZ@QaD-$8; zb$%QO(D7Sd2!RJp{iz(WeJ_%gB1p0CgBtb&P}_bG>e&xLWBXyazcMY5A{bV7R6}TW&=T zs)vL)JX7r1P)sUoQpsgOlce^NsIe13hO53y1nGZ$UNk4UsB!~A|I-3L@|?zycsx3x zedQIE9sh<7A~%yn@Ag7lCNaCI5SMESak&;x&D3MGr(=lYmzS^eFDQ(>5;|?f z*Pswm6FFztCz&!Sg*pyieG^H1gEVpq{mb-wL-ey%#j?zq(hk33anhZ#C>O1MAgUDP z8~=Y&D_M>td`LvDKH>$1)MMBn9s8J6`?&fERTWY{#eYfHLjin zM?uEqX=moHe2X7gyq*LrVvpbwKEifUD>&jInnHU&62b#e#XgAQ$|0y@KMT3`VI+n} z5p17_e)bD6(tZiS_Enf}zXtQ{H(`PO78HNl@1dyjK8h+Iz@zp@@VI>piQmWYl>I4+ zDqq4Y_E&Js{uYVf38vZKGt>SN#p9Dm@P0z^_!rj9{*|?`e?u|(FV?|6g#_?48*QIq zm)mFAO#2+0XP2_Y4zT48V;dZa-R=a~-HyzP9F;wY?IYOkaWtP;E?~`#UVM{;Zg77& zFL6Y~ve+k0A#VP-0dMlO}2?w>!p0k4ZN1Giu&p*M5YTx z1*-`>gStX`Cog^l*;?Xy$UD2Y8F*J^Yb^6{C-o8{C-EmIFjEJyu_LMJ!NC(cyRs$71iSO z_ebxD)8CW)*rUHcd6l(1`a6gsR-F_uoK#44(x8?ThPqA_Xy9Z(Q>QAla3X)u(WwUA zolLmU$$}wH4VdKAglSGKnC;Yt`A!|U&Z!HloO*DZQy=bf8YY!MyT_l#d;DpXXE6`Ta&;k(8f7p@hgaU(FEI*gXUN zH1(TuI5)~_=|4Dz2OVpo<5dTVhB`KT`S4LXfi*@|pNUIv7?X1g@RyB#V zs{ck>LoJX3o=@^TGg&f0OrrS_C5ayX#`E;m-+7T*^$*e$jx z^wgR(Hwn?!VyQSysVtpZLGl(+sHBqvu9FK@oW_vlG(kvd2Dwgi$ajBQKsToq^mJOo zRHq%xa@xZ@rvof-I>BP6Gc0$yz)GhZtaUDgElzK^&*=vToc?gc82}$U1L1pT5d7*4 zhEvWE2F_5XIm4Lcj9@`*Q?ae;6!?(U6JFxvN`)iPmy;`so{ReAO7Y26fDUV^!enNk}XalB8YMYwK*j9fgi7i2vGCcJyQQIwX$9eSTgz~)z%AgHU zLkMv*%c&pUhFl36!Fb6;ua-eLu?uwBcF;UGj*2VD6z+qXiOJ7cVKZsFi?CU&+>>X9 zO^VS=%aV4m=P5cTi}VNfG?Jdbsb29>t{?ov^@I1z9ArYBbo_tf({9)ejoty?KJf)vRY!|hC-K8($sU}gsSBkVMEyg_^-wT$P*ng zMMvnH^xI%0V{|R+RM?5wVWU`s{9we6SaIc2R7rw~7`1BtxftGN7HhJIR^zky82RuX z4jT_}vU48@+6{kR5cni7xR{`*bKeXH!I_W_t8rI+oZn6fwG3v#FXQMRSqoL36N? z>sCuopYX+Oy?OX%{d@tIY*@0&ht`^^McgEc|~gFye4&V zUYCYCZ%8AZH>GjT+tOs`9cjArE~hIGK?-XJDMo*PV*mtEz>Q0DPB_2y3+!~G|> z`cHo*Hub(1s+K~2q7VgFEc@X9MB5Zz-l86_$eetQ%2<$@g;%VoLe5KG<&Cjwj+GKH z8=itH?K1Q#>2|tN3Xy~ami#!qy^$szE60RS`-xa>u;&48*5X0^Tyy9KUh-8!Zy*-{ zg;$c>lcEO5#Gg-Gvu_b?R;aG*OOCxvxmbT)-q+g*&hzEhsWhB{Qt-WJ6}BrW>48@k zbv^>cIfnAiC(zRQ6k0pSp}q43V#PPe&Ax@+&i63F`4KL0P9iq^fZXjDnCbkA^3U%u z*ZIrWIa}g8S8*w)y?@lxKbq+ul^Me3;(V+UoB3Q-&XTO2MJa-5n$d`&Spp(Cw0wU6 zpr+EI@(JxDYME_|@r{m&f*V=H55{H^ogNuW6qnp{Czak+#%$%)r2T@ENRqWwo`l}E zfRcN&<63&L7S5MTG-O3uRq{iGsy)Vjh-;CEl1=2M8hIc>SEOmxJrX5ulp~2yl(<$i zBJ+H9x>>F`=Vx)w&q34$sOvIl;!1ze+6_QQSAmOM6$)GpE_HRd!Zl#JYr%Zih9#~8 zYg`vLyFq`>FM{gE2p)7<0Aa+90X*_#n=f~6GYZ6j*e+D%etcl+Co-G^6#1x8aY5^dq|n9Qx6iel+7nyYf(m&xva-ka^&_mJv0qp?Ig| zC8uO?dy1P5np*{2Hv{LlD%5tXL5>^6dCh{MZgm*x)_^f?Eg0|ChDmN6xZJG=SGx6K zw%Z66xG}ii&4!h34y<=`lVpGS4gQ>N5R?p$j8S4Uj}4q2(gq(l^HP^GQnMSl2U&p} zn9S!{g#|d{7jes(S1M7VlJUHDz3175;BEA_G}&QB(ngsfJ+(0&HsvLx>c;kHt>~7fbX|YT=gIO~t5|B| zz0i~n^Ql%`B$g;)Vx~5xsBTY{ARNky$b>#Bu8|T~0#SkuDmt&VKYy{>g6<;Yaoa;R zw*%C7J3_YG37WZ`p_SVO+PPh!i`xx)x;>z;+Y^Sly>Rh*G13TH|ROoy=N_)k;qYnfYUb-A?Pv~;7&s5nG93hDTwZu!(#Ue zxXGOcx46?`lRE<*c4tC~I}4t5uYwod+3==2H;Dwi<3rUu#w8r8GT<4Z&ewprsA%30 z9_D6r8IksGMEtP`Bkf_cF^(J0d%_w{e#_K(e!o#wkl}wUP=XXsnj}dA7L8}A)zm&Ucra>`(i?+)l*1L^JpoV05p z<}OS!1?BjI&JnPd4poiu#-+4ZgSsLxR#2D&UZy6iUgoMJeWa!L$thbPJDK5XnOmV+ zG&Go!8Pk8Xsa!21COq9UftI^(rT2;%TOeAZU4?)#Crz6h*XHHoUtGJke-T{ff28b= zMdj}3=G}2!@*PXd-BH`SWBC@S>ff<4=?>o6+!Ae7!t*8WqU&keP2OGJJJu9yx9lp> zHYV;AsJ^LK+g71$tb08YKjg#iQk?Z=(9~TH`R;!T=)FYc~wp9`(t+nkM(h<2s5p?2frrmi2 zs)~Q3Y@ze<%eB(9o!+wAvbsgCb+v{vilfJb@wEZ%4t6MdKF%Y6HF7F zz=TVUiGHaW^0S_S>a2Q}#sj{iVk-K97es%Z>ec&p{L$Z2)?ad^fLo0H-G`j)$s}f+ zniM${pmbbGO<^^~t8Wzho#bZ=gF;%G)Ghmf)RroN6CM7joke>MF*gbdoXF6lYD}Lk#a<$0gzEZ{eKeuiTElbxJir5dtwTF4VT9nuu?0{xjp;|j2J1bOo2h__7b=v_ovO@KD zpqzpC?g~w(8fDsUs!^srj%1?Z&|d_@eF=rWmr>Yz17(Iclc1ohKlH9V$CZqz`Nm}; z?7XEX5c3{4h5(hL;n{D>{a%2)sFQz{d@fN=9EGf5(r_`jNmP>`+w2l;Z*o2-5@YcT z3374YY+oMOmt97My$O8>s=M#v`n{L5ZrP&q)xkk_GKp$e1v1%Y@zEA|4-aaKq27Xj z_lm-R*o)WI_G$<5h6w`KL$N3cc{wEGWuc5$R`$;05TAkKevW^rcpTa5 z7fF*F@+UXsOU9u@*)j-;s1hlV8b}jgd`^5ZA0cbtQBb6ZqIZB2c!+-Xi{?CYC+IoP z$P?NvW2Mn;5YCCV=#aHfdjerTDvy1rsPshA#tA%#(ft_#@fQSu-@tKy$Nv3^-0UyJ zg};%bokpSZAEd8mP^dhMcu{`}t%KnAKL(aQ*qF?DT{4CwcwK#C3L7HyQmVwHP$635 z@-QxaV3G8I7}0MCP^5s4izVuw6(~=cJX|FcImFZXvM($LqnWvK;|cp%ya?oIomq9%bUk++u26b?Q21I{?4qOm)p;a&l z1B0nBHW>EHaJewZxWbrqaYd_4fTU#l5~>f9gLTXE;lk}>g&7$PR4&MJR)aMP2(!QKIsrP zGIa8*MZq;@;}K4b_Nw-ps3tiC*PpzURbwe|7wW}t$F+B;mnG~(0l82@4X7Nu_Cc|B zEUtYj{5W_aB6GKjC^M>ZpNG1io(hdFmPXJHMx=NjPpAT#oTuaKzaUk9EqKa1d3FZk zUtQ5s;v^ZWsMdc?`&iBa>BDG5=GnX2mw9>-jHYwP{Bz&Zxn82gWDGpx09BMExF zrHYbus5CP74#jfBv}-@$%yVIpU*WkYc-f6>Kl3FCRiQ8ZPHQ7UJ!o03tXfi@Zg3np z!SPTpI03o0h)I7_;nLtVSQoq!ZV%3YJA-p! zXK)_u3eJbU!NssIxCD*`Z-6g?E8(}`jqqo1HJlCJ%%tF2W(U`^aPXG0pmbK%7tyL3 zbA*UiH30{BtKWXpeekyJ*+5Rp_{=tx9T(Ht9Lnm(a&aMJVSNRzS+Vwa zzQyk&`KLV|Y3ccPM5a5#S}fEoVlxEdh=n)e`ci-NLO7Ngu?dE0pUH$*q$=u)nGuur zr{<`OD2un_R|6FBb!k|A$X|Y*hY;Kbf#B_ks&_y}a658@9ndvc2t9&#!iB-RamjbW z<-vPkX7FBE94vwr*scoR2Wx}(!=~T^2m%iw2t14+@F+YUd<5cn{6ug!JQaKl_6Hw_ zL&1MNes#T>(3EpS8<*x1V?HjR1+8HPFVs%qul|-OaM-xU=)?)bVGbG+Ke~#C1=4*J z@mZOlqs1qk?+{;n6^X@eV*$^-%z#IXYbow4iTWMp0O9%hYEdcO5RX*-18^qI`vnZg zcJA2O*tVUGZQI;9xnr9fZEV}N?Tu}1tT+GP^L_Q!Th&uFHPzSYzPbiIGpElfLeBRa zL;4f&%E#lvB@&qY$tiG>FdPB{Psz4BwLg}nir=LGG^_RZzflN@=TYZHRW4Dx

g2 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 OL2`IDmg2(1p#KAOJ#?)A diff --git a/project-versions.json b/project-versions.json index b1ba7f55..2daa05bb 100644 --- a/project-versions.json +++ b/project-versions.json @@ -1,7 +1,7 @@ { - "appVersionCode": 654, - "appVersionName": "6.0.0", - "appSinceDate": "Dec 1, 2021", + "appVersionCode": 693, + "appVersionName": "6.0.1", + "appSinceDate": "Jan 1, 2022", "target": 28, "mini": 24, "compile": 31