diff --git a/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieDynamicProperties.kt b/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieDynamicProperties.kt
index 653311e..ef791a9 100644
--- a/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieDynamicProperties.kt
+++ b/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieDynamicProperties.kt
@@ -2,6 +2,7 @@
 
 import android.graphics.ColorFilter
 import android.graphics.PointF
+import android.graphics.Typeface
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.remember
@@ -95,6 +96,7 @@
     private val scaleProperties: List<LottieDynamicProperty<ScaleXY>>,
     private val colorFilterProperties: List<LottieDynamicProperty<ColorFilter>>,
     private val intArrayProperties: List<LottieDynamicProperty<IntArray>>,
+    private val typefaceProperties: List<LottieDynamicProperty<Typeface>>,
 ) {
     @Suppress("UNCHECKED_CAST")
     constructor(properties: List<LottieDynamicProperty<*>>) : this(
@@ -104,6 +106,7 @@
         properties.filter { it.property is ScaleXY } as List<LottieDynamicProperty<ScaleXY>>,
         properties.filter { it.property is ColorFilter } as List<LottieDynamicProperty<ColorFilter>>,
         properties.filter { it.property is IntArray } as List<LottieDynamicProperty<IntArray>>,
+        properties.filter { it.property is Typeface } as List<LottieDynamicProperty<Typeface>>,
     )
 
     internal fun addTo(drawable: LottieDrawable) {
@@ -125,6 +128,9 @@
         intArrayProperties.forEach { p ->
             drawable.addValueCallback(p.keyPath, p.property, p.callback.toValueCallback())
         }
+        typefaceProperties.forEach { p ->
+            drawable.addValueCallback(p.keyPath, p.property, p.callback.toValueCallback())
+        }
     }
 
     internal fun removeFrom(drawable: LottieDrawable) {
@@ -146,6 +152,9 @@
         intArrayProperties.forEach { p ->
             drawable.addValueCallback(p.keyPath, p.property, null as LottieValueCallback<IntArray>?)
         }
+        typefaceProperties.forEach { p ->
+            drawable.addValueCallback(p.keyPath, p.property, null as LottieValueCallback<Typeface>?)
+        }
     }
 }
 
diff --git a/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt b/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt
index b9c0d51..e3ae50b 100644
--- a/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt
+++ b/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt
@@ -2,6 +2,7 @@
 
 import android.content.Context
 import android.graphics.BitmapFactory
+import android.graphics.Typeface
 import android.util.Base64
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
@@ -13,6 +14,7 @@
 import com.airbnb.lottie.LottieCompositionFactory
 import com.airbnb.lottie.LottieImageAsset
 import com.airbnb.lottie.LottieTask
+import com.airbnb.lottie.model.Font
 import com.airbnb.lottie.utils.Logger
 import com.airbnb.lottie.utils.Utils
 import kotlinx.coroutines.Dispatchers
@@ -45,6 +47,18 @@
  * @param imageAssetsFolder A subfolder in `src/main/assets` that contains the exported images
  *                          that this composition uses. DO NOT rename any images from your design tool. The
  *                          filenames must match the values that are in your json file.
+ * @param fontAssetsFolder The default folder Lottie will look in to find font files. Fonts will be matched
+ *                         based on the family name specified in the Lottie json file.
+ *                         Defaults to "fonts/" so if "Helvetica" was in the Json file, Lottie will auto-match
+ *                         fonts located at "src/main/assets/fonts/Helvetica.ttf". Missing fonts will be skipped
+ *                         and should be set via fontRemapping or via dynamic properties.
+ * @param fontFileExtension The default file extension for font files specified in the fontAssetsFolder or fontRemapping.
+ *                          Defaults to ttf.
+ * @param fontRemapping Remaps family names as specified in the Lottie json file to font files stored in the fontAssetsFolder.
+ *                      This will automatically add the fontFileExtension so you should not include the font file extension
+ *                      in your remapping.
+ * @param cacheComposition Whether or not to cache the composition. If set to true, the next time an composition with this
+ *                         spec is fetched, it will return the existing one instead of parsing it again.
  * @param onRetry An optional callback that will be called if loading the animation fails.
  *                It is passed the failed count (the number of times it has failed) and the exception
  *                from the previous attempt to load the composition. [onRetry] is a suspending function
