From 9c3ae04ca2223f329d48bcfe6727d273c63debc1 Mon Sep 17 00:00:00 2001 From: iamr0s <271257581@qq.com> Date: Mon, 19 Aug 2024 18:10:31 +0800 Subject: [PATCH] refactor: UI, SERVER_API SERVER_API: io.github.iamr0s:Dhizuku-SERVER_API SERVER_API source: https://github.com/iamr0s/Dhizuku-API --- .gitmodules | 3 - api | 1 - app/build.gradle.kts | 17 +- app/src/main/AndroidManifest.xml | 32 +- .../dhizuku/aidl/IDhizukuUserService.aidl | 9 - .../aidl/IDhizukuUserServiceManager.aidl | 5 - .../aidl/com/rosan/dhizuku/aidl/ITest.aidl | 6 - app/src/main/java/com/rosan/dhizuku/App.kt | 70 +- .../exception/DhizukuNotWorkException.kt | 11 + .../dhizuku/data/common/util/ContextUtil.kt | 4 +- .../data/common/util/DeviceOwnerUtil.kt | 38 - .../dhizuku/data/common/util/DhizukuUtil.kt | 30 + .../rosan/dhizuku/data/common/util/IntUtil.kt | 3 + .../data/common/util/PackageInfoUtil.kt | 2 +- .../dhizuku/data/common/util/ShizukuUtil.kt | 44 +- .../data/settings/model/room/dao/AppDao.kt | 22 +- .../settings/model/room/entity/AppEntity.kt | 6 +- .../settings/model/room/impl/AppRepoImpl.kt | 12 +- .../dhizuku/data/settings/repo/AppRepo.kt | 12 +- .../com/rosan/dhizuku/di/viewmodel_module.kt | 9 +- .../dhizuku/server/BootCompleteReceiver.kt | 2 +- .../rosan/dhizuku/server/DhizukuConstants.kt | 5 - .../rosan/dhizuku/server/DhizukuDAReceiver.kt | 22 +- .../rosan/dhizuku/server/DhizukuProcess.kt | 11 - .../rosan/dhizuku/server/DhizukuProvider.kt | 49 -- .../rosan/dhizuku/server/DhizukuService.kt | 93 --- .../com/rosan/dhizuku/server/DhizukuState.kt | 27 + .../dhizuku/server/DhizukuUserService.kt | 63 -- .../dhizuku/server/DhizukuUserServiceArgs.kt | 30 - .../server/DhizukuUserServiceConnection.kt | 69 -- .../server/DhizukuUserServiceConnections.kt | 121 ---- .../rosan/dhizuku/server/MyDhizukuProvider.kt | 11 + .../rosan/dhizuku/server/MyDhizukuService.kt | 37 + .../rosan/dhizuku/server/RunningService.kt | 124 ++++ .../rosan/dhizuku/server/impl/IDhizukuImpl.kt | 192 ----- .../server/impl/IDhizukuRemoteProcessImpl.kt | 96 --- .../ui/activity/RequestPermissionActivity.kt | 240 ++++--- .../dhizuku/ui/activity/SettingsActivity.kt | 38 +- .../dhizuku/ui/page/settings/SettingsPage.kt | 29 +- .../dhizuku/ui/page/settings/SettingsRoute.kt | 14 + .../ui/page/settings/SettingsScreen.kt | 5 - .../ui/page/settings/activate/ActivatePage.kt | 271 ++++++++ .../settings/activate/ActivateViewData.kt | 8 + .../settings/activate/ActivateViewModel.kt | 216 ++++++ .../settings/activate/ActivateViewState.kt | 13 + .../app_management/AppManagementPage.kt | 179 +++++ .../app_management/AppManagementViewData.kt | 8 + .../app_management/AppManagementViewModel.kt | 85 +++ .../app_management/AppManagementViewState.kt | 6 + .../ui/page/settings/config/ConfigPage.kt | 173 ----- .../page/settings/config/ConfigViewAction.kt | 7 - .../page/settings/config/ConfigViewModel.kt | 76 -- .../page/settings/config/ConfigViewState.kt | 16 - .../ui/page/settings/home/HomeCardItem.kt | 11 - .../dhizuku/ui/page/settings/home/HomePage.kt | 658 ++++++++---------- .../dhizuku/ui/page/settings/main/MainPage.kt | 200 ------ .../ui/page/settings/main/NavigationData.kt | 11 - .../page/settings/preferred/PreferredPage.kt | 81 --- .../settings/preferred/PreferredViewAction.kt | 7 - .../settings/preferred/PreferredViewModel.kt | 87 --- .../settings/preferred/PreferredViewState.kt | 5 - .../rosan/dhizuku/ui/theme/AppIconCache.kt | 78 +++ .../dhizuku/ui/widget/dialog/DialogButton.kt | 6 - .../dhizuku/ui/widget/dialog/DialogButtons.kt | 45 -- .../ui/widget/dialog/PositionDialog.kt | 232 ------ .../dhizuku/ui/widget/setting/BaseWidget.kt | 72 -- .../ui/widget/setting/DropDownMenuWidget.kt | 119 ---- .../dhizuku/ui/widget/setting/LabelWidget.kt | 28 - .../dhizuku/ui/widget/setting/SwitchWidget.kt | 31 - .../round_hourglass_disabled_black_18.png | Bin 313 -> 0 bytes .../round_hourglass_disabled_black_20.png | Bin 324 -> 0 bytes .../round_hourglass_disabled_black_24.png | Bin 365 -> 0 bytes .../round_hourglass_disabled_black_36.png | Bin 502 -> 0 bytes .../round_hourglass_disabled_black_48.png | Bin 631 -> 0 bytes .../round_hourglass_empty_black_18.png | Bin 230 -> 0 bytes .../round_hourglass_empty_black_20.png | Bin 237 -> 0 bytes .../round_hourglass_empty_black_36.png | Bin 356 -> 0 bytes .../round_hourglass_empty_black_48.png | Bin 442 -> 0 bytes app/src/main/res/drawable/icon_background.xml | 9 - app/src/main/res/drawable/icon_foreground.xml | 21 - .../drawable/round_hourglass_disabled_20.xml | 13 - .../drawable/round_hourglass_disabled_24.xml | 13 - .../res/drawable/round_hourglass_empty_20.xml | 10 - .../res/drawable/round_hourglass_empty_24.xml | 10 - app/src/main/res/raw/empty_state.json | 1 - app/src/main/res/raw/loading.json | 1 - app/src/main/res/values-ar/strings.xml | 32 +- app/src/main/res/values-de/strings.xml | 32 +- app/src/main/res/values-es/strings.xml | 32 +- app/src/main/res/values-in/strings.xml | 32 +- app/src/main/res/values-ja/strings.xml | 32 +- app/src/main/res/values-ko/strings.xml | 32 +- app/src/main/res/values-pl/strings.xml | 32 +- app/src/main/res/values-pt-rBR/strings.xml | 32 +- app/src/main/res/values-pt/strings.xml | 32 +- app/src/main/res/values-ru/strings.xml | 32 +- app/src/main/res/values-sk/strings.xml | 32 +- app/src/main/res/values-tr/strings.xml | 35 +- app/src/main/res/values-zh-rCN/strings.xml | 61 +- app/src/main/res/values/colors.xml | 10 - app/src/main/res/values/strings.xml | 66 +- app/src/main/res/xml/device_admin.xml | 8 - build.gradle.kts | 2 +- gradle/libs.versions.toml | 36 +- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle.kts | 9 +- version.properties | 4 +- 107 files changed, 1796 insertions(+), 3210 deletions(-) delete mode 100644 .gitmodules delete mode 160000 api delete mode 100644 app/src/main/aidl/com/rosan/dhizuku/aidl/IDhizukuUserService.aidl delete mode 100644 app/src/main/aidl/com/rosan/dhizuku/aidl/IDhizukuUserServiceManager.aidl delete mode 100644 app/src/main/aidl/com/rosan/dhizuku/aidl/ITest.aidl create mode 100644 app/src/main/java/com/rosan/dhizuku/data/common/model/exception/DhizukuNotWorkException.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/data/common/util/DeviceOwnerUtil.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/data/common/util/DhizukuUtil.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/data/common/util/IntUtil.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/server/DhizukuConstants.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/server/DhizukuProcess.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/server/DhizukuProvider.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/server/DhizukuService.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/server/DhizukuState.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/server/DhizukuUserService.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceArgs.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceConnection.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceConnections.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/server/MyDhizukuProvider.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/server/MyDhizukuService.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/server/RunningService.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/server/impl/IDhizukuImpl.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/server/impl/IDhizukuRemoteProcessImpl.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsRoute.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsScreen.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivatePage.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewData.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewModel.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewState.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementPage.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewData.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewModel.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewState.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigPage.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewAction.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewModel.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewState.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/home/HomeCardItem.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/main/MainPage.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/main/NavigationData.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredPage.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewAction.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewModel.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewState.kt create mode 100644 app/src/main/java/com/rosan/dhizuku/ui/theme/AppIconCache.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/DialogButton.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/DialogButtons.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/PositionDialog.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/widget/setting/BaseWidget.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/widget/setting/DropDownMenuWidget.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/widget/setting/LabelWidget.kt delete mode 100644 app/src/main/java/com/rosan/dhizuku/ui/widget/setting/SwitchWidget.kt delete mode 100644 app/src/main/res/drawable-hdpi/round_hourglass_disabled_black_18.png delete mode 100644 app/src/main/res/drawable-hdpi/round_hourglass_disabled_black_20.png delete mode 100644 app/src/main/res/drawable-hdpi/round_hourglass_disabled_black_24.png delete mode 100644 app/src/main/res/drawable-hdpi/round_hourglass_disabled_black_36.png delete mode 100644 app/src/main/res/drawable-hdpi/round_hourglass_disabled_black_48.png delete mode 100644 app/src/main/res/drawable-hdpi/round_hourglass_empty_black_18.png delete mode 100644 app/src/main/res/drawable-hdpi/round_hourglass_empty_black_20.png delete mode 100644 app/src/main/res/drawable-hdpi/round_hourglass_empty_black_36.png delete mode 100644 app/src/main/res/drawable-hdpi/round_hourglass_empty_black_48.png delete mode 100644 app/src/main/res/drawable/icon_background.xml delete mode 100644 app/src/main/res/drawable/icon_foreground.xml delete mode 100644 app/src/main/res/drawable/round_hourglass_disabled_20.xml delete mode 100644 app/src/main/res/drawable/round_hourglass_disabled_24.xml delete mode 100644 app/src/main/res/drawable/round_hourglass_empty_20.xml delete mode 100644 app/src/main/res/drawable/round_hourglass_empty_24.xml delete mode 100644 app/src/main/res/raw/empty_state.json delete mode 100644 app/src/main/res/raw/loading.json delete mode 100644 app/src/main/res/values/colors.xml delete mode 100644 app/src/main/res/xml/device_admin.xml diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index a239ee7..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "api"] - path = api - url = https://github.com/iamr0s/Dhizuku-API.git diff --git a/api b/api deleted file mode 160000 index b17a8cb..0000000 --- a/api +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b17a8cbdc86f7da454c917e267a837a36f985e13 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6989fd2..8038c38 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,12 +1,12 @@ import org.jetbrains.kotlin.konan.properties.loadProperties import java.util.Properties -@Suppress("DSL_SCOPE_VIOLATION") plugins { alias(libs.plugins.agp.app) alias(libs.plugins.kotlin) id("kotlin-kapt") alias(libs.plugins.ksp) + alias(libs.plugins.compose.compiler) } val keystoreDir = "$rootDir/keystore" @@ -22,11 +22,11 @@ for (name in arrayOf("r0s.properties", "debug.properties")) { android { namespace = "com.rosan.dhizuku" - compileSdk = 34 + compileSdk = 35 defaultConfig { minSdk = 21 - targetSdk = 34 + targetSdk = 35 val versionProps = loadProperties("$rootDir/version.properties") versionCode = versionProps.getProperty("versionCode").toInt() versionName = versionProps.getProperty("versionName") @@ -92,7 +92,6 @@ android { buildFeatures { buildConfig = true compose = true - aidl = true } dependenciesInfo { @@ -100,10 +99,6 @@ android { includeInBundle = false } - composeOptions { - kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() - } - ksp { arg("room.schemaLocation", "$projectDir/schemas") } @@ -111,8 +106,6 @@ android { dependencies { compileOnly(project(":hidden-api")) - implementation(project(":dhizuku-aidl")) - implementation(project(":dhizuku-shared")) implementation(libs.androidx.core) implementation(libs.androidx.lifecycle) @@ -133,8 +126,6 @@ dependencies { implementation(libs.koin.android) implementation(libs.koin.compose) - implementation(libs.lottie.compose) - implementation(libs.accompanist) implementation(libs.accompanist.navigationAnimation) implementation(libs.accompanist.flowlayout) @@ -148,5 +139,5 @@ dependencies { implementation(libs.rikka.shizuku.api) implementation(libs.rikka.shizuku.provider) - implementation(libs.iamr0s.androidAppProcess) + implementation(libs.iamr0s.dhizuku.api) } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8028344..b219358 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -51,12 +51,27 @@ + tools:ignore="ExportedContentProvider,UnusedAttribute"> + + + + + + + + + + + android:resource="@xml/dhizuku_device_admin" /> @@ -92,17 +107,6 @@ android:multiprocess="false" android:permission="android.permission.INTERACT_ACROSS_USERS_FULL" /> - - - - - - diff --git a/app/src/main/aidl/com/rosan/dhizuku/aidl/IDhizukuUserService.aidl b/app/src/main/aidl/com/rosan/dhizuku/aidl/IDhizukuUserService.aidl deleted file mode 100644 index 9d770eb..0000000 --- a/app/src/main/aidl/com/rosan/dhizuku/aidl/IDhizukuUserService.aidl +++ /dev/null @@ -1,9 +0,0 @@ -package com.rosan.dhizuku.aidl; - -import android.content.ComponentName; - -interface IDhizukuUserService { - void quit(); - - IBinder startService(in ComponentName component); -} \ No newline at end of file diff --git a/app/src/main/aidl/com/rosan/dhizuku/aidl/IDhizukuUserServiceManager.aidl b/app/src/main/aidl/com/rosan/dhizuku/aidl/IDhizukuUserServiceManager.aidl deleted file mode 100644 index 0360cd9..0000000 --- a/app/src/main/aidl/com/rosan/dhizuku/aidl/IDhizukuUserServiceManager.aidl +++ /dev/null @@ -1,5 +0,0 @@ -package com.rosan.dhizuku.aidl; - -interface IDhizukuUserServiceManager { - void destroy(); -} \ No newline at end of file diff --git a/app/src/main/aidl/com/rosan/dhizuku/aidl/ITest.aidl b/app/src/main/aidl/com/rosan/dhizuku/aidl/ITest.aidl deleted file mode 100644 index 87dd782..0000000 --- a/app/src/main/aidl/com/rosan/dhizuku/aidl/ITest.aidl +++ /dev/null @@ -1,6 +0,0 @@ -package com.rosan.dhizuku.aidl; - -interface ITest { - void onCreate() = 1; - void onDestroy() = 2; -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/App.kt b/app/src/main/java/com/rosan/dhizuku/App.kt index 60bacdc..c5574e5 100644 --- a/app/src/main/java/com/rosan/dhizuku/App.kt +++ b/app/src/main/java/com/rosan/dhizuku/App.kt @@ -3,52 +3,20 @@ package com.rosan.dhizuku import android.app.Application import android.app.admin.DevicePolicyManager import android.content.Context -import android.os.Build -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue -import com.rosan.dhizuku.data.common.util.clearDelegatedScopes -import com.rosan.dhizuku.data.common.util.getPackageInfoForUid -import com.rosan.dhizuku.data.common.util.signature -import com.rosan.dhizuku.data.settings.repo.AppRepo import com.rosan.dhizuku.di.init.appModules -import com.rosan.dhizuku.server.DhizukuService -import com.rosan.dhizuku.shared.DhizukuVariables -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch +import com.rosan.dhizuku.server.DhizukuState +import com.rosan.dhizuku.server.RunningService import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidLogger import org.koin.core.component.KoinComponent -import org.koin.core.component.inject import org.koin.core.context.startKoin import org.koin.dsl.module import rikka.sui.Sui class App : Application(), KoinComponent { - private val scope = CoroutineScope(Dispatchers.IO) - - private val repo by inject() - - private val devicePolicyManager by lazy { - getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager - } - - var isDeviceAdminer by mutableStateOf(false) - private set - - var isDeviceOwner by mutableStateOf(false) - private set - - var isProfileOwner by mutableStateOf(false) - private set - - var isOwner by mutableStateOf(false) - private set - override fun onCreate() { super.onCreate() - syncOwnerStatus() + DhizukuState.sync(getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager) startKoin { androidLogger() androidContext(this@App) @@ -56,26 +24,18 @@ class App : Application(), KoinComponent { modules(module { single { this@App } }) } Sui.init(packageName) - syncAppRepo() - DhizukuService.start(this) - } - - fun syncOwnerStatus() { - isDeviceAdminer = devicePolicyManager.isAdminActive(DhizukuVariables.COMPONENT_NAME) - isDeviceOwner = devicePolicyManager.isDeviceOwnerApp(packageName) - isProfileOwner = devicePolicyManager.isProfileOwnerApp(packageName) - isOwner = isDeviceOwner || isProfileOwner + RunningService.start(this) } - fun syncAppRepo() = scope.launch { - repo.all().forEach { - val packageInfo = packageManager.getPackageInfoForUid(it.uid) - if (it.allowApi && - packageInfo != null && - it.signature == packageInfo.signature - ) return@forEach - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) clearDelegatedScopes(it.uid) - repo.delete(it) - } - } +// fun syncAppRepo() = scope.launch { +// repo.all().forEach { +// val packageInfo = packageManager.getPackageInfoForUid(it.uid) +// if (it.allowApi && +// packageInfo != null && +// it.signature == packageInfo.signature +// ) return@forEach +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) clearDelegatedScopes(it.uid) +// repo.delete(it) +// } +// } } diff --git a/app/src/main/java/com/rosan/dhizuku/data/common/model/exception/DhizukuNotWorkException.kt b/app/src/main/java/com/rosan/dhizuku/data/common/model/exception/DhizukuNotWorkException.kt new file mode 100644 index 0000000..ca3434e --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/data/common/model/exception/DhizukuNotWorkException.kt @@ -0,0 +1,11 @@ +package com.rosan.dhizuku.data.common.model.exception + +class DhizukuNotWorkException : RuntimeException { + constructor() : super() + + constructor(message: String?) : super(message) + + constructor(cause: Throwable?) : super(cause) + + constructor(message: String?, cause: Throwable?) : super(message, cause) +} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/data/common/util/ContextUtil.kt b/app/src/main/java/com/rosan/dhizuku/data/common/util/ContextUtil.kt index 3b59450..c17eded 100644 --- a/app/src/main/java/com/rosan/dhizuku/data/common/util/ContextUtil.kt +++ b/app/src/main/java/com/rosan/dhizuku/data/common/util/ContextUtil.kt @@ -10,7 +10,7 @@ import android.os.Looper import android.widget.Toast import androidx.annotation.RequiresApi import androidx.annotation.StringRes -import com.rosan.dhizuku.shared.DhizukuVariables +import com.rosan.dhizuku.server.DhizukuDAReceiver fun Context.openUrlInBrowser(url: String) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) @@ -34,7 +34,7 @@ fun Context.clearDelegatedScopes(uid: Int) { val devicePolicyManager = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager packageNames.forEach { devicePolicyManager.setDelegatedScopes( - DhizukuVariables.COMPONENT_NAME, + DhizukuDAReceiver.name, it, emptyList() ) diff --git a/app/src/main/java/com/rosan/dhizuku/data/common/util/DeviceOwnerUtil.kt b/app/src/main/java/com/rosan/dhizuku/data/common/util/DeviceOwnerUtil.kt deleted file mode 100644 index 729b861..0000000 --- a/app/src/main/java/com/rosan/dhizuku/data/common/util/DeviceOwnerUtil.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.rosan.dhizuku.data.common.util - -import android.app.admin.IDevicePolicyManager -import android.content.ComponentName -import android.content.Context -import android.os.Build -import android.system.Os -import com.rosan.dhizuku.R -import kotlinx.coroutines.delay -import rikka.shizuku.ShizukuBinderWrapper -import rikka.shizuku.SystemServiceHelper - -suspend fun setDeviceOwner(context: Context, who: ComponentName) { - requireShizukuPermissionGranted(context) { - // wait for the account cache be refreshed - delay(1500) - - val binder = - ShizukuBinderWrapper(SystemServiceHelper.getSystemService(Context.DEVICE_POLICY_SERVICE)) - val manager = IDevicePolicyManager.Stub.asInterface(binder) - val ownerName = context.getString(R.string.app_name) - val userId = Os.getuid() / 100000 - val profileOwner = false - manager.setActiveAdmin(who, true, userId) - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) - manager.setDeviceOwner(who, userId, profileOwner) - else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) - manager.setDeviceOwner(who, ownerName, userId, false) - else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) - manager.setDeviceOwner(who, ownerName, userId) - else manager.setDeviceOwner(who.packageName, ownerName) - } catch (e: Exception) { - manager.removeActiveAdmin(who, userId) - throw e - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/data/common/util/DhizukuUtil.kt b/app/src/main/java/com/rosan/dhizuku/data/common/util/DhizukuUtil.kt new file mode 100644 index 0000000..04f2afa --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/data/common/util/DhizukuUtil.kt @@ -0,0 +1,30 @@ +package com.rosan.dhizuku.data.common.util + +import android.content.pm.PackageManager +import com.rosan.dhizuku.api.Dhizuku +import com.rosan.dhizuku.api.DhizukuRequestPermissionListener +import com.rosan.dhizuku.data.common.model.exception.DhizukuNotWorkException +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.callbackFlow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.first + +private suspend fun blockingRequestDhizukuPermission() = callbackFlow { + Dhizuku.requestPermission(object : DhizukuRequestPermissionListener() { + override fun onRequestPermission(grantResult: Int) { + if (grantResult == PackageManager.PERMISSION_GRANTED) trySend(Unit) + else close(DhizukuNotWorkException("dhizuku permission denied")) + } + }) + awaitClose() +}.catch { + throw if (it !is DhizukuNotWorkException) DhizukuNotWorkException(cause = it) + else it +}.first() + +suspend fun requireDhizukuPermissionGranted(action: suspend () -> T): T { + if (!Dhizuku.init()) throw DhizukuNotWorkException("dhizuku isn't activated") + if (!Dhizuku.isPermissionGranted()) + blockingRequestDhizukuPermission() + return action() +} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/data/common/util/IntUtil.kt b/app/src/main/java/com/rosan/dhizuku/data/common/util/IntUtil.kt new file mode 100644 index 0000000..331b9e6 --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/data/common/util/IntUtil.kt @@ -0,0 +1,3 @@ +package com.rosan.dhizuku.data.common.util + +fun Int.has(flag: Int) = this and flag != 0 \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/data/common/util/PackageInfoUtil.kt b/app/src/main/java/com/rosan/dhizuku/data/common/util/PackageInfoUtil.kt index 4a549cf..1173d41 100644 --- a/app/src/main/java/com/rosan/dhizuku/data/common/util/PackageInfoUtil.kt +++ b/app/src/main/java/com/rosan/dhizuku/data/common/util/PackageInfoUtil.kt @@ -5,7 +5,7 @@ import android.content.pm.PackageManager import android.os.Build fun PackageManager.getPackageNameForUid(uid: Int): String? = - getNameForUid(uid) ?: getPackagesForUid(uid)?.first() + getPackagesForUid(uid)?.first() fun PackageManager.getPackageInfoForUid( uid: Int, diff --git a/app/src/main/java/com/rosan/dhizuku/data/common/util/ShizukuUtil.kt b/app/src/main/java/com/rosan/dhizuku/data/common/util/ShizukuUtil.kt index e3f00d9..305582d 100644 --- a/app/src/main/java/com/rosan/dhizuku/data/common/util/ShizukuUtil.kt +++ b/app/src/main/java/com/rosan/dhizuku/data/common/util/ShizukuUtil.kt @@ -10,27 +10,29 @@ import kotlinx.coroutines.flow.first import rikka.shizuku.Shizuku import rikka.sui.Sui -suspend fun requireShizukuPermissionGranted(context: Context, action: suspend () -> T): T { - callbackFlow { - Sui.init(context.packageName) - if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) { - send(Unit) - awaitClose() - } else { - val requestCode = (Int.MIN_VALUE..Int.MAX_VALUE).random() - val listener = - Shizuku.OnRequestPermissionResultListener { _requestCode, grantResult -> - if (_requestCode != requestCode) return@OnRequestPermissionResultListener - if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) - trySend(Unit) - else close(Exception("sui/shizuku permission denied")) - } - Shizuku.addRequestPermissionResultListener(listener) - Shizuku.requestPermission(requestCode) - awaitClose { Shizuku.removeRequestPermissionResultListener(listener) } +private suspend fun blockingRequestShizukuPermission() = callbackFlow { + val requestCode = (Int.MIN_VALUE..Int.MAX_VALUE).random() + val listener = + Shizuku.OnRequestPermissionResultListener { _requestCode, grantResult -> + if (_requestCode != requestCode) return@OnRequestPermissionResultListener + if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) + trySend(Unit) + else close(ShizukuNotWorkException("sui/shizuku permission denied")) } - }.catch { - throw ShizukuNotWorkException(it) - }.first() + Shizuku.addRequestPermissionResultListener(listener) + Shizuku.requestPermission(requestCode) + awaitClose { Shizuku.removeRequestPermissionResultListener(listener) } +}.catch { + throw if (it !is ShizukuNotWorkException) ShizukuNotWorkException(cause = it) + else it +}.first() + +suspend fun requireShizukuPermissionGranted(context: Context, action: suspend () -> T): T { + Sui.init(context.packageName) + val binder = Shizuku.getBinder() + if (binder == null || !binder.pingBinder()) + throw ShizukuNotWorkException("sui/shizuku isn't activated") + if (Shizuku.checkSelfPermission() != PackageManager.PERMISSION_GRANTED) + blockingRequestShizukuPermission() return action() } \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/dao/AppDao.kt b/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/dao/AppDao.kt index 2d01b07..1f721e8 100644 --- a/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/dao/AppDao.kt +++ b/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/dao/AppDao.kt @@ -1,28 +1,32 @@ package com.rosan.dhizuku.data.settings.model.room.dao -import androidx.room.* +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.Query +import androidx.room.Update import com.rosan.dhizuku.data.settings.model.room.entity.AppEntity import kotlinx.coroutines.flow.Flow @Dao interface AppDao { - @Query("select * from app") - fun all(): List - @Query("select * from app") fun flowAll(): Flow> - @Query("select * from app where id = :id limit 1") - fun find(id: Long): AppEntity? - @Query("select * from app where id = :id limit 1") fun flowFind(id: Long): Flow @Query("select * from app where uid = :uid limit 1") - fun findByUID(uid: Int): AppEntity? + fun flowFindByUID(uid: Int): Flow + + @Query("select * from app") + suspend fun all(): List + + @Query("select * from app where id = :id limit 1") + suspend fun find(id: Long): AppEntity? @Query("select * from app where uid = :uid limit 1") - fun flowFindByUID(uid: Int): Flow + suspend fun findByUID(uid: Int): AppEntity? @Update suspend fun update(entity: AppEntity) diff --git a/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/entity/AppEntity.kt b/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/entity/AppEntity.kt index 9aa3039..de5e72b 100644 --- a/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/entity/AppEntity.kt +++ b/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/entity/AppEntity.kt @@ -21,8 +21,4 @@ data class AppEntity( @ColumnInfo(name = "allow_api") var allowApi: Boolean, @ColumnInfo(name = "created_at") var createdAt: Long = System.currentTimeMillis(), @ColumnInfo(name = "modified_at") var modifiedAt: Long = System.currentTimeMillis(), -) { - companion object { - val DENY = AppEntity(uid = -1, signature = "", allowApi = false) - } -} \ No newline at end of file +) diff --git a/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/impl/AppRepoImpl.kt b/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/impl/AppRepoImpl.kt index 97e2b15..670a50c 100644 --- a/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/impl/AppRepoImpl.kt +++ b/app/src/main/java/com/rosan/dhizuku/data/settings/model/room/impl/AppRepoImpl.kt @@ -8,18 +8,18 @@ import kotlinx.coroutines.flow.Flow class AppRepoImpl( private val dao: AppDao ) : AppRepo { - override fun all(): List = dao.all() - override fun flowAll(): Flow> = dao.flowAll() - override fun find(id: Long): AppEntity? = dao.find(id) - override fun flowFind(id: Long): Flow = dao.flowFind(id) - override fun findByUID(uid: Int): AppEntity? = dao.findByUID(uid) - override fun flowFindByUID(uid: Int): Flow = dao.flowFindByUID(uid) + override suspend fun all(): List = dao.all() + + override suspend fun find(id: Long): AppEntity? = dao.find(id) + + override suspend fun findByUID(uid: Int): AppEntity? = dao.findByUID(uid) + override suspend fun update(entity: AppEntity) { entity.modifiedAt = System.currentTimeMillis() dao.update(entity) diff --git a/app/src/main/java/com/rosan/dhizuku/data/settings/repo/AppRepo.kt b/app/src/main/java/com/rosan/dhizuku/data/settings/repo/AppRepo.kt index 76011fe..e1bdb87 100644 --- a/app/src/main/java/com/rosan/dhizuku/data/settings/repo/AppRepo.kt +++ b/app/src/main/java/com/rosan/dhizuku/data/settings/repo/AppRepo.kt @@ -4,18 +4,18 @@ import com.rosan.dhizuku.data.settings.model.room.entity.AppEntity import kotlinx.coroutines.flow.Flow interface AppRepo { - fun all(): List - fun flowAll(): Flow> - fun find(id: Long): AppEntity? - fun flowFind(id: Long): Flow - fun findByUID(uid: Int): AppEntity? - fun flowFindByUID(uid: Int): Flow + suspend fun all(): List + + suspend fun find(id: Long): AppEntity? + + suspend fun findByUID(uid: Int): AppEntity? + suspend fun update(entity: AppEntity) suspend fun insert(entity: AppEntity) diff --git a/app/src/main/java/com/rosan/dhizuku/di/viewmodel_module.kt b/app/src/main/java/com/rosan/dhizuku/di/viewmodel_module.kt index 68a4496..5b01c40 100644 --- a/app/src/main/java/com/rosan/dhizuku/di/viewmodel_module.kt +++ b/app/src/main/java/com/rosan/dhizuku/di/viewmodel_module.kt @@ -1,16 +1,15 @@ package com.rosan.dhizuku.di -import com.rosan.dhizuku.ui.page.settings.config.ConfigViewModel -import com.rosan.dhizuku.ui.page.settings.preferred.PreferredViewModel +import com.rosan.dhizuku.ui.page.settings.activate.ActivateViewModel +import com.rosan.dhizuku.ui.page.settings.app_management.AppManagementViewModel import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.dsl.module val viewModelModule = module { viewModel { - ConfigViewModel(get()) + AppManagementViewModel() } - viewModel { - PreferredViewModel(get()) + ActivateViewModel() } } \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/BootCompleteReceiver.kt b/app/src/main/java/com/rosan/dhizuku/server/BootCompleteReceiver.kt index 2a5f2bb..b40231b 100644 --- a/app/src/main/java/com/rosan/dhizuku/server/BootCompleteReceiver.kt +++ b/app/src/main/java/com/rosan/dhizuku/server/BootCompleteReceiver.kt @@ -14,6 +14,6 @@ class BootCompleteReceiver : BroadcastReceiver() { Intent.ACTION_LOCKED_BOOT_COMPLETED -> {} else -> return } - DhizukuService.start(context) + RunningService.start(context) } } \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/DhizukuConstants.kt b/app/src/main/java/com/rosan/dhizuku/server/DhizukuConstants.kt deleted file mode 100644 index dcfc2e5..0000000 --- a/app/src/main/java/com/rosan/dhizuku/server/DhizukuConstants.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.rosan.dhizuku.server - -const val DHIZUKU_SERVRE_VERSION_CODE = 5 - -const val DHIZUKU_SERVER_VERSION_NAME = "1.5" \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/DhizukuDAReceiver.kt b/app/src/main/java/com/rosan/dhizuku/server/DhizukuDAReceiver.kt index be06462..4223223 100644 --- a/app/src/main/java/com/rosan/dhizuku/server/DhizukuDAReceiver.kt +++ b/app/src/main/java/com/rosan/dhizuku/server/DhizukuDAReceiver.kt @@ -1,36 +1,22 @@ package com.rosan.dhizuku.server +import android.annotation.SuppressLint import android.app.admin.DeviceAdminReceiver +import android.app.admin.DevicePolicyManager import android.content.ComponentName import android.content.Context import android.content.Intent -import com.rosan.dhizuku.App import com.rosan.dhizuku.BuildConfig import org.koin.core.component.KoinComponent -import org.koin.core.component.get class DhizukuDAReceiver : DeviceAdminReceiver(), KoinComponent { companion object { val name = ComponentName(BuildConfig.APPLICATION_ID, DhizukuDAReceiver::class.java.name) } - private val app = get().applicationContext as App - - override fun onEnabled(context: Context, intent: Intent) { - super.onEnabled(context, intent) - app.syncOwnerStatus() - } - + @SuppressLint("UnsafeProtectedBroadcastReceiver") override fun onReceive(context: Context, intent: Intent) { super.onReceive(context, intent) - } - - override fun onDisableRequested(context: Context, intent: Intent): CharSequence? { - return super.onDisableRequested(context, intent) - } - - override fun onDisabled(context: Context, intent: Intent) { - super.onDisabled(context, intent) - app.syncOwnerStatus() + DhizukuState.sync(context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager) } } \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/DhizukuProcess.kt b/app/src/main/java/com/rosan/dhizuku/server/DhizukuProcess.kt deleted file mode 100644 index 0b608d8..0000000 --- a/app/src/main/java/com/rosan/dhizuku/server/DhizukuProcess.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.rosan.dhizuku.server - -import android.annotation.SuppressLint -import com.rosan.app_process.AppProcess - -@SuppressLint("StaticFieldLeak") -object DhizukuProcess : AppProcess.Default() { - init { - init() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/DhizukuProvider.kt b/app/src/main/java/com/rosan/dhizuku/server/DhizukuProvider.kt deleted file mode 100644 index f619832..0000000 --- a/app/src/main/java/com/rosan/dhizuku/server/DhizukuProvider.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.rosan.dhizuku.server - -import android.content.ContentProvider -import android.content.ContentValues -import android.database.Cursor -import android.net.Uri -import android.os.Bundle -import com.rosan.dhizuku.App -import com.rosan.dhizuku.aidl.IDhizukuClient -import com.rosan.dhizuku.server.impl.IDhizukuImpl -import com.rosan.dhizuku.shared.DhizukuVariables -import org.koin.core.component.KoinComponent -import org.koin.core.component.inject - -class DhizukuProvider : ContentProvider(), KoinComponent { - private val app by inject() - - override fun call(method: String, arg: String?, extras: Bundle?): Bundle? { - app.syncOwnerStatus() - if (!app.isOwner) return null - if (method != DhizukuVariables.PROVIDER_METHOD_CLIENT) return null - val client = extras?.getBinder(DhizukuVariables.EXTRA_CLIENT)?.let { - IDhizukuClient.Stub.asInterface(it) - } ?: return null - val bundle = Bundle() - bundle.putBinder(DhizukuVariables.PARAM_DHIZUKU_BINDER, IDhizukuImpl(client).asBinder()) - return bundle - } - - override fun onCreate(): Boolean = true - - override fun query( - uri: Uri, - projection: Array?, - selection: String?, - selectionArgs: Array?, - sortOrder: String? - ): Cursor? = null - - override fun getType(uri: Uri): String? = null - - override fun insert(uri: Uri, values: ContentValues?): Uri? = null - - override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int = 0 - - override fun update( - uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array? - ): Int = 0 -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/DhizukuService.kt b/app/src/main/java/com/rosan/dhizuku/server/DhizukuService.kt deleted file mode 100644 index ba6061f..0000000 --- a/app/src/main/java/com/rosan/dhizuku/server/DhizukuService.kt +++ /dev/null @@ -1,93 +0,0 @@ -package com.rosan.dhizuku.server - -import android.app.Service -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.content.IntentFilter -import android.content.pm.ServiceInfo -import android.os.Build -import android.os.IBinder -import androidx.core.app.NotificationChannelCompat -import androidx.core.app.NotificationCompat -import androidx.core.app.NotificationManagerCompat -import com.rosan.dhizuku.App -import com.rosan.dhizuku.R -import kotlinx.coroutines.runBlocking -import org.koin.core.component.KoinComponent -import org.koin.core.component.inject - -class DhizukuService : Service(), KoinComponent { - companion object { - fun start(context: Context) { - val intent = Intent(context, DhizukuService::class.java) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) context.startForegroundService( - intent - ) - else context.startService(intent) - } - } - - private val app by inject() - - private val packageReceiver = object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - if (intent == null) return - val packageName = intent.dataString ?: return - app.syncAppRepo() - } - } - - override fun onBind(intent: Intent?): IBinder? { - return null - } - - override fun onCreate() { - super.onCreate() - runBlocking { - run() - } - } - - override fun onDestroy() { - unregisterReceiver(packageReceiver) - super.onDestroy() - } - - private suspend fun run() { - runForeground() - registerPackageReceiver() - } - - private fun registerPackageReceiver() { - val filter = IntentFilter() - filter.addAction(Intent.ACTION_PACKAGE_ADDED) - filter.addAction(Intent.ACTION_PACKAGE_REMOVED) - filter.addDataScheme("package") - registerReceiver(packageReceiver, filter) - } - - private suspend fun runForeground() { - val manager = NotificationManagerCompat.from(this) - val channelName = "service_channel" - val channel: NotificationChannelCompat = - NotificationChannelCompat.Builder(channelName, NotificationManagerCompat.IMPORTANCE_MAX) - .setName(getString(R.string.service_channel_name)).build() - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) manager.createNotificationChannel( - channel - ) - val notificationId = 1 - val notification = NotificationCompat.Builder(this, channel.id) - .setSmallIcon(R.drawable.round_hourglass_empty_black_24) - .setContentTitle(getString(R.string.service_running)).setAutoCancel(false) - .setOngoing(true).build() - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) startForeground( - notificationId, - notification - ) else startForeground( - notificationId, - notification, - ServiceInfo.FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/DhizukuState.kt b/app/src/main/java/com/rosan/dhizuku/server/DhizukuState.kt new file mode 100644 index 0000000..9cb28ef --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/server/DhizukuState.kt @@ -0,0 +1,27 @@ +package com.rosan.dhizuku.server + +import android.app.admin.DevicePolicyManager +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import com.rosan.dhizuku.BuildConfig + +data object DhizukuState { + data class State( + val device: Boolean = false, + val profile: Boolean = false + ) { + val owner = device || profile + } + + var state by mutableStateOf(State()) + private set + + fun sync(devicePolicyManager: DevicePolicyManager) { + val packageName = BuildConfig.APPLICATION_ID + state = State( + device = devicePolicyManager.isDeviceOwnerApp(packageName), + profile = devicePolicyManager.isProfileOwnerApp(packageName) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserService.kt b/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserService.kt deleted file mode 100644 index 0817581..0000000 --- a/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserService.kt +++ /dev/null @@ -1,63 +0,0 @@ -package com.rosan.dhizuku.server - -import android.content.ComponentName -import android.content.Context -import android.os.Binder -import android.os.IBinder -import android.os.Parcel -import androidx.annotation.Keep -import com.rosan.dhizuku.aidl.IDhizukuUserService -import java.lang.reflect.Constructor -import kotlin.system.exitProcess - -class DhizukuUserService @Keep constructor(private val context: Context) : - IDhizukuUserService.Stub() { - private val map = mutableMapOf() - - override fun quit() { - for (service in map.values) { - transact(service, 2) - } - exitProcess(0) - } - - override fun startService(component: ComponentName): IBinder { - return map.getOrPut(component.flattenToString()) { - val packageContext = context.createPackageContext( - component.packageName, - Context.CONTEXT_INCLUDE_CODE or Context.CONTEXT_IGNORE_SECURITY - ) - val serviceClazz = packageContext.classLoader.loadClass(component.className) - var constructorWithContext: Constructor<*>? = null - try { - constructorWithContext = serviceClazz.getConstructor(Context::class.java) - } catch (_: NoSuchMethodException) { - } catch (_: SecurityException) { - } - val service = - (if (constructorWithContext != null) constructorWithContext.newInstance(context) - else serviceClazz.newInstance()).apply { - } as IBinder - transact(service, 1) - return@getOrPut service - } - } - - private fun transact(service: IBinder, code: Int) { - var dataParcel: Parcel? = null - var replyParcel: Parcel? = null - try { - val data = Parcel.obtain() - dataParcel = data - val reply = Parcel.obtain() - replyParcel = reply - data.writeInterfaceToken(service.interfaceDescriptor!!) - service.transact( - IBinder.FIRST_CALL_TRANSACTION + code, data, reply, Binder.FLAG_ONEWAY - ) - } finally { - dataParcel?.recycle() - replyParcel?.recycle() - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceArgs.kt b/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceArgs.kt deleted file mode 100644 index 25fbd19..0000000 --- a/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceArgs.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.rosan.dhizuku.server - -import android.content.ComponentName -import android.os.Build -import android.os.Bundle -import com.rosan.dhizuku.shared.DhizukuVariables - -class DhizukuUserServiceArgs { - private var bundle = Bundle(); - - var componentName: ComponentName - get() = (if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) - bundle.getParcelable(DhizukuVariables.PARAM_COMPONENT, ComponentName::class.java) - else bundle.getParcelable(DhizukuVariables.PARAM_COMPONENT))!! - set(value) = bundle.putParcelable(DhizukuVariables.PARAM_COMPONENT, value) - - constructor(bundle: Bundle) { - this.bundle = bundle - } - - constructor(args: DhizukuUserServiceArgs) : this(args.bundle) - - constructor(name: ComponentName) : this(Bundle().apply { - putParcelable(DhizukuVariables.PARAM_COMPONENT, name) - }) - - fun build(): Bundle { - return bundle; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceConnection.kt b/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceConnection.kt deleted file mode 100644 index d29b053..0000000 --- a/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceConnection.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.rosan.dhizuku.server - -import android.os.IBinder -import com.rosan.dhizuku.aidl.IDhizukuUserServiceConnection - -class DhizukuUserServiceConnection( - val uid: Int, - val pid: Int, - connection: IDhizukuUserServiceConnection -) { - private var _connection = connection - - var connection: IDhizukuUserServiceConnection - get() = _connection - set(value) { - kotlin.runCatching { _connection.asBinder().unlinkToDeath(recipient, 0) } - _connection = value - kotlin.runCatching { - _connection.asBinder().linkToDeath(recipient, 0) - } - } - - private val recipient = IBinder.DeathRecipient { - DhizukuUserServiceConnections.unbind(uid, pid) - } - - private val tokens = mutableListOf() - - init { - kotlin.runCatching { - _connection.asBinder().linkToDeath(recipient, 0) - } - } - - fun register(args: DhizukuUserServiceArgs) { - val name = args.componentName - val token = name.flattenToString() - tokens.remove(token) - tokens.add(token) - } - - fun unregister(args: DhizukuUserServiceArgs) { - val name = args.componentName - val token = name.flattenToString() - tokens.remove(token) - } - - fun isRegister(token: String) = tokens.contains(token) - - fun connected( - args: DhizukuUserServiceArgs, - service: DhizukuUserServiceConnections.UserService - ) { - val name = args.componentName - val token = name.flattenToString() - if (token in tokens) kotlin.runCatching { - connection.connected( - args.build(), - service.service - ) - } - } - - fun died(args: DhizukuUserServiceArgs) { - val name = args.componentName - val token = name.flattenToString() - if (token in tokens) kotlin.runCatching { connection.died(args.build()) } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceConnections.kt b/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceConnections.kt deleted file mode 100644 index 8e8ef74..0000000 --- a/app/src/main/java/com/rosan/dhizuku/server/DhizukuUserServiceConnections.kt +++ /dev/null @@ -1,121 +0,0 @@ -package com.rosan.dhizuku.server - -import android.content.ComponentName -import android.os.IBinder -import com.rosan.dhizuku.BuildConfig -import com.rosan.dhizuku.aidl.IDhizukuUserService -import com.rosan.dhizuku.aidl.IDhizukuUserServiceConnection -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import rikka.shizuku.Shizuku - -object DhizukuUserServiceConnections { - private fun onServiceConnected(args: DhizukuUserServiceArgs, service: UserService) { - connectionMap.values.forEach { - it.connected(args, service) - } - services[args.componentName.flattenToString()] = service - kotlin.runCatching { - service.service.linkToDeath({ - onServiceDisconnected(args) - }, 0) - } - } - - private fun onServiceDisconnected(args: DhizukuUserServiceArgs) { - connectionMap.values.forEach { - it.died(args) - } - services.remove(args.componentName.flattenToString()) - } - - private val connectionMap = mutableMapOf() - - private val services = mutableMapOf() - - fun start(args: DhizukuUserServiceArgs) { - val name = args.componentName - val token = name.flattenToString() - val service = services[token] - if (service != null) return - CoroutineScope(Dispatchers.IO).launch { - startInner(args) - } - } - - private suspend fun startInner(args: DhizukuUserServiceArgs): UserService? { - val component = - ComponentName(BuildConfig.APPLICATION_ID, DhizukuUserService::class.java.name) - val binder = DhizukuProcess.startProcess(component, false) ?: return null - val manager = IDhizukuUserService.Stub.asInterface(binder) - val service = UserService(manager, manager.startService(args.componentName)) - onServiceConnected(args, service) - return service - } - - fun stop(args: DhizukuUserServiceArgs) { - val name = args.componentName - val token = name.flattenToString() - stop(token) - } - - private fun stop(token: String) { - val service = services[token] ?: return - kotlin.runCatching { service.manager.quit() } - } - - fun bind( - uid: Int, pid: Int, args: DhizukuUserServiceArgs, iConnection: IDhizukuUserServiceConnection - ) { - val owner = "$uid:$pid" - val name = args.componentName - val token = name.flattenToString() - val connection = - connectionMap[owner] ?: DhizukuUserServiceConnection(uid, pid, iConnection).apply { - connectionMap[owner] = this - } - connection.connection = iConnection - connection.register(args) - val service = services[token] - if (service == null) { - start(args) - return - } - connection.connected(args, service) - } - - fun unbind(uid: Int, pid: Int, args: DhizukuUserServiceArgs) { - val owner = "$uid:$pid" - val name = args.componentName - val token = name.flattenToString() - val connection = connectionMap[owner] ?: return - connection.unregister(args) - afterUnbind() - } - - fun unbind(uid: Int, pid: Int) { - val owner = "$uid:$pid" - connectionMap.remove(owner) - afterUnbind() - } - - private fun afterUnbind() { - val tokens = mutableListOf() - tokens.addAll(services.keys) - for (token in services.keys) { - for (connection in connectionMap.values) { - if (connection.isRegister(token)) { - tokens.remove(token) - break - } - } - } - for (token in tokens) { - stop(token) - } - Shizuku.checkSelfPermission() - } - - data class UserService(val manager: IDhizukuUserService, val service: IBinder) -} diff --git a/app/src/main/java/com/rosan/dhizuku/server/MyDhizukuProvider.kt b/app/src/main/java/com/rosan/dhizuku/server/MyDhizukuProvider.kt new file mode 100644 index 0000000..4af8e70 --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/server/MyDhizukuProvider.kt @@ -0,0 +1,11 @@ +package com.rosan.dhizuku.server + +import com.rosan.dhizuku.aidl.IDhizukuClient +import com.rosan.dhizuku.server_api.DhizukuProvider +import com.rosan.dhizuku.server_api.DhizukuService + +class MyDhizukuProvider : DhizukuProvider() { + override fun onCreateService(client: IDhizukuClient): DhizukuService { + return MyDhizukuService(context, DhizukuDAReceiver.name, client) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/MyDhizukuService.kt b/app/src/main/java/com/rosan/dhizuku/server/MyDhizukuService.kt new file mode 100644 index 0000000..aab5691 --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/server/MyDhizukuService.kt @@ -0,0 +1,37 @@ +package com.rosan.dhizuku.server + +import android.content.ComponentName +import android.content.Context +import com.rosan.dhizuku.aidl.IDhizukuClient +import com.rosan.dhizuku.data.common.util.getPackageInfoForUid +import com.rosan.dhizuku.data.common.util.signature +import com.rosan.dhizuku.data.settings.repo.AppRepo +import com.rosan.dhizuku.server_api.DhizukuService +import kotlinx.coroutines.runBlocking +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +class MyDhizukuService(context: Context?, admin: ComponentName?, client: IDhizukuClient?) : + DhizukuService(context, admin, client), KoinComponent { + private val context by inject() + + private val repo by inject() + + override fun getVersionName(): String = "$versionCode" + + private var signature: String? = null + + override fun checkCallingPermission(func: String?, callingUid: Int, callingPid: Int): Boolean { + val entity = runBlocking { repo.findByUID(callingUid) } ?: return false + if (!entity.allowApi) return false + + val signature = this.signature + ?: context.packageManager.getPackageInfoForUid(callingUid)?.signature + ?: return false + this.signature = signature + + if (signature != entity.signature) return false + + return true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/RunningService.kt b/app/src/main/java/com/rosan/dhizuku/server/RunningService.kt new file mode 100644 index 0000000..b178375 --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/server/RunningService.kt @@ -0,0 +1,124 @@ +package com.rosan.dhizuku.server + +import android.app.Service +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.content.pm.ServiceInfo +import android.os.Build +import android.os.IBinder +import androidx.core.app.NotificationChannelCompat +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat +import com.rosan.dhizuku.R +import com.rosan.dhizuku.data.common.util.getPackageInfoForUid +import com.rosan.dhizuku.data.common.util.signature +import com.rosan.dhizuku.data.settings.model.room.entity.AppEntity +import com.rosan.dhizuku.data.settings.repo.AppRepo +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +class RunningService : Service(), KoinComponent { + companion object { + fun start(context: Context) { + val intent = Intent(context, RunningService::class.java) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + context.startForegroundService(intent) + else context.startService(intent) + } + } + + private val scope = CoroutineScope(Dispatchers.IO) + + private val repo by inject() + + private val packageReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + if (intent == null) return + val uid = intent.getIntExtra(Intent.EXTRA_UID, -1) + if (uid < 0) return + scope.launch { + val entity = repo.findByUID(uid) + ?: return@launch + if (verify(entity)) return@launch + repo.delete(entity) + } + } + } + + override fun onBind(intent: Intent?): IBinder? { + return null + } + + override fun onCreate() { + super.onCreate() + runForeground() + registerPackageReceiver() + } + + override fun onDestroy() { + unregisterReceiver(packageReceiver) + super.onDestroy() + } + + private fun registerPackageReceiver() { + scope.launch { + repo.all() + .filter { !verify(it) } + .forEach { repo.delete(it) } + } + + val filter = IntentFilter() + filter.addAction(Intent.ACTION_PACKAGE_REMOVED) + filter.addAction(Intent.ACTION_PACKAGE_FULLY_REMOVED) + filter.addAction(Intent.ACTION_PACKAGE_CHANGED) + filter.addDataScheme("package") + registerReceiver(packageReceiver, filter) + } + + private fun verify(entity: AppEntity): Boolean { + val packageInfo = packageManager.getPackageInfoForUid(entity.uid) + ?: return false + + if (!entity.allowApi) return false + + if (entity.signature != packageInfo.signature) + return false + + return true + } + + private fun runForeground() { + val manager = NotificationManagerCompat.from(this) + val channelName = "running_service_channel" + val channel: NotificationChannelCompat = + NotificationChannelCompat.Builder(channelName, NotificationManagerCompat.IMPORTANCE_MAX) + .setName(getString(R.string.service_channel_name)) + .setVibrationEnabled(false) + .setSound(null, null) + .setShowBadge(false) + .build() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + manager.createNotificationChannel(channel) + val notificationId = 1 + val notification = NotificationCompat.Builder(this, channel.id) + .setSmallIcon(R.drawable.round_hourglass_empty_black_24) + .setContentTitle(getString(R.string.service_running)) + .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_DEFERRED) + .setPriority(NotificationCompat.PRIORITY_MIN) + .setAutoCancel(false) + .setOngoing(true) + .build() + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) + startForeground(notificationId, notification) + else startForeground( + notificationId, + notification, + ServiceInfo.FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/impl/IDhizukuImpl.kt b/app/src/main/java/com/rosan/dhizuku/server/impl/IDhizukuImpl.kt deleted file mode 100644 index 2d57399..0000000 --- a/app/src/main/java/com/rosan/dhizuku/server/impl/IDhizukuImpl.kt +++ /dev/null @@ -1,192 +0,0 @@ -package com.rosan.dhizuku.server.impl - -import android.app.admin.DevicePolicyManager -import android.content.Context -import android.content.SharedPreferences -import android.content.pm.PackageInfo -import android.os.Binder -import android.os.Build -import android.os.Bundle -import android.os.IBinder -import android.os.Parcel -import androidx.annotation.RequiresApi -import com.rosan.dhizuku.R -import com.rosan.dhizuku.aidl.IDhizuku -import com.rosan.dhizuku.aidl.IDhizukuClient -import com.rosan.dhizuku.aidl.IDhizukuRemoteProcess -import com.rosan.dhizuku.aidl.IDhizukuUserServiceConnection -import com.rosan.dhizuku.data.common.util.getPackageInfoForUid -import com.rosan.dhizuku.data.common.util.signature -import com.rosan.dhizuku.data.common.util.toast -import com.rosan.dhizuku.data.settings.model.room.entity.AppEntity -import com.rosan.dhizuku.data.settings.repo.AppRepo -import com.rosan.dhizuku.server.DHIZUKU_SERVER_VERSION_NAME -import com.rosan.dhizuku.server.DHIZUKU_SERVRE_VERSION_CODE -import com.rosan.dhizuku.server.DhizukuProcess -import com.rosan.dhizuku.server.DhizukuUserServiceArgs -import com.rosan.dhizuku.server.DhizukuUserServiceConnections -import com.rosan.dhizuku.shared.DhizukuVariables -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.launch -import org.koin.core.component.KoinComponent -import org.koin.core.component.get -import org.koin.core.component.inject -import org.koin.core.parameter.parametersOf -import kotlin.collections.set - -class IDhizukuImpl(private val client: IDhizukuClient) : IDhizuku.Stub(), KoinComponent { - private val coroutineScope = CoroutineScope(Dispatchers.IO) - - private val context by inject() - - private val devicePolicyManager by lazy { - context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager - } - - private val repo by inject() - - private var enableToast = true - - private var toasted = false - - private lateinit var appEntity: AppEntity - - private var callingCheckUid = -1 - - private var callingCheckJob: Job? = null - - private lateinit var callingCheckPackageInfo: PackageInfo - - init { - initSharedPreference() - } - - private fun initSharedPreference() { - val listener = - SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key -> - if (key != "toast_when_using_dhizuku") return@OnSharedPreferenceChangeListener - enableToast = sharedPreferences.getBoolean("toast_when_using_dhizuku", false) - } - val preferences = get { parametersOf("preferred") } - enableToast = preferences.getBoolean("toast_when_using_dhizuku", false) - preferences.registerOnSharedPreferenceChangeListener(listener) - client.asBinder().linkToDeath({ - preferences.unregisterOnSharedPreferenceChangeListener(listener) - }, 0) - } - - private fun initCallingCheckJob() = synchronized(this) { - val uid = Binder.getCallingUid() - if (callingCheckUid == uid && callingCheckJob != null) return@synchronized - callingCheckUid = uid - callingCheckJob?.cancel() - appEntity = repo.findByUID(uid) ?: AppEntity.DENY - callingCheckJob = coroutineScope.launch { - repo.flowFindByUID(uid).collect { - appEntity = repo.findByUID(uid) ?: AppEntity.DENY - } - } - callingCheckPackageInfo = context.packageManager.getPackageInfoForUid(uid)!! - client.asBinder()?.linkToDeath({ - callingCheckJob?.cancel() - callingCheckJob = null - }, 0) - } - - override fun getVersionCode(): Int = DHIZUKU_SERVRE_VERSION_CODE - - override fun getVersionName(): String = DHIZUKU_SERVER_VERSION_NAME - - override fun isPermissionGranted(): Boolean { - return runCatching { requireCallingPermission("is_granted", true) }.isSuccess - } - - private fun requireCallingPermission(name: String, ignoreToast: Boolean = false) { - initCallingCheckJob() - if (!appEntity.allowApi || appEntity.signature != callingCheckPackageInfo.signature) - throw IllegalStateException(SecurityException("uid '${Binder.getCallingUid()}' not allow use dhizuku api ($name)")) - if (ignoreToast || toasted || !enableToast) return - val label = - callingCheckPackageInfo.applicationInfo.loadLabel(context.packageManager) - context.toast(context.getString(R.string.toast_when_using_dhizuku_content, label)) - toasted = true - } - - private fun targetTransact( - iBinder: IBinder, code: Int, data: Parcel, reply: Parcel?, flags: Int - ): Boolean { - requireCallingPermission("remote_transact") - return DhizukuProcess.binderWrapper(iBinder).transact(code, data, reply, flags) - } - - override fun remoteProcess( - cmd: Array, env: Array?, dir: String? - ): IDhizukuRemoteProcess { - requireCallingPermission("remote_process") - val environment = mutableMapOf() - if (env != null) for (envString in env) { - val index: Int = envString.indexOf('=') - if (index != -1) environment[envString.substring(0, index)] = - envString.substring(index + 1) - } - val process = DhizukuProcess.remoteProcess(cmd.toMutableList(), environment, dir) - return IDhizukuRemoteProcessImpl(process, client?.asBinder() ?: this) - } - - override fun bindUserService( - connection: IDhizukuUserServiceConnection?, bundle: Bundle? - ) { - requireCallingPermission("bind_user_service") - bundle ?: return - connection ?: return - val uid = Binder.getCallingUid() - val pid = Binder.getCallingPid() - val args = DhizukuUserServiceArgs(bundle) - DhizukuUserServiceConnections.bind(uid, pid, args, connection) - } - - override fun unbindUserService(bundle: Bundle?) { - requireCallingPermission("unbind_user_service") - bundle ?: return - val uid = Binder.getCallingUid() - val pid = Binder.getCallingPid() - val args = DhizukuUserServiceArgs(bundle) - DhizukuUserServiceConnections.unbind(uid, pid, args) - } - - @RequiresApi(Build.VERSION_CODES.O) - override fun getDelegatedScopes(packageName: String): Array { - requireCallingPermission("get_delegated_scopes") - return devicePolicyManager.getDelegatedScopes(DhizukuVariables.COMPONENT_NAME, packageName) - .toTypedArray() - } - - @RequiresApi(Build.VERSION_CODES.O) - override fun setDelegatedScopes(packageName: String, scopes: Array) { - requireCallingPermission("set_delegated_scopes") - return devicePolicyManager.setDelegatedScopes( - DhizukuVariables.COMPONENT_NAME, - packageName, - scopes.toList() - ) - } - - override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean { - if (code == DhizukuVariables.TRANSACT_CODE_REMOTE_BINDER) { - val targetData = Parcel.obtain() - try { - data.enforceInterface(DhizukuVariables.BINDER_DESCRIPTOR) - val iBinder = data.readStrongBinder() - val targtCode = data.readInt() - val targetFlags = data.readInt() - targetData.appendFrom(data, data.dataPosition(), data.dataAvail()) - return targetTransact(iBinder, targtCode, targetData, reply, targetFlags) - } finally { - targetData.recycle() - } - } - return super.onTransact(code, data, reply, flags) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/server/impl/IDhizukuRemoteProcessImpl.kt b/app/src/main/java/com/rosan/dhizuku/server/impl/IDhizukuRemoteProcessImpl.kt deleted file mode 100644 index 1811660..0000000 --- a/app/src/main/java/com/rosan/dhizuku/server/impl/IDhizukuRemoteProcessImpl.kt +++ /dev/null @@ -1,96 +0,0 @@ -package com.rosan.dhizuku.server.impl - -import android.os.IBinder -import android.os.ParcelFileDescriptor -import com.rosan.dhizuku.aidl.IDhizukuRemoteProcess -import com.rosan.dhizuku.data.common.util.parcelable -import java.io.IOException -import java.util.concurrent.TimeUnit - -class IDhizukuRemoteProcessImpl(private val process: Process, private val iBinder: IBinder) : - IDhizukuRemoteProcess.Stub() { - init { - iBinder.linkToDeath({ - kotlin.runCatching { if (alive()) destroy() } - }, 0) - } - - private var output: ParcelFileDescriptor? = null - - private var input: ParcelFileDescriptor? = null - - private var error: ParcelFileDescriptor? = null - - override fun getOutputStream(): ParcelFileDescriptor { - if (output != null) return output!! - try { - output = process.outputStream.parcelable() - } catch (e: IOException) { - throw IllegalStateException(e) - } - return output!! - } - - override fun getInputStream(): ParcelFileDescriptor { - if (input != null) return input!! - try { - input = process.inputStream.parcelable() - } catch (e: IOException) { - throw IllegalStateException(e) - } - return input!! - } - - override fun getErrorStream(): ParcelFileDescriptor { - if (error != null) return error!! - try { - error = process.errorStream.parcelable() - } catch (e: IOException) { - throw IllegalStateException(e) - } - return error!! - } - - override fun exitValue(): Int = process.exitValue() - - override fun destroy() = process.destroy() - - override fun alive(): Boolean { - return try { - exitValue() - false - } catch (e: IllegalThreadStateException) { - true - } - } - - override fun waitFor(): Int { - try { - return process.waitFor() - } catch (e: InterruptedException) { - throw IllegalStateException(e) - } - } - - override fun waitForTimeout(timeout: Long, unitName: String): Boolean { - val unit = TimeUnit.valueOf(unitName) - val start = System.nanoTime() - var rem = unit.toNanos(timeout) - do { - try { - exitValue() - return true - } catch (e: IllegalThreadStateException) { - if (rem > 0) { - try { - Thread.sleep(Math.min(TimeUnit.NANOSECONDS.toMillis(rem) + 1, 100)) - } catch (e: InterruptedException) { - throw IllegalStateException(e) - } - } - } - rem = unit.toNanos(timeout) - (System.nanoTime() - start) - } while (rem > 0) - return false - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/activity/RequestPermissionActivity.kt b/app/src/main/java/com/rosan/dhizuku/ui/activity/RequestPermissionActivity.kt index 6a89dfa..b93c528 100644 --- a/app/src/main/java/com/rosan/dhizuku/ui/activity/RequestPermissionActivity.kt +++ b/app/src/main/java/com/rosan/dhizuku/ui/activity/RequestPermissionActivity.kt @@ -1,25 +1,34 @@ package com.rosan.dhizuku.ui.activity +import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle -import android.text.method.LinkMovementMethod -import android.view.Gravity -import android.widget.TextView import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.annotation.StringRes import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.size -import androidx.compose.material3.AlertDialogDefaults +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.draw.clip import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.fromHtml +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import androidx.compose.ui.viewinterop.AndroidView -import androidx.core.text.HtmlCompat import com.google.accompanist.drawablepainter.rememberDrawablePainter import com.rosan.dhizuku.R import com.rosan.dhizuku.aidl.IDhizukuRequestPermissionListener @@ -29,9 +38,6 @@ import com.rosan.dhizuku.data.settings.model.room.entity.AppEntity import com.rosan.dhizuku.data.settings.repo.AppRepo import com.rosan.dhizuku.shared.DhizukuVariables import com.rosan.dhizuku.ui.theme.DhizukuTheme -import com.rosan.dhizuku.ui.widget.dialog.DialogButton -import com.rosan.dhizuku.ui.widget.dialog.DialogButtons -import com.rosan.dhizuku.ui.widget.dialog.PositionDialog import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -39,99 +45,151 @@ import org.koin.core.component.KoinComponent import org.koin.core.component.inject class RequestPermissionActivity : ComponentActivity(), KoinComponent { - private val coroutineScope = CoroutineScope(Dispatchers.IO) + companion object { + const val UID_ERR = -1 + } + + data class ViewState( + val uid: Int = UID_ERR, + val allowApi: Boolean = false, + val listener: IDhizukuRequestPermissionListener? = null + ) - private val appRepo by inject() + private val coroutineScope = CoroutineScope(Dispatchers.IO) - private var grantResult: Int = PackageManager.PERMISSION_DENIED + private val repo by inject() - private var listener: IDhizukuRequestPermissionListener? = null + private var state by mutableStateOf(ViewState()) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - checkAndDisplay() - } - - private fun checkAndDisplay(): Boolean { - val bundle = intent.getBundleExtra("bundle") ?: intent.extras ?: return false - val uid = bundle.getInt(DhizukuVariables.PARAM_CLIENT_UID) - val packageName = packageManager.getPackagesForUid(uid)?.first() ?: return false - val packageInfo = packageManager.getPackageInfoForUid(uid) ?: return false - val signature = packageInfo.signature ?: return false - val applicationInfo = packageInfo.applicationInfo - val label = applicationInfo.loadLabel(packageManager) - val icon = applicationInfo.loadIcon(packageManager) - bundle.getBinder(DhizukuVariables.PARAM_CLIENT_REQUEST_PERMISSION_BINDER)?.let { - listener = IDhizukuRequestPermissionListener.Stub.asInterface(it) - } - - fun updateAppEntity() { - coroutineScope.launch(Dispatchers.IO) { - val allowApi = grantResult == PackageManager.PERMISSION_GRANTED - val entity = appRepo.findByUID(uid) - if (entity == null) appRepo.insert( - AppEntity(uid = uid, signature = signature, allowApi = allowApi) - ) - else appRepo.update(entity.copy(signature = signature, allowApi = allowApi)) - } + if (!registerAppEntity(intent)) { + finish() + return } - setContent { - // A surface based on material design theme. DhizukuTheme { - Box( - modifier = Modifier - .fillMaxSize() - .imePadding() - ) { - PositionDialog(onDismissRequest = { - finish() - }, centerIcon = { - Image( - painter = rememberDrawablePainter(drawable = icon), - contentDescription = null, - modifier = Modifier.size(32.dp) - ) - }, centerTitle = { - val textSize = MaterialTheme.typography.titleLarge.fontSize.value - val textColor = AlertDialogDefaults.textContentColor.toArgb() - AndroidView(factory = { - val view = TextView(it) - view.movementMethod = LinkMovementMethod.getInstance() - view.setTextColor(textColor) - view.textSize = textSize - view.gravity = Gravity.CENTER - view.text = HtmlCompat.fromHtml( - it.getString(R.string.request_permission_text, label), - HtmlCompat.FROM_HTML_MODE_COMPACT - ) - return@AndroidView view - }) - }, centerButton = { - DialogButtons( - listOf( - DialogButton(stringResource(R.string.agree)) { - grantResult = PackageManager.PERMISSION_GRANTED - updateAppEntity() - finish() - }, - DialogButton(stringResource(R.string.refuse)) { - grantResult = PackageManager.PERMISSION_DENIED - updateAppEntity() - finish() - } - ) - ) - }) - } + if (!showDialog()) finish() } } - return true + } + + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + if (registerAppEntity(intent)) return + finish() } override fun onPause() { super.onPause() finish() - listener?.onRequestPermission(grantResult) + } + + override fun finish() { + super.finish() + + coroutineScope.launch { + val uid = state.uid + val allowApi = state.allowApi + val packageInfo = packageManager.getPackageInfoForUid(uid) ?: return@launch + val signature = packageInfo.signature ?: return@launch + + val entity = repo.findByUID(uid) + if (entity == null) + repo.insert(AppEntity(uid = uid, signature = signature, allowApi = allowApi)) + else repo.update(entity.copy(uid = uid, signature = signature, allowApi = allowApi)) + }.invokeOnCompletion { + val result = if (state.allowApi) PackageManager.PERMISSION_GRANTED + else PackageManager.PERMISSION_DENIED + state.listener?.onRequestPermission(result) + } + } + + private fun registerAppEntity(intent: Intent?): Boolean { + if (intent == null) return false + val bundle = listOfNotNull( + intent.extras, + intent.getBundleExtra("bundle") + ).find { it.containsKey(DhizukuVariables.PARAM_CLIENT_UID) } + ?: return false + + // In the future, it will be replaced by the following method +// val bundle = intent.extras ?: return false + + val uid = bundle.getInt(DhizukuVariables.PARAM_CLIENT_UID, -1) + if (uid == -1) return false + + val binder = bundle.getBinder(DhizukuVariables.PARAM_CLIENT_REQUEST_PERMISSION_BINDER) + ?: return false + + val listener = kotlin.runCatching { + IDhizukuRequestPermissionListener.Stub.asInterface(binder) + }.getOrElse { + it.printStackTrace() + return false + } + + state = state.copy( + uid = uid, + listener = listener + ) + return true + } + + @Composable + private fun showDialog(): Boolean { + val uid = state.uid + val packageInfo = packageManager.getPackageInfoForUid(uid) ?: return false + val packageName = packageInfo.packageName + val applicationInfo = packageInfo.applicationInfo + val icon = applicationInfo?.loadIcon(packageManager) + ?: packageManager.defaultActivityIcon + val label = applicationInfo?.loadLabel(packageManager) + ?: packageName + + AlertDialog(onDismissRequest = { + finish() + }, icon = { + Image( + painter = rememberDrawablePainter(drawable = icon), + contentDescription = null, + modifier = Modifier.size(32.dp) + ) + }, title = { + Text( + AnnotatedString.fromHtml(stringResource(R.string.request_permission_text, label)), + textAlign = TextAlign.Center + ) + }, confirmButton = { + Column( + verticalArrangement = Arrangement.spacedBy(4.dp), + modifier = Modifier.clip(RoundedCornerShape(12.dp)) + ) { + @Composable + fun MyTextButton(onClick: () -> Unit, @StringRes textResId: Int) { + TextButton( + onClick = onClick, + modifier = Modifier.fillMaxWidth(), + shape = RoundedCornerShape(4.dp), + contentPadding = PaddingValues(16.dp), + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + contentColor = MaterialTheme.colorScheme.onPrimaryContainer + ) + ) { + Text(stringResource(textResId)) + } + } + MyTextButton(onClick = { + state = state.copy(allowApi = true) + finish() + }, textResId = R.string.agree) + MyTextButton(onClick = { + state = state.copy(allowApi = false) + finish() + }, textResId = R.string.refuse) + } + }) + return true } } \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/activity/SettingsActivity.kt b/app/src/main/java/com/rosan/dhizuku/ui/activity/SettingsActivity.kt index deae55c..312c4bd 100644 --- a/app/src/main/java/com/rosan/dhizuku/ui/activity/SettingsActivity.kt +++ b/app/src/main/java/com/rosan/dhizuku/ui/activity/SettingsActivity.kt @@ -12,22 +12,12 @@ import com.hjq.permissions.Permission import com.hjq.permissions.XXPermissions import com.rosan.dhizuku.ui.page.settings.SettingsPage import com.rosan.dhizuku.ui.theme.DhizukuTheme -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.launch import org.koin.core.component.KoinComponent class SettingsActivity : ComponentActivity(), KoinComponent { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - CoroutineScope(Dispatchers.IO).launch { - requestNotificationPermissions() - } setContent { - // A surface based on material design theme. DhizukuTheme { Surface( modifier = Modifier.fillMaxSize() @@ -36,26 +26,16 @@ class SettingsActivity : ComponentActivity(), KoinComponent { } } } - if (!XXPermissions.isGranted( - this, - Permission.MANAGE_EXTERNAL_STORAGE - ) - ) - XXPermissions.with(this) - .permission(Permission.MANAGE_EXTERNAL_STORAGE) - .request { permissions, allGranted -> } + + requestNotificationPermissions() } - private suspend fun requestNotificationPermissions() { - callbackFlow { - val permissions = listOf(Permission.POST_NOTIFICATIONS) - if (XXPermissions.isGranted(this@SettingsActivity, permissions)) send(Unit) - else XXPermissions.with(this@SettingsActivity) - .permission(permissions) - .request { permissions, allGranted -> - trySend(Unit) - } - awaitClose { } - }.first() + private fun requestNotificationPermissions() { + val permissions = listOf(Permission.POST_NOTIFICATIONS, Permission.MANAGE_EXTERNAL_STORAGE) + if (XXPermissions.isGranted(this, permissions)) return + XXPermissions.with(this) + .permission(permissions) + .request { _, _ -> + } } } \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsPage.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsPage.kt index 9d9e8fc..be0e45b 100644 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsPage.kt +++ b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsPage.kt @@ -5,7 +5,9 @@ import androidx.compose.runtime.Composable import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import com.rosan.dhizuku.ui.page.settings.main.MainPage +import com.rosan.dhizuku.ui.page.settings.activate.ActivatePage +import com.rosan.dhizuku.ui.page.settings.app_management.AppManagementPage +import com.rosan.dhizuku.ui.page.settings.home.HomePage @Composable fun SettingsPage(windowInsets: WindowInsets) { @@ -13,13 +15,30 @@ fun SettingsPage(windowInsets: WindowInsets) { NavHost( navController = navController, - startDestination = SettingsScreen.Main.route, + startDestination = SettingsRoute.Home.route, ) { - composable(route = SettingsScreen.Main.route) { - MainPage( + composable(route = SettingsRoute.Home.route) { + HomePage( windowInsets = windowInsets, navController = navController ) } + composable(route = SettingsRoute.AppManagement.route) { + AppManagementPage( + windowInsets = windowInsets, + navController = navController + ) + } + composable(route = SettingsRoute.Activate.route) { + val mode = it.arguments?.getString("mode")?.let { name -> + SettingsRoute.Activate.Mode.valueOf(name) + } ?: SettingsRoute.Activate.Mode.Dhizuku + + ActivatePage( + windowInsets = windowInsets, + navController = navController, + mode = mode + ) + } } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsRoute.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsRoute.kt new file mode 100644 index 0000000..f944a7b --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsRoute.kt @@ -0,0 +1,14 @@ +package com.rosan.dhizuku.ui.page.settings + +sealed class SettingsRoute(val route: String) { + data object Home : SettingsRoute("home") + data object AppManagement : SettingsRoute("app_management") + data object Activate : SettingsRoute("activate/{mode}") { + enum class Mode { + Dhizuku, + Shizuku; + } + + fun route(mode: Mode) = "activate/${mode.name}" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsScreen.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsScreen.kt deleted file mode 100644 index 1eb6e68..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/SettingsScreen.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings - -sealed class SettingsScreen(val route: String) { - object Main : SettingsScreen("main") -} diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivatePage.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivatePage.kt new file mode 100644 index 0000000..c71c9aa --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivatePage.kt @@ -0,0 +1,271 @@ +package com.rosan.dhizuku.ui.page.settings.activate + +import android.content.ComponentName +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.foundation.Image +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyItemScope +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.twotone.ArrowBack +import androidx.compose.material.icons.twotone.Check +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.Checkbox +import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExtendedFloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults +import androidx.compose.material3.pulltorefresh.pullToRefresh +import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import com.rosan.dhizuku.R +import com.rosan.dhizuku.ui.page.settings.SettingsRoute +import com.rosan.dhizuku.ui.theme.AppIconCache +import com.rosan.dhizuku.ui.theme.exclude +import com.rosan.dhizuku.ui.theme.plus +import org.koin.androidx.compose.koinViewModel + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun ActivatePage( + windowInsets: WindowInsets, + navController: NavController, + mode: SettingsRoute.Activate.Mode, + viewModel: ActivateViewModel = koinViewModel() +) { + LaunchedEffect(true) { + viewModel.collect() + } + + val compState = remember { + mutableStateOf(null) + } + + LaunchedEffect(viewModel.state.data) { + compState.value = viewModel.state.data.find { it.enabled }?.admin?.component + } + + val title = stringResource( + when (mode) { + SettingsRoute.Activate.Mode.Dhizuku -> R.string.home_dhizuku_title + SettingsRoute.Activate.Mode.Shizuku -> R.string.home_shizuku_title + } + ) + + Scaffold( + modifier = Modifier + .windowInsetsPadding(windowInsets.exclude(WindowInsetsSides.Bottom)) + .fillMaxSize(), + contentWindowInsets = windowInsets.only(WindowInsetsSides.Bottom), + topBar = { + TopAppBar( + navigationIcon = { + IconButton(onClick = { + navController.navigateUp() + }) { + Icon( + imageVector = Icons.AutoMirrored.TwoTone.ArrowBack, + contentDescription = null + ) + } + }, + title = { + Text(title) + } + ) + }, + floatingActionButton = { + val comp by compState + AnimatedVisibility( + visible = comp != null, + enter = scaleIn(), + exit = scaleOut() + ) { + ExtendedFloatingActionButton( + icon = { + Icon( + imageVector = Icons.TwoTone.Check, + contentDescription = null + ) + }, + text = { + Text(stringResource(R.string.confirm)) + }, + onClick = { + comp?.let { + viewModel.activate(mode = mode, comp = it) + } + } + ) + } + }) { + val pullToRefreshState = rememberPullToRefreshState() + Box( + modifier = Modifier + .fillMaxSize() + .pullToRefresh(state = pullToRefreshState, + isRefreshing = viewModel.state.loading, + onRefresh = { + viewModel.collectData() + } + ) + ) { + ItemsWidget(viewModel = viewModel, contentPadding = it, state = compState) + PullToRefreshDefaults.Indicator( + modifier = Modifier + .align(Alignment.TopCenter) + .padding(it), + state = pullToRefreshState, + isRefreshing = viewModel.state.loading + ) + } + } + + if (viewModel.state.status == ActivateViewState.Status.Waiting) return + AlertDialog(onDismissRequest = { + viewModel.cancel() + }, confirmButton = { + val comp by compState + val isRunning = viewModel.state.status !is ActivateViewState.Status.End + val isSuccess = + !isRunning && (viewModel.state.status as ActivateViewState.Status.End).error == null + + if (isRunning || !isSuccess) TextButton(onClick = { viewModel.cancel() }) { + Text(stringResource(R.string.cancel)) + } + if (isRunning) return@AlertDialog + if (!isSuccess) TextButton(onClick = { + viewModel.activate(mode = mode, comp = comp!!) + }) { + Text(stringResource(R.string.retry)) + } else TextButton(onClick = { navController.navigateUp() }) { + Text(stringResource(R.string.finish)) + } + }, title = { + Text(title) + }, text = { + @Suppress("AnimatedContentLabel") + AnimatedContent( + viewModel.state.status, + modifier = Modifier.verticalScroll(rememberScrollState()) + ) { + if (it == ActivateViewState.Status.Running) LinearProgressIndicator(modifier = Modifier.fillMaxWidth()) + else if (it is ActivateViewState.Status.End) { + Text( + if (it.error == null) stringResource(R.string.home_status_owner_granted) + else it.error.stackTraceToString(), + modifier = Modifier.fillMaxWidth() + ) + } + } + }) +} + +@Composable +private fun ItemsWidget( + viewModel: ActivateViewModel, + contentPadding: PaddingValues, + state: MutableState +) { + LazyColumn( + contentPadding = PaddingValues(16.dp) + contentPadding, + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + items(viewModel.state.data, key = { it.admin.component.flattenToShortString() }) { + ItemWidget( + viewModel = viewModel, + data = it, + state = state + ) + } + } +} + +@Composable +private fun LazyItemScope.ItemWidget( + viewModel: ActivateViewModel, + data: ActivateViewData, + state: MutableState +) { + val interactionSource = remember { MutableInteractionSource() } + + fun setCheckedChange(bool: Boolean = state.value?.compareTo(data.admin.component) != 0) { + state.value = if (bool) data.admin.component + else null + } + + ElevatedCard( + onClick = ::setCheckedChange, + interactionSource = interactionSource, + modifier = Modifier + .animateItem() + .fillMaxSize() + ) { + Row( + modifier = Modifier.padding(16.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Checkbox( + checked = state.value?.compareTo(data.admin.component) == 0, + onCheckedChange = ::setCheckedChange, + interactionSource = interactionSource + ) + + val packageManager = LocalContext.current.packageManager + val imageBitmap by AppIconCache.rememberImageBitmapState(data.admin) + val label = data.admin.loadLabel(packageManager).toString() + val text = data.admin.component.flattenToShortString() + Image( + bitmap = imageBitmap, + modifier = Modifier + .size(40.dp) + .align(Alignment.CenterVertically), + contentDescription = null + ) + Column(modifier = Modifier.weight(1f)) { + Text(label, style = MaterialTheme.typography.titleMedium) + Text(text, style = MaterialTheme.typography.bodyMedium) + } + } + } +} diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewData.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewData.kt new file mode 100644 index 0000000..142dd80 --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewData.kt @@ -0,0 +1,8 @@ +package com.rosan.dhizuku.ui.page.settings.activate + +import android.app.admin.DeviceAdminInfo + +data class ActivateViewData( + val admin: DeviceAdminInfo, + val enabled: Boolean +) \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewModel.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewModel.kt new file mode 100644 index 0000000..0778a53 --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewModel.kt @@ -0,0 +1,216 @@ +package com.rosan.dhizuku.ui.page.settings.activate + +import android.annotation.SuppressLint +import android.app.admin.DeviceAdminInfo +import android.app.admin.DeviceAdminReceiver +import android.app.admin.DevicePolicyManager +import android.app.admin.IDevicePolicyManager +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.pm.ApplicationInfo +import android.content.pm.PackageManager +import android.os.Build +import android.os.IBinder +import android.os.IInterface +import android.system.Os +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.rosan.dhizuku.api.Dhizuku +import com.rosan.dhizuku.data.common.util.has +import com.rosan.dhizuku.data.common.util.requireDhizukuPermissionGranted +import com.rosan.dhizuku.data.common.util.requireShizukuPermissionGranted +import com.rosan.dhizuku.server.DhizukuState +import com.rosan.dhizuku.ui.page.settings.SettingsRoute +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject +import org.xmlpull.v1.XmlPullParserException +import rikka.shizuku.ShizukuBinderWrapper +import java.io.IOException +import java.lang.reflect.Field +import java.lang.reflect.InvocationTargetException + + +class ActivateViewModel : ViewModel(), KoinComponent { + private val context by inject() + + private val packageManager by lazy { + context.packageManager + } + + private val devicePolicyManager by lazy { + context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager + } + + var state by mutableStateOf(ActivateViewState()) + private set + + fun collect() { + collectData() + } + + private var collectDataJob: Job? = null + + fun collectData() { + state = state.copy(loading = true) + collectDataJob?.cancel() + collectDataJob = viewModelScope.launch(Dispatchers.IO) { + // http://aospxref.com/android-14.0.0_r2/xref/packages/apps/Settings/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java#271 + + var flags = PackageManager.GET_META_DATA + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + flags = flags or PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + + val data = packageManager.queryBroadcastReceivers( + Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED), + flags + ).mapNotNull { + if (it == null) return@mapNotNull null + try { + return@mapNotNull DeviceAdminInfo(context, it) + } catch (ignored: XmlPullParserException) { + } catch (ignored: IOException) { + } + return@mapNotNull null + }.filter { + if (!it.isVisible) return@filter false + !it.activityInfo.applicationInfo.flags.has(ApplicationInfo.FLAG_SYSTEM) + }.map { + val component = it.component + ActivateViewData( + admin = it, + enabled = devicePolicyManager.isAdminActive(component) + && devicePolicyManager.isDeviceOwnerApp(component.packageName) + ) + }.sortedBy { + it.admin.packageName + } + state = state.copy(data = data, loading = false) + } + } + + private var activateJob: Job? = null + + fun cancel() { + activateJob?.cancel() + state = state.copy(status = ActivateViewState.Status.Waiting) + } + + fun activate( + mode: SettingsRoute.Activate.Mode, + comp: ComponentName + ) { + state = state.copy(status = ActivateViewState.Status.Running) + activateJob?.cancel() + activateJob = viewModelScope.launch(Dispatchers.IO) { + val exceptionOrNull = kotlin.runCatching { + when (mode) { + SettingsRoute.Activate.Mode.Dhizuku -> activateByDhizuku(comp) + SettingsRoute.Activate.Mode.Shizuku -> activateByShizuku(comp) + } + }.exceptionOrNull().let { + if (it is InvocationTargetException) it.targetException + else it + } + if (exceptionOrNull is CancellationException) return@launch + state = state.copy(status = ActivateViewState.Status.End(error = exceptionOrNull)) + } + } + + @SuppressLint("NewApi") + private suspend fun activateByDhizuku(comp: ComponentName) = + requireDhizukuPermissionGranted { + requireBinderWrapperDevicePolicyManager(wrapper = { + Dhizuku.binderWrapper(it) + }) { + it.transferOwnership(Dhizuku.getOwnerComponent(), comp, null) + } + DhizukuState.sync(devicePolicyManager) + } + + @SuppressLint("PrivateApi") + private suspend fun activateByShizuku(who: ComponentName) = + requireShizukuPermissionGranted(context) { + // wait for the account cache be refreshed + delay(1500) + requireBinderWrapperDevicePolicyManager(wrapper = { + ShizukuBinderWrapper(it) + }) { + val userId = Os.getuid() / 100000 + it.setActiveAdmin(who, true, userId) + it.setDeviceOwner(who, null, userId) + } + } + + private fun DevicePolicyManager.setActiveAdmin( + policyReceiver: ComponentName, + refreshing: Boolean, + userHandle: Int + ) = this::class.java + .getDeclaredMethod( + "setActiveAdmin", + ComponentName::class.java, + Boolean::class.java, + Int::class.java + ) + .also { it.isAccessible = true } + .invoke(this, policyReceiver, refreshing, userHandle) + + private fun DevicePolicyManager.setDeviceOwner( + who: ComponentName, + ownerName: String?, + userId: Int + ) { + val clazz = this::class.java + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + clazz.getDeclaredMethod("setDeviceOwner", ComponentName::class.java, Int::class.java) + .also { it.isAccessible = true }.invoke(this, who, userId) + return + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + clazz.getDeclaredMethod( + "setDeviceOwner", + ComponentName::class.java, + String::class.java, + Int::class.java + ).also { it.isAccessible = true }.invoke(this, who, ownerName, userId) + return + } + clazz.getDeclaredMethod("setDeviceOwner", ComponentName::class.java, String::class.java) + .also { it.isAccessible = true }.invoke(this, who, ownerName) + } + + + @SuppressLint("PrivateApi") + private fun requireBinderWrapperDevicePolicyManager( + wrapper: (IBinder) -> IBinder, + action: (DevicePolicyManager) -> Unit + ) { + val manager = + context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager + var field: Field? = null + var iInterface: IInterface? = null + try { + field = manager.javaClass.getDeclaredField("mService") + field.isAccessible = true + iInterface = field.get(manager) as IInterface + val binder = wrapper.invoke(iInterface.asBinder()!!) + field.set(manager, IDevicePolicyManager.Stub.asInterface(binder)) + action.invoke(manager) + } finally { + try { + if (field != null && iInterface != null) + field.set(manager, iInterface) + } catch (ignored: Throwable) { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewState.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewState.kt new file mode 100644 index 0000000..b17e1f4 --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/activate/ActivateViewState.kt @@ -0,0 +1,13 @@ +package com.rosan.dhizuku.ui.page.settings.activate + +data class ActivateViewState( + val data: List = emptyList(), + val loading: Boolean = true, + val status: Status = Status.Waiting +) { + sealed class Status { + data object Waiting : Status() + data object Running : Status() + data class End(val error: Throwable? = null) : Status() + } +} diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementPage.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementPage.kt new file mode 100644 index 0000000..a808b88 --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementPage.kt @@ -0,0 +1,179 @@ +package com.rosan.dhizuku.ui.page.settings.app_management + +import androidx.compose.animation.AnimatedContent +import androidx.compose.foundation.Image +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyItemScope +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.twotone.ArrowBack +import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults +import androidx.compose.material3.pulltorefresh.pullToRefresh +import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import com.rosan.dhizuku.R +import com.rosan.dhizuku.ui.theme.AppIconCache +import com.rosan.dhizuku.ui.theme.exclude +import com.rosan.dhizuku.ui.theme.plus +import org.koin.androidx.compose.koinViewModel + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun AppManagementPage( + windowInsets: WindowInsets, + navController: NavController, + viewModel: AppManagementViewModel = koinViewModel() +) { + LaunchedEffect(true) { + viewModel.collect() + } + Scaffold( + modifier = Modifier + .windowInsetsPadding(windowInsets.exclude(WindowInsetsSides.Bottom)) + .fillMaxSize(), + contentWindowInsets = windowInsets.only(WindowInsetsSides.Bottom), + topBar = { + TopAppBar( + navigationIcon = { + IconButton(onClick = { + navController.navigateUp() + }) { + Icon( + imageVector = Icons.AutoMirrored.TwoTone.ArrowBack, + contentDescription = null + ) + } + }, + title = { + Text(stringResource(R.string.home_app_management_title)) + } + ) + }) { + @Suppress("AnimatedContentLabel") + AnimatedContent(targetState = viewModel.state.data.isEmpty()) { isEmpty -> + val pullToRefreshState = rememberPullToRefreshState() + Box( + modifier = Modifier + .fillMaxSize() + .pullToRefresh(state = pullToRefreshState, + isRefreshing = viewModel.state.loading, + onRefresh = { + viewModel.collectRepo() + } + ) + ) { + if (isEmpty) Text( + stringResource(R.string.home_app_management_dsp), + modifier = Modifier + .padding(it + PaddingValues(16.dp)) + .align(Alignment.Center) + ) + else ItemsWidget(viewModel = viewModel, contentPadding = it) + PullToRefreshDefaults.Indicator( + modifier = Modifier + .align(Alignment.TopCenter) + .padding(it), + state = pullToRefreshState, + isRefreshing = viewModel.state.loading + ) + } + } + } +} + +@Composable +private fun ItemsWidget( + viewModel: AppManagementViewModel, + contentPadding: PaddingValues +) { + LazyColumn( + contentPadding = PaddingValues(16.dp) + contentPadding, + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + items(viewModel.state.data, key = { it.applicationInfo.uid }) { + ItemWidget( + viewModel = viewModel, + data = it + ) + } + } +} + +@Composable +private fun LazyItemScope.ItemWidget( + viewModel: AppManagementViewModel, + data: AppManagementViewData +) { + val interactionSource = remember { MutableInteractionSource() } + + fun setEnabledChange(bool: Boolean = !data.enabled) { + viewModel.setEnabled(data.applicationInfo.uid, bool) + } + + ElevatedCard( + onClick = ::setEnabledChange, + interactionSource = interactionSource, + modifier = Modifier + .animateItem() + .fillMaxSize() + ) { + Row( + modifier = Modifier.padding(16.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + val applicationInfo = data.applicationInfo + val imageBitmap by AppIconCache.rememberImageBitmapState(applicationInfo) + val text = applicationInfo.packageName + val label = applicationInfo.loadLabel(LocalContext.current.packageManager).toString() + Image( + bitmap = imageBitmap, + modifier = Modifier + .size(40.dp) + .align(Alignment.CenterVertically), + contentDescription = null + ) + Column(modifier = Modifier.weight(1f)) { + Text(label, style = MaterialTheme.typography.titleMedium) + Text(text, style = MaterialTheme.typography.bodyMedium) + } + Switch( + checked = data.enabled, + onCheckedChange = ::setEnabledChange, + interactionSource = interactionSource + ) + } + } +} diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewData.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewData.kt new file mode 100644 index 0000000..99d7d27 --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewData.kt @@ -0,0 +1,8 @@ +package com.rosan.dhizuku.ui.page.settings.app_management + +import android.content.pm.ApplicationInfo + +data class AppManagementViewData( + val applicationInfo: ApplicationInfo, + val enabled: Boolean +) \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewModel.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewModel.kt new file mode 100644 index 0000000..5fb0f8e --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewModel.kt @@ -0,0 +1,85 @@ +package com.rosan.dhizuku.ui.page.settings.app_management + +import android.content.Context +import android.content.pm.PackageManager +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.rosan.dhizuku.BuildConfig +import com.rosan.dhizuku.data.common.util.getPackageInfoForUid +import com.rosan.dhizuku.data.common.util.signature +import com.rosan.dhizuku.data.settings.model.room.entity.AppEntity +import com.rosan.dhizuku.data.settings.repo.AppRepo +import com.rosan.dhizuku.shared.DhizukuVariables +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.launch +import org.koin.core.component.KoinComponent +import org.koin.core.component.get +import org.koin.core.component.inject + +class AppManagementViewModel : ViewModel(), KoinComponent { + val context by lazy { + get() + } + + val packageManager by lazy { + context.packageManager + } + + val repo by inject() + + var state by mutableStateOf(AppManagementViewState()) + private set + + fun collect() { + collectRepo() + } + + private var collectRepoJob: Job? = null + + fun collectRepo() { + state = state.copy(loading = true) + collectRepoJob?.cancel() + collectRepoJob = viewModelScope.launch(Dispatchers.IO) { + repo.flowAll().collect { + val data = packageManager + .getInstalledPackages(PackageManager.GET_META_DATA or PackageManager.GET_PERMISSIONS) + .mapNotNull { packageInfo -> + if (packageInfo.packageName == BuildConfig.APPLICATION_ID) return@mapNotNull null + val applicationInfo = + packageInfo.applicationInfo ?: return@mapNotNull null + + val uid = applicationInfo.uid + val requested = packageInfo.requestedPermissions + ?.contains(DhizukuVariables.PERMISSION_API) ?: false + val entity = it.find { it.uid == uid } + val allowApi = entity?.allowApi ?: false + + if (!requested && entity == null) + return@mapNotNull null + + AppManagementViewData(applicationInfo = applicationInfo, enabled = allowApi) + } + state = state.copy( + data = data.distinctBy { it.applicationInfo.packageName } + .sortedBy { it.applicationInfo.packageName }, + loading = false + ) + } + } + } + + fun setEnabled(uid: Int, bool: Boolean) { + viewModelScope.launch(Dispatchers.IO) { + val signature = packageManager.getPackageInfoForUid(uid)?.signature ?: return@launch + val entity = repo.findByUID(uid) + if (entity == null) + repo.insert(AppEntity(uid = uid, signature = signature, allowApi = bool)) + else + repo.update(entity.copy(signature = signature, allowApi = bool)) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewState.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewState.kt new file mode 100644 index 0000000..def4e24 --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/app_management/AppManagementViewState.kt @@ -0,0 +1,6 @@ +package com.rosan.dhizuku.ui.page.settings.app_management + +data class AppManagementViewState( + val data: List = emptyList(), + val loading: Boolean = true, +) \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigPage.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigPage.kt deleted file mode 100644 index c53ba88..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigPage.kt +++ /dev/null @@ -1,173 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings.config - -import androidx.compose.foundation.Image -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.only -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Switch -import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBar -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import androidx.navigation.NavController -import com.airbnb.lottie.compose.LottieAnimation -import com.airbnb.lottie.compose.LottieCompositionSpec -import com.airbnb.lottie.compose.LottieConstants -import com.airbnb.lottie.compose.animateLottieCompositionAsState -import com.airbnb.lottie.compose.rememberLottieComposition -import com.google.accompanist.drawablepainter.rememberDrawablePainter -import com.rosan.dhizuku.R -import com.rosan.dhizuku.ui.theme.exclude -import org.koin.androidx.compose.getViewModel - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun ConfigPage( - windowInsets: WindowInsets, - navController: NavController, - viewModel: ConfigViewModel = getViewModel() -) { - LaunchedEffect(true) { - viewModel.dispatch(ConfigViewAction.Init) - } - - Scaffold( - modifier = Modifier - .windowInsetsPadding(windowInsets.exclude(WindowInsetsSides.Bottom)) - .fillMaxSize(), - contentWindowInsets = windowInsets.only(WindowInsetsSides.Bottom), - topBar = { - TopAppBar( - title = { - Text(text = stringResource(id = R.string.config)) - } - ) - }, - ) { - Box(modifier = Modifier.padding(it)) { - if (viewModel.state.initialized && viewModel.state.data.isEmpty()) - LottieWidget( - spec = LottieCompositionSpec.RawRes(R.raw.empty_state), - text = stringResource(R.string.empty_config_dsp) - ) - else - DataWidget(viewModel = viewModel) - } - } -} - -@Composable -fun LottieWidget( - spec: LottieCompositionSpec, - text: String -) { - Box( - modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(16.dp), - contentAlignment = Alignment.Center - ) { - Column( - verticalArrangement = Arrangement.spacedBy(16.dp), - horizontalAlignment = Alignment.CenterHorizontally - ) { - val composition by rememberLottieComposition(spec) - val progress by animateLottieCompositionAsState( - composition = composition, - iterations = LottieConstants.IterateForever, - ) - LottieAnimation( - modifier = Modifier - .size(200.dp), - composition = composition, - progress = { progress } - ) - Text( - text = text, - style = MaterialTheme.typography.titleLarge - ) - } - } -} - -@Composable -fun DataWidget(viewModel: ConfigViewModel) { - LazyColumn( - modifier = Modifier.fillMaxSize(), - verticalArrangement = Arrangement.spacedBy(4.dp) - ) { - items(viewModel.state.data, { it.appEntity.uid }) { - DataItemWidget(viewModel, it) - } - } -} - -@Composable -fun DataItemWidget(viewModel: ConfigViewModel, data: ConfigViewState.Data) { - fun changeIt(allowApi: Boolean) { - viewModel.dispatch(ConfigViewAction.UpdateConfigByUID(data.appEntity.uid, allowApi)) - } - - Row( - modifier = Modifier - .fillMaxWidth() - .clickable { - changeIt(!data.appEntity.allowApi) - } - .padding(horizontal = 16.dp, vertical = 8.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp), - ) { - Image( - painter = rememberDrawablePainter(drawable = data.icon), - modifier = Modifier - .size(32.dp) - .align(Alignment.CenterVertically), - contentDescription = data.label - ) - Column( - modifier = Modifier - .align(Alignment.CenterVertically) - .weight(1f) - ) { - Text( - text = data.label, - style = MaterialTheme.typography.titleMedium - ) - Text( - text = data.packageName, - style = MaterialTheme.typography.bodyMedium - ) - } - Switch( - modifier = Modifier - .align(Alignment.CenterVertically), - checked = data.appEntity.allowApi, - onCheckedChange = { - changeIt(it) - } - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewAction.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewAction.kt deleted file mode 100644 index 696f8ee..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewAction.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings.config - -sealed class ConfigViewAction { - data object Init : ConfigViewAction() - - data class UpdateConfigByUID(val uid: Int, val allowApi: Boolean) : ConfigViewAction() -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewModel.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewModel.kt deleted file mode 100644 index 096a486..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewModel.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings.config - -import android.content.Context -import android.os.Build -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.rosan.dhizuku.data.common.util.clearDelegatedScopes -import com.rosan.dhizuku.data.common.util.getPackageInfoForUid -import com.rosan.dhizuku.data.common.util.signature -import com.rosan.dhizuku.data.settings.repo.AppRepo -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.launch -import org.koin.core.component.KoinComponent -import org.koin.core.component.inject - -class ConfigViewModel(private val repo: AppRepo) : ViewModel(), KoinComponent { - private val context by inject() - - var state by mutableStateOf(ConfigViewState()) - private set - - fun dispatch(action: ConfigViewAction) { - when (action) { - ConfigViewAction.Init -> init() - is ConfigViewAction.UpdateConfigByUID -> updateConfigByUID( - action.uid, - action.allowApi - ) - } - } - - private fun init() { - collectRepo() - } - - private var collectRepoJob: Job? = null - - private fun collectRepo() { - collectRepoJob?.cancel() - collectRepoJob = viewModelScope.launch(Dispatchers.IO) { - repo.flowAll().collect { apps -> - val packageManager = context.packageManager - state = ConfigViewState( - initialized = true, - data = apps.map { - val packageInfo = - packageManager.getPackageInfoForUid(it.uid) ?: return@map null - val applicationInfo = packageInfo.applicationInfo - if (it.signature != packageInfo.signature) return@map null - ConfigViewState.Data( - packageName = packageInfo.packageName, - label = applicationInfo.loadLabel(packageManager).toString(), - icon = applicationInfo.loadIcon(packageManager), - appEntity = it - ) - }.filterNotNull() - ) - } - } - } - - private fun updateConfigByUID(uid: Int, allowApi: Boolean) { - viewModelScope.launch(Dispatchers.IO) { - val entity = repo.findByUID(uid) ?: return@launch - entity.allowApi = allowApi - if (!allowApi && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - context.clearDelegatedScopes(entity.uid) - } - repo.update(entity) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewState.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewState.kt deleted file mode 100644 index a3e41ca..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/config/ConfigViewState.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings.config - -import android.graphics.drawable.Drawable -import com.rosan.dhizuku.data.settings.model.room.entity.AppEntity - -data class ConfigViewState( - val initialized: Boolean = false, - val data: List = emptyList() -) { - data class Data( - val packageName: String, - val label: String, - val icon: Drawable, - val appEntity: AppEntity - ) -} diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/home/HomeCardItem.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/home/HomeCardItem.kt deleted file mode 100644 index 5b6c973..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/home/HomeCardItem.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings.home - -import androidx.compose.ui.graphics.vector.ImageVector - -data class HomeCardItem( - val icon: ImageVector? = null, - val label: String, - val content: String? = null, - val onClick: (() -> Unit)? = null -) { -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/home/HomePage.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/home/HomePage.kt index 3662f85..e065ddc 100644 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/home/HomePage.kt +++ b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/home/HomePage.kt @@ -1,46 +1,82 @@ package com.rosan.dhizuku.ui.page.settings.home -import android.annotation.SuppressLint import android.app.admin.DevicePolicyManager -import android.content.* -import android.net.Uri -import android.os.Build -import android.text.method.LinkMovementMethod -import android.widget.TextView +import android.content.Context import androidx.compose.animation.AnimatedContent -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.* +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.text.selection.SelectionContainer -import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.twotone.* -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.material.icons.twotone.Adb +import androidx.compose.material.icons.twotone.AttachMoney +import androidx.compose.material.icons.twotone.Cancel +import androidx.compose.material.icons.twotone.Code +import androidx.compose.material.icons.twotone.DoNotDisturbOn +import androidx.compose.material.icons.twotone.MoreVert +import androidx.compose.material.icons.twotone.RoomPreferences +import androidx.compose.material.icons.twotone.SentimentVeryDissatisfied +import androidx.compose.material.icons.twotone.SentimentVerySatisfied +import androidx.compose.material.icons.twotone.SwapHorizontalCircle +import androidx.compose.material.icons.twotone.Terminal +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.CardColors +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.IconButtonColors +import androidx.compose.material3.IconButtonDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.TextLinkStyles import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.fromHtml +import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.unit.dp -import androidx.compose.ui.viewinterop.AndroidView -import androidx.core.text.HtmlCompat import androidx.navigation.NavController -import com.rosan.dhizuku.App import com.rosan.dhizuku.R -import com.rosan.dhizuku.data.common.model.exception.ShizukuNotWorkException -import com.rosan.dhizuku.data.common.util.setDeviceOwner -import com.rosan.dhizuku.data.common.util.toast +import com.rosan.dhizuku.data.common.util.openUrlInBrowser import com.rosan.dhizuku.server.DhizukuDAReceiver +import com.rosan.dhizuku.server.DhizukuState +import com.rosan.dhizuku.ui.page.settings.SettingsRoute import com.rosan.dhizuku.ui.theme.exclude -import com.rosan.dhizuku.ui.widget.dialog.PositionDialog -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch import kotlin.system.exitProcess @OptIn(ExperimentalMaterial3Api::class) @@ -49,6 +85,7 @@ fun HomePage( windowInsets: WindowInsets, navController: NavController ) { + val dhizukuState = DhizukuState.state Scaffold( modifier = Modifier .windowInsetsPadding(windowInsets.exclude(WindowInsetsSides.Bottom)) @@ -57,8 +94,11 @@ fun HomePage( topBar = { TopAppBar( title = { - Text(text = stringResource(id = R.string.home)) + Text(stringResource(R.string.app_name)) }, + actions = { + OverflowMenu() + } ) }) { LazyColumn( @@ -68,423 +108,309 @@ fun HomePage( .padding(it), verticalArrangement = Arrangement.spacedBy(16.dp), ) { - item { - StatusWidget() + item("dhizuku_state") { + DhizukuStateWidget() + } + if (dhizukuState.owner) item("app_management") { + AppManagementWidget(navController) + } + item("dhizuku") { + DhizukuWidget(navController) } - item { - ActiveWidget() + item("shizuku") { + ShizukuWidget(navController) } - item { - DonateWidget() + item("adb") { + AdbWidget() + } + if (dhizukuState.owner) item("home_deactivate_title") { + DeactivateWidget() } } } } -@SuppressLint("MissingPermission") @Composable -fun StatusWidget() { +private fun OverflowMenu() { val context = LocalContext.current - val app = context.applicationContext as App - val isDeviceAdminer = app.isDeviceAdminer - val isDeviceOwner = app.isDeviceOwner - - val containerColor = if (isDeviceOwner) MaterialTheme.colorScheme.primaryContainer - else if (isDeviceAdminer) MaterialTheme.colorScheme.tertiaryContainer - else MaterialTheme.colorScheme.errorContainer + var menuExpanded by remember { mutableStateOf(false) } + var shutdownDialogShow by remember { mutableStateOf(false) } - val onContainerColor = if (isDeviceOwner) MaterialTheme.colorScheme.onPrimaryContainer - else if (isDeviceAdminer) MaterialTheme.colorScheme.onTertiaryContainer - else MaterialTheme.colorScheme.onErrorContainer + IconButton(onClick = { menuExpanded = true }) { + Icon(Icons.TwoTone.MoreVert, null) + } + DropdownMenu( + expanded = menuExpanded, + onDismissRequest = { menuExpanded = false }) { + DropdownMenuItem(text = { + Text(stringResource(R.string.home_shutdown_title)) + }, leadingIcon = { + Icon(Icons.TwoTone.Cancel, null) + }, onClick = { + menuExpanded = false + shutdownDialogShow = true + }) - val icon = if (isDeviceOwner) Icons.TwoTone.SentimentVerySatisfied - else if (isDeviceAdminer) Icons.TwoTone.SentimentNeutral - else Icons.TwoTone.SentimentVeryDissatisfied + R.string.wechat + R.string.alipay + R.string.binance + DropdownMenuItem(text = { + Text(stringResource(R.string.donate)) + }, leadingIcon = { + Icon(Icons.TwoTone.AttachMoney, null) + }, onClick = { + menuExpanded = false + context.openUrlInBrowser("https://github.com/iamr0s/Dhizuku") + }) + } - val text = stringResource( - id = if (isDeviceOwner) R.string.device_owner_granted - else if (isDeviceAdminer) R.string.device_admin_granted - else R.string.device_admin_denied - ) - CardWidget(colors = CardDefaults.elevatedCardColors( - containerColor = containerColor, contentColor = onContainerColor - ), content = { - Row(modifier = Modifier.padding(horizontal = 24.dp)) { - Icon( - modifier = Modifier.align(Alignment.CenterVertically), - imageVector = icon, - contentDescription = null - ) - Spacer(modifier = Modifier.size(24.dp)) - Text( - modifier = Modifier.align(Alignment.CenterVertically), - text = text, - style = MaterialTheme.typography.titleMedium - ) + if (!shutdownDialogShow) return + AlertDialog(onDismissRequest = { + shutdownDialogShow = false + }, confirmButton = { + TextButton(onClick = { + shutdownDialogShow = false + }) { + Text(stringResource(R.string.cancel)) } + TextButton(onClick = { + exitProcess(0) + }) { + Text(stringResource(R.string.confirm)) + } + }, title = { + Text(stringResource(R.string.home_shutdown_title)) + }, text = { + Text(stringResource(R.string.home_shutdown_dsp)) }) } @Composable -fun ShizukuButton() { - val context = LocalContext.current - val scope = rememberCoroutineScope() - var showDialog by remember { - mutableStateOf(false) - } - var inProgress by remember { - mutableStateOf(false) - } - var exception: Throwable? by remember { - mutableStateOf(null) - } +private fun LazyItemScope.DhizukuStateWidget() { + val isOwner = DhizukuState.state.owner - Button(onClick = { - scope.launch(Dispatchers.IO) { - inProgress = true - exception = null - showDialog = true - exception = kotlin.runCatching { - setDeviceOwner(context, DhizukuDAReceiver.name) - }.exceptionOrNull() - inProgress = false - } - }) { + @Suppress("AnimateAsStateLabel") + val iconContainerColor by animateColorAsState( + if (isOwner) MaterialTheme.colorScheme.primaryContainer + else MaterialTheme.colorScheme.errorContainer + ) + + @Suppress("AnimateAsStateLabel") + val iconColor by animateColorAsState( + if (isOwner) MaterialTheme.colorScheme.onPrimaryContainer + else MaterialTheme.colorScheme.onErrorContainer + ) + CardWidget(colors = CardDefaults.cardColors( + containerColor = iconContainerColor + ), icon = { Icon( - modifier = Modifier.size(16.dp), - imageVector = Icons.TwoTone.Key, + imageVector = Icons.TwoTone.run { + if (isOwner) SentimentVerySatisfied + else SentimentVeryDissatisfied + }, contentDescription = null ) - Spacer(modifier = Modifier.size(ButtonDefaults.IconSpacing)) - Text(text = stringResource(id = R.string.active_by_shizuku)) - } - - if (!showDialog) return - PositionDialog(onDismissRequest = {}, centerTitle = { - Text(stringResource(R.string.active_by_shizuku)) - }, leftText = { - AnimatedContent(targetState = inProgress) { - val error = exception - if (it) LinearProgressIndicator(modifier = Modifier.fillMaxWidth()) - else if (error == null) Text(stringResource(R.string.execution_end)) - else CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onErrorContainer) { - val tip = when (error) { - is ShizukuNotWorkException -> stringResource(R.string.shizuku_binder_not_received) - else -> error.localizedMessage - } - SelectionContainer { - Column( - modifier = Modifier - .clip(RoundedCornerShape(12.dp)) - .background(MaterialTheme.colorScheme.errorContainer) - .fillMaxWidth() - .padding(12.dp), - verticalArrangement = Arrangement.spacedBy(8.dp) - ) { - if (tip != null) Text(tip, fontWeight = FontWeight.Bold) - Text( - error.stackTraceToString().trim(), - modifier = Modifier.verticalScroll(rememberScrollState()) - ) - } - } - } - } - }, rightButton = { - TextButton(onClick = { - showDialog = false - }) { - Text(stringResource(R.string.finish)) + }, iconColors = IconButtonDefaults.iconButtonColors( + containerColor = iconContainerColor, + contentColor = iconColor + ), title = { + @Suppress("AnimatedContentLabel") + AnimatedContent(targetState = isOwner) { + Text(stringResource(if (it) R.string.home_status_owner_granted else R.string.home_status_owner_denied)) } }) } @Composable -fun ADBButton() { - val context = LocalContext.current - var showDialog by remember { - mutableStateOf(false) - } - val command = - "adb shell dpm set-device-owner ${DhizukuDAReceiver.name.flattenToShortString()}" +private fun LazyItemScope.AppManagementWidget(navController: NavController) { + CardWidget(onClick = { + navController.navigate(SettingsRoute.AppManagement.route) + }, icon = { + Icon(imageVector = Icons.TwoTone.RoomPreferences, contentDescription = null) + }, title = { + Text(stringResource(R.string.home_app_management_title)) + }, text = { + Text(stringResource(R.string.home_app_management_dsp)) + }) +} - Button(onClick = { - showDialog = true - }) { - Icon( - modifier = Modifier.size(16.dp), - imageVector = Icons.TwoTone.Adb, - contentDescription = null - ) - Spacer(modifier = Modifier.size(ButtonDefaults.IconSpacing)) - Text(text = stringResource(id = R.string.active_by_adb)) - } - if (showDialog) { - AlertDialog(onDismissRequest = { - showDialog = false - }, title = { - Text(text = stringResource(id = R.string.active_by_adb)) - }, text = { - val textColor = AlertDialogDefaults.textContentColor.toArgb() - AndroidView(factory = { - val view = TextView(it) - view.movementMethod = LinkMovementMethod.getInstance() - view.setTextColor(textColor) - view.text = HtmlCompat.fromHtml( - it.getString(R.string.active_by_adb_dsp, command), - HtmlCompat.FROM_HTML_MODE_COMPACT - ) - return@AndroidView view - }) - }, confirmButton = { - TextButton(onClick = { - val manager = - context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - manager.setPrimaryClip(ClipData.newPlainText("Label", command)) - context.toast(R.string.copy_success) - showDialog = false - }) { - Text(text = stringResource(id = R.string.copy)) - } - }, dismissButton = { - TextButton(onClick = { showDialog = false }) { - Text(text = stringResource(id = R.string.cancel)) - } - }) - } +@Composable +private fun LazyItemScope.DhizukuWidget(navController: NavController) { + CardWidget(onClick = { + navController.navigate(SettingsRoute.Activate.route(SettingsRoute.Activate.Mode.Dhizuku)) + }, icon = { + Icon(imageVector = Icons.TwoTone.SwapHorizontalCircle, contentDescription = null) + }, title = { + Text(stringResource(R.string.home_dhizuku_title)) + }, text = { + HtmlText(stringResource(R.string.home_dhizuku_dsp, "https://github.com/iamr0s/Dhizuku")) + }) } @Composable -fun DeactivateButton() { - val context = LocalContext.current - var showDialog by remember { +private fun LazyItemScope.ShizukuWidget(navController: NavController) { + CardWidget(onClick = { + navController.navigate(SettingsRoute.Activate.route(SettingsRoute.Activate.Mode.Shizuku)) + }, icon = { + Icon(imageVector = Icons.TwoTone.Terminal, contentDescription = null) + }, title = { + Text(stringResource(R.string.home_shizuku_title)) + }, text = { + HtmlText(stringResource(R.string.home_shizuku_dsp, "https://shizuku.rikka.app/")) + }) +} + +@Composable +private fun LazyItemScope.AdbWidget() { + val command = "adb shell dpm set-device-owner ${DhizukuDAReceiver.name.flattenToShortString()}" + var state by remember { mutableStateOf(false) } - Button(onClick = { - showDialog = true - }) { - Icon( - modifier = Modifier.size(16.dp), - imageVector = Icons.TwoTone.Outlet, - contentDescription = null + CardWidget(icon = { + Icon(imageVector = Icons.TwoTone.Adb, contentDescription = null) + }, title = { + Text(stringResource(R.string.home_adb_title)) + }, content = { + HtmlText( + stringResource( + R.string.home_adb_dsp, + "https://developer.android.com/tools/adb" + ) ) - Spacer(modifier = Modifier.size(ButtonDefaults.IconSpacing)) - Text(text = stringResource(id = R.string.deactivate)) - } - if (!showDialog) return + TextButton(onClick = { state = true }) { + Icon(imageVector = Icons.TwoTone.Code, contentDescription = null) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Text(stringResource(R.string.home_adb_btn_view_command)) + } + }) + if (!state) return AlertDialog(onDismissRequest = { - showDialog = false - }, title = { - Text(stringResource(R.string.deactivate)) - }, text = { - Text(stringResource(R.string.deactivate_dsp)) + state = false }, confirmButton = { TextButton(onClick = { - val e = runCatching { - val manager = - context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager - runCatching { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - manager.clearProfileOwner(DhizukuDAReceiver.name) - } - } - manager.clearDeviceOwnerApp(context.packageName) - }.exceptionOrNull() - context.toast(if (e == null) R.string.deactivate_success else R.string.deactivate_failed) + state = false }) { - Text(stringResource(R.string.confirm)) - } - }, dismissButton = { - TextButton(onClick = { showDialog = false }) { Text(stringResource(R.string.cancel)) } + val manager = LocalClipboardManager.current + TextButton(onClick = { + manager.setText(AnnotatedString(command)) + state = false + }) { + Text(stringResource(R.string.copy)) + } + }, title = { + Text(stringResource(R.string.home_adb_btn_view_command)) + }, text = { + Text(command) }) } @Composable -fun ForceStopButton() { +private fun LazyItemScope.DeactivateWidget() { val context = LocalContext.current - var showDialog by remember { + val manager = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager + var state by remember { mutableStateOf(false) } - - Button(onClick = { - showDialog = true - }) { - Icon( - modifier = Modifier.size(16.dp), - imageVector = Icons.TwoTone.Close, - contentDescription = null - ) - Spacer(modifier = Modifier.size(ButtonDefaults.IconSpacing)) - Text(text = stringResource(id = R.string.force_stop)) - } - if (!showDialog) return - AlertDialog(onDismissRequest = { - showDialog = false + CardWidget(onClick = { + state = true + }, icon = { + Icon(imageVector = Icons.TwoTone.DoNotDisturbOn, contentDescription = null) }, title = { - Text(text = stringResource(id = R.string.force_stop)) - }, text = { - Text(stringResource(R.string.force_stop_dsp)) + Text(stringResource(R.string.home_deactivate_title)) + }) + if (!state) return + AlertDialog(onDismissRequest = { + state = false }, confirmButton = { TextButton(onClick = { - exitProcess(0) + state = false }) { - Text(text = stringResource(id = R.string.confirm)) + Text(stringResource(R.string.cancel)) } - }, dismissButton = { - TextButton(onClick = { showDialog = false }) { - Text(text = stringResource(id = R.string.cancel)) + TextButton(onClick = { + @Suppress("DEPRECATION") + manager.clearDeviceOwnerApp(context.packageName) + state = false + }) { + Text(stringResource(R.string.confirm)) } - }) -} - -@Composable -fun ActiveWidget() { - CardWidget(title = { - Text(text = stringResource(id = R.string.active)) + }, title = { + Text(stringResource(R.string.home_deactivate_title)) }, text = { - Text(text = stringResource(id = R.string.active_func_dsp)) - }, buttons = { - ShizukuButton() - ADBButton() - DeactivateButton() - ForceStopButton() + Text(stringResource(R.string.home_deactivate_dsp)) }) } -fun openUrl(context: Context, url: String) { - val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - context.startActivity(intent) -} - @Composable -fun DonateWidget() { - val context = LocalContext.current - ItemsCardWidget( - title = { - Text(text = stringResource(id = R.string.donate)) - }, items = listOf( - HomeCardItem(label = stringResource(id = R.string.alipay), onClick = { - openUrl(context, "https://qr.alipay.com/fkx18580lfpydiop04dze47") - }), - HomeCardItem(label = stringResource(id = R.string.wechat), onClick = { - openUrl(context, "https://missuo.ru/file/fee5df1381671c996b127.png") - }), - HomeCardItem(label = stringResource(id = R.string.binance), onClick = { - openUrl(context, "https://missuo.ru/file/28368c28d4ff28d59ed4b.jpg") - }), +private fun HtmlText(text: String) { + Text( + AnnotatedString.fromHtml( + text, + TextLinkStyles( + SpanStyle( + color = MaterialTheme.colorScheme.primary, + fontWeight = FontWeight.Bold, + textDecoration = TextDecoration.Underline + ) + ) ) ) } @Composable -fun ItemsCardWidget( - colors: CardColors = CardDefaults.elevatedCardColors(), - onClick: (() -> Unit)? = null, - showItemIcon: Boolean = false, - icon: (@Composable () -> Unit)? = null, - title: (@Composable () -> Unit)? = null, - items: List, - buttons: (@Composable () -> Unit)? = null -) { - CardWidget( - colors = colors, onClick = onClick, icon = icon, title = title, content = { - @Composable - fun ItemWidget(item: HomeCardItem) { - Row( - modifier = Modifier - .clickable(enabled = item.onClick != null, onClick = item.onClick ?: {}) - .padding(horizontal = 24.dp, vertical = 12.dp), - horizontalArrangement = Arrangement.spacedBy(24.dp) - ) { - if (showItemIcon) { - if (item.icon != null) { - Icon(imageVector = item.icon, contentDescription = item.label) - } else { - Spacer(modifier = Modifier.size(32.dp)) - } - } - Column( - modifier = Modifier.weight(1f) - ) { - Text(text = item.label, style = MaterialTheme.typography.bodyLarge) - if (item.content != null) { - Text(text = item.content, style = MaterialTheme.typography.bodyMedium) - } - } - } - } - Column { - items.forEach { - ItemWidget(it) - } - } - }, buttons = buttons - ) -} - -@OptIn(ExperimentalLayoutApi::class) -@Composable -fun CardWidget( +private fun LazyItemScope.CardWidget( + modifier: Modifier = Modifier, colors: CardColors = CardDefaults.elevatedCardColors(), - onClick: (() -> Unit)? = null, - icon: (@Composable () -> Unit)? = null, - title: (@Composable () -> Unit)? = null, - content: (@Composable () -> Unit)? = null, + onClick: () -> Unit = {}, + icon: @Composable () -> Unit, + iconColors: IconButtonColors = IconButtonDefaults.iconButtonColors( + containerColor = MaterialTheme.colorScheme.primaryContainer + ), + title: @Composable () -> Unit, text: (@Composable () -> Unit)? = null, - buttons: (@Composable () -> Unit)? = null + content: (@Composable () -> Unit)? = null ) { ElevatedCard( - colors = colors + modifier = modifier.animateItem(), + colors = colors, onClick = onClick ) { Column( modifier = Modifier .fillMaxWidth() - .clickable(enabled = onClick != null, onClick = onClick ?: {}) - .padding(vertical = 24.dp), verticalArrangement = Arrangement.spacedBy(12.dp) + .padding(16.dp) + .animateContentSize(), + verticalArrangement = Arrangement.spacedBy(16.dp) ) { - if (icon != null || title != null) { - Row( - modifier = Modifier - .padding(horizontal = 24.dp) - .align(Alignment.CenterHorizontally) + Row( + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Surface( + shape = RoundedCornerShape(40.dp), + color = iconColors.containerColor, + contentColor = iconColors.contentColor ) { - if (icon != null) { - Box(modifier = Modifier.align(Alignment.CenterVertically)) { - icon() - } + Box(Modifier.padding(8.dp)) { + icon.invoke() } - if (icon != null && title != null) { - Spacer(modifier = Modifier.size(24.dp)) + } + Column { + ProvideTextStyle(MaterialTheme.typography.titleMedium) { + title.invoke() } - if (title != null) { - ProvideTextStyle(value = MaterialTheme.typography.titleLarge) { - Box(modifier = Modifier.align(Alignment.CenterVertically)) { - title() - } + ProvideTextStyle(MaterialTheme.typography.bodyMedium) { + @Suppress("AnimatedContentLabel") + AnimatedContent(targetState = text) { + it?.invoke() } } } } - if (content != null || text != null) { - if (content != null) Box { - content() - } - else Box(modifier = Modifier.padding(horizontal = 24.dp)) { - ProvideTextStyle(value = MaterialTheme.typography.bodyMedium) { - text?.invoke() - } - } - } - if (buttons != null) { - FlowRow( - modifier = Modifier.padding(horizontal = 12.dp), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - buttons() - } + ProvideTextStyle(MaterialTheme.typography.bodyMedium) { + content?.invoke() } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/main/MainPage.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/main/MainPage.kt deleted file mode 100644 index ceec3ad..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/main/MainPage.kt +++ /dev/null @@ -1,200 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings.main - -import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.layout.BoxWithConstraints -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.only -import androidx.compose.foundation.layout.wrapContentSize -import androidx.compose.foundation.pager.HorizontalPager -import androidx.compose.foundation.pager.rememberPagerState -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.twotone.Home -import androidx.compose.material.icons.twotone.RoomPreferences -import androidx.compose.material.icons.twotone.SettingsSuggest -import androidx.compose.material3.Icon -import androidx.compose.material3.NavigationBar -import androidx.compose.material3.NavigationBarItem -import androidx.compose.material3.NavigationRail -import androidx.compose.material3.NavigationRailItem -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.navigation.NavController -import com.rosan.dhizuku.R -import com.rosan.dhizuku.ui.page.settings.config.ConfigPage -import com.rosan.dhizuku.ui.page.settings.home.HomePage -import com.rosan.dhizuku.ui.page.settings.preferred.PreferredPage -import com.rosan.dhizuku.ui.theme.exclude -import kotlinx.coroutines.DelicateCoroutinesApi -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch - -@OptIn(DelicateCoroutinesApi::class, ExperimentalFoundationApi::class) -@Composable -fun MainPage( - windowInsets: WindowInsets, - navController: NavController -) { - val data = arrayOf( - NavigationData( - icon = Icons.TwoTone.Home, - label = stringResource(id = R.string.home) - ) { - HomePage(windowInsets = it, navController = navController) - }, - NavigationData( - icon = Icons.TwoTone.RoomPreferences, - label = stringResource(id = R.string.config) - ) { - ConfigPage(windowInsets = it, navController = navController) - }, - NavigationData( - icon = Icons.TwoTone.SettingsSuggest, - label = stringResource(id = R.string.preferred) - ) { - PreferredPage(windowInsets = it, navController = navController) - } - ) - - val pagerState = rememberPagerState { - data.size - } - val currentPage = pagerState.currentPage - fun onPageChanged(page: Int) { - GlobalScope.launch(Dispatchers.Main) { - pagerState.scrollToPage(page = page) - } - } - - BoxWithConstraints( - modifier = Modifier - .fillMaxSize() - ) { - val isLandscapeScreen = maxHeight / maxWidth > 1.4 - - val navigationSide = - if (isLandscapeScreen) WindowInsetsSides.Bottom - else WindowInsetsSides.Left - - val navigationWindowInsets = windowInsets.only( - (if (isLandscapeScreen) WindowInsetsSides.Horizontal - else WindowInsetsSides.Vertical) + navigationSide - ) - val pageWindowInsets = windowInsets.exclude(navigationSide) - - Row( - modifier = Modifier - .fillMaxSize() - ) { - if (!isLandscapeScreen) { - ColumnNavigation( - windowInsets = navigationWindowInsets, - data = data, - currentPage = currentPage, - onPageChanged = { onPageChanged(it) } - ) - } - - Column( - modifier = Modifier - .weight(1f) - .fillMaxSize() - ) { - HorizontalPager( - state = pagerState, - userScrollEnabled = false, - modifier = Modifier - .weight(1f) - .fillMaxSize() - ) { - data[it].content.invoke(pageWindowInsets) - } - if (isLandscapeScreen) { - RowNavigation( - windowInsets = navigationWindowInsets, - data = data, - currentPage = currentPage, - onPageChanged = { onPageChanged(it) } - ) - } - } - } - } -} - -@Composable -fun RowNavigation( - windowInsets: WindowInsets, - data: Array, - currentPage: Int, - onPageChanged: (Int) -> Unit -) { - NavigationBar( - modifier = Modifier - .fillMaxWidth() - .wrapContentSize(), - windowInsets = windowInsets - ) { - data.forEachIndexed { index, navigationData -> - NavigationBarItem( - selected = currentPage == index, - onClick = { onPageChanged(index) }, - icon = { - Icon( - imageVector = navigationData.icon, - contentDescription = navigationData.label - ) - }, - label = { - Text(text = navigationData.label) - }, - alwaysShowLabel = false - ) - } - } -} - -@Composable -fun ColumnNavigation( - windowInsets: WindowInsets, - data: Array, - currentPage: Int, - onPageChanged: (Int) -> Unit -) { - NavigationRail( - modifier = Modifier - .fillMaxHeight() - .wrapContentSize(), - windowInsets = windowInsets - ) { - Spacer( - modifier = Modifier - .weight(1f) - ) - data.forEachIndexed { index, navigationData -> - NavigationRailItem( - selected = currentPage == index, - onClick = { onPageChanged(index) }, - icon = { - Icon( - imageVector = navigationData.icon, - contentDescription = navigationData.label - ) - }, - label = { - Text(text = navigationData.label) - }, - alwaysShowLabel = false - ) - } - } -} diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/main/NavigationData.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/main/NavigationData.kt deleted file mode 100644 index e2d9449..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/main/NavigationData.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings.main - -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.vector.ImageVector - -data class NavigationData( - val icon: ImageVector, - val label: String, - val content: @Composable (windowInsets: WindowInsets) -> Unit -) diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredPage.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredPage.kt deleted file mode 100644 index ff53510..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredPage.kt +++ /dev/null @@ -1,81 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings.preferred - -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.only -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.twotone.NotificationsActive -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Scaffold -import androidx.compose.material3.SnackbarHost -import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBar -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.navigation.NavController -import com.rosan.dhizuku.R -import com.rosan.dhizuku.ui.theme.exclude -import com.rosan.dhizuku.ui.widget.setting.LabelWidget -import com.rosan.dhizuku.ui.widget.setting.SwitchWidget -import org.koin.androidx.compose.getViewModel -import org.koin.core.parameter.parametersOf - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun PreferredPage( - windowInsets: WindowInsets, - navController: NavController, - viewModel: PreferredViewModel = getViewModel { - parametersOf(navController) - } -) { - LaunchedEffect(true) { - viewModel.dispatch(PreferredViewAction.Init) - } - - val snackBarHostState = remember { - SnackbarHostState() - } - Scaffold( - modifier = Modifier - .windowInsetsPadding(windowInsets.exclude(WindowInsetsSides.Bottom)) - .fillMaxSize(), - contentWindowInsets = windowInsets.only(WindowInsetsSides.Bottom), - topBar = { - TopAppBar(title = { - Text(text = stringResource(id = R.string.preferred)) - }) - }, - snackbarHost = { SnackbarHost(hostState = snackBarHostState) }, - ) { - LazyColumn( - modifier = Modifier - .fillMaxSize() - .padding(it) - ) { - item { LabelWidget(label = stringResource(id = R.string.basic)) } - item { DataAllowTestOnlyWidget(viewModel) } - } - } -} - -@Composable -fun DataAllowTestOnlyWidget(viewModel: PreferredViewModel) { - SwitchWidget( - icon = Icons.TwoTone.NotificationsActive, - title = stringResource(id = R.string.toast_when_using_dhizuku), - description = stringResource(id = R.string.toast_when_using_dhizuku_dsp), - checked = viewModel.state.toastWhenUsingDhizuku, - onCheckedChange = { - viewModel.dispatch(PreferredViewAction.ChangeToastWhenUsingDhizuku(it)) - } - ) -} diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewAction.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewAction.kt deleted file mode 100644 index 19e01ee..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewAction.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings.preferred - -sealed class PreferredViewAction { - object Init : PreferredViewAction() - - data class ChangeToastWhenUsingDhizuku(val value: Boolean) : PreferredViewAction() -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewModel.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewModel.kt deleted file mode 100644 index 3088b12..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewModel.kt +++ /dev/null @@ -1,87 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings.preferred - -import android.content.Context -import android.content.SharedPreferences -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue -import androidx.core.content.edit -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import androidx.navigation.NavController -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.channels.trySendBlocking -import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.launch -import org.koin.core.component.KoinComponent -import org.koin.core.component.get -import org.koin.core.component.inject -import org.koin.core.parameter.parametersOf - -class PreferredViewModel(private val navController: NavController) : ViewModel(), KoinComponent { - private val context by inject() - - private val sharedPreferences: SharedPreferences = get { - parametersOf("preferred") - } - - var state by mutableStateOf(PreferredViewState()) - private set - - fun dispatch(action: PreferredViewAction) { - when (action) { - PreferredViewAction.Init -> init() - is PreferredViewAction.ChangeToastWhenUsingDhizuku -> changeToastWhenUsingDhizuku(action.value) - } - } - - private var isInited = false - - private fun init() { - synchronized(this) { - if (isInited) return - isInited = true - collect() - } - } - - private var collectJob: Job? = null - - private fun collect() { - collectJob?.cancel() - collectJob = viewModelScope.launch(Dispatchers.IO) { - callbackFlow { - val listener = - SharedPreferences.OnSharedPreferenceChangeListener { _, key -> - trySendBlocking(key) - } - sharedPreferences.registerOnSharedPreferenceChangeListener(listener) - for (key in sharedPreferences.all.keys) { - send(key) - } - awaitClose { - sharedPreferences.unregisterOnSharedPreferenceChangeListener(listener) - } - }.collect { - state = when (it) { - "toast_when_using_dhizuku" -> state.copy( - toastWhenUsingDhizuku = sharedPreferences.getBoolean( - it, - state.toastWhenUsingDhizuku - ) - ) - - else -> state - } - } - } - } - - private fun changeToastWhenUsingDhizuku(value: Boolean) { - sharedPreferences.edit { - putBoolean("toast_when_using_dhizuku", value) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewState.kt b/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewState.kt deleted file mode 100644 index cdead97..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/page/settings/preferred/PreferredViewState.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.rosan.dhizuku.ui.page.settings.preferred - -data class PreferredViewState( - val toastWhenUsingDhizuku: Boolean = false -) \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/theme/AppIconCache.kt b/app/src/main/java/com/rosan/dhizuku/ui/theme/AppIconCache.kt new file mode 100644 index 0000000..dc4ab87 --- /dev/null +++ b/app/src/main/java/com/rosan/dhizuku/ui/theme/AppIconCache.kt @@ -0,0 +1,78 @@ +package com.rosan.dhizuku.ui.theme + +import android.app.admin.DeviceAdminInfo +import android.content.Context +import android.content.pm.ActivityInfo +import android.content.pm.ApplicationInfo +import android.graphics.Bitmap +import androidx.collection.LruCache +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.asImageBitmap +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.toBitmap +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject +import kotlin.coroutines.CoroutineContext + +object AppIconCache : CoroutineScope, KoinComponent { + private val context by inject() + + private val defaultImageBitMap by lazy { + ContextCompat.getDrawable(context, android.R.drawable.sym_def_app_icon)!! + .toBitmap() + .asImageBitmap() + } + + private val lruCache by lazy { + val maxMemory = Runtime.getRuntime().maxMemory() / 1024 + val availableCacheSize = (maxMemory / 4).toInt() + object : LruCache(availableCacheSize) { + override fun sizeOf(key: String, value: Bitmap): Int { + return value.byteCount / 4 + } + } + } + + override val coroutineContext: CoroutineContext = Dispatchers.IO + + private fun id(applicationInfo: ApplicationInfo) = + Triple(applicationInfo.packageName, "", applicationInfo.uid) + + private fun id(activityInfo: ActivityInfo) = + Triple(activityInfo.packageName, activityInfo.name, activityInfo.applicationInfo.uid) + + @Composable + private fun rememberImageBitmapState(key: String, action: () -> Bitmap?) = + remember(key) { + mutableStateOf(defaultImageBitMap).also { + launch { + val bitmap = lruCache[key] + ?: action.invoke() + ?: return@launch +// ?: applicationInfo.loadIcon(context.packageManager)?.toBitmap() +// ?: return@launch + lruCache.put(key, bitmap) + it.value = bitmap.asImageBitmap() + } + } + } + + @Composable + fun rememberImageBitmapState(applicationInfo: ApplicationInfo): State = + rememberImageBitmapState("${applicationInfo.packageName}_${applicationInfo.uid}") { + applicationInfo.loadIcon(context.packageManager)?.toBitmap() + } + + @Composable + fun rememberImageBitmapState(admin: DeviceAdminInfo): State = + rememberImageBitmapState("${admin.component.flattenToShortString()}_${admin.activityInfo.applicationInfo.uid}") { + admin.loadIcon(context.packageManager)?.toBitmap() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/DialogButton.kt b/app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/DialogButton.kt deleted file mode 100644 index b5225fc..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/DialogButton.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.rosan.dhizuku.ui.widget.dialog - -data class DialogButton( - val text: String, - val onClick: () -> Unit -) diff --git a/app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/DialogButtons.kt b/app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/DialogButtons.kt deleted file mode 100644 index 12a4a0a..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/DialogButtons.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.rosan.dhizuku.ui.widget.dialog - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.shape.CornerSize -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.material3.TextButton -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp - -@Composable -fun DialogButtons( - buttons: List -) { - Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { - buttons.forEachIndexed { index, button -> - val specialCornerSize = CornerSize(12.dp) - val shape = RoundedCornerShape(4.dp).let { - if (index != 0) it - else it.copy(topStart = specialCornerSize, topEnd = specialCornerSize) - }.let { - if (index + 1 != buttons.size) it - else it.copy(bottomStart = specialCornerSize, bottomEnd = specialCornerSize) - } - TextButton( - button.onClick, - modifier = Modifier.fillMaxWidth(), - shape = shape, - colors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer - ), - contentPadding = PaddingValues(16.dp) - ) { - Text(button.text) - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/PositionDialog.kt b/app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/PositionDialog.kt deleted file mode 100644 index 0c06627..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/widget/dialog/PositionDialog.kt +++ /dev/null @@ -1,232 +0,0 @@ -package com.rosan.dhizuku.ui.widget.dialog - -import androidx.compose.animation.core.animateDpAsState -import androidx.compose.foundation.clickable -import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.* -import androidx.compose.material3.* -import androidx.compose.runtime.* -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.Shape -import androidx.compose.ui.layout.onSizeChanged -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties - -@Composable -fun PositionDialog( - properties: DialogProperties = DialogProperties(), - onDismissRequest: () -> Unit, - modifier: Modifier = Modifier, - shape: Shape = AlertDialogDefaults.shape, - containerColor: Color = AlertDialogDefaults.containerColor, - iconContentColor: Color = AlertDialogDefaults.iconContentColor, - titleContentColor: Color = AlertDialogDefaults.titleContentColor, - textContentColor: Color = AlertDialogDefaults.textContentColor, - tonalElevation: Dp = AlertDialogDefaults.TonalElevation, - leftIcon: @Composable (() -> Unit)? = null, - centerIcon: @Composable (() -> Unit)? = null, - rightIcon: @Composable (() -> Unit)? = null, - leftTitle: @Composable (() -> Unit)? = null, - centerTitle: @Composable (() -> Unit)? = null, - rightTitle: @Composable (() -> Unit)? = null, - leftSubtitle: @Composable (() -> Unit)? = null, - centerSubtitle: @Composable (() -> Unit)? = null, - rightSubtitle: @Composable (() -> Unit)? = null, - leftText: @Composable (() -> Unit)? = null, - centerText: @Composable (() -> Unit)? = null, - rightText: @Composable (() -> Unit)? = null, - leftContent: @Composable (() -> Unit)? = null, - centerContent: @Composable (() -> Unit)? = null, - rightContent: @Composable (() -> Unit)? = null, - leftButton: @Composable (() -> Unit)? = null, - centerButton: @Composable (() -> Unit)? = null, - rightButton: @Composable (() -> Unit)? = null -) { - Dialog(onDismissRequest = onDismissRequest, properties = properties) { - Box( - modifier = Modifier - .fillMaxSize() - .clickable( - onClick = onDismissRequest, - indication = null, - interactionSource = remember { - MutableInteractionSource() - }) - ) { - Box( - modifier = Modifier - .align(Alignment.Center) - .clickable( - onClick = {}, - indication = null, - interactionSource = remember { - MutableInteractionSource() - }) - ) { - Surface( - modifier = modifier, - shape = shape, - color = containerColor, - tonalElevation = tonalElevation - ) { - Box( - modifier = Modifier - .sizeIn(minWidth = MinWidth, maxHeight = MaxWidth) - .padding(DialogPadding) - ) { - // set the button always in bottom - var buttonHeightPx by remember { - mutableStateOf(0) - } - val buttonHeight = (buttonHeightPx / LocalDensity.current.density).dp - Box(modifier = Modifier - .align(Alignment.BottomCenter) - .onSizeChanged { - buttonHeightPx = it.height - }) { - PositionChildWidget( - leftButton, - centerButton, - rightButton - ) { button -> - CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.primary) { - val textStyle = MaterialTheme.typography.labelLarge - ProvideTextStyle(value = textStyle) { - Box( - modifier = Modifier - .padding(ButtonPadding) - ) { - button?.invoke() - } - } - } - } - } - - Column( - modifier = Modifier.padding(bottom = animateDpAsState(targetValue = buttonHeight).value) - ) { - PositionChildWidget( - leftIcon, - centerIcon, - rightIcon - ) { icon -> - CompositionLocalProvider(LocalContentColor provides iconContentColor) { - Box( - modifier = Modifier - .padding(IconPadding) - .align(Alignment.CenterHorizontally) - ) { - icon?.invoke() - } - } - } - PositionChildWidget( - leftTitle, - centerTitle, - rightTitle - ) { title -> - CompositionLocalProvider(LocalContentColor provides titleContentColor) { - ProvideTextStyle(MaterialTheme.typography.headlineSmall) { - Box( - modifier = Modifier - .padding(TitlePadding) - .align(Alignment.CenterHorizontally) - ) { - title?.invoke() - } - } - } - } - PositionChildWidget( - leftSubtitle, - centerSubtitle, - rightSubtitle - ) { subtitle -> - CompositionLocalProvider(LocalContentColor provides titleContentColor) { - val textStyle = MaterialTheme.typography.bodyMedium - ProvideTextStyle(textStyle) { - Box( - modifier = Modifier - .padding(SubtitlePadding) - .align(Alignment.CenterHorizontally) - ) { - subtitle?.invoke() - } - } - } - } - val contentMode = - leftContent != null || centerContent != null || rightContent != null - PositionChildWidget( - if (contentMode) leftContent else leftText, - if (contentMode) centerContent else centerText, - if (contentMode) rightContent else rightText - ) { text -> - CompositionLocalProvider(LocalContentColor provides textContentColor) { - val textStyle = MaterialTheme.typography.bodyMedium - ProvideTextStyle(textStyle) { - Box( - modifier = Modifier - .weight(weight = 1f, fill = false) - .padding(if (contentMode) ContentPadding else TextPadding) - ) { - text?.invoke() - } - } - } - } - } - } - } - } - } - } -} - -@Composable -private fun PositionChildWidget( - left: @Composable (() -> Unit)? = null, - center: @Composable (() -> Unit)? = null, - right: @Composable (() -> Unit)? = null, - parent: @Composable ((child: @Composable (() -> Unit)?) -> Unit) -) { - if (left == null && center == null && right == null) return - Box(modifier = Modifier.fillMaxWidth()) { - Box(modifier = Modifier.align(Alignment.TopStart)) { - parent.invoke(left) - } - Box(modifier = Modifier.align(Alignment.TopCenter)) { - parent.invoke(center) - } - Box(modifier = Modifier.align(Alignment.TopEnd)) { - parent.invoke(right) - } - } -} - -private val ButtonsMainAxisSpacing = 8.dp -private val ButtonsCrossAxisSpacing = 12.dp - -private val DialogSinglePadding = 24.dp - -private val DialogPadding = PaddingValues(top = DialogSinglePadding, bottom = DialogSinglePadding) -private val IconPadding = - PaddingValues.Absolute(left = DialogSinglePadding, right = DialogSinglePadding, bottom = 12.dp) -private val TitlePadding = - PaddingValues.Absolute(left = DialogSinglePadding, right = DialogSinglePadding, bottom = 12.dp) -private val SubtitlePadding = - PaddingValues.Absolute(left = DialogSinglePadding, right = DialogSinglePadding, bottom = 12.dp) -private val TextPadding = - PaddingValues.Absolute(left = DialogSinglePadding, right = DialogSinglePadding, bottom = 12.dp) -private val ContentPadding = - PaddingValues.Absolute(bottom = 12.dp) -private val ButtonPadding = PaddingValues(horizontal = DialogSinglePadding) - -private val MinWidth = 280.dp -private val MaxWidth = 560.dp \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/BaseWidget.kt b/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/BaseWidget.kt deleted file mode 100644 index 7b8a648..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/BaseWidget.kt +++ /dev/null @@ -1,72 +0,0 @@ -package com.rosan.dhizuku.ui.widget.setting - -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.* -import androidx.compose.material.icons.materialIcon -import androidx.compose.material.icons.materialPath -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.unit.dp - -@Composable -fun BaseWidget( - icon: ImageVector? = null, - title: String, - description: String? = null, - enabled: Boolean = true, - onClick: () -> Unit = {}, - foreContent: @Composable BoxScope.() -> Unit = {}, - content: @Composable BoxScope.() -> Unit, -) { - Row( - modifier = Modifier - .fillMaxWidth() - .clickable( - enabled = enabled, - onClick = onClick - ) - .padding(16.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp), - ) { - Icon( - modifier = Modifier - .size(24.dp) - .align(Alignment.CenterVertically), - imageVector = icon ?: materialIcon("") { materialPath {} }, - contentDescription = null, - ) - Box( - modifier = Modifier - .weight(1f) - .fillMaxHeight() - .align(Alignment.CenterVertically) - ) { - Column { - Text( - text = title, - color = MaterialTheme.colorScheme.onSurface, - style = MaterialTheme.typography.titleMedium - ) - description?.let { - Text( - text = it, - color = MaterialTheme.colorScheme.onSurface, - style = MaterialTheme.typography.bodyMedium - ) - } - } - foreContent() - } - Box( - modifier = Modifier - .align(Alignment.CenterVertically) - ) { - content() - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/DropDownMenuWidget.kt b/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/DropDownMenuWidget.kt deleted file mode 100644 index aa44792..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/DropDownMenuWidget.kt +++ /dev/null @@ -1,119 +0,0 @@ -package com.rosan.dhizuku.ui.widget.setting - -import androidx.compose.animation.core.animateIntAsState -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* -import androidx.compose.material3.* -import androidx.compose.runtime.* -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.layout.layout -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.unit.DpOffset -import androidx.compose.ui.unit.dp - - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun DropDownMenuWidget( - icon: ImageVector? = null, - title: String, - description: String? = null, - enabled: Boolean = true, - choice: Int, - data: List, - onChoiceChange: (Int) -> Unit -) { - var expanded by remember { - mutableStateOf(false) - } - - val heights by remember { - mutableStateOf(Array(data.size) { 0 }) - } - - fun updateHeights(index: Int, height: Int) { - heights[index] = height - } - - var containerHeight by remember { - mutableStateOf(0) - } - - val containerHeightApply by animateIntAsState(targetValue = if (expanded) containerHeight else 0) - - val offsetY by animateIntAsState(targetValue = run { - val sumHeights = heights.sum() - var y = 0 - if (sumHeights < containerHeight) { - if (choice > 0) { - for (i in 0 until choice) { - y -= heights[i] - } - } - y -= heights[choice] / 2 - y -= (containerHeight - sumHeights) / 2 - } - y - }) - - BaseWidget( - icon = icon, - title = title, - description = description, - enabled = enabled, - onClick = { - expanded = !expanded - }, - foreContent = { - Box( - modifier = Modifier - .align(Alignment.CenterStart) - ) { - DropdownMenu( - modifier = Modifier - .layout { measurable, constraints -> - val placeable = measurable.measure(constraints) - containerHeight = placeable.height - layout(placeable.width, containerHeightApply) { - placeable.placeRelative(0, 0) - } - }, - expanded = expanded, - onDismissRequest = { expanded = false }, - offset = DpOffset( - x = 0.dp, - y = with(LocalDensity.current) { - offsetY.toDp() - } - ) - ) { - data.forEachIndexed { index, item -> - val backgroundColor = - if (index == choice) MaterialTheme.colorScheme.surfaceVariant else Color.Transparent - DropdownMenuItem( - modifier = Modifier - .background(backgroundColor) - .layout { measurable, constraints -> - val placeable = measurable.measure(constraints) - val height = placeable.height - updateHeights(index, height) - layout(placeable.width, height) { - placeable.placeRelative(0, 0) - } - }, - text = { Text(text = item) }, - onClick = { - onChoiceChange(index) - expanded = false - } - ) - } - } - } - } - ) { - } -} diff --git a/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/LabelWidget.kt b/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/LabelWidget.kt deleted file mode 100644 index ee68d4e..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/LabelWidget.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.rosan.dhizuku.ui.widget.setting - -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp - -@Composable -fun LabelWidget(label: String) { - Box( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = 8.dp, horizontal = 56.dp) -// .padding(vertical = 8.dp, horizontal = 16.dp) - .padding(top = 8.dp) - ) { - Text( - modifier = Modifier, - text = label, - style = MaterialTheme.typography.titleSmall, - color = MaterialTheme.colorScheme.primary, - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/SwitchWidget.kt b/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/SwitchWidget.kt deleted file mode 100644 index 69a9d46..0000000 --- a/app/src/main/java/com/rosan/dhizuku/ui/widget/setting/SwitchWidget.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.rosan.dhizuku.ui.widget.setting - -import androidx.compose.material3.Switch -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.vector.ImageVector - -@Composable -fun SwitchWidget( - icon: ImageVector? = null, - title: String, - description: String? = null, - enabled: Boolean = true, - checked: Boolean, - onCheckedChange: (Boolean) -> Unit -) { - BaseWidget( - icon = icon, - title = title, - description = description, - enabled = enabled, - onClick = { - onCheckedChange(!checked) - } - ) { - Switch( - enabled = enabled, - checked = checked, - onCheckedChange = { onCheckedChange(!checked) } - ) - } -} \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/round_hourglass_disabled_black_18.png b/app/src/main/res/drawable-hdpi/round_hourglass_disabled_black_18.png deleted file mode 100644 index 045a40ebb8d8b9a343b84f07a864373063465470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313 zcmV-90mlA`P)F^x2+^}YGYRcD*dH91V|g$_h-X(3*)ZaWSmiZn!z9It?1#*Ivbbt^gN=xE1q~KKC02#0#t#5!dDPoM}{ZEx| zo7HNbW_Nbr|D?x?RI`?JbmbFvyqEhfN5rrWI{t+qqyY5U8?mrZam;s(57;wRYNoY{ zMxGnIrBt-c_|89#7iqz6ZpC(?#2eOI+47vF88G=+4;K`q-2+}z7<~n@m z8y~C=gO~E*Hg0ShLk_;Mj6dOO=N&R5Ju)tPer@JU?a*J*VAcGw0HZH2I`M=k@1@`h3R91I=`($D2YG z$^|lty3!H@h0^L?S?|A96|W>K|U(42jkigxu}MjgfMn0 zn%SnBhjYjhK^Vs{I(5kpqgY0#PP;G_^|eEFj7jUgCs1PqVa0nI)i603FWsq;VE_h( zx{YJ5wwMI!13_9$MZLyTYjxvvplqw_Z$twr`wonxs#1OV@0$?~psGUm?~dj4O|{DnG_ki*n!^Yo;km}PoZ7(@A>Pr8 zl@CeOCnwEuR5@Tu^LQm=A?h-$%~WQ&eGRT9!?L&+auayM_8ul{TPMWDnBgvCoF{GX zQ7|#*NLxEJOvI^#h^6DmSQ<_P)917>JuVZ~Kch~*Ja?f$4Wimd^tqnGvD6qDoux&U zW2ps7(2NSlQx&9$j5A2dIF_2D3GZm-d|Ni9~kHkPRQBH_l7JpCkF*IA&;pisq)qq(3AhiIX(T01FZP3F7fFc&l)`>Sk+e8XP?mP2iimL< zVLzit>BljQq{V4~{fr`Maq3||!${lF0tu*tvV0@eLRr3%YG6NuNab22TmoYrNts8= zcQ+tm9;pcu=8+m9VIHXg66TTWAqe?{1Ng2)DnlVxr^MNWfvrtHl3g5@U!>a6#tB6F zQS?YPYMha`uE>!tjy_I)k#?a6dYnun-5OUMJfZ=&0 z31c29QlN08U-prV11Z~JA1Ov4kE91Oh*Xk6AT^RGN|Fv__$Y!N$vTkn!z_9v(?Ir* zLnRlf4U#^)NN*v!d?TGsC_r_Je*xy;GsM_?%oyeWq>Gr+t-%+=I3KVAjOmfOu*2e= zbOvvx=!?4*FK`^Q#_^B)Br={J=?Iu_L*RVUE6l*~e2Yjzi|pF!%r R6=MJZ002ovPDHLkV1g)~4nP0^ diff --git a/app/src/main/res/drawable-hdpi/round_hourglass_empty_black_18.png b/app/src/main/res/drawable-hdpi/round_hourglass_empty_black_18.png deleted file mode 100644 index 6152b8d9da159e32cb0434b6666ac5ad8660a0ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i0wmS%+S~(DYdu{YLo7}wCrEfKIJ{v>qCHy- zm&kGE9g=Yde~xp-GdwL|^4>71mglQRfqcXjq3veu8<^xw0_8TWU{=hX(O`DVjmD8oDiU-#~A@+Fg*I|u%!GFr?+w`5`3 zAxC#1-Z-fcjUO9?D6M&k5GDpE);x*FOZ917BSc}%3xufsIOU8OXS`rUT-fyRHwV^0j7u@B0H&Gajo`qfHj1=;{R9oS)0dv4Y1+O5 zWBxA@GL#Y{L!<`zTu3GGar(3O0c+to2!KLBm#Tf~|n_v1PSu8s_03#qrcpVimq5#6`&Q)E#qZ zWG>)%>V_pW)5jU6`Z%7tVgW|b)VFFo;UD;bOI9Y)@BZWzuM*K|%-3<4@)FVFR zhcp`DoO8~(Urm4-SOYDPGLIHm12r%~yb9O>X{50OD&;e03#5_9R`pDp14(4e5o{v_ zv_Y^|2&hG{G%$`p15Ek5ra%K6hv)r2KnwD zIdHHu@--Wn^9#Y=2M%_h326rG2j=`hurr{Kk+S1_1Luf#38WY)8%_eQ5N{bHWy5(R zr~o8A9DSr1=aryxkz$+|g33jTah?e(21yA=A1TIpBB)%X80V3oqLBie2ZD-6(#6pS zS`y}u*gawXlD;F%Kl3q?|0r@xm@hSM2=m42b@4bNNcuSWZ?*cCYlCbxa$#Js83 k+rs@~0l%8UIp>^nKQ5mcIEeCT#Q*>R07*qoM6N<$g7+}DPXGV_ diff --git a/app/src/main/res/drawable/icon_background.xml b/app/src/main/res/drawable/icon_background.xml deleted file mode 100644 index c3e8d82..0000000 --- a/app/src/main/res/drawable/icon_background.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_foreground.xml b/app/src/main/res/drawable/icon_foreground.xml deleted file mode 100644 index 213bdcb..0000000 --- a/app/src/main/res/drawable/icon_foreground.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/round_hourglass_disabled_20.xml b/app/src/main/res/drawable/round_hourglass_disabled_20.xml deleted file mode 100644 index 7a3d33a..0000000 --- a/app/src/main/res/drawable/round_hourglass_disabled_20.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/round_hourglass_disabled_24.xml b/app/src/main/res/drawable/round_hourglass_disabled_24.xml deleted file mode 100644 index a6b590e..0000000 --- a/app/src/main/res/drawable/round_hourglass_disabled_24.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/round_hourglass_empty_20.xml b/app/src/main/res/drawable/round_hourglass_empty_20.xml deleted file mode 100644 index e4f8ca9..0000000 --- a/app/src/main/res/drawable/round_hourglass_empty_20.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/round_hourglass_empty_24.xml b/app/src/main/res/drawable/round_hourglass_empty_24.xml deleted file mode 100644 index c61c2da..0000000 --- a/app/src/main/res/drawable/round_hourglass_empty_24.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/raw/empty_state.json b/app/src/main/res/raw/empty_state.json deleted file mode 100644 index 7e263e7..0000000 --- a/app/src/main/res/raw/empty_state.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"4.8.0","meta":{"g":"LottieFiles AE 1.1.0","a":"","k":"","d":"","tc":""},"fr":29.9700012207031,"ip":0,"op":77.0000031362743,"w":1000,"h":1000,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[480,506,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[41,-30],[34,-78],[-36.607,20.098],[40,-43],[-71,185],[26,-28]],"o":[[0,0],[-30.454,22.283],[-34,78],[51,-28],[-61.995,66.645],[70.57,-183.88],[-26,28]],"v":[[-142,44],[-139,140],[-352,106],[-171,308],[-204,227],[-313,168],[-413,67]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":30,"ix":1}},{"n":"g","nm":"gap","v":{"a":0,"k":1369,"ix":2}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[103]},{"t":70.0000028511585,"s":[-1303]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":22.0000008960784,"op":1810.00007372281,"st":12.00000048877,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[41,-30],[34,-78],[-36.607,20.098],[40,-43],[-71,185],[26,-28]],"o":[[0,0],[-30.454,22.283],[-34,78],[51,-28],[-61.995,66.645],[70.57,-183.88],[-26,28]],"v":[[-142,44],[-139,140],[-352,106],[-171,308],[-204,227],[-313,168],[-413,67]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":12,"ix":1}},{"n":"g","nm":"gap","v":{"a":0,"k":1369,"ix":2}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[103]},{"t":58.0000023623884,"s":[-1303]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":22.0000008960784,"op":1798.00007323404,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"head/boxgirl2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[-5]},{"t":75.0000030548126,"s":[0]}],"ix":10},"p":{"a":0,"k":[504.173,279.4,0],"ix":2},"a":{"a":0,"k":[615.874,302.163,0],"ix":1},"s":{"a":0,"k":[83,83,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.203,0],[0,0],[0.188,-0.112],[0.266,-0.265],[0.11,-0.275],[-0.203,0],[0,0],[-0.188,0.113],[-0.266,0.266],[-0.11,0.274]],"o":[[0,0],[-0.231,0],[-0.322,0.194],[-0.206,0.206],[-0.041,0.103],[0,0],[0.232,0],[0.322,-0.194],[0.206,-0.205],[0.041,-0.104]],"v":[[3.115,-1.01],[-1.033,-1.01],[-1.711,-0.745],[-2.621,-0.032],[-3.193,0.682],[-3.115,1.01],[1.032,1.01],[1.711,0.745],[2.621,0.031],[3.193,-0.682]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[592.024,140.01],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.441,0],[0,0],[0.377,-0.376],[-0.441,0],[0,0],[-0.377,0.376]],"o":[[0,0],[-0.571,0],[-0.086,0.085],[0,0],[0.572,0],[0.085,-0.085]],"v":[[4.643,-1.01],[-2.561,-1.01],[-4.149,-0.032],[-4.643,1.01],[2.56,1.01],[4.149,0.032]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[589.932,134.862],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.203,0],[0,0],[0.187,-0.112],[0.266,-0.265],[0.109,-0.275],[-0.203,0],[0,0],[-0.188,0.113],[-0.266,0.265],[-0.11,0.274]],"o":[[0,0],[-0.232,0],[-0.323,0.194],[-0.206,0.206],[-0.042,0.103],[0,0],[0.232,0],[0.322,-0.193],[0.206,-0.206],[0.041,-0.104]],"v":[[2.569,-1.01],[-0.487,-1.01],[-1.165,-0.745],[-2.076,-0.032],[-2.647,0.682],[-2.57,1.01],[0.486,1.01],[1.165,0.745],[2.075,0.032],[2.647,-0.682]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[594.189,130.405],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.697,0.13],[1.381,-1.402],[-1.277,-1.162],[-0.539,-2.933],[1.291,0.371],[0.599,1.294],[-0.397,-0.857],[-2.347,3.604],[1.566,1.335],[1.014,0.42],[0.075,0.558],[-0.756,-0.141]],"o":[[-1.872,-0.349],[-1.032,1.047],[1.762,1.602],[0.338,1.839],[-1.421,-0.409],[-0.212,-0.458],[1.982,4.281],[1.124,-1.727],[-0.848,-0.723],[-0.383,-0.158],[-0.118,-0.875],[0.82,0.152]],"v":[[2.104,-7.117],[-2.682,-5.892],[-3.188,-2.149],[2.92,2.141],[-0.213,3.831],[-3.175,1.063],[-5.296,3.185],[4.569,3.198],[3.753,-1.848],[0.801,-3.374],[-1.262,-4.469],[0.261,-4.868]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[602.895,136.398],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-5.784,2.336]],"o":[[0,0],[0,0]],"v":[[-6.716,-0.848],[6.716,-1.168]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8167,0.2433,0.3867,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[605.021,201.209],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-5.784,2.336]],"o":[[0,0],[0,0]],"v":[[-6.716,-2.008],[6.716,-0.328]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8167,0.2433,0.3867,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[582.244,200.369],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.901,0.241],[8.078,-4.259],[-3.323,-5.913],[-6.748,-0.677],[-6.62,1.477],[0,0]],"o":[[-0.963,-0.223],[-21.25,-5.699],[-6,3.163],[3.324,5.912],[6.748,0.678],[0,0],[0,0]],"v":[[22.043,0.722],[19.248,0.025],[-14.734,-11.997],[-18.914,5.764],[-1.981,15.578],[22.237,12.775],[19.248,0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8167,0.2433,0.3867,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[543.515,174.404],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-27.722,-3.24],[2.66,-27.783],[19.547,5.242],[8.078,-4.258],[-3.324,-5.912],[-6.748,-0.677],[-6.62,1.476],[0,0]],"o":[[0,0],[3.818,-27.648],[27.722,3.24],[-63.214,18.371],[-21.25,-5.699],[-6,3.163],[3.323,5.912],[6.748,0.678],[0,0],[0,0]],"v":[[-72.745,16.895],[-29.706,4.359],[30.081,-41.908],[77.588,16.899],[-38.763,28.917],[-72.745,16.895],[-76.924,34.656],[-59.992,44.47],[-35.774,41.668],[-38.763,28.917]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.46,0.595,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[601.526,145.512],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.734,-12.941],[-15.624,-0.096],[-3.417,15.247]],"o":[[2.734,12.941],[3.23,15.288],[15.625,0.095],[0,0]],"v":[[-36.33,-25.893],[-31.201,-1.615],[2.397,25.799],[36.33,-1.201]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[602.33,214.252],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[6.091,-7.297]],"o":[[-0.924,12.992],[0,0]],"v":[[5.451,-19.487],[-5.451,19.487]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[594.411,259.908],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[1.404,-13.995],[-7.319,-22.945],[-22.358,-8.953],[-13.565,19.901],[22.678,8.11],[-0.689,25.725],[5.686,1.105]],"o":[[7.301,7.834],[-2.405,23.964],[7.32,22.944],[22.358,8.953],[13.565,-19.9],[-24.231,-8.665],[0.155,-5.79],[-5.686,-1.106]],"v":[[-67.624,-74.46],[-60.836,-50.411],[-55.453,11.567],[-9.899,64.62],[54.789,47.744],[37.918,-12.56],[2.322,-69.611],[-7.677,-82.077]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[0,0],[1.404,-13.995],[-7.319,-22.945],[-22.358,-8.953],[-13.565,19.901],[22.678,8.11],[-0.689,25.725],[5.686,1.105]],"o":[[7.301,7.834],[-2.405,23.964],[7.32,22.944],[22.358,8.953],[13.565,-19.9],[-24.231,-8.665],[0.155,-5.79],[-5.686,-1.106]],"v":[[-67.624,-74.46],[-60.836,-50.411],[-56.182,21.178],[-10.628,74.23],[54.06,57.355],[37.189,-2.949],[2.322,-69.611],[-7.677,-82.077]],"c":true}]},{"t":74.0000030140818,"s":[{"i":[[0,0],[1.404,-13.995],[-7.319,-22.945],[-22.358,-8.953],[-13.565,19.901],[22.678,8.11],[-0.689,25.725],[5.686,1.105]],"o":[[7.301,7.834],[-2.405,23.964],[7.32,22.944],[22.358,8.953],[13.565,-19.9],[-24.231,-8.665],[0.155,-5.79],[-5.686,-1.106]],"v":[[-67.624,-74.46],[-60.836,-50.411],[-55.453,11.567],[-9.899,64.62],[54.789,47.744],[37.918,-12.56],[2.322,-69.611],[-7.677,-82.077]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.8,0.85,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[692.302,244.019],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":3,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1798.00007323404,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"arms/boxgirl2 Outlines","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[-18]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":13.824,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[-18]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":27,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[-18]},{"t":54.0000021994651,"s":[-18]}],"ix":10},"p":{"a":0,"k":[506.439,444.242,0],"ix":2},"a":{"a":0,"k":[534.439,398.222,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.407],[3.407,0],[0,3.407],[-3.407,0]],"o":[[0,3.407],[-3.407,0],[0,-3.407],[3.407,0]],"v":[[6.169,0],[0,6.169],[-6.168,0],[0,-6.169]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[632.081,461.246],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":7,"s":[{"i":[[0,0],[-22.517,-0.724],[-10.788,37.86]],"o":[[25.288,-7.398],[36.098,3.218],[0,0]],"v":[[-38.207,26.791],[38.078,30.823],[87.513,-6.807]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":14,"s":[{"i":[[0,0],[-22.888,-13.053],[-2.749,18.008]],"o":[[25.288,-7.398],[-17.303,-28.448],[0,0]],"v":[[-38.207,26.791],[38.207,35.761],[21.086,-17.93]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":21,"s":[{"i":[[0,0],[-22.517,-0.724],[-10.788,37.86]],"o":[[25.288,-7.398],[36.098,3.218],[0,0]],"v":[[-38.207,26.791],[38.078,30.823],[87.513,-6.807]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":27.176,"s":[{"i":[[0,0],[-22.888,-13.053],[-2.749,18.008]],"o":[[25.288,-7.398],[-17.303,-28.448],[0,0]],"v":[[-38.207,26.791],[38.207,35.761],[21.086,-17.93]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":37,"s":[{"i":[[0,0],[-22.517,-0.724],[-10.788,37.86]],"o":[[25.288,-7.398],[36.098,3.218],[0,0]],"v":[[-38.207,26.791],[38.078,30.823],[87.513,-6.807]],"c":false}]},{"t":54.0000021994651,"s":[{"i":[[0,0],[-22.517,-0.724],[-10.788,37.86]],"o":[[25.288,-7.398],[36.098,3.218],[0,0]],"v":[[-38.207,26.791],[38.078,30.823],[87.513,-6.807]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[636.453,358.075],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.991,-1.935],[1.393,-9.397],[3.254,-8.925],[-1.049,-10.002],[0,0],[-11.042,-10.598],[20.008,35.512]],"o":[[3.543,-0.536],[7.976,5.16],[-1.392,9.397],[-3.253,8.925],[0,0],[0.418,10.558],[7.218,-35.73],[0,0]],"v":[[-34.042,-55.116],[-23.763,-53.142],[-14.661,-27.77],[-23.79,-0.843],[-27.997,28.159],[-28.105,26.975],[6.752,55.652],[14.035,-54.499]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.46,0.595,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[635.71,439.352],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-19.251,-20.715],[19.252,-11.749],[12.525,20.715],[-9.779,13.975]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":3,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.64,0.73,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[617.497,415.331],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.037,-6.22],[4.993,-23.691],[-34.033,29.139],[0,0]],"o":[[0,0],[0,0],[-4.999,-3.701],[0,0],[-3.982,18.892],[0,0],[0,0]],"v":[[55.805,-7.473],[11.559,-17.777],[-4.366,-29.569],[-16.488,-23.507],[-52.904,-14.08],[1.026,8.632],[56.886,25.512]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.94,0.955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[554.414,404.877],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-7.976,-5.16],[1.393,-9.397],[3.254,-8.925],[-1.049,-10.001],[2.982,11.029]],"o":[[0.571,-9.482],[7.975,5.161],[-1.393,9.396],[-3.254,8.925],[-2.982,-11.029],[0,0]],"v":[[-16.19,-29.242],[5.695,-38.07],[14.797,-12.698],[5.668,14.229],[1.461,43.23],[-8.484,4.143]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8167,0.2433,0.3867,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[606.252,424.28],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":7,"s":[{"i":[[0,0],[76.287,8.852],[17.248,1.993]],"o":[[77.45,65.728],[-17.247,-2.001],[0,0]],"v":[[63.279,-99.083],[-7.091,82.071],[-65.557,72.343]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":14,"s":[{"i":[[0,0],[84.904,4.88],[17.248,1.993]],"o":[[83.039,26.063],[-17.334,-0.997],[0,0]],"v":[[-26.996,-99.139],[-19.347,87.726],[-65.557,72.343]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":21,"s":[{"i":[[0,0],[76.287,8.852],[17.248,1.993]],"o":[[77.45,65.728],[-17.247,-2.001],[0,0]],"v":[[63.279,-99.083],[-7.091,82.071],[-65.557,72.343]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":27,"s":[{"i":[[0,0],[84.904,4.88],[17.248,1.993]],"o":[[88.231,6.819],[-17.334,-0.997],[0,0]],"v":[[-46.273,-107.574],[-19.347,87.726],[-65.557,72.343]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":37,"s":[{"i":[[0,0],[76.287,8.852],[17.248,1.993]],"o":[[77.45,65.728],[-17.247,-2.001],[0,0]],"v":[[63.279,-99.083],[-7.091,82.071],[-65.557,72.343]],"c":false}]},{"t":54.0000021994651,"s":[{"i":[[0,0],[76.287,8.852],[17.248,1.993]],"o":[[77.45,65.728],[-17.247,-2.001],[0,0]],"v":[[63.279,-99.083],[-7.091,82.071],[-65.557,72.343]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.46,0.595,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[717.313,386.909],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1798.00007323404,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"BOX/boxgirl2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":7,"s":[-11]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14.961,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21.216,"s":[-11]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26.903,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36.569,"s":[-11]},{"t":76.0000030955435,"s":[-11]}],"ix":10},"p":{"s":true,"x":{"a":0,"k":497.232,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.525],"y":[0.999]},"o":{"x":[0.167],"y":[0.012]},"t":7,"s":[534.782]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.714],"y":[-0.001]},"t":14.961,"s":[473.393]},{"i":{"x":[0.086],"y":[1.001]},"o":{"x":[0.333],"y":[0]},"t":20.648,"s":[554.791]},{"i":{"x":[0.345],"y":[1.257]},"o":{"x":[0.475],"y":[0.001]},"t":26.903,"s":[484.088]},{"i":{"x":[0.058],"y":[8.039]},"o":{"x":[0.207],"y":[-15.641]},"t":37.138,"s":[534.782]},{"t":76.0000030955435,"s":[534.782]}],"ix":4}},"a":{"a":0,"k":[572.5,586.5,0],"ix":1},"s":{"a":0,"k":[83,83,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.345,-40.918],[0,0],[0,0],[0,0]],"o":[[0,0],[5.794,-40.405],[0,0],[0,0]],"v":[[2.264,43.63],[-8.285,42.896],[-2.262,-43.63],[8.286,-42.896]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[307.842,426.297],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.221,1.428]],"o":[[0,0],[0,0]],"v":[[0.841,-83.44],[-2.611,82.013]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[306.142,427.058],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-69.992,1.014]],"o":[[69.993,-1.014],[0,0]],"v":[[-112.026,3.123],[112.026,-3.123]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[477.19,351.902],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-38.969,-5.99],[1.82,-62.867]],"o":[[41.66,9.085],[-1.821,62.868],[0,0]],"v":[[-56.581,-95.724],[56.581,-72.475],[52.313,95.724]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8471,0.1922,0.3569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[308.254,427.051],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-43.799,3.2],[-73.661,-9.244],[-9.976,-73.578],[68.598,2.806],[42.988,11.764],[6.219,42.049]],"o":[[64.703,16],[-14.075,53.761],[-67.608,11.939],[-42.988,-11.764],[7.574,-63.979],[43.799,-3.2]],"v":[[-15.044,-99.102],[169.981,-81.65],[161.058,90.364],[-59.207,94.101],[-169.981,65.062],[-167.562,-99.102]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8471,0.1922,0.3569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[419.236,430.43],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[4.29,-26.25],[54.595,20.476],[-5.348,26.556]],"o":[[-5.881,28.24],[-48.63,-17.126],[7.005,-28.32],[0,0]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17.235,"s":[{"i":[[0,0],[4.29,-26.25],[54.595,20.475],[-5.348,26.556]],"o":[[-5.881,28.24],[-48.63,-17.126],[7.005,-28.32],[0,0]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[18.337,-0.432],[53.327,11.084],[-23.981,4.669]],"o":[[-25.774,-4.099],[-48.63,-17.126],[24.904,-3.29],[0,0]],"v":[[81.443,-11.521],[31.961,-12.457],[-76.764,-40.908],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.921,"s":[{"i":[[0,0],[4.29,-26.25],[54.595,20.476],[-5.348,26.556]],"o":[[-5.881,28.24],[-48.63,-17.126],[7.005,-28.32],[0,0]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.608,"s":[{"i":[[0,0],[4.29,-26.25],[54.595,20.476],[-5.348,26.556]],"o":[[-5.881,28.24],[-48.63,-17.126],[7.005,-28.32],[0,0]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[0,0],[18.337,-0.432],[53.327,11.084],[-23.981,4.669]],"o":[[-25.774,-4.099],[-48.63,-17.126],[24.904,-3.29],[0,0]],"v":[[81.443,-11.521],[31.961,-12.457],[-76.764,-40.909],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[0,0],[4.29,-26.25],[54.595,20.476],[-5.348,26.556]],"o":[[-5.881,28.24],[-48.63,-17.126],[7.005,-28.32],[0,0]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[0,0],[5.295,-25.538],[54.595,20.476],[-5.348,26.556]],"o":[[-5.881,28.24],[-48.63,-17.126],[7.005,-28.32],[0,0]],"v":[[81.443,-11.521],[68.394,55.122],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"t":77.0000031362743,"s":[{"i":[[0,0],[4.29,-26.25],[54.595,20.476],[-5.348,26.556]],"o":[[-5.881,28.24],[-48.63,-17.126],[7.005,-28.32],[0,0]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8471,0.1922,0.3569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[278.586,536.051],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[-3.518,-24.757],[85.647,-5.976],[4.373,25.634]],"o":[[1.938,21.197],[-80.626,8.376],[-2.305,-27.236],[0,0]],"v":[[96.352,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[-7.408,-22.677],[85.647,-5.975],[4.373,25.634]],"o":[[1.938,21.197],[-80.626,8.376],[-2.305,-27.236],[0,0]],"v":[[96.353,-34.341],[110.216,25.436],[-110.292,41.803],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.666,"s":[{"i":[[0,0],[-3.518,-24.757],[85.647,-5.975],[4.373,25.634]],"o":[[1.938,21.197],[-80.626,8.376],[-2.305,-27.236],[0,0]],"v":[[96.353,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[-29.356,-13.941],[84.442,-5.729],[19.387,14.399]],"o":[[13.559,13.713],[-83.638,8.019],[-32.035,-13.191],[0,0]],"v":[[96.353,-34.341],[136.329,-10.87],[-68.498,3.481],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.921,"s":[{"i":[[0,0],[-3.518,-24.757],[85.647,-5.976],[4.373,25.634]],"o":[[1.938,21.197],[-80.626,8.376],[-2.305,-27.236],[0,0]],"v":[[96.352,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.608,"s":[{"i":[[0,0],[-3.518,-24.757],[85.647,-5.976],[4.373,25.634]],"o":[[1.938,21.197],[-80.626,8.376],[-2.305,-27.236],[0,0]],"v":[[96.352,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[0,0],[-29.356,-13.941],[84.442,-5.729],[19.387,14.399]],"o":[[13.559,13.713],[-83.638,8.019],[-32.035,-13.191],[0,0]],"v":[[96.353,-34.341],[136.329,-10.87],[-68.498,3.481],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[0,0],[-3.518,-24.757],[85.647,-5.976],[4.373,25.634]],"o":[[1.938,21.197],[-80.626,8.376],[-2.305,-27.236],[0,0]],"v":[[96.352,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[{"i":[[0,0],[4.341,-23.172],[85.647,-5.976],[-5.305,25.866]],"o":[[-4.364,20.108],[-80.626,8.376],[3.168,-26.192],[0,0]],"v":[[96.352,-34.341],[83.496,23.989],[-128.163,39.03],[-118.704,-27.565]],"c":false}]},{"t":77.0000031362743,"s":[{"i":[[0,0],[-3.518,-24.757],[85.647,-5.976],[4.373,25.634]],"o":[[1.938,21.197],[-80.626,8.376],[-2.305,-27.236],[0,0]],"v":[[96.352,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.8471,0.1922,0.3569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[483.54,552.116],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1798.00007323404,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Legs/boxgirl2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[477.232,513.782,0],"ix":2},"a":{"a":0,"k":[572.5,586.5,0],"ix":1},"s":{"a":0,"k":[83,83,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.742,-7.41],[-14.493,-3.584],[-25.452,2.565]],"o":[[-5.443,5.57],[2.029,20.261],[13.455,3.327],[0,0]],"v":[[-48.474,-30.191],[-57.779,-10.254],[-0.625,23.639],[58.521,27.626]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.94,0.955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[647.342,989.901],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-8.064,5.222]],"o":[[0,0],[0,0]],"v":[[-11.624,-6.953],[11.624,1.731]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.94,0.955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[618.704,1014.636],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,3.45],[0,0],[0,0],[0,0],[0,0],[3.45,0]],"o":[[-3.45,0],[0,0],[0,0],[0,0],[0,0],[0,3.45],[0,0]],"v":[[-66.997,10.39],[-73.244,4.143],[-73.244,-10.39],[-70.416,-10.39],[73.244,-10.39],[73.244,4.143],[66.997,10.39]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.94,0.955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[630.328,1057.988],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.745,2.543],[-7.412,2.56],[0,0],[0,0]],"o":[[0,0],[0,0],[-2.561,-2.245],[-2.206,-7.525],[0,0],[0,0],[0,0]],"v":[[74.419,-1.574],[75.315,23.542],[-68.346,23.542],[-73.109,16.217],[-63.465,-1.762],[-21.177,-16.372],[-11.369,-23.542]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.94,0.955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[628.258,1024.055],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.406,-7.312],[-14.756,-2.265],[-25.117,4.846]],"o":[[0,20.776],[3.845,19.996],[13.701,2.102],[0,0]],"v":[[-30.309,-32.271],[-58.915,0.168],[1.056,28.779],[60.321,27.425]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[561.487,975.205],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-7.561,5.927]],"o":[[0,0],[0,0]],"v":[[-11.967,-6.242],[11.968,0.315]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[519.21,1005.327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-3.437,0.31]],"o":[[0,0],[0,0],[0,0],[0.311,3.436],[0,0]],"v":[[74.051,5],[71.843,-16.903],[-74.051,-3.715],[-72.448,10.933],[-65.663,16.593]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[535.094,1047.055],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.577,12.468],[-1.576,-12.468]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[605.36,1017.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-2.874,-7.296],[-2.753,-2.005]],"o":[[0,0],[0,0],[-7.151,3.218],[0.971,2.467],[0,0]],"v":[[30.393,-26.012],[21.269,-17.987],[-19.532,0.37],[-27.519,19.143],[-22.114,26.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[485.974,1017.073],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.98,"s":[{"i":[[0,0],[-3.442,-105.571]],"o":[[-18.704,112.217],[0,0]],"v":[[-9.493,-158.357],[9.494,158.357]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.393,"s":[{"i":[[0,0],[-3.442,-105.571]],"o":[[3.442,105.571],[0,0]],"v":[[-9.493,-158.357],[9.494,158.357]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.648,"s":[{"i":[[0,0],[-3.442,-105.571]],"o":[[-18.704,112.217],[0,0]],"v":[[-9.493,-158.357],[9.494,158.357]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.765,"s":[{"i":[[0,0],[-3.442,-105.571]],"o":[[3.442,105.571],[0,0]],"v":[[-9.493,-158.357],[9.494,158.357]],"c":false}]},{"t":32.588751327367,"s":[{"i":[[0,0],[-3.442,-105.571]],"o":[[-18.704,112.217],[0,0]],"v":[[-9.493,-158.357],[9.494,158.357]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[519.695,753.384],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.98,"s":[{"i":[[0,0],[3.081,-104.652]],"o":[[-11.201,108.609],[0,0]],"v":[[2.06,-160.308],[6.06,160.309]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.393,"s":[{"i":[[0,0],[3.081,-104.652]],"o":[[5.242,106.157],[0,0]],"v":[[2.06,-160.308],[6.06,160.309]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.648,"s":[{"i":[[0,0],[3.081,-104.652]],"o":[[-11.201,108.609],[0,0]],"v":[[2.06,-160.308],[6.06,160.309]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.765,"s":[{"i":[[0,0],[3.081,-104.652]],"o":[[5.242,106.156],[0,0]],"v":[[2.06,-160.308],[6.06,160.309]],"c":false}]},{"t":32.588751327367,"s":[{"i":[[0,0],[3.081,-104.652]],"o":[[-11.201,108.609],[0,0]],"v":[[2.06,-160.308],[6.06,160.309]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[591.424,810.794],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.98,"s":[{"i":[[0,0],[-21.928,-106.278]],"o":[[-33.777,91.486],[0,0]],"v":[[12.646,-187.238],[21.131,187.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.393,"s":[{"i":[[0,0],[-10.66,-108.482]],"o":[[-4.585,92.5],[0,0]],"v":[[12.646,-187.238],[21.131,187.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.648,"s":[{"i":[[0,0],[-21.928,-106.278]],"o":[[-33.777,91.486],[0,0]],"v":[[12.646,-187.238],[21.131,187.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.765,"s":[{"i":[[0,0],[-10.66,-108.482]],"o":[[-4.585,92.5],[0,0]],"v":[[12.646,-187.238],[21.131,187.238]],"c":false}]},{"t":32.588751327367,"s":[{"i":[[0,0],[-21.928,-106.278]],"o":[[-33.777,91.486],[0,0]],"v":[[12.646,-187.238],[21.131,187.238]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[685.846,756.199],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1798.00007323404,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Body/boxgirl2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.98,"s":[477.232,513.782,0],"to":[0,-1.167,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.393,"s":[477.232,506.782,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.648,"s":[477.232,513.782,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.765,"s":[477.232,506.782,0],"to":[0,0,0],"ti":[0,-1.167,0]},{"t":32.588751327367,"s":[477.232,513.782,0]}],"ix":2},"a":{"a":0,"k":[572.5,586.5,0],"ix":1},"s":{"a":0,"k":[83,83,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[-1.842,-18.593],[20.162,4.991],[50.908,0.473],[-108.373,217.759],[-16.355,0],[0,0],[0,0],[-16.432,-8.614]],"o":[[6.366,18.406],[2.049,20.67],[-36.237,-8.969],[0,0],[10.336,-20.768],[0,0],[0,0],[18.522,-12.748],[0,0]],"v":[[132.53,-11.826],[161.147,106.417],[106.529,126.902],[-0.019,112.697],[-47.61,-79.325],[-1.019,-144.415],[23.696,-102.197],[71.999,-130.707],[125.265,-134.421]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,0],[-1.842,-18.593],[20.162,4.991],[50.908,0.473],[-104.743,241.812],[-16.355,0],[0,0],[0,0],[-16.432,-8.614]],"o":[[6.366,18.406],[2.049,20.67],[-36.237,-8.969],[0,0],[9.221,-21.286],[0,0],[0,0],[18.522,-12.748],[0,0]],"v":[[132.53,-11.826],[161.147,106.417],[106.529,126.902],[-0.019,112.697],[-75.32,-116.675],[-1.019,-144.415],[23.696,-102.197],[71.999,-130.707],[125.265,-134.421]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[-1.842,-18.593],[20.162,4.991],[50.908,0.473],[-108.373,217.759],[-16.355,0],[0,0],[0,0],[-16.432,-8.614]],"o":[[6.366,18.406],[2.049,20.67],[-36.237,-8.969],[0,0],[10.336,-20.768],[0,0],[0,0],[18.522,-12.748],[0,0]],"v":[[132.53,-11.826],[161.147,106.417],[106.529,126.902],[-0.019,112.697],[-47.61,-88.964],[-1.019,-144.415],[23.696,-102.197],[71.999,-130.707],[125.265,-134.421]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[-1.842,-18.593],[20.162,4.991],[50.908,0.473],[-108.373,217.759],[-16.355,0],[0,0],[0,0],[-16.432,-8.614]],"o":[[6.366,18.406],[2.049,20.67],[-36.237,-8.969],[0,0],[10.336,-20.768],[0,0],[0,0],[18.522,-12.748],[0,0]],"v":[[132.53,-11.826],[161.147,106.417],[106.529,126.902],[-0.019,112.697],[-63.272,-105.831],[-1.019,-144.415],[23.696,-102.197],[71.999,-130.707],[125.265,-134.421]],"c":false}]},{"t":33.0000013441176,"s":[{"i":[[0,0],[-1.842,-18.593],[20.162,4.991],[50.908,0.473],[-108.373,217.759],[-16.355,0],[0,0],[0,0],[-16.432,-8.614]],"o":[[6.366,18.406],[2.049,20.67],[-36.237,-8.969],[0,0],[10.336,-20.768],[0,0],[0,0],[18.522,-12.748],[0,0]],"v":[[132.53,-11.826],[161.147,106.417],[106.529,126.902],[-0.019,112.697],[-47.61,-79.325],[-1.019,-144.415],[23.696,-102.197],[71.999,-130.707],[125.265,-134.421]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.46,0.595,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[559.529,428.725],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1798.00007323404,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Layer 8/boxgirl2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[477.232,513.782,0],"ix":2},"a":{"a":0,"k":[572.5,586.5,0],"ix":1},"s":{"a":0,"k":[83,83,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[47.878,-14.752],[3.234,-71.293],[-5.895,-75.093],[33.038,-81.93],[-85.728,-107.22],[-68.517,107.681],[-69.828,139.983],[-38.029,115.117],[46.807,57.257],[162.699,89.342]],"o":[[-55.539,17.112],[-3.198,70.52],[6.233,79.398],[-49.442,122.608],[99.596,124.565],[62.205,-97.761],[57.996,-116.263],[25.413,-76.926],[-71.866,-87.91],[-72.635,-39.886]],"v":[[-164.114,-536.141],[-273.101,-369.18],[-225.408,-209.28],[-297.757,-3.278],[-280.381,426.328],[113.978,424.615],[140.88,74.349],[340.696,-142.095],[303.58,-375.651],[-19.035,-471.694]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.94,0.955,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[655.005,614.237],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1798.00007323404,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/res/raw/loading.json b/app/src/main/res/raw/loading.json deleted file mode 100644 index f4b935a..0000000 --- a/app/src/main/res/raw/loading.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"5.7.8","fr":30,"ip":0,"op":91,"w":1080,"h":1080,"nm":"bike rider","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Layer 15 Outlines","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[25]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[25]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[25]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[25]},{"t":90,"s":[0]}],"ix":10},"p":{"a":0,"k":[158.727,79.655,0],"ix":2,"l":2},"a":{"a":0,"k":[2.063,11.093,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[2.754,8.852],[-1.233,9.188],[-2.754,-8.852],[1.232,-9.188]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[17.622,9.438],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.395,4.681],[-4.681,0.395],[0,0]],"o":[[0,0],[-4.682,0.394],[-0.395,-4.681],[0,0],[0,0]],"v":[[10.027,7.838],[-0.441,8.721],[-9.632,0.959],[-1.871,-8.232],[8.598,-9.115]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0.047058823529,0.196078431373,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[10.276,9.821],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Layer 13 Outlines","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[3]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[-7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[3]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[-7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[3]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[-7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[3]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[-7]},{"t":90,"s":[3]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[150.99,77.454,0],"to":[0.292,0.958,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[152.74,83.204,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[150.99,77.454,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[152.74,83.204,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[150.99,77.454,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[152.74,83.204,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[150.99,77.454,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[152.74,83.204,0],"to":[0,0,0],"ti":[0.292,0.958,0]},{"t":90,"s":[150.99,77.454,0]}],"ix":2,"l":2},"a":{"a":0,"k":[4.939,4.189,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-1.757,1.757],[-1.757,-1.757]],"o":[[0,0],[0,0],[-1.757,-1.757],[1.757,-1.757],[0,0]],"v":[[13.959,7.594],[7.595,13.958],[-12.202,-5.837],[-12.202,-12.202],[-5.837,-12.202]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0.047058823529,0.196078431373,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[14.208,14.209],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-28.5,-28.5],[28.5,28.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[33.735,33.235],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Layer 17 Outlines","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-5]},{"t":90,"s":[1435]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[63.352,62.395,0],"to":[0.402,0.258,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[65.764,63.945,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[63.352,62.395,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[65.764,63.945,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[63.352,62.395,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[65.764,63.945,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[63.352,62.395,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[65.764,63.945,0],"to":[0,0,0],"ti":[0.402,0.258,0]},{"t":90,"s":[63.352,62.395,0]}],"ix":2,"l":2},"a":{"a":0,"k":[38,38,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-9.941],[9.941,0],[-23.87,0.945]],"o":[[0,9.941],[-23.877,-0.948],[9.941,0]],"v":[[20.939,0],[2.939,18],[2.939,-18]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.75,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":28.267,"ix":1}},{"n":"g","nm":"gap","v":{"a":0,"k":28.267,"ix":2}},{"n":"o","nm":"offset","v":{"a":0,"k":0,"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[35.061,38],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-9.941],[9.941,0],[0,9.941],[-9.941,0]],"o":[[0,9.941],[-9.941,0],[0,-9.941],[9.941,0]],"v":[[18,0],[0,18],[-18,0],[0,-18]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[38,38],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-8.008],[8.008,0],[0,8.008],[-8.008,0]],"o":[[0,8.008],[-8.008,0],[0,-8.008],[8.008,0]],"v":[[14.5,0],[0,14.5],[-14.5,0],[0,-14.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[38,38],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"5 Outlines","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[12.227,31.842,0],"ix":2,"l":2},"a":{"a":0,"k":[11.5,5.413,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[3.75,2.143]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.438,-1.053]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":6,"s":[{"i":[[0,0],[2.41,1.999]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.783,-1.539]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[2.641,-1.386]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-5.007,-2.093]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":19,"s":[{"i":[[0,0],[2.41,1.999]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.783,-1.539]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[3.75,2.143]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.438,-1.053]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[0,0],[2.41,1.999]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.783,-1.539]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[2.641,-1.386]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-5.007,-2.093]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[2.41,1.999]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.783,-1.539]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[3.75,2.143]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.438,-1.053]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[{"i":[[0,0],[2.41,1.999]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.783,-1.539]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[2.641,-1.386]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-5.007,-2.093]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[2.41,1.999]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.783,-1.539]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[3.75,2.143]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.438,-1.053]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":76,"s":[{"i":[[0,0],[2.41,1.999]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.783,-1.539]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[2.641,-1.386]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-5.007,-2.093]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0,0],[2.41,1.999]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.783,-1.539]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[3.75,2.143]],"o":[[0,0],[0,0]],"v":[[3.25,-0.223],[-4.438,-1.053]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.627450980392,0.201153399898,0.059054206399,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[8.25,5.741],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"4 Outlines","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[11.727,29.447,0],"ix":2,"l":2},"a":{"a":0,"k":[19.5,11.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[4,-2],[1.5,0.5]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-2,0],[-6,1]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":6,"s":[{"i":[[0,0],[3.482,0.412],[1.803,-0.047]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-1.003,-1.17],[-4.908,-0.925]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[2.964,2.825],[2.105,-0.593]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-0.006,-2.341],[-3.815,-2.851]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":19,"s":[{"i":[[0,0],[3.482,0.412],[1.803,-0.047]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-1.003,-1.17],[-4.908,-0.925]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[4,-2],[1.5,0.5]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-2,0],[-6,1]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[0,0],[3.482,0.412],[1.803,-0.047]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-1.003,-1.17],[-4.908,-0.925]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[2.964,2.825],[2.105,-0.593]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-0.006,-2.341],[-3.815,-2.851]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[3.482,0.412],[1.803,-0.047]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-1.003,-1.17],[-4.908,-0.925]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[4,-2],[1.5,0.5]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-2,0],[-6,1]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[{"i":[[0,0],[3.482,0.412],[1.803,-0.047]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-1.003,-1.17],[-4.908,-0.925]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[2.964,2.825],[2.105,-0.593]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-0.006,-2.341],[-3.815,-2.851]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[3.482,0.412],[1.803,-0.047]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-1.003,-1.17],[-4.908,-0.925]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[4,-2],[1.5,0.5]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-2,0],[-6,1]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":76,"s":[{"i":[[0,0],[3.482,0.412],[1.803,-0.047]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-1.003,-1.17],[-4.908,-0.925]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[2.964,2.825],[2.105,-0.593]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-0.006,-2.341],[-3.815,-2.851]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0,0],[3.482,0.412],[1.803,-0.047]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-1.003,-1.17],[-4.908,-0.925]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[4,-2],[1.5,0.5]],"o":[[0,0],[0,0],[0,0]],"v":[[6,2],[-2,0],[-6,1]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.505882352941,0.164705882353,0.050980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[13.5,9.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"3 Outlines","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[7.227,45.947,0],"ix":2,"l":2},"a":{"a":0,"k":[16.286,7.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-5.268,1.945],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":6,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-7.176,-3.232],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-6.812,-4.523],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":19,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-7.176,-3.232],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-5.268,1.945],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-7.176,-3.232],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-6.812,-4.523],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-7.176,-3.232],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-5.268,1.945],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-7.176,-3.232],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-6.812,-4.523],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-7.176,-3.232],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-5.268,1.945],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":76,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-7.176,-3.232],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-6.812,-4.523],[4.393,-2.32]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-7.176,-3.232],[4.393,-2.32]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[-6,1]],"o":[[0,0],[0,0]],"v":[[-5.268,1.945],[4.393,-2.32]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.505882352941,0.164705882353,0.050980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[11.893,9.821],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"2 Outlines","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[9.227,53.267,0],"ix":2,"l":2},"a":{"a":0,"k":[19.5,11.82,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-5,-2]],"o":[[0,0],[0,0]],"v":[[-6,3.5],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":6,"s":[{"i":[[0,0],[-5.635,-0.702]],"o":[[0,0],[0,0]],"v":[[-6.692,-0.048],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[-6.375,0.812]],"o":[[0,0],[0,0]],"v":[[-7.5,-4.188],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":19,"s":[{"i":[[0,0],[-5.635,-0.702]],"o":[[0,0],[0,0]],"v":[[-6.692,-0.048],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[-5,-2]],"o":[[0,0],[0,0]],"v":[[-6,3.5],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[0,0],[-5.635,-0.702]],"o":[[0,0],[0,0]],"v":[[-6.692,-0.048],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[-6.375,0.812]],"o":[[0,0],[0,0]],"v":[[-7.5,-4.188],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[-5.635,-0.702]],"o":[[0,0],[0,0]],"v":[[-6.692,-0.048],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-5,-2]],"o":[[0,0],[0,0]],"v":[[-6,3.5],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[{"i":[[0,0],[-5.635,-0.702]],"o":[[0,0],[0,0]],"v":[[-6.692,-0.048],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[-6.375,0.812]],"o":[[0,0],[0,0]],"v":[[-7.5,-4.188],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[-5.635,-0.702]],"o":[[0,0],[0,0]],"v":[[-6.692,-0.048],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[-5,-2]],"o":[[0,0],[0,0]],"v":[[-6,3.5],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":76,"s":[{"i":[[0,0],[-5.635,-0.702]],"o":[[0,0],[0,0]],"v":[[-6.692,-0.048],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[-6.375,0.812]],"o":[[0,0],[0,0]],"v":[[-7.5,-4.188],[6,-1.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0,0],[-5.635,-0.702]],"o":[[0,0],[0,0]],"v":[[-6.692,-0.048],[6,-1.5]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[-5,-2]],"o":[[0,0],[0,0]],"v":[[-6,3.5],[6,-1.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.505882352941,0.164705882353,0.050980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[13.5,11],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"hair 1 Outlines","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[10.227,67.947,0],"ix":2,"l":2},"a":{"a":0,"k":[20.5,7.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-6,4]],"o":[[0,0],[0,0]],"v":[[-6.5,0.214],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":6,"s":[{"i":[[0,0],[-6.95,1.453]],"o":[[0,0],[0,0]],"v":[[-6.482,2.702],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[-7.901,-1.094]],"o":[[0,0],[0,0]],"v":[[-6.465,5.19],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":19,"s":[{"i":[[0,0],[-6.95,1.453]],"o":[[0,0],[0,0]],"v":[[-6.482,2.702],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[-6,4]],"o":[[0,0],[0,0]],"v":[[-6.5,0.214],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[0,0],[-6.95,1.453]],"o":[[0,0],[0,0]],"v":[[-6.482,2.702],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[-7.901,-1.094]],"o":[[0,0],[0,0]],"v":[[-6.465,5.19],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[-6.95,1.453]],"o":[[0,0],[0,0]],"v":[[-6.482,2.702],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-6,4]],"o":[[0,0],[0,0]],"v":[[-6.5,0.214],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[{"i":[[0,0],[-6.95,1.453]],"o":[[0,0],[0,0]],"v":[[-6.482,2.702],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[-7.901,-1.094]],"o":[[0,0],[0,0]],"v":[[-6.465,5.19],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[-6.95,1.453]],"o":[[0,0],[0,0]],"v":[[-6.482,2.702],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[-6,4]],"o":[[0,0],[0,0]],"v":[[-6.5,0.214],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":76,"s":[{"i":[[0,0],[-6.95,1.453]],"o":[[0,0],[0,0]],"v":[[-6.482,2.702],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[-7.901,-1.094]],"o":[[0,0],[0,0]],"v":[[-6.465,5.19],[6.5,-2]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0,0],[-6.95,1.453]],"o":[[0,0],[0,0]],"v":[[-6.482,2.702],[6.5,-2]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[-6,4]],"o":[[0,0],[0,0]],"v":[[-6.5,0.214],[6.5,-2]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.505882352941,0.164705882353,0.050980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[14,9.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"HEad","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[12]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[12]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[12]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[12]},{"t":90,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[85.636,10.277,0],"to":[0.625,1.333,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[89.386,18.277,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[85.636,10.277,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[89.386,18.277,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[85.636,10.277,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[89.386,18.277,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[85.636,10.277,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[89.386,18.277,0],"to":[0,0,0],"ti":[0.625,1.333,0]},{"t":90,"s":[85.636,10.277,0]}],"ix":2,"l":2},"a":{"a":0,"k":[22.114,53.473,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.071],[0.828,0],[0,2.071],[-0.828,0]],"o":[[0,2.071],[-0.828,0],[0,-2.071],[0.828,0]],"v":[[1.5,0],[0,3.75],[-1.5,0],[0,-3.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.129411764706,0.129411764706,0.129411764706,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[35.227,37.447],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.071],[0.828,0],[0,2.071],[-0.828,0]],"o":[[0,2.071],[-0.828,0],[0,-2.071],[0.828,0]],"v":[[1.5,0],[0,3.75],[-1.5,0],[0,-3.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.129411764706,0.129411764706,0.129411764706,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.227,37.447],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,2.761],[-2.761,0]],"o":[[0,0],[-2.761,0],[0,-2.761],[0,0]],"v":[[2.5,5],[2.5,5],[-2.5,0],[2.5,-5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.647058823529,0.352941176471,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[11.227,37.947],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-4.23,-0.777],[-4.23,1.866],[4.23,1.149],[3.965,-1.866]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.647058823529,0.352941176471,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33.958,16.224],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-6.549,0.576],[0,0],[-0.577,-6.549]],"o":[[0,0],[0,0],[-0.576,-6.55],[0,0],[6.55,-0.576],[0,0]],"v":[[19.124,8.694],[-17.734,11.939],[-18.548,2.697],[-7.733,-10.205],[5.408,-11.362],[18.31,-0.547]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0.047058823529,0.196078431373,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[19.374,12.189],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.703,-0.302],[0,0],[0.302,3.703],[0,0],[-3.703,0.303],[0,0],[-0.303,-3.703],[0,0]],"o":[[0,0],[-3.703,0.302],[0,0],[-0.302,-3.703],[0,0],[3.703,-0.302],[0,0],[0.302,3.703]],"v":[[5.221,17.908],[-2.247,18.518],[-9.5,12.36],[-11.379,-10.656],[-5.221,-17.91],[2.247,-18.518],[9.5,-12.362],[11.378,10.656]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.647058823529,0.352941176471,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28.634,29.742],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3,-35],[3,35]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.505882352941,0.164705882353,0.050980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":35,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[23.727,54.447],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Layer 12 Outlines","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[48.566,-7,0],"ix":2,"l":2},"a":{"a":0,"k":[91.28,82.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-50,-8],[-14,37]],"o":[[0,0],[0,0],[0,0]],"v":[[-41.75,-33],[-1.25,27.5],[51.25,-4]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[-50,-8],[-8.75,36.75]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.75,-29.25],[1,31],[51.75,-3]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[-50,-8],[-14,37]],"o":[[0,0],[0,0],[0,0]],"v":[[-41.75,-33],[-1.25,27.5],[51.25,-4]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[-50,-8],[-8.75,36.75]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.75,-29.25],[1,31],[51.75,-3]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-50,-8],[-14,37]],"o":[[0,0],[0,0],[0,0]],"v":[[-41.75,-33],[-1.25,27.5],[51.25,-4]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[-50,-8],[-8.75,36.75]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.75,-29.25],[1,31],[51.75,-3]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[-50,-8],[-14,37]],"o":[[0,0],[0,0],[0,0]],"v":[[-41.75,-33],[-1.25,27.5],[51.25,-4]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[-50,-8],[-8.75,36.75]],"o":[[0,0],[0,0],[0,0]],"v":[[-37.75,-29.25],[1,31],[51.75,-3]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[-50,-8],[-14,37]],"o":[[0,0],[0,0],[0,0]],"v":[[-41.75,-33],[-1.25,27.5],[51.25,-4]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.247058838489,0.250980392157,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":33,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[133.75,115.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[2,3],[0,0]],"v":[[-1,-10.5],[1,10.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[0,0]],"o":[[2,3],[0,0]],"v":[[-1,-10.5],[-1.25,11]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[0,0]],"o":[[2,3],[0,0]],"v":[[-1,-10.5],[1,10.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[0,0]],"o":[[2,3],[0,0]],"v":[[-1,-10.5],[-1.25,11]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[0,0]],"o":[[2,3],[0,0]],"v":[[-1,-10.5],[1,10.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[0,0]],"o":[[2,3],[0,0]],"v":[[-1,-10.5],[-1.25,11]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[0,0]],"o":[[2,3],[0,0]],"v":[[-1,-10.5],[1,10.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[0,0]],"o":[[2,3],[0,0]],"v":[[-1,-10.5],[-1.25,11]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[0,0]],"o":[[2,3],[0,0]],"v":[[-1,-10.5],[1,10.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.937254961799,0.647058823529,0.352941176471,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":7,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[220.5,107.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-7.698,5.705],[-3.747,-5.873],[0,-6.861]],"o":[[0,0],[5.596,-4.148],[1.999,3.134],[0,0]],"v":[[-15.5,9.916],[-5.49,-6.769],[11.936,-3.723],[15.5,10.916]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[-7.698,5.705],[-3.747,-5.873],[0,-6.861]],"o":[[0,0],[5.596,-4.148],[1.999,3.134],[0,0]],"v":[[-15.5,9.916],[-6.24,-3.769],[12.436,-0.723],[14,11.666]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[-7.698,5.705],[-3.747,-5.873],[0,-6.861]],"o":[[0,0],[5.596,-4.148],[1.999,3.134],[0,0]],"v":[[-15.5,9.916],[-5.49,-6.769],[11.936,-3.723],[15.5,10.916]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[-7.698,5.705],[-3.747,-5.873],[0,-6.861]],"o":[[0,0],[5.596,-4.148],[1.999,3.134],[0,0]],"v":[[-15.5,9.916],[-6.24,-3.769],[12.436,-0.723],[14,11.666]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-7.698,5.705],[-3.747,-5.873],[0,-6.861]],"o":[[0,0],[5.596,-4.148],[1.999,3.134],[0,0]],"v":[[-15.5,9.916],[-5.49,-6.769],[11.936,-3.723],[15.5,10.916]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[-7.698,5.705],[-3.747,-5.873],[0,-6.861]],"o":[[0,0],[5.596,-4.148],[1.999,3.134],[0,0]],"v":[[-15.5,9.916],[-6.24,-3.769],[12.436,-0.723],[14,11.666]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[-7.698,5.705],[-3.747,-5.873],[0,-6.861]],"o":[[0,0],[5.596,-4.148],[1.999,3.134],[0,0]],"v":[[-15.5,9.916],[-5.49,-6.769],[11.936,-3.723],[15.5,10.916]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[-7.698,5.705],[-3.747,-5.873],[0,-6.861]],"o":[[0,0],[5.596,-4.148],[1.999,3.134],[0,0]],"v":[[-15.5,9.916],[-6.24,-3.769],[12.436,-0.723],[14,11.666]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[-7.698,5.705],[-3.747,-5.873],[0,-6.861]],"o":[[0,0],[5.596,-4.148],[1.999,3.134],[0,0]],"v":[[-15.5,9.916],[-5.49,-6.769],[11.936,-3.723],[15.5,10.916]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.937254961799,0.647058823529,0.352941176471,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":15,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[201,94.084],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"shoe Outlines","parent":12,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[92.5,60.75,0],"ix":2,"l":2},"a":{"a":0,"k":[21.5,43.75,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[21,-25]],"o":[[0,0],[0,0]],"v":[[17,-15],[-17,15]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[18,-22.25]],"o":[[0,0],[0,0]],"v":[[15.25,-19.5],[-17,15.25]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[21,-25]],"o":[[0,0],[0,0]],"v":[[17,-15],[-17,15]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[18,-22.25]],"o":[[0,0],[0,0]],"v":[[15.25,-19.5],[-17,15.25]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[21,-25]],"o":[[0,0],[0,0]],"v":[[17,-15],[-17,15]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[18,-22.25]],"o":[[0,0],[0,0]],"v":[[15.25,-19.5],[-17,15.25]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[21,-25]],"o":[[0,0],[0,0]],"v":[[17,-15],[-17,15]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[18,-22.25]],"o":[[0,0],[0,0]],"v":[[15.25,-19.5],[-17,15.25]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[21,-25]],"o":[[0,0],[0,0]],"v":[[17,-15],[-17,15]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[35.5,34.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[9,-14]],"o":[[0,0],[0,0]],"v":[[14.5,-14],[-14.5,14]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[9.5,-12.5]],"o":[[0,0],[0,0]],"v":[[13,-17],[-14.5,14]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[9,-14]],"o":[[0,0],[0,0]],"v":[[14.5,-14],[-14.5,14]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[9.5,-12.5]],"o":[[0,0],[0,0]],"v":[[13,-17],[-14.5,14]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[9,-14]],"o":[[0,0],[0,0]],"v":[[14.5,-14],[-14.5,14]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[9.5,-12.5]],"o":[[0,0],[0,0]],"v":[[13,-17],[-14.5,14]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[9,-14]],"o":[[0,0],[0,0]],"v":[[14.5,-14],[-14.5,14]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[9.5,-12.5]],"o":[[0,0],[0,0]],"v":[[13,-17],[-14.5,14]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[9,-14]],"o":[[0,0],[0,0]],"v":[[14.5,-14],[-14.5,14]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":7,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[32,31.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"leg Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[468,605.572,0],"to":[0,0.5,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[468,608.572,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[468,605.572,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[468,608.572,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[468,605.572,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[468,608.572,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[468,605.572,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[468,608.572,0],"to":[0,0,0],"ti":[0,0.5,0]},{"t":90,"s":[468,605.572,0]}],"ix":2,"l":2},"a":{"a":0,"k":[19,16.572,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.763,0],[0,0],[0,0.763],[0,0],[-0.762,0],[0,0],[0,-0.763],[0,0]],"o":[[0,0],[-0.762,0],[0,0],[0,-0.763],[0,0],[0.763,0],[0,0],[0,0.763]],"v":[[1.953,4],[-1.953,4],[-3.333,2.619],[-3.333,-2.619],[-1.953,-4],[1.953,-4],[3.333,-2.619],[3.333,2.619]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.407843167174,0.20000001496,0.196078446332,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.5,9],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[23.543,5.5],[23.543,11.849]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.023529411765,0.454901960784,0.788235294118,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[9.793,5.5],[9.793,11.849]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.023529411765,0.454901960784,0.788235294118,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.5,8.786],[33.567,8.786]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.160784313725,0.392156892664,0.647058823529,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-6.5,-6.5],[6.5,6.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-7.5,-5.875],[6.5,6.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-6.5,-6.5],[6.5,6.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-7.5,-5.875],[6.5,6.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-6.5,-6.5],[6.5,6.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-7.5,-5.875],[6.5,6.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-6.5,-6.5],[6.5,6.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-7.5,-5.875],[6.5,6.5]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-6.5,-6.5],[6.5,6.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":11,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[85,53],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[3,0],[0,3],[-3,0],[0,-3]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[2.812,3.375],[-1,5.625],[-3.188,3.375],[-0.125,1.188]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[3,0],[0,3],[-3,0],[0,-3]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[2.812,3.375],[-1,5.625],[-3.188,3.375],[-0.125,1.188]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[3,0],[0,3],[-3,0],[0,-3]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[2.812,3.375],[-1,5.625],[-3.188,3.375],[-0.125,1.188]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[3,0],[0,3],[-3,0],[0,-3]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[2.812,3.375],[-1,5.625],[-3.188,3.375],[-0.125,1.188]],"c":true}]},{"t":90,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[3,0],[0,3],[-3,0],[0,-3]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.647058823529,0.352941176471,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[58,22],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,6.548],[0,0],[0,0]],"o":[[0,0],[-6.548,0],[0,0],[0,0],[0,0]],"v":[[14.75,12],[-2.893,12.5],[-14.75,0.643],[-14.75,-12.5],[14.25,-12.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.023529411765,0.454901960784,0.788235294118,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[19.25,18],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-33,-17.072],[-0.429,-17.072],[33,17.072]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-33,-17.072],[-1.429,-14.447],[33,17.072]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-33,-17.072],[-0.429,-17.072],[33,17.072]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-33,-17.072],[-1.429,-14.447],[33,17.072]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-33,-17.072],[-0.429,-17.072],[33,17.072]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-33,-17.072],[-1.429,-14.447],[33,17.072]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-33,-17.072],[-0.429,-17.072],[33,17.072]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-33,-17.072],[-1.429,-14.447],[33,17.072]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-33,-17.072],[-0.429,-17.072],[33,17.072]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.023529411765,0.454901960784,0.788235294118,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[58,42.072],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"bodyy Outlines","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[54.286,30.5,0],"to":[0,0.833,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[54.286,35.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[54.286,30.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[54.286,35.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[54.286,30.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[54.286,35.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[54.286,30.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[54.286,35.5,0],"to":[0,0,0],"ti":[0,0.833,0]},{"t":90,"s":[54.286,30.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[43.25,62.75,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[16.5,8],[-16.5,8],[-16.5,-8],[16.5,-8]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[17.75,108.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[24.064,0],[0,0],[0,0],[-24.656,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,-24.656],[0,0],[0,0],[0,24.064]],"v":[[-1,52],[-42,52],[-43,-8],[0.643,-52],[43,-52],[43,8]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[43.25,52.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[9.5,15],[-9.5,15],[-9.5,-15],[9.5,-15]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.75,110.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Layer 16 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[516.357,589.935,0],"to":[0,0.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[516.357,593.935,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[516.357,589.935,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[516.357,593.935,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[516.357,589.935,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[516.357,593.935,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[516.357,589.935,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[516.357,593.935,0],"to":[0,0,0],"ti":[0,0.667,0]},{"t":90,"s":[516.357,589.935,0]}],"ix":2,"l":2},"a":{"a":0,"k":[89.643,79.935,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,-2.603],[0,0],[0.027,-0.187],[-2.138,1.425],[-1,0],[0,0]],"o":[[0,0],[2.604,0],[0,0],[0,0.189],[-0.091,0.643],[3,-2],[1.414,0],[0,0]],"v":[[-5,-11.713],[-5,-11.713],[-0.286,-6.998],[-0.286,8.253],[-0.332,8.818],[2,10.287],[1,7.287],[0,10.287]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[169.286,20.713],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,-0.828],[0.828,0],[0,0.828],[-0.828,0]],"o":[[0,0.828],[-0.828,0],[0,-0.828],[0.828,0]],"v":[[1.5,0],[0,1.5],[-1.5,0],[0,-1.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,-0.828],[0.828,0],[0,0.828],[-0.828,0]],"o":[[0,0.828],[-0.828,0],[0,-0.828],[0.828,0]],"v":[[0.5,0.25],[-1,1.75],[-2.5,0.25],[-1,-1.25]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,-0.828],[0.828,0],[0,0.828],[-0.828,0]],"o":[[0,0.828],[-0.828,0],[0,-0.828],[0.828,0]],"v":[[1.5,0],[0,1.5],[-1.5,0],[0,-1.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,-0.828],[0.828,0],[0,0.828],[-0.828,0]],"o":[[0,0.828],[-0.828,0],[0,-0.828],[0.828,0]],"v":[[0.5,0.25],[-1,1.75],[-2.5,0.25],[-1,-1.25]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,-0.828],[0.828,0],[0,0.828],[-0.828,0]],"o":[[0,0.828],[-0.828,0],[0,-0.828],[0.828,0]],"v":[[1.5,0],[0,1.5],[-1.5,0],[0,-1.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,-0.828],[0.828,0],[0,0.828],[-0.828,0]],"o":[[0,0.828],[-0.828,0],[0,-0.828],[0.828,0]],"v":[[0.5,0.25],[-1,1.75],[-2.5,0.25],[-1,-1.25]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,-0.828],[0.828,0],[0,0.828],[-0.828,0]],"o":[[0,0.828],[-0.828,0],[0,-0.828],[0.828,0]],"v":[[1.5,0],[0,1.5],[-1.5,0],[0,-1.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,-0.828],[0.828,0],[0,0.828],[-0.828,0]],"o":[[0,0.828],[-0.828,0],[0,-0.828],[0.828,0]],"v":[[0.5,0.25],[-1,1.75],[-2.5,0.25],[-1,-1.25]],"c":true}]},{"t":90,"s":[{"i":[[0,-0.828],[0.828,0],[0,0.828],[-0.828,0]],"o":[[0,0.828],[-0.828,0],[0,-0.828],[0.828,0]],"v":[[1.5,0],[0,1.5],[-1.5,0],[0,-1.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[122.786,147.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,-1.381],[1.381,0],[0,1.381],[-1.381,0]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0]],"v":[[2.5,0],[0,2.5],[-2.5,0],[0,-2.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,-1.381],[1.381,0],[0,1.381],[-1.381,0]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0]],"v":[[1.5,0.25],[-1,2.75],[-3.5,0.25],[0,-2.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,-1.381],[1.381,0],[0,1.381],[-1.381,0]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0]],"v":[[2.5,0],[0,2.5],[-2.5,0],[0,-2.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,-1.381],[1.381,0],[0,1.381],[-1.381,0]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0]],"v":[[1.5,0.25],[-1,2.75],[-3.5,0.25],[0,-2.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,-1.381],[1.381,0],[0,1.381],[-1.381,0]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0]],"v":[[2.5,0],[0,2.5],[-2.5,0],[0,-2.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,-1.381],[1.381,0],[0,1.381],[-1.381,0]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0]],"v":[[1.5,0.25],[-1,2.75],[-3.5,0.25],[0,-2.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,-1.381],[1.381,0],[0,1.381],[-1.381,0]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0]],"v":[[2.5,0],[0,2.5],[-2.5,0],[0,-2.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,-1.381],[1.381,0],[0,1.381],[-1.381,0]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0]],"v":[[1.5,0.25],[-1,2.75],[-3.5,0.25],[0,-2.5]],"c":true}]},{"t":90,"s":[{"i":[[0,-1.381],[1.381,0],[0,1.381],[-1.381,0]],"o":[[0,1.381],[-1.381,0],[0,-1.381],[1.381,0]],"v":[[2.5,0],[0,2.5],[-2.5,0],[0,-2.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.478431402468,0.474509833841,0.474509833841,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[122.786,147.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.499],[0,0],[-0.498,0.658],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.499],[0,0],[0.498,-0.657]],"v":[[2.694,-3.733],[2.866,-3.602],[3.153,-1.509],[-0.602,3.444],[-2.694,3.732],[-2.867,3.602],[-3.155,1.509],[0.601,-3.444]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.499],[0,0],[-0.498,0.658],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.499],[0,0],[0.498,-0.657]],"v":[[3.694,-2.983],[3.866,-2.852],[4.153,-0.759],[0.398,4.194],[-1.694,4.482],[-1.867,4.352],[-2.155,2.259],[1.601,-2.694]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.499],[0,0],[-0.498,0.658],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.499],[0,0],[0.498,-0.657]],"v":[[2.694,-3.733],[2.866,-3.602],[3.153,-1.509],[-0.602,3.444],[-2.694,3.732],[-2.867,3.602],[-3.155,1.509],[0.601,-3.444]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.499],[0,0],[-0.498,0.658],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.499],[0,0],[0.498,-0.657]],"v":[[3.694,-2.983],[3.866,-2.852],[4.153,-0.759],[0.398,4.194],[-1.694,4.482],[-1.867,4.352],[-2.155,2.259],[1.601,-2.694]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.499],[0,0],[-0.498,0.658],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.499],[0,0],[0.498,-0.657]],"v":[[2.694,-3.733],[2.866,-3.602],[3.153,-1.509],[-0.602,3.444],[-2.694,3.732],[-2.867,3.602],[-3.155,1.509],[0.601,-3.444]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.499],[0,0],[-0.498,0.658],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.499],[0,0],[0.498,-0.657]],"v":[[3.694,-2.983],[3.866,-2.852],[4.153,-0.759],[0.398,4.194],[-1.694,4.482],[-1.867,4.352],[-2.155,2.259],[1.601,-2.694]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.499],[0,0],[-0.498,0.658],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.499],[0,0],[0.498,-0.657]],"v":[[2.694,-3.733],[2.866,-3.602],[3.153,-1.509],[-0.602,3.444],[-2.694,3.732],[-2.867,3.602],[-3.155,1.509],[0.601,-3.444]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.499],[0,0],[-0.498,0.658],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.499],[0,0],[0.498,-0.657]],"v":[[3.694,-2.983],[3.866,-2.852],[4.153,-0.759],[0.398,4.194],[-1.694,4.482],[-1.867,4.352],[-2.155,2.259],[1.601,-2.694]],"c":true}]},{"t":90,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.499],[0,0],[-0.498,0.658],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.499],[0,0],[0.498,-0.657]],"v":[[2.694,-3.733],[2.866,-3.602],[3.153,-1.509],[-0.602,3.444],[-2.694,3.732],[-2.867,3.602],[-3.155,1.509],[0.601,-3.444]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.478431402468,0.474509833841,0.474509833841,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[128.205,131.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.498],[0,0],[-0.498,0.657],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.498],[0,0],[0.498,-0.657]],"v":[[2.17,-2.873],[2.181,-2.865],[2.467,-0.773],[-0.077,2.585],[-2.171,2.873],[-2.181,2.865],[-2.468,0.773],[0.077,-2.585]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.498],[0,0],[-0.498,0.657],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.498],[0,0],[0.498,-0.657]],"v":[[1.17,-2.623],[1.181,-2.615],[1.467,-0.523],[-1.077,2.835],[-3.171,3.123],[-3.181,3.115],[-3.468,1.023],[-0.923,-2.335]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.498],[0,0],[-0.498,0.657],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.498],[0,0],[0.498,-0.657]],"v":[[2.17,-2.873],[2.181,-2.865],[2.467,-0.773],[-0.077,2.585],[-2.171,2.873],[-2.181,2.865],[-2.468,0.773],[0.077,-2.585]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.498],[0,0],[-0.498,0.657],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.498],[0,0],[0.498,-0.657]],"v":[[1.17,-2.623],[1.181,-2.615],[1.467,-0.523],[-1.077,2.835],[-3.171,3.123],[-3.181,3.115],[-3.468,1.023],[-0.923,-2.335]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.498],[0,0],[-0.498,0.657],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.498],[0,0],[0.498,-0.657]],"v":[[2.17,-2.873],[2.181,-2.865],[2.467,-0.773],[-0.077,2.585],[-2.171,2.873],[-2.181,2.865],[-2.468,0.773],[0.077,-2.585]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.498],[0,0],[-0.498,0.657],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.498],[0,0],[0.498,-0.657]],"v":[[1.17,-2.623],[1.181,-2.615],[1.467,-0.523],[-1.077,2.835],[-3.171,3.123],[-3.181,3.115],[-3.468,1.023],[-0.923,-2.335]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.498],[0,0],[-0.498,0.657],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.498],[0,0],[0.498,-0.657]],"v":[[2.17,-2.873],[2.181,-2.865],[2.467,-0.773],[-0.077,2.585],[-2.171,2.873],[-2.181,2.865],[-2.468,0.773],[0.077,-2.585]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.498],[0,0],[-0.498,0.657],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.498],[0,0],[0.498,-0.657]],"v":[[1.17,-2.623],[1.181,-2.615],[1.467,-0.523],[-1.077,2.835],[-3.171,3.123],[-3.181,3.115],[-3.468,1.023],[-0.923,-2.335]],"c":true}]},{"t":90,"s":[{"i":[[-0.657,-0.498],[0,0],[0.499,-0.657],[0,0],[0.658,0.498],[0,0],[-0.498,0.657],[0,0]],"o":[[0,0],[0.657,0.498],[0,0],[-0.499,0.657],[0,0],[-0.657,-0.498],[0,0],[0.498,-0.657]],"v":[[2.17,-2.873],[2.181,-2.865],[2.467,-0.773],[-0.077,2.585],[-2.171,2.873],[-2.181,2.865],[-2.468,0.773],[0.077,-2.585]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.478431402468,0.474509833841,0.474509833841,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[113.045,151.819],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0.961,-1.098],[0,0],[1.056,0.211],[0,0]],"o":[[0,0],[1.032,1.032],[0,0],[-0.709,0.81],[0,0],[0,0]],"v":[[5.874,-9.935],[8.039,-7.769],[8.165,-3.984],[-2.98,8.755],[-5.834,9.724],[-9.126,9.065]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0.961,-1.098],[0,0],[1.056,0.211],[0,0]],"o":[[0,0],[1.032,1.032],[0,0],[-0.709,0.81],[0,0],[0,0]],"v":[[6.874,-9.185],[9.039,-7.019],[8.165,-3.984],[-3.98,9.005],[-6.834,9.974],[-10.126,9.315]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[0,0],[0.961,-1.098],[0,0],[1.056,0.211],[0,0]],"o":[[0,0],[1.032,1.032],[0,0],[-0.709,0.81],[0,0],[0,0]],"v":[[5.874,-9.935],[8.039,-7.769],[8.165,-3.984],[-2.98,8.755],[-5.834,9.724],[-9.126,9.065]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[0,0],[0.961,-1.098],[0,0],[1.056,0.211],[0,0]],"o":[[0,0],[1.032,1.032],[0,0],[-0.709,0.81],[0,0],[0,0]],"v":[[6.874,-9.185],[9.039,-7.019],[8.165,-3.984],[-3.98,9.005],[-6.834,9.974],[-10.126,9.315]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[0,0],[0.961,-1.098],[0,0],[1.056,0.211],[0,0]],"o":[[0,0],[1.032,1.032],[0,0],[-0.709,0.81],[0,0],[0,0]],"v":[[5.874,-9.935],[8.039,-7.769],[8.165,-3.984],[-2.98,8.755],[-5.834,9.724],[-9.126,9.065]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[0,0],[0.961,-1.098],[0,0],[1.056,0.211],[0,0]],"o":[[0,0],[1.032,1.032],[0,0],[-0.709,0.81],[0,0],[0,0]],"v":[[6.874,-9.185],[9.039,-7.019],[8.165,-3.984],[-3.98,9.005],[-6.834,9.974],[-10.126,9.315]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[0,0],[0.961,-1.098],[0,0],[1.056,0.211],[0,0]],"o":[[0,0],[1.032,1.032],[0,0],[-0.709,0.81],[0,0],[0,0]],"v":[[5.874,-9.935],[8.039,-7.769],[8.165,-3.984],[-2.98,8.755],[-5.834,9.724],[-9.126,9.065]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[0,0],[0.961,-1.098],[0,0],[1.056,0.211],[0,0]],"o":[[0,0],[1.032,1.032],[0,0],[-0.709,0.81],[0,0],[0,0]],"v":[[6.874,-9.185],[9.039,-7.019],[8.165,-3.984],[-3.98,9.005],[-6.834,9.974],[-10.126,9.315]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[0,0],[0.961,-1.098],[0,0],[1.056,0.211],[0,0]],"o":[[0,0],[1.032,1.032],[0,0],[-0.709,0.81],[0,0],[0,0]],"v":[[5.874,-9.935],[8.039,-7.769],[8.165,-3.984],[-2.98,8.755],[-5.834,9.724],[-9.126,9.065]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.478431402468,0.474509833841,0.474509833841,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[122.912,142.435],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[14.75,0.5],[-15.75,-0.25]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.478431402468,0.474509833841,0.474509833841,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[108.536,146.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.985,-1.609],[-1.158,-1.89],[-1.865,0],[0,0],[-0.731,-1.402],[1.302,-1.871],[1.433,-0.004],[0,0]],"o":[[0,0],[-1.886,0],[-0.823,1.344],[0.974,1.591],[0,0],[1.581,0],[0.572,1.097],[-0.819,1.176],[0,0],[0,0]],"v":[[19.664,-9.375],[-4.149,-9.375],[-8.83,-6.851],[-8.959,-1.852],[-4.312,0.625],[36.059,0.625],[39.914,2.813],[39.32,7.278],[35.696,9.131],[-40.622,9.375]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.807843197093,0.807843197093,0.807843197093,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[50.622,129.375],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-23,-1],[-8,-12],[4,-20],[12,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-32.5,24.5],[-32.5,-3.357],[-6.5,-23.5],[23.5,-14.5],[28.5,16.5],[15.5,26.5],[-32.5,26.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0.047058823529,0.196078431373,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.786,87.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.523],[5.523,0],[0,5.523],[-5.523,0]],"o":[[0,5.523],[-5.523,0],[0,-5.523],[5.523,0]],"v":[[10,0],[0,10],[-10,0],[0,-10]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[88.286,136],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-7.18],[7.18,0],[0,7.18],[-7.18,0]],"o":[[0,7.18],[-7.18,0],[0,-7.18],[7.18,0]],"v":[[13,0],[0,13],[-13,0],[0,-13]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.478431402468,0.474509833841,0.474509833841,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[88.286,136],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[3,0],[0,3],[-3,0],[0,-3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.807843197093,0.807843197093,0.807843197093,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[70.286,120],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[14.497,0],[0,0],[0,14.497],[0,0],[0,0],[0,0]],"o":[[0,0],[-14.497,0],[0,0],[0,0],[0,0],[0,14.497]],"v":[[9.75,18.234],[-9.75,18.234],[-36,-8.016],[-36,-18.234],[36,-18.234],[36,-8.016]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.749019607843,0.047058823529,0.196078431373,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[84.286,130.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.485],[2.485,0],[0,2.485],[-2.485,0]],"o":[[0,2.485],[-2.485,0],[0,-2.485],[2.485,0]],"v":[[4.5,0],[0,4.5],[-4.5,0],[0,-4.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[159.786,9.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.59],[3.59,0],[0,3.59],[-3.59,0]],"o":[[0,3.59],[-3.59,0],[0,-3.59],[3.59,0]],"v":[[6.5,0],[0,6.5],[-6.5,0],[0,-6.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.478431402468,0.474509833841,0.474509833841,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[159.786,9.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[8,-8.5],[-8,8.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.517647058824,0.517647058824,0.513725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.25,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[75.286,128.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[8,-8.5],[-8,8.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.517647058824,0.517647058824,0.513725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.25,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[73.286,126.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[8,-8.5],[-8,8.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.517647058824,0.517647058824,0.513725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.25,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[71.286,124.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[8,-8.5],[-8,8.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.517647058824,0.517647058824,0.513725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.25,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[69.286,122.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.331,-2.258],[0,0],[2.598,2.682],[0,0],[-3.57,3.458],[-3.458,-3.57],[0,0]],"o":[[0,0],[-2.682,2.598],[0,0],[-3.458,-3.57],[3.57,-3.459],[0,0],[2.257,2.331]],"v":[[13.239,9.328],[9.386,13.06],[-0.174,12.908],[-12.169,0.527],[-11.967,-12.199],[0.759,-11.997],[13.37,1.02]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.807843197093,0.807843197093,0.807843197093,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[78.273,131.349],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.195,2.266],[0,0],[0,0],[-3.396,-3.505],[0,0],[3.506,-3.396],[0,0]],"o":[[0,0],[0,0],[3.505,-3.396],[0,0],[3.396,3.505],[0,0],[-2.266,2.195]],"v":[[-8.186,13.355],[-16.736,4.531],[0.619,-12.283],[13.114,-12.084],[13.34,-11.851],[13.143,0.645],[-0.109,13.484]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.807843197093,0.807843197093,0.807843197093,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.409,131.486],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":2,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[1.427,-2.332],[1.75,-1.05]],"o":[[0,0],[0,2.734],[-0.899,1.467],[0,0]],"v":[[3,-34.5],[3,22.728],[0.909,30.513],[-3,34.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[156.786,47],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":2,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Layer 14 Outlines","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[7]},{"t":90,"s":[0]}],"ix":10},"p":{"a":0,"k":[123.661,89.625,0],"ix":2,"l":2},"a":{"a":0,"k":[-0.375,13.875,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.105,0],[0,0],[0,1.105],[-1.105,0],[0,0],[0,-1.105]],"o":[[0,0],[-1.105,0],[0,-1.105],[0,0],[1.105,0],[0,1.105]],"v":[[3,2],[-3,2],[-5,0],[-3,-2],[3,-2],[5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[22.25,2.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.105,0],[0,0],[0,1.105],[-1.105,0],[0,0],[0,-1.105]],"o":[[0,0],[-1.105,0],[0,-1.105],[0,0],[1.105,0],[0,1.105]],"v":[[3,2],[-3,2],[-5,0],[-3,-2],[3,-2],[5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[23.25,25.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[3,2],[-3,2],[-3,-2],[3,-2]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.478431402468,0.474509833841,0.474509833841,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[22.25,5.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[3,2],[-3,2],[-3,-2],[3,-2]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.478431402468,0.474509833841,0.474509833841,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[23.25,22.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.866,0],[0,0],[0,3.866],[-3.866,0],[0,0],[0,-3.866]],"o":[[0,0],[-3.866,0],[0,-3.866],[0,0],[3.866,0],[0,3.866]],"v":[[11,7],[-11,7],[-18,0],[-11,-7],[11,-7],[18,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.25,13.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"cap Outlines","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[4.727,26.259,0],"ix":2,"l":2},"a":{"a":0,"k":[49.5,36.312,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-15,5]],"o":[[0,0],[0,0]],"v":[[-8.5,-4.5],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":6,"s":[{"i":[[0,0],[-13.207,2.703]],"o":[[0,0],[0,0]],"v":[[-7.645,1.325],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[-11.414,0.406]],"o":[[0,0],[0,0]],"v":[[-6.791,7.149],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":19,"s":[{"i":[[0,0],[-13.207,2.703]],"o":[[0,0],[0,0]],"v":[[-7.645,1.325],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[-15,5]],"o":[[0,0],[0,0]],"v":[[-8.5,-4.5],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":31,"s":[{"i":[[0,0],[-13.207,2.703]],"o":[[0,0],[0,0]],"v":[[-7.645,1.325],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[-11.414,0.406]],"o":[[0,0],[0,0]],"v":[[-6.791,7.149],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[{"i":[[0,0],[-13.207,2.703]],"o":[[0,0],[0,0]],"v":[[-7.645,1.325],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-15,5]],"o":[[0,0],[0,0]],"v":[[-8.5,-4.5],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":51,"s":[{"i":[[0,0],[-13.207,2.703]],"o":[[0,0],[0,0]],"v":[[-7.645,1.325],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[-11.414,0.406]],"o":[[0,0],[0,0]],"v":[[-6.791,7.149],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[-13.207,2.703]],"o":[[0,0],[0,0]],"v":[[-7.645,1.325],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[-15,5]],"o":[[0,0],[0,0]],"v":[[-8.5,-4.5],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":76,"s":[{"i":[[0,0],[-13.207,2.703]],"o":[[0,0],[0,0]],"v":[[-7.645,1.325],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[-11.414,0.406]],"o":[[0,0],[0,0]],"v":[[-6.791,7.149],[8.5,-0.5]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[{"i":[[0,0],[-13.207,2.703]],"o":[[0,0],[0,0]],"v":[[-7.645,1.325],[8.5,-0.5]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[-15,5]],"o":[[0,0],[0,0]],"v":[[-8.5,-4.5],[8.5,-0.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.603921568627,0.03137254902,0.152941176471,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":13,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[41,37],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"back wheel","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[38.411,134.375,0],"ix":2,"l":2},"a":{"a":0,"k":[75.125,49.375,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.215,-2.965],[4.215,3.035],[-1.357,3.035],[-1.357,5.965],[-4.215,5.965],[-4.215,-5.965],[-1.785,-5.965],[-1.785,-2.965]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.035,-2.954],[-0.035,3.046],[-5.607,3.046],[-5.607,5.975],[-8.465,5.975],[-8.465,-5.954],[-6.035,-5.954],[-6.035,-2.954]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.215,-2.965],[4.215,3.035],[-1.357,3.035],[-1.357,5.965],[-4.215,5.965],[-4.215,-5.965],[-1.785,-5.965],[-1.785,-2.965]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.035,-2.954],[-0.035,3.046],[-5.607,3.046],[-5.607,5.975],[-8.465,5.975],[-8.465,-5.954],[-6.035,-5.954],[-6.035,-2.954]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.215,-2.965],[4.215,3.035],[-1.357,3.035],[-1.357,5.965],[-4.215,5.965],[-4.215,-5.965],[-1.785,-5.965],[-1.785,-2.965]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.035,-2.954],[-0.035,3.046],[-5.607,3.046],[-5.607,5.975],[-8.465,5.975],[-8.465,-5.954],[-6.035,-5.954],[-6.035,-2.954]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.215,-2.965],[4.215,3.035],[-1.357,3.035],[-1.357,5.965],[-4.215,5.965],[-4.215,-5.965],[-1.785,-5.965],[-1.785,-2.965]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.035,-2.954],[-0.035,3.046],[-5.607,3.046],[-5.607,5.975],[-8.465,5.975],[-8.465,-5.954],[-6.035,-5.954],[-6.035,-2.954]],"c":true}]},{"t":90,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.215,-2.965],[4.215,3.035],[-1.357,3.035],[-1.357,5.965],[-4.215,5.965],[-4.215,-5.965],[-1.785,-5.965],[-1.785,-2.965]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.807843197093,0.807843197093,0.807843197093,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[43.785,53.965],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.107,-0.25],[-4.107,0.25]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.518,-3],[-13.357,-3.875]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.107,-0.25],[-4.107,0.25]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.518,-3],[-13.357,-3.875]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.107,-0.25],[-4.107,0.25]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.518,-3],[-13.357,-3.875]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.107,-0.25],[-4.107,0.25]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.518,-3],[-13.357,-3.875]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.107,-0.25],[-4.107,0.25]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.749019607843,0.047058823529,0.196078431373,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[21.393,53.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-12.777,7.78],[-6.768,-3.512],[-1.506,-11.045]],"o":[[0,0],[6.513,-3.965],[5.519,2.864],[0,0]],"v":[[-20.361,12.482],[-11.361,-8.518],[11.196,-8.552],[24.139,10.982]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[-12.875,4.5],[-6.768,-3.512],[-1.506,-11.045]],"o":[[0,0],[7.198,-2.516],[5.519,2.864],[0,0]],"v":[[-28.986,9.732],[-11.611,-9.893],[10.446,-7.802],[21.514,11.357]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[-12.777,7.78],[-6.768,-3.512],[-1.506,-11.045]],"o":[[0,0],[6.513,-3.965],[5.519,2.864],[0,0]],"v":[[-20.361,12.482],[-11.361,-8.518],[11.196,-8.552],[24.139,10.982]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[-12.875,4.5],[-6.768,-3.512],[-1.506,-11.045]],"o":[[0,0],[7.198,-2.516],[5.519,2.864],[0,0]],"v":[[-28.986,9.732],[-11.611,-9.893],[10.446,-7.802],[21.514,11.357]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-12.777,7.78],[-6.768,-3.512],[-1.506,-11.045]],"o":[[0,0],[6.513,-3.965],[5.519,2.864],[0,0]],"v":[[-20.361,12.482],[-11.361,-8.518],[11.196,-8.552],[24.139,10.982]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[-12.875,4.5],[-6.768,-3.512],[-1.506,-11.045]],"o":[[0,0],[7.198,-2.516],[5.519,2.864],[0,0]],"v":[[-28.986,9.732],[-11.611,-9.893],[10.446,-7.802],[21.514,11.357]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[-12.777,7.78],[-6.768,-3.512],[-1.506,-11.045]],"o":[[0,0],[6.513,-3.965],[5.519,2.864],[0,0]],"v":[[-20.361,12.482],[-11.361,-8.518],[11.196,-8.552],[24.139,10.982]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[-12.875,4.5],[-6.768,-3.512],[-1.506,-11.045]],"o":[[0,0],[7.198,-2.516],[5.519,2.864],[0,0]],"v":[[-28.986,9.732],[-11.611,-9.893],[10.446,-7.802],[21.514,11.357]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[-12.777,7.78],[-6.768,-3.512],[-1.506,-11.045]],"o":[[0,0],[6.513,-3.965],[5.519,2.864],[0,0]],"v":[[-20.361,12.482],[-11.361,-8.518],[11.196,-8.552],[24.139,10.982]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.603921568627,0.033156477236,0.154324490416,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[50.361,40.518],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[3,0],[0,3],[-3,0],[0,-3]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[-1.25,0.01],[-4.25,3.01],[-7.25,0.01],[-4.25,-2.99]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[3,0],[0,3],[-3,0],[0,-3]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[-1.25,0.01],[-4.25,3.01],[-7.25,0.01],[-4.25,-2.99]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[3,0],[0,3],[-3,0],[0,-3]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[-1.25,0.01],[-4.25,3.01],[-7.25,0.01],[-4.25,-2.99]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[3,0],[0,3],[-3,0],[0,-3]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[-1.25,0.01],[-4.25,3.01],[-7.25,0.01],[-4.25,-2.99]],"c":true}]},{"t":90,"s":[{"i":[[0,-1.657],[1.657,0],[0,1.657],[-1.657,0]],"o":[[0,1.657],[-1.657,0],[0,-1.657],[1.657,0]],"v":[[3,0],[0,3],[-3,0],[0,-3]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0.047058823529,0.196078431373,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[52,51],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,-2.761],[2.761,0],[0,2.761],[-2.761,0]],"o":[[0,2.761],[-2.761,0],[0,-2.761],[2.761,0]],"v":[[5,0],[0,5],[-5,0],[0,-5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,-2.761],[2.761,0],[0,2.761],[-2.761,0]],"o":[[0,2.761],[-2.761,0],[0,-2.761],[2.761,0]],"v":[[0.75,0.01],[-4.25,5.01],[-9.25,0.01],[-4.25,-4.99]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,-2.761],[2.761,0],[0,2.761],[-2.761,0]],"o":[[0,2.761],[-2.761,0],[0,-2.761],[2.761,0]],"v":[[5,0],[0,5],[-5,0],[0,-5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,-2.761],[2.761,0],[0,2.761],[-2.761,0]],"o":[[0,2.761],[-2.761,0],[0,-2.761],[2.761,0]],"v":[[0.75,0.01],[-4.25,5.01],[-9.25,0.01],[-4.25,-4.99]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,-2.761],[2.761,0],[0,2.761],[-2.761,0]],"o":[[0,2.761],[-2.761,0],[0,-2.761],[2.761,0]],"v":[[5,0],[0,5],[-5,0],[0,-5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,-2.761],[2.761,0],[0,2.761],[-2.761,0]],"o":[[0,2.761],[-2.761,0],[0,-2.761],[2.761,0]],"v":[[0.75,0.01],[-4.25,5.01],[-9.25,0.01],[-4.25,-4.99]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,-2.761],[2.761,0],[0,2.761],[-2.761,0]],"o":[[0,2.761],[-2.761,0],[0,-2.761],[2.761,0]],"v":[[5,0],[0,5],[-5,0],[0,-5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,-2.761],[2.761,0],[0,2.761],[-2.761,0]],"o":[[0,2.761],[-2.761,0],[0,-2.761],[2.761,0]],"v":[[0.75,0.01],[-4.25,5.01],[-9.25,0.01],[-4.25,-4.99]],"c":true}]},{"t":90,"s":[{"i":[[0,-2.761],[2.761,0],[0,2.761],[-2.761,0]],"o":[[0,2.761],[-2.761,0],[0,-2.761],[2.761,0]],"v":[[5,0],[0,5],[-5,0],[0,-5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[52,51],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[15.061,0.24],[-15.061,-0.24]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[15.061,0.24],[-19.311,-0.23]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[15.061,0.24],[-15.061,-0.24]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[15.061,0.24],[-19.311,-0.23]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[15.061,0.24],[-15.061,-0.24]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[15.061,0.24],[-19.311,-0.23]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[15.061,0.24],[-15.061,-0.24]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[15.061,0.24],[-19.311,-0.23]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[15.061,0.24],[-15.061,-0.24]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.749019607843,0.047058823529,0.196078431373,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[68.061,50.74],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.209],[2.209,0],[0,2.209],[-2.209,0]],"o":[[0,2.209],[-2.209,0],[0,-2.209],[2.209,0]],"v":[[4,0],[0,4],[-4,0],[0,-4]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0.047058823529,0.196078431373,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[88,50],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.314],[3.314,0],[0,3.314],[-3.314,0]],"o":[[0,3.314],[-3.314,0],[0,-3.314],[3.314,0]],"v":[[6,0],[0,6],[-6,0],[0,-6]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[88,50],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.682,-0.029],[0,0],[-3.93,-0.087],[0,0],[0,2.806],[2.773,-0.014],[0,0],[0,1.374],[0.833,0],[0,0]],"o":[[0,0],[0,0.682],[0,0],[0,3.93],[0,0],[2.806,0.062],[0,-2.773],[0,0],[-1.374,0.007],[0,-0.833],[0,0],[0,0]],"v":[[-23.5,-5.975],[-23.5,-2.408],[-22.281,-1.136],[-18.5,-0.975],[-11.43,6.254],[18.386,6.913],[23.5,1.911],[18.472,-3.092],[-3.009,-2.986],[-5.5,-5.465],[-7.009,-6.975],[-23.5,-6.975]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.407843167174,0.164705882353,0.149019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[75.5,19.975],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.105],[1.105,0],[0,1.105],[-1.105,0]],"o":[[0,1.105],[-1.105,0],[0,-1.105],[1.105,0]],"v":[[2,0],[0,2],[-2,0],[0,-2]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.294117647059,0.290196078431,0.286274509804,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[74,29],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.105],[1.105,0],[0,1.105],[-1.105,0]],"o":[[0,1.105],[-1.105,0],[0,-1.105],[1.105,0]],"v":[[2,0],[0,2],[-2,0],[0,-2]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.294117647059,0.290196078431,0.286274509804,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[89,29],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.969,0],[0,0],[0,2.969],[0,0],[0,0],[0,0]],"o":[[0,0],[-2.969,0],[0,0],[0,0],[0,0],[0,2.969]],"v":[[6.625,4.5],[-6.625,4.5],[-12,-0.875],[-12,-4.5],[12,-4.5],[12,-0.875]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0.047058823529,0.196078431373,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[81,28.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.072,-10],[-14.322,10.01]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.749019607843,0.047058823529,0.196078431373,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[62.928,40],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[-1,-32],[-30,2],[0,0]],"v":[[29.5,15],[0.5,-14],[-25.5,17]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[-1,-32],[-31.125,-1.25],[0,0]],"v":[[26.875,15.375],[-1.375,-13.375],[-34.125,14.25]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[-1,-32],[-30,2],[0,0]],"v":[[29.5,15],[0.5,-14],[-25.5,17]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[-1,-32],[-31.125,-1.25],[0,0]],"v":[[26.875,15.375],[-1.375,-13.375],[-34.125,14.25]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[-1,-32],[-30,2],[0,0]],"v":[[29.5,15],[0.5,-14],[-25.5,17]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[-1,-32],[-31.125,-1.25],[0,0]],"v":[[26.875,15.375],[-1.375,-13.375],[-34.125,14.25]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[-1,-32],[-30,2],[0,0]],"v":[[29.5,15],[0.5,-14],[-25.5,17]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[-1,-32],[-31.125,-1.25],[0,0]],"v":[[26.875,15.375],[-1.375,-13.375],[-34.125,14.25]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[-1,-32],[-30,2],[0,0]],"v":[[29.5,15],[0.5,-14],[-25.5,17]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.749019607843,0.047058827269,0.196078446332,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[49.5,37],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"tyre","parent":17,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":90,"s":[1440]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[51.5,53.75,0],"to":[-0.833,-0.542,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[46.5,50.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[51.5,53.75,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[46.5,50.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[51.5,53.75,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":57,"s":[46.5,50.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":71,"s":[51.5,53.75,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[46.5,50.5,0],"to":[0,0,0],"ti":[-0.833,-0.542,0]},{"t":90,"s":[51.5,53.75,0]}],"ix":2,"l":2},"a":{"a":0,"k":[38,38,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-9.941],[9.941,0],[-23.87,0.945]],"o":[[0,9.941],[-23.877,-0.948],[9.941,0]],"v":[[20.939,0],[2.939,18],[2.939,-18]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.75,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":28.267,"ix":1}},{"n":"g","nm":"gap","v":{"a":0,"k":28.267,"ix":2}},{"n":"o","nm":"offset","v":{"a":0,"k":0,"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[35.061,38],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-9.941],[9.941,0],[0,9.941],[-9.941,0]],"o":[[0,9.941],[-9.941,0],[0,-9.941],[9.941,0]],"v":[[18,0],[0,18],[-18,0],[0,-18]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[38,38],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-8.008],[8.008,0],[0,8.008],[-8.008,0]],"o":[[0,8.008],[-8.008,0],[0,-8.008],[8.008,0]],"v":[[14.5,0],[0,14.5],[-14.5,0],[0,-14.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[38,38],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"bike","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540,540,0],"ix":2,"l":2},"a":{"a":0,"k":[540,540,0],"ix":1,"l":2},"s":{"a":0,"k":[270,270,100],"ix":6,"l":2}},"ao":0,"w":1080,"h":1080,"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 19","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[521.66,905.755,0],"ix":2,"l":2},"a":{"a":0,"k":[-18.34,364.755,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[93,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":12,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":26,"s":[93,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":35,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":45,"s":[93,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":57,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":71,"s":[93,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":80,"s":[100,100,100]},{"t":90,"s":[93,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-370.868,364.755],[334.189,364.755]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"Null 2","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[540,540,0],"to":[-325.833,0,0],"ti":[325.833,0,0]},{"t":90,"s":[-1415,540,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":60,"op":90,"st":60,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 18","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[800.642,-246.717,0],"ix":2,"l":2},"a":{"a":0,"k":[-181.358,177.283,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-110.038,177.283],[-252.679,177.283]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":60,"op":90,"st":60,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 17","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1263.208,-248.755,0],"ix":2,"l":2},"a":{"a":0,"k":[281.208,175.245,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[362.717,175.245],[199.698,175.245]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":60,"op":90,"st":60,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 16","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[692.641,-73.698,0],"ix":2,"l":2},"a":{"a":0,"k":[-289.359,340.302,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-165.057,340.302],[-413.66,340.302]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":60,"op":90,"st":60,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 15","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[753.774,-10.34,0],"ix":2,"l":2},"a":{"a":0,"k":[-228.226,413.66,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-160.981,413.66],[-295.472,413.66]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":60,"op":90,"st":60,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 14","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1093.057,-12.377,0],"ix":2,"l":2},"a":{"a":0,"k":[111.057,411.623,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[179.321,411.623],[42.792,411.623]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":60,"op":90,"st":60,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Shape Layer 13","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1337.585,-84.849,0],"ix":2,"l":2},"a":{"a":0,"k":[355.585,332.151,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[419.774,332.151],[291.396,332.151]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":60,"op":90,"st":60,"bm":0},{"ddd":0,"ind":10,"ty":3,"nm":"Null 2","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[540,540,0],"to":[-325.833,0,0],"ti":[325.833,0,0]},{"t":60,"s":[-1415,540,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":30,"op":60,"st":30,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Shape Layer 12","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[800.642,-246.717,0],"ix":2,"l":2},"a":{"a":0,"k":[-181.358,177.283,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-110.038,177.283],[-252.679,177.283]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":30,"op":60,"st":30,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Shape Layer 11","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1263.208,-248.755,0],"ix":2,"l":2},"a":{"a":0,"k":[281.208,175.245,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[362.717,175.245],[199.698,175.245]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":30,"op":60,"st":30,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Shape Layer 10","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[690.604,89.321,0],"ix":2,"l":2},"a":{"a":0,"k":[-289.359,340.302,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-165.057,340.302],[-413.66,340.302]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":30,"op":60,"st":30,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Shape Layer 9","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[729.321,-110.189,0],"ix":2,"l":2},"a":{"a":0,"k":[-228.226,413.66,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-160.981,413.66],[-295.472,413.66]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":30,"op":60,"st":30,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Shape Layer 8","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1093.057,-12.377,0],"ix":2,"l":2},"a":{"a":0,"k":[111.057,411.623,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[179.321,411.623],[42.792,411.623]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":30,"op":60,"st":30,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"Shape Layer 7","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1337.585,88.358,0],"ix":2,"l":2},"a":{"a":0,"k":[355.585,332.151,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[419.774,332.151],[291.396,332.151]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":30,"op":60,"st":30,"bm":0},{"ddd":0,"ind":17,"ty":3,"nm":"Null 2","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[540,540,0],"to":[-325.833,0,0],"ti":[325.833,0,0]},{"t":30,"s":[-1415,540,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Shape Layer 6","parent":17,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[800.642,-246.717,0],"ix":2,"l":2},"a":{"a":0,"k":[-181.358,177.283,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-110.038,177.283],[-252.679,177.283]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Shape Layer 5","parent":17,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1263.208,-248.755,0],"ix":2,"l":2},"a":{"a":0,"k":[281.208,175.245,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[362.717,175.245],[199.698,175.245]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"Shape Layer 4","parent":17,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[692.641,-73.698,0],"ix":2,"l":2},"a":{"a":0,"k":[-289.359,340.302,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-165.057,340.302],[-413.66,340.302]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"Shape Layer 3","parent":17,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[753.774,-10.34,0],"ix":2,"l":2},"a":{"a":0,"k":[-228.226,413.66,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-160.981,413.66],[-295.472,413.66]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"Shape Layer 2","parent":17,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1093.057,-12.377,0],"ix":2,"l":2},"a":{"a":0,"k":[111.057,411.623,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[179.321,411.623],[42.792,411.623]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"Shape Layer 1","parent":17,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1337.585,-84.849,0],"ix":2,"l":2},"a":{"a":0,"k":[355.585,332.151,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[419.774,332.151],[291.396,332.151]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.356862745098,0.21568627451,0.113725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.709803921569,0.709803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 09f9494..27df579 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,46 +1,18 @@ ديزوكو يعمل - السماح لتطبيق آخر باستخدام إذن Dhizuku. - فشل إلغاء التنشيط - التفعيل بواسطة شيزوكو خدمة الخلفية - طلب إذن ديزوكو - هل أنت متأكد من رغبتك في إلغاء التنشيط؟ - التنشيط عن طريق الكمبيوتر + هل أنت متأكد من رغبتك في إلغاء التنشيط؟ Wechat-ويشات اعطاء - تم النسخ بنجاح نسخ - لا يوجد تطبيق لطلب إذن Dhizuku - تكوين أنهى - مفعل Binance-بينانس منع - تم تنشيط مشرف الجهاز، ولكن تحتاج مالك الجهاز - فرض الإيقاف Alipay-علي باي - تنشيط - رئيسي إلغاء - حسنا ، تحقق من حالة التنشيط. موافق تبرّع - بعد تنشيط مالك الجهاز بنجاح ، ليس لدى النظام إذن لإيقاف تشغيل تطبيق مالك الجهاز بالقوة ، ولكن تحديث التطبيق يتطلب إيقاف التطبيق أولا ، لذلك تحتاج إلى إيقاف Dhizuku بالقوة قبل تحديث Dhizuku. - عادي - يمتلك مالك الجهاز إذنا أعلى من مسؤول الجهاز. لن تفقد الأذونات إلا إذا قمت بإلغاء تنشيطها. -\n -\nتخويل التطبيقات الأخرى بحذر. يمكن لمالك الجهاز تعديل إعدادات النظام باستخدام الأكواد، مثل تعطيل وظائف البرامج والأجهزة ومراقبة سلوكيات المستخدم. الموافقة على طلب إذن Dhizuku الخاص بـ%1$s\? - تم الغاء التنشيط بناجح - إذن ديزوكو - الإعدادات - عندما يستدعي أحد البرامج Dhizuku، تظهر رسالة منبثقة تطالبك - موجه الإذن - الغاء تنشيط - تحقق مما إذا كان Shizuku مثبتا ومفعلا ، واسمح لـDhizuku بالحصول على إذن Shizuku. - يتم استخدام Dhizuku من قبل %1$s - %1$s<br><br>* تفعيل بواسطة adb (اتصال كمبيوتر)‘ الإنتقال إلى <a href=\"https://source.android.google.cn/docs/setup/build/adb\?hl=zh-cn\">جسر تصحيح الاندرويد (ADB)</a> لمزيد من المعلومات المتعلقة بـadb. - في انتظار التفعيل + الغاء تنشيط \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index fab2744..4d6e560 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,46 +1,18 @@ Dhizuku is running - Aktivierung über Shizuku Hintergrunddienst - Dhizuku Berechtigungsanfrage - Aktivierung über den PC Wechat Bewilligen - Es existiert keine Applikation zum Anfragen der Dhizuku Berechtigung - Konfiguration - Aktiv Binance Ablehnen - Geräte-Administrator ist aktiv, es wird jedoch der Geräte-Besitzer benötigt Alipay - Aktivieren - Hauptmenü Abbrechen OK Spenden - Normal - DeviceOwner verfügt über höhere Zugriffsberechtigungen als DeviceAdmin. Berechtigungen können nur durchs Deaktivieren aufgehoben werden. -\n -\nBleiben sie vorsichtig, wenn Sie Applikationen Authorisieren. Der DeviceOwner kann per Code System-Einstellungen ändern, wodurch zB Soft-/Hardware Funktionen deaktiviert oder das User-Verhalten überwacht werden kann. Folgende Dhizuku Berechtigungsanfrage annehmen: %1$s\? - Einstellungen - Öffnet Pop-Up, sobald Programme eine Anfrage an Dhizuku schicken - Berechtigungsanfrage - Dhizuku wird gerade von %1$s verwendet - %1$s<br><br>* Aktivieren über ADB (Computerverbindung),siehe <a href=\"https://source.android.google.cn/docs/setup/build/adb\">Android Debug Bridge (ADB)</a> für weitere Informationen. - Wartet auf Aktivierung Beendet - OK, Aktivierungsstatus prüfen. - Deaktivieren - Sind Sie sicher, dass Sie es deaktivieren wollen? - Deaktivierung erfolgreich - Deaktivierung fehlgeschlagen - Dhizuku Berechtigung - Erlaube anderen Applikationen die Dhizuku Berechtigung zu nutzen. - Kopieren erfolgreich + Deaktivieren + Sind Sie sicher, dass Sie es deaktivieren wollen? Kopie - Überprüfen Sie, ob Shizuku installiert und aktiviert ist. Erlauben Sie Dhizuku, die Shizuku-Berechtigung zu erhalten. - Beenden erzwingen - Nach der erfolgreichen Aktivierung des Gerätebesitzers verfügt das System nicht über die Berechtigung, die Ausführung der Anwendung des Gerätebesitzers zu erzwingen. Das Aktualisieren der Anwendung erfordert jedoch zuerst das Beenden der Anwendung, sodass Sie das Beenden von Dhizuku erzwingen müssen, bevor Sie Dhizuku aktualisieren. \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index c45aa38..e7130c6 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,46 +1,18 @@ - Configuración - Ajustes - Activado - Admin del dispositivo activado, pero necesito el propietario del dispositivo - A la espera de la activación - Activar Cancelar OK Terminar - Activación por ordenador - %1$s<br><br>* Activación por adb (conectar ordenador),ir a <a href=\"https://source.android.google.cn/docs/setup/build/adb\">Android Debug Bridge (ADB)</a> para más información relacionada con adb. - Activar mediante Shizuku - OK, comprueba el estado de activación. - ¿Seguro que quieres desactivar\? - Desactivación correcta - Fallo de desactivación - Parada forzosa + ¿Seguro que quieres desactivar\? Copiar - Copiado exitosamente Donar Wechat - Solicitud de permiso de Dhizuku Permitir Denegar - Normal - Solicitud de autorización Servicio de fondo Dhizuku está en marcha - Inicio ¿Acepta la solicitud de permiso Dhizuku de %1$s \? - DeviceOwner tiene permisos más altos que DeviceAdmin. Los permisos no se perderán a menos que los desactives. -\n -\nAutorice otras aplicaciones con precaución. DeviceOwner puede modificar la configuración del sistema mediante códigos, como desactivar funciones de software y hardware y supervisar el comportamiento de los usuarios. - Compruebe si Shizuku está instalado y activado, y permita que Dhizuku obtenga el permiso de Shizuku. - Desactivar - Permiso Dhizuku + Desactivar Alipay - Dhizuku está siendo utilizado por %1$s - Permitir que otras aplicaciones utilicen el permiso Dhizuku. Binance - Si un programa quiere usar Dhizuku, aparece un mensaje emergente - Después de que el propietario del dispositivo se active correctamente, el sistema no tiene permiso para detener por la fuerza la ejecución de la aplicación en ese dispositivo, pero la actualización de la aplicación requiere detener primero la aplicación, por lo que es necesario detener por la fuerza Dhizuku antes de actualizar Dhizuku. - No hay ninguna aplicación que solicite el permiso de Dhizuhu \ No newline at end of file diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index ecc4b4d..3c48408 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -1,46 +1,18 @@ - Setelan - Konfigurasi - Menunggu aktivasi - Aktifkan Batal Oke - Oke, periksa status aktivasi. - Nonaktifkan - Apakah Anda yakin ingin menonaktifkan\? - Gagal menonaktifkan - Paksa berhenti - Berhasil menyalin + Nonaktifkan + Apakah Anda yakin ingin menonaktifkan\? Donasi Binance Izinkan Tolak - Beranda - Diaktifkan - Admin perangkat telah aktif, namun membutuhkan pemilik perangkat - Pemilik perangkat memiliki akses perizinan tertinggi dibandingkan Admin perangkat. Perizinan tidak akan hilang kecuali Anda menonaktifkannya. -\n -\nBerikan otorisasi aplikasi lain dengan hati-hati. Pemilik perangkat dapat memodifikasi Setelan sistem menggunakan kode, seperti menonaktifkan fungsi perangkat lunak dan perangkat keras serta memantau perilaku pengguna. Salin Selesai - Aktivasi dengan komputer - %1$s<br><br>* Aktivasi dengan adb (hubungkan komputer),Buka <a href=\"https://source.android.google.cn/docs/setup/build/adb\">Android Debug Bridge (ADB)</a> untuk informasi lebih lanjut mengenai adb. - Aktivasi dengan Shizuku - Periksa apakah Shizuku telah dipasang dan diaktifkan, dan izinkan Dhizuku untuk mendapatkan perizinan Shizuku. - Berhasil menonaktifkan - Saat sebuah program memanggil Dhizuku, pesan pop-up akan muncul - Perizinan Dhizuku - Setelah pemilik perangkat berhasil melakukan aktivasi, sistem tidak memiliki izin untuk menghentikan paksa aplikasi pemilik perangkat yang sedang berjalan, tetapi memperbarui aplikasi mengharuskan untuk menghentikan aplikasi terlebih dahulu, jadi Anda perlu menghentikan Dhizuku secara paksa sebelum memperbarui Dhizuku. - Izinkan aplikasi lain menggunakan perizinan Dhizuku. AliPay WeChat Layanan latar belakang - Permintaan Izin Dhizuku - Normal Menyetujui permintaan izin Dhizuku dari %1$s\? - Permintaan izin - Dhizuku sedang digunakan oleh %1$s - Tidak ada aplikasi yang meminta izin Dhizuku Dhizuku sedang berjalan \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 8ea78c9..b00cbef 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1,46 +1,18 @@ - 設定 Dhizuku は起動中です - 他のアプリに Dhizuku の権限の使用を許可します。 - 無効化に失敗しました - Shizuku による有効化 バックグラウンド サービス - Dhizuku への権限の要求 - 本当に無効化してもよろしいですか? - PCによる有効化 + 本当に無効化してもよろしいですか? WeChat 許可 - コピーに成功しました コピー - Dhizuku にアクセスを要求したアプリはありません - 構成 完了 - 端末所有者が有効になりました Binance 拒否 - 端末管理者の権限に加え、端末所有者の権限が必要です - 強制停止 Alipay - 有効化 - ホーム キャンセル - 完了しました。有効状態を確認してください。 OK 寄付 - 端末所有者が正常に有効化された後、システムには実行中の端末所有者アプリを強制的に停止する権限がありませんが、アプリを更新するには最初にアプリを停止する必要があるため、Dhizuku を更新する前に Dhizuku を強制的に停止する必要があります。 - 標準 - 「端末所有者」 は 「端末管理者」 よりも高い権限を持っています。権限を無効化しない限り、権限は失われません。 -\n -\n他のアプリを許可する場合は注意してください。端末所有者は、ソフトウェアおよびハードウェアの機能を無効化したり、ユーザーの行動を監視したりするなど、コードを使用してシステムの状態を変更する事が可能です。 %1$s による Dhizuku へのアクセスを許可しますか? - 無効化に成功しました - Dhizuku の権限 - プログラムが Dhizuku を呼び出すと、ポップアップ メッセージが表示されます - 権限の要求画面 - 無効化 - Shizuku がインストールされ有効化されているかどうかを確認し、Dhizuku に Shizuku の権限を付与してください。 - Dhizuku を使用中:%1$s - %1$s<br><br>※PC から有効化する場合は ADB が必要です。ADB 関連の詳細については、<a href=\\\"https://source.android.com/docs/setup/build/adb?hl=ja\\\">Android Debug Bridge(ADB)</a> を参照してください。 - Dhizuku は有効ではありません + 無効化 \ No newline at end of file diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index b3751cf..381e84a 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -1,46 +1,18 @@ Dhizuku 이(가) 작동중입니다 - 다른 앱이 Dhizuku 권한을 사용하도록 허용합니다. - 비활성화 실패 - Shizuku를 통해 활성화 백그라운드 서비스 - Dhizuku 권한 요청 - 정말로 비활성화 하시겠습니까\? - PC를 통해 활성화 + 정말로 비활성화 하시겠습니까\? Wechat 허용 - 복사 완료 복사 - Dhizuku 권한을 요청하는 어플리케이션이 없습니다 - 구성 완료 - 활성화됨 Binance 취소 - 디바이스 관리자는 활성화 되었지만, 아직 디바이스 오너가 활성화되지 않았습니다 - 강제 종료 Alipay - 활성화 - 취소 - 완료, Dhizuku를 다시 시작하여 활성화 상태를 확인하십시오. 확인 후원 - 디바이스 오너가 성공적으로 활성화 되면, 시스템은 디바이스 오너 앱을 강제 종료할 권한이 없으므로 Dhizuku를 강제 종료 할 수 없습니다. 그러나, 앱을 업데이트 하려면 먼저 앱이 종료되어야 하므로, Dhizuku를 업데이트 하기 전 먼저 강제 종료해야 합니다. - 보통 - 디바이스 오너(DeviceOwner)는 디바이스 관리자(DeviceAdmin) 보다 높은 권한을 가집니다. 사용자가 직접 비활성화 하지 않으면, 디바이스 오너는 계속 유지됩니다. -\n -\n디바이스 오너는 소프트웨어 또는 하드웨어 기능을 비활성화 하는 등 시스템 설정을 조작하거나, 사용자 활동을 감시할 수 있습니다. 다른 어플리케이션을 연동할 때 주의하십시오. %1$s 이(가) Dhizuku 권한을 사용할 수 있도록 허용하시겠습니까\? - 비활성화 완료 - Dhizuku 권한 - 설정 - 어플리케이션이 Dhizuku를 호출하면, 팝업 메세지가 표시됩니다 - 권한 사용 토스트 - 비활성화 - Shizuku가 설치 및 활성화 되었는지 확인한 후, Dhizuku의 Shizuku 접근 권한을 활성화 해 주십시오. - Dhizuku 이(가) %1$s 에 의해 사용됨 - %1$s<br><br>* ADB를 통해 활성화 (컴퓨터에 연결), ADB 관련 정보는 <a href=\"https://source.android.google.cn/docs/setup/build/adb\">Android Debug Bridge (ADB)</a> 에서 확인할 수 있습니다. - 활성화 대기중 + 비활성화 \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 5002932..b5964fe 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1,46 +1,18 @@ Dhizuku działa - Pozwól innym aplikacji na użycie uprawnienia Dhizuku. - Błąd podczas dezaktywacji - Aktywację przez Shizuku Usługa w tle - Prośba o uprawnienie Dhizuku - Czy jesteś pewien że chcesz zdezaktywować? - Aktywacja z użyciem komputera + Czy jesteś pewien że chcesz zdezaktywować? WeChat Udzielono - Skopiowano Kopiuj - Nie ma aplikacji które mogą wymagać uprawnienia Dhizuku - Konfiguracja Skończone - Aktywowane Binance Odmów - Aktywowano uprawnienia administratora urządzenia, ale potrzebne jest jeszcze uprawnienie właściciela urządzenia - Wymuś zatrzymanie Alipay - Aktywuj - Dom Anuluj - OK, sprawdź stan aktywacji. OK Darowizna - Po pomyślnej aktywacji właściciela urządzenia system nie ma uprawnień do wymuszenia zatrzymania działania aplikacji właściciela urządzenia, ale aktualizacja aplikacji wymaga zatrzymania aplikacji, więc musisz wymusić zatrzymanie Dhizuku przed aktualizacją Dhizuku. - Normalne - Właściciel urządzenia ma wyższe uprawnienia niż administrator urządzenia. Uprawnienia nie zostaną utracone, chyba że je dezaktywujesz. -\n -\nAutoryzuj inne aplikacje z zachowaniem ostrożności. Właściciel urządzenia może modyfikować ustawienia systemowe za pomocą kodów, takich jak wyłączyć oprogramowanie, funkcje sprzętu i monitorować wszystko co robi użytkownik Czy wyrażasz zgodę na prośbę o pozwolenie Dhizuku od %1$s\? - Pomyślne zdezaktywowano - Uprawnienie Dhizuku - Ustawienia - Gdy program wywołuje Dhizuku, pojawia się komunikat - Monit o pozwolenie - Dezaktywuj - Sprawdź, czy Shizuku jest zainstalowany i aktywowany i pozwól Dhizuku uzyskać pozwolenie Shizuku. - Dhizuku jest używane przez %1$s - %1$s<br><br>* Aktywacja przez adb (podłącz komputer), przejdź do <a href=\"https://source.android.google.cn/docs/setup/build/adb\">Android Debug Bridge (ADB )</a>, aby uzyskać więcej informacji związanych z adb. - Oczekiwanie na aktywację + Dezaktywuj \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index cf0a356..2e2786a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1,46 +1,18 @@ - Início - Configuração - Configurações - O administrador do dispositivo está ativado, mas precisa do proprietário do dispositivo - Aguardando ativação - Ativar Cancelar OK Terminar - Ativação por computador - Ativação por Shizuku - Verifique se o Shizuku está instalado e ativado e permita que o Dhizuku obtenha permissão do Shizuku. - Desativar - Tem certeza de que deseja desativar\? - Desativação bem-sucedida - Falha na desativação - Forçar parada - Permissão do Dhizuku - Permitir que outros aplicativos usem a permissão do Dhizuku. + Desativar + Tem certeza de que deseja desativar\? Copiar - Copiado com sucesso Doação Alipay Wechat Binance - Solicitação de permissão para Dhizuku Concordar com a solicitação de permissão Dhizuku de %1$s \? Conceder Negar - Normal - Solicitação de permissão - Quando um programa chama o Dhizuku, uma mensagem pop-up solicita - DeviceOwner tem permissão mais alta do que DeviceAdmin. As permissões não serão perdidas, a menos que você as desative. -\n -\nAutorize outros aplicativos com cautela. O proprietário do dispositivo pode modificar as configurações do sistema usando códigos, como desativar funções de software e hardware e monitorar o comportamento do usuário. - Ativado - Após a ativação bem-sucedida do proprietário do dispositivo, o sistema não tem permissão para interromper à força a execução do aplicativo do proprietário do dispositivo, mas a atualização do aplicativo requer a interrupção do aplicativo primeiro, portanto, é necessário interromper à força o Dhizuku antes de atualizá-lo. - %1$s<br><br>* Ativação pelo adb (conecte o computador) ,Vá para <a href=\"https://source.android.google.cn/docs/setup/build/adb\">Android Debug Bridge (ADB)</a> para obter mais informações relacionadas ao adb. - O Dhizuku está sendo usado por %1$s - Não há nenhum aplicativo para solicitar a permissão do Dhizuku Serviço em segundo plano Dhizuku está funcionando - OK, verificando o status da ativação. \ No newline at end of file diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 8828f01..6f57da5 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1,46 +1,18 @@ Dhizuku está a funcionar - Permitir que outras aplicações usem a permissão do Dhizuku. - Falha na desativação - Ativação por Shizuku Serviço em segundo plano - Solicitação de permissão para Dhizuku - Tem certeza de que deseja desativar? - Ativação por computador + Tem certeza de que deseja desativar? Wechat Conceder - Copiado com sucesso Copiar - Não há nenhuma aplicação para solicitar a permissão do Dhizuku - Configuração Terminar - Ativado Binance Negar - O administrador do dispositivo está ativado, mas precisa do proprietário do dispositivo - Forçar paragem Alipay - Ativar - Início Cancelar - OK, verifique o estado da ativação. OK Doação - Após a ativação bem-sucedida do proprietário do dispositivo, o sistema não tem permissão para interromper à força a execução da aplicação do proprietário do dispositivo, mas a atualização da aplicação requer a interrupção do aplicação primeiro, portanto, é necessário interromper à força o Dhizuku antes de atualizá-lo. - Normal - DeviceOwner tem permissão mais alta do que DeviceAdmin. As permissões não serão perdidas, a menos que as desative. -\n -\nAutorize outras aplicações com cuidado. O proprietário do dispositivo pode modificar as configurações do sistema usando códigos, como desativar funções de software e hardware e monitorar o comportamento do utilizador. Concordar com a solicitação de permissão Dhizuku de %1$s ? - Desativação bem-sucedida - Permissão do Dhizuku - Configurações - Quando um programa chama o Dhizuku, uma mensagem pop-up solicita - Solicitação de permissão - Desativar - Verifique se o Shizuku está instalado e ativado e permita que o Dhizuku obtenha permissão do Shizuku. - O Dhizuku é usado por %1$s - %1$s<br><br>* Ativação pelo adb (conecte o computador) ,Vá para <a href=\"https://source.android.google.cn/docs/setup/build/adb\">Android Debug Bridge (ADB)</a> para obter mais informações relacionadas ao adb. - A aguardar ativação + Desativar \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 4465f03..0651889 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1,46 +1,18 @@ - Конфигурация - Домашняя - Активирован администратор устройства, но требуется владелец устройства - Настройки - Разрешение владельца устройства получено - Не активировано - Владелец устройства имеет более высокие права, чем администратор устройства. Разрешения не будут потеряны, если вы не отключите их. -\n -\nС осторожностью авторизуйте другие приложения. Владелец устройства может изменять системные настройки с помощью кодов, например отключать программные и аппаратные функции и отслеживать поведение пользователей. - Активация - Активация через компьютер Отмена ОК - %1$s<br><br>* Для настройки владельца устройства через adb, с помощью компьютера, перейдите по ссылке &lt;a href=https://source.android.google.cn/docs/setup/build/adb\?hl=zh-cn&gt;Android Debug Bridge ( ADB) для получения дополнительной информации об adb. - Активация Shizuku Готово - Убедитесь, что приложение Shizuku установлено и активировано, и разрешите Dhizuku получить разрешение Shizuku. - ОК, проверьте статус активации. - Деактивация - Подтвердить деактивацию\? + Деактивация + Подтвердить деактивацию\? Binance - Авторизация Dhizuku Разрешить %1$s использовать Dhizuku\? Разрешить Отклонить - Общее - Когда приложение вызывает Dhizuku, появляется всплывающее сообщение - Разрешение Dhizuku используется: %1$s - Деактивация прошла успешно - Не удалось деактивировать Копировать - Принудительная остановка - Разрешения Dhizuku Пожертвования - После успешной активации владельца устройства у системы нет разрешения на принудительную остановку приложения владельца устройства. Для обновления приложения сначала необходимо остановить приложение, поэтому перед обновлением Dhizuku необходимо принудительно остановить Dhizuku. - Разрешить другим приложениям использовать разрешение Dhizuku. - Успешно скопировано Dhizuku запущен - Уведомление разрешения Фоновая служба - В настоящее время ни одно приложение не запрашивает разрешения Dhizuku Alipay Wechat \ No newline at end of file diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index e78c6b1..8ac73bc 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -1,46 +1,18 @@ Dhizuku je spustený - Povoľte ostatným aplikáciám používať povolenie Dhizuku. - Zlyhanie deaktivácie - Aktivácia od Shizuku Základná služba - Žiadosť o povolenie Dhizuku - Určite chcete deaktivovať? - Aktivácia pomocou počítača + Určite chcete deaktivovať? Wechat Príspevok - Úspešné kopírovanie Kopírovať - Neexistuje žiadna žiadosť o povolenie Dhizuku - Konfigurácia Dokončiť - Aktivovaný Binance Odmietnuť - Správca zariadenia aktivovaný, ale potrebujete vlastníka zariadenia - Vynútiť zastavenie Alipay - Aktivácia - Domov Zrušiť - V poriadku, skontrolujte stav aktivácie. OK Darovať - Po úspešnej aktivácii vlastníka zariadenia systém nemá oprávnenie na násilné zastavenie spustenej aplikácie vlastníka zariadenia, ale aktualizácia aplikácie vyžaduje najprv zastavenie aplikácie, takže pred aktualizáciou aplikácie Dhizuku musíte aplikáciu Dhizuku násilne zastaviť. - Normálne - Vlastník zariadenia (DeviceOwner) má vyššie oprávnenie ako správca zariadenia (DeviceAdmin). Oprávnenia sa nestratia, pokiaľ ich nedeaktivujete. -\n -\nOstatné aplikácie autorizujte opatrne. Vlastník zariadenia môže upravovať systémové nastavenia pomocou kódov, napríklad vypínať softvérové a hardvérové funkcie a sledovať správanie používateľov. Súhlasíte so žiadosťou o povolenie Dhizuku %1$s\? - Úspešná deaktivácia - Povolenie Dhizuku - Nastavenia - Keď program zavolá Dhizuku, zobrazí sa vyskakovacie okno s výzvou - Výzva na povolenie - Deaktivácia - Skontrolujte, či je Shizuku nainštalovaný a aktivovaný, a povoľte Dhizuku získať povolenie Shizuku. - Dhizuku používa %1$s - %1$s<br><br>* Aktivácia pomocou adb (pripojenie počítača), pre viac informácií týkajúcich sa adb prejdite na <a href=\"https://source.android.google.cn/docs/setup/build/adb\">Android Debug Bridge (ADB)</a>. - Čaká sa na aktiváciu + Deaktivácia \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index c89a95a..61da6a1 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,23 +1,8 @@ - Ayarlar - Aktivasyon için bekleniyor - *adb yardımıyla Dhizuku\'yu aktif etmek ve cihaz sahibini ayarlamak için aşağıdaki kodu kullanın : (bilgisayar bağlantısı gereklidir) -\n<br>%1$s<br> -\n -\n*adb hakkında daha fazla bilgi öğrenmek için şu adrese gidebilirsiniz :<a href=\"https://source.android.com/docs/setup/build/adb\?hl=tr\">Android Hata Ayıklama Köprüsü (ADB)</a> - Shizuku ile aktivasyon - Lütfen önce Shizuku\'nun yüklü ve etkin olduğundan emin olun, ardından Shizuku\'dan bu uygulamaya gerekli iznin verilip verilmediğini kontrol edin. - İşlem tamamlandı, aktivasyonu kontrol ediniz. - Devre dışı bırak - Devre dışı bırakmak istediğinize emin misiniz\? - Başarıyla devre dışı bırakıldı - Devre dışı bırakılamadı - Zorla durdur - Dhizuku izni - Uygulamanın Dhizuku\'yu kullanmasına izin verin. + Devre dışı bırak + Devre dışı bırakmak istediğinize emin misiniz\? Kopyala - Kopyalandı Bağış Yap Alipay WeChat @@ -25,25 +10,9 @@ %1$s, Dhizuku kullanılarak yetkilendirilsin mi\? İzin ver Reddet - Dhizuku İsteği - İzin isteği - Bir program Dhizuku\'yu kullanmak isterse, ekranda bir açılır mesaj belirir - Dhizuku %1$s tarafından kullanılıyor - Dhizuku\'yu kullanmak için izin isteğinde bulunan herhangi bir uygulama yok Arkaplan hizmeti Dhizuku çalışıyor - Normal - Ana Sayfa - Yapılandırma - Cihaz sahibi (DeviceOwner), cihaz yöneticisinden (DeviceAdmin) daha yüksek yetkiye sahiptir ve aktivasyonu kendi isteğinizle iptal etmediğiniz sürece tek seferlik aktivasyon kalıcı olarak geçerlidir. -\n -\nLütfen diğer uygulamaları yetkilendirirken dikkatli olun. Yetkilendirilmiş uygulamalar, yazılım ve donanım işlevlerini devre dışı bırakmak veya kullanıcı davranışlarını izlemek gibi birçok sistem ayarını kod aracılığıyla değiştirebilir. Bitti - Bilgisayar ile aktivasyon Onayla - Aktivasyon İptal - Aktif edildi - Cihaz sahibi başarıyla etkinleştirildiyse sistem tarafından durdurulamaz. Fakat Dhizuku uygulamasını güncellemek için önce uygulamanın durdurulması gerekir, bu nedenle güncellemeden önce Dhizuku\'yu sizin zorla durdurmanız gerekir. (Dhizuku\'nun ana sayfasındaki tuş yardımıyla yapılabilir) - Cihaz yöneticisi olarak aktif edildi fakat cihaz sahibi olarak aktif edilmesi gerekli \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 7a1fbea..75fb419 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -1,46 +1,45 @@ - 主页 - 配置 - 设置 - 已获得设备所有者权限 - 未完全激活,已获得设备管理员 - 未激活 - 设备所有者(DeviceOwner)权限高于设备管理员(DeviceAdmin),一次激活永久有效,除非您主动取消激活。 -\n -\n请谨慎授权给其余应用,设备管理员可通过代码修改诸多系统设置,比如:禁用软硬件功能与监听用户行为等。 - 激活 + + 复制 取消 + 重试 + + + 已成为所有者!!! + 等待激活 + + + 应用管理 + 请求或声明了Dhizuku的应用将在这里显示 + + + 关闭 + 除非 Dhizuku 自愿关闭,否则系统将无法关闭 Dhizuku。 + + 激活(通过 Dhizuku) + 如果您安装了其他的Dhizuku实现,您可以随意在它们之间切换。请<a href="%1$s">阅读帮助</a>. + + + 激活(通过 Shizuku) + 使用Shizuku,您无需计算机就可以运行ADB命令。请<a href="%1$s">阅读帮助</a>. + + + 激活(通过 ADB) + 通过ADB (Android Debug Bridge)连接,可以执行一些特权命令。请<a href="%1$s">阅读帮助</a>. + 查看命令 + 确认 完成 - 电脑激活 - %1$s<br><br>* 借助 adb 来设置设备所有者(连接电脑),前往<a href=\"https://source.android.google.cn/docs/setup/build/adb?hl=zh-cn\">Android 调试桥 (ADB)</a>了解更多与 adb 相关的信息。 - Shizuku 激活 - 请先检查 Shizuku 是否安装、激活,并同意软件获取 Shizuku 权限。 - 执行结束,请检查是否激活。 - 取消激活 - 确认要取消激活吗? - 取消激活成功 - 取消激活失败 - 强行停止 - 当设备所有者激活成功后,系统没有权限强行停止设备所有者应用运行,但是更新应用需要先将应用停止,所以你需要先将 Dhizuku 强行停止,再更新 Dhizuku。 - Dhizuku 权限 - 允许应用使用 Dhizuku。 - 复制 - 复制成功 + 取消激活 + 确认要取消激活吗? 捐赠 支付宝 微信 币安 - Dhizuku 授权 %1$s使用 Dhizuku 吗?]]> 同意 拒绝 - 常规 - 权限提示 - 当有程序在调用 Dhizuku 时,弹出消息提示 - Dhizuku 权限正在被使用:%1$s - 暂无应用申请 Dhizuku 权限 后台服务 Dhizuku正在运行 \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml deleted file mode 100644 index f8c6127..0000000 --- a/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 - #FF000000 - #FFFFFFFF - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dce7288..f9034b1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,64 +1,52 @@ Dhizuku - Home - Configuration - Settings - Activated - Device admin activated, but need device owner - Waiting for activation - - DeviceOwner has higher permission than DeviceAdmin. Permissions will not be lost unless you deactivate them. -\n -\nAuthorize other applications with caution. Device owner can modify system Settings using codes, such as disable software and hardware functions and monitor user behaviors. - - Activate + + Copy Cancel - OK - Finish + Retry - Activation by computer - %1$s<br><br>* Activation by adb (connect computer),go to <a href=https://source.android.google.cn/docs/setup/build/adb>Android Debug Bridge (ADB)</a> for more adb related information. + + You are Owner!!! + Waiting fot activation - Activation by Shizuku - Check whether Shizuku is installed and activated, and allow the Dhizuku to obtain Shizuku permission. + + Application Management + Apps that has requested or declared Dhizuku will show here. - OK, check the activation status. + + Activation by Dhizuku + If you have other Dhizuku implementations installed, you can switch between them at will. Please <a href="%1$s">read the help</a>. - Deactivate - Are you sure you want to deactivate? - Successful deactivation - Deactivation failure + + Activation by Shizuku + With Shizuku, you have the ability to run ADB commands without the need for a computer. Please <a href="%1$s">read the help</a>. - Force stop - After the device owner successfully activates, the system does not have permission to forcibly stop the device owner application running, but updating the application requires stopping the application first, so you need to forcibly stop Dhizuku before updating Dhizuku. + + Activation by ADB + Through the ADB (Android Debug Bridge) connection, you can execute some privileged commands. Please <a href="%1$s">read the help</a>. + View command - Dhizuku permission - @string/dhizuku_permission_group_label - @string/dhizuku_permission_group_label + + Shutdown + The system will not be able to shut down Dhizuku unless Dhizuku does so voluntarily. - Allow other application use Dhizuku permission. + + Deactivate + Are you sure you want to deactivate? - Copy - Copy successfully + OK + Finish Donate Alipay Wechat Binance - Dhizuku Permission Request %1$s\?]]> Grant Deny - Normal - Permission prompt - When a program calls Dhizuku, a pop-up message prompts - The Dhizuku is being used by %1$s - - There is no application to request for Dhizuku permission - Background service Dhizuku is running \ No newline at end of file diff --git a/app/src/main/res/xml/device_admin.xml b/app/src/main/res/xml/device_admin.xml deleted file mode 100644 index 9fd7d77..0000000 --- a/app/src/main/res/xml/device_admin.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 578a9ca..c271305 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,8 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. -@Suppress("DSL_SCOPE_VIOLATION") plugins { alias(libs.plugins.agp.lib) apply false alias(libs.plugins.agp.app) apply false alias(libs.plugins.kotlin) apply false alias(libs.plugins.kotlin.jvm) apply false + alias(libs.plugins.compose.compiler) apply false } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ce2651d..0fee6c7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,11 +11,9 @@ # https://androidx.dev/storage/compose-compiler/repository/ [versions] -agp = "8.4.0" -kotlin = "1.9.24" -# https://developer.android.com/jetpack/androidx/releases/compose-kotlin -compose-compiler = "1.5.14-dev-k1.9.24-50022def4af" -compose = "1.6.7" +agp = "8.5.2" +kotlin = "2.0.0" +compose = "1.7.0-beta07" room = "2.6.1" accompanist = "0.34.0" rikka-shizuku = "13.1.5" @@ -26,20 +24,24 @@ agp-lib = { id = "com.android.library", version.ref = "agp" } agp-app = { id = "com.android.application", version.ref = "agp" } kotlin = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } -ksp = { id = "com.google.devtools.ksp", version = "1.9.24-1.0.20" } +compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } + +# KSP quickstart +# https://kotlinlang.org/docs/ksp-quickstart.html +ksp = { id = "com.google.devtools.ksp", version = "2.0.0-1.0.23" } [libraries] -androidx-annotation = { module = "androidx.annotation:annotation", version = "1.8.0" } +androidx-annotation = { module = "androidx.annotation:annotation", version = "1.8.2" } androidx-core = { group = "androidx.core", name = "core-ktx", version = "1.13.1" } -androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version = "1.9.0" } -androidx-lifecycle = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version = "2.8.0" } +androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version = "1.9.1" } +androidx-lifecycle = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version = "2.8.4" } compose-ui = { group = "androidx.compose.ui", name = "ui", version.ref = "compose" } compose-material = { group = "androidx.compose.material", name = "material", version.ref = "compose" } -compose-material3 = { group = "androidx.compose.material3", name = "material3", version = "1.2.1" } +compose-material3 = { group = "androidx.compose.material3", name = "material3", version = "1.3.0-beta05" } compose-uiToolingPreview = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "compose" } compose-navigation = { group = "androidx.navigation", name = "navigation-compose", version = "2.7.7" } -compose-materialIcons = { group = "androidx.compose.material", name = "material-icons-extended", version = "1.6.7" } +compose-materialIcons = { group = "androidx.compose.material", name = "material-icons-extended", version.ref = "compose" } room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } @@ -51,10 +53,6 @@ koin-core = { group = "io.insert-koin", name = "koin-core", version.ref = "koin" koin-android = { group = "io.insert-koin", name = "koin-android", version.ref = "koin" } koin-compose = { group = "io.insert-koin", name = "koin-androidx-compose", version.ref = "koin" } -# Lottie for Android Compose -# http://airbnb.io/lottie/#/android-compose -lottie-compose = { group = "com.airbnb.android", name = "lottie-compose", version = "6.4.0" } - # Pager layouts # https://google.github.io/accompanist/pager/ accompanist = { group = "com.google.accompanist", name = "accompanist-pager", version.ref = "accompanist" } @@ -69,13 +67,13 @@ lsposed-hiddenapibypass = { group = "org.lsposed.hiddenapibypass", name = "hidde # XXPermissions # https://github.com/getActivity/XXPermissions -xxpermissions = { group = "com.github.getActivity", name = "XXPermissions", version = "18.5" } +xxpermissions = { group = "com.github.getActivity", name = "XXPermissions", version = "18.62" } # Rikka Shizuku # https://github.com/RikkaApps/Shizuku-API rikka-shizuku-api = { group = "dev.rikka.shizuku", name = "api", version.ref = "rikka-shizuku" } rikka-shizuku-provider = { group = "dev.rikka.shizuku", name = "provider", version.ref = "rikka-shizuku" } -# Android app_process -# https://github.com/iamr0s/AndroidAppProcess -iamr0s-androidAppProcess = { group = "io.github.iamr0s", name = "AndroidAppProcess", version = "1.3.2" } +# Dhizuku-API +# https://github.com/iamr0s/Dhizuku-API +iamr0s-dhizuku-api = { group = "io.github.iamr0s", name = "Dhizuku-SERVER_API", version = "0.0.4" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b82aa23..9355b41 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle.kts b/settings.gradle.kts index 73568d0..c0f787a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -25,11 +25,4 @@ dependencyResolutionManagement { } rootProject.name = "Dhizuku" -include( - ":app", - ":hidden-api", - ":dhizuku-aidl", - ":dhizuku-shared", -) -project(":dhizuku-aidl").projectDir = file("${rootDir.path}/api/dhizuku-aidl") -project(":dhizuku-shared").projectDir = file("${rootDir.path}/api/dhizuku-shared") +include(":app", ":hidden-api") diff --git a/version.properties b/version.properties index d288685..698db66 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ -versionCode=11 -versionName=2.8 \ No newline at end of file +versionCode=12 +versionName=2.9 \ No newline at end of file