From e182ff19dc902cd817999b360cbecc4055c7a581 Mon Sep 17 00:00:00 2001 From: Jules Date: Wed, 29 May 2024 22:25:47 +0200 Subject: [PATCH 1/5] Sleep Timer Took 2 hours 14 minutes --- app/build.gradle.kts | 4 +- app/src/main/AndroidManifest.xml | 3 + .../java/fr/angel/soundtap/GlobalHelper.kt | 49 +++++++ .../java/fr/angel/soundtap/MainActivity.kt | 65 ++++++++- .../java/fr/angel/soundtap/MainViewModel.kt | 31 +++++ .../fr/angel/soundtap/NotificationHelper.kt | 88 ++++++++++++ .../soundtap/data/models/BottomSheetState.kt | 75 ++++++++++ .../fr/angel/soundtap/data/models/Song.kt | 7 + .../data/settings/stats/StatsSettings.kt | 7 +- .../fr/angel/soundtap/navigation/NavGraph.kt | 5 +- .../soundtap/service/SleepTimerService.kt | 130 ++++++++++++++++++ .../soundtap/service/media/MediaCallback.kt | 7 +- .../fr/angel/soundtap/ui/app/AppScreen.kt | 86 +++++++++++- .../res/drawable/twotone_more_time_24.xml | 9 ++ .../res/drawable/twotone_stop_circle_24.xml | 7 + .../main/res/drawable/twotone_timer_24.xml | 11 ++ gradle/libs.versions.toml | 2 +- 17 files changed, 571 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/fr/angel/soundtap/NotificationHelper.kt create mode 100644 app/src/main/java/fr/angel/soundtap/data/models/BottomSheetState.kt create mode 100644 app/src/main/java/fr/angel/soundtap/service/SleepTimerService.kt create mode 100644 app/src/main/res/drawable/twotone_more_time_24.xml create mode 100644 app/src/main/res/drawable/twotone_stop_circle_24.xml create mode 100644 app/src/main/res/drawable/twotone_timer_24.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ecbab51..f1757ee 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -23,8 +23,8 @@ android { applicationId = "fr.angel.soundtap" minSdk = 30 targetSdk = 34 - versionCode = 24 - versionName = "1.0.7" + versionCode = 25 + versionName = "1.0.8" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 970eadc..a9d3fbb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,6 +9,7 @@ + @@ -77,6 +78,8 @@ + + callback.stop() } + } + + fun createStopSleepTimerIntent(context: Context): PendingIntent? { + val intent = + Intent(context, SleepTimerService::class.java).apply { + action = SleepTimerService.ACTION_STOP + } + return PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) + } + + fun createAddTimeSleepTimerIntent( + context: Context, + time: Int, + ): PendingIntent? { + val intent = + Intent(context, SleepTimerService::class.java).apply { + action = SleepTimerService.ACTION_ADD_TIME + putExtra(SleepTimerService.EXTRA_DURATION, time.toLong()) + } + return PendingIntent.getService(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) + } + + fun createNotificationOpenAppIntent(context: Context): PendingIntent? { + val intent = Intent(context, MainActivity::class.java) + return PendingIntent.getActivity(context, 2, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) + } + + fun formatTime(timeInMs: Long): String { + val seconds = timeInMs / 1000 + val minutes = seconds / 60 + val hours = minutes / 60 + + val formattedSeconds = seconds % 60 + val formattedMinutes = minutes % 60 + + return if (hours > 0) { + String.format(Locale.getDefault(), "%02d:%02d:%02d", hours, formattedMinutes, formattedSeconds) + } else { + String.format(Locale.getDefault(), "%02d:%02d", formattedMinutes, formattedSeconds) + } + } } diff --git a/app/src/main/java/fr/angel/soundtap/MainActivity.kt b/app/src/main/java/fr/angel/soundtap/MainActivity.kt index 4cc839e..6dbf8b5 100644 --- a/app/src/main/java/fr/angel/soundtap/MainActivity.kt +++ b/app/src/main/java/fr/angel/soundtap/MainActivity.kt @@ -28,7 +28,13 @@ import androidx.compose.animation.scaleOut import androidx.compose.animation.shrinkVertically import androidx.compose.animation.slideInVertically import androidx.compose.animation.slideOutVertically +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack @@ -37,14 +43,18 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.text.font.FontWeight @@ -61,6 +71,7 @@ import fr.angel.soundtap.service.SoundTapAccessibilityService import fr.angel.soundtap.ui.components.BottomControlBar import fr.angel.soundtap.ui.theme.FontPilowlava import fr.angel.soundtap.ui.theme.SoundTapTheme +import kotlinx.coroutines.launch @AndroidEntryPoint class MainActivity : ComponentActivity() { @@ -75,6 +86,8 @@ class MainActivity : ComponentActivity() { .setKeepOnScreenCondition { shouldKeepSplashScreenOn.value } setContent { + val scope = rememberCoroutineScope() + mainViewModel = hiltViewModel() val uiState by mainViewModel.uiState.collectAsStateWithLifecycle() @@ -98,7 +111,24 @@ class MainActivity : ComponentActivity() { mainViewModel.updatePermissionStates(this@MainActivity) } - val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()) + + val bottomSheetState = + rememberModalBottomSheetState( + skipPartiallyExpanded = + when (uiState.bottomSheetState) { + else -> false // Prevents the sheet from being partially expanded + }, + confirmValueChange = { + when (uiState.bottomSheetState) { + /** + * Prevents the sheet from being expanded + * + is BottomSheetManager.Companion.BottomSheetType.CreateList -> { it != SheetValue.Expanded } // Prevents the sheet from being expanded*/ + else -> true // Allows the sheet to be expanded + } + }, + ).also { mainViewModel.setBottomSheetState(it) } SoundTapTheme { Scaffold( @@ -135,6 +165,7 @@ class MainActivity : ComponentActivity() { fontWeight = FontWeight.ExtraBold, ) }, + scrollBehavior = scrollBehavior, ) }, bottomBar = { @@ -151,8 +182,40 @@ class MainActivity : ComponentActivity() { ) { innerPadding -> SoundTapNavGraph( modifier = Modifier.padding(innerPadding), + innerPadding = innerPadding, navController = navController, ) + + if (uiState.bottomSheetVisible) { + val sheetState = uiState.bottomSheetState + ModalBottomSheet( + onDismissRequest = { + sheetState.onDismiss?.invoke() + scope.launch { mainViewModel.hideBottomSheet() } + }, + sheetState = bottomSheetState, + windowInsets = WindowInsets(0), + ) { + Column( + modifier = + Modifier + .padding(horizontal = 16.dp) + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + sheetState.displayName?.run { + Text( + text = this, + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.SemiBold, + ) + } + Spacer(modifier = Modifier.height(24.dp)) + sheetState.content(sheetState) + Spacer(modifier = Modifier.navigationBarsPadding()) + } + } + } } } } diff --git a/app/src/main/java/fr/angel/soundtap/MainViewModel.kt b/app/src/main/java/fr/angel/soundtap/MainViewModel.kt index 0295dfd..a7bdab0 100644 --- a/app/src/main/java/fr/angel/soundtap/MainViewModel.kt +++ b/app/src/main/java/fr/angel/soundtap/MainViewModel.kt @@ -18,17 +18,22 @@ package fr.angel.soundtap import android.content.Context import android.content.pm.ResolveInfo import android.os.PowerManager +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.SheetState import androidx.datastore.core.DataStore import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel +import dagger.hilt.android.qualifiers.ApplicationContext import fr.angel.soundtap.data.enums.AutoPlayMode import fr.angel.soundtap.data.enums.HapticFeedbackLevel import fr.angel.soundtap.data.enums.WorkingMode +import fr.angel.soundtap.data.models.BottomSheetState import fr.angel.soundtap.data.settings.customization.CustomizationSettings import fr.angel.soundtap.data.settings.settings.AppSettings import fr.angel.soundtap.data.settings.stats.StatsSettings import fr.angel.soundtap.navigation.Screens +import fr.angel.soundtap.service.SleepTimerService import fr.angel.soundtap.service.SoundTapAccessibilityService import javax.inject.Inject import kotlinx.coroutines.delay @@ -43,6 +48,8 @@ data class MainUiState( val isBackgroundOptimizationDisabled: Boolean = false, val isOverlayPermissionGranted: Boolean = false, val playersPackages: Set = emptySet(), + val bottomSheetState: BottomSheetState = BottomSheetState.None, + val bottomSheetVisible: Boolean = false, val customizationSettings: CustomizationSettings = CustomizationSettings(), val appSettings: AppSettings = AppSettings(), val statsSettings: StatsSettings = StatsSettings(), @@ -55,6 +62,7 @@ data class MainUiState( class MainViewModel @Inject constructor( + @ApplicationContext private val context: Context, private val customizationSettingsDataStore: DataStore, private val appSettingsDataStore: DataStore, private val statsSettingsDataStore: DataStore, @@ -63,6 +71,9 @@ class MainViewModel private val _uiState = MutableStateFlow(MainUiState()) val uiState: StateFlow = _uiState.asStateFlow() + @OptIn(ExperimentalMaterial3Api::class) + private lateinit var sheetState: SheetState + init { // Load the customization settings viewModelScope.launch { @@ -178,4 +189,24 @@ class MainViewModel customizationSettingsDataStore.updateData { settings -> settings.copy(autoPlayMode = autoPlayMode) } } } + + fun showBottomSheet(bottomSheetState: BottomSheetState) { + _uiState.value = _uiState.value.copy(bottomSheetState = bottomSheetState, bottomSheetVisible = true) + } + + @OptIn(ExperimentalMaterial3Api::class) + suspend fun hideBottomSheet() { + sheetState.hide() + _uiState.value = _uiState.value.copy(bottomSheetVisible = false, bottomSheetState = BottomSheetState.None) + } + + fun setSleepTimer(duration: Long) { + // Start the sleep timer service + SleepTimerService.startService(context, duration) + } + + @OptIn(ExperimentalMaterial3Api::class) + fun setBottomSheetState(sheetState: SheetState) { + this.sheetState = sheetState + } } diff --git a/app/src/main/java/fr/angel/soundtap/NotificationHelper.kt b/app/src/main/java/fr/angel/soundtap/NotificationHelper.kt new file mode 100644 index 0000000..3d6565b --- /dev/null +++ b/app/src/main/java/fr/angel/soundtap/NotificationHelper.kt @@ -0,0 +1,88 @@ +package fr.angel.soundtap + +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import androidx.core.app.NotificationCompat +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Inject +import javax.inject.Singleton + +class NotificationHelper + @Inject + constructor( + @ApplicationContext private val context: Context, + ) { + private val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + + companion object { + const val CHANNEL_ID_SLEEP_TIMER = "sleep_timer" + const val NOTIFICATION_ID = 1 + } + + init { + val channel = + NotificationChannel( + // id = + CHANNEL_ID_SLEEP_TIMER, + // name = + "Sleep Timer", + // importance = + NotificationManager.IMPORTANCE_MIN, + ) + notificationManager.createNotificationChannel(channel) + } + + fun showSleepTimerNotification(millisUntilFinished: Long) { + val notification = + NotificationCompat.Builder(context, CHANNEL_ID_SLEEP_TIMER) + .setContentTitle("Sleep Timer") + .setContentText("Music will stop when the timer ends.") + .setSilent(true) + .setOngoing(true) + .setUsesChronometer(true) + .setChronometerCountDown(true) + .setWhen(System.currentTimeMillis() + millisUntilFinished) + .setShowWhen(true) + .setOnlyAlertOnce(true) + .setSmallIcon(R.drawable.twotone_timer_24) + .addAction( + // icon = + R.drawable.twotone_stop_circle_24, + // title = + "Stop", + // intent = + GlobalHelper.createStopSleepTimerIntent(context), + ).addAction( + // icon = + R.drawable.twotone_more_time_24, + // title = + "Add 15 minutes", + // intent = + GlobalHelper.createAddTimeSleepTimerIntent(context, 15 * 60 * 1000), + ).setContentIntent(GlobalHelper.createNotificationOpenAppIntent(context)) + .build() + + notificationManager.notify(NOTIFICATION_ID, notification) + } + + fun cancelSleepTimerNotification() { + notificationManager.cancel(NOTIFICATION_ID) + } + } + +@Module +@InstallIn(SingletonComponent::class) +object NotificationHelperModule { + @Provides + @Singleton + fun provideNotificationHelper( + @ApplicationContext context: Context, + ): NotificationHelper { + return NotificationHelper(context) + } +} diff --git a/app/src/main/java/fr/angel/soundtap/data/models/BottomSheetState.kt b/app/src/main/java/fr/angel/soundtap/data/models/BottomSheetState.kt new file mode 100644 index 0000000..c50e0b9 --- /dev/null +++ b/app/src/main/java/fr/angel/soundtap/data/models/BottomSheetState.kt @@ -0,0 +1,75 @@ +package fr.angel.soundtap.data.models + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp + +sealed class BottomSheetState( + open val displayName: String?, + open val onDismiss: (() -> Unit)? = null, + val content: @Composable (BottomSheetState) -> Unit, +) { + data object None : BottomSheetState( + displayName = "Oops, something went wrong", + content = { }, + ) + + data class SetTimer( + override val displayName: String? = "Set Sleep Timer", + override val onDismiss: (() -> Unit)? = null, + val onTimerSet: (Long) -> Unit, + ) : BottomSheetState( + displayName = displayName, + content = { state -> + val timerChoices: Map = + mapOf( + "15 seconds" to 15 * 1000, + "5 minutes" to 5 * 60 * 1000, + "10 minutes" to 10 * 60 * 1000, + "15 minutes" to 15 * 60 * 1000, + "30 minutes" to 30 * 60 * 1000, + "1 hour" to 60 * 60 * 1000, + "2 hours" to 2 * 60 * 60 * 1000, + ) + + Column( + verticalArrangement = androidx.compose.foundation.layout.Arrangement.spacedBy(4.dp), + ) { + timerChoices.forEach { (label, duration) -> + Button( + modifier = Modifier.fillMaxWidth(), + shape = MaterialTheme.shapes.medium, + colors = + ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.surfaceContainerHigh, + contentColor = MaterialTheme.colorScheme.onSurface, + ), + onClick = { + onTimerSet(duration) + + // Dismiss the bottom sheet + state.onDismiss?.invoke() + }, + ) { + Text( + modifier = + Modifier + .fillMaxWidth() + .padding(vertical = 8.dp), + text = label, + textAlign = TextAlign.Start, + ) + } + } + } + }, + ) +} diff --git a/app/src/main/java/fr/angel/soundtap/data/models/Song.kt b/app/src/main/java/fr/angel/soundtap/data/models/Song.kt index 86f71f1..11112bf 100644 --- a/app/src/main/java/fr/angel/soundtap/data/models/Song.kt +++ b/app/src/main/java/fr/angel/soundtap/data/models/Song.kt @@ -56,4 +56,11 @@ data class Song( fun isPartial(): Boolean { return title.isBlank() || artist.isBlank() || album.isBlank() || duration == 0L || coverFilePath.isBlank() } + + fun isSimilar(song: Song): Boolean { + return title == song.title && + artist == song.artist && + album == song.album && + duration == song.duration + } } diff --git a/app/src/main/java/fr/angel/soundtap/data/settings/stats/StatsSettings.kt b/app/src/main/java/fr/angel/soundtap/data/settings/stats/StatsSettings.kt index 67a3e2f..d2f99f7 100644 --- a/app/src/main/java/fr/angel/soundtap/data/settings/stats/StatsSettings.kt +++ b/app/src/main/java/fr/angel/soundtap/data/settings/stats/StatsSettings.kt @@ -24,9 +24,10 @@ data class StatsSettings( val totalSongsPlayed: Int = 0, val totalSongsSkipped: Int = 0, ) { - fun incrementTotalSongsPlayed() = copy(totalSongsPlayed = totalSongsPlayed + 1) - fun incrementTotalSongsSkipped() = copy(totalSongsSkipped = totalSongsSkipped + 1) - fun addSongToHistory(song: Song) = copy(history = history + song) + fun addSongToHistory(song: Song): StatsSettings { + if (history.first().isSimilar(song)) return this + return copy(history = history + song, totalSongsPlayed = totalSongsPlayed + 1) + } } diff --git a/app/src/main/java/fr/angel/soundtap/navigation/NavGraph.kt b/app/src/main/java/fr/angel/soundtap/navigation/NavGraph.kt index c8f6be7..765c2dd 100644 --- a/app/src/main/java/fr/angel/soundtap/navigation/NavGraph.kt +++ b/app/src/main/java/fr/angel/soundtap/navigation/NavGraph.kt @@ -17,6 +17,7 @@ package fr.angel.soundtap.navigation import androidx.compose.animation.ExperimentalSharedTransitionApi import androidx.compose.animation.SharedTransitionLayout +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.runtime.Composable @@ -42,6 +43,7 @@ fun SoundTapNavGraph( modifier: Modifier = Modifier, mainViewModel: MainViewModel = hiltViewModel(), navController: NavHostController, + innerPadding: PaddingValues, ) { val uiState by mainViewModel.uiState.collectAsStateWithLifecycle() @@ -59,7 +61,8 @@ fun SoundTapNavGraph( ) { composable(Screens.App.Home.route) { App( - modifier = modifier, + modifier = Modifier, + innerPadding = innerPadding, mainViewModel = mainViewModel, animatedVisibilityScope = this, navigateToCustomization = { navController.navigate(Screens.App.Customization.route) }, diff --git a/app/src/main/java/fr/angel/soundtap/service/SleepTimerService.kt b/app/src/main/java/fr/angel/soundtap/service/SleepTimerService.kt new file mode 100644 index 0000000..22501e4 --- /dev/null +++ b/app/src/main/java/fr/angel/soundtap/service/SleepTimerService.kt @@ -0,0 +1,130 @@ +package fr.angel.soundtap.service + +import android.app.Service +import android.content.Context +import android.content.Intent +import android.os.CountDownTimer +import android.os.IBinder +import android.util.Log +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableLongStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import fr.angel.soundtap.GlobalHelper +import fr.angel.soundtap.NotificationHelper +import javax.inject.Inject + +class SleepTimerService : Service() { + companion object { + fun startService( + context: Context, + duration: Long, + ) { + val intent = Intent(context, SleepTimerService::class.java) + intent.putExtra(EXTRA_DURATION, duration) + context.startService(intent) + } + + fun cancelTimer(context: Context) { + val intent = Intent(context, SleepTimerService::class.java) + intent.action = ACTION_STOP + context.startService(intent) + } + + fun addTime( + context: Context, + duration: Long, + ) { + val intent = Intent(context, SleepTimerService::class.java) + intent.action = ACTION_ADD_TIME + intent.putExtra(EXTRA_DURATION, duration) + context.startService(intent) + } + + const val TAG: String = "SleepTimerService" + + const val ACTION_STOP: String = "fr.angel.soundtap.service.SleepTimerService.STOP" + const val ACTION_ADD_TIME: String = "fr.angel.soundtap.service.SleepTimerService.ADD_TIME" + const val EXTRA_DURATION: String = "duration" + + var isRunning: Boolean by mutableStateOf(false) + var remainingTime: Long by mutableLongStateOf(0) + } + + @Inject + lateinit var notificationHelper: NotificationHelper + + private var timer: CountDownTimer? = null + private var duration: Long = 0 + + override fun onStartCommand( + intent: Intent?, + flags: Int, + startId: Int, + ): Int { + val action = intent?.action + when (action) { + ACTION_STOP -> { + if (!::notificationHelper.isInitialized) { + Log.w(TAG, "notificationHelper is not initialized") + stopSelf() + return START_NOT_STICKY + } + notificationHelper.cancelSleepTimerNotification() + stopSelf() + return START_NOT_STICKY + } + + ACTION_ADD_TIME -> { + val extraDuration = intent.getLongExtra(EXTRA_DURATION, 0) + duration += extraDuration + timer?.cancel() + startTimer(duration) + return START_STICKY + } + } + + duration = intent?.getLongExtra(EXTRA_DURATION, 0) ?: 0 + + while (!::notificationHelper.isInitialized) { + Thread.sleep(100) + } + + isRunning = true + startTimer(duration) + + return START_STICKY + } + + override fun onCreate() { + super.onCreate() + + notificationHelper = NotificationHelper(this) + } + + private fun startTimer(duration: Long) { + timer = + object : CountDownTimer(duration, 1000) { + override fun onTick(millisUntilFinished: Long) { + remainingTime = millisUntilFinished + notificationHelper.showSleepTimerNotification(millisUntilFinished) + } + + override fun onFinish() { + GlobalHelper.stopMusic() + notificationHelper.cancelSleepTimerNotification() + stopSelf() + } + }.start() + } + + override fun onBind(intent: Intent): IBinder? { + return null + } + + override fun onDestroy() { + super.onDestroy() + timer?.cancel() + isRunning = false + } +} diff --git a/app/src/main/java/fr/angel/soundtap/service/media/MediaCallback.kt b/app/src/main/java/fr/angel/soundtap/service/media/MediaCallback.kt index bc6ca86..57bea7e 100644 --- a/app/src/main/java/fr/angel/soundtap/service/media/MediaCallback.kt +++ b/app/src/main/java/fr/angel/soundtap/service/media/MediaCallback.kt @@ -86,6 +86,8 @@ class MediaCallback mediaController.transportControls.play() } + fun stop() = mediaController.transportControls.stop() + override fun onPlaybackStateChanged(state: PlaybackState?) { super.onPlaybackStateChanged(state) playbackState.value = state ?: return @@ -143,12 +145,9 @@ class MediaCallback scope.launch { statsDataStore.updateData { settings -> - settings.addSongToHistory( - this@run, - ) + settings.addSongToHistory(this@run) } } - scope.launch { statsDataStore.updateData { settings -> settings.incrementTotalSongsPlayed() } } playingSong = this } diff --git a/app/src/main/java/fr/angel/soundtap/ui/app/AppScreen.kt b/app/src/main/java/fr/angel/soundtap/ui/app/AppScreen.kt index f20cde4..f1e0305 100644 --- a/app/src/main/java/fr/angel/soundtap/ui/app/AppScreen.kt +++ b/app/src/main/java/fr/angel/soundtap/ui/app/AppScreen.kt @@ -18,13 +18,18 @@ package fr.angel.soundtap.ui.app import androidx.compose.animation.AnimatedVisibilityScope import androidx.compose.animation.ExperimentalSharedTransitionApi import androidx.compose.animation.SharedTransitionScope +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons @@ -34,6 +39,9 @@ import androidx.compose.material.icons.filled.Support import androidx.compose.material.icons.filled.Tune import androidx.compose.material.icons.outlined.NotificationImportant import androidx.compose.material.icons.outlined.SettingsAccessibility +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -41,9 +49,11 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -51,14 +61,17 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import fr.angel.soundtap.GlobalHelper import fr.angel.soundtap.MainViewModel +import fr.angel.soundtap.data.models.BottomSheetState +import fr.angel.soundtap.service.SleepTimerService import fr.angel.soundtap.service.SoundTapAccessibilityService import fr.angel.soundtap.service.media.MediaReceiver import fr.angel.soundtap.ui.components.GridCard import fr.angel.soundtap.ui.components.InfoCard import fr.angel.soundtap.ui.components.InfoCardType import fr.angel.soundtap.ui.components.MediaCards +import kotlinx.coroutines.launch -@OptIn(ExperimentalSharedTransitionApi::class) +@OptIn(ExperimentalSharedTransitionApi::class, ExperimentalMaterial3Api::class) @Composable fun SharedTransitionScope.App( modifier: Modifier = Modifier, @@ -68,8 +81,10 @@ fun SharedTransitionScope.App( navigateToSettings: () -> Unit, navigateToSupport: () -> Unit, mainViewModel: MainViewModel, + innerPadding: PaddingValues, ) { val context = LocalContext.current + val scope = rememberCoroutineScope() val uiState by mainViewModel.uiState.collectAsStateWithLifecycle() val accessibilityServiceState by SoundTapAccessibilityService.uiState.collectAsStateWithLifecycle() val mediaCallback = MediaReceiver.firstCallback @@ -85,7 +100,8 @@ fun SharedTransitionScope.App( modifier = modifier .fillMaxWidth() - .verticalScroll(rememberScrollState()), + .verticalScroll(rememberScrollState()) + .padding(top = innerPadding.calculateTopPadding()), verticalArrangement = Arrangement.spacedBy(8.dp), ) { Text( @@ -194,6 +210,70 @@ fun SharedTransitionScope.App( ) } - Spacer(modifier = Modifier.height(8.dp)) + Row( + modifier = + Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp) + .clip(MaterialTheme.shapes.extraLarge) + .background(MaterialTheme.colorScheme.surfaceVariant) + .clickable { } + .padding(vertical = 16.dp, horizontal = 16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = + if (SleepTimerService.isRunning) { + "Music will stop in ${GlobalHelper.formatTime(SleepTimerService.remainingTime)}" + } else { + "Sleep Timer" + }, + style = MaterialTheme.typography.titleMedium, + ) + Spacer(modifier = Modifier.weight(1f)) + Button( + shape = MaterialTheme.shapes.large, + colors = + if (SleepTimerService.isRunning) { + ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.error, + contentColor = MaterialTheme.colorScheme.onError, + ) + } else { + ButtonDefaults.buttonColors() + }, + onClick = { + if (SleepTimerService.isRunning) { + SleepTimerService.cancelTimer(context) + } else { + mainViewModel.showBottomSheet( + bottomSheetState = + BottomSheetState.SetTimer( + onTimerSet = { duration -> mainViewModel.setSleepTimer(duration) }, + onDismiss = { scope.launch { mainViewModel.hideBottomSheet() } }, + ), + ) + } + }, + ) { + Text( + modifier = Modifier.animateContentSize(), + text = + when (SleepTimerService.isRunning) { + true -> "Cancel Timer" + false -> "Set Timer" + }, + ) + } + } + + Spacer( + modifier = + Modifier + .height(8.dp) + .padding(bottom = innerPadding.calculateBottomPadding()), + ) } } diff --git a/app/src/main/res/drawable/twotone_more_time_24.xml b/app/src/main/res/drawable/twotone_more_time_24.xml new file mode 100644 index 0000000..44afd4d --- /dev/null +++ b/app/src/main/res/drawable/twotone_more_time_24.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/twotone_stop_circle_24.xml b/app/src/main/res/drawable/twotone_stop_circle_24.xml new file mode 100644 index 0000000..173ac35 --- /dev/null +++ b/app/src/main/res/drawable/twotone_stop_circle_24.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/twotone_timer_24.xml b/app/src/main/res/drawable/twotone_timer_24.xml new file mode 100644 index 0000000..9c4aa23 --- /dev/null +++ b/app/src/main/res/drawable/twotone_timer_24.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e8f382b..917f71c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,7 +20,7 @@ lifecycleRuntimeKtx = "2.8.0" activityCompose = "1.9.0" composeBom = "2024.05.00" core-splashscreen = "1.0.1" -lottieCompose = "6.4.0" +lottieCompose = "6.4.1" material-icons-extended = "1.6.7" navigationCompose = "2.8.0-beta01" uiCompose = "1.7.0-beta01" From a66fc58bb163700e9f96a39bc9e1e6236eabb6b8 Mon Sep 17 00:00:00 2001 From: Jules Date: Wed, 29 May 2024 22:40:35 +0200 Subject: [PATCH 2/5] Added notifications permission setup Took 15 minutes --- .../java/fr/angel/soundtap/GlobalHelper.kt | 32 +- .../java/fr/angel/soundtap/MainViewModel.kt | 1 - .../fr/angel/soundtap/ui/OnboardingScreen.kt | 46 +- .../angel/soundtap/ui/app/SettingsScreen.kt | 37 +- app/src/main/res/raw/notifications.json | 9315 +++++++++++++++++ 5 files changed, 9396 insertions(+), 35 deletions(-) create mode 100644 app/src/main/res/raw/notifications.json diff --git a/app/src/main/java/fr/angel/soundtap/GlobalHelper.kt b/app/src/main/java/fr/angel/soundtap/GlobalHelper.kt index ca21e82..48503e1 100644 --- a/app/src/main/java/fr/angel/soundtap/GlobalHelper.kt +++ b/app/src/main/java/fr/angel/soundtap/GlobalHelper.kt @@ -1,17 +1,19 @@ /* - * Copyright 2024 Angel Studio * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * * Copyright (c) 2024 Angel Studio + * * + * * Licensed under the Apache License, Version 2.0 (the "License"); + * * you may not use this file except in compliance with the License. + * * You may obtain a copy of the License at + * * + * * http://www.apache.org/licenses/LICENSE-2.0 + * * + * * Unless required by applicable law or agreed to in writing, software + * * distributed under the License is distributed on an "AS IS" BASIS, + * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * * See the License for the specific language governing permissions and + * * limitations under the License. * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. */ package fr.angel.soundtap @@ -129,4 +131,12 @@ object GlobalHelper { String.format(Locale.getDefault(), "%02d:%02d", formattedMinutes, formattedSeconds) } } + + fun openNotificationSettings(context: Context) { + val intent = + Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + .putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) + context.startActivity(intent) + } } diff --git a/app/src/main/java/fr/angel/soundtap/MainViewModel.kt b/app/src/main/java/fr/angel/soundtap/MainViewModel.kt index a7bdab0..a92f1f4 100644 --- a/app/src/main/java/fr/angel/soundtap/MainViewModel.kt +++ b/app/src/main/java/fr/angel/soundtap/MainViewModel.kt @@ -46,7 +46,6 @@ data class MainUiState( val finishedInitializations: Boolean = false, val hasNotificationListenerPermission: Boolean = false, val isBackgroundOptimizationDisabled: Boolean = false, - val isOverlayPermissionGranted: Boolean = false, val playersPackages: Set = emptySet(), val bottomSheetState: BottomSheetState = BottomSheetState.None, val bottomSheetVisible: Boolean = false, diff --git a/app/src/main/java/fr/angel/soundtap/ui/OnboardingScreen.kt b/app/src/main/java/fr/angel/soundtap/ui/OnboardingScreen.kt index 9ee04a9..698f403 100644 --- a/app/src/main/java/fr/angel/soundtap/ui/OnboardingScreen.kt +++ b/app/src/main/java/fr/angel/soundtap/ui/OnboardingScreen.kt @@ -1,20 +1,23 @@ /* - * Copyright 2024 Angel Studio * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * * Copyright (c) 2024 Angel Studio + * * + * * Licensed under the Apache License, Version 2.0 (the "License"); + * * you may not use this file except in compliance with the License. + * * You may obtain a copy of the License at + * * + * * http://www.apache.org/licenses/LICENSE-2.0 + * * + * * Unless required by applicable law or agreed to in writing, software + * * distributed under the License is distributed on an "AS IS" BASIS, + * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * * See the License for the specific language governing permissions and + * * limitations under the License. * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. */ package fr.angel.soundtap.ui +import android.Manifest import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.animateContentSize @@ -72,6 +75,9 @@ import com.airbnb.lottie.compose.LottieConstants import com.airbnb.lottie.compose.rememberLottieComposition import com.airbnb.lottie.compose.rememberLottieDynamicProperties import com.airbnb.lottie.compose.rememberLottieDynamicProperty +import com.google.accompanist.permissions.ExperimentalPermissionsApi +import com.google.accompanist.permissions.isGranted +import com.google.accompanist.permissions.rememberPermissionState import fr.angel.soundtap.GlobalHelper import fr.angel.soundtap.MainViewModel import fr.angel.soundtap.R @@ -89,7 +95,7 @@ data class OnboardingPage( val nextButtonEnabled: Boolean = true, ) -@OptIn(ExperimentalMaterial3Api::class) +@OptIn(ExperimentalMaterial3Api::class, ExperimentalPermissionsApi::class) @Composable fun OnboardingScreen( modifier: Modifier = Modifier, @@ -104,6 +110,8 @@ fun OnboardingScreen( var hasAcceptedPrivacyPolicy by rememberSaveable { mutableStateOf(false) } var hasAcceptedAccessibilityServiceConditions by rememberSaveable { mutableStateOf(false) } + val notificationsPermissionState = rememberPermissionState(Manifest.permission.POST_NOTIFICATIONS) + val sheetState = rememberModalBottomSheetState( skipPartiallyExpanded = true, @@ -199,6 +207,20 @@ fun OnboardingScreen( actionButtonLabel = "Disable Battery Optimization", actionButtonOnClick = { GlobalHelper.requestBatteryOptimization(context) }, ), + OnboardingPage( + title = "Notifications Access", + description = + AnnotatedString( + "SoundTap will post notifications for diverse purposes, such as for the sleep timer." + + "\n\nTo ensure that SoundTap functions correctly, please grant the app access to your notifications." + + "\n\nTo enable the Notifications access permission, tap the button below and enable SoundTap from the list." + + "\n\nIf you have denied the permission previously, you can enable it from the app settings.", + ), + nextButtonEnabled = notificationsPermissionState.status.isGranted, + animationImage = R.raw.notifications, + actionButtonLabel = "Grant Notifications Access", + actionButtonOnClick = { notificationsPermissionState.launchPermissionRequest() }, + ), OnboardingPage( title = "Accessibility Service", description = diff --git a/app/src/main/java/fr/angel/soundtap/ui/app/SettingsScreen.kt b/app/src/main/java/fr/angel/soundtap/ui/app/SettingsScreen.kt index b99a7f6..03f50be 100644 --- a/app/src/main/java/fr/angel/soundtap/ui/app/SettingsScreen.kt +++ b/app/src/main/java/fr/angel/soundtap/ui/app/SettingsScreen.kt @@ -1,17 +1,19 @@ /* - * Copyright 2024 Angel Studio * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * * Copyright (c) 2024 Angel Studio + * * + * * Licensed under the Apache License, Version 2.0 (the "License"); + * * you may not use this file except in compliance with the License. + * * You may obtain a copy of the License at + * * + * * http://www.apache.org/licenses/LICENSE-2.0 + * * + * * Unless required by applicable law or agreed to in writing, software + * * distributed under the License is distributed on an "AS IS" BASIS, + * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * * See the License for the specific language governing permissions and + * * limitations under the License. * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. */ package fr.angel.soundtap.ui.app @@ -50,6 +52,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.KeyboardArrowDown import androidx.compose.material.icons.filled.Settings import androidx.compose.material.icons.rounded.GridView +import androidx.compose.material.icons.rounded.NotificationsNone import androidx.compose.material.icons.rounded.Radio import androidx.compose.material.icons.rounded.StarBorder import androidx.compose.material3.Card @@ -78,6 +81,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import coil.compose.AsyncImage import coil.imageLoader +import fr.angel.soundtap.GlobalHelper import fr.angel.soundtap.MainViewModel import fr.angel.soundtap.R import fr.angel.soundtap.supportedStartMediaPlayerPackages @@ -194,6 +198,17 @@ fun SharedTransitionScope.SettingsScreen( } } + item { + SettingsItem( + title = "Notifications settings", + subtitle = "Configure the notifications that SoundTap should show", + icon = Icons.Rounded.NotificationsNone, + onClick = { + GlobalHelper.openNotificationSettings(context) + }, + ) + } + item { var supportedMediaPlayersExpanded by rememberSaveable { mutableStateOf( diff --git a/app/src/main/res/raw/notifications.json b/app/src/main/res/raw/notifications.json new file mode 100644 index 0000000..37a292b --- /dev/null +++ b/app/src/main/res/raw/notifications.json @@ -0,0 +1,9315 @@ +{ + "v": "5.7.7", + "fr": 30, + "ip": 0, + "op": 106, + "w": 1000, + "h": 1000, + "nm": "_Main Comp", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "mouth open", + "parent": 2, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "t": 19, + "s": [ + 0 + ], + "h": 1 + }, + { + "t": 20, + "s": [ + 100 + ], + "h": 1 + }, + { + "t": 80, + "s": [ + 100 + ], + "h": 1 + }, + { + "t": 81, + "s": [ + 0 + ], + "h": 1 + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 20, + "s": [ + 63.567, + 38.238, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 21, + "s": [ + 63.567, + 38.338, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 79, + "s": [ + 63.567, + 38.338, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "t": 80, + "s": [ + 63.567, + 38.238, + 0 + ] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 77.734, + 42.62, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 20, + "s": [ + { + "i": [ + [ + 6.99, + 0 + ], + [ + 2.123, + -3.666 + ], + [ + -6.13, + 0 + ], + [ + -2.63, + 3.046 + ] + ], + "o": [ + [ + -6.99, + 0 + ], + [ + 2.072, + 2.765 + ], + [ + 6.13, + 0 + ], + [ + -2.123, + -3.666 + ] + ], + "v": [ + [ + 0.007, + -19.312 + ], + [ + -15.009, + -14.72 + ], + [ + 0.03, + -9.813 + ], + [ + 15.068, + -14.689 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0 + }, + "t": 23, + "s": [ + { + "i": [ + [ + 6.99, + 0 + ], + [ + 2.123, + -3.666 + ], + [ + -6.13, + 0 + ], + [ + -3.464, + 4.514 + ] + ], + "o": [ + [ + -6.99, + 0 + ], + [ + 3.463, + 4.514 + ], + [ + 6.13, + 0 + ], + [ + -2.123, + -3.666 + ] + ], + "v": [ + [ + 0, + -6.874 + ], + [ + -15.027, + -0.564 + ], + [ + 0, + 6.874 + ], + [ + 15.027, + -0.564 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 77, + "s": [ + { + "i": [ + [ + 6.99, + 0 + ], + [ + 2.123, + -3.666 + ], + [ + -6.13, + 0 + ], + [ + -3.464, + 4.514 + ] + ], + "o": [ + [ + -6.99, + 0 + ], + [ + 3.463, + 4.514 + ], + [ + 6.13, + 0 + ], + [ + -2.123, + -3.666 + ] + ], + "v": [ + [ + 0, + -6.874 + ], + [ + -15.027, + -0.564 + ], + [ + 0, + 6.874 + ], + [ + 15.027, + -0.564 + ] + ], + "c": true + } + ] + }, + { + "t": 80, + "s": [ + { + "i": [ + [ + 6.99, + 0 + ], + [ + 2.123, + -3.666 + ], + [ + -6.13, + 0 + ], + [ + -2.63, + 3.046 + ] + ], + "o": [ + [ + -6.99, + 0 + ], + [ + 2.072, + 2.765 + ], + [ + 6.13, + 0 + ], + [ + -2.123, + -3.666 + ] + ], + "v": [ + [ + 0.007, + -19.312 + ], + [ + -15.009, + -14.72 + ], + [ + 0.03, + -9.813 + ], + [ + 15.068, + -14.689 + ] + ], + "c": true + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.898000021542, + 0.368999974868, + 0.458999992819, + 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": [ + 77.734, + 78.117 + ], + "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": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 20, + "s": [ + { + "i": [ + [ + 10.464, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 10.464 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -10.464, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 10.464 + ] + ], + "v": [ + [ + 0.031, + -0.327 + ], + [ + 0.031, + -0.327 + ], + [ + -18.939, + -15.023 + ], + [ + -18.947, + -16.36 + ], + [ + 18.947, + -16.36 + ], + [ + 18.954, + -15.023 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0 + }, + "t": 23, + "s": [ + { + "i": [ + [ + 10.464, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 10.464 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -10.464, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 10.464 + ] + ], + "v": [ + [ + 0.001, + 16.36 + ], + [ + 0.001, + 16.36 + ], + [ + -18.947, + -2.586 + ], + [ + -18.947, + -16.36 + ], + [ + 18.947, + -16.36 + ], + [ + 18.947, + -2.586 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 77, + "s": [ + { + "i": [ + [ + 10.464, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 10.464 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -10.464, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 10.464 + ] + ], + "v": [ + [ + 0.001, + 16.36 + ], + [ + 0.001, + 16.36 + ], + [ + -18.947, + -2.586 + ], + [ + -18.947, + -16.36 + ], + [ + 18.947, + -16.36 + ], + [ + 18.947, + -2.586 + ] + ], + "c": true + } + ] + }, + { + "t": 80, + "s": [ + { + "i": [ + [ + 10.464, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 10.464 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -10.464, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 10.464 + ] + ], + "v": [ + [ + 0.031, + -0.327 + ], + [ + 0.031, + -0.327 + ], + [ + -18.939, + -15.023 + ], + [ + -18.947, + -16.36 + ], + [ + 18.947, + -16.36 + ], + [ + 18.954, + -15.023 + ] + ], + "c": true + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.349000010771, + 0.250999989229, + 0.19199999641, + 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": [ + 77.733, + 68.631 + ], + "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": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 900, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "smile", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 500, + 500, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 63.567, + 28.004, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 400, + 400, + 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.333, + "y": 0 + }, + "t": 17, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -8.124, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 8.124, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -15.553, + -2.253 + ], + [ + 0, + 2.253 + ], + [ + 15.553, + -2.253 + ] + ], + "c": false + } + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 19, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -8.124, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 8.124, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -15.57, + -1.003 + ], + [ + 0.034, + -0.247 + ], + [ + 15.537, + -1.003 + ] + ], + "c": false + } + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 81, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -8.124, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 8.124, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -15.57, + -1.003 + ], + [ + 0.034, + -0.247 + ], + [ + 15.537, + -1.003 + ] + ], + "c": false + } + ] + }, + { + "t": 83, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -8.124, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 8.124, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -15.553, + -2.253 + ], + [ + 0, + 2.253 + ], + [ + 15.553, + -2.253 + ] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.349000010771, + 0.250999989229, + 0.19199999641, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 8, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 63.567, + 53.505 + ], + "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": 900, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "eyes closed", + "parent": 2, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "t": 22, + "s": [ + 0 + ], + "h": 1 + }, + { + "t": 23, + "s": [ + 100 + ], + "h": 1 + }, + { + "t": 79, + "s": [ + 100 + ], + "h": 1 + }, + { + "t": 80, + "s": [ + 0 + ], + "h": 1 + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 63.567, + 38.338, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 77.734, + 42.62, + 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 + ], + [ + 8.217, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -8.216, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 12.913, + 2.299 + ], + [ + -0.001, + -2.299 + ], + [ + -12.913, + 2.299 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.349000010771, + 0.250999989229, + 0.19199999641, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 8, + "ix": 5 + }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 122.555, + 22.299 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 8.216, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -8.216, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 12.913, + 2.299 + ], + [ + 0, + -2.299 + ], + [ + -12.913, + 2.299 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.349000010771, + 0.250999989229, + 0.19199999641, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 8, + "ix": 5 + }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 32.913, + 22.299 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 900, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "cover 02", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "t": 22, + "s": [ + 100 + ], + "h": 1 + }, + { + "t": 23, + "s": [ + 0 + ], + "h": 1 + }, + { + "t": 79, + "s": [ + 0 + ], + "h": 1 + }, + { + "t": 80, + "s": [ + 100 + ], + "h": 1 + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 500, + 500, + 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": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 20, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + -161 + ], + [ + -180, + -161 + ], + [ + -66, + -161 + ] + ], + "c": false + } + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 22, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + -77 + ], + [ + -180, + -118 + ], + [ + -66, + -76 + ] + ], + "c": false + } + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 80, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + -77 + ], + [ + -180, + -118 + ], + [ + -66, + -76 + ] + ], + "c": false + } + ] + }, + { + "t": 82, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + -161 + ], + [ + -180, + -161 + ], + [ + -66, + -161 + ] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 0.733333333333, + 0.411764735802, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 80, + "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": "Shape 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": 1, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 20, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + 84 + ], + [ + -180, + 84 + ], + [ + -66, + 84 + ] + ], + "c": false + } + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 22, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -55, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 58, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -270, + 99 + ], + [ + -180, + 24 + ], + [ + -88, + 99 + ] + ], + "c": false + } + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 80, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -55, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 58, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -270, + 99 + ], + [ + -180, + 24 + ], + [ + -88, + 99 + ] + ], + "c": false + } + ] + }, + { + "t": 82, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + 84 + ], + [ + -180, + 84 + ], + [ + -66, + 84 + ] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 0.733333333333, + 0.411764735802, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 80, + "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": "Shape 2", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 900, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "cover 01", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "t": 22, + "s": [ + 100 + ], + "h": 1 + }, + { + "t": 23, + "s": [ + 0 + ], + "h": 1 + }, + { + "t": 79, + "s": [ + 0 + ], + "h": 1 + }, + { + "t": 80, + "s": [ + 100 + ], + "h": 1 + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 500, + 500, + 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": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 20, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + -161 + ], + [ + -180, + -161 + ], + [ + -66, + -161 + ] + ], + "c": false + } + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 22, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + -77 + ], + [ + -180, + -118 + ], + [ + -66, + -76 + ] + ], + "c": false + } + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 80, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + -77 + ], + [ + -180, + -118 + ], + [ + -66, + -76 + ] + ], + "c": false + } + ] + }, + { + "t": 82, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + -161 + ], + [ + -180, + -161 + ], + [ + -66, + -161 + ] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 0.733333333333, + 0.411764735802, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 80, + "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": "Shape 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": 1, + "k": [ + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 20, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + 84 + ], + [ + -180, + 84 + ], + [ + -66, + 84 + ] + ], + "c": false + } + ] + }, + { + "i": { + "x": 0.833, + "y": 0.833 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 22, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -55, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 58, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -270, + 99 + ], + [ + -180, + 24 + ], + [ + -88, + 99 + ] + ], + "c": false + } + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 80, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -55, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 58, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -270, + 99 + ], + [ + -180, + 24 + ], + [ + -88, + 99 + ] + ], + "c": false + } + ] + }, + { + "t": 82, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -71, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 71, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -290, + 84 + ], + [ + -180, + 84 + ], + [ + -66, + 84 + ] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 0.733333333333, + 0.411764735802, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 80, + "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": "Shape 2", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 900, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "eyes open", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "t": 22, + "s": [ + 100 + ], + "h": 1 + }, + { + "t": 23, + "s": [ + 0 + ], + "h": 1 + }, + { + "t": 79, + "s": [ + 0 + ], + "h": 1 + }, + { + "t": 80, + "s": [ + 100 + ], + "h": 1 + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 500, + 500, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 63.567, + 28.004, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 400, + 400, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + -3.265 + ], + [ + 3.265, + 0 + ], + [ + 0, + 3.265 + ], + [ + -3.266, + 0 + ] + ], + "o": [ + [ + 0, + 3.265 + ], + [ + -3.266, + 0 + ], + [ + 0, + -3.265 + ], + [ + 3.265, + 0 + ] + ], + "v": [ + [ + 5.912, + 0 + ], + [ + 0.001, + 5.911 + ], + [ + -5.912, + 0 + ], + [ + 0.001, + -5.911 + ] + ], + "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": [ + 105.78, + 12.325 + ], + "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": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + -9.969 + ], + [ + 9.97, + 0 + ], + [ + 0, + 9.97 + ], + [ + -9.969, + 0 + ] + ], + "o": [ + [ + 0, + 9.97 + ], + [ + -9.969, + 0 + ], + [ + 0, + -9.969 + ], + [ + 9.97, + 0 + ] + ], + "v": [ + [ + 18.052, + -0.001 + ], + [ + 0, + 18.051 + ], + [ + -18.052, + -0.001 + ], + [ + 0, + -18.051 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.349000010771, + 0.250999989229, + 0.19199999641, + 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": [ + 108.833, + 18.302 + ], + "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": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + -3.265 + ], + [ + 3.265, + 0 + ], + [ + 0, + 3.265 + ], + [ + -3.264, + 0 + ] + ], + "o": [ + [ + 0, + 3.265 + ], + [ + -3.264, + 0 + ], + [ + 0, + -3.265 + ], + [ + 3.265, + 0 + ] + ], + "v": [ + [ + 5.912, + 0 + ], + [ + -0.001, + 5.911 + ], + [ + -5.912, + 0 + ], + [ + -0.001, + -5.911 + ] + ], + "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": [ + 15.249, + 12.325 + ], + "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": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + -9.969 + ], + [ + 9.969, + 0 + ], + [ + 0, + 9.97 + ], + [ + -9.97, + 0 + ] + ], + "o": [ + [ + 0, + 9.97 + ], + [ + -9.97, + 0 + ], + [ + 0, + -9.969 + ], + [ + 9.969, + 0 + ] + ], + "v": [ + [ + 18.051, + -0.001 + ], + [ + 0, + 18.051 + ], + [ + -18.051, + -0.001 + ], + [ + 0, + -18.051 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.349000010771, + 0.250999989229, + 0.19199999641, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 18.301, + 18.302 + ], + "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": 4, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 900, + "st": 0, + "bm": 0 + } + ] + }, + { + "id": "comp_1", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "accents 5", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 28, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 30, + "s": [ + 100 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 37, + "s": [ + 100 + ] + }, + { + "t": 42, + "s": [ + 0 + ] + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 28, + "s": [ + 354.732, + 336.184, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "t": 42, + "s": [ + 284.732, + 266.184, + 0 + ] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 88.131, + 88.95, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 28, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -17.514, + 6.664 + ] + ], + "o": [ + [ + 5.658, + -17.864 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -20.979, + 22.206 + ], + [ + 20.979, + -22.206 + ] + ], + "c": false + } + ] + }, + { + "t": 42, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -38.792, + 14.76 + ] + ], + "o": [ + [ + 12.532, + -39.567 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -46.465, + 49.184 + ], + [ + 46.465, + -49.184 + ] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 0.803921628466, + 0.592156862745, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 28, + "s": [ + 15 + ] + }, + { + "t": 42, + "s": [ + 25 + ] + } + ], + "ix": 5 + }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 88.131, + 88.95 + ], + "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": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 28, + "op": 42, + "st": 19, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "accents 4", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 21, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 23, + "s": [ + 100 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 30, + "s": [ + 100 + ] + }, + { + "t": 35, + "s": [ + 0 + ] + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 21, + "s": [ + 354.732, + 336.184, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "t": 35, + "s": [ + 284.732, + 266.184, + 0 + ] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 88.131, + 88.95, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 21, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -17.514, + 6.664 + ] + ], + "o": [ + [ + 5.658, + -17.864 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -20.979, + 22.206 + ], + [ + 20.979, + -22.206 + ] + ], + "c": false + } + ] + }, + { + "t": 35, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -38.792, + 14.76 + ] + ], + "o": [ + [ + 12.532, + -39.567 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -46.465, + 49.184 + ], + [ + 46.465, + -49.184 + ] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 0.803921628466, + 0.592156862745, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 21, + "s": [ + 15 + ] + }, + { + "t": 35, + "s": [ + 25 + ] + } + ], + "ix": 5 + }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 88.131, + 88.95 + ], + "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": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 21, + "op": 35, + "st": 12, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "accents 3", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 14, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 16, + "s": [ + 100 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 23, + "s": [ + 100 + ] + }, + { + "t": 28, + "s": [ + 0 + ] + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 14, + "s": [ + 354.732, + 336.184, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "t": 28, + "s": [ + 284.732, + 266.184, + 0 + ] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 88.131, + 88.95, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 14, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -17.514, + 6.664 + ] + ], + "o": [ + [ + 5.658, + -17.864 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -20.979, + 22.206 + ], + [ + 20.979, + -22.206 + ] + ], + "c": false + } + ] + }, + { + "t": 28, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -38.792, + 14.76 + ] + ], + "o": [ + [ + 12.532, + -39.567 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -46.465, + 49.184 + ], + [ + 46.465, + -49.184 + ] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 0.803921628466, + 0.592156862745, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 14, + "s": [ + 15 + ] + }, + { + "t": 28, + "s": [ + 25 + ] + } + ], + "ix": 5 + }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 88.131, + 88.95 + ], + "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": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 14, + "op": 28, + "st": 5, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "accents 2", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 7, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 9, + "s": [ + 100 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 16, + "s": [ + 100 + ] + }, + { + "t": 21, + "s": [ + 0 + ] + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 7, + "s": [ + 354.732, + 336.184, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "t": 21, + "s": [ + 284.732, + 266.184, + 0 + ] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 88.131, + 88.95, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 7, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -17.514, + 6.664 + ] + ], + "o": [ + [ + 5.658, + -17.864 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -20.979, + 22.206 + ], + [ + 20.979, + -22.206 + ] + ], + "c": false + } + ] + }, + { + "t": 21, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -38.792, + 14.76 + ] + ], + "o": [ + [ + 12.532, + -39.567 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -46.465, + 49.184 + ], + [ + 46.465, + -49.184 + ] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 0.803921628466, + 0.592156862745, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 7, + "s": [ + 15 + ] + }, + { + "t": 21, + "s": [ + 25 + ] + } + ], + "ix": 5 + }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 88.131, + 88.95 + ], + "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": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 7, + "op": 21, + "st": -2, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "accents 1", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 0, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 2, + "s": [ + 100 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 9, + "s": [ + 100 + ] + }, + { + "t": 14, + "s": [ + 0 + ] + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 0, + "s": [ + 354.732, + 336.184, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "t": 14, + "s": [ + 284.732, + 266.184, + 0 + ] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 88.131, + 88.95, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0.167 + }, + "t": 0, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -17.514, + 6.664 + ] + ], + "o": [ + [ + 5.658, + -17.864 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -20.979, + 22.206 + ], + [ + 20.979, + -22.206 + ] + ], + "c": false + } + ] + }, + { + "t": 14, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -38.792, + 14.76 + ] + ], + "o": [ + [ + 12.532, + -39.567 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -46.465, + 49.184 + ], + [ + 46.465, + -49.184 + ] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 0.803921628466, + 0.592156862745, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "t": 0, + "s": [ + 15 + ] + }, + { + "t": 14, + "s": [ + 25 + ] + } + ], + "ix": 5 + }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 88.131, + 88.95 + ], + "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": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 14, + "st": -9, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "face", + "parent": 5, + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 196.099, + 236.89, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 500, + 500, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 25, + 25, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "w": 1000, + "h": 1000, + "ip": 0, + "op": 900, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 0, + "nm": "Accents R", + "parent": 3, + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 80, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 500, + 500, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 500, + 500, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + -100, + 100, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "w": 1000, + "h": 1000, + "ip": 22, + "op": 64, + "st": 22, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 0, + "nm": "Accents L", + "parent": 4, + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 80, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 0, + -239, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 500, + 424, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 90, + 90, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "w": 1000, + "h": 1000, + "ip": 22, + "op": 64, + "st": 22, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 3, + "nm": "body ctrl", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 0, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.5, + "y": 0 + }, + "t": 13, + "s": [ + 500, + 663, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.1, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 18, + "s": [ + 500, + 693, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.1, + "y": 1 + }, + "o": { + "x": 0.167, + "y": 0 + }, + "t": 27, + "s": [ + 500, + 643, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.667, + "y": 1 + }, + "o": { + "x": 0.9, + "y": 0 + }, + "t": 69, + "s": [ + 500, + 633, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "i": { + "x": 0.5, + "y": 1 + }, + "o": { + "x": 0.333, + "y": 0 + }, + "t": 77, + "s": [ + 500, + 683, + 0 + ], + "to": [ + 0, + 0, + 0 + ], + "ti": [ + 0, + 0, + 0 + ] + }, + { + "t": 85, + "s": [ + 500, + 663, + 0 + ] + } + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667, + 0.667, + 0.667 + ], + "y": [ + 1, + 1, + 1 + ] + }, + "o": { + "x": [ + 0.5, + 0.5, + 0.5 + ], + "y": [ + 0, + 0, + 0 + ] + }, + "t": 14, + "s": [ + 100, + 100, + 100 + ] + }, + { + "i": { + "x": [ + 0.1, + 0.1, + 0.1 + ], + "y": [ + 1, + 1, + 1 + ] + }, + "o": { + "x": [ + 0.333, + 0.333, + 0.333 + ], + "y": [ + 0, + 0, + 0 + ] + }, + "t": 19, + "s": [ + 103, + 97, + 100 + ] + }, + { + "i": { + "x": [ + 0.1, + 0.1, + 0.1 + ], + "y": [ + 1, + 1, + 1 + ] + }, + "o": { + "x": [ + 0.167, + 0.167, + 0.167 + ], + "y": [ + 0, + 0, + 0 + ] + }, + "t": 28, + "s": [ + 100, + 100, + 100 + ] + }, + { + "i": { + "x": [ + 0.667, + 0.667, + 0.667 + ], + "y": [ + 1, + 1, + 1 + ] + }, + "o": { + "x": [ + 0.9, + 0.9, + 0.9 + ], + "y": [ + 0, + 0, + 0 + ] + }, + "t": 70, + "s": [ + 100, + 100, + 100 + ] + }, + { + "i": { + "x": [ + 0.5, + 0.5, + 0.5 + ], + "y": [ + 1, + 1, + 1 + ] + }, + "o": { + "x": [ + 0.333, + 0.333, + 0.333 + ], + "y": [ + 0, + 0, + 0 + ] + }, + "t": 78, + "s": [ + 102, + 98, + 100 + ] + }, + { + "t": 86, + "s": [ + 100, + 100, + 100 + ] + } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "ip": 0, + "op": 900, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "body", + "parent": 4, + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 19, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 24, + "s": [ + 18 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 29, + "s": [ + -17 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 34, + "s": [ + 16 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 39, + "s": [ + -14 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 44, + "s": [ + 12 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 49, + "s": [ + -10 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 54, + "s": [ + 7 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 59, + "s": [ + -4 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 64, + "s": [ + 2 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 69, + "s": [ + -1 + ] + }, + { + "t": 74, + "s": [ + 0 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 0.001, + -318.068, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 196.1, + 53.822, + 0 + ], + "ix": 1, + "l": 2 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 3.24, + -4.522 + ], + [ + -3.046, + -2.183 + ], + [ + -3.24, + 4.522 + ], + [ + 3.046, + 2.183 + ] + ], + "o": [ + [ + -3.24, + 4.522 + ], + [ + 3.046, + 2.182 + ], + [ + 3.24, + -4.522 + ], + [ + -3.047, + -2.182 + ] + ], + "v": [ + [ + -5.516, + -3.952 + ], + [ + -5.866, + 8.188 + ], + [ + 4.728, + 3.701 + ], + [ + 5.866, + -8.189 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.804000016755, + 0.592000026329, + 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": [ + 94.655, + 109.67 + ], + "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": [ + [ + 11.896, + -7.566 + ], + [ + -4.714, + -7.413 + ], + [ + -11.896, + 7.566 + ], + [ + 4.714, + 7.413 + ] + ], + "o": [ + [ + -11.896, + 7.566 + ], + [ + 4.715, + 7.412 + ], + [ + 11.895, + -7.566 + ], + [ + -4.715, + -7.412 + ] + ], + "v": [ + [ + -8.536, + -13.422 + ], + [ + -21.54, + 13.699 + ], + [ + 5.735, + 10.663 + ], + [ + 21.54, + -13.699 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.804000016755, + 0.592000026329, + 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": [ + 129.735, + 75.343 + ], + "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": "tr", + "p": { + "a": 0, + "k": [ + 193.595, + 148.441 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 193.595, + 148.441 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 19, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 24, + "s": [ + -8 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 29, + "s": [ + 7 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 34, + "s": [ + -6 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 39, + "s": [ + 5 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 44, + "s": [ + -4.5 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 49, + "s": [ + 4 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 54, + "s": [ + -3 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 59, + "s": [ + 1.5 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 64, + "s": [ + -0.75 + ] + }, + { + "t": 69, + "s": [ + 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": "reflection", + "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.254, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1.254 + ], + [ + -1.254, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -1.253 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -1.254, + 0 + ], + [ + 0, + -1.253 + ], + [ + 0, + 0 + ], + [ + 1.254, + 0 + ], + [ + 0, + 1.254 + ] + ], + "v": [ + [ + 49.342, + 2.271 + ], + [ + -49.342, + 2.271 + ], + [ + -51.613, + 0 + ], + [ + -49.342, + -2.271 + ], + [ + 49.342, + -2.271 + ], + [ + 51.613, + 0 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.936999990426, + 0.654999976065, + 0.375999989229, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 308.218, + 321.148 + ], + "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": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 3.867, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 3.867 + ], + [ + -3.866, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -3.866 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -3.866, + 0 + ], + [ + 0, + -3.866 + ], + [ + 0, + 0 + ], + [ + 3.867, + 0 + ], + [ + 0, + 3.867 + ] + ], + "v": [ + [ + 5.799, + 7 + ], + [ + -5.799, + 7 + ], + [ + -12.8, + 0 + ], + [ + -5.799, + -7 + ], + [ + 5.799, + -7 + ], + [ + 12.8, + 0 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.804000016755, + 0.592000026329, + 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": [ + 102.219, + 333.509 + ], + "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": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 3.866, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 3.867 + ], + [ + -3.866, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -3.866 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -3.866, + 0 + ], + [ + 0, + -3.866 + ], + [ + 0, + 0 + ], + [ + 3.866, + 0 + ], + [ + 0, + 3.867 + ] + ], + "v": [ + [ + 24.478, + 7 + ], + [ + -24.478, + 7 + ], + [ + -31.479, + 0 + ], + [ + -24.478, + -7 + ], + [ + 24.478, + -7 + ], + [ + 31.479, + 0 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.804000016755, + 0.592000026329, + 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": [ + 47.428, + 333.509 + ], + "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": 4, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 13.84, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -13.841 + ], + [ + 13.841, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 13.84 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 13.841, + 0 + ], + [ + 0, + 13.84 + ], + [ + 0, + 0 + ], + [ + 13.84, + 0 + ], + [ + 0, + -13.841 + ] + ], + "v": [ + [ + 8.642, + -25.061 + ], + [ + -33.703, + -25.061 + ], + [ + -8.642, + 0.001 + ], + [ + -33.703, + 25.061 + ], + [ + 8.642, + 25.061 + ], + [ + 33.703, + 0.001 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.936999990426, + 0.654999976065, + 0.375999989229, + 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": [ + 358.246, + 346.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 6", + "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": [ + [ + 13.84, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 13.841 + ], + [ + -13.84, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -13.84 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -13.84, + 0 + ], + [ + 0, + -13.84 + ], + [ + 0, + 0 + ], + [ + 13.84, + 0 + ], + [ + 0, + 13.841 + ] + ], + "v": [ + [ + 170.789, + 25.06 + ], + [ + -170.789, + 25.06 + ], + [ + -195.849, + 0 + ], + [ + -170.789, + -25.06 + ], + [ + 170.789, + -25.06 + ], + [ + 195.849, + 0 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.732999973671, + 0.411999990426, + 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": [ + 196.1, + 346.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 7", + "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": [ + [ + 1.187, + 31.172 + ], + [ + 0, + 0 + ], + [ + 72.424, + 2.726 + ], + [ + 0, + -130.151 + ], + [ + 0, + 0 + ], + [ + -20.893, + -16.415 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -2.781, + -73.018 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0.935, + 31.172 + ], + [ + 0, + 0 + ], + [ + -26.526, + -16.415 + ] + ], + "v": [ + [ + 46.67, + 79.083 + ], + [ + 42.844, + -21.351 + ], + [ + -91.004, + -155.207 + ], + [ + 10.995, + -21.351 + ], + [ + 14.008, + 79.083 + ], + [ + 48.926, + 155.207 + ], + [ + 91.004, + 155.207 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.936999990426, + 0.654999976065, + 0.375999989229, + 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": [ + 292.422, + 182.665 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 8", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -26.526, + -16.414 + ], + [ + 0, + 0 + ], + [ + -1.188, + 31.171 + ], + [ + 0, + 0 + ], + [ + -74.852, + 0 + ], + [ + -2.85, + -74.798 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 26.525, + -16.415 + ], + [ + 0, + 0 + ], + [ + 2.849, + -74.798 + ], + [ + 74.853, + 0 + ], + [ + 0, + 0 + ], + [ + 1.188, + 31.172 + ] + ], + "v": [ + [ + 187.327, + 155.263 + ], + [ + -187.327, + 155.263 + ], + [ + -142.995, + 79.141 + ], + [ + -139.168, + -21.296 + ], + [ + -0.001, + -155.262 + ], + [ + 139.167, + -21.295 + ], + [ + 142.993, + 79.138 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.732999973671, + 0.411999990426, + 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": [ + 196.099, + 182.61 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 13.84 + ], + [ + 0, + 0 + ], + [ + -13.841, + 0 + ], + [ + 0, + -13.84 + ], + [ + 0, + 0 + ], + [ + 13.84, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + -13.84 + ], + [ + 13.84, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 13.84 + ], + [ + -13.841, + 0 + ] + ], + "v": [ + [ + -25.06, + 2.037 + ], + [ + -25.06, + -2.038 + ], + [ + 0, + -27.098 + ], + [ + 25.06, + -2.038 + ], + [ + 25.06, + 2.037 + ], + [ + 0, + 27.098 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.936999990426, + 0.654999976065, + 0.375999989229, + 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": [ + 196.099, + 27.348 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 900, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "bell", + "parent": 5, + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 21, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 26, + "s": [ + 12 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 31, + "s": [ + -12 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 36, + "s": [ + 12 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 41, + "s": [ + -11.523 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 46, + "s": [ + 10.409 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 51, + "s": [ + -9.417 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 56, + "s": [ + 7.152 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 61, + "s": [ + -5.568 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 66, + "s": [ + 4.766 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 71, + "s": [ + -3.289 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 76, + "s": [ + 2.116 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 82, + "s": [ + -1.727 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 88, + "s": [ + 0.939 + ] + }, + { + "i": { + "x": [ + 0.6 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.4 + ], + "y": [ + 0 + ] + }, + "t": 94, + "s": [ + -0.682 + ] + }, + { + "t": 100, + "s": [ + 0 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 196.099, + 27.707, + 0 + ], + "ix": 2, + "l": 2 + }, + "a": { + "a": 0, + "k": [ + 50.371, + -277.692, + 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, + 27.682 + ], + [ + 27.681, + 0 + ], + [ + 0, + -27.681 + ], + [ + -27.681, + 0 + ] + ], + "o": [ + [ + 0, + -27.681 + ], + [ + -27.681, + 0 + ], + [ + 0, + 27.682 + ], + [ + 27.681, + 0 + ] + ], + "v": [ + [ + 50.121, + -0.001 + ], + [ + 0, + -50.12 + ], + [ + -50.121, + -0.001 + ], + [ + 0, + 50.12 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.936999990426, + 0.654999976065, + 0.375999989229, + 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.371, + 50.371 + ], + "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": [ + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 0, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 900, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} From 1634fc82b5a99e3bfa7f1e51f66f2697509a4e8a Mon Sep 17 00:00:00 2001 From: Jules Date: Wed, 29 May 2024 22:40:57 +0200 Subject: [PATCH 3/5] Added notifications permission setup Took 21 seconds --- .idea/copyright/Angel_Studio.xml | 6 ++++++ .idea/copyright/profiles_settings.xml | 7 +++++++ 2 files changed, 13 insertions(+) create mode 100644 .idea/copyright/Angel_Studio.xml create mode 100644 .idea/copyright/profiles_settings.xml diff --git a/.idea/copyright/Angel_Studio.xml b/.idea/copyright/Angel_Studio.xml new file mode 100644 index 0000000..bea65ca --- /dev/null +++ b/.idea/copyright/Angel_Studio.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..7aa7a33 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file From 7328751970bc5befe6d801711d734293de35da08 Mon Sep 17 00:00:00 2001 From: Jules Date: Wed, 29 May 2024 22:48:39 +0200 Subject: [PATCH 4/5] Sleep Timer Took 8 minutes --- README.md | 7 ++++--- .../soundtap/data/models/BottomSheetState.kt | 19 ++++++++++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 704906a..967951f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![Cover Image](/RESOURCES/Cover-1024x200.png) +![Cover Image](/RESOURCES/Cover-1024x200.png) # SoundTap - Android Volume Media Controller App @@ -37,6 +37,7 @@ enabling users to skip tracks, pause, and resume music playback with ease. and more. - [x] **Auto-Play**: Automatically start media playback when the volume buttons are long-pressed or when a headset is connected. +- [x] **Sleep Timer**: Set a timer to stop playback after a certain period. - [x] **Customizable Haptics**: Adjust the haptic feedback intensity to suit your preferences. - [x] **Customizable Delays**: Adjust the long-press delay to fit your preferred interaction speed. - [ ] **Localization**: Available in multiple languages for a global audience. @@ -81,8 +82,8 @@ Open the project in Android Studio and build the APK file to install on your And 1. Launch the SoundTap app on your Android device. 2. Follow the on-screen instructions to grant necessary permissions. 3. Use the volume buttons on your device to control media playback: - - Long-press volume up/down to skip tracks. - - Long-press both volume buttons to pause/resume playback. + - Long-press volume up/down to skip tracks. + - Long-press both volume buttons to pause/resume playback. 4. Customize controls as desired in the app settings. ## :hammer_and_wrench: Tech Stack diff --git a/app/src/main/java/fr/angel/soundtap/data/models/BottomSheetState.kt b/app/src/main/java/fr/angel/soundtap/data/models/BottomSheetState.kt index c50e0b9..9ddbe33 100644 --- a/app/src/main/java/fr/angel/soundtap/data/models/BottomSheetState.kt +++ b/app/src/main/java/fr/angel/soundtap/data/models/BottomSheetState.kt @@ -1,3 +1,21 @@ +/* + * + * * Copyright (c) 2024 Angel Studio + * * + * * Licensed under the Apache License, Version 2.0 (the "License"); + * * you may not use this file except in compliance with the License. + * * You may obtain a copy of the License at + * * + * * http://www.apache.org/licenses/LICENSE-2.0 + * * + * * Unless required by applicable law or agreed to in writing, software + * * distributed under the License is distributed on an "AS IS" BASIS, + * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * * See the License for the specific language governing permissions and + * * limitations under the License. + * + */ + package fr.angel.soundtap.data.models import androidx.compose.foundation.layout.Column @@ -31,7 +49,6 @@ sealed class BottomSheetState( content = { state -> val timerChoices: Map = mapOf( - "15 seconds" to 15 * 1000, "5 minutes" to 5 * 60 * 1000, "10 minutes" to 10 * 60 * 1000, "15 minutes" to 15 * 60 * 1000, From 499b4ebf0aa5f81526018563bd546115f8059ba5 Mon Sep 17 00:00:00 2001 From: Jules Date: Wed, 29 May 2024 22:48:53 +0200 Subject: [PATCH 5/5] Sleep Timer Took 4 seconds --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f1757ee..94a7961 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -23,7 +23,7 @@ android { applicationId = "fr.angel.soundtap" minSdk = 30 targetSdk = 34 - versionCode = 25 + versionCode = 27 versionName = "1.0.8" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"