@@ -55,6 +69,9 @@
 fun rememberLottieComposition(
     spec: LottieCompositionSpec,
     imageAssetsFolder: String? = null,
+    fontAssetsFolder: String = "fonts/",
+    fontFileExtension: String = ".ttf",
+    fontRemapping: Map<String, String> = emptyMap(),
     cacheComposition: Boolean = true,
     onRetry: suspend (failCount: Int, previousException: Throwable) -> Boolean = { _, _ -> false },
 ): LottieCompositionResult {
@@ -69,6 +86,9 @@
                     context,
                     spec,
                     imageAssetsFolder.ensureTrailingSlash(),
+                    fontAssetsFolder.ensureTrailingSlash(),
+                    fontFileExtension.ensureLeadingPeriod(),
+                    fontRemapping,
                     cacheComposition,
                 )
                 result.complete(composition)
@@ -88,6 +108,9 @@
     context: Context,
     spec: LottieCompositionSpec,
     imageAssetsFolder: String?,
+    fontAssetsFolder: String?,
+    fontFileExtension: String,
+    fontRemapping: Map<String, String>,
     cacheComposition: Boolean,
 ): LottieComposition {
     val task = when (spec) {
@@ -111,7 +134,10 @@
                 FileInputStream(spec.fileName)
             }
             when {
-                spec.fileName.endsWith("zip") -> LottieCompositionFactory.fromZipStream(ZipInputStream(fis), spec.fileName.takeIf { cacheComposition })
+                spec.fileName.endsWith("zip") -> LottieCompositionFactory.fromZipStream(
+                    ZipInputStream(fis),
+                    spec.fileName.takeIf { cacheComposition },
+                )
                 else -> LottieCompositionFactory.fromJsonInputStream(fis, spec.fileName.takeIf { cacheComposition })
             }
         }
@@ -129,6 +155,7 @@
 
     val composition = task.await()
     loadImagesFromAssets(context, composition, imageAssetsFolder)
+    loadFontsFromAssets(context, composition, fontAssetsFolder, fontFileExtension, fontRemapping)
     return composition
 }
 
@@ -198,8 +225,63 @@
     }
 }
 
+private suspend fun loadFontsFromAssets(
+    context: Context,
+    composition: LottieComposition,
+    fontAssetsFolder: String?,
+    fontFileExtension: String,
+    fontRemapping: Map<String, String>,
+) {
+    if (composition.fonts.isEmpty()) return
+    withContext(Dispatchers.IO) {
+        for (font in composition.fonts.values) {
+            maybeLoadTypefaceFromAssets(context, font, fontAssetsFolder, fontFileExtension, fontRemapping[font.family])
+        }
+    }
+}
+
+private fun maybeLoadTypefaceFromAssets(
+    context: Context,
+    font: Font,
+    fontAssetsFolder: String?,
+    fontFileExtension: String,
+    remappedFontPath: String?,
+) {
+    val path = remappedFontPath ?: "$fontAssetsFolder${font.family}${fontFileExtension}"
+    val typefaceWithDefaultStyle = try {
+        Typeface.createFromAsset(context.assets, path)
+    } catch (e: Exception) {
+        Logger.error("Failed to find typeface in assets with path $path.", e)
+        return
+    }
+    try {
+        val typefaceWithStyle = typefaceForStyle(typefaceWithDefaultStyle, font.style)
+        font.typeface = typefaceWithStyle
+    } catch (e: Exception) {
+        Logger.error("Failed to create ${font.family} typeface with style=${font.style}!", e)
+    }
+}
+
+private fun typefaceForStyle(typeface: Typeface, style: String): Typeface? {
+    val containsItalic = style.contains("Italic")
+    val containsBold = style.contains("Bold")
+    val styleInt = when {
+        containsItalic && containsBold -> Typeface.BOLD_ITALIC
+        containsItalic -> Typeface.ITALIC
+        containsBold -> Typeface.BOLD
+        else -> Typeface.NORMAL
+    }
+    return if (typeface.style == styleInt) typeface else Typeface.create(typeface, styleInt)
+}
+
 private fun String?.ensureTrailingSlash(): String? = when {
-    this == null -> null
+    isNullOrBlank() -> null
     endsWith('/') -> this
     else -> "$this/"
+}
+
+private fun String.ensureLeadingPeriod(): String = when {
+    isBlank() -> this
+    startsWith(".") -> this
+    else -> ".$this"
 }
