diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e872d4b --- /dev/null +++ b/.gitignore @@ -0,0 +1,254 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx + +# Created by https://www.gitignore.io/api/java,kotlin,android,androidstudio +# Edit at https://www.gitignore.io/?templates=java,kotlin,android,androidstudio + +### Android ### +# Built application files +*.apk +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml +.idea + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +*.jks +*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Freelinez +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ + +### Android Patch ### +gen-external-apklibs +output.json + +# Replacement of .externalNativeBuild directories introduced +# with Android Studio 3.5. +.cxx/ + +### Java ### +# Compiled class file + +# Log file + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### Kotlin ### +# Compiled class file + +# Log file + +# BlueJ files + +# Mobile Tools for Java (J2ME) + +# Package Files # + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml + +### AndroidStudio ### +# Covers files to be ignored for android development using Android Studio. + +# Built application files + +# Files for the ART/Dalvik VM + +# Java class files + +# Generated files + +# Gradle files +.gradle + +# Signing files +.signing/ + +# Local configuration file (sdk path, etc) + +# Proguard folder generated by Eclipse + +# Log Files + +# Android Studio +/*/build/ +/*/local.properties +/*/out +/*/*/build +/*/*/production +*.ipr +*~ +*.swp + +# Android Patch + +# External native build folder generated in Android Studio 2.2 and later + +# NDK +obj/ + +# IntelliJ IDEA +*.iws +/out/ + +# User-specific configurations +.idea/caches/ +.idea/libraries/ +.idea/shelf/ +.idea/.name +.idea/compiler.xml +.idea/copyright/profiles_settings.xml +.idea/encodings.xml +.idea/misc.xml +.idea/scopes/scope_settings.xml +.idea/vcs.xml +.idea/jsLibraryMappings.xml +.idea/datasources.xml +.idea/dataSources.ids +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml + +# OS-specific files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Legacy Eclipse project files +.classpath +.project +.cproject +.settings/ + +# Mobile Tools for Java (J2ME) + +# Package Files # + +# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml) + +## Plugin-specific files: + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Mongo Explorer plugin +.idea/mongoSettings.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +### AndroidStudio Patch ### + +!/gradle/wrapper/gradle-wrapper.jar + +# End of https://www.gitignore.io/api/java,kotlin,android,androidstudio + +settings.gradle \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..44a8b8a --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,141 @@ +apply plugin: 'com.android.application' + +apply plugin: 'io.fabric' + +apply plugin: 'kotlin-android' + +apply plugin: 'kotlin-android-extensions' + +apply plugin: 'kotlin-kapt' + + +android { + compileSdkVersion 29 + buildToolsVersion "29.0.1" + defaultConfig { + applicationId "com.hyden.booklibrary" + minSdkVersion 23 + targetSdkVersion 29 + versionCode 1 + versionName "1.0.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + debuggable false + shrinkResources true + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + buildConfigField("String", "BASEURL", "\"https://www.aladin.co.kr/ttb/api/\"") + buildConfigField("String", "TTBKEY", "\"ttbeoeo281259003\"") + buildConfigField("String", "ADMOBID", "\"ca-app-pub-8639043459373611~4059668627\"") + buildConfigField("String", "ADMOB_BANNER", "\"ca-app-pub-8639043459373611/3704251880\"") + buildConfigField("String", "ADMOB_FULL", "\"ca-app-pub-8639043459373611/6614513921\"") + manifestPlaceholders = [crashlytics_enabled: true, admob_id: "ca-app-pub-8639043459373611~4059668627"] + } + debug { + minifyEnabled false + buildConfigField("String", "BASEURL", "\"https://www.aladin.co.kr/ttb/api/\"") + buildConfigField("String", "TTBKEY", "\"ttbeoeo281259003\"") + buildConfigField("String", "ADMOBID", "\"ca-app-pub-8639043459373611~4059668627\"") + buildConfigField("String", "ADMOB_BANNER", "\"ca-app-pub-3940256099942544/6300978111\"") + buildConfigField("String", "ADMOB_FULL", "\"ca-app-pub-3940256099942544/1033173712\"") + manifestPlaceholders = [crashlytics_enabled: false, admob_id: "ca-app-pub-8639043459373611~4059668627"] + } + } + lintOptions { + checkReleaseBuilds false + // Or, if you prefer, you can continue to check for errors in release builds, + // but continue the build even when errors are found: + abortOnError false + } + dataBinding { + enabled = true + } + androidExtensions { + experimental = true + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +// sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.core:core-ktx:1.1.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + + api project(':base') + + + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha03' + implementation 'com.google.android.material:material:1.2.0-alpha02' + implementation 'androidx.preference:preference:1.1.0' + +// koin + def koin_version = '2.0.1' + implementation "org.koin:koin-androidx-scope:$koin_version" + implementation "org.koin:koin-androidx-viewmodel:$koin_version" + implementation "org.koin:koin-androidx-ext:$koin_version" + + // Retrofit + def retrofit_version = "2.6.0" + def logging_version = "3.9.0" + implementation "com.squareup.retrofit2:retrofit:$retrofit_version" + implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" + implementation "com.squareup.okhttp3:logging-interceptor:$logging_version" + + // Rx + def rxjava_version = '2.2.10' + def rxkotlin_version = '2.3.0' + implementation "io.reactivex.rxjava2:rxjava:$rxjava_version" + implementation "io.reactivex.rxjava2:rxkotlin:$rxkotlin_version" + implementation "io.reactivex.rxjava2:rxandroid:2.1.1" + implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0' + + // Room + def room_version = "2.2.2" + implementation "androidx.room:room-runtime:$room_version" + implementation "androidx.room:room-rxjava2:$room_version" + implementation "androidx.room:room-ktx:$room_version" + implementation "androidx.room:room-guava:$room_version" + kapt "androidx.room:room-compiler:$room_version" + + // Firebase + def firebase_analytics_version = "17.2.1" + def firebase_firestore_version = "21.3.1" + def firebase_version = "19.2.0" + implementation "com.crashlytics.sdk.android:crashlytics:2.10.1" + implementation "com.google.firebase:firebase-core:$firebase_analytics_version" + implementation "com.google.firebase:firebase-config:19.1.4" + implementation 'com.google.android.gms:play-services-ads:19.1.0' + implementation 'com.google.firebase:firebase-ads:19.1.0' + implementation "com.google.firebase:firebase-analytics:$firebase_analytics_version" + implementation "com.google.firebase:firebase-database:$firebase_version" + implementation "com.google.firebase:firebase-auth:$firebase_version" + implementation "com.google.firebase:firebase-firestore:$firebase_firestore_version" + implementation "com.google.firebase:firebase-auth:$firebase_version" + implementation 'com.google.android.gms:play-services-auth:17.0.0' + + //FirebaseStorage + def firebase_firestorage = "19.1.1" + implementation "com.google.firebase:firebase-storage:$firebase_firestorage" + + // Lottie + def lottie_version = "3.3.1" + implementation "com.airbnb.android:lottie:$lottie_version" + + // Image Cropping Library + // https://github.com/ArthurHub/Android-Image-Cropper + implementation "com.theartofdev.edmodo:android-image-cropper:2.8.+" +} + +apply plugin: 'com.google.gms.google-services' diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..03bb118 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,95 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +#retofit +##---------------Begin: proguard configuration for Retofit ---------- +# Platform calls Class.forName on types which do not exist on Android to determine platform. +-dontnote retrofit2.Platform +# Platform used when running on Java 8 VMs. Will not be used at runtime. +-dontwarn retrofit2.Platform$Java8 +# Retain generic type information for use by reflection by converters and adapters. +-keepattributes Signature +# Retain declared checked exceptions for use by a Proxy instance. +-keepattributes Exceptions +#jsoup +-keep public class org.jsoup.**{ + public *; +} +##---------------End: proguard configuration for Retofit ---------- + +#gson +##---------------Begin: proguard configuration for Gson ---------- +# Gson uses generic type information stored in a class file when working with fields. Proguard +# removes such information by default, so configure it to keep all of it. +-keep class com.hyden.booklibrary.data.remote.network.response.** { *; } +-keep class com.hyden.booklibrary.data.local.** { *; } +-keep class com.hyden.booklibrary.data.model.** { *; } + +-keepattributes Signature + +# For using GSON @Expose annotation +-keepattributes *Annotation* + +# Gson specific classes +-dontwarn sun.misc.** +#-keep class com.google.gson.stream.** { *; } + +# Application classes that will be serialized/deserialized over Gson +-keep class com.google.gson.examples.android.model.** { *; } + +# Prevent proguard from stripping interface information from TypeAdapterFactory, +# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter) +-keep class * implements com.google.gson.TypeAdapterFactory +-keep class * implements com.google.gson.JsonSerializer +-keep class * implements com.google.gson.JsonDeserializer + +##---------------End: proguard configuration for Gson ---------- + +#admob +##---------------Begin: proguard configuration for Admob ---------- +-keep public class com.google.android.gms.ads.**{ + public *; +} +-keep public class com.google.ads.**{ + public *; +} +##---------------End: proguard configuration for Admob ---------- + +# glide +##---------------Begin: proguard configuration for Glide ---------- +-keep public class * implements com.bumptech.glide.module.GlideModule +-keep class * extends com.bumptech.glide.module.AppGlideModule { + (...); +} +-keep public enum com.bumptech.glide.load.ImageHeaderParser$** { + **[] $VALUES; + public *; +} +-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder { + *** rewind(); +} +##---------------End: proguard configuration for Glide ---------- + +##---------------Begin: proguard configuration for Room ---------- +-keep class * extends androidx.room.RoomDatabase +-dontwarn androidx.room.paging.** +##---------------End: proguard configuration for Room ---------- \ No newline at end of file diff --git a/app/src/androidTest/java/com/hyden/booklibrary/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/hyden/booklibrary/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..2d6198b --- /dev/null +++ b/app/src/androidTest/java/com/hyden/booklibrary/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.hyden.booklibrary + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.hyden.booklibrary", appContext.packageName) + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..9753eaf --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/book_stack.json b/app/src/main/assets/book_stack.json new file mode 100644 index 0000000..6d14ec0 --- /dev/null +++ b/app/src/main/assets/book_stack.json @@ -0,0 +1,15448 @@ +{ + "v": "5.5.9", + "fr": 30, + "ip": 0, + "op": 120, + "w": 126, + "h": 200, + "nm": "shutterstock", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "6 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 49, + "s": [ + -20 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 67.087, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 69.065, + "s": [ + 4 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 71.044, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 73.021, + "s": [ + 1 + ] + }, + { + "t": 75, + "s": [ + 0 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 1, + "y": 0.999 + }, + "o": { + "x": 0.9, + "y": 0 + }, + "t": 31.2, + "s": [ + 36.079, + -163.267, + 0 + ], + "to": [ + 0.167, + 36.833, + 0 + ], + "ti": [ + -0.167, + -36.833, + 0 + ] + }, + { + "t": 69, + "s": [ + 37.079, + 57.733, + 0 + ] + } + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 63.249, + 26.544, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + -100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0.803, + 1.103 + ], + [ + -2.142, + 0.405 + ], + [ + -6.545, + -0.01 + ], + [ + -4.96, + -7.612 + ], + [ + 9.605, + -0.517 + ], + [ + 1.809, + -0.223 + ], + [ + -4.04, + -0.116 + ], + [ + -7.313, + 1.379 + ], + [ + 0.16, + 8.631 + ], + [ + 13.118, + -0.237 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -0.803, + -1.104 + ], + [ + 2.143, + -0.406 + ], + [ + 6.544, + 0.01 + ], + [ + 4.96, + 7.612 + ], + [ + -18.097, + 0.975 + ], + [ + -1.808, + 0.223 + ], + [ + 4.039, + 0.116 + ], + [ + 7.312, + -1.378 + ], + [ + -0.134, + -7.345 + ], + [ + -4.955, + 0.089 + ] + ], + "v": [ + [ + -30.988, + -8.193 + ], + [ + -36.991, + -8.148 + ], + [ + -35.008, + -10.133 + ], + [ + 9.622, + -11.852 + ], + [ + 34.476, + -6.268 + ], + [ + 23.684, + 12.658 + ], + [ + -37.629, + 13.657 + ], + [ + -33.933, + 11.628 + ], + [ + -2.585, + 10.958 + ], + [ + 10.057, + -0.608 + ], + [ + -4.827, + -9.831 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.813, + "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": [ + 40.249, + 14.693 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0.803, + 1.103 + ], + [ + -2.142, + 0.405 + ], + [ + -6.545, + -0.01 + ], + [ + -4.96, + -7.612 + ], + [ + 9.605, + -0.517 + ], + [ + 1.809, + -0.223 + ], + [ + -4.04, + -0.116 + ], + [ + -7.313, + 1.379 + ], + [ + 0.16, + 8.631 + ], + [ + 13.118, + -0.237 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -0.803, + -1.104 + ], + [ + 2.143, + -0.406 + ], + [ + 6.544, + 0.01 + ], + [ + 4.96, + 7.612 + ], + [ + -18.097, + 0.975 + ], + [ + -1.808, + 0.223 + ], + [ + 4.039, + 0.116 + ], + [ + 7.312, + -1.378 + ], + [ + -0.134, + -7.345 + ], + [ + -4.955, + 0.089 + ] + ], + "v": [ + [ + -30.988, + -8.193 + ], + [ + -36.991, + -8.148 + ], + [ + -35.008, + -10.133 + ], + [ + 9.622, + -11.852 + ], + [ + 34.476, + -6.268 + ], + [ + 23.684, + 12.658 + ], + [ + -37.629, + 13.657 + ], + [ + -33.933, + 11.628 + ], + [ + -2.585, + 10.958 + ], + [ + 10.057, + -0.608 + ], + [ + -4.827, + -9.831 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.943467742322, + 0.742465209961, + 0.144897879806, + 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": [ + 40.249, + 14.693 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 7.776, + -1.474 + ] + ], + "v": [ + [ + 19.234, + 0.712 + ], + [ + 16.819, + -2.147 + ], + [ + -19.234, + -0.707 + ], + [ + -17.427, + 2.148 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 28.689, + 6.054 + ], + "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": 20, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -3.872, + -0.058 + ], + [ + 3.872, + -0.268 + ], + [ + -3.855, + 0.268 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 14.535, + 24.145 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 4", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -3.867, + 0.186 + ], + [ + 3.867, + -0.186 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.367861250335, + 0.759971528895, + 0.856421317306, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 14.539, + 24.064 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 5", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 5.87, + 0.163 + ], + [ + -5.87, + 0.085 + ], + [ + 5.867, + -0.163 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 42.978, + 19.899 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 6", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 5.869, + -0.043 + ], + [ + -5.869, + 0.043 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.367861250335, + 0.759971528895, + 0.856421317306, + 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": [ + 42.977, + 19.941 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 7", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 12.754, + -0.074 + ], + [ + -12.754, + 0.886 + ], + [ + 12.711, + -0.886 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 37.861, + 16.535 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 8", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 12.743, + -0.683 + ], + [ + -12.743, + 0.683 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.367861250335, + 0.759971528895, + 0.856421317306, + 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": [ + 37.85, + 16.738 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 14.694, + -0.327 + ], + [ + -14.694, + 0.652 + ], + [ + 14.681, + -0.652 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 35.526, + 12.97 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 10, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 14.691, + -0.571 + ], + [ + -14.691, + 0.571 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.367861250335, + 0.759971528895, + 0.856421317306, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 35.523, + 13.05 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 11", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 11, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 11.714, + 0.039 + ], + [ + -11.714, + 0.773 + ], + [ + 11.674, + -0.773 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 37.232, + 8.632 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 12", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 12, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 11.704, + -0.571 + ], + [ + -11.704, + 0.571 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.367861250335, + 0.759971528895, + 0.856421317306, + 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": [ + 37.222, + 8.835 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 13", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 13, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 14.857, + -10.306 + ], + [ + -5.179, + 3.695 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -3.689, + 2.559 + ], + [ + 5.179, + -3.696 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -21.171, + -11.331 + ], + [ + -21.258, + 10.654 + ], + [ + 19.768, + 7.938 + ], + [ + 19.615, + -13.214 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.813, + "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": [ + 29.109, + 16.062 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 14", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 14, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 14.857, + -10.306 + ], + [ + -5.179, + 3.695 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -3.689, + 2.559 + ], + [ + 5.179, + -3.696 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -21.171, + -11.331 + ], + [ + -21.258, + 10.654 + ], + [ + 19.768, + 7.938 + ], + [ + 19.615, + -13.214 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.999905515185, + 0.700126498353, + 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": [ + 29.109, + 16.062 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 15", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 15, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 31, + "op": 468, + "st": 18, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "5 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 44, + "s": [ + 20 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 62.956, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 65.435, + "s": [ + 4 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 67.913, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 70.392, + "s": [ + 1 + ] + }, + { + "t": 72.869140625, + "s": [ + 0 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 1, + "y": 0.999 + }, + "o": { + "x": 0.9, + "y": 0 + }, + "t": 26.2, + "s": [ + 74.679, + -143.793, + 0 + ], + "to": [ + 0.167, + 36.833, + 0 + ], + "ti": [ + -0.167, + -36.833, + 0 + ] + }, + { + "t": 64, + "s": [ + 75.679, + 77.207, + 0 + ] + } + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 82.365, + 20.673, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 89, + 89, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -0.006, + 1.951 + ], + [ + 0, + 0 + ], + [ + -3.801, + 0.126 + ], + [ + -10.16, + 0.049 + ], + [ + 0.572, + -3.407 + ], + [ + 2.656, + -0.128 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -13.226, + 0.25 + ], + [ + 2.097, + 1.351 + ], + [ + 9.635, + -0.204 + ] + ], + "o": [ + [ + 0.007, + -1.959 + ], + [ + 0, + 0 + ], + [ + 3.801, + -0.126 + ], + [ + 2.282, + -0.012 + ], + [ + -0.653, + 3.885 + ], + [ + -2.657, + 0.128 + ], + [ + -6.63, + 0.759 + ], + [ + 0, + 0 + ], + [ + 6.923, + -0.131 + ], + [ + -3.47, + -2.235 + ], + [ + -4.897, + 0.104 + ] + ], + "v": [ + [ + -22.084, + -7.399 + ], + [ + -18.009, + -10.221 + ], + [ + -5.188, + -9.414 + ], + [ + 20.916, + -10.857 + ], + [ + 24.406, + -0.513 + ], + [ + 18.22, + 9.776 + ], + [ + -18.348, + 10.109 + ], + [ + -19.814, + 8.482 + ], + [ + 15.037, + 6.835 + ], + [ + 19.363, + -7.32 + ], + [ + -1.608, + -6.378 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.813, + "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": [ + 25.791, + 11.882 + ], + "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.006, + 1.951 + ], + [ + 0, + 0 + ], + [ + -3.801, + 0.126 + ], + [ + -10.16, + 0.049 + ], + [ + 0.572, + -3.407 + ], + [ + 2.656, + -0.128 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -13.226, + 0.25 + ], + [ + 2.097, + 1.351 + ], + [ + 9.635, + -0.204 + ] + ], + "o": [ + [ + 0.007, + -1.959 + ], + [ + 0, + 0 + ], + [ + 3.801, + -0.126 + ], + [ + 2.282, + -0.012 + ], + [ + -0.653, + 3.885 + ], + [ + -2.657, + 0.128 + ], + [ + -6.63, + 0.759 + ], + [ + 0, + 0 + ], + [ + 6.923, + -0.131 + ], + [ + -3.47, + -2.235 + ], + [ + -4.897, + 0.104 + ] + ], + "v": [ + [ + -22.084, + -7.399 + ], + [ + -18.009, + -10.221 + ], + [ + -5.188, + -9.414 + ], + [ + 20.916, + -10.857 + ], + [ + 24.406, + -0.513 + ], + [ + 18.22, + 9.776 + ], + [ + -18.348, + 10.109 + ], + [ + -19.814, + 8.482 + ], + [ + 15.037, + 6.835 + ], + [ + 19.363, + -7.32 + ], + [ + -1.608, + -6.378 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.441715464872, + 0.772477393057, + 0.844473505955, + 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": [ + 25.791, + 11.882 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -13.084, + 1.422 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 4.506, + -0.49 + ] + ], + "v": [ + [ + 18.902, + 0.714 + ], + [ + 17.478, + -2.419 + ], + [ + -18.902, + -0.68 + ], + [ + -17.643, + 2.42 + ], + [ + 11.682, + 0.76 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 28.421, + 4.765 + ], + "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": 20, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 12.715, + -0.533 + ], + [ + -12.715, + 1.181 + ], + [ + 12.663, + -1.181 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 35.471, + 8.583 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 4", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 12.702, + -1.02 + ], + [ + -12.702, + 1.02 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.367861250335, + 0.759971528895, + 0.856421317306, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 35.459, + 8.746 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 5", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 15.847, + -0.57 + ], + [ + -15.847, + 1.219 + ], + [ + 15.804, + -1.219 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 31.289, + 14.951 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 6", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 15.836, + -1.057 + ], + [ + -15.836, + 1.057 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.367861250335, + 0.759971528895, + 0.856421317306, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 31.278, + 15.114 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 7", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -4.328, + -2.246 + ], + [ + 2.677, + -1.523 + ], + [ + 0, + 0 + ], + [ + 5.467, + -0.577 + ] + ], + "o": [ + [ + 4.328, + 2.246 + ], + [ + -2.676, + 1.523 + ], + [ + 0, + 0 + ], + [ + -32.428, + 3.419 + ] + ], + "v": [ + [ + -19.585, + -8.113 + ], + [ + -17.333, + 8.836 + ], + [ + 17.713, + 7.464 + ], + [ + 18.445, + -9.286 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.813, + "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": [ + 27.453, + 11.632 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 8", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -4.328, + -2.246 + ], + [ + 2.677, + -1.523 + ], + [ + 0, + 0 + ], + [ + 5.467, + -0.577 + ] + ], + "o": [ + [ + 4.328, + 2.246 + ], + [ + -2.676, + 1.523 + ], + [ + 0, + 0 + ], + [ + -32.428, + 3.419 + ] + ], + "v": [ + [ + -19.585, + -8.113 + ], + [ + -17.333, + 8.836 + ], + [ + 17.713, + 7.464 + ], + [ + 18.445, + -9.286 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.999905515185, + 0.700126498353, + 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": [ + 27.453, + 11.632 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.036, + -7.319 + ], + [ + 13.593, + -0.957 + ], + [ + 0, + 0 + ], + [ + -4.487, + 11.166 + ], + [ + 1.231, + 1.11 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0.024, + 4.998 + ], + [ + -15.6, + 1.099 + ], + [ + 2.393, + -3.9 + ], + [ + 1.659, + -4.129 + ], + [ + -1.232, + -1.11 + ] + ], + "v": [ + [ + -24.325, + -12.393 + ], + [ + 19.838, + -12.607 + ], + [ + 27.393, + -4.012 + ], + [ + 11.988, + 8.215 + ], + [ + -27.417, + 8.407 + ], + [ + -21.938, + 1.441 + ], + [ + -21.326, + -10.093 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.813, + "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": [ + 68.713, + 13.42 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 10, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -0.036, + -7.319 + ], + [ + 13.593, + -0.957 + ], + [ + 0, + 0 + ], + [ + -4.487, + 11.166 + ], + [ + 1.231, + 1.11 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0.024, + 4.998 + ], + [ + -15.6, + 1.099 + ], + [ + 2.393, + -3.9 + ], + [ + 1.659, + -4.129 + ], + [ + -1.232, + -1.11 + ] + ], + "v": [ + [ + -24.325, + -12.393 + ], + [ + 19.838, + -12.607 + ], + [ + 27.393, + -4.012 + ], + [ + 11.988, + 8.215 + ], + [ + -27.417, + 8.407 + ], + [ + -21.938, + 1.441 + ], + [ + -21.326, + -10.093 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.368031640146, + 0.666847917145, + 0.802989645565, + 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": [ + 68.713, + 13.42 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 11", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 11, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 26, + "op": 463, + "st": 13, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "4 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 38, + "s": [ + -20 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 58, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 60.479, + "s": [ + 4 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 62.956, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 65.435, + "s": [ + 1 + ] + }, + { + "t": 67.9130859375, + "s": [ + 0 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 1, + "y": 0.999 + }, + "o": { + "x": 0.9, + "y": 0 + }, + "t": 20.2, + "s": [ + 20.264, + -122.743, + 0 + ], + "to": [ + 0.167, + 36.833, + 0 + ], + "ti": [ + -0.167, + -36.833, + 0 + ] + }, + { + "t": 58, + "s": [ + 21.264, + 98.257, + 0 + ] + } + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 8.494, + 22.501, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + -0.009, + -0.851 + ], + [ + 11.38, + 0.786 + ], + [ + -0.549, + 7.955 + ], + [ + -6.156, + 0.144 + ], + [ + -0.525, + -2.197 + ], + [ + 1.212, + 0.486 + ], + [ + 3.06, + -2.022 + ], + [ + -3.683, + -3.592 + ], + [ + -10.948, + 1.365 + ] + ], + "o": [ + [ + 2.052, + 0.478 + ], + [ + 0.008, + 0.85 + ], + [ + -13.92, + -0.961 + ], + [ + 0.471, + -6.842 + ], + [ + 6.157, + -0.144 + ], + [ + 0.408, + 1.708 + ], + [ + 0, + 0 + ], + [ + -3.06, + 2.022 + ], + [ + 3.684, + 3.591 + ], + [ + 3.276, + -0.409 + ] + ], + "v": [ + [ + 16.281, + 8.761 + ], + [ + 18.439, + 10.736 + ], + [ + 0.29, + 11.268 + ], + [ + -18.503, + -1.489 + ], + [ + -9.049, + -11.91 + ], + [ + 18.644, + -4.665 + ], + [ + 16.589, + -3.666 + ], + [ + -11.919, + -9.751 + ], + [ + -14.549, + 4.397 + ], + [ + 12.008, + 10.07 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.813, + "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": [ + 74.123, + 12.867 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + -0.009, + -0.851 + ], + [ + 11.38, + 0.786 + ], + [ + -0.549, + 7.955 + ], + [ + -6.156, + 0.144 + ], + [ + -0.525, + -2.197 + ], + [ + 1.212, + 0.486 + ], + [ + 3.06, + -2.022 + ], + [ + -3.683, + -3.592 + ], + [ + -10.948, + 1.365 + ] + ], + "o": [ + [ + 2.052, + 0.478 + ], + [ + 0.008, + 0.85 + ], + [ + -13.92, + -0.961 + ], + [ + 0.471, + -6.842 + ], + [ + 6.157, + -0.144 + ], + [ + 0.408, + 1.708 + ], + [ + 0, + 0 + ], + [ + -3.06, + 2.022 + ], + [ + 3.684, + 3.591 + ], + [ + 3.276, + -0.409 + ] + ], + "v": [ + [ + 16.281, + 8.761 + ], + [ + 18.439, + 10.736 + ], + [ + 0.29, + 11.268 + ], + [ + -18.503, + -1.489 + ], + [ + -9.049, + -11.91 + ], + [ + 18.644, + -4.665 + ], + [ + 16.589, + -3.666 + ], + [ + -11.919, + -9.751 + ], + [ + -14.549, + 4.397 + ], + [ + 12.008, + 10.07 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.91113131654, + 0.219668968051, + 0.296794726802, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 74.123, + 12.867 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 2.237, + -1.583 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -14.129, + -3.71 + ], + [ + -14.867, + -2.346 + ], + [ + 13.135, + 3.947 + ], + [ + 14.867, + 1.622 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 75.512, + 5.954 + ], + "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": 20, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -5.889, + -1.166 + ], + [ + 6.03, + 1.166 + ], + [ + -6.03, + -0.276 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 64.391, + 9.77 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 4", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -5.995, + -0.943 + ], + [ + 5.995, + 0.943 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.300292190851, + 0.673416556564, + 0.151154536827, + 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": [ + 64.426, + 9.992 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 5", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1.984, + -0.512 + ], + [ + 2.094, + 0.512 + ], + [ + -2.094, + 0.13 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 61.772, + 5.296 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 6", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -2.066, + -0.352 + ], + [ + 2.066, + 0.352 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.300292190851, + 0.673416556564, + 0.151154536827, + 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": [ + 61.8, + 5.456 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 7", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 7.693, + 0.969 + ], + [ + -7.73, + -0.969 + ], + [ + 7.73, + 0.646 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 78.129, + 14.21 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 8", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 7.721, + 0.887 + ], + [ + -7.721, + -0.887 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.300292190851, + 0.673416556564, + 0.151154536827, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 78.12, + 14.13 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 6.347, + 1.06 + ], + [ + -6.463, + -1.06 + ], + [ + 6.463, + 0.167 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 80.025, + 18.349 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 10, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 6.434, + 0.837 + ], + [ + -6.434, + -0.837 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.300292190851, + 0.673416556564, + 0.151154536827, + 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": [ + 79.997, + 18.126 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 11", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 11, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1.734, + -2.419 + ], + [ + -1.851, + 1.667 + ], + [ + 0.046, + 0.387 + ], + [ + 1.717, + 2.419 + ], + [ + 1.851, + -2.268 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.943467742322, + 0.742465209961, + 0.144897879806, + 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": [ + 62.959, + 12.319 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 12", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 12, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0.832, + -1.562 + ], + [ + -0.249, + -1.987 + ], + [ + -2.358, + -1.014 + ], + [ + 8.723, + 6.228 + ], + [ + -3.819, + 3.654 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -0.831, + 1.562 + ], + [ + 0.377, + 3.005 + ], + [ + 2.357, + 1.015 + ], + [ + -3.897, + -2.783 + ], + [ + 3.821, + -3.655 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 15.166, + -6.695 + ], + [ + 15.003, + -4.568 + ], + [ + 12.226, + 2.367 + ], + [ + 16.68, + 8.708 + ], + [ + -11.883, + 6.081 + ], + [ + -15.218, + -8.654 + ], + [ + -4.329, + -11.979 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.813, + "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": [ + 73.525, + 13.881 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 13", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 13, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0.832, + -1.562 + ], + [ + -0.249, + -1.987 + ], + [ + -2.358, + -1.014 + ], + [ + 8.723, + 6.228 + ], + [ + -3.819, + 3.654 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + -0.831, + 1.562 + ], + [ + 0.377, + 3.005 + ], + [ + 2.357, + 1.015 + ], + [ + -3.897, + -2.783 + ], + [ + 3.821, + -3.655 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 15.166, + -6.695 + ], + [ + 15.003, + -4.568 + ], + [ + 12.226, + 2.367 + ], + [ + 16.68, + 8.708 + ], + [ + -11.883, + 6.081 + ], + [ + -15.218, + -8.654 + ], + [ + -4.329, + -11.979 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.999905515185, + 0.700126498353, + 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": [ + 73.525, + 13.881 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 14", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 14, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + -0.087, + 8.488 + ], + [ + -1.439, + 0.34 + ], + [ + -4.636, + 1.397 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0.087, + -8.488 + ], + [ + 1.438, + -0.34 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -24.729, + 11.678 + ], + [ + -34.531, + -0.023 + ], + [ + -28.421, + -11.137 + ], + [ + 29.106, + -11.678 + ], + [ + 34.617, + 10.689 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.813, + "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": [ + 35.43, + 12.617 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 15", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 15, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + -0.087, + 8.488 + ], + [ + -1.439, + 0.34 + ], + [ + -4.636, + 1.397 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0.087, + -8.488 + ], + [ + 1.438, + -0.34 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -24.729, + 11.678 + ], + [ + -34.531, + -0.023 + ], + [ + -28.421, + -11.137 + ], + [ + 29.106, + -11.678 + ], + [ + 34.617, + 10.689 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.939322378121, + 0, + 0.023757904651, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 35.43, + 12.617 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 16", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 16, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 20, + "op": 457, + "st": 7, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "3 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 33, + "s": [ + 20 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 53, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 56, + "s": [ + 4 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 59, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 62, + "s": [ + 1 + ] + }, + { + "t": 65, + "s": [ + 0 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 1, + "y": 0.999 + }, + "o": { + "x": 0.9, + "y": 0 + }, + "t": 15.2, + "s": [ + 103.243, + -98.321, + 0 + ], + "to": [ + 0.167, + 36.833, + 0 + ], + "ti": [ + -0.167, + -36.833, + 0 + ] + }, + { + "t": 53, + "s": [ + 104.243, + 122.679, + 0 + ] + } + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 87.62, + 24.985, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + -43.511, + 0.532 + ], + [ + 12.67, + -2.134 + ], + [ + 2.811, + 1.585 + ], + [ + -3.892, + 1.443 + ], + [ + 3.593, + 1.183 + ], + [ + 9.022, + -1.056 + ] + ], + "o": [ + [ + 0.451, + -1.497 + ], + [ + 10.829, + -0.132 + ], + [ + -12.67, + 2.133 + ], + [ + -2.811, + -1.585 + ], + [ + 6.899, + -2.557 + ], + [ + -2.756, + -0.907 + ], + [ + -5.654, + 0.661 + ] + ], + "v": [ + [ + -28.854, + -12.391 + ], + [ + 20.465, + -13.254 + ], + [ + 18.807, + 11.755 + ], + [ + -28.665, + 9.595 + ], + [ + 20.102, + 9.278 + ], + [ + 21.529, + -10.3 + ], + [ + -23.079, + -10.388 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.782, + "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": [ + 32.258, + 14.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": [ + [ + 0, + 0 + ], + [ + -43.511, + 0.532 + ], + [ + 12.67, + -2.134 + ], + [ + 2.811, + 1.585 + ], + [ + -3.892, + 1.443 + ], + [ + 3.593, + 1.183 + ], + [ + 9.022, + -1.056 + ] + ], + "o": [ + [ + 0.451, + -1.497 + ], + [ + 10.829, + -0.132 + ], + [ + -12.67, + 2.133 + ], + [ + -2.811, + -1.585 + ], + [ + 6.899, + -2.557 + ], + [ + -2.756, + -0.907 + ], + [ + -5.654, + 0.661 + ] + ], + "v": [ + [ + -28.854, + -12.391 + ], + [ + 20.465, + -13.254 + ], + [ + 18.807, + 11.755 + ], + [ + -28.665, + 9.595 + ], + [ + 20.102, + 9.278 + ], + [ + 21.529, + -10.3 + ], + [ + -23.079, + -10.388 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.517056334252, + 0.786518829944, + 0.319148194556, + 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": [ + 32.258, + 14.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 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 13.455, + -0.743 + ], + [ + -13.58, + -0.855 + ], + [ + 13.378, + -1.52 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 44.114, + 10.233 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 13.436, + -1.325 + ], + [ + -13.436, + 1.325 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.999905515185, + 0.700126498353, + 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": [ + 44.094, + 10.427 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 4", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 18.121, + 0.391 + ], + [ + -18.126, + -0.194 + ], + [ + 18.126, + -0.391 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 38.669, + 6.094 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 5", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 18.124, + 0.096 + ], + [ + -18.124, + -0.096 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.999905515185, + 0.700126498353, + 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": [ + 38.667, + 5.997 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 6", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -8.028, + -1.413 + ], + [ + 8.269, + -0.712 + ], + [ + -8.144, + -0.641 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 21.527, + 19.885 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 7", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -8.115, + -1.219 + ], + [ + 8.115, + 1.219 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.999905515185, + 0.700126498353, + 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": [ + 21.556, + 20.078 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 8", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -1.889, + 3.381 + ], + [ + 0.13, + 1.185 + ], + [ + 2.59, + 2.798 + ], + [ + 2.126, + -3.381 + ], + [ + -2.589, + -3.053 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.939322378121, + 0, + 0.023757904651, + 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.579, + 12.136 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 22.891, + 0.381 + ], + [ + -21.905, + 1.446 + ], + [ + -22.891, + -1.446 + ], + [ + 20.57, + -1.414 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 34.238, + 4.079 + ], + "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": 20, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 10, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -2.038, + -0.064 + ], + [ + 3.444, + -2.186 + ] + ], + "o": [ + [ + 5.447, + -6.911 + ], + [ + 0, + 0 + ], + [ + 2.038, + 0.064 + ], + [ + -3.444, + 2.185 + ] + ], + "v": [ + [ + -23.545, + 8.867 + ], + [ + -23.665, + -11.663 + ], + [ + 19.796, + -11.63 + ], + [ + 20.221, + 9.51 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.782, + "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": [ + 35.011, + 14.295 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 11", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 11, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -2.038, + -0.064 + ], + [ + 3.444, + -2.186 + ] + ], + "o": [ + [ + 5.447, + -6.911 + ], + [ + 0, + 0 + ], + [ + 2.038, + 0.064 + ], + [ + -3.444, + 2.185 + ] + ], + "v": [ + [ + -23.545, + 8.867 + ], + [ + -23.665, + -11.663 + ], + [ + 19.796, + -11.63 + ], + [ + 20.221, + 9.51 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.999905515185, + 0.700126498353, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 35.011, + 14.295 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 12", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 12, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -1.31, + -0.174 + ], + [ + 0, + 0 + ], + [ + -1.042, + -1.324 + ], + [ + -0.106, + -2.333 + ], + [ + 20.009, + -1.729 + ], + [ + 61.166, + 3.719 + ], + [ + -6.132, + 9.531 + ], + [ + 1.214, + 4.402 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 1.67, + 0.22 + ], + [ + 1.234, + 1.571 + ], + [ + 0.199, + 4.374 + ], + [ + -20.92, + 1.809 + ], + [ + 0, + 0 + ], + [ + 1.68, + -2.611 + ], + [ + -0.352, + -1.274 + ] + ], + "v": [ + [ + -0.441, + -13.572 + ], + [ + 44.379, + -11.521 + ], + [ + 48.605, + -9.109 + ], + [ + 51.34, + -2.936 + ], + [ + 30.548, + 10.178 + ], + [ + -51.538, + 8.268 + ], + [ + 1.042, + 4.215 + ], + [ + -0.516, + -11.311 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.782, + "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": [ + 55.919, + 15.443 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 13", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 13, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -1.31, + -0.174 + ], + [ + 0, + 0 + ], + [ + -1.042, + -1.324 + ], + [ + -0.106, + -2.333 + ], + [ + 20.009, + -1.729 + ], + [ + 61.166, + 3.719 + ], + [ + -6.132, + 9.531 + ], + [ + 1.214, + 4.402 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 1.67, + 0.22 + ], + [ + 1.234, + 1.571 + ], + [ + 0.199, + 4.374 + ], + [ + -20.92, + 1.809 + ], + [ + 0, + 0 + ], + [ + 1.68, + -2.611 + ], + [ + -0.352, + -1.274 + ] + ], + "v": [ + [ + -0.441, + -13.572 + ], + [ + 44.379, + -11.521 + ], + [ + 48.605, + -9.109 + ], + [ + 51.34, + -2.936 + ], + [ + 30.548, + 10.178 + ], + [ + -51.538, + 8.268 + ], + [ + 1.042, + 4.215 + ], + [ + -0.516, + -11.311 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.306598049987, + 0.662452069451, + 0.146940911985, + 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": [ + 55.919, + 15.443 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 14", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 14, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 15, + "op": 452, + "st": 2, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "2 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 26, + "s": [ + -20 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 46, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 49, + "s": [ + -4 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 52, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 55, + "s": [ + -1 + ] + }, + { + "t": 58, + "s": [ + 0 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 1, + "y": 0.999 + }, + "o": { + "x": 0.9, + "y": 0 + }, + "t": 8.2, + "s": [ + 22.325, + -71.746, + 0 + ], + "to": [ + 0.167, + 36.833, + 0 + ], + "ti": [ + -0.167, + -36.833, + 0 + ] + }, + { + "t": 46, + "s": [ + 23.325, + 149.254, + 0 + ] + } + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 6.992, + 26.93, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0.103, + 0.028 + ] + ], + "o": [ + [ + -0.106, + -0.024 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0.16, + 0.04 + ], + [ + -0.16, + -0.04 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.901, + "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": [ + 60.123, + 30.039 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0.103, + 0.028 + ] + ], + "o": [ + [ + -0.106, + -0.024 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0.16, + 0.04 + ], + [ + -0.16, + -0.04 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.00243552035, + 0.627506211225, + 0.776562380323, + 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": [ + 60.123, + 30.039 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -10.842, + -3.032 + ], + [ + 2.949, + 1.28 + ], + [ + -3.813, + 0.382 + ], + [ + -9.049, + 1.117 + ], + [ + -0.375, + -0.043 + ] + ], + "o": [ + [ + -24.04, + 1.048 + ], + [ + -5.409, + -2.342 + ], + [ + 8.229, + -0.824 + ], + [ + 0.322, + 0.042 + ], + [ + -8.326, + -0.003 + ] + ], + "v": [ + [ + 29.575, + 13.962 + ], + [ + -24.166, + 10.705 + ], + [ + -25.323, + -14.186 + ], + [ + 25.985, + -13.639 + ], + [ + 27.031, + -13.515 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.813, + "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": [ + 30.388, + 16.037 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -10.842, + -3.032 + ], + [ + 2.949, + 1.28 + ], + [ + -3.813, + 0.382 + ], + [ + -9.049, + 1.117 + ], + [ + -0.375, + -0.043 + ] + ], + "o": [ + [ + -24.04, + 1.048 + ], + [ + -5.409, + -2.342 + ], + [ + 8.229, + -0.824 + ], + [ + 0.322, + 0.042 + ], + [ + -8.326, + -0.003 + ] + ], + "v": [ + [ + 29.575, + 13.962 + ], + [ + -24.166, + 10.705 + ], + [ + -25.323, + -14.186 + ], + [ + 25.985, + -13.639 + ], + [ + 27.031, + -13.515 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.368031640146, + 0.666847917145, + 0.802989645565, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 30.388, + 16.037 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 4", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0.331, + -0.062 + ], + [ + 1.327, + -0.304 + ], + [ + 4.764, + -0.519 + ], + [ + -2.458, + -0.117 + ], + [ + -4.746, + 0.469 + ], + [ + 0.11, + -0.54 + ], + [ + 1.83, + 0.043 + ], + [ + 20.01, + -0.878 + ], + [ + -8.327, + -0.004 + ], + [ + -10.293, + -0.573 + ] + ], + "o": [ + [ + -1.814, + 0.337 + ], + [ + -3.568, + 0.821 + ], + [ + -4.766, + 0.522 + ], + [ + 13.703, + 0.644 + ], + [ + 0.547, + -0.05 + ], + [ + -0.397, + 1.974 + ], + [ + -0.957, + -0.022 + ], + [ + -10.842, + -3.032 + ], + [ + 9.569, + 1.061 + ], + [ + 0.334, + 0.017 + ] + ], + "v": [ + [ + 26.645, + -13.225 + ], + [ + 21.091, + -12.126 + ], + [ + -20.174, + -10.67 + ], + [ + -18.439, + 11.129 + ], + [ + 26.528, + 5.826 + ], + [ + 27.429, + 6.802 + ], + [ + 22.43, + 8.607 + ], + [ + -16.668, + 14.363 + ], + [ + -19.212, + -13.114 + ], + [ + 26.612, + -13.79 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.813, + "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": [ + 76.631, + 15.637 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 5", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0.331, + -0.062 + ], + [ + 1.327, + -0.304 + ], + [ + 4.764, + -0.519 + ], + [ + -2.458, + -0.117 + ], + [ + -4.746, + 0.469 + ], + [ + 0.11, + -0.54 + ], + [ + 1.83, + 0.043 + ], + [ + 20.01, + -0.878 + ], + [ + -8.327, + -0.004 + ], + [ + -10.293, + -0.573 + ] + ], + "o": [ + [ + -1.814, + 0.337 + ], + [ + -3.568, + 0.821 + ], + [ + -4.766, + 0.522 + ], + [ + 13.703, + 0.644 + ], + [ + 0.547, + -0.05 + ], + [ + -0.397, + 1.974 + ], + [ + -0.957, + -0.022 + ], + [ + -10.842, + -3.032 + ], + [ + 9.569, + 1.061 + ], + [ + 0.334, + 0.017 + ] + ], + "v": [ + [ + 26.645, + -13.225 + ], + [ + 21.091, + -12.126 + ], + [ + -20.174, + -10.67 + ], + [ + -18.439, + 11.129 + ], + [ + 26.528, + 5.826 + ], + [ + 27.429, + 6.802 + ], + [ + 22.43, + 8.607 + ], + [ + -16.668, + 14.363 + ], + [ + -19.212, + -13.114 + ], + [ + 26.612, + -13.79 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.441715464872, + 0.772477393057, + 0.844473505955, + 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": [ + 76.631, + 15.637 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 6", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 3.028, + -0.086 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -3.028, + 0.086 + ] + ], + "v": [ + [ + -20.291, + 1.765 + ], + [ + -16.467, + -0.47 + ], + [ + 20.291, + -1.804 + ], + [ + 18.865, + 1.201 + ], + [ + -12.546, + 1.765 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 74.457, + 4.322 + ], + "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": 20, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 7", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -1.567, + 0.059 + ], + [ + 1.557, + -0.161 + ], + [ + 1.568, + 0.117 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + -1.535, + 0.325 + ], + [ + -1.561, + 0.119 + ], + [ + 0, + 0 + ], + [ + 1.558, + -0.121 + ] + ], + "v": [ + [ + 4.674, + -0.447 + ], + [ + 0.025, + 0.217 + ], + [ + -4.674, + 0.33 + ], + [ + -0.006, + -0.107 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 89.283, + 16.225 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 8", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 3.435, + -0.022 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 4.674, + -0.389 + ], + [ + -4.674, + 0.389 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.999905515185, + 0.700126498353, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 89.283, + 16.166 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -1.773, + -0.005 + ], + [ + 1.77, + -0.09 + ], + [ + 0.888, + 0.026 + ], + [ + 0.845, + 0.298 + ], + [ + -0.88, + 0.009 + ], + [ + -0.882, + 0.047 + ] + ], + "o": [ + [ + -1.755, + 0.264 + ], + [ + -0.886, + 0.023 + ], + [ + -0.88, + -0.043 + ], + [ + 0.868, + 0.164 + ], + [ + 0.882, + -0.026 + ], + [ + 1.767, + -0.051 + ] + ], + "v": [ + [ + 5.295, + -0.258 + ], + [ + 0.002, + 0.212 + ], + [ + -2.658, + 0.236 + ], + [ + -5.295, + -0.098 + ], + [ + -2.658, + -0.014 + ], + [ + -0.011, + -0.111 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 90.242, + 19.818 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 10, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 1.296, + 0.556 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 5.295, + -0.358 + ], + [ + -5.295, + -0.198 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.367861250335, + 0.759971528895, + 0.856421317306, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 90.242, + 19.919 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 11", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 11, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + -3.996, + 0.223 + ], + [ + -1.999, + 0.076 + ], + [ + -1.997, + -0.13 + ], + [ + 1.995, + -0.116 + ], + [ + 1.992, + -0.165 + ], + [ + 3.978, + -0.388 + ] + ], + "o": [ + [ + 3.992, + -0.28 + ], + [ + 1.997, + -0.109 + ], + [ + 1.998, + -0.061 + ], + [ + -1.999, + -0.076 + ], + [ + -1.995, + 0.13 + ], + [ + -3.984, + 0.331 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -11.986, + 0.285 + ], + [ + -0.007, + -0.477 + ], + [ + 5.986, + -0.766 + ], + [ + 11.986, + -0.803 + ], + [ + 5.994, + -0.602 + ], + [ + 0.016, + -0.152 + ], + [ + -11.93, + 0.932 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 63.959, + 16.683 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 12", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 12, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + -3.414, + -0.343 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -11.971, + 0.877 + ], + [ + 11.971, + -0.534 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.367861250335, + 0.759971528895, + 0.856421317306, + 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": [ + 63.973, + 16.414 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 13", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 13, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 1.778, + -0.03 + ], + [ + -1.764, + 0.195 + ], + [ + -1.771, + 0.146 + ], + [ + -1.778, + 0.017 + ], + [ + -1.749, + -0.378 + ], + [ + 0.884, + -0.047 + ], + [ + 0.882, + -0.07 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 1.754, + -0.298 + ], + [ + 1.765, + -0.196 + ], + [ + 1.772, + -0.094 + ], + [ + 1.772, + 0.004 + ], + [ + -0.885, + -0.081 + ], + [ + -0.884, + 0.038 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -1.77, + 0.092 + ] + ], + "v": [ + [ + -10.616, + 0.729 + ], + [ + -5.335, + 0.021 + ], + [ + -0.03, + -0.454 + ], + [ + 5.294, + -0.676 + ], + [ + 10.616, + -0.35 + ], + [ + 7.964, + -0.333 + ], + [ + 5.314, + -0.176 + ], + [ + 0.013, + 0.195 + ], + [ + -5.295, + 0.516 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 62.325, + 11.947 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 14", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 14, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + -2.843, + -0.655 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -10.616, + 0.867 + ], + [ + 10.616, + -0.212 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.367861250335, + 0.759971528895, + 0.856421317306, + 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": [ + 62.325, + 11.808 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 15", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 15, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + -2.639, + 0.233 + ], + [ + -1.325, + 0.003 + ], + [ + -1.242, + -0.469 + ], + [ + 1.306, + -0.045 + ], + [ + 1.302, + -0.18 + ], + [ + 2.553, + -0.588 + ] + ], + "o": [ + [ + 2.618, + -0.448 + ], + [ + 1.32, + -0.107 + ], + [ + 1.316, + 0.028 + ], + [ + -1.265, + -0.396 + ], + [ + -1.313, + 0.078 + ], + [ + -2.601, + 0.38 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -7.88, + 0.165 + ], + [ + -0.003, + -0.863 + ], + [ + 3.965, + -1.047 + ], + [ + 7.88, + -0.514 + ], + [ + 3.971, + -0.822 + ], + [ + 0.048, + -0.415 + ], + [ + -7.697, + 1.047 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 61.83, + 9.014 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 16", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 16, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0.006, + 0 + ] + ], + "o": [ + [ + -0.006, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0.011, + -0.001 + ], + [ + -0.011, + 0.001 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.901, + "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": [ + 57.43, + 2.522 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 17", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 17, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0.006, + 0 + ] + ], + "o": [ + [ + -0.006, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0.011, + -0.001 + ], + [ + -0.011, + 0.001 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.00243552035, + 0.627506211225, + 0.776562380323, + 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": [ + 57.43, + 2.522 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 18", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 18, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + -4.94, + 11.546 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -1.346, + 0.013 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0.691, + -1.617 + ], + [ + 0, + 0 + ], + [ + 0.155, + 1.338 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 23.751, + 8.768 + ], + [ + 20.838, + -11.436 + ], + [ + -23.751, + -10.339 + ], + [ + -21.825, + 11.154 + ], + [ + -16.726, + 13.04 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.901, + "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": [ + 73.91, + 13.955 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 19", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 19, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + -4.94, + 11.546 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + -1.346, + 0.013 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0.691, + -1.617 + ], + [ + 0, + 0 + ], + [ + 0.155, + 1.338 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 23.751, + 8.768 + ], + [ + 20.838, + -11.436 + ], + [ + -23.751, + -10.339 + ], + [ + -21.825, + 11.154 + ], + [ + -16.726, + 13.04 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.999905515185, + 0.700126498353, + 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": [ + 73.91, + 13.955 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 20", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 20, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 8, + "op": 445, + "st": -5, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "1 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 18, + "s": [ + 20 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 38, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 41, + "s": [ + 4 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 44, + "s": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "t": 47, + "s": [ + 1 + ] + }, + { + "t": 50, + "s": [ + 0 + ] + } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { + "x": 1, + "y": 0.999 + }, + "o": { + "x": 0.9, + "y": 0 + }, + "t": 0.2, + "s": [ + 122.662, + -63.149, + 0 + ], + "to": [ + 0.167, + 36.833, + 0 + ], + "ti": [ + -0.167, + -36.833, + 0 + ] + }, + { + "t": 38, + "s": [ + 123.662, + 157.851, + 0 + ] + } + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 123.222, + 26.898, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -2.167, + -0.636 + ], + [ + 2.222, + 0.363 + ], + [ + 2.233, + 0.267 + ], + [ + 2.24, + 0.14 + ], + [ + 2.24, + -0.296 + ], + [ + -2.258, + -0.036 + ], + [ + -2.243, + -0.276 + ], + [ + -2.211, + -0.461 + ] + ], + "o": [ + [ + -2.223, + -0.393 + ], + [ + -2.222, + -0.363 + ], + [ + -2.226, + -0.321 + ], + [ + -2.239, + -0.131 + ], + [ + 2.202, + -0.545 + ], + [ + 2.265, + 0.045 + ], + [ + 2.238, + 0.319 + ], + [ + 2.211, + 0.46 + ] + ], + "v": [ + [ + 13.387, + 1.658 + ], + [ + 6.723, + 0.512 + ], + [ + 0.048, + -0.477 + ], + [ + -6.656, + -1.158 + ], + [ + -13.387, + -1.07 + ], + [ + -6.637, + -1.622 + ], + [ + 0.126, + -1.074 + ], + [ + 6.807, + 0.057 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 24.236, + 29.351 + ], + "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": [ + [ + -4.189, + -1.114 + ], + [ + 2.137, + 0.349 + ], + [ + 2.139, + 0.327 + ], + [ + 4.296, + 0.486 + ], + [ + 4.313, + 0.254 + ], + [ + 1.079, + 0.045 + ], + [ + 1.079, + -0.021 + ], + [ + 1.08, + -0.043 + ], + [ + 0, + 0 + ], + [ + -4.336, + -0.126 + ], + [ + -4.31, + -0.484 + ], + [ + -4.26, + -0.807 + ] + ], + "o": [ + [ + -2.132, + -0.384 + ], + [ + -2.131, + -0.375 + ], + [ + -4.273, + -0.67 + ], + [ + -4.287, + -0.547 + ], + [ + -1.076, + -0.096 + ], + [ + -1.08, + -0.043 + ], + [ + -1.08, + 0.003 + ], + [ + 0, + 0 + ], + [ + 4.296, + -0.612 + ], + [ + 4.342, + 0.121 + ], + [ + 4.302, + 0.556 + ], + [ + 4.257, + 0.814 + ] + ], + "v": [ + [ + 25.751, + 3.025 + ], + [ + 19.354, + 1.897 + ], + [ + 12.951, + 0.832 + ], + [ + 0.109, + -1 + ], + [ + -12.79, + -2.256 + ], + [ + -16.025, + -2.424 + ], + [ + -19.264, + -2.503 + ], + [ + -22.507, + -2.504 + ], + [ + -25.751, + -2.369 + ], + [ + -12.758, + -2.899 + ], + [ + 0.212, + -1.829 + ], + [ + 13.061, + 0.201 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 38.159, + 26.719 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -0.543, + -0.012 + ], + [ + -4.013, + -1.993 + ], + [ + -0.091, + 0.028 + ], + [ + 0, + 0 + ], + [ + 0.253, + 0.068 + ], + [ + 0.096, + 0.008 + ], + [ + 11.513, + -3.155 + ], + [ + 9.633, + -2.576 + ] + ], + "o": [ + [ + 13.39, + 0.29 + ], + [ + 0.085, + 0.042 + ], + [ + 0, + 0 + ], + [ + 0.25, + -0.078 + ], + [ + -0.094, + -0.024 + ], + [ + -3.572, + -0.357 + ], + [ + -9.506, + 2.607 + ], + [ + -0.525, + 0.141 + ] + ], + "v": [ + [ + -58.592, + 4.432 + ], + [ + 10.919, + 12.368 + ], + [ + 11.175, + 12.428 + ], + [ + 58.979, + -2.536 + ], + [ + 58.968, + -3.042 + ], + [ + 58.684, + -3.092 + ], + [ + -11.062, + -9.301 + ], + [ + -58.703, + 3.508 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.755, + "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": [ + 60.971, + 13.212 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -0.543, + -0.012 + ], + [ + -4.013, + -1.993 + ], + [ + -0.091, + 0.028 + ], + [ + 0, + 0 + ], + [ + 0.253, + 0.068 + ], + [ + 0.096, + 0.008 + ], + [ + 11.513, + -3.155 + ], + [ + 9.633, + -2.576 + ] + ], + "o": [ + [ + 13.39, + 0.29 + ], + [ + 0.085, + 0.042 + ], + [ + 0, + 0 + ], + [ + 0.25, + -0.078 + ], + [ + -0.094, + -0.024 + ], + [ + -3.572, + -0.357 + ], + [ + -9.506, + 2.607 + ], + [ + -0.525, + 0.141 + ] + ], + "v": [ + [ + -58.592, + 4.432 + ], + [ + 10.919, + 12.368 + ], + [ + 11.175, + 12.428 + ], + [ + 58.979, + -2.536 + ], + [ + 58.968, + -3.042 + ], + [ + 58.684, + -3.092 + ], + [ + -11.062, + -9.301 + ], + [ + -58.703, + 3.508 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.943467742322, + 0.742465209961, + 0.144897879806, + 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": [ + 60.971, + 13.212 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 4", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 4.507, + -3.866 + ], + [ + -2.183, + 4.405 + ], + [ + 2.91, + 1.964 + ], + [ + 0, + 0 + ], + [ + -0.099, + -0.28 + ] + ], + "o": [ + [ + 1.292, + 1.444 + ], + [ + 1.984, + -3.999 + ], + [ + 0, + 0 + ], + [ + 0.261, + 0.259 + ], + [ + 2.836, + 7.986 + ] + ], + "v": [ + [ + -26.283, + 18.174 + ], + [ + 24.361, + -4.252 + ], + [ + 22.245, + -19.618 + ], + [ + -26.345, + -4.407 + ], + [ + -25.801, + -3.595 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.755, + "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": [ + 98.345, + 30.093 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 5", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 4.507, + -3.866 + ], + [ + -2.183, + 4.405 + ], + [ + 2.91, + 1.964 + ], + [ + 0, + 0 + ], + [ + -0.099, + -0.28 + ] + ], + "o": [ + [ + 1.292, + 1.444 + ], + [ + 1.984, + -3.999 + ], + [ + 0, + 0 + ], + [ + 0.261, + 0.259 + ], + [ + 2.836, + 7.986 + ] + ], + "v": [ + [ + -26.283, + 18.174 + ], + [ + 24.361, + -4.252 + ], + [ + 22.245, + -19.618 + ], + [ + -26.345, + -4.407 + ], + [ + -25.801, + -3.595 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.861381441004, + 0.648408777574, + 0.139115247539, + 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": [ + 98.345, + 30.093 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 6", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 27.168, + 4.938 + ], + [ + -0.738, + -3.936 + ], + [ + -38.139, + -5.751 + ], + [ + 10.056, + 2.039 + ], + [ + 0, + 0 + ], + [ + -0.382, + -1.189 + ], + [ + 5.491, + 0.962 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 11.634, + 1.755 + ], + [ + -2.071, + -0.42 + ], + [ + 0, + 0 + ], + [ + 1.592, + 4.949 + ], + [ + -23.856, + -4.179 + ] + ], + "v": [ + [ + -33.521, + -3.049 + ], + [ + -39.412, + -0.32 + ], + [ + 28.517, + 11.242 + ], + [ + 29.013, + -12.577 + ], + [ + 29.864, + -11.396 + ], + [ + 30.614, + -9.143 + ], + [ + 27.972, + 7.719 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.755, + "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": [ + 40.906, + 37.045 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 7", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 27.168, + 4.938 + ], + [ + -0.738, + -3.936 + ], + [ + -38.139, + -5.751 + ], + [ + 10.056, + 2.039 + ], + [ + 0, + 0 + ], + [ + -0.382, + -1.189 + ], + [ + 5.491, + 0.962 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 11.634, + 1.755 + ], + [ + -2.071, + -0.42 + ], + [ + 0, + 0 + ], + [ + 1.592, + 4.949 + ], + [ + -23.856, + -4.179 + ] + ], + "v": [ + [ + -33.521, + -3.049 + ], + [ + -39.412, + -0.32 + ], + [ + 28.517, + 11.242 + ], + [ + 29.013, + -12.577 + ], + [ + 29.864, + -11.396 + ], + [ + 30.614, + -9.143 + ], + [ + 27.972, + 7.719 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.958900780771, + 0.799420824238, + 0.309947802974, + 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": [ + 40.906, + 37.045 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 8", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -30.854, + -1.733 + ], + [ + 34.234, + 5.812 + ], + [ + 33.417, + 2.007 + ], + [ + -29.372, + -5.811 + ], + [ + -34.233, + -3.613 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 36.502, + 20.333 + ], + "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": 20, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0.765, + -3.37 + ], + [ + 5.104, + -5.472 + ], + [ + -14.238, + -7.086 + ], + [ + 2.465, + 5.339 + ] + ], + "o": [ + [ + -0.274, + 1.208 + ], + [ + -3.159, + 3.387 + ], + [ + 1.896, + 0.944 + ], + [ + -1.883, + -4.077 + ] + ], + "v": [ + [ + -34.613, + -13.576 + ], + [ + -33.268, + 2.29 + ], + [ + 34.531, + 16.001 + ], + [ + 31.458, + -6.26 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0, + 0, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 0.837, + "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": [ + 39.019, + 31.14 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 10, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0.765, + -3.37 + ], + [ + 5.104, + -5.472 + ], + [ + -14.238, + -7.086 + ], + [ + 2.465, + 5.339 + ] + ], + "o": [ + [ + -0.274, + 1.208 + ], + [ + -3.159, + 3.387 + ], + [ + 1.896, + 0.944 + ], + [ + -1.883, + -4.077 + ] + ], + "v": [ + [ + -34.613, + -13.576 + ], + [ + -33.268, + 2.29 + ], + [ + 34.531, + 16.001 + ], + [ + 31.458, + -6.26 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 1, + 0.999905515185, + 0.700126498353, + 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": [ + 39.019, + 31.14 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 11", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 11, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 437, + "st": -13, + "bm": 0 + } + ], + "markers": [] +} \ No newline at end of file diff --git a/app/src/main/assets/loading_book.json b/app/src/main/assets/loading_book.json new file mode 100644 index 0000000..ef06e80 --- /dev/null +++ b/app/src/main/assets/loading_book.json @@ -0,0 +1 @@ +{"v":"5.1.19","fr":25,"ip":15,"op":81,"w":400,"h":400,"nm":"book","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"p5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":47,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":55,"s":[100],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":61,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":85,"s":[100],"e":[0]},{"t":95}],"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},"n":"0p833_0p833_0p167_0p167","t":48,"s":[55.331,113.781,0],"e":[67.331,27.781,0],"to":[2,-14.3333330154419,0],"ti":[-2,14.3333330154419,0]},{"t":89}],"ix":2},"a":{"a":0,"k":[117.331,-11.219,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[117.105,-5.126],[111.238,-11.445],[117.557,-17.312],[123.424,-10.994]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.368627458811,0.584313750267,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"p4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":33,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":43,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":47,"s":[100],"e":[0]},{"t":55}],"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},"n":"0p833_0p833_0p167_0p167","t":33,"s":[51.835,114.605,0],"e":[39.835,28.605,0],"to":[-2,-14.3333330154419,0],"ti":[2,14.3333330154419,0]},{"t":89}],"ix":2},"a":{"a":0,"k":[89.835,-33.395,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[89.609,-27.302],[83.742,-33.62],[90.061,-39.488],[95.928,-33.169]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.35686275363,1,0.913725495338,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"p3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":22,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":34,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":47,"s":[100],"e":[0]},{"t":55}],"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},"n":"0p833_0p833_0p167_0p167","t":22,"s":[53.151,116.215,0],"e":[33.151,27.215,0],"to":[-3.33333325386047,-14.8333330154419,0],"ti":[3.33333325386047,14.8333330154419,0]},{"t":59}],"ix":2},"a":{"a":0,"k":[83.151,-70.785,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[],"ip":0,"op":61,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"p8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":25,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":37,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":51,"s":[100],"e":[0]},{"t":61}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":22,"s":[0],"e":[360]},{"t":87}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":22,"s":[50.152,113.599,0],"e":[83.152,39.599,0],"to":[5.5,-12.3333330154419,0],"ti":[-5.5,12.3333330154419,0]},{"t":61}],"ix":2},"a":{"a":0,"k":[119.152,-60.401,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.499,-1.011],[0,0],[-0.443,-0.064],[0,0],[0.808,-0.787],[0,0],[-0.076,-0.441],[0,0],[0.998,0.525],[0,0],[0.396,-0.208],[0,0],[-0.191,1.112],[0,0],[0.321,0.313],[0,0],[-1.116,0.162],[0,0],[-0.198,0.402],[0,0]],"o":[[0,0],[0.198,0.402],[0,0],[1.116,0.162],[0,0],[-0.321,0.313],[0,0],[0.191,1.112],[0,0],[-0.396,-0.208],[0,0],[-0.998,0.525],[0,0],[0.076,-0.441],[0,0],[-0.808,-0.787],[0,0],[0.443,-0.064],[0,0],[0.499,-1.011]],"v":[[-25.78,-44.843],[-22.717,-38.636],[-21.692,-37.892],[-14.842,-36.896],[-14.088,-34.575],[-19.045,-29.744],[-19.436,-28.539],[-18.266,-21.718],[-20.24,-20.283],[-26.367,-23.504],[-27.633,-23.504],[-33.76,-20.283],[-35.734,-21.718],[-34.564,-28.539],[-34.955,-29.744],[-39.912,-34.575],[-39.158,-36.896],[-32.308,-37.892],[-31.283,-38.636],[-28.22,-44.843]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.670588235294,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[145.5,-76.5],"ix":2},"a":{"a":0,"k":[0.002,-48.534],"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":"star","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":61,"st":22,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"p6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":25,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":37,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":51,"s":[100],"e":[0]},{"t":61}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":22,"s":[0],"e":[360]},{"t":87}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":22,"s":[50.152,113.599,0],"e":[27.152,26.599,0],"to":[-3.83333325386047,-14.5,0],"ti":[3.83333325386047,14.5,0]},{"t":61}],"ix":2},"a":{"a":0,"k":[119.152,-60.401,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.499,-1.011],[0,0],[-0.443,-0.064],[0,0],[0.808,-0.787],[0,0],[-0.076,-0.441],[0,0],[0.998,0.525],[0,0],[0.396,-0.208],[0,0],[-0.191,1.112],[0,0],[0.321,0.313],[0,0],[-1.116,0.162],[0,0],[-0.198,0.402],[0,0]],"o":[[0,0],[0.198,0.402],[0,0],[1.116,0.162],[0,0],[-0.321,0.313],[0,0],[0.191,1.112],[0,0],[-0.396,-0.208],[0,0],[-0.998,0.525],[0,0],[0.076,-0.441],[0,0],[-0.808,-0.787],[0,0],[0.443,-0.064],[0,0],[0.499,-1.011]],"v":[[-25.78,-44.843],[-22.717,-38.636],[-21.692,-37.892],[-14.842,-36.896],[-14.088,-34.575],[-19.045,-29.744],[-19.436,-28.539],[-18.266,-21.718],[-20.24,-20.283],[-26.367,-23.504],[-27.633,-23.504],[-33.76,-20.283],[-35.734,-21.718],[-34.564,-28.539],[-34.955,-29.744],[-39.912,-34.575],[-39.158,-36.896],[-32.308,-37.892],[-31.283,-38.636],[-28.22,-44.843]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.670588235294,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[145.5,-76.5],"ix":2},"a":{"a":0,"k":[0.002,-48.534],"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":"star","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":61,"st":22,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"p7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":35,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":45,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[100],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":61,"s":[10],"e":[0]},{"t":73}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":32,"s":[0],"e":[360]},{"t":97}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":32,"s":[50.152,113.599,0],"e":[69.152,26.599,0],"to":[3.16666674613953,-14.5,0],"ti":[-3.16666674613953,14.5,0]},{"t":73}],"ix":2},"a":{"a":0,"k":[119.152,-60.401,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.499,-1.011],[0,0],[-0.443,-0.064],[0,0],[0.808,-0.787],[0,0],[-0.076,-0.441],[0,0],[0.998,0.525],[0,0],[0.396,-0.208],[0,0],[-0.191,1.112],[0,0],[0.321,0.313],[0,0],[-1.116,0.162],[0,0],[-0.198,0.402],[0,0]],"o":[[0,0],[0.198,0.402],[0,0],[1.116,0.162],[0,0],[-0.321,0.313],[0,0],[0.191,1.112],[0,0],[-0.396,-0.208],[0,0],[-0.998,0.525],[0,0],[0.076,-0.441],[0,0],[-0.808,-0.787],[0,0],[0.443,-0.064],[0,0],[0.499,-1.011]],"v":[[-25.78,-44.843],[-22.717,-38.636],[-21.692,-37.892],[-14.842,-36.896],[-14.088,-34.575],[-19.045,-29.744],[-19.436,-28.539],[-18.266,-21.718],[-20.24,-20.283],[-26.367,-23.504],[-27.633,-23.504],[-33.76,-20.283],[-35.734,-21.718],[-34.564,-28.539],[-34.955,-29.744],[-39.912,-34.575],[-39.158,-36.896],[-32.308,-37.892],[-31.283,-38.636],[-28.22,-44.843]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.670588235294,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[145.5,-76.5],"ix":2},"a":{"a":0,"k":[0.002,-48.534],"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":"star","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":32,"op":61,"st":32,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"p2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":11,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":23,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":40,"s":[100],"e":[0]},{"t":50}],"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},"n":"0p833_0p833_0p167_0p167","t":11,"s":[52.173,113.788,0],"e":[67.173,28.788,0],"to":[2.5,-14.1666669845581,0],"ti":[-2.5,14.1666669845581,0]},{"t":50}],"ix":2},"a":{"a":0,"k":[117.173,-96.212,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[116.722,-84.026],[104.987,-96.663],[117.624,-108.398],[129.359,-95.761]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.35686275363,1,0.913725495338,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"p1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":3,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":15,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":31,"s":[100],"e":[0]},{"t":41}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[360]},{"t":65}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[50.152,113.599,0],"e":[69.152,26.599,0],"to":[3.16666674613953,-14.5,0],"ti":[-3.16666674613953,14.5,0]},{"t":41}],"ix":2},"a":{"a":0,"k":[119.152,-60.401,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.499,-1.011],[0,0],[-0.443,-0.064],[0,0],[0.808,-0.787],[0,0],[-0.076,-0.441],[0,0],[0.998,0.525],[0,0],[0.396,-0.208],[0,0],[-0.191,1.112],[0,0],[0.321,0.313],[0,0],[-1.116,0.162],[0,0],[-0.198,0.402],[0,0]],"o":[[0,0],[0.198,0.402],[0,0],[1.116,0.162],[0,0],[-0.321,0.313],[0,0],[0.191,1.112],[0,0],[-0.396,-0.208],[0,0],[-0.998,0.525],[0,0],[0.076,-0.441],[0,0],[-0.808,-0.787],[0,0],[0.443,-0.064],[0,0],[0.499,-1.011]],"v":[[-25.78,-44.843],[-22.717,-38.636],[-21.692,-37.892],[-14.842,-36.896],[-14.088,-34.575],[-19.045,-29.744],[-19.436,-28.539],[-18.266,-21.718],[-20.24,-20.283],[-26.367,-23.504],[-27.633,-23.504],[-33.76,-20.283],[-35.734,-21.718],[-34.564,-28.539],[-34.955,-29.744],[-39.912,-34.575],[-39.158,-36.896],[-32.308,-37.892],[-31.283,-38.636],[-28.22,-44.843]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.670588235294,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[145.5,-76.5],"ix":2},"a":{"a":0,"k":[0.002,-48.534],"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":"star","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":61,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"turn_white","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[176.291,201,0],"ix":2},"a":{"a":0,"k":[-23.709,1,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":8,"s":[{"i":[[0,0],[-11.984,1.525],[5.125,-0.821],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[22.651,29.922],[45.583,31.422],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-11.984,1.525],[-12.249,-1.589],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[19.151,26.256],[39.916,29.756],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":10,"s":[{"i":[[0,0],[-11.984,1.525],[-12.249,-1.589],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[19.151,26.256],[39.916,29.756],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-9.157,-0.595],[-11.249,0.272],[0,0],[8.588,-2.821],[4.583,-4.713]],"o":[[4.587,-3.436],[8.01,-0.761],[0,0],[-10.838,-1.065],[-8.912,0.346],[0,0]],"v":[[-0.5,39],[16.323,25.761],[32.749,29.311],[32.672,-37.435],[15.412,-41.679],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":12,"s":[{"i":[[0,0],[-9.157,-0.595],[-11.249,0.272],[0,0],[8.588,-2.821],[4.583,-4.713]],"o":[[4.587,-3.436],[8.01,-0.761],[0,0],[-10.838,-1.065],[-8.912,0.346],[0,0]],"v":[[-0.5,39],[16.323,25.761],[32.749,29.311],[32.672,-37.435],[15.412,-41.679],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-6.329,2.233],[-8.416,0.758],[0,0],[7.221,-4.999],[1.5,-4.819]],"o":[[3.175,-3.32],[8.171,-2.6],[0,0],[-4.76,2.054],[-6.446,1.835],[0,0]],"v":[[-0.5,39],[9.162,22.767],[23.666,24.742],[23.844,-43.137],[6.279,-45.001],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":13,"s":[{"i":[[0,0],[-6.329,2.233],[-8.416,0.758],[0,0],[7.221,-4.999],[1.5,-4.819]],"o":[[3.175,-3.32],[8.171,-2.6],[0,0],[-4.76,2.054],[-6.446,1.835],[0,0]],"v":[[-0.5,39],[9.162,22.767],[23.666,24.742],[23.844,-43.137],[6.279,-45.001],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-0.623,5.564],[3.805,1.625],[0,0],[1.662,-5.182],[0.066,-4.247]],"o":[[1.197,-3.156],[0.21,-6.302],[0,0],[-2.149,-1.445],[-1.089,6.539],[0,0]],"v":[[-0.5,39],[-0.344,23.176],[3.219,14.169],[3.285,-52.812],[0.506,-42.789],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":14,"s":[{"i":[[0,0],[-0.623,5.564],[3.805,1.625],[0,0],[1.662,-5.182],[0.066,-4.247]],"o":[[1.197,-3.156],[0.21,-6.302],[0,0],[-2.149,-1.445],[-1.089,6.539],[0,0]],"v":[[-0.5,39],[-0.344,23.176],[3.219,14.169],[3.285,-52.812],[0.506,-42.789],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[0.393,5.895],[0.713,4.43],[0,0],[-0.451,-4.642],[-0.651,-3.961]],"o":[[0.208,-3.075],[-0.403,-6.048],[0,0],[-0.927,-1.359],[0.747,5.665],[0,0]],"v":[[-0.5,39],[-5.263,23.548],[-5.296,12.903],[-5.286,-53.629],[-3.867,-42.071],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":15,"s":[{"i":[[0,0],[0.393,5.895],[0.713,4.43],[0,0],[-0.451,-4.642],[-0.651,-3.961]],"o":[[0.208,-3.075],[-0.403,-6.048],[0,0],[-0.927,-1.359],[0.747,5.665],[0,0]],"v":[[-0.5,39],[-5.263,23.548],[-5.296,12.903],[-5.286,-53.629],[-3.867,-42.071],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[2.665,6.052],[1.27,4.862],[0,0],[-2.564,-4.101],[-1.369,-3.675]],"o":[[-0.781,-2.993],[-2.317,-5.753],[0,0],[0.295,-1.273],[2.406,5.521],[0,0]],"v":[[-0.5,39],[-10.183,23.919],[-13.811,11.638],[-13.857,-54.445],[-10.073,-39.187],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":16,"s":[{"i":[[0,0],[2.665,6.052],[1.27,4.862],[0,0],[-2.564,-4.101],[-1.369,-3.675]],"o":[[-0.781,-2.993],[-2.317,-5.753],[0,0],[0.295,-1.273],[2.406,5.521],[0,0]],"v":[[-0.5,39],[-10.183,23.919],[-13.811,11.638],[-13.857,-54.445],[-10.073,-39.187],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[4.936,6.209],[1.826,5.295],[0,0],[-5.138,-4.28],[-2.086,-3.389]],"o":[[-1.77,-2.911],[-4.231,-5.458],[0,0],[1.517,-1.187],[4.421,3.919],[0,0]],"v":[[-0.5,39],[-15.102,24.29],[-22.326,10.372],[-22.428,-55.262],[-15.445,-40.137],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":18,"s":[{"i":[[0,0],[4.936,6.209],[1.826,5.295],[0,0],[-5.138,-4.28],[-2.086,-3.389]],"o":[[-1.77,-2.911],[-4.231,-5.458],[0,0],[1.517,-1.187],[4.421,3.919],[0,0]],"v":[[-0.5,39],[-15.102,24.29],[-22.326,10.372],[-22.428,-55.262],[-15.445,-40.137],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[7.972,3.99],[3.476,2.237],[0,0],[-7.696,-2.788],[-3.11,-2.981]],"o":[[-3.182,-2.795],[-6.9,-3.499],[0,0],[3.262,-1.064],[7.335,2.924],[0,0]],"v":[[-0.5,39],[-24.059,29.356],[-34.622,20.481],[-34.673,-45.559],[-19.617,-35.913],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":21,"s":[{"i":[[0,0],[7.972,3.99],[3.476,2.237],[0,0],[-7.696,-2.788],[-3.11,-2.981]],"o":[[-3.182,-2.795],[-6.9,-3.499],[0,0],[3.262,-1.064],[7.335,2.924],[0,0]],"v":[[-0.5,39],[-24.059,29.356],[-34.622,20.481],[-34.673,-45.559],[-19.617,-35.913],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[11.009,1.771],[5.125,-0.821],[0,0],[-10.714,-2.016],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-9.569,-1.539],[0,0],[5.007,-0.941],[10.249,1.928],[0,0]],"v":[[-0.5,39],[-24.182,30.589],[-46.917,30.589],[-46.917,-35.857],[-22.288,-35.857],[-0.5,-27.446]],"c":true}]},{"t":24}],"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 2","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":13,"op":25,"st":-15,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"turn_cyan","sr":1,"ks":{"o":{"a":0,"k":90,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[176.291,201,0],"ix":2},"a":{"a":0,"k":[-23.709,1,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":4,"s":[{"i":[[0,0],[-11.984,1.525],[5.125,-0.821],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[22.651,29.922],[45.583,31.422],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-11.984,1.525],[-12.249,-1.589],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[19.151,26.256],[39.916,29.756],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":6,"s":[{"i":[[0,0],[-11.984,1.525],[-12.249,-1.589],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[19.151,26.256],[39.916,29.756],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-9.157,-0.595],[-11.249,0.272],[0,0],[8.588,-2.821],[4.583,-4.713]],"o":[[4.587,-3.436],[8.01,-0.761],[0,0],[-10.838,-1.065],[-8.912,0.346],[0,0]],"v":[[-0.5,39],[16.323,25.761],[32.749,29.311],[32.672,-37.435],[15.412,-41.679],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":8,"s":[{"i":[[0,0],[-9.157,-0.595],[-11.249,0.272],[0,0],[8.588,-2.821],[4.583,-4.713]],"o":[[4.587,-3.436],[8.01,-0.761],[0,0],[-10.838,-1.065],[-8.912,0.346],[0,0]],"v":[[-0.5,39],[16.323,25.761],[32.749,29.311],[32.672,-37.435],[15.412,-41.679],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-6.329,2.233],[-8.416,0.758],[0,0],[7.221,-4.999],[1.5,-4.819]],"o":[[3.175,-3.32],[8.171,-2.6],[0,0],[-4.76,2.054],[-6.446,1.835],[0,0]],"v":[[-0.5,39],[9.162,22.767],[23.666,24.742],[23.844,-43.137],[6.279,-45.001],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":9,"s":[{"i":[[0,0],[-6.329,2.233],[-8.416,0.758],[0,0],[7.221,-4.999],[1.5,-4.819]],"o":[[3.175,-3.32],[8.171,-2.6],[0,0],[-4.76,2.054],[-6.446,1.835],[0,0]],"v":[[-0.5,39],[9.162,22.767],[23.666,24.742],[23.844,-43.137],[6.279,-45.001],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-0.623,5.564],[3.805,1.625],[0,0],[1.662,-5.182],[0.066,-4.247]],"o":[[1.197,-3.156],[0.21,-6.302],[0,0],[-2.149,-1.445],[-1.089,6.539],[0,0]],"v":[[-0.5,39],[-0.344,23.176],[3.219,14.169],[3.285,-52.812],[0.506,-42.789],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":10,"s":[{"i":[[0,0],[-0.623,5.564],[3.805,1.625],[0,0],[1.662,-5.182],[0.066,-4.247]],"o":[[1.197,-3.156],[0.21,-6.302],[0,0],[-2.149,-1.445],[-1.089,6.539],[0,0]],"v":[[-0.5,39],[-0.344,23.176],[3.219,14.169],[3.285,-52.812],[0.506,-42.789],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[0.393,5.895],[0.713,4.43],[0,0],[-0.451,-4.642],[-0.651,-3.961]],"o":[[0.208,-3.075],[-0.403,-6.048],[0,0],[-0.927,-1.359],[0.747,5.665],[0,0]],"v":[[-0.5,39],[-5.263,23.548],[-5.296,12.903],[-5.286,-53.629],[-3.867,-42.071],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":11,"s":[{"i":[[0,0],[0.393,5.895],[0.713,4.43],[0,0],[-0.451,-4.642],[-0.651,-3.961]],"o":[[0.208,-3.075],[-0.403,-6.048],[0,0],[-0.927,-1.359],[0.747,5.665],[0,0]],"v":[[-0.5,39],[-5.263,23.548],[-5.296,12.903],[-5.286,-53.629],[-3.867,-42.071],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[2.665,6.052],[1.27,4.862],[0,0],[-2.564,-4.101],[-1.369,-3.675]],"o":[[-0.781,-2.993],[-2.317,-5.753],[0,0],[0.295,-1.273],[2.406,5.521],[0,0]],"v":[[-0.5,39],[-10.183,23.919],[-13.811,11.638],[-13.857,-54.445],[-10.073,-39.187],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":12,"s":[{"i":[[0,0],[2.665,6.052],[1.27,4.862],[0,0],[-2.564,-4.101],[-1.369,-3.675]],"o":[[-0.781,-2.993],[-2.317,-5.753],[0,0],[0.295,-1.273],[2.406,5.521],[0,0]],"v":[[-0.5,39],[-10.183,23.919],[-13.811,11.638],[-13.857,-54.445],[-10.073,-39.187],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[4.936,6.209],[1.826,5.295],[0,0],[-5.138,-4.28],[-2.086,-3.389]],"o":[[-1.77,-2.911],[-4.231,-5.458],[0,0],[1.517,-1.187],[4.421,3.919],[0,0]],"v":[[-0.5,39],[-15.102,24.29],[-22.326,10.372],[-22.428,-55.262],[-15.445,-40.137],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":13,"s":[{"i":[[0,0],[4.936,6.209],[1.826,5.295],[0,0],[-5.138,-4.28],[-2.086,-3.389]],"o":[[-1.77,-2.911],[-4.231,-5.458],[0,0],[1.517,-1.187],[4.421,3.919],[0,0]],"v":[[-0.5,39],[-15.102,24.29],[-22.326,10.372],[-22.428,-55.262],[-15.445,-40.137],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[7.972,3.99],[3.476,2.237],[0,0],[-7.696,-2.788],[-3.11,-2.981]],"o":[[-3.182,-2.795],[-6.9,-3.499],[0,0],[3.262,-1.064],[7.335,2.924],[0,0]],"v":[[-0.5,39],[-24.059,29.356],[-34.622,20.481],[-34.673,-45.559],[-19.617,-35.913],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":15,"s":[{"i":[[0,0],[7.972,3.99],[3.476,2.237],[0,0],[-7.696,-2.788],[-3.11,-2.981]],"o":[[-3.182,-2.795],[-6.9,-3.499],[0,0],[3.262,-1.064],[7.335,2.924],[0,0]],"v":[[-0.5,39],[-24.059,29.356],[-34.622,20.481],[-34.673,-45.559],[-19.617,-35.913],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[11.009,1.771],[5.125,-0.821],[0,0],[-10.714,-2.016],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-9.569,-1.539],[0,0],[5.007,-0.941],[10.249,1.928],[0,0]],"v":[[-0.5,39],[-24.182,30.589],[-46.917,30.589],[-46.917,-35.857],[-22.288,-35.857],[-0.5,-27.446]],"c":true}]},{"t":17}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":4,"s":[1,1,1,1],"e":[0.929411768913,0.964705884457,0.988235294819,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":8,"s":[0.929411768913,0.964705884457,0.988235294819,1],"e":[0.929411768913,0.964705884457,0.988235294819,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":10,"s":[0.929411768913,0.964705884457,0.988235294819,1],"e":[0.356862745098,1,0.913725490196,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":13,"s":[0.356862745098,1,0.913725490196,1],"e":[1,1,1,1]},{"t":19}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4,"op":25,"st":-19,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"turn_pink","sr":1,"ks":{"o":{"a":0,"k":90,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[176.291,201,0],"ix":2},"a":{"a":0,"k":[-23.709,1,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":1,"s":[{"i":[[0,0],[-11.984,1.525],[5.125,-0.821],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[22.651,29.922],[45.583,31.422],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-11.984,1.525],[-12.249,-1.589],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[19.151,26.256],[39.916,29.756],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":3,"s":[{"i":[[0,0],[-11.984,1.525],[-12.249,-1.589],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[19.151,26.256],[39.916,29.756],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-9.157,-0.595],[-11.249,0.272],[0,0],[8.588,-2.821],[4.583,-4.713]],"o":[[4.587,-3.436],[8.01,-0.761],[0,0],[-10.838,-1.065],[-8.912,0.346],[0,0]],"v":[[-0.5,39],[16.323,25.761],[32.749,29.311],[32.672,-37.435],[15.412,-41.679],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":5,"s":[{"i":[[0,0],[-9.157,-0.595],[-11.249,0.272],[0,0],[8.588,-2.821],[4.583,-4.713]],"o":[[4.587,-3.436],[8.01,-0.761],[0,0],[-10.838,-1.065],[-8.912,0.346],[0,0]],"v":[[-0.5,39],[16.323,25.761],[32.749,29.311],[32.672,-37.435],[15.412,-41.679],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-6.329,2.233],[-8.416,0.758],[0,0],[7.221,-4.999],[1.5,-4.819]],"o":[[3.175,-3.32],[8.171,-2.6],[0,0],[-4.76,2.054],[-6.446,1.835],[0,0]],"v":[[-0.5,39],[9.162,22.767],[23.666,24.742],[23.844,-43.137],[6.279,-45.001],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":6,"s":[{"i":[[0,0],[-6.329,2.233],[-8.416,0.758],[0,0],[7.221,-4.999],[1.5,-4.819]],"o":[[3.175,-3.32],[8.171,-2.6],[0,0],[-4.76,2.054],[-6.446,1.835],[0,0]],"v":[[-0.5,39],[9.162,22.767],[23.666,24.742],[23.844,-43.137],[6.279,-45.001],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-0.623,5.564],[3.805,1.625],[0,0],[1.662,-5.182],[0.066,-4.247]],"o":[[1.197,-3.156],[0.21,-6.302],[0,0],[-2.149,-1.445],[-1.089,6.539],[0,0]],"v":[[-0.5,39],[-0.344,23.176],[3.219,14.169],[3.285,-52.812],[0.506,-42.789],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":7,"s":[{"i":[[0,0],[-0.623,5.564],[3.805,1.625],[0,0],[1.662,-5.182],[0.066,-4.247]],"o":[[1.197,-3.156],[0.21,-6.302],[0,0],[-2.149,-1.445],[-1.089,6.539],[0,0]],"v":[[-0.5,39],[-0.344,23.176],[3.219,14.169],[3.285,-52.812],[0.506,-42.789],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[0.393,5.895],[0.713,4.43],[0,0],[-0.451,-4.642],[-0.651,-3.961]],"o":[[0.208,-3.075],[-0.403,-6.048],[0,0],[-0.927,-1.359],[0.747,5.665],[0,0]],"v":[[-0.5,39],[-5.263,23.548],[-5.296,12.903],[-5.286,-53.629],[-3.867,-42.071],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":8,"s":[{"i":[[0,0],[0.393,5.895],[0.713,4.43],[0,0],[-0.451,-4.642],[-0.651,-3.961]],"o":[[0.208,-3.075],[-0.403,-6.048],[0,0],[-0.927,-1.359],[0.747,5.665],[0,0]],"v":[[-0.5,39],[-5.263,23.548],[-5.296,12.903],[-5.286,-53.629],[-3.867,-42.071],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[2.665,6.052],[1.27,4.862],[0,0],[-2.564,-4.101],[-1.369,-3.675]],"o":[[-0.781,-2.993],[-2.317,-5.753],[0,0],[0.295,-1.273],[2.406,5.521],[0,0]],"v":[[-0.5,39],[-10.183,23.919],[-13.811,11.638],[-13.857,-54.445],[-10.073,-39.187],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":9,"s":[{"i":[[0,0],[2.665,6.052],[1.27,4.862],[0,0],[-2.564,-4.101],[-1.369,-3.675]],"o":[[-0.781,-2.993],[-2.317,-5.753],[0,0],[0.295,-1.273],[2.406,5.521],[0,0]],"v":[[-0.5,39],[-10.183,23.919],[-13.811,11.638],[-13.857,-54.445],[-10.073,-39.187],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[4.936,6.209],[1.826,5.295],[0,0],[-5.138,-4.28],[-2.086,-3.389]],"o":[[-1.77,-2.911],[-4.231,-5.458],[0,0],[1.517,-1.187],[4.421,3.919],[0,0]],"v":[[-0.5,39],[-15.102,24.29],[-22.326,10.372],[-22.428,-55.262],[-15.445,-40.137],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":10,"s":[{"i":[[0,0],[4.936,6.209],[1.826,5.295],[0,0],[-5.138,-4.28],[-2.086,-3.389]],"o":[[-1.77,-2.911],[-4.231,-5.458],[0,0],[1.517,-1.187],[4.421,3.919],[0,0]],"v":[[-0.5,39],[-15.102,24.29],[-22.326,10.372],[-22.428,-55.262],[-15.445,-40.137],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[7.972,3.99],[3.476,2.237],[0,0],[-7.696,-2.788],[-3.11,-2.981]],"o":[[-3.182,-2.795],[-6.9,-3.499],[0,0],[3.262,-1.064],[7.335,2.924],[0,0]],"v":[[-0.5,39],[-24.059,29.356],[-34.622,20.481],[-34.673,-45.559],[-19.617,-35.913],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":12,"s":[{"i":[[0,0],[7.972,3.99],[3.476,2.237],[0,0],[-7.696,-2.788],[-3.11,-2.981]],"o":[[-3.182,-2.795],[-6.9,-3.499],[0,0],[3.262,-1.064],[7.335,2.924],[0,0]],"v":[[-0.5,39],[-24.059,29.356],[-34.622,20.481],[-34.673,-45.559],[-19.617,-35.913],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[11.009,1.771],[5.125,-0.821],[0,0],[-10.714,-2.016],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-9.569,-1.539],[0,0],[5.007,-0.941],[10.249,1.928],[0,0]],"v":[[-0.5,39],[-24.182,30.589],[-46.917,30.589],[-46.917,-35.857],[-22.288,-35.857],[-0.5,-27.446]],"c":true}]},{"t":14}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":1,"s":[1,1,1,1],"e":[0.929411768913,0.964705884457,0.988235294819,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":5,"s":[0.929411768913,0.964705884457,0.988235294819,1],"e":[0.929411768913,0.964705884457,0.988235294819,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":7,"s":[0.929411768913,0.964705884457,0.988235294819,1],"e":[1,0.36862745098,0.58431372549,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":10,"s":[1,0.36862745098,0.58431372549,1],"e":[1,1,1,1]},{"t":16}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":-22,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"turn_cyan 3","sr":1,"ks":{"o":{"a":0,"k":90,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[176.291,201,0],"ix":2},"a":{"a":0,"k":[-23.709,1,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":3,"s":[{"i":[[0,0],[-11.984,1.525],[5.125,-0.821],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[22.651,29.922],[45.583,31.422],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-11.984,1.525],[-12.249,-1.589],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[19.151,26.256],[39.916,29.756],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":5,"s":[{"i":[[0,0],[-11.984,1.525],[-12.249,-1.589],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[19.151,26.256],[39.916,29.756],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-9.157,-0.595],[-11.249,0.272],[0,0],[8.588,-2.821],[4.583,-4.713]],"o":[[4.587,-3.436],[8.01,-0.761],[0,0],[-10.838,-1.065],[-8.912,0.346],[0,0]],"v":[[-0.5,39],[16.323,25.761],[32.749,29.311],[32.672,-37.435],[15.412,-41.679],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":7,"s":[{"i":[[0,0],[-9.157,-0.595],[-11.249,0.272],[0,0],[8.588,-2.821],[4.583,-4.713]],"o":[[4.587,-3.436],[8.01,-0.761],[0,0],[-10.838,-1.065],[-8.912,0.346],[0,0]],"v":[[-0.5,39],[16.323,25.761],[32.749,29.311],[32.672,-37.435],[15.412,-41.679],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-6.329,2.233],[-8.416,0.758],[0,0],[7.221,-4.999],[1.5,-4.819]],"o":[[3.175,-3.32],[8.171,-2.6],[0,0],[-4.76,2.054],[-6.446,1.835],[0,0]],"v":[[-0.5,39],[9.162,22.767],[23.666,24.742],[23.844,-43.137],[6.279,-45.001],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":8,"s":[{"i":[[0,0],[-6.329,2.233],[-8.416,0.758],[0,0],[7.221,-4.999],[1.5,-4.819]],"o":[[3.175,-3.32],[8.171,-2.6],[0,0],[-4.76,2.054],[-6.446,1.835],[0,0]],"v":[[-0.5,39],[9.162,22.767],[23.666,24.742],[23.844,-43.137],[6.279,-45.001],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-0.623,5.564],[3.805,1.625],[0,0],[1.662,-5.182],[0.066,-4.247]],"o":[[1.197,-3.156],[0.21,-6.302],[0,0],[-2.149,-1.445],[-1.089,6.539],[0,0]],"v":[[-0.5,39],[-0.344,23.176],[3.219,14.169],[3.285,-52.812],[0.506,-42.789],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":9,"s":[{"i":[[0,0],[-0.623,5.564],[3.805,1.625],[0,0],[1.662,-5.182],[0.066,-4.247]],"o":[[1.197,-3.156],[0.21,-6.302],[0,0],[-2.149,-1.445],[-1.089,6.539],[0,0]],"v":[[-0.5,39],[-0.344,23.176],[3.219,14.169],[3.285,-52.812],[0.506,-42.789],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[0.393,5.895],[0.713,4.43],[0,0],[-0.451,-4.642],[-0.651,-3.961]],"o":[[0.208,-3.075],[-0.403,-6.048],[0,0],[-0.927,-1.359],[0.747,5.665],[0,0]],"v":[[-0.5,39],[-5.263,23.548],[-5.296,12.903],[-5.286,-53.629],[-3.867,-42.071],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":10,"s":[{"i":[[0,0],[0.393,5.895],[0.713,4.43],[0,0],[-0.451,-4.642],[-0.651,-3.961]],"o":[[0.208,-3.075],[-0.403,-6.048],[0,0],[-0.927,-1.359],[0.747,5.665],[0,0]],"v":[[-0.5,39],[-5.263,23.548],[-5.296,12.903],[-5.286,-53.629],[-3.867,-42.071],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[2.665,6.052],[1.27,4.862],[0,0],[-2.564,-4.101],[-1.369,-3.675]],"o":[[-0.781,-2.993],[-2.317,-5.753],[0,0],[0.295,-1.273],[2.406,5.521],[0,0]],"v":[[-0.5,39],[-10.183,23.919],[-13.811,11.638],[-13.857,-54.445],[-10.073,-39.187],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":11,"s":[{"i":[[0,0],[2.665,6.052],[1.27,4.862],[0,0],[-2.564,-4.101],[-1.369,-3.675]],"o":[[-0.781,-2.993],[-2.317,-5.753],[0,0],[0.295,-1.273],[2.406,5.521],[0,0]],"v":[[-0.5,39],[-10.183,23.919],[-13.811,11.638],[-13.857,-54.445],[-10.073,-39.187],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[4.936,6.209],[1.826,5.295],[0,0],[-5.138,-4.28],[-2.086,-3.389]],"o":[[-1.77,-2.911],[-4.231,-5.458],[0,0],[1.517,-1.187],[4.421,3.919],[0,0]],"v":[[-0.5,39],[-15.102,24.29],[-22.326,10.372],[-22.428,-55.262],[-15.445,-40.137],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":12,"s":[{"i":[[0,0],[4.936,6.209],[1.826,5.295],[0,0],[-5.138,-4.28],[-2.086,-3.389]],"o":[[-1.77,-2.911],[-4.231,-5.458],[0,0],[1.517,-1.187],[4.421,3.919],[0,0]],"v":[[-0.5,39],[-15.102,24.29],[-22.326,10.372],[-22.428,-55.262],[-15.445,-40.137],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[7.972,3.99],[3.476,2.237],[0,0],[-7.696,-2.788],[-3.11,-2.981]],"o":[[-3.182,-2.795],[-6.9,-3.499],[0,0],[3.262,-1.064],[7.335,2.924],[0,0]],"v":[[-0.5,39],[-24.059,29.356],[-34.622,20.481],[-34.673,-45.559],[-19.617,-35.913],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":14,"s":[{"i":[[0,0],[7.972,3.99],[3.476,2.237],[0,0],[-7.696,-2.788],[-3.11,-2.981]],"o":[[-3.182,-2.795],[-6.9,-3.499],[0,0],[3.262,-1.064],[7.335,2.924],[0,0]],"v":[[-0.5,39],[-24.059,29.356],[-34.622,20.481],[-34.673,-45.559],[-19.617,-35.913],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[11.009,1.771],[5.125,-0.821],[0,0],[-10.714,-2.016],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-9.569,-1.539],[0,0],[5.007,-0.941],[10.249,1.928],[0,0]],"v":[[-0.5,39],[-24.182,30.589],[-46.917,30.589],[-46.917,-35.857],[-22.288,-35.857],[-0.5,-27.446]],"c":true}]},{"t":16}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":5,"s":[1,1,1,1],"e":[0.929411768913,0.964705884457,0.988235294819,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":9,"s":[0.929411768913,0.964705884457,0.988235294819,1],"e":[0.356862745098,1,0.913725490196,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":12,"s":[0.356862745098,1,0.913725490196,1],"e":[1,1,1,1]},{"t":18}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":3,"op":24,"st":-20,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"turn_white 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[176.291,201,0],"ix":2},"a":{"a":0,"k":[-23.709,1,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":8,"s":[{"i":[[0,0],[-11.984,1.525],[5.125,-0.821],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[22.651,29.922],[45.583,31.422],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-11.984,1.525],[-12.249,-1.589],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[19.151,26.256],[39.916,29.756],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":10,"s":[{"i":[[0,0],[-11.984,1.525],[-12.249,-1.589],[0,0],[12.454,-1.696],[7.667,-4.607]],"o":[[6,-3.553],[9.615,-1.223],[0,0],[-8.083,-1.863],[-12.284,1.673],[0,0]],"v":[[-0.5,39],[19.151,26.256],[39.916,29.756],[44.916,-36.523],[23.712,-37.19],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-9.157,-0.595],[-11.249,0.272],[0,0],[8.588,-2.821],[4.583,-4.713]],"o":[[4.587,-3.436],[8.01,-0.761],[0,0],[-10.838,-1.065],[-8.912,0.346],[0,0]],"v":[[-0.5,39],[16.323,25.761],[32.749,29.311],[32.672,-37.435],[15.412,-41.679],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":12,"s":[{"i":[[0,0],[-9.157,-0.595],[-11.249,0.272],[0,0],[8.588,-2.821],[4.583,-4.713]],"o":[[4.587,-3.436],[8.01,-0.761],[0,0],[-10.838,-1.065],[-8.912,0.346],[0,0]],"v":[[-0.5,39],[16.323,25.761],[32.749,29.311],[32.672,-37.435],[15.412,-41.679],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-6.329,2.233],[-8.416,0.758],[0,0],[7.221,-4.999],[1.5,-4.819]],"o":[[3.175,-3.32],[8.171,-2.6],[0,0],[-4.76,2.054],[-6.446,1.835],[0,0]],"v":[[-0.5,39],[9.162,22.767],[23.666,24.742],[23.844,-43.137],[6.279,-45.001],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":13,"s":[{"i":[[0,0],[-6.329,2.233],[-8.416,0.758],[0,0],[7.221,-4.999],[1.5,-4.819]],"o":[[3.175,-3.32],[8.171,-2.6],[0,0],[-4.76,2.054],[-6.446,1.835],[0,0]],"v":[[-0.5,39],[9.162,22.767],[23.666,24.742],[23.844,-43.137],[6.279,-45.001],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-0.623,5.564],[3.805,1.625],[0,0],[1.662,-5.182],[0.066,-4.247]],"o":[[1.197,-3.156],[0.21,-6.302],[0,0],[-2.149,-1.445],[-1.089,6.539],[0,0]],"v":[[-0.5,39],[-0.344,23.176],[3.219,14.169],[3.285,-52.812],[0.506,-42.789],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":14,"s":[{"i":[[0,0],[-0.623,5.564],[3.805,1.625],[0,0],[1.662,-5.182],[0.066,-4.247]],"o":[[1.197,-3.156],[0.21,-6.302],[0,0],[-2.149,-1.445],[-1.089,6.539],[0,0]],"v":[[-0.5,39],[-0.344,23.176],[3.219,14.169],[3.285,-52.812],[0.506,-42.789],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[0.393,5.895],[0.713,4.43],[0,0],[-0.451,-4.642],[-0.651,-3.961]],"o":[[0.208,-3.075],[-0.403,-6.048],[0,0],[-0.927,-1.359],[0.747,5.665],[0,0]],"v":[[-0.5,39],[-5.263,23.548],[-5.296,12.903],[-5.286,-53.629],[-3.867,-42.071],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":15,"s":[{"i":[[0,0],[0.393,5.895],[0.713,4.43],[0,0],[-0.451,-4.642],[-0.651,-3.961]],"o":[[0.208,-3.075],[-0.403,-6.048],[0,0],[-0.927,-1.359],[0.747,5.665],[0,0]],"v":[[-0.5,39],[-5.263,23.548],[-5.296,12.903],[-5.286,-53.629],[-3.867,-42.071],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[2.665,6.052],[1.27,4.862],[0,0],[-2.564,-4.101],[-1.369,-3.675]],"o":[[-0.781,-2.993],[-2.317,-5.753],[0,0],[0.295,-1.273],[2.406,5.521],[0,0]],"v":[[-0.5,39],[-10.183,23.919],[-13.811,11.638],[-13.857,-54.445],[-10.073,-39.187],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":16,"s":[{"i":[[0,0],[2.665,6.052],[1.27,4.862],[0,0],[-2.564,-4.101],[-1.369,-3.675]],"o":[[-0.781,-2.993],[-2.317,-5.753],[0,0],[0.295,-1.273],[2.406,5.521],[0,0]],"v":[[-0.5,39],[-10.183,23.919],[-13.811,11.638],[-13.857,-54.445],[-10.073,-39.187],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[4.936,6.209],[1.826,5.295],[0,0],[-5.138,-4.28],[-2.086,-3.389]],"o":[[-1.77,-2.911],[-4.231,-5.458],[0,0],[1.517,-1.187],[4.421,3.919],[0,0]],"v":[[-0.5,39],[-15.102,24.29],[-22.326,10.372],[-22.428,-55.262],[-15.445,-40.137],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":17,"s":[{"i":[[0,0],[4.936,6.209],[1.826,5.295],[0,0],[-5.138,-4.28],[-2.086,-3.389]],"o":[[-1.77,-2.911],[-4.231,-5.458],[0,0],[1.517,-1.187],[4.421,3.919],[0,0]],"v":[[-0.5,39],[-15.102,24.29],[-22.326,10.372],[-22.428,-55.262],[-15.445,-40.137],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[7.972,3.99],[3.476,2.237],[0,0],[-7.696,-2.788],[-3.11,-2.981]],"o":[[-3.182,-2.795],[-6.9,-3.499],[0,0],[3.262,-1.064],[7.335,2.924],[0,0]],"v":[[-0.5,39],[-24.059,29.356],[-34.622,20.481],[-34.673,-45.559],[-19.617,-35.913],[-0.5,-27.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":19,"s":[{"i":[[0,0],[7.972,3.99],[3.476,2.237],[0,0],[-7.696,-2.788],[-3.11,-2.981]],"o":[[-3.182,-2.795],[-6.9,-3.499],[0,0],[3.262,-1.064],[7.335,2.924],[0,0]],"v":[[-0.5,39],[-24.059,29.356],[-34.622,20.481],[-34.673,-45.559],[-19.617,-35.913],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[11.009,1.771],[5.125,-0.821],[0,0],[-10.714,-2.016],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-9.569,-1.539],[0,0],[5.007,-0.941],[10.249,1.928],[0,0]],"v":[[-0.5,39],[-24.182,30.589],[-46.917,30.589],[-46.917,-35.857],[-22.288,-35.857],[-0.5,-27.446]],"c":true}]},{"t":21}],"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 2","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":13,"st":-15,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"trumpet_particle","parent":13,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-32.188,0],"ix":2},"a":{"a":0,"k":[50,75,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":100,"h":150,"ip":22,"op":79,"st":18,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"middle_line","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[-1,5.5,0],"e":[-1,2.5,0],"to":[0,-0.5,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":7,"s":[-1,2.5,0],"e":[-1,5.5,0],"to":[0,0,0],"ti":[0,-0.5,0]},{"t":15}],"ix":2},"a":{"a":0,"k":[-1,5.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":0,"s":[100,100,100],"e":[112,112,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":7,"s":[112,112,100],"e":[100,100,100]},{"t":15}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-1,-28],[-1,39]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.776470601559,0.886274516582,0.960784316063,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":200,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"book_turn_pages","parent":13,"refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-0.188,0],"ix":2},"a":{"a":0,"k":[200,200,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":400,"h":400,"ip":44,"op":69,"st":44,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"book_turn_pages","parent":13,"refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-0.188,0],"ix":2},"a":{"a":0,"k":[200,200,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":400,"h":400,"ip":29,"op":54,"st":29,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"wpage_right","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[22.709,1,0],"ix":2},"a":{"a":0,"k":[22.709,1,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[-11.009,1.771],[-5.125,-0.821],[0,0],[10.714,-2.016],[4.135,-2.572]],"o":[[4.595,-2.678],[9.569,-1.539],[0,0],[-5.007,-0.941],[-10.249,1.928],[0,0]],"v":[[-0.5,39],[23.182,30.589],[45.917,30.589],[45.917,-35.857],[21.288,-35.857],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-9.516,2.411],[-4.917,-1.256],[0,0],[10.714,-2.016],[4.135,-2.572]],"o":[[4.595,-2.678],[9.364,-2.373],[0,0],[-4.417,-2.81],[-10.249,1.928],[0,0]],"v":[[-0.5,39],[19.516,22.922],[29.751,23.422],[29.751,-41.357],[16.788,-44.523],[-0.5,-34.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":7,"s":[{"i":[[0,0],[-9.516,2.411],[-4.917,-1.256],[0,0],[10.714,-2.016],[4.135,-2.572]],"o":[[4.595,-2.678],[9.364,-2.373],[0,0],[-4.417,-2.81],[-10.249,1.928],[0,0]],"v":[[-0.5,39],[19.516,22.922],[29.751,23.422],[29.751,-41.357],[16.788,-44.523],[-0.5,-34.113]],"c":true}],"e":[{"i":[[0,0],[-11.009,1.771],[-5.125,-0.821],[0,0],[10.714,-2.016],[4.135,-2.572]],"o":[[4.595,-2.678],[9.569,-1.539],[0,0],[-5.007,-0.941],[-10.249,1.928],[0,0]],"v":[[-0.5,39],[23.182,30.589],[45.917,30.589],[45.917,-35.857],[21.288,-35.857],[-0.5,-27.446]],"c":true}]},{"t":15}],"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":200,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"wpage_left","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-23.709,1,0],"ix":2},"a":{"a":0,"k":[-23.709,1,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[11.009,1.771],[5.125,-0.821],[0,0],[-10.714,-2.016],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-9.569,-1.539],[0,0],[5.007,-0.941],[10.249,1.928],[0,0]],"v":[[-0.5,39],[-24.182,30.589],[-46.917,30.589],[-46.917,-35.857],[-22.288,-35.857],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[9.182,4.744],[5.125,-0.821],[0,0],[-9.689,-4.999],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-8.611,-4.449],[0,0],[5.007,-0.941],[8.121,4.19],[0,0]],"v":[[-0.5,39],[-16.849,24.089],[-29.084,19.922],[-29.584,-45.385],[-15.621,-44.552],[-0.5,-34.529]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":7,"s":[{"i":[[0,0],[9.182,4.744],[5.125,-0.821],[0,0],[-9.689,-4.999],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-8.611,-4.449],[0,0],[5.007,-0.941],[8.121,4.19],[0,0]],"v":[[-0.5,39],[-16.849,24.089],[-29.084,19.922],[-29.584,-45.385],[-15.621,-44.552],[-0.5,-34.529]],"c":true}],"e":[{"i":[[0,0],[11.009,1.771],[5.125,-0.821],[0,0],[-10.714,-2.016],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-9.569,-1.539],[0,0],[5.007,-0.941],[10.249,1.928],[0,0]],"v":[[-0.5,39],[-24.182,30.589],[-46.917,30.589],[-46.917,-35.857],[-22.288,-35.857],[-0.5,-27.446]],"c":true}]},{"t":15}],"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,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":200,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"backpage_right","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[22.709,1,0],"ix":2},"a":{"a":0,"k":[22.709,1,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[-11.009,1.771],[-5.125,-0.821],[0,0],[10.714,-2.016],[4.135,-2.572]],"o":[[4.595,-2.678],[9.569,-1.539],[0,0],[-5.007,-0.941],[-10.249,1.928],[0,0]],"v":[[-0.5,39],[23.182,30.589],[45.917,30.589],[45.917,-35.857],[21.288,-35.857],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[-9.516,2.411],[-4.917,-1.256],[0,0],[10.714,-2.016],[4.135,-2.572]],"o":[[4.595,-2.678],[9.364,-2.373],[0,0],[-4.417,-2.81],[-10.249,1.928],[0,0]],"v":[[-0.5,39],[19.516,22.922],[29.751,23.422],[29.751,-41.357],[16.788,-44.523],[-0.5,-34.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":7,"s":[{"i":[[0,0],[-9.516,2.411],[-4.917,-1.256],[0,0],[10.714,-2.016],[4.135,-2.572]],"o":[[4.595,-2.678],[9.364,-2.373],[0,0],[-4.417,-2.81],[-10.249,1.928],[0,0]],"v":[[-0.5,39],[19.516,22.922],[29.751,23.422],[29.751,-41.357],[16.788,-44.523],[-0.5,-34.113]],"c":true}],"e":[{"i":[[0,0],[-11.009,1.771],[-5.125,-0.821],[0,0],[10.714,-2.016],[4.135,-2.572]],"o":[[4.595,-2.678],[9.569,-1.539],[0,0],[-5.007,-0.941],[-10.249,1.928],[0,0]],"v":[[-0.5,39],[23.182,30.589],[45.917,30.589],[45.917,-35.857],[21.288,-35.857],[-0.5,-27.446]],"c":true}]},{"t":15}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.890196078431,0.949019607843,0.988235294118,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":200,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"backpages left","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-23.709,1,0],"ix":2},"a":{"a":0,"k":[-23.709,1,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[11.009,1.771],[5.125,-0.821],[0,0],[-10.714,-2.016],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-9.569,-1.539],[0,0],[5.007,-0.941],[10.249,1.928],[0,0]],"v":[[-0.5,39],[-24.182,30.589],[-46.917,30.589],[-46.917,-35.857],[-22.288,-35.857],[-0.5,-27.446]],"c":true}],"e":[{"i":[[0,0],[9.182,4.744],[5.125,-0.821],[0,0],[-9.689,-4.999],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-8.611,-4.449],[0,0],[5.007,-0.941],[8.121,4.19],[0,0]],"v":[[-0.5,39],[-16.849,24.089],[-29.084,19.922],[-29.584,-45.385],[-15.621,-44.552],[-0.5,-34.529]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":7,"s":[{"i":[[0,0],[9.182,4.744],[5.125,-0.821],[0,0],[-9.689,-4.999],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-8.611,-4.449],[0,0],[5.007,-0.941],[8.121,4.19],[0,0]],"v":[[-0.5,39],[-16.849,24.089],[-29.084,19.922],[-29.584,-45.385],[-15.621,-44.552],[-0.5,-34.529]],"c":true}],"e":[{"i":[[0,0],[11.009,1.771],[5.125,-0.821],[0,0],[-10.714,-2.016],[-4.135,-2.572]],"o":[[-4.595,-2.678],[-9.569,-1.539],[0,0],[5.007,-0.941],[10.249,1.928],[0,0]],"v":[[-0.5,39],[-24.182,30.589],[-46.917,30.589],[-46.917,-35.857],[-22.288,-35.857],[-0.5,-27.446]],"c":true}]},{"t":15}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.890196078431,0.949019607843,0.988235294118,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":200,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"side_right","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[51.127,1.992,0],"e":[35.127,-5.008,0],"to":[-2.66666674613953,-1.16666662693024,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":7,"s":[35.127,-5.008,0],"e":[51.127,1.992,0],"to":[0,0,0],"ti":[-2.66666674613953,-1.16666662693024,0]},{"t":15}],"ix":2},"a":{"a":0,"k":[51.127,1.992,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[45.917,-35.016],[56.337,-28.287],[56.337,39],[45.917,30.589]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.929411764706,0.964705882353,0.988235294118,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":200,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"side_left","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[-52.5,3,0],"e":[-34.5,-7,0],"to":[3,-1.66666662693024,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":7,"s":[-34.5,-7,0],"e":[-52.5,3,0],"to":[0,0,0],"ti":[3,-1.66666662693024,0]},{"t":15}],"ix":2},"a":{"a":0,"k":[-52.5,3,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-58,-27],[-47,-35],[-47,31],[-58,41]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.929411764706,0.964705882353,0.988235294118,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":200,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"backpage","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-0.5,6.836,0],"ix":2},"a":{"a":0,"k":[-0.5,6.836,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[11.113,-0.042],[13.996,0.314],[13.816,0.031],[5.878,-1.395],[0,0],[0,0]],"o":[[-5.653,-0.909],[-15.423,0.058],[-14.788,-0.332],[-10.941,-0.024],[0,0],[0,0],[0,0]],"v":[[56.761,41],[31,39],[-1,41],[-32,38],[-57.761,41],[-57.761,-27.358],[56.761,-27.358]],"c":true}],"e":[{"i":[[0,0],[9.333,-5.833],[5.834,0.417],[14.667,5.333],[5.878,-1.395],[0,0],[0,0]],"o":[[-5.653,-0.909],[-13.079,8.174],[-7.399,-0.528],[-10.282,-3.739],[0,0],[0,0],[0,0]],"v":[[39.095,29.667],[20.5,33],[-1,43.333],[-21.833,32.833],[-40.261,29.5],[-41.095,-36.358],[39.261,-35.025]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":7,"s":[{"i":[[0,0],[9.333,-5.833],[5.834,0.417],[14.667,5.333],[5.878,-1.395],[0,0],[0,0]],"o":[[-5.653,-0.909],[-13.079,8.174],[-7.399,-0.528],[-10.282,-3.739],[0,0],[0,0],[0,0]],"v":[[39.095,29.667],[20.5,33],[-1,43.333],[-21.833,32.833],[-40.261,29.5],[-41.095,-36.358],[39.261,-35.025]],"c":true}],"e":[{"i":[[0,0],[11.113,-0.042],[13.996,0.314],[13.816,0.031],[5.878,-1.395],[0,0],[0,0]],"o":[[-5.653,-0.909],[-15.423,0.058],[-14.788,-0.332],[-10.941,-0.024],[0,0],[0,0],[0,0]],"v":[[56.761,41],[31,39],[-1,41],[-32,38],[-57.761,41],[-57.761,-27.358],[56.761,-27.358]],"c":true}]},{"t":15}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.890196084976,0.949019610882,0.988235294819,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":200,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"cover","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":20,"s":[200,238.978,0],"e":[200,237,0],"to":[0,-0.06978402286768,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":24,"s":[200,237,0],"e":[200,244,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.588,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p588_1_0p167_0p167","t":30,"s":[200,244,0],"e":[200,237,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.725,"y":1},"o":{"x":0.353,"y":0},"n":"0p725_1_0p353_0","t":38,"s":[200,237,0],"e":[200,240,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.725,"y":1},"o":{"x":0.167,"y":0},"n":"0p725_1_0p167_0","t":43,"s":[200,240,0],"e":[200,239,0],"to":[0,0,0],"ti":[0,0,0]},{"t":50}],"ix":2},"a":{"a":0,"k":[0,45,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":26,"s":[100,100,100],"e":[95,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":31,"s":[95,105,100],"e":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":38,"s":[100,100,100],"e":[105,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":43,"s":[105,95,100],"e":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":50,"s":[97,103,100],"e":[102,98,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":55,"s":[102,98,100],"e":[100,100,100]},{"t":60}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[0,0],[11.95,-0.108],[15.058,0.12],[14.191,0.159],[5.988,-1.245],[0,23.224]],"o":[[0,0],[-5.918,-1.219],[-15.082,0.137],[-14.195,-0.113],[-11.896,-0.133],[0,-23.224],[0,0]],"v":[[59,-26],[59.5,43.673],[32,41],[-1.252,43.672],[-32,41],[-59.5,43.673],[-59.5,-26]],"c":false}],"e":[{"i":[[0,0],[0,0],[11.621,-4.358],[15.058,0.12],[13.105,5.446],[5.988,-1.245],[0,23.224]],"o":[[0,0],[-5.918,-1.219],[-13.333,5],[-14.195,-0.113],[-12.833,-5.333],[0,-23.224],[0,0]],"v":[[40,-32],[39.667,30.673],[19.833,34.167],[-1.252,43.672],[-20.167,34.667],[-40.333,30.673],[-40.167,-32.667]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":7,"s":[{"i":[[0,0],[0,0],[11.621,-4.358],[15.058,0.12],[13.105,5.446],[5.988,-1.245],[0,23.224]],"o":[[0,0],[-5.918,-1.219],[-13.333,5],[-14.195,-0.113],[-12.833,-5.333],[0,-23.224],[0,0]],"v":[[40,-32],[39.667,30.673],[19.833,34.167],[-1.252,43.672],[-20.167,34.667],[-40.333,30.673],[-40.167,-32.667]],"c":false}],"e":[{"i":[[0,0],[0,0],[11.95,-0.108],[15.058,0.12],[14.191,0.159],[5.988,-1.245],[0,23.224]],"o":[[0,0],[-5.918,-1.219],[-15.082,0.137],[-14.195,-0.113],[-11.896,-0.133],[0,-23.224],[0,0]],"v":[[59,-26],[59.5,43.673],[32,41],[-1.252,43.672],[-32,41],[-59.5,43.673],[-59.5,-26]],"c":false}]},{"t":15}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.341176480055,0.341176480055,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":2,"lj":2,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":200,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"rim","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-1,40.5,0],"ix":2},"a":{"a":0,"k":[-1,40.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.694,0],[0,0],[0,4.694],[0,0],[-4.694,0],[0,0],[0,-4.694],[0,0]],"o":[[0,0],[-4.694,0],[0,0],[0,-4.694],[0,0],[4.694,0],[0,0],[0,4.694]],"v":[[2.889,49],[-4.889,49],[-13.389,40.5],[-13.389,40.5],[-4.889,32],[2.889,32],[11.389,40.5],[11.389,40.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.341176480055,0.341176480055,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":200,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"icon_circle","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[200.05,200.05,0],"ix":2},"a":{"a":0,"k":[0.05,0.05,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-46.281,0],[0,-46.281],[46.281,0],[0,46.281]],"o":[[46.281,0],[0,46.281],[-46.281,0],[0,-46.281]],"v":[[0.05,-83.75],[83.85,0.05],[0.05,83.85],[-83.75,0.05]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":200,"op":200,"st":0,"bm":0,"hidden":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/assets/scdream9_black.otf b/app/src/main/assets/scdream9_black.otf new file mode 100644 index 0000000..f6db18f Binary files /dev/null and b/app/src/main/assets/scdream9_black.otf differ diff --git a/app/src/main/assets/splash_book.json b/app/src/main/assets/splash_book.json new file mode 100644 index 0000000..cc68ecb --- /dev/null +++ b/app/src/main/assets/splash_book.json @@ -0,0 +1 @@ +{"v":"5.1.18","fr":29.9700012207031,"ip":0,"op":120.0000048877,"w":400,"h":400,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"line1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":2,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":8,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":93,"s":[100],"e":[0]},{"t":97.000003950891}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":0,"s":[110.949,144.875,0],"e":[147.199,144.875,0],"to":[6.04166650772095,0,0],"ti":[-6.04166650772095,0,0]},{"t":8.00000032584668}],"ix":2},"a":{"a":0,"k":[-59.875,-63.75,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":0,"s":[0.475,100,100],"e":[92.988,100,100]},{"t":8.00000032584668}],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":92,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-98.924,-66.5],[-98.924,-61],[-20.826,-61],[-20.826,-66.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-98.924,-66.5],[-98.924,-61],[-25.608,-61],[-25.608,-66.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":93,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-98.924,-66.5],[-98.924,-61],[-25.608,-61],[-25.608,-66.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-98.924,-66.5],[-98.924,-61],[-98.871,-61],[-98.871,-66.5]],"c":true}]},{"t":97.3312539643831}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30.75,5.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-59.875,-63.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[253.976,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120.0000048877,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"line2 - A","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":6,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":8,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":14,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":93,"s":[100],"e":[0]},{"t":97.000003950891}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":6,"s":[111.324,158.375,0],"e":[121.574,158.375,0],"to":[1.70833337306976,0,0],"ti":[-1.70833337306976,0,0]},{"t":14.0000005702317}],"ix":2},"a":{"a":0,"k":[-71.972,-63.75,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":6,"s":[0.475,100,100],"e":[73.199,100,100]},{"t":14.0000005702317}],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":94,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-85.97,-66.5],[-85.97,-61],[-33.78,-61],[-33.78,-66.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-85.97,-66.5],[-85.97,-61],[-46.457,-61],[-46.457,-66.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":95,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-85.97,-66.5],[-85.97,-61],[-46.457,-61],[-46.457,-66.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-85.97,-66.5],[-85.97,-61],[-84.368,-61],[-84.368,-66.5]],"c":true}]},{"t":97.000003950891}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30.75,5.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-59.875,-63.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[169.725,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120.0000048877,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"line2 - B","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":12,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":14,"s":[100],"e":[100]},{"t":18.000000733155}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":12,"s":[158.324,158.375,0],"e":[167.074,158.375,0],"to":[1.45833337306976,0,0],"ti":[-1.45833337306976,0,0]},{"t":18.000000733155}],"ix":2},"a":{"a":0,"k":[-71.972,-63.75,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":12,"s":[0.475,100,100],"e":[56.834,100,100]},{"t":18.000000733155}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30.75,5.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-71.972,-63.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[103.444,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":94.0000038286985,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"line3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":14,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":16,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":22,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":93,"s":[100],"e":[0]},{"t":97.000003950891}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":14,"s":[110.949,170.125,0],"e":[142.449,170.125,0],"to":[5.25,0,0],"ti":[-5.25,0,0]},{"t":22.0000008960784}],"ix":2},"a":{"a":0,"k":[-59.875,-63.75,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":14,"s":[0.475,100,100],"e":[80.823,100,100]},{"t":22.0000008960784}],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":93,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-98.924,-66.5],[-98.924,-61],[-20.826,-61],[-20.826,-66.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-98.924,-66.5],[-98.924,-61],[-40.17,-61],[-40.17,-66.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":94,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-98.924,-66.5],[-98.924,-61],[-40.17,-61],[-40.17,-66.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-98.924,-66.5],[-98.924,-61],[-98.785,-61],[-98.785,-66.5]],"c":true}]},{"t":97.2650039616847}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30.75,5.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-59.875,-63.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[253.976,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120.0000048877,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"line4 - A","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":20,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":22,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":26,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":93,"s":[100],"e":[0]},{"t":97.000003950891}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":20,"s":[111.324,182.125,0],"e":[120.824,182.125,0],"to":[1.58333337306976,0,0],"ti":[-1.58333337306976,0,0]},{"t":26.0000010590017}],"ix":2},"a":{"a":0,"k":[-71.972,-63.75,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":20,"s":[0.475,100,100],"e":[56.834,100,100]},{"t":26.0000010590017}],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":95,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-87.876,-66.5],[-87.876,-61],[-56.067,-61],[-56.067,-66.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-87.876,-66.5],[-87.876,-61],[-66.383,-61],[-66.383,-66.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":96,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-87.876,-66.5],[-87.876,-61],[-66.383,-61],[-66.383,-66.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-87.876,-66.5],[-87.876,-61],[-87.497,-61],[-87.497,-66.5]],"c":true}]},{"t":97.000003950891}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30.75,5.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-71.972,-63.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[103.444,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120.0000048877,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"line4 - B","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":24,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":26,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":32,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":93,"s":[100],"e":[0]},{"t":97.000003950891}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":24,"s":[136.574,182.125,0],"e":[159.824,182.125,0],"to":[3.875,0,0],"ti":[-3.875,0,0]},{"t":32.0000013033867}],"ix":2},"a":{"a":0,"k":[-59.875,-63.75,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":24,"s":[0.475,100,100],"e":[90.218,100,100]},{"t":32.0000013033867}],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":92,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-85.97,-66.5],[-85.97,-61],[-33.78,-61],[-33.78,-66.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-85.97,-66.5],[-85.97,-61],[-39.174,-61],[-39.174,-66.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":93,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-85.97,-66.5],[-85.97,-61],[-39.174,-61],[-39.174,-66.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-85.97,-66.5],[-85.97,-61],[-82.402,-61],[-82.402,-66.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":95,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-85.97,-66.5],[-85.97,-61],[-82.402,-61],[-82.402,-66.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-85.97,-66.5],[-85.97,-61],[-85.866,-61],[-85.866,-66.5]],"c":true}]},{"t":96.0000039101602}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30.75,5.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-59.875,-63.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[169.725,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120.0000048877,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"picture-cloud","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":29,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":32,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":55,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":93,"s":[100],"e":[0]},{"t":97.000003950891}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":29,"s":[0],"e":[4]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":42,"s":[4],"e":[-4]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":49,"s":[-4],"e":[0]},{"t":55.0000022401959}],"ix":10},"p":{"a":0,"k":[114.188,195.438,0],"ix":2},"a":{"a":0,"k":[-83.211,-6.813,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.734,0.734,0.333],"y":[0,0,0]},"n":["0p667_1_0p734_0","0p667_1_0p734_0","0p667_1_0p333_0"],"t":29,"s":[19.122,19.689,100],"e":[111.8,114.915,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":42,"s":[111.8,114.915,100],"e":[71.508,74.274,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":49,"s":[71.508,74.274,100],"e":[97.122,100,100]},{"t":55.0000022401959}],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":92,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-87.007,-10.25],[-87.007,39.908],[-9.875,39.908],[-9.875,-10.25]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-86.235,-10.933],[-86.235,40],[-16.864,40],[-16.864,-10.933]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":93,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-86.235,-10.933],[-86.235,40],[-16.864,40],[-16.864,-10.933]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-87.007,-9.75],[-87.007,40.25],[-83.919,40.25],[-83.919,-9.75]],"c":true}]},{"t":97.000003950891}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[69.5,42.75],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-48.486,14.533],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[18.184,2.339],[19.961,0],[6.909,-14.122],[5.398,0],[0,-23.473],[-23.472,0],[0,0],[-0.344,0.017],[-0.659,0],[0,20.434]],"o":[[-4.563,-18.552],[-16.781,0],[-4.75,-1.835],[-23.472,0],[0,23.472],[0,0],[0.35,0],[0.652,0.034],[20.435,0],[0,-18.82]],"v":[[52.513,-20.685],[11.25,-53],[-26.945,-29.149],[-42.25,-32],[-84.75,10.5],[-42.25,53],[44.75,53],[45.785,52.947],[47.75,53],[84.75,16]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":53,"s":[-49.843,30.373],"e":[-49.843,14.373],"to":[0,-2.66666674613953],"ti":[0,2.66666674613953]},{"t":59.0000024031193}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[18.39,18.39],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":53,"s":[0],"e":[100]},{"t":59.0000024031193}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Cloud 2","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120.0000048877,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"R line1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":29,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":31,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":37,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":85,"s":[100],"e":[0]},{"t":91.000003706506}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":29,"s":[213.949,144.875,0],"e":[250.199,144.875,0],"to":[6.04166650772095,0,0],"ti":[-6.04166650772095,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"n":"0p667_0p667_0p167_0p167","t":37,"s":[250.199,144.875,0],"e":[250.199,144.875,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"n":"0p667_1_0p167_0","t":85,"s":[250.199,144.875,0],"e":[212.949,144.875,0],"to":[-6.20833349227905,0,0],"ti":[6.20833349227905,0,0]},{"t":91.000003706506}],"ix":2},"a":{"a":0,"k":[-59.875,-63.75,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":29,"s":[0.475,100,100],"e":[92.988,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":37,"s":[92.988,100,100],"e":[92.988,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":85,"s":[92.988,100,100],"e":[2.876,100,100]},{"t":91.000003706506}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30.75,5.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-59.875,-63.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[253.976,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":29.0000011811942,"op":120.0000048877,"st":29.0000011811942,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"R line2 - A","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":35,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":37,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":43,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":85,"s":[100],"e":[0]},{"t":91.000003706506}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":35,"s":[213.824,158.375,0],"e":[224.074,158.375,0],"to":[1.70833337306976,0,0],"ti":[-1.70833337306976,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"n":"0p667_0p667_0p167_0p167","t":43,"s":[224.074,158.375,0],"e":[224.074,158.375,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"n":"0p667_1_0p167_0","t":85,"s":[224.074,158.375,0],"e":[210.636,158.375,0],"to":[-2.23958325386047,0,0],"ti":[2.23958325386047,0,0]},{"t":91.000003706506}],"ix":2},"a":{"a":0,"k":[-71.972,-63.75,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":35,"s":[0.475,100,100],"e":[73.199,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":43,"s":[73.199,100,100],"e":[73.199,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":85,"s":[73.199,100,100],"e":[8.15,100,100]},{"t":91.000003706506}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30.75,5.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-59.875,-63.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[169.725,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":29.0000011811942,"op":120.0000048877,"st":29.0000011811942,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"R line2 - B","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":41,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":43,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":47,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":85,"s":[100],"e":[0]},{"t":91.000003706506}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":41,"s":[261.074,158.375,0],"e":[270.074,158.375,0],"to":[1.5,0,0],"ti":[-1.5,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"n":"0p667_0p667_0p167_0p167","t":47,"s":[270.074,158.375,0],"e":[270.074,158.375,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"n":"0p667_1_0p167_0","t":85,"s":[270.074,158.375,0],"e":[215.824,158.375,0],"to":[-9.04166698455811,0,0],"ti":[9.04166698455811,0,0]},{"t":91.000003706506}],"ix":2},"a":{"a":0,"k":[-71.972,-63.75,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":41,"s":[0.475,100,100],"e":[56.834,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":47,"s":[56.834,100,100],"e":[56.834,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":85,"s":[56.834,100,100],"e":[8.106,100,100]},{"t":91.000003706506}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30.75,5.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-71.972,-63.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[103.444,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":29.0000011811942,"op":120.0000048877,"st":29.0000011811942,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"R line3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":43,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":45,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":51,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":85,"s":[100],"e":[0]},{"t":91.000003706506}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":43,"s":[214.324,170.125,0],"e":[245.699,170.125,0],"to":[5.22916650772095,0,0],"ti":[-5.22916650772095,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"n":"0p667_0p667_0p167_0p167","t":51,"s":[245.699,170.125,0],"e":[245.699,170.125,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"n":"0p667_1_0p167_0","t":85,"s":[245.699,170.125,0],"e":[213.949,170.125,0],"to":[-5.29166650772095,0,0],"ti":[5.29166650772095,0,0]},{"t":91.000003706506}],"ix":2},"a":{"a":0,"k":[-59.875,-63.75,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":43,"s":[0.475,100,100],"e":[80.823,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":51,"s":[80.823,100,100],"e":[80.823,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":85,"s":[80.823,100,100],"e":[5.277,100,100]},{"t":91.000003706506}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30.75,5.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-59.875,-63.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[253.976,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":29.0000011811942,"op":120.0000048877,"st":29.0000011811942,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"R line4 - A","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":49,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":51,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":55,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":85,"s":[100],"e":[0]},{"t":91.000003706506}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":49,"s":[214.449,182.125,0],"e":[223.324,182.125,0],"to":[1.47916662693024,0,0],"ti":[-1.47916662693024,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"n":"0p667_0p667_0p167_0p167","t":55,"s":[223.324,182.125,0],"e":[223.324,182.125,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"n":"0p667_1_0p167_0","t":85,"s":[223.324,182.125,0],"e":[211.074,182.125,0],"to":[-2.04166674613953,0,0],"ti":[2.04166674613953,0,0]},{"t":91.000003706506}],"ix":2},"a":{"a":0,"k":[-71.972,-63.75,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":49,"s":[0.475,100,100],"e":[56.834,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":55,"s":[56.834,100,100],"e":[56.834,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":85,"s":[56.834,100,100],"e":[4.962,100,100]},{"t":91.000003706506}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[30.75,5.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-71.972,-63.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[103.444,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":29.0000011811942,"op":120.0000048877,"st":29.0000011811942,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"loading book Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[200,38.454,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[156.083,156.083,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":85,"s":[{"i":[[28.154,0],[0,0],[0,0],[-25.122,0],[0,0],[0,0]],"o":[[-25.122,0],[0,0],[0,0],[23.823,0],[0,0],[0,0]],"v":[[-5.198,-46.346],[-32.486,-41.148],[-32.486,46.346],[-5.198,41.148],[32.486,46.346],[32.486,-41.148]],"c":true}],"e":[{"i":[[-28.087,0],[0,0],[0,0],[25.062,0],[0,0],[0,0]],"o":[[25.062,0],[0,0],[0,0],[-23.766,0],[0,0],[0,0]],"v":[[-59.709,-46.346],[-32.486,-41.148],[-32.486,46.346],[-59.709,41.148],[-97.302,46.346],[-97.302,-41.148]],"c":true}]},{"t":99.0000040323527}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":85,"s":[{"i":[[-17.145,0],[-3.641,-1.312],[0,0],[16.883,0],[4.29,-1.56],[0,0]],"o":[[20.694,0],[0,0],[-5.846,-1.595],[-12.634,0],[0,0],[1.525,-0.958]],"v":[[-5.198,-43.346],[29.486,-39.153],[29.486,42.282],[-5.198,38.148],[-29.486,41.021],[-29.486,-39.895]],"c":true}],"e":[{"i":[[17.008,0],[3.612,-1.312],[0,0],[-16.748,0],[-4.256,-1.56],[0,0]],"o":[[-20.528,0],[0,0],[5.799,-1.595],[12.533,0],[0,0],[-1.513,-0.958]],"v":[[-59.896,-43.346],[-94.302,-39.153],[-94.302,42.282],[-59.896,38.148],[-35.802,41.021],[-35.802,-39.895]],"c":true}]},{"t":99.0000040323527}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[282.052,350.001],"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":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":84,"s":[0],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":85,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":99,"s":[100],"e":[0]},{"t":100.000004073084}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"R-Page 2","np":4,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[28.154,0],[0,0],[0,0],[-25.122,0],[0,0],[0,0]],"o":[[-25.122,0],[0,0],[0,0],[23.823,0],[0,0],[0,0]],"v":[[-5.198,-46.346],[-32.486,-41.148],[-32.486,46.346],[-5.198,41.148],[32.486,46.346],[32.486,-41.148]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-17.145,0],[-3.641,-1.312],[0,0],[16.883,0],[4.29,-1.56],[0,0]],"o":[[20.694,0],[0,0],[-5.846,-1.595],[-12.634,0],[0,0],[1.525,-0.958]],"v":[[-5.198,-43.346],[29.486,-39.153],[29.486,42.282],[-5.198,38.148],[-29.486,41.021],[-29.486,-39.895]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[282.052,350.001],"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":"R-Page","np":4,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[25.122,0],[0,0],[0,0],[-23.823,0],[0,0],[0,0]],"o":[[-28.154,0],[0,0],[0,0],[25.122,0],[0,0],[0,0]],"v":[[5.198,-46.346],[-32.486,-41.148],[-32.486,46.346],[5.198,41.148],[32.486,46.346],[32.486,-41.148]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-20.675,0],[-1.526,-0.958],[0,0],[12.634,0],[5.846,-1.595],[0,0]],"o":[[17.145,0],[0,0],[-4.29,-1.56],[-16.882,0],[0,0],[3.661,-1.319]],"v":[[5.198,-43.346],[29.486,-39.895],[29.486,41.021],[5.198,38.148],[-29.486,42.282],[-29.486,-39.151]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[217.081,350.001],"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":"L-Page","np":4,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[64.538,-45.263],[74.5,-45.263],[74.5,45.263],[-74.5,45.263],[-74.5,-45.263],[-65.404,-45.263]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":10,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[250,358.081],"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":"Cover","np":2,"cix":2,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120.0000048877,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/HomeApplication.kt b/app/src/main/java/com/hyden/booklibrary/HomeApplication.kt new file mode 100644 index 0000000..ea4acc8 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/HomeApplication.kt @@ -0,0 +1,21 @@ +package com.hyden.booklibrary + +import com.google.android.gms.ads.MobileAds +import com.hyden.base.BaseApplication +import com.hyden.booklibrary.di.appModule +import com.hyden.booklibrary.di.networkModule +import com.hyden.booklibrary.di.roomModule +import com.hyden.booklibrary.di.viewModelModule +import org.koin.android.ext.koin.androidContext +import org.koin.core.context.startKoin + +class HomeApplication : BaseApplication() { + override fun onCreate() { + super.onCreate() + MobileAds.initialize(applicationContext) { } + startKoin { + androidContext(this@HomeApplication) + modules(listOf(networkModule, viewModelModule, appModule, roomModule)) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/local/db/AppDataBase.kt b/app/src/main/java/com/hyden/booklibrary/data/local/db/AppDataBase.kt new file mode 100644 index 0000000..53d5e45 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/local/db/AppDataBase.kt @@ -0,0 +1,25 @@ +package com.hyden.booklibrary.data.local.db + +import androidx.room.Database +import androidx.room.RoomDatabase +import com.hyden.booklibrary.util.ConstUtil.Companion.DATABASE_VERSION + +@Database(entities = [BookEntity::class], version = DATABASE_VERSION) +abstract class AppDataBase : RoomDatabase() { + abstract fun getBookDao() : BookDao + +// companion object { +// var INSTANCE: BookDataBase? = null +// fun getDatabase(context: Context): BookDataBase? { +// if (INSTANCE == null) { +// INSTANCE = Room.databaseBuilder( +// context, +// BookDataBase::class.java, +// "${DATABASENAME}.db" +// ) +// .build() +// } +// return INSTANCE +// } +// } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/local/db/BookDao.kt b/app/src/main/java/com/hyden/booklibrary/data/local/db/BookDao.kt new file mode 100644 index 0000000..22a17af --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/local/db/BookDao.kt @@ -0,0 +1,39 @@ +package com.hyden.booklibrary.data.local.db + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.Query +import androidx.room.Update +import com.hyden.booklibrary.util.ConstUtil.Companion.DATABASELIMIT +import com.hyden.booklibrary.util.ConstUtil.Companion.DATABASENAME_BOOK +import io.reactivex.Completable +import io.reactivex.Flowable + +@Dao +interface BookDao { + + @Insert + fun insertBook(bookEntity: List): Completable + + @Insert + fun insertNote(bookEntity: BookEntity?): Completable + + + @Query("DELETE FROM $DATABASENAME_BOOK WHERE isbn13 = :isbn13") + fun deleteBook(isbn13: String): Completable + + @Query("SELECT * FROM $DATABASENAME_BOOK WHERE isbn13 = :isbn13") + fun getBook(isbn13: String): BookEntity + + @Query("SELECT * FROM $DATABASENAME_BOOK LIMIT $DATABASELIMIT") + fun getAll(): List + + @Query("SELECT * FROM $DATABASENAME_BOOK WHERE isShared = 1") + fun getSharedBook() : Flowable> + + @Update + fun updateBook(bookEntity: BookEntity) : Completable + + @Query("SELECT COUNT(*) FROM $DATABASENAME_BOOK WHERE isbn13 = :isbn13") + fun isContains(isbn13: String): Int +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/local/db/BookEntity.kt b/app/src/main/java/com/hyden/booklibrary/data/local/db/BookEntity.kt new file mode 100644 index 0000000..820578d --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/local/db/BookEntity.kt @@ -0,0 +1,110 @@ +package com.hyden.booklibrary.data.local.db + +import android.os.Parcelable +import androidx.room.Entity +import androidx.room.PrimaryKey +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.util.ConstUtil.Companion.DATABASENAME_BOOK +import kotlinx.android.parcel.Parcelize + +@Parcelize +@Entity(tableName = DATABASENAME_BOOK) +data class BookEntity( + var isLiked: Boolean = false, + var isShared: Boolean = false, + var isReviews: Boolean = false, + var bookNote: String? = null, + var bookReviews: String? = null, + val title: String? = null, + val link: String? = null, + val author: String? = null, + val pubDate: String? = null, + val description: String? = null, + val isbn: String? = null, + @PrimaryKey val isbn13: String, + val itemId: String? = null, + val priceSales: String? = null, + val priceStandard: String? = null, + val mallType: String? = null, + val stockStatus: String? = null, + val mileage: String? = null, + val cover: String? = null, + val categoryId: String? = null, + val categoryName: String? = null, + val publisher: String? = null, + val salesPoint: String? = null, + val adult: String? = null, + val fixedPrice: String? = null, + val customerReviewRank: String? = null, + val bestRank: String? = null +) : Parcelable + +fun List.convertToBookItems(): List { + val items = arrayListOf() + this.forEach { + items.add( + BookItem( + isLiked = it.isLiked, + isShared = it.isShared, + isReviews = it.isReviews, + bookNote = it.bookNote, + bookReviews = it.bookReviews, + title = it.title, + link = it.link, + author = it.author, + pubDate = it.pubDate, + description = it.description, + isbn = it.isbn, + isbn13 = it.isbn13, + itemId = it.itemId, + priceSales = it.priceSales, + priceStandard = it.priceStandard, + mallType = it.mallType, + stockStatus = it.stockStatus, + mileage = it.mileage, + cover = it.cover, + categoryId = it.categoryId, + categoryName = it.categoryName, + publisher = it.publisher, + salesPoint = it.salesPoint, + adult = it.adult, + fixedPrice = it.fixedPrice, + customerReviewRank = it.customerReviewRank, + bestRank = it.bestRank + ) + ) + } + return items +} + +fun BookEntity.convertToBookItem() : BookItem { + return BookItem( + isLiked = isLiked, + isShared = isShared, + isReviews = isReviews, + bookNote = bookNote, + bookReviews = bookReviews, + title = title, + link = link, + author = author, + pubDate = pubDate, + description = description, + isbn = isbn, + isbn13 = isbn13, + itemId = itemId, + priceSales = priceSales, + priceStandard = priceStandard, + mallType = mallType, + stockStatus = stockStatus, + mileage = mileage, + cover = cover, + categoryId = categoryId, + categoryName = categoryName, + publisher = publisher, + salesPoint = salesPoint, + adult = adult, + fixedPrice = fixedPrice, + customerReviewRank = customerReviewRank, + bestRank = bestRank + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/local/db/migrations/Migrations.kt b/app/src/main/java/com/hyden/booklibrary/data/local/db/migrations/Migrations.kt new file mode 100644 index 0000000..a2db6cf --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/local/db/migrations/Migrations.kt @@ -0,0 +1,13 @@ +package com.hyden.booklibrary.data.local.db.migrations + +import androidx.room.migration.Migration +import androidx.sqlite.db.SupportSQLiteDatabase + +object Migrations { + + val MIGRATION_1_2 = object : Migration(1, 2) { + override fun migrate(database: SupportSQLiteDatabase) { + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/model/Feed.kt b/app/src/main/java/com/hyden/booklibrary/data/model/Feed.kt new file mode 100644 index 0000000..8664871 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/model/Feed.kt @@ -0,0 +1,104 @@ +package com.hyden.booklibrary.data.model + +import com.hyden.booklibrary.data.local.db.BookEntity +import java.text.SimpleDateFormat +import java.util.* + +data class Feed( + val sharedInfo: SharedInfo, + val bookEntity: BookEntity, + var likesCount: Long, + val likesInfo: Like +// val usersInfo: User +) + +data class SharedInfo( + val sharedDate: Date, + val users: User +) + +data class Like( + var users: List? +) + +data class User( + val email: String, + val name: String, + val nickName: String = "", + val profile: String = "", + val updateAt : Date +) + +fun Feed.toFeed(): Feed { + return Feed( + sharedInfo, + bookEntity, + likesCount, + likesInfo + ) +} + + +fun T.toSharedInfo(): SharedInfo = SharedInfo(getDate(), getSaredUser() ?: User("", "",updateAt = Date())) +fun T.toLike(): Like = Like(getUser()) +fun T.toUser(): User = getUser()[0] ?: User("", "",updateAt = Date()) +fun T.getUser(): List { + val temp = mutableListOf() + when (this) { + is HashMap<*, *> -> { + (this["users"] as? ArrayList>)?.run { + for (i in indices) { + temp.add( + User( + email = get(i)["email"].toString(), + name = get(i)["name"].toString(), + nickName = get(i)["nickName"].toString(), + profile = get(i)["profile"].toString(), + updateAt = Date() + ) + ) + } + } ?: temp.add( + User( + email = this["email"].toString(), + name = this["name"].toString(), + nickName = this["nickName"].toString(), + profile = this["profile"].toString(), + updateAt = Date() + ) + ) + } + } + return temp +} + +fun T.getDate(): Date { + when (this) { + is HashMap<*, *> -> { + val timestamp = this["sharedDate"] as com.google.firebase.Timestamp + val milliseconds = timestamp.seconds * 1000 + timestamp.nanoseconds / 1000000 + val sdf = SimpleDateFormat("yyyy/MM/dd HH:mm:ss") + val netDate = Date(milliseconds) + val date = sdf.format(netDate).toString() + return netDate + } + } + return Date() +} + +fun T.getSaredUser(): User { + var user = User("", "",updateAt = Date()) + when (this) { + is HashMap<*, *> -> { + user = User( + email = (this["users"] as HashMap<*, *>)["email"].toString(), + name = (this["users"] as HashMap<*, *>)["name"].toString(), + nickName = (this["users"] as HashMap<*, *>)["nickName"].toString(), + profile = (this["users"] as HashMap<*, *>)["profile"].toString(), + updateAt = Date() + ) + } + } + return user + +} diff --git a/app/src/main/java/com/hyden/booklibrary/data/model/OpenSourceModel.kt b/app/src/main/java/com/hyden/booklibrary/data/model/OpenSourceModel.kt new file mode 100644 index 0000000..bbea660 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/model/OpenSourceModel.kt @@ -0,0 +1,6 @@ +package com.hyden.booklibrary.data.model + +data class OpenSourceModel( + val title : String, + val content : String +) \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/model/UserInfo.kt b/app/src/main/java/com/hyden/booklibrary/data/model/UserInfo.kt new file mode 100644 index 0000000..6d66a65 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/model/UserInfo.kt @@ -0,0 +1,10 @@ +package com.hyden.booklibrary.data.model + +import java.util.* + +data class UserInfo( + val email: String, + val name: String, + val nickName: String = "", + val profile: String = "" +) \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/remote/BookApi.kt b/app/src/main/java/com/hyden/booklibrary/data/remote/BookApi.kt new file mode 100644 index 0000000..b532b6d --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/remote/BookApi.kt @@ -0,0 +1,44 @@ +package com.hyden.booklibrary.data.remote + +import com.hyden.booklibrary.data.remote.network.response.detail.BookDetailResponse +import com.hyden.booklibrary.data.remote.network.response.BookResponse +import com.hyden.booklibrary.data.remote.network.response.search.SearchResponse +import io.reactivex.Single +import retrofit2.http.* +import kotlin.collections.HashMap + +interface BookApi { + + /** + * 상품 리스트 + * Default Parameter + * @ttbkey + * @start + * @Version + * @SearchTarget + * @QueryType + * @MaxResults + * @output + */ + @GET("ItemList.aspx") + fun bookInfo(@QueryMap map : HashMap) : Single + + /** + * 상품조회 + */ + @GET("ItemLookUp.aspx") + fun bookDetail(@QueryMap map : HashMap) : Single + + /** + * 상품 검색 + */ + @GET("ItemSearch.aspx") + fun bookSearch(@QueryMap map : HashMap) : Single +} + + + + + + + diff --git a/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/Author.kt b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/Author.kt new file mode 100644 index 0000000..30a8357 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/Author.kt @@ -0,0 +1,14 @@ +package com.hyden.booklibrary.data.remote.network.response + +import com.google.gson.annotations.SerializedName + +data class Author( + @SerializedName("authorType") + val authorType: String, + @SerializedName("authorid") + val authorid: Int, + @SerializedName("desc") + val desc: String, + @SerializedName("name") + val name: String +) \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/BookItem.kt b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/BookItem.kt new file mode 100644 index 0000000..16a59af --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/BookItem.kt @@ -0,0 +1,97 @@ +package com.hyden.booklibrary.data.remote.network.response + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import com.hyden.booklibrary.data.local.db.BookEntity +import kotlinx.android.parcel.Parcelize + +@Parcelize +data class BookItem( + @SerializedName("isSavaed") + var isSavaed: Boolean = false, + @SerializedName("isLiked") + var isLiked: Boolean = false, + @SerializedName("isShared") + var isShared: Boolean = false, + @SerializedName("isReviews") + var isReviews: Boolean = false, + @SerializedName("bookNote") + var bookNote: String?, + @SerializedName("bookReviews") + var bookReviews: String?, + @SerializedName("title") + val title: String?, + @SerializedName("link") + val link: String?, + @SerializedName("author") + val author: String?, + @SerializedName("pubDate") + val pubDate: String?, + @SerializedName("description") + val description: String?, + @SerializedName("isbn") + val isbn: String?, + @SerializedName("isbn13") + val isbn13: String, + @SerializedName("itemId") + val itemId: String?, + @SerializedName("priceSales") + val priceSales: String?, + @SerializedName("priceStandard") + val priceStandard: String?, + @SerializedName("mallType") + val mallType: String?, + @SerializedName("stockStatus") + val stockStatus: String?, + @SerializedName("mileage") + val mileage: String?, + @SerializedName("cover") + val cover: String?, + @SerializedName("categoryId") + val categoryId: String?, + @SerializedName("categoryName") + val categoryName: String?, + @SerializedName("publisher") + val publisher: String?, + @SerializedName("salesPoint") + val salesPoint: String?, + @SerializedName("adult") + val adult: String?, + @SerializedName("fixedPrice") + val fixedPrice: String?, + @SerializedName("customerReviewRank") + val customerReviewRank: String?, + @SerializedName("bestRank") + val bestRank: String? +) : Parcelable + +fun BookItem.convertToBookEntity(): BookEntity = + BookEntity( + isLiked = isLiked, + isShared = isShared, + isReviews = isReviews, + bookNote = bookNote, + bookReviews = bookReviews, + title = title, + link = link, + author = author, + pubDate = pubDate, + description = description, + isbn = isbn, + isbn13 = isbn13!!, + itemId = itemId, + priceSales = priceSales, + priceStandard = priceStandard, + mallType = mallType, + stockStatus = stockStatus, + mileage = mileage, + cover = cover, + categoryId = categoryId, + categoryName = categoryName, + publisher = publisher, + salesPoint = salesPoint, + adult = adult, + fixedPrice = fixedPrice, + customerReviewRank = customerReviewRank, + bestRank = bestRank + ) diff --git a/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/BookResponse.kt b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/BookResponse.kt new file mode 100644 index 0000000..f1f59ea --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/BookResponse.kt @@ -0,0 +1,10 @@ +package com.hyden.booklibrary.data.remote.network.response + +import com.google.gson.annotations.SerializedName + +data class BookResponse( + @SerializedName("query") + val query : String, // ":"QueryType=ITEMNEWSPECIAL;SearchTarget=book", + @SerializedName("item") + val item : List +) diff --git a/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/Bookinfo.kt b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/Bookinfo.kt new file mode 100644 index 0000000..dacdd3c --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/Bookinfo.kt @@ -0,0 +1,20 @@ +package com.hyden.booklibrary.data.remote.network.response + +import com.google.gson.annotations.SerializedName + +data class Bookinfo( + @SerializedName("authors") + val authors: List, + @SerializedName("ebookList") + val ebookList: List, + @SerializedName("itemPage") + val itemPage: Int, + @SerializedName("letslookimg") + val letslookimg: List, + @SerializedName("originalTitle") + val originalTitle: String, + @SerializedName("subTitle") + val subTitle: String, + @SerializedName("toc") + val toc: String +) \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/Ebook.kt b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/Ebook.kt new file mode 100644 index 0000000..4fc00e5 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/Ebook.kt @@ -0,0 +1,14 @@ +package com.hyden.booklibrary.data.remote.network.response + +import com.google.gson.annotations.SerializedName + +data class Ebook( + @SerializedName("isbn") + val isbn: String, + @SerializedName("itemId") + val itemId: Int, + @SerializedName("link") + val link: String, + @SerializedName("priceSales") + val priceSales: Int +) \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/detail/BookDetail.kt b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/detail/BookDetail.kt new file mode 100644 index 0000000..c6a2d39 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/detail/BookDetail.kt @@ -0,0 +1,45 @@ +package com.hyden.booklibrary.data.remote.network.response.detail + +import com.google.gson.annotations.SerializedName +import com.hyden.booklibrary.data.remote.network.response.Bookinfo + +data class BookDetail( + @SerializedName("author") + val author: String, + @SerializedName("bookinfo") + val bookinfo: Bookinfo, + @SerializedName("categoryId") + val categoryId: Int, + @SerializedName("categoryName") + val categoryName: String, + @SerializedName("cover") + val cover: String, + @SerializedName("creator") + val creator: String, + @SerializedName("customerReviewRank") + val customerReviewRank: Int, + @SerializedName("description") + val description: String, + @SerializedName("isbn") + val isbn: String, + @SerializedName("isbn13") + val isbn13: String, + @SerializedName("itemId") + val itemId: Int, + @SerializedName("link") + val link: String, + @SerializedName("mileage") + val mileage: Int, + @SerializedName("priceSales") + val priceSales: Int, + @SerializedName("priceStandard") + val priceStandard: Int, + @SerializedName("pubDate") + val pubDate: String, + @SerializedName("publisher") + val publisher: String, + @SerializedName("stockStatus") + val stockStatus: String, + @SerializedName("title") + val title: String +) \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/detail/BookDetailResponse.kt b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/detail/BookDetailResponse.kt new file mode 100644 index 0000000..e693c82 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/detail/BookDetailResponse.kt @@ -0,0 +1,31 @@ +package com.hyden.booklibrary.data.remote.network.response.detail + +import com.google.gson.annotations.SerializedName +import com.hyden.booklibrary.data.remote.network.response.detail.BookDetail + +data class BookDetailResponse( + @SerializedName("imageUrl") + val imageUrl: String, + @SerializedName("item") + val item: List, + @SerializedName("itemsPerPage") + val itemsPerPage: Int, + @SerializedName("link") + val link: String, + @SerializedName("pubDate") + val pubDate: String, + @SerializedName("query") + val query: String, + @SerializedName("searchCategoryId") + val searchCategoryId: Int, + @SerializedName("searchCategoryName") + val searchCategoryName: String, + @SerializedName("startIndex") + val startIndex: Int, + @SerializedName("title") + val title: String, + @SerializedName("totalResults") + val totalResults: Int, + @SerializedName("version") + val version: String +) \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/search/SearchResponse.kt b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/search/SearchResponse.kt new file mode 100644 index 0000000..f0d1384 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/remote/network/response/search/SearchResponse.kt @@ -0,0 +1,9 @@ +package com.hyden.booklibrary.data.remote.network.response.search + +import com.google.gson.annotations.SerializedName +import com.hyden.booklibrary.data.remote.network.response.BookItem + +data class SearchResponse( + @SerializedName("item") + val item : List? +) \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/repository/AladinRepository.kt b/app/src/main/java/com/hyden/booklibrary/data/repository/AladinRepository.kt new file mode 100644 index 0000000..4dbd432 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/repository/AladinRepository.kt @@ -0,0 +1,89 @@ +package com.hyden.booklibrary.data.repository + +import com.hyden.booklibrary.data.remote.BookApi +import com.hyden.booklibrary.data.remote.network.response.detail.BookDetailResponse +import com.hyden.booklibrary.data.remote.network.response.BookResponse +import com.hyden.booklibrary.data.remote.network.response.search.SearchResponse +import com.hyden.booklibrary.data.repository.source.AladinDataSource +import io.reactivex.Single +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers + +class AladinRepository(private val bookApi : BookApi) : AladinDataSource { + + /** + * 책 정보 불러오기 + */ + override fun loadBook( + ttbkey: String, + page: Int, + version: String, + searchtarget: String, + querytype: String, + categoryid : Int, + maxresults: Int, + output: String, + cover: String + ): Single { + return bookApi.bookInfo(HashMap().apply { + put("ttbkey", ttbkey) + put("start", page) + put("version", version) + put("searchtarget", searchtarget) + put("querytype", querytype) + put("categoryid", 0) + put("maxresults", maxresults) + put("output", output) + put("cover", cover) + }).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + } + + /** + * 책 상세 정보 + */ + override fun detail( + ttbkey: String, + itemIdType: String, + itemId: String, + output: String, + version: String + ): Single { + return bookApi.bookDetail(HashMap().apply { + put("ttbkey", ttbkey) + put("itemIdType", itemIdType) + put("itemId", itemId) + put("output", output) + put("version", version) + }).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + } + + /** + * 책 정보 검색 + */ + override fun search( + ttbkey: String, + page: Int, + query : String, + querytype: String, + version: String, + searchtarget: String, + maxresults: Int, + output: String, + cover : String + ): Single { + return bookApi.bookSearch(HashMap().apply { + put("ttbkey", ttbkey) + put("start", page) + put("version", version) + put("searchtarget", searchtarget) + put("querytype", querytype) + put("query", query) + put("maxresults", maxresults) + put("output", output) + put("cover", cover) + }).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/repository/BookRepository.kt b/app/src/main/java/com/hyden/booklibrary/data/repository/BookRepository.kt new file mode 100644 index 0000000..f94cd89 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/repository/BookRepository.kt @@ -0,0 +1,75 @@ +package com.hyden.booklibrary.data.repository + +import com.hyden.booklibrary.data.local.db.BookDao +import com.hyden.booklibrary.data.local.db.BookEntity +import com.hyden.booklibrary.data.repository.source.BookDataSource +import io.reactivex.BackpressureStrategy +import io.reactivex.Completable +import io.reactivex.Flowable +import io.reactivex.Single +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers + +class BookRepository( + private val bookDao: BookDao +) : BookDataSource { + + + override fun insertBook(bookEntity: BookEntity?): Completable { + return bookDao.insertBook(listOf(bookEntity)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + } + + override fun insertBookAll(bookEntities: List): Completable { + return bookDao.insertBook(bookEntities) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + } + + override fun deleteBook(isbn13: String): Completable { + return bookDao.deleteBook(isbn13) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + } + + override fun updateBook(bookEntity: BookEntity): Completable { + return bookDao.updateBook(bookEntity) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + } + + override fun getBook(isbn13: String): Single { + return Single.create { emitter -> + emitter.onSuccess(bookDao.getBook(isbn13)) + }.subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + } + + override fun getSharedBook(): Flowable> { + return bookDao.getSharedBook() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + } + + override fun getAll(): Flowable> { + return Flowable.create>({ emitter -> + emitter.onNext(bookDao.getAll()) + }, BackpressureStrategy.BUFFER) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + } + + override fun isContains(isbn13: String): Completable { + return Single.create { emitter -> + emitter.onSuccess(bookDao.isContains(isbn13)) + }.flatMapCompletable { + when (it) { + 0 -> Completable.error(Throwable()) + else -> Completable.complete() + } + } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + } +} diff --git a/app/src/main/java/com/hyden/booklibrary/data/repository/FirebaseRepository.kt b/app/src/main/java/com/hyden/booklibrary/data/repository/FirebaseRepository.kt new file mode 100644 index 0000000..3162feb --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/repository/FirebaseRepository.kt @@ -0,0 +1,266 @@ +package com.hyden.booklibrary.data.repository + +import android.content.Context +import android.net.Uri +import com.google.android.gms.auth.api.signin.GoogleSignIn +import com.google.android.gms.auth.api.signin.GoogleSignInOptions +import com.google.firebase.auth.FirebaseAuth +import com.google.firebase.firestore.FieldValue +import com.google.firebase.firestore.FirebaseFirestore +import com.google.firebase.firestore.Query +import com.google.firebase.firestore.SetOptions +import com.google.firebase.storage.FirebaseStorage +import com.hyden.booklibrary.data.local.db.BookEntity +import com.hyden.booklibrary.data.model.* +import com.hyden.booklibrary.data.repository.source.FirebaseDataSource +import com.hyden.booklibrary.util.ConstUtil.Companion.DATABASENAME_BOOK +import com.hyden.booklibrary.util.ConstUtil.Companion.FIRESTORE_USERS +import com.hyden.booklibrary.util.getUserNickName +import com.hyden.booklibrary.util.getUserProfile +import com.hyden.booklibrary.util.setUserNickName +import com.hyden.booklibrary.util.setUserProfile +import com.hyden.booklibrary.view.feed.model.convertToFeed +import com.hyden.util.LogUtil.LogE +import com.hyden.util.LogUtil.LogW +import com.hyden.util.Result +import java.util.* + + +class FirebaseRepository( + private val clientId: String, + private val applicationContext: Context +) : FirebaseDataSource { + + private val firebaseStorage by lazy { FirebaseStorage.getInstance() } + private val firebaseFireStore by lazy { FirebaseFirestore.getInstance() } + private val googleSignInOptions by lazy { + GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) + .requestIdToken(clientId) + .requestEmail() + .build() + } + private val googleSignInClient by lazy { + GoogleSignIn.getClient( + applicationContext, + googleSignInOptions + ) + } + override val currentUser: User by lazy { User(getLoginEmail(), getLoginName(), getLoginNickname(), getLoginProfile(), Date()) } + private val googleAuth by lazy { FirebaseAuth.getInstance() } + private val userInfo by lazy { UserInfo(getLoginEmail(), getLoginName(), getLoginNickname(), getLoginProfile()) } + +// Book + /** + * 좋아요 클릭 + */ + override fun pushLike(isSelected: Boolean, documentId: String) { + if (isSelected) { + firebaseFireStore.collection(DATABASENAME_BOOK).document(documentId) + .update("likesCount", FieldValue.increment(1)) + firebaseFireStore.collection(DATABASENAME_BOOK).document(documentId) + .update("likesInfo.users", FieldValue.arrayUnion((userInfo))) + } else { + firebaseFireStore.collection(DATABASENAME_BOOK).document(documentId) + .update("likesCount", FieldValue.increment(-1)) + firebaseFireStore.collection(DATABASENAME_BOOK).document(documentId) + .update("likesInfo.users", FieldValue.arrayRemove(((userInfo)))) + } + } + + + /** + * 좋아요 개수 + */ + override fun getLikeCount(documentId: String, complete: (Long) -> Unit) { + var count = 0L + firebaseFireStore.collection(DATABASENAME_BOOK).document(documentId).get() + .addOnCompleteListener { + count = it.result?.get("likesCount") as Long + complete.invoke(count) + } + } + + /** + * 댓글 개수 + */ + override fun getCommentCount(documentId: String, complete: (Long) -> Unit) { + var count = 0L + firebaseFireStore.collection(DATABASENAME_BOOK).document(documentId).get() + .addOnCompleteListener { + count = it.result?.get("commentsCount") as Long + complete.invoke(count) + + } + } + + override fun pushComment() { + } + + // 피드에 책정보를 공유 + /** + * 책정보 피드에 등록 + */ + override fun pushShare(item: BookEntity) { + firebaseFireStore.collection(DATABASENAME_BOOK) + .document(getLoginEmail() + "-" + item.isbn13) + .set( + Feed( + bookEntity = item, + sharedInfo = SharedInfo(getDate(), currentUser), + likesCount = if (item.isLiked == true) 1 else 0, + likesInfo = if (item.isLiked == true) Like(listOf(currentUser)) else Like( + emptyList() + ) + ), SetOptions.merge() + ) + } + + override fun myBookAll(result : ((MutableList) -> Unit)?) { + firebaseFireStore.collection(getLoginEmail()) + .orderBy("sharedInfo.sharedDate", Query.Direction.DESCENDING) + .get() + .addOnSuccessListener { documentSnapshot -> + val temp = mutableListOf() + for (i in documentSnapshot.documents.indices) { + temp.add(convertToFeed(documentSnapshot.documents[i].data).bookEntity) + } + result?.invoke(temp) + } + } + + override fun myBookInsert(item: BookEntity) { + firebaseFireStore.collection(getLoginEmail()).document(item.isbn13) + .set( + Feed( + bookEntity = item, + sharedInfo = SharedInfo(getDate(), currentUser), + likesCount = if (item.isLiked == true) 1 else 0, + likesInfo = if (item.isLiked == true) Like(listOf(currentUser)) else Like( + emptyList() + ) + ), SetOptions.merge() + ) + } + + override fun myBookDelete(isbn13: String) { + firebaseFireStore.collection(getLoginEmail()).document(isbn13).delete() + } + + override fun updateBook(item: BookEntity) { + firebaseFireStore.collection(DATABASENAME_BOOK) + .document(getLoginEmail() + "-" + item.isbn13) + .update("bookEntity", item) + } + + override fun deleteBook(isbn13: String) { + firebaseFireStore.collection(DATABASENAME_BOOK).document(getLoginEmail() + "-" + isbn13) + .delete() + } + + override fun saveBook() { + } + + // User + override fun saveUser() { + applicationContext.setUserNickName(currentUser.nickName) + applicationContext.setUserProfile(currentUser.profile) + firebaseFireStore.collection(FIRESTORE_USERS).document(getLoginEmail()) + .set(currentUser, SetOptions.merge()) + } + + override fun updateUser(user: User) { +// firebaseFireStore.collection(DATABASENAME) +// .whereEqualTo("sharedInfo.users.email",getLoginEmail()) + + } + + override fun updateProfile(user: User, success: () -> Unit?) { + applicationContext.setUserNickName(user.nickName) + firebaseFireStore.collection(FIRESTORE_USERS).document(getLoginEmail()).set(user) + firebaseFireStore.collection(DATABASENAME_BOOK) + .whereEqualTo("sharedInfo.users.email", getLoginEmail()) + .get() + .addOnSuccessListener { documentSnapshot -> + for (i in documentSnapshot.documents.indices) { + val isbn13 = + (documentSnapshot.documents[i].data?.get("bookEntity") as HashMap<*, *>)["isbn13"] as String + firebaseFireStore.collection(DATABASENAME_BOOK) + .document(getLoginEmail() + "-" + isbn13).update("sharedInfo.users", user) + } + success.invoke() + } + .addOnFailureListener { + LogE("Error [Update User Profile] : $it") + } + } + + override fun uploadProfile(profile: Uri, result: (Result, String) -> Unit) { + firebaseStorage.getReferenceFromUrl("gs://booksroom-4107a.appspot.com/") + .let { storageReference -> + val childPath = "images/${getLoginEmail()}/profile.png" + storageReference.child(childPath).putFile(profile) + .addOnSuccessListener { taskSanpshot -> + storageReference.child(childPath).downloadUrl + .addOnSuccessListener { + LogW("Success : download url = $it") + applicationContext.setUserProfile(it.toString()) + result.invoke(Result.SUCCESS, it.toString()) + } + .addOnFailureListener { + LogW("Error : fail = $it") + } + } + .addOnFailureListener { + result.invoke(Result.FAILURE, it.message.toString()) + } + .addOnProgressListener { taskSnapshot -> + val progress = + (100 * taskSnapshot.bytesTransferred) / taskSnapshot.totalByteCount + LogW(progress.toString()) + } + } + } + + override fun deleteUser(id: String) { + + } + + + /** + * 게시글 좋아요를 클릭한 유저인지 검사 + * true 좋아요를 클릭한 유저 + * false 좋아요를 클릭하지 않은 유저 + */ + override fun isExistUser(users: List): Boolean { + return users.contains(currentUser) + } + + override fun login() { + } + + // 로그인 + override fun googleSignIn() { + firebaseFireStore.collection(FIRESTORE_USERS).document(getLoginEmail()).set(currentUser) + } + + // 로그아웃 + override fun googleSignOut() { + googleAuth.signOut() + googleSignInClient.signOut() + } + + // Getter + override fun getLoginEmail(): String = googleAuth.currentUser?.email?.trim() ?: "" + + override fun getLoginName(): String = googleAuth.currentUser?.displayName?.trim() ?: "" + + override fun getLoginProfile(): String = applicationContext.getUserProfile() + + override fun getLoginNickname(): String { + val userNickName = applicationContext.getUserNickName() + if (userNickName.isNullOrEmpty()) { + return getLoginEmail().split("@")[0] + } + return userNickName + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/repository/source/AladinDataSource.kt b/app/src/main/java/com/hyden/booklibrary/data/repository/source/AladinDataSource.kt new file mode 100644 index 0000000..cb8e2a7 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/repository/source/AladinDataSource.kt @@ -0,0 +1,41 @@ +package com.hyden.booklibrary.data.repository.source + +import com.hyden.booklibrary.BuildConfig +import com.hyden.booklibrary.data.remote.network.response.detail.BookDetailResponse +import com.hyden.booklibrary.data.remote.network.response.BookResponse +import com.hyden.booklibrary.data.remote.network.response.search.SearchResponse +import io.reactivex.Single + +interface AladinDataSource { + fun loadBook( + ttbkey: String = BuildConfig.TTBKEY, // key값 + page: Int = 1, // 검색결과 시작 페이지 + version: String = "20131101", // 검색API의 Version(날짜형식)을 설정. (최신버젼: 20131101) + searchtarget: String, // 조회 대상 Mall + querytype: String, // 리스트 종류 + categoryid: Int = 0, // + maxresults: Int = 30, // 검색결과 한 페이지당 최대 출력 개수 + output: String = "js", // 출력방법패 + cover : String = "big" // 표지크기 + ) : Single + + fun detail( + ttbkey : String = BuildConfig.TTBKEY, + itemIdType: String ="ISBN13", + itemId : String, + output : String = "js", + version : String = "20131101" + ) : Single + + fun search( + ttbkey: String = BuildConfig.TTBKEY, // key값 + page: Int = 1, // 검색결과 시작 페이지 + query : String, // 검색어 + querytype: String, // 검색어 종류 + version: String = "20131101", // 검색API의 Version(날짜형식)을 설정. (최신버젼: 20131101) + searchtarget: String = "book", // 조회 대상 Mall + maxresults: Int = 30, // 검색결과 한 페이지당 최대 출력 개수 + output: String = "js", // 출력방법 + cover : String = "big" // 표지크기 + ): Single +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/repository/source/BookDataSource.kt b/app/src/main/java/com/hyden/booklibrary/data/repository/source/BookDataSource.kt new file mode 100644 index 0000000..27715c6 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/repository/source/BookDataSource.kt @@ -0,0 +1,24 @@ +package com.hyden.booklibrary.data.repository.source + +import com.hyden.booklibrary.data.local.db.BookEntity +import io.reactivex.Completable +import io.reactivex.Flowable +import io.reactivex.Single + +interface BookDataSource { + + fun insertBook(bookEntity: BookEntity?): Completable + fun insertBookAll(bookEntities: List): Completable + + fun deleteBook(isbn13: String): Completable + + fun updateBook(bookEntity: BookEntity): Completable + + fun getBook(isbn13: String): Single + + fun getSharedBook() : Flowable> + + fun getAll(): Flowable> + + fun isContains(isbn13: String): Completable +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/data/repository/source/FirebaseDataSource.kt b/app/src/main/java/com/hyden/booklibrary/data/repository/source/FirebaseDataSource.kt new file mode 100644 index 0000000..59034a6 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/data/repository/source/FirebaseDataSource.kt @@ -0,0 +1,52 @@ +package com.hyden.booklibrary.data.repository.source + +import android.net.Uri +import com.google.firebase.firestore.FirebaseFirestore +import com.hyden.booklibrary.data.local.db.BookEntity +import com.hyden.booklibrary.data.model.Feed +import com.hyden.booklibrary.data.model.User +import com.hyden.booklibrary.view.feed.model.FeedData +import com.hyden.util.Result +import java.io.InputStream +import java.util.* + +interface FirebaseDataSource { + + val currentUser : User + + // Book + fun saveBook() + fun updateBook(item : BookEntity) + fun deleteBook(isbn13 : String) + + fun pushLike(isSelected : Boolean, documentId : String) + fun getLikeCount(documentId : String,complete : (Long) -> Unit) + fun getCommentCount(documentId : String,complete : (Long) -> Unit) + fun pushComment() + fun pushShare(item : BookEntity) + fun myBookAll(result : ((MutableList) -> Unit)?) + fun myBookInsert(item : BookEntity) + fun myBookDelete(isbn13 : String) + + + // User + fun saveUser() + fun updateUser(user : User) + fun deleteUser(id : String) + fun isExistUser(users : List) : Boolean + fun updateProfile(user : User,success : () -> Unit?) + + fun login() + fun googleSignIn() + fun googleSignOut() + + fun uploadProfile(profile : Uri, result : (Result, String) -> Unit) + + + // getter + fun getLoginEmail() : String + fun getLoginName() : String + fun getLoginProfile() : String + fun getLoginNickname() : String + +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/di/AppModule.kt b/app/src/main/java/com/hyden/booklibrary/di/AppModule.kt new file mode 100644 index 0000000..4cb22ac --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/di/AppModule.kt @@ -0,0 +1,15 @@ +package com.hyden.booklibrary.di + +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.repository.* +import com.hyden.booklibrary.data.repository.source.FirebaseDataSource +import com.hyden.booklibrary.data.repository.source.AladinDataSource +import com.hyden.booklibrary.data.repository.source.BookDataSource +import org.koin.android.ext.koin.androidContext +import org.koin.dsl.module + +val appModule = module { + single { AladinRepository(get()) } + single { BookRepository(get()) } + single { FirebaseRepository(androidContext().getString(R.string.default_web_client_id),androidContext()) } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/di/NetworkModule.kt b/app/src/main/java/com/hyden/booklibrary/di/NetworkModule.kt new file mode 100644 index 0000000..11ed398 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/di/NetworkModule.kt @@ -0,0 +1,63 @@ +package com.hyden.booklibrary.di + +import com.hyden.booklibrary.BuildConfig +import com.hyden.booklibrary.data.remote.BookApi +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import org.koin.dsl.module +import retrofit2.CallAdapter +import retrofit2.Converter +import retrofit2.Retrofit +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory +import retrofit2.converter.gson.GsonConverterFactory +import java.util.concurrent.TimeUnit + +private const val connectTime = 30L +private const val readTime = 30L +private const val writeTime = 30L + +val networkModule = module { + + single { + OkHttpClient.Builder() + .connectTimeout(connectTime, TimeUnit.SECONDS) + .readTimeout(readTime, TimeUnit.MINUTES) + .writeTimeout(writeTime, TimeUnit.SECONDS) + .addInterceptor(HttpLoggingInterceptor().apply { + level = if (BuildConfig.DEBUG) { + HttpLoggingInterceptor.Level.BODY + } else { + HttpLoggingInterceptor.Level.NONE + } + + }) +// .addInterceptor { chain -> +// val request = chain.request().newBuilder() +// .addHeader("Authorization", "4f08d01d093bac36db0e4f8ae1fdc52a") +// .addHeader("Content-Type", "application/json") +// .build() +// chain.proceed(request) +// } + .build() + } + + single { + GsonConverterFactory.create() + } + + single { + RxJava2CallAdapterFactory.create() + } + + single { + Retrofit + .Builder() + .client(get()) + .baseUrl(BuildConfig.BASEURL) + .addConverterFactory(get()) + .addCallAdapterFactory(get()) + .build() + .create(BookApi::class.java) + + } +} diff --git a/app/src/main/java/com/hyden/booklibrary/di/RoomModule.kt b/app/src/main/java/com/hyden/booklibrary/di/RoomModule.kt new file mode 100644 index 0000000..3fe731c --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/di/RoomModule.kt @@ -0,0 +1,15 @@ +package com.hyden.booklibrary.di + +import androidx.room.Room +import com.hyden.booklibrary.data.local.db.AppDataBase +import com.hyden.booklibrary.data.local.db.migrations.Migrations.MIGRATION_1_2 +import com.hyden.booklibrary.util.ConstUtil.Companion.DATABASENAME_BOOK +import org.koin.android.ext.koin.androidContext +import org.koin.dsl.module + +val roomModule = module { + single { + Room.databaseBuilder(androidContext(),AppDataBase::class.java,"${DATABASENAME_BOOK}.db").build() + } + single { get().getBookDao() } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/di/ViewModelModule.kt b/app/src/main/java/com/hyden/booklibrary/di/ViewModelModule.kt new file mode 100644 index 0000000..6972314 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/di/ViewModelModule.kt @@ -0,0 +1,43 @@ +package com.hyden.booklibrary.di + +import com.hyden.booklibrary.view.main.MainViewModel +import com.hyden.booklibrary.view.comment.CommentViewModel +import com.hyden.booklibrary.view.detail.mysaved.SavedDetailViewModel +import com.hyden.booklibrary.view.detail.UnSavedDetailViewModel +import com.hyden.booklibrary.view.detail.feed.FeedDetailViewModel +import com.hyden.booklibrary.view.feed.FeedViewModel +import com.hyden.booklibrary.view.home.HomeViewModel +import com.hyden.booklibrary.view.library.LibraryViewModel +import com.hyden.booklibrary.view.login.LoginViewModel +import com.hyden.booklibrary.view.myshared.MySharedBookViewMiodel +import com.hyden.booklibrary.view.note.NoteViewModel +import com.hyden.booklibrary.view.profile.ProfileViewModel +import com.hyden.booklibrary.view.search.SearchViewModel +import com.hyden.booklibrary.view.setting.SettingViewModel +import com.hyden.booklibrary.view.splash.SplashViewModel +import org.koin.androidx.viewmodel.dsl.viewModel +import org.koin.dsl.module + +val viewModelModule = module { + // start + viewModel { MainViewModel() } + viewModel { LoginViewModel(get(),get()) } + viewModel { SplashViewModel() } + + // main view + viewModel { HomeViewModel(get()) } + viewModel { SearchViewModel(get()) } + viewModel { FeedViewModel(get()) } + viewModel { LibraryViewModel(get()) } + viewModel { SettingViewModel(get()) } + viewModel { MySharedBookViewMiodel(get()) } + + // sub + viewModel { UnSavedDetailViewModel(get(),get(),get()) } + viewModel { SavedDetailViewModel(get(), get(), get()) } + viewModel { NoteViewModel(get(),get()) } + viewModel { ProfileViewModel(get()) } + viewModel { CommentViewModel() } + viewModel { FeedDetailViewModel() } + +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/util/AdsUtil.kt b/app/src/main/java/com/hyden/booklibrary/util/AdsUtil.kt new file mode 100644 index 0000000..1ffc257 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/util/AdsUtil.kt @@ -0,0 +1,110 @@ +package com.hyden.booklibrary.util + +import android.content.Context +import android.view.View +import androidx.databinding.BindingAdapter +import com.google.android.gms.ads.AdListener +import com.google.android.gms.ads.AdRequest +import com.google.android.gms.ads.AdView +import com.google.android.gms.ads.InterstitialAd +import com.hyden.booklibrary.BuildConfig +import kotlin.random.Random + +/** + * 전면 광고 + */ +class AdsUtil(val context: Context) { + private var interstitialAd: InterstitialAd = InterstitialAd(context) + + fun loadAds(closed: (() -> Unit)? = null) { + interstitialAd.adUnitId = BuildConfig.ADMOB_FULL + interstitialAd.loadAd(AdRequest.Builder().build()) + interstitialAd.adListener = object : AdListener() { + override fun onAdClosed() { + super.onAdClosed() + closed?.invoke() + } + + override fun onAdLoaded() { + super.onAdLoaded() + showAd(closed) + } + + override fun onAdImpression() { + super.onAdImpression() + } + + override fun onAdLeftApplication() { + super.onAdLeftApplication() + } + + override fun onAdClicked() { + super.onAdClicked() + } + + override fun onAdFailedToLoad(p0: Int) { + super.onAdFailedToLoad(p0) + closed?.invoke() + } + + override fun onAdOpened() { + super.onAdOpened() + } + } + } + + private fun showAd(closed: (() -> Unit)? = null) { + if (interstitialAd.isLoaded) { + val rand = Random(System.nanoTime()).nextInt(Int.MAX_VALUE) % 3 + if (rand == 0) { + interstitialAd.show() + } else { + closed?.invoke() + } + } + } +} + +enum class AdsType() { + BANNER, // 배너 광고 + FULL, // 전면 광고 + FULL_VIDEO, // 전면 동영상 광고 + REWORD_VIDEO, // 보상형 동영상 광고 + NATIVE, // 네이티브 광고 고급형 + NAITVE_VIDEO // 네이티브 동영상 광고 고급형 +} + +@BindingAdapter(value = ["adListener"]) +fun AdView.bindAdId(type: AdsType) { + loadAd(AdRequest.Builder().build()) + adListener = object : AdListener() { + override fun onAdImpression() { + super.onAdImpression() + } + + override fun onAdLeftApplication() { + super.onAdLeftApplication() + } + + override fun onAdClicked() { + super.onAdClicked() + } + + override fun onAdFailedToLoad(p0: Int) { + super.onAdFailedToLoad(p0) + this@bindAdId.visibility = View.GONE + } + + override fun onAdClosed() { + super.onAdClosed() + } + + override fun onAdOpened() { + super.onAdOpened() + } + + override fun onAdLoaded() { + super.onAdLoaded() + } + } +} diff --git a/app/src/main/java/com/hyden/booklibrary/util/ConstUtil.kt b/app/src/main/java/com/hyden/booklibrary/util/ConstUtil.kt new file mode 100644 index 0000000..0a773c0 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/util/ConstUtil.kt @@ -0,0 +1,46 @@ +package com.hyden.booklibrary.util + +import android.content.Context +import android.view.LayoutInflater +import androidx.appcompat.app.AlertDialog +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.ext.numberFormatter +import kotlinx.android.synthetic.main.dialog_book_info.view.* + +class ConstUtil { + companion object { + const val DATABASE_VERSION = 1 + const val DATABASENAME_BOOK = "_book" + const val DATABASENAME_SHARED = "sharedbook" + const val FIRESTORE_USERS = "_users" + const val FIRESTORE_PERSONAL = "personal" + const val DATABASELIMIT = 30 + const val FEED_LIMIT = 6L + const val BOOK_BLOGBEST = "BLOGBEST" + const val BOOK_BESTSELLER = "BESTSELLER" + const val BOOK_ITEMNEW_SPECIAL = "ITEMNEWSPECIAL" + const val BOOK_ITEMNEW_ALL = "ITEMNEWALL" + const val BOOK_NOTE_REQUEST_CODE = 1224 + const val DEFAULT_COLLAPSEDLINES = 3 + } +} + +fun Context.dialogBookInfo(info: BookItem?, dismiss : (() -> Unit)? = null) { + AlertDialog.Builder(this, R.style.DeleteDialog).apply { + val view = LayoutInflater.from(context).inflate(R.layout.dialog_book_info, null, false) + + view.tv_author.text = info?.author + view.tv_isbn13.text = info?.isbn13 + view.tv_publisher.text = info?.publisher + view.tv_price.text = info?.priceSales?.numberFormatter() + view.tv_description.text = info?.description + + setTitle(info?.title) + setIcon(R.drawable.round_menu_book_24) + setView(view) + setPositiveButton("확인") { _, _ -> } + setOnDismissListener { dismiss?.invoke() } + }.show() +} + diff --git a/app/src/main/java/com/hyden/booklibrary/util/PreferenceUtil.kt b/app/src/main/java/com/hyden/booklibrary/util/PreferenceUtil.kt new file mode 100644 index 0000000..18227e4 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/util/PreferenceUtil.kt @@ -0,0 +1,110 @@ +package com.hyden.booklibrary.util + +import android.content.Context +import android.content.Context.MODE_PRIVATE +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import com.google.firebase.auth.FirebaseAuth +import com.hyden.booklibrary.R + +/** + * 테마 설정 + */ +fun AppCompatActivity.getPreferenceTheme(): String { + return getSharedPreferences( + getString(R.string.setting_key_theme), + MODE_PRIVATE + )?.getString("themeColor", "블랙") ?: "블랙" +} + +fun Fragment.getPreferenceTheme(): String { + return context?.getSharedPreferences( + getString(R.string.setting_key_theme), + MODE_PRIVATE + )?.getString("themeColor", "블랙") ?: "블랙" +} + +fun Fragment.setPreferenceTheme(value: String) { + context?.getSharedPreferences(getString(R.string.setting_key_theme), MODE_PRIVATE)?.edit() + ?.apply { + putString("themeColor", value) + apply() + } +} + + +/** + * 시작화면 설정 + */ +fun AppCompatActivity.getPreferenceStartView(): String { + return getSharedPreferences( + getString(R.string.setting_key_start_view), + MODE_PRIVATE + )?.getString("startView", "홈") ?: "홈" +} + +fun Fragment.getPreferenceStartView(): String { + return context?.getSharedPreferences( + getString(R.string.setting_key_start_view), + MODE_PRIVATE + )?.getString("startView", "홈") ?: "홈" +} + +fun Fragment.setPreferenceStartView(value: String) { + context?.getSharedPreferences(getString(R.string.setting_key_start_view), MODE_PRIVATE)?.edit() + ?.apply { + putString("startView", value) + apply() + } +} + +/** + * 유저 정보 + */ +fun Context.setUserNickName(nickname: String) { + getSharedPreferences(getString(R.string.string_nickname), MODE_PRIVATE)?.edit() + ?.apply { + putString("userNickName", nickname) + apply() + } +} + +fun Context.getUserNickName(): String { + return getSharedPreferences( + getString(R.string.string_nickname), + MODE_PRIVATE + )?.getString("userNickName", null) ?: "" +} + +fun Context.setUserProfile(profile: String) { + getSharedPreferences(getString(R.string.string_profile), MODE_PRIVATE)?.edit() + ?.apply { + putString("userProfile", profile) + apply() + } +} + +fun Context.getUserProfile(): String { + return getSharedPreferences( + getString(R.string.string_profile), + MODE_PRIVATE + )?.getString("userProfile", null) ?: FirebaseAuth.getInstance().currentUser?.photoUrl.toString() +} + +/** + * 초기 + */ +fun Context.setInitPreferences(data: Boolean) { + getSharedPreferences(getString(R.string.init_pref_book), MODE_PRIVATE)?.edit() + ?.apply { + putBoolean("init_data", data) + apply() + } +} + +fun Context.getInitPreferences(): Boolean { + return getSharedPreferences( + getString(R.string.init_pref_book), + MODE_PRIVATE + )?.getBoolean("init_data", false) ?: false +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/util/QueryType.kt b/app/src/main/java/com/hyden/booklibrary/util/QueryType.kt new file mode 100644 index 0000000..18b9509 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/util/QueryType.kt @@ -0,0 +1,8 @@ +package com.hyden.booklibrary.util + +enum class QueryType(position : Int) { + KEYWORD(0), + TITLE(1), + AUTHOR(2), + PUBLISHER(3) +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/util/RemoteConfig.kt b/app/src/main/java/com/hyden/booklibrary/util/RemoteConfig.kt new file mode 100644 index 0000000..3ee3d59 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/util/RemoteConfig.kt @@ -0,0 +1,6 @@ +package com.hyden.booklibrary.util + +enum class RemoteConfig { + UPDATE, + NOTICE +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/util/SingleLiveEvent.kt b/app/src/main/java/com/hyden/booklibrary/util/SingleLiveEvent.kt new file mode 100644 index 0000000..36305f6 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/util/SingleLiveEvent.kt @@ -0,0 +1,41 @@ +package com.hyden.booklibrary.util + +import androidx.annotation.MainThread +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.Observer +import com.hyden.util.LogUtil.LogW +import java.util.concurrent.atomic.AtomicBoolean + +// 출처 : https://github.com/android/architecture-samples/blob/dev-todo-mvvm-live/todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/SingleLiveEvent.java +class SingleLiveEvent : MutableLiveData() { + + private val mPending = AtomicBoolean(false) + + override fun observe(owner: LifecycleOwner, observer: Observer) { + if (hasActiveObservers()) { + LogW("Multiple observers registered but only one will be notified of changes.") + } + + // Observe the internal MutableLiveData + super.observe(owner, Observer { t -> + if (mPending.compareAndSet(true, false)) { + observer.onChanged(t) + } + }) + } + + @MainThread + override fun setValue(t: T?) { + mPending.set(true) + super.setValue(t) + } + + /** + * Used for cases where T is Void, to make calls cleaner. + */ + @MainThread + fun call(message : T? = null) { + value = message + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/util/VibrateUtil.kt b/app/src/main/java/com/hyden/booklibrary/util/VibrateUtil.kt new file mode 100644 index 0000000..38a2f8b --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/util/VibrateUtil.kt @@ -0,0 +1,27 @@ +package com.hyden.booklibrary.util + +import android.app.Application +import android.content.Context +import android.os.Build +import android.os.VibrationEffect +import android.os.Vibrator +import androidx.core.content.ContextCompat.getSystemService +import androidx.fragment.app.Fragment + +private const val vibrateMills = 50L +private const val vibrateAmplitude = 50 + +fun Fragment.longClickVibrate() { + (activity?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator).apply { + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) { + vibrate( + VibrationEffect.createOneShot( + vibrateMills, + vibrateAmplitude + ) + ) + } else { + vibrate(vibrateMills) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/OpenSourceActivity.kt b/app/src/main/java/com/hyden/booklibrary/view/OpenSourceActivity.kt new file mode 100644 index 0000000..c0ab5b3 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/OpenSourceActivity.kt @@ -0,0 +1,49 @@ +package com.hyden.booklibrary.view + +import android.os.Bundle +import androidx.databinding.library.baseAdapters.BR +import com.hyden.base.BaseActivity +import com.hyden.base.BaseRecyclerView +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.model.OpenSourceModel +import com.hyden.booklibrary.databinding.ActivityOpensourceLicenseBinding +import com.hyden.booklibrary.databinding.RecyclerItemOpensourceLicenseBinding + +class OpenSourceActivity : BaseActivity(R.layout.activity_opensource_license) { + + private val licenseInfo = mutableListOf() + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + licenseInfo.add(OpenSourceModel(getString(R.string.title_license_retrofit),getString(R.string.content_license_retrofit))) + licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxjava),getString(R.string.content_license_rxjava))) + licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) + licenseInfo.add(OpenSourceModel(getString(R.string.title_license_glide),getString(R.string.content_license_glide))) + +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) +// licenseInfo.add(OpenSourceModel(getString(R.string.title_license_rxandroid),getString(R.string.content_license_rxandroid))) + } + + override fun initBind() { + binding.apply { + ivBack.setOnClickListener { finish() } + rvOpensource.apply { + adapter = object : BaseRecyclerView.SimpleAdapter( + layoutId = R.layout.recycler_item_opensource_license, + listItem = licenseInfo, + bindingVariableId = BR.item + ) { } + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/comment/CommentActivity.kt b/app/src/main/java/com/hyden/booklibrary/view/comment/CommentActivity.kt new file mode 100644 index 0000000..b570dde --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/comment/CommentActivity.kt @@ -0,0 +1,18 @@ +package com.hyden.booklibrary.view.comment + +import android.os.Bundle +import com.hyden.base.BaseActivity +import com.hyden.booklibrary.R +import com.hyden.booklibrary.databinding.ActivityCommentBinding + +class CommentActivity : BaseActivity(R.layout.activity_comment) { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + } + + override fun initBind() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/comment/CommentViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/comment/CommentViewModel.kt new file mode 100644 index 0000000..dff0aab --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/comment/CommentViewModel.kt @@ -0,0 +1,7 @@ +package com.hyden.booklibrary.view.comment + +import com.hyden.base.BaseViewModel + +class CommentViewModel : BaseViewModel() { + +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/common/BindingAdapter.kt b/app/src/main/java/com/hyden/booklibrary/view/common/BindingAdapter.kt new file mode 100644 index 0000000..cdec3f9 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/common/BindingAdapter.kt @@ -0,0 +1,20 @@ +package com.hyden.booklibrary.view.common + +import android.view.View +import androidx.databinding.BindingAdapter +import com.airbnb.lottie.LottieAnimationView + +@BindingAdapter(value = ["loading"]) +fun LottieAnimationView.animation(isShowing : Boolean) { + when(isShowing) { + true -> { + visibility = View.VISIBLE + playAnimation() + + } + false-> { + visibility = View.GONE + cancelAnimation() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/detail/UnSavedDetailActivity.kt b/app/src/main/java/com/hyden/booklibrary/view/detail/UnSavedDetailActivity.kt new file mode 100644 index 0000000..9a8f1c0 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/detail/UnSavedDetailActivity.kt @@ -0,0 +1,76 @@ +package com.hyden.booklibrary.view.detail + +import android.os.Bundle +import android.widget.Toast +import androidx.lifecycle.Observer +import com.hyden.base.BaseActivity +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.databinding.ActivityDetailUnsavedBinding +import org.koin.androidx.viewmodel.ext.android.viewModel + +class UnSavedDetailActivity : BaseActivity(R.layout.activity_detail_unsaved) { + + private val detailViewModel by viewModel() + + private val book by lazy { intent?.getParcelableExtra(getString(R.string.book_info)) } + private val type by lazy { intent?.getStringExtra(getString(R.string.book_detail_type)) } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + detailViewModel.bookInfo(book) + book?.isbn13?.let { + detailViewModel.loadBookDetail(it) + } + } + + override fun observing() { + super.observing() + detailViewModel.isContain.observe( + this@UnSavedDetailActivity, + Observer { + when(it) { + true -> Toast.makeText(this@UnSavedDetailActivity, "책장에 담았습니다.", Toast.LENGTH_SHORT).show() + false -> Toast.makeText(this@UnSavedDetailActivity, "이미 책장에 있습니다.", Toast.LENGTH_SHORT).show() + } + } + ) + detailViewModel.isDelete.observe(this, + Observer { + when(it) { + true -> { + Toast.makeText(this@UnSavedDetailActivity, "삭제 하였습니다.", Toast.LENGTH_SHORT).show() + finish() + } + false -> Toast.makeText(this@UnSavedDetailActivity, "삭제에 실패하였습니다.", Toast.LENGTH_SHORT).show() + } + }) + } + + override fun initBind() { + binding.apply { + vm = detailViewModel + ibDownload.apply { + when(type) { + getString(R.string.book_detail_type_value) -> { + setBackgroundResource(R.drawable.ic_delete) + setOnClickListener { detailViewModel.deleteBook(book?.isbn13!!) } + } + else -> { + setOnClickListener { detailViewModel.bookInsert() } + } + } + } + book = this@UnSavedDetailActivity.book + ibBack.setOnClickListener { finish() } + } + } + + fun getItem(item : List) : String { + var buffer = StringBuffer() + item.map { + buffer.append("$it\n") + } + return buffer.substring(0,buffer.length-1) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/detail/UnSavedDetailViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/detail/UnSavedDetailViewModel.kt new file mode 100644 index 0000000..5cd5c67 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/detail/UnSavedDetailViewModel.kt @@ -0,0 +1,69 @@ +package com.hyden.booklibrary.view.detail + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.data.remote.network.response.convertToBookEntity +import com.hyden.booklibrary.data.repository.AladinRepository +import com.hyden.booklibrary.data.repository.source.BookDataSource +import com.hyden.booklibrary.data.repository.source.FirebaseDataSource +import com.hyden.util.LogUtil.LogE +import io.reactivex.rxkotlin.addTo + +class UnSavedDetailViewModel( + private val bookDataSource: BookDataSource, + private val firebaseDataSource: FirebaseDataSource, + private val bookApi: AladinRepository +) : BaseViewModel() { + + private val _detailInfo = MutableLiveData() + val detailInfo: LiveData get() = _detailInfo + + private val _isContain = MutableLiveData() + val isContain: LiveData get() = _isContain + + private val _isDelete = MutableLiveData() + val isDelete: LiveData get() = _isDelete + + fun bookInfo(bookInfo: BookItem?) { + _detailInfo.value = bookInfo + } + + fun loadBookDetail(isbn13: String) { +// bookApi.detail(itemId = isbn13) +// .subscribe( +// { +// LogW("$it") +// }, +// { +// LogE("$it") +// } +// ).addTo(compositeDisposable) + } + + fun bookInsert() { + _detailInfo.value?.convertToBookEntity()?.let { + firebaseDataSource.myBookInsert(it) + } + bookDataSource.insertBook(_detailInfo.value?.convertToBookEntity()) + .subscribe( + { _isContain.value = true }, + { + _isContain.value = false + LogE("$it") + } + ).addTo(compositeDisposable) + } + + fun deleteBook(isbn13: String) { + bookDataSource.deleteBook(isbn13) + .subscribe( + { _isDelete.value = true }, + { + _isDelete.value = false + LogE("$it") + } + ).addTo(compositeDisposable) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/detail/feed/FeedDetailActivity.kt b/app/src/main/java/com/hyden/booklibrary/view/detail/feed/FeedDetailActivity.kt new file mode 100644 index 0000000..294d255 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/detail/feed/FeedDetailActivity.kt @@ -0,0 +1,34 @@ +package com.hyden.booklibrary.view.detail.feed + +import android.os.Bundle +import com.hyden.base.BaseActivity +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.local.db.BookEntity +import com.hyden.booklibrary.databinding.ActivityFeedDetailBinding +import com.hyden.ext.loadUrl +import com.hyden.util.LogUtil.LogW +import org.koin.androidx.viewmodel.ext.android.viewModel + +class FeedDetailActivity : BaseActivity(R.layout.activity_feed_detail) { + + private val viewModel by viewModel() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val feedData = intent.getParcelableExtra(getString(R.string.key_feed_data)) + + binding.apply { + feedData?.let { + viewModel.initData(feedData) + ivBookCover.loadUrl(feedData.cover) + tvContents.text = feedData.bookNote + } +// includeToolbar.tvTitle.text = "댓글" + } + LogW("$feedData") + } + + override fun initBind() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/detail/feed/FeedDetailViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/detail/feed/FeedDetailViewModel.kt new file mode 100644 index 0000000..3e070f8 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/detail/feed/FeedDetailViewModel.kt @@ -0,0 +1,120 @@ +package com.hyden.booklibrary.view.detail.feed + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.google.firebase.firestore.DocumentSnapshot +import com.google.firebase.firestore.FirebaseFirestore +import com.google.firebase.firestore.Query +import com.hyden.base.BaseItemsApdater +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.local.db.BookEntity +import com.hyden.booklibrary.data.model.* +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.data.remote.network.response.convertToBookEntity +import com.hyden.booklibrary.util.ConstUtil +import com.hyden.booklibrary.view.feed.model.FeedData + +class FeedDetailViewModel() : BaseViewModel() { + + private val firestore by lazy { FirebaseFirestore.getInstance() } + lateinit var lastVisible: DocumentSnapshot + + private val _feedItem = MutableLiveData>() + val feedItem : LiveData> get() = _feedItem + + fun initData(feedData: BookEntity) { +// adapter.addItems(feedData.) + firestore.collection(ConstUtil.DATABASENAME_BOOK) +// .orderBy("commentInfo", Query.Direction.DESCENDING) + .whereEqualTo("bookEntity.isbn13",feedData.isbn13) + .limit(ConstUtil.FEED_LIMIT) + .get() + .addOnSuccessListener { documentSnapshot -> + // 파이어베이스 페이징 + if(documentSnapshot.size() >= 1) { + lastVisible = documentSnapshot.documents[documentSnapshot.size() - 1] + } + val temp = mutableListOf() + for (i in documentSnapshot.documents.indices) { +// ((documentSnapshot.documents[i].data?.get("sharedInfo") as HashMap<*,*>).get("users") as HashMap<*,*>)["email"] +// ((documentSnapshot.documents[i].data?.get("sharedInfo") as HashMap<*,*>).get("users") as HashMap<*,*>)["name"] +// ((documentSnapshot.documents[i].data?.get("sharedInfo") as HashMap<*,*>).get("users") as HashMap<*,*>)["nickName"] +// ((documentSnapshot.documents[i].data?.get("sharedInfo") as HashMap<*,*>).get("users") as HashMap<*,*>)["profile"] + temp.add(FeedData(feed(documentSnapshot.documents[i].data), false)) + } + _feedItem.value = temp + } + } + + fun loadMore() { + firestore.collection(ConstUtil.DATABASENAME_BOOK) + .orderBy("commentInfo", Query.Direction.DESCENDING) + .limit(ConstUtil.FEED_LIMIT) + .startAfter(lastVisible) + .get() + .addOnSuccessListener { documentSnapshot -> + if (documentSnapshot.size() > 0) { + lastVisible = documentSnapshot.documents[documentSnapshot.size() - 1] + + val temp = mutableListOf() + for (i in documentSnapshot.documents.indices) { + temp.add(FeedData(feed(documentSnapshot.documents[i].data),false)) + } + + } + } + } + + // 데이터 파싱 + private fun feed(documents: Map<*, *>?): Feed { + return documents?.run { + Feed( + get("sharedInfo").toSharedInfo(), + book(get("bookEntity") as HashMap<*, *>), + get("likesCount").toString().toLong(), + get("likesInfo").toLike() + ) + }?.toFeed()!! + } + + private fun book(documents: HashMap<*, *>): BookEntity { + return documents?.run { + BookItem( + get("savaed") as Boolean? ?: false, + get("liked") as Boolean? ?: false, + get("shared") as Boolean? ?: false, + get("chated") as Boolean? ?: false, + get("bookNote").toString(), + get("bookReviews").toString(), + get("title").toString(), + get("link").toString(), + get("author").toString(), + get("pubDate").toString(), + get("description").toString(), + get("isbn").toString(), + get("isbn13").toString(), + get("itemId").toString(), + get("priceSales").toString(), + get("priceStandard").toString(), + get("mallType").toString(), + get("stockStatus").toString(), + get("mileage").toString(), + get("cover").toString(), + get("categoryId").toString(), + get("categoryName").toString(), + get("publisher").toString(), + get("salesPoint").toString(), + get("adult").toString(), + get("fixedPrice").toString(), + get("customerReviewRank").toString(), + get("bestRank").toString() + ) + }.convertToBookEntity() + } + + + override fun onCleared() { + super.onCleared() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/detail/mysaved/SavedDetailActivity.kt b/app/src/main/java/com/hyden/booklibrary/view/detail/mysaved/SavedDetailActivity.kt new file mode 100644 index 0000000..fcbf321 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/detail/mysaved/SavedDetailActivity.kt @@ -0,0 +1,150 @@ +package com.hyden.booklibrary.view.detail.mysaved + +import android.content.Intent +import android.os.Bundle +import android.widget.Toast +import androidx.lifecycle.Observer +import com.hyden.base.BaseActivity +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.databinding.ActivityDetailSavedBinding +import com.hyden.booklibrary.util.ConstUtil.Companion.BOOK_NOTE_REQUEST_CODE +import com.hyden.booklibrary.util.dialogBookInfo +import com.hyden.booklibrary.view.feed.FeedViewModel +import com.hyden.booklibrary.view.note.NoteActivity +import com.hyden.ext.showSimpleDialog +import com.hyden.ext.isTimeAutomatic +import com.hyden.ext.moveToActivityForResult +import org.koin.android.ext.android.inject +import org.koin.androidx.viewmodel.ext.android.viewModel + +class SavedDetailActivity : BaseActivity(R.layout.activity_detail_saved) { + + private val savedDetailViewModel by viewModel() + private val feedViewModel by inject() + + val item by lazy { intent?.getParcelableExtra(getString(R.string.book_info)) } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + item?.isbn13?.let { + savedDetailViewModel.loadBookDetail(it) + } + } + override fun onResume() { + super.onResume() + savedDetailViewModel.bookReLoad(item?.isbn13!!) + } + + override fun observing() { + super.observing() + + savedDetailViewModel.isContain.observe( + this@SavedDetailActivity, + Observer { + when (it) { + true -> Toast.makeText( + this@SavedDetailActivity, + "책장에 담았습니다.", + Toast.LENGTH_SHORT + ).show() + false -> Toast.makeText( + this@SavedDetailActivity, + "이미 책장에 있습니다.", + Toast.LENGTH_SHORT + ).show() + } + } + ) + // 삭제 + savedDetailViewModel.isDelete.observe(this, + Observer { + when (it) { + true -> { + Toast.makeText(this@SavedDetailActivity, "삭제 하였습니다.", Toast.LENGTH_SHORT) + .show() + finish() + } + false -> Toast.makeText( + this@SavedDetailActivity, + "삭제에 실패하였습니다.", + Toast.LENGTH_SHORT + ).show() + } + }) + } + + override fun initBind() { + savedDetailViewModel.bookInfo(item) + binding.apply { + vm = savedDetailViewModel + ibDelete.apply { + setOnClickListener { + showSimpleDialog(message = getString(R.string.are_you_delete_book_info)) { savedDetailViewModel.deleteBook(item?.isbn13!!) } + } + } + ibBack.setOnClickListener { finish() } + ibInfo.apply { + setOnClickListener { + dialogBookInfo(item) + } + } + ivLike.apply { + this.isSelected = item?.isLiked ?: false + setOnClickListener { + this.isSelected = this.isSelected.not() + item?.isLiked = this.isSelected + savedDetailViewModel.bookUpdate(item!!) + savedDetailViewModel.pushLike(this.isSelected, item!!) + } + } + + // 피드에 책 등록 + ivShared.apply { + this.isSelected = item?.isShared ?: false + setOnClickListener { + if (!isSelected) { + isTimeAutomatic { + showSimpleDialog(message = "감상노트를 공유 하시겠습니까?") { + this.isSelected = this.isSelected.not() + sharedCheck(isSelected = isSelected) + item?.let { savedDetailViewModel.pushShare(it) } + } + } + } else { + showSimpleDialog(message = "공유한 책정보를 해제하시겠습니까?") { + this.isSelected = this.isSelected.not() + sharedCheck(isSelected = this.isSelected) + item?.let { savedDetailViewModel.pushDelete(it.isbn13) } + } + } + } + } + ibEdit.apply { + setOnClickListener { + Intent(this@SavedDetailActivity, NoteActivity::class.java).apply { + putExtra(getString(R.string.book_info), item) + moveToActivityForResult(this) + } + } + } + tvTitle.text = item?.title!!.split(" - ")[0] + + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + when (requestCode) { + BOOK_NOTE_REQUEST_CODE -> { + item?.bookNote = (data?.getParcelableExtra("data") as? BookItem)?.bookNote + } + } + } + + private fun sharedCheck(isSelected: Boolean) { + item?.isShared = isSelected + savedDetailViewModel.bookUpdate(item!!) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/detail/mysaved/SavedDetailViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/detail/mysaved/SavedDetailViewModel.kt new file mode 100644 index 0000000..d517f6b --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/detail/mysaved/SavedDetailViewModel.kt @@ -0,0 +1,98 @@ +package com.hyden.booklibrary.view.detail.mysaved + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.data.local.db.convertToBookItem +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.data.remote.network.response.convertToBookEntity +import com.hyden.booklibrary.data.repository.AladinRepository +import com.hyden.booklibrary.data.repository.source.BookDataSource +import com.hyden.booklibrary.data.repository.source.FirebaseDataSource +import com.hyden.util.LogUtil.LogD +import com.hyden.util.LogUtil.LogE +import com.hyden.util.LogUtil.LogW +import io.reactivex.rxkotlin.addTo + +class SavedDetailViewModel( + private val bookDataSource: BookDataSource, + private val firebaseDataSource: FirebaseDataSource, + private val bookApi : AladinRepository +) : BaseViewModel() { + + private val _detailInfo = MutableLiveData() + val detailInfo: LiveData get() = _detailInfo + + private val _isContain = MutableLiveData() + val isContain: LiveData get() = _isContain + + private val _isDelete = MutableLiveData() + val isDelete: LiveData get() = _isDelete + + fun bookInfo(bookInfo: BookItem?) { + _detailInfo.value = bookInfo + LogD("데이터 저장") + } + + fun loadBookDetail(isbn13 : String) { + bookApi.detail(itemId = isbn13) + .subscribe( + { + LogW("$it") + }, + { + LogE("$it") + } + ) + .addTo(compositeDisposable) + } + + fun bookReLoad(isbn13: String) { + bookDataSource.getBook(isbn13) + .subscribe( + { _detailInfo.value = it.convertToBookItem() }, + { LogE("$it") } + ).addTo(compositeDisposable) + } + + fun deleteBook(isbn13: String) { + firebaseDataSource.myBookDelete(isbn13) + bookDataSource.deleteBook(isbn13) + .subscribe( + { + _isDelete.value = true + }, + { + _isDelete.value = false + LogE("$it") + } + ).addTo(compositeDisposable) + } + + fun bookUpdate(bookItem: BookItem) { + compositeDisposable.add( + bookDataSource.updateBook(bookEntity = bookItem.convertToBookEntity()) + .subscribe({}, { LogE("$it") }) + ) + } + + fun pushLike(isSelected: Boolean, bookItem: BookItem) { + val documentId = firebaseDataSource.getLoginEmail() + "-" + bookItem.isbn13 + firebaseDataSource.pushLike( + isSelected = isSelected, + documentId = documentId + ) + } + + fun pushShare(bookItem: BookItem) { + firebaseDataSource.pushShare(bookItem.convertToBookEntity()) + } + + fun pushDelete(isbn13: String) { + firebaseDataSource.deleteBook(isbn13) + } +} + + + + diff --git a/app/src/main/java/com/hyden/booklibrary/view/feed/FeedFragment.kt b/app/src/main/java/com/hyden/booklibrary/view/feed/FeedFragment.kt new file mode 100644 index 0000000..9107ce4 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/feed/FeedFragment.kt @@ -0,0 +1,111 @@ +package com.hyden.booklibrary.view.feed + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.databinding.library.baseAdapters.BR +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.RecyclerView +import com.example.hyojin.util.EndlessRecyclerViewScrollListener +import com.hyden.base.BaseFragment +import com.hyden.base.BaseRecyclerView +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.local.db.convertToBookItem +import com.hyden.booklibrary.databinding.FragmentFeedBinding +import com.hyden.booklibrary.databinding.RecyclerItemFeedBinding +import com.hyden.booklibrary.util.dialogBookInfo +import com.hyden.booklibrary.view.feed.model.FeedData +import com.hyden.util.ConstValueUtil.Companion.ITEM_DECORATION +import com.hyden.util.ItemClickListener +import com.hyden.util.RecyclerItemDecoration +import com.hyden.util.toPx +import org.koin.androidx.viewmodel.ext.android.viewModel + +class FeedFragment : BaseFragment(R.layout.fragment_feed) { + + private val feedViewModel by viewModel() + + private val itemClickListener by lazy { + object : ItemClickListener { + override fun onItemClick(item: T) { + when (item) { + is FeedData -> { + context?.dialogBookInfo(item.feed?.bookEntity?.convertToBookItem()) + } + } + } + } + } + private val endlessListener by lazy { + object : EndlessRecyclerViewScrollListener(binding.rvBookFeed.layoutManager) { + override fun onLoadMore(page: Int, totalItemsCount: Int, view: RecyclerView) { + feedViewModel.loadMore() + } + } + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return super.onCreateView(inflater, container, savedInstanceState) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + } + + override fun onResume() { + super.onResume() + } + + override fun initBind() { + feedViewModel.getFireStore() + + binding.apply { + vm = feedViewModel + // 로딩바 표시 + feedViewModel.showLoading() + rvBookFeed.apply { + addItemDecoration(RecyclerItemDecoration(5f.toPx(context))) + adapter = object : BaseRecyclerView.Adapter( + layoutId = R.layout.recycler_item_feed, + bindingVariableId = BR.feeds, + clickItemEvent = itemClickListener + ) { + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): BaseRecyclerView.ViewHolder { + val holder = super.onCreateViewHolder(parent, viewType) + holder.binding?.setVariable(BR.feedVm,feedViewModel) + return holder + } + } + addOnScrollListener(endlessListener) + addItemDecoration(RecyclerItemDecoration(ITEM_DECORATION)) + } + + srvlRefresh.apply { + setOnRefreshListener { + feedViewModel.getFireStore() + endlessListener.resetState() + feedViewModel.feedItems.observe(this@FeedFragment, + Observer { isRefreshing = false }) + } + } + } + + } + + companion object { + fun newInstance() = FeedFragment().apply { + arguments = Bundle().apply { + + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/feed/FeedViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/feed/FeedViewModel.kt new file mode 100644 index 0000000..ca048ab --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/feed/FeedViewModel.kt @@ -0,0 +1,159 @@ +package com.hyden.booklibrary.view.feed + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.google.firebase.firestore.DocumentSnapshot +import com.google.firebase.firestore.FirebaseFirestore +import com.google.firebase.firestore.Query +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.data.model.* +import com.hyden.booklibrary.data.repository.source.FirebaseDataSource +import com.hyden.booklibrary.util.ConstUtil.Companion.DATABASENAME_BOOK +import com.hyden.booklibrary.util.ConstUtil.Companion.FEED_LIMIT +import com.hyden.booklibrary.view.feed.model.FeedData +import com.hyden.booklibrary.view.feed.model.convertToFeed +import com.hyden.util.LogUtil.LogW +import io.reactivex.Observable +import io.reactivex.schedulers.Schedulers + +class FeedViewModel( + private val firebaseDataSource: FirebaseDataSource +) : BaseViewModel() { + + private val firestore by lazy { FirebaseFirestore.getInstance() } + + // lateinit var documents: List + lateinit var lastVisible: DocumentSnapshot + + private val _feedItems = MutableLiveData>() + val feedItems: LiveData> get() = _feedItems + + private val _userInfo = MutableLiveData() + val userInfo: LiveData get() = _userInfo + + private val _isSharedUser = MutableLiveData() + val isSharedUser: LiveData get() = _isSharedUser + + private val _userProfile = MutableLiveData() + val userProfile : LiveData get() = _userProfile + + private val _userNickname = MutableLiveData() + val userNickname : LiveData get() = _userNickname + +// private val _isContainsUser = MutableLiveData() +// val isContainsUser : LiveData get() = _isContainsUser + + // 좋아요 클릭 이벤트 처리 + /** + * 좋아요 + */ + fun pushLiked(position: Int, isLiked: Boolean) { + _feedItems.value?.let { + val documentId = + it[position].feed?.sharedInfo?.users?.email + "-" + it[position].feed?.bookEntity?.isbn13 + firebaseDataSource.pushLike(isLiked, documentId) + if (it[position].feed?.sharedInfo?.users?.email == firebaseDataSource.getLoginEmail()) { + it[position].feed?.bookEntity?.isLiked = isLiked + _isSharedUser.value = true + } else { + _isSharedUser.value = false + } + } + } + fun postLike(feed: Feed?,isSelected: Boolean) { + _feedItems.value?.let { + val documentId = feed?.sharedInfo?.users?.email + "-" + feed?.bookEntity?.isbn13 + firebaseDataSource.pushLike(isSelected, documentId) + feed?.bookEntity?.isLiked = isSelected + if (isSelected) { + feed?.likesInfo?.users = feed?.likesInfo?.users?.toMutableList()?.apply { + add(firebaseDataSource.currentUser) + } + } else { + + compositeDisposable.add( + Observable.range(0,feed?.likesInfo?.users?.size ?: 0) + .subscribeOn(Schedulers.computation()) + .filter { feed?.likesInfo?.users?.get(it)?.email == firebaseDataSource.getLoginEmail() } + .subscribe( + { + feed?.likesInfo?.users = feed?.likesInfo?.users?.toMutableList()?.apply { + removeAt(it) + } + }, + {} + ) + ) + } + } + } + + fun isContainsUser(users: List): Boolean { + return firebaseDataSource.isExistUser(users) + } + + fun isLiked(users: List?, like : () -> Unit) { + compositeDisposable.add( + Observable.fromIterable(users) + .subscribeOn(Schedulers.computation()) + .filter { + LogW("${it}") + it.email == firebaseDataSource.getLoginEmail() + } + .subscribe( + { like.invoke() }, + {} + ) + ) + } + + /** + * 피드에 등록된 책정보를 가져온다. + * 공유된 시간순으로 정렬 + * 페이징 처리 + */ + fun getFireStore() { + firestore.collection(DATABASENAME_BOOK) + .orderBy("sharedInfo.sharedDate", Query.Direction.DESCENDING) + .limit(FEED_LIMIT) + .get() + .addOnSuccessListener { documentSnapshot -> + // 파이어베이스 페이징 + if(documentSnapshot.size() >= 1) { + lastVisible = documentSnapshot.documents[documentSnapshot.size() - 1] + } + val temp = mutableListOf() + for (i in documentSnapshot.documents.indices) { +// ((documentSnapshot.documents[i].data?.get("sharedInfo") as HashMap<*,*>).get("users") as HashMap<*,*>)["email"] +// ((documentSnapshot.documents[i].data?.get("sharedInfo") as HashMap<*,*>).get("users") as HashMap<*,*>)["name"] +// ((documentSnapshot.documents[i].data?.get("sharedInfo") as HashMap<*,*>).get("users") as HashMap<*,*>)["nickName"] +// ((documentSnapshot.documents[i].data?.get("sharedInfo") as HashMap<*,*>).get("users") as HashMap<*,*>)["profile"] + temp.add(FeedData(convertToFeed(documentSnapshot.documents[i].data), false)) + } + _feedItems.value = temp + } + } + + fun loadMore() { + firestore.collection(DATABASENAME_BOOK) + .orderBy("sharedInfo.sharedDate", Query.Direction.DESCENDING) + .limit(FEED_LIMIT) + .startAfter(lastVisible) + .get() + .addOnSuccessListener { documentSnapshot -> + if (documentSnapshot.size() > 0) { + lastVisible = documentSnapshot.documents[documentSnapshot.size() - 1] + + val temp = mutableListOf() + for (i in documentSnapshot.documents.indices) { + temp.add(FeedData(convertToFeed(documentSnapshot.documents[i].data),false)) + } + _feedItems.value = _feedItems.value?.let { + it.toMutableList().apply { + addAll(temp) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/feed/custom/ExpandableTextLayout.kt b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/ExpandableTextLayout.kt new file mode 100644 index 0000000..dc74506 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/ExpandableTextLayout.kt @@ -0,0 +1,241 @@ +package com.hyden.booklibrary.view.feed.custom + +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.graphics.Typeface +import android.os.Build +import android.text.SpannableStringBuilder +import android.text.Spanned +import android.text.style.TypefaceSpan +import android.util.AttributeSet +import android.view.View +import android.view.ViewGroup.LayoutParams.MATCH_PARENT +import android.view.ViewGroup.LayoutParams.WRAP_CONTENT +import android.widget.ImageButton +import android.widget.LinearLayout +import android.widget.TextView +import android.widget.Toast +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.model.Feed +import com.hyden.booklibrary.util.ConstUtil.Companion.DEFAULT_COLLAPSEDLINES +import com.hyden.booklibrary.view.detail.feed.FeedDetailActivity +import com.hyden.booklibrary.view.feed.FeedFragment +import com.hyden.booklibrary.view.feed.custom.adapter.ExpandCollapseAnimationLayout +import com.hyden.booklibrary.view.feed.FeedViewModel +import com.hyden.booklibrary.view.feed.model.FeedData +import com.hyden.ext.moveToActivity +import kotlin.math.max + +class ExpandableTextLayout : LinearLayout, View.OnClickListener { + + private var collapsedLines = DEFAULT_COLLAPSEDLINES + private var collapsedHeight = 0 + private var expanedHeight = 150 + + private var expandableId = R.id.tv_expandable + private var showMoreId = R.id.tv_show_more + private var commentdId = R.id.tv_show_more + private var expandId = R.id.ib_expand_collapse + lateinit var animation: ExpandCollapseAnimationLayout + + private var indexFalse: Int = -1 + private var indexTrue: Int = -1 + private var index: Int = -1 + + lateinit var feedVm: FeedViewModel + + private val tvContents by lazy { ExpandableTextView(context) } + private val tvShowMore by lazy { TextView(context) } + private val tvComments by lazy { TextView(context) } + + + constructor(context: Context) : super(context) {} + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) { + initView(attributeSet) + } + + constructor(context: Context, attributeSet: AttributeSet, defStyle: Int) : super(context, attributeSet, defStyle) { + initView(attributeSet) + } + + private fun initView(attributeSet: AttributeSet) { + val typeArrary = + context.obtainStyledAttributes(attributeSet, R.styleable.ExpandableTextLayout) + + collapsedLines = typeArrary.getInt( + R.styleable.ExpandableTextLayout_maxCollapsedLinesText, + DEFAULT_COLLAPSEDLINES + ) + expandableId = typeArrary.getResourceId( + R.styleable.ExpandableTextLayout_tvExpandableId, + R.id.tv_expandable + ) + commentdId = typeArrary.getResourceId( + R.styleable.ExpandableTextLayout_tvCommentsId, + R.id.tv_comments + ) + expandId = typeArrary.getResourceId( + R.styleable.ExpandableTextLayout_ibExpandCollapseToggleId, + R.id.ib_expand_collapse + ) + + + orientation = VERTICAL + addView(initTvContents()) + addView(initTvShowMore()) + addView(initTvComments()) + typeArrary.recycle() + + } + + override fun onFinishInflate() { + super.onFinishInflate() + findViews() + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + } + + private fun initTvContents() : TextView { + tvContents.id = expandableId + tvContents.textSize = 13f + tvContents.layoutParams = LayoutParams(MATCH_PARENT, WRAP_CONTENT) + return tvContents + } + private fun initTvShowMore() : TextView { + tvShowMore.id = showMoreId + tvShowMore.text = "자세히보기" + tvShowMore.textSize = 12f + tvShowMore.setTextColor(Color.GRAY) + tvShowMore.visibility = View.GONE + return tvShowMore + } + private fun initTvComments() : TextView { + val layoutParams = LayoutParams(WRAP_CONTENT, WRAP_CONTENT) + layoutParams.topMargin = 40 + + tvComments.id = commentdId + tvComments.textSize = 12f + tvComments.layoutParams = layoutParams + tvComments.setTextColor(resources.getColor(R.color.colorAccent,null)) + tvComments.alpha = 0.7f + tvComments.text = "답글 1개 보기" + tvComments.visibility = View.GONE + return tvComments + } + + override fun onClick(view: View?) { + when (view?.id) { + R.id.tv_expandable -> { + + } + R.id.tv_show_more -> { + showMore(feedVm.feedItems.value!![index].isExpanded) + feedVm.feedItems.value!![index].isExpanded = + feedVm.feedItems.value!![index].isExpanded.not() + } + R.id.tv_comments -> { + Toast.makeText(context, "댓글", Toast.LENGTH_SHORT).show() + } + } + } + + private fun findViews() { + tvContents.maxLines = collapsedLines + tvContents.setOnClickListener(this) + tvShowMore.setOnClickListener(this) + tvComments.setOnClickListener(this) + } + + private fun showMore(isExpanded: Boolean) { + when (isExpanded) { + true -> { + animation = + ExpandCollapseAnimationLayout( + this, + tvContents, + tvContents.height, + collapsedHeight + ) + } + false -> { + animation = + ExpandCollapseAnimationLayout( + this, + tvContents, + tvContents.height, + expanedHeight + ) + } + } + + if (isExpanded && tvContents.lineCount > collapsedLines) { + tvShowMore.text = "자세히보기" + tvShowMore.visibility = View.VISIBLE + } else { + tvShowMore.text = "접기" + } + + animation.duration = 500 + clearAnimation() + startAnimation(animation) + } + + fun setText(userName: String?, text: String?, feedVm: FeedViewModel, feedData: Feed?) { + val bold = Typeface.createFromAsset(resources.assets, "scdream9_black.otf") + val sb = SpannableStringBuilder("$userName $text").apply { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + setSpan(TypefaceSpan(bold),0,userName?.length ?: 0 , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) + } else { + //TODO 텍스트 폰트 적용 + setSpan(bold,0,userName?.length ?: 0 , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) + } + } + tvContents.text = sb + + postDelayed({ + this.feedVm = feedVm + indexFalse = feedVm.feedItems.value?.indexOf(FeedData(feedData, false))!! + indexTrue = feedVm.feedItems.value?.indexOf(FeedData(feedData, true))!! + index = max(indexFalse, indexTrue) + + if (index != -1) { + feedVm.feedItems.value?.let { + setContentHeight(!it[index].isExpanded) + } + } + }, 100) + } + + private fun setContentHeight(isExpanded: Boolean) { + expanedHeight = tvContents.lineHeight * tvContents.lineCount + collapsedHeight = if (tvContents.lineCount > 3) { + tvContents.lineHeight * collapsedLines + } else { + tvContents.lineHeight * tvContents.lineCount + } + + when (isExpanded) { + true -> { + tvContents.height = collapsedHeight + tvContents.layoutParams.height = collapsedHeight + } + false -> { + tvContents.height = expanedHeight + tvContents.layoutParams.height = expanedHeight + } + } + + if (isExpanded && tvContents.lineCount > collapsedLines) { + tvShowMore.visibility = View.VISIBLE + tvShowMore.text = "자세히보기" + } else if(!isExpanded) { + tvShowMore.visibility = View.VISIBLE + tvShowMore.text = "접기" + } else { + tvShowMore.visibility = View.GONE + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/feed/custom/ExpandableTextView.kt b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/ExpandableTextView.kt new file mode 100644 index 0000000..cecdb5f --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/ExpandableTextView.kt @@ -0,0 +1,92 @@ +package com.hyden.booklibrary.view.feed.custom + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import android.widget.TextView +import com.hyden.booklibrary.R +import com.hyden.booklibrary.util.ConstUtil.Companion.DEFAULT_COLLAPSEDLINES +import com.hyden.booklibrary.view.feed.custom.adapter.ExpandCollapseAnimation + +class ExpandableTextView : TextView { + + + private var collapsedLines = DEFAULT_COLLAPSEDLINES + private var isExpanded = false + private var collapsedHeight = 0 + private var expanedHeight = 0 + + constructor(context: Context) : super(context) {} + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) { + init(attributeSet) + } + + constructor(context: Context, attributeSet: AttributeSet, defStyle: Int) : super( + context, + attributeSet, + defStyle + ) { + init(attributeSet) + } + + private fun init(attributeSet: AttributeSet) { + val typeArrary = context.obtainStyledAttributes(attributeSet, R.styleable.ExpandableTextView) + + collapsedLines = typeArrary.getInt( + R.styleable.ExpandableTextView_maxCollapsedLines, + DEFAULT_COLLAPSEDLINES + ) + + + +// setOnClickListener(this) + typeArrary.recycle() + } + + + override fun onFinishInflate() { + super.onFinishInflate() + findViews() + } + + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) +// expanedHeight = lineHeight * lineCount + 10 +// collapsedHeight = lineHeight * collapsedLines + 10 + + } + +// override fun onClick(view: View?) { +// +// var animation: ExpandCollapseAnimation +// when (isExpanded) { +// true -> { +// animation = +// ExpandCollapseAnimation( +// this, +// height, +// collapsedHeight +// ) +//// maxLines = collapsedLines +// } +// false -> { +// animation = +// ExpandCollapseAnimation( +// this, +// height, +// expanedHeight +// ) +//// maxLines = lineCount +// } +// } +// isExpanded = isExpanded.not() +// animation.duration = 300 +// clearAnimation() +// startAnimation(animation) +// } + + private fun findViews() { + maxLines = collapsedLines + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/feed/custom/FeedLikeView.kt b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/FeedLikeView.kt new file mode 100644 index 0000000..ffe0211 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/FeedLikeView.kt @@ -0,0 +1,43 @@ +package com.hyden.booklibrary.view.feed.custom + +import android.content.Context +import android.util.AttributeSet +import android.widget.ImageView +import android.widget.TextView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.databinding.BindingAdapter +import com.google.android.material.snackbar.Snackbar +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.model.Feed +import com.hyden.booklibrary.view.feed.FeedViewModel +import com.hyden.ext.onlyNumber +import kotlinx.android.synthetic.main.recycler_item_feed.view.* + +@BindingAdapter(value = ["bindFeedVm", "bindFeed"]) +fun ConstraintLayout.bindLike(feedVm: FeedViewModel, feed: Feed) { + feedVm.isLiked(feed.likesInfo.users) { + iv_like.isSelected = true + iv_like.setImageResource(R.drawable.ic_like_on) + } + + iv_like.setOnClickListener(null) + cl_info.setOnClickListener(null) + + iv_like.setOnClickListener { + iv_like.isSelected = iv_like.isSelected.not() + feedVm.postLike(feed, iv_like.isSelected) + if (iv_like.isSelected) { + iv_like.setImageResource(R.drawable.ic_like_on) + tv_like_count.text = String.format(resources.getString(R.string.like_count),tv_like_count.text.onlyNumber().toInt() + 1) + feed.likesCount = feed.likesCount.plus(1) + } else { + iv_like.setImageResource(R.drawable.ic_like_off) + tv_like_count.text = String.format(resources.getString(R.string.like_count),tv_like_count.text.onlyNumber().toInt() - 1) + feed.likesCount = feed.likesCount.minus(1) + } + } + + cl_info.setOnClickListener { + Snackbar.make(this,"준비중입니다",Snackbar.LENGTH_SHORT).show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/feed/custom/adapter/ExpandCollapseAnimation.kt b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/adapter/ExpandCollapseAnimation.kt new file mode 100644 index 0000000..bfbd3a9 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/adapter/ExpandCollapseAnimation.kt @@ -0,0 +1,45 @@ +package com.hyden.booklibrary.view.feed.custom.adapter + +import android.view.View +import android.view.animation.Animation +import android.view.animation.Transformation +import android.widget.TextView + +class ExpandCollapseAnimation( + private val tvView : TextView, + private val startHeight : Int, + private val endHeight : Int +) : Animation(), Animation.AnimationListener { + private var initialHeight = 0 + private var targetHeight = 0 + + init { + setAnimationListener(this) + } + + override fun applyTransformation(interpolatedTime: Float, t: Transformation?) { + super.applyTransformation(interpolatedTime, t) + + val newHeight = ((endHeight - startHeight) * interpolatedTime + startHeight).toInt() + tvView.maxHeight = newHeight + tvView.layoutParams.height = newHeight + tvView.requestLayout() + } + + override fun onAnimationStart(animation: Animation?) { + initialHeight = tvView.height + tvView.measure( + View.MeasureSpec.makeMeasureSpec(initialHeight, View.MeasureSpec.EXACTLY), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) + ) + targetHeight = tvView.measuredHeight + } + + override fun onAnimationRepeat(animation: Animation?) { + + } + + override fun onAnimationEnd(animation: Animation?) { + tvView.requestLayout() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/feed/custom/adapter/ExpandCollapseAnimationLayout.kt b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/adapter/ExpandCollapseAnimationLayout.kt new file mode 100644 index 0000000..81d1111 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/adapter/ExpandCollapseAnimationLayout.kt @@ -0,0 +1,50 @@ +package com.hyden.booklibrary.view.feed.custom.adapter + +import android.view.View +import android.view.animation.Animation +import android.view.animation.Transformation +import android.widget.TextView + +class ExpandCollapseAnimationLayout( + private val view: View, + private val tvView : TextView, + private val startHeight : Int, + private val endHeight : Int +) : Animation(), Animation.AnimationListener { + private var initialHeight = 0 + private var targetHeight = 0 + private var isAnimating = false + + init { + setAnimationListener(this) + } + + override fun applyTransformation(interpolatedTime: Float, t: Transformation?) { + super.applyTransformation(interpolatedTime, t) + + val newHeight = ((endHeight - startHeight) * interpolatedTime + startHeight).toInt() + tvView.maxHeight = newHeight + tvView.layoutParams.height = newHeight + tvView.requestLayout() + } + + override fun onAnimationStart(animation: Animation?) { + initialHeight = tvView.height + tvView.measure( + View.MeasureSpec.makeMeasureSpec(initialHeight, View.MeasureSpec.EXACTLY), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) + ) + targetHeight = tvView.measuredHeight + isAnimating = true + } + + override fun onAnimationRepeat(animation: Animation?) { + + } + + override fun onAnimationEnd(animation: Animation?) { + isAnimating = false + view.clearAnimation() +// tvView.requestLayout() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/feed/custom/adapter/ExpandableTextExt.kt b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/adapter/ExpandableTextExt.kt new file mode 100644 index 0000000..9ef64e9 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/feed/custom/adapter/ExpandableTextExt.kt @@ -0,0 +1,16 @@ +package com.hyden.booklibrary.view.feed.custom.adapter + +import androidx.databinding.BindingAdapter +import com.hyden.booklibrary.data.model.Feed +import com.hyden.booklibrary.view.feed.custom.ExpandableTextLayout +import com.hyden.booklibrary.view.feed.FeedViewModel + + +@BindingAdapter(value = ["bindUserName","bindText","bindFeedVm","bindFeedData"]) +fun ExpandableTextLayout.bindText(userName: String?, text: String?,feedVm : FeedViewModel, feedData : Feed?) { + if(text == "null" || text == null) { + setText(userName,"",feedVm,feedData) + } else { + setText(userName,text,feedVm,feedData) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/feed/model/FeedData.kt b/app/src/main/java/com/hyden/booklibrary/view/feed/model/FeedData.kt new file mode 100644 index 0000000..00d9e03 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/feed/model/FeedData.kt @@ -0,0 +1,61 @@ +package com.hyden.booklibrary.view.feed.model + +import com.hyden.booklibrary.data.local.db.BookEntity +import com.hyden.booklibrary.data.model.Feed +import com.hyden.booklibrary.data.model.toFeed +import com.hyden.booklibrary.data.model.toLike +import com.hyden.booklibrary.data.model.toSharedInfo +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.data.remote.network.response.convertToBookEntity + +data class FeedData( + val feed : Feed?, + var isExpanded: Boolean = false +) + +// 데이터 파싱 +fun convertToFeed(documents: Map<*, *>?): Feed { + return documents?.run { + Feed( + get("sharedInfo").toSharedInfo(), + convertToBook(get("bookEntity") as HashMap<*, *>), + get("likesCount").toString().toLong(), + get("likesInfo").toLike() + ) + }?.toFeed()!! +} + +fun convertToBook(documents: HashMap<*, *>): BookEntity { + return documents?.run { + BookItem( + get("savaed") as Boolean? ?: false, + get("liked") as Boolean? ?: false, + get("shared") as Boolean? ?: false, + get("chated") as Boolean? ?: false, + get("bookNote").toString(), + get("bookReviews").toString(), + get("title").toString(), + get("link").toString(), + get("author").toString(), + get("pubDate").toString(), + get("description").toString(), + get("isbn").toString(), + get("isbn13").toString(), + get("itemId").toString(), + get("priceSales").toString(), + get("priceStandard").toString(), + get("mallType").toString(), + get("stockStatus").toString(), + get("mileage").toString(), + get("cover").toString(), + get("categoryId").toString(), + get("categoryName").toString(), + get("publisher").toString(), + get("salesPoint").toString(), + get("adult").toString(), + get("fixedPrice").toString(), + get("customerReviewRank").toString(), + get("bestRank").toString() + ) + }.convertToBookEntity() +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/home/HomeFragment.kt b/app/src/main/java/com/hyden/booklibrary/view/home/HomeFragment.kt new file mode 100644 index 0000000..b04679e --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/home/HomeFragment.kt @@ -0,0 +1,163 @@ +package com.hyden.booklibrary.view.home + +import android.content.Intent +import android.os.Bundle +import android.os.Handler +import android.view.View +import androidx.databinding.library.baseAdapters.BR +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.RecyclerView +import com.example.hyojin.util.EndlessRecyclerViewScrollListener +import com.hyden.base.BaseFragment +import com.hyden.base.BaseItemsApdater +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.databinding.FragmentHomeBinding +import com.hyden.booklibrary.util.ConstUtil.Companion.BOOK_BESTSELLER +import com.hyden.booklibrary.util.ConstUtil.Companion.BOOK_BLOGBEST +import com.hyden.booklibrary.util.ConstUtil.Companion.BOOK_ITEMNEW_ALL +import com.hyden.booklibrary.util.ConstUtil.Companion.BOOK_ITEMNEW_SPECIAL +import com.hyden.booklibrary.util.ConstUtil.Companion.DATABASELIMIT +import com.hyden.booklibrary.util.dialogBookInfo +import com.hyden.booklibrary.view.detail.UnSavedDetailActivity +import com.hyden.ext.loadUrl +import com.hyden.ext.moveToActivity +import com.hyden.util.ImageTransformType +import com.hyden.util.ItemClickListener +import com.hyden.util.LogUtil.LogW +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.rxkotlin.addTo +import io.reactivex.schedulers.Schedulers +import org.koin.androidx.viewmodel.ext.android.viewModel +import java.util.concurrent.TimeUnit +import kotlin.random.Random + +class HomeFragment : BaseFragment(R.layout.fragment_home) { + + private val homeViewModel by viewModel() + private val TIMEINTERVAL = 10000L + private val imageType = ImageTransformType.ROUND + private var rand1 : Int = 0 + private var rand2 : Int = 0 + + private val itemClickListener by lazy { + object : ItemClickListener { + override fun onItemClick(item: T) { + when (item) { + is BookItem -> { + Intent(activity, UnSavedDetailActivity::class.java).apply { + putExtra(getString(R.string.book_info), item) + moveToActivity(this) + } + } + } + } + } + } + + private val handler = Handler() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + homeViewModel.loadBook(page = Random.nextInt(1, 4), queryType = BOOK_BLOGBEST) + homeViewModel.loadBook(queryType = BOOK_BESTSELLER) + homeViewModel.loadBook(queryType = BOOK_ITEMNEW_SPECIAL) + homeViewModel.loadBook(queryType = BOOK_ITEMNEW_ALL) + observing() + } + + override fun onStop() { + super.onStop() + handler.removeCallbacks(runnable()) + compositeDisposable.clear() + } + + override fun onResume() { + super.onResume() + intervalBookCover() + } + + override fun initBind() { + binding.apply { + vm = homeViewModel + rvBookBestseller.apply { + adapter = BaseItemsApdater(R.layout.recycler_item_home, BR.book, itemClickListener) + addOnScrollListener(endLessScrollListener(BOOK_BESTSELLER, layoutManager)) + } + rvBookNew.apply { + adapter = BaseItemsApdater(R.layout.recycler_item_home, BR.book, itemClickListener) + addOnScrollListener(endLessScrollListener(BOOK_ITEMNEW_SPECIAL, layoutManager)) + } + rvBookAll.apply { + adapter = BaseItemsApdater(R.layout.recycler_item_home, BR.book, itemClickListener) + addOnScrollListener(endLessScrollListener(BOOK_ITEMNEW_ALL, layoutManager)) + } + ivBookCover1.setOnClickListener { + context?.dialogBookInfo(homeViewModel.bookBlogBest.value?.get(rand1)) { intervalBookCover() } + compositeDisposable.clear() + } + ivBookCover2.setOnClickListener { + context?.dialogBookInfo(homeViewModel.bookBlogBest.value?.get(rand2)) { intervalBookCover() } + compositeDisposable.clear() + } + } + } + + override fun observing() { + super.observing() + binding.run { + homeViewModel.bookBlogBest.observe(this@HomeFragment, Observer { + // 초기 설정 + rand1 = Random.nextInt(0,DATABASELIMIT/2) + rand2 = Random.nextInt(DATABASELIMIT/2,DATABASELIMIT) + ivBookCoverTemp1.loadUrl(it[rand1].cover, imageType,resources.getInteger(R.integer.book_image_radius)) + ivBookCoverTemp2.loadUrl(it[rand2].cover, imageType,resources.getInteger(R.integer.book_image_radius)) + + ivBookCover1.loadUrl(it[rand1].cover, imageType,resources.getInteger(R.integer.book_image_radius)) + ivBookCover2.loadUrl(it[rand2].cover, imageType,resources.getInteger(R.integer.book_image_radius)) + }) + } + } + + private fun endLessScrollListener( + queryType: String, + layoutManager: RecyclerView.LayoutManager? + ): EndlessRecyclerViewScrollListener { + return object : EndlessRecyclerViewScrollListener(layoutManager) { + override fun onLoadMore(page: Int, totalItemsCount: Int, view: RecyclerView) { + homeViewModel.loadMore(page = page + 1, queryType = queryType) + } + } + } + + private fun intervalBookCover() { + Observable.interval(TIMEINTERVAL, TimeUnit.MILLISECONDS) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + LogW("$it") + rand1 = Random.nextInt(0,DATABASELIMIT/2) + rand2 = Random.nextInt(DATABASELIMIT/2,DATABASELIMIT) + binding.ivBookCover1.loadUrl(homeViewModel.bookBlogBest.value!![rand1].cover, imageType,resources.getInteger(R.integer.book_image_radius)) + binding.ivBookCover2.loadUrl(homeViewModel.bookBlogBest.value!![rand2].cover, imageType,resources.getInteger(R.integer.book_image_radius)) + handler.postDelayed(runnable(rand1,rand2), 1000) + }.addTo(compositeDisposable) + } + + private fun runnable(rand1: Int = 0,rand2: Int = 0) = Runnable { + binding.run { + ivBookCoverTemp1.loadUrl(homeViewModel.bookBlogBest.value!![rand1].cover, imageType,resources.getInteger(R.integer.book_image_radius),1000) + ivBookCoverTemp2.loadUrl(homeViewModel.bookBlogBest.value!![rand2].cover, imageType,resources.getInteger(R.integer.book_image_radius),1000) + } + } + + + companion object { + fun newInstance() = HomeFragment().apply { + arguments = Bundle().apply { + + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/home/HomeViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/home/HomeViewModel.kt new file mode 100644 index 0000000..f1c774b --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/home/HomeViewModel.kt @@ -0,0 +1,153 @@ +package com.hyden.booklibrary.view.home + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.data.remote.network.response.BookResponse +import com.hyden.booklibrary.data.repository.AladinRepository +import com.hyden.booklibrary.util.ConstUtil.Companion.BOOK_BESTSELLER +import com.hyden.booklibrary.util.ConstUtil.Companion.BOOK_BLOGBEST +import com.hyden.booklibrary.util.ConstUtil.Companion.BOOK_ITEMNEW_SPECIAL +import com.hyden.booklibrary.util.ConstUtil.Companion.BOOK_ITEMNEW_ALL +import com.hyden.util.LogUtil.LogE +import io.reactivex.Single +import kotlin.random.Random + +class HomeViewModel( + private val aladinRepository: AladinRepository +) : BaseViewModel() { + + private val _bookBlogBest = MutableLiveData>() + val bookBlogBest: LiveData> get() = _bookBlogBest + + private val _bookBestSeller = MutableLiveData>() + val bookBestSeller: LiveData> get() = _bookBestSeller + + private val _bookNewSpecial = MutableLiveData>() + val bookNewSpecial: LiveData> get() = _bookNewSpecial + + private val _bookNewAll = MutableLiveData>() + val bookNewAll: LiveData> get() = _bookNewAll + + + private val _isRefreshingBestSeller = MutableLiveData() + val isRefreshingBestSeller: LiveData get() = _isRefreshingBestSeller + + private val _isRefreshingNew = MutableLiveData() + val isRefreshingNew: LiveData get() = _isRefreshingNew + + private val _isRefreshingAll = MutableLiveData() + val isRefreshingAll: LiveData get() = _isRefreshingAll + + private val searchTarget : String = "book" + + fun loadMore( + page: Int, + queryType: String + ) { + loadBook(page = page, queryType = queryType) + } + + fun loadBook( + page: Int = 1, + queryType: String + ) { + compositeDisposable.add( + aladinRepository.loadBook( + page = page, + querytype = queryType, + searchtarget = searchTarget + ).subscribe({ + val queryTypeName = it.query.split("=", ";")[1] + when (queryTypeName) { + BOOK_BLOGBEST -> bookBlogBest(it.item) + BOOK_BESTSELLER -> bookBestSeller(it.item) + BOOK_ITEMNEW_SPECIAL -> bookNewSpecial(it.item) + BOOK_ITEMNEW_ALL -> bookNewAll(it.item) + } + }, { LogE("$it") }) + ) + } + + fun load(page: Int = 1) { +// compositeDisposable.add( +// fetchBlogBest().zipWith(fetchBestSeller(page),fetchItemNew(page),fetchItemNewAll(page)) +// ) + } + + private fun fetchBlogBest(): Single { + return aladinRepository.loadBook( + page = Random.nextInt(1, 4), + querytype = BOOK_BLOGBEST, + searchtarget = searchTarget + ) + } + + private fun fetchBestSeller(page: Int = 1): Single { + return aladinRepository.loadBook( + page = page, + querytype = BOOK_BESTSELLER, + searchtarget = searchTarget + ) + } + + private fun fetchItemNew(page: Int = 1): Single { + return aladinRepository.loadBook( + page = page, + querytype = BOOK_ITEMNEW_SPECIAL, + searchtarget = searchTarget + ) + } + + private fun fetchItemNewAll(page: Int = 1): Single { + return aladinRepository.loadBook( + page = page, + querytype = BOOK_ITEMNEW_ALL, + searchtarget = searchTarget + ) + } + + private fun bookBlogBest(data: List) { + _bookBlogBest.value = data + } + + private fun bookBestSeller(data: List) { + if (_isRefreshingBestSeller.value ?: true) { + _bookBestSeller.value = data + } else { + _bookBestSeller.value = _bookBestSeller.value?.let { + it.toMutableList().apply { + addAll(data) + } + } + } + _isRefreshingBestSeller.value = false + } + + private fun bookNewSpecial(data: List) { + if (_isRefreshingNew.value ?: true) { + _bookNewSpecial.value = data ?: emptyList() + } else { + _bookNewSpecial.value = _bookNewSpecial.value?.let { + it.toMutableList().apply { + addAll(data) + } + } + } + _isRefreshingNew.value = false + } + + private fun bookNewAll(data: List) { + if (_isRefreshingAll.value ?: true) { + _bookNewAll.value = data + } else { + _bookNewAll.value = _bookNewAll.value?.let { + it.toMutableList().apply { + addAll(data) + } + } + } + _isRefreshingAll.value = false + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/library/LibraryFragment.kt b/app/src/main/java/com/hyden/booklibrary/view/library/LibraryFragment.kt new file mode 100644 index 0000000..6b96f2c --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/library/LibraryFragment.kt @@ -0,0 +1,91 @@ +package com.hyden.booklibrary.view.library + +import android.content.Intent +import android.os.Bundle +import android.view.View +import androidx.databinding.library.baseAdapters.BR +import com.hyden.base.BaseFragment +import com.hyden.base.BaseItemsApdater +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.local.db.BookEntity +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.databinding.FragmentLibraryBinding +import com.hyden.booklibrary.databinding.ItemBookImageBinding +import com.hyden.booklibrary.util.longClickVibrate +import com.hyden.booklibrary.view.detail.mysaved.SavedDetailActivity +import com.hyden.ext.showSimpleDialog +import com.hyden.util.ItemClickListener +import com.hyden.util.ItemLongClickListener +import org.koin.androidx.viewmodel.ext.android.viewModel + + +class LibraryFragment : BaseFragment(R.layout.fragment_library) { + + private val libraryViewModel by viewModel() + + private val itemClickListener by lazy { + object : ItemClickListener { + override fun onItemClick(item: T) { + when (item) { is BookItem -> + Intent(activity, SavedDetailActivity::class.java).apply { + putExtra(getString(R.string.book_info), item) + startActivity(this) + activity?.overridePendingTransition(R.anim.fade_in, R.anim.fade_out) + } + } + } + } + } + + private val itemLongClickListener by lazy { + object : ItemLongClickListener { + override fun onItemLongClick(item: T): Boolean { + when (item) { + is BookEntity -> { + longClickVibrate() + context?.showSimpleDialog(message = getString(R.string.are_you_delete_book_info)) { deleteBook(item.isbn13) } + } + } + return true + } + } + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + } + + override fun onResume() { + super.onResume() + libraryViewModel.loadBook() + } + + override fun initBind() { + binding.apply { + vm = libraryViewModel + rvBookself.apply { + adapter = BaseItemsApdater(R.layout.item_book_image,BR.book,itemClickListener,itemLongClickListener) +// addItemDecoration(RecyclerItemDecoration(ITEM_DECORATION)) + } + srvlRefresh.apply { + setOnRefreshListener { + isRefreshing = false + } + } + } + } + + private fun deleteBook(isbn13 : String) { + libraryViewModel.deleteBook(isbn13) + } + + + companion object { + fun newInstance() = LibraryFragment().apply { + arguments = Bundle().apply { + + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/library/LibraryViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/library/LibraryViewModel.kt new file mode 100644 index 0000000..ba64567 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/library/LibraryViewModel.kt @@ -0,0 +1,41 @@ +package com.hyden.booklibrary.view.library + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.data.local.db.convertToBookItems +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.data.repository.source.BookDataSource +import com.hyden.util.LogUtil.LogE + +class LibraryViewModel( + private val bookDataSource: BookDataSource +) : BaseViewModel() { + + private val _bookData = MutableLiveData>() + val bookData : LiveData> get() = _bookData + + fun loadBook() { + compositeDisposable.add( + bookDataSource.getAll() + .subscribe( + { _bookData.value = it.convertToBookItems() }, + { LogE("$it")} + ) + ) + } + + fun deleteBook(isbn13 : String) { + compositeDisposable.add( + bookDataSource.deleteBook(isbn13) + .subscribe( + { loadBook() }, + { LogE("$it") } + ) + ) + } + + override fun onCleared() { + super.onCleared() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/login/LoginActivity.kt b/app/src/main/java/com/hyden/booklibrary/view/login/LoginActivity.kt new file mode 100644 index 0000000..3526bd2 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/login/LoginActivity.kt @@ -0,0 +1,111 @@ +package com.hyden.booklibrary.view.login + +import android.content.Intent +import android.os.Bundle +import android.widget.Toast +import androidx.lifecycle.Observer +import com.google.android.gms.auth.api.signin.GoogleSignIn +import com.google.android.gms.auth.api.signin.GoogleSignInAccount +import com.google.android.gms.auth.api.signin.GoogleSignInOptions +import com.google.android.gms.common.api.ApiException +import com.google.firebase.auth.FirebaseAuth +import com.google.firebase.auth.GoogleAuthProvider +import com.hyden.base.BaseActivity +import com.hyden.booklibrary.R +import com.hyden.booklibrary.databinding.ActivityLoginBinding +import com.hyden.booklibrary.util.getInitPreferences +import com.hyden.booklibrary.util.setInitPreferences +import com.hyden.booklibrary.view.main.MainActivity +import com.hyden.booklibrary.view.splash.SplashActivity.Companion.LOGIN_START +import com.hyden.ext.moveToActivity +import com.hyden.util.LogUtil.LogD +import com.hyden.util.LogUtil.LogE +import org.koin.androidx.viewmodel.ext.android.viewModel + +class LoginActivity : BaseActivity(R.layout.activity_login) { + + private val loginViewModel by viewModel() + private val googleSignInOptions by lazy { + GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) + .requestIdToken(getString(R.string.default_web_client_id)) + .requestEmail() + .build() + } + + private val googleSignInClient by lazy { GoogleSignIn.getClient(this,googleSignInOptions) } + private val googleAuth by lazy { FirebaseAuth.getInstance() } + private val RC_SIGN_IN = 1000 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } + + override fun onPause() { + super.onPause() + } + + override fun initBind() { + if(googleAuth.currentUser != null) { goMain() } + binding.apply { + vm = loginViewModel + btnLoginGoogle.setOnClickListener { + startActivityForResult(googleSignInClient.signInIntent,RC_SIGN_IN) + } + } + } + + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + when(requestCode) { + RC_SIGN_IN -> { + val task = GoogleSignIn.getSignedInAccountFromIntent(data) + try { + // Google Sign In was successful, authenticate with Firebase + val account = task.getResult(ApiException::class.java) + googleAuthWithGoogle(account!!) + } catch (e: ApiException) { + // Google Sign In failed, update UI appropriately + LogE("Google sign in failed : $e") + Toast.makeText(this@LoginActivity, String.format(getString(R.string.login_fail),getString(R.string.google)), Toast.LENGTH_SHORT).show() + } + } + } + } + + private fun googleAuthWithGoogle(acct: GoogleSignInAccount) { + val credential = GoogleAuthProvider.getCredential(acct.idToken, null) + googleAuth.signInWithCredential(credential) + .addOnCompleteListener(this) { task -> + if (task.isSuccessful) { + // Sign in success, update UI with the signed-in user's information + loginViewModel.googleSignIn() + goMain() + LogD("signInWithCredential:success") + } else { + LogE("signInWithCredential:failure") + } + } + } + + + + private fun goMain() { + if(!getInitPreferences()) { + setInitPreferences(true) + loginViewModel.saveUser() + loginViewModel.myBook() + loginViewModel.succesInit.observe(this@LoginActivity, Observer { + move() + }) + } else { + move() + } + + } + private fun move() { + moveToActivity(Intent(this@LoginActivity, MainActivity::class.java)) + setResult(LOGIN_START) + finish() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/login/LoginViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/login/LoginViewModel.kt new file mode 100644 index 0000000..8d7bc70 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/login/LoginViewModel.kt @@ -0,0 +1,44 @@ +package com.hyden.booklibrary.view.login + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.google.firebase.auth.FirebaseAuth +import com.google.firebase.firestore.FirebaseFirestore +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.data.repository.source.BookDataSource +import com.hyden.booklibrary.data.repository.source.FirebaseDataSource +import com.hyden.booklibrary.util.SingleLiveEvent + +class LoginViewModel( + private val firebaseDataSource: FirebaseDataSource, + private val bookDataSource: BookDataSource +) : BaseViewModel() { + + private val firestore by lazy { FirebaseFirestore.getInstance() } + + private val _auth = MutableLiveData().apply { FirebaseAuth.getInstance() } + val auth: LiveData get() = _auth + val succesInit = SingleLiveEvent() + + fun loing() { + firebaseDataSource.login() + } + + fun googleSignIn() = firebaseDataSource.googleSignIn() + + + fun googleSignOut() = firebaseDataSource.googleSignOut() + + fun saveInit() { + + } + + fun saveUser() = firebaseDataSource.saveUser() + + fun myBook() { + firebaseDataSource.myBookAll { + bookDataSource.insertBookAll(it) + .subscribe({ succesInit.call() }, { }) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/main/MainActivity.kt b/app/src/main/java/com/hyden/booklibrary/view/main/MainActivity.kt new file mode 100644 index 0000000..08cbb5b --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/main/MainActivity.kt @@ -0,0 +1,128 @@ +package com.hyden.booklibrary.view.main + +import android.os.Bundle +import android.view.MenuItem +import android.widget.Toast +import com.google.android.gms.ads.AdListener +import com.google.android.gms.ads.AdRequest +import com.google.android.gms.ads.InterstitialAd +import com.hyden.base.BaseActivity +import com.hyden.booklibrary.R +import com.hyden.booklibrary.databinding.ActivityMainBinding +import com.hyden.booklibrary.util.getPreferenceStartView +import com.hyden.booklibrary.view.feed.FeedFragment +import com.hyden.booklibrary.view.home.HomeFragment +import com.hyden.booklibrary.view.library.LibraryFragment +import com.hyden.booklibrary.view.search.SearchFragment +import com.hyden.booklibrary.view.setting.SettingFragment +import com.hyden.ext.replaceFragment +import com.hyden.util.LogUtil.LogW +import com.hyden.util.RxBus +import com.hyden.util.RxBusEvent +import org.koin.androidx.viewmodel.ext.android.viewModel + +class MainActivity : BaseActivity(R.layout.activity_main) { + + private var currentNavigationView: Int = -1 + private var backKeyPressedTime = 0L + private lateinit var toast: Toast + + private val mainViewModel by viewModel() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + RxBus.publish(RxBusEvent.SplashFinish()) + + if (intent.getBooleanExtra("theme", false)) { + replaceFragment(SettingFragment.newInstance(), binding.flContainer.id) + binding.bnvMenu.selectedItemId = R.id.menu_setting + } else { + when (getPreferenceStartView()) { + "홈" -> { + replaceFragment(HomeFragment.newInstance(), binding.flContainer.id) + binding.bnvMenu.selectedItemId = R.id.menu_home + } + "검색" -> { + replaceFragment(SearchFragment.newInstance(), binding.flContainer.id) + binding.bnvMenu.selectedItemId = R.id.menu_search + } + "감상노트" -> { + replaceFragment(FeedFragment.newInstance(), binding.flContainer.id) + binding.bnvMenu.selectedItemId = R.id.menu_feed + } + "책꽂이" -> { + replaceFragment(LibraryFragment.newInstance(), binding.flContainer.id) + binding.bnvMenu.selectedItemId = R.id.menu_library + } + } + } + + } + + override fun onBackPressed() { + if (!supportFragmentManager.popBackStackImmediate()) { + if (System.currentTimeMillis() > backKeyPressedTime + 2000) { + backKeyPressedTime = System.currentTimeMillis() + toast = Toast.makeText(this, "\'뒤로\' 버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT) + toast.show() + return + } + } + + // 마지막으로 뒤로가기 버튼을 눌렀던 시간에 2초를 더해 현재시간과 비교 후 + // 마지막으로 뒤로가기 버튼을 눌렀던 시간이 2초가 지나지 않았으면 종료 + // 현재 표시된 Toast 취소 + if (System.currentTimeMillis() <= backKeyPressedTime + 2000) { + super.onBackPressed() + toast.cancel() + } + + } + + override fun initBind() { + binding.apply { + vm = mainViewModel + bnvMenu.apply { + setOnNavigationItemSelectedListener { + if (currentNavigationView != it.itemId) { + currentNavigationView = it.itemId + when (it.itemId) { + R.id.menu_home -> { + replaceFragment(HomeFragment.newInstance(), binding.flContainer.id) + } + R.id.menu_search -> { + replaceFragment( + SearchFragment.newInstance(), + binding.flContainer.id + ) + } + R.id.menu_feed -> { + replaceFragment(FeedFragment.newInstance(), binding.flContainer.id) + } + R.id.menu_library -> { + replaceFragment( + LibraryFragment.newInstance(), + binding.flContainer.id + ) + } + R.id.menu_setting -> { + replaceFragment( + SettingFragment.newInstance(), + binding.flContainer.id + ) + } + } + } + true + } + } + } + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + + } + return super.onOptionsItemSelected(item) + } +} diff --git a/app/src/main/java/com/hyden/booklibrary/view/main/MainViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/main/MainViewModel.kt new file mode 100644 index 0000000..d43c750 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/main/MainViewModel.kt @@ -0,0 +1,7 @@ +package com.hyden.booklibrary.view.main + +import com.hyden.base.BaseViewModel + +class MainViewModel : BaseViewModel() { + +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/myshared/MySharedBookFragment.kt b/app/src/main/java/com/hyden/booklibrary/view/myshared/MySharedBookFragment.kt new file mode 100644 index 0000000..08ac150 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/myshared/MySharedBookFragment.kt @@ -0,0 +1,71 @@ +package com.hyden.booklibrary.view.myshared + +import android.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.databinding.library.baseAdapters.BR +import com.hyden.base.BaseFragment +import com.hyden.base.BaseItemsApdater +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.databinding.FragmentMySharedBinding +import com.hyden.booklibrary.view.detail.mysaved.SavedDetailActivity +import com.hyden.ext.moveToActivity +import com.hyden.util.ItemClickListener +import org.koin.androidx.viewmodel.ext.android.viewModel + +class MySharedBookFragment : BaseFragment(R.layout.fragment_my_shared) { + + private val viewModel by viewModel() + private val itemClickListener by lazy { + object : ItemClickListener { + override fun onItemClick(item: T) { + when (item) { + is BookItem -> { + Intent(context, SavedDetailActivity::class.java).run { + putExtra(getString(R.string.book_info), item) + moveToActivity(this) + } + } + } + } + } + } + private val adapter by lazy { + BaseItemsApdater( + R.layout.item_book_image, + BR.book, + itemClickListener + ) + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return super.onCreateView(inflater, container, savedInstanceState) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding.apply { + vm = this@MySharedBookFragment.viewModel + adapter = this@MySharedBookFragment.adapter + } + viewModel.loadBook() + } + + override fun initBind() { + } + + companion object { + fun newInstance() = MySharedBookFragment().apply { + arguments = Bundle().apply { + + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/myshared/MySharedBookViewMiodel.kt b/app/src/main/java/com/hyden/booklibrary/view/myshared/MySharedBookViewMiodel.kt new file mode 100644 index 0000000..0814c9b --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/myshared/MySharedBookViewMiodel.kt @@ -0,0 +1,34 @@ +package com.hyden.booklibrary.view.myshared + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.data.local.db.convertToBookItems +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.data.repository.source.BookDataSource +import com.hyden.util.LogUtil.LogE + +class MySharedBookViewMiodel( + private val bookDataSource: BookDataSource +): BaseViewModel() { + + private val _sharedItems = MutableLiveData>() + val sharedItem : LiveData> get() = _sharedItems + + fun loadBook() { + compositeDisposable.add( + bookDataSource.getSharedBook() + .subscribe( + { + _sharedItems.value = it?.convertToBookItems() + }, + { + LogE(it.toString()) + } + ) + ) + } + override fun onCleared() { + super.onCleared() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/note/NoteActivity.kt b/app/src/main/java/com/hyden/booklibrary/view/note/NoteActivity.kt new file mode 100644 index 0000000..d27a18f --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/note/NoteActivity.kt @@ -0,0 +1,64 @@ +package com.hyden.booklibrary.view.note + +import android.content.Intent +import android.os.Bundle +import android.widget.Toast +import com.hyden.base.BaseActivity +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.databinding.ActivityBookNoteBinding +import com.hyden.booklibrary.util.ConstUtil.Companion.BOOK_NOTE_REQUEST_CODE +import com.hyden.booklibrary.view.detail.mysaved.SavedDetailActivity +import com.hyden.ext.showKeyboard +import org.koin.androidx.viewmodel.ext.android.viewModel + +class NoteActivity : BaseActivity(R.layout.activity_book_note) { + + private val noteViewModel by viewModel() + private val item by lazy { intent?.getParcelableExtra(getString(R.string.book_info)) } +// private val firestore by lazy { +// FirebaseFirestore.getInstance() +// } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } + + override fun onPause() { + super.onPause() + } + + override fun finish() { + saveNote() + super.finish() + } + + override fun initBind() { + binding.apply { + ibBack.setOnClickListener { finish() } + ibDone.setOnClickListener { + saveNote() + Toast.makeText(this@NoteActivity, "저장하였습니다", Toast.LENGTH_SHORT).show() + finish() + } + tvTitle.text = item?.title!!.split(" - ")[0] + edtNoteContent.apply { + setText(item?.bookNote) + showKeyboard(this) + } + } + } + + private fun saveNote() { +// item?.bookNote = binding.edtNoteContent.text.toString() +// bookRecordViewModel.save(item) +// item?.let { firestore.collection("book").document(it.isbn13).set(it) } + item?.run { + bookNote = binding.edtNoteContent.text.toString() + noteViewModel.updateBook(this) +// noteViewModel.remoteUpdateBook(this) +// firestore.collection(DATABASENAME).document(this.isbn13).set(this) + } + setResult(BOOK_NOTE_REQUEST_CODE, Intent(this@NoteActivity, SavedDetailActivity::class.java).putExtra("data",item)) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/note/NoteViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/note/NoteViewModel.kt new file mode 100644 index 0000000..5a88b9d --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/note/NoteViewModel.kt @@ -0,0 +1,35 @@ +package com.hyden.booklibrary.view.note + +import androidx.databinding.ObservableField +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.data.remote.network.response.convertToBookEntity +import com.hyden.booklibrary.data.repository.source.BookDataSource +import com.hyden.booklibrary.data.repository.source.FirebaseDataSource +import com.hyden.util.LogUtil.LogE + +class NoteViewModel( + private val bookDataSource: BookDataSource, + private val firebaseDataSource: FirebaseDataSource +) : BaseViewModel() { + + var bookNote = ObservableField() + + fun updateBook(bookItem: BookItem) { + compositeDisposable.add( + bookDataSource.updateBook(bookEntity = bookItem.convertToBookEntity()) + .subscribe({}, { LogE("$it") }) + ) + firebaseDataSource.updateBook(bookItem.convertToBookEntity()) + } + + + fun getBook( + isbn13: String + ) { + compositeDisposable.add( + bookDataSource.getBook(isbn13) + .subscribe({ bookNote.set(it?.bookNote) }, { LogE("$it") }) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileActivity.kt b/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileActivity.kt new file mode 100644 index 0000000..b07dcab --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileActivity.kt @@ -0,0 +1,171 @@ +package com.hyden.booklibrary.view.profile + +import android.Manifest +import android.content.Intent +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.net.Uri +import android.os.Bundle +import android.provider.MediaStore +import androidx.lifecycle.Observer +import com.hyden.base.BaseActivity +import com.hyden.booklibrary.R +import com.hyden.booklibrary.databinding.ActivityProfileBinding +import com.hyden.ext.* +import com.hyden.util.ImageTransformType +import com.hyden.util.LogUtil.LogE +import com.theartofdev.edmodo.cropper.CropImage +import com.theartofdev.edmodo.cropper.CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE +import com.theartofdev.edmodo.cropper.CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE +import com.theartofdev.edmodo.cropper.CropImageView +import org.koin.android.ext.android.inject +import org.koin.androidx.viewmodel.ext.android.viewModel + + +class ProfileActivity : BaseActivity(R.layout.activity_profile) { + + private val profileViewModel by viewModel() + private val REQUEST_GALLERY_CODE = 2000 + private val REQUEST_CAMERA_CODE = 2001 + + private val profileChoiceDialog = ProfileImageDialog( + // 사진 선택 + gallery = { + Intent(Intent.ACTION_PICK).run { + type = MediaStore.Images.Media.CONTENT_TYPE + moveToActivityForResult(this, REQUEST_GALLERY_CODE) + } + }, + // 카메라 + camera = { + permissonsCheck(arrayOf(Manifest.permission.CAMERA)) { + Intent(MediaStore.ACTION_IMAGE_CAPTURE).run { + moveToActivityForResult(this, REQUEST_CAMERA_CODE) + } + } + } + ) + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding.ivProfile.loadUrl(profileViewModel.userProfile.value, ImageTransformType.CIRCLE) + profileViewModel.currentProfile(Uri.parse("android.resource://com.hyden.booklibrary/${R.drawable.background_circle}")) + initObserving() + } + + override fun initBind() { + binding.apply { + vm = profileViewModel + ivBack.setOnClickListener { finish() } + } + LogE("${supportFragmentManager.backStackEntryCount}") + supportFragmentManager.addOnBackStackChangedListener { + LogE("${supportFragmentManager.backStackEntryCount}") + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + profileChoiceDialog.dismiss() + when (requestCode) { + REQUEST_GALLERY_CODE -> { startImageCropView(data) } + REQUEST_CAMERA_CODE -> { startImageCropView(data) } + CROP_IMAGE_ACTIVITY_REQUEST_CODE -> { + val cropResult = CropImage.getActivityResult(data) + if (resultCode == RESULT_OK) { + cropResult?.uri?.let { + profileViewModel.setProfile(it) + var bitmap : Bitmap? = null + contentResolver.openInputStream(it)?.run { + bitmap = BitmapFactory.decodeStream(this) + close() + } + binding.ivProfile.loadBitmap(bitmap) + } + } else if (resultCode == CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE){ + LogE("${cropResult?.error}") + } + } + } + } + + /** + * 이미지 크롭 뷰 시작 + */ + private fun startImageCropView(data : Intent?) { + data?.data?.let { + CropImage.activity(it) + .setActivityTitle("이미지 편집") + .setCropMenuCropButtonTitle("완료") + .setCropShape(CropImageView.CropShape.OVAL) // 원형 크롭 + .setAutoZoomEnabled(false) // 크로필될때 줌 설정 끄기 + .setAllowFlipping(false) // 좌우반전 옵션 + .setFixAspectRatio(true) // 비율 고정 + .setAllowRotation(true) // 회전 허용 + .start(this@ProfileActivity) + } + } + + private fun initObserving() { + profileViewModel.apply { + /** + * 프로필 이미지 변경 + */ + eventProfile.observe(this@ProfileActivity, Observer { + // TODO: 2020-03-08 이미지 갤러리로 부터 사진 불러오기 로직 구현 + profileChoiceDialog.show(supportFragmentManager, "") + }) + + /** + * 프로필 닉네임 변경 + */ + eventNickName.observe(this@ProfileActivity, Observer { + ProfileNickNameTransparentDialog(binding.tvNickname.text.toString()) { nickName -> + profileViewModel.setNickname(nickName) + }.show(supportFragmentManager, "") + }) + + /** + * 프로필 변경 완료 이벤트 + */ + eventComplete.observe(this@ProfileActivity, Observer { + when (it) { + ProfileUpdateType.STARTING -> { + isTimeAutomatic { + showSimpleDialog(message = getString(R.string.check_update_profile)) { + // 이미지를 firebase storage에 저장한다. + profileViewModel.showLoading() + profileViewModel.saveStroageProfile() + } + } + } + ProfileUpdateType.FAILURE -> { + showToast(getString(R.string.check_update_profile_failure)) + } + ProfileUpdateType.CANCEL -> { + showToast(getString(R.string.check_update_profile_cancel)) + } + ProfileUpdateType.SUCCESS -> { + profileViewModel.hideLoading() + showToast(getString(R.string.check_update_profile_success)) + finish() + } + } + + }) + } + } + +// fun getPath(uri: Uri): String { +// var thePath: String? = "no-path-found" +// val filePathColumn = arrayOf(MediaStore.Images.Media.DATA) +// val cursor: Cursor = contentResolver.query(uri, filePathColumn, null, null, null)!! +// if (cursor.moveToFirst()) { +// val columnIndex: Int = cursor.getColumnIndex(filePathColumn[0]) +// thePath = cursor.getString(columnIndex) +// } +// LogW("${MediaStore.Images.Media.EXTERNAL_CONTENT_URI} / ${MediaStore.Images.Media._ID}") +// cursor.close() +// return thePath!! +// } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileImageDialog.kt b/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileImageDialog.kt new file mode 100644 index 0000000..7dc11d5 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileImageDialog.kt @@ -0,0 +1,80 @@ +package com.hyden.booklibrary.view.profile + +import android.content.DialogInterface +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.util.Log +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.hyden.base.BaseDialogFragment +import com.hyden.booklibrary.R +import com.hyden.booklibrary.databinding.DialogProfileImageBinding +import com.hyden.util.LogUtil.LogE + +class ProfileImageDialog( + private val gallery : () -> Unit, + private val camera : () -> Unit +) : BaseDialogFragment(R.layout.dialog_profile_image) { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return super.onCreateView(inflater, container, savedInstanceState) + } + + override fun onResume() { + super.onResume() + dialog?.window?.run { + setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + setGravity(Gravity.CENTER) + } + } + + + override fun onDestroyView() { + LogE("onDestroyView : ${fragmentManager} / ${activity?.supportFragmentManager?.backStackEntryCount} / ${activity?.supportFragmentManager?.fragments?.size}") + super.onDestroyView() + checkFragment() + } + + override fun onDestroy() { + LogE("onDestroy : ${fragmentManager} / ${activity?.supportFragmentManager?.backStackEntryCount} / ${activity?.supportFragmentManager?.fragments?.size}") + super.onDestroy() + checkFragment() + } + + override fun onDismiss(dialog: DialogInterface) { + LogE("onDismiss : ${fragmentManager} / ${activity?.supportFragmentManager?.backStackEntryCount} / ${activity?.supportFragmentManager?.fragments?.size}") + super.onDismiss(dialog) + checkFragment() + } + + fun checkFragment() { + activity?.supportFragmentManager?.let { + it.findFragmentByTag(this::class.java.simpleName)?.let { + LogE("있음") + } ?: kotlin.run { LogE("없음") } + } + + } + + override fun initBind() { + binding.apply { + ibGallery.setOnClickListener { + gallery.invoke() + } + ibCamera.setOnClickListener { + camera.invoke() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileNickNameTransparentDialog.kt b/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileNickNameTransparentDialog.kt new file mode 100644 index 0000000..a6f25ff --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileNickNameTransparentDialog.kt @@ -0,0 +1,76 @@ +package com.hyden.booklibrary.view.profile + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import com.hyden.base.BaseDialogFragment +import com.hyden.booklibrary.R +import com.hyden.booklibrary.databinding.DialogProfileModifyBinding +import com.hyden.ext.showKeyboard +import com.hyden.ext.showToast +import com.hyden.ext.validationNickname +import org.koin.androidx.viewmodel.ext.android.viewModel + + +class ProfileNickNameTransparentDialog( + private val currentNickName : String, + private val callbackNickName : (String) -> Unit +) : BaseDialogFragment(R.layout.dialog_profile_modify) { + + private val profileViewModel by viewModel() + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + return super.onCreateDialog(savedInstanceState) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } + + override fun onResume() { + super.onResume() + dialog?.window?.run { + setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + setGravity(Gravity.CENTER) + } + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return super.onCreateView(inflater, container, savedInstanceState) + } + + override fun initBind() { + binding.apply { + vm = profileViewModel + context?.showKeyboard(edtNickname) + + edtNickname.setText(currentNickName) + ibClear.setOnClickListener { + edtNickname.setText("") + context?.showKeyboard(edtNickname) + } + ivBack.setOnClickListener { + dismiss() + } + tvComplete.setOnClickListener { + if(edtNickname.text.toString().validationNickname()) { + callbackNickName.invoke(edtNickname.text.toString()) + dismiss() + } else { + context?.showToast(getString(R.string.check_validation_nickname)) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileUpdateType.kt b/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileUpdateType.kt new file mode 100644 index 0000000..bf44d33 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileUpdateType.kt @@ -0,0 +1,9 @@ +package com.hyden.booklibrary.view.profile + +enum class ProfileUpdateType { + SUCCESS, + FAILURE, + CANCEL, + STARTING + +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileViewModel.kt new file mode 100644 index 0000000..d9fe469 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/profile/ProfileViewModel.kt @@ -0,0 +1,136 @@ +package com.hyden.booklibrary.view.profile + +import android.net.Uri +import android.provider.MediaStore +import androidx.databinding.ObservableField +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.loader.content.CursorLoader +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.data.model.User +import com.hyden.booklibrary.data.repository.source.FirebaseDataSource +import com.hyden.booklibrary.util.SingleLiveEvent +import com.hyden.util.LogUtil.LogE +import com.hyden.util.Result +import java.io.InputStream +import java.util.* + +class ProfileViewModel(private val firebaseDataSource: FirebaseDataSource) : BaseViewModel() { + + private val _eventProfile = SingleLiveEvent() + val eventProfile : LiveData get() = _eventProfile + + private val _eventNickName = SingleLiveEvent() + val eventNickName : LiveData get() = _eventNickName + + private val _eventComplete = SingleLiveEvent() + val eventComplete : LiveData get() = _eventComplete + + private val _userNickName = MutableLiveData() + val userNickName : LiveData get() = _userNickName + + private val _userEmail = MutableLiveData() + val userEmail : LiveData get() = _userEmail + + private val _userName = MutableLiveData() + val userName : LiveData get() = _userName + + private val _userProfile = MutableLiveData() + val userProfile : LiveData get() = _userProfile + + private val _userProfileStream = MutableLiveData() + val userProfileStream : LiveData get() = _userProfileStream + + private val _currentUserProfileStream = MutableLiveData() + val currentUserProfileStream : LiveData get() = _currentUserProfileStream + + private var isProfileChangeState = ObservableField() + private var isNicknameChangeState = ObservableField() + + init { + _userProfile.value = firebaseDataSource.getLoginProfile() + _userNickName.value = firebaseDataSource.getLoginNickname() + _userEmail.value = firebaseDataSource.getLoginEmail() + _userName.value = firebaseDataSource.getLoginName() + isProfileChangeState.set(false) + isNicknameChangeState.set(false) + } + + // 프로필 이미지 변경 + fun clickProfile() { + // TODO: 2020-03-08 프로필 이미지 변경 로직 구현 + _eventProfile.call() + } + + // 닉네임 변경 + fun clickNickName() { + _eventNickName.call() + } + + fun currentProfile(profile: Uri?) { + _currentUserProfileStream.value = profile + _userProfileStream.value = profile + } + fun setProfile(profile : Uri?) { + _userProfileStream.value = profile + isProfileChangeState.set(true) +// _userProfile.value = profile + } + + fun setNickname(nickName: String?) { + _userNickName.value = nickName + isNicknameChangeState.set(true) + } + + + + // 완료 버튼 클릭 이벤트 + fun changedComplete() { + if(isProfileChangeState.get()!! || isNicknameChangeState.get()!!) { + _eventComplete.call(ProfileUpdateType.STARTING) + + } else { + _eventComplete.call(ProfileUpdateType.CANCEL) + } + } + + /** + * 파이어베이스 스토리지에 변경한 이미지를 저장하고 다운로드 url을 가져온다. + */ + fun saveStroageProfile() { + if(isProfileChangeState.get()!!) { + _userProfileStream.value?.let { + firebaseDataSource.uploadProfile(it) { result, url -> + when(result) { + Result.SUCCESS -> { + _userProfile.value = url + updateUserProfile() + } + Result.FAILURE -> { + LogE(url) + _eventComplete.call(ProfileUpdateType.FAILURE) + } + } + } + } + } else { + updateUserProfile() + } + + } + + /** + * 파이어베이스 유저정보를 업데이트 한다. + */ + fun updateUserProfile() { + firebaseDataSource.updateProfile(User( + firebaseDataSource.getLoginEmail(), + firebaseDataSource.getLoginName(), + _userNickName.value ?: "", + _userProfile.value ?: "", + Date()) + ) { + _eventComplete.call(ProfileUpdateType.SUCCESS) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/search/SearchFragment.kt b/app/src/main/java/com/hyden/booklibrary/view/search/SearchFragment.kt new file mode 100644 index 0000000..35f1469 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/search/SearchFragment.kt @@ -0,0 +1,196 @@ +package com.hyden.booklibrary.view.search + +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import android.view.View +import android.widget.AdapterView +import android.widget.TextView +import androidx.core.widget.addTextChangedListener +import androidx.databinding.library.baseAdapters.BR +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.RecyclerView +import com.example.hyojin.util.EndlessRecyclerViewScrollListener +import com.hyden.base.BaseFragment +import com.hyden.base.BaseItemsApdater +import com.hyden.booklibrary.R +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.databinding.FragmentSearchBinding +import com.hyden.booklibrary.util.QueryType +import com.hyden.booklibrary.view.detail.UnSavedDetailActivity +import com.hyden.ext.moveToActivity +import com.hyden.ext.showKeyboard +import com.hyden.util.ConstValueUtil.Companion.ITEM_DECORATION +import com.hyden.util.ItemClickListener +import com.hyden.util.RecyclerItemDecoration +import org.koin.androidx.viewmodel.ext.android.viewModel + +class SearchFragment : BaseFragment(R.layout.fragment_search) { + + private lateinit var searchQuery: String + private val delayTime: Long = 500L + private val searchViewModel by viewModel() + + private val endlessListener by lazy { + object : EndlessRecyclerViewScrollListener(binding.rvBook.layoutManager) { + override fun onLoadMore(page: Int, totalItemsCount: Int, view: RecyclerView) { + showProgress() + searchViewModel.searchMore( + page = page + 1, + query = binding.includeAppbar.edtSearchInput.text.toString(), + queryType = getQueryType() + ) + } + } + } + private val itemClickListener by lazy { + object : ItemClickListener { + override fun onItemClick(item: T) { + when (item) { + is BookItem -> { + Intent(activity, UnSavedDetailActivity::class.java).apply { + putExtra(getString(R.string.book_info), item) + moveToActivity(this) + } + } + } + } + } + } + + private val runnable by lazy { + Runnable { + searchViewModel.searchRefresh( + query = searchQuery, + queryType = getQueryType() + ) + } + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + // 통신 결과에 대해 observing 한다. + + searchViewModel.apply { + searchFinishing.observe( + this@SearchFragment, + Observer { + binding.apply { + includeAppbar.apply { if (it) hideProgress() } + } + } + ) + } + } + + + override fun initBind() { + binding.apply { + vm = searchViewModel + // 리사이클러 뷰 + rvBook.apply { + adapter = BaseItemsApdater(R.layout.item_book_image,BR.book,itemClickListener) + addOnScrollListener(endlessListener) + addItemDecoration(RecyclerItemDecoration(ITEM_DECORATION)) + } + // 검색 바 + includeAppbar.apply { + // 검색창 + edtSearchInput.apply { + addTextChangedListener { + handler.removeCallbacks(runnable) + searchQuery = it.toString() + handler.postDelayed(runnable, delayTime) + // 검색될때 프로그레스바 표시 + showProgress() + } + } + // 클리어 버튼 + ibClear.apply { + setOnClickListener { + edtSearchInput.setText("") + showProgress() + context.showKeyboard(edtSearchInput) + searchViewModel.searchRefresh() + } + } + // 검색 타입 스피너 + spChoice.apply { + onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onNothingSelected(p0: AdapterView<*>?) {} + override fun onItemSelected( + p0: AdapterView<*>?, + view: View?, + p2: Int, + p3: Long + ) { + (view as TextView).setTextColor(Color.WHITE) + edtSearchInput.hint = ("${selectedItem} 검색") + showProgress() + searchViewModel.searchRefresh( + query = binding.includeAppbar.edtSearchInput.text.toString(), + queryType = getQueryType() + ) + } + } + } + } + // 리사이클러뷰 새로고침 + srvlRefresh.apply { + setOnRefreshListener { + showProgress() + endlessListener.resetState() + searchViewModel.searchRefresh( + query = binding.includeAppbar.edtSearchInput.text.toString(), + queryType = getQueryType() + ) + searchViewModel.isRefreshing.observe( + this@SearchFragment, + Observer { + when (it) { + true -> { + } + false -> isRefreshing = false + } + } + ) + } + } + } + } + + private fun hideProgress() { + binding.includeAppbar.apply { + if (edtSearchInput.text.toString().isNullOrEmpty()) + ibClear.visibility = View.INVISIBLE + else + ibClear.visibility = View.VISIBLE + progressbar.visibility = View.INVISIBLE + } + } + + private fun showProgress() { + binding.includeAppbar.apply { + ibClear.visibility = View.INVISIBLE + progressbar.visibility = View.VISIBLE + } + } + + private fun getQueryType(): String = + when (binding.includeAppbar.spChoice.selectedItemPosition) { + 0 -> QueryType.KEYWORD.toString() + 1 -> QueryType.TITLE.toString() + 2 -> QueryType.AUTHOR.toString() + 3 -> QueryType.PUBLISHER.toString() + else -> "keyword" + } + + + companion object { + fun newInstance() = SearchFragment().apply { + arguments = Bundle().apply { + + } + } + } +} diff --git a/app/src/main/java/com/hyden/booklibrary/view/search/SearchViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/search/SearchViewModel.kt new file mode 100644 index 0000000..8a753ef --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/search/SearchViewModel.kt @@ -0,0 +1,85 @@ +package com.hyden.booklibrary.view.search + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.data.remote.network.response.BookItem +import com.hyden.booklibrary.data.repository.AladinRepository +import com.hyden.util.LogUtil.LogE +import com.hyden.util.NetworkStatus +import io.reactivex.rxkotlin.addTo + +class SearchViewModel( + private val aladinRepository: AladinRepository +) : BaseViewModel() { + + private val _searchBookInfo = MutableLiveData>() + val searchBookInfo: LiveData> get() = _searchBookInfo + + private val _isRefreshing = MutableLiveData() + val isRefreshing: LiveData get() = _isRefreshing + + private val _searchFinishing = MutableLiveData() + val searchFinishing: LiveData get() = _searchFinishing + + private val searchTargetVal = "book" + private val queryTypeVal = "keyword" + + fun searchMore( + page: Int = 1, + query: String = "", + queryType: String = queryTypeVal + ) { + _isRefreshing.value = false + if(loadingStatus.value != NetworkStatus.LOADING) { + search(page, query, queryType) + } + } + + fun searchRefresh( + page: Int = 1, + query: String = "", + queryType: String = queryTypeVal, + searchTarget: String = searchTargetVal + ) { + _isRefreshing.value = true + search(page, query, queryType, searchTarget) + } + + fun search( + page: Int = 1, + query: String = "", + queryType: String = queryTypeVal, + searchTarget: String = searchTargetVal + ) { + _searchFinishing.value = false + compositeDisposable.clear() + aladinRepository.search( + page = page, + query = query, + querytype = queryType, + searchtarget = searchTarget + ).doOnSubscribe { loadingStatus.value = NetworkStatus.LOADING } + .doOnSuccess { loadingStatus.value = NetworkStatus.SUCCESS } + .doOnError { loadingStatus.value = NetworkStatus.FAILURE } + .subscribe( + { data -> + if (_isRefreshing.value ?: true) { + _searchBookInfo.value = data.item ?: emptyList() + _isRefreshing.value = false + } else { + // 더불러오기 + _searchBookInfo.value = _searchBookInfo.value?.let { + it.toMutableList().apply { + addAll(data.item ?: emptyList()) + } + } + } + _searchFinishing.value = true + }, + { + LogE("$it") + } + ).addTo(compositeDisposable) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/setting/SettingFragment.kt b/app/src/main/java/com/hyden/booklibrary/view/setting/SettingFragment.kt new file mode 100644 index 0000000..105ebb9 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/setting/SettingFragment.kt @@ -0,0 +1,194 @@ +package com.hyden.booklibrary.view.setting + +import android.app.Activity.RESULT_OK +import android.content.Intent +import android.os.Build +import android.os.Bundle +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import android.widget.Toast +import androidx.preference.ListPreference +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat +import com.google.android.material.snackbar.Snackbar +import com.google.firebase.auth.FirebaseAuth +import com.hyden.booklibrary.R +import com.hyden.booklibrary.util.* +import com.hyden.booklibrary.view.OpenSourceActivity +import com.hyden.booklibrary.view.profile.ProfileActivity +import com.hyden.booklibrary.view.login.LoginActivity +import com.hyden.booklibrary.view.myshared.MySharedBookFragment +import com.hyden.ext.* +import com.hyden.util.LogUtil.LogW +import kotlinx.android.synthetic.main.activity_main.* +import org.koin.androidx.viewmodel.ext.android.viewModel + +class SettingFragment : PreferenceFragmentCompat() { + + private val settingViewModel by viewModel() + private val CONTACT_DIRECTELY = 22 + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return super.onCreateView(inflater, container, savedInstanceState) + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + when(requestCode) { + CONTACT_DIRECTELY -> { + if(resultCode == RESULT_OK){ + Toast.makeText(context, "문의메일 보내기에 성공하였습니다.", Toast.LENGTH_SHORT).show() + } + } + } + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.setting, rootKey) + changeMyFeedBook() + changeStartView() + changeLoginState() + changeProfile() + sendToMail() + sendToEvaluation() + infoAppVersion() + infoOpenSourceLicense() + preferenceManager.context.setTheme(R.style.PreferenceTheme) + } + + // 문의 하기 + private fun sendToMail() { + findPreference(getString(R.string.setting_key_question))?.apply { + setOnPreferenceClickListener { + Intent(Intent.ACTION_SEND).apply { + type = "text/plain" + setPackage("com.google.android.gm") + putExtra(Intent.EXTRA_EMAIL, resources.getStringArray(R.array.developer_email)) + putExtra(Intent.EXTRA_SUBJECT, getString(R.string.email_subject)) + putExtra( + Intent.EXTRA_TEXT, + "모델명 : ${Build.MODEL}\n" + + "OS버전 : ${Build.VERSION.RELEASE}\n" + + "SDK버전 : ${Build.VERSION.SDK_INT}\n" + + "앱버전 : ${context.versionName()}\n " + + "-----------------------------------------\n\n" + ) + moveToActivityForResult(this,CONTACT_DIRECTELY) + } + true + } + } + } + + // 내가 공유한 책 정보 + private fun changeMyFeedBook() { + findPreference(getString(R.string.setting_key_my_feed_book))?.apply { + setOnPreferenceClickListener { + replaceFragmentStack(MySharedBookFragment.newInstance(),activity?.fl_container?.id!!) + true + } + } + } + + // 시작 화면 변경 + private fun changeStartView() { + findPreference(getString(R.string.setting_key_start_view))?.apply { + summary = getPreferenceStartView() + + setOnPreferenceClickListener { + true + } + setOnPreferenceChangeListener { preference, newValue -> + preference.summary = newValue.toString() + setPreferenceStartView(newValue.toString()) + true + } + } + } + + // 프로필 설정 변경 + private fun changeProfile() { + findPreference(getString(R.string.setting_key_profile))?.apply { + setOnPreferenceClickListener { + moveToActivity(Intent(activity, + ProfileActivity::class.java)) + true + } + } + + } + + // 로그아웃 + private fun changeLoginState() { + findPreference(getString(R.string.setting_key_logout))?.apply { + setOnPreferenceClickListener { + + FirebaseAuth.getInstance().apply { + context.showSimpleDialog(message = "로그아웃 하시겠습니까?") { + settingViewModel.signOut() + moveToActivity(Intent(activity,LoginActivity::class.java)) + activity?.finish() + } + } + true + } + } + } + + private fun sendToEvaluation() { + + } + + private fun infoAppVersion() { + var backKeyPressedTime = 0L + var count = 0 + findPreference(getString(R.string.setting_key_version))?.apply { + summary = "앱 버전 : ${context.versionName()}" + this.context.setTheme(R.style.PreferenceTheme) + setOnPreferenceClickListener { + LogW("$count") + if(System.currentTimeMillis() > backKeyPressedTime + 2000) { + backKeyPressedTime = System.currentTimeMillis() + count = 0 + } else if (System.currentTimeMillis() <= backKeyPressedTime + 2000) { + count++ + if(count == 7) { + val snackbar = Snackbar.make(view!!,getString(R.string.version_multiple_click),Snackbar.LENGTH_SHORT) + val view = snackbar.view + val textView = view.findViewById(com.google.android.material.R.id.snackbar_text) + textView.textAlignment = (View.TEXT_ALIGNMENT_CENTER) + snackbar.show() + count = 0 + backKeyPressedTime = 0L + } + } + true + } + } + } + + // 오픈소스 라이브러리 정보 + private fun infoOpenSourceLicense() { + findPreference(getString(R.string.setting_key_opensource))?.apply { + setOnPreferenceClickListener { + moveToActivity(Intent(activity,OpenSourceActivity::class.java)) + true + } + } + } + + companion object { + fun newInstance() = SettingFragment().apply { + arguments = Bundle().apply { + + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/setting/SettingViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/setting/SettingViewModel.kt new file mode 100644 index 0000000..a88a384 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/setting/SettingViewModel.kt @@ -0,0 +1,13 @@ +package com.hyden.booklibrary.view.setting + +import com.hyden.base.BaseViewModel +import com.hyden.booklibrary.data.repository.FirebaseRepository +import com.hyden.booklibrary.data.repository.source.FirebaseDataSource + +class SettingViewModel( + private val firebaseDataSource: FirebaseDataSource +) : BaseViewModel() { + + fun signOut() = firebaseDataSource.googleSignOut() + +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/splash/SplashActivity.kt b/app/src/main/java/com/hyden/booklibrary/view/splash/SplashActivity.kt new file mode 100644 index 0000000..1be8450 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/splash/SplashActivity.kt @@ -0,0 +1,153 @@ +package com.hyden.booklibrary.view.splash + +import android.content.ActivityNotFoundException +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.os.Handler +import androidx.core.app.ActivityOptionsCompat +import androidx.core.util.Pair +import com.google.firebase.remoteconfig.FirebaseRemoteConfig +import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings +import com.hyden.base.BaseActivity +import com.hyden.booklibrary.R +import com.hyden.booklibrary.databinding.ActivitySplashBinding +import com.hyden.booklibrary.util.AdsUtil +import com.hyden.booklibrary.util.RemoteConfig +import com.hyden.booklibrary.view.login.LoginActivity +import com.hyden.ext.moveToActivityForResult +import com.hyden.ext.showSimpleDialog +import com.hyden.ext.versionName +import com.hyden.util.LogUtil.LogW +import com.hyden.util.RxBus +import com.hyden.util.RxBusEvent +import org.json.JSONObject +import org.koin.androidx.viewmodel.ext.android.viewModel + +class SplashActivity : BaseActivity(R.layout.activity_splash) { + + companion object { + val LOGIN_START = 99 + } + + private val firebaseRemoteConfig by lazy { FirebaseRemoteConfig.getInstance() } + private val firebaseRemoteSetting by lazy { + FirebaseRemoteConfigSettings.Builder().setMinimumFetchIntervalInSeconds(60L).build() + } + private val splashViewModel by viewModel() + private val handler = Handler() + private val ads = AdsUtil(this@SplashActivity) + private val finishActivity = RxBus.listen(RxBusEvent.SplashFinish::class.java) + .subscribe { this@SplashActivity.finish() } + + private val runnableHome = Runnable { + Intent(this, LoginActivity::class.java).run { + val options = + ActivityOptionsCompat.makeSceneTransitionAnimation( + this@SplashActivity, + Pair.create(binding.tvTitleLogo, getString(R.string.title_logo_transition_name)) + ) + moveToActivityForResult(this,LOGIN_START,options.toBundle()) + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + when (requestCode) { + LOGIN_START -> { + LogW("splash finish") + this@SplashActivity.finish() + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + firebaseRemoteConfig.setConfigSettingsAsync(firebaseRemoteSetting) + firebaseRemoteConfig.setDefaultsAsync(R.xml.default_remote_config) + firebaseRemoteConfig.fetchAndActivate() + .addOnCompleteListener { + if (it.isSuccessful) { + remoteConfig() + } + } + splashViewModel.showLoading() + density() + } + + override fun onResume() { + super.onResume() + } + + override fun onPause() { + super.onPause() + handler.removeCallbacks(runnableHome) + } + + override fun onDestroy() { + super.onDestroy() + finishActivity.dispose() + splashViewModel.hideLoading() + } + + private fun remoteConfig() { + val jsonObject = JSONObject(firebaseRemoteConfig.getString("remote")) + when (jsonObject.getString("type")) { + RemoteConfig.NOTICE.name -> { + appNotice(jsonObject) + } + RemoteConfig.UPDATE.name -> { + appUpdate(jsonObject) + } + else -> { + goToLogin() + } + } + + } + + /** + * 업데이트 + */ + private fun appUpdate(jsonObject: JSONObject) { + if (versionName() != jsonObject.getString("version")) { + showSimpleDialog(title = "필수 업데이트", message = "필수 업데이트가 있습니다.") { + Intent(Intent.ACTION_VIEW).apply { + try { + data = Uri.parse("market://details?id=$packageName") + startActivity(this) + } catch (e: ActivityNotFoundException) { + data = + Uri.parse(("https://play.google.com/store/apps/details?id=$packageName")) + } + } + finish() + } + } else { + goToLogin() + } + } + + /** + * 공지 + */ + private fun appNotice(jsonObject: JSONObject) { + showSimpleDialog(title = "공지사항", message = "${jsonObject.getString("message")}") { + goToLogin() + } + } + + /** + * 메인 이동 + */ + private fun goToLogin() { + ads.loadAds { handler.postDelayed(runnableHome, 500) } + } + + override fun initBind() { + binding.apply { + vm = splashViewModel + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/hyden/booklibrary/view/splash/SplashViewModel.kt b/app/src/main/java/com/hyden/booklibrary/view/splash/SplashViewModel.kt new file mode 100644 index 0000000..cd571d9 --- /dev/null +++ b/app/src/main/java/com/hyden/booklibrary/view/splash/SplashViewModel.kt @@ -0,0 +1,10 @@ +package com.hyden.booklibrary.view.splash + +import com.hyden.base.BaseViewModel + +class SplashViewModel : BaseViewModel() { + + override fun onCleared() { + super.onCleared() + } +} \ No newline at end of file diff --git a/app/src/main/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml new file mode 100644 index 0000000..161e20c --- /dev/null +++ b/app/src/main/res/anim/fade_in.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/anim/fade_out.xml b/app/src/main/res/anim/fade_out.xml new file mode 100644 index 0000000..cafc9d0 --- /dev/null +++ b/app/src/main/res/anim/fade_out.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/drawable-anydpi/ic_action_clear.xml b/app/src/main/res/drawable-anydpi/ic_action_clear.xml new file mode 100644 index 0000000..443f138 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_action_clear.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_back.xml b/app/src/main/res/drawable-anydpi/ic_back.xml new file mode 100644 index 0000000..ee35fab --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_back.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_camera.xml b/app/src/main/res/drawable-anydpi/ic_camera.xml new file mode 100644 index 0000000..e2418fa --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_camera.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable-anydpi/ic_cancel.xml b/app/src/main/res/drawable-anydpi/ic_cancel.xml new file mode 100644 index 0000000..3723f9f --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_cancel.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_chat_off.xml b/app/src/main/res/drawable-anydpi/ic_chat_off.xml new file mode 100644 index 0000000..127a93b --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_chat_off.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_chat_on.xml b/app/src/main/res/drawable-anydpi/ic_chat_on.xml new file mode 100644 index 0000000..0716237 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_chat_on.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_delete.xml b/app/src/main/res/drawable-anydpi/ic_delete.xml new file mode 100644 index 0000000..24678bc --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_delete.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_done.xml b/app/src/main/res/drawable-anydpi/ic_done.xml new file mode 100644 index 0000000..28bf053 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_done.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_download.xml b/app/src/main/res/drawable-anydpi/ic_download.xml new file mode 100644 index 0000000..4c5fde2 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_download.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_edit.xml b/app/src/main/res/drawable-anydpi/ic_edit.xml new file mode 100644 index 0000000..f13ba71 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_edit.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_gallery.xml b/app/src/main/res/drawable-anydpi/ic_gallery.xml new file mode 100644 index 0000000..ed72286 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_gallery.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_info.xml b/app/src/main/res/drawable-anydpi/ic_info.xml new file mode 100644 index 0000000..806c2f7 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_info.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_like_off.xml b/app/src/main/res/drawable-anydpi/ic_like_off.xml new file mode 100644 index 0000000..b16751b --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_like_off.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_like_on.xml b/app/src/main/res/drawable-anydpi/ic_like_on.xml new file mode 100644 index 0000000..710aad9 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_like_on.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_login.xml b/app/src/main/res/drawable-anydpi/ic_login.xml new file mode 100644 index 0000000..e23c474 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_login.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_modify.xml b/app/src/main/res/drawable-anydpi/ic_modify.xml new file mode 100644 index 0000000..f13ba71 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_modify.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_profile_modify.xml b/app/src/main/res/drawable-anydpi/ic_profile_modify.xml new file mode 100644 index 0000000..ccea27f --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_profile_modify.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable-anydpi/ic_savaed.xml b/app/src/main/res/drawable-anydpi/ic_savaed.xml new file mode 100644 index 0000000..1c7b4c0 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_savaed.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_shared_off.xml b/app/src/main/res/drawable-anydpi/ic_shared_off.xml new file mode 100644 index 0000000..e318834 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_shared_off.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_shared_on.xml b/app/src/main/res/drawable-anydpi/ic_shared_on.xml new file mode 100644 index 0000000..6409603 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_shared_on.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/menu_bookself.png b/app/src/main/res/drawable-anydpi/menu_bookself.png new file mode 100644 index 0000000..3670893 Binary files /dev/null and b/app/src/main/res/drawable-anydpi/menu_bookself.png differ diff --git a/app/src/main/res/drawable-anydpi/menu_feed.xml b/app/src/main/res/drawable-anydpi/menu_feed.xml new file mode 100644 index 0000000..f02b271 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/menu_feed.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/menu_home.xml b/app/src/main/res/drawable-anydpi/menu_home.xml new file mode 100644 index 0000000..968b36d --- /dev/null +++ b/app/src/main/res/drawable-anydpi/menu_home.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/menu_library.xml b/app/src/main/res/drawable-anydpi/menu_library.xml new file mode 100644 index 0000000..530f464 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/menu_library.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/menu_search.xml b/app/src/main/res/drawable-anydpi/menu_search.xml new file mode 100644 index 0000000..afb0429 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/menu_search.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/menu_setting.xml b/app/src/main/res/drawable-anydpi/menu_setting.xml new file mode 100644 index 0000000..01b2fba --- /dev/null +++ b/app/src/main/res/drawable-anydpi/menu_setting.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-hdpi/ic_action_clear.png b/app/src/main/res/drawable-hdpi/ic_action_clear.png new file mode 100644 index 0000000..c661d15 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_action_clear.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_back.png b/app/src/main/res/drawable-hdpi/ic_back.png new file mode 100644 index 0000000..1c0e6f1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_camera.png b/app/src/main/res/drawable-hdpi/ic_camera.png new file mode 100644 index 0000000..ddcd019 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_camera.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_cancel.png b/app/src/main/res/drawable-hdpi/ic_cancel.png new file mode 100644 index 0000000..7964c7b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_cancel.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_chat_off.png b/app/src/main/res/drawable-hdpi/ic_chat_off.png new file mode 100644 index 0000000..6bc0860 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_chat_off.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_chat_on.png b/app/src/main/res/drawable-hdpi/ic_chat_on.png new file mode 100644 index 0000000..c419983 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_chat_on.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_delete.png b/app/src/main/res/drawable-hdpi/ic_delete.png new file mode 100644 index 0000000..e366b65 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_delete.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_done.png b/app/src/main/res/drawable-hdpi/ic_done.png new file mode 100644 index 0000000..f1f3972 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_done.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_download.png b/app/src/main/res/drawable-hdpi/ic_download.png new file mode 100644 index 0000000..6f4cf5d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_download.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_edit.png b/app/src/main/res/drawable-hdpi/ic_edit.png new file mode 100644 index 0000000..a3226fb Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_edit.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_gallery.png b/app/src/main/res/drawable-hdpi/ic_gallery.png new file mode 100644 index 0000000..2ea2b58 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_gallery.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_info.png b/app/src/main/res/drawable-hdpi/ic_info.png new file mode 100644 index 0000000..a436e38 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_info.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_like_off.png b/app/src/main/res/drawable-hdpi/ic_like_off.png new file mode 100644 index 0000000..75d9c46 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_like_off.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_like_on.png b/app/src/main/res/drawable-hdpi/ic_like_on.png new file mode 100644 index 0000000..1f5cc18 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_like_on.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_login.png b/app/src/main/res/drawable-hdpi/ic_login.png new file mode 100644 index 0000000..b22681e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_login.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_modify.png b/app/src/main/res/drawable-hdpi/ic_modify.png new file mode 100644 index 0000000..a3226fb Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_modify.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_profile_modify.png b/app/src/main/res/drawable-hdpi/ic_profile_modify.png new file mode 100644 index 0000000..084df8f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_profile_modify.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_savaed.png b/app/src/main/res/drawable-hdpi/ic_savaed.png new file mode 100644 index 0000000..a1c3568 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_savaed.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_shared_off.png b/app/src/main/res/drawable-hdpi/ic_shared_off.png new file mode 100644 index 0000000..cc1caf8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_shared_off.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_shared_on.png b/app/src/main/res/drawable-hdpi/ic_shared_on.png new file mode 100644 index 0000000..10683cf Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_shared_on.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_bookself.png b/app/src/main/res/drawable-hdpi/menu_bookself.png new file mode 100644 index 0000000..29cfd17 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_bookself.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_feed.png b/app/src/main/res/drawable-hdpi/menu_feed.png new file mode 100644 index 0000000..167d398 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_feed.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_home.png b/app/src/main/res/drawable-hdpi/menu_home.png new file mode 100644 index 0000000..0a0cb4d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_home.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_library.png b/app/src/main/res/drawable-hdpi/menu_library.png new file mode 100644 index 0000000..702b318 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_library.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_search.png b/app/src/main/res/drawable-hdpi/menu_search.png new file mode 100644 index 0000000..f9c0afe Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_search.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_setting.png b/app/src/main/res/drawable-hdpi/menu_setting.png new file mode 100644 index 0000000..a99894b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_setting.png differ diff --git a/app/src/main/res/drawable-hdpi/round_menu_book_black_24.png b/app/src/main/res/drawable-hdpi/round_menu_book_black_24.png new file mode 100644 index 0000000..b1a9978 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_menu_book_black_24.png differ diff --git a/app/src/main/res/drawable-hdpi/sample.png b/app/src/main/res/drawable-hdpi/sample.png new file mode 100644 index 0000000..ce116ea Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sample.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_action_clear.png b/app/src/main/res/drawable-mdpi/ic_action_clear.png new file mode 100644 index 0000000..6060ea2 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_action_clear.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_back.png b/app/src/main/res/drawable-mdpi/ic_back.png new file mode 100644 index 0000000..5120138 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_camera.png b/app/src/main/res/drawable-mdpi/ic_camera.png new file mode 100644 index 0000000..8a64b05 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_camera.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_cancel.png b/app/src/main/res/drawable-mdpi/ic_cancel.png new file mode 100644 index 0000000..5117795 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_cancel.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_chat_off.png b/app/src/main/res/drawable-mdpi/ic_chat_off.png new file mode 100644 index 0000000..eb4d3a4 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_chat_off.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_chat_on.png b/app/src/main/res/drawable-mdpi/ic_chat_on.png new file mode 100644 index 0000000..eed2fb4 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_chat_on.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_delete.png b/app/src/main/res/drawable-mdpi/ic_delete.png new file mode 100644 index 0000000..554abc4 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_delete.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_done.png b/app/src/main/res/drawable-mdpi/ic_done.png new file mode 100644 index 0000000..4d1d9bd Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_done.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_download.png b/app/src/main/res/drawable-mdpi/ic_download.png new file mode 100644 index 0000000..0396883 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_download.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_edit.png b/app/src/main/res/drawable-mdpi/ic_edit.png new file mode 100644 index 0000000..f0c1faf Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_edit.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_gallery.png b/app/src/main/res/drawable-mdpi/ic_gallery.png new file mode 100644 index 0000000..4dc2f5b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_gallery.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_info.png b/app/src/main/res/drawable-mdpi/ic_info.png new file mode 100644 index 0000000..9c48286 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_info.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_like_off.png b/app/src/main/res/drawable-mdpi/ic_like_off.png new file mode 100644 index 0000000..65259a5 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_like_off.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_like_on.png b/app/src/main/res/drawable-mdpi/ic_like_on.png new file mode 100644 index 0000000..5500278 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_like_on.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_login.png b/app/src/main/res/drawable-mdpi/ic_login.png new file mode 100644 index 0000000..3028a58 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_login.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_modify.png b/app/src/main/res/drawable-mdpi/ic_modify.png new file mode 100644 index 0000000..f0c1faf Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_modify.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_profile_modify.png b/app/src/main/res/drawable-mdpi/ic_profile_modify.png new file mode 100644 index 0000000..d2a2e0e Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_profile_modify.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_savaed.png b/app/src/main/res/drawable-mdpi/ic_savaed.png new file mode 100644 index 0000000..475e6c8 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_savaed.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_shared_off.png b/app/src/main/res/drawable-mdpi/ic_shared_off.png new file mode 100644 index 0000000..7a0c76c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_shared_off.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_shared_on.png b/app/src/main/res/drawable-mdpi/ic_shared_on.png new file mode 100644 index 0000000..ad4ccb0 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_shared_on.png differ diff --git a/app/src/main/res/drawable-mdpi/menu_bookself.png b/app/src/main/res/drawable-mdpi/menu_bookself.png new file mode 100644 index 0000000..3670893 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/menu_bookself.png differ diff --git a/app/src/main/res/drawable-mdpi/menu_feed.png b/app/src/main/res/drawable-mdpi/menu_feed.png new file mode 100644 index 0000000..6d4ffa9 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/menu_feed.png differ diff --git a/app/src/main/res/drawable-mdpi/menu_home.png b/app/src/main/res/drawable-mdpi/menu_home.png new file mode 100644 index 0000000..99a0938 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/menu_home.png differ diff --git a/app/src/main/res/drawable-mdpi/menu_library.png b/app/src/main/res/drawable-mdpi/menu_library.png new file mode 100644 index 0000000..de05c1e Binary files /dev/null and b/app/src/main/res/drawable-mdpi/menu_library.png differ diff --git a/app/src/main/res/drawable-mdpi/menu_search.png b/app/src/main/res/drawable-mdpi/menu_search.png new file mode 100644 index 0000000..6fd5a13 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/menu_search.png differ diff --git a/app/src/main/res/drawable-mdpi/menu_setting.png b/app/src/main/res/drawable-mdpi/menu_setting.png new file mode 100644 index 0000000..69c67dd Binary files /dev/null and b/app/src/main/res/drawable-mdpi/menu_setting.png differ diff --git a/app/src/main/res/drawable-mdpi/round_menu_book_black_24.png b/app/src/main/res/drawable-mdpi/round_menu_book_black_24.png new file mode 100644 index 0000000..72e3c5a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_menu_book_black_24.png differ diff --git a/app/src/main/res/drawable-mdpi/sample.png b/app/src/main/res/drawable-mdpi/sample.png new file mode 100644 index 0000000..c2b5789 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/sample.png differ diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..1f6bb29 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable-xhdpi/ic_action_clear.png b/app/src/main/res/drawable-xhdpi/ic_action_clear.png new file mode 100644 index 0000000..91f6c7a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_action_clear.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_back.png b/app/src/main/res/drawable-xhdpi/ic_back.png new file mode 100644 index 0000000..8b7ee56 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_camera.png b/app/src/main/res/drawable-xhdpi/ic_camera.png new file mode 100644 index 0000000..cb1bb54 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_camera.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_cancel.png b/app/src/main/res/drawable-xhdpi/ic_cancel.png new file mode 100644 index 0000000..72852f0 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_cancel.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_chat_off.png b/app/src/main/res/drawable-xhdpi/ic_chat_off.png new file mode 100644 index 0000000..cff1fb9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_chat_off.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_chat_on.png b/app/src/main/res/drawable-xhdpi/ic_chat_on.png new file mode 100644 index 0000000..b4aed53 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_chat_on.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_delete.png b/app/src/main/res/drawable-xhdpi/ic_delete.png new file mode 100644 index 0000000..5eede98 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_delete.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_done.png b/app/src/main/res/drawable-xhdpi/ic_done.png new file mode 100644 index 0000000..f193eba Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_done.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_download.png b/app/src/main/res/drawable-xhdpi/ic_download.png new file mode 100644 index 0000000..e311de8 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_download.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_edit.png b/app/src/main/res/drawable-xhdpi/ic_edit.png new file mode 100644 index 0000000..b508285 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_edit.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_gallery.png b/app/src/main/res/drawable-xhdpi/ic_gallery.png new file mode 100644 index 0000000..c366e8c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_gallery.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_info.png b/app/src/main/res/drawable-xhdpi/ic_info.png new file mode 100644 index 0000000..2e8a7cb Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_info.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_like_off.png b/app/src/main/res/drawable-xhdpi/ic_like_off.png new file mode 100644 index 0000000..7eabc85 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_like_off.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_like_on.png b/app/src/main/res/drawable-xhdpi/ic_like_on.png new file mode 100644 index 0000000..cca08e4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_like_on.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_login.png b/app/src/main/res/drawable-xhdpi/ic_login.png new file mode 100644 index 0000000..e052bef Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_login.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_modify.png b/app/src/main/res/drawable-xhdpi/ic_modify.png new file mode 100644 index 0000000..b508285 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_modify.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_profile_modify.png b/app/src/main/res/drawable-xhdpi/ic_profile_modify.png new file mode 100644 index 0000000..96169f6 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_profile_modify.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_savaed.png b/app/src/main/res/drawable-xhdpi/ic_savaed.png new file mode 100644 index 0000000..989cd2d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_savaed.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_shared_off.png b/app/src/main/res/drawable-xhdpi/ic_shared_off.png new file mode 100644 index 0000000..6fe2d1a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_shared_off.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_shared_on.png b/app/src/main/res/drawable-xhdpi/ic_shared_on.png new file mode 100644 index 0000000..e525e4f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_shared_on.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_bookself.png b/app/src/main/res/drawable-xhdpi/menu_bookself.png new file mode 100644 index 0000000..e141227 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_bookself.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_feed.png b/app/src/main/res/drawable-xhdpi/menu_feed.png new file mode 100644 index 0000000..c46cbf3 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_feed.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_home.png b/app/src/main/res/drawable-xhdpi/menu_home.png new file mode 100644 index 0000000..6e4067b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_home.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_library.png b/app/src/main/res/drawable-xhdpi/menu_library.png new file mode 100644 index 0000000..981273d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_library.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_search.png b/app/src/main/res/drawable-xhdpi/menu_search.png new file mode 100644 index 0000000..aad212c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_search.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_setting.png b/app/src/main/res/drawable-xhdpi/menu_setting.png new file mode 100644 index 0000000..3d88a9e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_setting.png differ diff --git a/app/src/main/res/drawable-xhdpi/ripple_effect.xml b/app/src/main/res/drawable-xhdpi/ripple_effect.xml new file mode 100644 index 0000000..b383356 --- /dev/null +++ b/app/src/main/res/drawable-xhdpi/ripple_effect.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable-xhdpi/round_menu_book_black_24.png b/app/src/main/res/drawable-xhdpi/round_menu_book_black_24.png new file mode 100644 index 0000000..38b4ad0 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_menu_book_black_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/sample.png b/app/src/main/res/drawable-xhdpi/sample.png new file mode 100644 index 0000000..27afa19 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sample.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_clear.png b/app/src/main/res/drawable-xxhdpi/ic_action_clear.png new file mode 100644 index 0000000..1e41c55 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_action_clear.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_back.png b/app/src/main/res/drawable-xxhdpi/ic_back.png new file mode 100644 index 0000000..10b5b40 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_back.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_camera.png b/app/src/main/res/drawable-xxhdpi/ic_camera.png new file mode 100644 index 0000000..5a8ebd4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_camera.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_cancel.png b/app/src/main/res/drawable-xxhdpi/ic_cancel.png new file mode 100644 index 0000000..0b5a1c1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_cancel.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_chat_off.png b/app/src/main/res/drawable-xxhdpi/ic_chat_off.png new file mode 100644 index 0000000..72da902 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_chat_off.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_chat_on.png b/app/src/main/res/drawable-xxhdpi/ic_chat_on.png new file mode 100644 index 0000000..f3c97d0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_chat_on.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_delete.png b/app/src/main/res/drawable-xxhdpi/ic_delete.png new file mode 100644 index 0000000..df20cf5 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_delete.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_done.png b/app/src/main/res/drawable-xxhdpi/ic_done.png new file mode 100644 index 0000000..612c0a3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_done.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_download.png b/app/src/main/res/drawable-xxhdpi/ic_download.png new file mode 100644 index 0000000..f0df052 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_download.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_edit.png b/app/src/main/res/drawable-xxhdpi/ic_edit.png new file mode 100644 index 0000000..40ef06e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_edit.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_gallery.png b/app/src/main/res/drawable-xxhdpi/ic_gallery.png new file mode 100644 index 0000000..a21c98d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gallery.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_info.png b/app/src/main/res/drawable-xxhdpi/ic_info.png new file mode 100644 index 0000000..2385acc Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_info.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_like_off.png b/app/src/main/res/drawable-xxhdpi/ic_like_off.png new file mode 100644 index 0000000..07b166d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_like_off.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_like_on.png b/app/src/main/res/drawable-xxhdpi/ic_like_on.png new file mode 100644 index 0000000..6fa26d4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_like_on.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_login.png b/app/src/main/res/drawable-xxhdpi/ic_login.png new file mode 100644 index 0000000..04bd7ba Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_login.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_modify.png b/app/src/main/res/drawable-xxhdpi/ic_modify.png new file mode 100644 index 0000000..40ef06e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_modify.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_profile_modify.png b/app/src/main/res/drawable-xxhdpi/ic_profile_modify.png new file mode 100644 index 0000000..d8e9c5b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_profile_modify.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_savaed.png b/app/src/main/res/drawable-xxhdpi/ic_savaed.png new file mode 100644 index 0000000..ae99ce0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_savaed.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_shared_off.png b/app/src/main/res/drawable-xxhdpi/ic_shared_off.png new file mode 100644 index 0000000..1b2ebe6 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_shared_off.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_shared_on.png b/app/src/main/res/drawable-xxhdpi/ic_shared_on.png new file mode 100644 index 0000000..2a3cd5d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_shared_on.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu_bookself.png b/app/src/main/res/drawable-xxhdpi/menu_bookself.png new file mode 100644 index 0000000..69a2f24 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu_bookself.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu_feed.png b/app/src/main/res/drawable-xxhdpi/menu_feed.png new file mode 100644 index 0000000..b807761 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu_feed.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu_home.png b/app/src/main/res/drawable-xxhdpi/menu_home.png new file mode 100644 index 0000000..990064f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu_home.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu_library.png b/app/src/main/res/drawable-xxhdpi/menu_library.png new file mode 100644 index 0000000..25708bb Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu_library.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu_search.png b/app/src/main/res/drawable-xxhdpi/menu_search.png new file mode 100644 index 0000000..64b54ca Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu_search.png differ diff --git a/app/src/main/res/drawable-xxhdpi/menu_setting.png b/app/src/main/res/drawable-xxhdpi/menu_setting.png new file mode 100644 index 0000000..80e49bb Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/menu_setting.png differ diff --git a/app/src/main/res/drawable-xxhdpi/round_menu_book_black_24.png b/app/src/main/res/drawable-xxhdpi/round_menu_book_black_24.png new file mode 100644 index 0000000..cfc999c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_menu_book_black_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/sample.png b/app/src/main/res/drawable-xxhdpi/sample.png new file mode 100644 index 0000000..2fd7d05 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sample.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/sample.png b/app/src/main/res/drawable-xxxhdpi/sample.png new file mode 100644 index 0000000..ad93cf2 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sample.png differ diff --git a/app/src/main/res/drawable/background_circle.xml b/app/src/main/res/drawable/background_circle.xml new file mode 100644 index 0000000..9a56210 --- /dev/null +++ b/app/src/main/res/drawable/background_circle.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/background_round_top.xml b/app/src/main/res/drawable/background_round_top.xml new file mode 100644 index 0000000..3e30493 --- /dev/null +++ b/app/src/main/res/drawable/background_round_top.xml @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/background_transparent.xml b/app/src/main/res/drawable/background_transparent.xml new file mode 100644 index 0000000..fd90a9d --- /dev/null +++ b/app/src/main/res/drawable/background_transparent.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/book.png b/app/src/main/res/drawable/book.png new file mode 100644 index 0000000..98f58de Binary files /dev/null and b/app/src/main/res/drawable/book.png differ diff --git a/app/src/main/res/drawable/book_sample_cover.jpg b/app/src/main/res/drawable/book_sample_cover.jpg new file mode 100644 index 0000000..44692d2 Binary files /dev/null and b/app/src/main/res/drawable/book_sample_cover.jpg differ diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..2408e30 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/logo_google.xml b/app/src/main/res/drawable/logo_google.xml new file mode 100644 index 0000000..d971f34 --- /dev/null +++ b/app/src/main/res/drawable/logo_google.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/round_menu_book_24.xml b/app/src/main/res/drawable/round_menu_book_24.xml new file mode 100644 index 0000000..41affa7 --- /dev/null +++ b/app/src/main/res/drawable/round_menu_book_24.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/src/main/res/drawable/sample.jpg b/app/src/main/res/drawable/sample.jpg new file mode 100644 index 0000000..ba425c1 Binary files /dev/null and b/app/src/main/res/drawable/sample.jpg differ diff --git a/app/src/main/res/drawable/selector_bottom_menu.xml b/app/src/main/res/drawable/selector_bottom_menu.xml new file mode 100644 index 0000000..0a32036 --- /dev/null +++ b/app/src/main/res/drawable/selector_bottom_menu.xml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_chat.xml b/app/src/main/res/drawable/selector_chat.xml new file mode 100644 index 0000000..f52fc50 --- /dev/null +++ b/app/src/main/res/drawable/selector_chat.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_like.xml b/app/src/main/res/drawable/selector_like.xml new file mode 100644 index 0000000..6d5c1a5 --- /dev/null +++ b/app/src/main/res/drawable/selector_like.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_shared.xml b/app/src/main/res/drawable/selector_shared.xml new file mode 100644 index 0000000..fbd0d9c --- /dev/null +++ b/app/src/main/res/drawable/selector_shared.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_book_note.xml b/app/src/main/res/layout/activity_book_note.xml new file mode 100644 index 0000000..911b4f9 --- /dev/null +++ b/app/src/main/res/layout/activity_book_note.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_comment.xml b/app/src/main/res/layout/activity_comment.xml new file mode 100644 index 0000000..6459e61 --- /dev/null +++ b/app/src/main/res/layout/activity_comment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_detail_saved.xml b/app/src/main/res/layout/activity_detail_saved.xml new file mode 100644 index 0000000..e26ddf4 --- /dev/null +++ b/app/src/main/res/layout/activity_detail_saved.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_detail_unsaved.xml b/app/src/main/res/layout/activity_detail_unsaved.xml new file mode 100644 index 0000000..710858e --- /dev/null +++ b/app/src/main/res/layout/activity_detail_unsaved.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_feed_detail.xml b/app/src/main/res/layout/activity_feed_detail.xml new file mode 100644 index 0000000..f234ad6 --- /dev/null +++ b/app/src/main/res/layout/activity_feed_detail.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_image_crop.xml b/app/src/main/res/layout/activity_image_crop.xml new file mode 100644 index 0000000..881f8df --- /dev/null +++ b/app/src/main/res/layout/activity_image_crop.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..c43d8b8 --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..4c15b2d --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_opensource_license.xml b/app/src/main/res/layout/activity_opensource_license.xml new file mode 100644 index 0000000..5ca4f99 --- /dev/null +++ b/app/src/main/res/layout/activity_opensource_license.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml new file mode 100644 index 0000000..88d1be0 --- /dev/null +++ b/app/src/main/res/layout/activity_profile.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..8088e84 --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ad_banner.xml b/app/src/main/res/layout/ad_banner.xml new file mode 100644 index 0000000..d5b42dc --- /dev/null +++ b/app/src/main/res/layout/ad_banner.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_book_info.xml b/app/src/main/res/layout/dialog_book_info.xml new file mode 100644 index 0000000..afede0c --- /dev/null +++ b/app/src/main/res/layout/dialog_book_info.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_profile_image.xml b/app/src/main/res/layout/dialog_profile_image.xml new file mode 100644 index 0000000..3ca72ce --- /dev/null +++ b/app/src/main/res/layout/dialog_profile_image.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_profile_modify.xml b/app/src/main/res/layout/dialog_profile_modify.xml new file mode 100644 index 0000000..1c83ae3 --- /dev/null +++ b/app/src/main/res/layout/dialog_profile_modify.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_feed.xml b/app/src/main/res/layout/fragment_feed.xml new file mode 100644 index 0000000..c20c59d --- /dev/null +++ b/app/src/main/res/layout/fragment_feed.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..a1e4b83 --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml new file mode 100644 index 0000000..9e51c6f --- /dev/null +++ b/app/src/main/res/layout/fragment_library.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_my_shared.xml b/app/src/main/res/layout/fragment_my_shared.xml new file mode 100644 index 0000000..0558b20 --- /dev/null +++ b/app/src/main/res/layout/fragment_my_shared.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml new file mode 100644 index 0000000..f0f7f03 --- /dev/null +++ b/app/src/main/res/layout/fragment_search.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_setting.xml b/app/src/main/res/layout/fragment_setting.xml new file mode 100644 index 0000000..225d985 --- /dev/null +++ b/app/src/main/res/layout/fragment_setting.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_setting2.xml b/app/src/main/res/layout/fragment_setting2.xml new file mode 100644 index 0000000..2d96d72 --- /dev/null +++ b/app/src/main/res/layout/fragment_setting2.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_additinal.xml b/app/src/main/res/layout/include_additinal.xml new file mode 100644 index 0000000..8d0f11f --- /dev/null +++ b/app/src/main/res/layout/include_additinal.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_appbar_main.xml b/app/src/main/res/layout/include_appbar_main.xml new file mode 100644 index 0000000..fb38df0 --- /dev/null +++ b/app/src/main/res/layout/include_appbar_main.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_toolbar.xml b/app/src/main/res/layout/include_toolbar.xml new file mode 100644 index 0000000..77969c1 --- /dev/null +++ b/app/src/main/res/layout/include_toolbar.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_book_image.xml b/app/src/main/res/layout/item_book_image.xml new file mode 100644 index 0000000..d20c3c6 --- /dev/null +++ b/app/src/main/res/layout/item_book_image.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/recycler_item_feed.xml b/app/src/main/res/layout/recycler_item_feed.xml new file mode 100644 index 0000000..bbf3223 --- /dev/null +++ b/app/src/main/res/layout/recycler_item_feed.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/recycler_item_home.xml b/app/src/main/res/layout/recycler_item_home.xml new file mode 100644 index 0000000..9fdcecb --- /dev/null +++ b/app/src/main/res/layout/recycler_item_home.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/recycler_item_opensource_license.xml b/app/src/main/res/layout/recycler_item_opensource_license.xml new file mode 100644 index 0000000..52e28f4 --- /dev/null +++ b/app/src/main/res/layout/recycler_item_opensource_license.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/toolbar_title.xml b/app/src/main/res/layout/toolbar_title.xml new file mode 100644 index 0000000..61ac745 --- /dev/null +++ b/app/src/main/res/layout/toolbar_title.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_loading.xml b/app/src/main/res/layout/view_loading.xml new file mode 100644 index 0000000..f0f10bc --- /dev/null +++ b/app/src/main/res/layout/view_loading.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_preference.xml b/app/src/main/res/layout/view_preference.xml new file mode 100644 index 0000000..ff43576 --- /dev/null +++ b/app/src/main/res/layout/view_preference.xml @@ -0,0 +1,19 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_menu.xml b/app/src/main/res/menu/bottom_menu.xml new file mode 100644 index 0000000..6ee9dd1 --- /dev/null +++ b/app/src/main/res/menu/bottom_menu.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/app_icon.xml b/app/src/main/res/mipmap-anydpi-v26/app_icon.xml new file mode 100644 index 0000000..7699432 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/app_icon.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/app_icon_round.xml b/app/src/main/res/mipmap-anydpi-v26/app_icon_round.xml new file mode 100644 index 0000000..7699432 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/app_icon_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/app_icon.png b/app/src/main/res/mipmap-hdpi/app_icon.png new file mode 100644 index 0000000..9d6de1d Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/app_icon.png differ diff --git a/app/src/main/res/mipmap-hdpi/app_icon_foreground.png b/app/src/main/res/mipmap-hdpi/app_icon_foreground.png new file mode 100644 index 0000000..f8ceeda Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/app_icon_foreground.png differ diff --git a/app/src/main/res/mipmap-hdpi/app_icon_round.png b/app/src/main/res/mipmap-hdpi/app_icon_round.png new file mode 100644 index 0000000..b732e2e Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/app_icon_round.png differ diff --git a/app/src/main/res/mipmap-mdpi/app_icon.png b/app/src/main/res/mipmap-mdpi/app_icon.png new file mode 100644 index 0000000..938ff28 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/app_icon.png differ diff --git a/app/src/main/res/mipmap-mdpi/app_icon_foreground.png b/app/src/main/res/mipmap-mdpi/app_icon_foreground.png new file mode 100644 index 0000000..d127fa6 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/app_icon_foreground.png differ diff --git a/app/src/main/res/mipmap-mdpi/app_icon_round.png b/app/src/main/res/mipmap-mdpi/app_icon_round.png new file mode 100644 index 0000000..6181ef9 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/app_icon_round.png differ diff --git a/app/src/main/res/mipmap-xhdpi/app_icon.png b/app/src/main/res/mipmap-xhdpi/app_icon.png new file mode 100644 index 0000000..7097be0 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/app_icon.png differ diff --git a/app/src/main/res/mipmap-xhdpi/app_icon_foreground.png b/app/src/main/res/mipmap-xhdpi/app_icon_foreground.png new file mode 100644 index 0000000..1787eab Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/app_icon_foreground.png differ diff --git a/app/src/main/res/mipmap-xhdpi/app_icon_round.png b/app/src/main/res/mipmap-xhdpi/app_icon_round.png new file mode 100644 index 0000000..90aa5ba Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/app_icon_round.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/app_icon.png b/app/src/main/res/mipmap-xxhdpi/app_icon.png new file mode 100644 index 0000000..b4670ed Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/app_icon.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/app_icon_foreground.png b/app/src/main/res/mipmap-xxhdpi/app_icon_foreground.png new file mode 100644 index 0000000..ee7c372 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/app_icon_foreground.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/app_icon_round.png b/app/src/main/res/mipmap-xxhdpi/app_icon_round.png new file mode 100644 index 0000000..f18f06f Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/app_icon_round.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/app_icon.png b/app/src/main/res/mipmap-xxxhdpi/app_icon.png new file mode 100644 index 0000000..4072cf4 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/app_icon.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/app_icon_foreground.png b/app/src/main/res/mipmap-xxxhdpi/app_icon_foreground.png new file mode 100644 index 0000000..9643360 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/app_icon_foreground.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/app_icon_round.png b/app/src/main/res/mipmap-xxxhdpi/app_icon_round.png new file mode 100644 index 0000000..df515fc Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/app_icon_round.png differ diff --git a/app/src/main/res/values/app_icon_background.xml b/app/src/main/res/values/app_icon_background.xml new file mode 100644 index 0000000..acda6c8 --- /dev/null +++ b/app/src/main/res/values/app_icon_background.xml @@ -0,0 +1,4 @@ + + + #424242 + \ No newline at end of file diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml new file mode 100644 index 0000000..b8830c9 --- /dev/null +++ b/app/src/main/res/values/array.xml @@ -0,0 +1,38 @@ + + + + 설정1 + 설정2 + 설정3 + 설정4 + 설정5 + 설정6 + + + + 블랙 + 화이트 + 블루 + 핑크 + 그레이 + + + + + 검색 + 감상노트 + 책꽂이 + + + + 제목+저자 + 제목 + 저자 + 출판사 + + + + helpservice0000@gmail.com + + + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 0000000..7f32126 --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..e3f69d1 --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,18 @@ + + + 10dp + 10dp + 5dp + 5dp + + + + 115dp + 180dp + + + + + 172.5dp + 270dp + \ No newline at end of file diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml new file mode 100644 index 0000000..a5f1a38 --- /dev/null +++ b/app/src/main/res/values/ids.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/interger.xml b/app/src/main/res/values/interger.xml new file mode 100644 index 0000000..098c9b0 --- /dev/null +++ b/app/src/main/res/values/interger.xml @@ -0,0 +1,5 @@ + + + 5 + 10 + \ No newline at end of file diff --git a/app/src/main/res/values/strings-key.xml b/app/src/main/res/values/strings-key.xml new file mode 100644 index 0000000..e16bf76 --- /dev/null +++ b/app/src/main/res/values/strings-key.xml @@ -0,0 +1,10 @@ + + + ca-app-pub-8639043459373611/3704251880 + ca-app-pub-8639043459373611/6614513921 + + feed + + title_logo + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..624946b --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,252 @@ + + + 시골책방 + + + jin33032@gmail.com + books + users + pref_book + + Email + Passward + + 이메일 + 이름 + 닉네임 + 프로필 + Forgot Passward + Login + + + [서재] 앱 문의사항 + + 검색 결과가 없습니다 🔍 + 개발중입니다📝\n조금만 기다려주세요😊 + book_detail_info + detail_call_type + mybook + OpenSource License + 프로필 설정 + 완료 + 좋아요 %,d개 + 댓글 %,d개 + 프로필을 바꾸시겠습니까?\n변경하는데 다소 시간이 소요될 수 있습니다. + 변경이 완료되었습니다. + 변경된 정보가 없습니다. + 정보가 변경되지 않았습니다.\n잠시후 다시 시도해주세요. + 사용할 수 없는 닉네임입니다. + 닉네임에는 공백/특수문자를 포함할 수 없습니다. + 책에 저장된 정보가 삭제됩니다.\n정말 삭제하시겠습니까? + 공유한 책이없습니다 + 독서 소통공간 + 저자 + ISBN13 + 출판사 + 가격 + 설명 + 블로그 추천 도서 + 베스트셀러 + 주목할만한 도서 + 신간 도서 + + + + 검색 + 감상노트 + 책꽂이 + 설정 + + + + 기본설정 + 도움말 + 이용약관 + 앱정보 + + category1 + category2 + category3 + + 설정 + 설정 + setting + + + + 시작화면 설정 + 시작화면을 변경합니다 + start_view + + + 공유한 책 정보 + 공유한 책 정보를 확인합니다. + my_feed_book + + + 테마설정 + 테마 색상을 변경합니다 + theme + + + 프로필 + 프로필사진, 닉네임을 변경합니다. + profile + + + 로그아웃 + 로그아웃 + logout + + + 앱 버전정보 + 버전 + version + ❤️이용해주셔서 감사합니다❤️ + + + 오픈소스 라이선스 + 오픈소스 소프트웨어에 대한 라이선스 정보 + opensource + + + 문의하기 + 개발자에게 버그나 궁금한점, 기능개선 및 추가 메일을 보냅니다 + sendmail + + + 평가하기 + 플레이스토어에 평점 및 리뷰 남겨주세요! + evaluation + + Retrofit + Copyright 2013 Square, Inc. +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 +\n\nhttp://www.apache.org/licenses/LICENSE-2.0 +\n\nUnless 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. + + RxJava + Copyright (c) 2016-present, RxJava Contributors. +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 +\n\nhttp://www.apache.org/licenses/LICENSE-2.0 +\n\nUnless 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. + + RxAndroid + Copyright 2015 The RxAndroid authors +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 +\n\nhttp://www.apache.org/licenses/LICENSE-2.0 +\n\nUnless 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. + + Glide + License for everything not in third_party and not otherwise marked: + +Copyright 2014 Google, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + \n\n1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + \n\n2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + +\n\nTHIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS`` AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE, INC. OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those of the +authors and should not be interpreted as representing official policies, either expressed +or implied, of Google, Inc. +\n\n--------------------------------------------------------------------------------------------- +\n\nLicense for third_party/disklrucache: + +Copyright 2012 Jake Wharton +Copyright 2011 The Android Open Source Project + +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 +\n\nhttp://www.apache.org/licenses/LICENSE-2.0 +\n\nUnless 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. +\n\n--------------------------------------------------------------------------------------------- +\n\nLicense for third_party/gif_decoder: + +Copyright (c) 2013 Xcellent Creations, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\n\n--------------------------------------------------------------------------------------------- +\n\nLicense for third_party/gif_encoder/AnimatedGifEncoder.java and +third_party/gif_encoder/LZWEncoder.java: + +No copyright asserted on the source code of this class. May be used for any +purpose, however, refer to the Unisys LZW patent for restrictions on use of +the associated LZWEncoder class. Please forward any corrections to +kweiner@fmsware.com. + +\n\n----------------------------------------------------------------------------- +\n\nLicense for third_party/gif_encoder/NeuQuant.java + +Copyright (c) 1994 Anthony Dekker + +NEUQUANT Neural-Net quantization algorithm by Anthony Dekker, 1994. See +"Kohonen neural networks for optimal colour quantization" in "Network: +Computation in Neural Systems" Vol. 5 (1994) pp 351-367. for a discussion of +the algorithm. + +Any party obtaining a copy of these files from the author, directly or +indirectly, is granted, free of charge, a full and unrestricted irrevocable, +world-wide, paid up, royalty-free, nonexclusive right and license to deal in +this software and documentation files (the "Software"), including without +limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons who +receive copies from any such party to do so, with the only requirement being +that this copyright notice remain intact. + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..02d44c5 --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/xml/default_remote_config.xml b/app/src/main/res/xml/default_remote_config.xml new file mode 100644 index 0000000..026a08b --- /dev/null +++ b/app/src/main/res/xml/default_remote_config.xml @@ -0,0 +1,7 @@ + + + + version + 0.0.0 + + \ No newline at end of file diff --git a/app/src/main/res/xml/setting.xml b/app/src/main/res/xml/setting.xml new file mode 100644 index 0000000..b35cb23 --- /dev/null +++ b/app/src/main/res/xml/setting.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/test/java/com/hyden/booklibrary/ExampleUnitTest.kt b/app/src/test/java/com/hyden/booklibrary/ExampleUnitTest.kt new file mode 100644 index 0000000..b4c4912 --- /dev/null +++ b/app/src/test/java/com/hyden/booklibrary/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.hyden.booklibrary + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..ab6a4f2 --- /dev/null +++ b/build.gradle @@ -0,0 +1,30 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext.kotlin_version = '1.3.61' + repositories { + google() + jcenter() + maven { url 'https://maven.fabric.io/public' } + } + dependencies { + classpath 'com.android.tools.build:gradle:4.0.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.google.gms:google-services:4.3.3' + classpath 'io.fabric.tools:gradle:1.31.2' // Crashlytics plugin + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + maven { url "https://maven.google.com" } + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..23339e0 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,21 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..01a78b1 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Jun 15 23:45:23 KST 2020 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..cccdd3d --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..e95643d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..299d9c4 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,4 @@ +include ':app', ':base' + +project(':base').projectDir = new File('/Users/hyojin/Github/BaseModule/base') +