diff --git a/README.md b/README.md index 2b760c624e..c19029f627 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ This is the android super app for Navi. This project contains various modules fo 6. Referral and Rewards 7. UPI 8. Bill payment and recharges +9. CYCS - Check Your Credit Score Some of the in-house built SDKs are hosted on other github locations and imported as .aar like UiTron. We will be moving more of these in-house SDKs to other github locations to reduce build time and have code separation. diff --git a/android/app/build.gradle b/android/app/build.gradle index e98b075a5b..1eac2f958b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -328,6 +328,7 @@ dependencies { implementation project(":navi-bbps") implementation project(":navi-chat") implementation project(":navi-coin") + implementation project(":navi-cycs") implementation project(":navi-gold") implementation project(":navi-hl") implementation project(":navi-insurance") diff --git a/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt b/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt index bf71455365..5cc082411c 100644 --- a/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt +++ b/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt @@ -75,6 +75,7 @@ import com.navi.common.utils.isDynamicModuleInstalled import com.navi.common.utils.log import com.navi.common.utils.toActionData import com.navi.common.video.NaviYoutubeActivity +import com.navi.cycs.entry.CycsRouter import com.navi.gold.navigator.NaviDigitalGoldDeeplinkNavigator import com.navi.gold.ui.IconTitleDescBottomSheet import com.navi.homeloan.dashboard.activity.NewHLDashboardActivity @@ -167,6 +168,7 @@ import com.naviapp.status_tracker.StatusTrackerActivity import com.naviapp.usernotification.activities.UserNotificationActivity import com.naviapp.utils.Constants import com.naviapp.utils.Constants.ACTIVITY_CLASS_PATH +import com.naviapp.utils.Constants.CYCS_REQUEST_CODE import com.naviapp.utils.Constants.EMPTY import com.naviapp.utils.Constants.HPC import com.naviapp.utils.Constants.LOAN_ACCOUNT_NUMBER @@ -201,6 +203,7 @@ object NaviDeepLinkNavigator : DeepLinkListener { private const val ABOUT_US = "aboutUs" private const val NAVIPAY = "naviPay" private const val NAVI_BBPS = "naviBbps" + private const val CYCS = "CYCS" private const val PRIVACY_POLICY = "privacyPolicy" private const val TERMS = "terms" private const val TNC_CONTENT = "content" @@ -483,6 +486,20 @@ object NaviDeepLinkNavigator : DeepLinkListener { } return } + CYCS -> { + activity?.let { + CycsRouter.startCycs( + activity = activity, + sourceModule = ModuleNameV2.COMMON.name, + ctaData = ctaData, + bundle = bundle, + finish = finish, + needsResult = ctaData.needsResult, + requestCode = CYCS_REQUEST_CODE + ) + } + return + } MENU -> { when (secondIdentifier) { ABOUT_US -> intent = Intent(activity, AboutUsActivity::class.java) diff --git a/android/app/src/main/java/com/naviapp/home/model/InAppNotificationResponse.kt b/android/app/src/main/java/com/naviapp/home/model/InAppNotificationResponse.kt index e0a5b0c33f..88407f6fe9 100644 --- a/android/app/src/main/java/com/naviapp/home/model/InAppNotificationResponse.kt +++ b/android/app/src/main/java/com/naviapp/home/model/InAppNotificationResponse.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2023 by Navi Technologies Limited + * * Copyright © 2023-2024 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -48,6 +48,5 @@ enum class NotificationStatus { } enum class NotificationAppearanceType { - EXCLUSIVE, DEFAULT } diff --git a/android/app/src/main/java/com/naviapp/home/ui/NotificationScreenRenderer.kt b/android/app/src/main/java/com/naviapp/home/ui/NotificationScreenRenderer.kt index 2521e539cf..faf5f5783f 100644 --- a/android/app/src/main/java/com/naviapp/home/ui/NotificationScreenRenderer.kt +++ b/android/app/src/main/java/com/naviapp/home/ui/NotificationScreenRenderer.kt @@ -75,6 +75,7 @@ import coil.compose.AsyncImage import coil.request.ImageRequest import com.google.gson.Gson import com.navi.base.utils.orTrue +import com.navi.common.utils.capitalize import com.navi.design.font.FontWeightEnum import com.navi.design.theme.getFontWeight import com.navi.design.theme.ttComposeFontFamily @@ -340,8 +341,8 @@ fun NotificationRenderer( ) { notification.notificationPayload?.appearance?.let { if ( - notification.notificationPayload.appearance == - NotificationAppearanceType.EXCLUSIVE.name + notification.notificationPayload.appearance != + NotificationAppearanceType.DEFAULT.name ) { Box( modifier = @@ -352,7 +353,7 @@ fun NotificationRenderer( .padding(horizontal = 8.dp, vertical = 3.dp) ) { Text( - text = stringResource(id = R.string.exclusive), + text = notification.notificationPayload.appearance.capitalize(), fontSize = 12.sp, color = Color.White, style = TextStyle(fontFamily = ttComposeFontFamily), diff --git a/android/app/src/main/java/com/naviapp/utils/Constants.kt b/android/app/src/main/java/com/naviapp/utils/Constants.kt index c931da7844..2303f6aa90 100644 --- a/android/app/src/main/java/com/naviapp/utils/Constants.kt +++ b/android/app/src/main/java/com/naviapp/utils/Constants.kt @@ -398,6 +398,7 @@ object Constants { const val SENSITIVE_VIEW = "sensitive_view" const val NAVI_PAY_REQUEST_CODE = 8080 const val NAVI_BBPS_REQUEST_CODE = 8081 + const val CYCS_REQUEST_CODE = 8082 const val PROGRESS_LOADER_PURPLE_LOTTIE = "raw/progress_loader_purple.lottie" const val NAVI_PL_SHORTCUT_ID = "naviPlShortcutId" const val NAVI_HL_SHORTCUT_ID = "naviHlShortcutId" diff --git a/android/app/src/main/java/com/naviapp/utils/MqttMessageProviderImpl.kt b/android/app/src/main/java/com/naviapp/utils/MqttMessageProviderImpl.kt index 3f8af1b599..106c853799 100644 --- a/android/app/src/main/java/com/naviapp/utils/MqttMessageProviderImpl.kt +++ b/android/app/src/main/java/com/naviapp/utils/MqttMessageProviderImpl.kt @@ -9,6 +9,8 @@ package com.naviapp.utils import android.content.Context import com.google.firebase.messaging.RemoteMessage +import com.navi.cycs.CycsConstants.Common.CYCS +import com.navi.cycs.common.handler.CycsMqttEventHandler import com.navi.mqtt.MqttMessageProvider import com.navi.mqtt.model.MqttMessageResponse import com.naviapp.common.repository.ConfigRepository @@ -38,6 +40,17 @@ constructor( PUSH_NOTIFICATION -> { handlePushNotificationData(response.payload) } + CYCS -> { + scope.launch { + response.payload?.let { + CycsMqttEventHandler.INSTANCE.postEvent( + it["requestId"].orEmpty(), + it["status"].orEmpty(), + it["nextAction"].orEmpty() + ) + } + } + } } sendMqttAcknowledgement(response) } diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 51ab67ff7a..973c22a525 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1129,7 +1129,6 @@ Check Logs Notifications Previous Notifications - Exclusive Delete this notification Show me more notifications like this Don\'t show me notifications like this diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml index 9b1bc9c9e3..f2b79a6964 100644 --- a/android/gradle/libs.versions.toml +++ b/android/gradle/libs.versions.toml @@ -22,6 +22,7 @@ androidx-arch-core-testing = "2.2.0" androidx-browser = "1.3.0" androidx-camera = "1.3.3" androidx-camera-mlkit = "1.3.0-beta02" +androidx-compose-animation = "1.7.0-beta02" androidx-constraintlayout = "2.1.4" androidx-constraintlayoutCompose = "1.1.0-alpha10" androidx-core-ktx = "1.8.0" @@ -95,7 +96,7 @@ moengage-rich-notification = "4.3.2" navi-alfred = "1.6.0" navi-guarddog = "1.10.0" navi-pulse = "1.3.0" -navi-uitron = "1.9.0" +navi-uitron = "1.10.0" navigation = "2.5.3" okhttp-bom = "4.12.0" otaliastudios-cameraview = "2.7.2" @@ -165,6 +166,7 @@ androidx-camera-mlkit-vision = { module = "androidx.camera:camera-mlkit-vision", androidx-camera-view = { module = "androidx.camera:camera-view", version.ref = "androidx-camera" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version.ref = "compose-bom" } +androidx-compose-animation = { module = "androidx.compose.animation:animation", version.ref = "androidx-compose-animation" } androidx-compose-foundation = { module = "androidx.compose.foundation:foundation" } androidx-compose-material = { module = "androidx.compose.material:material" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } diff --git a/android/navi-base/src/main/java/com/navi/base/utils/Ext.kt b/android/navi-base/src/main/java/com/navi/base/utils/Ext.kt index 6b30216753..5a7ccd80ac 100644 --- a/android/navi-base/src/main/java/com/navi/base/utils/Ext.kt +++ b/android/navi-base/src/main/java/com/navi/base/utils/Ext.kt @@ -195,7 +195,9 @@ val doNotShowLoaderWhenPostSet = "/api/v1/external-sdk/initiate", "/communication/app-launch", "/customer-device/permission", - "/litmus-proxy/v1/proxy/batch/variants" + "/litmus-proxy/v1/proxy/batch/variants", + "/appshell/cycs/consent", + "/appshell/cycs/score" ) fun isDataNeedsToUpdate( diff --git a/android/navi-common/src/main/java/com/navi/common/model/ModuleNameV2.kt b/android/navi-common/src/main/java/com/navi/common/model/ModuleNameV2.kt index 19180f4659..3d8fe0fce9 100644 --- a/android/navi-common/src/main/java/com/navi/common/model/ModuleNameV2.kt +++ b/android/navi-common/src/main/java/com/navi/common/model/ModuleNameV2.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2021-2022 by Navi Technologies Limited + * * Copyright © 2021-2024 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -8,6 +8,8 @@ package com.navi.common.model enum class ModuleNameV2 { + APP_SHELL, + CYCS, PL, // For Personal Loan Activities HL, // For Home Loan Activities NewHL, // For New Home Loan Activities diff --git a/android/navi-common/src/main/java/com/navi/common/model/NetworkInfo.kt b/android/navi-common/src/main/java/com/navi/common/model/NetworkInfo.kt index cb8e308a57..7275f327a2 100644 --- a/android/navi-common/src/main/java/com/navi/common/model/NetworkInfo.kt +++ b/android/navi-common/src/main/java/com/navi/common/model/NetworkInfo.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2021-2023 by Navi Technologies Limited + * * Copyright © 2021-2024 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -16,6 +16,7 @@ data class NetworkInfo( ) enum class ModuleName { + CYCS, LE, // For lending API GI, // For insurance API AMC, // For AMC API, diff --git a/android/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronTriggerApiActionDeserializer.kt b/android/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronTriggerApiActionDeserializer.kt index b317bc56d3..6e752e5dfe 100644 --- a/android/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronTriggerApiActionDeserializer.kt +++ b/android/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronTriggerApiActionDeserializer.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2023 by Navi Technologies Limited + * * Copyright © 2023-2024 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -11,6 +11,9 @@ import com.google.gson.JsonDeserializationContext import com.google.gson.JsonElement import com.navi.common.uitron.model.action.ApiType import com.navi.common.uitron.model.action.BasicDetailsApiAction +import com.navi.common.uitron.model.action.CycsGetNextActionApiAction +import com.navi.common.uitron.model.action.CycsGetWebTokenUrlApiAction +import com.navi.common.uitron.model.action.CycsPostConsentApiAction import com.navi.common.uitron.model.action.FillApiAction import com.navi.common.uitron.model.action.GetApplicationIdApiAction import com.navi.common.uitron.model.action.GetNextScreenApiAction @@ -65,6 +68,12 @@ class UiTronTriggerApiActionDeserializer : BaseUiTronTriggerApiActionDeserialize ApiType.RedeemCoins.name -> context?.deserialize(jsonObject, RedeemCoinAction::class.java) ApiType.V3Home.name -> context?.deserialize(jsonObject, V3HomeAction::class.java) + ApiType.CycsGetNextAction.name -> + context?.deserialize(jsonObject, CycsGetNextActionApiAction::class.java) + ApiType.CycsPostConsent.name -> + context?.deserialize(jsonObject, CycsPostConsentApiAction::class.java) + ApiType.CycsGetWebTokenUrl.name -> + context?.deserialize(jsonObject, CycsGetWebTokenUrlApiAction::class.java) else -> super.deserialize(json, typeOfT, context) } } diff --git a/android/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt b/android/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt index 36173620bf..dca5a7a713 100644 --- a/android/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt +++ b/android/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2023 by Navi Technologies Limited + * * Copyright © 2023-2024 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -15,9 +15,9 @@ import com.navi.uitron.model.action.TriggerApiAction import com.navi.uitron.model.data.UiTronActionData import kotlinx.parcelize.Parcelize -class GetApplicationIdApiAction() : TriggerApiAction() +class GetApplicationIdApiAction : TriggerApiAction() -class GetScreenDefinitionApiAction() : TriggerApiAction() +class GetScreenDefinitionApiAction : TriggerApiAction() open class FillApiAction( @SerializedName("fillApiLabel") val fillApiLabel: String? = null, @@ -25,7 +25,7 @@ open class FillApiAction( @SerializedName("isPartialFillCall") val isPartialFillCall: Boolean? = null ) : TriggerApiAction() -class GetNextScreenApiAction() : TriggerApiAction() +class GetNextScreenApiAction : TriggerApiAction() @Parcelize data class FillApiData( @@ -46,6 +46,12 @@ open class LambdaApiAction( @SerializedName("definition") var definition: LambdaDefinition? = null ) : TriggerApiAction() +class CycsPostConsentApiAction : TriggerApiAction() + +class CycsGetNextActionApiAction : TriggerApiAction() + +class CycsGetWebTokenUrlApiAction : TriggerApiAction() + enum class ApiType { GetApplicationId, GetScreenDefinition, @@ -61,7 +67,10 @@ enum class ApiType { RewardsAndReferralAction, ValidateVpa, RedeemCoins, - V3Home + V3Home, + CycsPostConsent, + CycsGetNextAction, + CycsGetWebTokenUrl, } enum class SourceType { diff --git a/android/navi-common/src/main/java/com/navi/common/utils/MqttEventBus.kt b/android/navi-common/src/main/java/com/navi/common/utils/MqttEventBus.kt new file mode 100644 index 0000000000..00c27d225e --- /dev/null +++ b/android/navi-common/src/main/java/com/navi/common/utils/MqttEventBus.kt @@ -0,0 +1,26 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.common.utils + +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.asSharedFlow + +object MqttEventBus { + private val _events = MutableSharedFlow(replay = 1) + val events = _events.asSharedFlow() + + @OptIn(ExperimentalCoroutinesApi::class) + fun resetEventBus() { + _events.resetReplayCache() + } + + suspend fun triggerEvent(event: Any) { + _events.emit(event) + } +} diff --git a/android/navi-common/src/main/java/com/navi/common/utils/Utility.kt b/android/navi-common/src/main/java/com/navi/common/utils/Utility.kt index ab3c3eaddc..c0f031eb98 100644 --- a/android/navi-common/src/main/java/com/navi/common/utils/Utility.kt +++ b/android/navi-common/src/main/java/com/navi/common/utils/Utility.kt @@ -54,11 +54,17 @@ import com.navi.common.uitron.deserializer.UiTronUploadDataDeserializer import com.navi.common.uitron.model.action.LaunchIntentAction import com.navi.common.uitron.model.action.ThirdPartySdkAction import com.navi.common.uitron.model.action.UploadDataConfig +import com.navi.common.uitron.serializer.AnySerializer +import com.navi.common.uitron.serializer.UiTronActionSerializer +import com.navi.common.uitron.serializer.UiTronSDKActionSerializer +import com.navi.common.uitron.serializer.UiTronTriggerApiActionSerializer +import com.navi.common.uitron.serializer.UiTronUploadDataSerializer import com.navi.common.utils.Constants.FCM_TOKEN import com.navi.common.utils.Constants.GOOGLE_ADVERTISING_ID import com.navi.common.utils.Constants.SESSION_TIME_OUT_THRESHOLD import com.navi.naviwidgets.extensions.getScreenHeight import com.navi.naviwidgets.extensions.getScreenWidth +import com.navi.naviwidgets.validations.BaseInputValidation import com.navi.uitron.deserializer.ComposePropertyDeserializer import com.navi.uitron.deserializer.CustomShapeDeserializer import com.navi.uitron.deserializer.UiTronDataDeserializer @@ -74,6 +80,11 @@ import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.BaseProperty import com.navi.uitron.model.ui.UiTronShape import com.navi.uitron.model.visualtransformation.VisualTransformationData +import com.navi.uitron.serializer.ComposePropertySerializer +import com.navi.uitron.serializer.UiTronValidationSerializer +import com.navi.uitron.serializer.VisualTransformationDataSerializer +import com.navi.uitron.serializer.animationsSerializers.AnimationSpecSerializer +import com.navi.uitron.serializer.animationsSerializers.PropertyAnimatorSerializer import com.navi.uitron.validation.UiTronBaseValidation import java.text.SimpleDateFormat import java.util.Calendar @@ -324,6 +335,24 @@ fun GsonBuilder.registerUiTronDeSerializers(): GsonBuilder { } } +fun GsonBuilder.registerUiTronSerializer(): GsonBuilder { + return apply { + registerTypeAdapter(BaseProperty::class.java, ComposePropertySerializer()) + registerTypeAdapter(UiTronAction::class.java, UiTronActionSerializer()) + registerTypeAdapter(UploadDataConfig::class.java, UiTronUploadDataSerializer()) + registerTypeAdapter(BaseInputValidation::class.java, UiTronValidationSerializer()) + registerTypeAdapter(TriggerApiAction::class.java, UiTronTriggerApiActionSerializer()) + registerTypeAdapter(AnimationSpec::class.java, AnimationSpecSerializer()) + registerTypeAdapter(PropertyAnimator::class.java, PropertyAnimatorSerializer()) + registerTypeAdapter( + VisualTransformationData::class.java, + VisualTransformationDataSerializer() + ) + registerTypeAdapter(ThirdPartySdkAction::class.java, UiTronSDKActionSerializer()) + registerTypeAdapter(Any::class.java, AnySerializer()) + } +} + fun isInstalledInProfile(context: Context): String? { if (FirebaseRemoteConfigHelper.getBoolean(FC_DISABLE)) return EMPTY diff --git a/android/navi-cycs/.gitignore b/android/navi-cycs/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/android/navi-cycs/.gitignore @@ -0,0 +1 @@ +/build diff --git a/android/navi-cycs/build.gradle b/android/navi-cycs/build.gradle new file mode 100644 index 0000000000..325cc77c93 --- /dev/null +++ b/android/navi-cycs/build.gradle @@ -0,0 +1,82 @@ +plugins { + alias libs.plugins.android.library + alias libs.plugins.hilt.android + alias libs.plugins.kotlin.android + alias libs.plugins.kotlin.kapt + alias libs.plugins.kotlin.parcelize + alias libs.plugins.ksp +} + +android { + namespace 'com.navi.cycs' + compileSdk 34 + + defaultConfig { + minSdk 23 + targetSdk 33 + + consumerProguardFiles "consumer-rules.pro" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildFeatures { + buildConfig true + compose true + dataBinding true + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + benchmark { + initWith release + } + } + composeOptions { + kotlinCompilerExtensionVersion libs.versions.compose.lib.get() + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + freeCompilerArgs += ["-Xstring-concat=inline"] + jvmTarget = '17' + } + flavorDimensions = ["app"] + productFlavors { + dev { + dimension "app" + } + qa { + isDefault true + dimension "app" + } + mock { + dimension "app" + } + prod { + dimension "app" + } + } +} + +dependencies { + implementation project(":navi-common") + implementation libs.accompanist.permissions + implementation libs.accompanist.systemuicontroller + implementation libs.android.material + implementation libs.androidx.appcompat + implementation libs.androidx.compose.animation + implementation libs.androidx.compose.material3 + implementation libs.androidx.core.ktx + implementation libs.androidx.lifecycle.viewmodel.ktx + implementation libs.dagger.hiltAndroid + implementation libs.raamcosta.composeDestinations.animation.core + + kapt libs.androidx.hilt.compiler + kapt libs.dagger.hiltAndroidCompiler + + ksp libs.raamcosta.composeDestinations.ksp +} diff --git a/android/navi-cycs/consumer-rules.pro b/android/navi-cycs/consumer-rules.pro new file mode 100644 index 0000000000..e69de29bb2 diff --git a/android/navi-cycs/proguard-rules.pro b/android/navi-cycs/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/android/navi-cycs/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/android/navi-cycs/src/main/AndroidManifest.xml b/android/navi-cycs/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..9eb95031d6 --- /dev/null +++ b/android/navi-cycs/src/main/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/CycsAnalytics.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/CycsAnalytics.kt new file mode 100644 index 0000000000..167fb8c677 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/CycsAnalytics.kt @@ -0,0 +1,91 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs + +import com.navi.analytics.utils.NaviTrackEvent + +class CycsAnalytics private constructor() { + + inner class Landing { + fun onLanded() { + NaviTrackEvent.trackEventOnClickStream(eventName = "cycs_landing_screen") + } + } + + inner class Consent { + fun onLanded() { + NaviTrackEvent.trackEventOnClickStream(eventName = "cycs_consent_screen") + } + } + + inner class Score { + fun onLoading() { + NaviTrackEvent.trackEventOnClickStream(eventName = "cycs_score_loader_screen") + } + + fun onLanded() { + NaviTrackEvent.trackEventOnClickStream(eventName = "cycs_score_screen") + } + } + + inner class Trend { + fun onLanded() { + NaviTrackEvent.trackEventOnClickStream(eventName = "cycs_chart_screen") + } + } + + inner class Insight { + fun onLanded(insightName: String) { + NaviTrackEvent.trackEventOnClickStream( + eventName = "cycs_insight_screen", + eventValues = mapOf(Pair("insight_name", insightName)) + ) + } + } + + inner class Report { + fun onLanded() { + NaviTrackEvent.trackEventOnClickStream(eventName = "cycs_report_page_land") + } + } + + inner class Issue { + fun onLanded() { + NaviTrackEvent.trackEventOnClickStream(eventName = "cycs_issue_screen") + } + } + + inner class Ntc { + fun onLanded(ntcStatus: String) { + NaviTrackEvent.trackEventOnClickStream( + eventName = "cycs_ntc_page_land", + eventValues = mapOf(Pair("ntc_status", ntcStatus)) + ) + } + } + + inner class Downtime { + fun onLanded() { + NaviTrackEvent.trackEventOnClickStream(eventName = "cycs_downtime_page_land") + } + } + + inner class Error { + fun onLanded(errorName: String) { + NaviTrackEvent.trackEventOnClickStream( + eventName = "cycs_error_page_land", + eventValues = mapOf(Pair("error_name", errorName)) + ) + } + } + + companion object { + val INSTANCE = CycsAnalytics() + const val CYCS_ACTIVITY = "cycs_activity" + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/CycsConstants.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/CycsConstants.kt new file mode 100644 index 0000000000..4d8d366865 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/CycsConstants.kt @@ -0,0 +1,78 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs + +object CycsConstants { + + object Common { + const val CYCS = "CYCS" + const val CACHE_KEY = "CACHE_KEY" + const val CTA_GO_BACK = "GO_BACK" + const val CTA_FINISH = "FINISH" + const val SCREEN = "SCREEN" + const val START_SCREEN_NAME = "START_SCREEN_NAME" + const val SOURCE_MODULE = "SOURCE_MODULE" + const val CREDIT_SCORE_WIDGET = "CREDIT_SCORE_WIDGET" + const val SKIP_ANIMATION = "SkipAnimation" + } + + object Network { + const val ACCEPT_ENCODING = "Accept-Encoding" + const val X_TARGET = "X-Target" + const val X_NTC_STATUS = "X-NTC-Status" + const val X_CREDIT_INDICATOR = "X-Credit-Indicator" + const val X_NOTIFICATION_PERMISSION_GRANTED = "X-Notification-Permission-Granted" + const val SCREEN_NAME = "screenName" + const val GZIP = "gzip" + const val REQUEST_ID = "requestId" + } + + object AnimationLabels { + const val SCREEN_TO_SHOW = "Screen_to_show" + const val CONSENT_SCREEN_LOTTIE_TRANSLATION = "ConsentScreenLottieTranslation" + const val CONSENT_SCREEN_CONTENT_TRANSLATION = "ConsentScreenContentTranslation" + const val CONSENT_SCREEN_CONTENT_TRANSPARENCY = "ConsentScreenContentTransparency" + const val SCORE_ANIMATION = "Score_Animation" + const val ROLODEX_ANIMATION = "Rolodex_Animation" + const val SCORE_SECTION_BACKGROUND_COLOR_ANIMATION = "ScoreSectionBackgroundColor" + } + + object OneProfile { + const val VERTICAL_TYPE = "verticalType" + const val APPLICANT_TYPE = "applicantType" + const val CUSTOMER = "CUSTOMER" + const val HPC_PROFILE = "HPC_PROFILE" + const val ONE_PROFILE_REQUEST_CODE = 1002 + const val JOURNEY_TYPE = "journeyType" + const val NON_ONBOARDING = "NON_ONBOARDING" + const val SOURCE = "source" + const val HPC = "HPC" + const val CREDIT_SCORE = "CREDIT_SCORE" + } + + object Mqtt { + const val SUCCESS = "SUCCESS" + const val FAILED = "FAILED" + } + + object BottomSheet { + const val BOTTOM_SHEET = "BOTTOM_SHEET" + const val BOTTOM_SHEET_VISIBILITY = "BOTTOM_SHEET_VISIBILITY" + } + + object LottieKey { + const val SHARED_LOTTIE_METER_KEY = "Meter" + const val SHARED_LOTTIE_LOADER_KEY = "Loader" + } + + const val DEFAULT_CREDIT_SCORE = "300" + const val ANIMATED_WIDGET_NAME = "ANIMATED_WIDGET" + const val CREDIT_SCORE_WIDGET_DATA_KEY = "credit_score" + const val CREDIT_INDICATOR = "CREDIT_INDICATOR" + const val NTC_STATUS = "NTC_STATUS" +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/CycsScreen.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/CycsScreen.kt new file mode 100644 index 0000000000..cab946ce0d --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/CycsScreen.kt @@ -0,0 +1,41 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs + +enum class CycsScreen { + LANDING, + CONSENT, + SCORE, + TREND, + INSIGHT, + REPORT, + ISSUE, + NTC, + DOWNTIME, +} + +enum class LandingScreenState { + LANDING, + CONSENT, + SCORE, + PROFILE, +} + +enum class CreditIndicatorType { + CREDIT_UTILISATION, + CREDIT_AGE, + NEW_ENQUIRIES, + CREDIT_MIX, + PAYMENT_HISTORY, +} + +enum class NtcStatus { + NO_HISTORY, + NO_HIT, + DROP_OFF, +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/ActionsHandler.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/ActionsHandler.kt new file mode 100644 index 0000000000..f57503c540 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/ActionsHandler.kt @@ -0,0 +1,28 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.handler + +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext +import com.navi.cycs.entry.CycsActivity +import com.navi.cycs.entry.CycsMainViewModel +import com.navi.uitron.handlers.HandleLaunchAppSettingsAction +import com.navi.uitron.handlers.HandlePermissionAction +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@Composable +fun InitActionsHandler( + viewModel: CycsMainViewModel, + activity: CycsActivity, + navigator: DestinationsNavigator +) { + HandleCtaAction(viewModel = viewModel, activity = activity, navigator = navigator) + HandleApiAction(viewModel = viewModel) + HandlePermissionAction(context = LocalContext.current, viewModel = viewModel) + HandleLaunchAppSettingsAction(context = LocalContext.current, viewModel = viewModel) +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/ApiActionHandler.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/ApiActionHandler.kt new file mode 100644 index 0000000000..0072a27d86 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/ApiActionHandler.kt @@ -0,0 +1,44 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.handler + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.navi.common.uitron.model.action.CycsGetNextActionApiAction +import com.navi.common.uitron.model.action.CycsGetWebTokenUrlApiAction +import com.navi.common.uitron.model.action.CycsPostConsentApiAction +import com.navi.cycs.entry.CycsMainViewModel + +@Composable +fun HandleApiAction(viewModel: CycsMainViewModel) { + LaunchedEffect(Unit) { + viewModel.getActionCallback().collect { + when (it) { + is CycsPostConsentApiAction -> { + viewModel.postConsent( + onSuccessActionData = it.onSuccess, + onFailureActionData = it.onFailure + ) + } + is CycsGetNextActionApiAction -> { + viewModel.getNextAction( + onSuccessActionData = it.onSuccess, + onFailureActionData = it.onFailure, + ) + } + is CycsGetWebTokenUrlApiAction -> { + viewModel.getWebTokenUrl( + onSuccessActionData = it.onSuccess, + onFailureActionData = it.onFailure, + ) + } + else -> Unit + } + } + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/CtaActionHandler.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/CtaActionHandler.kt new file mode 100644 index 0000000000..d4e43b3849 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/CtaActionHandler.kt @@ -0,0 +1,98 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.handler + +import android.os.Bundle +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.navi.base.deeplink.DeepLinkManager +import com.navi.base.model.CtaData +import com.navi.common.uitron.model.action.CtaAction +import com.navi.cycs.CycsConstants.BottomSheet.BOTTOM_SHEET +import com.navi.cycs.CycsConstants.Common.CTA_FINISH +import com.navi.cycs.CycsConstants.Common.CTA_GO_BACK +import com.navi.cycs.CycsConstants.Common.CYCS +import com.navi.cycs.common.model.CycsBottomSheetState +import com.navi.cycs.common.model.ScreenDefinitionState +import com.navi.cycs.entry.CycsActivity +import com.navi.cycs.entry.CycsMainViewModel +import com.navi.cycs.entry.CycsRouter +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@Composable +fun HandleCtaAction( + viewModel: CycsMainViewModel, + activity: CycsActivity, + navigator: DestinationsNavigator, +) { + LaunchedEffect(Unit) { + viewModel.getActionCallback().collect { + when (it) { + is CtaAction -> { + it.ctaData?.let { ctaData -> + handleCta( + activity = activity, + ctaData = ctaData, + viewModel = viewModel, + navigator = navigator + ) + } + } + else -> Unit + } + } + } +} + +private fun handleCta( + activity: CycsActivity, + ctaData: CtaData, + viewModel: CycsMainViewModel, + navigator: DestinationsNavigator, + bundle: Bundle = Bundle() +) { + if (ctaData.type == BOTTOM_SHEET) { + val bottomSheetContent = + (viewModel.screenDefinitionState.value as ScreenDefinitionState.Success) + .data + .screenStructure + ?.bottomSheets + ?.get(ctaData.url) + viewModel.updateBottomSheetState( + state = CycsBottomSheetState.Visible, + bottomSheetContent = bottomSheetContent + ) + } else { + val screenIdentifier = ctaData.url?.split("/")?.first() + when (screenIdentifier) { + CYCS -> { + ctaData.parameters?.forEach { item -> bundle.putString(item.key, item.value) } + val destination = ctaData.url?.let { CycsRouter.getDirectionFromCtaUrl(it, bundle) } + destination?.let { navigator.navigate(destination) } + } + CTA_GO_BACK -> { + navigator.popBackStack() + } + CTA_FINISH -> { + activity.finish() + } + else -> { + DeepLinkManager.getDeepLinkListener() + ?.navigateTo( + activity = activity, + ctaData = ctaData, + finish = ctaData.finish, + bundle = ctaData.bundle, + needsResult = ctaData.needsResult, + requestCode = ctaData.requestCode, + clearTask = ctaData.clearTask + ) + } + } + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/CycsMqttEventHandler.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/CycsMqttEventHandler.kt new file mode 100644 index 0000000000..867d5449ff --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/handler/CycsMqttEventHandler.kt @@ -0,0 +1,32 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.handler + +import com.navi.common.utils.MqttEventBus +import com.navi.cycs.common.model.response.CycsMqttEvent +import com.navi.cycs.common.model.response.NextScreen +import kotlinx.coroutines.flow.filterIsInstance + +class CycsMqttEventHandler private constructor() { + suspend fun postEvent(requestId: String, status: String, nextAction: String) { + MqttEventBus.triggerEvent( + CycsMqttEvent( + requestId = requestId, + status = status, + nextAction = NextScreen.entries.find { it.name == nextAction } + ) + ) + } + + val cycsMqttEvent + get() = MqttEventBus.events.filterIsInstance() + + companion object { + val INSTANCE = CycsMqttEventHandler() + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/BottomSheetStateHolder.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/BottomSheetStateHolder.kt new file mode 100644 index 0000000000..3a4199c3bf --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/BottomSheetStateHolder.kt @@ -0,0 +1,35 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model + +import androidx.compose.runtime.Stable +import androidx.compose.ui.graphics.Color +import com.navi.uitron.model.UiTronResponse + +data class BottomSheetStateHolder( + val bottomSheetState: CycsBottomSheetState, + val bottomSheetUIContent: WidgetModelDefinition? = null, + val bottomSheetData: BottomSheetConfig?, +) + +@Stable +data class BottomSheetConfig( + val iconId: Int? = null, + val title: String?, + val description: String?, + val primaryButtonText: String?, + val secondaryButtonText: String? = null, + val onPrimaryButtonClicked: (() -> Unit)? = null, + val onSecondaryButtonClicked: (() -> Unit)? = null, + val descriptionColor: Color? = null, +) + +enum class CycsBottomSheetState { + Visible, + Hidden, +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/GetScoreStatus.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/GetScoreStatus.kt new file mode 100644 index 0000000000..14b3c1cb47 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/GetScoreStatus.kt @@ -0,0 +1,28 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model + +import com.navi.common.network.models.GenericErrorResponse +import com.navi.cycs.common.model.response.NextScreen + +sealed class GetScoreStatus { + + data object Idle : GetScoreStatus() + + data object Loading : GetScoreStatus() + + data class Success( + val data: NextScreen? = null, + ) : GetScoreStatus() + + data class Error( + val error: GenericErrorResponse? = null, + ) : GetScoreStatus() + + data object Downtime : GetScoreStatus() +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/NextActionState.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/NextActionState.kt new file mode 100644 index 0000000000..87d6410f47 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/NextActionState.kt @@ -0,0 +1,26 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model + +import com.navi.common.network.models.GenericErrorResponse +import com.navi.cycs.common.model.response.NextAction + +sealed class NextActionState { + + data object Idle : NextActionState() + + data object Loading : NextActionState() + + data class Success( + val data: NextAction, + ) : NextActionState() + + data class Error( + val error: GenericErrorResponse? = null, + ) : NextActionState() +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/PlottableScorePointEntity.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/PlottableScorePointEntity.kt new file mode 100644 index 0000000000..2ace853ad2 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/PlottableScorePointEntity.kt @@ -0,0 +1,15 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model + +data class PlottableScorePointEntity( + val month: String? = null, + val creditScore: Int? = null, + val projected: Boolean? = null, + val latest: Boolean? = null +) diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/ScreenDefinition.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/ScreenDefinition.kt new file mode 100644 index 0000000000..a6e9d69fdf --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/ScreenDefinition.kt @@ -0,0 +1,38 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model + +import com.navi.common.utils.Constants.DEFAULT_BACKGROUND_COLOR +import com.navi.uitron.model.UiTronResponse +import com.navi.uitron.model.data.UiTronActionData + +data class ScreenDefinition( + val metaData: Map? = null, + val screenStructure: ScreenStructure? = null, +) + +data class ScreenStructure( + val screenStructureType: String? = null, + val screenId: String? = null, + val header: WidgetModelDefinition? = null, + val content: ScreenContent? = null, + val footer: WidgetModelDefinition? = null, + val systemBackCta: UiTronActionData? = null, + val renderActions: RenderActions? = null, + val bottomSheets: Map?>? = null, +) + +data class ScreenContent( + val widgets: List>? = null, + val backgroundColor: String? = DEFAULT_BACKGROUND_COLOR, +) + +data class RenderActions( + val preRenderAction: UiTronActionData? = null, + val postRenderAction: UiTronActionData? = null, +) diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/ScreenDefinitionState.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/ScreenDefinitionState.kt new file mode 100644 index 0000000000..f46460f478 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/ScreenDefinitionState.kt @@ -0,0 +1,22 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model + +import com.navi.common.network.models.GenericErrorResponse + +sealed class ScreenDefinitionState { + data object Loading : ScreenDefinitionState() + + data class Success( + val data: ScreenDefinition, + ) : ScreenDefinitionState() + + data class Error( + val error: GenericErrorResponse? = null, + ) : ScreenDefinitionState() +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/WidgetModel.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/WidgetModel.kt new file mode 100644 index 0000000000..385bb95d5c --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/WidgetModel.kt @@ -0,0 +1,28 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model + +abstract class WidgetModel { + val widgetType: String? = null +} + +data class WidgetModelDefinition( + val widgetName: String? = null, + val widgetData: T? = null, + val widgetRenderActions: RenderActions? = null, +) : WidgetModel() + +enum class WidgetTypes { + UI_TRON_WIDGET, + NATIVE_WIDGET, +} + +enum class CustomWidgets { + CYCS_TREND_LINE_CHART, + CREDIT_SCORE, +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/request/ConsentRequest.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/request/ConsentRequest.kt new file mode 100644 index 0000000000..434386b240 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/request/ConsentRequest.kt @@ -0,0 +1,12 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model.request + +data class ConsentRequest( + val consent: Boolean, +) diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/CreditScoreData.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/CreditScoreData.kt new file mode 100644 index 0000000000..42ece505f1 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/CreditScoreData.kt @@ -0,0 +1,16 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model.response + +import com.navi.uitron.model.data.UiTronData + +data class CreditScoreData( + val startScore: String? = null, + val creditScore: String? = null, + val backgroundColor: String? = null, +) : UiTronData() diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/CreditScoreTrendPointEntity.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/CreditScoreTrendPointEntity.kt new file mode 100644 index 0000000000..3252c85e7b --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/CreditScoreTrendPointEntity.kt @@ -0,0 +1,21 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model.response + +import com.navi.uitron.model.data.UiTronData + +data class CreditScoreTrendData( + val creditScoreTrendPointEntities: List? = null, +) : UiTronData() + +data class CreditScoreTrendPointEntity( + val date: String, + val creditScore: Int? = null, + val latest: Boolean? = null, + val projected: Boolean? = null, +) diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/CycsMqttEvent.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/CycsMqttEvent.kt new file mode 100644 index 0000000000..0980e0d4e2 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/CycsMqttEvent.kt @@ -0,0 +1,14 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model.response + +data class CycsMqttEvent( + val requestId: String? = null, + val status: String? = null, + val nextAction: NextScreen? = null, +) diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/GetScoreStatusResponse.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/GetScoreStatusResponse.kt new file mode 100644 index 0000000000..911dab687d --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/GetScoreStatusResponse.kt @@ -0,0 +1,21 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model.response + +data class GetScoreStatusResponse( + val requestId: String? = null, + val status: String? = null, + val nextAction: NextScreen? = null, +) + +enum class NextScreen { + SCORE, + NO_HISTORY, + NO_HIT, + DROP_OFF, +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/NextActionResponse.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/NextActionResponse.kt new file mode 100644 index 0000000000..065aae7717 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/NextActionResponse.kt @@ -0,0 +1,18 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model.response + +data class NextActionResponse( + val nextAction: NextAction? = null, +) + +enum class NextAction { + CONSENT, + PROFILE, + SCORE, +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/PostScoreResponse.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/PostScoreResponse.kt new file mode 100644 index 0000000000..fccc84a222 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/PostScoreResponse.kt @@ -0,0 +1,12 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model.response + +data class PostScoreResponse( + val requestId: String? = null, +) diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/WebTokenResponse.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/WebTokenResponse.kt new file mode 100644 index 0000000000..d5ea46bde0 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/model/response/WebTokenResponse.kt @@ -0,0 +1,12 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.model.response + +data class WebTokenResponse( + val url: String, +) diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsBottomsheet.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsBottomsheet.kt new file mode 100644 index 0000000000..9d78ea4da3 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsBottomsheet.kt @@ -0,0 +1,92 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.ui + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.navi.common.utils.Constants.HIDE +import com.navi.cycs.CycsConstants.BottomSheet.BOTTOM_SHEET_VISIBILITY +import com.navi.cycs.common.model.CycsBottomSheetState +import com.navi.cycs.entry.CycsMainViewModel + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun CycsBottomSheet(viewModel: CycsMainViewModel) { + + val bottomSheetStateHolder by viewModel.bottomSheetStateHolder.collectAsStateWithLifecycle() + + val modalBottomSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + + LaunchedEffect(Unit) { + viewModel.handle.getStateFlow(BOTTOM_SHEET_VISIBILITY, null).collect { + if (it == HIDE) { + modalBottomSheetState.hide() + viewModel.updateBottomSheetState(state = CycsBottomSheetState.Hidden) + viewModel.handle[BOTTOM_SHEET_VISIBILITY] = null + } + } + } + + LaunchedEffect(key1 = bottomSheetStateHolder.bottomSheetState) { + when (bottomSheetStateHolder.bottomSheetState) { + CycsBottomSheetState.Visible -> { + modalBottomSheetState.show() + } + CycsBottomSheetState.Hidden -> { + if (modalBottomSheetState.isVisible) { + modalBottomSheetState.hide() + } + } + } + } + + if (bottomSheetStateHolder.bottomSheetState != CycsBottomSheetState.Hidden) { + ModalBottomSheet( + onDismissRequest = { + viewModel.updateBottomSheetState(state = CycsBottomSheetState.Hidden) + }, + dragHandle = { Spacer(modifier = Modifier.height(16.dp)) }, + sheetState = modalBottomSheetState, + containerColor = Color.White, + shape = RoundedCornerShape(topStart = 8.dp, topEnd = 8.dp), + ) { + Column(modifier = Modifier.navigationBarsPadding()) { + bottomSheetStateHolder.bottomSheetData?.let { + BottomSheetContentWithIconHeaderPrimarySecondaryButton( + iconId = it.iconId, + header = it.title.orEmpty(), + description = it.description.orEmpty(), + primaryButton = it.primaryButtonText, + secondaryButton = it.secondaryButtonText, + onPrimaryButtonClicked = { it.onPrimaryButtonClicked?.invoke() }, + onSecondaryButtonClicked = { it.onSecondaryButtonClicked?.invoke() }, + descriptionColor = it.descriptionColor, + ) + } + ?: run { + bottomSheetStateHolder.bottomSheetUIContent?.let { widget -> + WidgetRenderer(widget = widget, viewModel = viewModel) + } + } + } + } + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsButtons.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsButtons.kt new file mode 100644 index 0000000000..225550152f --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsButtons.kt @@ -0,0 +1,76 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.ui + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.navi.common.utils.ClickDebounce +import com.navi.common.utils.get +import com.navi.cycs.theme.CycsColor +import com.navi.design.font.FontWeightEnum +import com.navi.design.theme.getFontWeight +import com.navi.design.theme.ttComposeFontFamily +import com.navi.naviwidgets.extensions.NaviText + +@Composable +fun PrimaryRoundedButton( + modifier: Modifier, + text: String, + onClick: () -> Unit, +) { + val clickDebounce = remember { ClickDebounce.get() } + + Button( + elevation = null, + onClick = { clickDebounce.processClick { onClick() } }, + modifier = modifier, + shape = RoundedCornerShape(4.dp), + contentPadding = PaddingValues(vertical = 16.dp), + colors = ButtonDefaults.buttonColors(backgroundColor = CycsColor.ctaPrimary) + ) { + NaviText( + text = text, + color = Color.White, + fontSize = 14.sp, + fontWeight = getFontWeight(FontWeightEnum.TT_SEMI_BOLD), + fontFamily = ttComposeFontFamily, + lineHeight = 22.sp + ) + } +} + +@Composable +fun SecondaryRoundedButton(modifier: Modifier, text: String, onClick: () -> Unit) { + val clickDebounce = remember { ClickDebounce.get() } + + Button( + elevation = null, + onClick = { clickDebounce.processClick { onClick() } }, + modifier = modifier, + shape = RoundedCornerShape(4.dp), + colors = ButtonDefaults.buttonColors(backgroundColor = CycsColor.ctaSecondary), + contentPadding = PaddingValues(vertical = 16.dp) + ) { + NaviText( + text = text, + color = CycsColor.ctaPrimary, + fontSize = 14.sp, + fontWeight = getFontWeight(FontWeightEnum.TT_SEMI_BOLD), + fontFamily = ttComposeFontFamily, + lineHeight = 22.sp + ) + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsCommonComposable.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsCommonComposable.kt new file mode 100644 index 0000000000..8af6a98661 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsCommonComposable.kt @@ -0,0 +1,241 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.ui + +import androidx.compose.animation.BoundsTransform +import androidx.compose.animation.ExperimentalSharedTransitionApi +import androidx.compose.animation.core.LinearOutSlowInEasing +import androidx.compose.animation.core.tween +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.ModalBottomSheetLayout +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.airbnb.lottie.LottieComposition +import com.airbnb.lottie.compose.LottieAnimation +import com.navi.cycs.CycsScreen +import com.navi.cycs.common.model.ScreenDefinitionState +import com.navi.cycs.entry.CycsMainViewModel +import com.navi.cycs.feature.insight.InsightShimmer +import com.navi.cycs.feature.issue.IssueShimmer +import com.navi.cycs.feature.report.ReportShimmer +import com.navi.cycs.feature.trend.TrendShimmer +import com.navi.cycs.theme.CycsColor +import com.navi.design.font.FontWeightEnum +import com.navi.design.theme.getFontWeight +import com.navi.design.theme.ttComposeFontFamily +import com.navi.design.utils.shimmerEffect +import com.navi.naviwidgets.extensions.NaviText + +@Composable +fun BottomSheetContentWithIconHeaderPrimarySecondaryButton( + iconId: Int?, + header: String, + description: String, + primaryButton: String?, + secondaryButton: String?, + onPrimaryButtonClicked: () -> Unit, + onSecondaryButtonClicked: () -> Unit, + descriptionColor: Color? +) { + Column( + modifier = + Modifier.fillMaxWidth() + .background(color = Color.White) + .padding(start = 16.dp, end = 16.dp, bottom = 32.dp) + ) { + iconId?.let { + Image( + painter = painterResource(id = iconId), + modifier = Modifier.size(24.dp), + contentDescription = null + ) + Spacer(modifier = Modifier.height(8.dp)) + } + NaviText( + text = header, + color = CycsColor.textPrimary, + fontSize = 16.sp, + fontWeight = getFontWeight(FontWeightEnum.TT_SEMI_BOLD), + fontFamily = ttComposeFontFamily, + lineHeight = 24.sp + ) + + Spacer(modifier = Modifier.height(8.dp)) + + NaviText( + text = description, + color = descriptionColor ?: CycsColor.textSecondary, + fontSize = 14.sp, + fontWeight = getFontWeight(FontWeightEnum.TT_REGULAR), + fontFamily = ttComposeFontFamily, + lineHeight = 22.sp + ) + + if (!primaryButton.isNullOrBlank() || !secondaryButton.isNullOrBlank()) { + Spacer(modifier = Modifier.height(32.dp)) + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + if (!primaryButton.isNullOrBlank() && !secondaryButton.isNullOrBlank()) { + SecondaryRoundedButton( + text = secondaryButton, + onClick = { onSecondaryButtonClicked.invoke() }, + modifier = Modifier.weight(1f) + ) + + Spacer(modifier = Modifier.width(16.dp)) + + PrimaryRoundedButton( + text = primaryButton, + onClick = { onPrimaryButtonClicked.invoke() }, + modifier = Modifier.weight(1f) + ) + } else { + if (!primaryButton.isNullOrBlank()) { + PrimaryRoundedButton( + text = primaryButton, + onClick = { onPrimaryButtonClicked.invoke() }, + modifier = Modifier.fillMaxWidth() + ) + } + + if (!secondaryButton.isNullOrBlank()) { + SecondaryRoundedButton( + text = secondaryButton, + onClick = { onSecondaryButtonClicked.invoke() }, + modifier = Modifier.fillMaxWidth() + ) + } + } + } + } + } +} + +@OptIn(ExperimentalMaterialApi::class) +@Composable +fun CycsScreenRenderer( + viewModel: CycsMainViewModel, + screen: CycsScreen, + onErrorRetryClick: () -> Unit +) { + ModalBottomSheetLayout(sheetContent = {}) { + when (val state = viewModel.screenDefinitionState.collectAsStateWithLifecycle().value) { + is ScreenDefinitionState.Loading -> { + when (screen) { + CycsScreen.TREND -> TrendShimmer() + CycsScreen.REPORT -> ReportShimmer() + CycsScreen.INSIGHT -> InsightShimmer() + CycsScreen.ISSUE -> IssueShimmer() + else -> Unit + } + } + is ScreenDefinitionState.Success -> { + viewModel.handleScreenPostRenderActions() + ScaffoldRenderer(screenDefinition = state.data, viewModel = viewModel) + } + is ScreenDefinitionState.Error -> { + CycsFullScreenErrorComposeView( + error = state.error, + onRetryClick = onErrorRetryClick + ) + } + } + } +} + +@Composable +fun CycsShimmerBox(width: Dp, height: Dp) { + Box( + modifier = + Modifier.width(width) + .height(height) + .clip(shape = RoundedCornerShape(4.dp)) + .shimmerEffect( + colors = + listOf(CycsColor.loaderGradient, CycsColor.bgAlt2, CycsColor.loaderGradient) + ) + ) +} + +@Composable +fun CycsFullWidthShimmerBox(height: Dp) { + Box( + modifier = + Modifier.fillMaxWidth() + .height(height) + .clip(shape = RoundedCornerShape(4.dp)) + .shimmerEffect( + colors = + listOf(CycsColor.loaderGradient, CycsColor.bgAlt2, CycsColor.loaderGradient) + ) + ) +} + +@OptIn(ExperimentalSharedTransitionApi::class) +val creditBoundsTransform = BoundsTransform { _, _ -> tween(450, easing = LinearOutSlowInEasing) } + +@Composable +fun CreditGenericLottie( + modifier: Modifier, + lottieComposition: LottieComposition?, + progress: () -> Float, + checkAtProgress: Float, + lottieCompletedCallBack: (Boolean) -> Unit +) { + LottieCompletedCallBackOnApiSuccess( + progress = progress, + checkAtProgress = checkAtProgress, + callBackAfterSuccess = lottieCompletedCallBack, + ) + LottieAnimation(modifier = modifier, composition = lottieComposition, progress = progress) +} + +@Composable +fun LottieCompletedCallBackOnApiSuccess( + progress: () -> Float, + checkAtProgress: Float, + callBackAfterSuccess: (Boolean) -> Unit, +) { + LaunchedEffect(progress()) { + if (progress() == checkAtProgress) { + callBackAfterSuccess(true) + } + } +} + +@Composable +fun HandleLoadingState(loaderState: Boolean) { + if (loaderState) { + Box(modifier = Modifier.fillMaxSize().clickable(enabled = false) {}) + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsFullScreenErrorComposeView.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsFullScreenErrorComposeView.kt new file mode 100644 index 0000000000..c24a6e5d88 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/CycsFullScreenErrorComposeView.kt @@ -0,0 +1,104 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.ui + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +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.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.navi.common.network.models.GenericErrorResponse +import com.navi.cycs.CycsAnalytics +import com.navi.cycs.R +import com.navi.design.font.FontWeightEnum +import com.navi.design.theme.getFontWeight +import com.navi.design.theme.ttComposeFontFamily +import com.navi.naviwidgets.extensions.NaviText + +@Composable +fun CycsFullScreenErrorComposeView( + error: GenericErrorResponse?, + cycsAnalytics: CycsAnalytics.Error = CycsAnalytics.INSTANCE.Error(), + onRetryClick: () -> Unit +) { + LaunchedEffect(Unit) { cycsAnalytics.onLanded(errorName = error?.title.orEmpty()) } + Column(modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center) { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Image( + painter = painterResource(id = R.drawable.ic_cycs_error), + contentDescription = null + ) + Spacer(modifier = Modifier.height(16.dp)) + NaviText( + modifier = Modifier.wrapContentSize().padding(horizontal = 16.dp), + text = error?.title ?: "Something went wrong", + fontSize = 16.sp, + fontFamily = ttComposeFontFamily, + color = Color(0xFF191919), + fontWeight = getFontWeight(FontWeightEnum.TT_SEMI_BOLD) + ) + Spacer(modifier = Modifier.height(8.dp)) + NaviText( + modifier = Modifier.wrapContentSize().padding(horizontal = 16.dp), + text = "Please check your internet connection", + fontSize = 14.sp, + fontFamily = ttComposeFontFamily, + color = Color(0xFF6B6B6B), + fontWeight = getFontWeight(FontWeightEnum.TT_REGULAR) + ) + Spacer(modifier = Modifier.height(32.dp)) + Box( + modifier = + Modifier.clickable( + onClick = { onRetryClick.invoke() }, + indication = null, + interactionSource = remember { MutableInteractionSource() } + ) + .clip(shape = RoundedCornerShape(4.dp)) + .background(color = Color(0xFF1F002A)) + .height(48.dp) + .width(156.dp) + ) { + NaviText( + modifier = Modifier.fillMaxSize().wrapContentSize(), + text = "Try again", + fontSize = 14.sp, + fontFamily = ttComposeFontFamily, + fontWeight = getFontWeight(FontWeightEnum.TT_SEMI_BOLD), + color = Color.White, + textAlign = TextAlign.Center + ) + } + Spacer(modifier = Modifier.height(100.dp)) + } + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/ScaffoldRenderer.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/ScaffoldRenderer.kt new file mode 100644 index 0000000000..5cf99dbc4a --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/ScaffoldRenderer.kt @@ -0,0 +1,58 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.ui + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.LocalOverscrollConfiguration +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import com.navi.cycs.common.model.ScreenDefinition +import com.navi.cycs.entry.CycsMainViewModel +import com.navi.design.utils.parseColorSafe +import com.navi.uitron.model.ui.ScrollData +import com.navi.uitron.utils.setVerticalScroll + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun ScaffoldRenderer(screenDefinition: ScreenDefinition, viewModel: CycsMainViewModel) { + + Scaffold( + modifier = Modifier.fillMaxSize(), + topBar = { + screenDefinition.screenStructure?.header?.let { + WidgetRenderer(widget = it, viewModel = viewModel) + } + }, + content = { + CompositionLocalProvider(LocalOverscrollConfiguration provides null) { + Column( + modifier = + Modifier.padding(paddingValues = it) + .setVerticalScroll(ScrollData(enabled = true)) + ) { + screenDefinition.screenStructure?.content?.widgets?.forEach { + WidgetRenderer(widget = it, viewModel = viewModel) + } + } + } + }, + bottomBar = { + screenDefinition.screenStructure?.footer?.let { + WidgetRenderer(widget = it, viewModel = viewModel) + } + }, + backgroundColor = + Color(screenDefinition.screenStructure?.content?.backgroundColor.parseColorSafe()) + ) +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/WidgetRenderer.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/WidgetRenderer.kt new file mode 100644 index 0000000000..5add2c8818 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/ui/WidgetRenderer.kt @@ -0,0 +1,40 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.ui + +import androidx.compose.runtime.Composable +import com.navi.cycs.common.model.CustomWidgets +import com.navi.cycs.common.model.WidgetModelDefinition +import com.navi.cycs.common.model.WidgetTypes +import com.navi.cycs.entry.CycsMainViewModel +import com.navi.cycs.feature.trend.CycsTrendLineChartRenderer +import com.navi.uitron.model.UiTronResponse +import com.navi.uitron.render.UiTronRenderer + +@Composable +fun WidgetRenderer(widget: WidgetModelDefinition?, viewModel: CycsMainViewModel) { + if (widget == null) return + return when (widget.widgetType) { + WidgetTypes.UI_TRON_WIDGET.name -> { + UiTronRenderer( + dataMap = widget.widgetData?.data, + uiTronViewModel = viewModel, + ) + .Render(composeViews = widget.widgetData?.parentComposeView.orEmpty()) + } + WidgetTypes.NATIVE_WIDGET.name -> { + when (widget.widgetName) { + CustomWidgets.CYCS_TREND_LINE_CHART.name -> { + CycsTrendLineChartRenderer(widget = widget) + } + else -> Unit + } + } + else -> Unit + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/CycsUiTronDataDeserializer.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/CycsUiTronDataDeserializer.kt new file mode 100644 index 0000000000..7d82de9df8 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/CycsUiTronDataDeserializer.kt @@ -0,0 +1,38 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.utils + +import com.google.gson.JsonDeserializationContext +import com.google.gson.JsonElement +import com.navi.cycs.common.model.CustomWidgets +import com.navi.cycs.common.model.response.CreditScoreData +import com.navi.cycs.common.model.response.CreditScoreTrendData +import com.navi.uitron.deserializer.UiTronDataDeserializer +import com.navi.uitron.model.data.UiTronData +import java.lang.reflect.Type + +class CycsUiTronDataDeserializer : UiTronDataDeserializer() { + override fun deserialize( + json: JsonElement?, + typeOfT: Type?, + context: JsonDeserializationContext? + ): UiTronData? { + json?.let { + val jsonObject = it.asJsonObject + if (jsonObject["viewType"] == null) return null + return when (jsonObject["viewType"].asString) { + CustomWidgets.CYCS_TREND_LINE_CHART.name -> + context?.deserialize(json, CreditScoreTrendData::class.java) + CustomWidgets.CREDIT_SCORE.name -> + context?.deserialize(json, CreditScoreData::class.java) + else -> super.deserialize(json, typeOfT, context) + } + } + return null + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/CycsUiTronDataSerializer.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/CycsUiTronDataSerializer.kt new file mode 100644 index 0000000000..7840280d7d --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/CycsUiTronDataSerializer.kt @@ -0,0 +1,35 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.utils + +import com.google.gson.JsonElement +import com.google.gson.JsonSerializationContext +import com.navi.cycs.common.model.CustomWidgets +import com.navi.cycs.common.model.response.CreditScoreData +import com.navi.cycs.common.model.response.CreditScoreTrendData +import com.navi.uitron.model.data.UiTronData +import com.navi.uitron.serializer.UiTronDataSerializer +import java.lang.reflect.Type + +class CycsUiTronDataSerializer : UiTronDataSerializer() { + override fun serialize( + src: UiTronData?, + typeOfSrc: Type?, + context: JsonSerializationContext? + ): JsonElement? { + return when (src?.viewType) { + CustomWidgets.CYCS_TREND_LINE_CHART.name -> { + context?.serialize(src as CreditScoreTrendData, CreditScoreTrendData::class.java) + } + CustomWidgets.CREDIT_SCORE.name -> { + context?.serialize(src as CreditScoreData, CreditScoreData::class.java) + } + else -> super.serialize(src, typeOfSrc, context) + } + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/CycsUtils.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/CycsUtils.kt new file mode 100644 index 0000000000..67147efbe7 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/CycsUtils.kt @@ -0,0 +1,154 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.utils + +import androidx.compose.ui.graphics.Color +import com.google.gson.Gson +import com.google.gson.GsonBuilder +import com.navi.base.deeplink.DeepLinkManager +import com.navi.base.model.CtaData +import com.navi.base.model.LineItem +import com.navi.base.utils.UNDERSCORE +import com.navi.base.utils.isNotNullAndNotEmpty +import com.navi.common.CommonLibManager +import com.navi.common.utils.Constants.APP_PLATFORM_APPLICATION_TYPE +import com.navi.common.utils.registerUiTronDeSerializers +import com.navi.common.utils.registerUiTronSerializer +import com.navi.cycs.CycsConstants +import com.navi.cycs.CycsConstants.CREDIT_SCORE_WIDGET_DATA_KEY +import com.navi.cycs.CycsConstants.Common.CREDIT_SCORE_WIDGET +import com.navi.cycs.CycsConstants.Common.CYCS +import com.navi.cycs.CycsConstants.OneProfile.APPLICANT_TYPE +import com.navi.cycs.CycsConstants.OneProfile.CREDIT_SCORE +import com.navi.cycs.CycsConstants.OneProfile.CUSTOMER +import com.navi.cycs.CycsConstants.OneProfile.HPC +import com.navi.cycs.CycsConstants.OneProfile.HPC_PROFILE +import com.navi.cycs.CycsConstants.OneProfile.JOURNEY_TYPE +import com.navi.cycs.CycsConstants.OneProfile.NON_ONBOARDING +import com.navi.cycs.CycsConstants.OneProfile.ONE_PROFILE_REQUEST_CODE +import com.navi.cycs.CycsConstants.OneProfile.SOURCE +import com.navi.cycs.CycsConstants.OneProfile.VERTICAL_TYPE +import com.navi.cycs.CycsScreen +import com.navi.cycs.R +import com.navi.cycs.common.model.BottomSheetConfig +import com.navi.cycs.common.model.CycsBottomSheetState +import com.navi.cycs.common.model.ScreenDefinition +import com.navi.cycs.common.model.response.CreditScoreData +import com.navi.cycs.entry.CycsActivity +import com.navi.cycs.entry.CycsMainViewModel +import com.navi.cycs.theme.CycsColor +import com.navi.naviwidgets.utils.AP_LAUNCH +import com.navi.uitron.model.data.UiTronData +import com.navi.uitron.utils.hexToComposeColor + +fun getCreditScoreData(data: ScreenDefinition): Triple { + return (data.screenStructure + ?.content + ?.widgets + ?.find { widgetModelDefinition -> + widgetModelDefinition.widgetName == CREDIT_SCORE_WIDGET + } + ?.widgetData + ?.data + ?.get(CREDIT_SCORE_WIDGET_DATA_KEY) as? CreditScoreData) + .let { + Triple( + first = + it?.startScore?.takeIf { it.isNotNullAndNotEmpty() } + ?: CycsConstants.DEFAULT_CREDIT_SCORE, + second = + it?.creditScore?.takeIf { it.isNotNullAndNotEmpty() } + ?: CycsConstants.DEFAULT_CREDIT_SCORE, + third = it?.backgroundColor?.hexToComposeColor ?: Color.White + ) + } +} + +fun getScreenName(screenName: CycsScreen) = + CYCS.plus(UNDERSCORE).plus(screenName.name).plus(UNDERSCORE).plus(CycsConstants.Common.SCREEN) + +fun getCacheKey(screenName: CycsScreen, creditIndicator: String? = null) = + creditIndicator?.let { + CYCS.plus(UNDERSCORE) + .plus(screenName.name) + .plus(UNDERSCORE) + .plus(creditIndicator) + .plus(UNDERSCORE) + .plus(CycsConstants.Common.SCREEN) + .plus(UNDERSCORE) + .plus(CycsConstants.Common.CACHE_KEY) + } + ?: run { + CYCS.plus(UNDERSCORE) + .plus(screenName.name) + .plus(UNDERSCORE) + .plus(CycsConstants.Common.SCREEN) + .plus(UNDERSCORE) + .plus(CycsConstants.Common.CACHE_KEY) + } + +fun getGsonDeserializer(): Gson { + return GsonBuilder() + .registerUiTronDeSerializers() + .registerTypeAdapter(UiTronData::class.java, CycsUiTronDataDeserializer()) + .create() +} + +fun getGsonSerializer(): Gson { + return GsonBuilder() + .registerUiTronSerializer() + .registerTypeAdapter(UiTronData::class.java, CycsUiTronDataSerializer()) + .create() +} + +fun navigateToOneProfile(activity: CycsActivity) { + val ctaData = + CtaData( + url = AP_LAUNCH, + parameters = + listOf( + LineItem(key = APP_PLATFORM_APPLICATION_TYPE, value = HPC), + LineItem(key = APPLICANT_TYPE, value = CUSTOMER), + LineItem(key = VERTICAL_TYPE, value = HPC_PROFILE) + ), + needsResult = true, + requestCode = ONE_PROFILE_REQUEST_CODE, + additionalParameters = + listOf( + LineItem(key = JOURNEY_TYPE, value = NON_ONBOARDING), + LineItem(key = SOURCE, value = CREDIT_SCORE) + ) + ) + DeepLinkManager.getDeepLinkListener() + ?.navigateTo( + activity = activity, + ctaData = ctaData, + finish = ctaData.finish, + bundle = ctaData.bundle, + needsResult = ctaData.needsResult, + requestCode = ctaData.requestCode, + clearTask = ctaData.clearTask + ) +} + +fun getLandingScreenBackButtonBottomSheetConfig( + viewModel: CycsMainViewModel, + cycsActivity: CycsActivity +) = + BottomSheetConfig( + title = CommonLibManager.application.getString(R.string.cycs_back_bottom_sheet_title), + description = + CommonLibManager.application.getString(R.string.cycs_back_bottom_sheet_description), + primaryButtonText = CommonLibManager.application.getString(R.string.cycs_check_score), + secondaryButtonText = CommonLibManager.application.getString(R.string.cycs_yes_exit), + onPrimaryButtonClicked = { + viewModel.updateBottomSheetState(state = CycsBottomSheetState.Hidden) + }, + onSecondaryButtonClicked = { cycsActivity.finish() }, + descriptionColor = CycsColor.textTertiary, + ) diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/Ext.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/Ext.kt new file mode 100644 index 0000000000..f98598a431 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/common/utils/Ext.kt @@ -0,0 +1,16 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.common.utils + +import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.ui.Modifier +import com.navi.common.extensions.conditional + +fun Modifier.enableScrollOnCondition(enable: Boolean, scrollState: ScrollState): Modifier = + this.conditional(enable) { verticalScroll(scrollState) } diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/BackButtonHandler.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/BackButtonHandler.kt new file mode 100644 index 0000000000..cbce7ea32b --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/BackButtonHandler.kt @@ -0,0 +1,44 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.entry + +import com.navi.base.deeplink.DeepLinkManager +import com.navi.base.deeplink.util.DeeplinkConstants +import com.navi.base.model.CtaData + +internal interface BackButtonHandler { + val isNaviControllerInitialized: Boolean + + fun CycsActivity.handleBackPress() { + when { + isBackPressedOnCycsRootScreen() -> { + if (isTaskRoot) { + goToHomeScreen() + } else { + finish() + } + } + else -> { + finish() + } + } + } + + private fun CycsActivity.isBackPressedOnCycsRootScreen(): Boolean { + return isNaviControllerInitialized + } + + private fun CycsActivity.goToHomeScreen() { + DeepLinkManager.getDeepLinkListener() + ?.navigateTo( + activity = this, + ctaData = CtaData(url = DeeplinkConstants.HOME), + finish = true + ) + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsActivity.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsActivity.kt new file mode 100644 index 0000000000..b472c8c6f7 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsActivity.kt @@ -0,0 +1,105 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.entry + +import android.Manifest +import android.content.Intent +import android.graphics.Color +import android.os.Build +import android.os.Bundle +import androidx.activity.OnBackPressedCallback +import androidx.activity.compose.setContent +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.LocalOverscrollConfiguration +import androidx.compose.runtime.CompositionLocalProvider +import androidx.navigation.NavHostController +import com.navi.base.deeplink.DeepLinkManager +import com.navi.base.deeplink.util.DeeplinkConstants +import com.navi.base.model.CtaData +import com.navi.common.managers.PermissionsManager +import com.navi.common.model.ModuleNameV2 +import com.navi.common.ui.activity.BaseActivity +import com.navi.cycs.CycsAnalytics.Companion.CYCS_ACTIVITY +import com.navi.cycs.LandingScreenState +import com.navi.cycs.common.model.ScreenDefinitionState +import com.navi.design.theme.NaviMaterialTheme +import dagger.hilt.android.AndroidEntryPoint +import java.lang.ref.WeakReference + +@AndroidEntryPoint +class CycsActivity : BaseActivity(), BackButtonHandler { + override val screenName: String + get() = CYCS_ACTIVITY + + override val moduleName: ModuleNameV2 + get() = ModuleNameV2.CYCS + + lateinit var navController: NavHostController + + override val isNaviControllerInitialized: Boolean + get() = ::navController.isInitialized + + private val onBackPressedCallback = + object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + handleBackPress() + } + } + + private val permissionsManager by lazy { PermissionsManager(this) } + + private var cycsMainViewModel: WeakReference? = null + + @OptIn(ExperimentalFoundationApi::class) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + onBackPressedDispatcher.addCallback(this, onBackPressedCallback) + setContent { + NaviMaterialTheme { + CompositionLocalProvider(LocalOverscrollConfiguration provides null) { + CycsMainScreen(cycsActivity = this) + } + } + } + window.decorView.setBackgroundColor(Color.WHITE) + } + + fun setCycsVM(viewModel: CycsMainViewModel) { + cycsMainViewModel = WeakReference(viewModel) + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (resultCode == RESULT_OK) { + cycsMainViewModel?.get()?.let { + it.setCurrentScreen(LandingScreenState.LANDING) + it.setScreenDefinitionState(ScreenDefinitionState.Loading) + } + } else { + cycsMainViewModel?.let { it.get()?.setCurrentScreen(LandingScreenState.CONSENT) } + } + } + + override fun finish() { + if (isTaskRoot) { + DeepLinkManager.getDeepLinkListener() + ?.navigateTo( + activity = this, + ctaData = CtaData(url = DeeplinkConstants.HOME), + finish = false + ) + } + super.finish() + } + + fun hasNotificationPermission(): Boolean { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + permissionsManager.hasPermission(Manifest.permission.POST_NOTIFICATIONS) + } else true + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsMainScreen.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsMainScreen.kt new file mode 100644 index 0000000000..58dbc42467 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsMainScreen.kt @@ -0,0 +1,75 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.entry + +import androidx.compose.animation.AnimatedContentTransitionScope +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.core.tween +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.navigation.compose.rememberNavController +import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi +import com.navi.cycs.feature.NavGraphs +import com.navi.cycs.feature.destinations.LandingScreenDestination +import com.ramcosta.composedestinations.DestinationsNavHost +import com.ramcosta.composedestinations.animations.defaults.RootNavGraphDefaultAnimations +import com.ramcosta.composedestinations.animations.rememberAnimatedNavHostEngine +import com.ramcosta.composedestinations.navigation.dependency +import com.ramcosta.composedestinations.spec.NavHostEngine + +private const val TRANSITION_DURATION_IN_MILLIS = 400 + +@Composable +fun CycsMainScreen(cycsActivity: CycsActivity) { + val navController = rememberNavController() + cycsActivity.navController = navController + + DestinationsNavHost( + modifier = Modifier.fillMaxSize(), + startRoute = LandingScreenDestination, + navGraph = NavGraphs.root, + engine = naviHostEngine(), + navController = cycsActivity.navController, + dependenciesContainerBuilder = { dependency(cycsActivity) } + ) +} + +@OptIn(ExperimentalMaterialNavigationApi::class, ExperimentalAnimationApi::class) +@Composable +private fun naviHostEngine(): NavHostEngine { + return rememberAnimatedNavHostEngine( + rootDefaultAnimations = + RootNavGraphDefaultAnimations( + enterTransition = { + slideIntoContainer( + towards = AnimatedContentTransitionScope.SlideDirection.Left, + animationSpec = tween(TRANSITION_DURATION_IN_MILLIS) + ) + }, + exitTransition = { + slideOutOfContainer( + towards = AnimatedContentTransitionScope.SlideDirection.Left, + animationSpec = tween(TRANSITION_DURATION_IN_MILLIS) + ) + }, + popEnterTransition = { + slideIntoContainer( + towards = AnimatedContentTransitionScope.SlideDirection.Right, + animationSpec = tween(TRANSITION_DURATION_IN_MILLIS) + ) + }, + popExitTransition = { + slideOutOfContainer( + towards = AnimatedContentTransitionScope.SlideDirection.Right, + animationSpec = tween(TRANSITION_DURATION_IN_MILLIS) + ) + } + ) + ) +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsMainViewModel.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsMainViewModel.kt new file mode 100644 index 0000000000..2718c4adeb --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsMainViewModel.kt @@ -0,0 +1,453 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.entry + +import androidx.compose.runtime.mutableStateOf +import androidx.lifecycle.viewModelScope +import com.navi.base.cache.model.NaviCacheAltSourceEntity +import com.navi.base.cache.model.NaviCacheEntity +import com.navi.base.cache.repository.NaviCacheRepository +import com.navi.base.model.CtaData +import com.navi.base.model.LineItem +import com.navi.common.CommonLibManager +import com.navi.common.constants.FAILED +import com.navi.common.network.models.ErrorMessage +import com.navi.common.network.models.GenericErrorResponse +import com.navi.common.network.models.RepoResult +import com.navi.common.network.models.isSuccess +import com.navi.common.network.models.isSuccessWithData +import com.navi.common.uitron.model.action.CtaAction +import com.navi.common.utils.Constants.WEB_URL +import com.navi.common.utils.NaviApiPoller +import com.navi.common.utils.isValidResponse +import com.navi.common.viewmodel.BaseVM +import com.navi.cycs.CreditIndicatorType +import com.navi.cycs.CycsScreen +import com.navi.cycs.LandingScreenState +import com.navi.cycs.R +import com.navi.cycs.common.model.BottomSheetConfig +import com.navi.cycs.common.model.BottomSheetStateHolder +import com.navi.cycs.common.model.CycsBottomSheetState +import com.navi.cycs.common.model.GetScoreStatus +import com.navi.cycs.common.model.NextActionState +import com.navi.cycs.common.model.ScreenDefinition +import com.navi.cycs.common.model.ScreenDefinitionState +import com.navi.cycs.common.model.WidgetModelDefinition +import com.navi.cycs.common.model.response.GetScoreStatusResponse +import com.navi.cycs.common.model.response.NextAction +import com.navi.cycs.common.utils.getCacheKey +import com.navi.cycs.common.utils.getGsonDeserializer +import com.navi.cycs.common.utils.getGsonSerializer +import com.navi.cycs.common.utils.getScreenName +import com.navi.naviwidgets.utils.SUCCESS +import com.navi.naviwidgets.utils.URL +import com.navi.uitron.model.UiTronResponse +import com.navi.uitron.model.data.UiTronActionData +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject +import kotlin.time.Duration.Companion.seconds +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch + +@HiltViewModel +class CycsMainViewModel +@Inject +constructor( + private val cycsRepository: CycsRepository, + private val naviCacheRepository: NaviCacheRepository, +) : BaseVM() { + + private val _bottomSheetStateHolder = + MutableStateFlow( + BottomSheetStateHolder( + bottomSheetState = CycsBottomSheetState.Hidden, + bottomSheetData = null + ) + ) + val bottomSheetStateHolder = _bottomSheetStateHolder.asStateFlow() + + private val _nextAction = MutableStateFlow(NextActionState.Idle) + val nextAction = _nextAction.asStateFlow() + + private val _getScoreStatus = MutableStateFlow(GetScoreStatus.Idle) + val getScoreStatus = _getScoreStatus.asStateFlow() + + private val _screenDefinitionState = + MutableStateFlow(ScreenDefinitionState.Loading) + val screenDefinitionState = _screenDefinitionState.asStateFlow() + + var currentScreen = mutableStateOf(LandingScreenState.LANDING) + private set + + private val _loaderState = MutableStateFlow(false) + val loaderState = _loaderState.asStateFlow() + + private val naviApiPoller: NaviApiPoller by lazy { + NaviApiPoller(repeatInterval = 5.seconds, numberOfIterations = 12) + } + + fun setCurrentScreen(landingScreenState: LandingScreenState) { + currentScreen.value = landingScreenState + } + + fun setScreenDefinitionState(screenDefinitionState: ScreenDefinitionState) { + _screenDefinitionState.value = screenDefinitionState + } + + fun stopPolling() { + naviApiPoller.stopPolling() + } + + fun getNextAction( + onSuccessActionData: UiTronActionData? = null, + onFailureActionData: UiTronActionData? = null + ) { + viewModelScope.launch(Dispatchers.IO) { + _nextAction.value = NextActionState.Loading + val response = cycsRepository.getNextAction() + _loaderState.value = false + _nextAction.value = + if (response.isSuccessWithData()) { + handleActions(onSuccessActionData) + handleNextAction(response.data?.nextAction) + } else { + handleActions(onFailureActionData) + if (currentScreen.value == LandingScreenState.CONSENT) { + updateBottomSheetState( + CycsBottomSheetState.Visible, + bottomSheetData = + getErrorBottomSheetConfig(response.error, response.errors) + ) + NextActionState.Error(error = null) + } else { + NextActionState.Error( + error = + getErrorUnifiedResponse( + errors = response.errors, + error = response.error + ) + .errorResponse + ) + } + } + } + } + + fun fetchScreen( + screenName: CycsScreen, + hasNotificationPermission: Boolean? = null, + creditIndicator: String? = null, + ntcStatus: String? = null, + ) { + viewModelScope.launch(Dispatchers.IO) { + _screenDefinitionState.value = ScreenDefinitionState.Loading + val response = + naviCacheRepository.getDataOrFetchFromAltSource( + key = getCacheKey(screenName, creditIndicator), + getDataFromAltSource = { + val response = + cycsRepository.fetchForgeScreen( + screenName = getScreenName(screenName), + hasNotificationPermission = hasNotificationPermission, + creditIndicator = creditIndicator, + ntcStatus = ntcStatus, + ) + return@getDataOrFetchFromAltSource if (response.isSuccessWithData()) { + NaviCacheAltSourceEntity( + value = getGsonSerializer().toJson(response.data), + version = 1, + isSuccess = true + ) + } else { + NaviCacheAltSourceEntity(isSuccess = false) + } + } + ) + + response?.let { + try { + _screenDefinitionState.value = + ScreenDefinitionState.Success( + data = + getGsonDeserializer() + .fromJson(it.value, ScreenDefinition::class.java) + ) + } catch (e: Exception) { + _screenDefinitionState.value = ScreenDefinitionState.Error() + } + } + } + } + + fun fetchForgeScreen( + screenName: CycsScreen, + hasNotificationPermission: Boolean? = null, + creditIndicator: String? = null, + ntcStatus: String? = null, + ) { + viewModelScope.launch(Dispatchers.IO) { + _screenDefinitionState.value = ScreenDefinitionState.Loading + + val response = + cycsRepository.fetchForgeScreen( + screenName = getScreenName(screenName), + hasNotificationPermission = hasNotificationPermission, + creditIndicator = creditIndicator, + ntcStatus = ntcStatus, + ) + + _screenDefinitionState.value = + if (response.isSuccessWithData()) { + if (screenName == CycsScreen.SCORE) { + preCacheIslandScreens(hasNotificationPermission = hasNotificationPermission) + } + ScreenDefinitionState.Success(data = response.data as ScreenDefinition) + } else { + ScreenDefinitionState.Error( + error = + getErrorUnifiedResponse( + errors = response.errors, + error = response.error + ) + .errorResponse + ) + } + } + } + + fun postConsent( + onSuccessActionData: UiTronActionData?, + onFailureActionData: UiTronActionData? + ) { + viewModelScope.launch(Dispatchers.IO) { + _loaderState.value = true + val response = cycsRepository.postConsent(true) + + if (response.isSuccess()) { + handleActions(onSuccessActionData) + } else { + _loaderState.value = false + updateBottomSheetState( + CycsBottomSheetState.Visible, + bottomSheetData = getErrorBottomSheetConfig(response.error, response.errors) + ) + handleActions(onFailureActionData) + } + } + } + + fun getWebTokenUrl( + onSuccessActionData: UiTronActionData?, + onFailureActionData: UiTronActionData? + ) { + viewModelScope.launch(Dispatchers.IO) { + _loaderState.value = true + val response = cycsRepository.getWebToken() + _loaderState.value = false + if (response.isSuccessWithData()) { + handleActions(onSuccessActionData) + handleAction( + CtaAction( + ctaData = + CtaData( + url = WEB_URL, + parameters = listOf(LineItem(key = URL, value = response.data?.url)) + ) + ) + ) + } else { + updateBottomSheetState( + CycsBottomSheetState.Visible, + bottomSheetData = getErrorBottomSheetConfig(response.error, response.errors) + ) + handleActions(onFailureActionData) + } + } + } + + fun postScore() { + viewModelScope.launch(Dispatchers.IO) { + _getScoreStatus.value = GetScoreStatus.Loading + val response = cycsRepository.postScore() + + if (response.isSuccess()) { + naviApiPoller + .startPolling(onTimeout = { _getScoreStatus.value = GetScoreStatus.Downtime }) { + cycsRepository.getScoreStatus(response.data?.requestId.orEmpty()) + } + .collect { + try { + val pollingResponse = it as RepoResult + if (pollingResponse.isSuccessWithData()) { + pollingResponse.data?.let { getScoreStatusData -> + if (getScoreStatusData.status == SUCCESS) { + _getScoreStatus.value = + GetScoreStatus.Success( + data = getScoreStatusData.nextAction + ) + } else if (getScoreStatusData.status == FAILED) { + _getScoreStatus.value = GetScoreStatus.Downtime + } + } + } else { + naviApiPoller.stopPolling() + _getScoreStatus.value = + GetScoreStatus.Error( + error = + getErrorUnifiedResponse( + errors = pollingResponse.errors, + error = pollingResponse.error + ) + .errorResponse + ) + } + } catch (exception: Exception) { + naviApiPoller.stopPolling() + _getScoreStatus.value = + GetScoreStatus.Error( + error = + getErrorUnifiedResponse( + errors = response.errors, + error = response.error + ) + .errorResponse + ) + } + } + } else { + _getScoreStatus.value = + GetScoreStatus.Error( + error = + getErrorUnifiedResponse( + errors = response.errors, + error = response.error + ) + .errorResponse + ) + } + } + } + + private fun getErrorBottomSheetConfig( + error: ErrorMessage?, + errors: List? + ): BottomSheetConfig { + val errorConfig = getErrorUnifiedResponse(error = error, errors = errors).errorResponse + return BottomSheetConfig( + iconId = R.drawable.ic_cycs_error_red_gradient, + title = errorConfig?.title, + description = errorConfig?.message, + primaryButtonText = CommonLibManager.application.getString(R.string.cycs_okay_got_it), + onPrimaryButtonClicked = { updateBottomSheetState(CycsBottomSheetState.Hidden) } + ) + } + + private fun getScreenStructureSuccessState(): ScreenDefinition? { + if (_screenDefinitionState.value is ScreenDefinitionState.Success) { + return (_screenDefinitionState.value as ScreenDefinitionState.Success).data + } + return null + } + + fun handleScreenPostRenderActions() { + getScreenStructureSuccessState()?.let { + handleActions(actionData = it.screenStructure?.renderActions?.postRenderAction) + } + } + + private fun preCacheIslandScreens(hasNotificationPermission: Boolean? = null) { + CreditIndicatorType.entries.forEach { + preCacheIslandScreen( + screenName = CycsScreen.INSIGHT, + hasNotificationPermission = hasNotificationPermission, + creditIndicator = it.name, + ) + } + preCacheIslandScreen( + screenName = CycsScreen.TREND, + hasNotificationPermission = hasNotificationPermission, + ) + preCacheIslandScreen( + screenName = CycsScreen.REPORT, + hasNotificationPermission = hasNotificationPermission, + ) + preCacheIslandScreen( + screenName = CycsScreen.ISSUE, + hasNotificationPermission = hasNotificationPermission, + ) + } + + private fun preCacheIslandScreen( + screenName: CycsScreen, + hasNotificationPermission: Boolean? = null, + creditIndicator: String? = null, + ntcStatus: String? = null, + ) { + viewModelScope.launch(Dispatchers.IO) { + val response = + cycsRepository.fetchForgeScreen( + screenName = getScreenName(screenName), + hasNotificationPermission = hasNotificationPermission, + creditIndicator = creditIndicator, + ntcStatus = ntcStatus, + ) + if (response.isValidResponse()) { + naviCacheRepository.save( + NaviCacheEntity( + key = getCacheKey(screenName, creditIndicator), + value = getGsonSerializer().toJson(response.data).orEmpty(), + version = CommonLibManager.buildConfigDetails.appVersionCode.toInt() + ) + ) + } + } + } + + private fun handleNextAction(data: NextAction?): NextActionState { + return data.let { + when (it) { + NextAction.CONSENT -> { + currentScreen.value = LandingScreenState.CONSENT + fetchForgeScreen(CycsScreen.CONSENT) + } + NextAction.SCORE -> { + if (currentScreen.value == LandingScreenState.LANDING) { + currentScreen.value = LandingScreenState.SCORE + } + } + NextAction.PROFILE -> { + if (currentScreen.value == LandingScreenState.LANDING) { + currentScreen.value = LandingScreenState.CONSENT + fetchForgeScreen(CycsScreen.CONSENT) + } else { + currentScreen.value = LandingScreenState.PROFILE + } + } + else -> {} + } + NextActionState.Success(data = it!!) + } + } + + fun updateBottomSheetState( + state: CycsBottomSheetState, + bottomSheetContent: WidgetModelDefinition? = null, + bottomSheetData: BottomSheetConfig? = null + ) { + _bottomSheetStateHolder.update { + BottomSheetStateHolder( + bottomSheetState = state, + bottomSheetUIContent = bottomSheetContent, + bottomSheetData = bottomSheetData + ) + } + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsRepository.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsRepository.kt new file mode 100644 index 0000000000..9b4be900d5 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsRepository.kt @@ -0,0 +1,79 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.entry + +import com.navi.common.model.ModuleNameV2 +import com.navi.common.network.models.RepoResult +import com.navi.common.network.retrofit.ResponseCallback +import com.navi.cycs.CycsConstants.Network.GZIP +import com.navi.cycs.common.model.ScreenDefinition +import com.navi.cycs.common.model.request.ConsentRequest +import com.navi.cycs.common.model.response.GetScoreStatusResponse +import com.navi.cycs.common.model.response.NextActionResponse +import com.navi.cycs.common.model.response.PostScoreResponse +import com.navi.cycs.common.model.response.WebTokenResponse +import com.navi.cycs.network.service.CycsRetrofitService +import javax.inject.Inject + +class CycsRepository @Inject constructor(private val cycsRetrofitService: CycsRetrofitService) : + ResponseCallback() { + + suspend fun fetchForgeScreen( + screenName: String, + hasNotificationPermission: Boolean? = null, + creditIndicator: String? = null, + ntcStatus: String? = null, + ): RepoResult = + apiResponseCallback( + cycsRetrofitService.fetchForgeScreen( + acceptEncoding = GZIP, + xTarget = ModuleNameV2.FORGE.name, + screenName = screenName, + xNotificationPermissionGranted = hasNotificationPermission, + xCreditIndicator = creditIndicator, + xNtcStatus = ntcStatus, + ) + ) + + suspend fun getNextAction(): RepoResult = + apiResponseCallback( + cycsRetrofitService.getNextAction( + xTarget = ModuleNameV2.APP_SHELL.name, + ) + ) + + suspend fun postConsent(consent: Boolean): RepoResult = + apiResponseCallback( + cycsRetrofitService.postConsent( + xTarget = ModuleNameV2.APP_SHELL.name, + consentRequest = ConsentRequest(consent = consent), + ) + ) + + suspend fun postScore(): RepoResult = + apiResponseCallback( + cycsRetrofitService.postScore( + xTarget = ModuleNameV2.APP_SHELL.name, + ) + ) + + suspend fun getScoreStatus(requestId: String): RepoResult = + apiResponseCallback( + cycsRetrofitService.getScoreStatus( + xTarget = ModuleNameV2.APP_SHELL.name, + requestId = requestId, + ) + ) + + suspend fun getWebToken(): RepoResult = + apiResponseCallback( + cycsRetrofitService.getWebTokenUrl( + xTarget = ModuleNameV2.APP_SHELL.name, + ) + ) +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsRouter.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsRouter.kt new file mode 100644 index 0000000000..d420853652 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/entry/CycsRouter.kt @@ -0,0 +1,83 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.entry + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import com.navi.base.deeplink.DeepLinkManager +import com.navi.base.model.CtaData +import com.navi.cycs.CycsConstants.Common.SOURCE_MODULE +import com.navi.cycs.CycsConstants.Common.START_SCREEN_NAME +import com.navi.cycs.CycsScreen +import com.navi.cycs.feature.destinations.DowntimeScreenDestination +import com.navi.cycs.feature.destinations.InsightScreenDestination +import com.navi.cycs.feature.destinations.IssueScreenDestination +import com.navi.cycs.feature.destinations.LandingScreenDestination +import com.navi.cycs.feature.destinations.NtcScreenDestination +import com.navi.cycs.feature.destinations.ReportScreenDestination +import com.navi.cycs.feature.destinations.TrendScreenDestination +import com.ramcosta.composedestinations.spec.Direction + +object CycsRouter { + fun startCycs( + activity: Activity, + sourceModule: String, + ctaData: CtaData = CtaData(), + bundle: Bundle = Bundle(), + finish: Boolean? = false, + needsResult: Boolean? = null, + requestCode: Int? = null, + ) { + val screenName = ctaData.url?.split("/")?.last() + + ctaData.parameters?.forEach { keyValue -> bundle.putString(keyValue.key, keyValue.value) } + + val intent = + Intent(activity, CycsActivity::class.java).apply { + putExtra(SOURCE_MODULE, sourceModule) + putExtra(START_SCREEN_NAME, screenName) + putExtras(bundle) + } + + if (needsResult == true && requestCode != null) { + activity.startActivityForResult(intent, requestCode) + } else { + activity.startActivity(intent) + } + + if (finish == true) { + activity.finish() + } + } + + internal fun getDirectionFromCtaUrl(url: String, bundle: Bundle? = null): Direction { + val screenIdentifier = url.split("/").last() + val destination = + when (screenIdentifier) { + CycsScreen.LANDING.name, + CycsScreen.CONSENT.name, + CycsScreen.SCORE.name -> LandingScreenDestination() + CycsScreen.TREND.name -> TrendScreenDestination() + CycsScreen.INSIGHT.name -> InsightScreenDestination(bundle = bundle) + CycsScreen.REPORT.name -> ReportScreenDestination() + CycsScreen.ISSUE.name -> IssueScreenDestination() + CycsScreen.NTC.name -> NtcScreenDestination() + CycsScreen.DOWNTIME.name -> DowntimeScreenDestination() + else -> LandingScreenDestination() + } + return destination + } + + fun onCtaClick(cycsActivity: CycsActivity, ctaData: CtaData?) { + ctaData?.let { + DeepLinkManager.getDeepLinkListener() + ?.navigateTo(activity = cycsActivity, ctaData = it, finish = false) + } + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/consent/ConsentScreenContent.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/consent/ConsentScreenContent.kt new file mode 100644 index 0000000000..05ba74377f --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/consent/ConsentScreenContent.kt @@ -0,0 +1,166 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.consent + +import androidx.compose.animation.core.LinearOutSlowInEasing +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.tween +import androidx.compose.animation.core.updateTransition +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +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.graphics.Color +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.airbnb.lottie.compose.LottieClipSpec +import com.airbnb.lottie.compose.LottieCompositionSpec +import com.airbnb.lottie.compose.animateLottieCompositionAsState +import com.airbnb.lottie.compose.rememberLottieComposition +import com.navi.base.utils.EMPTY +import com.navi.cycs.CycsConstants.AnimationLabels.CONSENT_SCREEN_CONTENT_TRANSLATION +import com.navi.cycs.CycsConstants.AnimationLabels.CONSENT_SCREEN_CONTENT_TRANSPARENCY +import com.navi.cycs.CycsConstants.AnimationLabels.CONSENT_SCREEN_LOTTIE_TRANSLATION +import com.navi.cycs.R +import com.navi.cycs.common.model.ScreenDefinition +import com.navi.cycs.common.ui.CreditGenericLottie +import com.navi.cycs.common.ui.HandleLoadingState +import com.navi.cycs.common.ui.WidgetRenderer +import com.navi.cycs.entry.CycsMainViewModel + +@Composable +fun ConsentScreenContent(viewModel: CycsMainViewModel, data: ScreenDefinition) { + val animationState = remember { mutableStateOf(false) } + LaunchedEffect(Unit) { animationState.value = true } + + val transition = updateTransition(targetState = animationState.value, label = EMPTY) + val transYLottie = + transition.animateFloat( + transitionSpec = { tween(durationMillis = 450, easing = LinearOutSlowInEasing) }, + label = CONSENT_SCREEN_LOTTIE_TRANSLATION + ) { + if (it) -0.8f else 0f + } + val transYContent = + transition.animateFloat( + transitionSpec = { tween(durationMillis = 450, easing = LinearOutSlowInEasing) }, + label = CONSENT_SCREEN_CONTENT_TRANSLATION + ) { + if (it) 0.4f else 0.6f + } + val alphaContent = + transition.animateFloat( + transitionSpec = { tween(durationMillis = 450, easing = LinearOutSlowInEasing) }, + label = CONSENT_SCREEN_CONTENT_TRANSPARENCY + ) { + if (it) 1f else 0f + } + + val loaderState by viewModel.loaderState.collectAsStateWithLifecycle() + + Box(modifier = Modifier.fillMaxSize()) { + ConsentScreenContent(alphaContent.value, transYContent.value) { + data.screenStructure?.content?.widgets?.forEach { widget -> + WidgetRenderer(widget = widget, viewModel = viewModel) + } + } + ConsentScreenLottie(transYLottie.value) + ConsentScreenTopBar(alphaContent.value) { + data.screenStructure?.header?.let { WidgetRenderer(widget = it, viewModel = viewModel) } + } + ConsentScreenBottomBar(alphaContent.value) { + data.screenStructure?.footer?.let { WidgetRenderer(widget = it, viewModel = viewModel) } + } + } + + HandleLoadingState(loaderState) +} + +@Composable +private fun BoxScope.ConsentScreenLottie(transYLottie: Float) { + val consentCreditMeterLottie by + rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.resize_lottie)) + + val progress by + animateLottieCompositionAsState( + composition = consentCreditMeterLottie, + isPlaying = true, + clipSpec = LottieClipSpec.Progress(min = 0f, max = 1f), + speed = 1f, + reverseOnRepeat = true, + iterations = 1, + ) + CreditGenericLottie( + modifier = + Modifier.align(Alignment.Center) + .graphicsLayer { translationY = size.height.times(transYLottie) } + .fillMaxWidth(), + lottieComposition = consentCreditMeterLottie, + checkAtProgress = 1f, + progress = { progress } + ) {} +} + +@Composable +private fun BoxScope.ConsentScreenContent( + alphaContent: Float, + transYContent: Float, + mainContent: @Composable () -> Unit +) { + Column( + Modifier.fillMaxSize().align(Alignment.BottomCenter).graphicsLayer { + alpha = alphaContent + translationY = size.height.times(transYContent) + } + ) { + mainContent() + } +} + +@Composable +private fun BoxScope.ConsentScreenBottomBar( + alphaContent: Float, + bottomBarContent: @Composable () -> Unit +) { + Row( + Modifier.fillMaxWidth().graphicsLayer { alpha = alphaContent }.align(Alignment.BottomCenter) + ) { + bottomBarContent() + } +} + +@Composable +private fun BoxScope.ConsentScreenTopBar( + alphaContent: Float, + topBarContent: @Composable () -> Unit +) { + Row( + Modifier.fillMaxWidth() + .height(56.dp) + .background(Color.White) + .align(Alignment.TopCenter) + .graphicsLayer { alpha = alphaContent }, + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, + ) { + topBarContent() + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/downtime/DowntimeScreen.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/downtime/DowntimeScreen.kt new file mode 100644 index 0000000000..64e8f9660a --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/downtime/DowntimeScreen.kt @@ -0,0 +1,54 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.downtime + +import androidx.activity.compose.BackHandler +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.hilt.navigation.compose.hiltViewModel +import com.navi.cycs.CycsAnalytics +import com.navi.cycs.CycsScreen +import com.navi.cycs.common.handler.InitActionsHandler +import com.navi.cycs.common.ui.CycsBottomSheet +import com.navi.cycs.common.ui.CycsScreenRenderer +import com.navi.cycs.entry.CycsActivity +import com.navi.cycs.entry.CycsMainViewModel +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@Destination +@Composable +fun DowntimeScreen( + cycsActivity: CycsActivity, + navigator: DestinationsNavigator, + viewModel: CycsMainViewModel = hiltViewModel(), + cycsAnalytics: CycsAnalytics.Downtime = CycsAnalytics.INSTANCE.Downtime(), +) { + + CycsScreenRenderer(viewModel = viewModel, screen = CycsScreen.DOWNTIME) { + viewModel.fetchForgeScreen( + screenName = CycsScreen.DOWNTIME, + hasNotificationPermission = cycsActivity.hasNotificationPermission() + ) + } + + LaunchedEffect(Unit) { cycsAnalytics.onLanded() } + + LaunchedEffect(Unit) { + viewModel.fetchForgeScreen( + screenName = CycsScreen.DOWNTIME, + hasNotificationPermission = cycsActivity.hasNotificationPermission() + ) + } + + InitActionsHandler(viewModel = viewModel, activity = cycsActivity, navigator = navigator) + + BackHandler { cycsActivity.finish() } + + CycsBottomSheet(viewModel = viewModel) +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/insight/InsightScreen.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/insight/InsightScreen.kt new file mode 100644 index 0000000000..aee6c2ab1f --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/insight/InsightScreen.kt @@ -0,0 +1,56 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.insight + +import android.os.Bundle +import androidx.activity.compose.BackHandler +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.hilt.navigation.compose.hiltViewModel +import com.navi.cycs.CycsAnalytics +import com.navi.cycs.CycsConstants.CREDIT_INDICATOR +import com.navi.cycs.CycsScreen.INSIGHT +import com.navi.cycs.common.handler.InitActionsHandler +import com.navi.cycs.common.ui.CycsBottomSheet +import com.navi.cycs.common.ui.CycsScreenRenderer +import com.navi.cycs.entry.CycsActivity +import com.navi.cycs.entry.CycsMainViewModel +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@Destination +@Composable +fun InsightScreen( + cycsActivity: CycsActivity, + navigator: DestinationsNavigator, + viewModel: CycsMainViewModel = hiltViewModel(), + cycsAnalytics: CycsAnalytics.Insight = CycsAnalytics.INSTANCE.Insight(), + bundle: Bundle? = null +) { + + CycsScreenRenderer(viewModel = viewModel, screen = INSIGHT) { + val creditIndicator = bundle?.getString(CREDIT_INDICATOR) + viewModel.fetchScreen(screenName = INSIGHT, creditIndicator = creditIndicator) + } + + LaunchedEffect(Unit) { + val creditIndicator = bundle?.getString(CREDIT_INDICATOR).orEmpty() + cycsAnalytics.onLanded(insightName = creditIndicator) + } + + LaunchedEffect(Unit) { + val creditIndicator = bundle?.getString(CREDIT_INDICATOR) + viewModel.fetchScreen(screenName = INSIGHT, creditIndicator = creditIndicator) + } + + InitActionsHandler(viewModel = viewModel, activity = cycsActivity, navigator = navigator) + + BackHandler { navigator.navigateUp() } + + CycsBottomSheet(viewModel = viewModel) +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/insight/InsightShimmer.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/insight/InsightShimmer.kt new file mode 100644 index 0000000000..120b8b88cd --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/insight/InsightShimmer.kt @@ -0,0 +1,49 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.insight + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.navi.cycs.common.ui.CycsFullWidthShimmerBox +import com.navi.cycs.common.ui.CycsShimmerBox + +@Composable +fun InsightShimmer() { + Column(modifier = Modifier.fillMaxWidth().padding(start = 16.dp, end = 16.dp)) { + Spacer(modifier = Modifier.height(88.dp)) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Column(horizontalAlignment = Alignment.Start) { + CycsShimmerBox(width = 90.dp, height = 20.dp) + Spacer(modifier = Modifier.height(8.dp)) + CycsShimmerBox(width = 186.dp, height = 28.dp) + } + CycsShimmerBox(width = 68.dp, height = 68.dp) + } + Spacer(modifier = Modifier.height(24.dp)) + CycsFullWidthShimmerBox(height = 76.dp) + Spacer(modifier = Modifier.height(16.dp)) + CycsFullWidthShimmerBox(height = 76.dp) + Spacer(modifier = Modifier.height(32.dp)) + CycsShimmerBox(width = 90.dp, height = 24.dp) + Spacer(modifier = Modifier.height(16.dp)) + CycsFullWidthShimmerBox(height = 98.dp) + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/issue/IssueScreen.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/issue/IssueScreen.kt new file mode 100644 index 0000000000..afe9331638 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/issue/IssueScreen.kt @@ -0,0 +1,46 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.issue + +import androidx.activity.compose.BackHandler +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.hilt.navigation.compose.hiltViewModel +import com.navi.cycs.CycsAnalytics +import com.navi.cycs.CycsScreen +import com.navi.cycs.common.handler.InitActionsHandler +import com.navi.cycs.common.ui.CycsBottomSheet +import com.navi.cycs.common.ui.CycsScreenRenderer +import com.navi.cycs.entry.CycsActivity +import com.navi.cycs.entry.CycsMainViewModel +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@Destination +@Composable +fun IssueScreen( + cycsActivity: CycsActivity, + navigator: DestinationsNavigator, + viewModel: CycsMainViewModel = hiltViewModel(), + cycsAnalytics: CycsAnalytics.Issue = CycsAnalytics.INSTANCE.Issue() +) { + + CycsScreenRenderer(viewModel = viewModel, screen = CycsScreen.ISSUE) { + viewModel.fetchScreen(screenName = CycsScreen.ISSUE) + } + + LaunchedEffect(Unit) { cycsAnalytics.onLanded() } + + LaunchedEffect(Unit) { viewModel.fetchScreen(screenName = CycsScreen.ISSUE) } + + InitActionsHandler(viewModel = viewModel, activity = cycsActivity, navigator = navigator) + + BackHandler { navigator.navigateUp() } + + CycsBottomSheet(viewModel = viewModel) +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/issue/IssueShimmer.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/issue/IssueShimmer.kt new file mode 100644 index 0000000000..94c7a77e83 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/issue/IssueShimmer.kt @@ -0,0 +1,33 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.issue + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.navi.cycs.common.ui.CycsFullWidthShimmerBox +import com.navi.cycs.common.ui.CycsShimmerBox + +@Composable +fun IssueShimmer() { + Column(modifier = Modifier.fillMaxWidth().padding(start = 16.dp, end = 16.dp)) { + Spacer(modifier = Modifier.height(72.dp)) + CycsShimmerBox(width = 228.dp, height = 34.dp) + Spacer(modifier = Modifier.height(4.dp)) + CycsShimmerBox(width = 272.dp, height = 18.dp) + Spacer(modifier = Modifier.height(50.dp)) + CycsShimmerBox(width = 156.dp, height = 22.dp) + Spacer(modifier = Modifier.height(8.dp)) + CycsFullWidthShimmerBox(height = 50.dp) + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/landing/LandingScreen.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/landing/LandingScreen.kt new file mode 100644 index 0000000000..30e5c84b25 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/landing/LandingScreen.kt @@ -0,0 +1,252 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.landing + +import androidx.activity.compose.BackHandler +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExperimentalSharedTransitionApi +import androidx.compose.animation.SharedTransitionLayout +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeOut +import androidx.compose.animation.togetherWith +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.navi.base.utils.orFalse +import com.navi.cycs.CycsAnalytics +import com.navi.cycs.CycsConstants.AnimationLabels.SCREEN_TO_SHOW +import com.navi.cycs.CycsConstants.Common.SKIP_ANIMATION +import com.navi.cycs.CycsScreen +import com.navi.cycs.LandingScreenState +import com.navi.cycs.common.handler.CycsMqttEventHandler +import com.navi.cycs.common.handler.InitActionsHandler +import com.navi.cycs.common.model.BottomSheetStateHolder +import com.navi.cycs.common.model.CycsBottomSheetState +import com.navi.cycs.common.model.ScreenDefinitionState +import com.navi.cycs.common.ui.CycsBottomSheet +import com.navi.cycs.common.ui.CycsFullScreenErrorComposeView +import com.navi.cycs.common.utils.getLandingScreenBackButtonBottomSheetConfig +import com.navi.cycs.common.utils.navigateToOneProfile +import com.navi.cycs.entry.CycsActivity +import com.navi.cycs.entry.CycsMainViewModel +import com.navi.cycs.feature.consent.ConsentScreenContent +import com.navi.cycs.feature.score.ScoreScreenComposable +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.annotation.RootNavGraph +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@RootNavGraph(start = true) +@Destination +@Composable +fun LandingScreen( + cycsActivity: CycsActivity, + navigator: DestinationsNavigator, + viewModel: CycsMainViewModel = hiltViewModel(), + cycsAnalytics: CycsAnalytics = CycsAnalytics.INSTANCE +) { + val screenDefinitionState = viewModel.screenDefinitionState.collectAsStateWithLifecycle().value + val bottomSheetStateHolder = + viewModel.bottomSheetStateHolder.collectAsStateWithLifecycle().value + val nextActionState = viewModel.nextAction.collectAsStateWithLifecycle().value + val getScoreStatusState = viewModel.getScoreStatus.collectAsStateWithLifecycle().value + val cycsMqttEvent = + CycsMqttEventHandler.INSTANCE.cycsMqttEvent + .collectAsStateWithLifecycle(initialValue = null) + .value + val hasLoadingEnded = remember { + mutableStateOf(viewModel.handle.get(SKIP_ANIMATION).orFalse()) + } + LaunchedEffect(key1 = viewModel.currentScreen.value) { + if (viewModel.currentScreen.value == LandingScreenState.LANDING) { + cycsAnalytics.Landing().onLanded() + hasLoadingEnded.value = false + viewModel.getNextAction() + } else if ( + viewModel.currentScreen.value == LandingScreenState.SCORE && + viewModel.screenDefinitionState.value is ScreenDefinitionState.Loading + ) { + cycsAnalytics.Score().onLoading() + viewModel.postScore() + } + } + + LaunchedEffect(Unit) { cycsActivity.setCycsVM(viewModel) } + + HandleNextAction( + nextActionState = nextActionState, + hasLoadingEnded = hasLoadingEnded, + currentScreenState = viewModel.currentScreen, + navigator = navigator, + navigateToOneProfile = { navigateToOneProfile(activity = cycsActivity) }, + onErrorRetry = { + hasLoadingEnded.value = false + viewModel.getNextAction() + } + ) + + HandleScoreStatus( + getScoreStatusState = getScoreStatusState, + hasLoadingEnded = hasLoadingEnded, + currentScreenState = viewModel.currentScreen, + screenDefinitionState = screenDefinitionState, + navigator = navigator, + fetchForgeScreen = { cycsScreen: CycsScreen -> + viewModel.fetchForgeScreen( + screenName = cycsScreen, + hasNotificationPermission = cycsActivity.hasNotificationPermission() + ) + }, + onErrorRetry = { + hasLoadingEnded.value = false + viewModel.postScore() + }, + stopPolling = { viewModel.stopPolling() } + ) + + HandleCycsMqttEvent( + cycsMqttEvent = cycsMqttEvent, + currentScreenState = viewModel.currentScreen, + screenDefinitionState = screenDefinitionState, + navigator = navigator, + fetchForgeScreen = { cycsScreen: CycsScreen -> + viewModel.fetchForgeScreen( + screenName = cycsScreen, + hasNotificationPermission = cycsActivity.hasNotificationPermission() + ) + }, + stopPolling = { viewModel.stopPolling() } + ) + + BackHandler { + if (hasLoadingEnded.value.not()) { + viewModel.updateBottomSheetState( + state = CycsBottomSheetState.Visible, + bottomSheetContent = null, + bottomSheetData = + getLandingScreenBackButtonBottomSheetConfig( + viewModel = viewModel, + cycsActivity = cycsActivity + ) + ) + } else { + cycsActivity.finish() + } + } + + InitActionsHandler(viewModel = viewModel, activity = cycsActivity, navigator = navigator) + + CycsBottomSheet(viewModel = viewModel) + + ScreenToShow( + viewModel = viewModel, + screenName = viewModel.currentScreen.value, + screenDefinitionState = screenDefinitionState, + bottomSheetState = bottomSheetStateHolder, + hasLoadingEnded = hasLoadingEnded, + hasNotificationPermission = cycsActivity.hasNotificationPermission(), + ) +} + +@OptIn(ExperimentalSharedTransitionApi::class) +@Composable +private fun ScreenToShow( + viewModel: CycsMainViewModel, + screenName: LandingScreenState, + screenDefinitionState: ScreenDefinitionState, + bottomSheetState: BottomSheetStateHolder, + hasLoadingEnded: MutableState, + hasNotificationPermission: Boolean, + cycsAnalytics: CycsAnalytics = CycsAnalytics.INSTANCE +) { + Box(Modifier.fillMaxSize()) { + SharedTransitionLayout { + AnimatedContent( + transitionSpec = { EnterTransition.None togetherWith fadeOut(tween(10)) }, + targetState = hasLoadingEnded.value, + label = SCREEN_TO_SHOW + ) { targetState -> + when (targetState) { + false -> { + Loader( + isReadyToStopLoader = { + isReadyToStopLoader(screenDefinitionState, bottomSheetState) + }, + sharedTransitionScope = this@SharedTransitionLayout, + animatedVisibilityScope = this@AnimatedContent, + ) { + hasLoadingEnded.value = it + } + } + true -> { + when (screenDefinitionState) { + is ScreenDefinitionState.Success -> { + when (screenName) { + LandingScreenState.CONSENT, + LandingScreenState.PROFILE -> { + LaunchedEffect(Unit) { cycsAnalytics.Consent().onLanded() } + ConsentScreenContent( + viewModel = viewModel, + data = screenDefinitionState.data + ) + } + LandingScreenState.SCORE -> { + LaunchedEffect(Unit) { cycsAnalytics.Score().onLanded() } + ScoreScreenComposable( + viewModel = viewModel, + data = screenDefinitionState.data, + sharedTransitionScope = this@SharedTransitionLayout, + animatedVisibilityScope = this@AnimatedContent + ) + } + else -> {} + } + } + is ScreenDefinitionState.Error -> { + CycsFullScreenErrorComposeView( + error = screenDefinitionState.error + ) { + if (viewModel.currentScreen.value == LandingScreenState.SCORE) { + hasLoadingEnded.value = false + viewModel.fetchForgeScreen( + screenName = CycsScreen.SCORE, + hasNotificationPermission = hasNotificationPermission + ) + } else { + hasLoadingEnded.value = false + viewModel.fetchForgeScreen(screenName = CycsScreen.CONSENT) + } + } + } + else -> {} + } + } + } + } + } + } +} + +private fun isReadyToStopLoader( + screenDefinitionState: ScreenDefinitionState, + bottomSheetState: BottomSheetStateHolder, +): Boolean { + val isLoadingPhaseCompleted = + (screenDefinitionState is ScreenDefinitionState.Success) || + (screenDefinitionState is ScreenDefinitionState.Error) + val isBottomSheetHidden = bottomSheetState.bottomSheetState == CycsBottomSheetState.Hidden + + return isLoadingPhaseCompleted && isBottomSheetHidden +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/landing/LandingScreenHelper.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/landing/LandingScreenHelper.kt new file mode 100644 index 0000000000..52a2a37235 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/landing/LandingScreenHelper.kt @@ -0,0 +1,169 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.landing + +import android.os.Bundle +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.State +import com.navi.cycs.CycsConstants.Mqtt.FAILED +import com.navi.cycs.CycsConstants.Mqtt.SUCCESS +import com.navi.cycs.CycsConstants.NTC_STATUS +import com.navi.cycs.CycsScreen +import com.navi.cycs.LandingScreenState +import com.navi.cycs.NtcStatus +import com.navi.cycs.common.model.GetScoreStatus +import com.navi.cycs.common.model.NextActionState +import com.navi.cycs.common.model.ScreenDefinitionState +import com.navi.cycs.common.model.response.CycsMqttEvent +import com.navi.cycs.common.model.response.NextAction +import com.navi.cycs.common.model.response.NextScreen +import com.navi.cycs.common.model.response.NextScreen.DROP_OFF +import com.navi.cycs.common.model.response.NextScreen.NO_HISTORY +import com.navi.cycs.common.model.response.NextScreen.NO_HIT +import com.navi.cycs.common.model.response.NextScreen.SCORE +import com.navi.cycs.common.ui.CycsFullScreenErrorComposeView +import com.navi.cycs.feature.destinations.DowntimeScreenDestination +import com.navi.cycs.feature.destinations.LandingScreenDestination +import com.navi.cycs.feature.destinations.NtcScreenDestination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@Composable +fun HandleNextAction( + nextActionState: NextActionState, + hasLoadingEnded: MutableState, + currentScreenState: State, + navigator: DestinationsNavigator, + navigateToOneProfile: () -> Unit, + onErrorRetry: () -> Unit +) { + when (nextActionState) { + is NextActionState.Error -> { + nextActionState.error?.let { + hasLoadingEnded.value = true + CycsFullScreenErrorComposeView(error = it, onRetryClick = onErrorRetry) + } + } + is NextActionState.Success -> { + nextActionState.data.let { + when (it) { + NextAction.SCORE -> { + if (currentScreenState.value == LandingScreenState.CONSENT) { + navigator.navigate(direction = LandingScreenDestination()) + } + } + NextAction.PROFILE -> { + if (currentScreenState.value == LandingScreenState.PROFILE) { + navigateToOneProfile() + } + } + else -> {} + } + } + } + else -> {} + } +} + +@Composable +fun HandleScoreStatus( + getScoreStatusState: GetScoreStatus, + hasLoadingEnded: MutableState, + currentScreenState: MutableState, + screenDefinitionState: ScreenDefinitionState, + navigator: DestinationsNavigator, + fetchForgeScreen: (CycsScreen) -> Unit, + onErrorRetry: () -> Unit, + stopPolling: () -> Unit +) { + when (getScoreStatusState) { + is GetScoreStatus.Error -> { + getScoreStatusState.error?.let { + hasLoadingEnded.value = true + CycsFullScreenErrorComposeView(error = it, onRetryClick = onErrorRetry) + } + } + is GetScoreStatus.Success -> { + navigateToNextScreen( + nextScreen = getScoreStatusState.data, + currentScreenState = currentScreenState, + screenDefinitionState = screenDefinitionState, + navigator = navigator, + fetchForgeScreen = fetchForgeScreen, + stopPolling = stopPolling + ) + } + is GetScoreStatus.Downtime -> { + stopPolling() + navigator.navigate(direction = DowntimeScreenDestination()) + } + else -> {} + } +} + +@Composable +fun HandleCycsMqttEvent( + cycsMqttEvent: CycsMqttEvent?, + currentScreenState: MutableState, + screenDefinitionState: ScreenDefinitionState, + navigator: DestinationsNavigator, + fetchForgeScreen: (CycsScreen) -> Unit, + stopPolling: () -> Unit +) { + LaunchedEffect(key1 = cycsMqttEvent) { + if (cycsMqttEvent?.status == SUCCESS) { + navigateToNextScreen( + nextScreen = cycsMqttEvent.nextAction, + currentScreenState = currentScreenState, + screenDefinitionState = screenDefinitionState, + navigator = navigator, + fetchForgeScreen = fetchForgeScreen, + stopPolling = stopPolling + ) + } else if (cycsMqttEvent?.status == FAILED) { + stopPolling() + navigator.navigate(direction = DowntimeScreenDestination()) + } + } +} + +fun navigateToNextScreen( + nextScreen: NextScreen?, + currentScreenState: MutableState, + screenDefinitionState: ScreenDefinitionState, + navigator: DestinationsNavigator, + fetchForgeScreen: (CycsScreen) -> Unit, + stopPolling: () -> Unit +) { + when (nextScreen) { + SCORE -> { + stopPolling() + if (screenDefinitionState is ScreenDefinitionState.Loading) { + currentScreenState.value = LandingScreenState.SCORE + fetchForgeScreen(CycsScreen.SCORE) + } + } + NO_HISTORY -> { + stopPolling() + val bundle = Bundle().apply { putString(NTC_STATUS, NtcStatus.NO_HISTORY.name) } + navigator.navigate(direction = NtcScreenDestination(bundle = bundle)) + } + NO_HIT -> { + stopPolling() + val bundle = Bundle().apply { putString(NTC_STATUS, NtcStatus.NO_HIT.name) } + navigator.navigate(direction = NtcScreenDestination(bundle)) + } + DROP_OFF -> { + stopPolling() + val bundle = Bundle().apply { putString(NTC_STATUS, NtcStatus.DROP_OFF.name) } + navigator.navigate(direction = NtcScreenDestination(bundle)) + } + else -> {} + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/landing/Loader.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/landing/Loader.kt new file mode 100644 index 0000000000..6aef1db8d4 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/landing/Loader.kt @@ -0,0 +1,190 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.landing + +import androidx.compose.animation.AnimatedVisibilityScope +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.ExperimentalSharedTransitionApi +import androidx.compose.animation.SharedTransitionScope +import androidx.compose.animation.fadeOut +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +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.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.airbnb.lottie.compose.LottieClipSpec +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.navi.cycs.CycsConstants.LottieKey.SHARED_LOTTIE_LOADER_KEY +import com.navi.cycs.CycsConstants.LottieKey.SHARED_LOTTIE_METER_KEY +import com.navi.cycs.R +import com.navi.cycs.common.ui.CreditGenericLottie +import com.navi.cycs.common.ui.creditBoundsTransform +import com.navi.cycs.theme.CycsColor +import com.navi.design.font.FontWeightEnum +import com.navi.design.theme.getFontWeight +import com.navi.design.theme.ttComposeFontFamily +import com.navi.naviwidgets.extensions.NaviText + +@OptIn(ExperimentalSharedTransitionApi::class) +@Composable +fun Loader( + sharedTransitionScope: SharedTransitionScope, + animatedVisibilityScope: AnimatedVisibilityScope, + isReadyToStopLoader: () -> Boolean, + hasLoadingEnded: (Boolean) -> Unit, +) { + var creditMeterCallback by remember { mutableStateOf(false) } + var creditLoaderCallback by remember { mutableStateOf(false) } + if (creditMeterCallback and creditLoaderCallback) { + hasLoadingEnded(true) + } + + Box(Modifier.fillMaxSize()) { + Box(Modifier.align(Alignment.Center), contentAlignment = Alignment.BottomCenter) { + with(sharedTransitionScope) { + LoaderScreenMeterLottie( + isReadyToStopLoader = isReadyToStopLoader, + animatedVisibilityScope = animatedVisibilityScope + ) { + creditMeterCallback = it + } + LoaderScreenLottie(isReadyToStopLoader, animatedVisibilityScope) { + creditLoaderCallback = it + } + } + } + Row( + Modifier.align(Alignment.TopCenter) + .fillMaxWidth() + .height(56.dp) + .background(Color.White), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, + ) { + NaviText( + text = stringResource(id = R.string.cycs_cibil_score), + color = CycsColor.textPrimary, + fontSize = 14.sp, + fontFamily = ttComposeFontFamily, + fontWeight = getFontWeight(FontWeightEnum.NAVI_BODY_REGULAR), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + textAlign = TextAlign.Center + ) + } + Image( + modifier = + Modifier.align(Alignment.BottomCenter) + .padding(horizontal = 16.dp, vertical = 32.dp) + .fillMaxWidth() + .height(18.dp), + painter = painterResource(id = R.drawable.ic_cycs_powered_by_navi_finserv_cibil), + contentDescription = null, + alignment = Alignment.Center, + ) + } +} + +@OptIn(ExperimentalSharedTransitionApi::class) +@Composable +private fun SharedTransitionScope.LoaderScreenLottie( + isReadyToStopLoader: () -> Boolean, + animatedVisibilityScope: AnimatedVisibilityScope, + creditLoaderCallback: (Boolean) -> Unit +) { + val creditLoaderLottie by + rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.landing_credit_loader)) + val loaderLottieProgress by + animateLottieCompositionAsState( + composition = creditLoaderLottie, + isPlaying = true, + clipSpec = + LottieClipSpec.Progress(min = 0f, max = if (isReadyToStopLoader()) 1f else 0.5f), + speed = 1f, + reverseOnRepeat = true, + iterations = if (isReadyToStopLoader()) 1 else LottieConstants.IterateForever, + ) + CreditGenericLottie( + modifier = + Modifier.size(48.dp) + .sharedBounds( + rememberSharedContentState(SHARED_LOTTIE_LOADER_KEY), + animatedVisibilityScope = animatedVisibilityScope, + boundsTransform = creditBoundsTransform, + exit = fadeOut() + ), + lottieComposition = creditLoaderLottie, + checkAtProgress = 1f, + progress = { loaderLottieProgress }, + ) { + creditLoaderCallback(it) + } +} + +@OptIn(ExperimentalSharedTransitionApi::class) +@Composable +private fun SharedTransitionScope.LoaderScreenMeterLottie( + animatedVisibilityScope: AnimatedVisibilityScope, + isReadyToStopLoader: () -> Boolean, + creditMeterCallback: (Boolean) -> Unit +) { + val creditMeterLottie by + rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.landing_credit_meter)) + val meterLottieProgress by + animateLottieCompositionAsState( + composition = creditMeterLottie, + isPlaying = true, + clipSpec = + LottieClipSpec.Progress( + min = 0f, + max = if (isReadyToStopLoader()) 0.67f else 0.33f + ), + speed = 1f, + reverseOnRepeat = true, + iterations = if (isReadyToStopLoader()) 1 else LottieConstants.IterateForever, + ) + CreditGenericLottie( + modifier = + Modifier.width(255.dp) + .height(137.dp) + .sharedBounds( + rememberSharedContentState(SHARED_LOTTIE_METER_KEY), + animatedVisibilityScope = animatedVisibilityScope, + boundsTransform = creditBoundsTransform, + exit = ExitTransition.None + ), + lottieComposition = creditMeterLottie, + checkAtProgress = 0.67f, + progress = { meterLottieProgress } + ) { + creditMeterCallback(it) + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/ntc/NtcScreen.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/ntc/NtcScreen.kt new file mode 100644 index 0000000000..2b0f479034 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/ntc/NtcScreen.kt @@ -0,0 +1,62 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.ntc + +import android.os.Bundle +import androidx.activity.compose.BackHandler +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.navi.cycs.CycsAnalytics +import com.navi.cycs.CycsConstants.NTC_STATUS +import com.navi.cycs.CycsScreen.NTC +import com.navi.cycs.common.handler.InitActionsHandler +import com.navi.cycs.common.ui.CycsBottomSheet +import com.navi.cycs.common.ui.CycsScreenRenderer +import com.navi.cycs.common.ui.HandleLoadingState +import com.navi.cycs.entry.CycsActivity +import com.navi.cycs.entry.CycsMainViewModel +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@Destination +@Composable +fun NtcScreen( + cycsActivity: CycsActivity, + navigator: DestinationsNavigator, + viewModel: CycsMainViewModel = hiltViewModel(), + cycsAnalytics: CycsAnalytics.Ntc = CycsAnalytics.INSTANCE.Ntc(), + bundle: Bundle? = null +) { + val loaderState by viewModel.loaderState.collectAsStateWithLifecycle() + + CycsScreenRenderer(viewModel = viewModel, screen = NTC) { + val ntcStatus = bundle?.getString(NTC_STATUS) + viewModel.fetchForgeScreen(screenName = NTC, ntcStatus = ntcStatus) + } + + LaunchedEffect(Unit) { + val ntcStatus = bundle?.getString(NTC_STATUS).orEmpty() + cycsAnalytics.onLanded(ntcStatus) + } + + LaunchedEffect(Unit) { + val ntcStatus = bundle?.getString(NTC_STATUS) + viewModel.fetchForgeScreen(screenName = NTC, ntcStatus = ntcStatus) + } + + InitActionsHandler(viewModel = viewModel, activity = cycsActivity, navigator = navigator) + + BackHandler { cycsActivity.finish() } + + CycsBottomSheet(viewModel = viewModel) + + HandleLoadingState(loaderState) +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/report/ReportScreen.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/report/ReportScreen.kt new file mode 100644 index 0000000000..7cf546ab48 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/report/ReportScreen.kt @@ -0,0 +1,52 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.report + +import androidx.activity.compose.BackHandler +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.navi.cycs.CycsAnalytics +import com.navi.cycs.CycsScreen +import com.navi.cycs.common.handler.InitActionsHandler +import com.navi.cycs.common.ui.CycsBottomSheet +import com.navi.cycs.common.ui.CycsScreenRenderer +import com.navi.cycs.common.ui.HandleLoadingState +import com.navi.cycs.entry.CycsActivity +import com.navi.cycs.entry.CycsMainViewModel +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@Destination +@Composable +fun ReportScreen( + cycsActivity: CycsActivity, + navigator: DestinationsNavigator, + viewModel: CycsMainViewModel = hiltViewModel(), + cycsAnalytics: CycsAnalytics.Report = CycsAnalytics.INSTANCE.Report(), +) { + val loaderState by viewModel.loaderState.collectAsStateWithLifecycle() + + CycsScreenRenderer(viewModel = viewModel, screen = CycsScreen.REPORT) { + viewModel.fetchScreen(screenName = CycsScreen.REPORT) + } + + LaunchedEffect(Unit) { cycsAnalytics.onLanded() } + + LaunchedEffect(Unit) { viewModel.fetchScreen(screenName = CycsScreen.REPORT) } + + InitActionsHandler(viewModel = viewModel, activity = cycsActivity, navigator = navigator) + + BackHandler { navigator.navigateUp() } + + CycsBottomSheet(viewModel = viewModel) + + HandleLoadingState(loaderState) +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/report/ReportShimmer.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/report/ReportShimmer.kt new file mode 100644 index 0000000000..2826c335bb --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/report/ReportShimmer.kt @@ -0,0 +1,38 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.report + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.navi.cycs.common.ui.CycsFullWidthShimmerBox +import com.navi.cycs.common.ui.CycsShimmerBox + +@Composable +fun ReportShimmer() { + Column(modifier = Modifier.fillMaxWidth().padding(start = 16.dp, end = 16.dp)) { + Spacer(modifier = Modifier.height(88.dp)) + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) { + CycsShimmerBox(width = 130.dp, height = 34.dp) + CycsShimmerBox(width = 104.dp, height = 34.dp) + } + Spacer(modifier = Modifier.height(50.dp)) + CycsShimmerBox(width = 100.dp, height = 24.dp) + Spacer(modifier = Modifier.height(4.dp)) + CycsShimmerBox(width = 154.dp, height = 18.dp) + Spacer(modifier = Modifier.height(16.dp)) + CycsFullWidthShimmerBox(height = 380.dp) + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/score/ScoreScreenComposable.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/score/ScoreScreenComposable.kt new file mode 100644 index 0000000000..4d45306dfc --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/score/ScoreScreenComposable.kt @@ -0,0 +1,333 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.score + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.AnimatedVisibilityScope +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.ExperimentalSharedTransitionApi +import androidx.compose.animation.SharedTransitionScope +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.core.EaseInOutQuart +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.LinearOutSlowInEasing +import androidx.compose.animation.core.MutableTransitionState +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.slideInVertically +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.SideEffect +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.graphics.Color +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.unit.dp +import com.airbnb.lottie.compose.LottieClipSpec +import com.airbnb.lottie.compose.LottieCompositionSpec +import com.airbnb.lottie.compose.animateLottieCompositionAsState +import com.airbnb.lottie.compose.rememberLottieComposition +import com.navi.base.utils.orFalse +import com.navi.cycs.CycsConstants.ANIMATED_WIDGET_NAME +import com.navi.cycs.CycsConstants.AnimationLabels.SCORE_ANIMATION +import com.navi.cycs.CycsConstants.AnimationLabels.SCORE_SECTION_BACKGROUND_COLOR_ANIMATION +import com.navi.cycs.CycsConstants.Common.SKIP_ANIMATION +import com.navi.cycs.CycsConstants.LottieKey.SHARED_LOTTIE_LOADER_KEY +import com.navi.cycs.CycsConstants.LottieKey.SHARED_LOTTIE_METER_KEY +import com.navi.cycs.R +import com.navi.cycs.common.model.ScreenDefinition +import com.navi.cycs.common.ui.CreditGenericLottie +import com.navi.cycs.common.ui.WidgetRenderer +import com.navi.cycs.common.ui.creditBoundsTransform +import com.navi.cycs.common.utils.enableScrollOnCondition +import com.navi.cycs.common.utils.getCreditScoreData +import com.navi.cycs.entry.CycsMainViewModel + +@OptIn(ExperimentalSharedTransitionApi::class) +@Composable +fun ScoreScreenComposable( + viewModel: CycsMainViewModel, + data: ScreenDefinition, + sharedTransitionScope: SharedTransitionScope, + animatedVisibilityScope: AnimatedVisibilityScope, +) { + val creditData = remember { getCreditScoreData(data) } + val skipAnimation by remember { + mutableStateOf(viewModel.handle.get(SKIP_ANIMATION).orFalse()) + } + Column(Modifier.fillMaxSize()) { + ScoreScreenHeader( + headerContent = { + WidgetRenderer(widget = data.screenStructure?.header, viewModel = viewModel) + } + ) + ScoreScreenContent( + scoreSectionWidgets = { + // Marks the completion of the scoreScreen to skip the animation on back press + SideEffect { viewModel.handle[SKIP_ANIMATION] = true } + data.screenStructure + ?.content + ?.widgets + ?.filter { widgetModelDefinition -> + widgetModelDefinition.widgetName == ANIMATED_WIDGET_NAME + } + ?.forEach { widget -> WidgetRenderer(widget = widget, viewModel = viewModel) } + }, + scoreMainContent = { + data.screenStructure + ?.content + ?.widgets + ?.filter { widgetModelDefinition -> + widgetModelDefinition.widgetName != ANIMATED_WIDGET_NAME + } + ?.forEach { widget -> WidgetRenderer(widget = widget, viewModel = viewModel) } + }, + skipAnimation = skipAnimation, + creditData = creditData, + sharedTransitionScope = sharedTransitionScope, + animatedVisibilityScope = animatedVisibilityScope + ) + } +} + +@Composable +private fun ScoreScreenHeader(headerContent: @Composable () -> Unit) { + Row( + modifier = Modifier.fillMaxWidth().height(56.dp).background(Color.White), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, + ) { + headerContent() + } +} + +@OptIn(ExperimentalSharedTransitionApi::class) +@Composable +fun ScoreScreenContent( + scoreSectionWidgets: @Composable () -> Unit, + scoreMainContent: @Composable ColumnScope.() -> Unit, + creditData: Triple, + sharedTransitionScope: SharedTransitionScope, + skipAnimation: Boolean, + animatedVisibilityScope: AnimatedVisibilityScope, +) { + val hasContentAnimationEnded = remember { mutableStateOf(skipAnimation) } + Column( + modifier = + Modifier.fillMaxSize() + .enableScrollOnCondition(hasContentAnimationEnded.value, rememberScrollState()) + ) { + ScoreSection( + scoreSectionWidgets = scoreSectionWidgets, + hasContentAnimationEnded = hasContentAnimationEnded.value, + creditData = creditData, + skipAnimation = skipAnimation, + sharedTransitionScope = sharedTransitionScope, + animatedVisibilityScope = animatedVisibilityScope, + ) + ScoreMainContent( + scoreMainContent = scoreMainContent, + skipAnimation = skipAnimation, + hasContentAnimationEnded = { hasContentAnimationEnded.value = it } + ) + } +} + +@OptIn(ExperimentalSharedTransitionApi::class) +@Composable +fun ScoreSection( + creditData: Triple, + scoreSectionWidgets: @Composable () -> Unit, + skipAnimation: Boolean, + hasContentAnimationEnded: Boolean, + sharedTransitionScope: SharedTransitionScope, + animatedVisibilityScope: AnimatedVisibilityScope +) { + val hasCreditMeterProgressEnded = remember { mutableStateOf(skipAnimation) } + val hasCreditScoreDisplayed = remember { mutableStateOf(skipAnimation) } + val hasProgressAnimationEnded = remember { mutableStateOf(skipAnimation) } + hasProgressAnimationEnded.value = + hasCreditMeterProgressEnded.value and hasCreditScoreDisplayed.value + val bgColor = + animateColorAsState( + targetValue = if (hasProgressAnimationEnded.value) creditData.third else Color.White, + animationSpec = tween(450), + label = SCORE_SECTION_BACKGROUND_COLOR_ANIMATION + ) + Box(modifier = Modifier.scoreSectionModifier(bgColor), contentAlignment = Alignment.TopCenter) { + AnimatedVisibility( + visible = hasProgressAnimationEnded.value, + enter = EnterTransition.None + ) { + scoreSectionWidgets() + } + Box(contentAlignment = Alignment.BottomCenter) { + with(sharedTransitionScope) { + CreditMeterLottie( + modifier = + Modifier.width(202.dp) + .height(109.dp) + .sharedBounds( + rememberSharedContentState(SHARED_LOTTIE_METER_KEY), + animatedVisibilityScope = animatedVisibilityScope, + boundsTransform = creditBoundsTransform, + exit = ExitTransition.None + ), + creditScore = creditData.second, + hasContentAnimationEnded = hasContentAnimationEnded, + hasCreditMeterProgressEnded = { hasCreditMeterProgressEnded.value = it } + ) + val loaderViewAnimationState = remember { mutableStateOf(skipAnimation) } + LaunchedEffect(Unit) { loaderViewAnimationState.value = true } + val transparency = + animateFloatAsState( + animationSpec = tween(450), + targetValue = if (loaderViewAnimationState.value) 0f else 1f, + label = "" + ) + CreditLoaderLottie( + Modifier.size(48.dp) + .sharedBounds( + rememberSharedContentState(SHARED_LOTTIE_LOADER_KEY), + animatedVisibilityScope = animatedVisibilityScope, + boundsTransform = creditBoundsTransform, + enter = fadeIn() + ) + .graphicsLayer { alpha = transparency.value } + ) + } + CreditScoreRolodex( + modifier = Modifier.padding(bottom = 24.dp), + skipAnimation = skipAnimation, + startScore = creditData.first, + creditScore = creditData.second, + hasContentAnimationEnded = hasContentAnimationEnded, + scoreDisplayed = { hasCreditScoreDisplayed.value = it } + ) + } + } +} + +@Composable +fun CreditLoaderLottie(modifier: Modifier) { + val creditLoaderLottie by + rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.landing_credit_loader)) + val creditLoaderProgress by + animateLottieCompositionAsState( + composition = creditLoaderLottie, + isPlaying = false, + clipSpec = LottieClipSpec.Progress(min = 0f, max = 1f), + speed = 1f, + reverseOnRepeat = true, + iterations = 1 + ) + CreditGenericLottie( + modifier = modifier, + lottieComposition = creditLoaderLottie, + checkAtProgress = 1f, + progress = { creditLoaderProgress } + ) {} +} + +@Composable +fun CreditMeterLottie( + modifier: Modifier = Modifier, + creditScore: String, + hasContentAnimationEnded: Boolean, + hasCreditMeterProgressEnded: (Boolean) -> Unit +) { + val creditMeterLottie by + rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.landing_credit_meter)) + val calculatedCreditScoreProgress = remember { + calculateProgressAfterAnimation(creditScore.toInt()) + } + val targetValue = if (hasContentAnimationEnded) calculatedCreditScoreProgress else 0.67f + val creditScoreProgress by + animateFloatAsState( + animationSpec = tween(1000, easing = FastOutSlowInEasing), + targetValue = targetValue, + label = SCORE_ANIMATION, + ) + CreditGenericLottie( + modifier = modifier, + lottieComposition = creditMeterLottie, + checkAtProgress = calculatedCreditScoreProgress, + progress = { creditScoreProgress } + ) { + hasCreditMeterProgressEnded(it) + } +} + +@Composable +private fun CreditScoreRolodex( + modifier: Modifier, + skipAnimation: Boolean, + startScore: String, + creditScore: String, + hasContentAnimationEnded: Boolean, + scoreDisplayed: (Boolean) -> Unit +) { + AnimatedVisibility( + visible = hasContentAnimationEnded, + enter = fadeIn(animationSpec = tween(100, easing = EaseInOutQuart)) + ) { + Row(modifier) { + for (index in creditScore.indices) { + Rolodex( + modifier = Modifier, + skipAnimation = skipAnimation, + isScoreSame = startScore == creditScore, + startCount = startScore[index].toString().toInt(), + endCount = creditScore[index].toString().toInt(), + index = index + ) { + if (index == creditScore.indices.last) scoreDisplayed(it) + } + } + } + } +} + +@Composable +fun ScoreMainContent( + scoreMainContent: @Composable ColumnScope.() -> Unit, + skipAnimation: Boolean, + hasContentAnimationEnded: (Boolean) -> Unit +) { + val contentAnimationState = + remember { MutableTransitionState(skipAnimation) }.apply { this.targetState = true } + ObserveContentAnimationEnd(contentAnimationState, hasContentAnimationEnded) + AnimatedVisibility( + modifier = Modifier.background(color = Color.White, shape = TopRoundedCornerShape), + visibleState = contentAnimationState, + enter = + slideInVertically(tween(durationMillis = 450, easing = LinearOutSlowInEasing)) { + it.times(0.8).toInt() + } + ) { + Column(Modifier.fillMaxSize().padding(top = 16.dp)) { scoreMainContent() } + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/score/ScoreScreenHelper.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/score/ScoreScreenHelper.kt new file mode 100644 index 0000000000..a749efcf10 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/score/ScoreScreenHelper.kt @@ -0,0 +1,137 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.score + +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.AnimatedContentTransitionScope +import androidx.compose.animation.ContentTransform +import androidx.compose.animation.core.MutableTransitionState +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically +import androidx.compose.animation.togetherWith +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableIntState +import androidx.compose.runtime.State +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.navi.cycs.CycsConstants.AnimationLabels.ROLODEX_ANIMATION +import com.navi.design.font.FontWeightEnum +import com.navi.design.theme.FF191919 +import com.navi.design.theme.getFontWeight +import com.navi.design.theme.ttComposeFontFamily +import kotlinx.coroutines.delay + +fun calculateProgressAfterAnimation(serverProgress: Int): Float { + val totalServerProgress = 1800f + val progressOffset = 0.5f + return (serverProgress / totalServerProgress) + progressOffset +} + +@Composable +fun ObserveContentAnimationEnd( + contentAnimationState: MutableTransitionState, + hasContentAnimationEnded: (Boolean) -> Unit +) { + LaunchedEffect(contentAnimationState.currentState) { + if (contentAnimationState.currentState) hasContentAnimationEnded(true) + } +} + +val TopRoundedCornerShape = RoundedCornerShape(topStart = 8.dp, topEnd = 8.dp) + +fun Modifier.scoreSectionModifier(backgroundColor: State): Modifier { + return this.fillMaxWidth() + .offset(0.dp, 8.dp) + .background(Brush.verticalGradient(listOf(Color.White, backgroundColor.value))) + .padding(top = 8.dp, bottom = 8.dp) +} + +@Composable +fun Rolodex( + modifier: Modifier, + skipAnimation: Boolean, + isScoreSame: Boolean, + startCount: Int, + endCount: Int, + index: Int, + onAnimationEnd: (Boolean) -> Unit +) { + val totalTimeToAnimate = 700L + index.times(100) + val valueToBeAdded = index.times(10) + val indexAdjustedEndCount = endCount.plus(valueToBeAdded) + val digitsToAnimate = indexAdjustedEndCount.minus(startCount) + val currentCount = remember { + mutableIntStateOf(if (skipAnimation) indexAdjustedEndCount else startCount) + } + RolodexAdaptations( + isScoreSame = isScoreSame, + currentCount = currentCount, + indexAdjustedEndCount = indexAdjustedEndCount, + totalTimeToAnimate = totalTimeToAnimate, + digitsToAnimate = digitsToAnimate, + onAnimationEnd = onAnimationEnd + ) + AnimatedContent( + targetState = + when (isScoreSame) { + true -> endCount + false -> currentCount.intValue.mod(10) + }, + transitionSpec = rolodexTransition(), + label = ROLODEX_ANIMATION + ) { target -> + Text( + modifier = modifier, + text = target.toString(), + fontFamily = ttComposeFontFamily, + fontWeight = getFontWeight(FontWeightEnum.TT_SEMI_BOLD), + fontSize = 26.sp, + color = FF191919 + ) + } +} + +@Composable +private fun RolodexAdaptations( + isScoreSame: Boolean, + currentCount: MutableIntState, + indexAdjustedEndCount: Int, + totalTimeToAnimate: Long, + digitsToAnimate: Int, + onAnimationEnd: (Boolean) -> Unit, +) { + if (isScoreSame) onAnimationEnd(true) + else { + LaunchedEffect(currentCount.intValue) { + when (currentCount.intValue) { + indexAdjustedEndCount -> onAnimationEnd(true) + else -> { + delay(totalTimeToAnimate / digitsToAnimate) + currentCount.intValue++ + } + } + } + } +} + +@Composable +private fun rolodexTransition(): AnimatedContentTransitionScope.() -> ContentTransform = { + slideInVertically { it } togetherWith slideOutVertically { -it } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/trend/CycsTrendLineChartRenderer.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/trend/CycsTrendLineChartRenderer.kt new file mode 100644 index 0000000000..b91eb5a462 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/trend/CycsTrendLineChartRenderer.kt @@ -0,0 +1,338 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.trend + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.CornerRadius +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Rect +import androidx.compose.ui.geometry.RoundRect +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Path +import androidx.compose.ui.graphics.PathEffect +import androidx.compose.ui.graphics.drawscope.Stroke +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.drawText +import androidx.compose.ui.text.rememberTextMeasurer +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.navi.base.utils.orFalse +import com.navi.base.utils.orZero +import com.navi.cycs.common.model.PlottableScorePointEntity +import com.navi.cycs.common.model.WidgetModelDefinition +import com.navi.cycs.common.model.response.CreditScoreTrendData +import com.navi.design.font.FontWeightEnum +import com.navi.design.theme.getFontWeight +import com.navi.design.theme.ttComposeFontFamily +import com.navi.uitron.model.UiTronResponse +import org.joda.time.DateTime +import org.joda.time.format.DateTimeFormat + +@Composable +fun CycsTrendLineChartRenderer( + widget: WidgetModelDefinition, +) { + Box(modifier = Modifier.fillMaxWidth().height(236.dp)) { + LineChart(widget = widget, modifier = Modifier.fillMaxSize().padding(top = 4.dp)) + } +} + +@Composable +fun LineChart(widget: WidgetModelDefinition, modifier: Modifier = Modifier) { + val textMeasurer = rememberTextMeasurer() + val trendData = (widget.widgetData?.data?.get("widget_data") as CreditScoreTrendData?) + val lineData = getLineChartPointEntities(trendData) + Canvas(modifier = modifier.fillMaxSize()) { + val leftOffset = 54.dp.toPx() + val rightOffset = 32.dp.toPx() + val topOffset = 7.dp.toPx() + val bottomOffset = 22.dp.toPx() + // Horizontal axis + drawLine( + start = Offset(leftOffset, size.height - bottomOffset), + end = Offset(size.width - rightOffset, size.height - bottomOffset), + color = Color(0xFFEFEFEF), + strokeWidth = 1.dp.toPx() + ) + + // Vertical axis + val horizontalSpacing = (size.width - rightOffset - leftOffset) / (lineData.size - 1) + for (i in lineData.indices) { + val x = leftOffset + i * horizontalSpacing + drawLine( + start = Offset(x, size.height - bottomOffset), + end = Offset(x, 0f), + color = Color(0xFFE3E5E5), + strokeWidth = 0.5.dp.toPx() + ) + } + + // Horizontal axis labels + for (i in lineData.indices) { + val x = 45.dp.toPx() + i * horizontalSpacing + drawText( + textMeasurer = textMeasurer, + text = lineData[i].month.orEmpty(), + style = + TextStyle( + fontSize = 12.dp.toSp(), + color = Color(0xFF6B6B6B), + fontFamily = ttComposeFontFamily, + fontWeight = getFontWeight(FontWeightEnum.TT_REGULAR), + lineHeight = 14.sp + ), + topLeft = Offset(x, size.height - 14.dp.toPx()) + ) + } + + // Vertical axis labels + val verticalSpacing = (size.height - bottomOffset - topOffset) / 6 + for (i in 0..6) { + val y = i * verticalSpacing + drawText( + textMeasurer = textMeasurer, + text = (900 - i * 100).toString(), + style = + TextStyle( + fontSize = 12.dp.toSp(), + color = Color(0xFF6B6B6B), + fontFamily = ttComposeFontFamily, + fontWeight = getFontWeight(FontWeightEnum.TT_REGULAR), + lineHeight = 14.sp + ), + topLeft = Offset(16.dp.toPx(), y) + ) + } + + // Plot points and line chart + val availableHeight = size.height - bottomOffset - topOffset + val plottablePoints: MutableList> = mutableListOf() + for (i in lineData.indices) { + if (lineData[i].creditScore != null) { + val score = lineData[i].creditScore.orZero() + val x = leftOffset + i * horizontalSpacing + val y = (availableHeight + topOffset - ((score - 300) * availableHeight / 600)) + plottablePoints.add(Pair(Offset(x, y), lineData[i].projected.orFalse())) + } + } + for (i in plottablePoints.indices) { + val centerX = plottablePoints[i].first.x + val centerY = plottablePoints[i].first.y + if (plottablePoints[i].second) { + drawCircle( + color = Color(0xFFB5ACB9), + radius = 2.5.dp.toPx(), + center = Offset(centerX, centerY) + ) + } else { + drawCircle( + color = Color(0xFF6B6B6B), + radius = 2.5.dp.toPx(), + center = Offset(centerX, centerY) + ) + } + if (i > 0) { + val prevCenterX = plottablePoints[i - 1].first.x + val prevCenterY = plottablePoints[i - 1].first.y + if (plottablePoints[i].second) { + drawLine( + start = Offset(prevCenterX, prevCenterY), + end = Offset(centerX, centerY), + color = Color(0xFFB5ACB9), + strokeWidth = 0.5.dp.toPx(), + pathEffect = + PathEffect.dashPathEffect(floatArrayOf(2.dp.toPx(), 2.dp.toPx()), 0f) + ) + } else { + drawLine( + start = Offset(prevCenterX, prevCenterY), + end = Offset(centerX, centerY), + color = Color(0xFF6B6B6B), + strokeWidth = 0.5.dp.toPx() + ) + } + } + } + + // Draw top score labels + val topLabelledPoints: MutableList> = mutableListOf() + for (i in lineData.indices) { + if (lineData[i].creditScore != null && lineData[i].projected.orFalse()) { + val score = lineData[i].creditScore.orZero() + val x = leftOffset + i * horizontalSpacing + val y = (availableHeight + topOffset - ((score - 300) * availableHeight / 600)) + topLabelledPoints.add(Pair(Offset(x, y), score)) + } + } + + for (i in topLabelledPoints.indices) { + val pointX = topLabelledPoints[i].first.x + val pointY = topLabelledPoints[i].first.y + val triangleStartPoint = Offset(pointX, pointY - 8.dp.toPx()) + + val trianglePath = Path() + trianglePath.moveTo(triangleStartPoint.x, triangleStartPoint.y) + trianglePath.lineTo( + triangleStartPoint.x - 4.dp.toPx(), + triangleStartPoint.y - 4.dp.toPx() + ) + trianglePath.lineTo( + triangleStartPoint.x + 4.dp.toPx(), + triangleStartPoint.y - 4.dp.toPx() + ) + trianglePath.close() + drawPath(path = trianglePath, color = Color(0xFFB5ACB9)) + + val rectangleTopLeftPoint = + Offset(triangleStartPoint.x - 20.dp.toPx(), triangleStartPoint.y - 26.dp.toPx()) + val rectPath = + Path().apply { + RoundRect( + rect = Rect(offset = Offset(0f, 0f), size = Size(100f, 100f)), + cornerRadius = CornerRadius(10f) + ) + addRoundRect( + RoundRect( + rect = + Rect( + offset = rectangleTopLeftPoint, + size = Size(40.dp.toPx(), 22.dp.toPx()) + ), + cornerRadius = CornerRadius(4.dp.toPx()) + ) + ) + } + drawPath(path = rectPath, color = Color(0xFFFFFFFF)) + drawPath( + path = rectPath, + color = Color(0xFFB5ACB9), + style = Stroke(width = 1.dp.toPx()) + ) + val labelTextTopLeftPoint = + Offset(rectangleTopLeftPoint.x + 8.dp.toPx(), rectangleTopLeftPoint.y + 4.dp.toPx()) + drawText( + textMeasurer = textMeasurer, + text = topLabelledPoints[i].second.toString(), + style = + TextStyle( + fontSize = 12.dp.toSp(), + color = Color(0xFF6B6B6B), + fontFamily = ttComposeFontFamily, + fontWeight = getFontWeight(FontWeightEnum.TT_SEMI_BOLD), + lineHeight = 18.sp + ), + topLeft = labelTextTopLeftPoint + ) + } + + // Draw down score labels + val downLabelledPoints: MutableList> = mutableListOf() + for (i in lineData.indices) { + if (lineData[i].creditScore != null && lineData[i].latest.orFalse()) { + val score = lineData[i].creditScore.orZero() + val x = leftOffset + i * horizontalSpacing + val y = (availableHeight + topOffset - ((score - 300) * availableHeight / 600)) + downLabelledPoints.add(Pair(Offset(x, y), score)) + } + } + + for (i in downLabelledPoints.indices) { + val pointX = downLabelledPoints[i].first.x + val pointY = downLabelledPoints[i].first.y + val triangleStartPoint = Offset(pointX, pointY + 8.dp.toPx()) + + val trianglePath = Path() + trianglePath.moveTo(triangleStartPoint.x, triangleStartPoint.y) + trianglePath.lineTo( + triangleStartPoint.x - 4.dp.toPx(), + triangleStartPoint.y + 4.dp.toPx() + ) + trianglePath.lineTo( + triangleStartPoint.x + 4.dp.toPx(), + triangleStartPoint.y + 4.dp.toPx() + ) + trianglePath.close() + drawPath(path = trianglePath, color = Color(0xFF6B6B6B)) + + val rectangleTopLeftPoint = + Offset(triangleStartPoint.x - 20.dp.toPx(), triangleStartPoint.y + 4.dp.toPx()) + val rectPath = + Path().apply { + addRoundRect( + RoundRect( + rect = + Rect( + offset = rectangleTopLeftPoint, + size = Size(40.dp.toPx(), 22.dp.toPx()) + ), + topLeft = CornerRadius(4.dp.toPx()), + topRight = CornerRadius(4.dp.toPx()), + bottomLeft = CornerRadius(4.dp.toPx()), + bottomRight = CornerRadius(4.dp.toPx()) + ) + ) + } + drawPath(path = rectPath, color = Color(0xFF6B6B6B)) + val labelTextTopLeftPoint = + Offset(rectangleTopLeftPoint.x + 8.dp.toPx(), rectangleTopLeftPoint.y + 4.dp.toPx()) + drawText( + textMeasurer = textMeasurer, + text = downLabelledPoints[i].second.toString(), + style = + TextStyle( + fontSize = 12.dp.toSp(), + color = Color(0xFFFFFFFF), + fontFamily = ttComposeFontFamily, + fontWeight = getFontWeight(FontWeightEnum.TT_SEMI_BOLD), + lineHeight = 18.sp + ), + topLeft = labelTextTopLeftPoint + ) + } + } +} + +fun getFormattedDate(date: String): DateTime = + DateTime.parse(date, DateTimeFormat.forPattern("yyyy-MM-dd")) + +fun getLineChartPointEntities(trendData: CreditScoreTrendData?): List { + val fourMonthsAgoDate = DateTime.now().minusDays(31 * 4 + 1) + val trendDataFiltered = + trendData?.creditScoreTrendPointEntities?.filter { + getFormattedDate(it.date).isAfter(fourMonthsAgoDate) + } + val lineData: MutableList = mutableListOf() + if (trendDataFiltered != null) { + val oldestDate = getFormattedDate(trendDataFiltered[0].date) + for (i in 0..5) { + val month = oldestDate.plusMonths(i).monthOfYear().asShortText + val creditScore = + trendDataFiltered + .find { getFormattedDate(it.date).monthOfYear().asShortText == month } + ?.creditScore + val projected = + trendDataFiltered + .find { getFormattedDate(it.date).monthOfYear().asShortText == month } + ?.projected + val latest = + trendDataFiltered + .find { getFormattedDate(it.date).monthOfYear().asShortText == month } + ?.latest + lineData.add(PlottableScorePointEntity(month, creditScore, projected, latest)) + } + } + return lineData +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/trend/TrendScreen.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/trend/TrendScreen.kt new file mode 100644 index 0000000000..27dde74b15 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/trend/TrendScreen.kt @@ -0,0 +1,46 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.trend + +import androidx.activity.compose.BackHandler +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.hilt.navigation.compose.hiltViewModel +import com.navi.cycs.CycsAnalytics +import com.navi.cycs.CycsScreen +import com.navi.cycs.common.handler.InitActionsHandler +import com.navi.cycs.common.ui.CycsBottomSheet +import com.navi.cycs.common.ui.CycsScreenRenderer +import com.navi.cycs.entry.CycsActivity +import com.navi.cycs.entry.CycsMainViewModel +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator + +@Destination +@Composable +fun TrendScreen( + cycsActivity: CycsActivity, + navigator: DestinationsNavigator, + viewModel: CycsMainViewModel = hiltViewModel(), + cycsAnalytics: CycsAnalytics.Trend = CycsAnalytics.INSTANCE.Trend(), +) { + + CycsScreenRenderer(viewModel = viewModel, screen = CycsScreen.TREND) { + viewModel.fetchScreen(screenName = CycsScreen.TREND) + } + + LaunchedEffect(Unit) { cycsAnalytics.onLanded() } + + LaunchedEffect(Unit) { viewModel.fetchScreen(screenName = CycsScreen.TREND) } + + InitActionsHandler(viewModel = viewModel, activity = cycsActivity, navigator = navigator) + + BackHandler { navigator.navigateUp() } + + CycsBottomSheet(viewModel = viewModel) +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/trend/TrendShimmer.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/trend/TrendShimmer.kt new file mode 100644 index 0000000000..7206abcb2d --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/feature/trend/TrendShimmer.kt @@ -0,0 +1,33 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.feature.trend + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.navi.cycs.common.ui.CycsFullWidthShimmerBox +import com.navi.cycs.common.ui.CycsShimmerBox + +@Composable +fun TrendShimmer() { + Column(modifier = Modifier.fillMaxWidth().padding(start = 16.dp, end = 16.dp)) { + Spacer(modifier = Modifier.height(88.dp)) + CycsShimmerBox(width = 90.dp, height = 24.dp) + Spacer(modifier = Modifier.height(16.dp)) + CycsFullWidthShimmerBox(height = 278.dp) + Spacer(modifier = Modifier.height(32.dp)) + CycsShimmerBox(width = 90.dp, height = 24.dp) + Spacer(modifier = Modifier.height(16.dp)) + CycsFullWidthShimmerBox(height = 98.dp) + } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/network/CycsHttpClient.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/network/CycsHttpClient.kt new file mode 100644 index 0000000000..bb3dc74740 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/network/CycsHttpClient.kt @@ -0,0 +1,42 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.network + +import android.content.Context +import com.chuckerteam.chucker.api.ChuckerCollector +import com.chuckerteam.chucker.api.ChuckerInterceptor +import com.navi.common.model.NetworkInfo +import com.navi.common.network.BaseHttpClient +import com.navi.cycs.BuildConfig +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor + +class CycsHttpClient(val networkInfo: NetworkInfo, private val context: Context) : + BaseHttpClient(networkInfo, context) { + val httpClientBuilder: OkHttpClient.Builder + get() { + val okHttpClientBuilder = baseHttpClientBuilder + if (BuildConfig.DEBUG) { + with(okHttpClientBuilder) { + addInterceptor(loggingInterceptor()) + addInterceptor( + ChuckerInterceptor.Builder(context) + .collector(ChuckerCollector(context)) + .maxContentLength(250000L) + .redactHeaders(arrayListOf("X-Click-Stream-Data")) + .alwaysReadResponseBody(false) + .build() + ) + } + } + return okHttpClientBuilder + } + + private fun loggingInterceptor() = + HttpLoggingInterceptor().apply { setLevel(HttpLoggingInterceptor.Level.BODY) } +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/network/di/CycsModule.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/network/di/CycsModule.kt new file mode 100644 index 0000000000..f4861054b5 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/network/di/CycsModule.kt @@ -0,0 +1,83 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.network.di + +import android.content.Context +import com.google.gson.Gson +import com.navi.common.CommonLibManager +import com.navi.common.model.ModuleName +import com.navi.common.model.ModuleNameV2 +import com.navi.common.model.NetworkInfo +import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory +import com.navi.cycs.common.utils.getGsonDeserializer +import com.navi.cycs.network.CycsHttpClient +import com.navi.cycs.network.service.CycsRetrofitService +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityRetainedComponent +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.android.scopes.ActivityRetainedScoped +import javax.inject.Qualifier +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +@Module +@InstallIn(ActivityRetainedComponent::class) +object CycsNetworkModule { + private const val CYCS_NETWORK_INFO_TIMEOUT = 65L + + @ActivityRetainedScoped + @Provides + @CycsNetworkInfo + fun providesNetworkInfo(): NetworkInfo = + NetworkInfo( + baseUrl = CommonLibManager.baseUrl, + appVersionName = CommonLibManager.appVersionName, + appVersionCode = CommonLibManager.appVersionCode, + moduleName = ModuleName.CYCS, + timeoutInSec = CYCS_NETWORK_INFO_TIMEOUT + ) + + @ActivityRetainedScoped + @Provides + fun providesNaviCycsHttpClient( + @CycsNetworkInfo networkInfo: NetworkInfo, + @ApplicationContext context: Context + ) = CycsHttpClient(networkInfo = networkInfo, context = context) + + @ActivityRetainedScoped + @Provides + @CycsGsonBuilder + fun providesDeserializer(): Gson = getGsonDeserializer() + + @ActivityRetainedScoped + @Provides + @CycsRetrofit + fun providesRetrofitClient( + cycsHttpClient: CycsHttpClient, + @CycsGsonBuilder deserializer: Gson + ): Retrofit = + Retrofit.Builder() + .baseUrl(cycsHttpClient.networkInfo.baseUrl) + .client(cycsHttpClient.httpClientBuilder.build()) + .addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.CYCS.name)) + .addConverterFactory(GsonConverterFactory.create(deserializer)) + .build() + + @ActivityRetainedScoped + @Provides + fun providesCycsApiService(@CycsRetrofit retrofit: Retrofit): CycsRetrofitService = + retrofit.create(CycsRetrofitService::class.java) +} + +@Qualifier @Retention(AnnotationRetention.BINARY) annotation class CycsRetrofit + +@Qualifier @Retention(AnnotationRetention.BINARY) annotation class CycsNetworkInfo + +@Qualifier @Retention(AnnotationRetention.BINARY) annotation class CycsGsonBuilder diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/network/service/CycsRetrofitService.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/network/service/CycsRetrofitService.kt new file mode 100644 index 0000000000..2caa86e349 --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/network/service/CycsRetrofitService.kt @@ -0,0 +1,69 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.network.service + +import com.navi.common.network.models.GenericResponse +import com.navi.cycs.CycsConstants.Network.ACCEPT_ENCODING +import com.navi.cycs.CycsConstants.Network.REQUEST_ID +import com.navi.cycs.CycsConstants.Network.SCREEN_NAME +import com.navi.cycs.CycsConstants.Network.X_CREDIT_INDICATOR +import com.navi.cycs.CycsConstants.Network.X_NOTIFICATION_PERMISSION_GRANTED +import com.navi.cycs.CycsConstants.Network.X_NTC_STATUS +import com.navi.cycs.CycsConstants.Network.X_TARGET +import com.navi.cycs.common.model.ScreenDefinition +import com.navi.cycs.common.model.request.ConsentRequest +import com.navi.cycs.common.model.response.GetScoreStatusResponse +import com.navi.cycs.common.model.response.NextActionResponse +import com.navi.cycs.common.model.response.PostScoreResponse +import com.navi.cycs.common.model.response.WebTokenResponse +import retrofit2.Response +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.Header +import retrofit2.http.POST +import retrofit2.http.Path + +interface CycsRetrofitService { + + @GET("/forge/screen/{screenName}") + suspend fun fetchForgeScreen( + @Header(ACCEPT_ENCODING) acceptEncoding: String, + @Header(X_TARGET) xTarget: String, + @Header(X_NOTIFICATION_PERMISSION_GRANTED) xNotificationPermissionGranted: Boolean? = null, + @Header(X_CREDIT_INDICATOR) xCreditIndicator: String? = null, + @Header(X_NTC_STATUS) xNtcStatus: String? = null, + @Path(SCREEN_NAME) screenName: String, + ): Response> + + @GET("/appshell/cycs/next-action") + suspend fun getNextAction( + @Header(X_TARGET) xTarget: String + ): Response> + + @POST("/appshell/cycs/consent") + suspend fun postConsent( + @Header(X_TARGET) xTarget: String, + @Body consentRequest: ConsentRequest + ): Response> + + @POST("/appshell/cycs/score") + suspend fun postScore( + @Header(X_TARGET) xTarget: String + ): Response> + + @GET("/appshell/cycs/status/{requestId}") + suspend fun getScoreStatus( + @Header(X_TARGET) xTarget: String, + @Path(REQUEST_ID) requestId: String + ): Response> + + @GET("/appshell/cycs/url") + suspend fun getWebTokenUrl( + @Header(X_TARGET) xTarget: String, + ): Response> +} diff --git a/android/navi-cycs/src/main/kotlin/com/navi/cycs/theme/CycsColor.kt b/android/navi-cycs/src/main/kotlin/com/navi/cycs/theme/CycsColor.kt new file mode 100644 index 0000000000..a34949375e --- /dev/null +++ b/android/navi-cycs/src/main/kotlin/com/navi/cycs/theme/CycsColor.kt @@ -0,0 +1,20 @@ +/* + * + * * Copyright © 2024 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.cycs.theme + +import androidx.compose.ui.graphics.Color + +object CycsColor { + val textPrimary = Color(0xFF191919) + val textSecondary = Color(0xFF6B6B6B) + val textTertiary = Color(0xFF444444) + val bgAlt2 = Color(0xFFE9E7F0) + val ctaPrimary = Color(0xFF1F002A) + val ctaSecondary = Color(0xFFF5F5F5) + val loaderGradient = Color(0xFFF9F9FB) +} diff --git a/android/navi-cycs/src/main/res/drawable/ic_cycs_error.xml b/android/navi-cycs/src/main/res/drawable/ic_cycs_error.xml new file mode 100644 index 0000000000..2da217cf3f --- /dev/null +++ b/android/navi-cycs/src/main/res/drawable/ic_cycs_error.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + diff --git a/android/navi-cycs/src/main/res/drawable/ic_cycs_error_red_gradient.xml b/android/navi-cycs/src/main/res/drawable/ic_cycs_error_red_gradient.xml new file mode 100644 index 0000000000..06562516a4 --- /dev/null +++ b/android/navi-cycs/src/main/res/drawable/ic_cycs_error_red_gradient.xml @@ -0,0 +1,33 @@ + + + + + + + + diff --git a/android/navi-cycs/src/main/res/drawable/ic_cycs_powered_by_navi_finserv_cibil.xml b/android/navi-cycs/src/main/res/drawable/ic_cycs_powered_by_navi_finserv_cibil.xml new file mode 100644 index 0000000000..9aa8f8767f --- /dev/null +++ b/android/navi-cycs/src/main/res/drawable/ic_cycs_powered_by_navi_finserv_cibil.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/navi-cycs/src/main/res/raw/landing_credit_loader.json b/android/navi-cycs/src/main/res/raw/landing_credit_loader.json new file mode 100644 index 0000000000..e6d7d091dc --- /dev/null +++ b/android/navi-cycs/src/main/res/raw/landing_credit_loader.json @@ -0,0 +1,1259 @@ +{ + "v": "5.9.0", + "fr": 30, + "ip": 0, + "op": 60, + "w": 48, + "h": 48, + "nm": "Secondary CTA loader_48*48px", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "nm": "purple loader_160*240 (with rotation)", + "fr": 30, + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Shape Layer 3", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.379 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.369 + ], + "y": [ + 0 + ] + }, + "t": 8, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 24, + "s": [ + 180 + ] + }, + { + "i": { + "x": [ + 0.379 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.369 + ], + "y": [ + 0 + ] + }, + "t": 42, + "s": [ + 180 + ] + }, + { + "t": 58, + "s": [ + 360 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 8, + "s": [ + 223.15, + 128.65, + 0 + ], + "to": [ + 0, + -8.733, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 16, + "s": [ + 223.15, + 76.25, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + -8.733, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 0.667 + }, + "o": { + "x": 0.333, + "y": 0.333 + }, + "t": 24, + "s": [ + 223.15, + 128.65, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 42, + "s": [ + 223.15, + 128.65, + 0 + ], + "to": [ + 0, + -8.733, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 50, + "s": [ + 223.15, + 76.25, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + -8.733, + 0 + ] + }, + { + "t": 58, + "s": [ + 223.15, + 128.65, + 0 + ] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + -90.653, + 18.472, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { + "a": 0, + "k": [ + 43.444, + 43.444 + ], + "ix": 2 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 4 + }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.121568627451, + 0, + 0.164705882353, + 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": [ + -90.653, + 18.472 + ], + "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": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 90, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Shape Layer 2", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 99, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.379 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.369 + ], + "y": [ + 0 + ] + }, + "t": 4, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 20, + "s": [ + 180 + ] + }, + { + "i": { + "x": [ + 0.379 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.369 + ], + "y": [ + 0 + ] + }, + "t": 38, + "s": [ + 180 + ] + }, + { + "t": 54, + "s": [ + 360 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 4, + "s": [ + 131.35, + 128.65, + 0 + ], + "to": [ + 0, + -8.733, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 12, + "s": [ + 131.35, + 76.25, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + -8.733, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 0.667 + }, + "o": { + "x": 0.333, + "y": 0.333 + }, + "t": 20, + "s": [ + 131.35, + 128.65, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 38, + "s": [ + 131.35, + 128.65, + 0 + ], + "to": [ + 0, + -8.733, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 46, + "s": [ + 131.35, + 76.25, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + -8.733, + 0 + ] + }, + { + "t": 54, + "s": [ + 131.35, + 128.65, + 0 + ] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + -90.653, + 18.472, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { + "a": 0, + "k": [ + 43.444, + 43.444 + ], + "ix": 2 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 4 + }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.121568627451, + 0, + 0.164705882353, + 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": [ + -90.653, + 18.472 + ], + "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": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 90, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.379 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.369 + ], + "y": [ + 0 + ] + }, + "t": 0, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 16, + "s": [ + 180 + ] + }, + { + "i": { + "x": [ + 0.379 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.369 + ], + "y": [ + 0 + ] + }, + "t": 34, + "s": [ + 180 + ] + }, + { + "t": 50, + "s": [ + 360 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 0, + "s": [ + 39.55, + 128.65, + 0 + ], + "to": [ + 0, + -8.733, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 8, + "s": [ + 39.55, + 76.25, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + -8.733, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 0.667 + }, + "o": { + "x": 0.333, + "y": 0.333 + }, + "t": 16, + "s": [ + 39.55, + 128.65, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 34, + "s": [ + 39.55, + 128.65, + 0 + ], + "to": [ + 0, + -8.733, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 42, + "s": [ + 39.55, + 76.25, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + -8.733, + 0 + ] + }, + { + "t": 50, + "s": [ + 39.55, + 128.65, + 0 + ] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + -90.653, + 18.472, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { + "a": 0, + "k": [ + 43.444, + 43.444 + ], + "ix": 2 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 4 + }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.121568627451, + 0, + 0.164705882353, + 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": [ + -90.653, + 18.472 + ], + "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": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 90, + "st": 0, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "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": [ + 24, + 24, + 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, + "shapes": [], + "ip": 0, + "op": 90, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 0, + "nm": "purple loader_160*240 (with rotation)", + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 24, + 15.2, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 130, + 80, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 19, + 19, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "w": 260, + "h": 160, + "ip": 0, + "op": 90, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} \ No newline at end of file diff --git a/android/navi-cycs/src/main/res/raw/landing_credit_meter.json b/android/navi-cycs/src/main/res/raw/landing_credit_meter.json new file mode 100644 index 0000000000..ab9dacec7f --- /dev/null +++ b/android/navi-cycs/src/main/res/raw/landing_credit_meter.json @@ -0,0 +1,18578 @@ +{ + "v": "5.9.0", + "fr": 29.9700012207031, + "ip": 0, + "op": 90.0000036657751, + "w": 255, + "h": 137, + "nm": "Meter Loader 255*137 (Export)", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "nm": "Meter loader (Linear animation)", + "fr": 29.9700012207031, + "layers": [ + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Pivot line", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 0, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.248 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.335 + ], + "y": [ + 0 + ] + }, + "t": 0, + "s": [ + -84 + ] + }, + { + "i": { + "x": [ + 0.461 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.407 + ], + "y": [ + 0 + ] + }, + "t": 30, + "s": [ + 84 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.328 + ], + "y": [ + 0 + ] + }, + "t": 60, + "s": [ + -84 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 61, + "s": [ + -84 + ] + }, + { + "t": 90.0000036657751, + "s": [ + 84 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 510, + 492.526, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 1, + 357.53, + 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": [ + [ + 1, + 354.059 + ], + [ + 1, + 1 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 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 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 180.00000733155, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Arrow pointer", + "parent": 3, + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 1, + -37.195, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 34.977, + 39.725, + 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.689, + -1.626 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.69, + -1.626 + ] + ], + "v": [ + [ + -1.841, + -37.188 + ], + [ + -34.065, + 38.813 + ], + [ + 34.065, + 38.813 + ], + [ + 1.841, + -37.188 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.912, + "ix": 5 + }, + "lc": 1, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 34.977, + 39.726 + ], + "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.689, + -1.626 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.69, + -1.626 + ] + ], + "v": [ + [ + -1.841, + -37.188 + ], + [ + -34.065, + 38.813 + ], + [ + 34.065, + 38.813 + ], + [ + 1.841, + -37.188 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 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.977, + 39.726 + ], + "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": [ + [ + 5.805, + 77.921 + ], + [ + 64.15, + 77.921 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.912, + "ix": 5 + }, + "lc": 1, + "lj": 2, + "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": [ + [ + 5.805, + 77.921 + ], + [ + 64.15, + 77.921 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 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": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 180.00000733155, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "Number reference", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 508, + 527.898, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 510.25, + 19.951, + 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": [ + [ + 2.129, + 0 + ], + [ + 1.313, + 0.355 + ], + [ + 0.993, + 0.533 + ], + [ + 0.745, + 0.674 + ], + [ + 0.497, + 0.745 + ], + [ + 0.461, + 2.2 + ], + [ + 0, + 0 + ], + [ + -0.674, + -0.852 + ], + [ + -1.065, + -0.603 + ], + [ + -1.811, + 0 + ], + [ + -0.959, + 0.319 + ], + [ + -0.675, + 0.568 + ], + [ + -0.355, + 0.781 + ], + [ + 0, + 0.852 + ], + [ + 1.277, + 1.206 + ], + [ + 2.413, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.319, + 0.036 + ], + [ + -0.355, + 0.035 + ], + [ + -0.39, + 0 + ], + [ + -1.42, + -0.604 + ], + [ + -1.029, + -1.1 + ], + [ + -0.604, + -1.49 + ], + [ + 0, + -1.81 + ], + [ + 0.675, + -1.491 + ], + [ + 1.243, + -1.136 + ], + [ + 1.739, + -0.639 + ] + ], + "o": [ + [ + -1.633, + 0 + ], + [ + -1.278, + -0.32 + ], + [ + -0.959, + -0.568 + ], + [ + -0.71, + -0.71 + ], + [ + -1.171, + -1.704 + ], + [ + 0, + 0 + ], + [ + 0.284, + 1.1 + ], + [ + 0.603, + 0.745 + ], + [ + 1.065, + 0.603 + ], + [ + 1.277, + 0 + ], + [ + 0.993, + -0.355 + ], + [ + 0.71, + -0.604 + ], + [ + 0.355, + -0.78 + ], + [ + 0, + -2.023 + ], + [ + -1.278, + -1.207 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0.249, + -0.036 + ], + [ + 0.284, + -0.035 + ], + [ + 0.355, + -0.036 + ], + [ + 1.668, + 0 + ], + [ + 1.42, + 0.603 + ], + [ + 1.065, + 1.065 + ], + [ + 0.603, + 1.491 + ], + [ + 0, + 1.669 + ], + [ + -0.674, + 1.455 + ], + [ + -1.206, + 1.1 + ], + [ + -1.74, + 0.674 + ] + ], + "v": [ + [ + 0.267, + 19.165 + ], + [ + -4.153, + 18.633 + ], + [ + -7.56, + 17.355 + ], + [ + -10.116, + 15.492 + ], + [ + -11.926, + 13.31 + ], + [ + -14.375, + 7.453 + ], + [ + -7.986, + 7.453 + ], + [ + -6.549, + 10.382 + ], + [ + -4.047, + 12.405 + ], + [ + 0.267, + 13.31 + ], + [ + 3.621, + 12.831 + ], + [ + 6.123, + 11.447 + ], + [ + 7.72, + 9.37 + ], + [ + 8.252, + 6.921 + ], + [ + 6.336, + 2.077 + ], + [ + 0.799, + 0.267 + ], + [ + -8.253, + 0.267 + ], + [ + -8.253, + -5.057 + ], + [ + 2.928, + -13.044 + ], + [ + 2.928, + -13.31 + ], + [ + -12.512, + -13.31 + ], + [ + -12.512, + -19.165 + ], + [ + 11.979, + -19.165 + ], + [ + 11.979, + -13.362 + ], + [ + 2.396, + -6.388 + ], + [ + -0.267, + -5.324 + ], + [ + -0.267, + -5.057 + ], + [ + 0.586, + -5.164 + ], + [ + 1.544, + -5.271 + ], + [ + 2.662, + -5.324 + ], + [ + 7.294, + -4.419 + ], + [ + 10.967, + -1.863 + ], + [ + 13.47, + 1.969 + ], + [ + 14.375, + 6.921 + ], + [ + 13.363, + 11.659 + ], + [ + 10.488, + 15.546 + ], + [ + 6.07, + 18.155 + ] + ], + "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": [ + 14.625, + 20.485 + ], + "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.526, + 0 + ], + [ + -1.314, + 0.568 + ], + [ + -0.958, + 1.171 + ], + [ + -0.567, + 1.704 + ], + [ + 0, + 2.272 + ], + [ + 0.568, + 1.703 + ], + [ + 0.994, + 1.171 + ], + [ + 1.348, + 0.567 + ], + [ + 1.527, + 0 + ], + [ + 1.349, + -0.604 + ], + [ + 0.993, + -1.171 + ], + [ + 0.568, + -1.739 + ], + [ + 0, + -2.271 + ], + [ + -0.567, + -1.739 + ], + [ + -0.959, + -1.172 + ], + [ + -1.313, + -0.604 + ] + ], + "o": [ + [ + 1.527, + 0 + ], + [ + 1.348, + -0.604 + ], + [ + 0.994, + -1.172 + ], + [ + 0.568, + -1.739 + ], + [ + 0, + -2.271 + ], + [ + -0.567, + -1.739 + ], + [ + -0.958, + -1.171 + ], + [ + -1.314, + -0.604 + ], + [ + -1.526, + 0 + ], + [ + -1.313, + 0.567 + ], + [ + -0.959, + 1.171 + ], + [ + -0.567, + 1.703 + ], + [ + 0, + 2.272 + ], + [ + 0.568, + 1.704 + ], + [ + 0.993, + 1.171 + ], + [ + 1.349, + 0.568 + ] + ], + "v": [ + [ + -0.001, + 13.842 + ], + [ + 4.26, + 12.99 + ], + [ + 7.72, + 10.329 + ], + [ + 10.062, + 6.016 + ], + [ + 10.914, + -0.001 + ], + [ + 10.062, + -5.963 + ], + [ + 7.72, + -10.329 + ], + [ + 4.26, + -12.937 + ], + [ + -0.001, + -13.842 + ], + [ + -4.312, + -12.937 + ], + [ + -7.773, + -10.329 + ], + [ + -10.062, + -5.963 + ], + [ + -10.913, + -0.001 + ], + [ + -10.062, + 6.016 + ], + [ + -7.773, + 10.329 + ], + [ + -4.312, + 12.99 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 2.343, + 0 + ], + [ + 2.094, + 0.959 + ], + [ + 1.597, + 1.704 + ], + [ + 0.923, + 2.414 + ], + [ + 0, + 2.946 + ], + [ + -0.923, + 2.413 + ], + [ + -1.562, + 1.703 + ], + [ + -2.094, + 0.958 + ], + [ + -2.342, + 0 + ], + [ + -2.094, + -0.959 + ], + [ + -1.562, + -1.739 + ], + [ + -0.923, + -2.449 + ], + [ + 0, + -2.91 + ], + [ + 0.923, + -2.413 + ], + [ + 1.597, + -1.739 + ], + [ + 2.094, + -0.958 + ] + ], + "o": [ + [ + -2.342, + 0 + ], + [ + -2.094, + -0.958 + ], + [ + -1.562, + -1.739 + ], + [ + -0.923, + -2.413 + ], + [ + 0, + -2.91 + ], + [ + 0.923, + -2.449 + ], + [ + 1.597, + -1.739 + ], + [ + 2.094, + -0.959 + ], + [ + 2.343, + 0 + ], + [ + 2.094, + 0.958 + ], + [ + 1.597, + 1.703 + ], + [ + 0.923, + 2.413 + ], + [ + 0, + 2.946 + ], + [ + -0.923, + 2.414 + ], + [ + -1.562, + 1.704 + ], + [ + -2.094, + 0.959 + ] + ], + "v": [ + [ + -0.001, + 19.699 + ], + [ + -6.655, + 18.261 + ], + [ + -12.191, + 14.268 + ], + [ + -15.919, + 8.038 + ], + [ + -17.303, + -0.001 + ], + [ + -15.919, + -7.985 + ], + [ + -12.191, + -14.214 + ], + [ + -6.655, + -18.26 + ], + [ + -0.001, + -19.699 + ], + [ + 6.655, + -18.26 + ], + [ + 12.139, + -14.214 + ], + [ + 15.919, + -7.985 + ], + [ + 17.303, + -0.001 + ], + [ + 15.919, + 8.038 + ], + [ + 12.139, + 14.268 + ], + [ + 6.655, + 18.261 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "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": [ + 50.595, + 19.948 + ], + "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": [ + [ + -1.526, + 0 + ], + [ + -1.313, + 0.568 + ], + [ + -0.958, + 1.171 + ], + [ + -0.568, + 1.704 + ], + [ + 0, + 2.272 + ], + [ + 0.568, + 1.703 + ], + [ + 0.994, + 1.171 + ], + [ + 1.349, + 0.567 + ], + [ + 1.526, + 0 + ], + [ + 1.349, + -0.604 + ], + [ + 0.994, + -1.171 + ], + [ + 0.568, + -1.739 + ], + [ + 0, + -2.271 + ], + [ + -0.568, + -1.739 + ], + [ + -0.958, + -1.172 + ], + [ + -1.313, + -0.604 + ] + ], + "o": [ + [ + 1.526, + 0 + ], + [ + 1.349, + -0.604 + ], + [ + 0.994, + -1.172 + ], + [ + 0.568, + -1.739 + ], + [ + 0, + -2.271 + ], + [ + -0.568, + -1.739 + ], + [ + -0.958, + -1.171 + ], + [ + -1.313, + -0.604 + ], + [ + -1.526, + 0 + ], + [ + -1.313, + 0.567 + ], + [ + -0.958, + 1.171 + ], + [ + -0.568, + 1.703 + ], + [ + 0, + 2.272 + ], + [ + 0.568, + 1.704 + ], + [ + 0.994, + 1.171 + ], + [ + 1.349, + 0.568 + ] + ], + "v": [ + [ + -0.001, + 13.842 + ], + [ + 4.259, + 12.99 + ], + [ + 7.72, + 10.329 + ], + [ + 10.062, + 6.016 + ], + [ + 10.914, + -0.001 + ], + [ + 10.062, + -5.963 + ], + [ + 7.72, + -10.329 + ], + [ + 4.259, + -12.937 + ], + [ + -0.001, + -13.842 + ], + [ + -4.312, + -12.937 + ], + [ + -7.773, + -10.329 + ], + [ + -10.062, + -5.963 + ], + [ + -10.915, + -0.001 + ], + [ + -10.062, + 6.016 + ], + [ + -7.773, + 10.329 + ], + [ + -4.312, + 12.99 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 2.343, + 0 + ], + [ + 2.094, + 0.959 + ], + [ + 1.597, + 1.704 + ], + [ + 0.923, + 2.414 + ], + [ + 0, + 2.946 + ], + [ + -0.923, + 2.413 + ], + [ + -1.562, + 1.703 + ], + [ + -2.094, + 0.958 + ], + [ + -2.342, + 0 + ], + [ + -2.094, + -0.959 + ], + [ + -1.562, + -1.739 + ], + [ + -0.923, + -2.449 + ], + [ + 0, + -2.91 + ], + [ + 0.922, + -2.413 + ], + [ + 1.597, + -1.739 + ], + [ + 2.094, + -0.958 + ] + ], + "o": [ + [ + -2.342, + 0 + ], + [ + -2.094, + -0.958 + ], + [ + -1.562, + -1.739 + ], + [ + -0.923, + -2.413 + ], + [ + 0, + -2.91 + ], + [ + 0.923, + -2.449 + ], + [ + 1.597, + -1.739 + ], + [ + 2.094, + -0.959 + ], + [ + 2.343, + 0 + ], + [ + 2.094, + 0.958 + ], + [ + 1.597, + 1.703 + ], + [ + 0.922, + 2.413 + ], + [ + 0, + 2.946 + ], + [ + -0.923, + 2.414 + ], + [ + -1.562, + 1.704 + ], + [ + -2.094, + 0.959 + ] + ], + "v": [ + [ + -0.001, + 19.699 + ], + [ + -6.656, + 18.261 + ], + [ + -12.191, + 14.268 + ], + [ + -15.919, + 8.038 + ], + [ + -17.303, + -0.001 + ], + [ + -15.919, + -7.985 + ], + [ + -12.191, + -14.214 + ], + [ + -6.656, + -18.26 + ], + [ + -0.001, + -19.699 + ], + [ + 6.655, + -18.26 + ], + [ + 12.139, + -14.214 + ], + [ + 15.919, + -7.985 + ], + [ + 17.303, + -0.001 + ], + [ + 15.919, + 8.038 + ], + [ + 12.139, + 14.268 + ], + [ + 6.655, + 18.261 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "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": [ + 89.978, + 19.948 + ], + "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": [ + [ + -2.42, + 0 + ], + [ + -1.46, + 1.42 + ], + [ + 0, + 2.272 + ], + [ + 1.45, + 1.419 + ], + [ + 2.41, + 0 + ], + [ + 1.46, + -1.456 + ], + [ + 0, + -2.271 + ], + [ + -1.45, + -1.455 + ] + ], + "o": [ + [ + 2.41, + 0 + ], + [ + 1.45, + -1.455 + ], + [ + 0, + -2.271 + ], + [ + -1.46, + -1.456 + ], + [ + -2.42, + 0 + ], + [ + -1.45, + 1.419 + ], + [ + 0, + 2.272 + ], + [ + 1.46, + 1.42 + ] + ], + "v": [ + [ + 0.005, + 1.863 + ], + [ + 5.805, + -0.267 + ], + [ + 7.985, + -5.857 + ], + [ + 5.805, + -11.393 + ], + [ + 0.005, + -13.576 + ], + [ + -5.805, + -11.393 + ], + [ + -7.985, + -5.857 + ], + [ + -5.805, + -0.267 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0.43, + -0.142 + ], + [ + 0.56, + -0.071 + ], + [ + 0.82, + 0 + ], + [ + 1.53, + 0.639 + ], + [ + 1.14, + 1.171 + ], + [ + 0.67, + 1.561 + ], + [ + 0, + 1.881 + ], + [ + -0.67, + 1.633 + ], + [ + -1.27, + 1.171 + ], + [ + -1.74, + 0.674 + ], + [ + -2.13, + 0 + ], + [ + -1.74, + -0.71 + ], + [ + -1.28, + -1.207 + ], + [ + -0.68, + -1.633 + ], + [ + 0, + -1.845 + ], + [ + 0.43, + -1.277 + ], + [ + 0.64, + -1.172 + ], + [ + 0.78, + -1.029 + ], + [ + 0.68, + -0.922 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.29, + 0.142 + ], + [ + -0.39, + 0.107 + ], + [ + -0.54, + 0.071 + ], + [ + -1.74, + 0 + ], + [ + -1.49, + -0.674 + ], + [ + -1.13, + -1.171 + ], + [ + -0.64, + -1.597 + ], + [ + 0, + -1.845 + ], + [ + 0.71, + -1.633 + ], + [ + 1.28, + -1.207 + ], + [ + 1.77, + -0.71 + ], + [ + 2.13, + 0 + ], + [ + 1.77, + 0.674 + ], + [ + 1.27, + 1.171 + ], + [ + 0.71, + 1.633 + ], + [ + 0, + 1.385 + ], + [ + -0.39, + 1.278 + ], + [ + -0.61, + 1.135 + ], + [ + -0.74, + 1.029 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0.325, + 8.677 + ], + [ + 2.665, + 6.654 + ], + [ + 2.665, + 6.388 + ], + [ + 1.595, + 6.814 + ], + [ + 0.165, + 7.081 + ], + [ + -1.865, + 7.188 + ], + [ + -6.765, + 6.228 + ], + [ + -10.705, + 3.46 + ], + [ + -13.415, + -0.639 + ], + [ + -14.375, + -5.857 + ], + [ + -13.365, + -11.074 + ], + [ + -10.385, + -15.28 + ], + [ + -5.855, + -18.1 + ], + [ + 0.005, + -19.165 + ], + [ + 5.805, + -18.1 + ], + [ + 10.385, + -15.28 + ], + [ + 13.315, + -11.074 + ], + [ + 14.375, + -5.857 + ], + [ + 13.735, + -1.863 + ], + [ + 12.195, + 1.81 + ], + [ + 10.115, + 5.057 + ], + [ + 7.985, + 7.986 + ], + [ + -0.535, + 19.165 + ], + [ + -7.715, + 19.165 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "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": [ + 927.565, + 19.416 + ], + "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": [ + [ + -1.53, + 0 + ], + [ + -1.32, + 0.568 + ], + [ + -0.96, + 1.171 + ], + [ + -0.57, + 1.704 + ], + [ + 0, + 2.272 + ], + [ + 0.57, + 1.703 + ], + [ + 0.99, + 1.171 + ], + [ + 1.34, + 0.567 + ], + [ + 1.52, + 0 + ], + [ + 1.35, + -0.604 + ], + [ + 1, + -1.171 + ], + [ + 0.57, + -1.739 + ], + [ + 0, + -2.271 + ], + [ + -0.56, + -1.739 + ], + [ + -0.95, + -1.172 + ], + [ + -1.31, + -0.604 + ] + ], + "o": [ + [ + 1.52, + 0 + ], + [ + 1.34, + -0.604 + ], + [ + 0.99, + -1.172 + ], + [ + 0.57, + -1.739 + ], + [ + 0, + -2.271 + ], + [ + -0.57, + -1.739 + ], + [ + -0.96, + -1.171 + ], + [ + -1.32, + -0.604 + ], + [ + -1.53, + 0 + ], + [ + -1.31, + 0.567 + ], + [ + -0.95, + 1.171 + ], + [ + -0.56, + 1.703 + ], + [ + 0, + 2.272 + ], + [ + 0.57, + 1.704 + ], + [ + 1, + 1.171 + ], + [ + 1.35, + 0.568 + ] + ], + "v": [ + [ + 0.005, + 13.842 + ], + [ + 4.265, + 12.99 + ], + [ + 7.725, + 10.329 + ], + [ + 10.065, + 6.016 + ], + [ + 10.915, + -0.001 + ], + [ + 10.065, + -5.963 + ], + [ + 7.725, + -10.329 + ], + [ + 4.265, + -12.937 + ], + [ + 0.005, + -13.842 + ], + [ + -4.315, + -12.937 + ], + [ + -7.775, + -10.329 + ], + [ + -10.065, + -5.963 + ], + [ + -10.915, + -0.001 + ], + [ + -10.065, + 6.016 + ], + [ + -7.775, + 10.329 + ], + [ + -4.315, + 12.99 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 2.34, + 0 + ], + [ + 2.1, + 0.959 + ], + [ + 1.6, + 1.704 + ], + [ + 0.92, + 2.414 + ], + [ + 0, + 2.946 + ], + [ + -0.92, + 2.413 + ], + [ + -1.56, + 1.703 + ], + [ + -2.09, + 0.958 + ], + [ + -2.35, + 0 + ], + [ + -2.09, + -0.959 + ], + [ + -1.56, + -1.739 + ], + [ + -0.92, + -2.449 + ], + [ + 0, + -2.91 + ], + [ + 0.93, + -2.413 + ], + [ + 1.6, + -1.739 + ], + [ + 2.1, + -0.958 + ] + ], + "o": [ + [ + -2.35, + 0 + ], + [ + -2.09, + -0.958 + ], + [ + -1.56, + -1.739 + ], + [ + -0.92, + -2.413 + ], + [ + 0, + -2.91 + ], + [ + 0.92, + -2.449 + ], + [ + 1.6, + -1.739 + ], + [ + 2.1, + -0.959 + ], + [ + 2.34, + 0 + ], + [ + 2.1, + 0.958 + ], + [ + 1.6, + 1.703 + ], + [ + 0.93, + 2.413 + ], + [ + 0, + 2.946 + ], + [ + -0.92, + 2.414 + ], + [ + -1.56, + 1.704 + ], + [ + -2.09, + 0.959 + ] + ], + "v": [ + [ + 0.005, + 19.699 + ], + [ + -6.655, + 18.261 + ], + [ + -12.195, + 14.268 + ], + [ + -15.915, + 8.038 + ], + [ + -17.305, + -0.001 + ], + [ + -15.915, + -7.985 + ], + [ + -12.195, + -14.214 + ], + [ + -6.655, + -18.26 + ], + [ + 0.005, + -19.699 + ], + [ + 6.655, + -18.26 + ], + [ + 12.135, + -14.214 + ], + [ + 15.915, + -7.985 + ], + [ + 17.305, + -0.001 + ], + [ + 15.915, + 8.038 + ], + [ + 12.135, + 14.268 + ], + [ + 6.655, + 18.261 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "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": [ + 963.515, + 19.948 + ], + "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": [ + [ + -1.53, + 0 + ], + [ + -1.32, + 0.568 + ], + [ + -0.96, + 1.171 + ], + [ + -0.57, + 1.704 + ], + [ + 0, + 2.272 + ], + [ + 0.57, + 1.703 + ], + [ + 0.99, + 1.171 + ], + [ + 1.34, + 0.567 + ], + [ + 1.52, + 0 + ], + [ + 1.35, + -0.604 + ], + [ + 1, + -1.171 + ], + [ + 0.57, + -1.739 + ], + [ + 0, + -2.271 + ], + [ + -0.56, + -1.739 + ], + [ + -0.96, + -1.172 + ], + [ + -1.31, + -0.604 + ] + ], + "o": [ + [ + 1.52, + 0 + ], + [ + 1.34, + -0.604 + ], + [ + 0.99, + -1.172 + ], + [ + 0.57, + -1.739 + ], + [ + 0, + -2.271 + ], + [ + -0.57, + -1.739 + ], + [ + -0.96, + -1.171 + ], + [ + -1.32, + -0.604 + ], + [ + -1.53, + 0 + ], + [ + -1.31, + 0.567 + ], + [ + -0.96, + 1.171 + ], + [ + -0.56, + 1.703 + ], + [ + 0, + 2.272 + ], + [ + 0.57, + 1.704 + ], + [ + 1, + 1.171 + ], + [ + 1.35, + 0.568 + ] + ], + "v": [ + [ + 0.005, + 13.842 + ], + [ + 4.265, + 12.99 + ], + [ + 7.725, + 10.329 + ], + [ + 10.065, + 6.016 + ], + [ + 10.915, + -0.001 + ], + [ + 10.065, + -5.963 + ], + [ + 7.725, + -10.329 + ], + [ + 4.265, + -12.937 + ], + [ + 0.005, + -13.842 + ], + [ + -4.315, + -12.937 + ], + [ + -7.775, + -10.329 + ], + [ + -10.065, + -5.963 + ], + [ + -10.915, + -0.001 + ], + [ + -10.065, + 6.016 + ], + [ + -7.775, + 10.329 + ], + [ + -4.315, + 12.99 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 2.34, + 0 + ], + [ + 2.1, + 0.959 + ], + [ + 1.6, + 1.704 + ], + [ + 0.92, + 2.414 + ], + [ + 0, + 2.946 + ], + [ + -0.93, + 2.413 + ], + [ + -1.56, + 1.703 + ], + [ + -2.09, + 0.958 + ], + [ + -2.35, + 0 + ], + [ + -2.09, + -0.959 + ], + [ + -1.56, + -1.739 + ], + [ + -0.92, + -2.449 + ], + [ + 0, + -2.91 + ], + [ + 0.93, + -2.413 + ], + [ + 1.6, + -1.739 + ], + [ + 2.09, + -0.958 + ] + ], + "o": [ + [ + -2.35, + 0 + ], + [ + -2.09, + -0.958 + ], + [ + -1.56, + -1.739 + ], + [ + -0.93, + -2.413 + ], + [ + 0, + -2.91 + ], + [ + 0.92, + -2.449 + ], + [ + 1.6, + -1.739 + ], + [ + 2.1, + -0.959 + ], + [ + 2.34, + 0 + ], + [ + 2.09, + 0.958 + ], + [ + 1.6, + 1.703 + ], + [ + 0.93, + 2.413 + ], + [ + 0, + 2.946 + ], + [ + -0.92, + 2.414 + ], + [ + -1.56, + 1.704 + ], + [ + -2.09, + 0.959 + ] + ], + "v": [ + [ + 0.005, + 19.699 + ], + [ + -6.655, + 18.261 + ], + [ + -12.195, + 14.268 + ], + [ + -15.915, + 8.038 + ], + [ + -17.305, + -0.001 + ], + [ + -15.915, + -7.985 + ], + [ + -12.195, + -14.214 + ], + [ + -6.655, + -18.26 + ], + [ + 0.005, + -19.699 + ], + [ + 6.655, + -18.26 + ], + [ + 12.135, + -14.214 + ], + [ + 15.915, + -7.985 + ], + [ + 17.305, + -0.001 + ], + [ + 15.915, + 8.038 + ], + [ + 12.135, + 14.268 + ], + [ + 6.655, + 18.261 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "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": [ + 1002.945, + 19.948 + ], + "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 + } + ], + "ip": 0, + "op": 180.00000733155, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "Meter scale (dev)", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 510, + 244.235, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 488.81, + 244.905, + 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, + -197.73 + ], + [ + 0, + 0 + ], + [ + 190.07, + 0 + ], + [ + 0, + -189.15 + ], + [ + 0, + 0 + ], + [ + -198.68, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + -189.15 + ], + [ + -190.07, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -197.73 + ], + [ + 198.68, + 0 + ] + ], + "v": [ + [ + 359.75, + 179.005 + ], + [ + 344.15, + 179.005 + ], + [ + 0, + -163.485 + ], + [ + -344.15, + 179.005 + ], + [ + -359.75, + 179.005 + ], + [ + 0, + -179.005 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 1, + "ix": 5 + }, + "lc": 2, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 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": [ + 488.81, + 309.805 + ], + "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, + -1.69 + ], + [ + 0, + 0 + ], + [ + 51.9, + 69.82 + ], + [ + 36.08, + 25.68 + ], + [ + 27.03, + 11.78 + ], + [ + 60.16, + 0 + ], + [ + 0, + -232.13 + ], + [ + 0, + 0 + ], + [ + -269.41, + 0 + ], + [ + -2.09, + -0.03 + ], + [ + 0, + 0 + ], + [ + -2, + -0.05 + ], + [ + -0.17, + 0 + ], + [ + -1.94, + -0.08 + ], + [ + -1.81, + -0.09 + ], + [ + -0.56, + -0.03 + ], + [ + -1.77, + -0.11 + ], + [ + 0, + 0 + ], + [ + -1.44, + -0.11 + ], + [ + -0.06, + -0.01 + ], + [ + -0.95, + -0.08 + ], + [ + -0.06, + -0.01 + ], + [ + -1.29, + -0.11 + ], + [ + -0.81, + -0.08 + ], + [ + -0.02, + -0.01 + ], + [ + -1.32, + -0.14 + ], + [ + -2.01, + -0.23 + ], + [ + -0.75, + -0.09 + ], + [ + -5.38, + -0.82 + ], + [ + -0.57, + -0.09 + ], + [ + -1.14, + -0.19 + ], + [ + -0.38, + -0.07 + ], + [ + -0.45, + -0.08 + ], + [ + -1.59, + -0.28 + ], + [ + -0.1, + -0.02 + ], + [ + -1.94, + -0.37 + ], + [ + -0.05, + -0.01 + ], + [ + -1.69, + -0.35 + ], + [ + -0.48, + -0.1 + ], + [ + -1.55, + -0.34 + ], + [ + -0.41, + -0.1 + ], + [ + -1.55, + -0.36 + ], + [ + -0.52, + -0.13 + ], + [ + -1.51, + -0.37 + ], + [ + -0.38, + -0.1 + ], + [ + -1.6, + -0.41 + ], + [ + -0.25, + -0.07 + ], + [ + -1.78, + -0.48 + ], + [ + -1.93, + -0.55 + ], + [ + -1.66, + -0.5 + ], + [ + -0.95, + -0.3 + ], + [ + -1.18, + -0.36 + ], + [ + -6.38, + -2.29 + ], + [ + -1.16, + -0.42 + ], + [ + -5.66, + -2.32 + ], + [ + -1.89, + -0.8 + ], + [ + -1.87, + -0.82 + ], + [ + 0, + 0 + ], + [ + -1.33, + -0.6 + ], + [ + -0.32, + -0.15 + ], + [ + -1.56, + -0.73 + ], + [ + -0.19, + -0.09 + ], + [ + -1.38, + -0.67 + ], + [ + -1.82, + -0.9 + ], + [ + -0.82, + -0.42 + ], + [ + -1.08, + -0.55 + ], + [ + -0.15, + -0.08 + ], + [ + -1.46, + -0.76 + ], + [ + -0.39, + -0.21 + ], + [ + -1.58, + -0.86 + ], + [ + -1.5, + -0.84 + ], + [ + -2, + -1.15 + ], + [ + -1.61, + -0.95 + ], + [ + -1.52, + -0.92 + ], + [ + -0.27, + -0.17 + ], + [ + -3.17, + -2.04 + ], + [ + -0.04, + -0.03 + ], + [ + -1.53, + -1.01 + ], + [ + -0.14, + -0.09 + ], + [ + -1.53, + -1.03 + ], + [ + -0.04, + -0.02 + ], + [ + -1.61, + -1.12 + ], + [ + -1.53, + -1.08 + ], + [ + -0.1, + -0.07 + ], + [ + -0.65, + -0.47 + ], + [ + -0.47, + -0.34 + ], + [ + -0.43, + -0.32 + ], + [ + -0.38, + -0.28 + ], + [ + -0.97, + -0.73 + ], + [ + -0.22, + -0.16 + ], + [ + -1.31, + -1 + ], + [ + -0.26, + -0.21 + ], + [ + -0.3, + -0.24 + ], + [ + -0.39, + -0.3 + ], + [ + -2.09, + -1.69 + ], + [ + -0.67, + -0.54 + ], + [ + -0.78, + -0.64 + ], + [ + -0.3, + -0.25 + ], + [ + -0.13, + -0.11 + ], + [ + -1.35, + -1.15 + ], + [ + -1.47, + -1.28 + ], + [ + -2.7, + -2.45 + ], + [ + -0.19, + -0.17 + ], + [ + -1.42, + -1.32 + ], + [ + -0.02, + -0.02 + ], + [ + -1.08, + -1.03 + ], + [ + -0.65, + -0.63 + ], + [ + -0.88, + -0.86 + ], + [ + -0.19, + -0.18 + ], + [ + -0.21, + -0.22 + ], + [ + -1.08, + -1.08 + ], + [ + -0.08, + -0.08 + ], + [ + -1.33, + -1.36 + ], + [ + -0.03, + -0.03 + ], + [ + -1.15, + -1.2 + ], + [ + -0.17, + -0.18 + ], + [ + -0.28, + -0.29 + ], + [ + -0.72, + -0.78 + ], + [ + -0.4, + -0.43 + ], + [ + -1.27, + -1.4 + ], + [ + -0.01, + -0.01 + ], + [ + -1.29, + -1.46 + ], + [ + -1.27, + -1.48 + ], + [ + -1.26, + -1.5 + ], + [ + -0.04, + -0.05 + ], + [ + -0.89, + -1.09 + ], + [ + -0.3, + -0.36 + ], + [ + -0.3, + -0.38 + ], + [ + -0.75, + -0.93 + ], + [ + -0.18, + -0.23 + ], + [ + -0.12, + -0.15 + ], + [ + -1.08, + -1.38 + ], + [ + -0.08, + -0.1 + ], + [ + -0.94, + -1.21 + ], + [ + -0.5, + -0.67 + ], + [ + -0.53, + -0.71 + ], + [ + -0.58, + -0.8 + ], + [ + -0.45, + -0.62 + ], + [ + 0.01, + -0.01 + ], + [ + -0.1, + -0.14 + ], + [ + -0.18, + -0.24 + ], + [ + -0.34, + -0.48 + ], + [ + -0.6, + -0.84 + ], + [ + -0.22, + -0.31 + ], + [ + -0.26, + -0.38 + ], + [ + -0.79, + -1.15 + ], + [ + -0.08, + -0.11 + ], + [ + -0.09, + -0.14 + ], + [ + -0.03, + -0.05 + ], + [ + -0.08, + -0.12 + ], + [ + -0.46, + -0.68 + ], + [ + -0.53, + -0.78 + ], + [ + -0.14, + -0.2 + ], + [ + -0.23, + -0.35 + ], + [ + -0.08, + -0.13 + ], + [ + -0.27, + -0.41 + ], + [ + -0.1, + -0.15 + ], + [ + -0.15, + -0.24 + ], + [ + -0.11, + -0.17 + ], + [ + -0.17, + -0.25 + ], + [ + -0.19, + -0.31 + ], + [ + -0.64, + -1 + ], + [ + -0.06, + -0.1 + ], + [ + -0.07, + -0.12 + ], + [ + -0.89, + -1.44 + ], + [ + -0.06, + -0.11 + ], + [ + -0.05, + -0.08 + ], + [ + -0.11, + -0.18 + ], + [ + -0.52, + -0.84 + ], + [ + -0.1, + -0.17 + ], + [ + -0.17, + -0.29 + ], + [ + -0.06, + -0.1 + ], + [ + -0.01, + 0 + ], + [ + -0.04, + -0.07 + ], + [ + -0.03, + -0.03 + ], + [ + -0.22, + -0.37 + ], + [ + -0.08, + -0.14 + ], + [ + -0.53, + -0.9 + ], + [ + -0.3, + -0.52 + ], + [ + -0.45, + -0.78 + ], + [ + -0.22, + -0.38 + ], + [ + -0.11, + -0.2 + ], + [ + -0.15, + -0.27 + ], + [ + -0.61, + -1.09 + ], + [ + -0.01, + -0.02 + ], + [ + -0.19, + -0.35 + ], + [ + -0.19, + -0.35 + ], + [ + -0.18, + -0.33 + ], + [ + -0.12, + -0.23 + ], + [ + -0.35, + -0.63 + ], + [ + -0.03, + -0.06 + ], + [ + -0.06, + -0.12 + ], + [ + -0.05, + -0.08 + ], + [ + -0.71, + -1.36 + ], + [ + -0.13, + -0.23 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.05 + ], + [ + -0.24, + -0.46 + ], + [ + -0.5, + -0.98 + ], + [ + -0.16, + -0.31 + ], + [ + -0.15, + -0.3 + ], + [ + -0.23, + -0.45 + ], + [ + -0.21, + -0.42 + ], + [ + -0.25, + -0.49 + ], + [ + -0.07, + -0.12 + ], + [ + -0.06, + -0.12 + ], + [ + -0.22, + -0.45 + ], + [ + -0.11, + -0.22 + ], + [ + -0.34, + -0.7 + ], + [ + -0.11, + -0.22 + ], + [ + -0.03, + -0.05 + ], + [ + -0.12, + -0.26 + ], + [ + -0.08, + -0.18 + ], + [ + -0.38, + -0.83 + ], + [ + -0.12, + -0.26 + ], + [ + -0.07, + -0.16 + ], + [ + -0.09, + -0.2 + ], + [ + -0.05, + -0.12 + ], + [ + -0.55, + -1.21 + ], + [ + -0.11, + -0.22 + ], + [ + 0, + 0 + ], + [ + -0.07, + -0.14 + ], + [ + -0.1, + -0.23 + ], + [ + -0.17, + -0.38 + ], + [ + -0.21, + -0.47 + ], + [ + -0.05, + -0.11 + ], + [ + -0.11, + -0.26 + ], + [ + -0.17, + -0.39 + ], + [ + -0.07, + -0.14 + ], + [ + -0.05, + -0.13 + ], + [ + -0.09, + -0.21 + ], + [ + -0.46, + -1.08 + ], + [ + -0.02, + -0.05 + ], + [ + -0.21, + -0.5 + ], + [ + -0.1, + -0.23 + ], + [ + -0.05, + -0.14 + ], + [ + -0.11, + -0.27 + ], + [ + -0.17, + -0.4 + ], + [ + -0.08, + -0.2 + ], + [ + -0.03, + -0.06 + ], + [ + 0, + 0 + ], + [ + -0.06, + -0.14 + ], + [ + -0.03, + -0.07 + ], + [ + -0.04, + -0.11 + ], + [ + 0, + -0.02 + ], + [ + -0.05, + -0.12 + ], + [ + -0.22, + -0.56 + ], + [ + -0.41, + -1.04 + ], + [ + -0.15, + -0.38 + ], + [ + -0.56, + -1.47 + ], + [ + -0.61, + -1.67 + ], + [ + -0.17, + -0.46 + ], + [ + -0.02, + -0.08 + ], + [ + -0.35, + -0.98 + ], + [ + -0.09, + -0.26 + ], + [ + -0.01, + -0.04 + ], + [ + -0.04, + -0.12 + ], + [ + -0.05, + -0.13 + ], + [ + -0.08, + -0.23 + ], + [ + -0.05, + -0.17 + ], + [ + -0.11, + -0.33 + ], + [ + -0.2, + -0.6 + ], + [ + -0.09, + -0.26 + ], + [ + -0.1, + -0.3 + ], + [ + -0.01, + -0.03 + ], + [ + -0.08, + -0.23 + ], + [ + -0.41, + -1.25 + ], + [ + -0.1, + -0.31 + ], + [ + -0.02, + -0.08 + ], + [ + -0.03, + -0.11 + ], + [ + -0.03, + -0.12 + ], + [ + -0.44, + -1.41 + ], + [ + -0.12, + -0.37 + ], + [ + -0.13, + -0.43 + ], + [ + -0.23, + -0.77 + ], + [ + -0.08, + -0.27 + ], + [ + -0.12, + -0.4 + ], + [ + -0.1, + -0.37 + ], + [ + -0.1, + -0.37 + ], + [ + -0.15, + -0.54 + ], + [ + -0.14, + -0.49 + ], + [ + -0.07, + -0.25 + ], + [ + -0.45, + -1.65 + ], + [ + -0.1, + -0.37 + ], + [ + -0.02, + -0.08 + ], + [ + -0.01, + -0.08 + ], + [ + -0.33, + -1.29 + ], + [ + -0.05, + -0.2 + ], + [ + -0.16, + -0.66 + ], + [ + -0.27, + -1.14 + ], + [ + -0.06, + -0.24 + ], + [ + -0.01, + -0.08 + ], + [ + -0.12, + -0.51 + ], + [ + -0.18, + -0.8 + ], + [ + -0.01, + -0.09 + ], + [ + -0.05, + -0.23 + ], + [ + -0.02, + -0.11 + ], + [ + -0.1, + -0.45 + ], + [ + 0, + -0.04 + ], + [ + -0.03, + -0.14 + ], + [ + -0.02, + -0.11 + ], + [ + -0.14, + -0.69 + ], + [ + -0.14, + -0.67 + ], + [ + 0, + 0 + ], + [ + -0.24, + -1.19 + ], + [ + -0.06, + -0.3 + ], + [ + -0.03, + -0.14 + ], + [ + -0.04, + -0.19 + ], + [ + -0.04, + -0.24 + ], + [ + -0.01, + -0.09 + ], + [ + -0.02, + -0.15 + ], + [ + 0, + -0.01 + ], + [ + -0.18, + -0.95 + ], + [ + -0.02, + -0.12 + ], + [ + -0.03, + -0.2 + ], + [ + -0.05, + -0.25 + ], + [ + -0.1, + -0.54 + ], + [ + -0.18, + -1.03 + ], + [ + -0.01, + -0.05 + ], + [ + -0.06, + -0.35 + ], + [ + -0.01, + -0.04 + ], + [ + -0.04, + -0.27 + ], + [ + -0.05, + -0.28 + ], + [ + -0.05, + -0.33 + ], + [ + -0.01, + -0.07 + ], + [ + -0.07, + -0.46 + ], + [ + -0.06, + -0.34 + ], + [ + -0.05, + -0.28 + ], + [ + -0.03, + -0.2 + ], + [ + -0.02, + -0.12 + ], + [ + -0.2, + -1.33 + ], + [ + -0.02, + -0.12 + ], + [ + -0.02, + -0.17 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.05 + ], + [ + -0.03, + -0.2 + ], + [ + 0, + -0.04 + ], + [ + -0.18, + -1.25 + ], + [ + 0, + -0.05 + ], + [ + -0.03, + -0.19 + ], + [ + -0.04, + -0.24 + ], + [ + -0.03, + -0.28 + ], + [ + -0.03, + -0.21 + ], + [ + -0.03, + -0.27 + ], + [ + -0.12, + -0.99 + ], + [ + -0.01, + -0.14 + ], + [ + -0.08, + -0.67 + ], + [ + -0.01, + -0.13 + ], + [ + -0.02, + -0.24 + ], + [ + 0, + -0.09 + ], + [ + -0.07, + -0.64 + ], + [ + -0.05, + -0.42 + ], + [ + -0.01, + -0.12 + ], + [ + -0.01, + -0.12 + ], + [ + -0.18, + -1.78 + ], + [ + -0.02, + -0.16 + ], + [ + -0.13, + -1.47 + ], + [ + -0.02, + -0.3 + ], + [ + -0.02, + -0.22 + ], + [ + 0, + -0.09 + ], + [ + -0.08, + -1.06 + ], + [ + -0.02, + -0.3 + ], + [ + 0, + -0.15 + ], + [ + -0.02, + -0.31 + ], + [ + -0.02, + -0.44 + ], + [ + -0.01, + -0.18 + ], + [ + 0, + -0.07 + ], + [ + -0.02, + -0.39 + ], + [ + -0.03, + -0.5 + ], + [ + -0.02, + -0.34 + ], + [ + -0.02, + -0.29 + ], + [ + -0.01, + -0.17 + ], + [ + 0, + -0.07 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.66 + ], + [ + -0.02, + -0.32 + ], + [ + -0.02, + -0.4 + ], + [ + -0.01, + -0.14 + ], + [ + -0.01, + -0.19 + ], + [ + -0.01, + -0.2 + ], + [ + -0.01, + -0.1 + ], + [ + -0.01, + -0.51 + ], + [ + -0.04, + -1.05 + ], + [ + -0.01, + -0.3 + ], + [ + -0.01, + -0.45 + ], + [ + -0.03, + -1.09 + ], + [ + 0, + 0 + ], + [ + 0, + -0.24 + ], + [ + 0, + -0.22 + ], + [ + 0, + -0.2 + ], + [ + 0, + -0.31 + ], + [ + 0, + -0.51 + ], + [ + 0, + -0.63 + ], + [ + 0, + -0.1 + ], + [ + 0, + -0.23 + ], + [ + 0, + -0.27 + ], + [ + 0, + -0.29 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + -93.5 + ], + [ + -26.36, + -35.48 + ], + [ + -23.72, + -16.9 + ], + [ + -51.8, + -22.56 + ], + [ + -233.26, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -269.41 + ], + [ + 2.1, + 0 + ], + [ + 0, + 0 + ], + [ + 2.01, + 0.03 + ], + [ + 0.17, + 0 + ], + [ + 1.94, + 0.05 + ], + [ + 1.82, + 0.07 + ], + [ + 0.57, + 0.02 + ], + [ + 1.77, + 0.09 + ], + [ + 0, + 0 + ], + [ + 1.45, + 0.09 + ], + [ + 0.06, + 0 + ], + [ + 0.95, + 0.07 + ], + [ + 0.06, + 0 + ], + [ + 1.3, + 0.1 + ], + [ + 0.82, + 0.07 + ], + [ + 0.02, + 0 + ], + [ + 1.32, + 0.12 + ], + [ + 2.03, + 0.2 + ], + [ + 0.76, + 0.09 + ], + [ + 5.44, + 0.63 + ], + [ + 0.56, + 0.08 + ], + [ + 1.14, + 0.17 + ], + [ + 0.38, + 0.05 + ], + [ + 0.46, + 0.07 + ], + [ + 1.59, + 0.26 + ], + [ + 0.1, + 0.02 + ], + [ + 1.95, + 0.35 + ], + [ + 0.06, + 0.01 + ], + [ + 1.7, + 0.32 + ], + [ + 0.49, + 0.09 + ], + [ + 1.56, + 0.32 + ], + [ + 0.41, + 0.08 + ], + [ + 1.56, + 0.33 + ], + [ + 0.53, + 0.12 + ], + [ + 1.52, + 0.34 + ], + [ + 0.39, + 0.09 + ], + [ + 1.6, + 0.39 + ], + [ + 0.26, + 0.06 + ], + [ + 1.78, + 0.46 + ], + [ + 1.94, + 0.52 + ], + [ + 1.67, + 0.47 + ], + [ + 0.95, + 0.27 + ], + [ + 1.18, + 0.35 + ], + [ + 6.5, + 2.02 + ], + [ + 1.16, + 0.41 + ], + [ + 5.77, + 2.11 + ], + [ + 1.9, + 0.78 + ], + [ + 1.89, + 0.8 + ], + [ + 0, + 0 + ], + [ + 1.35, + 0.58 + ], + [ + 0.33, + 0.15 + ], + [ + 1.56, + 0.71 + ], + [ + 0.19, + 0.08 + ], + [ + 1.38, + 0.65 + ], + [ + 1.84, + 0.87 + ], + [ + 0.83, + 0.41 + ], + [ + 1.08, + 0.54 + ], + [ + 0.14, + 0.07 + ], + [ + 1.46, + 0.74 + ], + [ + 0.39, + 0.21 + ], + [ + 1.59, + 0.84 + ], + [ + 1.51, + 0.82 + ], + [ + 2.02, + 1.12 + ], + [ + 1.62, + 0.93 + ], + [ + 1.52, + 0.9 + ], + [ + 0.27, + 0.16 + ], + [ + 3.22, + 1.96 + ], + [ + 0.04, + 0.02 + ], + [ + 1.55, + 0.99 + ], + [ + 0.14, + 0.09 + ], + [ + 1.54, + 1.02 + ], + [ + 0.03, + 0.03 + ], + [ + 1.62, + 1.1 + ], + [ + 1.55, + 1.07 + ], + [ + 0.09, + 0.07 + ], + [ + 0.65, + 0.46 + ], + [ + 0.47, + 0.34 + ], + [ + 0.43, + 0.31 + ], + [ + 0.38, + 0.27 + ], + [ + 0.98, + 0.72 + ], + [ + 0.22, + 0.15 + ], + [ + 1.33, + 0.99 + ], + [ + 0.26, + 0.2 + ], + [ + 0.3, + 0.23 + ], + [ + 0.39, + 0.3 + ], + [ + 2.13, + 1.65 + ], + [ + 0.68, + 0.54 + ], + [ + 0.79, + 0.64 + ], + [ + 0.31, + 0.25 + ], + [ + 0.13, + 0.12 + ], + [ + 1.37, + 1.13 + ], + [ + 1.5, + 1.26 + ], + [ + 2.76, + 2.39 + ], + [ + 0.19, + 0.17 + ], + [ + 1.43, + 1.3 + ], + [ + 0.02, + 0.02 + ], + [ + 1.09, + 1.02 + ], + [ + 0.66, + 0.62 + ], + [ + 0.89, + 0.85 + ], + [ + 0.19, + 0.17 + ], + [ + 0.22, + 0.21 + ], + [ + 1.1, + 1.07 + ], + [ + 0.08, + 0.08 + ], + [ + 1.35, + 1.34 + ], + [ + 0.03, + 0.04 + ], + [ + 1.17, + 1.19 + ], + [ + 0.17, + 0.18 + ], + [ + 0.28, + 0.29 + ], + [ + 0.73, + 0.77 + ], + [ + 0.41, + 0.42 + ], + [ + 1.29, + 1.39 + ], + [ + 0.01, + 0.01 + ], + [ + 1.31, + 1.44 + ], + [ + 1.3, + 1.45 + ], + [ + 1.28, + 1.47 + ], + [ + 0.04, + 0.05 + ], + [ + 0.92, + 1.08 + ], + [ + 0.31, + 0.36 + ], + [ + 0.3, + 0.37 + ], + [ + 0.76, + 0.91 + ], + [ + 0.18, + 0.22 + ], + [ + 0.12, + 0.15 + ], + [ + 1.1, + 1.37 + ], + [ + 0.08, + 0.1 + ], + [ + 0.94, + 1.21 + ], + [ + 0.51, + 0.66 + ], + [ + 0.54, + 0.71 + ], + [ + 0.6, + 0.79 + ], + [ + 0.46, + 0.61 + ], + [ + 0, + 0 + ], + [ + 0.11, + 0.13 + ], + [ + 0.18, + 0.24 + ], + [ + 0.35, + 0.48 + ], + [ + 0.6, + 0.83 + ], + [ + 0.23, + 0.31 + ], + [ + 0.27, + 0.38 + ], + [ + 0.81, + 1.14 + ], + [ + 0.08, + 0.11 + ], + [ + 0.1, + 0.14 + ], + [ + 0.03, + 0.04 + ], + [ + 0.08, + 0.11 + ], + [ + 0.47, + 0.67 + ], + [ + 0.54, + 0.77 + ], + [ + 0.14, + 0.2 + ], + [ + 0.23, + 0.34 + ], + [ + 0.08, + 0.12 + ], + [ + 0.27, + 0.4 + ], + [ + 0.1, + 0.15 + ], + [ + 0.15, + 0.23 + ], + [ + 0.11, + 0.17 + ], + [ + 0.16, + 0.25 + ], + [ + 0.2, + 0.3 + ], + [ + 0.65, + 0.99 + ], + [ + 0.06, + 0.09 + ], + [ + 0.08, + 0.12 + ], + [ + 0.92, + 1.42 + ], + [ + 0.07, + 0.1 + ], + [ + 0.05, + 0.08 + ], + [ + 0.11, + 0.18 + ], + [ + 0.53, + 0.84 + ], + [ + 0.1, + 0.17 + ], + [ + 0.18, + 0.29 + ], + [ + 0.07, + 0.11 + ], + [ + 0, + 0.01 + ], + [ + 0.04, + 0.07 + ], + [ + 0.01, + 0.04 + ], + [ + 0.22, + 0.37 + ], + [ + 0.09, + 0.14 + ], + [ + 0.54, + 0.89 + ], + [ + 0.31, + 0.52 + ], + [ + 0.46, + 0.77 + ], + [ + 0.22, + 0.37 + ], + [ + 0.11, + 0.19 + ], + [ + 0.15, + 0.26 + ], + [ + 0.62, + 1.08 + ], + [ + 0.01, + 0.02 + ], + [ + 0.19, + 0.34 + ], + [ + 0.19, + 0.35 + ], + [ + 0.19, + 0.33 + ], + [ + 0.13, + 0.23 + ], + [ + 0.35, + 0.63 + ], + [ + 0.03, + 0.06 + ], + [ + 0.07, + 0.12 + ], + [ + 0.05, + 0.08 + ], + [ + 0.73, + 1.35 + ], + [ + 0.13, + 0.24 + ], + [ + 0, + 0.01 + ], + [ + 0.03, + 0.06 + ], + [ + 0.24, + 0.46 + ], + [ + 0.51, + 0.98 + ], + [ + 0.16, + 0.31 + ], + [ + 0.16, + 0.31 + ], + [ + 0.24, + 0.45 + ], + [ + 0.21, + 0.42 + ], + [ + 0.25, + 0.49 + ], + [ + 0.06, + 0.12 + ], + [ + 0.05, + 0.12 + ], + [ + 0.21, + 0.44 + ], + [ + 0.11, + 0.22 + ], + [ + 0.34, + 0.7 + ], + [ + 0.1, + 0.21 + ], + [ + 0.02, + 0.05 + ], + [ + 0.12, + 0.25 + ], + [ + 0.09, + 0.18 + ], + [ + 0.4, + 0.82 + ], + [ + 0.13, + 0.26 + ], + [ + 0.08, + 0.16 + ], + [ + 0.1, + 0.21 + ], + [ + 0.06, + 0.12 + ], + [ + 0.57, + 1.2 + ], + [ + 0.1, + 0.22 + ], + [ + 0, + 0 + ], + [ + 0.07, + 0.14 + ], + [ + 0.1, + 0.22 + ], + [ + 0.17, + 0.38 + ], + [ + 0.21, + 0.47 + ], + [ + 0.05, + 0.11 + ], + [ + 0.11, + 0.25 + ], + [ + 0.18, + 0.39 + ], + [ + 0.06, + 0.14 + ], + [ + 0.05, + 0.12 + ], + [ + 0.09, + 0.2 + ], + [ + 0.47, + 1.07 + ], + [ + 0.02, + 0.05 + ], + [ + 0.21, + 0.5 + ], + [ + 0.1, + 0.23 + ], + [ + 0.05, + 0.14 + ], + [ + 0.12, + 0.27 + ], + [ + 0.17, + 0.4 + ], + [ + 0.08, + 0.2 + ], + [ + 0.02, + 0.06 + ], + [ + 0, + 0 + ], + [ + 0.06, + 0.14 + ], + [ + 0.02, + 0.08 + ], + [ + 0.04, + 0.11 + ], + [ + 0.01, + 0.02 + ], + [ + 0.05, + 0.12 + ], + [ + 0.23, + 0.55 + ], + [ + 0.42, + 1.03 + ], + [ + 0.15, + 0.38 + ], + [ + 0.58, + 1.47 + ], + [ + 0.64, + 1.66 + ], + [ + 0.17, + 0.46 + ], + [ + 0.03, + 0.08 + ], + [ + 0.37, + 0.98 + ], + [ + 0.09, + 0.26 + ], + [ + 0.02, + 0.04 + ], + [ + 0.05, + 0.12 + ], + [ + 0.04, + 0.12 + ], + [ + 0.08, + 0.23 + ], + [ + 0.06, + 0.16 + ], + [ + 0.12, + 0.33 + ], + [ + 0.21, + 0.6 + ], + [ + 0.09, + 0.26 + ], + [ + 0.1, + 0.29 + ], + [ + 0.01, + 0.03 + ], + [ + 0.08, + 0.23 + ], + [ + 0.42, + 1.24 + ], + [ + 0.11, + 0.31 + ], + [ + 0.02, + 0.08 + ], + [ + 0.04, + 0.11 + ], + [ + 0.04, + 0.11 + ], + [ + 0.46, + 1.4 + ], + [ + 0.12, + 0.37 + ], + [ + 0.13, + 0.43 + ], + [ + 0.24, + 0.76 + ], + [ + 0.08, + 0.26 + ], + [ + 0.12, + 0.4 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.36 + ], + [ + 0.16, + 0.54 + ], + [ + 0.15, + 0.49 + ], + [ + 0.07, + 0.24 + ], + [ + 0.47, + 1.64 + ], + [ + 0.1, + 0.37 + ], + [ + 0.02, + 0.08 + ], + [ + 0.02, + 0.07 + ], + [ + 0.35, + 1.28 + ], + [ + 0.05, + 0.19 + ], + [ + 0.17, + 0.65 + ], + [ + 0.29, + 1.14 + ], + [ + 0.07, + 0.24 + ], + [ + 0.02, + 0.07 + ], + [ + 0.13, + 0.51 + ], + [ + 0.2, + 0.8 + ], + [ + 0.03, + 0.09 + ], + [ + 0.06, + 0.22 + ], + [ + 0.03, + 0.11 + ], + [ + 0.11, + 0.43 + ], + [ + 0.01, + 0.03 + ], + [ + 0.04, + 0.13 + ], + [ + 0.03, + 0.11 + ], + [ + 0.16, + 0.68 + ], + [ + 0.16, + 0.66 + ], + [ + 0, + 0 + ], + [ + 0.26, + 1.18 + ], + [ + 0.07, + 0.3 + ], + [ + 0.03, + 0.14 + ], + [ + 0.04, + 0.19 + ], + [ + 0.05, + 0.24 + ], + [ + 0.03, + 0.09 + ], + [ + 0.04, + 0.14 + ], + [ + 0.01, + 0.01 + ], + [ + 0.19, + 0.94 + ], + [ + 0.03, + 0.12 + ], + [ + 0.04, + 0.2 + ], + [ + 0.06, + 0.24 + ], + [ + 0.1, + 0.53 + ], + [ + 0.2, + 1.03 + ], + [ + 0.01, + 0.05 + ], + [ + 0.07, + 0.35 + ], + [ + 0.01, + 0.04 + ], + [ + 0.05, + 0.27 + ], + [ + 0.05, + 0.28 + ], + [ + 0.06, + 0.32 + ], + [ + 0.01, + 0.06 + ], + [ + 0.08, + 0.45 + ], + [ + 0.07, + 0.34 + ], + [ + 0.05, + 0.27 + ], + [ + 0.03, + 0.2 + ], + [ + 0.03, + 0.11 + ], + [ + 0.22, + 1.32 + ], + [ + 0.02, + 0.12 + ], + [ + 0.03, + 0.18 + ], + [ + 0.01, + 0.08 + ], + [ + 0.01, + 0.06 + ], + [ + 0.03, + 0.2 + ], + [ + 0.01, + 0.04 + ], + [ + 0.19, + 1.25 + ], + [ + 0.01, + 0.05 + ], + [ + 0.03, + 0.19 + ], + [ + 0.03, + 0.24 + ], + [ + 0.04, + 0.28 + ], + [ + 0.03, + 0.21 + ], + [ + 0.04, + 0.27 + ], + [ + 0.14, + 0.99 + ], + [ + 0.02, + 0.14 + ], + [ + 0.09, + 0.67 + ], + [ + 0.02, + 0.13 + ], + [ + 0.04, + 0.24 + ], + [ + 0.02, + 0.09 + ], + [ + 0.08, + 0.63 + ], + [ + 0.05, + 0.41 + ], + [ + 0.01, + 0.12 + ], + [ + 0.01, + 0.12 + ], + [ + 0.2, + 1.77 + ], + [ + 0.02, + 0.16 + ], + [ + 0.15, + 1.46 + ], + [ + 0.03, + 0.29 + ], + [ + 0.02, + 0.21 + ], + [ + 0.01, + 0.09 + ], + [ + 0.1, + 1.04 + ], + [ + 0.03, + 0.29 + ], + [ + 0.01, + 0.14 + ], + [ + 0.03, + 0.3 + ], + [ + 0.03, + 0.43 + ], + [ + 0.02, + 0.18 + ], + [ + 0.01, + 0.06 + ], + [ + 0.03, + 0.38 + ], + [ + 0.04, + 0.5 + ], + [ + 0.03, + 0.34 + ], + [ + 0.02, + 0.29 + ], + [ + 0.01, + 0.17 + ], + [ + 0.01, + 0.07 + ], + [ + 0, + 0 + ], + [ + 0.04, + 0.66 + ], + [ + 0.03, + 0.31 + ], + [ + 0.02, + 0.39 + ], + [ + 0.01, + 0.13 + ], + [ + 0.01, + 0.18 + ], + [ + 0.01, + 0.19 + ], + [ + 0, + 0.09 + ], + [ + 0.02, + 0.5 + ], + [ + 0.06, + 1.05 + ], + [ + 0.02, + 0.31 + ], + [ + 0.02, + 0.45 + ], + [ + 0.05, + 1.09 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.24 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.2 + ], + [ + 0.01, + 0.3 + ], + [ + 0.02, + 0.5 + ], + [ + 0.02, + 0.63 + ], + [ + 0.01, + 0.1 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.25 + ], + [ + 0.01, + 0.29 + ], + [ + 0.02, + 1.68 + ] + ], + "v": [ + [ + 487.81, + 243.905 + ], + [ + 422.35, + 243.905 + ], + [ + 339.77, + -5.785 + ], + [ + 245.49, + -98.155 + ], + [ + 169.19, + -141.335 + ], + [ + 0, + -176.415 + ], + [ + -422.35, + 243.905 + ], + [ + -487.81, + 243.905 + ], + [ + 0, + -243.905 + ], + [ + 6.3, + -243.865 + ], + [ + 6.53, + -243.865 + ], + [ + 12.54, + -243.745 + ], + [ + 13.05, + -243.735 + ], + [ + 18.86, + -243.545 + ], + [ + 24.31, + -243.305 + ], + [ + 26.01, + -243.225 + ], + [ + 31.32, + -242.915 + ], + [ + 31.33, + -242.915 + ], + [ + 35.67, + -242.615 + ], + [ + 35.85, + -242.605 + ], + [ + 38.7, + -242.385 + ], + [ + 38.88, + -242.375 + ], + [ + 42.76, + -242.055 + ], + [ + 45.21, + -241.835 + ], + [ + 45.28, + -241.825 + ], + [ + 49.24, + -241.445 + ], + [ + 55.3, + -240.805 + ], + [ + 57.57, + -240.535 + ], + [ + 73.79, + -238.355 + ], + [ + 75.49, + -238.095 + ], + [ + 78.92, + -237.545 + ], + [ + 80.05, + -237.365 + ], + [ + 81.42, + -237.135 + ], + [ + 86.19, + -236.315 + ], + [ + 86.5, + -236.255 + ], + [ + 92.34, + -235.175 + ], + [ + 92.5, + -235.145 + ], + [ + 97.58, + -234.135 + ], + [ + 99.03, + -233.845 + ], + [ + 103.69, + -232.855 + ], + [ + 104.92, + -232.585 + ], + [ + 109.58, + -231.545 + ], + [ + 111.15, + -231.175 + ], + [ + 115.69, + -230.105 + ], + [ + 116.84, + -229.815 + ], + [ + 121.64, + -228.615 + ], + [ + 122.4, + -228.415 + ], + [ + 127.74, + -227.005 + ], + [ + 133.54, + -225.395 + ], + [ + 138.54, + -223.945 + ], + [ + 141.4, + -223.085 + ], + [ + 144.93, + -222.015 + ], + [ + 164.24, + -215.555 + ], + [ + 167.72, + -214.305 + ], + [ + 184.87, + -207.655 + ], + [ + 190.55, + -205.285 + ], + [ + 196.2, + -202.845 + ], + [ + 196.2, + -202.835 + ], + [ + 200.22, + -201.055 + ], + [ + 201.19, + -200.615 + ], + [ + 205.87, + -198.455 + ], + [ + 206.44, + -198.195 + ], + [ + 210.59, + -196.225 + ], + [ + 216.08, + -193.555 + ], + [ + 218.56, + -192.315 + ], + [ + 221.79, + -190.685 + ], + [ + 222.23, + -190.455 + ], + [ + 226.6, + -188.195 + ], + [ + 227.77, + -187.575 + ], + [ + 232.52, + -185.025 + ], + [ + 237.04, + -182.535 + ], + [ + 243.07, + -179.125 + ], + [ + 247.9, + -176.305 + ], + [ + 252.46, + -173.575 + ], + [ + 253.27, + -173.085 + ], + [ + 262.87, + -167.085 + ], + [ + 262.99, + -167.005 + ], + [ + 267.61, + -164.005 + ], + [ + 268.03, + -163.735 + ], + [ + 272.64, + -160.665 + ], + [ + 272.74, + -160.595 + ], + [ + 277.58, + -157.275 + ], + [ + 282.2, + -154.045 + ], + [ + 282.48, + -153.835 + ], + [ + 284.44, + -152.435 + ], + [ + 285.85, + -151.415 + ], + [ + 287.15, + -150.475 + ], + [ + 288.28, + -149.645 + ], + [ + 291.2, + -147.475 + ], + [ + 291.86, + -146.995 + ], + [ + 295.81, + -144.015 + ], + [ + 296.6, + -143.405 + ], + [ + 297.51, + -142.705 + ], + [ + 298.67, + -141.805 + ], + [ + 305.01, + -136.805 + ], + [ + 307.02, + -135.185 + ], + [ + 309.38, + -133.265 + ], + [ + 310.29, + -132.515 + ], + [ + 310.69, + -132.175 + ], + [ + 314.78, + -128.755 + ], + [ + 319.23, + -124.945 + ], + [ + 327.42, + -117.695 + ], + [ + 327.99, + -117.175 + ], + [ + 332.27, + -113.245 + ], + [ + 332.34, + -113.185 + ], + [ + 335.59, + -110.115 + ], + [ + 337.56, + -108.245 + ], + [ + 340.21, + -105.675 + ], + [ + 340.77, + -105.135 + ], + [ + 341.42, + -104.495 + ], + [ + 344.69, + -101.265 + ], + [ + 344.93, + -101.025 + ], + [ + 348.94, + -96.975 + ], + [ + 349.04, + -96.865 + ], + [ + 352.51, + -93.275 + ], + [ + 353.03, + -92.735 + ], + [ + 353.86, + -91.865 + ], + [ + 356.04, + -89.545 + ], + [ + 357.24, + -88.265 + ], + [ + 361.08, + -84.085 + ], + [ + 361.1, + -84.065 + ], + [ + 364.99, + -79.725 + ], + [ + 368.85, + -75.325 + ], + [ + 372.66, + -70.875 + ], + [ + 372.79, + -70.725 + ], + [ + 375.5, + -67.475 + ], + [ + 376.42, + -66.385 + ], + [ + 377.33, + -65.265 + ], + [ + 379.58, + -62.515 + ], + [ + 380.12, + -61.845 + ], + [ + 380.48, + -61.395 + ], + [ + 383.76, + -57.265 + ], + [ + 384, + -56.965 + ], + [ + 386.82, + -53.335 + ], + [ + 388.34, + -51.345 + ], + [ + 389.95, + -49.215 + ], + [ + 391.73, + -46.835 + ], + [ + 393.1, + -44.985 + ], + [ + 393.1, + -44.975 + ], + [ + 393.41, + -44.565 + ], + [ + 393.95, + -43.835 + ], + [ + 394.99, + -42.405 + ], + [ + 396.79, + -39.905 + ], + [ + 397.46, + -38.975 + ], + [ + 398.26, + -37.845 + ], + [ + 400.66, + -34.425 + ], + [ + 400.89, + -34.095 + ], + [ + 401.18, + -33.675 + ], + [ + 401.27, + -33.545 + ], + [ + 401.51, + -33.205 + ], + [ + 402.91, + -31.165 + ], + [ + 404.5, + -28.835 + ], + [ + 404.91, + -28.225 + ], + [ + 405.6, + -27.195 + ], + [ + 405.85, + -26.815 + ], + [ + 406.66, + -25.605 + ], + [ + 406.96, + -25.155 + ], + [ + 407.42, + -24.455 + ], + [ + 407.76, + -23.945 + ], + [ + 408.25, + -23.195 + ], + [ + 408.84, + -22.285 + ], + [ + 410.78, + -19.295 + ], + [ + 410.96, + -19.015 + ], + [ + 411.18, + -18.655 + ], + [ + 413.9, + -14.365 + ], + [ + 414.1, + -14.045 + ], + [ + 414.25, + -13.805 + ], + [ + 414.58, + -13.275 + ], + [ + 416.14, + -10.755 + ], + [ + 416.45, + -10.245 + ], + [ + 416.98, + -9.375 + ], + [ + 417.18, + -9.055 + ], + [ + 417.19, + -9.045 + ], + [ + 417.32, + -8.835 + ], + [ + 417.38, + -8.735 + ], + [ + 418.04, + -7.625 + ], + [ + 418.3, + -7.195 + ], + [ + 419.91, + -4.505 + ], + [ + 420.83, + -2.945 + ], + [ + 422.19, + -0.615 + ], + [ + 422.84, + 0.505 + ], + [ + 423.18, + 1.095 + ], + [ + 423.63, + 1.885 + ], + [ + 425.48, + 5.145 + ], + [ + 425.51, + 5.195 + ], + [ + 426.09, + 6.225 + ], + [ + 426.67, + 7.275 + ], + [ + 427.22, + 8.265 + ], + [ + 427.6, + 8.955 + ], + [ + 428.64, + 10.845 + ], + [ + 428.73, + 11.015 + ], + [ + 428.93, + 11.385 + ], + [ + 429.07, + 11.635 + ], + [ + 431.24, + 15.695 + ], + [ + 431.62, + 16.395 + ], + [ + 431.63, + 16.415 + ], + [ + 431.72, + 16.585 + ], + [ + 432.44, + 17.965 + ], + [ + 433.96, + 20.895 + ], + [ + 434.44, + 21.825 + ], + [ + 434.9, + 22.735 + ], + [ + 435.59, + 24.085 + ], + [ + 436.22, + 25.345 + ], + [ + 436.96, + 26.805 + ], + [ + 437.15, + 27.175 + ], + [ + 437.32, + 27.525 + ], + [ + 437.97, + 28.855 + ], + [ + 438.3, + 29.525 + ], + [ + 439.33, + 31.635 + ], + [ + 439.64, + 32.275 + ], + [ + 439.71, + 32.425 + ], + [ + 440.07, + 33.185 + ], + [ + 440.33, + 33.725 + ], + [ + 441.5, + 36.195 + ], + [ + 441.87, + 36.975 + ], + [ + 442.09, + 37.445 + ], + [ + 442.38, + 38.065 + ], + [ + 442.54, + 38.425 + ], + [ + 444.21, + 42.045 + ], + [ + 444.52, + 42.705 + ], + [ + 444.52, + 42.725 + ], + [ + 444.72, + 43.155 + ], + [ + 445.02, + 43.835 + ], + [ + 445.53, + 44.975 + ], + [ + 446.16, + 46.385 + ], + [ + 446.31, + 46.715 + ], + [ + 446.64, + 47.475 + ], + [ + 447.16, + 48.645 + ], + [ + 447.35, + 49.075 + ], + [ + 447.51, + 49.455 + ], + [ + 447.78, + 50.075 + ], + [ + 449.17, + 53.305 + ], + [ + 449.23, + 53.455 + ], + [ + 449.86, + 54.945 + ], + [ + 450.15, + 55.625 + ], + [ + 450.31, + 56.035 + ], + [ + 450.66, + 56.855 + ], + [ + 451.16, + 58.065 + ], + [ + 451.41, + 58.665 + ], + [ + 451.49, + 58.855 + ], + [ + 451.49, + 58.875 + ], + [ + 451.67, + 59.285 + ], + [ + 451.76, + 59.515 + ], + [ + 451.89, + 59.855 + ], + [ + 451.91, + 59.905 + ], + [ + 452.06, + 60.265 + ], + [ + 452.73, + 61.925 + ], + [ + 453.97, + 65.035 + ], + [ + 454.42, + 66.185 + ], + [ + 456.12, + 70.595 + ], + [ + 457.99, + 75.595 + ], + [ + 458.5, + 76.975 + ], + [ + 458.58, + 77.225 + ], + [ + 459.65, + 80.175 + ], + [ + 459.92, + 80.945 + ], + [ + 459.96, + 81.065 + ], + [ + 460.1, + 81.435 + ], + [ + 460.23, + 81.805 + ], + [ + 460.47, + 82.495 + ], + [ + 460.64, + 82.995 + ], + [ + 460.99, + 83.995 + ], + [ + 461.61, + 85.785 + ], + [ + 461.88, + 86.575 + ], + [ + 462.18, + 87.455 + ], + [ + 462.21, + 87.545 + ], + [ + 462.44, + 88.235 + ], + [ + 463.68, + 91.975 + ], + [ + 463.99, + 92.905 + ], + [ + 464.06, + 93.135 + ], + [ + 464.17, + 93.475 + ], + [ + 464.28, + 93.815 + ], + [ + 465.62, + 98.025 + ], + [ + 465.97, + 99.135 + ], + [ + 466.36, + 100.415 + ], + [ + 467.06, + 102.705 + ], + [ + 467.3, + 103.505 + ], + [ + 467.66, + 104.705 + ], + [ + 467.98, + 105.795 + ], + [ + 468.3, + 106.895 + ], + [ + 468.77, + 108.515 + ], + [ + 469.19, + 109.975 + ], + [ + 469.4, + 110.715 + ], + [ + 470.77, + 115.645 + ], + [ + 471.07, + 116.755 + ], + [ + 471.13, + 116.985 + ], + [ + 471.19, + 117.215 + ], + [ + 472.21, + 121.065 + ], + [ + 472.36, + 121.645 + ], + [ + 472.86, + 123.615 + ], + [ + 473.71, + 127.035 + ], + [ + 473.9, + 127.765 + ], + [ + 473.95, + 127.995 + ], + [ + 474.32, + 129.525 + ], + [ + 474.89, + 131.925 + ], + [ + 474.95, + 132.185 + ], + [ + 475.11, + 132.855 + ], + [ + 475.18, + 133.175 + ], + [ + 475.49, + 134.495 + ], + [ + 475.51, + 134.605 + ], + [ + 475.61, + 135.025 + ], + [ + 475.68, + 135.355 + ], + [ + 476.14, + 137.415 + ], + [ + 476.59, + 139.405 + ], + [ + 476.74, + 140.125 + ], + [ + 477.5, + 143.685 + ], + [ + 477.69, + 144.585 + ], + [ + 477.78, + 145.015 + ], + [ + 477.9, + 145.595 + ], + [ + 478.04, + 146.325 + ], + [ + 478.09, + 146.585 + ], + [ + 478.18, + 147.015 + ], + [ + 478.19, + 147.045 + ], + [ + 478.75, + 149.875 + ], + [ + 478.82, + 150.235 + ], + [ + 478.93, + 150.835 + ], + [ + 479.08, + 151.565 + ], + [ + 479.38, + 153.165 + ], + [ + 479.95, + 156.255 + ], + [ + 479.98, + 156.395 + ], + [ + 480.17, + 157.445 + ], + [ + 480.19, + 157.555 + ], + [ + 480.33, + 158.365 + ], + [ + 480.48, + 159.205 + ], + [ + 480.65, + 160.185 + ], + [ + 480.68, + 160.375 + ], + [ + 480.91, + 161.735 + ], + [ + 481.09, + 162.755 + ], + [ + 481.23, + 163.575 + ], + [ + 481.32, + 164.175 + ], + [ + 481.38, + 164.525 + ], + [ + 482.01, + 168.495 + ], + [ + 482.07, + 168.845 + ], + [ + 482.15, + 169.375 + ], + [ + 482.19, + 169.615 + ], + [ + 482.21, + 169.775 + ], + [ + 482.3, + 170.365 + ], + [ + 482.32, + 170.495 + ], + [ + 482.87, + 174.245 + ], + [ + 482.89, + 174.405 + ], + [ + 482.98, + 174.975 + ], + [ + 483.08, + 175.685 + ], + [ + 483.19, + 176.525 + ], + [ + 483.28, + 177.155 + ], + [ + 483.39, + 177.975 + ], + [ + 483.78, + 180.935 + ], + [ + 483.83, + 181.345 + ], + [ + 484.08, + 183.345 + ], + [ + 484.13, + 183.745 + ], + [ + 484.22, + 184.465 + ], + [ + 484.25, + 184.735 + ], + [ + 484.48, + 186.645 + ], + [ + 484.63, + 187.895 + ], + [ + 484.67, + 188.255 + ], + [ + 484.71, + 188.615 + ], + [ + 485.28, + 193.935 + ], + [ + 485.33, + 194.415 + ], + [ + 485.75, + 198.815 + ], + [ + 485.83, + 199.695 + ], + [ + 485.89, + 200.345 + ], + [ + 485.91, + 200.615 + ], + [ + 486.18, + 203.765 + ], + [ + 486.25, + 204.655 + ], + [ + 486.28, + 205.085 + ], + [ + 486.36, + 205.995 + ], + [ + 486.45, + 207.305 + ], + [ + 486.49, + 207.845 + ], + [ + 486.51, + 208.035 + ], + [ + 486.59, + 209.195 + ], + [ + 486.69, + 210.695 + ], + [ + 486.76, + 211.705 + ], + [ + 486.82, + 212.575 + ], + [ + 486.85, + 213.085 + ], + [ + 486.86, + 213.305 + ], + [ + 486.89, + 213.725 + ], + [ + 487, + 215.715 + ], + [ + 487.06, + 216.655 + ], + [ + 487.12, + 217.845 + ], + [ + 487.15, + 218.255 + ], + [ + 487.18, + 218.805 + ], + [ + 487.21, + 219.395 + ], + [ + 487.22, + 219.685 + ], + [ + 487.28, + 221.205 + ], + [ + 487.42, + 224.355 + ], + [ + 487.46, + 225.275 + ], + [ + 487.5, + 226.625 + ], + [ + 487.61, + 229.905 + ], + [ + 487.61, + 229.955 + ], + [ + 487.63, + 230.665 + ], + [ + 487.65, + 231.315 + ], + [ + 487.66, + 231.905 + ], + [ + 487.68, + 232.815 + ], + [ + 487.71, + 234.335 + ], + [ + 487.74, + 236.225 + ], + [ + 487.75, + 236.525 + ], + [ + 487.76, + 237.195 + ], + [ + 487.77, + 237.975 + ], + [ + 487.78, + 238.845 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.003921568627, + 0.066666666667, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 1, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 488.81, + 244.905 + ], + "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, + -269.41 + ], + [ + 0, + 0 + ], + [ + 233.26, + 0 + ], + [ + 0, + -232.13 + ], + [ + 0, + 0 + ], + [ + -269.41, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + -232.13 + ], + [ + -233.26, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -269.41 + ], + [ + 269.41, + 0 + ] + ], + "v": [ + [ + 487.81, + 243.905 + ], + [ + 422.35, + 243.905 + ], + [ + 0, + -176.415 + ], + [ + -422.35, + 243.905 + ], + [ + -487.81, + 243.905 + ], + [ + 0, + -243.905 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.003921568627, + 0.066666666667, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 1, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 488.81, + 244.905 + ], + "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, + -1.69 + ], + [ + 0, + 0 + ], + [ + 51.9, + 69.82 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.09, + -0.14 + ], + [ + -0.18, + -0.24 + ], + [ + -0.34, + -0.48 + ], + [ + -0.02, + -0.03 + ], + [ + -0.31, + -0.44 + ], + [ + -0.25, + -0.36 + ], + [ + -0.22, + -0.31 + ], + [ + -0.26, + -0.38 + ], + [ + -0.12, + -0.17 + ], + [ + -0.67, + -0.98 + ], + [ + -0.08, + -0.11 + ], + [ + -0.08, + -0.14 + ], + [ + -0.03, + -0.05 + ], + [ + -0.08, + -0.12 + ], + [ + -0.46, + -0.68 + ], + [ + -0.53, + -0.78 + ], + [ + -0.13, + -0.21 + ], + [ + -0.22, + -0.35 + ], + [ + -0.08, + -0.13 + ], + [ + -0.26, + -0.41 + ], + [ + -0.07, + -0.11 + ], + [ + -0.02, + -0.04 + ], + [ + -0.15, + -0.24 + ], + [ + -0.11, + -0.17 + ], + [ + -0.17, + -0.25 + ], + [ + -0.19, + -0.31 + ], + [ + -0.11, + -0.18 + ], + [ + -0.52, + -0.82 + ], + [ + -0.06, + -0.1 + ], + [ + -0.09, + -0.13 + ], + [ + -0.48, + -0.78 + ], + [ + -0.1, + -0.17 + ], + [ + -0.3, + -0.48 + ], + [ + -0.06, + -0.11 + ], + [ + -0.05, + -0.08 + ], + [ + -0.1, + -0.18 + ], + [ + -0.08, + -0.15 + ], + [ + -0.43, + -0.7 + ], + [ + -0.34, + -0.57 + ], + [ + -0.01, + 0 + ], + [ + -0.04, + -0.07 + ], + [ + -0.03, + -0.03 + ], + [ + -0.22, + -0.37 + ], + [ + -0.08, + -0.14 + ], + [ + -0.13, + -0.23 + ], + [ + -0.39, + -0.67 + ], + [ + -0.3, + -0.52 + ], + [ + -0.45, + -0.78 + ], + [ + -0.21, + -0.37 + ], + [ + -0.11, + -0.2 + ], + [ + -0.26, + -0.44 + ], + [ + -0.5, + -0.9 + ], + [ + -0.01, + -0.02 + ], + [ + -0.19, + -0.34 + ], + [ + -0.18, + -0.35 + ], + [ + -0.18, + -0.33 + ], + [ + -0.12, + -0.23 + ], + [ + -0.34, + -0.63 + ], + [ + -0.03, + -0.06 + ], + [ + -0.06, + -0.11 + ], + [ + 0, + -0.02 + ], + [ + -0.05, + -0.08 + ], + [ + -0.52, + -0.98 + ], + [ + -0.33, + -0.62 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.05 + ], + [ + -0.24, + -0.46 + ], + [ + -0.18, + -0.36 + ], + [ + -0.32, + -0.62 + ], + [ + -0.16, + -0.31 + ], + [ + -0.15, + -0.3 + ], + [ + -0.04, + -0.07 + ], + [ + 0, + 0 + ], + [ + -0.21, + -0.42 + ], + [ + -0.25, + -0.49 + ], + [ + -0.07, + -0.12 + ], + [ + -0.06, + -0.12 + ], + [ + -0.22, + -0.45 + ], + [ + -0.11, + -0.22 + ], + [ + -0.34, + -0.7 + ], + [ + -0.11, + -0.22 + ], + [ + -0.03, + -0.05 + ], + [ + -0.11, + -0.25 + ], + [ + -0.08, + -0.18 + ], + [ + -0.37, + -0.78 + ], + [ + -0.01, + -0.04 + ], + [ + -0.12, + -0.26 + ], + [ + -0.07, + -0.16 + ], + [ + -0.09, + -0.2 + ], + [ + -0.05, + -0.12 + ], + [ + -0.21, + -0.48 + ], + [ + -0.33, + -0.73 + ], + [ + -0.11, + -0.22 + ], + [ + 0, + 0 + ], + [ + -0.07, + -0.14 + ], + [ + -0.1, + -0.23 + ], + [ + -0.32, + -0.73 + ], + [ + -0.05, + -0.12 + ], + [ + -0.05, + -0.11 + ], + [ + -0.1, + -0.26 + ], + [ + -0.17, + -0.39 + ], + [ + -0.07, + -0.14 + ], + [ + -0.05, + -0.13 + ], + [ + -0.09, + -0.21 + ], + [ + -0.46, + -1.08 + ], + [ + -0.02, + -0.05 + ], + [ + -0.21, + -0.5 + ], + [ + -0.14, + -0.37 + ], + [ + -0.11, + -0.27 + ], + [ + -0.16, + -0.41 + ], + [ + -0.08, + -0.2 + ], + [ + -0.03, + -0.06 + ], + [ + 0, + 0 + ], + [ + -0.13, + -0.33 + ], + [ + 0, + -0.02 + ], + [ + -0.05, + -0.12 + ], + [ + -0.22, + -0.56 + ], + [ + -0.41, + -1.04 + ], + [ + -0.15, + -0.38 + ], + [ + -0.11, + -0.31 + ], + [ + -0.44, + -1.17 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.07 + ], + [ + -0.27, + -0.72 + ], + [ + -0.15, + -0.42 + ], + [ + -0.1, + -0.29 + ], + [ + -0.17, + -0.46 + ], + [ + -0.02, + -0.08 + ], + [ + -0.27, + -0.75 + ], + [ + -0.08, + -0.24 + ], + [ + -0.08, + -0.26 + ], + [ + -0.01, + -0.04 + ], + [ + -0.09, + -0.25 + ], + [ + -0.08, + -0.23 + ], + [ + -0.05, + -0.17 + ], + [ + -0.11, + -0.34 + ], + [ + -0.2, + -0.6 + ], + [ + -0.09, + -0.26 + ], + [ + -0.1, + -0.3 + ], + [ + -0.01, + -0.03 + ], + [ + -0.08, + -0.23 + ], + [ + -0.12, + -0.37 + ], + [ + -0.29, + -0.89 + ], + [ + -0.13, + -0.39 + ], + [ + -0.03, + -0.11 + ], + [ + -0.03, + -0.12 + ], + [ + -0.39, + -1.22 + ], + [ + -0.06, + -0.19 + ], + [ + -0.12, + -0.37 + ], + [ + -0.13, + -0.43 + ], + [ + -0.23, + -0.77 + ], + [ + -0.08, + -0.27 + ], + [ + -0.12, + -0.4 + ], + [ + -0.11, + -0.37 + ], + [ + -0.1, + -0.37 + ], + [ + -0.1, + -0.35 + ], + [ + -0.05, + -0.19 + ], + [ + -0.14, + -0.49 + ], + [ + -0.07, + -0.25 + ], + [ + -0.14, + -0.53 + ], + [ + -0.3, + -1.13 + ], + [ + -0.1, + -0.37 + ], + [ + -0.02, + -0.08 + ], + [ + -0.01, + -0.08 + ], + [ + -0.09, + -0.34 + ], + [ + -0.25, + -0.95 + ], + [ + -0.05, + -0.2 + ], + [ + -0.16, + -0.66 + ], + [ + -0.22, + -0.91 + ], + [ + -0.05, + -0.24 + ], + [ + -0.07, + -0.32 + ], + [ + -0.12, + -0.51 + ], + [ + -0.11, + -0.5 + ], + [ + -0.06, + -0.3 + ], + [ + -0.01, + -0.09 + ], + [ + -0.05, + -0.22 + ], + [ + -0.02, + -0.11 + ], + [ + -0.1, + -0.44 + ], + [ + 0, + -0.04 + ], + [ + -0.03, + -0.14 + ], + [ + -0.02, + -0.12 + ], + [ + -0.07, + -0.31 + ], + [ + -0.07, + -0.39 + ], + [ + -0.14, + -0.67 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.13 + ], + [ + -0.22, + -1.06 + ], + [ + -0.06, + -0.31 + ], + [ + -0.03, + -0.14 + ], + [ + -0.04, + -0.19 + ], + [ + -0.08, + -0.39 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.01 + ], + [ + -0.18, + -0.9 + ], + [ + 0, + -0.04 + ], + [ + -0.02, + -0.12 + ], + [ + -0.03, + -0.2 + ], + [ + -0.14, + -0.78 + ], + [ + -0.1, + -0.57 + ], + [ + -0.08, + -0.46 + ], + [ + -0.01, + -0.05 + ], + [ + -0.11, + -0.66 + ], + [ + -0.04, + -0.24 + ], + [ + -0.01, + -0.05 + ], + [ + -0.05, + -0.33 + ], + [ + -0.01, + -0.07 + ], + [ + -0.07, + -0.46 + ], + [ + -0.13, + -0.81 + ], + [ + -0.02, + -0.12 + ], + [ + -0.2, + -1.33 + ], + [ + -0.02, + -0.12 + ], + [ + -0.02, + -0.17 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.05 + ], + [ + -0.03, + -0.19 + ], + [ + 0, + -0.04 + ], + [ + -0.18, + -1.25 + ], + [ + 0, + -0.05 + ], + [ + -0.09, + -0.71 + ], + [ + -0.03, + -0.21 + ], + [ + -0.03, + -0.27 + ], + [ + -0.01, + -0.06 + ], + [ + -0.05, + -0.34 + ], + [ + -0.03, + -0.24 + ], + [ + -0.04, + -0.33 + ], + [ + -0.01, + -0.14 + ], + [ + -0.08, + -0.67 + ], + [ + -0.01, + -0.13 + ], + [ + -0.02, + -0.24 + ], + [ + 0, + -0.09 + ], + [ + -0.07, + -0.64 + ], + [ + -0.05, + -0.42 + ], + [ + -0.01, + -0.12 + ], + [ + -0.01, + -0.12 + ], + [ + -0.01, + -0.11 + ], + [ + -0.17, + -1.64 + ], + [ + -0.02, + -0.18 + ], + [ + -0.03, + -0.26 + ], + [ + -0.08, + -0.88 + ], + [ + -0.03, + -0.33 + ], + [ + -0.02, + -0.3 + ], + [ + -0.02, + -0.31 + ], + [ + -0.08, + -1.06 + ], + [ + -0.02, + -0.3 + ], + [ + 0, + -0.15 + ], + [ + -0.05, + -0.74 + ], + [ + -0.01, + -0.18 + ], + [ + 0, + -0.07 + ], + [ + -0.01, + -0.23 + ], + [ + -0.01, + -0.15 + ], + [ + -0.01, + -0.19 + ], + [ + -0.01, + -0.31 + ], + [ + -0.02, + -0.34 + ], + [ + -0.03, + -0.46 + ], + [ + 0, + -0.07 + ], + [ + -0.01, + -0.07 + ], + [ + 0, + -0.07 + ], + [ + -0.03, + -0.66 + ], + [ + -0.03, + -0.71 + ], + [ + -0.01, + -0.3 + ], + [ + -0.03, + -0.83 + ], + [ + -0.02, + -0.63 + ], + [ + -0.01, + -0.22 + ], + [ + 0, + -0.21 + ], + [ + -0.01, + -0.3 + ], + [ + -0.01, + -0.45 + ], + [ + -0.02, + -0.68 + ], + [ + -0.01, + -0.42 + ], + [ + 0, + 0 + ], + [ + 0, + -0.24 + ], + [ + 0, + -0.22 + ], + [ + 0, + -0.2 + ], + [ + -0.01, + -0.19 + ], + [ + 0, + 0 + ], + [ + 0, + -0.09 + ], + [ + -0.01, + -0.5 + ], + [ + 0, + -0.2 + ], + [ + 0.01, + -0.36 + ], + [ + 0, + -0.1 + ], + [ + 0, + -0.23 + ], + [ + 0, + -0.26 + ], + [ + 0, + -0.29 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + -93.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0.01, + -0.01 + ], + [ + 0, + 0 + ], + [ + 0.1, + 0.14 + ], + [ + 0.19, + 0.24 + ], + [ + 0.35, + 0.48 + ], + [ + 0.03, + 0.03 + ], + [ + 0.32, + 0.44 + ], + [ + 0.26, + 0.36 + ], + [ + 0.23, + 0.31 + ], + [ + 0.27, + 0.38 + ], + [ + 0.12, + 0.16 + ], + [ + 0.69, + 0.97 + ], + [ + 0.08, + 0.11 + ], + [ + 0.11, + 0.14 + ], + [ + 0.03, + 0.04 + ], + [ + 0.09, + 0.11 + ], + [ + 0.47, + 0.67 + ], + [ + 0.54, + 0.77 + ], + [ + 0.14, + 0.2 + ], + [ + 0.24, + 0.34 + ], + [ + 0.08, + 0.12 + ], + [ + 0.28, + 0.4 + ], + [ + 0.08, + 0.11 + ], + [ + 0.03, + 0.04 + ], + [ + 0.15, + 0.23 + ], + [ + 0.11, + 0.17 + ], + [ + 0.16, + 0.25 + ], + [ + 0.2, + 0.3 + ], + [ + 0.13, + 0.18 + ], + [ + 0.53, + 0.81 + ], + [ + 0.06, + 0.09 + ], + [ + 0.09, + 0.13 + ], + [ + 0.49, + 0.78 + ], + [ + 0.11, + 0.16 + ], + [ + 0.3, + 0.48 + ], + [ + 0.07, + 0.1 + ], + [ + 0.05, + 0.08 + ], + [ + 0.12, + 0.17 + ], + [ + 0.1, + 0.14 + ], + [ + 0.43, + 0.7 + ], + [ + 0.36, + 0.57 + ], + [ + 0, + 0.01 + ], + [ + 0.04, + 0.07 + ], + [ + 0.01, + 0.04 + ], + [ + 0.22, + 0.37 + ], + [ + 0.09, + 0.14 + ], + [ + 0.15, + 0.23 + ], + [ + 0.4, + 0.66 + ], + [ + 0.31, + 0.52 + ], + [ + 0.46, + 0.77 + ], + [ + 0.22, + 0.37 + ], + [ + 0.11, + 0.19 + ], + [ + 0.26, + 0.45 + ], + [ + 0.51, + 0.91 + ], + [ + 0.01, + 0.02 + ], + [ + 0.2, + 0.34 + ], + [ + 0.2, + 0.35 + ], + [ + 0.19, + 0.33 + ], + [ + 0.13, + 0.23 + ], + [ + 0.35, + 0.63 + ], + [ + 0.03, + 0.06 + ], + [ + 0.06, + 0.1 + ], + [ + 0.01, + 0.02 + ], + [ + 0.05, + 0.08 + ], + [ + 0.53, + 0.97 + ], + [ + 0.33, + 0.61 + ], + [ + 0, + 0.01 + ], + [ + 0.03, + 0.06 + ], + [ + 0.24, + 0.46 + ], + [ + 0.2, + 0.36 + ], + [ + 0.32, + 0.61 + ], + [ + 0.16, + 0.31 + ], + [ + 0.16, + 0.31 + ], + [ + 0.05, + 0.07 + ], + [ + 0, + 0 + ], + [ + 0.21, + 0.42 + ], + [ + 0.25, + 0.49 + ], + [ + 0.06, + 0.12 + ], + [ + 0.05, + 0.12 + ], + [ + 0.21, + 0.44 + ], + [ + 0.11, + 0.22 + ], + [ + 0.35, + 0.7 + ], + [ + 0.1, + 0.21 + ], + [ + 0.02, + 0.05 + ], + [ + 0.13, + 0.25 + ], + [ + 0.09, + 0.18 + ], + [ + 0.38, + 0.78 + ], + [ + 0.02, + 0.04 + ], + [ + 0.13, + 0.26 + ], + [ + 0.08, + 0.16 + ], + [ + 0.1, + 0.21 + ], + [ + 0.06, + 0.12 + ], + [ + 0.23, + 0.48 + ], + [ + 0.34, + 0.73 + ], + [ + 0.1, + 0.22 + ], + [ + 0, + 0 + ], + [ + 0.07, + 0.14 + ], + [ + 0.1, + 0.22 + ], + [ + 0.33, + 0.73 + ], + [ + 0.06, + 0.12 + ], + [ + 0.05, + 0.11 + ], + [ + 0.11, + 0.25 + ], + [ + 0.18, + 0.39 + ], + [ + 0.06, + 0.14 + ], + [ + 0.05, + 0.12 + ], + [ + 0.09, + 0.2 + ], + [ + 0.47, + 1.07 + ], + [ + 0.02, + 0.05 + ], + [ + 0.21, + 0.49 + ], + [ + 0.15, + 0.36 + ], + [ + 0.12, + 0.27 + ], + [ + 0.17, + 0.4 + ], + [ + 0.09, + 0.2 + ], + [ + 0.02, + 0.06 + ], + [ + 0, + 0 + ], + [ + 0.14, + 0.32 + ], + [ + 0.01, + 0.02 + ], + [ + 0.05, + 0.12 + ], + [ + 0.23, + 0.55 + ], + [ + 0.42, + 1.03 + ], + [ + 0.15, + 0.38 + ], + [ + 0.13, + 0.31 + ], + [ + 0.45, + 1.16 + ], + [ + 0, + 0 + ], + [ + 0.03, + 0.06 + ], + [ + 0.26, + 0.71 + ], + [ + 0.15, + 0.41 + ], + [ + 0.11, + 0.29 + ], + [ + 0.17, + 0.46 + ], + [ + 0.03, + 0.08 + ], + [ + 0.28, + 0.74 + ], + [ + 0.08, + 0.23 + ], + [ + 0.09, + 0.25 + ], + [ + 0.02, + 0.04 + ], + [ + 0.09, + 0.24 + ], + [ + 0.08, + 0.23 + ], + [ + 0.06, + 0.16 + ], + [ + 0.12, + 0.33 + ], + [ + 0.21, + 0.59 + ], + [ + 0.09, + 0.26 + ], + [ + 0.1, + 0.29 + ], + [ + 0.01, + 0.03 + ], + [ + 0.08, + 0.23 + ], + [ + 0.13, + 0.36 + ], + [ + 0.29, + 0.88 + ], + [ + 0.13, + 0.38 + ], + [ + 0.04, + 0.11 + ], + [ + 0.04, + 0.11 + ], + [ + 0.39, + 1.21 + ], + [ + 0.05, + 0.19 + ], + [ + 0.12, + 0.37 + ], + [ + 0.13, + 0.43 + ], + [ + 0.24, + 0.76 + ], + [ + 0.08, + 0.26 + ], + [ + 0.12, + 0.4 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.34 + ], + [ + 0.05, + 0.19 + ], + [ + 0.15, + 0.49 + ], + [ + 0.07, + 0.24 + ], + [ + 0.15, + 0.51 + ], + [ + 0.32, + 1.12 + ], + [ + 0.1, + 0.37 + ], + [ + 0.02, + 0.07 + ], + [ + 0.02, + 0.07 + ], + [ + 0.1, + 0.33 + ], + [ + 0.25, + 0.94 + ], + [ + 0.05, + 0.19 + ], + [ + 0.17, + 0.65 + ], + [ + 0.23, + 0.89 + ], + [ + 0.06, + 0.24 + ], + [ + 0.09, + 0.32 + ], + [ + 0.13, + 0.51 + ], + [ + 0.13, + 0.5 + ], + [ + 0.08, + 0.3 + ], + [ + 0.03, + 0.09 + ], + [ + 0.06, + 0.22 + ], + [ + 0.03, + 0.11 + ], + [ + 0.11, + 0.44 + ], + [ + 0.01, + 0.03 + ], + [ + 0.04, + 0.13 + ], + [ + 0.03, + 0.1 + ], + [ + 0.08, + 0.29 + ], + [ + 0.09, + 0.38 + ], + [ + 0.16, + 0.66 + ], + [ + 0, + 0 + ], + [ + 0.04, + 0.13 + ], + [ + 0.23, + 1.05 + ], + [ + 0.07, + 0.29 + ], + [ + 0.03, + 0.14 + ], + [ + 0.04, + 0.19 + ], + [ + 0.08, + 0.39 + ], + [ + 0.02, + 0.08 + ], + [ + 0.01, + 0.01 + ], + [ + 0.19, + 0.9 + ], + [ + 0.01, + 0.05 + ], + [ + 0.03, + 0.12 + ], + [ + 0.04, + 0.2 + ], + [ + 0.16, + 0.78 + ], + [ + 0.11, + 0.57 + ], + [ + 0.09, + 0.46 + ], + [ + 0.01, + 0.05 + ], + [ + 0.12, + 0.65 + ], + [ + 0.05, + 0.23 + ], + [ + 0.01, + 0.04 + ], + [ + 0.06, + 0.32 + ], + [ + 0.01, + 0.06 + ], + [ + 0.08, + 0.45 + ], + [ + 0.15, + 0.81 + ], + [ + 0.03, + 0.11 + ], + [ + 0.22, + 1.32 + ], + [ + 0.02, + 0.12 + ], + [ + 0.03, + 0.18 + ], + [ + 0.01, + 0.08 + ], + [ + 0.01, + 0.06 + ], + [ + 0.03, + 0.2 + ], + [ + 0.01, + 0.04 + ], + [ + 0.19, + 1.25 + ], + [ + 0.01, + 0.05 + ], + [ + 0.11, + 0.71 + ], + [ + 0.03, + 0.21 + ], + [ + 0.04, + 0.27 + ], + [ + 0.01, + 0.07 + ], + [ + 0.05, + 0.34 + ], + [ + 0.03, + 0.24 + ], + [ + 0.05, + 0.34 + ], + [ + 0.02, + 0.14 + ], + [ + 0.09, + 0.67 + ], + [ + 0.02, + 0.13 + ], + [ + 0.04, + 0.24 + ], + [ + 0.02, + 0.09 + ], + [ + 0.08, + 0.63 + ], + [ + 0.05, + 0.41 + ], + [ + 0.01, + 0.12 + ], + [ + 0.01, + 0.12 + ], + [ + 0.01, + 0.11 + ], + [ + 0.18, + 1.63 + ], + [ + 0.01, + 0.19 + ], + [ + 0.03, + 0.26 + ], + [ + 0.09, + 0.87 + ], + [ + 0.03, + 0.33 + ], + [ + 0.03, + 0.29 + ], + [ + 0.03, + 0.3 + ], + [ + 0.1, + 1.04 + ], + [ + 0.03, + 0.29 + ], + [ + 0.01, + 0.14 + ], + [ + 0.07, + 0.74 + ], + [ + 0.02, + 0.18 + ], + [ + 0.01, + 0.06 + ], + [ + 0.02, + 0.23 + ], + [ + 0.01, + 0.16 + ], + [ + 0.02, + 0.19 + ], + [ + 0.03, + 0.31 + ], + [ + 0.03, + 0.34 + ], + [ + 0.03, + 0.46 + ], + [ + 0.01, + 0.07 + ], + [ + 0.01, + 0.07 + ], + [ + 0, + 0.07 + ], + [ + 0.04, + 0.66 + ], + [ + 0.05, + 0.71 + ], + [ + 0.02, + 0.29 + ], + [ + 0.04, + 0.82 + ], + [ + 0.04, + 0.62 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.2 + ], + [ + 0.02, + 0.31 + ], + [ + 0.02, + 0.45 + ], + [ + 0.03, + 0.68 + ], + [ + 0.01, + 0.42 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.24 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.2 + ], + [ + 0.01, + 0.18 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.08 + ], + [ + 0.01, + 0.5 + ], + [ + 0.01, + 0.2 + ], + [ + 0.01, + 0.35 + ], + [ + 0.01, + 0.1 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.26 + ], + [ + 0.01, + 0.29 + ], + [ + 0.02, + 1.68 + ] + ], + "v": [ + [ + 83.478, + 158.112 + ], + [ + 18.018, + 158.112 + ], + [ + -64.562, + -91.578 + ], + [ + -83.477, + -115.218 + ], + [ + -32.812, + -158.111 + ], + [ + -11.232, + -130.768 + ], + [ + -11.232, + -130.778 + ], + [ + -11.222, + -130.778 + ], + [ + -10.922, + -130.359 + ], + [ + -10.382, + -129.628 + ], + [ + -9.342, + -128.198 + ], + [ + -9.272, + -128.109 + ], + [ + -8.312, + -126.778 + ], + [ + -7.542, + -125.698 + ], + [ + -6.872, + -124.768 + ], + [ + -6.072, + -123.638 + ], + [ + -5.712, + -123.138 + ], + [ + -3.672, + -120.218 + ], + [ + -3.442, + -119.888 + ], + [ + -3.152, + -119.468 + ], + [ + -3.062, + -119.338 + ], + [ + -2.822, + -118.998 + ], + [ + -1.422, + -116.958 + ], + [ + 0.168, + -114.628 + ], + [ + 0.578, + -114.018 + ], + [ + 1.268, + -112.989 + ], + [ + 1.518, + -112.609 + ], + [ + 2.328, + -111.398 + ], + [ + 2.558, + -111.059 + ], + [ + 2.628, + -110.948 + ], + [ + 3.088, + -110.248 + ], + [ + 3.428, + -109.739 + ], + [ + 3.918, + -108.989 + ], + [ + 4.508, + -108.078 + ], + [ + 4.868, + -107.538 + ], + [ + 6.448, + -105.088 + ], + [ + 6.628, + -104.809 + ], + [ + 6.888, + -104.419 + ], + [ + 8.358, + -102.088 + ], + [ + 8.668, + -101.598 + ], + [ + 9.568, + -100.158 + ], + [ + 9.768, + -99.838 + ], + [ + 9.918, + -99.598 + ], + [ + 10.248, + -99.068 + ], + [ + 10.518, + -98.638 + ], + [ + 11.808, + -96.549 + ], + [ + 12.848, + -94.848 + ], + [ + 12.858, + -94.838 + ], + [ + 12.988, + -94.628 + ], + [ + 13.048, + -94.528 + ], + [ + 13.708, + -93.419 + ], + [ + 13.968, + -92.989 + ], + [ + 14.388, + -92.299 + ], + [ + 15.578, + -90.299 + ], + [ + 16.498, + -88.739 + ], + [ + 17.858, + -86.408 + ], + [ + 18.508, + -85.288 + ], + [ + 18.848, + -84.698 + ], + [ + 19.628, + -83.359 + ], + [ + 21.148, + -80.648 + ], + [ + 21.178, + -80.598 + ], + [ + 21.758, + -79.568 + ], + [ + 22.338, + -78.518 + ], + [ + 22.888, + -77.528 + ], + [ + 23.268, + -76.838 + ], + [ + 24.308, + -74.948 + ], + [ + 24.398, + -74.778 + ], + [ + 24.578, + -74.469 + ], + [ + 24.598, + -74.409 + ], + [ + 24.738, + -74.159 + ], + [ + 26.308, + -71.239 + ], + [ + 27.288, + -69.398 + ], + [ + 27.298, + -69.378 + ], + [ + 27.388, + -69.208 + ], + [ + 28.108, + -67.828 + ], + [ + 28.678, + -66.739 + ], + [ + 29.628, + -64.898 + ], + [ + 30.108, + -63.969 + ], + [ + 30.568, + -63.058 + ], + [ + 30.688, + -62.849 + ], + [ + 31.258, + -61.709 + ], + [ + 31.888, + -60.448 + ], + [ + 32.628, + -58.989 + ], + [ + 32.818, + -58.618 + ], + [ + 32.988, + -58.268 + ], + [ + 33.638, + -56.938 + ], + [ + 33.968, + -56.268 + ], + [ + 34.998, + -54.159 + ], + [ + 35.308, + -53.518 + ], + [ + 35.378, + -53.368 + ], + [ + 35.738, + -52.609 + ], + [ + 35.998, + -52.068 + ], + [ + 37.118, + -49.719 + ], + [ + 37.168, + -49.599 + ], + [ + 37.538, + -48.818 + ], + [ + 37.758, + -48.349 + ], + [ + 38.048, + -47.729 + ], + [ + 38.208, + -47.368 + ], + [ + 38.878, + -45.938 + ], + [ + 39.878, + -43.748 + ], + [ + 40.188, + -43.089 + ], + [ + 40.188, + -43.068 + ], + [ + 40.388, + -42.638 + ], + [ + 40.688, + -41.959 + ], + [ + 41.668, + -39.779 + ], + [ + 41.828, + -39.409 + ], + [ + 41.978, + -39.078 + ], + [ + 42.308, + -38.318 + ], + [ + 42.828, + -37.148 + ], + [ + 43.018, + -36.719 + ], + [ + 43.178, + -36.339 + ], + [ + 43.448, + -35.719 + ], + [ + 44.838, + -32.489 + ], + [ + 44.898, + -32.339 + ], + [ + 45.528, + -30.849 + ], + [ + 45.978, + -29.758 + ], + [ + 46.328, + -28.938 + ], + [ + 46.828, + -27.728 + ], + [ + 47.078, + -27.128 + ], + [ + 47.158, + -26.938 + ], + [ + 47.158, + -26.918 + ], + [ + 47.558, + -25.938 + ], + [ + 47.578, + -25.888 + ], + [ + 47.728, + -25.529 + ], + [ + 48.398, + -23.868 + ], + [ + 49.638, + -20.758 + ], + [ + 50.088, + -19.608 + ], + [ + 50.448, + -18.688 + ], + [ + 51.788, + -15.198 + ], + [ + 51.998, + -14.659 + ], + [ + 52.078, + -14.458 + ], + [ + 52.878, + -12.318 + ], + [ + 53.338, + -11.078 + ], + [ + 53.658, + -10.198 + ], + [ + 54.168, + -8.818 + ], + [ + 54.248, + -8.568 + ], + [ + 55.068, + -6.328 + ], + [ + 55.318, + -5.618 + ], + [ + 55.588, + -4.849 + ], + [ + 55.628, + -4.728 + ], + [ + 55.898, + -3.988 + ], + [ + 56.138, + -3.298 + ], + [ + 56.308, + -2.798 + ], + [ + 56.658, + -1.798 + ], + [ + 57.278, + -0.008 + ], + [ + 57.548, + 0.781 + ], + [ + 57.848, + 1.661 + ], + [ + 57.878, + 1.752 + ], + [ + 58.108, + 2.442 + ], + [ + 58.478, + 3.531 + ], + [ + 59.348, + 6.182 + ], + [ + 59.728, + 7.341 + ], + [ + 59.838, + 7.682 + ], + [ + 59.948, + 8.022 + ], + [ + 61.118, + 11.672 + ], + [ + 61.288, + 12.232 + ], + [ + 61.638, + 13.341 + ], + [ + 62.028, + 14.622 + ], + [ + 62.728, + 16.911 + ], + [ + 62.968, + 17.712 + ], + [ + 63.328, + 18.911 + ], + [ + 63.648, + 20.002 + ], + [ + 63.968, + 21.102 + ], + [ + 64.278, + 22.142 + ], + [ + 64.438, + 22.721 + ], + [ + 64.858, + 24.182 + ], + [ + 65.068, + 24.922 + ], + [ + 65.508, + 26.482 + ], + [ + 66.438, + 29.852 + ], + [ + 66.738, + 30.961 + ], + [ + 66.798, + 31.192 + ], + [ + 66.858, + 31.422 + ], + [ + 67.128, + 32.422 + ], + [ + 67.878, + 35.272 + ], + [ + 68.028, + 35.852 + ], + [ + 68.528, + 37.822 + ], + [ + 69.208, + 40.522 + ], + [ + 69.378, + 41.242 + ], + [ + 69.618, + 42.202 + ], + [ + 69.988, + 43.732 + ], + [ + 70.348, + 45.232 + ], + [ + 70.558, + 46.132 + ], + [ + 70.618, + 46.392 + ], + [ + 70.778, + 47.062 + ], + [ + 70.848, + 47.382 + ], + [ + 71.158, + 48.702 + ], + [ + 71.178, + 48.812 + ], + [ + 71.278, + 49.232 + ], + [ + 71.348, + 49.562 + ], + [ + 71.558, + 50.461 + ], + [ + 71.808, + 51.622 + ], + [ + 72.258, + 53.612 + ], + [ + 72.408, + 54.332 + ], + [ + 72.498, + 54.721 + ], + [ + 73.168, + 57.892 + ], + [ + 73.358, + 58.792 + ], + [ + 73.448, + 59.221 + ], + [ + 73.568, + 59.802 + ], + [ + 73.808, + 60.982 + ], + [ + 73.848, + 61.221 + ], + [ + 73.858, + 61.252 + ], + [ + 74.398, + 63.952 + ], + [ + 74.418, + 64.082 + ], + [ + 74.488, + 64.442 + ], + [ + 74.598, + 65.042 + ], + [ + 75.048, + 67.372 + ], + [ + 75.368, + 69.082 + ], + [ + 75.618, + 70.461 + ], + [ + 75.648, + 70.602 + ], + [ + 75.998, + 72.572 + ], + [ + 76.128, + 73.272 + ], + [ + 76.148, + 73.411 + ], + [ + 76.318, + 74.392 + ], + [ + 76.348, + 74.582 + ], + [ + 76.578, + 75.942 + ], + [ + 76.988, + 78.382 + ], + [ + 77.048, + 78.732 + ], + [ + 77.678, + 82.702 + ], + [ + 77.738, + 83.052 + ], + [ + 77.818, + 83.582 + ], + [ + 77.858, + 83.822 + ], + [ + 77.878, + 83.982 + ], + [ + 77.968, + 84.572 + ], + [ + 77.988, + 84.702 + ], + [ + 78.538, + 88.452 + ], + [ + 78.558, + 88.612 + ], + [ + 78.858, + 90.732 + ], + [ + 78.948, + 91.362 + ], + [ + 79.058, + 92.182 + ], + [ + 79.088, + 92.382 + ], + [ + 79.228, + 93.411 + ], + [ + 79.318, + 94.132 + ], + [ + 79.448, + 95.142 + ], + [ + 79.498, + 95.552 + ], + [ + 79.748, + 97.552 + ], + [ + 79.798, + 97.951 + ], + [ + 79.888, + 98.672 + ], + [ + 79.918, + 98.942 + ], + [ + 80.148, + 100.852 + ], + [ + 80.298, + 102.102 + ], + [ + 80.338, + 102.462 + ], + [ + 80.378, + 102.821 + ], + [ + 80.418, + 103.152 + ], + [ + 80.948, + 108.071 + ], + [ + 80.998, + 108.622 + ], + [ + 81.078, + 109.412 + ], + [ + 81.328, + 112.032 + ], + [ + 81.418, + 113.021 + ], + [ + 81.498, + 113.902 + ], + [ + 81.578, + 114.821 + ], + [ + 81.848, + 117.972 + ], + [ + 81.918, + 118.862 + ], + [ + 81.948, + 119.292 + ], + [ + 82.118, + 121.511 + ], + [ + 82.158, + 122.052 + ], + [ + 82.178, + 122.242 + ], + [ + 82.228, + 122.942 + ], + [ + 82.258, + 123.402 + ], + [ + 82.298, + 123.962 + ], + [ + 82.358, + 124.902 + ], + [ + 82.428, + 125.912 + ], + [ + 82.518, + 127.292 + ], + [ + 82.528, + 127.511 + ], + [ + 82.548, + 127.722 + ], + [ + 82.558, + 127.932 + ], + [ + 82.668, + 129.922 + ], + [ + 82.788, + 132.052 + ], + [ + 82.838, + 132.932 + ], + [ + 82.948, + 135.412 + ], + [ + 83.038, + 137.282 + ], + [ + 83.068, + 137.942 + ], + [ + 83.088, + 138.562 + ], + [ + 83.128, + 139.482 + ], + [ + 83.168, + 140.831 + ], + [ + 83.248, + 142.862 + ], + [ + 83.278, + 144.112 + ], + [ + 83.278, + 144.162 + ], + [ + 83.298, + 144.872 + ], + [ + 83.318, + 145.521 + ], + [ + 83.328, + 146.112 + ], + [ + 83.348, + 146.662 + ], + [ + 83.348, + 147.021 + ], + [ + 83.358, + 147.271 + ], + [ + 83.388, + 148.771 + ], + [ + 83.398, + 149.372 + ], + [ + 83.408, + 150.432 + ], + [ + 83.418, + 150.732 + ], + [ + 83.428, + 151.402 + ], + [ + 83.438, + 152.182 + ], + [ + 83.448, + 153.052 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.094117654539, + 0.745098039216, + 0.447058853449, + 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": [ + 893.142, + 330.698 + ], + "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, + -1.52 + ], + [ + 0, + 0 + ], + [ + 51.9, + 69.82 + ], + [ + 36.08, + 25.68 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.47, + -0.34 + ], + [ + -0.43, + -0.31 + ], + [ + -0.38, + -0.28 + ], + [ + -0.63, + -0.47 + ], + [ + -0.34, + -0.26 + ], + [ + -0.22, + -0.16 + ], + [ + -1.31, + -1 + ], + [ + -0.26, + -0.21 + ], + [ + -0.3, + -0.23 + ], + [ + -0.39, + -0.3 + ], + [ + -2.09, + -1.69 + ], + [ + -0.67, + -0.54 + ], + [ + -0.78, + -0.64 + ], + [ + -0.3, + -0.25 + ], + [ + -0.13, + -0.11 + ], + [ + -0.6, + -0.5 + ], + [ + -0.76, + -0.65 + ], + [ + -0.15, + -0.12 + ], + [ + -0.9, + -0.77 + ], + [ + -0.44, + -0.39 + ], + [ + -0.46, + -0.4 + ], + [ + -0.88, + -0.78 + ], + [ + -0.71, + -0.63 + ], + [ + -0.67, + -0.61 + ], + [ + -0.19, + -0.17 + ], + [ + -0.36, + -0.33 + ], + [ + -0.69, + -0.64 + ], + [ + -0.37, + -0.34 + ], + [ + -0.02, + -0.02 + ], + [ + -1.08, + -1.03 + ], + [ + -0.65, + -0.63 + ], + [ + -0.44, + -0.42 + ], + [ + -0.44, + -0.44 + ], + [ + -0.19, + -0.18 + ], + [ + -0.21, + -0.22 + ], + [ + -0.84, + -0.84 + ], + [ + -0.25, + -0.25 + ], + [ + -0.08, + -0.08 + ], + [ + -1.33, + -1.36 + ], + [ + -0.03, + -0.03 + ], + [ + -0.03, + -0.02 + ], + [ + -0.76, + -0.79 + ], + [ + -0.36, + -0.38 + ], + [ + -0.17, + -0.18 + ], + [ + -0.28, + -0.29 + ], + [ + -0.72, + -0.77 + ], + [ + -0.4, + -0.43 + ], + [ + -0.69, + -0.76 + ], + [ + -0.58, + -0.64 + ], + [ + -0.01, + -0.01 + ], + [ + -0.76, + -0.85 + ], + [ + -0.36, + -0.4 + ], + [ + -0.76, + -0.87 + ], + [ + -0.68, + -0.79 + ], + [ + -0.54, + -0.64 + ], + [ + -0.72, + -0.85 + ], + [ + -0.04, + -0.05 + ], + [ + -0.89, + -1.09 + ], + [ + -0.6, + -0.74 + ], + [ + -0.75, + -0.93 + ], + [ + -0.18, + -0.23 + ], + [ + -0.12, + -0.15 + ], + [ + 0, + 0 + ], + [ + -0.65, + -0.83 + ], + [ + -0.08, + -0.1 + ], + [ + -0.94, + -1.21 + ], + [ + -0.5, + -0.67 + ], + [ + -0.53, + -0.71 + ], + [ + -0.58, + -0.8 + ], + [ + -0.45, + -0.62 + ], + [ + 0, + 0 + ], + [ + -0.09, + -0.14 + ], + [ + -0.18, + -0.24 + ], + [ + -0.34, + -0.48 + ], + [ + -0.02, + -0.03 + ], + [ + -0.32, + -0.45 + ], + [ + -0.25, + -0.36 + ], + [ + -0.22, + -0.31 + ], + [ + -0.26, + -0.38 + ], + [ + -0.12, + -0.17 + ], + [ + -0.67, + -0.98 + ], + [ + -0.08, + -0.11 + ], + [ + -0.09, + -0.14 + ], + [ + -0.03, + -0.05 + ], + [ + -0.08, + -0.12 + ], + [ + -0.46, + -0.68 + ], + [ + -0.53, + -0.78 + ], + [ + -0.14, + -0.2 + ], + [ + -0.23, + -0.35 + ], + [ + -0.08, + -0.13 + ], + [ + -0.26, + -0.41 + ], + [ + -0.08, + -0.12 + ], + [ + -0.02, + -0.04 + ], + [ + -0.15, + -0.24 + ], + [ + -0.11, + -0.17 + ], + [ + -0.17, + -0.25 + ], + [ + -0.19, + -0.31 + ], + [ + -0.64, + -1 + ], + [ + -0.06, + -0.1 + ], + [ + -0.07, + -0.12 + ], + [ + -0.5, + -0.79 + ], + [ + -0.1, + -0.17 + ], + [ + -0.3, + -0.48 + ], + [ + -0.06, + -0.11 + ], + [ + -0.05, + -0.08 + ], + [ + -0.11, + -0.18 + ], + [ + -0.08, + -0.15 + ], + [ + -0.43, + -0.7 + ], + [ + -0.1, + -0.17 + ], + [ + -0.17, + -0.29 + ], + [ + -0.35, + -0.58 + ], + [ + -0.08, + -0.14 + ], + [ + -0.53, + -0.9 + ], + [ + -0.3, + -0.52 + ], + [ + -0.45, + -0.78 + ], + [ + -0.22, + -0.38 + ], + [ + -0.11, + -0.2 + ], + [ + -0.15, + -0.27 + ], + [ + -0.61, + -1.09 + ], + [ + -0.01, + -0.02 + ], + [ + -0.19, + -0.35 + ], + [ + -0.19, + -0.35 + ], + [ + -0.18, + -0.33 + ], + [ + -0.12, + -0.23 + ], + [ + -0.35, + -0.63 + ], + [ + -0.03, + -0.06 + ], + [ + -0.06, + -0.12 + ], + [ + -0.05, + -0.08 + ], + [ + -0.52, + -0.98 + ], + [ + -0.2, + -0.38 + ], + [ + -0.13, + -0.23 + ], + [ + 0, + 0 + ], + [ + -0.04, + -0.06 + ], + [ + -0.24, + -0.46 + ], + [ + -0.18, + -0.36 + ], + [ + -0.32, + -0.62 + ], + [ + -0.16, + -0.31 + ], + [ + -0.15, + -0.3 + ], + [ + -0.23, + -0.45 + ], + [ + -0.21, + -0.42 + ], + [ + -0.58, + -1.18 + ], + [ + -0.11, + -0.22 + ], + [ + -0.34, + -0.7 + ], + [ + -0.13, + -0.26 + ], + [ + -0.12, + -0.26 + ], + [ + -0.08, + -0.18 + ], + [ + -0.37, + -0.78 + ], + [ + -0.01, + -0.04 + ], + [ + -0.12, + -0.26 + ], + [ + -0.07, + -0.16 + ], + [ + -0.09, + -0.2 + ], + [ + -0.05, + -0.12 + ], + [ + -0.21, + -0.48 + ], + [ + -0.33, + -0.73 + ], + [ + -0.1, + -0.23 + ], + [ + -0.07, + -0.14 + ], + [ + -0.1, + -0.23 + ], + [ + -0.17, + -0.38 + ], + [ + -0.15, + -0.35 + ], + [ + -0.05, + -0.12 + ], + [ + -0.05, + -0.11 + ], + [ + -0.1, + -0.26 + ], + [ + -0.17, + -0.39 + ], + [ + -0.07, + -0.14 + ], + [ + -0.05, + -0.13 + ], + [ + -0.09, + -0.21 + ], + [ + -0.46, + -1.08 + ], + [ + -0.02, + -0.05 + ], + [ + -0.21, + -0.5 + ], + [ + -0.1, + -0.23 + ], + [ + -0.17, + -0.41 + ], + [ + -0.16, + -0.41 + ], + [ + -0.08, + -0.2 + ], + [ + -0.03, + -0.06 + ], + [ + 0, + 0 + ], + [ + -0.09, + -0.22 + ], + [ + -0.04, + -0.11 + ], + [ + 0, + -0.02 + ], + [ + -0.05, + -0.12 + ], + [ + -0.22, + -0.56 + ], + [ + -0.41, + -1.04 + ], + [ + -0.15, + -0.38 + ], + [ + -0.11, + -0.31 + ], + [ + -0.42, + -1.1 + ], + [ + -0.09, + -0.25 + ], + [ + -0.03, + -0.07 + ], + [ + -0.27, + -0.71 + ], + [ + -0.15, + -0.42 + ], + [ + -0.1, + -0.29 + ], + [ + -0.17, + -0.46 + ], + [ + -0.02, + -0.08 + ], + [ + -0.27, + -0.75 + ], + [ + -0.08, + -0.24 + ], + [ + -0.08, + -0.26 + ], + [ + -0.06, + -0.16 + ], + [ + -0.05, + -0.13 + ], + [ + -0.08, + -0.23 + ], + [ + -0.05, + -0.17 + ], + [ + -0.11, + -0.34 + ], + [ + -0.2, + -0.6 + ], + [ + -0.09, + -0.26 + ], + [ + -0.1, + -0.29 + ], + [ + -0.01, + -0.03 + ], + [ + -0.07, + -0.23 + ], + [ + -0.12, + -0.37 + ], + [ + -0.18, + -0.55 + ], + [ + -0.1, + -0.33 + ], + [ + -0.01, + -0.02 + ], + [ + -0.09, + -0.29 + ], + [ + -0.02, + -0.08 + ], + [ + -0.03, + -0.11 + ], + [ + -0.26, + -0.79 + ], + [ + -0.17, + -0.54 + ], + [ + -0.06, + -0.19 + ], + [ + -0.12, + -0.37 + ], + [ + -0.13, + -0.43 + ], + [ + -0.06, + -0.18 + ], + [ + -0.18, + -0.59 + ], + [ + -0.08, + -0.27 + ], + [ + -0.12, + -0.4 + ], + [ + -0.1, + -0.37 + ], + [ + -0.1, + -0.37 + ], + [ + -0.1, + -0.35 + ], + [ + -0.05, + -0.19 + ], + [ + -0.14, + -0.49 + ], + [ + -0.07, + -0.25 + ], + [ + -0.14, + -0.53 + ], + [ + -0.3, + -1.13 + ], + [ + -0.1, + -0.37 + ], + [ + -0.02, + -0.08 + ], + [ + -0.01, + -0.08 + ], + [ + -0.09, + -0.34 + ], + [ + -0.25, + -0.95 + ], + [ + -0.05, + -0.2 + ], + [ + -0.16, + -0.66 + ], + [ + -0.22, + -0.91 + ], + [ + -0.12, + -0.48 + ], + [ + -0.01, + -0.08 + ], + [ + -0.16, + -0.66 + ], + [ + -0.08, + -0.35 + ], + [ + -0.06, + -0.3 + ], + [ + -0.01, + -0.09 + ], + [ + -0.05, + -0.23 + ], + [ + -0.02, + -0.11 + ], + [ + -0.1, + -0.45 + ], + [ + 0, + -0.04 + ], + [ + -0.03, + -0.14 + ], + [ + -0.02, + -0.12 + ], + [ + -0.07, + -0.31 + ], + [ + -0.23, + -1.05 + ], + [ + -0.08, + -0.37 + ], + [ + -0.22, + -1.06 + ], + [ + -0.06, + -0.31 + ], + [ + -0.11, + -0.58 + ], + [ + -0.01, + -0.09 + ], + [ + -0.01, + -0.06 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.01 + ], + [ + -0.18, + -0.9 + ], + [ + 0, + -0.04 + ], + [ + -0.02, + -0.12 + ], + [ + -0.08, + -0.45 + ], + [ + -0.09, + -0.51 + ], + [ + -0.1, + -0.6 + ], + [ + -0.09, + -0.51 + ], + [ + -0.06, + -0.35 + ], + [ + -0.01, + -0.04 + ], + [ + -0.02, + -0.13 + ], + [ + -0.07, + -0.38 + ], + [ + -0.01, + -0.05 + ], + [ + -0.05, + -0.33 + ], + [ + -0.01, + -0.07 + ], + [ + -0.13, + -0.79 + ], + [ + -0.05, + -0.27 + ], + [ + -0.03, + -0.2 + ], + [ + -0.02, + -0.12 + ], + [ + -0.14, + -0.86 + ], + [ + -0.09, + -0.58 + ], + [ + -0.02, + -0.17 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.05 + ], + [ + -0.03, + -0.2 + ], + [ + 0, + -0.04 + ], + [ + -0.18, + -1.25 + ], + [ + -0.04, + -0.24 + ], + [ + -0.04, + -0.24 + ], + [ + -0.06, + -0.49 + ], + [ + -0.03, + -0.27 + ], + [ + -0.01, + -0.06 + ], + [ + -0.05, + -0.34 + ], + [ + -0.03, + -0.24 + ], + [ + -0.04, + -0.33 + ], + [ + -0.01, + -0.14 + ], + [ + -0.08, + -0.67 + ], + [ + -0.01, + -0.13 + ], + [ + -0.02, + -0.24 + ], + [ + 0, + -0.09 + ], + [ + -0.1, + -0.87 + ], + [ + -0.02, + -0.19 + ], + [ + -0.01, + -0.12 + ], + [ + -0.02, + -0.1 + ], + [ + 0, + 0 + ], + [ + -0.01, + -0.11 + ], + [ + -0.17, + -1.64 + ], + [ + 0, + 0 + ], + [ + -0.02, + -0.16 + ], + [ + -0.03, + -0.26 + ], + [ + -0.08, + -0.87 + ], + [ + -0.02, + -0.22 + ], + [ + -0.03, + -0.39 + ], + [ + -0.02, + -0.22 + ], + [ + -0.04, + -0.43 + ], + [ + -0.06, + -0.71 + ], + [ + -0.02, + -0.3 + ], + [ + -0.04, + -0.44 + ], + [ + -0.02, + -0.44 + ], + [ + -0.01, + -0.18 + ], + [ + 0, + -0.07 + ], + [ + -0.01, + -0.23 + ], + [ + -0.01, + -0.15 + ], + [ + -0.01, + -0.19 + ], + [ + -0.01, + -0.31 + ], + [ + -0.02, + -0.34 + ], + [ + -0.02, + -0.29 + ], + [ + -0.01, + -0.17 + ], + [ + -0.01, + -0.14 + ], + [ + 0, + -0.07 + ], + [ + -0.05, + -0.98 + ], + [ + -0.01, + -0.22 + ], + [ + -0.02, + -0.32 + ], + [ + -0.01, + -0.16 + ], + [ + -0.01, + -0.03 + ], + [ + -0.01, + -0.2 + ], + [ + -0.01, + -0.1 + ], + [ + -0.04, + -1.13 + ], + [ + -0.01, + -0.22 + ], + [ + -0.02, + -0.51 + ], + [ + -0.04, + -1.13 + ], + [ + -0.01, + -0.42 + ], + [ + 0, + 0 + ], + [ + 0, + -0.24 + ], + [ + 0, + -0.22 + ], + [ + -0.01, + -0.38 + ], + [ + 0, + -0.2 + ], + [ + 0, + -0.42 + ], + [ + 0, + -0.08 + ], + [ + 0, + -0.2 + ], + [ + 0, + -0.37 + ], + [ + 0, + 0 + ], + [ + 0, + -0.23 + ], + [ + 0, + -0.27 + ], + [ + 0, + -0.29 + ], + [ + 0, + -0.18 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + -93.5 + ], + [ + -26.36, + -35.48 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0.47, + 0.34 + ], + [ + 0.43, + 0.31 + ], + [ + 0.38, + 0.27 + ], + [ + 0.64, + 0.47 + ], + [ + 0.34, + 0.25 + ], + [ + 0.22, + 0.15 + ], + [ + 1.33, + 0.99 + ], + [ + 0.26, + 0.2 + ], + [ + 0.31, + 0.24 + ], + [ + 0.39, + 0.3 + ], + [ + 2.13, + 1.65 + ], + [ + 0.68, + 0.54 + ], + [ + 0.79, + 0.64 + ], + [ + 0.31, + 0.25 + ], + [ + 0.13, + 0.12 + ], + [ + 0.61, + 0.5 + ], + [ + 0.76, + 0.63 + ], + [ + 0.14, + 0.12 + ], + [ + 0.9, + 0.77 + ], + [ + 0.43, + 0.37 + ], + [ + 0.46, + 0.39 + ], + [ + 0.89, + 0.78 + ], + [ + 0.72, + 0.64 + ], + [ + 0.68, + 0.61 + ], + [ + 0.19, + 0.17 + ], + [ + 0.36, + 0.32 + ], + [ + 0.7, + 0.64 + ], + [ + 0.37, + 0.35 + ], + [ + 0.02, + 0.02 + ], + [ + 1.09, + 1.02 + ], + [ + 0.66, + 0.62 + ], + [ + 0.44, + 0.42 + ], + [ + 0.45, + 0.43 + ], + [ + 0.19, + 0.17 + ], + [ + 0.22, + 0.21 + ], + [ + 0.85, + 0.82 + ], + [ + 0.25, + 0.24 + ], + [ + 0.08, + 0.08 + ], + [ + 1.35, + 1.34 + ], + [ + 0.03, + 0.04 + ], + [ + 0.03, + 0.03 + ], + [ + 0.76, + 0.79 + ], + [ + 0.37, + 0.38 + ], + [ + 0.17, + 0.18 + ], + [ + 0.28, + 0.29 + ], + [ + 0.73, + 0.77 + ], + [ + 0.41, + 0.42 + ], + [ + 0.7, + 0.75 + ], + [ + 0.59, + 0.64 + ], + [ + 0.01, + 0.01 + ], + [ + 0.78, + 0.85 + ], + [ + 0.36, + 0.4 + ], + [ + 0.77, + 0.87 + ], + [ + 0.69, + 0.79 + ], + [ + 0.55, + 0.63 + ], + [ + 0.73, + 0.85 + ], + [ + 0.04, + 0.05 + ], + [ + 0.92, + 1.08 + ], + [ + 0.62, + 0.73 + ], + [ + 0.76, + 0.91 + ], + [ + 0.18, + 0.22 + ], + [ + 0.12, + 0.15 + ], + [ + 0, + 0 + ], + [ + 0.65, + 0.82 + ], + [ + 0.08, + 0.1 + ], + [ + 0.94, + 1.21 + ], + [ + 0.51, + 0.66 + ], + [ + 0.54, + 0.71 + ], + [ + 0.6, + 0.79 + ], + [ + 0.46, + 0.61 + ], + [ + 0, + 0 + ], + [ + 0.1, + 0.14 + ], + [ + 0.19, + 0.24 + ], + [ + 0.35, + 0.48 + ], + [ + 0.03, + 0.03 + ], + [ + 0.32, + 0.44 + ], + [ + 0.26, + 0.36 + ], + [ + 0.23, + 0.31 + ], + [ + 0.27, + 0.38 + ], + [ + 0.12, + 0.16 + ], + [ + 0.69, + 0.97 + ], + [ + 0.08, + 0.11 + ], + [ + 0.1, + 0.14 + ], + [ + 0.03, + 0.04 + ], + [ + 0.08, + 0.11 + ], + [ + 0.47, + 0.67 + ], + [ + 0.54, + 0.77 + ], + [ + 0.14, + 0.2 + ], + [ + 0.23, + 0.34 + ], + [ + 0.08, + 0.12 + ], + [ + 0.28, + 0.4 + ], + [ + 0.08, + 0.11 + ], + [ + 0.03, + 0.04 + ], + [ + 0.15, + 0.23 + ], + [ + 0.11, + 0.17 + ], + [ + 0.16, + 0.25 + ], + [ + 0.2, + 0.3 + ], + [ + 0.65, + 0.99 + ], + [ + 0.06, + 0.09 + ], + [ + 0.08, + 0.12 + ], + [ + 0.51, + 0.79 + ], + [ + 0.11, + 0.16 + ], + [ + 0.3, + 0.48 + ], + [ + 0.07, + 0.1 + ], + [ + 0.05, + 0.08 + ], + [ + 0.11, + 0.18 + ], + [ + 0.1, + 0.14 + ], + [ + 0.43, + 0.7 + ], + [ + 0.1, + 0.17 + ], + [ + 0.18, + 0.29 + ], + [ + 0.36, + 0.58 + ], + [ + 0.09, + 0.14 + ], + [ + 0.54, + 0.89 + ], + [ + 0.31, + 0.52 + ], + [ + 0.46, + 0.77 + ], + [ + 0.22, + 0.37 + ], + [ + 0.11, + 0.19 + ], + [ + 0.15, + 0.26 + ], + [ + 0.62, + 1.08 + ], + [ + 0.01, + 0.02 + ], + [ + 0.19, + 0.34 + ], + [ + 0.19, + 0.35 + ], + [ + 0.19, + 0.33 + ], + [ + 0.13, + 0.23 + ], + [ + 0.35, + 0.63 + ], + [ + 0.03, + 0.06 + ], + [ + 0.07, + 0.12 + ], + [ + 0.05, + 0.08 + ], + [ + 0.53, + 0.97 + ], + [ + 0.2, + 0.38 + ], + [ + 0.13, + 0.24 + ], + [ + 0, + 0.01 + ], + [ + 0.02, + 0.05 + ], + [ + 0.24, + 0.46 + ], + [ + 0.2, + 0.36 + ], + [ + 0.32, + 0.61 + ], + [ + 0.16, + 0.31 + ], + [ + 0.16, + 0.31 + ], + [ + 0.24, + 0.45 + ], + [ + 0.21, + 0.42 + ], + [ + 0.59, + 1.16 + ], + [ + 0.11, + 0.22 + ], + [ + 0.35, + 0.7 + ], + [ + 0.12, + 0.26 + ], + [ + 0.12, + 0.25 + ], + [ + 0.09, + 0.18 + ], + [ + 0.38, + 0.78 + ], + [ + 0.02, + 0.04 + ], + [ + 0.13, + 0.26 + ], + [ + 0.08, + 0.16 + ], + [ + 0.1, + 0.21 + ], + [ + 0.06, + 0.12 + ], + [ + 0.23, + 0.48 + ], + [ + 0.34, + 0.73 + ], + [ + 0.11, + 0.23 + ], + [ + 0.07, + 0.14 + ], + [ + 0.1, + 0.22 + ], + [ + 0.17, + 0.38 + ], + [ + 0.16, + 0.35 + ], + [ + 0.06, + 0.12 + ], + [ + 0.05, + 0.11 + ], + [ + 0.11, + 0.25 + ], + [ + 0.18, + 0.39 + ], + [ + 0.06, + 0.14 + ], + [ + 0.05, + 0.12 + ], + [ + 0.09, + 0.2 + ], + [ + 0.47, + 1.07 + ], + [ + 0.02, + 0.05 + ], + [ + 0.21, + 0.5 + ], + [ + 0.1, + 0.23 + ], + [ + 0.17, + 0.41 + ], + [ + 0.17, + 0.4 + ], + [ + 0.09, + 0.2 + ], + [ + 0.02, + 0.06 + ], + [ + 0, + 0 + ], + [ + 0.09, + 0.21 + ], + [ + 0.04, + 0.11 + ], + [ + 0.01, + 0.02 + ], + [ + 0.05, + 0.12 + ], + [ + 0.23, + 0.55 + ], + [ + 0.42, + 1.03 + ], + [ + 0.15, + 0.38 + ], + [ + 0.13, + 0.31 + ], + [ + 0.43, + 1.09 + ], + [ + 0.09, + 0.25 + ], + [ + 0.03, + 0.06 + ], + [ + 0.27, + 0.71 + ], + [ + 0.15, + 0.41 + ], + [ + 0.11, + 0.29 + ], + [ + 0.17, + 0.46 + ], + [ + 0.03, + 0.08 + ], + [ + 0.28, + 0.74 + ], + [ + 0.08, + 0.23 + ], + [ + 0.09, + 0.25 + ], + [ + 0.06, + 0.16 + ], + [ + 0.04, + 0.12 + ], + [ + 0.08, + 0.23 + ], + [ + 0.06, + 0.16 + ], + [ + 0.12, + 0.33 + ], + [ + 0.21, + 0.59 + ], + [ + 0.09, + 0.26 + ], + [ + 0.1, + 0.29 + ], + [ + 0.01, + 0.03 + ], + [ + 0.08, + 0.23 + ], + [ + 0.13, + 0.36 + ], + [ + 0.18, + 0.55 + ], + [ + 0.11, + 0.33 + ], + [ + 0.01, + 0.02 + ], + [ + 0.09, + 0.29 + ], + [ + 0.02, + 0.08 + ], + [ + 0.04, + 0.11 + ], + [ + 0.26, + 0.79 + ], + [ + 0.17, + 0.54 + ], + [ + 0.05, + 0.19 + ], + [ + 0.12, + 0.37 + ], + [ + 0.13, + 0.43 + ], + [ + 0.06, + 0.17 + ], + [ + 0.18, + 0.58 + ], + [ + 0.08, + 0.26 + ], + [ + 0.12, + 0.4 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.34 + ], + [ + 0.05, + 0.19 + ], + [ + 0.15, + 0.49 + ], + [ + 0.07, + 0.24 + ], + [ + 0.15, + 0.51 + ], + [ + 0.32, + 1.12 + ], + [ + 0.1, + 0.37 + ], + [ + 0.02, + 0.07 + ], + [ + 0.02, + 0.07 + ], + [ + 0.1, + 0.33 + ], + [ + 0.25, + 0.94 + ], + [ + 0.05, + 0.19 + ], + [ + 0.17, + 0.65 + ], + [ + 0.23, + 0.89 + ], + [ + 0.12, + 0.48 + ], + [ + 0.02, + 0.07 + ], + [ + 0.17, + 0.66 + ], + [ + 0.08, + 0.35 + ], + [ + 0.08, + 0.3 + ], + [ + 0.03, + 0.09 + ], + [ + 0.06, + 0.22 + ], + [ + 0.03, + 0.11 + ], + [ + 0.11, + 0.43 + ], + [ + 0.01, + 0.03 + ], + [ + 0.04, + 0.14 + ], + [ + 0.03, + 0.1 + ], + [ + 0.08, + 0.29 + ], + [ + 0.24, + 1.05 + ], + [ + 0.08, + 0.37 + ], + [ + 0.23, + 1.05 + ], + [ + 0.07, + 0.29 + ], + [ + 0.12, + 0.58 + ], + [ + 0.03, + 0.09 + ], + [ + 0.02, + 0.06 + ], + [ + 0.02, + 0.08 + ], + [ + 0.01, + 0.01 + ], + [ + 0.19, + 0.9 + ], + [ + 0.01, + 0.05 + ], + [ + 0.03, + 0.12 + ], + [ + 0.09, + 0.44 + ], + [ + 0.1, + 0.5 + ], + [ + 0.11, + 0.59 + ], + [ + 0.1, + 0.5 + ], + [ + 0.07, + 0.35 + ], + [ + 0.01, + 0.04 + ], + [ + 0.02, + 0.12 + ], + [ + 0.07, + 0.38 + ], + [ + 0.01, + 0.04 + ], + [ + 0.06, + 0.32 + ], + [ + 0.01, + 0.06 + ], + [ + 0.14, + 0.79 + ], + [ + 0.05, + 0.27 + ], + [ + 0.03, + 0.2 + ], + [ + 0.03, + 0.11 + ], + [ + 0.14, + 0.85 + ], + [ + 0.09, + 0.58 + ], + [ + 0.03, + 0.18 + ], + [ + 0.01, + 0.08 + ], + [ + 0.01, + 0.06 + ], + [ + 0.03, + 0.2 + ], + [ + 0.01, + 0.04 + ], + [ + 0.19, + 1.25 + ], + [ + 0.04, + 0.25 + ], + [ + 0.03, + 0.24 + ], + [ + 0.07, + 0.49 + ], + [ + 0.04, + 0.27 + ], + [ + 0.01, + 0.07 + ], + [ + 0.05, + 0.35 + ], + [ + 0.03, + 0.24 + ], + [ + 0.05, + 0.34 + ], + [ + 0.02, + 0.14 + ], + [ + 0.09, + 0.67 + ], + [ + 0.02, + 0.13 + ], + [ + 0.04, + 0.24 + ], + [ + 0.02, + 0.09 + ], + [ + 0.11, + 0.87 + ], + [ + 0.02, + 0.19 + ], + [ + 0.01, + 0.12 + ], + [ + 0.01, + 0.1 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.11 + ], + [ + 0.18, + 1.63 + ], + [ + 0, + 0 + ], + [ + 0.02, + 0.16 + ], + [ + 0.03, + 0.26 + ], + [ + 0.09, + 0.88 + ], + [ + 0.02, + 0.23 + ], + [ + 0.03, + 0.4 + ], + [ + 0.02, + 0.21 + ], + [ + 0.04, + 0.43 + ], + [ + 0.06, + 0.71 + ], + [ + 0.03, + 0.29 + ], + [ + 0.04, + 0.45 + ], + [ + 0.03, + 0.43 + ], + [ + 0.02, + 0.18 + ], + [ + 0.01, + 0.06 + ], + [ + 0.02, + 0.23 + ], + [ + 0.01, + 0.16 + ], + [ + 0.02, + 0.19 + ], + [ + 0.03, + 0.31 + ], + [ + 0.03, + 0.34 + ], + [ + 0.02, + 0.29 + ], + [ + 0.01, + 0.17 + ], + [ + 0.01, + 0.15 + ], + [ + 0, + 0.07 + ], + [ + 0.06, + 0.98 + ], + [ + 0.01, + 0.21 + ], + [ + 0.01, + 0.32 + ], + [ + 0.01, + 0.15 + ], + [ + 0, + 0.02 + ], + [ + 0.01, + 0.19 + ], + [ + 0, + 0.09 + ], + [ + 0.05, + 1.13 + ], + [ + 0.01, + 0.22 + ], + [ + 0.02, + 0.51 + ], + [ + 0.04, + 1.13 + ], + [ + 0.01, + 0.42 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.24 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.38 + ], + [ + 0, + 0.2 + ], + [ + 0.01, + 0.42 + ], + [ + 0.01, + 0.08 + ], + [ + 0.01, + 0.2 + ], + [ + 0.01, + 0.37 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.25 + ], + [ + 0.01, + 0.29 + ], + [ + 0.01, + 0.17 + ], + [ + 0.01, + 1.51 + ] + ], + "v": [ + [ + 132.005, + 206.602 + ], + [ + 66.544, + 206.602 + ], + [ + -16.035, + -43.088 + ], + [ + -110.315, + -135.458 + ], + [ + -132.004, + -149.922 + ], + [ + -96.425, + -206.602 + ], + [ + -71.365, + -189.738 + ], + [ + -69.956, + -188.718 + ], + [ + -68.655, + -187.778 + ], + [ + -67.525, + -186.948 + ], + [ + -65.625, + -185.548 + ], + [ + -64.605, + -184.778 + ], + [ + -63.945, + -184.298 + ], + [ + -59.995, + -181.318 + ], + [ + -59.206, + -180.708 + ], + [ + -58.295, + -180.008 + ], + [ + -57.135, + -179.108 + ], + [ + -50.795, + -174.108 + ], + [ + -48.785, + -172.488 + ], + [ + -46.425, + -170.568 + ], + [ + -45.516, + -169.818 + ], + [ + -45.115, + -169.478 + ], + [ + -43.305, + -167.978 + ], + [ + -41.025, + -166.058 + ], + [ + -40.586, + -165.698 + ], + [ + -37.885, + -163.388 + ], + [ + -36.576, + -162.248 + ], + [ + -35.206, + -161.068 + ], + [ + -32.545, + -158.728 + ], + [ + -30.405, + -156.828 + ], + [ + -28.386, + -154.998 + ], + [ + -27.815, + -154.478 + ], + [ + -26.735, + -153.498 + ], + [ + -24.655, + -151.588 + ], + [ + -23.535, + -150.548 + ], + [ + -23.466, + -150.488 + ], + [ + -20.216, + -147.418 + ], + [ + -18.245, + -145.548 + ], + [ + -16.925, + -144.278 + ], + [ + -15.596, + -142.978 + ], + [ + -15.035, + -142.438 + ], + [ + -14.385, + -141.798 + ], + [ + -11.855, + -139.308 + ], + [ + -11.115, + -138.568 + ], + [ + -10.875, + -138.328 + ], + [ + -6.865, + -134.278 + ], + [ + -6.766, + -134.168 + ], + [ + -6.675, + -134.088 + ], + [ + -4.395, + -131.728 + ], + [ + -3.295, + -130.578 + ], + [ + -2.775, + -130.038 + ], + [ + -1.945, + -129.168 + ], + [ + 0.234, + -126.848 + ], + [ + 1.435, + -125.568 + ], + [ + 3.525, + -123.308 + ], + [ + 5.275, + -121.388 + ], + [ + 5.294, + -121.368 + ], + [ + 7.604, + -118.808 + ], + [ + 8.685, + -117.608 + ], + [ + 10.984, + -114.998 + ], + [ + 13.044, + -112.628 + ], + [ + 14.685, + -110.728 + ], + [ + 16.854, + -108.178 + ], + [ + 16.984, + -108.028 + ], + [ + 19.695, + -104.778 + ], + [ + 21.525, + -102.568 + ], + [ + 23.775, + -99.818 + ], + [ + 24.315, + -99.148 + ], + [ + 24.674, + -98.698 + ], + [ + 25.995, + -97.048 + ], + [ + 27.955, + -94.568 + ], + [ + 28.195, + -94.268 + ], + [ + 31.015, + -90.638 + ], + [ + 32.534, + -88.648 + ], + [ + 34.145, + -86.518 + ], + [ + 35.924, + -84.138 + ], + [ + 37.294, + -82.288 + ], + [ + 37.305, + -82.288 + ], + [ + 37.604, + -81.868 + ], + [ + 38.145, + -81.138 + ], + [ + 39.185, + -79.708 + ], + [ + 39.255, + -79.618 + ], + [ + 40.215, + -78.288 + ], + [ + 40.984, + -77.208 + ], + [ + 41.655, + -76.278 + ], + [ + 42.455, + -75.148 + ], + [ + 42.815, + -74.648 + ], + [ + 44.854, + -71.728 + ], + [ + 45.085, + -71.398 + ], + [ + 45.375, + -70.978 + ], + [ + 45.465, + -70.848 + ], + [ + 45.705, + -70.508 + ], + [ + 47.104, + -68.468 + ], + [ + 48.695, + -66.138 + ], + [ + 49.104, + -65.528 + ], + [ + 49.794, + -64.498 + ], + [ + 50.044, + -64.118 + ], + [ + 50.854, + -62.908 + ], + [ + 51.085, + -62.568 + ], + [ + 51.155, + -62.458 + ], + [ + 51.615, + -61.758 + ], + [ + 51.955, + -61.248 + ], + [ + 52.445, + -60.498 + ], + [ + 53.034, + -59.588 + ], + [ + 54.975, + -56.598 + ], + [ + 55.155, + -56.318 + ], + [ + 55.375, + -55.958 + ], + [ + 56.885, + -53.598 + ], + [ + 57.195, + -53.108 + ], + [ + 58.095, + -51.668 + ], + [ + 58.294, + -51.348 + ], + [ + 58.445, + -51.108 + ], + [ + 58.775, + -50.578 + ], + [ + 59.044, + -50.148 + ], + [ + 60.335, + -48.058 + ], + [ + 60.645, + -47.548 + ], + [ + 61.174, + -46.678 + ], + [ + 62.234, + -44.928 + ], + [ + 62.495, + -44.498 + ], + [ + 64.104, + -41.808 + ], + [ + 65.025, + -40.248 + ], + [ + 66.385, + -37.918 + ], + [ + 67.034, + -36.798 + ], + [ + 67.375, + -36.208 + ], + [ + 67.825, + -35.418 + ], + [ + 69.674, + -32.158 + ], + [ + 69.705, + -32.108 + ], + [ + 70.284, + -31.078 + ], + [ + 70.865, + -30.028 + ], + [ + 71.414, + -29.038 + ], + [ + 71.794, + -28.348 + ], + [ + 72.835, + -26.458 + ], + [ + 72.924, + -26.288 + ], + [ + 73.125, + -25.918 + ], + [ + 73.265, + -25.668 + ], + [ + 74.835, + -22.748 + ], + [ + 75.435, + -21.608 + ], + [ + 75.815, + -20.908 + ], + [ + 75.825, + -20.888 + ], + [ + 75.914, + -20.718 + ], + [ + 76.635, + -19.338 + ], + [ + 77.205, + -18.248 + ], + [ + 78.155, + -16.408 + ], + [ + 78.635, + -15.478 + ], + [ + 79.095, + -14.568 + ], + [ + 79.784, + -13.218 + ], + [ + 80.414, + -11.958 + ], + [ + 82.164, + -8.448 + ], + [ + 82.495, + -7.778 + ], + [ + 83.525, + -5.668 + ], + [ + 83.905, + -4.878 + ], + [ + 84.265, + -4.118 + ], + [ + 84.525, + -3.578 + ], + [ + 85.645, + -1.228 + ], + [ + 85.695, + -1.108 + ], + [ + 86.065, + -0.328 + ], + [ + 86.284, + 0.142 + ], + [ + 86.575, + 0.762 + ], + [ + 86.734, + 1.122 + ], + [ + 87.405, + 2.552 + ], + [ + 88.405, + 4.742 + ], + [ + 88.715, + 5.422 + ], + [ + 88.914, + 5.852 + ], + [ + 89.215, + 6.532 + ], + [ + 89.725, + 7.672 + ], + [ + 90.195, + 8.712 + ], + [ + 90.354, + 9.082 + ], + [ + 90.505, + 9.412 + ], + [ + 90.835, + 10.172 + ], + [ + 91.354, + 11.342 + ], + [ + 91.544, + 11.772 + ], + [ + 91.705, + 12.152 + ], + [ + 91.975, + 12.772 + ], + [ + 93.365, + 16.002 + ], + [ + 93.424, + 16.152 + ], + [ + 94.055, + 17.642 + ], + [ + 94.345, + 18.322 + ], + [ + 94.854, + 19.552 + ], + [ + 95.354, + 20.762 + ], + [ + 95.604, + 21.362 + ], + [ + 95.685, + 21.552 + ], + [ + 95.685, + 21.572 + ], + [ + 95.955, + 22.212 + ], + [ + 96.085, + 22.552 + ], + [ + 96.104, + 22.602 + ], + [ + 96.255, + 22.962 + ], + [ + 96.924, + 24.622 + ], + [ + 98.164, + 27.732 + ], + [ + 98.615, + 28.882 + ], + [ + 98.975, + 29.802 + ], + [ + 100.245, + 33.082 + ], + [ + 100.525, + 33.832 + ], + [ + 100.604, + 34.032 + ], + [ + 101.405, + 36.172 + ], + [ + 101.865, + 37.412 + ], + [ + 102.185, + 38.292 + ], + [ + 102.695, + 39.672 + ], + [ + 102.775, + 39.922 + ], + [ + 103.595, + 42.162 + ], + [ + 103.845, + 42.872 + ], + [ + 104.115, + 43.642 + ], + [ + 104.294, + 44.132 + ], + [ + 104.424, + 44.502 + ], + [ + 104.664, + 45.192 + ], + [ + 104.835, + 45.692 + ], + [ + 105.185, + 46.692 + ], + [ + 105.805, + 48.482 + ], + [ + 106.075, + 49.272 + ], + [ + 106.375, + 50.152 + ], + [ + 106.405, + 50.242 + ], + [ + 106.635, + 50.932 + ], + [ + 107.005, + 52.022 + ], + [ + 107.555, + 53.682 + ], + [ + 107.875, + 54.672 + ], + [ + 107.905, + 54.732 + ], + [ + 108.185, + 55.602 + ], + [ + 108.255, + 55.832 + ], + [ + 108.365, + 56.172 + ], + [ + 109.135, + 58.542 + ], + [ + 109.645, + 60.162 + ], + [ + 109.815, + 60.722 + ], + [ + 110.164, + 61.832 + ], + [ + 110.555, + 63.112 + ], + [ + 110.724, + 63.642 + ], + [ + 111.255, + 65.402 + ], + [ + 111.495, + 66.202 + ], + [ + 111.854, + 67.402 + ], + [ + 112.174, + 68.492 + ], + [ + 112.495, + 69.592 + ], + [ + 112.805, + 70.632 + ], + [ + 112.965, + 71.212 + ], + [ + 113.385, + 72.672 + ], + [ + 113.595, + 73.412 + ], + [ + 114.035, + 74.972 + ], + [ + 114.965, + 78.342 + ], + [ + 115.265, + 79.452 + ], + [ + 115.325, + 79.682 + ], + [ + 115.385, + 79.912 + ], + [ + 115.655, + 80.912 + ], + [ + 116.405, + 83.762 + ], + [ + 116.555, + 84.342 + ], + [ + 117.055, + 86.312 + ], + [ + 117.734, + 89.012 + ], + [ + 118.095, + 90.462 + ], + [ + 118.145, + 90.692 + ], + [ + 118.635, + 92.672 + ], + [ + 118.875, + 93.722 + ], + [ + 119.085, + 94.622 + ], + [ + 119.145, + 94.882 + ], + [ + 119.305, + 95.552 + ], + [ + 119.375, + 95.872 + ], + [ + 119.685, + 97.192 + ], + [ + 119.705, + 97.302 + ], + [ + 119.805, + 97.722 + ], + [ + 119.875, + 98.052 + ], + [ + 120.085, + 98.952 + ], + [ + 120.785, + 102.102 + ], + [ + 121.025, + 103.212 + ], + [ + 121.695, + 106.382 + ], + [ + 121.885, + 107.282 + ], + [ + 122.234, + 109.022 + ], + [ + 122.285, + 109.282 + ], + [ + 122.335, + 109.472 + ], + [ + 122.375, + 109.712 + ], + [ + 122.385, + 109.742 + ], + [ + 122.924, + 112.442 + ], + [ + 122.945, + 112.572 + ], + [ + 123.015, + 112.932 + ], + [ + 123.275, + 114.262 + ], + [ + 123.565, + 115.782 + ], + [ + 123.895, + 117.572 + ], + [ + 124.174, + 119.092 + ], + [ + 124.365, + 120.142 + ], + [ + 124.385, + 120.252 + ], + [ + 124.455, + 120.622 + ], + [ + 124.655, + 121.762 + ], + [ + 124.674, + 121.902 + ], + [ + 124.845, + 122.882 + ], + [ + 124.875, + 123.072 + ], + [ + 125.285, + 125.452 + ], + [ + 125.424, + 126.272 + ], + [ + 125.515, + 126.872 + ], + [ + 125.575, + 127.222 + ], + [ + 125.995, + 129.792 + ], + [ + 126.265, + 131.542 + ], + [ + 126.345, + 132.072 + ], + [ + 126.385, + 132.312 + ], + [ + 126.405, + 132.472 + ], + [ + 126.495, + 133.062 + ], + [ + 126.515, + 133.192 + ], + [ + 127.065, + 136.942 + ], + [ + 127.174, + 137.672 + ], + [ + 127.275, + 138.382 + ], + [ + 127.474, + 139.852 + ], + [ + 127.585, + 140.672 + ], + [ + 127.615, + 140.872 + ], + [ + 127.755, + 141.902 + ], + [ + 127.845, + 142.622 + ], + [ + 127.974, + 143.632 + ], + [ + 128.025, + 144.042 + ], + [ + 128.275, + 146.042 + ], + [ + 128.325, + 146.442 + ], + [ + 128.414, + 147.162 + ], + [ + 128.445, + 147.432 + ], + [ + 128.765, + 150.032 + ], + [ + 128.825, + 150.592 + ], + [ + 128.865, + 150.952 + ], + [ + 128.905, + 151.252 + ], + [ + 128.905, + 151.312 + ], + [ + 128.945, + 151.642 + ], + [ + 129.474, + 156.562 + ], + [ + 129.474, + 156.632 + ], + [ + 129.525, + 157.112 + ], + [ + 129.604, + 157.902 + ], + [ + 129.854, + 160.522 + ], + [ + 129.924, + 161.202 + ], + [ + 130.025, + 162.392 + ], + [ + 130.085, + 163.042 + ], + [ + 130.205, + 164.332 + ], + [ + 130.375, + 166.462 + ], + [ + 130.445, + 167.352 + ], + [ + 130.555, + 168.692 + ], + [ + 130.645, + 170.002 + ], + [ + 130.685, + 170.542 + ], + [ + 130.705, + 170.732 + ], + [ + 130.755, + 171.432 + ], + [ + 130.785, + 171.892 + ], + [ + 130.825, + 172.452 + ], + [ + 130.885, + 173.392 + ], + [ + 130.955, + 174.402 + ], + [ + 131.015, + 175.272 + ], + [ + 131.044, + 175.782 + ], + [ + 131.075, + 176.212 + ], + [ + 131.085, + 176.422 + ], + [ + 131.255, + 179.352 + ], + [ + 131.294, + 179.992 + ], + [ + 131.345, + 180.952 + ], + [ + 131.365, + 181.422 + ], + [ + 131.375, + 181.502 + ], + [ + 131.405, + 182.092 + ], + [ + 131.414, + 182.382 + ], + [ + 131.565, + 185.772 + ], + [ + 131.595, + 186.432 + ], + [ + 131.655, + 187.972 + ], + [ + 131.775, + 191.352 + ], + [ + 131.805, + 192.602 + ], + [ + 131.805, + 192.652 + ], + [ + 131.825, + 193.362 + ], + [ + 131.845, + 194.012 + ], + [ + 131.875, + 195.152 + ], + [ + 131.885, + 195.762 + ], + [ + 131.905, + 197.032 + ], + [ + 131.914, + 197.262 + ], + [ + 131.924, + 197.862 + ], + [ + 131.945, + 198.962 + ], + [ + 131.945, + 199.222 + ], + [ + 131.955, + 199.892 + ], + [ + 131.965, + 200.672 + ], + [ + 131.974, + 201.542 + ], + [ + 131.984, + 202.062 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.541176470588, + 0.823529471603, + 0.180392156863, + 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": [ + 844.615, + 282.208 + ], + "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 + ], + [ + 18.973, + 8.269 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -1.34, + -0.6 + ], + [ + -0.32, + -0.15 + ], + [ + -1.56, + -0.73 + ], + [ + -0.19, + -0.09 + ], + [ + -1.38, + -0.67 + ], + [ + -1.82, + -0.9 + ], + [ + -0.82, + -0.42 + ], + [ + -1.08, + -0.55 + ], + [ + -0.15, + -0.08 + ], + [ + -1.46, + -0.76 + ], + [ + -0.39, + -0.21 + ], + [ + -1.58, + -0.86 + ], + [ + -1.5, + -0.84 + ], + [ + -2, + -1.15 + ], + [ + -1.61, + -0.95 + ], + [ + -1.52, + -0.92 + ], + [ + -0.27, + -0.17 + ], + [ + -3.17, + -2.04 + ] + ], + "o": [ + [ + -17.394, + -10.838 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 1.34, + 0.59 + ], + [ + 0.33, + 0.15 + ], + [ + 1.56, + 0.71 + ], + [ + 0.19, + 0.08 + ], + [ + 1.38, + 0.65 + ], + [ + 1.84, + 0.87 + ], + [ + 0.83, + 0.41 + ], + [ + 1.08, + 0.54 + ], + [ + 0.14, + 0.07 + ], + [ + 1.46, + 0.74 + ], + [ + 0.39, + 0.21 + ], + [ + 1.59, + 0.84 + ], + [ + 1.51, + 0.82 + ], + [ + 2.02, + 1.12 + ], + [ + 1.62, + 0.93 + ], + [ + 1.52, + 0.9 + ], + [ + 0.27, + 0.16 + ], + [ + 3.22, + 1.96 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 20.495, + 50.264 + ], + [ + -34.116, + 21.548 + ], + [ + -56.075, + 12.71 + ], + [ + -32.455, + -50.264 + ], + [ + -7.106, + -39.952 + ], + [ + -7.106, + -39.962 + ], + [ + -3.086, + -38.172 + ], + [ + -2.116, + -37.732 + ], + [ + 2.564, + -35.572 + ], + [ + 3.134, + -35.311 + ], + [ + 7.284, + -33.342 + ], + [ + 12.774, + -30.672 + ], + [ + 15.254, + -29.431 + ], + [ + 18.484, + -27.802 + ], + [ + 18.924, + -27.572 + ], + [ + 23.294, + -25.311 + ], + [ + 24.464, + -24.691 + ], + [ + 29.214, + -22.142 + ], + [ + 33.734, + -19.652 + ], + [ + 39.764, + -16.241 + ], + [ + 44.594, + -13.422 + ], + [ + 49.154, + -10.691 + ], + [ + 49.964, + -10.202 + ], + [ + 56.075, + -6.415 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.784313785329, + 0.188235309077, + 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.116, + 82.021 + ], + "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 + ], + [ + 51.778, + 0 + ], + [ + 0, + -232.13 + ], + [ + 0, + 0 + ], + [ + -269.41, + 0 + ], + [ + -2.09, + -0.03 + ], + [ + 0, + 0 + ], + [ + -2, + -0.05 + ], + [ + -0.17, + 0 + ], + [ + -1.94, + -0.08 + ], + [ + -1.81, + -0.09 + ], + [ + -0.56, + -0.03 + ], + [ + -1.77, + -0.11 + ], + [ + 0, + 0 + ], + [ + -1.44, + -0.11 + ], + [ + -0.06, + -0.01 + ], + [ + -0.95, + -0.08 + ], + [ + -0.06, + -0.01 + ], + [ + -1.29, + -0.11 + ], + [ + -0.81, + -0.08 + ], + [ + -0.02, + -0.01 + ], + [ + -1.32, + -0.14 + ], + [ + -2.01, + -0.23 + ], + [ + -0.75, + -0.09 + ], + [ + -5.38, + -0.82 + ], + [ + -0.57, + -0.09 + ], + [ + -1.14, + -0.19 + ], + [ + -0.38, + -0.07 + ], + [ + -0.45, + -0.08 + ], + [ + -1.59, + -0.28 + ], + [ + -0.1, + -0.02 + ], + [ + -1.94, + -0.37 + ], + [ + -0.05, + -0.01 + ], + [ + -1.69, + -0.35 + ], + [ + -0.48, + -0.1 + ], + [ + -1.55, + -0.34 + ], + [ + -0.41, + -0.1 + ], + [ + -1.55, + -0.36 + ], + [ + -0.52, + -0.13 + ], + [ + -1.51, + -0.37 + ], + [ + -0.38, + -0.1 + ], + [ + -1.6, + -0.41 + ], + [ + -0.25, + -0.07 + ], + [ + -1.78, + -0.48 + ], + [ + -1.93, + -0.55 + ], + [ + -1.66, + -0.5 + ], + [ + -0.95, + -0.3 + ], + [ + -1.18, + -0.36 + ], + [ + -6.38, + -2.29 + ], + [ + -1.16, + -0.42 + ], + [ + -1.287, + -0.484 + ] + ], + "o": [ + [ + -45.844, + -16.968 + ], + [ + -233.26, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -269.41 + ], + [ + 2.1, + 0 + ], + [ + 0, + 0 + ], + [ + 2.01, + 0.03 + ], + [ + 0.17, + 0 + ], + [ + 1.94, + 0.05 + ], + [ + 1.82, + 0.07 + ], + [ + 0.57, + 0.02 + ], + [ + 1.77, + 0.09 + ], + [ + 0, + 0 + ], + [ + 1.45, + 0.09 + ], + [ + 0.06, + 0 + ], + [ + 0.95, + 0.07 + ], + [ + 0.06, + 0 + ], + [ + 1.3, + 0.1 + ], + [ + 0.82, + 0.07 + ], + [ + 0.02, + 0 + ], + [ + 1.32, + 0.12 + ], + [ + 2.03, + 0.2 + ], + [ + 0.76, + 0.09 + ], + [ + 5.44, + 0.63 + ], + [ + 0.56, + 0.08 + ], + [ + 1.14, + 0.17 + ], + [ + 0.38, + 0.05 + ], + [ + 0.46, + 0.07 + ], + [ + 1.59, + 0.26 + ], + [ + 0.1, + 0.02 + ], + [ + 1.95, + 0.35 + ], + [ + 0.06, + 0.01 + ], + [ + 1.7, + 0.32 + ], + [ + 0.49, + 0.09 + ], + [ + 1.56, + 0.32 + ], + [ + 0.41, + 0.08 + ], + [ + 1.56, + 0.33 + ], + [ + 0.53, + 0.12 + ], + [ + 1.52, + 0.34 + ], + [ + 0.39, + 0.09 + ], + [ + 1.6, + 0.39 + ], + [ + 0.26, + 0.06 + ], + [ + 1.78, + 0.46 + ], + [ + 1.94, + 0.52 + ], + [ + 1.67, + 0.47 + ], + [ + 0.95, + 0.27 + ], + [ + 1.18, + 0.35 + ], + [ + 6.5, + 2.02 + ], + [ + 1.16, + 0.41 + ], + [ + 1.291, + 0.472 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 305.71, + -150.173 + ], + [ + 158.48, + -176.415 + ], + [ + -263.871, + 243.905 + ], + [ + -329.33, + 243.905 + ], + [ + 158.48, + -243.905 + ], + [ + 164.78, + -243.865 + ], + [ + 165.009, + -243.865 + ], + [ + 171.02, + -243.745 + ], + [ + 171.53, + -243.735 + ], + [ + 177.34, + -243.545 + ], + [ + 182.79, + -243.305 + ], + [ + 184.49, + -243.225 + ], + [ + 189.799, + -242.915 + ], + [ + 189.809, + -242.915 + ], + [ + 194.15, + -242.615 + ], + [ + 194.329, + -242.605 + ], + [ + 197.179, + -242.385 + ], + [ + 197.36, + -242.375 + ], + [ + 201.24, + -242.055 + ], + [ + 203.689, + -241.835 + ], + [ + 203.759, + -241.825 + ], + [ + 207.72, + -241.445 + ], + [ + 213.78, + -240.805 + ], + [ + 216.049, + -240.535 + ], + [ + 232.27, + -238.355 + ], + [ + 233.97, + -238.095 + ], + [ + 237.4, + -237.545 + ], + [ + 238.53, + -237.365 + ], + [ + 239.9, + -237.135 + ], + [ + 244.67, + -236.315 + ], + [ + 244.98, + -236.255 + ], + [ + 250.819, + -235.175 + ], + [ + 250.98, + -235.145 + ], + [ + 256.059, + -234.135 + ], + [ + 257.509, + -233.845 + ], + [ + 262.17, + -232.855 + ], + [ + 263.4, + -232.585 + ], + [ + 268.059, + -231.545 + ], + [ + 269.629, + -231.175 + ], + [ + 274.17, + -230.105 + ], + [ + 275.319, + -229.815 + ], + [ + 280.119, + -228.615 + ], + [ + 280.879, + -228.415 + ], + [ + 286.22, + -227.005 + ], + [ + 292.02, + -225.395 + ], + [ + 297.02, + -223.945 + ], + [ + 299.879, + -223.085 + ], + [ + 303.41, + -222.015 + ], + [ + 322.72, + -215.555 + ], + [ + 326.199, + -214.305 + ], + [ + 329.33, + -213.148 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.976470648074, + 0.294117647059, + 0.294117647059, + 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": [ + 330.331, + 244.905 + ], + "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": 299.700012207031, + "st": 0, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "Meter loader (Linear animation)", + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 127.5, + 68.5, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 510, + 274, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 25, + 25, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "w": 1020, + "h": 548, + "ip": 0, + "op": 180.00000733155, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} \ No newline at end of file diff --git a/android/navi-cycs/src/main/res/raw/resize_lottie.json b/android/navi-cycs/src/main/res/raw/resize_lottie.json new file mode 100644 index 0000000000..ddfe8d1897 --- /dev/null +++ b/android/navi-cycs/src/main/res/raw/resize_lottie.json @@ -0,0 +1,21030 @@ +{ + "v": "5.9.0", + "fr": 30, + "ip": 0, + "op": 240, + "w": 255, + "h": 137, + "nm": "Resizing meter Lottie 1x", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "nm": "Resizing meter Lottie 4x", + "fr": 30, + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "White line 2", + "parent": 12, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 4, + "s": [ + 0 + ] + }, + { + "t": 9, + "s": [ + 100 + ] + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 488.809, + 489.448, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 422.099, + 1.102, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833, + 0.833, + 0.833 + ], + "y": [ + 0.833, + 0.833, + 0.833 + ] + }, + "o": { + "x": [ + 0.167, + 0.167, + 0.167 + ], + "y": [ + 0.167, + 0.167, + 0.167 + ] + }, + "t": 2, + "s": [ + 119.32, + 100, + 100 + ] + }, + { + "t": 9, + "s": [ + 126, + 126, + 100 + ] + } + ], + "ix": 6, + "l": 2 + } + }, + "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": 2, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -421.75, + 0.596 + ], + [ + 0.175, + 0.596 + ], + [ + 421.849, + 0.596 + ], + [ + 421.849, + -2.21 + ], + [ + -421.75, + -2.404 + ] + ], + "c": true + } + ] + }, + { + "t": 9, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -421.75, + -0.158 + ], + [ + 0.175, + -0.158 + ], + [ + 421.849, + -0.158 + ], + [ + 421.849, + -2.259 + ], + [ + -421.75, + -2.404 + ] + ], + "c": true + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.129411771894, + 0, + 0.164705887437, + 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": [ + 422.099, + 1.102 + ], + "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": 241, + "st": -60, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "White line", + "parent": 12, + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 488.809, + 489.448, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 422.099, + 1.102, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833, + 0.833, + 0.833 + ], + "y": [ + 0.833, + 0.833, + 0.833 + ] + }, + "o": { + "x": [ + 0.167, + 0.167, + 0.167 + ], + "y": [ + 0.167, + 0.167, + 0.167 + ] + }, + "t": 0, + "s": [ + 100, + 100, + 100 + ] + }, + { + "t": 9, + "s": [ + 77.5, + 77.5, + 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 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -421.75, + 2.846 + ], + [ + 0.175, + 2.846 + ], + [ + 421.849, + 2.846 + ], + [ + 421.849, + -2.065 + ], + [ + -421.75, + -2.404 + ] + ], + "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": [ + 422.099, + 1.102 + ], + "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": 241, + "st": -60, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Semicircle 2", + "parent": 12, + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 488.809, + 488.813, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 346.65, + 344.995, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833, + 0.833, + 0.833 + ], + "y": [ + 0.833, + 0.833, + 0.833 + ] + }, + "o": { + "x": [ + 0.167, + 0.167, + 0.167 + ], + "y": [ + 0.167, + 0.167, + 0.167 + ] + }, + "t": 0, + "s": [ + 100, + 100, + 100 + ] + }, + { + "t": 9, + "s": [ + 59, + 59, + 100 + ] + } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 190.069, + 0 + ], + [ + 0, + -189.152 + ] + ], + "o": [ + [ + 0, + -189.152 + ], + [ + -190.068, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 344.149, + 171.245 + ], + [ + 0, + -171.245 + ], + [ + -344.15, + 171.245 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 1, + "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": [ + 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": [ + 346.649, + 173.745 + ], + "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": 241, + "st": -60, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Pivot line 3", + "parent": 12, + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 0, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.335 + ], + "y": [ + 0 + ] + }, + "t": 0, + "s": [ + -83.5 + ] + }, + { + "i": { + "x": [ + 0.469 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0 + ] + }, + "t": 22, + "s": [ + -84 + ] + }, + { + "t": 50.0283203125, + "s": [ + 32 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 488.809, + 493.195, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 1, + 357.53, + 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": [ + [ + 1, + 354.059 + ], + [ + 1, + 1 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 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 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 241.18018018018, + "st": -60, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "Arrow pointer 2", + "parent": 4, + "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": 9, + "s": [ + 8 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 0, + "s": [ + 1, + -37.195, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "t": 9, + "s": [ + 43.208, + 111.81, + 0 + ] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 34.977, + 39.725, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833, + 0.833, + 0.833 + ], + "y": [ + 0.833, + 0.833, + 0.833 + ] + }, + "o": { + "x": [ + 0.167, + 0.167, + 0.167 + ], + "y": [ + 0.167, + 0.167, + 0.167 + ] + }, + "t": 0, + "s": [ + 100, + 100, + 100 + ] + }, + { + "t": 9, + "s": [ + 137, + 137, + 100 + ] + } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0.689, + -1.626 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.69, + -1.626 + ] + ], + "v": [ + [ + -1.841, + -37.188 + ], + [ + -34.065, + 38.813 + ], + [ + 34.065, + 38.813 + ], + [ + 1.841, + -37.188 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.912, + "ix": 5 + }, + "lc": 1, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 34.977, + 39.726 + ], + "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.689, + -1.626 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.69, + -1.626 + ] + ], + "v": [ + [ + -1.841, + -37.188 + ], + [ + -34.065, + 38.813 + ], + [ + 34.065, + 38.813 + ], + [ + 1.841, + -37.188 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 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.977, + 39.726 + ], + "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": [ + [ + 5.805, + 77.921 + ], + [ + 64.15, + 77.921 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.912, + "ix": 5 + }, + "lc": 1, + "lj": 2, + "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": [ + [ + 5.805, + 77.921 + ], + [ + 64.15, + 77.921 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 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": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 241.18018018018, + "st": -60, + "bm": 0 + }, + { + "ddd": 0, + "ind": 9, + "ty": 4, + "nm": "Semicircle 1", + "parent": 12, + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 488.808, + 488.802, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 360.747, + 359.006, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833, + 0.833, + 0.833 + ], + "y": [ + 0.833, + 0.833, + 0.833 + ] + }, + "o": { + "x": [ + 0.167, + 0.167, + 0.167 + ], + "y": [ + 0.167, + 0.167, + 0.167 + ] + }, + "t": 0, + "s": [ + 100, + 100, + 100 + ] + }, + { + "t": 9, + "s": [ + 62, + 62, + 100 + ] + } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 198.683, + 0 + ], + [ + 0, + -197.725 + ] + ], + "o": [ + [ + 0, + -197.725 + ], + [ + -198.682, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 359.747, + 179.006 + ], + [ + 0, + -179.006 + ], + [ + -359.747, + 179.006 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 1, + "ix": 5 + }, + "lc": 2, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 6, + "s": [ + 0.129411764706, + 0, + 0.164705882353, + 1 + ] + }, + { + "t": 9, + "s": [ + 0.129411771894, + 0, + 0.164705887437, + 1 + ] + } + ], + "ix": 4 + }, + "o": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 6, + "s": [ + 100 + ] + }, + { + "t": 9, + "s": [ + 35 + ] + } + ], + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 360.747, + 180.006 + ], + "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": 241, + "st": -60, + "bm": 0 + }, + { + "ddd": 0, + "ind": 10, + "ty": 4, + "nm": "Semicircle 3", + "parent": 12, + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 488.809, + 489.063, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 346.65, + 345.245, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833, + 0.833, + 0.833 + ], + "y": [ + 0.833, + 0.833, + 0.833 + ] + }, + "o": { + "x": [ + 0.167, + 0.167, + 0.167 + ], + "y": [ + 0.167, + 0.167, + 0.167 + ] + }, + "t": 0, + "s": [ + 122.75, + 122.75, + 100 + ] + }, + { + "t": 9, + "s": [ + 95, + 95, + 100 + ] + } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 190.069, + 0 + ], + [ + 0, + -189.152 + ] + ], + "o": [ + [ + 0, + -189.152 + ], + [ + -190.068, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 344.149, + 171.245 + ], + [ + 0, + -171.245 + ], + [ + -344.15, + 171.245 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 1, + "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": [ + 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": [ + 346.649, + 173.745 + ], + "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": 241, + "st": -60, + "bm": 0 + }, + { + "ddd": 0, + "ind": 11, + "ty": 4, + "nm": "Meter scale updated final", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 510, + 244.235, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 488.81, + 244.905, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833, + 0.833, + 0.833 + ], + "y": [ + 0.833, + 0.833, + 0.833 + ] + }, + "o": { + "x": [ + 0.167, + 0.167, + 0.167 + ], + "y": [ + 0.167, + 0.167, + 0.167 + ] + }, + "t": 0, + "s": [ + 100, + 100, + 100 + ] + }, + { + "t": 9, + "s": [ + 55, + 55, + 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": [ + [ + 1, + 488.81 + ], + [ + 976.62, + 488.81 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.129411764706, + 0, + 0.164705882353, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 1, + "ix": 5 + }, + "lc": 1, + "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": "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, + -1.69 + ], + [ + 0, + 0 + ], + [ + -269.41, + 0 + ], + [ + -2.09, + -0.03 + ], + [ + 0, + 0 + ], + [ + -2, + -0.05 + ], + [ + -0.17, + 0 + ], + [ + -1.94, + -0.08 + ], + [ + -1.81, + -0.09 + ], + [ + -0.56, + -0.03 + ], + [ + -1.77, + -0.11 + ], + [ + 0, + 0 + ], + [ + -1.44, + -0.11 + ], + [ + -0.06, + -0.01 + ], + [ + -0.95, + -0.08 + ], + [ + -0.06, + -0.01 + ], + [ + -1.29, + -0.11 + ], + [ + -0.81, + -0.08 + ], + [ + -0.02, + -0.01 + ], + [ + -1.32, + -0.14 + ], + [ + -2.01, + -0.23 + ], + [ + -0.75, + -0.09 + ], + [ + -5.38, + -0.82 + ], + [ + -0.57, + -0.09 + ], + [ + -1.14, + -0.19 + ], + [ + -0.38, + -0.07 + ], + [ + -0.45, + -0.08 + ], + [ + -1.59, + -0.28 + ], + [ + -0.1, + -0.02 + ], + [ + -1.94, + -0.37 + ], + [ + -0.05, + -0.01 + ], + [ + -1.69, + -0.35 + ], + [ + -0.48, + -0.1 + ], + [ + -1.55, + -0.34 + ], + [ + -0.41, + -0.1 + ], + [ + -1.55, + -0.36 + ], + [ + -0.52, + -0.13 + ], + [ + -1.51, + -0.37 + ], + [ + -0.38, + -0.1 + ], + [ + -1.6, + -0.41 + ], + [ + -0.25, + -0.07 + ], + [ + -1.78, + -0.48 + ], + [ + -1.93, + -0.55 + ], + [ + -1.66, + -0.5 + ], + [ + -0.95, + -0.3 + ], + [ + -1.18, + -0.36 + ], + [ + -6.38, + -2.29 + ], + [ + -1.16, + -0.42 + ], + [ + -5.66, + -2.32 + ], + [ + -1.89, + -0.8 + ], + [ + -1.87, + -0.82 + ], + [ + 0, + 0 + ], + [ + -1.33, + -0.6 + ], + [ + -0.32, + -0.15 + ], + [ + -1.56, + -0.73 + ], + [ + -0.19, + -0.09 + ], + [ + -1.38, + -0.67 + ], + [ + -1.82, + -0.9 + ], + [ + -0.82, + -0.42 + ], + [ + -1.08, + -0.55 + ], + [ + -0.15, + -0.08 + ], + [ + -1.46, + -0.76 + ], + [ + -0.39, + -0.21 + ], + [ + -1.58, + -0.86 + ], + [ + -1.5, + -0.84 + ], + [ + -2, + -1.15 + ], + [ + -1.61, + -0.95 + ], + [ + -1.52, + -0.92 + ], + [ + -0.27, + -0.17 + ], + [ + -3.17, + -2.04 + ], + [ + -0.04, + -0.03 + ], + [ + -1.53, + -1.01 + ], + [ + -0.14, + -0.09 + ], + [ + -1.53, + -1.03 + ], + [ + -0.04, + -0.02 + ], + [ + -1.61, + -1.12 + ], + [ + -1.53, + -1.08 + ], + [ + -0.1, + -0.07 + ], + [ + -0.65, + -0.47 + ], + [ + -0.47, + -0.34 + ], + [ + -0.43, + -0.32 + ], + [ + -0.38, + -0.28 + ], + [ + -0.97, + -0.73 + ], + [ + -0.22, + -0.16 + ], + [ + -1.31, + -1 + ], + [ + -0.26, + -0.21 + ], + [ + -0.3, + -0.24 + ], + [ + -0.39, + -0.3 + ], + [ + -2.09, + -1.69 + ], + [ + -0.67, + -0.54 + ], + [ + -0.78, + -0.64 + ], + [ + -0.3, + -0.25 + ], + [ + -0.13, + -0.11 + ], + [ + -1.35, + -1.15 + ], + [ + -1.47, + -1.28 + ], + [ + -2.7, + -2.45 + ], + [ + -0.19, + -0.17 + ], + [ + -1.42, + -1.32 + ], + [ + -0.02, + -0.02 + ], + [ + -1.08, + -1.03 + ], + [ + -0.65, + -0.63 + ], + [ + -0.88, + -0.86 + ], + [ + -0.19, + -0.18 + ], + [ + -0.21, + -0.22 + ], + [ + -1.08, + -1.08 + ], + [ + -0.08, + -0.08 + ], + [ + -1.33, + -1.36 + ], + [ + -0.03, + -0.03 + ], + [ + -1.15, + -1.2 + ], + [ + -0.17, + -0.18 + ], + [ + -0.28, + -0.29 + ], + [ + -0.72, + -0.78 + ], + [ + -0.4, + -0.43 + ], + [ + -1.27, + -1.4 + ], + [ + -0.01, + -0.01 + ], + [ + -1.29, + -1.46 + ], + [ + -1.27, + -1.48 + ], + [ + -1.26, + -1.5 + ], + [ + -0.04, + -0.05 + ], + [ + -0.89, + -1.09 + ], + [ + -0.3, + -0.36 + ], + [ + -0.3, + -0.38 + ], + [ + -0.75, + -0.93 + ], + [ + -0.18, + -0.23 + ], + [ + -0.12, + -0.15 + ], + [ + -1.08, + -1.38 + ], + [ + -0.08, + -0.1 + ], + [ + -0.94, + -1.21 + ], + [ + -0.5, + -0.67 + ], + [ + -0.53, + -0.71 + ], + [ + -0.58, + -0.8 + ], + [ + -0.45, + -0.62 + ], + [ + 0.01, + -0.01 + ], + [ + -0.1, + -0.14 + ], + [ + -0.18, + -0.24 + ], + [ + -0.34, + -0.48 + ], + [ + -0.6, + -0.84 + ], + [ + -0.22, + -0.31 + ], + [ + -0.26, + -0.38 + ], + [ + -0.79, + -1.15 + ], + [ + -0.08, + -0.11 + ], + [ + -0.09, + -0.14 + ], + [ + -0.03, + -0.05 + ], + [ + -0.08, + -0.12 + ], + [ + -0.46, + -0.68 + ], + [ + -0.53, + -0.78 + ], + [ + -0.14, + -0.2 + ], + [ + -0.23, + -0.35 + ], + [ + -0.08, + -0.13 + ], + [ + -0.27, + -0.41 + ], + [ + -0.1, + -0.15 + ], + [ + -0.15, + -0.24 + ], + [ + -0.11, + -0.17 + ], + [ + -0.17, + -0.25 + ], + [ + -0.19, + -0.31 + ], + [ + -0.64, + -1 + ], + [ + -0.06, + -0.1 + ], + [ + -0.07, + -0.12 + ], + [ + -0.89, + -1.44 + ], + [ + -0.06, + -0.11 + ], + [ + -0.05, + -0.08 + ], + [ + -0.11, + -0.18 + ], + [ + -0.52, + -0.84 + ], + [ + -0.1, + -0.17 + ], + [ + -0.17, + -0.29 + ], + [ + -0.06, + -0.1 + ], + [ + -0.01, + 0 + ], + [ + -0.04, + -0.07 + ], + [ + -0.03, + -0.03 + ], + [ + -0.22, + -0.37 + ], + [ + -0.08, + -0.14 + ], + [ + -0.53, + -0.9 + ], + [ + -0.3, + -0.52 + ], + [ + -0.45, + -0.78 + ], + [ + -0.22, + -0.38 + ], + [ + -0.11, + -0.2 + ], + [ + -0.15, + -0.27 + ], + [ + -0.61, + -1.09 + ], + [ + -0.01, + -0.02 + ], + [ + -0.19, + -0.35 + ], + [ + -0.19, + -0.35 + ], + [ + -0.18, + -0.33 + ], + [ + -0.12, + -0.23 + ], + [ + -0.35, + -0.63 + ], + [ + -0.03, + -0.06 + ], + [ + -0.06, + -0.12 + ], + [ + -0.05, + -0.08 + ], + [ + -0.71, + -1.36 + ], + [ + -0.13, + -0.23 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.05 + ], + [ + -0.24, + -0.46 + ], + [ + -0.5, + -0.98 + ], + [ + -0.16, + -0.31 + ], + [ + -0.15, + -0.3 + ], + [ + -0.23, + -0.45 + ], + [ + -0.21, + -0.42 + ], + [ + -0.25, + -0.49 + ], + [ + -0.07, + -0.12 + ], + [ + -0.06, + -0.12 + ], + [ + -0.22, + -0.45 + ], + [ + -0.11, + -0.22 + ], + [ + -0.34, + -0.7 + ], + [ + -0.11, + -0.22 + ], + [ + -0.03, + -0.05 + ], + [ + -0.12, + -0.26 + ], + [ + -0.08, + -0.18 + ], + [ + -0.38, + -0.83 + ], + [ + -0.12, + -0.26 + ], + [ + -0.07, + -0.16 + ], + [ + -0.09, + -0.2 + ], + [ + -0.05, + -0.12 + ], + [ + -0.55, + -1.21 + ], + [ + -0.11, + -0.22 + ], + [ + 0, + 0 + ], + [ + -0.07, + -0.14 + ], + [ + -0.1, + -0.23 + ], + [ + -0.17, + -0.38 + ], + [ + -0.21, + -0.47 + ], + [ + -0.05, + -0.11 + ], + [ + -0.11, + -0.26 + ], + [ + -0.17, + -0.39 + ], + [ + -0.07, + -0.14 + ], + [ + -0.05, + -0.13 + ], + [ + -0.09, + -0.21 + ], + [ + -0.46, + -1.08 + ], + [ + -0.02, + -0.05 + ], + [ + -0.21, + -0.5 + ], + [ + -0.1, + -0.23 + ], + [ + -0.05, + -0.14 + ], + [ + -0.11, + -0.27 + ], + [ + -0.17, + -0.4 + ], + [ + -0.08, + -0.2 + ], + [ + -0.03, + -0.06 + ], + [ + 0, + 0 + ], + [ + -0.06, + -0.14 + ], + [ + -0.03, + -0.07 + ], + [ + -0.04, + -0.11 + ], + [ + 0, + -0.02 + ], + [ + -0.05, + -0.12 + ], + [ + -0.22, + -0.56 + ], + [ + -0.41, + -1.04 + ], + [ + -0.15, + -0.38 + ], + [ + -0.56, + -1.47 + ], + [ + -0.61, + -1.67 + ], + [ + -0.17, + -0.46 + ], + [ + -0.02, + -0.08 + ], + [ + -0.35, + -0.98 + ], + [ + -0.09, + -0.26 + ], + [ + -0.01, + -0.04 + ], + [ + -0.04, + -0.12 + ], + [ + -0.05, + -0.13 + ], + [ + -0.08, + -0.23 + ], + [ + -0.05, + -0.17 + ], + [ + -0.11, + -0.33 + ], + [ + -0.2, + -0.6 + ], + [ + -0.09, + -0.26 + ], + [ + -0.1, + -0.3 + ], + [ + -0.01, + -0.03 + ], + [ + -0.08, + -0.23 + ], + [ + -0.41, + -1.25 + ], + [ + -0.1, + -0.31 + ], + [ + -0.02, + -0.08 + ], + [ + -0.03, + -0.11 + ], + [ + -0.03, + -0.12 + ], + [ + -0.44, + -1.41 + ], + [ + -0.12, + -0.37 + ], + [ + -0.13, + -0.43 + ], + [ + -0.23, + -0.77 + ], + [ + -0.08, + -0.27 + ], + [ + -0.12, + -0.4 + ], + [ + -0.1, + -0.37 + ], + [ + -0.1, + -0.37 + ], + [ + -0.15, + -0.54 + ], + [ + -0.14, + -0.49 + ], + [ + -0.07, + -0.25 + ], + [ + -0.45, + -1.65 + ], + [ + -0.1, + -0.37 + ], + [ + -0.02, + -0.08 + ], + [ + -0.01, + -0.08 + ], + [ + -0.33, + -1.29 + ], + [ + -0.05, + -0.2 + ], + [ + -0.16, + -0.66 + ], + [ + -0.27, + -1.14 + ], + [ + -0.06, + -0.24 + ], + [ + -0.01, + -0.08 + ], + [ + -0.12, + -0.51 + ], + [ + -0.18, + -0.8 + ], + [ + -0.01, + -0.09 + ], + [ + -0.05, + -0.23 + ], + [ + -0.02, + -0.11 + ], + [ + -0.1, + -0.45 + ], + [ + 0, + -0.04 + ], + [ + -0.03, + -0.14 + ], + [ + -0.02, + -0.11 + ], + [ + -0.14, + -0.69 + ], + [ + -0.14, + -0.67 + ], + [ + 0, + 0 + ], + [ + -0.24, + -1.19 + ], + [ + -0.06, + -0.3 + ], + [ + -0.03, + -0.14 + ], + [ + -0.04, + -0.19 + ], + [ + -0.04, + -0.24 + ], + [ + -0.01, + -0.09 + ], + [ + -0.02, + -0.15 + ], + [ + 0, + -0.01 + ], + [ + -0.18, + -0.95 + ], + [ + -0.02, + -0.12 + ], + [ + -0.03, + -0.2 + ], + [ + -0.05, + -0.25 + ], + [ + -0.1, + -0.54 + ], + [ + -0.18, + -1.03 + ], + [ + -0.01, + -0.05 + ], + [ + -0.06, + -0.35 + ], + [ + -0.01, + -0.04 + ], + [ + -0.04, + -0.27 + ], + [ + -0.05, + -0.28 + ], + [ + -0.05, + -0.33 + ], + [ + -0.01, + -0.07 + ], + [ + -0.07, + -0.46 + ], + [ + -0.06, + -0.34 + ], + [ + -0.05, + -0.28 + ], + [ + -0.03, + -0.2 + ], + [ + -0.02, + -0.12 + ], + [ + -0.2, + -1.33 + ], + [ + -0.02, + -0.12 + ], + [ + -0.02, + -0.17 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.05 + ], + [ + -0.03, + -0.2 + ], + [ + 0, + -0.04 + ], + [ + -0.18, + -1.25 + ], + [ + 0, + -0.05 + ], + [ + -0.03, + -0.19 + ], + [ + -0.04, + -0.24 + ], + [ + -0.03, + -0.28 + ], + [ + -0.03, + -0.21 + ], + [ + -0.03, + -0.27 + ], + [ + -0.12, + -0.99 + ], + [ + -0.01, + -0.14 + ], + [ + -0.08, + -0.67 + ], + [ + -0.01, + -0.13 + ], + [ + -0.02, + -0.24 + ], + [ + 0, + -0.09 + ], + [ + -0.07, + -0.64 + ], + [ + -0.05, + -0.42 + ], + [ + -0.01, + -0.12 + ], + [ + -0.01, + -0.12 + ], + [ + -0.18, + -1.78 + ], + [ + -0.02, + -0.16 + ], + [ + -0.13, + -1.47 + ], + [ + -0.02, + -0.3 + ], + [ + -0.02, + -0.22 + ], + [ + 0, + -0.09 + ], + [ + -0.08, + -1.06 + ], + [ + -0.02, + -0.3 + ], + [ + 0, + -0.15 + ], + [ + -0.02, + -0.31 + ], + [ + -0.02, + -0.44 + ], + [ + -0.01, + -0.18 + ], + [ + 0, + -0.07 + ], + [ + -0.02, + -0.39 + ], + [ + -0.03, + -0.5 + ], + [ + -0.02, + -0.34 + ], + [ + -0.02, + -0.29 + ], + [ + -0.01, + -0.17 + ], + [ + 0, + -0.07 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.66 + ], + [ + -0.02, + -0.32 + ], + [ + -0.02, + -0.4 + ], + [ + -0.01, + -0.14 + ], + [ + -0.01, + -0.19 + ], + [ + -0.01, + -0.2 + ], + [ + -0.01, + -0.1 + ], + [ + -0.01, + -0.51 + ], + [ + -0.04, + -1.05 + ], + [ + -0.01, + -0.3 + ], + [ + -0.01, + -0.45 + ], + [ + -0.03, + -1.09 + ], + [ + 0, + 0 + ], + [ + 0, + -0.24 + ], + [ + 0, + -0.22 + ], + [ + 0, + -0.2 + ], + [ + 0, + -0.31 + ], + [ + 0, + -0.51 + ], + [ + 0, + -0.63 + ], + [ + 0, + -0.1 + ], + [ + 0, + -0.23 + ], + [ + 0, + -0.27 + ], + [ + 0, + -0.29 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + -269.41 + ], + [ + 2.1, + 0 + ], + [ + 0, + 0 + ], + [ + 2.01, + 0.03 + ], + [ + 0.17, + 0 + ], + [ + 1.94, + 0.05 + ], + [ + 1.82, + 0.07 + ], + [ + 0.57, + 0.02 + ], + [ + 1.77, + 0.09 + ], + [ + 0, + 0 + ], + [ + 1.45, + 0.09 + ], + [ + 0.06, + 0 + ], + [ + 0.95, + 0.07 + ], + [ + 0.06, + 0 + ], + [ + 1.3, + 0.1 + ], + [ + 0.82, + 0.07 + ], + [ + 0.02, + 0 + ], + [ + 1.32, + 0.12 + ], + [ + 2.03, + 0.2 + ], + [ + 0.76, + 0.09 + ], + [ + 5.44, + 0.63 + ], + [ + 0.56, + 0.08 + ], + [ + 1.14, + 0.17 + ], + [ + 0.38, + 0.05 + ], + [ + 0.46, + 0.07 + ], + [ + 1.59, + 0.26 + ], + [ + 0.1, + 0.02 + ], + [ + 1.95, + 0.35 + ], + [ + 0.06, + 0.01 + ], + [ + 1.7, + 0.32 + ], + [ + 0.49, + 0.09 + ], + [ + 1.56, + 0.32 + ], + [ + 0.41, + 0.08 + ], + [ + 1.56, + 0.33 + ], + [ + 0.53, + 0.12 + ], + [ + 1.52, + 0.34 + ], + [ + 0.39, + 0.09 + ], + [ + 1.6, + 0.39 + ], + [ + 0.26, + 0.06 + ], + [ + 1.78, + 0.46 + ], + [ + 1.94, + 0.52 + ], + [ + 1.67, + 0.47 + ], + [ + 0.95, + 0.27 + ], + [ + 1.18, + 0.35 + ], + [ + 6.5, + 2.02 + ], + [ + 1.16, + 0.41 + ], + [ + 5.77, + 2.11 + ], + [ + 1.9, + 0.78 + ], + [ + 1.89, + 0.8 + ], + [ + 0, + 0 + ], + [ + 1.35, + 0.58 + ], + [ + 0.33, + 0.15 + ], + [ + 1.56, + 0.71 + ], + [ + 0.19, + 0.08 + ], + [ + 1.38, + 0.65 + ], + [ + 1.84, + 0.87 + ], + [ + 0.83, + 0.41 + ], + [ + 1.08, + 0.54 + ], + [ + 0.14, + 0.07 + ], + [ + 1.46, + 0.74 + ], + [ + 0.39, + 0.21 + ], + [ + 1.59, + 0.84 + ], + [ + 1.51, + 0.82 + ], + [ + 2.02, + 1.12 + ], + [ + 1.62, + 0.93 + ], + [ + 1.52, + 0.9 + ], + [ + 0.27, + 0.16 + ], + [ + 3.22, + 1.96 + ], + [ + 0.04, + 0.02 + ], + [ + 1.55, + 0.99 + ], + [ + 0.14, + 0.09 + ], + [ + 1.54, + 1.02 + ], + [ + 0.03, + 0.03 + ], + [ + 1.62, + 1.1 + ], + [ + 1.55, + 1.07 + ], + [ + 0.09, + 0.07 + ], + [ + 0.65, + 0.46 + ], + [ + 0.47, + 0.34 + ], + [ + 0.43, + 0.31 + ], + [ + 0.38, + 0.27 + ], + [ + 0.98, + 0.72 + ], + [ + 0.22, + 0.15 + ], + [ + 1.33, + 0.99 + ], + [ + 0.26, + 0.2 + ], + [ + 0.3, + 0.23 + ], + [ + 0.39, + 0.3 + ], + [ + 2.13, + 1.65 + ], + [ + 0.68, + 0.54 + ], + [ + 0.79, + 0.64 + ], + [ + 0.31, + 0.25 + ], + [ + 0.13, + 0.12 + ], + [ + 1.37, + 1.13 + ], + [ + 1.5, + 1.26 + ], + [ + 2.76, + 2.39 + ], + [ + 0.19, + 0.17 + ], + [ + 1.43, + 1.3 + ], + [ + 0.02, + 0.02 + ], + [ + 1.09, + 1.02 + ], + [ + 0.66, + 0.62 + ], + [ + 0.89, + 0.85 + ], + [ + 0.19, + 0.17 + ], + [ + 0.22, + 0.21 + ], + [ + 1.1, + 1.07 + ], + [ + 0.08, + 0.08 + ], + [ + 1.35, + 1.34 + ], + [ + 0.03, + 0.04 + ], + [ + 1.17, + 1.19 + ], + [ + 0.17, + 0.18 + ], + [ + 0.28, + 0.29 + ], + [ + 0.73, + 0.77 + ], + [ + 0.41, + 0.42 + ], + [ + 1.29, + 1.39 + ], + [ + 0.01, + 0.01 + ], + [ + 1.31, + 1.44 + ], + [ + 1.3, + 1.45 + ], + [ + 1.28, + 1.47 + ], + [ + 0.04, + 0.05 + ], + [ + 0.92, + 1.08 + ], + [ + 0.31, + 0.36 + ], + [ + 0.3, + 0.37 + ], + [ + 0.76, + 0.91 + ], + [ + 0.18, + 0.22 + ], + [ + 0.12, + 0.15 + ], + [ + 1.1, + 1.37 + ], + [ + 0.08, + 0.1 + ], + [ + 0.94, + 1.21 + ], + [ + 0.51, + 0.66 + ], + [ + 0.54, + 0.71 + ], + [ + 0.6, + 0.79 + ], + [ + 0.46, + 0.61 + ], + [ + 0, + 0 + ], + [ + 0.11, + 0.13 + ], + [ + 0.18, + 0.24 + ], + [ + 0.35, + 0.48 + ], + [ + 0.6, + 0.83 + ], + [ + 0.23, + 0.31 + ], + [ + 0.27, + 0.38 + ], + [ + 0.81, + 1.14 + ], + [ + 0.08, + 0.11 + ], + [ + 0.1, + 0.14 + ], + [ + 0.03, + 0.04 + ], + [ + 0.08, + 0.11 + ], + [ + 0.47, + 0.67 + ], + [ + 0.54, + 0.77 + ], + [ + 0.14, + 0.2 + ], + [ + 0.23, + 0.34 + ], + [ + 0.08, + 0.12 + ], + [ + 0.27, + 0.4 + ], + [ + 0.1, + 0.15 + ], + [ + 0.15, + 0.23 + ], + [ + 0.11, + 0.17 + ], + [ + 0.16, + 0.25 + ], + [ + 0.2, + 0.3 + ], + [ + 0.65, + 0.99 + ], + [ + 0.06, + 0.09 + ], + [ + 0.08, + 0.12 + ], + [ + 0.92, + 1.42 + ], + [ + 0.07, + 0.1 + ], + [ + 0.05, + 0.08 + ], + [ + 0.11, + 0.18 + ], + [ + 0.53, + 0.84 + ], + [ + 0.1, + 0.17 + ], + [ + 0.18, + 0.29 + ], + [ + 0.07, + 0.11 + ], + [ + 0, + 0.01 + ], + [ + 0.04, + 0.07 + ], + [ + 0.01, + 0.04 + ], + [ + 0.22, + 0.37 + ], + [ + 0.09, + 0.14 + ], + [ + 0.54, + 0.89 + ], + [ + 0.31, + 0.52 + ], + [ + 0.46, + 0.77 + ], + [ + 0.22, + 0.37 + ], + [ + 0.11, + 0.19 + ], + [ + 0.15, + 0.26 + ], + [ + 0.62, + 1.08 + ], + [ + 0.01, + 0.02 + ], + [ + 0.19, + 0.34 + ], + [ + 0.19, + 0.35 + ], + [ + 0.19, + 0.33 + ], + [ + 0.13, + 0.23 + ], + [ + 0.35, + 0.63 + ], + [ + 0.03, + 0.06 + ], + [ + 0.07, + 0.12 + ], + [ + 0.05, + 0.08 + ], + [ + 0.73, + 1.35 + ], + [ + 0.13, + 0.24 + ], + [ + 0, + 0.01 + ], + [ + 0.03, + 0.06 + ], + [ + 0.24, + 0.46 + ], + [ + 0.51, + 0.98 + ], + [ + 0.16, + 0.31 + ], + [ + 0.16, + 0.31 + ], + [ + 0.24, + 0.45 + ], + [ + 0.21, + 0.42 + ], + [ + 0.25, + 0.49 + ], + [ + 0.06, + 0.12 + ], + [ + 0.05, + 0.12 + ], + [ + 0.21, + 0.44 + ], + [ + 0.11, + 0.22 + ], + [ + 0.34, + 0.7 + ], + [ + 0.1, + 0.21 + ], + [ + 0.02, + 0.05 + ], + [ + 0.12, + 0.25 + ], + [ + 0.09, + 0.18 + ], + [ + 0.4, + 0.82 + ], + [ + 0.13, + 0.26 + ], + [ + 0.08, + 0.16 + ], + [ + 0.1, + 0.21 + ], + [ + 0.06, + 0.12 + ], + [ + 0.57, + 1.2 + ], + [ + 0.1, + 0.22 + ], + [ + 0, + 0 + ], + [ + 0.07, + 0.14 + ], + [ + 0.1, + 0.22 + ], + [ + 0.17, + 0.38 + ], + [ + 0.21, + 0.47 + ], + [ + 0.05, + 0.11 + ], + [ + 0.11, + 0.25 + ], + [ + 0.18, + 0.39 + ], + [ + 0.06, + 0.14 + ], + [ + 0.05, + 0.12 + ], + [ + 0.09, + 0.2 + ], + [ + 0.47, + 1.07 + ], + [ + 0.02, + 0.05 + ], + [ + 0.21, + 0.5 + ], + [ + 0.1, + 0.23 + ], + [ + 0.05, + 0.14 + ], + [ + 0.12, + 0.27 + ], + [ + 0.17, + 0.4 + ], + [ + 0.08, + 0.2 + ], + [ + 0.02, + 0.06 + ], + [ + 0, + 0 + ], + [ + 0.06, + 0.14 + ], + [ + 0.02, + 0.08 + ], + [ + 0.04, + 0.11 + ], + [ + 0.01, + 0.02 + ], + [ + 0.05, + 0.12 + ], + [ + 0.23, + 0.55 + ], + [ + 0.42, + 1.03 + ], + [ + 0.15, + 0.38 + ], + [ + 0.58, + 1.47 + ], + [ + 0.64, + 1.66 + ], + [ + 0.17, + 0.46 + ], + [ + 0.03, + 0.08 + ], + [ + 0.37, + 0.98 + ], + [ + 0.09, + 0.26 + ], + [ + 0.02, + 0.04 + ], + [ + 0.05, + 0.12 + ], + [ + 0.04, + 0.12 + ], + [ + 0.08, + 0.23 + ], + [ + 0.06, + 0.16 + ], + [ + 0.12, + 0.33 + ], + [ + 0.21, + 0.6 + ], + [ + 0.09, + 0.26 + ], + [ + 0.1, + 0.29 + ], + [ + 0.01, + 0.03 + ], + [ + 0.08, + 0.23 + ], + [ + 0.42, + 1.24 + ], + [ + 0.11, + 0.31 + ], + [ + 0.02, + 0.08 + ], + [ + 0.04, + 0.11 + ], + [ + 0.04, + 0.11 + ], + [ + 0.46, + 1.4 + ], + [ + 0.12, + 0.37 + ], + [ + 0.13, + 0.43 + ], + [ + 0.24, + 0.76 + ], + [ + 0.08, + 0.26 + ], + [ + 0.12, + 0.4 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.36 + ], + [ + 0.16, + 0.54 + ], + [ + 0.15, + 0.49 + ], + [ + 0.07, + 0.24 + ], + [ + 0.47, + 1.64 + ], + [ + 0.1, + 0.37 + ], + [ + 0.02, + 0.08 + ], + [ + 0.02, + 0.07 + ], + [ + 0.35, + 1.28 + ], + [ + 0.05, + 0.19 + ], + [ + 0.17, + 0.65 + ], + [ + 0.29, + 1.14 + ], + [ + 0.07, + 0.24 + ], + [ + 0.02, + 0.07 + ], + [ + 0.13, + 0.51 + ], + [ + 0.2, + 0.8 + ], + [ + 0.03, + 0.09 + ], + [ + 0.06, + 0.22 + ], + [ + 0.03, + 0.11 + ], + [ + 0.11, + 0.43 + ], + [ + 0.01, + 0.03 + ], + [ + 0.04, + 0.13 + ], + [ + 0.03, + 0.11 + ], + [ + 0.16, + 0.68 + ], + [ + 0.16, + 0.66 + ], + [ + 0, + 0 + ], + [ + 0.26, + 1.18 + ], + [ + 0.07, + 0.3 + ], + [ + 0.03, + 0.14 + ], + [ + 0.04, + 0.19 + ], + [ + 0.05, + 0.24 + ], + [ + 0.03, + 0.09 + ], + [ + 0.04, + 0.14 + ], + [ + 0.01, + 0.01 + ], + [ + 0.19, + 0.94 + ], + [ + 0.03, + 0.12 + ], + [ + 0.04, + 0.2 + ], + [ + 0.06, + 0.24 + ], + [ + 0.1, + 0.53 + ], + [ + 0.2, + 1.03 + ], + [ + 0.01, + 0.05 + ], + [ + 0.07, + 0.35 + ], + [ + 0.01, + 0.04 + ], + [ + 0.05, + 0.27 + ], + [ + 0.05, + 0.28 + ], + [ + 0.06, + 0.32 + ], + [ + 0.01, + 0.06 + ], + [ + 0.08, + 0.45 + ], + [ + 0.07, + 0.34 + ], + [ + 0.05, + 0.27 + ], + [ + 0.03, + 0.2 + ], + [ + 0.03, + 0.11 + ], + [ + 0.22, + 1.32 + ], + [ + 0.02, + 0.12 + ], + [ + 0.03, + 0.18 + ], + [ + 0.01, + 0.08 + ], + [ + 0.01, + 0.06 + ], + [ + 0.03, + 0.2 + ], + [ + 0.01, + 0.04 + ], + [ + 0.19, + 1.25 + ], + [ + 0.01, + 0.05 + ], + [ + 0.03, + 0.19 + ], + [ + 0.03, + 0.24 + ], + [ + 0.04, + 0.28 + ], + [ + 0.03, + 0.21 + ], + [ + 0.04, + 0.27 + ], + [ + 0.14, + 0.99 + ], + [ + 0.02, + 0.14 + ], + [ + 0.09, + 0.67 + ], + [ + 0.02, + 0.13 + ], + [ + 0.04, + 0.24 + ], + [ + 0.02, + 0.09 + ], + [ + 0.08, + 0.63 + ], + [ + 0.05, + 0.41 + ], + [ + 0.01, + 0.12 + ], + [ + 0.01, + 0.12 + ], + [ + 0.2, + 1.77 + ], + [ + 0.02, + 0.16 + ], + [ + 0.15, + 1.46 + ], + [ + 0.03, + 0.29 + ], + [ + 0.02, + 0.21 + ], + [ + 0.01, + 0.09 + ], + [ + 0.1, + 1.04 + ], + [ + 0.03, + 0.29 + ], + [ + 0.01, + 0.14 + ], + [ + 0.03, + 0.3 + ], + [ + 0.03, + 0.43 + ], + [ + 0.02, + 0.18 + ], + [ + 0.01, + 0.06 + ], + [ + 0.03, + 0.38 + ], + [ + 0.04, + 0.5 + ], + [ + 0.03, + 0.34 + ], + [ + 0.02, + 0.29 + ], + [ + 0.01, + 0.17 + ], + [ + 0.01, + 0.07 + ], + [ + 0, + 0 + ], + [ + 0.04, + 0.66 + ], + [ + 0.03, + 0.31 + ], + [ + 0.02, + 0.39 + ], + [ + 0.01, + 0.13 + ], + [ + 0.01, + 0.18 + ], + [ + 0.01, + 0.19 + ], + [ + 0, + 0.09 + ], + [ + 0.02, + 0.5 + ], + [ + 0.06, + 1.05 + ], + [ + 0.02, + 0.31 + ], + [ + 0.02, + 0.45 + ], + [ + 0.05, + 1.09 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.24 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.2 + ], + [ + 0.01, + 0.3 + ], + [ + 0.02, + 0.5 + ], + [ + 0.02, + 0.63 + ], + [ + 0.01, + 0.1 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.25 + ], + [ + 0.01, + 0.29 + ], + [ + 0.02, + 1.68 + ] + ], + "v": [ + [ + 487.81, + 243.905 + ], + [ + -487.81, + 243.905 + ], + [ + 0, + -243.905 + ], + [ + 6.3, + -243.865 + ], + [ + 6.53, + -243.865 + ], + [ + 12.54, + -243.745 + ], + [ + 13.05, + -243.735 + ], + [ + 18.86, + -243.545 + ], + [ + 24.31, + -243.305 + ], + [ + 26.01, + -243.225 + ], + [ + 31.32, + -242.915 + ], + [ + 31.33, + -242.915 + ], + [ + 35.67, + -242.615 + ], + [ + 35.85, + -242.605 + ], + [ + 38.7, + -242.385 + ], + [ + 38.88, + -242.375 + ], + [ + 42.76, + -242.055 + ], + [ + 45.21, + -241.835 + ], + [ + 45.28, + -241.825 + ], + [ + 49.24, + -241.445 + ], + [ + 55.3, + -240.805 + ], + [ + 57.57, + -240.535 + ], + [ + 73.79, + -238.355 + ], + [ + 75.49, + -238.095 + ], + [ + 78.92, + -237.545 + ], + [ + 80.05, + -237.365 + ], + [ + 81.42, + -237.135 + ], + [ + 86.19, + -236.315 + ], + [ + 86.5, + -236.255 + ], + [ + 92.34, + -235.175 + ], + [ + 92.5, + -235.145 + ], + [ + 97.58, + -234.135 + ], + [ + 99.03, + -233.845 + ], + [ + 103.69, + -232.855 + ], + [ + 104.92, + -232.585 + ], + [ + 109.58, + -231.545 + ], + [ + 111.15, + -231.175 + ], + [ + 115.69, + -230.105 + ], + [ + 116.84, + -229.815 + ], + [ + 121.64, + -228.615 + ], + [ + 122.4, + -228.415 + ], + [ + 127.74, + -227.005 + ], + [ + 133.54, + -225.395 + ], + [ + 138.54, + -223.945 + ], + [ + 141.4, + -223.085 + ], + [ + 144.93, + -222.015 + ], + [ + 164.24, + -215.555 + ], + [ + 167.72, + -214.305 + ], + [ + 184.87, + -207.655 + ], + [ + 190.55, + -205.285 + ], + [ + 196.2, + -202.845 + ], + [ + 196.2, + -202.835 + ], + [ + 200.22, + -201.055 + ], + [ + 201.19, + -200.615 + ], + [ + 205.87, + -198.455 + ], + [ + 206.44, + -198.195 + ], + [ + 210.59, + -196.225 + ], + [ + 216.08, + -193.555 + ], + [ + 218.56, + -192.315 + ], + [ + 221.79, + -190.685 + ], + [ + 222.23, + -190.455 + ], + [ + 226.6, + -188.195 + ], + [ + 227.77, + -187.575 + ], + [ + 232.52, + -185.025 + ], + [ + 237.04, + -182.535 + ], + [ + 243.07, + -179.125 + ], + [ + 247.9, + -176.305 + ], + [ + 252.46, + -173.575 + ], + [ + 253.27, + -173.085 + ], + [ + 262.87, + -167.085 + ], + [ + 262.99, + -167.005 + ], + [ + 267.61, + -164.005 + ], + [ + 268.03, + -163.735 + ], + [ + 272.64, + -160.665 + ], + [ + 272.74, + -160.595 + ], + [ + 277.58, + -157.275 + ], + [ + 282.2, + -154.045 + ], + [ + 282.48, + -153.835 + ], + [ + 284.44, + -152.435 + ], + [ + 285.85, + -151.415 + ], + [ + 287.15, + -150.475 + ], + [ + 288.28, + -149.645 + ], + [ + 291.2, + -147.475 + ], + [ + 291.86, + -146.995 + ], + [ + 295.81, + -144.015 + ], + [ + 296.6, + -143.405 + ], + [ + 297.51, + -142.705 + ], + [ + 298.67, + -141.805 + ], + [ + 305.01, + -136.805 + ], + [ + 307.02, + -135.185 + ], + [ + 309.38, + -133.265 + ], + [ + 310.29, + -132.515 + ], + [ + 310.69, + -132.175 + ], + [ + 314.78, + -128.755 + ], + [ + 319.23, + -124.945 + ], + [ + 327.42, + -117.695 + ], + [ + 327.99, + -117.175 + ], + [ + 332.27, + -113.245 + ], + [ + 332.34, + -113.185 + ], + [ + 335.59, + -110.115 + ], + [ + 337.56, + -108.245 + ], + [ + 340.21, + -105.675 + ], + [ + 340.77, + -105.135 + ], + [ + 341.42, + -104.495 + ], + [ + 344.69, + -101.265 + ], + [ + 344.93, + -101.025 + ], + [ + 348.94, + -96.975 + ], + [ + 349.04, + -96.865 + ], + [ + 352.51, + -93.275 + ], + [ + 353.03, + -92.735 + ], + [ + 353.86, + -91.865 + ], + [ + 356.04, + -89.545 + ], + [ + 357.24, + -88.265 + ], + [ + 361.08, + -84.085 + ], + [ + 361.1, + -84.065 + ], + [ + 364.99, + -79.725 + ], + [ + 368.85, + -75.325 + ], + [ + 372.66, + -70.875 + ], + [ + 372.79, + -70.725 + ], + [ + 375.5, + -67.475 + ], + [ + 376.42, + -66.385 + ], + [ + 377.33, + -65.265 + ], + [ + 379.58, + -62.515 + ], + [ + 380.12, + -61.845 + ], + [ + 380.48, + -61.395 + ], + [ + 383.76, + -57.265 + ], + [ + 384, + -56.965 + ], + [ + 386.82, + -53.335 + ], + [ + 388.34, + -51.345 + ], + [ + 389.95, + -49.215 + ], + [ + 391.73, + -46.835 + ], + [ + 393.1, + -44.985 + ], + [ + 393.1, + -44.975 + ], + [ + 393.41, + -44.565 + ], + [ + 393.95, + -43.835 + ], + [ + 394.99, + -42.405 + ], + [ + 396.79, + -39.905 + ], + [ + 397.46, + -38.975 + ], + [ + 398.26, + -37.845 + ], + [ + 400.66, + -34.425 + ], + [ + 400.89, + -34.095 + ], + [ + 401.18, + -33.675 + ], + [ + 401.27, + -33.545 + ], + [ + 401.51, + -33.205 + ], + [ + 402.91, + -31.165 + ], + [ + 404.5, + -28.835 + ], + [ + 404.91, + -28.225 + ], + [ + 405.6, + -27.195 + ], + [ + 405.85, + -26.815 + ], + [ + 406.66, + -25.605 + ], + [ + 406.96, + -25.155 + ], + [ + 407.42, + -24.455 + ], + [ + 407.76, + -23.945 + ], + [ + 408.25, + -23.195 + ], + [ + 408.84, + -22.285 + ], + [ + 410.78, + -19.295 + ], + [ + 410.96, + -19.015 + ], + [ + 411.18, + -18.655 + ], + [ + 413.9, + -14.365 + ], + [ + 414.1, + -14.045 + ], + [ + 414.25, + -13.805 + ], + [ + 414.58, + -13.275 + ], + [ + 416.14, + -10.755 + ], + [ + 416.45, + -10.245 + ], + [ + 416.98, + -9.375 + ], + [ + 417.18, + -9.055 + ], + [ + 417.19, + -9.045 + ], + [ + 417.32, + -8.835 + ], + [ + 417.38, + -8.735 + ], + [ + 418.04, + -7.625 + ], + [ + 418.3, + -7.195 + ], + [ + 419.91, + -4.505 + ], + [ + 420.83, + -2.945 + ], + [ + 422.19, + -0.615 + ], + [ + 422.84, + 0.505 + ], + [ + 423.18, + 1.095 + ], + [ + 423.63, + 1.885 + ], + [ + 425.48, + 5.145 + ], + [ + 425.51, + 5.195 + ], + [ + 426.09, + 6.225 + ], + [ + 426.67, + 7.275 + ], + [ + 427.22, + 8.265 + ], + [ + 427.6, + 8.955 + ], + [ + 428.64, + 10.845 + ], + [ + 428.73, + 11.015 + ], + [ + 428.93, + 11.385 + ], + [ + 429.07, + 11.635 + ], + [ + 431.24, + 15.695 + ], + [ + 431.62, + 16.395 + ], + [ + 431.63, + 16.415 + ], + [ + 431.72, + 16.585 + ], + [ + 432.44, + 17.965 + ], + [ + 433.96, + 20.895 + ], + [ + 434.44, + 21.825 + ], + [ + 434.9, + 22.735 + ], + [ + 435.59, + 24.085 + ], + [ + 436.22, + 25.345 + ], + [ + 436.96, + 26.805 + ], + [ + 437.15, + 27.175 + ], + [ + 437.32, + 27.525 + ], + [ + 437.97, + 28.855 + ], + [ + 438.3, + 29.525 + ], + [ + 439.33, + 31.635 + ], + [ + 439.64, + 32.275 + ], + [ + 439.71, + 32.425 + ], + [ + 440.07, + 33.185 + ], + [ + 440.33, + 33.725 + ], + [ + 441.5, + 36.195 + ], + [ + 441.87, + 36.975 + ], + [ + 442.09, + 37.445 + ], + [ + 442.38, + 38.065 + ], + [ + 442.54, + 38.425 + ], + [ + 444.21, + 42.045 + ], + [ + 444.52, + 42.705 + ], + [ + 444.52, + 42.725 + ], + [ + 444.72, + 43.155 + ], + [ + 445.02, + 43.835 + ], + [ + 445.53, + 44.975 + ], + [ + 446.16, + 46.385 + ], + [ + 446.31, + 46.715 + ], + [ + 446.64, + 47.475 + ], + [ + 447.16, + 48.645 + ], + [ + 447.35, + 49.075 + ], + [ + 447.51, + 49.455 + ], + [ + 447.78, + 50.075 + ], + [ + 449.17, + 53.305 + ], + [ + 449.23, + 53.455 + ], + [ + 449.86, + 54.945 + ], + [ + 450.15, + 55.625 + ], + [ + 450.31, + 56.035 + ], + [ + 450.66, + 56.855 + ], + [ + 451.16, + 58.065 + ], + [ + 451.41, + 58.665 + ], + [ + 451.49, + 58.855 + ], + [ + 451.49, + 58.875 + ], + [ + 451.67, + 59.285 + ], + [ + 451.76, + 59.515 + ], + [ + 451.89, + 59.855 + ], + [ + 451.91, + 59.905 + ], + [ + 452.06, + 60.265 + ], + [ + 452.73, + 61.925 + ], + [ + 453.97, + 65.035 + ], + [ + 454.42, + 66.185 + ], + [ + 456.12, + 70.595 + ], + [ + 457.99, + 75.595 + ], + [ + 458.5, + 76.975 + ], + [ + 458.58, + 77.225 + ], + [ + 459.65, + 80.175 + ], + [ + 459.92, + 80.945 + ], + [ + 459.96, + 81.065 + ], + [ + 460.1, + 81.435 + ], + [ + 460.23, + 81.805 + ], + [ + 460.47, + 82.495 + ], + [ + 460.64, + 82.995 + ], + [ + 460.99, + 83.995 + ], + [ + 461.61, + 85.785 + ], + [ + 461.88, + 86.575 + ], + [ + 462.18, + 87.455 + ], + [ + 462.21, + 87.545 + ], + [ + 462.44, + 88.235 + ], + [ + 463.68, + 91.975 + ], + [ + 463.99, + 92.905 + ], + [ + 464.06, + 93.135 + ], + [ + 464.17, + 93.475 + ], + [ + 464.28, + 93.815 + ], + [ + 465.62, + 98.025 + ], + [ + 465.97, + 99.135 + ], + [ + 466.36, + 100.415 + ], + [ + 467.06, + 102.705 + ], + [ + 467.3, + 103.505 + ], + [ + 467.66, + 104.705 + ], + [ + 467.98, + 105.795 + ], + [ + 468.3, + 106.895 + ], + [ + 468.77, + 108.515 + ], + [ + 469.19, + 109.975 + ], + [ + 469.4, + 110.715 + ], + [ + 470.77, + 115.645 + ], + [ + 471.07, + 116.755 + ], + [ + 471.13, + 116.985 + ], + [ + 471.19, + 117.215 + ], + [ + 472.21, + 121.065 + ], + [ + 472.36, + 121.645 + ], + [ + 472.86, + 123.615 + ], + [ + 473.71, + 127.035 + ], + [ + 473.9, + 127.765 + ], + [ + 473.95, + 127.995 + ], + [ + 474.32, + 129.525 + ], + [ + 474.89, + 131.925 + ], + [ + 474.95, + 132.185 + ], + [ + 475.11, + 132.855 + ], + [ + 475.18, + 133.175 + ], + [ + 475.49, + 134.495 + ], + [ + 475.51, + 134.605 + ], + [ + 475.61, + 135.025 + ], + [ + 475.68, + 135.355 + ], + [ + 476.14, + 137.415 + ], + [ + 476.59, + 139.405 + ], + [ + 476.74, + 140.125 + ], + [ + 477.5, + 143.685 + ], + [ + 477.69, + 144.585 + ], + [ + 477.78, + 145.015 + ], + [ + 477.9, + 145.595 + ], + [ + 478.04, + 146.325 + ], + [ + 478.09, + 146.585 + ], + [ + 478.18, + 147.015 + ], + [ + 478.19, + 147.045 + ], + [ + 478.75, + 149.875 + ], + [ + 478.82, + 150.235 + ], + [ + 478.93, + 150.835 + ], + [ + 479.08, + 151.565 + ], + [ + 479.38, + 153.165 + ], + [ + 479.95, + 156.255 + ], + [ + 479.98, + 156.395 + ], + [ + 480.17, + 157.445 + ], + [ + 480.19, + 157.555 + ], + [ + 480.33, + 158.365 + ], + [ + 480.48, + 159.205 + ], + [ + 480.65, + 160.185 + ], + [ + 480.68, + 160.375 + ], + [ + 480.91, + 161.735 + ], + [ + 481.09, + 162.755 + ], + [ + 481.23, + 163.575 + ], + [ + 481.32, + 164.175 + ], + [ + 481.38, + 164.525 + ], + [ + 482.01, + 168.495 + ], + [ + 482.07, + 168.845 + ], + [ + 482.15, + 169.375 + ], + [ + 482.19, + 169.615 + ], + [ + 482.21, + 169.775 + ], + [ + 482.3, + 170.365 + ], + [ + 482.32, + 170.495 + ], + [ + 482.87, + 174.245 + ], + [ + 482.89, + 174.405 + ], + [ + 482.98, + 174.975 + ], + [ + 483.08, + 175.685 + ], + [ + 483.19, + 176.525 + ], + [ + 483.28, + 177.155 + ], + [ + 483.39, + 177.975 + ], + [ + 483.78, + 180.935 + ], + [ + 483.83, + 181.345 + ], + [ + 484.08, + 183.345 + ], + [ + 484.13, + 183.745 + ], + [ + 484.22, + 184.465 + ], + [ + 484.25, + 184.735 + ], + [ + 484.48, + 186.645 + ], + [ + 484.63, + 187.895 + ], + [ + 484.67, + 188.255 + ], + [ + 484.71, + 188.615 + ], + [ + 485.28, + 193.935 + ], + [ + 485.33, + 194.415 + ], + [ + 485.75, + 198.815 + ], + [ + 485.83, + 199.695 + ], + [ + 485.89, + 200.345 + ], + [ + 485.91, + 200.615 + ], + [ + 486.18, + 203.765 + ], + [ + 486.25, + 204.655 + ], + [ + 486.28, + 205.085 + ], + [ + 486.36, + 205.995 + ], + [ + 486.45, + 207.305 + ], + [ + 486.49, + 207.845 + ], + [ + 486.51, + 208.035 + ], + [ + 486.59, + 209.195 + ], + [ + 486.69, + 210.695 + ], + [ + 486.76, + 211.705 + ], + [ + 486.82, + 212.575 + ], + [ + 486.85, + 213.085 + ], + [ + 486.86, + 213.305 + ], + [ + 486.89, + 213.725 + ], + [ + 487, + 215.715 + ], + [ + 487.06, + 216.655 + ], + [ + 487.12, + 217.845 + ], + [ + 487.15, + 218.255 + ], + [ + 487.18, + 218.805 + ], + [ + 487.21, + 219.395 + ], + [ + 487.22, + 219.685 + ], + [ + 487.28, + 221.205 + ], + [ + 487.42, + 224.355 + ], + [ + 487.46, + 225.275 + ], + [ + 487.5, + 226.625 + ], + [ + 487.61, + 229.905 + ], + [ + 487.61, + 229.955 + ], + [ + 487.63, + 230.665 + ], + [ + 487.65, + 231.315 + ], + [ + 487.66, + 231.905 + ], + [ + 487.68, + 232.815 + ], + [ + 487.71, + 234.335 + ], + [ + 487.74, + 236.225 + ], + [ + 487.75, + 236.525 + ], + [ + 487.76, + 237.195 + ], + [ + 487.77, + 237.975 + ], + [ + 487.78, + 238.845 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.003921568627, + 0.066666666667, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 1, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 488.81, + 244.905 + ], + "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, + -1.69 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.09, + -0.14 + ], + [ + -0.18, + -0.24 + ], + [ + -0.34, + -0.48 + ], + [ + -0.02, + -0.03 + ], + [ + -0.31, + -0.44 + ], + [ + -0.25, + -0.36 + ], + [ + -0.22, + -0.31 + ], + [ + -0.26, + -0.38 + ], + [ + -0.12, + -0.17 + ], + [ + -0.67, + -0.98 + ], + [ + -0.08, + -0.11 + ], + [ + -0.08, + -0.14 + ], + [ + -0.03, + -0.05 + ], + [ + -0.08, + -0.12 + ], + [ + -0.46, + -0.68 + ], + [ + -0.53, + -0.78 + ], + [ + -0.13, + -0.21 + ], + [ + -0.22, + -0.35 + ], + [ + -0.08, + -0.13 + ], + [ + -0.26, + -0.41 + ], + [ + -0.07, + -0.11 + ], + [ + -0.02, + -0.04 + ], + [ + -0.15, + -0.24 + ], + [ + -0.11, + -0.17 + ], + [ + -0.17, + -0.25 + ], + [ + -0.19, + -0.31 + ], + [ + -0.11, + -0.18 + ], + [ + -0.52, + -0.82 + ], + [ + -0.06, + -0.1 + ], + [ + -0.09, + -0.13 + ], + [ + -0.48, + -0.78 + ], + [ + -0.1, + -0.17 + ], + [ + -0.3, + -0.48 + ], + [ + -0.06, + -0.11 + ], + [ + -0.05, + -0.08 + ], + [ + -0.1, + -0.18 + ], + [ + -0.08, + -0.15 + ], + [ + -0.43, + -0.7 + ], + [ + -0.34, + -0.57 + ], + [ + -0.01, + 0 + ], + [ + -0.04, + -0.07 + ], + [ + -0.03, + -0.03 + ], + [ + -0.22, + -0.37 + ], + [ + -0.08, + -0.14 + ], + [ + -0.13, + -0.23 + ], + [ + -0.39, + -0.67 + ], + [ + -0.3, + -0.52 + ], + [ + -0.45, + -0.78 + ], + [ + -0.21, + -0.37 + ], + [ + -0.11, + -0.2 + ], + [ + -0.26, + -0.44 + ], + [ + -0.5, + -0.9 + ], + [ + -0.01, + -0.02 + ], + [ + -0.19, + -0.34 + ], + [ + -0.18, + -0.35 + ], + [ + -0.18, + -0.33 + ], + [ + -0.12, + -0.23 + ], + [ + -0.34, + -0.63 + ], + [ + -0.03, + -0.06 + ], + [ + -0.06, + -0.11 + ], + [ + 0, + -0.02 + ], + [ + -0.05, + -0.08 + ], + [ + -0.52, + -0.98 + ], + [ + -0.33, + -0.62 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.05 + ], + [ + -0.24, + -0.46 + ], + [ + -0.18, + -0.36 + ], + [ + -0.32, + -0.62 + ], + [ + -0.16, + -0.31 + ], + [ + -0.15, + -0.3 + ], + [ + -0.04, + -0.07 + ], + [ + 0, + 0 + ], + [ + -0.21, + -0.42 + ], + [ + -0.25, + -0.49 + ], + [ + -0.07, + -0.12 + ], + [ + -0.06, + -0.12 + ], + [ + -0.22, + -0.45 + ], + [ + -0.11, + -0.22 + ], + [ + -0.34, + -0.7 + ], + [ + -0.11, + -0.22 + ], + [ + -0.03, + -0.05 + ], + [ + -0.11, + -0.25 + ], + [ + -0.08, + -0.18 + ], + [ + -0.37, + -0.78 + ], + [ + -0.01, + -0.04 + ], + [ + -0.12, + -0.26 + ], + [ + -0.07, + -0.16 + ], + [ + -0.09, + -0.2 + ], + [ + -0.05, + -0.12 + ], + [ + -0.21, + -0.48 + ], + [ + -0.33, + -0.73 + ], + [ + -0.11, + -0.22 + ], + [ + 0, + 0 + ], + [ + -0.07, + -0.14 + ], + [ + -0.1, + -0.23 + ], + [ + -0.32, + -0.73 + ], + [ + -0.05, + -0.12 + ], + [ + -0.05, + -0.11 + ], + [ + -0.1, + -0.26 + ], + [ + -0.17, + -0.39 + ], + [ + -0.07, + -0.14 + ], + [ + -0.05, + -0.13 + ], + [ + -0.09, + -0.21 + ], + [ + -0.46, + -1.08 + ], + [ + -0.02, + -0.05 + ], + [ + -0.21, + -0.5 + ], + [ + -0.14, + -0.37 + ], + [ + -0.11, + -0.27 + ], + [ + -0.16, + -0.41 + ], + [ + -0.08, + -0.2 + ], + [ + -0.03, + -0.06 + ], + [ + 0, + 0 + ], + [ + -0.13, + -0.33 + ], + [ + 0, + -0.02 + ], + [ + -0.05, + -0.12 + ], + [ + -0.22, + -0.56 + ], + [ + -0.41, + -1.04 + ], + [ + -0.15, + -0.38 + ], + [ + -0.11, + -0.31 + ], + [ + -0.44, + -1.17 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.07 + ], + [ + -0.27, + -0.72 + ], + [ + -0.15, + -0.42 + ], + [ + -0.1, + -0.29 + ], + [ + -0.17, + -0.46 + ], + [ + -0.02, + -0.08 + ], + [ + -0.27, + -0.75 + ], + [ + -0.08, + -0.24 + ], + [ + -0.08, + -0.26 + ], + [ + -0.01, + -0.04 + ], + [ + -0.09, + -0.25 + ], + [ + -0.08, + -0.23 + ], + [ + -0.05, + -0.17 + ], + [ + -0.11, + -0.34 + ], + [ + -0.2, + -0.6 + ], + [ + -0.09, + -0.26 + ], + [ + -0.1, + -0.3 + ], + [ + -0.01, + -0.03 + ], + [ + -0.08, + -0.23 + ], + [ + -0.12, + -0.37 + ], + [ + -0.29, + -0.89 + ], + [ + -0.13, + -0.39 + ], + [ + -0.03, + -0.11 + ], + [ + -0.03, + -0.12 + ], + [ + -0.39, + -1.22 + ], + [ + -0.06, + -0.19 + ], + [ + -0.12, + -0.37 + ], + [ + -0.13, + -0.43 + ], + [ + -0.23, + -0.77 + ], + [ + -0.08, + -0.27 + ], + [ + -0.12, + -0.4 + ], + [ + -0.11, + -0.37 + ], + [ + -0.1, + -0.37 + ], + [ + -0.1, + -0.35 + ], + [ + -0.05, + -0.19 + ], + [ + -0.14, + -0.49 + ], + [ + -0.07, + -0.25 + ], + [ + -0.14, + -0.53 + ], + [ + -0.3, + -1.13 + ], + [ + -0.1, + -0.37 + ], + [ + -0.02, + -0.08 + ], + [ + -0.01, + -0.08 + ], + [ + -0.09, + -0.34 + ], + [ + -0.25, + -0.95 + ], + [ + -0.05, + -0.2 + ], + [ + -0.16, + -0.66 + ], + [ + -0.22, + -0.91 + ], + [ + -0.05, + -0.24 + ], + [ + -0.07, + -0.32 + ], + [ + -0.12, + -0.51 + ], + [ + -0.11, + -0.5 + ], + [ + -0.06, + -0.3 + ], + [ + -0.01, + -0.09 + ], + [ + -0.05, + -0.22 + ], + [ + -0.02, + -0.11 + ], + [ + -0.1, + -0.44 + ], + [ + 0, + -0.04 + ], + [ + -0.03, + -0.14 + ], + [ + -0.02, + -0.12 + ], + [ + -0.07, + -0.31 + ], + [ + -0.07, + -0.39 + ], + [ + -0.14, + -0.67 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.13 + ], + [ + -0.22, + -1.06 + ], + [ + -0.06, + -0.31 + ], + [ + -0.03, + -0.14 + ], + [ + -0.04, + -0.19 + ], + [ + -0.08, + -0.39 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.01 + ], + [ + -0.18, + -0.9 + ], + [ + 0, + -0.04 + ], + [ + -0.02, + -0.12 + ], + [ + -0.03, + -0.2 + ], + [ + -0.14, + -0.78 + ], + [ + -0.1, + -0.57 + ], + [ + -0.08, + -0.46 + ], + [ + -0.01, + -0.05 + ], + [ + -0.11, + -0.66 + ], + [ + -0.04, + -0.24 + ], + [ + -0.01, + -0.05 + ], + [ + -0.05, + -0.33 + ], + [ + -0.01, + -0.07 + ], + [ + -0.07, + -0.46 + ], + [ + -0.13, + -0.81 + ], + [ + -0.02, + -0.12 + ], + [ + -0.2, + -1.33 + ], + [ + -0.02, + -0.12 + ], + [ + -0.02, + -0.17 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.05 + ], + [ + -0.03, + -0.19 + ], + [ + 0, + -0.04 + ], + [ + -0.18, + -1.25 + ], + [ + 0, + -0.05 + ], + [ + -0.09, + -0.71 + ], + [ + -0.03, + -0.21 + ], + [ + -0.03, + -0.27 + ], + [ + -0.01, + -0.06 + ], + [ + -0.05, + -0.34 + ], + [ + -0.03, + -0.24 + ], + [ + -0.04, + -0.33 + ], + [ + -0.01, + -0.14 + ], + [ + -0.08, + -0.67 + ], + [ + -0.01, + -0.13 + ], + [ + -0.02, + -0.24 + ], + [ + 0, + -0.09 + ], + [ + -0.07, + -0.64 + ], + [ + -0.05, + -0.42 + ], + [ + -0.01, + -0.12 + ], + [ + -0.01, + -0.12 + ], + [ + -0.01, + -0.11 + ], + [ + -0.17, + -1.64 + ], + [ + -0.02, + -0.18 + ], + [ + -0.03, + -0.26 + ], + [ + -0.08, + -0.88 + ], + [ + -0.03, + -0.33 + ], + [ + -0.02, + -0.3 + ], + [ + -0.02, + -0.31 + ], + [ + -0.08, + -1.06 + ], + [ + -0.02, + -0.3 + ], + [ + 0, + -0.15 + ], + [ + -0.05, + -0.74 + ], + [ + -0.01, + -0.18 + ], + [ + 0, + -0.07 + ], + [ + -0.01, + -0.23 + ], + [ + -0.01, + -0.15 + ], + [ + -0.01, + -0.19 + ], + [ + -0.01, + -0.31 + ], + [ + -0.02, + -0.34 + ], + [ + -0.03, + -0.46 + ], + [ + 0, + -0.07 + ], + [ + -0.01, + -0.07 + ], + [ + 0, + -0.07 + ], + [ + -0.03, + -0.66 + ], + [ + -0.03, + -0.71 + ], + [ + -0.01, + -0.3 + ], + [ + -0.03, + -0.83 + ], + [ + -0.02, + -0.63 + ], + [ + -0.01, + -0.22 + ], + [ + 0, + -0.21 + ], + [ + -0.01, + -0.3 + ], + [ + -0.01, + -0.45 + ], + [ + -0.02, + -0.68 + ], + [ + -0.01, + -0.42 + ], + [ + 0, + 0 + ], + [ + 0, + -0.24 + ], + [ + 0, + -0.22 + ], + [ + 0, + -0.2 + ], + [ + -0.01, + -0.19 + ], + [ + 0, + 0 + ], + [ + 0, + -0.09 + ], + [ + -0.01, + -0.5 + ], + [ + 0, + -0.2 + ], + [ + 0.01, + -0.36 + ], + [ + 0, + -0.1 + ], + [ + 0, + -0.23 + ], + [ + 0, + -0.26 + ], + [ + 0, + -0.29 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0.01, + -0.01 + ], + [ + 0, + 0 + ], + [ + 0.1, + 0.14 + ], + [ + 0.19, + 0.24 + ], + [ + 0.35, + 0.48 + ], + [ + 0.03, + 0.03 + ], + [ + 0.32, + 0.44 + ], + [ + 0.26, + 0.36 + ], + [ + 0.23, + 0.31 + ], + [ + 0.27, + 0.38 + ], + [ + 0.12, + 0.16 + ], + [ + 0.69, + 0.97 + ], + [ + 0.08, + 0.11 + ], + [ + 0.11, + 0.14 + ], + [ + 0.03, + 0.04 + ], + [ + 0.09, + 0.11 + ], + [ + 0.47, + 0.67 + ], + [ + 0.54, + 0.77 + ], + [ + 0.14, + 0.2 + ], + [ + 0.24, + 0.34 + ], + [ + 0.08, + 0.12 + ], + [ + 0.28, + 0.4 + ], + [ + 0.08, + 0.11 + ], + [ + 0.03, + 0.04 + ], + [ + 0.15, + 0.23 + ], + [ + 0.11, + 0.17 + ], + [ + 0.16, + 0.25 + ], + [ + 0.2, + 0.3 + ], + [ + 0.13, + 0.18 + ], + [ + 0.53, + 0.81 + ], + [ + 0.06, + 0.09 + ], + [ + 0.09, + 0.13 + ], + [ + 0.49, + 0.78 + ], + [ + 0.11, + 0.16 + ], + [ + 0.3, + 0.48 + ], + [ + 0.07, + 0.1 + ], + [ + 0.05, + 0.08 + ], + [ + 0.12, + 0.17 + ], + [ + 0.1, + 0.14 + ], + [ + 0.43, + 0.7 + ], + [ + 0.36, + 0.57 + ], + [ + 0, + 0.01 + ], + [ + 0.04, + 0.07 + ], + [ + 0.01, + 0.04 + ], + [ + 0.22, + 0.37 + ], + [ + 0.09, + 0.14 + ], + [ + 0.15, + 0.23 + ], + [ + 0.4, + 0.66 + ], + [ + 0.31, + 0.52 + ], + [ + 0.46, + 0.77 + ], + [ + 0.22, + 0.37 + ], + [ + 0.11, + 0.19 + ], + [ + 0.26, + 0.45 + ], + [ + 0.51, + 0.91 + ], + [ + 0.01, + 0.02 + ], + [ + 0.2, + 0.34 + ], + [ + 0.2, + 0.35 + ], + [ + 0.19, + 0.33 + ], + [ + 0.13, + 0.23 + ], + [ + 0.35, + 0.63 + ], + [ + 0.03, + 0.06 + ], + [ + 0.06, + 0.1 + ], + [ + 0.01, + 0.02 + ], + [ + 0.05, + 0.08 + ], + [ + 0.53, + 0.97 + ], + [ + 0.33, + 0.61 + ], + [ + 0, + 0.01 + ], + [ + 0.03, + 0.06 + ], + [ + 0.24, + 0.46 + ], + [ + 0.2, + 0.36 + ], + [ + 0.32, + 0.61 + ], + [ + 0.16, + 0.31 + ], + [ + 0.16, + 0.31 + ], + [ + 0.05, + 0.07 + ], + [ + 0, + 0 + ], + [ + 0.21, + 0.42 + ], + [ + 0.25, + 0.49 + ], + [ + 0.06, + 0.12 + ], + [ + 0.05, + 0.12 + ], + [ + 0.21, + 0.44 + ], + [ + 0.11, + 0.22 + ], + [ + 0.35, + 0.7 + ], + [ + 0.1, + 0.21 + ], + [ + 0.02, + 0.05 + ], + [ + 0.13, + 0.25 + ], + [ + 0.09, + 0.18 + ], + [ + 0.38, + 0.78 + ], + [ + 0.02, + 0.04 + ], + [ + 0.13, + 0.26 + ], + [ + 0.08, + 0.16 + ], + [ + 0.1, + 0.21 + ], + [ + 0.06, + 0.12 + ], + [ + 0.23, + 0.48 + ], + [ + 0.34, + 0.73 + ], + [ + 0.1, + 0.22 + ], + [ + 0, + 0 + ], + [ + 0.07, + 0.14 + ], + [ + 0.1, + 0.22 + ], + [ + 0.33, + 0.73 + ], + [ + 0.06, + 0.12 + ], + [ + 0.05, + 0.11 + ], + [ + 0.11, + 0.25 + ], + [ + 0.18, + 0.39 + ], + [ + 0.06, + 0.14 + ], + [ + 0.05, + 0.12 + ], + [ + 0.09, + 0.2 + ], + [ + 0.47, + 1.07 + ], + [ + 0.02, + 0.05 + ], + [ + 0.21, + 0.49 + ], + [ + 0.15, + 0.36 + ], + [ + 0.12, + 0.27 + ], + [ + 0.17, + 0.4 + ], + [ + 0.09, + 0.2 + ], + [ + 0.02, + 0.06 + ], + [ + 0, + 0 + ], + [ + 0.14, + 0.32 + ], + [ + 0.01, + 0.02 + ], + [ + 0.05, + 0.12 + ], + [ + 0.23, + 0.55 + ], + [ + 0.42, + 1.03 + ], + [ + 0.15, + 0.38 + ], + [ + 0.13, + 0.31 + ], + [ + 0.45, + 1.16 + ], + [ + 0, + 0 + ], + [ + 0.03, + 0.06 + ], + [ + 0.26, + 0.71 + ], + [ + 0.15, + 0.41 + ], + [ + 0.11, + 0.29 + ], + [ + 0.17, + 0.46 + ], + [ + 0.03, + 0.08 + ], + [ + 0.28, + 0.74 + ], + [ + 0.08, + 0.23 + ], + [ + 0.09, + 0.25 + ], + [ + 0.02, + 0.04 + ], + [ + 0.09, + 0.24 + ], + [ + 0.08, + 0.23 + ], + [ + 0.06, + 0.16 + ], + [ + 0.12, + 0.33 + ], + [ + 0.21, + 0.59 + ], + [ + 0.09, + 0.26 + ], + [ + 0.1, + 0.29 + ], + [ + 0.01, + 0.03 + ], + [ + 0.08, + 0.23 + ], + [ + 0.13, + 0.36 + ], + [ + 0.29, + 0.88 + ], + [ + 0.13, + 0.38 + ], + [ + 0.04, + 0.11 + ], + [ + 0.04, + 0.11 + ], + [ + 0.39, + 1.21 + ], + [ + 0.05, + 0.19 + ], + [ + 0.12, + 0.37 + ], + [ + 0.13, + 0.43 + ], + [ + 0.24, + 0.76 + ], + [ + 0.08, + 0.26 + ], + [ + 0.12, + 0.4 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.34 + ], + [ + 0.05, + 0.19 + ], + [ + 0.15, + 0.49 + ], + [ + 0.07, + 0.24 + ], + [ + 0.15, + 0.51 + ], + [ + 0.32, + 1.12 + ], + [ + 0.1, + 0.37 + ], + [ + 0.02, + 0.07 + ], + [ + 0.02, + 0.07 + ], + [ + 0.1, + 0.33 + ], + [ + 0.25, + 0.94 + ], + [ + 0.05, + 0.19 + ], + [ + 0.17, + 0.65 + ], + [ + 0.23, + 0.89 + ], + [ + 0.06, + 0.24 + ], + [ + 0.09, + 0.32 + ], + [ + 0.13, + 0.51 + ], + [ + 0.13, + 0.5 + ], + [ + 0.08, + 0.3 + ], + [ + 0.03, + 0.09 + ], + [ + 0.06, + 0.22 + ], + [ + 0.03, + 0.11 + ], + [ + 0.11, + 0.44 + ], + [ + 0.01, + 0.03 + ], + [ + 0.04, + 0.13 + ], + [ + 0.03, + 0.1 + ], + [ + 0.08, + 0.29 + ], + [ + 0.09, + 0.38 + ], + [ + 0.16, + 0.66 + ], + [ + 0, + 0 + ], + [ + 0.04, + 0.13 + ], + [ + 0.23, + 1.05 + ], + [ + 0.07, + 0.29 + ], + [ + 0.03, + 0.14 + ], + [ + 0.04, + 0.19 + ], + [ + 0.08, + 0.39 + ], + [ + 0.02, + 0.08 + ], + [ + 0.01, + 0.01 + ], + [ + 0.19, + 0.9 + ], + [ + 0.01, + 0.05 + ], + [ + 0.03, + 0.12 + ], + [ + 0.04, + 0.2 + ], + [ + 0.16, + 0.78 + ], + [ + 0.11, + 0.57 + ], + [ + 0.09, + 0.46 + ], + [ + 0.01, + 0.05 + ], + [ + 0.12, + 0.65 + ], + [ + 0.05, + 0.23 + ], + [ + 0.01, + 0.04 + ], + [ + 0.06, + 0.32 + ], + [ + 0.01, + 0.06 + ], + [ + 0.08, + 0.45 + ], + [ + 0.15, + 0.81 + ], + [ + 0.03, + 0.11 + ], + [ + 0.22, + 1.32 + ], + [ + 0.02, + 0.12 + ], + [ + 0.03, + 0.18 + ], + [ + 0.01, + 0.08 + ], + [ + 0.01, + 0.06 + ], + [ + 0.03, + 0.2 + ], + [ + 0.01, + 0.04 + ], + [ + 0.19, + 1.25 + ], + [ + 0.01, + 0.05 + ], + [ + 0.11, + 0.71 + ], + [ + 0.03, + 0.21 + ], + [ + 0.04, + 0.27 + ], + [ + 0.01, + 0.07 + ], + [ + 0.05, + 0.34 + ], + [ + 0.03, + 0.24 + ], + [ + 0.05, + 0.34 + ], + [ + 0.02, + 0.14 + ], + [ + 0.09, + 0.67 + ], + [ + 0.02, + 0.13 + ], + [ + 0.04, + 0.24 + ], + [ + 0.02, + 0.09 + ], + [ + 0.08, + 0.63 + ], + [ + 0.05, + 0.41 + ], + [ + 0.01, + 0.12 + ], + [ + 0.01, + 0.12 + ], + [ + 0.01, + 0.11 + ], + [ + 0.18, + 1.63 + ], + [ + 0.01, + 0.19 + ], + [ + 0.03, + 0.26 + ], + [ + 0.09, + 0.87 + ], + [ + 0.03, + 0.33 + ], + [ + 0.03, + 0.29 + ], + [ + 0.03, + 0.3 + ], + [ + 0.1, + 1.04 + ], + [ + 0.03, + 0.29 + ], + [ + 0.01, + 0.14 + ], + [ + 0.07, + 0.74 + ], + [ + 0.02, + 0.18 + ], + [ + 0.01, + 0.06 + ], + [ + 0.02, + 0.23 + ], + [ + 0.01, + 0.16 + ], + [ + 0.02, + 0.19 + ], + [ + 0.03, + 0.31 + ], + [ + 0.03, + 0.34 + ], + [ + 0.03, + 0.46 + ], + [ + 0.01, + 0.07 + ], + [ + 0.01, + 0.07 + ], + [ + 0, + 0.07 + ], + [ + 0.04, + 0.66 + ], + [ + 0.05, + 0.71 + ], + [ + 0.02, + 0.29 + ], + [ + 0.04, + 0.82 + ], + [ + 0.04, + 0.62 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.2 + ], + [ + 0.02, + 0.31 + ], + [ + 0.02, + 0.45 + ], + [ + 0.03, + 0.68 + ], + [ + 0.01, + 0.42 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.24 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.2 + ], + [ + 0.01, + 0.18 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.08 + ], + [ + 0.01, + 0.5 + ], + [ + 0.01, + 0.2 + ], + [ + 0.01, + 0.35 + ], + [ + 0.01, + 0.1 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.26 + ], + [ + 0.01, + 0.29 + ], + [ + 0.02, + 1.68 + ] + ], + "v": [ + [ + 243.905, + 144.445 + ], + [ + -243.905, + 144.445 + ], + [ + 149.195, + -144.435 + ], + [ + 149.195, + -144.445 + ], + [ + 149.205, + -144.445 + ], + [ + 149.505, + -144.025 + ], + [ + 150.045, + -143.295 + ], + [ + 151.085, + -141.865 + ], + [ + 151.155, + -141.775 + ], + [ + 152.115, + -140.445 + ], + [ + 152.885, + -139.365 + ], + [ + 153.555, + -138.435 + ], + [ + 154.355, + -137.305 + ], + [ + 154.715, + -136.805 + ], + [ + 156.755, + -133.885 + ], + [ + 156.985, + -133.555 + ], + [ + 157.275, + -133.135 + ], + [ + 157.365, + -133.005 + ], + [ + 157.605, + -132.665 + ], + [ + 159.005, + -130.625 + ], + [ + 160.595, + -128.295 + ], + [ + 161.005, + -127.685 + ], + [ + 161.695, + -126.655 + ], + [ + 161.945, + -126.275 + ], + [ + 162.755, + -125.065 + ], + [ + 162.985, + -124.725 + ], + [ + 163.055, + -124.615 + ], + [ + 163.515, + -123.915 + ], + [ + 163.855, + -123.405 + ], + [ + 164.345, + -122.655 + ], + [ + 164.935, + -121.745 + ], + [ + 165.295, + -121.205 + ], + [ + 166.875, + -118.755 + ], + [ + 167.055, + -118.475 + ], + [ + 167.315, + -118.085 + ], + [ + 168.785, + -115.755 + ], + [ + 169.095, + -115.265 + ], + [ + 169.995, + -113.825 + ], + [ + 170.195, + -113.505 + ], + [ + 170.345, + -113.265 + ], + [ + 170.675, + -112.735 + ], + [ + 170.945, + -112.305 + ], + [ + 172.235, + -110.215 + ], + [ + 173.275, + -108.515 + ], + [ + 173.285, + -108.505 + ], + [ + 173.415, + -108.295 + ], + [ + 173.475, + -108.195 + ], + [ + 174.135, + -107.085 + ], + [ + 174.395, + -106.655 + ], + [ + 174.815, + -105.965 + ], + [ + 176.005, + -103.965 + ], + [ + 176.925, + -102.405 + ], + [ + 178.285, + -100.075 + ], + [ + 178.935, + -98.955 + ], + [ + 179.275, + -98.365 + ], + [ + 180.055, + -97.025 + ], + [ + 181.575, + -94.315 + ], + [ + 181.605, + -94.265 + ], + [ + 182.185, + -93.235 + ], + [ + 182.765, + -92.185 + ], + [ + 183.315, + -91.195 + ], + [ + 183.695, + -90.505 + ], + [ + 184.735, + -88.615 + ], + [ + 184.825, + -88.445 + ], + [ + 185.005, + -88.135 + ], + [ + 185.025, + -88.075 + ], + [ + 185.165, + -87.825 + ], + [ + 186.735, + -84.905 + ], + [ + 187.715, + -83.065 + ], + [ + 187.725, + -83.045 + ], + [ + 187.815, + -82.875 + ], + [ + 188.535, + -81.495 + ], + [ + 189.105, + -80.405 + ], + [ + 190.055, + -78.565 + ], + [ + 190.535, + -77.635 + ], + [ + 190.995, + -76.725 + ], + [ + 191.115, + -76.515 + ], + [ + 191.685, + -75.375 + ], + [ + 192.315, + -74.115 + ], + [ + 193.055, + -72.655 + ], + [ + 193.245, + -72.285 + ], + [ + 193.415, + -71.935 + ], + [ + 194.065, + -70.605 + ], + [ + 194.395, + -69.935 + ], + [ + 195.425, + -67.825 + ], + [ + 195.735, + -67.185 + ], + [ + 195.805, + -67.035 + ], + [ + 196.165, + -66.275 + ], + [ + 196.425, + -65.735 + ], + [ + 197.545, + -63.385 + ], + [ + 197.595, + -63.265 + ], + [ + 197.965, + -62.485 + ], + [ + 198.185, + -62.015 + ], + [ + 198.475, + -61.395 + ], + [ + 198.635, + -61.035 + ], + [ + 199.305, + -59.605 + ], + [ + 200.305, + -57.415 + ], + [ + 200.615, + -56.755 + ], + [ + 200.615, + -56.735 + ], + [ + 200.815, + -56.305 + ], + [ + 201.115, + -55.625 + ], + [ + 202.095, + -53.445 + ], + [ + 202.255, + -53.075 + ], + [ + 202.405, + -52.745 + ], + [ + 202.735, + -51.985 + ], + [ + 203.255, + -50.815 + ], + [ + 203.445, + -50.385 + ], + [ + 203.605, + -50.005 + ], + [ + 203.875, + -49.385 + ], + [ + 205.265, + -46.155 + ], + [ + 205.325, + -46.005 + ], + [ + 205.955, + -44.515 + ], + [ + 206.405, + -43.425 + ], + [ + 206.755, + -42.605 + ], + [ + 207.255, + -41.395 + ], + [ + 207.505, + -40.795 + ], + [ + 207.585, + -40.605 + ], + [ + 207.585, + -40.585 + ], + [ + 207.985, + -39.605 + ], + [ + 208.005, + -39.555 + ], + [ + 208.155, + -39.195 + ], + [ + 208.825, + -37.535 + ], + [ + 210.065, + -34.425 + ], + [ + 210.515, + -33.275 + ], + [ + 210.875, + -32.355 + ], + [ + 212.215, + -28.865 + ], + [ + 212.425, + -28.325 + ], + [ + 212.505, + -28.125 + ], + [ + 213.305, + -25.985 + ], + [ + 213.765, + -24.745 + ], + [ + 214.085, + -23.865 + ], + [ + 214.595, + -22.485 + ], + [ + 214.675, + -22.235 + ], + [ + 215.495, + -19.995 + ], + [ + 215.745, + -19.285 + ], + [ + 216.015, + -18.515 + ], + [ + 216.055, + -18.395 + ], + [ + 216.325, + -17.655 + ], + [ + 216.565, + -16.965 + ], + [ + 216.735, + -16.465 + ], + [ + 217.085, + -15.465 + ], + [ + 217.705, + -13.675 + ], + [ + 217.975, + -12.885 + ], + [ + 218.275, + -12.005 + ], + [ + 218.305, + -11.915 + ], + [ + 218.535, + -11.225 + ], + [ + 218.905, + -10.135 + ], + [ + 219.775, + -7.485 + ], + [ + 220.155, + -6.325 + ], + [ + 220.265, + -5.985 + ], + [ + 220.375, + -5.645 + ], + [ + 221.545, + -1.995 + ], + [ + 221.715, + -1.435 + ], + [ + 222.065, + -0.325 + ], + [ + 222.455, + 0.955 + ], + [ + 223.155, + 3.245 + ], + [ + 223.395, + 4.045 + ], + [ + 223.755, + 5.245 + ], + [ + 224.075, + 6.335 + ], + [ + 224.395, + 7.435 + ], + [ + 224.705, + 8.475 + ], + [ + 224.865, + 9.055 + ], + [ + 225.285, + 10.515 + ], + [ + 225.495, + 11.255 + ], + [ + 225.935, + 12.815 + ], + [ + 226.865, + 16.185 + ], + [ + 227.165, + 17.295 + ], + [ + 227.225, + 17.525 + ], + [ + 227.285, + 17.755 + ], + [ + 227.555, + 18.755 + ], + [ + 228.305, + 21.605 + ], + [ + 228.455, + 22.185 + ], + [ + 228.955, + 24.155 + ], + [ + 229.635, + 26.855 + ], + [ + 229.805, + 27.575 + ], + [ + 230.045, + 28.535 + ], + [ + 230.415, + 30.065 + ], + [ + 230.775, + 31.565 + ], + [ + 230.985, + 32.465 + ], + [ + 231.045, + 32.725 + ], + [ + 231.205, + 33.395 + ], + [ + 231.275, + 33.715 + ], + [ + 231.585, + 35.035 + ], + [ + 231.605, + 35.145 + ], + [ + 231.705, + 35.565 + ], + [ + 231.775, + 35.895 + ], + [ + 231.985, + 36.795 + ], + [ + 232.235, + 37.955 + ], + [ + 232.685, + 39.945 + ], + [ + 232.835, + 40.665 + ], + [ + 232.925, + 41.055 + ], + [ + 233.595, + 44.225 + ], + [ + 233.785, + 45.125 + ], + [ + 233.875, + 45.555 + ], + [ + 233.995, + 46.135 + ], + [ + 234.235, + 47.315 + ], + [ + 234.275, + 47.555 + ], + [ + 234.285, + 47.585 + ], + [ + 234.825, + 50.285 + ], + [ + 234.845, + 50.415 + ], + [ + 234.915, + 50.775 + ], + [ + 235.025, + 51.375 + ], + [ + 235.475, + 53.705 + ], + [ + 235.795, + 55.415 + ], + [ + 236.045, + 56.795 + ], + [ + 236.075, + 56.935 + ], + [ + 236.425, + 58.905 + ], + [ + 236.555, + 59.605 + ], + [ + 236.575, + 59.745 + ], + [ + 236.745, + 60.725 + ], + [ + 236.775, + 60.915 + ], + [ + 237.005, + 62.275 + ], + [ + 237.415, + 64.715 + ], + [ + 237.475, + 65.065 + ], + [ + 238.105, + 69.035 + ], + [ + 238.165, + 69.385 + ], + [ + 238.245, + 69.915 + ], + [ + 238.285, + 70.155 + ], + [ + 238.305, + 70.315 + ], + [ + 238.395, + 70.905 + ], + [ + 238.415, + 71.035 + ], + [ + 238.965, + 74.785 + ], + [ + 238.985, + 74.945 + ], + [ + 239.285, + 77.065 + ], + [ + 239.375, + 77.695 + ], + [ + 239.485, + 78.515 + ], + [ + 239.515, + 78.715 + ], + [ + 239.655, + 79.745 + ], + [ + 239.745, + 80.465 + ], + [ + 239.875, + 81.475 + ], + [ + 239.925, + 81.885 + ], + [ + 240.175, + 83.885 + ], + [ + 240.225, + 84.285 + ], + [ + 240.315, + 85.005 + ], + [ + 240.345, + 85.275 + ], + [ + 240.575, + 87.185 + ], + [ + 240.725, + 88.435 + ], + [ + 240.765, + 88.795 + ], + [ + 240.805, + 89.155 + ], + [ + 240.845, + 89.485 + ], + [ + 241.375, + 94.405 + ], + [ + 241.425, + 94.955 + ], + [ + 241.505, + 95.745 + ], + [ + 241.755, + 98.365 + ], + [ + 241.845, + 99.355 + ], + [ + 241.925, + 100.235 + ], + [ + 242.005, + 101.155 + ], + [ + 242.275, + 104.305 + ], + [ + 242.345, + 105.195 + ], + [ + 242.375, + 105.625 + ], + [ + 242.545, + 107.845 + ], + [ + 242.585, + 108.385 + ], + [ + 242.605, + 108.575 + ], + [ + 242.655, + 109.275 + ], + [ + 242.685, + 109.735 + ], + [ + 242.725, + 110.295 + ], + [ + 242.785, + 111.235 + ], + [ + 242.855, + 112.245 + ], + [ + 242.945, + 113.625 + ], + [ + 242.955, + 113.845 + ], + [ + 242.975, + 114.055 + ], + [ + 242.985, + 114.265 + ], + [ + 243.095, + 116.255 + ], + [ + 243.215, + 118.385 + ], + [ + 243.265, + 119.265 + ], + [ + 243.375, + 121.745 + ], + [ + 243.465, + 123.615 + ], + [ + 243.495, + 124.275 + ], + [ + 243.515, + 124.895 + ], + [ + 243.555, + 125.815 + ], + [ + 243.595, + 127.165 + ], + [ + 243.675, + 129.195 + ], + [ + 243.705, + 130.445 + ], + [ + 243.705, + 130.495 + ], + [ + 243.725, + 131.205 + ], + [ + 243.745, + 131.855 + ], + [ + 243.755, + 132.445 + ], + [ + 243.775, + 132.995 + ], + [ + 243.775, + 133.355 + ], + [ + 243.785, + 133.605 + ], + [ + 243.815, + 135.105 + ], + [ + 243.825, + 135.705 + ], + [ + 243.835, + 136.765 + ], + [ + 243.845, + 137.065 + ], + [ + 243.855, + 137.735 + ], + [ + 243.865, + 138.515 + ], + [ + 243.875, + 139.385 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.094117654539, + 0.745098039216, + 0.447058853449, + 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": [ + 732.715, + 344.365 + ], + "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, + -1.52 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.47, + -0.34 + ], + [ + -0.43, + -0.31 + ], + [ + -0.38, + -0.28 + ], + [ + -0.63, + -0.47 + ], + [ + -0.34, + -0.26 + ], + [ + -0.22, + -0.16 + ], + [ + -1.31, + -1 + ], + [ + -0.26, + -0.21 + ], + [ + -0.3, + -0.23 + ], + [ + -0.39, + -0.3 + ], + [ + -2.09, + -1.69 + ], + [ + -0.67, + -0.54 + ], + [ + -0.78, + -0.64 + ], + [ + -0.3, + -0.25 + ], + [ + -0.13, + -0.11 + ], + [ + -0.6, + -0.5 + ], + [ + -0.76, + -0.65 + ], + [ + -0.15, + -0.12 + ], + [ + -0.9, + -0.77 + ], + [ + -0.44, + -0.39 + ], + [ + -0.46, + -0.4 + ], + [ + -0.88, + -0.78 + ], + [ + -0.71, + -0.63 + ], + [ + -0.67, + -0.61 + ], + [ + -0.19, + -0.17 + ], + [ + -0.36, + -0.33 + ], + [ + -0.69, + -0.64 + ], + [ + -0.37, + -0.34 + ], + [ + -0.02, + -0.02 + ], + [ + -1.08, + -1.03 + ], + [ + -0.65, + -0.63 + ], + [ + -0.44, + -0.42 + ], + [ + -0.44, + -0.44 + ], + [ + -0.19, + -0.18 + ], + [ + -0.21, + -0.22 + ], + [ + -0.84, + -0.84 + ], + [ + -0.25, + -0.25 + ], + [ + -0.08, + -0.08 + ], + [ + -1.33, + -1.36 + ], + [ + -0.03, + -0.03 + ], + [ + -0.03, + -0.02 + ], + [ + -0.76, + -0.79 + ], + [ + -0.36, + -0.38 + ], + [ + -0.17, + -0.18 + ], + [ + -0.28, + -0.29 + ], + [ + -0.72, + -0.77 + ], + [ + -0.4, + -0.43 + ], + [ + -0.69, + -0.76 + ], + [ + -0.58, + -0.64 + ], + [ + -0.01, + -0.01 + ], + [ + -0.76, + -0.85 + ], + [ + -0.36, + -0.4 + ], + [ + -0.76, + -0.87 + ], + [ + -0.68, + -0.79 + ], + [ + -0.54, + -0.64 + ], + [ + -0.72, + -0.85 + ], + [ + -0.04, + -0.05 + ], + [ + -0.89, + -1.09 + ], + [ + -0.6, + -0.74 + ], + [ + -0.75, + -0.93 + ], + [ + -0.18, + -0.23 + ], + [ + -0.12, + -0.15 + ], + [ + 0, + 0 + ], + [ + -0.65, + -0.83 + ], + [ + -0.08, + -0.1 + ], + [ + -0.94, + -1.21 + ], + [ + -0.5, + -0.67 + ], + [ + -0.53, + -0.71 + ], + [ + -0.58, + -0.8 + ], + [ + -0.45, + -0.62 + ], + [ + 0, + 0 + ], + [ + -0.09, + -0.14 + ], + [ + -0.18, + -0.24 + ], + [ + -0.34, + -0.48 + ], + [ + -0.02, + -0.03 + ], + [ + -0.32, + -0.45 + ], + [ + -0.25, + -0.36 + ], + [ + -0.22, + -0.31 + ], + [ + -0.26, + -0.38 + ], + [ + -0.12, + -0.17 + ], + [ + -0.67, + -0.98 + ], + [ + -0.08, + -0.11 + ], + [ + -0.09, + -0.14 + ], + [ + -0.03, + -0.05 + ], + [ + -0.08, + -0.12 + ], + [ + -0.46, + -0.68 + ], + [ + -0.53, + -0.78 + ], + [ + -0.14, + -0.2 + ], + [ + -0.23, + -0.35 + ], + [ + -0.08, + -0.13 + ], + [ + -0.26, + -0.41 + ], + [ + -0.08, + -0.12 + ], + [ + -0.02, + -0.04 + ], + [ + -0.15, + -0.24 + ], + [ + -0.11, + -0.17 + ], + [ + -0.17, + -0.25 + ], + [ + -0.19, + -0.31 + ], + [ + -0.64, + -1 + ], + [ + -0.06, + -0.1 + ], + [ + -0.07, + -0.12 + ], + [ + -0.5, + -0.79 + ], + [ + -0.1, + -0.17 + ], + [ + -0.3, + -0.48 + ], + [ + -0.06, + -0.11 + ], + [ + -0.05, + -0.08 + ], + [ + -0.11, + -0.18 + ], + [ + -0.08, + -0.15 + ], + [ + -0.43, + -0.7 + ], + [ + -0.1, + -0.17 + ], + [ + -0.17, + -0.29 + ], + [ + -0.35, + -0.58 + ], + [ + -0.08, + -0.14 + ], + [ + -0.53, + -0.9 + ], + [ + -0.3, + -0.52 + ], + [ + -0.45, + -0.78 + ], + [ + -0.22, + -0.38 + ], + [ + -0.11, + -0.2 + ], + [ + -0.15, + -0.27 + ], + [ + -0.61, + -1.09 + ], + [ + -0.01, + -0.02 + ], + [ + -0.19, + -0.35 + ], + [ + -0.19, + -0.35 + ], + [ + -0.18, + -0.33 + ], + [ + -0.12, + -0.23 + ], + [ + -0.35, + -0.63 + ], + [ + -0.03, + -0.06 + ], + [ + -0.06, + -0.12 + ], + [ + -0.05, + -0.08 + ], + [ + -0.52, + -0.98 + ], + [ + -0.2, + -0.38 + ], + [ + -0.13, + -0.23 + ], + [ + 0, + 0 + ], + [ + -0.04, + -0.06 + ], + [ + -0.24, + -0.46 + ], + [ + -0.18, + -0.36 + ], + [ + -0.32, + -0.62 + ], + [ + -0.16, + -0.31 + ], + [ + -0.15, + -0.3 + ], + [ + -0.23, + -0.45 + ], + [ + -0.21, + -0.42 + ], + [ + -0.58, + -1.18 + ], + [ + -0.11, + -0.22 + ], + [ + -0.34, + -0.7 + ], + [ + -0.13, + -0.26 + ], + [ + -0.12, + -0.26 + ], + [ + -0.08, + -0.18 + ], + [ + -0.37, + -0.78 + ], + [ + -0.01, + -0.04 + ], + [ + -0.12, + -0.26 + ], + [ + -0.07, + -0.16 + ], + [ + -0.09, + -0.2 + ], + [ + -0.05, + -0.12 + ], + [ + -0.21, + -0.48 + ], + [ + -0.33, + -0.73 + ], + [ + -0.1, + -0.23 + ], + [ + -0.07, + -0.14 + ], + [ + -0.1, + -0.23 + ], + [ + -0.17, + -0.38 + ], + [ + -0.15, + -0.35 + ], + [ + -0.05, + -0.12 + ], + [ + -0.05, + -0.11 + ], + [ + -0.1, + -0.26 + ], + [ + -0.17, + -0.39 + ], + [ + -0.07, + -0.14 + ], + [ + -0.05, + -0.13 + ], + [ + -0.09, + -0.21 + ], + [ + -0.46, + -1.08 + ], + [ + -0.02, + -0.05 + ], + [ + -0.21, + -0.5 + ], + [ + -0.1, + -0.23 + ], + [ + -0.17, + -0.41 + ], + [ + -0.16, + -0.41 + ], + [ + -0.08, + -0.2 + ], + [ + -0.03, + -0.06 + ], + [ + 0, + 0 + ], + [ + -0.09, + -0.22 + ], + [ + -0.04, + -0.11 + ], + [ + 0, + -0.02 + ], + [ + -0.05, + -0.12 + ], + [ + -0.22, + -0.56 + ], + [ + -0.41, + -1.04 + ], + [ + -0.15, + -0.38 + ], + [ + -0.11, + -0.31 + ], + [ + -0.42, + -1.1 + ], + [ + -0.09, + -0.25 + ], + [ + -0.03, + -0.07 + ], + [ + -0.27, + -0.71 + ], + [ + -0.15, + -0.42 + ], + [ + -0.1, + -0.29 + ], + [ + -0.17, + -0.46 + ], + [ + -0.02, + -0.08 + ], + [ + -0.27, + -0.75 + ], + [ + -0.08, + -0.24 + ], + [ + -0.08, + -0.26 + ], + [ + -0.06, + -0.16 + ], + [ + -0.05, + -0.13 + ], + [ + -0.08, + -0.23 + ], + [ + -0.05, + -0.17 + ], + [ + -0.11, + -0.34 + ], + [ + -0.2, + -0.6 + ], + [ + -0.09, + -0.26 + ], + [ + -0.1, + -0.29 + ], + [ + -0.01, + -0.03 + ], + [ + -0.07, + -0.23 + ], + [ + -0.12, + -0.37 + ], + [ + -0.18, + -0.55 + ], + [ + -0.1, + -0.33 + ], + [ + -0.01, + -0.02 + ], + [ + -0.09, + -0.29 + ], + [ + -0.02, + -0.08 + ], + [ + -0.03, + -0.11 + ], + [ + -0.26, + -0.79 + ], + [ + -0.17, + -0.54 + ], + [ + -0.06, + -0.19 + ], + [ + -0.12, + -0.37 + ], + [ + -0.13, + -0.43 + ], + [ + -0.06, + -0.18 + ], + [ + -0.18, + -0.59 + ], + [ + -0.08, + -0.27 + ], + [ + -0.12, + -0.4 + ], + [ + -0.1, + -0.37 + ], + [ + -0.1, + -0.37 + ], + [ + -0.1, + -0.35 + ], + [ + -0.05, + -0.19 + ], + [ + -0.14, + -0.49 + ], + [ + -0.07, + -0.25 + ], + [ + -0.14, + -0.53 + ], + [ + -0.3, + -1.13 + ], + [ + -0.1, + -0.37 + ], + [ + -0.02, + -0.08 + ], + [ + -0.01, + -0.08 + ], + [ + -0.09, + -0.34 + ], + [ + -0.25, + -0.95 + ], + [ + -0.05, + -0.2 + ], + [ + -0.16, + -0.66 + ], + [ + -0.22, + -0.91 + ], + [ + -0.12, + -0.48 + ], + [ + -0.01, + -0.08 + ], + [ + -0.16, + -0.66 + ], + [ + -0.08, + -0.35 + ], + [ + -0.06, + -0.3 + ], + [ + -0.01, + -0.09 + ], + [ + -0.05, + -0.23 + ], + [ + -0.02, + -0.11 + ], + [ + -0.1, + -0.45 + ], + [ + 0, + -0.04 + ], + [ + -0.03, + -0.14 + ], + [ + -0.02, + -0.12 + ], + [ + -0.07, + -0.31 + ], + [ + -0.23, + -1.05 + ], + [ + -0.08, + -0.37 + ], + [ + -0.22, + -1.06 + ], + [ + -0.06, + -0.31 + ], + [ + -0.11, + -0.58 + ], + [ + -0.01, + -0.09 + ], + [ + -0.01, + -0.06 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.01 + ], + [ + -0.18, + -0.9 + ], + [ + 0, + -0.04 + ], + [ + -0.02, + -0.12 + ], + [ + -0.08, + -0.45 + ], + [ + -0.09, + -0.51 + ], + [ + -0.1, + -0.6 + ], + [ + -0.09, + -0.51 + ], + [ + -0.06, + -0.35 + ], + [ + -0.01, + -0.04 + ], + [ + -0.02, + -0.13 + ], + [ + -0.07, + -0.38 + ], + [ + -0.01, + -0.05 + ], + [ + -0.05, + -0.33 + ], + [ + -0.01, + -0.07 + ], + [ + -0.13, + -0.79 + ], + [ + -0.05, + -0.27 + ], + [ + -0.03, + -0.2 + ], + [ + -0.02, + -0.12 + ], + [ + -0.14, + -0.86 + ], + [ + -0.09, + -0.58 + ], + [ + -0.02, + -0.17 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.05 + ], + [ + -0.03, + -0.2 + ], + [ + 0, + -0.04 + ], + [ + -0.18, + -1.25 + ], + [ + -0.04, + -0.24 + ], + [ + -0.04, + -0.24 + ], + [ + -0.06, + -0.49 + ], + [ + -0.03, + -0.27 + ], + [ + -0.01, + -0.06 + ], + [ + -0.05, + -0.34 + ], + [ + -0.03, + -0.24 + ], + [ + -0.04, + -0.33 + ], + [ + -0.01, + -0.14 + ], + [ + -0.08, + -0.67 + ], + [ + -0.01, + -0.13 + ], + [ + -0.02, + -0.24 + ], + [ + 0, + -0.09 + ], + [ + -0.1, + -0.87 + ], + [ + -0.02, + -0.19 + ], + [ + -0.01, + -0.12 + ], + [ + -0.02, + -0.1 + ], + [ + 0, + 0 + ], + [ + -0.01, + -0.11 + ], + [ + -0.17, + -1.64 + ], + [ + 0, + 0 + ], + [ + -0.02, + -0.16 + ], + [ + -0.03, + -0.26 + ], + [ + -0.08, + -0.87 + ], + [ + -0.02, + -0.22 + ], + [ + -0.03, + -0.39 + ], + [ + -0.02, + -0.22 + ], + [ + -0.04, + -0.43 + ], + [ + -0.06, + -0.71 + ], + [ + -0.02, + -0.3 + ], + [ + -0.04, + -0.44 + ], + [ + -0.02, + -0.44 + ], + [ + -0.01, + -0.18 + ], + [ + 0, + -0.07 + ], + [ + -0.01, + -0.23 + ], + [ + -0.01, + -0.15 + ], + [ + -0.01, + -0.19 + ], + [ + -0.01, + -0.31 + ], + [ + -0.02, + -0.34 + ], + [ + -0.02, + -0.29 + ], + [ + -0.01, + -0.17 + ], + [ + -0.01, + -0.14 + ], + [ + 0, + -0.07 + ], + [ + -0.05, + -0.98 + ], + [ + -0.01, + -0.22 + ], + [ + -0.02, + -0.32 + ], + [ + -0.01, + -0.16 + ], + [ + -0.01, + -0.03 + ], + [ + -0.01, + -0.2 + ], + [ + -0.01, + -0.1 + ], + [ + -0.04, + -1.13 + ], + [ + -0.01, + -0.22 + ], + [ + -0.02, + -0.51 + ], + [ + -0.04, + -1.13 + ], + [ + -0.01, + -0.42 + ], + [ + 0, + 0 + ], + [ + 0, + -0.24 + ], + [ + 0, + -0.22 + ], + [ + -0.01, + -0.38 + ], + [ + 0, + -0.2 + ], + [ + 0, + -0.42 + ], + [ + 0, + -0.08 + ], + [ + 0, + -0.2 + ], + [ + 0, + -0.37 + ], + [ + 0, + 0 + ], + [ + 0, + -0.23 + ], + [ + 0, + -0.27 + ], + [ + 0, + -0.29 + ], + [ + 0, + -0.18 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0.47, + 0.34 + ], + [ + 0.43, + 0.31 + ], + [ + 0.38, + 0.27 + ], + [ + 0.64, + 0.47 + ], + [ + 0.34, + 0.25 + ], + [ + 0.22, + 0.15 + ], + [ + 1.33, + 0.99 + ], + [ + 0.26, + 0.2 + ], + [ + 0.31, + 0.24 + ], + [ + 0.39, + 0.3 + ], + [ + 2.13, + 1.65 + ], + [ + 0.68, + 0.54 + ], + [ + 0.79, + 0.64 + ], + [ + 0.31, + 0.25 + ], + [ + 0.13, + 0.12 + ], + [ + 0.61, + 0.5 + ], + [ + 0.76, + 0.63 + ], + [ + 0.14, + 0.12 + ], + [ + 0.9, + 0.77 + ], + [ + 0.43, + 0.37 + ], + [ + 0.46, + 0.39 + ], + [ + 0.89, + 0.78 + ], + [ + 0.72, + 0.64 + ], + [ + 0.68, + 0.61 + ], + [ + 0.19, + 0.17 + ], + [ + 0.36, + 0.32 + ], + [ + 0.7, + 0.64 + ], + [ + 0.37, + 0.35 + ], + [ + 0.02, + 0.02 + ], + [ + 1.09, + 1.02 + ], + [ + 0.66, + 0.62 + ], + [ + 0.44, + 0.42 + ], + [ + 0.45, + 0.43 + ], + [ + 0.19, + 0.17 + ], + [ + 0.22, + 0.21 + ], + [ + 0.85, + 0.82 + ], + [ + 0.25, + 0.24 + ], + [ + 0.08, + 0.08 + ], + [ + 1.35, + 1.34 + ], + [ + 0.03, + 0.04 + ], + [ + 0.03, + 0.03 + ], + [ + 0.76, + 0.79 + ], + [ + 0.37, + 0.38 + ], + [ + 0.17, + 0.18 + ], + [ + 0.28, + 0.29 + ], + [ + 0.73, + 0.77 + ], + [ + 0.41, + 0.42 + ], + [ + 0.7, + 0.75 + ], + [ + 0.59, + 0.64 + ], + [ + 0.01, + 0.01 + ], + [ + 0.78, + 0.85 + ], + [ + 0.36, + 0.4 + ], + [ + 0.77, + 0.87 + ], + [ + 0.69, + 0.79 + ], + [ + 0.55, + 0.63 + ], + [ + 0.73, + 0.85 + ], + [ + 0.04, + 0.05 + ], + [ + 0.92, + 1.08 + ], + [ + 0.62, + 0.73 + ], + [ + 0.76, + 0.91 + ], + [ + 0.18, + 0.22 + ], + [ + 0.12, + 0.15 + ], + [ + 0, + 0 + ], + [ + 0.65, + 0.82 + ], + [ + 0.08, + 0.1 + ], + [ + 0.94, + 1.21 + ], + [ + 0.51, + 0.66 + ], + [ + 0.54, + 0.71 + ], + [ + 0.6, + 0.79 + ], + [ + 0.46, + 0.61 + ], + [ + 0, + 0 + ], + [ + 0.1, + 0.14 + ], + [ + 0.19, + 0.24 + ], + [ + 0.35, + 0.48 + ], + [ + 0.03, + 0.03 + ], + [ + 0.32, + 0.44 + ], + [ + 0.26, + 0.36 + ], + [ + 0.23, + 0.31 + ], + [ + 0.27, + 0.38 + ], + [ + 0.12, + 0.16 + ], + [ + 0.69, + 0.97 + ], + [ + 0.08, + 0.11 + ], + [ + 0.1, + 0.14 + ], + [ + 0.03, + 0.04 + ], + [ + 0.08, + 0.11 + ], + [ + 0.47, + 0.67 + ], + [ + 0.54, + 0.77 + ], + [ + 0.14, + 0.2 + ], + [ + 0.23, + 0.34 + ], + [ + 0.08, + 0.12 + ], + [ + 0.28, + 0.4 + ], + [ + 0.08, + 0.11 + ], + [ + 0.03, + 0.04 + ], + [ + 0.15, + 0.23 + ], + [ + 0.11, + 0.17 + ], + [ + 0.16, + 0.25 + ], + [ + 0.2, + 0.3 + ], + [ + 0.65, + 0.99 + ], + [ + 0.06, + 0.09 + ], + [ + 0.08, + 0.12 + ], + [ + 0.51, + 0.79 + ], + [ + 0.11, + 0.16 + ], + [ + 0.3, + 0.48 + ], + [ + 0.07, + 0.1 + ], + [ + 0.05, + 0.08 + ], + [ + 0.11, + 0.18 + ], + [ + 0.1, + 0.14 + ], + [ + 0.43, + 0.7 + ], + [ + 0.1, + 0.17 + ], + [ + 0.18, + 0.29 + ], + [ + 0.36, + 0.58 + ], + [ + 0.09, + 0.14 + ], + [ + 0.54, + 0.89 + ], + [ + 0.31, + 0.52 + ], + [ + 0.46, + 0.77 + ], + [ + 0.22, + 0.37 + ], + [ + 0.11, + 0.19 + ], + [ + 0.15, + 0.26 + ], + [ + 0.62, + 1.08 + ], + [ + 0.01, + 0.02 + ], + [ + 0.19, + 0.34 + ], + [ + 0.19, + 0.35 + ], + [ + 0.19, + 0.33 + ], + [ + 0.13, + 0.23 + ], + [ + 0.35, + 0.63 + ], + [ + 0.03, + 0.06 + ], + [ + 0.07, + 0.12 + ], + [ + 0.05, + 0.08 + ], + [ + 0.53, + 0.97 + ], + [ + 0.2, + 0.38 + ], + [ + 0.13, + 0.24 + ], + [ + 0, + 0.01 + ], + [ + 0.02, + 0.05 + ], + [ + 0.24, + 0.46 + ], + [ + 0.2, + 0.36 + ], + [ + 0.32, + 0.61 + ], + [ + 0.16, + 0.31 + ], + [ + 0.16, + 0.31 + ], + [ + 0.24, + 0.45 + ], + [ + 0.21, + 0.42 + ], + [ + 0.59, + 1.16 + ], + [ + 0.11, + 0.22 + ], + [ + 0.35, + 0.7 + ], + [ + 0.12, + 0.26 + ], + [ + 0.12, + 0.25 + ], + [ + 0.09, + 0.18 + ], + [ + 0.38, + 0.78 + ], + [ + 0.02, + 0.04 + ], + [ + 0.13, + 0.26 + ], + [ + 0.08, + 0.16 + ], + [ + 0.1, + 0.21 + ], + [ + 0.06, + 0.12 + ], + [ + 0.23, + 0.48 + ], + [ + 0.34, + 0.73 + ], + [ + 0.11, + 0.23 + ], + [ + 0.07, + 0.14 + ], + [ + 0.1, + 0.22 + ], + [ + 0.17, + 0.38 + ], + [ + 0.16, + 0.35 + ], + [ + 0.06, + 0.12 + ], + [ + 0.05, + 0.11 + ], + [ + 0.11, + 0.25 + ], + [ + 0.18, + 0.39 + ], + [ + 0.06, + 0.14 + ], + [ + 0.05, + 0.12 + ], + [ + 0.09, + 0.2 + ], + [ + 0.47, + 1.07 + ], + [ + 0.02, + 0.05 + ], + [ + 0.21, + 0.5 + ], + [ + 0.1, + 0.23 + ], + [ + 0.17, + 0.41 + ], + [ + 0.17, + 0.4 + ], + [ + 0.09, + 0.2 + ], + [ + 0.02, + 0.06 + ], + [ + 0, + 0 + ], + [ + 0.09, + 0.21 + ], + [ + 0.04, + 0.11 + ], + [ + 0.01, + 0.02 + ], + [ + 0.05, + 0.12 + ], + [ + 0.23, + 0.55 + ], + [ + 0.42, + 1.03 + ], + [ + 0.15, + 0.38 + ], + [ + 0.13, + 0.31 + ], + [ + 0.43, + 1.09 + ], + [ + 0.09, + 0.25 + ], + [ + 0.03, + 0.06 + ], + [ + 0.27, + 0.71 + ], + [ + 0.15, + 0.41 + ], + [ + 0.11, + 0.29 + ], + [ + 0.17, + 0.46 + ], + [ + 0.03, + 0.08 + ], + [ + 0.28, + 0.74 + ], + [ + 0.08, + 0.23 + ], + [ + 0.09, + 0.25 + ], + [ + 0.06, + 0.16 + ], + [ + 0.04, + 0.12 + ], + [ + 0.08, + 0.23 + ], + [ + 0.06, + 0.16 + ], + [ + 0.12, + 0.33 + ], + [ + 0.21, + 0.59 + ], + [ + 0.09, + 0.26 + ], + [ + 0.1, + 0.29 + ], + [ + 0.01, + 0.03 + ], + [ + 0.08, + 0.23 + ], + [ + 0.13, + 0.36 + ], + [ + 0.18, + 0.55 + ], + [ + 0.11, + 0.33 + ], + [ + 0.01, + 0.02 + ], + [ + 0.09, + 0.29 + ], + [ + 0.02, + 0.08 + ], + [ + 0.04, + 0.11 + ], + [ + 0.26, + 0.79 + ], + [ + 0.17, + 0.54 + ], + [ + 0.05, + 0.19 + ], + [ + 0.12, + 0.37 + ], + [ + 0.13, + 0.43 + ], + [ + 0.06, + 0.17 + ], + [ + 0.18, + 0.58 + ], + [ + 0.08, + 0.26 + ], + [ + 0.12, + 0.4 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.34 + ], + [ + 0.05, + 0.19 + ], + [ + 0.15, + 0.49 + ], + [ + 0.07, + 0.24 + ], + [ + 0.15, + 0.51 + ], + [ + 0.32, + 1.12 + ], + [ + 0.1, + 0.37 + ], + [ + 0.02, + 0.07 + ], + [ + 0.02, + 0.07 + ], + [ + 0.1, + 0.33 + ], + [ + 0.25, + 0.94 + ], + [ + 0.05, + 0.19 + ], + [ + 0.17, + 0.65 + ], + [ + 0.23, + 0.89 + ], + [ + 0.12, + 0.48 + ], + [ + 0.02, + 0.07 + ], + [ + 0.17, + 0.66 + ], + [ + 0.08, + 0.35 + ], + [ + 0.08, + 0.3 + ], + [ + 0.03, + 0.09 + ], + [ + 0.06, + 0.22 + ], + [ + 0.03, + 0.11 + ], + [ + 0.11, + 0.43 + ], + [ + 0.01, + 0.03 + ], + [ + 0.04, + 0.14 + ], + [ + 0.03, + 0.1 + ], + [ + 0.08, + 0.29 + ], + [ + 0.24, + 1.05 + ], + [ + 0.08, + 0.37 + ], + [ + 0.23, + 1.05 + ], + [ + 0.07, + 0.29 + ], + [ + 0.12, + 0.58 + ], + [ + 0.03, + 0.09 + ], + [ + 0.02, + 0.06 + ], + [ + 0.02, + 0.08 + ], + [ + 0.01, + 0.01 + ], + [ + 0.19, + 0.9 + ], + [ + 0.01, + 0.05 + ], + [ + 0.03, + 0.12 + ], + [ + 0.09, + 0.44 + ], + [ + 0.1, + 0.5 + ], + [ + 0.11, + 0.59 + ], + [ + 0.1, + 0.5 + ], + [ + 0.07, + 0.35 + ], + [ + 0.01, + 0.04 + ], + [ + 0.02, + 0.12 + ], + [ + 0.07, + 0.38 + ], + [ + 0.01, + 0.04 + ], + [ + 0.06, + 0.32 + ], + [ + 0.01, + 0.06 + ], + [ + 0.14, + 0.79 + ], + [ + 0.05, + 0.27 + ], + [ + 0.03, + 0.2 + ], + [ + 0.03, + 0.11 + ], + [ + 0.14, + 0.85 + ], + [ + 0.09, + 0.58 + ], + [ + 0.03, + 0.18 + ], + [ + 0.01, + 0.08 + ], + [ + 0.01, + 0.06 + ], + [ + 0.03, + 0.2 + ], + [ + 0.01, + 0.04 + ], + [ + 0.19, + 1.25 + ], + [ + 0.04, + 0.25 + ], + [ + 0.03, + 0.24 + ], + [ + 0.07, + 0.49 + ], + [ + 0.04, + 0.27 + ], + [ + 0.01, + 0.07 + ], + [ + 0.05, + 0.35 + ], + [ + 0.03, + 0.24 + ], + [ + 0.05, + 0.34 + ], + [ + 0.02, + 0.14 + ], + [ + 0.09, + 0.67 + ], + [ + 0.02, + 0.13 + ], + [ + 0.04, + 0.24 + ], + [ + 0.02, + 0.09 + ], + [ + 0.11, + 0.87 + ], + [ + 0.02, + 0.19 + ], + [ + 0.01, + 0.12 + ], + [ + 0.01, + 0.1 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.11 + ], + [ + 0.18, + 1.63 + ], + [ + 0, + 0 + ], + [ + 0.02, + 0.16 + ], + [ + 0.03, + 0.26 + ], + [ + 0.09, + 0.88 + ], + [ + 0.02, + 0.23 + ], + [ + 0.03, + 0.4 + ], + [ + 0.02, + 0.21 + ], + [ + 0.04, + 0.43 + ], + [ + 0.06, + 0.71 + ], + [ + 0.03, + 0.29 + ], + [ + 0.04, + 0.45 + ], + [ + 0.03, + 0.43 + ], + [ + 0.02, + 0.18 + ], + [ + 0.01, + 0.06 + ], + [ + 0.02, + 0.23 + ], + [ + 0.01, + 0.16 + ], + [ + 0.02, + 0.19 + ], + [ + 0.03, + 0.31 + ], + [ + 0.03, + 0.34 + ], + [ + 0.02, + 0.29 + ], + [ + 0.01, + 0.17 + ], + [ + 0.01, + 0.15 + ], + [ + 0, + 0.07 + ], + [ + 0.06, + 0.98 + ], + [ + 0.01, + 0.21 + ], + [ + 0.01, + 0.32 + ], + [ + 0.01, + 0.15 + ], + [ + 0, + 0.02 + ], + [ + 0.01, + 0.19 + ], + [ + 0, + 0.09 + ], + [ + 0.05, + 1.13 + ], + [ + 0.01, + 0.22 + ], + [ + 0.02, + 0.51 + ], + [ + 0.04, + 1.13 + ], + [ + 0.01, + 0.42 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.24 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.38 + ], + [ + 0, + 0.2 + ], + [ + 0.01, + 0.42 + ], + [ + 0.01, + 0.08 + ], + [ + 0.01, + 0.2 + ], + [ + 0.01, + 0.37 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.25 + ], + [ + 0.01, + 0.29 + ], + [ + 0.01, + 0.17 + ], + [ + 0.01, + 1.51 + ] + ], + "v": [ + [ + 243.905, + 198.17 + ], + [ + -243.905, + 198.17 + ], + [ + 40.535, + -198.17 + ], + [ + 41.945, + -197.15 + ], + [ + 43.245, + -196.21 + ], + [ + 44.375, + -195.38 + ], + [ + 46.275, + -193.98 + ], + [ + 47.295, + -193.21 + ], + [ + 47.955, + -192.73 + ], + [ + 51.905, + -189.75 + ], + [ + 52.695, + -189.14 + ], + [ + 53.605, + -188.44 + ], + [ + 54.765, + -187.54 + ], + [ + 61.105, + -182.54 + ], + [ + 63.115, + -180.92 + ], + [ + 65.475, + -179 + ], + [ + 66.385, + -178.25 + ], + [ + 66.785, + -177.91 + ], + [ + 68.595, + -176.41 + ], + [ + 70.875, + -174.49 + ], + [ + 71.315, + -174.13 + ], + [ + 74.015, + -171.82 + ], + [ + 75.325, + -170.68 + ], + [ + 76.695, + -169.5 + ], + [ + 79.355, + -167.16 + ], + [ + 81.495, + -165.26 + ], + [ + 83.515, + -163.43 + ], + [ + 84.085, + -162.91 + ], + [ + 85.165, + -161.93 + ], + [ + 87.245, + -160.02 + ], + [ + 88.365, + -158.98 + ], + [ + 88.435, + -158.92 + ], + [ + 91.685, + -155.85 + ], + [ + 93.655, + -153.98 + ], + [ + 94.975, + -152.71 + ], + [ + 96.305, + -151.41 + ], + [ + 96.865, + -150.87 + ], + [ + 97.515, + -150.23 + ], + [ + 100.045, + -147.74 + ], + [ + 100.785, + -147 + ], + [ + 101.025, + -146.76 + ], + [ + 105.035, + -142.71 + ], + [ + 105.135, + -142.6 + ], + [ + 105.225, + -142.52 + ], + [ + 107.505, + -140.16 + ], + [ + 108.605, + -139.01 + ], + [ + 109.125, + -138.47 + ], + [ + 109.955, + -137.6 + ], + [ + 112.135, + -135.28 + ], + [ + 113.335, + -134 + ], + [ + 115.425, + -131.74 + ], + [ + 117.175, + -129.82 + ], + [ + 117.195, + -129.8 + ], + [ + 119.505, + -127.24 + ], + [ + 120.585, + -126.04 + ], + [ + 122.885, + -123.43 + ], + [ + 124.945, + -121.06 + ], + [ + 126.585, + -119.16 + ], + [ + 128.755, + -116.61 + ], + [ + 128.885, + -116.46 + ], + [ + 131.595, + -113.21 + ], + [ + 133.425, + -111 + ], + [ + 135.675, + -108.25 + ], + [ + 136.215, + -107.58 + ], + [ + 136.575, + -107.13 + ], + [ + 137.895, + -105.48 + ], + [ + 139.855, + -103 + ], + [ + 140.095, + -102.7 + ], + [ + 142.915, + -99.07 + ], + [ + 144.435, + -97.08 + ], + [ + 146.045, + -94.95 + ], + [ + 147.825, + -92.57 + ], + [ + 149.195, + -90.72 + ], + [ + 149.205, + -90.72 + ], + [ + 149.505, + -90.3 + ], + [ + 150.045, + -89.57 + ], + [ + 151.085, + -88.14 + ], + [ + 151.155, + -88.05 + ], + [ + 152.115, + -86.72 + ], + [ + 152.885, + -85.64 + ], + [ + 153.555, + -84.71 + ], + [ + 154.355, + -83.58 + ], + [ + 154.715, + -83.08 + ], + [ + 156.755, + -80.16 + ], + [ + 156.985, + -79.83 + ], + [ + 157.275, + -79.41 + ], + [ + 157.365, + -79.28 + ], + [ + 157.605, + -78.94 + ], + [ + 159.005, + -76.9 + ], + [ + 160.595, + -74.57 + ], + [ + 161.005, + -73.96 + ], + [ + 161.695, + -72.93 + ], + [ + 161.945, + -72.55 + ], + [ + 162.755, + -71.34 + ], + [ + 162.985, + -71 + ], + [ + 163.055, + -70.89 + ], + [ + 163.515, + -70.19 + ], + [ + 163.855, + -69.68 + ], + [ + 164.345, + -68.93 + ], + [ + 164.935, + -68.02 + ], + [ + 166.875, + -65.03 + ], + [ + 167.055, + -64.75 + ], + [ + 167.275, + -64.39 + ], + [ + 168.785, + -62.03 + ], + [ + 169.095, + -61.54 + ], + [ + 169.995, + -60.1 + ], + [ + 170.195, + -59.78 + ], + [ + 170.345, + -59.54 + ], + [ + 170.675, + -59.01 + ], + [ + 170.945, + -58.58 + ], + [ + 172.235, + -56.49 + ], + [ + 172.545, + -55.98 + ], + [ + 173.075, + -55.11 + ], + [ + 174.135, + -53.36 + ], + [ + 174.395, + -52.93 + ], + [ + 176.005, + -50.24 + ], + [ + 176.925, + -48.68 + ], + [ + 178.285, + -46.35 + ], + [ + 178.935, + -45.23 + ], + [ + 179.275, + -44.64 + ], + [ + 179.725, + -43.85 + ], + [ + 181.575, + -40.59 + ], + [ + 181.605, + -40.54 + ], + [ + 182.185, + -39.51 + ], + [ + 182.765, + -38.46 + ], + [ + 183.315, + -37.47 + ], + [ + 183.695, + -36.78 + ], + [ + 184.735, + -34.89 + ], + [ + 184.825, + -34.72 + ], + [ + 185.025, + -34.35 + ], + [ + 185.165, + -34.1 + ], + [ + 186.735, + -31.18 + ], + [ + 187.335, + -30.04 + ], + [ + 187.715, + -29.34 + ], + [ + 187.725, + -29.32 + ], + [ + 187.815, + -29.15 + ], + [ + 188.535, + -27.77 + ], + [ + 189.105, + -26.68 + ], + [ + 190.055, + -24.84 + ], + [ + 190.535, + -23.91 + ], + [ + 190.995, + -23 + ], + [ + 191.685, + -21.65 + ], + [ + 192.315, + -20.39 + ], + [ + 194.065, + -16.88 + ], + [ + 194.395, + -16.21 + ], + [ + 195.425, + -14.1 + ], + [ + 195.805, + -13.31 + ], + [ + 196.165, + -12.55 + ], + [ + 196.425, + -12.01 + ], + [ + 197.545, + -9.66 + ], + [ + 197.595, + -9.54 + ], + [ + 197.965, + -8.76 + ], + [ + 198.185, + -8.29 + ], + [ + 198.475, + -7.67 + ], + [ + 198.635, + -7.31 + ], + [ + 199.305, + -5.88 + ], + [ + 200.305, + -3.69 + ], + [ + 200.615, + -3.01 + ], + [ + 200.815, + -2.58 + ], + [ + 201.115, + -1.9 + ], + [ + 201.625, + -0.76 + ], + [ + 202.095, + 0.28 + ], + [ + 202.255, + 0.65 + ], + [ + 202.405, + 0.98 + ], + [ + 202.735, + 1.74 + ], + [ + 203.255, + 2.91 + ], + [ + 203.445, + 3.34 + ], + [ + 203.605, + 3.72 + ], + [ + 203.875, + 4.34 + ], + [ + 205.265, + 7.57 + ], + [ + 205.325, + 7.72 + ], + [ + 205.955, + 9.21 + ], + [ + 206.245, + 9.89 + ], + [ + 206.755, + 11.12 + ], + [ + 207.255, + 12.33 + ], + [ + 207.505, + 12.93 + ], + [ + 207.585, + 13.12 + ], + [ + 207.585, + 13.14 + ], + [ + 207.855, + 13.78 + ], + [ + 207.985, + 14.12 + ], + [ + 208.005, + 14.17 + ], + [ + 208.155, + 14.53 + ], + [ + 208.825, + 16.19 + ], + [ + 210.065, + 19.3 + ], + [ + 210.515, + 20.45 + ], + [ + 210.875, + 21.37 + ], + [ + 212.145, + 24.65 + ], + [ + 212.425, + 25.4 + ], + [ + 212.505, + 25.6 + ], + [ + 213.305, + 27.74 + ], + [ + 213.765, + 28.98 + ], + [ + 214.085, + 29.86 + ], + [ + 214.595, + 31.24 + ], + [ + 214.675, + 31.49 + ], + [ + 215.495, + 33.73 + ], + [ + 215.745, + 34.44 + ], + [ + 216.015, + 35.21 + ], + [ + 216.195, + 35.7 + ], + [ + 216.325, + 36.07 + ], + [ + 216.565, + 36.76 + ], + [ + 216.735, + 37.26 + ], + [ + 217.085, + 38.26 + ], + [ + 217.705, + 40.05 + ], + [ + 217.975, + 40.84 + ], + [ + 218.275, + 41.72 + ], + [ + 218.305, + 41.81 + ], + [ + 218.535, + 42.5 + ], + [ + 218.905, + 43.59 + ], + [ + 219.455, + 45.25 + ], + [ + 219.775, + 46.24 + ], + [ + 219.805, + 46.3 + ], + [ + 220.085, + 47.17 + ], + [ + 220.155, + 47.4 + ], + [ + 220.265, + 47.74 + ], + [ + 221.035, + 50.11 + ], + [ + 221.545, + 51.73 + ], + [ + 221.715, + 52.29 + ], + [ + 222.065, + 53.4 + ], + [ + 222.455, + 54.68 + ], + [ + 222.625, + 55.21 + ], + [ + 223.155, + 56.97 + ], + [ + 223.395, + 57.77 + ], + [ + 223.755, + 58.97 + ], + [ + 224.075, + 60.06 + ], + [ + 224.395, + 61.16 + ], + [ + 224.705, + 62.2 + ], + [ + 224.865, + 62.78 + ], + [ + 225.285, + 64.24 + ], + [ + 225.495, + 64.98 + ], + [ + 225.935, + 66.54 + ], + [ + 226.865, + 69.91 + ], + [ + 227.165, + 71.02 + ], + [ + 227.225, + 71.25 + ], + [ + 227.285, + 71.48 + ], + [ + 227.555, + 72.48 + ], + [ + 228.305, + 75.33 + ], + [ + 228.455, + 75.91 + ], + [ + 228.955, + 77.88 + ], + [ + 229.635, + 80.58 + ], + [ + 229.995, + 82.03 + ], + [ + 230.045, + 82.26 + ], + [ + 230.535, + 84.24 + ], + [ + 230.775, + 85.29 + ], + [ + 230.985, + 86.19 + ], + [ + 231.045, + 86.45 + ], + [ + 231.205, + 87.12 + ], + [ + 231.275, + 87.44 + ], + [ + 231.585, + 88.76 + ], + [ + 231.605, + 88.87 + ], + [ + 231.705, + 89.29 + ], + [ + 231.775, + 89.62 + ], + [ + 231.985, + 90.52 + ], + [ + 232.685, + 93.67 + ], + [ + 232.925, + 94.78 + ], + [ + 233.595, + 97.95 + ], + [ + 233.785, + 98.85 + ], + [ + 234.135, + 100.59 + ], + [ + 234.185, + 100.85 + ], + [ + 234.235, + 101.04 + ], + [ + 234.275, + 101.28 + ], + [ + 234.285, + 101.31 + ], + [ + 234.825, + 104.01 + ], + [ + 234.845, + 104.14 + ], + [ + 234.915, + 104.5 + ], + [ + 235.175, + 105.83 + ], + [ + 235.465, + 107.35 + ], + [ + 235.795, + 109.14 + ], + [ + 236.075, + 110.66 + ], + [ + 236.265, + 111.71 + ], + [ + 236.285, + 111.82 + ], + [ + 236.355, + 112.19 + ], + [ + 236.555, + 113.33 + ], + [ + 236.575, + 113.47 + ], + [ + 236.745, + 114.45 + ], + [ + 236.775, + 114.64 + ], + [ + 237.185, + 117.02 + ], + [ + 237.325, + 117.84 + ], + [ + 237.415, + 118.44 + ], + [ + 237.475, + 118.79 + ], + [ + 237.895, + 121.36 + ], + [ + 238.165, + 123.11 + ], + [ + 238.245, + 123.64 + ], + [ + 238.285, + 123.88 + ], + [ + 238.305, + 124.04 + ], + [ + 238.395, + 124.63 + ], + [ + 238.415, + 124.76 + ], + [ + 238.965, + 128.51 + ], + [ + 239.075, + 129.24 + ], + [ + 239.175, + 129.95 + ], + [ + 239.375, + 131.42 + ], + [ + 239.485, + 132.24 + ], + [ + 239.515, + 132.44 + ], + [ + 239.655, + 133.47 + ], + [ + 239.745, + 134.19 + ], + [ + 239.875, + 135.2 + ], + [ + 239.925, + 135.61 + ], + [ + 240.175, + 137.61 + ], + [ + 240.225, + 138.01 + ], + [ + 240.315, + 138.73 + ], + [ + 240.345, + 139 + ], + [ + 240.665, + 141.6 + ], + [ + 240.725, + 142.16 + ], + [ + 240.765, + 142.52 + ], + [ + 240.805, + 142.82 + ], + [ + 240.805, + 142.88 + ], + [ + 240.845, + 143.21 + ], + [ + 241.375, + 148.13 + ], + [ + 241.375, + 148.2 + ], + [ + 241.425, + 148.68 + ], + [ + 241.505, + 149.47 + ], + [ + 241.755, + 152.09 + ], + [ + 241.825, + 152.77 + ], + [ + 241.925, + 153.96 + ], + [ + 241.985, + 154.61 + ], + [ + 242.105, + 155.9 + ], + [ + 242.275, + 158.03 + ], + [ + 242.345, + 158.92 + ], + [ + 242.455, + 160.26 + ], + [ + 242.545, + 161.57 + ], + [ + 242.585, + 162.11 + ], + [ + 242.605, + 162.3 + ], + [ + 242.655, + 163 + ], + [ + 242.685, + 163.46 + ], + [ + 242.725, + 164.02 + ], + [ + 242.785, + 164.96 + ], + [ + 242.855, + 165.97 + ], + [ + 242.915, + 166.84 + ], + [ + 242.945, + 167.35 + ], + [ + 242.975, + 167.78 + ], + [ + 242.985, + 167.99 + ], + [ + 243.155, + 170.92 + ], + [ + 243.195, + 171.56 + ], + [ + 243.245, + 172.52 + ], + [ + 243.265, + 172.99 + ], + [ + 243.275, + 173.07 + ], + [ + 243.305, + 173.66 + ], + [ + 243.315, + 173.95 + ], + [ + 243.465, + 177.34 + ], + [ + 243.495, + 178 + ], + [ + 243.555, + 179.54 + ], + [ + 243.675, + 182.92 + ], + [ + 243.705, + 184.17 + ], + [ + 243.705, + 184.22 + ], + [ + 243.725, + 184.93 + ], + [ + 243.745, + 185.58 + ], + [ + 243.775, + 186.72 + ], + [ + 243.785, + 187.33 + ], + [ + 243.805, + 188.6 + ], + [ + 243.815, + 188.83 + ], + [ + 243.825, + 189.43 + ], + [ + 243.845, + 190.53 + ], + [ + 243.845, + 190.79 + ], + [ + 243.855, + 191.46 + ], + [ + 243.865, + 192.24 + ], + [ + 243.875, + 193.11 + ], + [ + 243.885, + 193.63 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.541176470588, + 0.823529471603, + 0.180392156863, + 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": [ + 732.715, + 290.64 + ], + "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, + -1.52 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -1.34, + -0.6 + ], + [ + -0.32, + -0.15 + ], + [ + -1.56, + -0.73 + ], + [ + -0.19, + -0.09 + ], + [ + -1.38, + -0.67 + ], + [ + -1.82, + -0.9 + ], + [ + -0.82, + -0.42 + ], + [ + -1.08, + -0.55 + ], + [ + -0.15, + -0.08 + ], + [ + -1.46, + -0.76 + ], + [ + -0.39, + -0.21 + ], + [ + -1.58, + -0.86 + ], + [ + -1.5, + -0.84 + ], + [ + -2, + -1.15 + ], + [ + -1.61, + -0.95 + ], + [ + -1.52, + -0.92 + ], + [ + -0.27, + -0.17 + ], + [ + -3.17, + -2.04 + ], + [ + -0.04, + -0.03 + ], + [ + -1.53, + -1.01 + ], + [ + -0.14, + -0.09 + ], + [ + -1.53, + -1.03 + ], + [ + -0.04, + -0.02 + ], + [ + -1.61, + -1.12 + ], + [ + -1.53, + -1.08 + ], + [ + -0.1, + -0.07 + ], + [ + -0.65, + -0.47 + ], + [ + -0.47, + -0.34 + ], + [ + -0.43, + -0.32 + ], + [ + -0.38, + -0.28 + ], + [ + -0.63, + -0.47 + ], + [ + -0.56, + -0.43 + ], + [ + -1.31, + -1 + ], + [ + -0.26, + -0.21 + ], + [ + -0.3, + -0.24 + ], + [ + -0.39, + -0.3 + ], + [ + -2.09, + -1.69 + ], + [ + -0.67, + -0.54 + ], + [ + -0.78, + -0.64 + ], + [ + -0.3, + -0.25 + ], + [ + -0.73, + -0.62 + ], + [ + -0.9, + -0.77 + ], + [ + -0.9, + -0.77 + ], + [ + -0.89, + -0.78 + ], + [ + -0.88, + -0.78 + ], + [ + -0.71, + -0.63 + ], + [ + -0.67, + -0.61 + ], + [ + -0.19, + -0.17 + ], + [ + -0.36, + -0.33 + ], + [ + -0.69, + -0.64 + ], + [ + -0.37, + -0.34 + ], + [ + -0.02, + -0.02 + ], + [ + -1.08, + -1.03 + ], + [ + -0.65, + -0.63 + ], + [ + -0.44, + -0.42 + ], + [ + -0.63, + -0.63 + ], + [ + -0.22, + -0.23 + ], + [ + -0.84, + -0.84 + ], + [ + -0.25, + -0.25 + ], + [ + -0.08, + -0.08 + ], + [ + -1.33, + -1.36 + ], + [ + -0.06, + -0.06 + ], + [ + -0.76, + -0.79 + ], + [ + -0.53, + -0.57 + ], + [ + -0.28, + -0.29 + ], + [ + -0.72, + -0.77 + ], + [ + -0.4, + -0.43 + ], + [ + -0.69, + -0.76 + ], + [ + -0.58, + -0.64 + ], + [ + -0.01, + -0.01 + ], + [ + -0.76, + -0.85 + ], + [ + -0.36, + -0.4 + ], + [ + -0.15, + -0.2 + ], + [ + -0.59, + -0.68 + ], + [ + -0.68, + -0.79 + ], + [ + -0.54, + -0.64 + ], + [ + -0.76, + -0.91 + ], + [ + -1.2, + -1.46 + ], + [ + -1.04, + -1.3 + ], + [ + -0.18, + -0.23 + ], + [ + -0.55, + -0.7 + ], + [ + -0.72, + -0.93 + ], + [ + -0.94, + -1.21 + ], + [ + -0.5, + -0.67 + ], + [ + -0.53, + -0.71 + ], + [ + -0.58, + -0.8 + ], + [ + -0.45, + -0.62 + ], + [ + 0.01, + -0.01 + ], + [ + -0.1, + -0.14 + ], + [ + -0.18, + -0.24 + ], + [ + -0.34, + -0.48 + ], + [ + -0.02, + -0.03 + ], + [ + -0.31, + -0.44 + ], + [ + -0.48, + -0.67 + ], + [ + -0.26, + -0.38 + ], + [ + -0.12, + -0.17 + ], + [ + -0.67, + -0.98 + ], + [ + -0.08, + -0.11 + ], + [ + -0.09, + -0.14 + ], + [ + -0.03, + -0.05 + ], + [ + -0.08, + -0.12 + ], + [ + -0.46, + -0.68 + ], + [ + -0.53, + -0.78 + ], + [ + -0.14, + -0.2 + ], + [ + -0.23, + -0.35 + ], + [ + -0.08, + -0.13 + ], + [ + -0.26, + -0.41 + ], + [ + -0.08, + -0.12 + ], + [ + -0.02, + -0.04 + ], + [ + -0.15, + -0.24 + ], + [ + -0.11, + -0.17 + ], + [ + -0.17, + -0.25 + ], + [ + -0.31, + -0.48 + ], + [ + -0.52, + -0.82 + ], + [ + -0.06, + -0.1 + ], + [ + -0.09, + -0.13 + ], + [ + -0.48, + -0.78 + ], + [ + -0.1, + -0.17 + ], + [ + -0.3, + -0.48 + ], + [ + -0.06, + -0.11 + ], + [ + -0.05, + -0.08 + ], + [ + -0.1, + -0.18 + ], + [ + -0.08, + -0.15 + ], + [ + -0.43, + -0.7 + ], + [ + -0.1, + -0.17 + ], + [ + -0.17, + -0.29 + ], + [ + -0.06, + -0.1 + ], + [ + -0.01, + 0 + ], + [ + -0.04, + -0.07 + ], + [ + -0.03, + -0.03 + ], + [ + -0.44, + -0.74 + ], + [ + -0.39, + -0.67 + ], + [ + -0.3, + -0.52 + ], + [ + -0.45, + -0.78 + ], + [ + -0.21, + -0.37 + ], + [ + -0.11, + -0.2 + ], + [ + -0.15, + -0.27 + ], + [ + -0.11, + -0.18 + ], + [ + -0.5, + -0.9 + ], + [ + -0.01, + -0.02 + ], + [ + -0.19, + -0.34 + ], + [ + -0.18, + -0.35 + ], + [ + -0.18, + -0.33 + ], + [ + -0.12, + -0.23 + ], + [ + -0.34, + -0.63 + ], + [ + -0.09, + -0.16 + ], + [ + -0.05, + -0.1 + ], + [ + -0.52, + -0.98 + ], + [ + -0.33, + -0.62 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.05 + ], + [ + -0.24, + -0.46 + ], + [ + -0.18, + -0.36 + ], + [ + -0.32, + -0.62 + ], + [ + -0.16, + -0.31 + ], + [ + -0.19, + -0.38 + ], + [ + 0, + 0 + ], + [ + -0.45, + -0.91 + ], + [ + -0.07, + -0.12 + ], + [ + -0.06, + -0.12 + ], + [ + -0.22, + -0.45 + ], + [ + -0.11, + -0.22 + ], + [ + -0.34, + -0.7 + ], + [ + -0.11, + -0.22 + ], + [ + -0.03, + -0.05 + ], + [ + -0.12, + -0.26 + ], + [ + -0.08, + -0.18 + ], + [ + -0.37, + -0.78 + ], + [ + -0.01, + -0.04 + ], + [ + -0.12, + -0.26 + ], + [ + -0.07, + -0.16 + ], + [ + -0.09, + -0.2 + ], + [ + -0.27, + -0.6 + ], + [ + -0.33, + -0.73 + ], + [ + -0.11, + -0.22 + ], + [ + -0.07, + -0.15 + ], + [ + -0.1, + -0.23 + ], + [ + -0.17, + -0.38 + ], + [ + -0.15, + -0.35 + ], + [ + -0.05, + -0.12 + ], + [ + -0.05, + -0.11 + ], + [ + -0.1, + -0.26 + ], + [ + -0.17, + -0.39 + ], + [ + -0.07, + -0.14 + ], + [ + -0.05, + -0.13 + ], + [ + -0.08, + -0.21 + ], + [ + -0.46, + -1.08 + ], + [ + -0.02, + -0.05 + ], + [ + -0.21, + -0.5 + ], + [ + -0.1, + -0.23 + ], + [ + -0.17, + -0.41 + ], + [ + -0.16, + -0.41 + ], + [ + -0.08, + -0.2 + ], + [ + -0.03, + -0.06 + ], + [ + -0.06, + -0.14 + ], + [ + -0.03, + -0.07 + ], + [ + -0.04, + -0.11 + ], + [ + 0, + -0.02 + ], + [ + -0.05, + -0.12 + ], + [ + -0.22, + -0.56 + ], + [ + -0.41, + -1.04 + ], + [ + -0.15, + -0.38 + ], + [ + -0.11, + -0.31 + ], + [ + -0.42, + -1.1 + ], + [ + -0.12, + -0.32 + ], + [ + -0.27, + -0.71 + ], + [ + -0.15, + -0.42 + ], + [ + -0.1, + -0.29 + ], + [ + -0.17, + -0.46 + ], + [ + -0.3, + -0.83 + ], + [ + -0.08, + -0.24 + ], + [ + -0.08, + -0.26 + ], + [ + -0.01, + -0.04 + ], + [ + -0.04, + -0.12 + ], + [ + -0.05, + -0.13 + ], + [ + -0.08, + -0.23 + ], + [ + -0.05, + -0.17 + ], + [ + -0.11, + -0.34 + ], + [ + -0.2, + -0.6 + ], + [ + -0.09, + -0.26 + ], + [ + -0.1, + -0.29 + ], + [ + -0.01, + -0.03 + ], + [ + -0.07, + -0.23 + ], + [ + -0.12, + -0.37 + ], + [ + -0.18, + -0.55 + ], + [ + -0.12, + -0.35 + ], + [ + -0.09, + -0.29 + ], + [ + -0.02, + -0.08 + ], + [ + -0.03, + -0.11 + ], + [ + -0.03, + -0.12 + ], + [ + -0.22, + -0.68 + ], + [ + -0.17, + -0.54 + ], + [ + -0.06, + -0.19 + ], + [ + -0.12, + -0.37 + ], + [ + -0.19, + -0.61 + ], + [ + -0.18, + -0.59 + ], + [ + -0.08, + -0.27 + ], + [ + -0.12, + -0.4 + ], + [ + -0.1, + -0.37 + ], + [ + -0.1, + -0.37 + ], + [ + -0.1, + -0.35 + ], + [ + -0.19, + -0.68 + ], + [ + -0.07, + -0.25 + ], + [ + -0.14, + -0.53 + ], + [ + -0.3, + -1.13 + ], + [ + -0.1, + -0.37 + ], + [ + -0.02, + -0.08 + ], + [ + -0.01, + -0.08 + ], + [ + -0.09, + -0.34 + ], + [ + -0.25, + -0.95 + ], + [ + -0.05, + -0.2 + ], + [ + -0.16, + -0.66 + ], + [ + -0.22, + -0.91 + ], + [ + -0.12, + -0.48 + ], + [ + -0.01, + -0.08 + ], + [ + -0.12, + -0.51 + ], + [ + -0.04, + -0.15 + ], + [ + -0.08, + -0.35 + ], + [ + -0.06, + -0.3 + ], + [ + -0.01, + -0.09 + ], + [ + -0.05, + -0.23 + ], + [ + -0.02, + -0.11 + ], + [ + -0.1, + -0.45 + ], + [ + 0, + -0.04 + ], + [ + -0.03, + -0.14 + ], + [ + -0.02, + -0.12 + ], + [ + -0.07, + -0.31 + ], + [ + -0.07, + -0.39 + ], + [ + -0.14, + -0.67 + ], + [ + 0, + 0 + ], + [ + -0.03, + -0.13 + ], + [ + -0.22, + -1.06 + ], + [ + -0.06, + -0.31 + ], + [ + -0.03, + -0.14 + ], + [ + -0.04, + -0.2 + ], + [ + -0.04, + -0.24 + ], + [ + -0.03, + -0.15 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.01 + ], + [ + -0.18, + -0.9 + ], + [ + 0, + -0.04 + ], + [ + -0.02, + -0.12 + ], + [ + -0.08, + -0.45 + ], + [ + -0.09, + -0.51 + ], + [ + -0.1, + -0.6 + ], + [ + -0.09, + -0.51 + ], + [ + -0.06, + -0.35 + ], + [ + -0.01, + -0.04 + ], + [ + -0.02, + -0.13 + ], + [ + -0.02, + -0.15 + ], + [ + -0.04, + -0.24 + ], + [ + -0.01, + -0.05 + ], + [ + -0.05, + -0.33 + ], + [ + -0.01, + -0.07 + ], + [ + -0.13, + -0.79 + ], + [ + -0.05, + -0.28 + ], + [ + -0.03, + -0.2 + ], + [ + -0.02, + -0.12 + ], + [ + -0.14, + -0.86 + ], + [ + -0.07, + -0.47 + ], + [ + -0.02, + -0.12 + ], + [ + -0.02, + -0.17 + ], + [ + -0.01, + -0.08 + ], + [ + 0, + -0.05 + ], + [ + -0.03, + -0.19 + ], + [ + 0, + -0.04 + ], + [ + -0.18, + -1.25 + ], + [ + 0, + -0.05 + ], + [ + -0.03, + -0.19 + ], + [ + -0.04, + -0.24 + ], + [ + -0.03, + -0.28 + ], + [ + -0.03, + -0.21 + ], + [ + -0.03, + -0.27 + ], + [ + -0.01, + -0.06 + ], + [ + -0.05, + -0.34 + ], + [ + -0.03, + -0.24 + ], + [ + -0.04, + -0.33 + ], + [ + -0.01, + -0.14 + ], + [ + -0.08, + -0.67 + ], + [ + -0.01, + -0.13 + ], + [ + -0.02, + -0.24 + ], + [ + 0, + -0.09 + ], + [ + -0.07, + -0.64 + ], + [ + -0.03, + -0.23 + ], + [ + -0.02, + -0.19 + ], + [ + -0.01, + -0.12 + ], + [ + -0.02, + -0.1 + ], + [ + -0.02, + -0.13 + ], + [ + -0.17, + -1.64 + ], + [ + 0, + 0 + ], + [ + -0.02, + -0.16 + ], + [ + -0.03, + -0.26 + ], + [ + -0.08, + -0.87 + ], + [ + -0.02, + -0.22 + ], + [ + -0.01, + -0.1 + ], + [ + -0.02, + -0.3 + ], + [ + -0.02, + -0.22 + ], + [ + 0, + -0.09 + ], + [ + -0.03, + -0.34 + ], + [ + -0.06, + -0.71 + ], + [ + -0.02, + -0.3 + ], + [ + 0, + -0.15 + ], + [ + -0.02, + -0.31 + ], + [ + -0.02, + -0.44 + ], + [ + -0.01, + -0.18 + ], + [ + 0, + -0.07 + ], + [ + -0.01, + -0.23 + ], + [ + -0.01, + -0.15 + ], + [ + -0.01, + -0.19 + ], + [ + -0.06, + -0.94 + ], + [ + -0.01, + -0.17 + ], + [ + 0, + -0.07 + ], + [ + -0.01, + -0.07 + ], + [ + 0, + -0.07 + ], + [ + -0.05, + -0.98 + ], + [ + -0.01, + -0.22 + ], + [ + 0, + -0.18 + ], + [ + -0.01, + -0.14 + ], + [ + -0.01, + -0.16 + ], + [ + -0.02, + -0.23 + ], + [ + -0.01, + -0.1 + ], + [ + -0.04, + -1.13 + ], + [ + -0.01, + -0.22 + ], + [ + 0, + -0.21 + ], + [ + -0.01, + -0.3 + ], + [ + -0.01, + -0.45 + ], + [ + -0.03, + -1.09 + ], + [ + 0, + 0 + ], + [ + 0, + -0.24 + ], + [ + 0, + -0.41 + ], + [ + 0, + -0.31 + ], + [ + 0, + -0.51 + ], + [ + 0, + -0.08 + ], + [ + 0, + -0.2 + ], + [ + 0.01, + -0.36 + ], + [ + 0, + -0.01 + ], + [ + 0, + 0 + ], + [ + 0, + -0.23 + ], + [ + 0, + -0.27 + ], + [ + 0, + -0.29 + ], + [ + 0, + -0.18 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 1.34, + 0.59 + ], + [ + 0.33, + 0.15 + ], + [ + 1.56, + 0.71 + ], + [ + 0.19, + 0.08 + ], + [ + 1.38, + 0.65 + ], + [ + 1.84, + 0.87 + ], + [ + 0.83, + 0.41 + ], + [ + 1.08, + 0.54 + ], + [ + 0.14, + 0.07 + ], + [ + 1.46, + 0.74 + ], + [ + 0.39, + 0.21 + ], + [ + 1.59, + 0.84 + ], + [ + 1.51, + 0.82 + ], + [ + 2.02, + 1.12 + ], + [ + 1.62, + 0.93 + ], + [ + 1.52, + 0.9 + ], + [ + 0.27, + 0.16 + ], + [ + 3.22, + 1.96 + ], + [ + 0.04, + 0.02 + ], + [ + 1.55, + 0.99 + ], + [ + 0.14, + 0.09 + ], + [ + 1.54, + 1.02 + ], + [ + 0.03, + 0.03 + ], + [ + 1.62, + 1.1 + ], + [ + 1.55, + 1.07 + ], + [ + 0.09, + 0.07 + ], + [ + 0.65, + 0.46 + ], + [ + 0.47, + 0.34 + ], + [ + 0.43, + 0.31 + ], + [ + 0.38, + 0.27 + ], + [ + 0.64, + 0.47 + ], + [ + 0.56, + 0.41 + ], + [ + 1.33, + 0.99 + ], + [ + 0.26, + 0.2 + ], + [ + 0.3, + 0.23 + ], + [ + 0.39, + 0.3 + ], + [ + 2.13, + 1.65 + ], + [ + 0.68, + 0.54 + ], + [ + 0.79, + 0.64 + ], + [ + 0.31, + 0.25 + ], + [ + 0.74, + 0.6 + ], + [ + 0.91, + 0.75 + ], + [ + 0.9, + 0.77 + ], + [ + 0.9, + 0.77 + ], + [ + 0.89, + 0.78 + ], + [ + 0.72, + 0.64 + ], + [ + 0.68, + 0.61 + ], + [ + 0.19, + 0.17 + ], + [ + 0.36, + 0.32 + ], + [ + 0.7, + 0.64 + ], + [ + 0.37, + 0.35 + ], + [ + 0.02, + 0.02 + ], + [ + 1.09, + 1.02 + ], + [ + 0.66, + 0.62 + ], + [ + 0.44, + 0.42 + ], + [ + 0.63, + 0.6 + ], + [ + 0.22, + 0.2 + ], + [ + 0.85, + 0.82 + ], + [ + 0.25, + 0.24 + ], + [ + 0.08, + 0.08 + ], + [ + 1.35, + 1.34 + ], + [ + 0.07, + 0.06 + ], + [ + 0.76, + 0.79 + ], + [ + 0.55, + 0.56 + ], + [ + 0.28, + 0.29 + ], + [ + 0.73, + 0.77 + ], + [ + 0.41, + 0.42 + ], + [ + 0.7, + 0.75 + ], + [ + 0.59, + 0.64 + ], + [ + 0.01, + 0.01 + ], + [ + 0.78, + 0.85 + ], + [ + 0.36, + 0.4 + ], + [ + 0.17, + 0.19 + ], + [ + 0.62, + 0.67 + ], + [ + 0.69, + 0.79 + ], + [ + 0.55, + 0.63 + ], + [ + 0.78, + 0.89 + ], + [ + 1.22, + 1.44 + ], + [ + 1.06, + 1.28 + ], + [ + 0.18, + 0.22 + ], + [ + 0.57, + 0.7 + ], + [ + 0.74, + 0.92 + ], + [ + 0.94, + 1.21 + ], + [ + 0.51, + 0.66 + ], + [ + 0.54, + 0.71 + ], + [ + 0.6, + 0.79 + ], + [ + 0.46, + 0.61 + ], + [ + 0, + 0 + ], + [ + 0.11, + 0.13 + ], + [ + 0.19, + 0.24 + ], + [ + 0.35, + 0.48 + ], + [ + 0.03, + 0.03 + ], + [ + 0.32, + 0.44 + ], + [ + 0.48, + 0.67 + ], + [ + 0.27, + 0.38 + ], + [ + 0.12, + 0.16 + ], + [ + 0.69, + 0.97 + ], + [ + 0.08, + 0.11 + ], + [ + 0.1, + 0.14 + ], + [ + 0.03, + 0.04 + ], + [ + 0.09, + 0.11 + ], + [ + 0.47, + 0.67 + ], + [ + 0.54, + 0.77 + ], + [ + 0.14, + 0.2 + ], + [ + 0.23, + 0.34 + ], + [ + 0.08, + 0.12 + ], + [ + 0.28, + 0.4 + ], + [ + 0.08, + 0.11 + ], + [ + 0.03, + 0.04 + ], + [ + 0.15, + 0.23 + ], + [ + 0.12, + 0.17 + ], + [ + 0.16, + 0.25 + ], + [ + 0.32, + 0.48 + ], + [ + 0.53, + 0.81 + ], + [ + 0.06, + 0.09 + ], + [ + 0.09, + 0.13 + ], + [ + 0.49, + 0.78 + ], + [ + 0.11, + 0.16 + ], + [ + 0.3, + 0.48 + ], + [ + 0.07, + 0.1 + ], + [ + 0.05, + 0.08 + ], + [ + 0.12, + 0.17 + ], + [ + 0.1, + 0.14 + ], + [ + 0.43, + 0.7 + ], + [ + 0.1, + 0.17 + ], + [ + 0.18, + 0.29 + ], + [ + 0.07, + 0.11 + ], + [ + 0, + 0.01 + ], + [ + 0.04, + 0.07 + ], + [ + 0.01, + 0.04 + ], + [ + 0.45, + 0.74 + ], + [ + 0.4, + 0.66 + ], + [ + 0.31, + 0.52 + ], + [ + 0.46, + 0.77 + ], + [ + 0.22, + 0.37 + ], + [ + 0.11, + 0.19 + ], + [ + 0.15, + 0.26 + ], + [ + 0.11, + 0.18 + ], + [ + 0.51, + 0.91 + ], + [ + 0.01, + 0.02 + ], + [ + 0.2, + 0.34 + ], + [ + 0.2, + 0.35 + ], + [ + 0.19, + 0.33 + ], + [ + 0.13, + 0.23 + ], + [ + 0.35, + 0.63 + ], + [ + 0.09, + 0.16 + ], + [ + 0.05, + 0.11 + ], + [ + 0.53, + 0.97 + ], + [ + 0.33, + 0.61 + ], + [ + 0, + 0.01 + ], + [ + 0.03, + 0.06 + ], + [ + 0.24, + 0.46 + ], + [ + 0.2, + 0.36 + ], + [ + 0.32, + 0.61 + ], + [ + 0.16, + 0.31 + ], + [ + 0.2, + 0.37 + ], + [ + 0, + 0 + ], + [ + 0.46, + 0.9 + ], + [ + 0.06, + 0.12 + ], + [ + 0.05, + 0.12 + ], + [ + 0.21, + 0.44 + ], + [ + 0.11, + 0.22 + ], + [ + 0.35, + 0.7 + ], + [ + 0.1, + 0.21 + ], + [ + 0.02, + 0.05 + ], + [ + 0.12, + 0.25 + ], + [ + 0.09, + 0.18 + ], + [ + 0.38, + 0.78 + ], + [ + 0.02, + 0.04 + ], + [ + 0.13, + 0.26 + ], + [ + 0.08, + 0.15 + ], + [ + 0.1, + 0.21 + ], + [ + 0.28, + 0.59 + ], + [ + 0.34, + 0.73 + ], + [ + 0.1, + 0.22 + ], + [ + 0.07, + 0.15 + ], + [ + 0.1, + 0.22 + ], + [ + 0.17, + 0.38 + ], + [ + 0.16, + 0.35 + ], + [ + 0.06, + 0.12 + ], + [ + 0.05, + 0.11 + ], + [ + 0.11, + 0.25 + ], + [ + 0.18, + 0.39 + ], + [ + 0.06, + 0.14 + ], + [ + 0.05, + 0.12 + ], + [ + 0.1, + 0.2 + ], + [ + 0.47, + 1.07 + ], + [ + 0.02, + 0.05 + ], + [ + 0.21, + 0.5 + ], + [ + 0.1, + 0.23 + ], + [ + 0.17, + 0.41 + ], + [ + 0.17, + 0.4 + ], + [ + 0.09, + 0.2 + ], + [ + 0.02, + 0.06 + ], + [ + 0.06, + 0.14 + ], + [ + 0.02, + 0.08 + ], + [ + 0.04, + 0.11 + ], + [ + 0.01, + 0.02 + ], + [ + 0.05, + 0.12 + ], + [ + 0.23, + 0.55 + ], + [ + 0.42, + 1.03 + ], + [ + 0.15, + 0.38 + ], + [ + 0.13, + 0.31 + ], + [ + 0.43, + 1.09 + ], + [ + 0.12, + 0.32 + ], + [ + 0.27, + 0.71 + ], + [ + 0.15, + 0.41 + ], + [ + 0.11, + 0.29 + ], + [ + 0.17, + 0.46 + ], + [ + 0.3, + 0.83 + ], + [ + 0.08, + 0.23 + ], + [ + 0.09, + 0.25 + ], + [ + 0.02, + 0.04 + ], + [ + 0.05, + 0.12 + ], + [ + 0.04, + 0.12 + ], + [ + 0.08, + 0.23 + ], + [ + 0.06, + 0.16 + ], + [ + 0.12, + 0.33 + ], + [ + 0.21, + 0.59 + ], + [ + 0.09, + 0.26 + ], + [ + 0.1, + 0.29 + ], + [ + 0.01, + 0.03 + ], + [ + 0.08, + 0.23 + ], + [ + 0.13, + 0.36 + ], + [ + 0.18, + 0.55 + ], + [ + 0.12, + 0.35 + ], + [ + 0.09, + 0.29 + ], + [ + 0.02, + 0.08 + ], + [ + 0.04, + 0.11 + ], + [ + 0.04, + 0.11 + ], + [ + 0.23, + 0.67 + ], + [ + 0.17, + 0.54 + ], + [ + 0.05, + 0.19 + ], + [ + 0.12, + 0.37 + ], + [ + 0.19, + 0.6 + ], + [ + 0.18, + 0.58 + ], + [ + 0.08, + 0.26 + ], + [ + 0.12, + 0.4 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.36 + ], + [ + 0.11, + 0.34 + ], + [ + 0.2, + 0.68 + ], + [ + 0.07, + 0.24 + ], + [ + 0.15, + 0.51 + ], + [ + 0.32, + 1.12 + ], + [ + 0.1, + 0.37 + ], + [ + 0.02, + 0.07 + ], + [ + 0.02, + 0.07 + ], + [ + 0.1, + 0.33 + ], + [ + 0.25, + 0.94 + ], + [ + 0.05, + 0.19 + ], + [ + 0.17, + 0.65 + ], + [ + 0.23, + 0.89 + ], + [ + 0.12, + 0.48 + ], + [ + 0.02, + 0.07 + ], + [ + 0.13, + 0.51 + ], + [ + 0.04, + 0.15 + ], + [ + 0.08, + 0.35 + ], + [ + 0.08, + 0.3 + ], + [ + 0.03, + 0.09 + ], + [ + 0.06, + 0.22 + ], + [ + 0.03, + 0.11 + ], + [ + 0.11, + 0.43 + ], + [ + 0.01, + 0.03 + ], + [ + 0.04, + 0.14 + ], + [ + 0.03, + 0.1 + ], + [ + 0.08, + 0.29 + ], + [ + 0.09, + 0.38 + ], + [ + 0.16, + 0.66 + ], + [ + 0, + 0 + ], + [ + 0.04, + 0.13 + ], + [ + 0.23, + 1.05 + ], + [ + 0.07, + 0.29 + ], + [ + 0.03, + 0.14 + ], + [ + 0.04, + 0.19 + ], + [ + 0.05, + 0.24 + ], + [ + 0.04, + 0.15 + ], + [ + 0.02, + 0.08 + ], + [ + 0.01, + 0.01 + ], + [ + 0.19, + 0.9 + ], + [ + 0.01, + 0.05 + ], + [ + 0.03, + 0.12 + ], + [ + 0.09, + 0.44 + ], + [ + 0.1, + 0.5 + ], + [ + 0.11, + 0.59 + ], + [ + 0.1, + 0.5 + ], + [ + 0.07, + 0.35 + ], + [ + 0.01, + 0.04 + ], + [ + 0.02, + 0.12 + ], + [ + 0.02, + 0.14 + ], + [ + 0.05, + 0.23 + ], + [ + 0.01, + 0.04 + ], + [ + 0.06, + 0.32 + ], + [ + 0.01, + 0.06 + ], + [ + 0.14, + 0.79 + ], + [ + 0.05, + 0.27 + ], + [ + 0.03, + 0.2 + ], + [ + 0.03, + 0.11 + ], + [ + 0.14, + 0.85 + ], + [ + 0.07, + 0.46 + ], + [ + 0.02, + 0.12 + ], + [ + 0.03, + 0.18 + ], + [ + 0.02, + 0.08 + ], + [ + 0.01, + 0.06 + ], + [ + 0.03, + 0.2 + ], + [ + 0.01, + 0.04 + ], + [ + 0.19, + 1.25 + ], + [ + 0.01, + 0.05 + ], + [ + 0.03, + 0.19 + ], + [ + 0.03, + 0.24 + ], + [ + 0.04, + 0.28 + ], + [ + 0.03, + 0.21 + ], + [ + 0.04, + 0.27 + ], + [ + 0.01, + 0.07 + ], + [ + 0.05, + 0.34 + ], + [ + 0.03, + 0.24 + ], + [ + 0.05, + 0.34 + ], + [ + 0.02, + 0.14 + ], + [ + 0.09, + 0.67 + ], + [ + 0.02, + 0.13 + ], + [ + 0.04, + 0.24 + ], + [ + 0.02, + 0.09 + ], + [ + 0.08, + 0.63 + ], + [ + 0.03, + 0.23 + ], + [ + 0.02, + 0.19 + ], + [ + 0.01, + 0.12 + ], + [ + 0.01, + 0.1 + ], + [ + 0.01, + 0.13 + ], + [ + 0.18, + 1.63 + ], + [ + 0, + 0 + ], + [ + 0.02, + 0.16 + ], + [ + 0.03, + 0.26 + ], + [ + 0.09, + 0.88 + ], + [ + 0.02, + 0.23 + ], + [ + 0.01, + 0.1 + ], + [ + 0.03, + 0.29 + ], + [ + 0.02, + 0.21 + ], + [ + 0.01, + 0.09 + ], + [ + 0.04, + 0.34 + ], + [ + 0.06, + 0.71 + ], + [ + 0.03, + 0.29 + ], + [ + 0.01, + 0.14 + ], + [ + 0.03, + 0.3 + ], + [ + 0.03, + 0.43 + ], + [ + 0.02, + 0.18 + ], + [ + 0.01, + 0.06 + ], + [ + 0.02, + 0.23 + ], + [ + 0.01, + 0.16 + ], + [ + 0.02, + 0.19 + ], + [ + 0.07, + 0.94 + ], + [ + 0.01, + 0.17 + ], + [ + 0.01, + 0.07 + ], + [ + 0.01, + 0.07 + ], + [ + 0, + 0.07 + ], + [ + 0.06, + 0.98 + ], + [ + 0.01, + 0.21 + ], + [ + 0.01, + 0.18 + ], + [ + 0.01, + 0.13 + ], + [ + 0.01, + 0.15 + ], + [ + 0.01, + 0.22 + ], + [ + 0, + 0.09 + ], + [ + 0.05, + 1.13 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.2 + ], + [ + 0.02, + 0.31 + ], + [ + 0.02, + 0.45 + ], + [ + 0.05, + 1.09 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.24 + ], + [ + 0.01, + 0.41 + ], + [ + 0.01, + 0.3 + ], + [ + 0.02, + 0.5 + ], + [ + 0.01, + 0.08 + ], + [ + 0.01, + 0.2 + ], + [ + 0.01, + 0.35 + ], + [ + 0.01, + 0.01 + ], + [ + 0, + 0 + ], + [ + 0.01, + 0.22 + ], + [ + 0.01, + 0.25 + ], + [ + 0.01, + 0.29 + ], + [ + 0.01, + 0.17 + ], + [ + 0.01, + 1.51 + ] + ], + "v": [ + [ + 243.905, + 223.375 + ], + [ + -243.905, + 223.375 + ], + [ + -47.705, + -223.365 + ], + [ + -47.705, + -223.375 + ], + [ + -43.685, + -221.585 + ], + [ + -42.715, + -221.145 + ], + [ + -38.035, + -218.985 + ], + [ + -37.465, + -218.725 + ], + [ + -33.315, + -216.755 + ], + [ + -27.825, + -214.085 + ], + [ + -25.345, + -212.845 + ], + [ + -22.115, + -211.215 + ], + [ + -21.675, + -210.985 + ], + [ + -17.305, + -208.725 + ], + [ + -16.135, + -208.105 + ], + [ + -11.385, + -205.555 + ], + [ + -6.865, + -203.065 + ], + [ + -0.835, + -199.655 + ], + [ + 3.995, + -196.835 + ], + [ + 8.555, + -194.105 + ], + [ + 9.365, + -193.615 + ], + [ + 18.965, + -187.615 + ], + [ + 19.085, + -187.535 + ], + [ + 23.705, + -184.535 + ], + [ + 24.125, + -184.265 + ], + [ + 28.735, + -181.195 + ], + [ + 28.835, + -181.125 + ], + [ + 33.675, + -177.805 + ], + [ + 38.295, + -174.575 + ], + [ + 38.575, + -174.365 + ], + [ + 40.535, + -172.965 + ], + [ + 41.945, + -171.945 + ], + [ + 43.245, + -171.005 + ], + [ + 44.375, + -170.175 + ], + [ + 46.275, + -168.775 + ], + [ + 47.955, + -167.525 + ], + [ + 51.905, + -164.545 + ], + [ + 52.695, + -163.935 + ], + [ + 53.605, + -163.235 + ], + [ + 54.765, + -162.335 + ], + [ + 61.105, + -157.335 + ], + [ + 63.115, + -155.715 + ], + [ + 65.475, + -153.795 + ], + [ + 66.385, + -153.045 + ], + [ + 68.595, + -151.205 + ], + [ + 71.315, + -148.925 + ], + [ + 74.015, + -146.615 + ], + [ + 76.695, + -144.295 + ], + [ + 79.355, + -141.955 + ], + [ + 81.495, + -140.055 + ], + [ + 83.515, + -138.225 + ], + [ + 84.085, + -137.705 + ], + [ + 85.165, + -136.725 + ], + [ + 87.245, + -134.815 + ], + [ + 88.365, + -133.775 + ], + [ + 88.435, + -133.715 + ], + [ + 91.685, + -130.645 + ], + [ + 93.655, + -128.775 + ], + [ + 94.975, + -127.505 + ], + [ + 96.865, + -125.665 + ], + [ + 97.515, + -125.025 + ], + [ + 100.045, + -122.535 + ], + [ + 100.785, + -121.795 + ], + [ + 101.025, + -121.555 + ], + [ + 105.035, + -117.505 + ], + [ + 105.225, + -117.315 + ], + [ + 107.505, + -114.955 + ], + [ + 109.125, + -113.265 + ], + [ + 109.955, + -112.395 + ], + [ + 112.135, + -110.075 + ], + [ + 113.335, + -108.795 + ], + [ + 115.425, + -106.535 + ], + [ + 117.175, + -104.615 + ], + [ + 117.195, + -104.595 + ], + [ + 119.505, + -102.035 + ], + [ + 120.585, + -100.835 + ], + [ + 121.085, + -100.255 + ], + [ + 122.885, + -98.225 + ], + [ + 124.945, + -95.855 + ], + [ + 126.585, + -93.955 + ], + [ + 128.885, + -91.255 + ], + [ + 132.515, + -86.915 + ], + [ + 135.675, + -83.045 + ], + [ + 136.215, + -82.375 + ], + [ + 137.895, + -80.275 + ], + [ + 140.095, + -77.495 + ], + [ + 142.915, + -73.865 + ], + [ + 144.435, + -71.875 + ], + [ + 146.045, + -69.745 + ], + [ + 147.825, + -67.365 + ], + [ + 149.195, + -65.515 + ], + [ + 149.195, + -65.505 + ], + [ + 149.505, + -65.095 + ], + [ + 150.045, + -64.365 + ], + [ + 151.085, + -62.935 + ], + [ + 151.155, + -62.845 + ], + [ + 152.115, + -61.515 + ], + [ + 153.555, + -59.505 + ], + [ + 154.355, + -58.375 + ], + [ + 154.715, + -57.875 + ], + [ + 156.755, + -54.955 + ], + [ + 156.985, + -54.625 + ], + [ + 157.275, + -54.205 + ], + [ + 157.365, + -54.075 + ], + [ + 157.605, + -53.735 + ], + [ + 159.005, + -51.695 + ], + [ + 160.595, + -49.365 + ], + [ + 161.005, + -48.755 + ], + [ + 161.695, + -47.725 + ], + [ + 161.945, + -47.345 + ], + [ + 162.755, + -46.135 + ], + [ + 162.985, + -45.795 + ], + [ + 163.055, + -45.685 + ], + [ + 163.515, + -44.985 + ], + [ + 163.855, + -44.475 + ], + [ + 164.345, + -43.725 + ], + [ + 165.295, + -42.275 + ], + [ + 166.875, + -39.825 + ], + [ + 167.055, + -39.545 + ], + [ + 167.315, + -39.155 + ], + [ + 168.785, + -36.825 + ], + [ + 169.095, + -36.335 + ], + [ + 169.995, + -34.895 + ], + [ + 170.195, + -34.575 + ], + [ + 170.345, + -34.335 + ], + [ + 170.675, + -33.805 + ], + [ + 170.945, + -33.375 + ], + [ + 172.235, + -31.285 + ], + [ + 172.545, + -30.775 + ], + [ + 173.075, + -29.905 + ], + [ + 173.275, + -29.585 + ], + [ + 173.285, + -29.575 + ], + [ + 173.415, + -29.365 + ], + [ + 173.475, + -29.265 + ], + [ + 174.815, + -27.035 + ], + [ + 176.005, + -25.035 + ], + [ + 176.925, + -23.475 + ], + [ + 178.285, + -21.145 + ], + [ + 178.935, + -20.025 + ], + [ + 179.275, + -19.435 + ], + [ + 179.725, + -18.645 + ], + [ + 180.055, + -18.095 + ], + [ + 181.575, + -15.385 + ], + [ + 181.605, + -15.335 + ], + [ + 182.185, + -14.305 + ], + [ + 182.765, + -13.255 + ], + [ + 183.315, + -12.265 + ], + [ + 183.695, + -11.575 + ], + [ + 184.735, + -9.685 + ], + [ + 185.005, + -9.205 + ], + [ + 185.165, + -8.895 + ], + [ + 186.735, + -5.975 + ], + [ + 187.715, + -4.135 + ], + [ + 187.725, + -4.115 + ], + [ + 187.815, + -3.945 + ], + [ + 188.535, + -2.565 + ], + [ + 189.105, + -1.475 + ], + [ + 190.055, + 0.365 + ], + [ + 190.535, + 1.295 + ], + [ + 191.115, + 2.415 + ], + [ + 191.685, + 3.555 + ], + [ + 193.055, + 6.275 + ], + [ + 193.245, + 6.645 + ], + [ + 193.415, + 6.995 + ], + [ + 194.065, + 8.325 + ], + [ + 194.395, + 8.995 + ], + [ + 195.425, + 11.105 + ], + [ + 195.735, + 11.745 + ], + [ + 195.805, + 11.895 + ], + [ + 196.165, + 12.655 + ], + [ + 196.425, + 13.195 + ], + [ + 197.545, + 15.545 + ], + [ + 197.595, + 15.665 + ], + [ + 197.965, + 16.445 + ], + [ + 198.185, + 16.915 + ], + [ + 198.475, + 17.535 + ], + [ + 199.305, + 19.325 + ], + [ + 200.305, + 21.515 + ], + [ + 200.615, + 22.175 + ], + [ + 200.815, + 22.625 + ], + [ + 201.115, + 23.305 + ], + [ + 201.625, + 24.445 + ], + [ + 202.095, + 25.485 + ], + [ + 202.255, + 25.855 + ], + [ + 202.405, + 26.185 + ], + [ + 202.735, + 26.945 + ], + [ + 203.255, + 28.115 + ], + [ + 203.445, + 28.545 + ], + [ + 203.605, + 28.925 + ], + [ + 203.875, + 29.545 + ], + [ + 205.265, + 32.775 + ], + [ + 205.325, + 32.925 + ], + [ + 205.955, + 34.415 + ], + [ + 206.245, + 35.095 + ], + [ + 206.755, + 36.325 + ], + [ + 207.255, + 37.535 + ], + [ + 207.505, + 38.135 + ], + [ + 207.585, + 38.325 + ], + [ + 207.765, + 38.755 + ], + [ + 207.855, + 38.985 + ], + [ + 207.985, + 39.325 + ], + [ + 208.005, + 39.375 + ], + [ + 208.155, + 39.735 + ], + [ + 208.825, + 41.395 + ], + [ + 210.065, + 44.505 + ], + [ + 210.515, + 45.655 + ], + [ + 210.875, + 46.575 + ], + [ + 212.145, + 49.855 + ], + [ + 212.505, + 50.805 + ], + [ + 213.305, + 52.945 + ], + [ + 213.765, + 54.185 + ], + [ + 214.085, + 55.065 + ], + [ + 214.595, + 56.445 + ], + [ + 215.495, + 58.935 + ], + [ + 215.745, + 59.645 + ], + [ + 216.015, + 60.415 + ], + [ + 216.055, + 60.535 + ], + [ + 216.195, + 60.905 + ], + [ + 216.325, + 61.275 + ], + [ + 216.565, + 61.965 + ], + [ + 216.735, + 62.465 + ], + [ + 217.085, + 63.465 + ], + [ + 217.705, + 65.255 + ], + [ + 217.975, + 66.045 + ], + [ + 218.275, + 66.925 + ], + [ + 218.305, + 67.015 + ], + [ + 218.535, + 67.705 + ], + [ + 218.905, + 68.795 + ], + [ + 219.455, + 70.455 + ], + [ + 219.805, + 71.505 + ], + [ + 220.085, + 72.375 + ], + [ + 220.155, + 72.605 + ], + [ + 220.265, + 72.945 + ], + [ + 220.375, + 73.285 + ], + [ + 221.035, + 75.315 + ], + [ + 221.545, + 76.935 + ], + [ + 221.715, + 77.495 + ], + [ + 222.065, + 78.605 + ], + [ + 222.625, + 80.415 + ], + [ + 223.155, + 82.175 + ], + [ + 223.395, + 82.975 + ], + [ + 223.755, + 84.175 + ], + [ + 224.075, + 85.265 + ], + [ + 224.395, + 86.365 + ], + [ + 224.705, + 87.405 + ], + [ + 225.285, + 89.445 + ], + [ + 225.495, + 90.185 + ], + [ + 225.935, + 91.745 + ], + [ + 226.865, + 95.115 + ], + [ + 227.165, + 96.225 + ], + [ + 227.225, + 96.455 + ], + [ + 227.285, + 96.685 + ], + [ + 227.555, + 97.685 + ], + [ + 228.305, + 100.535 + ], + [ + 228.455, + 101.115 + ], + [ + 228.955, + 103.085 + ], + [ + 229.635, + 105.785 + ], + [ + 229.995, + 107.235 + ], + [ + 230.045, + 107.465 + ], + [ + 230.415, + 108.995 + ], + [ + 230.535, + 109.445 + ], + [ + 230.775, + 110.495 + ], + [ + 230.985, + 111.395 + ], + [ + 231.045, + 111.655 + ], + [ + 231.205, + 112.325 + ], + [ + 231.275, + 112.645 + ], + [ + 231.585, + 113.965 + ], + [ + 231.605, + 114.075 + ], + [ + 231.705, + 114.495 + ], + [ + 231.775, + 114.825 + ], + [ + 231.985, + 115.725 + ], + [ + 232.235, + 116.885 + ], + [ + 232.685, + 118.875 + ], + [ + 232.835, + 119.595 + ], + [ + 232.925, + 119.985 + ], + [ + 233.595, + 123.155 + ], + [ + 233.785, + 124.055 + ], + [ + 233.875, + 124.485 + ], + [ + 233.995, + 125.065 + ], + [ + 234.135, + 125.795 + ], + [ + 234.235, + 126.245 + ], + [ + 234.275, + 126.485 + ], + [ + 234.285, + 126.515 + ], + [ + 234.825, + 129.215 + ], + [ + 234.845, + 129.345 + ], + [ + 234.915, + 129.705 + ], + [ + 235.175, + 131.035 + ], + [ + 235.465, + 132.555 + ], + [ + 235.795, + 134.345 + ], + [ + 236.075, + 135.865 + ], + [ + 236.265, + 136.915 + ], + [ + 236.285, + 137.025 + ], + [ + 236.355, + 137.395 + ], + [ + 236.425, + 137.835 + ], + [ + 236.555, + 138.535 + ], + [ + 236.575, + 138.675 + ], + [ + 236.745, + 139.655 + ], + [ + 236.775, + 139.845 + ], + [ + 237.185, + 142.225 + ], + [ + 237.325, + 143.045 + ], + [ + 237.415, + 143.645 + ], + [ + 237.475, + 143.995 + ], + [ + 237.895, + 146.565 + ], + [ + 238.105, + 147.965 + ], + [ + 238.165, + 148.315 + ], + [ + 238.245, + 148.845 + ], + [ + 238.285, + 149.085 + ], + [ + 238.305, + 149.245 + ], + [ + 238.395, + 149.835 + ], + [ + 238.415, + 149.965 + ], + [ + 238.965, + 153.715 + ], + [ + 238.985, + 153.875 + ], + [ + 239.075, + 154.445 + ], + [ + 239.175, + 155.155 + ], + [ + 239.285, + 155.995 + ], + [ + 239.375, + 156.625 + ], + [ + 239.485, + 157.445 + ], + [ + 239.515, + 157.645 + ], + [ + 239.655, + 158.675 + ], + [ + 239.745, + 159.395 + ], + [ + 239.875, + 160.405 + ], + [ + 239.925, + 160.815 + ], + [ + 240.175, + 162.815 + ], + [ + 240.225, + 163.215 + ], + [ + 240.315, + 163.935 + ], + [ + 240.345, + 164.205 + ], + [ + 240.575, + 166.115 + ], + [ + 240.665, + 166.805 + ], + [ + 240.725, + 167.365 + ], + [ + 240.765, + 167.725 + ], + [ + 240.805, + 168.025 + ], + [ + 240.845, + 168.415 + ], + [ + 241.375, + 173.335 + ], + [ + 241.375, + 173.405 + ], + [ + 241.425, + 173.885 + ], + [ + 241.505, + 174.675 + ], + [ + 241.755, + 177.295 + ], + [ + 241.825, + 177.975 + ], + [ + 241.845, + 178.285 + ], + [ + 241.925, + 179.165 + ], + [ + 241.985, + 179.815 + ], + [ + 242.005, + 180.085 + ], + [ + 242.105, + 181.105 + ], + [ + 242.275, + 183.235 + ], + [ + 242.345, + 184.125 + ], + [ + 242.375, + 184.555 + ], + [ + 242.455, + 185.465 + ], + [ + 242.545, + 186.775 + ], + [ + 242.585, + 187.315 + ], + [ + 242.605, + 187.505 + ], + [ + 242.655, + 188.205 + ], + [ + 242.685, + 188.665 + ], + [ + 242.725, + 189.225 + ], + [ + 242.915, + 192.045 + ], + [ + 242.945, + 192.555 + ], + [ + 242.955, + 192.775 + ], + [ + 242.975, + 192.985 + ], + [ + 242.985, + 193.195 + ], + [ + 243.155, + 196.125 + ], + [ + 243.195, + 196.765 + ], + [ + 243.215, + 197.315 + ], + [ + 243.245, + 197.725 + ], + [ + 243.265, + 198.195 + ], + [ + 243.305, + 198.865 + ], + [ + 243.315, + 199.155 + ], + [ + 243.465, + 202.545 + ], + [ + 243.495, + 203.205 + ], + [ + 243.515, + 203.825 + ], + [ + 243.555, + 204.745 + ], + [ + 243.595, + 206.095 + ], + [ + 243.705, + 209.375 + ], + [ + 243.705, + 209.425 + ], + [ + 243.725, + 210.135 + ], + [ + 243.755, + 211.375 + ], + [ + 243.775, + 212.285 + ], + [ + 243.805, + 213.805 + ], + [ + 243.815, + 214.035 + ], + [ + 243.825, + 214.635 + ], + [ + 243.835, + 215.695 + ], + [ + 243.845, + 215.735 + ], + [ + 243.845, + 215.995 + ], + [ + 243.855, + 216.665 + ], + [ + 243.865, + 217.445 + ], + [ + 243.875, + 218.315 + ], + [ + 243.885, + 218.835 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.784313785329, + 0.188235309077, + 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": [ + 732.715, + 265.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 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": [ + [ + -1.87, + -0.82 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -269.41, + 0 + ], + [ + -2.09, + -0.03 + ], + [ + 0, + 0 + ], + [ + -2, + -0.05 + ], + [ + -0.17, + 0 + ], + [ + -1.94, + -0.08 + ], + [ + -1.81, + -0.09 + ], + [ + -0.56, + -0.03 + ], + [ + -1.77, + -0.11 + ], + [ + 0, + 0 + ], + [ + -1.44, + -0.11 + ], + [ + -0.06, + -0.01 + ], + [ + -0.95, + -0.08 + ], + [ + -0.06, + -0.01 + ], + [ + -1.29, + -0.11 + ], + [ + -0.81, + -0.08 + ], + [ + -0.02, + -0.01 + ], + [ + -1.32, + -0.14 + ], + [ + -2.01, + -0.23 + ], + [ + -0.75, + -0.09 + ], + [ + -5.38, + -0.82 + ], + [ + -0.57, + -0.09 + ], + [ + -1.14, + -0.19 + ], + [ + -0.38, + -0.07 + ], + [ + -0.45, + -0.08 + ], + [ + -1.59, + -0.28 + ], + [ + -0.1, + -0.02 + ], + [ + -1.94, + -0.37 + ], + [ + -0.05, + -0.01 + ], + [ + -1.69, + -0.35 + ], + [ + -0.48, + -0.1 + ], + [ + -1.55, + -0.34 + ], + [ + -0.41, + -0.1 + ], + [ + -1.55, + -0.36 + ], + [ + -0.52, + -0.13 + ], + [ + -1.51, + -0.37 + ], + [ + -0.38, + -0.1 + ], + [ + -1.6, + -0.41 + ], + [ + -0.25, + -0.07 + ], + [ + -1.78, + -0.48 + ], + [ + -1.93, + -0.55 + ], + [ + -1.66, + -0.5 + ], + [ + -0.95, + -0.3 + ], + [ + -1.18, + -0.36 + ], + [ + -6.38, + -2.29 + ], + [ + -1.16, + -0.42 + ], + [ + -5.66, + -2.32 + ], + [ + -1.89, + -0.8 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -269.41 + ], + [ + 2.1, + 0 + ], + [ + 0, + 0 + ], + [ + 2.01, + 0.03 + ], + [ + 0.17, + 0 + ], + [ + 1.94, + 0.05 + ], + [ + 1.82, + 0.07 + ], + [ + 0.57, + 0.02 + ], + [ + 1.77, + 0.09 + ], + [ + 0, + 0 + ], + [ + 1.45, + 0.09 + ], + [ + 0.06, + 0 + ], + [ + 0.95, + 0.07 + ], + [ + 0.06, + 0 + ], + [ + 1.3, + 0.1 + ], + [ + 0.82, + 0.07 + ], + [ + 0.02, + 0 + ], + [ + 1.32, + 0.12 + ], + [ + 2.03, + 0.2 + ], + [ + 0.76, + 0.09 + ], + [ + 5.44, + 0.63 + ], + [ + 0.56, + 0.08 + ], + [ + 1.14, + 0.17 + ], + [ + 0.38, + 0.05 + ], + [ + 0.46, + 0.07 + ], + [ + 1.59, + 0.26 + ], + [ + 0.1, + 0.02 + ], + [ + 1.95, + 0.35 + ], + [ + 0.06, + 0.01 + ], + [ + 1.7, + 0.32 + ], + [ + 0.49, + 0.09 + ], + [ + 1.56, + 0.32 + ], + [ + 0.41, + 0.08 + ], + [ + 1.56, + 0.33 + ], + [ + 0.53, + 0.12 + ], + [ + 1.52, + 0.34 + ], + [ + 0.39, + 0.09 + ], + [ + 1.6, + 0.39 + ], + [ + 0.26, + 0.06 + ], + [ + 1.78, + 0.46 + ], + [ + 1.94, + 0.52 + ], + [ + 1.67, + 0.47 + ], + [ + 0.95, + 0.27 + ], + [ + 1.18, + 0.35 + ], + [ + 6.5, + 2.02 + ], + [ + 1.16, + 0.41 + ], + [ + 5.77, + 2.11 + ], + [ + 1.9, + 0.78 + ], + [ + 1.89, + 0.8 + ] + ], + "v": [ + [ + 342.005, + -202.845 + ], + [ + 342.005, + -202.835 + ], + [ + 145.805, + 243.905 + ], + [ + -342.005, + 243.905 + ], + [ + 145.805, + -243.905 + ], + [ + 152.105, + -243.865 + ], + [ + 152.335, + -243.865 + ], + [ + 158.345, + -243.745 + ], + [ + 158.855, + -243.735 + ], + [ + 164.665, + -243.545 + ], + [ + 170.115, + -243.305 + ], + [ + 171.815, + -243.225 + ], + [ + 177.125, + -242.915 + ], + [ + 177.135, + -242.915 + ], + [ + 181.475, + -242.615 + ], + [ + 181.655, + -242.605 + ], + [ + 184.505, + -242.385 + ], + [ + 184.685, + -242.375 + ], + [ + 188.565, + -242.055 + ], + [ + 191.015, + -241.835 + ], + [ + 191.085, + -241.825 + ], + [ + 195.045, + -241.445 + ], + [ + 201.105, + -240.805 + ], + [ + 203.375, + -240.535 + ], + [ + 219.595, + -238.355 + ], + [ + 221.295, + -238.095 + ], + [ + 224.725, + -237.545 + ], + [ + 225.855, + -237.365 + ], + [ + 227.225, + -237.135 + ], + [ + 231.995, + -236.315 + ], + [ + 232.305, + -236.255 + ], + [ + 238.145, + -235.175 + ], + [ + 238.305, + -235.145 + ], + [ + 243.385, + -234.135 + ], + [ + 244.835, + -233.845 + ], + [ + 249.495, + -232.855 + ], + [ + 250.725, + -232.585 + ], + [ + 255.385, + -231.545 + ], + [ + 256.955, + -231.175 + ], + [ + 261.495, + -230.105 + ], + [ + 262.645, + -229.815 + ], + [ + 267.445, + -228.615 + ], + [ + 268.205, + -228.415 + ], + [ + 273.545, + -227.005 + ], + [ + 279.345, + -225.395 + ], + [ + 284.345, + -223.945 + ], + [ + 287.205, + -223.085 + ], + [ + 290.735, + -222.015 + ], + [ + 310.045, + -215.555 + ], + [ + 313.525, + -214.305 + ], + [ + 330.675, + -207.655 + ], + [ + 336.355, + -205.285 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.976470648074, + 0.294117647059, + 0.294117647059, + 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": [ + 343.005, + 244.905 + ], + "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 + } + ], + "ip": 0, + "op": 241, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 12, + "ty": 3, + "nm": "Meter scale", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 510, + 244.235, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 488.809, + 244.904, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833, + 0.833, + 0.833 + ], + "y": [ + 0.833, + 0.833, + 0.833 + ] + }, + "o": { + "x": [ + 0.167, + 0.167, + 0.167 + ], + "y": [ + 0.167, + 0.167, + 0.167 + ] + }, + "t": 0, + "s": [ + 100, + 100, + 100 + ] + }, + { + "t": 9, + "s": [ + 55, + 55, + 100 + ] + } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "ip": 0, + "op": 241, + "st": -60, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "Resizing meter Lottie 4x", + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 127.5, + 68.5, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 510, + 274, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 25, + 25, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "w": 1020, + "h": 548, + "ip": 0, + "op": 246, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} \ No newline at end of file diff --git a/android/navi-cycs/src/main/res/values/strings.xml b/android/navi-cycs/src/main/res/values/strings.xml new file mode 100644 index 0000000000..409acb17a9 --- /dev/null +++ b/android/navi-cycs/src/main/res/values/strings.xml @@ -0,0 +1,17 @@ + + + + + + CIBIL Score + Are you sure you want to exit? + Your CIBIL Score is being fetched. It will only take few seconds. + Check score + Yes, exit + Okay, got it + diff --git a/android/settings.gradle b/android/settings.gradle index a7fba786b4..3c7f99512f 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -37,6 +37,7 @@ include ':navi-bbps' include ':npci-upi-cl' include ':navi-ap' include ':navi-mqtt' +include ':navi-cycs' include ':react-native-code-push' include ':benchmark'