\ No newline at end of file
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieProperty.java b/lottie/src/main/java/com/airbnb/lottie/LottieProperty.java
index 98dea45..0686156 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieProperty.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieProperty.java
@@ -2,6 +2,7 @@
 
 import android.graphics.ColorFilter;
 import android.graphics.PointF;
+import android.graphics.Typeface;
 
 import com.airbnb.lottie.value.LottieValueCallback;
 import com.airbnb.lottie.value.ScaleXY;
@@ -164,4 +165,6 @@
   ColorFilter COLOR_FILTER = new ColorFilter();
 
   Integer[] GRADIENT_COLOR = new Integer[0];
+
+  Typeface TYPEFACE = Typeface.DEFAULT;
 }
diff --git a/lottie/src/main/java/com/airbnb/lottie/model/Font.java b/lottie/src/main/java/com/airbnb/lottie/model/Font.java
index 9c74ff0..5aa3d45 100644
--- a/lottie/src/main/java/com/airbnb/lottie/model/Font.java
+++ b/lottie/src/main/java/com/airbnb/lottie/model/Font.java
@@ -2,6 +2,9 @@
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
 
+import android.graphics.Typeface;
+
+import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 
 @RestrictTo(LIBRARY)
@@ -12,6 +15,9 @@
   private final String style;
   private final float ascent;
 
+  @Nullable
+  private Typeface typeface;
+
   public Font(String family, String name, String style, float ascent) {
     this.family = family;
     this.name = name;
@@ -34,4 +40,13 @@
   @SuppressWarnings("unused") float getAscent() {
     return ascent;
   }
+
+  @Nullable
+  public Typeface getTypeface() {
+    return typeface;
+  }
+
+  public void setTypeface(@Nullable Typeface typeface) {
+    this.typeface = typeface;
+  }
 }
diff --git a/lottie/src/main/java/com/airbnb/lottie/model/layer/TextLayer.java b/lottie/src/main/java/com/airbnb/lottie/model/layer/TextLayer.java
index d15c537..b0f3b2d 100644
--- a/lottie/src/main/java/com/airbnb/lottie/model/layer/TextLayer.java
+++ b/lottie/src/main/java/com/airbnb/lottie/model/layer/TextLayer.java
@@ -47,7 +47,7 @@
     setStyle(Style.STROKE);
   }};
   private final Map<FontCharacter, List<ContentGroup>> contentsForCharacter = new HashMap<>();
-  private final LongSparseArray<String> codePointCache = new LongSparseArray<String>();
+  private final LongSparseArray<String> codePointCache = new LongSparseArray<>();
   private final TextKeyframeAnimation textAnimation;
   private final LottieDrawable lottieDrawable;
   private final LottieComposition composition;
@@ -71,6 +71,8 @@
   private BaseKeyframeAnimation<Float, Float> textSizeAnimation;
   @Nullable
   private BaseKeyframeAnimation<Float, Float> textSizeCallbackAnimation;
+  @Nullable
+  private BaseKeyframeAnimation<Typeface, Typeface> typefaceCallbackAnimation;
 
   TextLayer(LottieDrawable lottieDrawable, Layer layerModel) {
     super(lottieDrawable, layerModel);
@@ -236,8 +238,7 @@
 
   private void drawTextWithFont(
       DocumentData documentData, Font font, Matrix parentMatrix, Canvas canvas) {
-    float parentScale = Utils.getScale(parentMatrix);
-    Typeface typeface = lottieDrawable.getTypeface(font.getFamily(), font.getStyle());
+    Typeface typeface = getTypeface(font);
     if (typeface == null) {
       return;
     }
@@ -298,6 +299,21 @@
     }
   }
 
+  @Nullable
+  private Typeface getTypeface(Font font) {
+    if (typefaceCallbackAnimation != null) {
+      Typeface callbackTypeface = typefaceCallbackAnimation.getValue();
+      if (callbackTypeface != null) {
+        return callbackTypeface;
+      }
+    }
+    Typeface drawableTypeface = lottieDrawable.getTypeface(font.getFamily(), font.getStyle());
+    if (drawableTypeface != null) {
+      return drawableTypeface;
+    }
+    return font.getTypeface();
+  }
+
   private List<String> getTextLines(String text) {
     // Split full text by carriage return character
     String formattedText = text.replaceAll("\r\n", "\r")
@@ -517,6 +533,18 @@
         textSizeCallbackAnimation.addUpdateListener(this);
         addAnimation(textSizeCallbackAnimation);
       }
+    } else if (property == LottieProperty.TYPEFACE) {
+      if (typefaceCallbackAnimation != null) {
+        removeAnimation(typefaceCallbackAnimation);
+      }
+
+      if (callback == null) {
+        typefaceCallbackAnimation = null;
+      } else {
+        typefaceCallbackAnimation = new ValueCallbackKeyframeAnimation<>((LottieValueCallback<Typeface>) callback);
+        typefaceCallbackAnimation.addUpdateListener(this);
+        addAnimation(typefaceCallbackAnimation);
+      }
     }
   }
 }
diff --git a/sample-compose/src/main/assets/fonts/Comic Neue.ttf b/sample-compose/src/main/assets/fonts/Comic Neue.ttf
new file mode 100755
index 0000000..ab3a417
--- /dev/null
+++ b/sample-compose/src/main/assets/fonts/Comic Neue.ttf
Binary files differ
diff --git a/sample-compose/src/main/assets/fonts/Roboto.ttf b/sample-compose/src/main/assets/fonts/Roboto.ttf
new file mode 100755
index 0000000..2c97eea
--- /dev/null
+++ b/sample-compose/src/main/assets/fonts/Roboto.ttf
Binary files differ
diff --git a/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/ComposeActivity.kt b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/ComposeActivity.kt
index 9b12b5f..af9dd05 100644
--- a/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/ComposeActivity.kt
+++ b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/ComposeActivity.kt
@@ -30,6 +30,7 @@
 import com.airbnb.lottie.sample.compose.examples.ExamplesPage
 import com.airbnb.lottie.sample.compose.examples.ImagesExamplesPage
 import com.airbnb.lottie.sample.compose.examples.NetworkExamplesPage
+import com.airbnb.lottie.sample.compose.examples.TextExamplesPage
 import com.airbnb.lottie.sample.compose.examples.TransitionsExamplesPage
 import com.airbnb.lottie.sample.compose.examples.ViewPagerExamplePage
 import com.airbnb.lottie.sample.compose.lottiefiles.LottieFilesPage
@@ -100,6 +101,7 @@
                         composable(Route.NetworkExamples.route) { NetworkExamplesPage() }
                         composable(Route.DynamicPropertiesExamples.route) { DynamicPropertiesExamplesPage() }
                         composable(Route.ImagesExamples.route) { ImagesExamplesPage() }
+                        composable(Route.TextExamples.route) { TextExamplesPage() }
                         composable(
                             Route.Player.fullRoute,
                             arguments = Route.Player.args
diff --git a/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/Route.kt b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/Route.kt
index 719d219..9c8ee0e 100644
--- a/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/Route.kt
+++ b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/Route.kt
@@ -28,6 +28,8 @@
 
     object ImagesExamples : Route("image examples")
 
+    object TextExamples : Route("text examples")
+
     object DynamicPropertiesExamples : Route("dynamic properties examples")
 
     object Player : Route(
diff --git a/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ExamplesPage.kt b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ExamplesPage.kt
index bb85651..b4c4402 100644
--- a/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ExamplesPage.kt
+++ b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ExamplesPage.kt
@@ -64,5 +64,11 @@
             modifier = Modifier
                 .clickable { navController.navigate(Route.ImagesExamples) }
         )
+        ListItem(
+            text = { Text("Text") },
+            secondaryText = { Text("Using animations with text") },
+            modifier = Modifier
+                .clickable { navController.navigate(Route.TextExamples) }
+        )
     }
 }
\ No newline at end of file
diff --git a/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/TextExamplesPage.kt b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/TextExamplesPage.kt
new file mode 100644
index 0000000..52a0140
--- /dev/null
+++ b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/TextExamplesPage.kt
@@ -0,0 +1,102 @@
+package com.airbnb.lottie.sample.compose.examples
+
+import android.graphics.Typeface
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import com.airbnb.lottie.LottieProperty
+import com.airbnb.lottie.compose.LottieAnimation
+import com.airbnb.lottie.compose.LottieCompositionSpec
+import com.airbnb.lottie.compose.rememberLottieComposition
+import com.airbnb.lottie.compose.rememberLottieDynamicProperties
+import com.airbnb.lottie.compose.rememberLottieDynamicProperty
+import com.airbnb.lottie.sample.compose.R
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+
+@Composable
+fun TextExamplesPage() {
+    UsageExamplePageScaffold {
+        Column(
+            modifier = Modifier
+                .fillMaxWidth()
+                .verticalScroll(rememberScrollState())
+        ) {
+            ExampleCard("Default", "Loading fonts using default asset paths") {
+                Example1()
+            }
+            ExampleCard("Font Remapping", "Replace fonts using font remapping") {
+                Example2()
+            }
+            ExampleCard("Dynamic Properties", "Replace fonts with custom typefaces") {
+                Example3()
+            }
+        }
+    }
+}
+
+@Composable
+private fun Example1() {
+    // Lottie will automatically look for fonts in src/main/assets/fonts.
+    // It will find font files based on the font family specified in the Lottie Json file.
+    // You can specify a different assets subfolder by using the fontAssetsFolder parameter.
+    // By default, it will look for ttf files.
+    // You can specify a different file extension by using the fontFileExtension parameter.
+    val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.name))
+    LottieAnimation(
+        composition,
+        progress = 0f,
+    )
+}
+
+@Composable
+private fun Example2() {
+    val composition by rememberLottieComposition(
+        LottieCompositionSpec.RawRes(R.raw.name),
+        // Comic Neue is the font family set in the Lottie json file.
+        fontRemapping = mapOf("Comic Neue" to "fonts/Roboto.ttf"),
+        // Don't cache the composition because it has a custom font remapping.
+        cacheComposition = false,
+    )
+    LottieAnimation(
+        composition,
+        progress = 0f,
+    )
+}
+
+@Composable
+private fun Example3() {
+    val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.name))
+    val typeface = rememberTypeface("fonts/Roboto.ttf")
+    val dynamicProperties = rememberLottieDynamicProperties(
+        rememberLottieDynamicProperty(LottieProperty.TYPEFACE, typeface, "NAME")
+    )
+
+    LottieAnimation(
+        composition,
+        progress = 0f,
+        dynamicProperties = dynamicProperties,
+    )
+}
+
+@Composable
+private fun rememberTypeface(path: String): Typeface? {
+    var typeface: Typeface? by remember { mutableStateOf(null) }
+    val context = LocalContext.current
+    LaunchedEffect(path) {
+        typeface = null
+        withContext(Dispatchers.IO) {
+            typeface = Typeface.createFromAsset(context.assets, "fonts/Roboto.ttf")
+        }
+    }
+    return typeface
+}
\ No newline at end of file
diff --git a/sample-compose/src/main/res/raw/name.json b/sample-compose/src/main/res/raw/name.json
new file mode 100644
index 0000000..fad053c
--- /dev/null
+++ b/sample-compose/src/main/res/raw/name.json
@@ -0,0 +1,2 @@
+{"v":"4.8.0","fr":29.9700012207031,"ip":0,"op":61.0000024845809,"w":150,"h":150,"nm":"Name",
+  "ddd":0,"assets":[],"fonts":{"list":[{"origin":0,"fPath":"","fClass":"","fFamily":"Comic Neue","fWeight":"","fStyle":"Regular","fName":"ComicNeue","ascent":69.6990966796875}]},"layers":[{"ddd":0,"ind":1,"ty":5,"nm":"NAME","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"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":[10.5,15,0],"e":[10.5,147,0],"to":[0,22,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":15,"s":[10.5,147,0],"e":[10.5,15,0],"to":[0,0,0],"ti":[0,22,0]},{"t":30.0000012219251}]},"a":{"a":0,"k":[0,0,0]},"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":[196,196,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":15,"s":[196,196,100],"e":[100,100,100]},{"t":30.0000012219251}]}},"ao":0,"t":{"d":{"k":[{"s":{"s":14,"f":"ComicNeue","t":"NAME","j":0,"tr":0,"lh":16.8,"ls":0,"fc":[0.92,0,0]},"t":0}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0]}},"a":[{"s":{"t":0,"xe":{"a":0,"k":0},"ne":{"a":0,"k":0},"a":{"a":0,"k":100},"b":1,"rn":0,"sh":1,"r":1},"a":{"fc":{"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,0,0,1],"e":[0,1,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":15,"s":[0,1,0,1],"e":[0,0,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":30,"s":[0,0,1,1],"e":[0,1,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":45,"s":[0,1,0,1],"e":[1,0,0,1]},{"t":60.0000024438501}]},"t":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":30,"s":[0],"e":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":45,"s":[20],"e":[0]},{"t":60.0000024438501}]}}}]},"ip":0,"op":61.0000024845809,"st":0,"bm":0,"sr":1}]}
\ No newline at end of file
