diff --git a/Telegram/BUILD b/Telegram/BUILD index a8880d2d78..f33c79c946 100644 --- a/Telegram/BUILD +++ b/Telegram/BUILD @@ -377,10 +377,12 @@ official_apple_pay_merchants = [ "merchant.privatbank.test.telergramios", "merchant.privatbank.prod.telergram", "merchant.paymaster.test.telegramios", + #"merchant.paymaster.prod.telegramios", "merchant.smartglocal.prod.telegramios", "merchant.smartglocal.test.telegramios", "merchant.yoomoney.test.telegramios", #"merchant.org.telegram.Best2pay.test", + #"merchant.psbank.test.telegramios", ] official_bundle_ids = [ diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/Balloon.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/Balloon.tgs new file mode 100644 index 0000000000..72cd87b655 Binary files /dev/null and b/Telegram/Telegram-iOS/Resources/DemoAnimations/Balloon.tgs differ diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/Fireworks.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/Fireworks.tgs new file mode 100644 index 0000000000..193ab6be08 Binary files /dev/null and b/Telegram/Telegram-iOS/Resources/DemoAnimations/Fireworks.tgs differ diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/Hearts.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/Hearts.tgs new file mode 100644 index 0000000000..14940c5f5c Binary files /dev/null and b/Telegram/Telegram-iOS/Resources/DemoAnimations/Hearts.tgs differ diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/Joy.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/Joy.tgs new file mode 100644 index 0000000000..8afa88c3f1 Binary files /dev/null and b/Telegram/Telegram-iOS/Resources/DemoAnimations/Joy.tgs differ diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/Money.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/Money.tgs new file mode 100644 index 0000000000..bc6f9b9f01 Binary files /dev/null and b/Telegram/Telegram-iOS/Resources/DemoAnimations/Money.tgs differ diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/Party.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/Party.tgs new file mode 100644 index 0000000000..e84afd8a43 Binary files /dev/null and b/Telegram/Telegram-iOS/Resources/DemoAnimations/Party.tgs differ diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/Poo.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/Poo.tgs new file mode 100644 index 0000000000..b9d8d04ac8 Binary files /dev/null and b/Telegram/Telegram-iOS/Resources/DemoAnimations/Poo.tgs differ diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/SuperThumbsDown.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/SuperThumbsDown.tgs new file mode 100644 index 0000000000..a37e3e6598 Binary files /dev/null and b/Telegram/Telegram-iOS/Resources/DemoAnimations/SuperThumbsDown.tgs differ diff --git a/Telegram/Telegram-iOS/Resources/DemoAnimations/SuperThumbsUp1.tgs b/Telegram/Telegram-iOS/Resources/DemoAnimations/SuperThumbsUp1.tgs new file mode 100644 index 0000000000..e593b1c182 Binary files /dev/null and b/Telegram/Telegram-iOS/Resources/DemoAnimations/SuperThumbsUp1.tgs differ diff --git a/Tests/BUILD b/Tests/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Tests/Common/BUILD b/Tests/Common/BUILD new file mode 100644 index 0000000000..15c28377d8 --- /dev/null +++ b/Tests/Common/BUILD @@ -0,0 +1,16 @@ + +filegroup( + name = "LaunchScreen", + srcs = [ + "Base.lproj/LaunchScreen.xib", + ], + visibility = ["//visibility:public"], +) + +objc_library( + name = "Main", + srcs = [ + "Main/main.m" + ], + visibility = ["//visibility:public"], +) diff --git a/Tests/Common/Base.lproj/LaunchScreen.xib b/Tests/Common/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000000..3b02891e01 --- /dev/null +++ b/Tests/Common/Base.lproj/LaunchScreen.xib @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Common/Main/main.m b/Tests/Common/Main/main.m new file mode 100644 index 0000000000..81d976a847 --- /dev/null +++ b/Tests/Common/Main/main.m @@ -0,0 +1,7 @@ +#import + +int main(int argc, char *argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, @"Application", @"AppDelegate"); + } +} diff --git a/Tests/LottieMesh/BUILD b/Tests/LottieMesh/BUILD new file mode 100644 index 0000000000..40da9bebbd --- /dev/null +++ b/Tests/LottieMesh/BUILD @@ -0,0 +1,150 @@ +load("@build_bazel_rules_apple//apple:ios.bzl", + "ios_application", +) + +load("@build_bazel_rules_swift//swift:swift.bzl", + "swift_library", +) + +load("//build-system/bazel-utils:plist_fragment.bzl", + "plist_fragment", +) + +filegroup( + name = "AppResources", + srcs = glob([ + "Resources/**/*", + ], exclude = ["Resources/**/.*"]), +) + +swift_library( + name = "Lib", + srcs = glob([ + "Sources/**/*.swift", + ]), + data = [ + ":AppResources", + ], + deps = [ + "//submodules/LottieMeshSwift:LottieMeshSwift", + ], +) + +plist_fragment( + name = "BuildNumberInfoPlist", + extension = "plist", + template = + """ + CFBundleVersion + 1 + """ +) + +plist_fragment( + name = "VersionInfoPlist", + extension = "plist", + template = + """ + CFBundleShortVersionString + 1.0 + """ +) + +plist_fragment( + name = "AppNameInfoPlist", + extension = "plist", + template = + """ + CFBundleDisplayName + Test + """ +) + +plist_fragment( + name = "AppInfoPlist", + extension = "plist", + template = + """ + CFBundleAllowMixedLocalizations + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + Test + CFBundleIdentifier + org.telegram.LottieMesh + CFBundleName + Telegram + CFBundlePackageType + APPL + CFBundleSignature + ???? + ITSAppUsesNonExemptEncryption + + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + UIDeviceFamily + + 1 + 2 + + UIFileSharingEnabled + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UIStatusBarStyle + UIStatusBarStyleDefault + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + UIViewEdgeAntialiasing + + UIViewGroupOpacity + + CADisableMinimumFrameDurationOnPhone + + """ +) + +ios_application( + name = "LottieMesh", + bundle_id = "org.telegram.LottieMesh", + families = ["iphone", "ipad"], + minimum_os_version = "9.0", + provisioning_profile = "@build_configuration//provisioning:Wildcard.mobileprovision", + infoplists = [ + ":AppInfoPlist", + ":BuildNumberInfoPlist", + ":VersionInfoPlist", + ], + resources = [ + "//Tests/Common:LaunchScreen", + ], + frameworks = [ + ], + deps = [ + "//Tests/Common:Main", + ":Lib", + ], +) diff --git a/Tests/LottieMesh/Resources/Cat.json b/Tests/LottieMesh/Resources/Cat.json new file mode 100644 index 0000000000..9ed36bd9be --- /dev/null +++ b/Tests/LottieMesh/Resources/Cat.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":120,"w":512,"h":512,"nm":"Cat Kissing heart","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1","parent":28,"sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":0,"k":[144.75,81.342,0]},"a":{"a":0,"k":[50,50,0]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"f1","parent":4,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[16.902,56.403,0],"to":[-10.812,-9.286,0],"ti":[-4.15,9.939,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[7.578,18.211,0],"to":[-3.682,8.922,0],"ti":[-11.474,-9.33,0]},{"t":100,"s":[16.902,56.403,0]}]},"a":{"a":0,"k":[41.268,20.785,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0.651,-0.673],[8.733,-1.767],[-19.861,3.406],[-2.625,-8.662],[-1,0.306],[12.5,-2.186],[-32.67,3.532],[-9.545,2.662]],"o":[[-7.894,8.108],[-18.845,2.227],[9.22,-1.644],[0.979,3.228],[-9.903,3.028],[-27.269,4.551],[11.584,-0.098],[1.044,-0.292]],"v":[[22.717,-18.677],[-4.571,-15.821],[6.137,12.114],[33.53,0.445],[31.529,4.186],[7.089,18.038],[-1.84,-22.491],[21.727,-20.236]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[0.793,-0.267],[8.733,-1.767],[-21.574,0.524],[-8.505,-5.453],[1.254,0.321],[7.891,-1.169],[-32.67,3.532],[-9.454,0.339]],"o":[[-10.484,3.106],[-19.463,2.918],[10.711,-0.207],[2.701,1.732],[-6.741,1.29],[-27.325,3.017],[11.584,-0.098],[1.054,-0.034]],"v":[[26.863,-13.654],[-3.731,-17.014],[2.892,8.287],[24.973,7.108],[20.51,8.322],[3.334,13.632],[-1.853,-22.754],[27.297,-16.351]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0.929,0.119],[8.733,-1.767],[-23.207,-2.223],[-1.817,-2.005],[3.403,0.335],[3.497,-0.198],[-32.67,3.532],[-9.368,-1.877]],"o":[[-12.954,-1.662],[-20.051,3.577],[12.132,1.162],[2.265,2.499],[-3.727,-0.367],[-27.379,1.554],[11.584,-0.098],[1.063,0.213]],"v":[[30.815,-8.865],[-2.93,-18.152],[-0.201,4.64],[15.987,10.187],[9.335,9.402],[-0.247,9.432],[-1.866,-23.005],[32.608,-12.648]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0.871,-0.045],[8.733,-1.767],[-22.513,-1.055],[-4.661,-3.471],[2.489,0.329],[5.366,-0.611],[-32.67,3.532],[-9.405,-0.935]],"o":[[-11.903,0.366],[-19.801,3.296],[11.528,0.58],[2.451,2.173],[-5.009,0.337],[-27.356,2.176],[11.584,-0.098],[1.059,0.108]],"v":[[29.134,-10.902],[-3.271,-17.668],[1.115,6.191],[19.808,8.877],[14.087,8.943],[1.276,11.218],[-1.861,-22.898],[36.162,-12.839]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":65,"s":[{"i":[[0.793,-0.267],[8.733,-1.767],[-21.574,0.524],[-8.505,-5.453],[1.254,0.321],[7.891,-1.169],[-32.67,3.532],[-9.454,0.339]],"o":[[-10.484,3.106],[-19.463,2.918],[10.711,-0.207],[2.701,1.732],[-6.741,1.29],[-27.325,3.017],[11.584,-0.098],[1.054,-0.034]],"v":[[26.863,-13.654],[-3.731,-17.014],[2.892,8.287],[24.973,7.108],[20.51,8.322],[3.334,13.632],[-1.853,-22.754],[27.297,-16.351]],"c":true}]},{"t":100,"s":[{"i":[[0.651,-0.673],[8.733,-1.767],[-19.861,3.406],[-2.625,-8.662],[-1,0.306],[12.5,-2.186],[-32.67,3.532],[-9.545,2.662]],"o":[[-7.894,8.108],[-18.845,2.227],[9.22,-1.644],[0.979,3.228],[-9.903,3.028],[-27.269,4.551],[11.584,-0.098],[1.044,-0.292]],"v":[[22.717,-18.677],[-4.571,-15.821],[6.137,12.114],[33.53,0.445],[31.529,4.186],[7.089,18.038],[-1.84,-22.491],[21.727,-20.236]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[34.759,22.839]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[-9.375,0.938],[6.562,4.312]],"o":[[-12.188,3.938],[9.375,-0.937],[-6.562,-4.313]],"v":[[-6.437,-5],[-0.687,8],[12.063,-4.625]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-9.375,0.938],[6.562,4.312]],"o":[[-12.188,3.938],[9.375,-0.937],[-6.562,-4.313]],"v":[[-7.605,-7.323],[-3.029,-8.211],[10.895,-6.948]],"c":true}]},{"t":100,"s":[{"i":[[0,0],[-9.375,0.938],[6.562,4.312]],"o":[[-12.188,3.938],[9.375,-0.937],[-6.562,-4.313]],"v":[[-6.437,-5],[-0.687,8],[12.063,-4.625]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.847000002394,0.39199999641,0.611999990426,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[35.293,11.008]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[5,-3],[-7,-9],[-8,2],[-7.143,4.495]],"o":[[-4,-5],[-5,3],[7,9],[8,-2],[7.417,-4.666]],"v":[[3.042,-13],[-18.958,-15],[-20.958,8],[2.042,16],[20.542,0.916]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":25,"s":[{"i":[[1.874,0.695],[6.475,-3.732],[-7,-9],[-9.105,4.499],[-7.143,4.495]],"o":[[-4.562,-4.055],[-5.035,2.939],[7,9],[8.308,-3.769],[2.475,-4.597]],"v":[[3.873,-14.069],[-19.066,-15.353],[-22.312,6.098],[3.572,11.589],[22.755,-0.962]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[5.712,2.12],[9.496,-5.232],[-7,-9],[-9.131,-6.24],[-7.143,4.495]],"o":[[-5.712,-2.12],[-5.107,2.814],[7,9],[8,-2],[-7.646,-4.456]],"v":[[5.575,-16.258],[-19.287,-16.076],[-25.084,2.203],[8.536,12.446],[27.288,-4.807]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":75,"s":[{"i":[[1.874,0.695],[6.475,-3.732],[-7,-9],[-9.105,4.499],[-7.143,4.495]],"o":[[-4.562,-4.055],[-5.035,2.939],[7,9],[8.308,-3.769],[2.475,-4.597]],"v":[[3.873,-14.069],[-19.066,-15.353],[-22.312,6.098],[3.572,11.589],[22.755,-0.962]],"c":true}]},{"t":100,"s":[{"i":[[0,0],[5,-3],[-7,-9],[-8,2],[-7.143,4.495]],"o":[[-4,-5],[-5,3],[7,9],[8,-2],[7.417,-4.666]],"v":[[3.042,-13],[-18.958,-15],[-20.958,8],[2.042,16],[20.542,0.916]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317999985639,0.250999989229,0.340999977261,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[41.94,21.383]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"f2","parent":4,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[-2.767,39.504,0],"to":[-1.188,-2.175,0],"ti":[-1.923,2.047,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[-2.018,31.694,0],"to":[-1.855,1.914,0],"ti":[-1.109,-2.178,0]},{"t":100,"s":[-2.767,39.504,0]}]},"a":{"a":0,"k":[26.122,23.263,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0.756,-0.2],[10.97,-6.857],[-1.658,-5.764],[-8.699,0.471],[3.793,-0.425],[4.467,6.13],[-13.35,2.744],[-1.28,-0.875]],"o":[[-7.171,1.887],[-4.457,2.666],[2.673,8.425],[4.046,-0.22],[-12.093,1.336],[-8.359,-11.275],[12.733,-2.744],[1.179,0.806]],"v":[[22.538,-7.906],[-5.818,-11.696],[-11.643,3.163],[11.24,15.109],[11.836,21.079],[-15.357,10.918],[-3.292,-19.671],[22.538,-9.906]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0.756,-0.2],[9.396,-1.276],[-0.159,-8.296],[-6.871,-2.834],[3.795,-0.409],[4.224,10.934],[-13.35,2.744],[-1.28,-0.875]],"o":[[-7.171,1.887],[-5.267,0.715],[0.25,13.056],[3.746,1.545],[-13.734,1.479],[-3.273,-8.473],[12.733,-2.744],[1.179,0.806]],"v":[[22.538,-7.906],[-2.349,-14.456],[-15.161,-3.212],[14.168,11.861],[8.431,13.362],[-20.118,0.478],[-3.292,-19.671],[22.538,-9.906]],"c":true}]},{"t":100,"s":[{"i":[[0.756,-0.2],[10.97,-6.857],[-1.658,-5.764],[-8.699,0.471],[3.793,-0.425],[4.467,6.13],[-13.35,2.744],[-1.28,-0.875]],"o":[[-7.171,1.887],[-4.457,2.666],[2.673,8.425],[4.046,-0.22],[-12.093,1.336],[-8.359,-11.275],[12.733,-2.744],[1.179,0.806]],"v":[[22.538,-7.906],[-5.818,-11.696],[-11.643,3.163],[11.24,15.109],[11.836,21.079],[-15.357,10.918],[-3.292,-19.671],[22.538,-9.906]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[23.966,22.665]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[-8.188,-1.187],[4.5,6.375]],"o":[[-7.125,0.75],[8.187,1.188],[-4.5,-6.375]],"v":[[-5.969,-7.063],[-7.469,5.188],[11.156,0.688]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-8.231,-0.842],[4.5,6.375]],"o":[[-7.125,0.75],[14.536,1.487],[-4.5,-6.375]],"v":[[-5.969,-7.063],[-7.165,-5.362],[11.157,0.688]],"c":true}]},{"t":100,"s":[{"i":[[0,0],[-8.188,-1.187],[4.5,6.375]],"o":[[-7.125,0.75],[8.187,1.188],[-4.5,-6.375]],"v":[[-5.969,-7.063],[-7.469,5.188],[11.156,0.688]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.847000002394,0.39199999641,0.611999990426,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[30.347,13.072]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[4.666,-6.333],[-3,-6],[-10,1]],"o":[[-7,-8],[-4.667,6.334],[3,6],[10,-1]],"v":[[15,-8.667],[-12.333,-13.001],[-16,10.333],[9,18.333]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[6.92,-3.741],[-1.692,-6.098],[-17.478,-1.491]],"o":[[-7,-8],[-4.634,2.506],[3.335,12.017],[10.014,0.854]],"v":[[15,-8.667],[-12.625,-13.957],[-19.628,-1.106],[11.685,12.153]],"c":true}]},{"t":100,"s":[{"i":[[0,0],[4.666,-6.333],[-3,-6],[-10,1]],"o":[[-7,-8],[-4.667,6.334],[3,6],[10,-1]],"v":[[15,-8.667],[-12.333,-13.001],[-16,10.333],[9,18.333]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317999985639,0.250999989229,0.340999977261,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[26.504,22.426]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"paw","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":45,"s":[107]},{"t":100,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[111.441,291.275,0],"to":[15.458,-25.875,0],"ti":[-18.418,-3.424,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[183.941,262.775,0],"to":[-17.832,-3.201,0],"ti":[15.224,-27.332,0]},{"t":100,"s":[111.441,291.275,0]}]},"a":{"a":0,"k":[58.556,54.608,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[6.209,-5.835],[-7.703,-6.298],[-12.093,-4.587],[0.908,-0.236],[0,0],[13.005,13.809],[-5.857,11.364],[-0.037,-3.497]],"o":[[-11.16,10.306],[7.74,6.78],[0.881,0.334],[0,0],[-14.998,3.791],[-8.334,-8.919],[6.873,-13.117],[0.031,2.937]],"v":[[-12.669,-16.371],[-7.044,17.83],[26.777,14.898],[26.678,16.739],[26.635,16.75],[-13.581,19.769],[-21.801,-14.878],[10.484,-30.081]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":25,"s":[{"i":[[17.681,-13.462],[-5.195,-3.752],[-4.316,-1.138],[0.908,-0.236],[0,0],[7.616,6.279],[-5.857,11.364],[-1.898,-5.319]],"o":[[-11.16,10.306],[5.195,3.752],[4.245,-0.016],[0,0],[-4.356,0.822],[-8.14,-7.079],[12.606,-17.343],[0.987,2.766]],"v":[[-13.1,-16.985],[-9.293,9.312],[11.728,15.879],[14.154,19.355],[11.429,19.77],[-13.505,12.501],[-21.801,-14.878],[21.891,-30.155]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[6.209,-5.835],[-8.027,-3.588],[-2.125,-0.389],[-12.491,-10.035],[1.162,1.384],[8.488,4.463],[-5.857,11.364],[-0.037,-3.497]],"o":[[-11.16,10.306],[1.656,0.74],[13.201,2.417],[1.388,1.115],[-2.312,-2.754],[-7.453,-3.919],[6.873,-13.117],[0.031,2.937]],"v":[[-12.669,-16.371],[-7.853,13.045],[1.242,15.385],[32.684,23.987],[27.093,25.302],[-11.742,16.592],[-21.801,-14.878],[10.484,-30.081]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":75,"s":[{"i":[[17.681,-13.462],[-5.195,-3.752],[-4.316,-1.138],[0.908,-0.236],[0,0],[7.616,6.279],[-5.857,11.364],[-1.898,-5.319]],"o":[[-11.16,10.306],[5.195,3.752],[4.245,-0.016],[0,0],[-4.356,0.822],[-8.14,-7.079],[12.606,-17.343],[0.987,2.766]],"v":[[-13.1,-16.985],[-9.293,9.312],[11.728,15.879],[14.154,19.355],[11.429,19.77],[-13.505,12.501],[-21.801,-14.878],[21.891,-30.155]],"c":true}]},{"t":100,"s":[{"i":[[6.209,-5.835],[-7.703,-6.298],[-12.093,-4.587],[0.908,-0.236],[0,0],[13.005,13.809],[-5.857,11.364],[-0.037,-3.497]],"o":[[-11.16,10.306],[7.74,6.78],[0.881,0.334],[0,0],[-14.998,3.791],[-8.334,-8.919],[6.873,-13.117],[0.031,2.937]],"v":[[-12.669,-16.371],[-7.044,17.83],[26.777,14.898],[26.678,16.739],[26.635,16.75],[-13.581,19.769],[-21.801,-14.878],[10.484,-30.081]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[27.909,41.177]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[7.705,8.101],[-4.791,-0.109],[1.39,2.233],[6.232,1.487]],"o":[[7.036,12.193],[10.912,0.249],[-1.07,-1.718],[-8.815,-2.103]],"v":[[7.312,41.849],[27.461,58.027],[36.406,57.558],[28.732,54.731]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":25,"s":[{"i":[[7.705,8.101],[-4.791,-0.109],[1.39,2.233],[6.232,1.487]],"o":[[7.036,12.193],[10.912,0.249],[-1.07,-1.718],[-8.815,-2.103]],"v":[[7.312,41.849],[30.461,57.652],[39.05,58.965],[27.521,56.399]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[7.705,8.101],[-10.915,0.064],[4.829,11.063],[8.986,1.174]],"o":[[7.909,17.319],[19.18,-0.113],[-1.309,-2.998],[-8.986,-1.174]],"v":[[7.312,41.849],[37.533,60.321],[68.597,59.319],[49.423,51.326]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":75,"s":[{"i":[[7.705,8.101],[-4.791,-0.109],[1.39,2.233],[6.232,1.487]],"o":[[7.036,12.193],[10.912,0.249],[-1.07,-1.718],[-8.815,-2.103]],"v":[[7.312,41.849],[30.461,57.652],[39.05,58.965],[27.521,56.399]],"c":true}]},{"t":100,"s":[{"i":[[7.705,8.101],[-4.791,-0.109],[1.39,2.233],[6.232,1.487]],"o":[[7.036,12.193],[10.912,0.249],[-1.07,-1.718],[-8.815,-2.103]],"v":[[7.312,41.849],[27.461,58.027],[36.406,57.558],[28.732,54.731]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215686275,0.380392156863,0.462745098039,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[5.988,3.7]],"o":[[-0.133,-8.013],[0,0]],"v":[[4.471,10.997],[-5.334,-11.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":25,"s":[{"i":[[0,0],[16.114,0.14]],"o":[[-0.133,-8.013],[0,0]],"v":[[4.471,10.996],[-23.015,-14.798]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[29.161,-11.697]],"o":[[-0.133,-8.013],[0,0]],"v":[[4.471,10.997],[-38.222,-13.226]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":75,"s":[{"i":[[0,0],[16.114,0.14]],"o":[[-0.133,-8.013],[0,0]],"v":[[4.471,10.996],[-23.015,-14.798]],"c":false}]},{"t":100,"s":[{"i":[[0,0],[5.988,3.7]],"o":[[-0.133,-8.013],[0,0]],"v":[[4.471,10.997],[-5.334,-11.612]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[68.085,25.996]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[-7.778,-1.46],[-3.058,0.611],[-8,9],[3.43,2.535],[-0.883,1.684],[1.073,1.314],[0,0]],"o":[[2.301,0.432],[0,0],[5.054,-5.686],[-1.529,-1.13],[0.528,-1.008],[-7.042,-8.625],[-7.215,3.25]],"v":[[-12.089,9.48],[-4.046,9.312],[15.954,10.313],[13.852,-2.398],[12.546,-7.28],[11.954,-10.688],[-13.794,-5.954]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[-7.778,-1.46],[-3.058,0.611],[-6.645,-4.976],[3.43,2.535],[1.831,0.512],[1.303,0.154],[0,0]],"o":[[2.301,0.432],[0,0],[6.089,4.56],[-1.529,-1.13],[-2.469,-0.69],[-3.42,-0.405],[-6.52,-2.658]],"v":[[-8.944,-11.872],[-0.715,-13.142],[19.452,-7.749],[15.245,-10.666],[10.002,-13.037],[5.412,-13.916],[-9.252,-12.049]],"c":true}]},{"t":100,"s":[{"i":[[-7.778,-1.46],[-3.058,0.611],[-8,9],[3.43,2.535],[-0.883,1.684],[1.073,1.314],[0,0]],"o":[[2.301,0.432],[0,0],[5.054,-5.686],[-1.529,-1.13],[0.528,-1.008],[-7.042,-8.625],[-7.215,3.25]],"v":[[-12.089,9.48],[-4.046,9.312],[15.954,10.313],[13.852,-2.398],[12.546,-7.28],[11.954,-10.688],[-13.794,-5.954]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.847000002394,0.39199999641,0.611999990426,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[41.661,23.688]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[-1,3],[6.99,7.542],[13.008,-12.252],[-10,-9],[-13,-1]],"o":[[2.846,-8.538],[-6.99,-7.542],[-13.008,12.252],[10,9],[13,1]],"v":[[34.077,3.5],[25.077,-23.5],[-23.923,-18.5],[-18.923,20.5],[17.077,16.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":25,"s":[{"i":[[-1,3],[6.99,7.542],[13.008,-12.252],[-10.087,-8.9],[-13,-1]],"o":[[2.846,-8.538],[-6.99,-7.542],[-13.008,12.252],[9.4,8.317],[13,1]],"v":[[34.077,3.5],[25.077,-23.5],[-23.923,-18.5],[-19.657,12.64],[17.1,17.136]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[-1,3],[6.99,7.542],[13.008,-12.252],[-10.266,-8.695],[-11.542,-6.348]],"o":[[2.846,-8.538],[-6.99,-7.542],[-13.008,12.252],[8.17,6.919],[11.425,6.283]],"v":[[34.077,3.5],[25.077,-23.5],[-23.923,-18.5],[-22.185,14.962],[21.634,22.427]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":75,"s":[{"i":[[-1,3],[6.99,7.542],[13.008,-12.252],[-10.087,-8.9],[-13,-1]],"o":[[2.846,-8.538],[-6.99,-7.542],[-13.008,12.252],[9.4,8.317],[13,1]],"v":[[34.077,3.5],[25.077,-23.5],[-23.923,-18.5],[-19.657,12.64],[17.1,17.136]],"c":true}]},{"t":100,"s":[{"i":[[-1,3],[6.99,7.542],[13.008,-12.252],[-10,-9],[-13,-1]],"o":[[2.846,-8.538],[-6.99,-7.542],[-13.008,12.252],[10,9],[13,1]],"v":[[34.077,3.5],[25.077,-23.5],[-23.923,-18.5],[-18.923,20.5],[17.077,16.5]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317999985639,0.250999989229,0.340999977261,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[37.538,40.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"f3","parent":4,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[4.619,25.343,0],"to":[-3.608,6.724,0],"ti":[-3.478,-6.387,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[5.5,47.034,0],"to":[-3.684,-6.408,0],"ti":[-3.401,6.708,0]},{"t":100,"s":[4.619,25.343,0]}]},"a":{"a":0,"k":[37.004,30.342,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[8,-2],[-3,-8],[-2,6]],"o":[[-12,-9],[-8,2],[3,8],[2,-6]],"v":[[19.5,-3.5],[-8.5,-13.5],[-18.5,7.5],[19.5,9.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[8,-2],[-7.921,-9.107],[-13.277,-5.057]],"o":[[-12,-9],[-8,2],[8.122,9.339],[5.91,2.251]],"v":[[19.5,-3.5],[-8.5,-13.5],[-20.347,2.313],[19.5,9.5]],"c":true}]},{"t":100,"s":[{"i":[[0,0],[8,-2],[-3,-8],[-2,6]],"o":[[-12,-9],[-8,2],[3,8],[2,-6]],"v":[[19.5,-3.5],[-8.5,-13.5],[-18.5,7.5],[19.5,9.5]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[36.5,30.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[-6.438,-2.687],[-1.687,3.188],[4.437,3]],"o":[[-9.688,2.5],[6.438,2.688],[1.688,-3.187],[-4.438,-3]],"v":[[-0.874,-6.469],[-8.749,4.156],[10.876,5.031],[10.751,-5.219]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-6.572,2.341],[-4.068,-1.048],[4.437,3]],"o":[[-9.688,2.5],[7.594,-2.706],[3.492,0.9],[-4.438,-3]],"v":[[-0.874,-6.469],[-8.495,-4.418],[9.323,-5.605],[10.751,-5.219]],"c":true}]},{"t":100,"s":[{"i":[[0,0],[-6.438,-2.687],[-1.687,3.188],[4.437,3]],"o":[[-9.688,2.5],[6.438,2.688],[1.688,-3.187],[-4.438,-3]],"v":[[-0.874,-6.469],[-8.749,4.156],[10.876,5.031],[10.751,-5.219]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.847000002394,0.39199999641,0.611999990426,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[30.624,24.343]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[8,-2],[-3,-8],[-2,6]],"o":[[-12,-9],[-8,2],[3,8],[2,-6]],"v":[[19.5,-3.5],[-8.5,-13.5],[-18.5,7.5],[19.5,9.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[8,-2],[-7.921,-9.107],[-13.277,-5.057]],"o":[[-12,-9],[-8,2],[8.122,9.339],[5.91,2.251]],"v":[[19.5,-3.5],[-8.5,-13.5],[-20.347,2.313],[19.5,9.5]],"c":true}]},{"t":100,"s":[{"i":[[0,0],[8,-2],[-3,-8],[-2,6]],"o":[[-12,-9],[-8,2],[3,8],[2,-6]],"v":[[19.5,-3.5],[-8.5,-13.5],[-18.5,7.5],[19.5,9.5]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215689898,0.380392163992,0.46274510026,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[36.5,30.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":3,"nm":"Null heart","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":-10},"p":{"a":0,"k":[245.089,223.749,0]},"a":{"a":0,"k":[80.714,97.833,0]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"heart","parent":6,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":102,"s":[100]},{"t":103,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.189],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[10]},{"t":105,"s":[30]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[80.714,97.833,0],"to":[-4.609,-6.736,0],"ti":[-3.364,4.442,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":60,"s":[81.349,78.398,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[81.349,78.398,0],"to":[-14.819,-10.736,0],"ti":[-14.105,157.019,0]},{"t":105,"s":[-52.15,-44.145,0]}]},"a":{"a":0,"k":[80.714,97.833,0]},"s":{"a":1,"k":[{"i":{"x":[0.189,0.189,0.189],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":45,"s":[0,0,100]},{"t":105,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.558,-4.781],[2.924,-0.08],[0.219,0.653]],"o":[[-2.251,6.795],[-0.723,0.02],[-6.051,-18.128]],"v":[[4.379,-0.723],[1.682,9.603],[0.114,8.506]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.620000023935,0.008000000785,0.340999977261,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[52.977,37.118]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.472,1.491],[-3.206,18.21],[14.833,3.5],[3.417,-14.708],[9.453,-8.569],[-20.125,-12.875]],"o":[[4.5,-1.5],[3.42,-19.427],[-14.483,-3.417],[0,0],[-13.375,12.125],[16.471,10.537]],"v":[[19.978,40.609],[41.103,-0.516],[24.603,-38.683],[-5.648,-19.266],[-31.148,-20.266],[-19.398,27.859]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.620000023935,0.008000000785,0.340999977261,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[59.522,57.1]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0.125,2.25],[-2.437,-0.375],[1.875,-2.813]],"o":[[-0.33,-5.932],[2.438,0.375],[-1.875,2.812]],"v":[[-3.867,3.625],[1.759,-5.5],[0.509,2.625]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.501999978458,0.776000019148,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[64.033,37.542]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.597,-0.418],[0.438,-5.75],[-5.187,-4.187],[-0.687,6.875]],"o":[[-5.166,0.469],[-0.437,5.75],[3.581,2.89],[1.03,-10.293]],"v":[[2.878,-15.096],[-7.038,-4.063],[-1.038,12.624],[0.837,-3.063]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.501999978458,0.776000019148,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[34.225,55.648]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.5,3.313],[-7.843,6.138],[-0.171,14.548],[6.125,6.625],[-0.713,1.695],[-6.653,-12.938],[5.232,-3.113]],"o":[[0,0],[7.666,-6],[0.136,-11.629],[-4.735,-5.122],[0.713,-1.695],[10.914,21.229],[-5.232,3.113]],"v":[[-26.625,31.541],[-8.458,30.333],[3.261,-8.902],[-4.25,-34.834],[-10.125,-39.084],[15.711,-27.646],[-1,37.666]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823999980852,0.016000001571,0.501999978458,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[82,59.168]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.475,18.432],[9.07,3.416],[4.25,-15.875],[12.237,-7.231],[-13.886,-10.392],[-9.621,-0.165]],"o":[[1.916,-23.942],[-9.071,-3.415],[0,0],[-21.676,12.81],[14.476,10.835],[5.881,0.1]],"v":[[44.099,-1.657],[28.092,-35.997],[-1.265,-18.217],[-24.339,-21.799],[-14.867,27.484],[27.909,39.312]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905999995213,0.156999999402,0.528999956916,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[55.39,56.301]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"heart 9","parent":7,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.189],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":77,"s":[-19.681]},{"t":102,"s":[0.319]}]},"p":{"a":1,"k":[{"i":{"x":0.189,"y":1},"o":{"x":0.167,"y":0},"t":97,"s":[63.394,65.09,0],"to":[51.309,11.913,0],"ti":[0,0,0]},{"t":117,"s":[133.266,127.688,0]}]},"a":{"a":0,"k":[66.22,63.693,0]},"s":{"a":1,"k":[{"i":{"x":[0.189,0.189,0.189],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":42,"s":[0,0,100]},{"i":{"x":[0.576,0.576,0.576],"y":[0.599,0.599,23.85]},"o":{"x":[0.17,0.17,0.17],"y":[0,0,0]},"t":97,"s":[100.318,100.318,100]},{"i":{"x":[0.836,0.836,0.836],"y":[1,1,1]},"o":{"x":[0.408,0.408,0.408],"y":[0.623,0.623,-26.829]},"t":106,"s":[43.173,43.173,100]},{"t":117,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.788,14.788]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529411765,0.01568627451,0.501960784314,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[66.22,63.693]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":-3,"op":177,"st":-3,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"heart 8","parent":7,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.189,"y":1},"o":{"x":0.167,"y":0},"t":99,"s":[63.394,65.09,0],"to":[-12.835,49.669,0],"ti":[0,0,0]},{"t":119,"s":[85.951,183.108,0]}]},"a":{"a":0,"k":[66.22,63.693,0]},"s":{"a":1,"k":[{"i":{"x":[0.189,0.189,0.189],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":44,"s":[0,0,100]},{"i":{"x":[0.565,0.565,0.565],"y":[0.605,0.605,18.812]},"o":{"x":[0.18,0.18,0.18],"y":[0,0,0]},"t":99,"s":[100.318,100.318,100]},{"i":{"x":[0.841,0.841,0.841],"y":[1,1,1]},"o":{"x":[0.384,0.384,0.384],"y":[0.533,0.533,-29.239]},"t":106,"s":[55.072,55.072,100]},{"t":119,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.788,14.788]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529411765,0.01568627451,0.501960784314,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[66.22,63.693]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":-1,"op":179,"st":-1,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"heart 7","parent":7,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.189,"y":1},"o":{"x":0.167,"y":0},"t":98,"s":[63.394,65.09,0],"to":[37.549,-61.843,0],"ti":[0,0,0]},{"t":118,"s":[187.317,21.394,0]}]},"a":{"a":0,"k":[66.22,63.693,0]},"s":{"a":1,"k":[{"i":{"x":[0.189,0.189,0.189],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":43,"s":[0,0,100]},{"i":{"x":[0.57,0.57,0.57],"y":[0.599,0.599,21.437]},"o":{"x":[0.175,0.175,0.175],"y":[0,0,0]},"t":98,"s":[100.318,100.318,100]},{"i":{"x":[0.839,0.839,0.839],"y":[1,1,1]},"o":{"x":[0.397,0.397,0.397],"y":[0.577,0.577,-28.27]},"t":106,"s":[49.155,49.155,100]},{"t":118,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.788,14.788]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529411765,0.01568627451,0.501960784314,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[66.22,63.693]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":-2,"op":178,"st":-2,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"heart 6","parent":7,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.189],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[-19.681]},{"t":101,"s":[0.319]}]},"p":{"a":1,"k":[{"i":{"x":0.189,"y":1},"o":{"x":0.167,"y":0},"t":96,"s":[63.394,65.09,0],"to":[-62.756,-13.289,0],"ti":[0,0,0]},{"t":116,"s":[-12.34,101.557,0]}]},"a":{"a":0,"k":[66.22,63.693,0]},"s":{"a":1,"k":[{"i":{"x":[0.189,0.189,0.189],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":41,"s":[0,0,100]},{"i":{"x":[0.583,0.583,0.583],"y":[0.603,0.603,26]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":96,"s":[100.318,100.318,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.417,0.417,0.417],"y":[0.675,0.675,-25]},"t":106,"s":[37.159,37.159,100]},{"t":116,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.788,14.788]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529411765,0.01568627451,0.501960784314,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[66.22,63.693]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":-4,"op":176,"st":-4,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"heart 5","parent":7,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.189],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[-19.681]},{"t":103,"s":[0.319]}]},"p":{"a":1,"k":[{"i":{"x":0.189,"y":1},"o":{"x":0.167,"y":0},"t":98,"s":[63.394,65.09,0],"to":[67.385,-10.433,0],"ti":[0,0,0]},{"t":118,"s":[174.241,84.573,0]}]},"a":{"a":0,"k":[66.22,63.693,0]},"s":{"a":1,"k":[{"i":{"x":[0.189,0.189,0.189],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":43,"s":[0,0,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]},"t":98,"s":[100.318,100.318,100]},{"t":118,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.788,14.788]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529411765,0.01568627451,0.501960784314,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[66.22,63.693]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":-2,"op":178,"st":-2,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"heart 4","parent":7,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.189,"y":1},"o":{"x":0.167,"y":0},"t":100,"s":[63.394,65.09,0],"to":[-53.484,38.126,0],"ti":[0,0,0]},{"t":120,"s":[24.859,164.373,0]}]},"a":{"a":0,"k":[66.22,63.693,0]},"s":{"a":1,"k":[{"i":{"x":[0.189,0.189,0.189],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":45,"s":[0,0,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]},"t":100,"s":[100.318,100.318,100]},{"t":120,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.788,14.788]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529411765,0.01568627451,0.501960784314,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[66.22,63.693]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"heart 3","parent":7,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.189,"y":1},"o":{"x":0.167,"y":0},"t":99,"s":[63.394,65.09,0],"to":[-3.869,-69.648,0],"ti":[0,0,0]},{"t":119,"s":[130.36,-25.451,0]}]},"a":{"a":0,"k":[66.22,63.693,0]},"s":{"a":1,"k":[{"i":{"x":[0.189,0.189,0.189],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":44,"s":[0,0,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]},"t":99,"s":[100.318,100.318,100]},{"t":119,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.788,14.788]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529411765,0.01568627451,0.501960784314,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[66.22,63.693]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":-1,"op":179,"st":-1,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"heart 2","parent":7,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.189],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":77,"s":[-19.681]},{"t":102,"s":[0.319]}]},"p":{"a":1,"k":[{"i":{"x":0.189,"y":1},"o":{"x":0.167,"y":0},"t":97,"s":[63.394,65.09,0],"to":[-34.617,-57.318,0],"ti":[0,0,0]},{"t":117,"s":[-31.348,31.057,0]}]},"a":{"a":0,"k":[66.22,63.693,0]},"s":{"a":1,"k":[{"i":{"x":[0.189,0.189,0.189],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":42,"s":[0,0,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]},"t":97,"s":[100.318,100.318,100]},{"t":117,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.788,14.788]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529411765,0.01568627451,0.501960784314,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[66.22,63.693]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":-3,"op":177,"st":-3,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"Shape Layer 2","parent":25,"sr":1,"ks":{"p":{"a":0,"k":[2.759,85.47,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[36.962,-2.672],[18.863,70.063]],"o":[[-55.916,4.042],[-19.074,-70.847]],"v":[[-0.674,-58.611],[-133.389,-154.947]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[0]},{"t":109,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0]},{"t":103,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Shape Layer 1","parent":25,"sr":1,"ks":{"p":{"a":0,"k":[2.759,85.47,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[35.36,-11.092],[18.863,70.063]],"o":[[-55.87,17.525],[-19.074,-70.847]],"v":[[-0.674,-58.611],[-141.474,-121.937]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":94,"s":[0]},{"t":113,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"t":107,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"f4","parent":4,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[37.738,13.01,0],"to":[-0.376,4.472,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[35.485,39.841,0],"to":[0,0,0],"ti":[-0.376,4.472,0]},{"t":100,"s":[37.738,13.01,0]}]},"a":{"a":0,"k":[44.123,32.01,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.894,4.735],[8,0],[10,-6],[-4,-5],[0,0]],"o":[[-2,-5],[-8,0],[-10,6],[4,5],[0,0]],"v":[[27.053,4.5],[10.053,-6.5],[-18.947,-9.5],[-23.947,10.5],[5.053,14.5]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[43.947,30.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1,3],[6,-1],[-1.125,-1.625],[-6,2]],"o":[[-1.14,-3.42],[-6,1],[1.125,1.625],[6,-2]],"v":[[10.125,-2.5],[-1.875,-7.5],[-10,1.875],[0.125,6.5]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.847000002394,0.39199999641,0.611999990426,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[29.875,32.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0.838,5.03],[8,0],[10,-6],[-4,-5],[0,0]],"o":[[-1,-6],[-8,0],[-10,6],[4,5],[0,0]],"v":[[27.581,4.5],[10.581,-6.5],[-18.419,-9.5],[-23.419,10.5],[5.581,14.5]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317999985639,0.250999989229,0.340999977261,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[43.419,30.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"arm","parent":4,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":10,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":45,"s":[-46]},{"t":100,"s":[0]}]},"p":{"a":0,"k":[49.516,39.146,0]},"a":{"a":0,"k":[35.9,36.357,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[17.013,22.683],[-7,-13],[-4,-33],[-22.75,-8.167]],"o":[[-8.159,-24.976],[-9.159,-12.212],[7,13],[4,33],[0,0]],"v":[[45.768,-1.733],[-5.768,-85.769],[-38.768,-51.769],[-23.768,16.231],[26.44,97.981]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[13.927,25.823],[-7,-13],[-4,-33],[-24.518,-5.842]],"o":[[-8.159,-24.976],[-7.254,-13.262],[7,13],[4,33],[0,0]],"v":[[45.768,-1.733],[-6.04,-84.749],[-43.223,-65.617],[-23.768,16.231],[30.074,89.313]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":45,"s":[{"i":[[0,0],[10.985,28.818],[-7,-13],[-4,-33],[-26.203,-3.625]],"o":[[-8.159,-24.976],[-5.437,-14.264],[7,13],[4,33],[0,0]],"v":[[45.768,-1.733],[-6.3,-83.777],[-40.255,-58.882],[-23.768,16.231],[33.539,81.05]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[0,0],[13.927,25.823],[-7,-13],[-4,-33],[-24.518,-5.842]],"o":[[-8.159,-24.976],[-7.254,-13.262],[7,13],[4,33],[0,0]],"v":[[45.768,-1.733],[-6.04,-84.749],[-43.223,-65.617],[-23.768,16.231],[30.074,89.313]],"c":false}]},{"t":100,"s":[{"i":[[0,0],[17.013,22.683],[-7,-13],[-4,-33],[-22.75,-8.167]],"o":[[-8.159,-24.976],[-9.159,-12.212],[7,13],[4,33],[0,0]],"v":[[45.768,-1.733],[-5.768,-85.769],[-38.768,-51.769],[-23.768,16.231],[26.44,97.981]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[60.768,112.981]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[-1.359,-0.09],[-5.833,-15.399],[11.666,7.333],[6.833,32.667]],"o":[[0,0],[3.171,0.21],[8.334,22],[-11.667,-7.334],[-6.834,-32.666]],"v":[[-32.667,-70],[-30.497,-70.27],[-15.333,-52],[21.001,66.667],[-20.999,-0.667]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,0],[-2.003,-2.449],[-5.423,-14.196],[-6.727,-9.744],[6.555,30.332]],"o":[[0,0],[6.396,5.722],[8.409,21.971],[-17.397,-6.976],[-7.09,-32.609]],"v":[[-40.093,-90.028],[-34.95,-89.325],[-15.72,-51.98],[24.971,61.365],[-20.999,-0.667]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":45,"s":[{"i":[[0,0],[-3.32,-7.281],[-4.585,-11.731],[-44.394,-44.716],[5.986,25.549]],"o":[[0,0],[3.297,7.231],[8.563,21.912],[-29.133,-6.243],[-7.613,-32.493]],"v":[[-38.219,-86.798],[-29.558,-88.913],[-16.511,-51.938],[33.102,50.508],[-20.999,-0.667]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[0,0],[-2.003,-2.449],[-5.423,-14.196],[-6.727,-9.744],[6.555,30.332]],"o":[[0,0],[6.396,5.722],[8.409,21.971],[-17.397,-6.976],[-7.09,-32.609]],"v":[[-40.093,-90.028],[-34.95,-89.325],[-15.72,-51.98],[24.971,61.365],[-20.999,-0.667]],"c":true}]},{"t":100,"s":[{"i":[[0,0],[-1.359,-0.09],[-5.833,-15.399],[11.666,7.333],[6.833,32.667]],"o":[[0,0],[3.171,0.21],[8.334,22],[-11.667,-7.334],[-6.834,-32.666]],"v":[[-32.667,-70],[-30.497,-70.27],[-15.333,-52],[21.001,66.667],[-20.999,-0.667]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.438999998803,0.380000005984,0.463000009574,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[61,143.545]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[1,22],[17,19],[-7,-13],[-4,-33],[-21.248,-14.628]],"o":[[-1.079,-23.745],[-10.178,-11.376],[7,13],[4,33],[11.5,7.916]],"v":[[47,7.563],[-8,-89.77],[-41,-55.77],[-26,12.23],[19,93.23]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":45,"s":[{"i":[[19.898,36.371],[7.089,17.797],[-7,-13],[-4,-33],[-28.358,-8.672]],"o":[[-14.292,-26.124],[-5.649,-14.181],[7,13],[4,33],[13.351,4.083]],"v":[[50.035,7.244],[-9.309,-87.923],[-41,-55.77],[-26,12.23],[30.422,77.266]],"c":true}]},{"t":100,"s":[{"i":[[1,22],[17,19],[-7,-13],[-4,-33],[-21.248,-14.628]],"o":[[-1.079,-23.745],[-10.178,-11.376],[7,13],[4,33],[11.5,7.916]],"v":[[47,7.563],[-8,-89.77],[-41,-55.77],[-26,12.23],[19,93.23]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317999985639,0.250999989229,0.340999977261,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[63,116.982]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"browe","parent":1,"sr":1,"ks":{"p":{"a":0,"k":[91.297,12.085,0]},"a":{"a":0,"k":[63.694,23.139,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":19,"s":[{"i":[[3.904,0.985],[-4.273,-0.119],[-3.051,-3.041],[-0.671,-3.881],[1.679,-3.651],[1.806,2.552],[1.843,1.804],[2.47,1.309]],"o":[[2.677,-3.02],[4.285,0.094],[3.092,3.036],[0.656,3.898],[-2.497,-3.193],[-1.778,-2.548],[-1.848,-1.812],[-2.48,-1.325]],"v":[[-15.956,-2.474],[-4.937,-6.893],[6.735,-1.755],[12.368,9.059],[11.044,20.526],[5.037,11.902],[-0.292,5.357],[-6.545,0.776]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[3.904,0.985],[-4.273,-0.119],[-3.051,-3.041],[-0.671,-3.881],[1.679,-3.651],[1.806,2.552],[1.843,1.804],[2.47,1.309]],"o":[[2.677,-3.02],[4.285,0.094],[3.092,3.036],[0.656,3.898],[-2.497,-3.193],[-1.778,-2.548],[-1.848,-1.812],[-2.48,-1.325]],"v":[[-11.733,-16.371],[-0.714,-20.79],[10.958,-15.652],[16.591,-4.838],[15.267,6.629],[9.26,-1.995],[3.931,-8.54],[-2.322,-13.121]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":75,"s":[{"i":[[3.904,0.985],[-4.273,-0.119],[-3.051,-3.041],[-0.671,-3.881],[1.679,-3.651],[1.806,2.552],[1.843,1.804],[2.47,1.309]],"o":[[2.677,-3.02],[4.285,0.094],[3.092,3.036],[0.656,3.898],[-2.497,-3.193],[-1.778,-2.548],[-1.848,-1.812],[-2.48,-1.325]],"v":[[-11.733,-16.371],[-0.714,-20.79],[10.958,-15.652],[16.591,-4.838],[15.267,6.629],[9.26,-1.995],[3.931,-8.54],[-2.322,-13.121]],"c":true}]},{"t":80,"s":[{"i":[[3.904,0.985],[-4.273,-0.119],[-3.051,-3.041],[-0.671,-3.881],[1.679,-3.651],[1.806,2.552],[1.843,1.804],[2.47,1.309]],"o":[[2.677,-3.02],[4.285,0.094],[3.092,3.036],[0.656,3.898],[-2.497,-3.193],[-1.778,-2.548],[-1.848,-1.812],[-2.48,-1.325]],"v":[[-15.956,-2.474],[-4.937,-6.893],[6.735,-1.755],[12.368,9.059],[11.044,20.526],[5.037,11.902],[-0.292,5.357],[-6.545,0.776]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.067000003889,0.027000000898,0.086000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[112.887,31.951]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0.806,-0.356],[-0.272,0.808],[-0.429,0.72],[-1.226,1.085],[-3.332,0.582],[-3.14,-1.565],[-1.131,-1.275],[-0.389,-1.719],[1.365,-0.006],[1.152,-0.115],[2.18,-0.355],[2.471,-0.449],[0,0],[0.729,-0.147]],"o":[[-0.147,-0.878],[0.27,-0.826],[0.863,-1.45],[2.472,-2.141],[3.311,-0.574],[1.557,0.786],[1.109,1.306],[-1.782,-0.038],[-1.364,0.019],[-2.287,0.193],[-2.175,0.362],[0,0],[-0.69,0.116],[-0.719,0.171]],"v":[[-14.926,6.735],[-14.62,4.111],[-13.545,1.785],[-10.353,-1.986],[-1.491,-6.161],[8.609,-4.855],[12.714,-1.765],[15.074,2.735],[10.469,2.607],[6.739,2.793],[0.214,3.691],[-6.698,4.955],[-10.57,5.665],[-12.662,6.074]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.067000003889,0.027000000898,0.086000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[15.324,6.985]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"eye R closed","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":77,"s":[0]},{"t":78,"s":[100]}]},"p":{"a":0,"k":[114.362,76.994,0]},"a":{"a":0,"k":[50.774,38.871,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":19,"s":[{"i":[[-20.555,-27.688],[0.654,0.277],[36.721,-5.441],[0.259,1.49]],"o":[[0.426,0.573],[-8.064,-3.405],[-1.731,0.286],[-1.047,-6.006]],"v":[[36.722,13.173],[35.885,14.238],[-32.455,-1.642],[-36.101,-2.091]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-21.797,1.882],[0.486,-0.167],[10.773,18.711],[-0.274,-0.172]],"o":[[0.839,0.403],[-7.115,4.407],[-2.216,-3.849],[10.576,22.542]],"v":[[33.082,15.738],[32.009,18.317],[-35.783,4.352],[-34.917,-0.614]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":39,"s":[{"i":[[-1.986,-0.344],[0.306,-0.641],[14.716,47.168],[-0.844,-1.948]],"o":[[1.28,0.222],[-6.1,12.756],[-0.694,-2.225],[22.999,53.054]],"v":[[29.193,18.479],[27.865,22.677],[-36.796,1.496],[-34.86,-2.052]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":70,"s":[{"i":[[-1.986,-0.344],[0.306,-0.641],[14.716,47.168],[-0.844,-1.948]],"o":[[1.28,0.222],[-6.1,12.756],[-0.694,-2.225],[22.999,53.054]],"v":[[29.193,18.479],[27.865,22.677],[-36.796,1.496],[-34.86,-2.052]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-21.797,1.882],[0.486,-0.167],[10.773,18.711],[-0.274,-0.172]],"o":[[0.839,0.403],[-7.115,4.407],[-2.216,-3.849],[10.576,22.542]],"v":[[33.082,15.738],[32.009,18.317],[-35.783,4.352],[-34.917,-0.614]],"c":true}]},{"t":80,"s":[{"i":[[-20.555,-27.688],[0.654,0.277],[36.721,-5.441],[0.259,1.49]],"o":[[0.426,0.573],[-8.064,-3.405],[-1.731,0.286],[-1.047,-6.006]],"v":[[36.722,13.173],[35.885,14.238],[-32.455,-1.642],[-36.101,-2.091]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[52.147,27.854]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":19,"s":[{"i":[[25,0],[-17.787,5.711],[-8.761,-9.663]],"o":[[-30.266,0],[25.543,-8.201],[9.605,10.594]],"v":[[7.029,22.538],[-27.346,-14.337],[35.529,-3.42]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[25,0],[-12.093,-5.6],[-17.585,11.825]],"o":[[-30.266,0],[19.383,13.979],[5.767,4.477]],"v":[[7.029,22.538],[-28.403,-8.57],[36.594,0.145]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":39,"s":[{"i":[[25,0],[-6.008,-17.689],[-20.726,25.677]],"o":[[-30.266,0],[12.799,37.684],[1.664,-2.062]],"v":[[7.029,22.538],[-28.396,-12.858],[37.732,3.956]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":70,"s":[{"i":[[25,0],[-6.008,-17.689],[-20.726,25.677]],"o":[[-30.266,0],[12.799,37.684],[1.664,-2.062]],"v":[[7.029,22.538],[-28.396,-12.858],[37.732,3.956]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[25,0],[-12.093,-5.6],[-17.585,11.825]],"o":[[-30.266,0],[19.383,13.979],[5.767,4.477]],"v":[[7.029,22.538],[-28.403,-8.57],[36.594,0.145]],"c":true}]},{"t":80,"s":[{"i":[[25,0],[-17.787,5.711],[-8.761,-9.663]],"o":[[-30.266,0],[25.543,-8.201],[9.605,10.594]],"v":[[7.029,22.538],[-27.346,-14.337],[35.529,-3.42]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.948999980852,0.913999968884,0.925,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[45.383,39.464]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[50.329,41.267]},"a":{"a":0,"k":[50.329,41.267]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"eye R open","parent":1,"sr":1,"ks":{"p":{"a":0,"k":[115.656,65.054,0]},"a":{"a":0,"k":[44.404,41.45,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.762},"o":{"x":0.333,"y":0},"t":19,"s":[{"i":[[1.25,-1.938],[4.625,-0.063],[-11.5,3.438]],"o":[[-1.25,1.938],[-4.625,0.063],[11.5,-3.438]],"v":[[81.561,40.083],[69.748,42.896],[70.436,52.396]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.238},"t":23.199,"s":[{"i":[[0.692,-0.789],[2.948,0.007],[-5.577,0.064]],"o":[[-0.708,0.877],[-2.829,0.045],[7.701,-2.862]],"v":[[77.631,41.586],[70.57,42.943],[71.053,48.706]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":26.699,"s":[{"i":[[0.082,0.468],[1.112,0.084],[0.908,-3.629]],"o":[[-0.115,-0.284],[-0.862,0.025],[3.541,-2.232]],"v":[[73.329,43.23],[71.47,42.995],[69.374,52.487]],"c":true}]},{"i":{"x":0.833,"y":0.633},"o":{"x":0.167,"y":0},"t":79,"s":[{"i":[[0.082,0.468],[1.112,0.084],[0.908,-3.629]],"o":[[-0.115,-0.284],[-0.862,0.025],[3.541,-2.232]],"v":[[73.329,43.23],[71.47,42.995],[69.374,52.487]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.367},"t":81,"s":[{"i":[[0.692,-0.789],[2.948,0.007],[-5.577,0.064]],"o":[[-0.708,0.877],[-2.829,0.045],[7.701,-2.862]],"v":[[77.631,41.586],[70.57,42.943],[71.053,48.706]],"c":true}]},{"t":84,"s":[{"i":[[1.25,-1.938],[4.625,-0.063],[-11.5,3.438]],"o":[[-1.25,1.938],[-4.625,0.063],[11.5,-3.438]],"v":[[81.561,40.083],[69.748,42.896],[70.436,52.396]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.149019607843,0.090196078431,0.176470588235,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":19,"s":[{"i":[[-6.094,5.6],[-17.909,-0.943],[-3.25,-5.875],[16.623,0.761]],"o":[[4.625,-4.25],[13.745,0.724],[2.961,5.352],[-22.114,-1.013]],"v":[[-28.276,0.524],[5.599,-10.079],[28.849,3.649],[3.812,-5.34]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[{"i":[[-1.248,8.182],[-21.537,-3.172],[0.675,-6.079],[16.623,0.761]],"o":[[1.125,-7.375],[19.921,2.934],[-0.675,6.079],[-22.114,-1.013]],"v":[[-29.026,-2.351],[7.729,-24.95],[29.599,3.649],[4.389,27.361]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":74,"s":[{"i":[[-1.248,8.182],[-21.537,-3.172],[0.675,-6.079],[16.623,0.761]],"o":[[1.125,-7.375],[19.921,2.934],[-0.675,6.079],[-22.114,-1.013]],"v":[[-29.026,-2.351],[7.729,-24.95],[29.599,3.649],[4.389,27.361]],"c":true}]},{"t":84,"s":[{"i":[[-6.094,5.6],[-17.909,-0.943],[-3.25,-5.875],[16.623,0.761]],"o":[[4.625,-4.25],[13.745,0.724],[2.961,5.352],[-22.114,-1.013]],"v":[[-28.276,0.524],[5.599,-10.079],[28.849,3.649],[3.812,-5.34]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[42.774,40.622]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.762},"o":{"x":0.333,"y":0},"t":19,"s":[{"i":[[41.875,4.125],[-5.625,5.25],[-13.75,-0.5],[-5.25,-8.375],[8,0.125],[-0.5,-6.5],[-31.5,6.875]],"o":[[-41.875,-4.125],[5.625,-5.25],[13.75,0.5],[-6.875,-13],[-8,-0.125],[0.5,6.5],[31.5,-6.875]],"v":[[51.373,11.896],[10.248,44.646],[45.491,30.825],[69.123,47.896],[41.784,34.116],[8.248,46.646],[57.873,73.646]],"c":true}]},{"i":{"x":0.833,"y":0.762},"o":{"x":0.167,"y":0.238},"t":23.199,"s":[{"i":[[41.875,4.125],[-5.625,5.25],[-24.89,-0.067],[-3.768,-8.65],[12.124,0.214],[0.475,-3.189],[-31.5,6.875]],"o":[[-41.875,-4.125],[5.625,-5.25],[21.279,1.376],[-5.609,-1.715],[-14.124,-1.368],[-0.961,6.448],[31.5,-6.875]],"v":[[51.373,11.896],[10.248,44.646],[46.529,25.979],[73.579,48.269],[42.759,45.329],[8.248,46.646],[57.873,73.646]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.238},"t":26.699,"s":[{"i":[[41.875,4.125],[-4.175,6.463],[-22.366,-1.384],[2.66,-9.833],[17.895,0.338],[-0.5,-6.5],[-31.5,6.875]],"o":[[-41.875,-4.125],[5.701,-8.825],[19.013,1.136],[-2.056,3.375],[-22.692,-3.108],[0.5,6.5],[31.5,-6.875]],"v":[[51.373,11.896],[10.248,44.646],[47.459,21.34],[70.49,48.244],[44.191,57.316],[8.248,46.646],[57.873,73.646]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":33,"s":[{"i":[[41.875,4.125],[-5.625,5.25],[-31.574,-2.328],[2.108,-9.741],[15.633,-1.377],[-0.5,-6.5],[-31.5,6.875]],"o":[[-41.875,-4.125],[5.625,-5.25],[24.637,1.817],[-2.406,7.753],[-20.224,1.781],[0.5,6.5],[31.5,-6.875]],"v":[[51.373,11.896],[10.248,44.646],[48.499,15.613],[71.952,48.615],[46.789,68.732],[8.248,46.646],[57.873,73.646]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":74,"s":[{"i":[[41.875,4.125],[-5.625,5.25],[-31.574,-2.328],[2.108,-9.741],[15.633,-1.377],[-0.5,-6.5],[-31.5,6.875]],"o":[[-41.875,-4.125],[5.625,-5.25],[24.637,1.817],[-2.406,7.753],[-20.224,1.781],[0.5,6.5],[31.5,-6.875]],"v":[[51.373,11.896],[10.248,44.646],[48.499,15.613],[71.952,48.615],[46.789,68.732],[8.248,46.646],[57.873,73.646]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[41.875,4.125],[-4.425,6.295],[-22.366,-1.384],[3.223,-5.158],[17.895,0.338],[-0.5,-6.5],[-31.5,6.875]],"o":[[-41.875,-4.125],[4.794,-6.82],[22.57,1.897],[-2.056,3.375],[-22.692,-3.108],[0.5,6.5],[31.5,-6.875]],"v":[[51.373,11.896],[10.248,44.646],[47.238,21.797],[70.49,48.244],[44.156,54.518],[8.248,46.646],[57.873,73.646]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[41.875,4.125],[-5.625,5.25],[-21.281,-1.086],[-4.352,-8.542],[10.498,0.179],[-0.5,-6.5],[-31.5,6.875]],"o":[[-41.875,-4.125],[5.625,-5.25],[21.05,1.074],[-3.375,-4.354],[-20.928,1.053],[0.5,6.5],[31.5,-6.875]],"v":[[51.373,11.896],[10.248,44.646],[45.756,27.766],[74.451,49.491],[45.494,40.579],[9.077,48.743],[57.873,73.646]],"c":true}]},{"t":84,"s":[{"i":[[41.875,4.125],[-5.625,5.25],[-13.75,-0.5],[-5.25,-8.375],[8,0.125],[-0.5,-6.5],[-31.5,6.875]],"o":[[-41.875,-4.125],[5.625,-5.25],[13.75,0.5],[-6.875,-13],[-8,-0.125],[0.5,6.5],[31.5,-6.875]],"v":[[51.373,11.896],[10.248,44.646],[45.491,30.825],[69.123,47.896],[41.784,34.116],[8.248,46.646],[57.873,73.646]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019607843,0.913725490196,0.925490196078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.604,-3.044],[2.992,1.578],[-1.605,3.044],[-2.992,-1.578]],"o":[[-1.604,3.044],[-2.993,-1.577],[1.605,-3.044],[2.993,1.577]],"v":[[5.419,2.856],[-2.905,5.512],[-5.418,-2.856],[2.906,-5.511]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.987999949736,0.987999949736,0.987999949736,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[55.961,41.093]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.15,-5.978],[5.875,3.098],[-3.151,5.978],[-5.875,-3.097]],"o":[[-3.151,5.977],[-5.876,-3.098],[3.151,-5.977],[5.876,3.098]],"v":[[10.64,5.608],[-5.705,10.823],[-10.639,-5.609],[5.705,-10.823]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[42.998,45.646]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.638,-8.796],[8.648,4.559],[-4.638,8.797],[-8.647,-4.559]],"o":[[-4.638,8.796],[-8.647,-4.558],[4.637,-8.796],[8.648,4.558]],"v":[[15.657,8.254],[-8.397,15.927],[-15.657,-8.254],[8.396,-15.927]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.224000010771,0.741000007181,0.969000004787,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[42.998,45.646]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.736,8.093],[-21.434,-3.774],[0.675,-6.078],[19.841,1.319]],"o":[[1.066,-4.972],[21.993,3.874],[-0.675,6.08],[-19.556,-1.301]],"v":[[-30.552,-1.841],[8.287,-25.121],[31.614,2.62],[3.278,27.576]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.987999949736,0.987999949736,0.987999949736,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[43.885,40.407]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"eye L","parent":1,"sr":1,"ks":{"p":{"a":0,"k":[12.887,32.795,0]},"a":{"a":0,"k":[20.137,19.359,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[10.468,4.469],[-0.565,3.893],[-2.429,-23.587],[0.491,0.77]],"o":[[-8.042,-3.442],[1.037,-7.151],[0.094,0.908],[-5.974,-9.366]],"v":[[-5.84,-5.944],[-17.423,-10.526],[17.894,16.352],[16.298,16.908]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[21.507,17.966]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.417,7.333],[10,-0.334],[0,-3]],"o":[[8,3],[-4.568,-9.805],[-10,0.333],[0,3]],"v":[[10.292,12.333],[16.292,3.333],[-7.708,-14.999],[-19.708,-9.667]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.948999980852,0.913999968884,0.925,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[19.958,24.897]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[16.031,0],[1.005,2.494],[0.257,-1.046],[-4.474,-1.491]],"o":[[3,-10],[-5.985,0],[-0.402,-0.999],[-1.169,4.769],[12,4]],"v":[[12.383,15.782],[-0.909,-11.801],[-11.402,-14.783],[-13.531,-14.606],[-10.909,-1.801]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[26.159,16.032]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"nose","parent":1,"sr":1,"ks":{"p":{"a":0,"k":[44.266,62.819,0]},"a":{"a":0,"k":[31.895,25.428,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.98,-5.569],[-3.148,-1.474],[-4.21,4.321],[5.95,1.986]],"o":[[-5.326,-10.492],[-2.699,7.588],[3.15,1.475],[4.124,-4.234],[-6.688,-2.232]],"v":[[-0.87,-3.81],[-16.367,-6.586],[-6.793,12.827],[14.942,9.459],[12.32,-3.394]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.517999985639,0.097999999102,0.317999985639,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.847000002394,0.39199999641,0.611999990426,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[31.566,26.802]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-2.305,1.963],[-13.254,-8.275],[0.668,0.234],[7.118,-4.211]],"o":[[6.574,-5.61],[0.603,0.376],[-14.536,-5.112],[-2.707,1.602]],"v":[[-14.745,0.825],[16.448,1.811],[15.935,2.881],[-11.797,4.862]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[30.726,14.376]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"mouth","parent":1,"sr":1,"ks":{"p":{"a":0,"k":[35.082,113.25,0]},"a":{"a":0,"k":[38.091,44.721,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":35,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":45,"s":[94,106,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":80,"s":[94,106,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":90,"s":[110,90,100]},{"t":105,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[10.203,6.005],[-1.149,-0.299],[-3.818,2.432],[-2.016,-2.478]],"o":[[-1.032,-0.607],[4.568,1.192],[2.753,-1.665],[3.343,4.11]],"v":[[-11.311,1.249],[-10.527,-0.643],[2.089,-2.645],[9,-4.776]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[3.837,-13.554],[-2.5,7.537],[-3.548,3.386],[-0.991,-2.915]],"o":[[-0.484,0.526],[1.291,-3.892],[2.753,-1.665],[1.401,2.886]],"v":[[-6.592,18.515],[-8.145,11.669],[1.698,-3.279],[9,-4.776]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[3.484,-13.441],[-0.69,4.518],[-3.499,3.559],[-0.805,-2.995]],"o":[[-0.385,0.731],[1.561,-4.328],[2.753,-1.665],[1.05,2.665]],"v":[[-4.552,17.288],[-6.529,10.799],[1.627,-3.394],[9,-4.776]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[2.416,-17.375],[-0.534,6.157],[-3.39,3.943],[-0.393,-3.17]],"o":[[-0.165,1.186],[0.538,-6.206],[2.753,-1.665],[0.269,2.173]],"v":[[-1.405,18.556],[-4.664,13.52],[1.47,-3.649],[9,-4.776]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[2.416,-17.375],[-0.534,6.157],[-3.39,3.943],[-0.393,-3.17]],"o":[[-0.165,1.186],[0.538,-6.206],[2.753,-1.665],[0.269,2.173]],"v":[[-1.405,18.556],[-4.664,13.52],[1.47,-3.649],[9,-4.776]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[3.484,-13.441],[-0.69,4.518],[-3.499,3.559],[-0.805,-2.995]],"o":[[-0.385,0.731],[1.561,-4.328],[2.753,-1.665],[1.05,2.665]],"v":[[-4.552,17.288],[-6.529,10.799],[1.627,-3.394],[9,-4.776]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[3.837,-13.554],[-2.5,7.537],[-3.548,3.386],[-0.991,-2.915]],"o":[[-0.484,0.526],[1.291,-3.892],[2.753,-1.665],[1.401,2.886]],"v":[[-6.592,18.515],[-8.145,11.669],[1.698,-3.279],[9,-4.776]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[10.203,6.005],[-1.149,-0.299],[-3.818,2.432],[-2.016,-2.478]],"o":[[-1.032,-0.607],[4.568,1.192],[2.753,-1.665],[3.343,4.11]],"v":[[-11.311,1.249],[-10.527,-0.643],[2.089,-2.645],[9,-4.776]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[10.203,6.005],[-1.149,-0.299],[-3.818,2.432],[-2.016,-2.478]],"o":[[-1.032,-0.607],[4.568,1.192],[2.753,-1.665],[3.343,4.11]],"v":[[-7.877,1.746],[-7.092,-0.146],[2.089,-2.645],[9,-4.776]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[10.203,6.005],[-1.149,-0.299],[-3.818,2.432],[-2.016,-2.478]],"o":[[-1.032,-0.607],[4.568,1.192],[2.753,-1.665],[3.343,4.11]],"v":[[-11.311,1.249],[-10.527,-0.643],[2.089,-2.645],[9,-4.776]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[10.203,6.005],[-1.149,-0.299],[-3.818,2.432],[-2.016,-2.478]],"o":[[-1.032,-0.607],[4.568,1.192],[2.753,-1.665],[3.343,4.11]],"v":[[-11.311,1.249],[-10.527,-0.643],[2.089,-2.645],[9,-4.776]],"c":true}]},{"t":105,"s":[{"i":[[10.203,6.005],[-1.149,-0.299],[-3.818,2.432],[-2.016,-2.478]],"o":[[-1.032,-0.607],[4.568,1.192],[2.753,-1.665],[3.343,4.11]],"v":[[-11.311,1.249],[-10.527,-0.643],[2.089,-2.645],[9,-4.776]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[35.864,8.423]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-15.394,-15.632],[2.347,0.88],[5.217,0.4],[-0.036,0],[-7.125,-0.125],[1.765,3.851],[-0.748,-1]],"o":[[1.838,1.866],[-2.957,-0.263],[-1.83,-0.101],[-3.682,0.04],[-4.514,-2.527],[-2.247,-4.915],[1.624,2.171]],"v":[[9.884,7.541],[7.338,11.536],[-4.069,10.146],[-8.04,10.086],[3.402,6.903],[-8.83,-7.224],[-8.257,-11.416]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[-16.24,-13.855],[1.025,-0.204],[2.047,0.45],[1.151,0.735],[1.171,1.235],[1.765,3.851],[-0.748,-1]],"o":[[5.159,2.307],[-1.025,0.204],[-1.85,-0.406],[-0.778,-0.497],[-3.141,-1.765],[-2.247,-4.915],[1.624,2.171]],"v":[[14.294,8.435],[18.033,11.47],[12.523,11.037],[6.857,8.314],[2.836,5.002],[-6.558,-6.601],[-5.665,-10.675]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[-18.86,-8.351],[-1.325,-0.349],[5.852,-0.709],[4.242,1.826],[1.256,1.441],[1.829,3.821],[0.032,-0.225]],"o":[[15.448,3.672],[1.695,0.404],[-5.839,0.741],[-3.983,-1.684],[-2.935,-2.249],[-1.645,-3.436],[1.624,2.171]],"v":[[27.955,11.204],[51.167,11.266],[37.552,15.631],[19.983,12.914],[10.717,7.368],[0.481,-4.673],[2.803,-7.567]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-20.859,-4.056],[-3.088,-0.458],[8.57,-2.196],[8.307,3.026],[1.32,1.597],[1.765,3.851],[-0.748,-1]],"o":[[21.544,4.19],[3.735,0.554],[-8.209,2.104],[-6.47,-2.357],[-2.78,-2.611],[-2.247,-4.915],[1.624,2.171]],"v":[[38.201,13.282],[74.898,10.233],[56.324,19.076],[30.196,17.492],[15.629,9.015],[4.642,-4.356],[8.275,-8.787]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[-20.859,-4.056],[-3.088,-0.458],[8.57,-2.196],[8.307,3.026],[1.32,1.597],[1.765,3.851],[-0.748,-1]],"o":[[21.544,4.19],[3.735,0.554],[-8.209,2.104],[-6.47,-2.357],[-2.78,-2.611],[-2.247,-4.915],[1.624,2.171]],"v":[[38.201,13.282],[74.898,10.233],[56.324,19.076],[30.196,17.492],[15.629,9.015],[4.642,-4.356],[8.275,-8.787]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[-18.86,-8.351],[-1.325,-0.349],[5.852,-0.709],[4.242,1.826],[1.256,1.441],[1.829,3.821],[0.032,-0.225]],"o":[[15.448,3.672],[1.695,0.404],[-5.839,0.741],[-3.983,-1.684],[-2.935,-2.249],[-1.645,-3.436],[1.624,2.171]],"v":[[27.955,11.204],[51.167,11.266],[37.552,15.631],[19.983,12.914],[10.717,7.368],[0.481,-4.673],[2.803,-7.567]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[-16.24,-13.855],[1.025,-0.204],[2.047,0.45],[1.151,0.735],[1.171,1.235],[1.765,3.851],[-0.748,-1]],"o":[[5.159,2.307],[-1.025,0.204],[-1.85,-0.406],[-0.778,-0.497],[-3.141,-1.765],[-2.247,-4.915],[1.624,2.171]],"v":[[14.294,8.435],[18.033,11.47],[12.523,11.037],[6.857,8.314],[2.836,5.002],[-6.558,-6.601],[-5.665,-10.675]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[-15.394,-15.632],[2.347,0.88],[5.217,0.4],[-0.036,0],[-7.125,-0.125],[1.765,3.851],[-0.748,-1]],"o":[[1.838,1.866],[-2.957,-0.263],[-1.83,-0.101],[-3.682,0.04],[-4.514,-2.527],[-2.247,-4.915],[1.624,2.171]],"v":[[9.884,7.541],[7.338,11.536],[-4.069,10.146],[-8.04,10.086],[3.402,6.903],[-8.83,-7.224],[-8.257,-11.416]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":45,"s":[{"i":[[-5.096,-8.374],[2.347,0.88],[1.609,-0.119],[-0.036,0],[-7.125,-0.125],[0.611,4.46],[-0.419,-1.176]],"o":[[1.362,2.237],[-2.957,-0.263],[-1.83,-0.101],[-3.682,0.04],[-2.743,-2.686],[-0.734,-5.354],[1.376,3.858]],"v":[[-0.002,4.819],[-2.548,8.814],[-8.021,9.11],[-11.992,9.05],[-7.704,3.855],[-12.193,-7.774],[-8.257,-11.416]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[-15.394,-15.632],[2.347,0.88],[5.217,0.4],[-0.036,0],[-7.125,-0.125],[1.765,3.851],[-0.748,-1]],"o":[[1.838,1.866],[-2.957,-0.263],[-1.83,-0.101],[-3.682,0.04],[-4.514,-2.527],[-2.247,-4.915],[1.624,2.171]],"v":[[9.884,7.541],[7.338,11.536],[-4.069,10.146],[-8.04,10.086],[3.402,6.903],[-8.83,-7.224],[-8.257,-11.416]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":80,"s":[{"i":[[2.831,-14.008],[4.18,1.205],[2.903,3.906],[-1.337,-1.27],[6.062,14.467],[6.231,4.347],[-1.228,-0.224]],"o":[[-1.105,5.467],[-4.18,-1.205],[-1.125,-1.513],[12.63,12.003],[-1.746,-4.167],[-4.432,-3.092],[10.781,1.969]],"v":[[16.69,17.355],[4.53,23.304],[-5.988,15.963],[-8.04,10.086],[10.483,7.764],[-6.757,-5.861],[-9.015,-10.391]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[-0.909,-6.876],[2.955,-0.693],[2.518,2.319],[-0.686,-0.635],[2.939,7.703],[3.998,4.099],[-0.988,-0.612]],"o":[[0.357,2.702],[-2.955,0.693],[-2.518,-2.319],[5.253,4.075],[-3.749,-9.825],[-3.34,-4.004],[10.418,3.126]],"v":[[11.518,11.956],[5.934,17.42],[-5.311,14.46],[-8.04,10.086],[7.161,9.489],[-7.516,-4.502],[-5.538,-6.981]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[-15.394,-15.632],[2.347,0.88],[5.217,0.4],[-0.036,0],[-7.125,-0.125],[1.765,3.851],[-0.748,-1]],"o":[[1.838,1.866],[-2.957,-0.263],[-1.83,-0.101],[-3.682,0.04],[-4.514,-2.527],[-2.247,-4.915],[1.624,2.171]],"v":[[9.884,7.541],[7.338,11.536],[-4.069,10.146],[-8.04,10.086],[3.402,6.903],[-8.83,-7.224],[-8.257,-11.416]],"c":true}]},{"t":105,"s":[{"i":[[-15.394,-15.632],[2.347,0.88],[5.217,0.4],[-0.036,0],[-7.125,-0.125],[1.765,3.851],[-0.748,-1]],"o":[[1.838,1.866],[-2.957,-0.263],[-1.83,-0.101],[-3.682,0.04],[-4.514,-2.527],[-2.247,-4.915],[1.624,2.171]],"v":[[9.884,7.541],[7.338,11.536],[-4.069,10.146],[-8.04,10.086],[3.402,6.903],[-8.83,-7.224],[-8.257,-11.416]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[25.326,31.486]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[10.258,-3.375],[-9.607,-1.68],[2.975,0.536],[-6.896,2.144],[0.601,-1.029]],"o":[[0.521,-0.026],[1.134,0.198],[-14.084,-2.525],[5.564,-1.249],[2.187,-3.745]],"v":[[-2.798,0.26],[8.057,10.161],[6.826,14.91],[-4.012,-4.59],[4.286,-11.701]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-0.116,-6.751],[-10.685,-1.372],[2.996,0.317],[-2.222,4.723],[0.22,-2.367]],"o":[[1.846,2.009],[1.14,0.152],[-14.178,-1.494],[0.832,-5.579],[1.4,0.476]],"v":[[-1.429,-0.328],[13.527,8.814],[12.322,13.535],[-5.494,-3.009],[0.533,-15]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-4.282,-5.58],[-12.071,-0.976],[3.023,0.036],[3.787,8.039],[-0.269,-4.088]],"o":[[3.55,4.626],[1.147,0.093],[-14.299,-0.169],[-5.251,-11.146],[0.388,5.903]],"v":[[-1.669,-0.799],[20.559,7.081],[19.39,11.767],[-7.4,-0.975],[-4.293,-19.242]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[-4.282,-5.58],[-12.071,-0.976],[3.023,0.036],[3.787,8.039],[-0.269,-4.088]],"o":[[3.55,4.626],[1.147,0.093],[-14.299,-0.169],[-5.251,-11.146],[0.388,5.903]],"v":[[-1.669,-0.799],[20.559,7.081],[19.39,11.767],[-7.4,-0.975],[-4.293,-19.242]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.116,-6.751],[-10.685,-1.372],[2.996,0.317],[-2.222,4.723],[0.22,-2.367]],"o":[[1.846,2.009],[1.14,0.152],[-14.178,-1.494],[0.832,-5.579],[1.4,0.476]],"v":[[-1.429,-0.328],[13.527,8.814],[12.322,13.535],[-5.494,-3.009],[0.533,-15]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":35,"s":[{"i":[[10.258,-3.375],[-9.607,-1.68],[2.975,0.536],[-6.896,2.144],[0.601,-1.029]],"o":[[0.521,-0.026],[1.134,0.198],[-14.084,-2.525],[5.564,-1.249],[2.187,-3.745]],"v":[[-2.798,0.26],[8.057,10.161],[6.826,14.91],[-4.012,-4.59],[4.286,-11.701]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":45,"s":[{"i":[[10.258,-3.375],[-9.607,-1.68],[2.975,0.536],[-6.896,2.144],[0.601,-1.029]],"o":[[0.521,-0.026],[1.134,0.198],[-14.084,-2.525],[5.564,-1.249],[2.187,-3.745]],"v":[[-6.155,3.293],[8.057,10.161],[6.826,14.91],[-7.369,-1.558],[3.837,-7.347]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":60,"s":[{"i":[[10.258,-3.375],[-9.607,-1.68],[2.975,0.536],[-6.896,2.144],[0.601,-1.029]],"o":[[0.521,-0.026],[1.134,0.198],[-14.084,-2.525],[5.564,-1.249],[2.187,-3.745]],"v":[[-2.798,0.26],[8.057,10.161],[6.826,14.91],[-4.012,-4.59],[4.286,-11.701]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":80,"s":[{"i":[[1.393,-7.271],[-4.657,-2.941],[3.574,2.066],[-2.086,2.974],[-0.436,-1.356]],"o":[[-0.312,1.629],[0.973,0.615],[-12.387,-7.162],[2.086,-2.974],[0.436,1.356]],"v":[[1.159,-1.943],[12.854,8.333],[10.121,11.238],[-4.012,-4.59],[4.286,-11.701]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[10.258,-3.375],[-9.607,-1.68],[2.956,0.631],[-5.926,-1.672],[0.601,-1.029]],"o":[[0.521,-0.026],[1.134,0.198],[-18.736,-4.002],[5.532,1.561],[2.187,-3.745]],"v":[[-5.256,-0.876],[8.057,10.161],[6.826,14.91],[-7.343,-6.875],[4.286,-11.701]],"c":true}]},{"t":105,"s":[{"i":[[10.258,-3.375],[-9.607,-1.68],[2.975,0.536],[-6.896,2.144],[0.601,-1.029]],"o":[[0.521,-0.026],[1.134,0.198],[-14.084,-2.525],[5.564,-1.249],[2.187,-3.745]],"v":[[-2.798,0.26],[8.057,10.161],[6.826,14.91],[-4.012,-4.59],[4.286,-11.701]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[11.157,15.696]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-2.036,-20.327],[-8.366,-0.032],[-18.363,1.556],[10.924,13.307]],"o":[[2.383,23.785],[6.825,8.911],[18.363,-1.556],[-10.924,-13.307]],"v":[[3.259,1.966],[29.743,25.343],[73.71,48.538],[83.32,23.548]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019607843,0.913725490196,0.925490196078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[-8.194,0.491],[0,0]],"o":[[0,0],[3.86,-0.232],[0,0]],"v":[[-6.773,4.761],[0.981,-2.393],[6.728,3.902]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[2.201,1.759],[-4.768,0.77],[0,0]],"o":[[-2.201,-1.759],[3.818,-0.616],[0,0]],"v":[[-4.836,5.261],[-5.394,-1.83],[2.29,4.84]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[2.054,1.642],[-4.997,0.751],[0,0]],"o":[[-2.054,-1.642],[3.821,-0.591],[0,0]],"v":[[-3.153,2.04],[-4.967,-1.868],[2.587,4.777]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[2.054,1.642],[-4.997,0.751],[0,0]],"o":[[-2.054,-1.642],[3.821,-0.591],[0,0]],"v":[[-1.748,-0.634],[-4.967,-1.868],[2.587,4.777]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[2.201,1.759],[-4.768,0.77],[0,0]],"o":[[-2.201,-1.759],[3.818,-0.616],[0,0]],"v":[[-4.836,5.261],[-5.394,-1.83],[2.29,4.84]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":35,"s":[{"i":[[0,0],[-8.194,0.491],[0,0]],"o":[[0,0],[3.86,-0.232],[0,0]],"v":[[-6.773,4.761],[0.981,-2.393],[6.728,3.902]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":45,"s":[{"i":[[0,0],[-2.704,-0.654],[0,0]],"o":[[0,0],[3.759,0.909],[0,0]],"v":[[-4.962,3.552],[-6.343,-2.288],[-1.444,2.223]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":60,"s":[{"i":[[0,0],[-8.194,0.491],[0,0]],"o":[[0,0],[3.86,-0.232],[0,0]],"v":[[-6.773,4.761],[0.981,-2.393],[6.728,3.902]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":80,"s":[{"i":[[10.384,13.247],[3.772,12.379],[4.779,-13.11]],"o":[[-4.157,-5.303],[-1.127,-3.699],[-0.564,1.548]],"v":[[-3.763,9.055],[0.656,-7.872],[14.766,13.782]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[0,0],[-8.194,0.491],[0,0]],"o":[[0,0],[3.86,-0.232],[0,0]],"v":[[-6.773,4.761],[0.981,-2.393],[6.728,3.902]],"c":true}]},{"t":105,"s":[{"i":[[0,0],[-8.194,0.491],[0,0]],"o":[[0,0],[3.86,-0.232],[0,0]],"v":[[-6.773,4.761],[0.981,-2.393],[6.728,3.902]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.447000002394,0.102000000898,0.102000000898,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[23.782,36.03]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-0.083,-4.777],[5.417,-5.639],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[4.656,-4.71],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-6.153,11.467],[-5.353,-8.396],[8.798,-11.109],[-1.774,-4.906],[-0.14,8.869],[7.67,10.739],[9.92,13.592]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-0.083,-4.777],[1.752,-1.585],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[2.143,-1.157],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-6.153,11.467],[-5.353,-8.396],[2.611,-8.796],[-1.774,-4.906],[-0.14,8.869],[7.67,10.739],[9.92,13.592]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-0.083,-4.777],[2.003,-1.863],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[2.316,-1.401],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-5.402,11.469],[-5.353,-8.396],[3.035,-8.955],[-1.774,-4.906],[-0.14,8.869],[7.67,10.739],[9.92,13.592]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-0.083,-4.777],[2.129,-2.002],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[2.402,-1.522],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-4.026,9.844],[-5.353,-8.396],[3.247,-9.034],[-1.774,-4.906],[0.861,6.12],[7.67,10.739],[9.92,13.592]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-0.083,-4.777],[2.255,-2.141],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[2.488,-1.644],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-2.65,8.22],[-5.353,-8.396],[3.459,-9.113],[-1.774,-4.906],[-0.14,8.869],[7.67,10.739],[9.92,13.592]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-0.083,-4.777],[2.255,-2.141],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[2.488,-1.644],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-0.896,6.642],[-5.353,-8.396],[3.459,-9.113],[-1.774,-4.906],[1.582,6.971],[7.67,10.739],[9.92,13.592]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[2.9,2.721],[-6.346,6.521],[-0.083,-4.777],[2.129,-2.002],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[2.402,-1.522],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-4.018,9.22],[-5.353,-8.396],[3.247,-9.034],[-1.774,-4.906],[1.151,7.446],[7.67,10.739],[9.92,13.592]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-0.083,-4.777],[1.752,-1.585],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[2.143,-1.157],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-6.153,11.467],[-5.353,-8.396],[2.611,-8.796],[-1.774,-4.906],[-0.14,8.869],[7.67,10.739],[9.92,13.592]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-0.083,-4.777],[5.417,-5.639],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[4.656,-4.71],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-6.153,11.467],[-5.353,-8.396],[8.798,-11.109],[-1.774,-4.906],[-0.14,8.869],[7.67,10.739],[9.92,13.592]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":45,"s":[{"i":[[7.665,6.41],[-6.346,6.521],[-0.083,-4.777],[5.417,-5.639],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[4.656,-4.71],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-10.108,16.681],[-5.181,-5.699],[8.798,-11.109],[-1.602,-2.208],[-4.095,14.083],[3.369,9.254],[5.619,12.107]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-0.083,-4.777],[5.417,-5.639],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[4.656,-4.71],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-6.153,11.467],[-5.353,-8.396],[8.798,-11.109],[-1.774,-4.906],[-0.14,8.869],[7.67,10.739],[9.92,13.592]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":80,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-3.128,-3.612],[3.79,-4.411],[-7.455,-5.647],[-2.375,-0.833],[1,0.057]],"o":[[-5.508,-4.522],[1.627,-2.692],[2.224,2.568],[-3.982,4.06],[2.009,1.522],[4.029,1.254],[-4.481,-0.255]],"v":[[-3.872,19.16],[-7.333,-2.337],[13.194,-2.767],[-3.754,1.154],[2.141,16.562],[9.951,18.431],[12.201,21.284]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-0.083,-4.777],[5.417,-5.639],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[4.656,-4.71],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-8.475,11.923],[-7.675,-7.941],[8.798,-11.109],[-3.985,-4.431],[-2.351,9.344],[7.67,10.739],[9.92,13.592]],"c":true}]},{"t":105,"s":[{"i":[[4.772,4.418],[-6.346,6.521],[-0.083,-4.777],[5.417,-5.639],[-6.26,-2.111],[-2.375,-0.833],[1,0.057]],"o":[[-4.351,-4.234],[4.656,-4.71],[0.074,4.288],[-3.982,4.06],[2.39,0.799],[4.029,1.254],[-4.481,-0.255]],"v":[[-6.153,11.467],[-5.353,-8.396],[8.798,-11.109],[-1.774,-4.906],[-0.14,8.869],[7.67,10.739],[9.92,13.592]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.643,40.835]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[17.694,45.337],"to":[3.346,-4.578],"ti":[-3.346,4.578]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":10,"s":[37.77,17.871],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":25,"s":[37.77,17.871],"to":[-3.346,4.578],"ti":[3.346,-4.578]},{"t":35,"s":[17.694,45.337]}]},"a":{"a":0,"k":[17.694,45.337]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-4.518,-5.656],[-1.641,-2.504],[0.211,0.215],[3.144,3.906]],"o":[[0,0],[0.673,1.12],[1.554,1.575],[-4.909,-5.93]],"v":[[0.919,-2.758],[2.987,4.551],[4.897,6.838],[-1.543,4.12]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-4.518,-5.656],[-2.12,-1.954],[0.211,0.215],[3.144,3.906]],"o":[[0,0],[2.12,1.954],[1.554,1.575],[-4.909,-5.93]],"v":[[-1.566,-5.52],[3.366,3.802],[10.009,8.61],[-1.543,4.12]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[-4.518,-5.656],[-2.12,-1.954],[0.211,0.215],[3.144,3.906]],"o":[[0,0],[2.12,1.954],[1.554,1.575],[-4.909,-5.93]],"v":[[-1.566,-5.52],[3.366,3.802],[10.009,8.61],[-1.543,4.12]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":35,"s":[{"i":[[-4.518,-5.656],[-1.641,-2.504],[0.211,0.215],[3.144,3.906]],"o":[[0,0],[0.673,1.12],[1.554,1.575],[-4.909,-5.93]],"v":[[0.919,-2.758],[2.987,4.551],[4.897,6.838],[-1.543,4.12]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":45,"s":[{"i":[[-2.268,-2.926],[-1.579,-4.511],[0.211,0.215],[5.102,1.75]],"o":[[0,0],[0.673,1.12],[1.554,1.575],[-5.102,-1.75]],"v":[[-2.921,-1.106],[2.987,4.551],[2.519,5.994],[-4.294,2.955]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[-4.518,-5.656],[-1.641,-2.504],[0.211,0.215],[3.144,3.906]],"o":[[0,0],[0.673,1.12],[1.554,1.575],[-4.909,-5.93]],"v":[[0.919,-2.758],[2.987,4.551],[4.897,6.838],[-1.543,4.12]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":80,"s":[{"i":[[-4.518,-5.656],[-1.641,-2.504],[0.211,0.215],[3.144,3.906]],"o":[[0,0],[0.673,1.12],[1.554,1.575],[-4.909,-5.93]],"v":[[-0.536,4.221],[1.533,11.53],[3.443,13.817],[-2.997,11.099]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[-4.518,-5.656],[-1.641,-2.504],[0.211,0.215],[3.144,3.906]],"o":[[0,0],[0.673,1.12],[1.554,1.575],[-4.909,-5.93]],"v":[[0.919,-2.758],[2.987,4.551],[4.897,6.838],[-1.543,4.12]],"c":true}]},{"t":105,"s":[{"i":[[-4.518,-5.656],[-1.641,-2.504],[0.211,0.215],[3.144,3.906]],"o":[[0,0],[0.673,1.12],[1.554,1.575],[-4.909,-5.93]],"v":[[0.919,-2.758],[2.987,4.551],[4.897,6.838],[-1.543,4.12]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[17.84,55.727]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"ear R","parent":28,"sr":1,"ks":{"p":{"a":0,"k":[326.561,103.226,0]},"a":{"a":0,"k":[73.794,102.718,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-8.384,-0.988],[-2.33,-63.067],[4,9]],"o":[[8.514,-14.316],[8.384,0.987],[0.612,16.55],[0,0]],"v":[[-29.691,-13.157],[3.189,-46.225],[29.079,30.663],[7.292,28.288]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[44.691,62.213]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-14,-17]],"o":[[15,3],[0,0]],"v":[[-2.5,-38.5],[1.5,38.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[52.483,55.001]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.144,-20.125],[-8.852,-5.401],[-1.856,11.197],[3.614,17.643]],"o":[[4.544,4.964],[-4.143,20.124],[8.85,5.4],[1.857,-11.197],[-3.613,-17.643]],"v":[[-10.756,-46.593],[-7.601,-10.445],[-5.412,33.083],[12.407,35.396],[6.71,-17.301]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317999985639,0.250999989229,0.340999977261,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[60.825,61.569]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[5.431,8.375],[-8.383,-0.987],[-2.33,-63.067]],"o":[[8.528,-10.901],[8.383,0.988],[1.308,35.402]],"v":[[-30.039,-22.078],[5.029,-56.158],[28.732,21.742]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.541000007181,0.455000005984,0.573000021542,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[45.039,71.133]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":3,"nm":"Null 2","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":12},"p":{"a":0,"k":[287.811,339.011,0]},"a":{"a":0,"k":[50,50,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":5,"s":[100,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]},"t":45,"s":[103,97,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]},"t":75,"s":[97,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":95,"s":[103,97,100]},{"t":120,"s":[100,100,100]}]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"head","parent":27,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.569],"y":[0.038]},"t":5,"s":[-12]},{"i":{"x":[0.415],"y":[1.029]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[-22]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":75,"s":[-12]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":95,"s":[-22]},{"t":120,"s":[-12]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.569,"y":0},"t":2,"s":[73.83,-76.055,0],"to":[-8.534,0.03,0],"ti":[0.291,1.77,0]},{"i":{"x":0.415,"y":1},"o":{"x":0.333,"y":0},"t":42,"s":[59.761,-67.09,0],"to":[-0.291,-1.77,0],"ti":[-7.931,4.822,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":72,"s":[72.084,-86.674,0],"to":[1.59,-0.967,0],"ti":[-0.291,-1.77,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":92,"s":[59.761,-67.09,0],"to":[0.291,1.77,0],"ti":[1.861,-0.007,0]},{"t":117,"s":[73.83,-76.055,0]}]},"a":{"a":0,"k":[175.828,150.007,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[-7.757,37.124],[8.483,12.743],[33.421,-43.443],[21.766,-1.513],[7.1,-28.053],[-34.941,-37.761],[-11.174,88.362],[-37.879,-6.729],[-0.095,0.176],[-31.014,-58.505],[0,0],[14.241,-72.739],[-6.274,8.083]],"o":[[15.132,-80.993],[-34.437,-50.783],[-3.133,3.566],[-21.38,1.487],[-9.893,39.09],[10.577,12.163],[9.103,-71.845],[0.657,0.117],[26.393,-49.26],[0,0],[18.343,13.531],[-13.369,61.603],[16.807,-21.652]],"v":[[151.669,45.461],[120.64,-58.1],[-65.864,-77.467],[-100.43,-76.305],[-144.99,-26.303],[-112.398,104.376],[-154.982,-10.318],[-70.914,-81.08],[-70.335,-81.317],[127.425,-58.144],[126.56,-59.162],[158.173,46.77],[112.167,122.494]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":40,"s":[{"i":[[-7.757,37.124],[8.483,12.743],[33.421,-43.443],[21.766,-1.513],[4.256,-36.267],[-30.211,-32.649],[-10.213,88.478],[-27.783,-18.484],[-0.095,0.176],[-31.014,-58.505],[0,0],[14.241,-72.739],[-6.274,8.083]],"o":[[15.132,-80.993],[-34.437,-50.783],[-5.773,7.066],[-25.413,1.767],[-4.314,36.76],[10.577,12.163],[8.852,-76.684],[0.556,0.37],[26.393,-49.26],[0,0],[18.343,13.531],[-13.369,61.603],[16.807,-21.652]],"v":[[151.669,45.461],[120.64,-58.1],[-65.864,-77.467],[-100.728,-82.604],[-147.748,-17.722],[-112.398,104.376],[-154.126,-16.168],[-70.914,-81.08],[-70.335,-81.317],[127.425,-58.144],[126.56,-59.162],[158.173,46.77],[112.167,122.494]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":70,"s":[{"i":[[-7.757,37.124],[8.483,12.743],[33.421,-43.443],[22.815,-4.317],[7.097,-28.054],[-29.159,-28.84],[-4.11,84.085],[-38.304,1.543],[-0.095,0.176],[-31.014,-58.505],[0,0],[14.241,-72.739],[-6.274,8.083]],"o":[[15.132,-80.993],[-34.437,-50.783],[-3.133,3.566],[-21.058,3.984],[-11.568,45.726],[10.577,12.163],[3.536,-72.333],[0.667,-0.027],[26.393,-49.26],[0,0],[18.343,13.531],[-13.369,61.603],[16.807,-21.652]],"v":[[151.669,45.461],[120.64,-58.1],[-65.864,-77.467],[-100.626,-71.441],[-148.288,-23.678],[-113.806,103.623],[-158.728,-1.603],[-70.914,-81.08],[-70.335,-81.317],[127.425,-58.144],[126.56,-59.162],[158.173,46.77],[112.167,122.494]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[-7.757,37.124],[8.483,12.743],[33.421,-43.443],[21.766,-1.513],[4.256,-36.267],[-30.211,-32.649],[-10.213,88.478],[-27.783,-18.484],[-0.095,0.176],[-31.014,-58.505],[0,0],[14.241,-72.739],[-6.274,8.083]],"o":[[15.132,-80.993],[-34.437,-50.783],[-5.773,7.066],[-25.413,1.767],[-4.314,36.76],[10.577,12.163],[8.852,-76.684],[0.556,0.37],[26.393,-49.26],[0,0],[18.343,13.531],[-13.369,61.603],[16.807,-21.652]],"v":[[151.669,45.461],[120.64,-58.1],[-65.864,-77.467],[-100.728,-82.604],[-147.748,-17.722],[-112.398,104.376],[-154.126,-16.168],[-70.914,-81.08],[-70.335,-81.317],[127.425,-58.144],[126.56,-59.162],[158.173,46.77],[112.167,122.494]],"c":true}]},{"t":115,"s":[{"i":[[-7.757,37.124],[8.483,12.743],[33.421,-43.443],[21.766,-1.513],[7.1,-28.053],[-34.941,-37.761],[-11.174,88.362],[-37.879,-6.729],[-0.095,0.176],[-31.014,-58.505],[0,0],[14.241,-72.739],[-6.274,8.083]],"o":[[15.132,-80.993],[-34.437,-50.783],[-3.133,3.566],[-21.38,1.487],[-9.893,39.09],[10.577,12.163],[9.103,-71.845],[0.657,0.117],[26.393,-49.26],[0,0],[18.343,13.531],[-13.369,61.603],[16.807,-21.652]],"v":[[151.669,45.461],[120.64,-58.1],[-65.864,-77.467],[-100.43,-76.305],[-144.99,-26.303],[-112.398,104.376],[-154.982,-10.318],[-70.914,-81.08],[-70.335,-81.317],[127.425,-58.144],[126.56,-59.162],[158.173,46.77],[112.167,122.494]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[172.914,130.827]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[14,54],[4.444,4.955],[34.368,-32.605],[60,57],[5.808,10.261],[-20.215,-19.205],[-39,37]],"o":[[-1.285,-4.957],[6.329,47.928],[-39,37],[-9.629,-9.147],[5.076,22.27],[60,57],[39,-37]],"v":[[144.152,-85.831],[134.574,-101.169],[90.818,27.502],[-135.182,9.502],[-158.152,-19.802],[-121.848,44.169],[104.152,62.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.819999964097,0.74900004069,0.769000004787,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[181.598,191.84]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.833,-2.167],[-19.334,0.834],[17,1.667]],"o":[[-22.5,0.333],[-4.834,2.166],[19.333,-0.833],[-17,-1.666]],"v":[[-5.458,-5.521],[-39.916,0.021],[7.084,4.687],[27.75,-3.813]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.987999949736,0.987999949736,0.987999949736,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[183.333,35.655]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[17,-23],[-60,-57],[-39,37],[14,54],[0,0],[73,8]],"o":[[-26,-2],[-17,23],[60,57],[39,-37],[-3.654,-14.094],[0,0],[-78.17,-8.566]],"v":[[-66.25,-98.217],[-132.25,-81.217],[-109.75,77.783],[111.75,97.283],[155.75,-45.217],[127.75,-77.217],[33.75,-126.217]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":40,"s":[{"i":[[0,0],[17,-23],[-60,-57],[-39,37],[14,54],[0,0],[73,8]],"o":[[-21.525,-11.852],[-17,23],[60,57],[39,-37],[-3.654,-14.094],[0,0],[-78.17,-8.566]],"v":[[-66.25,-98.217],[-130.836,-87.743],[-109.75,77.783],[111.75,97.283],[155.75,-45.217],[127.75,-77.217],[33.75,-126.217]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":70,"s":[{"i":[[0,0],[17,-23],[-57.731,-43.104],[-39,37],[14,54],[0,0],[73,8]],"o":[[-24.615,-2.505],[-17,23],[66.314,49.512],[39,-37],[-3.654,-14.094],[0,0],[-78.17,-8.566]],"v":[[-66.25,-98.217],[-140.677,-66.566],[-109.75,77.783],[111.75,97.283],[155.75,-45.217],[127.75,-77.217],[33.75,-126.217]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[0,0],[17,-23],[-60,-57],[-39,37],[14,54],[0,0],[73,8]],"o":[[-21.525,-11.852],[-17,23],[60,57],[39,-37],[-3.654,-14.094],[0,0],[-78.17,-8.566]],"v":[[-66.25,-98.217],[-130.836,-87.743],[-109.75,77.783],[111.75,97.283],[155.75,-45.217],[127.75,-77.217],[33.75,-126.217]],"c":true}]},{"t":115,"s":[{"i":[[0,0],[17,-23],[-60,-57],[-39,37],[14,54],[0,0],[73,8]],"o":[[-26,-2],[-17,23],[60,57],[39,-37],[-3.654,-14.094],[0,0],[-78.17,-8.566]],"v":[[-66.25,-98.217],[-132.25,-81.217],[-109.75,77.783],[111.75,97.283],[155.75,-45.217],[127.75,-77.217],[33.75,-126.217]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.948999980852,0.913999968884,0.925,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[170,151.226]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"ear L","parent":28,"sr":1,"ks":{"p":{"a":0,"k":[192.291,30.766,0]},"a":{"a":0,"k":[86.998,57.532,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-9.095,-14.043]],"o":[[9.581,30.312],[0,0]],"v":[[-3.436,-30.542],[2.95,30.542]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[61.699,46.215]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[5.857,0.673],[-23.668,-30.971]],"o":[[-8.132,-22.162],[-5.857,-0.672],[23.669,30.97]],"v":[[35.349,-10.926],[7.914,-52.801],[-11.681,22.503]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.149000010771,0.090000002992,0.176000004189,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[50.348,68.473]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.383,9.068],[-0.078,-3.404]],"o":[[1.704,-11.734],[10.745,4.364],[0.078,3.404]],"v":[[-14.265,31.038],[-14.276,-31.038],[14.198,12.608]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317999985639,0.250999989229,0.340999977261,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[72.8,49.412]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[5.857,0.673],[-23.668,-30.971]],"o":[[-8.132,-22.162],[-5.857,-0.672],[23.669,30.97]],"v":[[35.349,-10.926],[7.914,-52.801],[-11.681,22.503]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.541000007181,0.455000005984,0.573000021542,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[50.348,68.473]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"neck","sr":1,"ks":{"p":{"a":0,"k":[338.345,409.653,0]},"a":{"a":0,"k":[161.669,147.644,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":2,"s":[100,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]},"t":42,"s":[103,97,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]},"t":72,"s":[97,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":92,"s":[103,97,100]},{"t":120,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.381,-0.905],[10.284,-27.252],[34.027,-15.556],[-0.905,0.653],[-10.166,27.433],[24.062,15.756],[-0.891,1.362]],"o":[[26.373,17.266],[-10.304,28.396],[-1.034,0.474],[27.897,-20.172],[9.347,-24.506],[-1.414,-0.925],[0.906,-1.382]],"v":[[3.203,-58.085],[26.866,13.038],[-35.302,58.516],[-36.245,56.915],[21.253,10.978],[-0.063,-53.077],[-0.936,-57.222]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[291.254,59.24]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0.682,0.395],[15.347,32.96],[-0.949,-1.273],[-11.486,-18.784],[0.895,1]],"o":[[-32.358,-18.752],[-0.689,-1.481],[15.381,20.602],[4.645,7.557],[0.523,0.584]],"v":[[18.695,39.303],[-19.765,-37.046],[-17.495,-38.425],[6.315,21.575],[19.559,38.242]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[20.704,82.895]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23,15],[0,0],[0,0],[0,0],[24,-17.375],[-9.775,9.164],[-14,36]],"o":[[0,0],[0,0],[0,0],[44.333,7.666],[16.5,5.25],[48,-45],[11.581,-29.781]],"v":[[43.71,-73.582],[-52.547,-60.97],[-68.29,-52.582],[-77.29,0.418],[-62.665,65.543],[-26.29,64.418],[65.71,-4.582]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.819999964097,0.74900004069,0.769000004787,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[249.114,77.241]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-1.024,-17.807],[-36,-3.834],[6.167,6.5],[41.167,12.167]],"o":[[2.167,37.667],[36,3.833],[-6.166,-6.5],[-34.276,-10.13]],"v":[[-69.988,-22.18],[3.179,36.154],[64.845,10.82],[-16.488,-3.68]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":40,"s":[{"i":[[-2.605,-17.645],[-36,-3.834],[6.167,6.5],[38.152,9.528]],"o":[[3.491,23.649],[36,3.833],[-6.166,-6.5],[-34.677,-8.66]],"v":[[-64.888,-8.014],[-2.893,35.124],[55.859,12.623],[-16.245,4.305]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":70,"s":[{"i":[[-1.024,-17.807],[-36,-3.834],[6.167,6.5],[41.167,12.167]],"o":[[2.167,37.667],[36,3.833],[-6.166,-6.5],[-34.276,-10.13]],"v":[[-69.988,-22.18],[3.179,36.154],[64.845,10.82],[-16.488,-3.68]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[-2.605,-17.645],[-36,-3.834],[6.167,6.5],[38.152,9.528]],"o":[[3.491,23.649],[36,3.833],[-6.166,-6.5],[-34.677,-8.66]],"v":[[-64.888,-8.014],[-2.893,35.124],[55.859,12.623],[-16.245,4.305]],"c":true}]},{"t":115,"s":[{"i":[[-1.024,-17.807],[-36,-3.834],[6.167,6.5],[41.167,12.167]],"o":[[2.167,37.667],[36,3.833],[-6.166,-6.5],[-34.276,-10.13]],"v":[[-69.988,-22.18],[3.179,36.154],[64.845,10.82],[-16.488,-3.68]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.987999949736,0.987999949736,0.987999949736,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[109.312,94.505]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[11.581,-29.78],[48,-45],[33,26],[15,25]],"o":[[23,15],[-14,36],[-33.726,31.616],[-32.52,-25.622],[0,0]],"v":[[128.96,-73.308],[150.96,-4.308],[55.626,41.692],[-124.04,44.692],[-162.54,-34.975]],"c":false}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.948999980852,0.913999968884,0.925,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[163.864,76.967]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"body","sr":1,"ks":{"p":{"a":0,"k":[336.91,498.263,0]},"a":{"a":0,"k":[160.66,196.596,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,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]},"t":40,"s":[103,97,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]},"t":70,"s":[97,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":90,"s":[103,97,100]},{"t":117,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[5,-9]],"o":[[25.13,-47.91],[0,0],[0,0]],"v":[[125.436,48.632],[133.435,-48.632],[-150.565,-28.632]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[176.815,63.632]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0.165,-17.083],[6.74,-1.296],[0.425,1.477],[-6.682,21.544],[-0.518,-0.16]],"o":[[-0.455,46.656],[-1.538,0.296],[-6.116,-21.534],[0.161,-0.518],[1.376,0.427]],"v":[[-0.565,-18.478],[1.853,36.903],[-1.602,34.775],[-1.911,-36.391],[-0.682,-37.038]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[11.935,116.928]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.432,3.581],[-32.508,23.877],[0.782,-0.856],[-16.566,-47.916]],"o":[[-16.339,-41.075],[0.934,-0.687],[-20.147,22.104],[1.299,3.754]],"v":[[-6.777,42.277],[21.05,-45.171],[22.335,-43.744],[-1.17,40.141]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[212.224,141.791]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.5,16],[0,0],[8,-22.5],[0,0]],"o":[[-8.167,-16],[-0.5,-16],[0,0],[-8,22.5],[0,0]],"v":[[20.084,33.083],[11.916,-5.917],[18.251,-43.25],[-12.084,-5.584],[-7.249,43.25]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.948999980852,0.913999968884,0.925,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[215.666,140.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-23.723,7.742],[0,0],[54.204,-2.708],[0,0],[29.5,-25],[5.5,-17],[1.542,-18.312]],"o":[[144,-47],[0,0],[0,0],[21,5.5],[-29.5,25],[-4.868,15.048],[19.215,-1.335]],"v":[[-31.569,77.47],[70.431,-90.531],[-28.808,-86.048],[-48.569,-66.531],[-46.694,-8.906],[-88.569,35.47],[-95.931,90.531]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.819999964097,0.74900004069,0.769000004787,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[239.819,105.531]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[5,-9],[-13,-54],[-133.963,43.724],[0,0]],"o":[[-9.713,17.482],[0,0],[144,-47],[0,0]],"v":[[-141.75,-77.667],[-154.75,38.334],[40.25,70.334],[142.25,-97.667]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.948999980852,0.913999968884,0.925,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[168,112.667]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"hand","sr":1,"ks":{"p":{"a":0,"k":[180.099,310.667,0]},"a":{"a":0,"k":[63.599,15,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[3,-15],[-25,2],[-7,3]],"o":[[-18,4],[-3,15],[25,-2],[7,-3]],"v":[[14,-71],[-27,-35],[-21,69],[39,2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[5.862,-12.632],[-28.202,-0.477],[-11.611,10.258]],"o":[[-18,4],[-15.681,16.622],[40.721,0.854],[6.424,-3.757]],"v":[[14,-71],[-34.301,-39.355],[-24.221,56.979],[37.975,-0.818]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[9.542,-9.589],[-32.32,-3.661],[-17.54,19.591]],"o":[[-18,4],[-31.985,18.708],[28.853,2.952],[5.682,-4.729]],"v":[[14,-71],[-43.689,-44.955],[-33.506,44.951],[36.658,-4.441]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":45,"s":[{"i":[[0,0],[14.172,-5.759],[-37.5,-7.667],[-25,31.333]],"o":[[-18,4],[-52.5,21.333],[31.579,6.456],[4.75,-5.953]],"v":[[14,-71],[-55.5,-52],[-51.75,37.75],[35,-9]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[0,0],[11.574,-7.907],[-34.594,-5.419],[-20.815,24.745]],"o":[[-18,4],[-40.991,19.861],[30.05,4.49],[5.273,-5.266]],"v":[[14,-71],[-48.874,-48.047],[-38.35,43.516],[35.93,-6.442]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":80,"s":[{"i":[[0,0],[6.751,-11.897],[-29.197,-1.246],[-13.044,12.514]],"o":[[-18,4],[-19.621,17.126],[35.591,2.732],[6.244,-3.992]],"v":[[14,-71],[-36.57,-40.708],[-22.841,52.851],[37.657,-1.694]],"c":true}]},{"t":100,"s":[{"i":[[0,0],[3,-15],[-25,2],[-7,3]],"o":[[-18,4],[-3,15],[25,-2],[7,-3]],"v":[[14,-71],[-27,-35],[-21,69],[39,2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[61,86]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.833,12.083],[5.334,-3.167],[0,0]],"o":[[11.333,-2.584],[-1.834,-12.084],[-5.333,3.167],[0,0]],"v":[[-5.833,19.292],[16.833,-7.208],[2.999,-13.875],[-18.667,4.792]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.948999980852,0.913999968884,0.925,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[53.5,35.708]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":10,"s":[{"i":[[0,0],[3,-15],[-25,2],[-7,3]],"o":[[-18,4],[-3,15],[25,-2],[7,-3]],"v":[[14,-71],[-27,-35],[-21,69],[39,2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[5.862,-12.632],[-28.202,-0.477],[-11.611,10.258]],"o":[[-18,4],[-15.681,16.622],[40.721,0.854],[6.424,-3.757]],"v":[[14,-71],[-34.301,-39.355],[-24.221,56.979],[37.975,-0.818]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[9.542,-9.589],[-32.32,-3.661],[-17.54,19.591]],"o":[[-18,4],[-31.985,18.708],[28.853,2.952],[5.682,-4.729]],"v":[[14,-71],[-43.689,-44.955],[-33.506,44.951],[36.658,-4.441]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":45,"s":[{"i":[[0,0],[14.172,-5.759],[-37.5,-7.667],[-25,31.333]],"o":[[-18,4],[-52.5,21.333],[31.579,6.456],[4.75,-5.953]],"v":[[14,-71],[-55.5,-52],[-51.75,37.75],[35,-9]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[0,0],[11.574,-7.907],[-34.594,-5.419],[-20.815,24.745]],"o":[[-18,4],[-40.991,19.861],[30.05,4.49],[5.273,-5.266]],"v":[[14,-71],[-48.874,-48.047],[-38.35,43.516],[35.93,-6.442]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":80,"s":[{"i":[[0,0],[6.751,-11.897],[-29.197,-1.246],[-13.044,12.514]],"o":[[-18,4],[-19.621,17.126],[35.591,2.732],[6.244,-3.992]],"v":[[14,-71],[-36.57,-40.708],[-22.841,52.851],[37.657,-1.694]],"c":true}]},{"t":100,"s":[{"i":[[0,0],[3,-15],[-25,2],[-7,3]],"o":[[-18,4],[-3,15],[25,-2],[7,-3]],"v":[[14,-71],[-27,-35],[-21,69],[39,2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.819999964097,0.74900004069,0.769000004787,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[61,86]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"neck 2","parent":30,"sr":1,"ks":{"p":{"a":0,"k":[31.165,93.769,0]},"a":{"a":0,"k":[55.37,109.11,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[16.958,6.358],[-1.029,-37.04],[-22,20]],"o":[[-32,-12],[1,36],[22,-20]],"v":[[12.514,-41],[-44.486,-2],[23.515,33]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.458999992819,0.322000002394,0.361000001197,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.948999980852,0.913999968884,0.925,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[60.514,68]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0}]} \ No newline at end of file diff --git a/Tests/LottieMesh/Resources/Fireworks.json b/Tests/LottieMesh/Resources/Fireworks.json new file mode 100644 index 0000000000..998fbd775c --- /dev/null +++ b/Tests/LottieMesh/Resources/Fireworks.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":180,"w":512,"h":512,"nm":"512_fireworks dop","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"fireworks !!yellow 4 vspish","refId":"comp_1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[100]},{"t":86,"s":[0]}]},"r":{"a":0,"k":-10.694},"p":{"a":0,"k":[977.5,379,0]},"a":{"a":0,"k":[243,243,0]},"s":{"a":0,"k":[80,80,100]}},"ao":0,"w":486,"h":486,"ip":36,"op":86,"st":6,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"fireworks pink 5","refId":"comp_3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":83,"s":[100]},{"t":94,"s":[0]}]},"r":{"a":0,"k":-0.087},"p":{"a":0,"k":[1279.5,464,0]},"a":{"a":0,"k":[243,243,0]}},"ao":0,"w":486,"h":486,"ip":48,"op":94,"st":18,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"fireworks !!yellow 4 vspish","refId":"comp_1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[100]},{"t":115,"s":[0]}]},"r":{"a":0,"k":23.994},"p":{"a":0,"k":[305.5,923,0]},"a":{"a":0,"k":[243,243,0]},"s":{"a":0,"k":[78.011,78.011,100]}},"ao":0,"w":486,"h":486,"ip":65,"op":115,"st":35,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"fireworks pink 5","refId":"comp_3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[100]},{"t":81,"s":[0]}]},"p":{"a":0,"k":[441.5,398,0]},"a":{"a":0,"k":[243,243,0]},"s":{"a":0,"k":[157.86,157.86,100]}},"ao":0,"w":486,"h":486,"ip":31,"op":81,"st":1,"bm":0},{"ddd":0,"ind":5,"ty":3,"nm":"Trace Shape Layer 1: Path 6 [1.1]","cl":"1","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-120.256]},{"t":29,"s":[-176.947]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[1286,792,0],"to":[-172.306,-276.404,0],"ti":[305.23,23.654,0]},{"t":29,"s":[468.343,405.178,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":10,"s":[40,40,100]},{"t":30,"s":[150,150,100]}]}},"ao":0,"ip":0,"op":30,"st":-60,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"!!!rocket pink 2","parent":5,"refId":"comp_4","sr":1,"ks":{"r":{"a":0,"k":90},"p":{"a":0,"k":[-167.855,0.94,0]},"a":{"a":0,"k":[256.94,395.855,0]}},"ao":0,"w":512,"h":512,"ip":1,"op":36,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":0,"nm":"fireworks !!yellow 4 vspish","refId":"comp_1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[100]},{"t":99,"s":[0]}]},"r":{"a":0,"k":-10.694},"p":{"a":0,"k":[633.5,1163,0]},"a":{"a":0,"k":[243,243,0]},"s":{"a":0,"k":[128.178,128.178,100]}},"ao":0,"w":486,"h":486,"ip":49,"op":99,"st":19,"bm":0},{"ddd":0,"ind":8,"ty":3,"nm":"Trace Shape Layer 1: Path 5 [1.2]","cl":"2","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[98.009]},{"t":46,"s":[185.502]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[1236,866,0],"to":[-48.547,286.872,0],"ti":[243.966,25.033,0]},{"t":46,"s":[667.754,1167.601,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":16,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,3.222]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":26,"s":[40,40,100]},{"t":46,"s":[130,130,100]}]}},"ao":0,"ip":16,"op":47,"st":-44,"bm":0},{"ddd":0,"ind":9,"ty":0,"nm":"!!!rocket yellow 2","parent":8,"refId":"comp_5","sr":1,"ks":{"r":{"a":0,"k":90},"p":{"a":0,"k":[-167.855,0.94,0]},"a":{"a":0,"k":[256.94,395.855,0]}},"ao":0,"w":512,"h":512,"ip":16,"op":52,"st":16,"bm":0},{"ddd":0,"ind":10,"ty":0,"nm":"fireworks !!blue 4 vspish","refId":"comp_6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[100]},{"t":100,"s":[0]}]},"r":{"a":0,"k":-0.087},"p":{"a":0,"k":[695.5,832,0]},"a":{"a":0,"k":[243,243,0]},"s":{"a":0,"k":[201.159,201.159,100]}},"ao":0,"w":486,"h":486,"ip":54,"op":100,"st":24,"bm":0},{"ddd":0,"ind":11,"ty":3,"nm":"Trace Shape Layer 1: Path 8 [1.8]","cl":"8","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[112.759]},{"t":51,"s":[219.154]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.82,"y":0},"t":22,"s":[1352,810,0],"to":[-138.369,305.192,0],"ti":[207.549,143.516,0]},{"t":51,"s":[705.012,835.922,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":22,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,-2.333]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":32,"s":[40,40,100]},{"t":52,"s":[180,180,100]}]}},"ao":0,"ip":22,"op":52,"st":-38,"bm":0},{"ddd":0,"ind":12,"ty":0,"nm":"!!!rocket blue 2","parent":11,"refId":"comp_7","sr":1,"ks":{"r":{"a":0,"k":90},"p":{"a":0,"k":[-167.855,0.94,0]},"a":{"a":0,"k":[256.94,395.855,0]}},"ao":0,"w":512,"h":512,"ip":22,"op":58,"st":22,"bm":0},{"ddd":0,"ind":13,"ty":0,"nm":"fireworks pink 5","refId":"comp_3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115,"s":[100]},{"t":125,"s":[0]}]},"p":{"a":0,"k":[1025.5,1230,0]},"a":{"a":0,"k":[243,243,0]},"s":{"a":0,"k":[-119.753,119.753,100]}},"ao":0,"w":486,"h":486,"ip":76,"op":125,"st":45,"bm":0},{"ddd":0,"ind":14,"ty":3,"nm":"Trace Shape Layer 1: Path 2 [1.4]","cl":"4","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[-0.702]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[56.31]},{"i":{"x":[0.667],"y":[0.756]},"o":{"x":[0.333],"y":[0.183]},"t":53,"s":[67.425]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[1.177]},"t":62,"s":[160.472]},{"t":73,"s":[184.041]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":43,"s":[1266,806,0],"to":[170.946,262.206,0],"ti":[330.742,0.419,0]},{"t":73,"s":[1052.274,1229.28,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,4.333]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":53,"s":[40,40,100]},{"t":73,"s":[120,120,100]}]}},"ao":0,"ip":43,"op":74,"st":-17,"bm":0},{"ddd":0,"ind":15,"ty":0,"nm":"!!!rocket pink 2","parent":14,"refId":"comp_4","sr":1,"ks":{"r":{"a":0,"k":90},"p":{"a":0,"k":[-167.855,0.94,0]},"a":{"a":0,"k":[256.94,395.855,0]}},"ao":0,"w":512,"h":512,"ip":43,"op":79,"st":43,"bm":0},{"ddd":0,"ind":16,"ty":0,"nm":"fireworks !!blue 4 vspish","refId":"comp_6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[100]},{"t":137,"s":[0]}]},"r":{"a":0,"k":12.326},"p":{"a":0,"k":[560.5,539,0]},"a":{"a":0,"k":[243,243,0]},"s":{"a":0,"k":[-177.976,177.976,100]}},"ao":0,"w":486,"h":486,"ip":87,"op":137,"st":57,"bm":0},{"ddd":0,"ind":17,"ty":3,"nm":"Trace Shape Layer 1: Path 7 [1.5]","cl":"5","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55,"s":[155.577]},{"t":84,"s":[228.764]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":55,"s":[1194,772,0],"to":[-257.364,110.984,0],"ti":[153.116,221.504,0]},{"t":84,"s":[574.62,567.336,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":55,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,-1.222]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":65,"s":[40,40,100]},{"t":85,"s":[170,170,100]}]}},"ao":0,"ip":55,"op":85,"st":-5,"bm":0},{"ddd":0,"ind":18,"ty":0,"nm":"!!!rocket blue 2","parent":17,"refId":"comp_7","sr":1,"ks":{"r":{"a":0,"k":90},"p":{"a":0,"k":[-167.855,0.94,0]},"a":{"a":0,"k":[256.94,395.855,0]}},"ao":0,"w":512,"h":512,"ip":55,"op":91,"st":55,"bm":0},{"ddd":0,"ind":19,"ty":0,"nm":"fireworks !!yellow 4 vspish","refId":"comp_1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":165,"s":[100]},{"t":175,"s":[0]}]},"r":{"a":0,"k":-0.478},"p":{"a":0,"k":[1038.964,328.288,0]},"a":{"a":0,"k":[243,243,0]},"s":{"a":0,"k":[132.042,132.042,100]}},"ao":0,"w":486,"h":486,"ip":125,"op":175,"st":95,"bm":0},{"ddd":0,"ind":20,"ty":3,"nm":"Trace Shape Layer 1: Path 3 [1.6]","cl":"6","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":93,"s":[-102.219]},{"t":122,"s":[-148.865]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":93,"s":[1362,740,0],"to":[-42.181,-182.712,0],"ti":[156.249,102.291,0]},{"t":122,"s":[1054.382,305.32,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":93,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":103,"s":[40,40,100]},{"t":123,"s":[130,130,100]}]}},"ao":0,"ip":93,"op":150,"st":33,"bm":0},{"ddd":0,"ind":21,"ty":0,"nm":"!!!rocket yellow 2","parent":20,"refId":"comp_5","sr":1,"ks":{"r":{"a":0,"k":90},"p":{"a":0,"k":[-167.855,0.94,0]},"a":{"a":0,"k":[256.94,395.855,0]}},"ao":0,"w":512,"h":512,"ip":93,"op":129,"st":93,"bm":0},{"ddd":0,"ind":22,"ty":0,"nm":"fireworks !!blue 4 vspish","refId":"comp_6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":170,"s":[100]},{"t":180,"s":[0]}]},"r":{"a":0,"k":11.633},"p":{"a":0,"k":[655.5,1077,0]},"a":{"a":0,"k":[243,243,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"w":486,"h":486,"ip":134,"op":180,"st":105,"bm":0},{"ddd":0,"ind":23,"ty":3,"nm":"Trace Shape Layer 1: Path 1 [1.3]","cl":"3","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.703]},"o":{"x":[0.333],"y":[0]},"t":102,"s":[59.135]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.623]},"t":112,"s":[132.595]},{"t":131,"s":[199.135]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":102,"s":[1156,836,0],"to":[208.414,207.152,0],"ti":[260.651,130.415,0]},{"t":131,"s":[655.186,1070.59,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":102,"s":[20,20,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,6.556]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":112,"s":[40,40,100]},{"t":132,"s":[100,100,100]}]}},"ao":0,"ip":102,"op":132,"st":42,"bm":0},{"ddd":0,"ind":24,"ty":0,"nm":"!!!rocket blue 2","parent":23,"refId":"comp_7","sr":1,"ks":{"r":{"a":0,"k":90},"p":{"a":0,"k":[-167.855,0.94,0]},"a":{"a":0,"k":[256.94,395.855,0]}},"ao":0,"w":512,"h":512,"ip":102,"op":138,"st":102,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"pink","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[100]},{"t":100,"s":[0]}]},"p":{"a":0,"k":[245.75,225.75,0]},"a":{"a":0,"k":[2.75,-17.25,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.629,0.629,0.629],"y":[0,0,0]},"t":30,"s":[43.235,43.235,100]},{"t":40,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.312,8.525],[3.244,0.766],[0.278,-4.348]],"o":[[-1.312,-8.525],[-5.358,-1.265],[-0.278,4.348]],"v":[[6.13,-24.571],[8.951,-66.768],[5.014,-23.638]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.55,23.061],[3.244,0.766],[0.753,-11.762]],"o":[[-3.55,-23.061],[-5.358,-1.265],[-0.753,11.762]],"v":[[11.788,-37.733],[14.47,-92.154],[8.769,-35.211]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.113,0.736],[3.244,0.766],[0.024,-0.376]],"o":[[-0.113,-0.736],[-5.358,-1.265],[-0.024,0.376]],"v":[[1.251,-14.165],[19.643,-137.56],[1.155,-14.085]],"c":true}]},{"t":100,"s":[{"i":[[0.002,0.014],[3.244,0.766],[0,-0.007]],"o":[[-0.002,-0.014],[-5.358,-1.265],[0,0.007]],"v":[[29.568,-215.114],[32.47,-250.154],[29.566,-215.113]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.775,14.209],[6.351,4.603],[2.652,-16.185]],"o":[[0.775,-14.209],[-4.056,-2.94],[-2.652,16.185]],"v":[[7.231,-23.969],[18.873,-61.186],[6.13,-24.571]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-2.096,38.439],[6.351,4.603],[7.173,-43.783]],"o":[[2.096,-38.439],[-4.056,-2.94],[-7.173,43.783]],"v":[[14.767,-36.105],[37.637,-108.647],[11.788,-37.733]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.067,1.227],[6.351,4.603],[0.229,-1.398]],"o":[[0.067,-1.227],[-4.056,-2.94],[-0.229,1.398]],"v":[[1.932,-14.242],[49.85,-146.868],[1.837,-14.294]],"c":true}]},{"t":100,"s":[{"i":[[-0.001,0.023],[6.351,4.603],[0.004,-0.026]],"o":[[0.001,-0.023],[-4.056,-2.94],[-0.004,0.026]],"v":[[75.069,-225.113],[80.137,-241.647],[75.068,-225.114]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.749,6.829],[6.31,5.609],[1.359,-6.48]],"o":[[-0.749,-6.829],[-3.554,-3.159],[-1.359,6.48]],"v":[[8.596,-23.217],[31.24,-73.607],[7.231,-23.969]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[2.026,18.473],[6.31,5.609],[3.677,-17.531]],"o":[[-2.026,-18.473],[-3.554,-3.159],[-3.677,17.531]],"v":[[18.46,-34.07],[47.481,-104.355],[14.767,-36.105]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.065,0.59],[6.31,5.609],[0.117,-0.56]],"o":[[-0.065,-0.59],[-3.554,-3.159],[-0.117,0.56]],"v":[[2.166,-13.836],[63.43,-142.576],[2.048,-13.901]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0.011],[6.31,5.609],[0.002,-0.011]],"o":[[-0.001,-0.011],[-3.554,-3.159],[-0.002,0.011]],"v":[[84.072,-198.612],[102.981,-237.355],[84.069,-198.613]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.199,15.089],[5.581,6.595],[12.758,-17.563]],"o":[[6.199,-15.089],[-2.72,-3.214],[-12.758,17.563]],"v":[[9.486,-22.203],[48.882,-61.987],[8.281,-23.532]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-16.769,40.819],[5.581,6.595],[34.513,-47.512]],"o":[[16.769,-40.819],[-2.72,-3.214],[-34.513,47.512]],"v":[[21.719,-30.475],[103.282,-109.764],[18.46,-34.07]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.535,1.303],[5.581,6.595],[1.102,-1.517]],"o":[[0.535,-1.303],[-2.72,-3.214],[-1.102,1.517]],"v":[[3.204,-13.341],[122.823,-131.604],[3.099,-13.456]],"c":true}]},{"t":100,"s":[{"i":[[-0.01,0.025],[5.581,6.595],[0.021,-0.029]],"o":[[0.01,-0.025],[-2.72,-3.214],[-0.021,0.029]],"v":[[156.574,-169.11],[171.282,-185.764],[156.572,-169.112]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.223,9.945],[2.258,6.104],[6.726,-10.205]],"o":[[4.223,-9.945],[-1.817,-4.912],[-6.726,10.205]],"v":[[11.177,-20.424],[48.778,-58.677],[9.801,-21.888]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-11.423,26.904],[2.258,6.104],[18.195,-27.606]],"o":[[11.423,-26.904],[-1.817,-4.912],[-18.195,27.606]],"v":[[25.439,-26.516],[74.48,-79.649],[21.719,-30.475]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.365,0.859],[2.258,6.104],[0.581,-0.882]],"o":[[0.365,-0.859],[-1.817,-4.912],[-0.581,0.882]],"v":[[3.264,-12.932],[105.66,-107.524],[3.146,-13.058]],"c":true}]},{"t":100,"s":[{"i":[[-0.007,0.016],[2.258,6.104],[0.011,-0.017]],"o":[[0.007,-0.016],[-1.817,-4.912],[-0.011,0.017]],"v":[[152.076,-147.108],[182.98,-176.649],[152.074,-147.11]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":5,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-3.334,6.648],[-1.799,5.518],[9.673,-9.931]],"o":[[3.334,-6.648],[1.878,-5.758],[-9.673,9.931]],"v":[[12.897,-19.193],[48.972,-44.204],[11.177,-20.424]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-9.018,17.983],[-1.799,5.518],[26.167,-26.865]],"o":[[9.018,-17.983],[1.878,-5.758],[-26.167,26.865]],"v":[[30.094,-23.186],[81.927,-62.022],[25.439,-26.516]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.288,0.574],[-1.799,5.518],[0.836,-0.858]],"o":[[0.288,-0.574],[1.878,-5.758],[-0.836,0.858]],"v":[[3.883,-12.491],[120.292,-83.862],[3.734,-12.597]],"c":true}]},{"t":100,"s":[{"i":[[-0.005,0.011],[-1.799,5.518],[0.016,-0.016]],"o":[[0.005,-0.011],[1.878,-5.758],[-0.016,0.016]],"v":[[188.579,-121.106],[215.427,-138.022],[188.576,-121.108]],"c":true}]}]},"nm":"Path 6","hd":false},{"ind":6,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-9.869,8.704],[-3.432,7.058],[12.009,-7.852]],"o":[[9.869,-8.704],[2.981,-6.13],[-12.009,7.852]],"v":[[12.832,-16.628],[74.374,-42.527],[12.897,-19.193]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-26.696,23.547],[-3.432,7.058],[32.485,-21.24]],"o":[[26.696,-23.547],[2.981,-6.13],[-32.485,21.24]],"v":[[29.916,-16.247],[117.42,-56.876],[30.094,-23.186]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.852,0.752],[-3.432,7.058],[1.037,-0.678]],"o":[[0.852,-0.752],[2.981,-6.13],[-1.037,0.678]],"v":[[3.897,-11.786],[151.618,-69.521],[3.902,-12.008]],"c":true}]},{"t":100,"s":[{"i":[[-0.016,0.014],[-3.432,7.058],[0.02,-0.013]],"o":[[0.016,-0.014],[2.981,-6.13],[-0.02,0.013]],"v":[[190.079,-83.601],[236.42,-100.876],[190.079,-83.606]],"c":true}]}]},"nm":"Path 7","hd":false},{"ind":7,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-14.199,3.553],[-2.249,4.962],[22.38,-4.873]],"o":[[22.287,-5.577],[4.049,-8.935],[-22.38,4.873]],"v":[[10.861,-15.141],[88.919,-15.854],[12.516,-16.944]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-38.412,9.611],[-2.249,4.962],[60.542,-13.183]],"o":[[60.291,-15.085],[4.049,-8.935],[-60.542,13.183]],"v":[[25.439,-11.372],[154.986,-15.381],[29.916,-16.247]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-1.227,0.307],[-2.249,4.962],[1.933,-0.421]],"o":[[1.925,-0.482],[4.049,-8.935],[-1.933,0.421]],"v":[[3.934,-10.704],[182.862,-13.944],[4.077,-10.859]],"c":true}]},{"t":100,"s":[{"i":[[-0.023,0.006],[-2.249,4.962],[0.036,-0.008]],"o":[[0.036,-0.009],[4.049,-8.935],[-0.036,0.008]],"v":[[204.076,-11.599],[251.986,-10.381],[204.079,-11.601]],"c":true}]}]},"nm":"Path 8","hd":false},{"ind":8,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.711,2.16],[-0.839,0.958],[12.251,-0.88]],"o":[[4.711,-2.16],[1.348,-1.539],[-12.251,0.88]],"v":[[9.079,-12.869],[39.383,-12.388],[10.861,-14.826]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-12.744,5.843],[-0.839,0.958],[33.14,-2.38]],"o":[[12.744,-5.843],[1.348,-1.539],[-33.14,2.38]],"v":[[20.619,-6.076],[78.015,-8.131],[25.439,-11.372]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.407,0.187],[-0.839,0.958],[1.058,-0.076]],"o":[[0.407,-0.187],[1.348,-1.539],[-1.058,0.076]],"v":[[4.224,-10.251],[128.305,-2.239],[4.378,-10.421]],"c":true}]},{"t":100,"s":[{"i":[[-0.008,0.004],[-0.839,0.958],[0.02,-0.001]],"o":[[0.008,-0.004],[1.348,-1.539],[-0.02,0.001]],"v":[[238.573,10.405],[253.015,12.369],[238.576,10.401]],"c":true}]}]},"nm":"Path 9","hd":false},{"ind":9,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-19.702,-2.401],[-2.482,3.154],[14.29,0.398]],"o":[[19.702,2.401],[2.595,-3.297],[-14.29,-0.398]],"v":[[9.698,-12.307],[64.597,6.088],[9.395,-13.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-53.298,-6.494],[-2.482,3.154],[38.657,1.077]],"o":[[53.298,6.494],[2.595,-3.297],[-38.657,-1.077]],"v":[[21.439,-3.705],[93.137,16.968],[20.619,-6.076]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-1.702,-0.207],[-2.482,3.154],[1.234,0.034]],"o":[[1.702,0.207],[2.595,-3.297],[-1.234,-0.034]],"v":[[3.71,-9.493],[135.812,35.216],[3.683,-9.569]],"c":true}]},{"t":100,"s":[{"i":[[-0.032,-0.004],[-2.482,3.154],[0.023,0.001]],"o":[[0.032,0.004],[2.595,-3.297],[-0.023,-0.001]],"v":[[196.573,63.406],[241.637,80.468],[196.573,63.405]],"c":true}]}]},"nm":"Path 10","hd":false},{"ind":10,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-9.253,-3.386],[-5.064,4.293],[16.792,8.51]],"o":[[9.253,3.386],[4.126,-3.498],[-16.792,-8.51]],"v":[[11.313,-9.614],[54.159,17.809],[9.698,-11.992]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-25.032,-9.16],[-5.064,4.293],[45.426,23.022]],"o":[[25.032,9.16],[4.126,-3.498],[-45.426,-23.022]],"v":[[25.808,2.729],[103.197,50.764],[21.439,-3.705]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.799,-0.292],[-5.064,4.293],[1.451,0.735]],"o":[[0.799,0.292],[4.126,-3.498],[-1.451,-0.735]],"v":[[3.881,-8.702],[137.251,71.886],[3.742,-8.908]],"c":true}]},{"t":100,"s":[{"i":[[-0.015,-0.006],[-5.064,4.293],[0.027,0.014]],"o":[[0.015,0.006],[4.126,-3.498],[-0.027,-0.014]],"v":[[199.076,108.91],[221.697,124.264],[199.073,108.906]],"c":true}]}]},"nm":"Path 11","hd":false},{"ind":11,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.526,-3.215],[-3.502,3.162],[9.671,6.481]],"o":[[6.526,3.215],[3.502,-3.162],[-9.671,-6.481]],"v":[[10.491,-8.994],[73.057,40.569],[11.313,-9.929]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-17.653,-8.697],[-3.502,3.162],[26.163,17.532]],"o":[[17.653,8.697],[3.502,-3.162],[-26.163,-17.532]],"v":[[23.585,5.258],[96.236,63.117],[25.808,2.729]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.564,-0.278],[-3.502,3.162],[0.835,0.56]],"o":[[0.564,0.278],[3.502,-3.162],[-0.835,-0.56]],"v":[[3.102,-8.57],[126.267,90.274],[3.173,-8.651]],"c":true}]},{"t":100,"s":[{"i":[[-0.011,-0.005],[-3.502,3.162],[0.016,0.011]],"o":[[0.011,0.005],[3.502,-3.162],[-0.016,-0.011]],"v":[[144.075,112.911],[200.736,157.617],[144.076,112.91]],"c":true}]}]},"nm":"Path 12","hd":false},{"ind":12,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-13.475,-10.482],[-4.458,3.463],[10.073,7.849]],"o":[[13.475,10.482],[4.458,-3.463],[-10.073,-7.849]],"v":[[9.502,-7.951],[52.87,45.892],[10.491,-8.678]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-36.453,-28.355],[-4.458,3.463],[27.249,21.233]],"o":[[36.453,28.355],[4.458,-3.463],[-27.249,-21.233]],"v":[[20.909,7.226],[94.655,93.669],[23.585,5.258]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-1.164,-0.905],[-4.458,3.463],[0.87,0.678]],"o":[[1.164,0.905],[4.458,-3.463],[-0.87,-0.678]],"v":[[3.049,-7.986],[116.926,120.825],[3.134,-8.049]],"c":true}]},{"t":100,"s":[{"i":[[-0.022,-0.017],[-4.458,3.463],[0.016,0.013]],"o":[[0.022,0.017],[4.458,-3.463],[-0.016,-0.013]],"v":[[146.573,153.413],[172.155,188.169],[146.575,153.411]],"c":true}]}]},"nm":"Path 13","hd":false},{"ind":13,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.775,-3.087],[-3.488,2.449],[10.229,14.193]],"o":[[4.775,3.087],[3.488,-2.449],[-10.229,-14.193]],"v":[[7.167,-8.135],[48.091,56.332],[9.187,-7.951]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-12.917,-8.352],[-3.488,2.449],[27.671,38.395]],"o":[[12.917,8.352],[3.488,-2.449],[-27.671,-38.395]],"v":[[15.445,6.729],[62.124,74.78],[20.909,7.226]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.412,-0.267],[-3.488,2.449],[0.884,1.226]],"o":[[0.412,0.267],[3.488,-2.449],[-0.884,-1.226]],"v":[[2.321,-8.079],[84.827,113.576],[2.495,-8.063]],"c":true}]},{"t":100,"s":[{"i":[[-0.008,-0.005],[-3.488,2.449],[0.017,0.023]],"o":[[0.008,0.005],[3.488,-2.449],[-0.017,-0.023]],"v":[[103.57,147.412],[141.124,209.78],[103.573,147.413]],"c":true}]}]},"nm":"Path 14","hd":false},{"ind":14,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-5.362,-6.334],[-2.659,0.857],[3.694,6.735]],"o":[[5.361,6.334],[6.495,-2.093],[-3.694,-6.735]],"v":[[5.102,-9.295],[26.477,35.494],[7.167,-8.45]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-14.504,-17.136],[-2.659,0.857],[9.994,18.219]],"o":[[14.504,17.136],[6.495,-2.093],[-9.994,-18.219]],"v":[[9.859,4.445],[41.772,64.349],[15.445,6.729]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.463,-0.547],[-2.659,0.857],[0.319,0.582]],"o":[[0.463,0.547],[6.495,-2.093],[-0.319,-0.582]],"v":[[2.027,-7.553],[61.313,111.91],[2.205,-7.48]],"c":true}]},{"t":100,"s":[{"i":[[-0.009,-0.01],[-2.659,0.857],[0.006,0.011]],"o":[[0.009,0.01],[6.495,-2.093],[-0.006,-0.011]],"v":[[94.566,193.911],[109.772,229.849],[94.57,193.912]],"c":true}]}]},"nm":"Path 15","hd":false},{"ind":15,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.43,-4.038],[-5.792,0.94],[0.557,8.126]],"o":[[0.43,4.038],[3.71,-0.602],[-0.557,-8.126]],"v":[[3.69,-10.876],[17.077,55.965],[5.102,-9.295]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-1.164,-10.924],[-5.792,0.94],[1.507,21.981]],"o":[[1.164,10.924],[3.71,-0.602],[-1.507,-21.981]],"v":[[6.039,0.167],[22.28,71.891],[9.859,4.445]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.037,-0.349],[-5.792,0.94],[0.048,0.702]],"o":[[0.037,0.349],[3.71,-0.602],[-0.048,-0.702]],"v":[[1.242,-7.799],[31.62,122.9],[1.364,-7.663]],"c":true}]},{"t":100,"s":[{"i":[[-0.001,-0.007],[-5.792,0.94],[0.001,0.013]],"o":[[0.001,0.007],[3.71,-0.602],[-0.001,-0.013]],"v":[[43.064,185.408],[54.78,249.391],[43.066,185.411]],"c":true}]}]},"nm":"Path 16","hd":false},{"ind":16,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.268,-1.072],[-8.766,2.77],[-1.453,20.282]],"o":[[-0.268,1.072],[8.956,-2.83],[1.453,-20.282]],"v":[[2.258,-8.649],[11.352,48.031],[4.005,-10.876]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.726,-2.901],[-8.766,2.77],[-3.93,54.866]],"o":[[-0.726,2.901],[8.956,-2.83],[3.93,-54.866]],"v":[[1.312,6.192],[20.655,115.675],[6.039,0.167]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.023,-0.093],[-8.766,2.77],[-0.125,1.752]],"o":[[-0.023,0.093],[8.956,-2.83],[0.125,-1.752]],"v":[[0.956,-7.06],[24.966,155.333],[1.106,-7.252]],"c":true}]},{"t":100,"s":[{"i":[[0,-0.002],[-8.766,2.77],[-0.002,0.033]],"o":[[0,0.002],[8.956,-2.83],[0.002,-0.033]],"v":[[32.561,227.912],[35.655,253.675],[32.564,227.908]],"c":true}]}]},"nm":"Path 17","hd":false},{"ind":17,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.674,-5.118],[-9.34,-10.304],[-5.656,20.469]],"o":[[-0.674,5.118],[5.335,5.886],[5.656,-20.469]],"v":[[0.319,-7.862],[-7.754,79.004],[2.258,-8.649]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[1.822,-13.845],[-9.34,-10.304],[-15.299,55.372]],"o":[[-1.822,13.845],[5.335,5.886],[15.299,-55.372]],"v":[[-3.933,8.322],[-10.119,142.549],[1.312,6.192]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.058,-0.442],[-9.34,-10.304],[-0.489,1.768]],"o":[[-0.058,0.442],[5.335,5.886],[0.489,-1.768]],"v":[[0.157,-7.436],[-14.573,174.16],[0.325,-7.504]],"c":true}]},{"t":100,"s":[{"i":[[0.001,-0.008],[-9.34,-10.304],[-0.009,0.033]],"o":[[-0.001,0.008],[5.335,5.886],[0.009,-0.033]],"v":[[-16.442,193.413],[-25.619,252.549],[-16.439,193.412]],"c":true}]}]},"nm":"Path 18","hd":false},{"ind":18,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.134,-4.491],[-8.529,-8.273],[-6.696,18.034]],"o":[[-1.134,4.491],[3.166,3.071],[6.696,-18.034]],"v":[[-1.761,-9.64],[-13.598,51.106],[0.003,-7.546]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.068,-12.148],[-8.529,-8.273],[-18.113,48.786]],"o":[[-3.068,12.148],[3.166,3.071],[18.113,-48.786]],"v":[[-8.707,2.658],[-24.162,110.866],[-3.933,8.322]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.098,-0.388],[-8.529,-8.273],[-0.578,1.558]],"o":[[-0.098,0.388],[3.166,3.071],[0.578,-1.558]],"v":[[-0.446,-7.378],[-34.795,149.374],[-0.293,-7.198]],"c":true}]},{"t":100,"s":[{"i":[[0.002,-0.007],[-8.529,-8.273],[-0.011,0.029]],"o":[[-0.002,0.007],[3.166,3.071],[0.011,-0.029]],"v":[[-51.445,211.91],[-61.162,244.866],[-51.442,211.913]],"c":true}]}]},"nm":"Path 19","hd":false},{"ind":19,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[9.217,-13.161],[-2.977,-4.918],[-5.725,7.174]],"o":[[-9.217,13.161],[1.721,2.843],[5.725,-7.174]],"v":[[-1.154,-12.499],[-42.53,56.34],[-1.761,-9.64]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[24.934,-35.602],[-2.977,-4.918],[-15.488,19.406]],"o":[[-24.934,35.602],[1.721,2.843],[15.488,-19.406]],"v":[[-7.064,-5.076],[-47.418,71.95],[-8.707,2.658]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.796,-1.137],[-2.977,-4.918],[-0.495,0.62]],"o":[[-0.796,1.137],[1.721,2.843],[0.495,-0.62]],"v":[[-0.876,-8.404],[-71.414,113.188],[-0.929,-8.157]],"c":true}]},{"t":100,"s":[{"i":[[0.015,-0.021],[-2.977,-4.918],[-0.009,0.012]],"o":[[-0.015,0.021],[1.721,2.843],[0.009,-0.012]],"v":[[-88.944,151.405],[-130.918,215.45],[-88.945,151.41]],"c":true}]}]},"nm":"Path 20","hd":false},{"ind":20,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[7.626,-7.899],[-8.084,-5.313],[-13.235,7.936]],"o":[[-2.855,2.957],[3.306,2.173],[10.979,-6.583]],"v":[[-4.169,-12.723],[-45.434,37.243],[-0.839,-12.499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[20.63,-21.369],[-8.084,-5.313],[-35.802,21.467]],"o":[[-7.724,8],[3.306,2.173],[29.699,-17.808]],"v":[[-16.072,-5.684],[-88.796,85.335],[-7.064,-5.076]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.659,-0.682],[-8.084,-5.313],[-1.143,0.686]],"o":[[-0.247,0.255],[3.306,2.173],[0.948,-0.569]],"v":[[-1.962,-8.308],[-113.223,114.36],[-1.674,-8.288]],"c":true}]},{"t":100,"s":[{"i":[[0.012,-0.013],[-8.084,-5.313],[-0.022,0.013]],"o":[[-0.005,0.005],[3.306,2.173],[0.018,-0.011]],"v":[[-150.949,160.405],[-173.796,186.335],[-150.944,160.405]],"c":true}]}]},"nm":"Path 21","hd":false},{"ind":21,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[14.117,-10.21],[-5.628,-14.818],[-24.822,15.796]],"o":[[-14.086,10.188],[3.081,4.733],[21.924,-13.951]],"v":[[-3.765,-15.075],[-82.448,63.651],[-4.484,-12.723]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[38.189,-27.621],[0.797,-25.979],[-67.149,42.73]],"o":[[-38.106,27.561],[-0.163,5.311],[59.307,-37.74]],"v":[[-14.127,-12.046],[-117.611,102.283],[-16.072,-5.684]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[1.219,-0.882],[-2.13,-20.894],[-2.144,1.364]],"o":[[-1.217,0.88],[1.315,5.048],[1.894,-1.205]],"v":[[-1.552,-9.148],[-137.871,121.393],[-1.614,-8.945]],"c":true}]},{"t":100,"s":[{"i":[[0.023,-0.017],[-9.389,-8.283],[-0.04,0.026]],"o":[[-0.023,0.017],[4.981,4.394],[0.036,-0.023]],"v":[[-123.948,110.901],[-188.111,168.783],[-123.949,110.905]],"c":true}]}]},"nm":"Path 22","hd":false},{"ind":22,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[2.794,-1.349],[0.656,-8.742],[-9.144,3.299]],"o":[[-0.388,0.187],[-0.279,3.717],[9.144,-3.298]],"v":[[-4.357,-15.318],[-39.206,7.131],[-3.283,-15.062]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[7.56,-3.648],[1.507,-8.661],[-24.737,8.919]],"o":[[-1.051,0.507],[-0.641,3.682],[24.737,-8.919]],"v":[[-17.032,-12.737],[-65.957,17.111],[-14.127,-12.046]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.241,-0.117],[1.12,-8.698],[-0.79,0.285]],"o":[[-0.034,0.016],[-0.476,3.698],[0.79,-0.285]],"v":[[-2.581,-9.26],[-111.172,47.264],[-2.489,-9.238]],"c":true}]},{"t":100,"s":[{"i":[[0.004,-0.003],[0.158,-8.79],[-0.014,0.008]],"o":[[-0.001,0],[-0.067,3.737],[0.014,-0.008]],"v":[[-196.685,103.922],[-223.294,122.037],[-196.683,103.922]],"c":true}]}]},"nm":"Path 23","hd":false},{"ind":23,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.652,-0.002],[9.621,-23.195],[-30.797,11.034]],"o":[[-0.652,0.002],[1.201,4.343],[30.797,-11.034]],"v":[[-5.938,-16.534],[-91.485,36.162],[-4.524,-15.646]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[1.764,-0.005],[34.94,-49.93],[-83.311,29.848]],"o":[[-1.764,0.005],[-2.448,3.499],[83.311,-29.848]],"v":[[-20.857,-15.139],[-161.337,74.163],[-17.032,-12.737]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.056,0],[23.404,-37.749],[-2.66,0.953]],"o":[[-0.056,0],[-0.786,3.883],[2.66,-0.953]],"v":[[-2.437,-9.678],[-180.879,84.077],[-2.314,-9.602]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0],[-5.203,-7.542],[-0.05,0.018]],"o":[[-0.001,0],[3.337,4.837],[0.05,-0.018]],"v":[[-175.952,77.399],[-229.337,108.663],[-175.95,77.401]],"c":true}]}]},"nm":"Path 24","hd":false},{"ind":24,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[3.079,-0.51],[0.18,-8.491],[-14.645,0.239]],"o":[[-3.079,0.51],[-0.099,4.7],[14.645,-0.239]],"v":[[-8.996,-17.288],[-60.714,-4.682],[-6.253,-16.534]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[8.33,-1.38],[0.18,-8.491],[-39.617,0.647]],"o":[[-8.33,1.38],[-0.099,4.7],[39.617,-0.647]],"v":[[-28.279,-17.178],[-119.213,6.829],[-20.857,-15.139]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.266,-0.044],[0.18,-8.491],[-1.265,0.021]],"o":[[-0.266,0.044],[-0.099,4.7],[1.265,-0.021]],"v":[[-3.288,-10.423],[-157.506,13.654],[-3.051,-10.357]],"c":true}]},{"t":100,"s":[{"i":[[0.005,-0.001],[0.18,-8.491],[-0.024,0]],"o":[[-0.005,0.001],[-0.099,4.7],[0.024,0]],"v":[[-223.707,24.648],[-252.463,30.579],[-223.702,24.649]],"c":true}]}]},"nm":"Path 25","hd":false},{"ind":25,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.002,-0.018],[4.376,-11.742],[-21.034,-0.505]],"o":[[-5.002,0.018],[-1,2.682],[21.034,0.505]],"v":[[-8.482,-18.09],[-80.041,-5.651],[-8.996,-16.972]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[13.533,-0.05],[4.376,-11.742],[-56.9,-1.366]],"o":[[-13.533,0.05],[-1,2.682],[56.9,1.366]],"v":[[-26.888,-20.202],[-133.179,-1.393],[-28.279,-17.178]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.432,-0.002],[4.376,-11.742],[-1.817,-0.044]],"o":[[-0.432,0.002],[-1,2.682],[1.817,0.044]],"v":[[-2.957,-10.802],[-167.52,2.271],[-3.002,-10.706]],"c":true}]},{"t":100,"s":[{"i":[[0.008,0],[4.376,-11.742],[-0.034,-0.001]],"o":[[-0.008,0],[-1,2.682],[0.034,0.001]],"v":[[-201.456,2.646],[-252.679,11.357],[-201.457,2.648]],"c":true}]}]},"nm":"Path 26","hd":false},{"ind":26,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[4.015,0.648],[9.285,-5.938],[-12.687,-1.577]],"o":[[-1.837,-0.296],[-5.457,3.49],[12.687,1.577]],"v":[[-7.193,-19.109],[-55.539,-18.566],[-8.167,-18.09]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[10.862,1.752],[9.285,-5.938],[-34.32,-4.266]],"o":[[-4.969,-0.802],[-5.457,3.49],[34.32,4.266]],"v":[[-24.253,-22.959],[-119.714,-21.877],[-26.888,-20.202]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.347,0.056],[9.285,-5.938],[-1.096,-0.136]],"o":[[-0.159,-0.026],[-5.457,3.49],[1.096,0.136]],"v":[[-3.256,-11.254],[-157.719,-22.883],[-3.34,-11.166]],"c":true}]},{"t":100,"s":[{"i":[[0.007,0.001],[9.285,-5.938],[-0.021,-0.003]],"o":[[-0.003,0],[-5.457,3.49],[0.021,0.003]],"v":[[-231.204,-25.606],[-251.964,-25.377],[-231.206,-25.604]],"c":true}]}]},"nm":"Path 27","hd":false},{"ind":27,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[4.393,1.499],[5.601,-5.319],[-6.035,-3.074]],"o":[[-4.393,-1.499],[-2.043,1.94],[7.22,3.678]],"v":[[-5.608,-19.397],[-48.68,-27.903],[-7.508,-19.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[11.885,4.055],[5.601,-5.319],[-16.326,-8.316]],"o":[[-11.885,-4.055],[-2.043,1.94],[19.531,9.948]],"v":[[-19.113,-23.736],[-77.851,-34.052],[-24.253,-22.959]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.38,0.13],[5.601,-5.319],[-0.521,-0.266]],"o":[[-0.38,-0.129],[-2.043,1.94],[0.624,0.318]],"v":[[-2.828,-11.723],[-125.77,-43.679],[-2.992,-11.698]],"c":true}]},{"t":100,"s":[{"i":[[0.007,0.002],[5.601,-5.319],[-0.01,-0.005]],"o":[[-0.007,-0.002],[-2.043,1.94],[0.012,0.006]],"v":[[-210.701,-60.106],[-244.601,-67.552],[-210.704,-60.106]],"c":true}]}]},"nm":"Path 28","hd":false},{"ind":28,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.221,2.81],[2.362,-11.3],[-20.382,-17.294]],"o":[[-5.221,-2.81],[-1.358,6.576],[20.382,17.294]],"v":[[-7.193,-23.937],[-71.1,-48.972],[-5.293,-19.397]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[14.123,7.602],[4.156,-15.533],[-55.138,-46.784]],"o":[[-14.123,-7.602],[-2.317,8.659],[55.138,46.784]],"v":[[-24.253,-36.018],[-168.703,-94.857],[-19.113,-23.736]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.451,0.243],[3.339,-13.604],[-1.761,-1.494]],"o":[[-0.451,-0.243],[-1.88,7.71],[1.761,1.494]],"v":[[-2.925,-12.804],[-184.078,-101.754],[-2.761,-12.412]],"c":true}]},{"t":100,"s":[{"i":[[0.008,0.005],[1.312,-8.822],[-0.033,-0.028]],"o":[[-0.008,-0.005],[-0.797,5.357],[0.033,0.028]],"v":[[-205.454,-113.613],[-222.203,-118.857],[-205.451,-113.606]],"c":true}]}]},"nm":"Path 29","hd":false},{"ind":29,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[7.26,4.445],[7.011,-4.124],[-10.385,-10.766]],"o":[[-0.326,-0.199],[-7.011,4.124],[16.897,17.517]],"v":[[-5.801,-24.959],[-56.419,-56.973],[-7.193,-23.937]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[19.64,12.023],[7.011,-4.124],[-28.094,-29.123]],"o":[[-0.881,-0.54],[-7.011,4.124],[45.711,47.385]],"v":[[-20.488,-38.784],[-98.519,-86.459],[-24.253,-36.018]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.627,0.384],[7.011,-4.124],[-0.897,-0.93]],"o":[[-0.028,-0.017],[-7.011,4.124],[1.46,1.513]],"v":[[-2.277,-13.13],[-127.401,-106.145],[-2.397,-13.042]],"c":true}]},{"t":100,"s":[{"i":[[0.012,0.007],[7.011,-4.124],[-0.017,-0.018]],"o":[[-0.001,0],[-7.011,4.124],[0.028,0.029]],"v":[[-164.452,-132.115],[-199.019,-154.959],[-164.454,-132.113]],"c":true}]}]},"nm":"Path 30","hd":false},{"ind":30,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[23.866,20.95],[-0.775,-4.182],[-8.843,-10.116]],"o":[[-23.866,-20.95],[0.799,4.308],[8.843,10.116]],"v":[[-4.127,-25.389],[-47.359,-57.266],[-6.116,-25.275]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[64.562,56.675],[-0.775,-4.182],[-23.921,-27.366]],"o":[[-64.562,-56.675],[0.799,4.308],[23.921,27.366]],"v":[[-15.108,-39.093],[-105.227,-105.674],[-20.488,-38.784]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[2.062,1.81],[-0.775,-4.182],[-0.764,-0.874]],"o":[[-2.062,-1.81],[0.799,4.308],[0.764,0.874]],"v":[[-2.169,-13.514],[-128.217,-124.928],[-2.341,-13.504]],"c":true}]},{"t":100,"s":[{"i":[[0.039,0.034],[-0.775,-4.182],[-0.014,-0.016]],"o":[[-0.039,-0.034],[0.799,4.308],[0.014,0.016]],"v":[[-169.449,-161.115],[-185.227,-172.674],[-169.452,-161.115]],"c":true}]}]},"nm":"Path 31","hd":false},{"ind":31,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.861,0.835],[6.082,-5.676],[-10.296,-14.684]],"o":[[-0.861,-0.835],[-2.893,2.699],[10.296,14.684]],"v":[[-0.366,-23.104],[-55.133,-75.787],[-4.127,-25.389]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[2.329,2.258],[6.082,-5.676],[-27.852,-39.724]],"o":[[-2.329,-2.258],[-2.893,2.699],[27.852,39.724]],"v":[[-4.933,-32.911],[-79.889,-105.589],[-15.108,-39.093]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.074,0.072],[6.082,-5.676],[-0.889,-1.268]],"o":[[-0.074,-0.072],[-2.893,2.699],[0.889,1.268]],"v":[[-1.214,-13.207],[-103.885,-130.878],[-1.539,-13.404]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0.001],[6.082,-5.676],[-0.017,-0.024]],"o":[[-0.001,-0.001],[-2.893,2.699],[0.017,0.024]],"v":[[-120.443,-152.612],[-163.389,-193.589],[-120.449,-152.615]],"c":true}]}]},"nm":"Path 32","hd":false},{"ind":32,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[3.542,19.181],[3.073,-0.981],[-0.152,-9.722]],"o":[[-3.542,-19.181],[-2.453,0.783],[0.152,9.722]],"v":[[0.539,-22.899],[-14.028,-61.928],[-0.366,-22.788]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[9.581,51.887],[3.073,-0.981],[-0.412,-26.3]],"o":[[-9.581,-51.887],[-2.453,0.783],[0.412,26.3]],"v":[[-2.483,-33.211],[-31.215,-116.327],[-4.933,-32.911]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.306,1.657],[3.073,-0.981],[-0.013,-0.84]],"o":[[-0.306,-1.657],[-2.453,0.783],[0.013,0.84]],"v":[[-0.517,-14.182],[-44.865,-152.105],[-0.596,-14.172]],"c":true}]},{"t":100,"s":[{"i":[[0.006,0.031],[3.073,-0.981],[0,-0.016]],"o":[[-0.006,-0.031],[-2.453,0.783],[0,0.016]],"v":[[-72.441,-227.612],[-78.715,-240.827],[-72.443,-227.612]],"c":true}]}]},"nm":"Path 33","hd":false},{"ind":33,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.512,3.311],[7.408,-2.515],[0.879,-9.578]],"o":[[-0.512,-3.311],[-4.274,1.451],[-0.879,9.578]],"v":[[1.755,-24.526],[-15.758,-89.049],[0.539,-22.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[1.386,8.956],[7.408,-2.515],[2.377,-25.91]],"o":[[-1.386,-8.956],[-4.274,1.451],[-2.377,25.91]],"v":[[0.805,-37.612],[-23.169,-137.772],[-2.483,-33.211]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.044,0.286],[7.408,-2.515],[0.076,-0.827]],"o":[[-0.044,-0.286],[-4.274,1.451],[-0.076,0.827]],"v":[[0.051,-14.02],[-30.928,-169.383],[-0.054,-13.879]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0.005],[7.408,-2.515],[0.001,-0.016]],"o":[[-0.001,-0.005],[-4.274,1.451],[-0.001,0.016]],"v":[[-36.439,-204.114],[-50.169,-247.772],[-36.441,-204.112]],"c":true}]}]},"nm":"Path 34","hd":false},{"ind":34,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.275,0.477],[4.481,1.632],[2.961,-6.55],[-1.425,0.478]],"o":[[-2.55,-0.954],[-6.936,-2.526],[-1.48,3.275],[1.425,-0.478]],"v":[[5.014,-23.954],[2.623,-65.932],[2.07,-24.842],[3.754,-13.991]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.449,1.291],[4.481,1.632],[8.009,-17.719],[-3.855,1.292]],"o":[[-6.899,-2.581],[-6.936,-2.526],[-4.004,8.859],[3.855,-1.292]],"v":[[8.769,-35.211],[4.357,-117.808],[0.805,-37.612],[5.361,-8.261]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.11,0.041],[4.481,1.632],[0.256,-0.566],[-0.123,0.041]],"o":[[-0.22,-0.082],[-6.936,-2.526],[-0.128,0.283],[0.123,-0.041]],"v":[[0.788,-14.342],[3.064,-156.748],[0.534,-14.419],[0.679,-13.482]],"c":true}]},{"t":100,"s":[{"i":[[0.002,0.001],[4.481,1.632],[0.005,-0.011],[-0.002,0.001]],"o":[[-0.004,-0.002],[-6.936,-2.526],[-0.002,0.005],[0.002,-0.001]],"v":[[1.066,-235.113],[-0.143,-253.308],[1.061,-235.114],[1.064,-235.097]],"c":true}]}]},"nm":"Path 35","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":7,"k":{"a":0,"k":[0.166,1,1,1,0.291,1,0.986,0.894,0.379,1,0.973,0.788,0.522,0.961,0.876,0.394,0.708,0.922,0.78,0,0.865,0.961,0.888,0.206,0.999,1,0.996,0.412,0.166,1,0.291,1,0.379,1,0.522,0.9,0.708,0.8,0.865,0.8,0.999,0.8]}},"s":{"a":0,"k":[-12,-18]},"e":{"a":0,"k":[-123.596,-129.596]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-6.793,2.506]},"a":{"a":0,"k":[-6.793,2.506]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"white splashes precomp","refId":"comp_2","sr":1,"ks":{"p":{"a":0,"k":[243,243,0]},"a":{"a":0,"k":[243,243,0]}},"ao":0,"w":486,"h":486,"ip":-4,"op":99,"st":-5,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"ogonek5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[1],"y":[0]},"t":30,"s":[100]},{"t":45,"s":[0]}]},"p":{"a":0,"k":[241,232.25,0]},"a":{"a":0,"k":[-51,43,0]},"s":{"a":1,"k":[{"i":{"x":[0,0,0],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,15.828]},"t":30,"s":[0,0,100]},{"t":45,"s":[151,151,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[164,164]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":7,"k":{"a":0,"k":[0.166,1,1,1,0.291,1,0.986,0.894,0.379,1,0.973,0.788,0.522,0.961,0.876,0.394,0.708,0.922,0.78,0,0.865,0.961,0.888,0.206,0.999,1,0.996,0.412,0.166,1,0.291,1,0.379,1,0.522,0.9,0.708,0.8,0.865,0.8,0.999,0.8]}},"s":{"a":0,"k":[1,0.5]},"e":{"a":0,"k":[-61.596,-53.096]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 7","hd":false},{"ty":"tr","p":{"a":0,"k":[-51,43]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":30,"op":45,"st":-45,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"rose splashes 80%","sr":1,"ks":{"o":{"a":0,"k":80},"p":{"a":0,"k":[283.287,244.6,0]},"a":{"a":0,"k":[40.287,1.6,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[8.458,2.584],[-1.178,1.927]],"o":[[0,0],[1.178,-1.927]],"v":[[47.396,-2.495],[66.132,8.305]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[17.915,5.472],[-2.495,4.082]],"o":[[0,0],[2.494,-4.082]],"v":[[127.416,14.655],[167.1,37.528]],"c":true}]},{"t":100,"s":[{"i":[[2.922,0.892],[-0.407,0.666]],"o":[[0,0],[0.407,-0.666]],"v":[[231.544,79.714],[238.016,83.445]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-7.371,11.75],[-2.605,-2.954]],"o":[[0,0],[2.605,2.954]],"v":[[-19.417,21.61],[-33.613,50.565]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-16.511,26.322],[-5.835,-6.617]],"o":[[0,0],[5.835,6.617]],"v":[[-54.289,78.774],[-86.09,143.637]],"c":true}]},{"t":100,"s":[{"i":[[-2.019,3.219],[-0.714,-0.809]],"o":[[0,0],[0.714,0.809]],"v":[[-120,208.391],[-123.889,216.322]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[4.272,18.752],[3.489,0]],"o":[[0,0],[-2.919,0]],"v":[[13.337,36.564],[18.266,63.997]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[9.5,41.701],[7.758,0]],"o":[[0,0],[-6.491,0]],"v":[[34.44,120.578],[45.401,181.583]],"c":true}]},{"t":100,"s":[{"i":[[1.211,5.316],[0.989,0]],"o":[[0,0],[-0.827,0]],"v":[[49.981,239.625],[51.378,247.402]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.357,10.649],[2.065,-1.671]],"o":[[0,0],[-2.092,1.693]],"v":[[27.785,38.344],[37.752,60.836]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[12.682,25.21],[4.889,-3.955]],"o":[[0,0],[-4.953,4.007]],"v":[[73.965,124.33],[97.561,177.576]],"c":true}]},{"t":100,"s":[{"i":[[1.068,2.124],[0.412,-0.333]],"o":[[0,0],[-0.417,0.338]],"v":[[112.746,219.25],[114.734,223.735]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[7.125,6.764],[2.818,-3.288]],"o":[[0,0],[-1.952,2.278]],"v":[[39.186,19.394],[56.431,42.171]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[16.508,15.671],[6.529,-7.617]],"o":[[0,0],[-4.523,5.277]],"v":[[103.804,73.868],[143.76,126.64]],"c":true}]},{"t":100,"s":[{"i":[[1.631,1.548],[0.645,-0.753]],"o":[[0,0],[-0.447,0.521]],"v":[[178.352,168.75],[182.3,173.964]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":5,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[14.003,-18.483],[-2.995,-2.598]],"o":[[0,0],[2.346,2.035]],"v":[[19.896,-54.149],[37.88,-77.508]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[31.33,-41.355],[-6.701,-5.813]],"o":[[0,0],[5.249,4.553]],"v":[[52.828,-125.71],[93.066,-177.974]],"c":true}]},{"t":100,"s":[{"i":[[3.858,-5.092],[-0.825,-0.716]],"o":[[0,0],[0.646,0.561]],"v":[[119.615,-214],[124.57,-220.435]],"c":true}]}]},"nm":"Path 6","hd":false},{"ind":6,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.092,-13.223],[3.225,-0.461]],"o":[[0,0],[-3.225,0.461]],"v":[[-11.7,-53.501],[-23.447,-74.576]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-13.694,-29.721],[7.248,-1.036]],"o":[[0,0],[-7.248,1.036]],"v":[[-33.744,-123.528],[-60.149,-170.902]],"c":true}]},{"t":100,"s":[{"i":[[-1.641,-3.562],[0.869,-0.124]],"o":[[0,0],[-0.869,0.124]],"v":[[-92.793,-229.25],[-95.958,-234.928]],"c":true}]}]},"nm":"Path 7","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.996078431373,0.403921568627,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 7","hd":false},{"ty":"tr","p":{"a":0,"k":[40.287,1.6]},"a":{"a":0,"k":[40.287,1.6]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"rose splashes 40%","sr":1,"ks":{"o":{"a":0,"k":40},"p":{"a":0,"k":[255.462,250.532,0]},"a":{"a":0,"k":[12.462,7.532,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[2.498,-1.717],[-2.802,-3.967]],"o":[[-1.32,0.907],[0,0]],"v":[[-27.909,-69.864],[-23.485,-62.918]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[5.583,-3.836],[-6.261,-8.864]],"o":[[-2.949,2.026],[0,0]],"v":[[-77.365,-168.395],[-67.479,-152.872]],"c":true}]},{"t":100,"s":[{"i":[[0.692,-0.476],[-0.776,-1.099]],"o":[[-0.366,0.251],[0,0]],"v":[[-104.452,-204.425],[-103.226,-202.5]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.758,-1.202],[3.089,-1.172]],"o":[[0,0],[-3.089,1.172]],"v":[[-40.584,-41.866],[-51.165,-45.778]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-10.775,-2.722],[6.996,-2.654]],"o":[[0,0],[-6.996,2.654]],"v":[[-111.836,-92.023],[-135.799,-100.881]],"c":true}]},{"t":100,"s":[{"i":[[-1.235,-0.312],[0.802,-0.304]],"o":[[0,0],[-0.802,0.304]],"v":[[-194.867,-116.25],[-197.612,-117.265]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.418,17.711],[-4.713,-1.091]],"o":[[0,0],[2.758,0.638]],"v":[[-22.297,35.041],[-30.452,64.628]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-14.835,40.938],[-10.895,-2.522]],"o":[[0,0],[6.375,1.475]],"v":[[-62.088,115.52],[-80.938,183.907]],"c":true}]},{"t":100,"s":[{"i":[[-1.49,4.112],[-1.094,-0.253]],"o":[[0,0],[0.64,0.148]],"v":[[-89,203.172],[-90.893,210.041]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.125,2.009],[-1.205,-2.41]],"o":[[-0.644,-1.15],[1.205,2.41]],"v":[[60.208,34.488],[58.28,36.577]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[2.266,4.046],[-2.428,-4.856]],"o":[[-1.297,-2.316],[2.428,4.856]],"v":[[161.46,114.372],[157.576,118.58]],"c":true}]},{"t":100,"s":[{"i":[[0.457,0.815],[-0.489,-0.978]],"o":[[-0.261,-0.467],[0.489,0.978]],"v":[[178.425,143.467],[177.643,144.315]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.378,1.888],[-0.054,-1.294]],"o":[[-0.244,-1.218],[0.054,1.294]],"v":[[57.201,-37.513],[53.318,-36.704]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.721,3.602],[-0.103,-2.47]],"o":[[-0.465,-2.323],[0.103,2.47]],"v":[[152.987,-80.688],[145.577,-79.144]],"c":true}]},{"t":100,"s":[{"i":[[0.177,0.884],[-0.025,-0.606]],"o":[[-0.114,-0.57],[0.025,0.606]],"v":[[207.62,-96.485],[205.801,-96.106]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":5,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.033,1.484],[-0.082,-1.894]],"o":[[0.031,-1.392],[0.082,1.894]],"v":[[53.595,-30.294],[48.408,-29.669]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-0.074,3.328],[-0.185,-4.247]],"o":[[0.069,-3.121],[0.185,4.247]],"v":[[143.792,-61.221],[132.159,-59.821]],"c":true}]},{"t":100,"s":[{"i":[[-0.009,0.404],[-0.022,-0.516]],"o":[[0.008,-0.379],[0.022,0.516]],"v":[[216.285,-76.436],[214.873,-76.266]],"c":true}]}]},"nm":"Path 6","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.996078431373,0.403921568627,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 6","hd":false},{"ty":"tr","p":{"a":0,"k":[12.462,7.532]},"a":{"a":0,"k":[12.462,7.532]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"violet","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[33.333]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[100]},{"t":70,"s":[0]}]},"p":{"a":0,"k":[250.172,221.61,0]},"a":{"a":0,"k":[7.172,-21.39,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.629,0.629,0.629],"y":[0,0,0]},"t":30,"s":[43.235,43.235,100]},{"t":40,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[8.424,-5.071],[2.653,-10.693],[8.493,-0.25],[-0.281,-21.575],[8.206,2.479],[-9.071,-18.319],[10.163,-0.826],[-8.504,-13.367],[7.925,-6.142],[-9.44,-13.344],[2.854,-8.942],[-21.641,-24.17],[6.753,-1.287],[-6.374,-4.022],[10.533,-2.098],[-13.32,-3.511],[-1.839,-6.483],[-21.075,-3.827],[-5.954,-6.816],[-11.932,-2.571],[3.257,-17.575],[-38.942,9.134],[-0.325,-7.706],[-8.742,1.73],[-8.801,-7.785],[-30.134,14.717],[-9.382,-4.129],[-16.279,6.661],[1.088,-8.515],[-7.687,7.097],[-6.012,-8.868],[-10.651,19.166],[-10.35,0.696],[-9.579,21.376],[-8.09,4.605],[-5.131,22.602],[-3.808,-4.758],[-0.748,8.961],[-7.254,-2.788],[2.909,7.968],[-7.635,-1.047],[9.08,17.754],[-7.507,3.193],[9.997,10.579],[-6.351,4.692],[9.781,8.968],[0.178,6.817],[17.454,12.482],[0.03,6.973],[12.265,1.257],[-5.162,4.439],[17.018,1.365],[-5.218,7.12],[24.328,-1.527],[-3.121,9.666],[14.883,-6.778],[10.864,5.993],[11.338,-8.563],[5.168,9.097],[9.336,-10.339],[5.422,9.555],[17.401,-17.591],[8.409,7.467],[2.648,-7.068],[8.104,5.903],[5.776,-17.779],[7.39,-3.513],[1.572,-7.178],[9.221,3.529],[4.343,-6.683]],"o":[[-7.125,5.075],[-0.627,-20.281],[-8.492,0.25],[-7.605,-11.419],[-6.68,-3.509],[-2.4,-2.857],[-8.37,0.053],[-2.455,-2.437],[-7.318,5.151],[-25.313,-18.266],[-0.866,7.957],[-15.111,-8.219],[-6.731,1.147],[0,0],[-8.775,1.322],[-36.623,-3.316],[2.35,6.725],[-4.284,0.119],[5.62,5.119],[0,0],[-0.325,7.953],[-14.317,6.526],[0.333,6.979],[-5.382,3.713],[7.32,4.607],[-4.424,3.372],[7.613,2.532],[-10.42,10.905],[-1.668,7.104],[-2.075,4.92],[4.11,6.36],[-1.424,4.903],[7.699,-1.121],[0,0],[8.176,-4.621],[-1.052,23.086],[4.14,4.652],[5.615,9.885],[7.25,2.786],[5.203,5.546],[7.441,1.093],[15.761,17.732],[7.507,-3.193],[5.904,3.732],[6.351,-4.692],[9.84,5.408],[-0.622,-6.552],[19.337,4.71],[0.329,-7.351],[6.418,-1.574],[5.14,-4.409],[27.522,-2.876],[5.215,-7.117],[4.426,-6.277],[2.875,-9.309],[1.399,-5.562],[-7.079,-5.34],[4.34,-9.001],[-5.002,-8.493],[13.638,-18.255],[-5.312,-9.225],[0.333,-7.822],[-7.414,-6.268],[3.497,-13.498],[-8.104,-5.903],[-0.973,-5.144],[-8.335,3.293],[-2.994,-1.674],[-9.108,-3.513],[-0.006,-3.457]],"v":[[5.228,-95.512],[7.462,-28.929],[-2.195,-87.293],[6.416,-28.961],[-31.261,-81.602],[2.547,-32.204],[-43.849,-81.375],[0.273,-32.419],[-44.643,-71.2],[-1.483,-31.501],[-68.757,-71.437],[-0.116,-26.024],[-42.303,-41.201],[-2.32,-26.028],[-60.656,-35.365],[-6.28,-25.891],[-67.569,-24.781],[-6.096,-24.791],[-61.84,-18.285],[-3.524,-23.253],[-83.167,12.168],[-3.472,-21.52],[-43.616,2.576],[-3.348,-19.306],[-64.141,31.565],[0.002,-18.262],[-50.895,27.819],[3.739,-17.431],[-29.038,27.111],[2.554,-14.294],[-16.457,46.001],[4.192,-11.614],[-10.643,61.853],[6.528,-12.171],[7.719,52.216],[8.895,-14.393],[13.275,34.112],[10.222,-12.355],[26.825,31.666],[12.417,-11.04],[35.999,36.579],[14.675,-10.481],[49.25,44.887],[15.923,-11.135],[54.41,30.884],[17.017,-12.053],[59.976,24.143],[15.598,-15.029],[60.134,6.365],[15.406,-16.076],[56.972,-8.479],[17.766,-17.986],[90.136,-9.191],[19.955,-19.743],[79.759,-35.208],[20.474,-22.64],[63.92,-44.118],[18.736,-24.334],[63.006,-55.052],[17.431,-26.232],[77.149,-67.057],[16.295,-27.947],[47.537,-73.383],[14.878,-29.037],[41.274,-77.714],[13.733,-29.91],[25.971,-72.901],[12.306,-29.047],[19.524,-85.462],[9.122,-30.564]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[8.849,0.01],[7.184,-28.957],[3.052,-1.273],[-0.761,-58.423],[7.839,-5.353],[-24.563,-49.607],[9.192,-3.975],[-23.029,-36.198],[4.861,-7.946],[-25.563,-36.135],[12.25,-6.125],[-58.602,-65.452],[0.423,-3.502],[-17.26,-10.89],[11.497,-5.096],[-36.071,-9.509],[-2.201,-1.041],[-57.07,-10.364],[-1.998,-10.013],[-32.312,-6.962],[9.36,-30.715],[-105.454,24.735],[0.047,-4.178],[-23.672,4.686],[-7.461,-15.968],[-81.601,39.854],[-8.157,-7.347],[-44.083,18.039],[-3.026,-7.306],[-20.815,19.217],[-8.186,-10.792],[-28.842,51.901],[-12.022,-1.924],[-25.94,57.885],[-10.365,1.613],[-13.894,61.205],[-1.581,0.481],[-2.025,24.266],[-5.413,1.006],[7.876,21.576],[-4.573,1.132],[24.589,48.078],[-6.41,1.365],[27.072,28.648],[-4.858,2.346],[26.485,24.286],[-6.451,3.968],[47.266,33.8],[-2.771,2.906],[33.213,3.403],[-1.167,1.667],[46.083,3.696],[-1.333,9],[65.879,-4.134],[-5.083,7.361],[40.303,-18.354],[15.513,2.68],[30.702,-23.187],[1.943,7.096],[25.282,-27.999],[2.5,7.5],[47.12,-47.637],[6.155,7.421],[7.17,-19.139],[5.169,3.176],[15.641,-48.146],[3.103,0.727],[4.257,-19.437],[6.927,0.949],[11.76,-18.098]],"o":[[-5.323,-0.006],[-1.697,-54.919],[-3.052,1.273],[-20.594,-30.923],[-3.728,2.546],[-6.498,-7.737],[-4.346,1.879],[-6.647,-6.6],[-3.22,5.264],[-68.548,-49.463],[-6.872,3.436],[-40.921,-22.258],[-0.377,3.121],[0,0],[-6.756,2.995],[-99.173,-8.979],[3.585,1.695],[-11.602,0.322],[1.08,5.412],[0,0],[-1.42,4.661],[-38.77,17.671],[-0.025,2.213],[-14.575,10.054],[3.439,7.359],[-11.98,9.131],[3.354,3.021],[-28.218,29.53],[1.451,3.503],[-5.619,13.324],[3.041,4.009],[-3.855,13.277],[4.839,0.774],[0,0],[10.589,-1.648],[-2.849,62.516],[2.488,-0.757],[15.206,26.767],[5.413,-1.006],[14.09,15.019],[4.055,-1.004],[42.68,48.017],[6.41,-1.365],[15.989,10.107],[4.858,-2.346],[26.647,14.644],[5.257,-3.234],[52.364,12.754],[3.745,-3.927],[17.38,-4.263],[1.115,-1.592],[74.53,-7.789],[1.333,-9],[11.985,-16.998],[4.419,-6.4],[3.79,-15.061],[-5.258,-0.908],[11.752,-24.375],[-1.495,-5.458],[36.932,-49.434],[-2.202,-6.607],[0.901,-21.183],[-3.464,-4.176],[9.469,-36.552],[-5.169,-3.176],[-2.634,-13.929],[-5.658,-1.325],[-8.107,-4.533],[-6.628,-0.908],[-0.017,-9.362]],"v":[[3.02,-162.999],[8.243,-41.492],[-9.448,-140.273],[5.428,-41.577],[-66.581,-136.474],[-4.982,-50.303],[-94.937,-141.294],[-11.103,-50.883],[-91.631,-117.558],[-15.827,-48.412],[-150.75,-126.625],[-12.148,-33.673],[-76.677,-54.762],[-18.079,-33.683],[-125.935,-48.926],[-28.737,-33.315],[-144.516,-27.935],[-28.241,-30.355],[-129.957,-16.393],[-21.32,-26.218],[-189.443,52.219],[-21.179,-21.553],[-84.613,22.128],[-20.845,-15.595],[-143.927,91.798],[-11.831,-12.788],[-109.552,77.33],[-1.776,-10.549],[-60.574,69.369],[-4.963,-2.109],[-41.055,117.272],[-0.555,5.102],[-30.196,155.83],[5.729,3.604],[8.665,130.425],[12.099,-2.376],[18.32,81.416],[15.669,3.108],[41.962,76.131],[21.577,6.648],[62.49,91.451],[27.654,8.15],[95.923,118.365],[31.011,6.393],[102.975,84.18],[33.954,3.923],[112.957,71.446],[30.136,-4.087],[107.438,31.594],[29.62,-6.903],[94.5,0.667],[35.97,-12.045],[183.167,5],[41.86,-16.772],[147.562,-47.507],[43.258,-24.567],[106.809,-61.148],[38.582,-29.125],[103.057,-80.596],[35.068,-34.233],[141.167,-109],[32.012,-38.849],[76.865,-113.118],[28.198,-41.782],[66.503,-119.657],[25.119,-44.132],[37.324,-105.068],[21.279,-41.807],[29.931,-135.604],[12.71,-45.889]],"c":true}]},{"t":100,"s":[{"i":[[6.52,-0.499],[0,0],[7.552,-1.773],[0,0],[7.419,-3.974],[0,0],[5.063,-2.794],[0,0],[3.869,-4.058],[0,0],[3.25,-5.125],[0,0],[2.323,-7.262],[0,0],[1.065,-7.426],[0,0],[-0.016,-6.935],[0,0],[0.043,-8.393],[0,0],[-1.943,-5.281],[0,0],[-4.613,-6.872],[0,0],[-4.427,-4.702],[0,0],[-5.552,-5.67],[0,0],[-7.074,-5.131],[0,0],[-7.555,-2.728],[0,0],[-8.696,0.33],[0,0],[-5.835,-0.075],[0,0],[-5.179,-0.584],[0,0],[-7.538,4.131],[0,0],[-4.51,1.951],[0,0],[-7.077,4.865],[0,0],[-5.025,3.68],[0,0],[-5.043,6.946],[0,0],[-2.062,4.094],[0,0],[-1.5,7.666],[0,0],[-1.333,7.5],[0,0],[-0.438,6.493],[0,0],[2.309,7.852],[0,0],[1.057,4.404],[0,0],[1.667,6.5],[0,0],[6.365,6.382],[0,0],[3.503,2.843],[0,0],[5.324,3.432],[0,0],[2.931,0.896],[0,0]],"o":[[-6.521,0.499],[0,0],[-7.552,1.773],[0,0],[-7.419,3.974],[0,0],[-5.063,2.794],[0,0],[-3.869,4.058],[0,0],[-3.25,5.125],[0,0],[-2.323,7.262],[0,0],[-1.065,7.426],[0,0],[0.016,6.935],[0,0],[-0.043,8.393],[0,0],[1.943,5.281],[0,0],[4.613,6.872],[0,0],[4.427,4.702],[0,0],[5.552,5.67],[0,0],[7.074,5.131],[0,0],[7.555,2.728],[0,0],[8.696,-0.33],[0,0],[5.835,0.075],[0,0],[5.18,0.584],[0,0],[7.538,-4.131],[0,0],[4.51,-1.951],[0,0],[7.077,-4.865],[0,0],[5.025,-3.68],[0,0],[5.043,-6.946],[0,0],[2.062,-4.094],[0,0],[1.5,-7.666],[0,0],[1.333,-7.5],[0,0],[0.438,-6.493],[0,0],[-2.309,-7.852],[0,0],[-1.057,-4.404],[0,0],[-1.667,-6.5],[0,0],[-6.365,-6.382],[0,0],[-3.503,-2.843],[0,0],[-5.324,-3.432],[0,0],[-2.931,-0.896],[0,0]],"v":[[0.021,-238.999],[6.522,-22.25],[-22.948,-238.773],[6.486,-22.251],[-111.081,-205.974],[6.353,-22.363],[-136.437,-188.794],[6.274,-22.37],[-151.131,-175.058],[6.214,-22.339],[-176.75,-144.125],[6.261,-22.15],[-199.177,-102.262],[6.185,-22.15],[-209.935,-65.926],[6.048,-22.145],[-215.016,-31.435],[6.055,-22.107],[-215.457,-11.893],[6.143,-22.054],[-201.443,57.219],[6.145,-21.994],[-194.113,74.128],[6.149,-21.918],[-171.427,112.298],[6.265,-21.882],[-163.052,122.83],[6.394,-21.853],[-126.074,156.869],[6.353,-21.745],[-65.055,189.772],[6.41,-21.653],[-38.196,196.33],[6.49,-21.672],[9.165,202.425],[6.572,-21.748],[31.821,199.416],[6.618,-21.678],[80.962,187.631],[6.693,-21.633],[105.49,178.451],[6.771,-21.613],[127.923,167.865],[6.814,-21.636],[157.975,144.18],[6.852,-21.668],[174.957,125.946],[6.803,-21.77],[204.438,84.094],[6.796,-21.806],[223.5,34.166],[6.878,-21.872],[227.667,12],[6.953,-21.933],[227.062,-61.507],[6.971,-22.033],[213.309,-104.148],[6.911,-22.091],[198.057,-137.596],[6.866,-22.157],[195.667,-144],[6.827,-22.216],[142.865,-200.118],[6.778,-22.254],[122.503,-211.157],[6.739,-22.284],[84.324,-230.568],[6.689,-22.254],[51.431,-240.604],[6.58,-22.306]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":80},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.001,0.788,0.314,0,0.707,0.776,0.349,0,1,0.765,0.384,0]}},"s":{"a":0,"k":[4,-20]},"e":{"a":0,"k":[177.39,-20]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 3","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":3,"nm":"white splashes null","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":0,"k":[244.121,231.173,0]},"s":{"a":1,"k":[{"i":{"x":[0,0,0],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,15]},"t":0,"s":[10,10,100]},{"t":45,"s":[100,100,100]}]}},"ao":0,"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"white splashes 16","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":-26.39},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[3.692,-18.443],[0.554,28.851],[-4.71,-0.153],[0.91,-34.729]],"o":[[0,0],[-0.811,-42.252],[4.48,0.146],[-0.566,21.614]],"v":[[3.698,-34.289],[7.153,-97.417],[3.704,-163.044],[9.887,-97.551]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[2.569,-224.224],[-0.708,-233.61],[4.557,-243.199],[6.236,-227.083]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"white splashes 15","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":-37.24},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[2.919,0.028],[0.458,3.186],[-3.113,-0.928],[-0.552,-2.173]],"o":[[-2.457,-0.024],[-0.45,-3.129],[2.517,0.751],[0.826,3.251]],"v":[[7.197,-189.998],[2.396,-196.671],[5.985,-201.733],[10.531,-196.769]],"c":true}]},{"t":105,"s":[{"i":[[0.715,0.672],[-0.218,2.085],[-1.681,-1.58],[0.356,-3.399]],"o":[[-1.528,-1.436],[0.24,-2.295],[2.49,2.34],[-0.102,0.975]],"v":[[3.804,-282.639],[1.73,-288.578],[5.061,-294.644],[6.124,-284.448]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[3.537,-26.73],[0.322,38.379],[-8.051,-1.852],[1.133,-39.172]],"o":[[0,0],[-0.423,-50.388],[5.402,1.243],[-0.739,25.566]],"v":[[8.88,-30.231],[9.352,-111.051],[8.877,-182.906],[15.292,-111.636]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[2.911,-258.66],[-0.366,-268.047],[4.899,-277.636],[6.578,-261.52]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"white splashes 14","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":-76.9},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[1.889,-0.602],[1.33,4.021],[-2.184,1.073],[-0.71,-4.999]],"o":[[-2.155,0.687],[-1.33,-4.021],[3.935,-1.933],[0.554,3.902]],"v":[[8.293,-195.666],[2.395,-202.581],[3.004,-212.136],[10.191,-204.071]],"c":true}]},{"t":105,"s":[{"i":[[0.715,0.672],[-0.218,2.085],[-1.681,-1.58],[0.356,-3.399]],"o":[[-1.528,-1.436],[0.24,-2.295],[2.49,2.34],[-0.102,0.975]],"v":[[3.084,-248.643],[1.01,-254.582],[4.342,-260.648],[5.404,-250.452]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,0],[-1.319,42.909],[-4.42,3.366],[0.367,-39.751]],"o":[[0,0],[1.684,-54.774],[4.638,-3.532],[-0.457,49.575]],"v":[[9.093,-35.688],[13.821,-104.066],[9.104,-187.932],[19.987,-125.011]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[2.192,-224.664],[-1.086,-234.051],[4.179,-243.64],[5.858,-227.523]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"white splashes 13","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":247.61},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[1.106,-0.312],[0.854,3.094],[-1.739,0.347],[-0.484,-3.307]],"o":[[-1.879,0.53],[-0.854,-3.094],[2.606,-0.52],[0.423,2.893]],"v":[[16.044,-188.261],[11.553,-193.701],[12.489,-200.455],[17.091,-194.354]],"c":true}]},{"t":105,"s":[{"i":[[0.715,0.672],[-0.218,2.085],[-1.681,-1.58],[0.356,-3.399]],"o":[[-1.528,-1.436],[0.24,-2.295],[2.49,2.34],[-0.102,0.975]],"v":[[4.94,-258.315],[2.866,-264.254],[6.198,-270.321],[7.26,-260.124]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,0],[0.386,32.409],[-2.865,-1.201],[0.359,-8.729]],"o":[[0,0],[-0.486,-40.852],[8.005,3.357],[-1.553,37.802]],"v":[[16.903,-34.891],[18.1,-112.135],[16.912,-182.742],[22.479,-110.91]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[2.192,-224.664],[-1.086,-234.051],[4.179,-243.64],[5.858,-227.523]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"white splashes 12","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":233.03},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[1.981,-0.058],[0.74,5.37],[-3.113,-0.709],[-0.16,-4.987]],"o":[[-1.929,0.057],[-0.74,-5.37],[3.113,0.709],[0.16,4.987]],"v":[[12.221,-233.342],[7.552,-244.188],[10.447,-254.057],[15.155,-243.212]],"c":true}]},{"t":105,"s":[{"i":[[0.715,0.672],[-0.218,2.085],[-1.681,-1.58],[0.356,-3.399]],"o":[[-1.528,-1.436],[0.24,-2.295],[2.49,2.34],[-0.102,0.975]],"v":[[9.651,-292.065],[7.577,-298.004],[10.908,-304.071],[11.971,-293.874]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,0],[1.356,31.642],[-4.56,1.137],[-0.088,-53.09]],"o":[[4.684,-49.409],[-2.183,-50.944],[5.665,-1.413],[0.11,66.517]],"v":[[12.032,-26.322],[15.369,-148.176],[12.025,-227.456],[21.738,-151.886]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[6.902,-258.414],[3.625,-267.801],[8.89,-277.39],[10.569,-261.273]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"white splashes 11","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":214.81},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[1.507,0.148],[-0.026,1.131],[-1.431,-0.266],[-0.107,-1.096]],"o":[[-1.786,-0.176],[0.031,-1.343],[1.208,0.224],[0.127,1.295]],"v":[[4.516,-198.027],[2.064,-200.467],[4.571,-202.884],[6.56,-200.468]],"c":true}]},{"t":105,"s":[{"i":[[0.372,0.35],[-0.114,1.086],[-0.875,-0.823],[0.185,-1.769]],"o":[[-0.795,-0.747],[0.125,-1.194],[1.296,1.218],[-0.053,0.508]],"v":[[11.374,-296.43],[10.295,-299.521],[12.029,-302.679],[12.582,-297.371]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[1.573,-0.068],[-0.07,2.424],[-1.723,-0.616],[-0.046,-2.055]],"o":[[-2.138,0.092],[0.076,-2.642],[1.541,0.552],[0.052,2.348]],"v":[[4.364,-207.182],[1.458,-211.938],[4.41,-216.605],[6.732,-211.938]],"c":true}]},{"t":105,"s":[{"i":[[0.715,0.672],[-0.218,2.085],[-1.681,-1.58],[0.356,-3.399]],"o":[[-1.528,-1.436],[0.24,-2.295],[2.49,2.34],[-0.102,0.975]],"v":[[12.529,-308.36],[10.456,-314.299],[13.787,-320.366],[14.849,-310.169]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,0],[1,27.626],[-5.456,-2.345],[0.879,-39.91]],"o":[[1.509,-38.059],[-1.888,-52.164],[5.09,2.188],[-1.019,46.266]],"v":[[5.034,-13.727],[5.006,-113.095],[5.033,-193.482],[10.403,-114.654]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[9.781,-274.709],[6.503,-284.096],[11.769,-293.685],[13.448,-277.569]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"white splashes 10","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":192.69},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0.501,-5.417],[0.307,16.252],[-1.853,0.524],[0.918,-24.972]],"o":[[1.34,-26.772],[-0.617,-32.602],[4.732,-1.338],[-1.024,27.851]],"v":[[9.159,-30.175],[10.331,-94.286],[9.15,-140.552],[13.436,-94.62]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[2.872,-210.009],[-0.406,-219.396],[4.859,-228.985],[6.538,-212.869]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"white splashes 9","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":178.18},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[2.914,0.483],[-0.75,3.266],[-2.159,-0.434],[0.278,-3.069]],"o":[[-2.731,-0.452],[0.75,-3.266],[2.014,0.405],[-0.319,3.512]],"v":[[5.887,-190.899],[3.433,-198.105],[8.313,-203.983],[10.844,-197.439]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[5.198,-239.911],[1.92,-249.298],[7.185,-258.887],[8.864,-242.771]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,0],[-0.178,30.147],[-3.098,-0.098],[2.065,-33.166]],"o":[[-3.379,-29.806],[0.157,-26.65],[6.602,0.21],[-3.247,52.138]],"v":[[4.103,-38.228],[-0.753,-137.332],[4.092,-183.497],[5.25,-137.283]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[2.872,-210.009],[-0.406,-219.396],[4.859,-228.985],[6.538,-212.869]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"white splashes 8","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":159.43},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[1.785,-0.166],[-0.606,2.256],[-1.258,-0.472],[0.237,-1.901]],"o":[[-2.305,0.214],[0.54,-2.01],[1.419,0.532],[-0.209,1.677]],"v":[[1.45,-209.993],[-0.568,-214.537],[2.505,-217.89],[4.374,-213.361]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[5.198,-239.911],[1.92,-249.298],[7.185,-258.887],[8.864,-242.771]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,0],[1.193,46.077],[-4.889,-1.15],[1.642,-42.494]],"o":[[0,0],[-1.052,-40.634],[7.955,1.872],[-2.299,59.509]],"v":[[0.57,-29.865],[-3.566,-125.498],[0.579,-202.91],[2.057,-125.567]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[2.872,-210.009],[-0.406,-219.396],[4.859,-228.985],[6.538,-212.869]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"white splashes 7","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":121.14},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,0],[-0.156,34.036],[-4.468,-1.124],[3.836,-53.869]],"o":[[-9.01,-37.907],[0.232,-50.528],[6.047,1.521],[-4.23,59.393]],"v":[[-1.995,-37.202],[-13.819,-149.054],[-1.999,-236.043],[-8.402,-150.485]],"c":true}]},{"t":105,"s":[{"i":[[0.894,1.266],[-0.999,3.16],[-2.102,-2.979],[1.628,-5.15]],"o":[[-1.911,-2.708],[1.099,-3.477],[3.114,4.413],[-0.467,1.478]],"v":[[-9.187,-267.183],[-10.516,-277.036],[-3.435,-285.375],[-5.021,-269.249]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"white splashes 6","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":99.54},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[2.915,1.639],[-0.439,2.709],[-2.762,-1.266],[0.258,-2.657]],"o":[[-2.152,-1.211],[0.566,-3.493],[1.834,0.841],[-0.374,3.847]],"v":[[0.236,-176.094],[-2.057,-182.925],[3.531,-188.307],[5.714,-182.155]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[5.198,-239.911],[1.92,-249.298],[7.185,-258.887],[8.864,-242.771]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[-2.433,-32.344],[1.471,40.713],[-4.408,-2.527],[1.164,-31.322]],"o":[[0,0],[-1.412,-39.1],[2.484,1.424],[-0.718,19.307]],"v":[[1.045,-42.304],[-7.111,-119.798],[1.052,-167.216],[-0.663,-119.462]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[2.872,-210.009],[-0.406,-219.396],[4.859,-228.985],[6.538,-212.869]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"white splashes 5","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":77.63},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[1.463,0.517],[-0.149,1.097],[-1.132,-0.252],[0.096,-1.199]],"o":[[-1.11,-0.392],[0.199,-1.463],[1.187,0.264],[-0.125,1.557]],"v":[[3.823,-195.789],[2.539,-198.382],[4.909,-201.046],[6.439,-198.381]],"c":true}]},{"t":105,"s":[{"i":[[0.372,0.35],[-0.114,1.086],[-0.875,-0.822],[0.185,-1.769]],"o":[[-0.795,-0.748],[0.125,-1.194],[1.296,1.218],[-0.053,0.508]],"v":[[4.894,-216.411],[3.814,-219.502],[5.548,-222.66],[6.101,-217.353]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[1.326,0.836],[-0.749,2.262],[-1.249,-0.536],[0.89,-2.237]],"o":[[-1.156,-0.729],[0.838,-2.534],[2.124,0.912],[-1.049,2.636]],"v":[[5.046,-203.717],[4.806,-209.142],[8.46,-213.457],[9.665,-207.855]],"c":true}]},{"t":105,"s":[{"i":[[0.715,0.672],[-0.218,2.085],[-1.681,-1.58],[0.356,-3.399]],"o":[[-1.528,-1.436],[0.24,-2.295],[2.49,2.34],[-0.102,0.975]],"v":[[6.049,-228.341],[3.975,-234.28],[7.307,-240.347],[8.369,-230.151]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[-4.814,-40.706],[-1.895,51.518],[-4.761,-1.911],[1.795,-38.673]],"o":[[0,0],[1.569,-42.637],[2.891,1.16],[-1.202,25.903]],"v":[[3.306,-29.924],[-6.601,-132.191],[3.292,-191.348],[-0.482,-130.244]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[3.3,-194.69],[0.023,-204.077],[5.288,-213.666],[6.967,-197.55]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"white splashes 3","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":35.48},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[2.259,0.86],[-0.661,4.424],[-2.433,-0.341],[1.208,-4.987]],"o":[[-2.13,-0.811],[0.754,-5.049],[3.542,0.496],[-1.185,4.895]],"v":[[1.284,-197.622],[-0.569,-207.285],[4.734,-217.037],[7.318,-206.171]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[5.772,-271.189],[2.494,-280.576],[7.759,-290.165],[9.439,-274.049]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,0],[-1.091,54.207],[-2.162,-1.244],[2.031,-39.647]],"o":[[0,0],[0.873,-43.398],[3.603,2.074],[-2.522,49.212]],"v":[[2.196,-32.287],[-7.332,-149.424],[2.183,-192.763],[-0.137,-136.646]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[3.446,-241.287],[0.168,-250.674],[5.433,-260.263],[7.113,-244.146]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"white splashes 4","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"t":105,"s":[0]}]},"r":{"a":0,"k":-3.87},"a":{"a":0,"k":[1.121,-11.827,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[2.46,0.092],[-0.034,1.74],[-1.94,0.288],[-0.039,-1.924]],"o":[[-1.711,-0.064],[0.034,-1.74],[1.94,-0.288],[0.039,1.924]],"v":[[2.715,-178.247],[0.16,-181.736],[3.08,-185.561],[6.197,-182.051]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.498],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[5.626,-224.593],[2.349,-233.98],[7.614,-243.569],[9.293,-227.452]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":0,"s":[{"i":[[2.294,0.008],[0.501,2.89],[-1.583,-0.006],[-0.229,-1.323]],"o":[[-2.933,-0.01],[-0.27,-1.56],[1.343,0.005],[0.392,2.26]],"v":[[1.108,-11.6],[-4.67,-18.237],[-0.404,-20.326],[3.025,-18.209]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,0],[0.85,39.256],[-3.929,-0.2],[0.353,-39.178]],"o":[[0,0],[-0.635,-29.308],[6.408,0.327],[-0.331,36.714]],"v":[[1.787,-33.47],[-2.076,-118.748],[1.789,-173.393],[2.474,-118.386]],"c":true}]},{"t":105,"s":[{"i":[[1.129,1.062],[-0.345,3.296],[-2.657,-2.497],[0.563,-5.372]],"o":[[-2.415,-2.27],[0.38,-3.627],[3.936,3.699],[-0.161,1.542]],"v":[[3.3,-194.69],[0.023,-204.077],[5.288,-213.666],[6.967,-197.55]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862747669,0.854901969433,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":105,"st":-60,"bm":0}]},{"id":"comp_3","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"pink","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[100]},{"t":100,"s":[0]}]},"p":{"a":0,"k":[245.75,225.75,0]},"a":{"a":0,"k":[2.75,-17.25,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.629,0.629,0.629],"y":[0,0,0]},"t":30,"s":[43.235,43.235,100]},{"t":40,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.312,8.525],[3.244,0.766],[0.278,-4.348]],"o":[[-1.312,-8.525],[-5.358,-1.265],[-0.278,4.348]],"v":[[6.13,-24.571],[8.951,-66.768],[5.014,-23.638]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.55,23.061],[3.244,0.766],[0.753,-11.762]],"o":[[-3.55,-23.061],[-5.358,-1.265],[-0.753,11.762]],"v":[[11.788,-37.733],[14.47,-92.154],[8.769,-35.211]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.113,0.736],[3.244,0.766],[0.024,-0.376]],"o":[[-0.113,-0.736],[-5.358,-1.265],[-0.024,0.376]],"v":[[1.251,-14.165],[19.643,-137.56],[1.155,-14.085]],"c":true}]},{"t":100,"s":[{"i":[[0.002,0.014],[3.244,0.766],[0,-0.007]],"o":[[-0.002,-0.014],[-5.358,-1.265],[0,0.007]],"v":[[29.568,-215.114],[32.47,-250.154],[29.566,-215.113]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.775,14.209],[6.351,4.603],[2.652,-16.185]],"o":[[0.775,-14.209],[-4.056,-2.94],[-2.652,16.185]],"v":[[7.231,-23.969],[18.873,-61.186],[6.13,-24.571]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-2.096,38.439],[6.351,4.603],[7.173,-43.783]],"o":[[2.096,-38.439],[-4.056,-2.94],[-7.173,43.783]],"v":[[14.767,-36.105],[37.637,-108.647],[11.788,-37.733]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.067,1.227],[6.351,4.603],[0.229,-1.398]],"o":[[0.067,-1.227],[-4.056,-2.94],[-0.229,1.398]],"v":[[1.932,-14.242],[49.85,-146.868],[1.837,-14.294]],"c":true}]},{"t":100,"s":[{"i":[[-0.001,0.023],[6.351,4.603],[0.004,-0.026]],"o":[[0.001,-0.023],[-4.056,-2.94],[-0.004,0.026]],"v":[[75.069,-225.113],[80.137,-241.647],[75.068,-225.114]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.749,6.829],[6.31,5.609],[1.359,-6.48]],"o":[[-0.749,-6.829],[-3.554,-3.159],[-1.359,6.48]],"v":[[8.596,-23.217],[31.24,-73.607],[7.231,-23.969]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[2.026,18.473],[6.31,5.609],[3.677,-17.531]],"o":[[-2.026,-18.473],[-3.554,-3.159],[-3.677,17.531]],"v":[[18.46,-34.07],[47.481,-104.355],[14.767,-36.105]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.065,0.59],[6.31,5.609],[0.117,-0.56]],"o":[[-0.065,-0.59],[-3.554,-3.159],[-0.117,0.56]],"v":[[2.166,-13.836],[63.43,-142.576],[2.048,-13.901]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0.011],[6.31,5.609],[0.002,-0.011]],"o":[[-0.001,-0.011],[-3.554,-3.159],[-0.002,0.011]],"v":[[84.072,-198.612],[102.981,-237.355],[84.069,-198.613]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.199,15.089],[5.581,6.595],[12.758,-17.563]],"o":[[6.199,-15.089],[-2.72,-3.214],[-12.758,17.563]],"v":[[9.486,-22.203],[48.882,-61.987],[8.281,-23.532]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-16.769,40.819],[5.581,6.595],[34.513,-47.512]],"o":[[16.769,-40.819],[-2.72,-3.214],[-34.513,47.512]],"v":[[21.719,-30.475],[103.282,-109.764],[18.46,-34.07]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.535,1.303],[5.581,6.595],[1.102,-1.517]],"o":[[0.535,-1.303],[-2.72,-3.214],[-1.102,1.517]],"v":[[3.204,-13.341],[122.823,-131.604],[3.099,-13.456]],"c":true}]},{"t":100,"s":[{"i":[[-0.01,0.025],[5.581,6.595],[0.021,-0.029]],"o":[[0.01,-0.025],[-2.72,-3.214],[-0.021,0.029]],"v":[[156.574,-169.11],[171.282,-185.764],[156.572,-169.112]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.223,9.945],[2.258,6.104],[6.726,-10.205]],"o":[[4.223,-9.945],[-1.817,-4.912],[-6.726,10.205]],"v":[[11.177,-20.424],[48.778,-58.677],[9.801,-21.888]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-11.423,26.904],[2.258,6.104],[18.195,-27.606]],"o":[[11.423,-26.904],[-1.817,-4.912],[-18.195,27.606]],"v":[[25.439,-26.516],[74.48,-79.649],[21.719,-30.475]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.365,0.859],[2.258,6.104],[0.581,-0.882]],"o":[[0.365,-0.859],[-1.817,-4.912],[-0.581,0.882]],"v":[[3.264,-12.932],[105.66,-107.524],[3.146,-13.058]],"c":true}]},{"t":100,"s":[{"i":[[-0.007,0.016],[2.258,6.104],[0.011,-0.017]],"o":[[0.007,-0.016],[-1.817,-4.912],[-0.011,0.017]],"v":[[152.076,-147.108],[182.98,-176.649],[152.074,-147.11]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":5,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-3.334,6.648],[-1.799,5.518],[9.673,-9.931]],"o":[[3.334,-6.648],[1.878,-5.758],[-9.673,9.931]],"v":[[12.897,-19.193],[48.972,-44.204],[11.177,-20.424]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-9.018,17.983],[-1.799,5.518],[26.167,-26.865]],"o":[[9.018,-17.983],[1.878,-5.758],[-26.167,26.865]],"v":[[30.094,-23.186],[81.927,-62.022],[25.439,-26.516]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.288,0.574],[-1.799,5.518],[0.836,-0.858]],"o":[[0.288,-0.574],[1.878,-5.758],[-0.836,0.858]],"v":[[3.883,-12.491],[120.292,-83.862],[3.734,-12.597]],"c":true}]},{"t":100,"s":[{"i":[[-0.005,0.011],[-1.799,5.518],[0.016,-0.016]],"o":[[0.005,-0.011],[1.878,-5.758],[-0.016,0.016]],"v":[[188.579,-121.106],[215.427,-138.022],[188.576,-121.108]],"c":true}]}]},"nm":"Path 6","hd":false},{"ind":6,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-9.869,8.704],[-3.432,7.058],[12.009,-7.852]],"o":[[9.869,-8.704],[2.981,-6.13],[-12.009,7.852]],"v":[[12.832,-16.628],[74.374,-42.527],[12.897,-19.193]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-26.696,23.547],[-3.432,7.058],[32.485,-21.24]],"o":[[26.696,-23.547],[2.981,-6.13],[-32.485,21.24]],"v":[[29.916,-16.247],[117.42,-56.876],[30.094,-23.186]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.852,0.752],[-3.432,7.058],[1.037,-0.678]],"o":[[0.852,-0.752],[2.981,-6.13],[-1.037,0.678]],"v":[[3.897,-11.786],[151.618,-69.521],[3.902,-12.008]],"c":true}]},{"t":100,"s":[{"i":[[-0.016,0.014],[-3.432,7.058],[0.02,-0.013]],"o":[[0.016,-0.014],[2.981,-6.13],[-0.02,0.013]],"v":[[190.079,-83.601],[236.42,-100.876],[190.079,-83.606]],"c":true}]}]},"nm":"Path 7","hd":false},{"ind":7,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-14.199,3.553],[-2.249,4.962],[22.38,-4.873]],"o":[[22.287,-5.577],[4.049,-8.935],[-22.38,4.873]],"v":[[10.861,-15.141],[88.919,-15.854],[12.516,-16.944]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-38.412,9.611],[-2.249,4.962],[60.542,-13.183]],"o":[[60.291,-15.085],[4.049,-8.935],[-60.542,13.183]],"v":[[25.439,-11.372],[154.986,-15.381],[29.916,-16.247]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-1.227,0.307],[-2.249,4.962],[1.933,-0.421]],"o":[[1.925,-0.482],[4.049,-8.935],[-1.933,0.421]],"v":[[3.934,-10.704],[182.862,-13.944],[4.077,-10.859]],"c":true}]},{"t":100,"s":[{"i":[[-0.023,0.006],[-2.249,4.962],[0.036,-0.008]],"o":[[0.036,-0.009],[4.049,-8.935],[-0.036,0.008]],"v":[[204.076,-11.599],[251.986,-10.381],[204.079,-11.601]],"c":true}]}]},"nm":"Path 8","hd":false},{"ind":8,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.711,2.16],[-0.839,0.958],[12.251,-0.88]],"o":[[4.711,-2.16],[1.348,-1.539],[-12.251,0.88]],"v":[[9.079,-12.869],[39.383,-12.388],[10.861,-14.826]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-12.744,5.843],[-0.839,0.958],[33.14,-2.38]],"o":[[12.744,-5.843],[1.348,-1.539],[-33.14,2.38]],"v":[[20.619,-6.076],[78.015,-8.131],[25.439,-11.372]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.407,0.187],[-0.839,0.958],[1.058,-0.076]],"o":[[0.407,-0.187],[1.348,-1.539],[-1.058,0.076]],"v":[[4.224,-10.251],[128.305,-2.239],[4.378,-10.421]],"c":true}]},{"t":100,"s":[{"i":[[-0.008,0.004],[-0.839,0.958],[0.02,-0.001]],"o":[[0.008,-0.004],[1.348,-1.539],[-0.02,0.001]],"v":[[238.573,10.405],[253.015,12.369],[238.576,10.401]],"c":true}]}]},"nm":"Path 9","hd":false},{"ind":9,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-19.702,-2.401],[-2.482,3.154],[14.29,0.398]],"o":[[19.702,2.401],[2.595,-3.297],[-14.29,-0.398]],"v":[[9.698,-12.307],[64.597,6.088],[9.395,-13.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-53.298,-6.494],[-2.482,3.154],[38.657,1.077]],"o":[[53.298,6.494],[2.595,-3.297],[-38.657,-1.077]],"v":[[21.439,-3.705],[93.137,16.968],[20.619,-6.076]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-1.702,-0.207],[-2.482,3.154],[1.234,0.034]],"o":[[1.702,0.207],[2.595,-3.297],[-1.234,-0.034]],"v":[[3.71,-9.493],[135.812,35.216],[3.683,-9.569]],"c":true}]},{"t":100,"s":[{"i":[[-0.032,-0.004],[-2.482,3.154],[0.023,0.001]],"o":[[0.032,0.004],[2.595,-3.297],[-0.023,-0.001]],"v":[[196.573,63.406],[241.637,80.468],[196.573,63.405]],"c":true}]}]},"nm":"Path 10","hd":false},{"ind":10,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-9.253,-3.386],[-5.064,4.293],[16.792,8.51]],"o":[[9.253,3.386],[4.126,-3.498],[-16.792,-8.51]],"v":[[11.313,-9.614],[54.159,17.809],[9.698,-11.992]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-25.032,-9.16],[-5.064,4.293],[45.426,23.022]],"o":[[25.032,9.16],[4.126,-3.498],[-45.426,-23.022]],"v":[[25.808,2.729],[103.197,50.764],[21.439,-3.705]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.799,-0.292],[-5.064,4.293],[1.451,0.735]],"o":[[0.799,0.292],[4.126,-3.498],[-1.451,-0.735]],"v":[[3.881,-8.702],[137.251,71.886],[3.742,-8.908]],"c":true}]},{"t":100,"s":[{"i":[[-0.015,-0.006],[-5.064,4.293],[0.027,0.014]],"o":[[0.015,0.006],[4.126,-3.498],[-0.027,-0.014]],"v":[[199.076,108.91],[221.697,124.264],[199.073,108.906]],"c":true}]}]},"nm":"Path 11","hd":false},{"ind":11,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.526,-3.215],[-3.502,3.162],[9.671,6.481]],"o":[[6.526,3.215],[3.502,-3.162],[-9.671,-6.481]],"v":[[10.491,-8.994],[73.057,40.569],[11.313,-9.929]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-17.653,-8.697],[-3.502,3.162],[26.163,17.532]],"o":[[17.653,8.697],[3.502,-3.162],[-26.163,-17.532]],"v":[[23.585,5.258],[96.236,63.117],[25.808,2.729]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.564,-0.278],[-3.502,3.162],[0.835,0.56]],"o":[[0.564,0.278],[3.502,-3.162],[-0.835,-0.56]],"v":[[3.102,-8.57],[126.267,90.274],[3.173,-8.651]],"c":true}]},{"t":100,"s":[{"i":[[-0.011,-0.005],[-3.502,3.162],[0.016,0.011]],"o":[[0.011,0.005],[3.502,-3.162],[-0.016,-0.011]],"v":[[144.075,112.911],[200.736,157.617],[144.076,112.91]],"c":true}]}]},"nm":"Path 12","hd":false},{"ind":12,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-13.475,-10.482],[-4.458,3.463],[10.073,7.849]],"o":[[13.475,10.482],[4.458,-3.463],[-10.073,-7.849]],"v":[[9.502,-7.951],[52.87,45.892],[10.491,-8.678]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-36.453,-28.355],[-4.458,3.463],[27.249,21.233]],"o":[[36.453,28.355],[4.458,-3.463],[-27.249,-21.233]],"v":[[20.909,7.226],[94.655,93.669],[23.585,5.258]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-1.164,-0.905],[-4.458,3.463],[0.87,0.678]],"o":[[1.164,0.905],[4.458,-3.463],[-0.87,-0.678]],"v":[[3.049,-7.986],[116.926,120.825],[3.134,-8.049]],"c":true}]},{"t":100,"s":[{"i":[[-0.022,-0.017],[-4.458,3.463],[0.016,0.013]],"o":[[0.022,0.017],[4.458,-3.463],[-0.016,-0.013]],"v":[[146.573,153.413],[172.155,188.169],[146.575,153.411]],"c":true}]}]},"nm":"Path 13","hd":false},{"ind":13,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.775,-3.087],[-3.488,2.449],[10.229,14.193]],"o":[[4.775,3.087],[3.488,-2.449],[-10.229,-14.193]],"v":[[7.167,-8.135],[48.091,56.332],[9.187,-7.951]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-12.917,-8.352],[-3.488,2.449],[27.671,38.395]],"o":[[12.917,8.352],[3.488,-2.449],[-27.671,-38.395]],"v":[[15.445,6.729],[62.124,74.78],[20.909,7.226]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.412,-0.267],[-3.488,2.449],[0.884,1.226]],"o":[[0.412,0.267],[3.488,-2.449],[-0.884,-1.226]],"v":[[2.321,-8.079],[84.827,113.576],[2.495,-8.063]],"c":true}]},{"t":100,"s":[{"i":[[-0.008,-0.005],[-3.488,2.449],[0.017,0.023]],"o":[[0.008,0.005],[3.488,-2.449],[-0.017,-0.023]],"v":[[103.57,147.412],[141.124,209.78],[103.573,147.413]],"c":true}]}]},"nm":"Path 14","hd":false},{"ind":14,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-5.362,-6.334],[-2.659,0.857],[3.694,6.735]],"o":[[5.361,6.334],[6.495,-2.093],[-3.694,-6.735]],"v":[[5.102,-9.295],[26.477,35.494],[7.167,-8.45]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-14.504,-17.136],[-2.659,0.857],[9.994,18.219]],"o":[[14.504,17.136],[6.495,-2.093],[-9.994,-18.219]],"v":[[9.859,4.445],[41.772,64.349],[15.445,6.729]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.463,-0.547],[-2.659,0.857],[0.319,0.582]],"o":[[0.463,0.547],[6.495,-2.093],[-0.319,-0.582]],"v":[[2.027,-7.553],[61.313,111.91],[2.205,-7.48]],"c":true}]},{"t":100,"s":[{"i":[[-0.009,-0.01],[-2.659,0.857],[0.006,0.011]],"o":[[0.009,0.01],[6.495,-2.093],[-0.006,-0.011]],"v":[[94.566,193.911],[109.772,229.849],[94.57,193.912]],"c":true}]}]},"nm":"Path 15","hd":false},{"ind":15,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.43,-4.038],[-5.792,0.94],[0.557,8.126]],"o":[[0.43,4.038],[3.71,-0.602],[-0.557,-8.126]],"v":[[3.69,-10.876],[17.077,55.965],[5.102,-9.295]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-1.164,-10.924],[-5.792,0.94],[1.507,21.981]],"o":[[1.164,10.924],[3.71,-0.602],[-1.507,-21.981]],"v":[[6.039,0.167],[22.28,71.891],[9.859,4.445]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.037,-0.349],[-5.792,0.94],[0.048,0.702]],"o":[[0.037,0.349],[3.71,-0.602],[-0.048,-0.702]],"v":[[1.242,-7.799],[31.62,122.9],[1.364,-7.663]],"c":true}]},{"t":100,"s":[{"i":[[-0.001,-0.007],[-5.792,0.94],[0.001,0.013]],"o":[[0.001,0.007],[3.71,-0.602],[-0.001,-0.013]],"v":[[43.064,185.408],[54.78,249.391],[43.066,185.411]],"c":true}]}]},"nm":"Path 16","hd":false},{"ind":16,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.268,-1.072],[-8.766,2.77],[-1.453,20.282]],"o":[[-0.268,1.072],[8.956,-2.83],[1.453,-20.282]],"v":[[2.258,-8.649],[11.352,48.031],[4.005,-10.876]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.726,-2.901],[-8.766,2.77],[-3.93,54.866]],"o":[[-0.726,2.901],[8.956,-2.83],[3.93,-54.866]],"v":[[1.312,6.192],[20.655,115.675],[6.039,0.167]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.023,-0.093],[-8.766,2.77],[-0.125,1.752]],"o":[[-0.023,0.093],[8.956,-2.83],[0.125,-1.752]],"v":[[0.956,-7.06],[24.966,155.333],[1.106,-7.252]],"c":true}]},{"t":100,"s":[{"i":[[0,-0.002],[-8.766,2.77],[-0.002,0.033]],"o":[[0,0.002],[8.956,-2.83],[0.002,-0.033]],"v":[[32.561,227.912],[35.655,253.675],[32.564,227.908]],"c":true}]}]},"nm":"Path 17","hd":false},{"ind":17,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.674,-5.118],[-9.34,-10.304],[-5.656,20.469]],"o":[[-0.674,5.118],[5.335,5.886],[5.656,-20.469]],"v":[[0.319,-7.862],[-7.754,79.004],[2.258,-8.649]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[1.822,-13.845],[-9.34,-10.304],[-15.299,55.372]],"o":[[-1.822,13.845],[5.335,5.886],[15.299,-55.372]],"v":[[-3.933,8.322],[-10.119,142.549],[1.312,6.192]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.058,-0.442],[-9.34,-10.304],[-0.489,1.768]],"o":[[-0.058,0.442],[5.335,5.886],[0.489,-1.768]],"v":[[0.157,-7.436],[-14.573,174.16],[0.325,-7.504]],"c":true}]},{"t":100,"s":[{"i":[[0.001,-0.008],[-9.34,-10.304],[-0.009,0.033]],"o":[[-0.001,0.008],[5.335,5.886],[0.009,-0.033]],"v":[[-16.442,193.413],[-25.619,252.549],[-16.439,193.412]],"c":true}]}]},"nm":"Path 18","hd":false},{"ind":18,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.134,-4.491],[-8.529,-8.273],[-6.696,18.034]],"o":[[-1.134,4.491],[3.166,3.071],[6.696,-18.034]],"v":[[-1.761,-9.64],[-13.598,51.106],[0.003,-7.546]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.068,-12.148],[-8.529,-8.273],[-18.113,48.786]],"o":[[-3.068,12.148],[3.166,3.071],[18.113,-48.786]],"v":[[-8.707,2.658],[-24.162,110.866],[-3.933,8.322]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.098,-0.388],[-8.529,-8.273],[-0.578,1.558]],"o":[[-0.098,0.388],[3.166,3.071],[0.578,-1.558]],"v":[[-0.446,-7.378],[-34.795,149.374],[-0.293,-7.198]],"c":true}]},{"t":100,"s":[{"i":[[0.002,-0.007],[-8.529,-8.273],[-0.011,0.029]],"o":[[-0.002,0.007],[3.166,3.071],[0.011,-0.029]],"v":[[-51.445,211.91],[-61.162,244.866],[-51.442,211.913]],"c":true}]}]},"nm":"Path 19","hd":false},{"ind":19,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[9.217,-13.161],[-2.977,-4.918],[-5.725,7.174]],"o":[[-9.217,13.161],[1.721,2.843],[5.725,-7.174]],"v":[[-1.154,-12.499],[-42.53,56.34],[-1.761,-9.64]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[24.934,-35.602],[-2.977,-4.918],[-15.488,19.406]],"o":[[-24.934,35.602],[1.721,2.843],[15.488,-19.406]],"v":[[-7.064,-5.076],[-47.418,71.95],[-8.707,2.658]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.796,-1.137],[-2.977,-4.918],[-0.495,0.62]],"o":[[-0.796,1.137],[1.721,2.843],[0.495,-0.62]],"v":[[-0.876,-8.404],[-71.414,113.188],[-0.929,-8.157]],"c":true}]},{"t":100,"s":[{"i":[[0.015,-0.021],[-2.977,-4.918],[-0.009,0.012]],"o":[[-0.015,0.021],[1.721,2.843],[0.009,-0.012]],"v":[[-88.944,151.405],[-130.918,215.45],[-88.945,151.41]],"c":true}]}]},"nm":"Path 20","hd":false},{"ind":20,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[7.626,-7.899],[-8.084,-5.313],[-13.235,7.936]],"o":[[-2.855,2.957],[3.306,2.173],[10.979,-6.583]],"v":[[-4.169,-12.723],[-45.434,37.243],[-0.839,-12.499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[20.63,-21.369],[-8.084,-5.313],[-35.802,21.467]],"o":[[-7.724,8],[3.306,2.173],[29.699,-17.808]],"v":[[-16.072,-5.684],[-88.796,85.335],[-7.064,-5.076]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.659,-0.682],[-8.084,-5.313],[-1.143,0.686]],"o":[[-0.247,0.255],[3.306,2.173],[0.948,-0.569]],"v":[[-1.962,-8.308],[-113.223,114.36],[-1.674,-8.288]],"c":true}]},{"t":100,"s":[{"i":[[0.012,-0.013],[-8.084,-5.313],[-0.022,0.013]],"o":[[-0.005,0.005],[3.306,2.173],[0.018,-0.011]],"v":[[-150.949,160.405],[-173.796,186.335],[-150.944,160.405]],"c":true}]}]},"nm":"Path 21","hd":false},{"ind":21,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[14.117,-10.21],[-5.628,-14.818],[-24.822,15.796]],"o":[[-14.086,10.188],[3.081,4.733],[21.924,-13.951]],"v":[[-3.765,-15.075],[-82.448,63.651],[-4.484,-12.723]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[38.189,-27.621],[0.797,-25.979],[-67.149,42.73]],"o":[[-38.106,27.561],[-0.163,5.311],[59.307,-37.74]],"v":[[-14.127,-12.046],[-117.611,102.283],[-16.072,-5.684]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[1.219,-0.882],[-2.13,-20.894],[-2.144,1.364]],"o":[[-1.217,0.88],[1.315,5.048],[1.894,-1.205]],"v":[[-1.552,-9.148],[-137.871,121.393],[-1.614,-8.945]],"c":true}]},{"t":100,"s":[{"i":[[0.023,-0.017],[-9.389,-8.283],[-0.04,0.026]],"o":[[-0.023,0.017],[4.981,4.394],[0.036,-0.023]],"v":[[-123.948,110.901],[-188.111,168.783],[-123.949,110.905]],"c":true}]}]},"nm":"Path 22","hd":false},{"ind":22,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[2.794,-1.349],[0.656,-8.742],[-9.144,3.299]],"o":[[-0.388,0.187],[-0.279,3.717],[9.144,-3.298]],"v":[[-4.357,-15.318],[-39.206,7.131],[-3.283,-15.062]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[7.56,-3.648],[1.507,-8.661],[-24.737,8.919]],"o":[[-1.051,0.507],[-0.641,3.682],[24.737,-8.919]],"v":[[-17.032,-12.737],[-65.957,17.111],[-14.127,-12.046]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.241,-0.117],[1.12,-8.698],[-0.79,0.285]],"o":[[-0.034,0.016],[-0.476,3.698],[0.79,-0.285]],"v":[[-2.581,-9.26],[-111.172,47.264],[-2.489,-9.238]],"c":true}]},{"t":100,"s":[{"i":[[0.004,-0.003],[0.158,-8.79],[-0.014,0.008]],"o":[[-0.001,0],[-0.067,3.737],[0.014,-0.008]],"v":[[-196.685,103.922],[-223.294,122.037],[-196.683,103.922]],"c":true}]}]},"nm":"Path 23","hd":false},{"ind":23,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.652,-0.002],[9.621,-23.195],[-30.797,11.034]],"o":[[-0.652,0.002],[1.201,4.343],[30.797,-11.034]],"v":[[-5.938,-16.534],[-91.485,36.162],[-4.524,-15.646]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[1.764,-0.005],[34.94,-49.93],[-83.311,29.848]],"o":[[-1.764,0.005],[-2.448,3.499],[83.311,-29.848]],"v":[[-20.857,-15.139],[-161.337,74.163],[-17.032,-12.737]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.056,0],[23.404,-37.749],[-2.66,0.953]],"o":[[-0.056,0],[-0.786,3.883],[2.66,-0.953]],"v":[[-2.437,-9.678],[-180.879,84.077],[-2.314,-9.602]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0],[-5.203,-7.542],[-0.05,0.018]],"o":[[-0.001,0],[3.337,4.837],[0.05,-0.018]],"v":[[-175.952,77.399],[-229.337,108.663],[-175.95,77.401]],"c":true}]}]},"nm":"Path 24","hd":false},{"ind":24,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[3.079,-0.51],[0.18,-8.491],[-14.645,0.239]],"o":[[-3.079,0.51],[-0.099,4.7],[14.645,-0.239]],"v":[[-8.996,-17.288],[-60.714,-4.682],[-6.253,-16.534]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[8.33,-1.38],[0.18,-8.491],[-39.617,0.647]],"o":[[-8.33,1.38],[-0.099,4.7],[39.617,-0.647]],"v":[[-28.279,-17.178],[-119.213,6.829],[-20.857,-15.139]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.266,-0.044],[0.18,-8.491],[-1.265,0.021]],"o":[[-0.266,0.044],[-0.099,4.7],[1.265,-0.021]],"v":[[-3.288,-10.423],[-157.506,13.654],[-3.051,-10.357]],"c":true}]},{"t":100,"s":[{"i":[[0.005,-0.001],[0.18,-8.491],[-0.024,0]],"o":[[-0.005,0.001],[-0.099,4.7],[0.024,0]],"v":[[-223.707,24.648],[-252.463,30.579],[-223.702,24.649]],"c":true}]}]},"nm":"Path 25","hd":false},{"ind":25,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.002,-0.018],[4.376,-11.742],[-21.034,-0.505]],"o":[[-5.002,0.018],[-1,2.682],[21.034,0.505]],"v":[[-8.482,-18.09],[-80.041,-5.651],[-8.996,-16.972]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[13.533,-0.05],[4.376,-11.742],[-56.9,-1.366]],"o":[[-13.533,0.05],[-1,2.682],[56.9,1.366]],"v":[[-26.888,-20.202],[-133.179,-1.393],[-28.279,-17.178]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.432,-0.002],[4.376,-11.742],[-1.817,-0.044]],"o":[[-0.432,0.002],[-1,2.682],[1.817,0.044]],"v":[[-2.957,-10.802],[-167.52,2.271],[-3.002,-10.706]],"c":true}]},{"t":100,"s":[{"i":[[0.008,0],[4.376,-11.742],[-0.034,-0.001]],"o":[[-0.008,0],[-1,2.682],[0.034,0.001]],"v":[[-201.456,2.646],[-252.679,11.357],[-201.457,2.648]],"c":true}]}]},"nm":"Path 26","hd":false},{"ind":26,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[4.015,0.648],[9.285,-5.938],[-12.687,-1.577]],"o":[[-1.837,-0.296],[-5.457,3.49],[12.687,1.577]],"v":[[-7.193,-19.109],[-55.539,-18.566],[-8.167,-18.09]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[10.862,1.752],[9.285,-5.938],[-34.32,-4.266]],"o":[[-4.969,-0.802],[-5.457,3.49],[34.32,4.266]],"v":[[-24.253,-22.959],[-119.714,-21.877],[-26.888,-20.202]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.347,0.056],[9.285,-5.938],[-1.096,-0.136]],"o":[[-0.159,-0.026],[-5.457,3.49],[1.096,0.136]],"v":[[-3.256,-11.254],[-157.719,-22.883],[-3.34,-11.166]],"c":true}]},{"t":100,"s":[{"i":[[0.007,0.001],[9.285,-5.938],[-0.021,-0.003]],"o":[[-0.003,0],[-5.457,3.49],[0.021,0.003]],"v":[[-231.204,-25.606],[-251.964,-25.377],[-231.206,-25.604]],"c":true}]}]},"nm":"Path 27","hd":false},{"ind":27,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[4.393,1.499],[5.601,-5.319],[-6.035,-3.074]],"o":[[-4.393,-1.499],[-2.043,1.94],[7.22,3.678]],"v":[[-5.608,-19.397],[-48.68,-27.903],[-7.508,-19.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[11.885,4.055],[5.601,-5.319],[-16.326,-8.316]],"o":[[-11.885,-4.055],[-2.043,1.94],[19.531,9.948]],"v":[[-19.113,-23.736],[-77.851,-34.052],[-24.253,-22.959]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.38,0.13],[5.601,-5.319],[-0.521,-0.266]],"o":[[-0.38,-0.129],[-2.043,1.94],[0.624,0.318]],"v":[[-2.828,-11.723],[-125.77,-43.679],[-2.992,-11.698]],"c":true}]},{"t":100,"s":[{"i":[[0.007,0.002],[5.601,-5.319],[-0.01,-0.005]],"o":[[-0.007,-0.002],[-2.043,1.94],[0.012,0.006]],"v":[[-210.701,-60.106],[-244.601,-67.552],[-210.704,-60.106]],"c":true}]}]},"nm":"Path 28","hd":false},{"ind":28,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.221,2.81],[2.362,-11.3],[-20.382,-17.294]],"o":[[-5.221,-2.81],[-1.358,6.576],[20.382,17.294]],"v":[[-7.193,-23.937],[-71.1,-48.972],[-5.293,-19.397]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[14.123,7.602],[4.156,-15.533],[-55.138,-46.784]],"o":[[-14.123,-7.602],[-2.317,8.659],[55.138,46.784]],"v":[[-24.253,-36.018],[-168.703,-94.857],[-19.113,-23.736]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.451,0.243],[3.339,-13.604],[-1.761,-1.494]],"o":[[-0.451,-0.243],[-1.88,7.71],[1.761,1.494]],"v":[[-2.925,-12.804],[-184.078,-101.754],[-2.761,-12.412]],"c":true}]},{"t":100,"s":[{"i":[[0.008,0.005],[1.312,-8.822],[-0.033,-0.028]],"o":[[-0.008,-0.005],[-0.797,5.357],[0.033,0.028]],"v":[[-205.454,-113.613],[-222.203,-118.857],[-205.451,-113.606]],"c":true}]}]},"nm":"Path 29","hd":false},{"ind":29,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[7.26,4.445],[7.011,-4.124],[-10.385,-10.766]],"o":[[-0.326,-0.199],[-7.011,4.124],[16.897,17.517]],"v":[[-5.801,-24.959],[-56.419,-56.973],[-7.193,-23.937]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[19.64,12.023],[7.011,-4.124],[-28.094,-29.123]],"o":[[-0.881,-0.54],[-7.011,4.124],[45.711,47.385]],"v":[[-20.488,-38.784],[-98.519,-86.459],[-24.253,-36.018]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.627,0.384],[7.011,-4.124],[-0.897,-0.93]],"o":[[-0.028,-0.017],[-7.011,4.124],[1.46,1.513]],"v":[[-2.277,-13.13],[-127.401,-106.145],[-2.397,-13.042]],"c":true}]},{"t":100,"s":[{"i":[[0.012,0.007],[7.011,-4.124],[-0.017,-0.018]],"o":[[-0.001,0],[-7.011,4.124],[0.028,0.029]],"v":[[-164.452,-132.115],[-199.019,-154.959],[-164.454,-132.113]],"c":true}]}]},"nm":"Path 30","hd":false},{"ind":30,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[23.866,20.95],[-0.775,-4.182],[-8.843,-10.116]],"o":[[-23.866,-20.95],[0.799,4.308],[8.843,10.116]],"v":[[-4.127,-25.389],[-47.359,-57.266],[-6.116,-25.275]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[64.562,56.675],[-0.775,-4.182],[-23.921,-27.366]],"o":[[-64.562,-56.675],[0.799,4.308],[23.921,27.366]],"v":[[-15.108,-39.093],[-105.227,-105.674],[-20.488,-38.784]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[2.062,1.81],[-0.775,-4.182],[-0.764,-0.874]],"o":[[-2.062,-1.81],[0.799,4.308],[0.764,0.874]],"v":[[-2.169,-13.514],[-128.217,-124.928],[-2.341,-13.504]],"c":true}]},{"t":100,"s":[{"i":[[0.039,0.034],[-0.775,-4.182],[-0.014,-0.016]],"o":[[-0.039,-0.034],[0.799,4.308],[0.014,0.016]],"v":[[-169.449,-161.115],[-185.227,-172.674],[-169.452,-161.115]],"c":true}]}]},"nm":"Path 31","hd":false},{"ind":31,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.861,0.835],[6.082,-5.676],[-10.296,-14.684]],"o":[[-0.861,-0.835],[-2.893,2.699],[10.296,14.684]],"v":[[-0.366,-23.104],[-55.133,-75.787],[-4.127,-25.389]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[2.329,2.258],[6.082,-5.676],[-27.852,-39.724]],"o":[[-2.329,-2.258],[-2.893,2.699],[27.852,39.724]],"v":[[-4.933,-32.911],[-79.889,-105.589],[-15.108,-39.093]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.074,0.072],[6.082,-5.676],[-0.889,-1.268]],"o":[[-0.074,-0.072],[-2.893,2.699],[0.889,1.268]],"v":[[-1.214,-13.207],[-103.885,-130.878],[-1.539,-13.404]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0.001],[6.082,-5.676],[-0.017,-0.024]],"o":[[-0.001,-0.001],[-2.893,2.699],[0.017,0.024]],"v":[[-120.443,-152.612],[-163.389,-193.589],[-120.449,-152.615]],"c":true}]}]},"nm":"Path 32","hd":false},{"ind":32,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[3.542,19.181],[3.073,-0.981],[-0.152,-9.722]],"o":[[-3.542,-19.181],[-2.453,0.783],[0.152,9.722]],"v":[[0.539,-22.899],[-14.028,-61.928],[-0.366,-22.788]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[9.581,51.887],[3.073,-0.981],[-0.412,-26.3]],"o":[[-9.581,-51.887],[-2.453,0.783],[0.412,26.3]],"v":[[-2.483,-33.211],[-31.215,-116.327],[-4.933,-32.911]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.306,1.657],[3.073,-0.981],[-0.013,-0.84]],"o":[[-0.306,-1.657],[-2.453,0.783],[0.013,0.84]],"v":[[-0.517,-14.182],[-44.865,-152.105],[-0.596,-14.172]],"c":true}]},{"t":100,"s":[{"i":[[0.006,0.031],[3.073,-0.981],[0,-0.016]],"o":[[-0.006,-0.031],[-2.453,0.783],[0,0.016]],"v":[[-72.441,-227.612],[-78.715,-240.827],[-72.443,-227.612]],"c":true}]}]},"nm":"Path 33","hd":false},{"ind":33,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.512,3.311],[7.408,-2.515],[0.879,-9.578]],"o":[[-0.512,-3.311],[-4.274,1.451],[-0.879,9.578]],"v":[[1.755,-24.526],[-15.758,-89.049],[0.539,-22.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[1.386,8.956],[7.408,-2.515],[2.377,-25.91]],"o":[[-1.386,-8.956],[-4.274,1.451],[-2.377,25.91]],"v":[[0.805,-37.612],[-23.169,-137.772],[-2.483,-33.211]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.044,0.286],[7.408,-2.515],[0.076,-0.827]],"o":[[-0.044,-0.286],[-4.274,1.451],[-0.076,0.827]],"v":[[0.051,-14.02],[-30.928,-169.383],[-0.054,-13.879]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0.005],[7.408,-2.515],[0.001,-0.016]],"o":[[-0.001,-0.005],[-4.274,1.451],[-0.001,0.016]],"v":[[-36.439,-204.114],[-50.169,-247.772],[-36.441,-204.112]],"c":true}]}]},"nm":"Path 34","hd":false},{"ind":34,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.275,0.477],[4.481,1.632],[2.961,-6.55],[-1.425,0.478]],"o":[[-2.55,-0.954],[-6.936,-2.526],[-1.48,3.275],[1.425,-0.478]],"v":[[5.014,-23.954],[2.623,-65.932],[2.07,-24.842],[3.754,-13.991]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.449,1.291],[4.481,1.632],[8.009,-17.719],[-3.855,1.292]],"o":[[-6.899,-2.581],[-6.936,-2.526],[-4.004,8.859],[3.855,-1.292]],"v":[[8.769,-35.211],[4.357,-117.808],[0.805,-37.612],[5.361,-8.261]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.11,0.041],[4.481,1.632],[0.256,-0.566],[-0.123,0.041]],"o":[[-0.22,-0.082],[-6.936,-2.526],[-0.128,0.283],[0.123,-0.041]],"v":[[0.788,-14.342],[3.064,-156.748],[0.534,-14.419],[0.679,-13.482]],"c":true}]},{"t":100,"s":[{"i":[[0.002,0.001],[4.481,1.632],[0.005,-0.011],[-0.002,0.001]],"o":[[-0.004,-0.002],[-6.936,-2.526],[-0.002,0.005],[0.002,-0.001]],"v":[[1.066,-235.113],[-0.143,-253.308],[1.061,-235.114],[1.064,-235.097]],"c":true}]}]},"nm":"Path 35","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":7,"k":{"a":0,"k":[0.166,1,1,1,0.291,1,0.894,0.947,0.379,1,0.788,0.894,0.522,0.961,0.394,0.72,0.708,0.922,0,0.545,0.865,0.961,0.206,0.508,0.999,1,0.412,0.471,0.166,1,0.291,1,0.379,1,0.522,0.9,0.708,0.8,0.865,0.8,0.999,0.8]}},"s":{"a":0,"k":[-12,-18]},"e":{"a":0,"k":[-123.596,-129.596]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-6.793,2.506]},"a":{"a":0,"k":[-6.793,2.506]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"white splashes precomp","refId":"comp_2","sr":1,"ks":{"p":{"a":0,"k":[243,243,0]},"a":{"a":0,"k":[243,243,0]}},"ao":0,"w":486,"h":486,"ip":-4,"op":99,"st":-5,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"ogonek5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[1],"y":[0]},"t":30,"s":[100]},{"t":45,"s":[0]}]},"p":{"a":0,"k":[241,232.25,0]},"a":{"a":0,"k":[-51,43,0]},"s":{"a":1,"k":[{"i":{"x":[0,0,0],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,15.828]},"t":30,"s":[0,0,100]},{"t":45,"s":[151,151,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[164,164]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":7,"k":{"a":0,"k":[0.166,1,1,1,0.291,1,0.894,0.947,0.379,1,0.788,0.894,0.522,0.961,0.394,0.72,0.708,0.922,0,0.545,0.865,0.961,0.206,0.508,0.999,1,0.412,0.471,0.166,1,0.291,1,0.379,1,0.522,0.9,0.708,0.8,0.865,0.8,0.999,0.8]}},"s":{"a":0,"k":[1,0.5]},"e":{"a":0,"k":[-61.596,-53.096]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 9","hd":false},{"ty":"tr","p":{"a":0,"k":[-51,43]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":30,"op":45,"st":-45,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"rose splashes 80%","sr":1,"ks":{"o":{"a":0,"k":80},"p":{"a":0,"k":[283.287,244.6,0]},"a":{"a":0,"k":[40.287,1.6,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[8.458,2.584],[-1.178,1.927]],"o":[[0,0],[1.178,-1.927]],"v":[[47.396,-2.495],[66.132,8.305]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[17.915,5.472],[-2.495,4.082]],"o":[[0,0],[2.494,-4.082]],"v":[[127.416,14.655],[167.1,37.528]],"c":true}]},{"t":100,"s":[{"i":[[2.922,0.892],[-0.407,0.666]],"o":[[0,0],[0.407,-0.666]],"v":[[231.544,79.714],[238.016,83.445]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-7.371,11.75],[-2.605,-2.954]],"o":[[0,0],[2.605,2.954]],"v":[[-19.417,21.61],[-33.613,50.565]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-16.511,26.322],[-5.835,-6.617]],"o":[[0,0],[5.835,6.617]],"v":[[-54.289,78.774],[-86.09,143.637]],"c":true}]},{"t":100,"s":[{"i":[[-2.019,3.219],[-0.714,-0.809]],"o":[[0,0],[0.714,0.809]],"v":[[-120,208.391],[-123.889,216.322]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[4.272,18.752],[3.489,0]],"o":[[0,0],[-2.919,0]],"v":[[13.337,36.564],[18.266,63.997]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[9.5,41.701],[7.758,0]],"o":[[0,0],[-6.491,0]],"v":[[34.44,120.578],[45.401,181.583]],"c":true}]},{"t":100,"s":[{"i":[[1.211,5.316],[0.989,0]],"o":[[0,0],[-0.827,0]],"v":[[49.981,239.625],[51.378,247.402]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.357,10.649],[2.065,-1.671]],"o":[[0,0],[-2.092,1.693]],"v":[[27.785,38.344],[37.752,60.836]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[12.682,25.21],[4.889,-3.955]],"o":[[0,0],[-4.953,4.007]],"v":[[73.965,124.33],[97.561,177.576]],"c":true}]},{"t":100,"s":[{"i":[[1.068,2.124],[0.412,-0.333]],"o":[[0,0],[-0.417,0.338]],"v":[[112.746,219.25],[114.734,223.735]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[7.125,6.764],[2.818,-3.288]],"o":[[0,0],[-1.952,2.278]],"v":[[39.186,19.394],[56.431,42.171]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[16.508,15.671],[6.529,-7.617]],"o":[[0,0],[-4.523,5.277]],"v":[[103.804,73.868],[143.76,126.64]],"c":true}]},{"t":100,"s":[{"i":[[1.631,1.548],[0.645,-0.753]],"o":[[0,0],[-0.447,0.521]],"v":[[178.352,168.75],[182.3,173.964]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":5,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[14.003,-18.483],[-2.995,-2.598]],"o":[[0,0],[2.346,2.035]],"v":[[19.896,-54.149],[37.88,-77.508]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[31.33,-41.355],[-6.701,-5.813]],"o":[[0,0],[5.249,4.553]],"v":[[52.828,-125.71],[93.066,-177.974]],"c":true}]},{"t":100,"s":[{"i":[[3.858,-5.092],[-0.825,-0.716]],"o":[[0,0],[0.646,0.561]],"v":[[119.615,-214],[124.57,-220.435]],"c":true}]}]},"nm":"Path 6","hd":false},{"ind":6,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.092,-13.223],[3.225,-0.461]],"o":[[0,0],[-3.225,0.461]],"v":[[-11.7,-53.501],[-23.447,-74.576]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-13.694,-29.721],[7.248,-1.036]],"o":[[0,0],[-7.248,1.036]],"v":[[-33.744,-123.528],[-60.149,-170.902]],"c":true}]},{"t":100,"s":[{"i":[[-1.641,-3.562],[0.869,-0.124]],"o":[[0,0],[-0.869,0.124]],"v":[[-92.793,-229.25],[-95.958,-234.928]],"c":true}]}]},"nm":"Path 7","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.403921574354,0.454901963472,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 7","hd":false},{"ty":"tr","p":{"a":0,"k":[40.287,1.6]},"a":{"a":0,"k":[40.287,1.6]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"rose splashes 40%","sr":1,"ks":{"o":{"a":0,"k":40},"p":{"a":0,"k":[255.462,250.532,0]},"a":{"a":0,"k":[12.462,7.532,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[2.498,-1.717],[-2.802,-3.967]],"o":[[-1.32,0.907],[0,0]],"v":[[-27.909,-69.864],[-23.485,-62.918]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[5.583,-3.836],[-6.261,-8.864]],"o":[[-2.949,2.026],[0,0]],"v":[[-77.365,-168.395],[-67.479,-152.872]],"c":true}]},{"t":100,"s":[{"i":[[0.692,-0.476],[-0.776,-1.099]],"o":[[-0.366,0.251],[0,0]],"v":[[-104.452,-204.425],[-103.226,-202.5]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.758,-1.202],[3.089,-1.172]],"o":[[0,0],[-3.089,1.172]],"v":[[-40.584,-41.866],[-51.165,-45.778]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-10.775,-2.722],[6.996,-2.654]],"o":[[0,0],[-6.996,2.654]],"v":[[-111.836,-92.023],[-135.799,-100.881]],"c":true}]},{"t":100,"s":[{"i":[[-1.235,-0.312],[0.802,-0.304]],"o":[[0,0],[-0.802,0.304]],"v":[[-194.867,-116.25],[-197.612,-117.265]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.418,17.711],[-4.713,-1.091]],"o":[[0,0],[2.758,0.638]],"v":[[-22.297,35.041],[-30.452,64.628]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-14.835,40.938],[-10.895,-2.522]],"o":[[0,0],[6.375,1.475]],"v":[[-62.088,115.52],[-80.938,183.907]],"c":true}]},{"t":100,"s":[{"i":[[-1.49,4.112],[-1.094,-0.253]],"o":[[0,0],[0.64,0.148]],"v":[[-89,203.172],[-90.893,210.041]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.125,2.009],[-1.205,-2.41]],"o":[[-0.644,-1.15],[1.205,2.41]],"v":[[60.208,34.488],[58.28,36.577]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[2.266,4.046],[-2.428,-4.856]],"o":[[-1.297,-2.316],[2.428,4.856]],"v":[[161.46,114.372],[157.576,118.58]],"c":true}]},{"t":100,"s":[{"i":[[0.457,0.815],[-0.489,-0.978]],"o":[[-0.261,-0.467],[0.489,0.978]],"v":[[178.425,143.467],[177.643,144.315]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.378,1.888],[-0.054,-1.294]],"o":[[-0.244,-1.218],[0.054,1.294]],"v":[[57.201,-37.513],[53.318,-36.704]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.721,3.602],[-0.103,-2.47]],"o":[[-0.465,-2.323],[0.103,2.47]],"v":[[152.987,-80.688],[145.577,-79.144]],"c":true}]},{"t":100,"s":[{"i":[[0.177,0.884],[-0.025,-0.606]],"o":[[-0.114,-0.57],[0.025,0.606]],"v":[[207.62,-96.485],[205.801,-96.106]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":5,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.033,1.484],[-0.082,-1.894]],"o":[[0.031,-1.392],[0.082,1.894]],"v":[[53.595,-30.294],[48.408,-29.669]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-0.074,3.328],[-0.185,-4.247]],"o":[[0.069,-3.121],[0.185,4.247]],"v":[[143.792,-61.221],[132.159,-59.821]],"c":true}]},{"t":100,"s":[{"i":[[-0.009,0.404],[-0.022,-0.516]],"o":[[0.008,-0.379],[0.022,0.516]],"v":[[216.285,-76.436],[214.873,-76.266]],"c":true}]}]},"nm":"Path 6","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.403921574354,0.454901963472,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 6","hd":false},{"ty":"tr","p":{"a":0,"k":[12.462,7.532]},"a":{"a":0,"k":[12.462,7.532]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"violet","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[33.333]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[100]},{"t":70,"s":[0]}]},"p":{"a":0,"k":[250.172,221.61,0]},"a":{"a":0,"k":[7.172,-21.39,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.629,0.629,0.629],"y":[0,0,0]},"t":30,"s":[43.235,43.235,100]},{"t":40,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[8.424,-5.071],[2.653,-10.693],[8.493,-0.25],[-0.281,-21.575],[8.206,2.479],[-9.071,-18.319],[10.163,-0.826],[-8.504,-13.367],[7.925,-6.142],[-9.44,-13.344],[2.854,-8.942],[-21.641,-24.17],[6.753,-1.287],[-6.374,-4.022],[10.533,-2.098],[-13.32,-3.511],[-1.839,-6.483],[-21.075,-3.827],[-5.954,-6.816],[-11.932,-2.571],[3.257,-17.575],[-38.942,9.134],[-0.325,-7.706],[-8.742,1.73],[-8.801,-7.785],[-30.134,14.717],[-9.382,-4.129],[-16.279,6.661],[1.088,-8.515],[-7.687,7.097],[-6.012,-8.868],[-10.651,19.166],[-10.35,0.696],[-9.579,21.376],[-8.09,4.605],[-5.131,22.602],[-3.808,-4.758],[-0.748,8.961],[-7.254,-2.788],[2.909,7.968],[-7.635,-1.047],[9.08,17.754],[-7.507,3.193],[9.997,10.579],[-6.351,4.692],[9.781,8.968],[0.178,6.817],[17.454,12.482],[0.03,6.973],[12.265,1.257],[-5.162,4.439],[17.018,1.365],[-5.218,7.12],[24.328,-1.527],[-3.121,9.666],[14.883,-6.778],[10.864,5.993],[11.338,-8.563],[5.168,9.097],[9.336,-10.339],[5.422,9.555],[17.401,-17.591],[8.409,7.467],[2.648,-7.068],[8.104,5.903],[5.776,-17.779],[7.39,-3.513],[1.572,-7.178],[9.221,3.529],[4.343,-6.683]],"o":[[-7.125,5.075],[-0.627,-20.281],[-8.492,0.25],[-7.605,-11.419],[-6.68,-3.509],[-2.4,-2.857],[-8.37,0.053],[-2.455,-2.437],[-7.318,5.151],[-25.313,-18.266],[-0.866,7.957],[-15.111,-8.219],[-6.731,1.147],[0,0],[-8.775,1.322],[-36.623,-3.316],[2.35,6.725],[-4.284,0.119],[5.62,5.119],[0,0],[-0.325,7.953],[-14.317,6.526],[0.333,6.979],[-5.382,3.713],[7.32,4.607],[-4.424,3.372],[7.613,2.532],[-10.42,10.905],[-1.668,7.104],[-2.075,4.92],[4.11,6.36],[-1.424,4.903],[7.699,-1.121],[0,0],[8.176,-4.621],[-1.052,23.086],[4.14,4.652],[5.615,9.885],[7.25,2.786],[5.203,5.546],[7.441,1.093],[15.761,17.732],[7.507,-3.193],[5.904,3.732],[6.351,-4.692],[9.84,5.408],[-0.622,-6.552],[19.337,4.71],[0.329,-7.351],[6.418,-1.574],[5.14,-4.409],[27.522,-2.876],[5.215,-7.117],[4.426,-6.277],[2.875,-9.309],[1.399,-5.562],[-7.079,-5.34],[4.34,-9.001],[-5.002,-8.493],[13.638,-18.255],[-5.312,-9.225],[0.333,-7.822],[-7.414,-6.268],[3.497,-13.498],[-8.104,-5.903],[-0.973,-5.144],[-8.335,3.293],[-2.994,-1.674],[-9.108,-3.513],[-0.006,-3.457]],"v":[[5.228,-95.512],[7.462,-28.929],[-2.195,-87.293],[6.416,-28.961],[-31.261,-81.602],[2.547,-32.204],[-43.849,-81.375],[0.273,-32.419],[-44.643,-71.2],[-1.483,-31.501],[-68.757,-71.437],[-0.116,-26.024],[-42.303,-41.201],[-2.32,-26.028],[-60.656,-35.365],[-6.28,-25.891],[-67.569,-24.781],[-6.096,-24.791],[-61.84,-18.285],[-3.524,-23.253],[-83.167,12.168],[-3.472,-21.52],[-43.616,2.576],[-3.348,-19.306],[-64.141,31.565],[0.002,-18.262],[-50.895,27.819],[3.739,-17.431],[-29.038,27.111],[2.554,-14.294],[-16.457,46.001],[4.192,-11.614],[-10.643,61.853],[6.528,-12.171],[7.719,52.216],[8.895,-14.393],[13.275,34.112],[10.222,-12.355],[26.825,31.666],[12.417,-11.04],[35.999,36.579],[14.675,-10.481],[49.25,44.887],[15.923,-11.135],[54.41,30.884],[17.017,-12.053],[59.976,24.143],[15.598,-15.029],[60.134,6.365],[15.406,-16.076],[56.972,-8.479],[17.766,-17.986],[90.136,-9.191],[19.955,-19.743],[79.759,-35.208],[20.474,-22.64],[63.92,-44.118],[18.736,-24.334],[63.006,-55.052],[17.431,-26.232],[77.149,-67.057],[16.295,-27.947],[47.537,-73.383],[14.878,-29.037],[41.274,-77.714],[13.733,-29.91],[25.971,-72.901],[12.306,-29.047],[19.524,-85.462],[9.122,-30.564]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[8.849,0.01],[7.184,-28.957],[3.052,-1.273],[-0.761,-58.423],[7.839,-5.353],[-24.563,-49.607],[9.192,-3.975],[-23.029,-36.198],[4.861,-7.946],[-25.563,-36.135],[12.25,-6.125],[-58.602,-65.452],[0.423,-3.502],[-17.26,-10.89],[11.497,-5.096],[-36.071,-9.509],[-2.201,-1.041],[-57.07,-10.364],[-1.998,-10.013],[-32.312,-6.962],[9.36,-30.715],[-105.454,24.735],[0.047,-4.178],[-23.672,4.686],[-7.461,-15.968],[-81.601,39.854],[-8.157,-7.347],[-44.083,18.039],[-3.026,-7.306],[-20.815,19.217],[-8.186,-10.792],[-28.842,51.901],[-12.022,-1.924],[-25.94,57.885],[-10.365,1.613],[-13.894,61.205],[-1.581,0.481],[-2.025,24.266],[-5.413,1.006],[7.876,21.576],[-4.573,1.132],[24.589,48.078],[-6.41,1.365],[27.072,28.648],[-4.858,2.346],[26.485,24.286],[-6.451,3.968],[47.266,33.8],[-2.771,2.906],[33.213,3.403],[-1.167,1.667],[46.083,3.696],[-1.333,9],[65.879,-4.134],[-5.083,7.361],[40.303,-18.354],[15.513,2.68],[30.702,-23.187],[1.943,7.096],[25.282,-27.999],[2.5,7.5],[47.12,-47.637],[6.155,7.421],[7.17,-19.139],[5.169,3.176],[15.641,-48.146],[3.103,0.727],[4.257,-19.437],[6.927,0.949],[11.76,-18.098]],"o":[[-5.323,-0.006],[-1.697,-54.919],[-3.052,1.273],[-20.594,-30.923],[-3.728,2.546],[-6.498,-7.737],[-4.346,1.879],[-6.647,-6.6],[-3.22,5.264],[-68.548,-49.463],[-6.872,3.436],[-40.921,-22.258],[-0.377,3.121],[0,0],[-6.756,2.995],[-99.173,-8.979],[3.585,1.695],[-11.602,0.322],[1.08,5.412],[0,0],[-1.42,4.661],[-38.77,17.671],[-0.025,2.213],[-14.575,10.054],[3.439,7.359],[-11.98,9.131],[3.354,3.021],[-28.218,29.53],[1.451,3.503],[-5.619,13.324],[3.041,4.009],[-3.855,13.277],[4.839,0.774],[0,0],[10.589,-1.648],[-2.849,62.516],[2.488,-0.757],[15.206,26.767],[5.413,-1.006],[14.09,15.019],[4.055,-1.004],[42.68,48.017],[6.41,-1.365],[15.989,10.107],[4.858,-2.346],[26.647,14.644],[5.257,-3.234],[52.364,12.754],[3.745,-3.927],[17.38,-4.263],[1.115,-1.592],[74.53,-7.789],[1.333,-9],[11.985,-16.998],[4.419,-6.4],[3.79,-15.061],[-5.258,-0.908],[11.752,-24.375],[-1.495,-5.458],[36.932,-49.434],[-2.202,-6.607],[0.901,-21.183],[-3.464,-4.176],[9.469,-36.552],[-5.169,-3.176],[-2.634,-13.929],[-5.658,-1.325],[-8.107,-4.533],[-6.628,-0.908],[-0.017,-9.362]],"v":[[3.02,-162.999],[8.243,-41.492],[-9.448,-140.273],[5.428,-41.577],[-66.581,-136.474],[-4.982,-50.303],[-94.937,-141.294],[-11.103,-50.883],[-91.631,-117.558],[-15.827,-48.412],[-150.75,-126.625],[-12.148,-33.673],[-76.677,-54.762],[-18.079,-33.683],[-125.935,-48.926],[-28.737,-33.315],[-144.516,-27.935],[-28.241,-30.355],[-129.957,-16.393],[-21.32,-26.218],[-189.443,52.219],[-21.179,-21.553],[-84.613,22.128],[-20.845,-15.595],[-143.927,91.798],[-11.831,-12.788],[-109.552,77.33],[-1.776,-10.549],[-60.574,69.369],[-4.963,-2.109],[-41.055,117.272],[-0.555,5.102],[-30.196,155.83],[5.729,3.604],[8.665,130.425],[12.099,-2.376],[18.32,81.416],[15.669,3.108],[41.962,76.131],[21.577,6.648],[62.49,91.451],[27.654,8.15],[95.923,118.365],[31.011,6.393],[102.975,84.18],[33.954,3.923],[112.957,71.446],[30.136,-4.087],[107.438,31.594],[29.62,-6.903],[94.5,0.667],[35.97,-12.045],[183.167,5],[41.86,-16.772],[147.562,-47.507],[43.258,-24.567],[106.809,-61.148],[38.582,-29.125],[103.057,-80.596],[35.068,-34.233],[141.167,-109],[32.012,-38.849],[76.865,-113.118],[28.198,-41.782],[66.503,-119.657],[25.119,-44.132],[37.324,-105.068],[21.279,-41.807],[29.931,-135.604],[12.71,-45.889]],"c":true}]},{"t":100,"s":[{"i":[[6.52,-0.499],[0,0],[7.552,-1.773],[0,0],[7.419,-3.974],[0,0],[5.063,-2.794],[0,0],[3.869,-4.058],[0,0],[3.25,-5.125],[0,0],[2.323,-7.262],[0,0],[1.065,-7.426],[0,0],[-0.016,-6.935],[0,0],[0.043,-8.393],[0,0],[-1.943,-5.281],[0,0],[-4.613,-6.872],[0,0],[-4.427,-4.702],[0,0],[-5.552,-5.67],[0,0],[-7.074,-5.131],[0,0],[-7.555,-2.728],[0,0],[-8.696,0.33],[0,0],[-5.835,-0.075],[0,0],[-5.179,-0.584],[0,0],[-7.538,4.131],[0,0],[-4.51,1.951],[0,0],[-7.077,4.865],[0,0],[-5.025,3.68],[0,0],[-5.043,6.946],[0,0],[-2.062,4.094],[0,0],[-1.5,7.666],[0,0],[-1.333,7.5],[0,0],[-0.438,6.493],[0,0],[2.309,7.852],[0,0],[1.057,4.404],[0,0],[1.667,6.5],[0,0],[6.365,6.382],[0,0],[3.503,2.843],[0,0],[5.324,3.432],[0,0],[2.931,0.896],[0,0]],"o":[[-6.521,0.499],[0,0],[-7.552,1.773],[0,0],[-7.419,3.974],[0,0],[-5.063,2.794],[0,0],[-3.869,4.058],[0,0],[-3.25,5.125],[0,0],[-2.323,7.262],[0,0],[-1.065,7.426],[0,0],[0.016,6.935],[0,0],[-0.043,8.393],[0,0],[1.943,5.281],[0,0],[4.613,6.872],[0,0],[4.427,4.702],[0,0],[5.552,5.67],[0,0],[7.074,5.131],[0,0],[7.555,2.728],[0,0],[8.696,-0.33],[0,0],[5.835,0.075],[0,0],[5.18,0.584],[0,0],[7.538,-4.131],[0,0],[4.51,-1.951],[0,0],[7.077,-4.865],[0,0],[5.025,-3.68],[0,0],[5.043,-6.946],[0,0],[2.062,-4.094],[0,0],[1.5,-7.666],[0,0],[1.333,-7.5],[0,0],[0.438,-6.493],[0,0],[-2.309,-7.852],[0,0],[-1.057,-4.404],[0,0],[-1.667,-6.5],[0,0],[-6.365,-6.382],[0,0],[-3.503,-2.843],[0,0],[-5.324,-3.432],[0,0],[-2.931,-0.896],[0,0]],"v":[[0.021,-238.999],[6.522,-22.25],[-22.948,-238.773],[6.486,-22.251],[-111.081,-205.974],[6.353,-22.363],[-136.437,-188.794],[6.274,-22.37],[-151.131,-175.058],[6.214,-22.339],[-176.75,-144.125],[6.261,-22.15],[-199.177,-102.262],[6.185,-22.15],[-209.935,-65.926],[6.048,-22.145],[-215.016,-31.435],[6.055,-22.107],[-215.457,-11.893],[6.143,-22.054],[-201.443,57.219],[6.145,-21.994],[-194.113,74.128],[6.149,-21.918],[-171.427,112.298],[6.265,-21.882],[-163.052,122.83],[6.394,-21.853],[-126.074,156.869],[6.353,-21.745],[-65.055,189.772],[6.41,-21.653],[-38.196,196.33],[6.49,-21.672],[9.165,202.425],[6.572,-21.748],[31.821,199.416],[6.618,-21.678],[80.962,187.631],[6.693,-21.633],[105.49,178.451],[6.771,-21.613],[127.923,167.865],[6.814,-21.636],[157.975,144.18],[6.852,-21.668],[174.957,125.946],[6.803,-21.77],[204.438,84.094],[6.796,-21.806],[223.5,34.166],[6.878,-21.872],[227.667,12],[6.953,-21.933],[227.062,-61.507],[6.971,-22.033],[213.309,-104.148],[6.911,-22.091],[198.057,-137.596],[6.866,-22.157],[195.667,-144],[6.827,-22.216],[142.865,-200.118],[6.778,-22.254],[122.503,-211.157],[6.739,-22.284],[84.324,-230.568],[6.689,-22.254],[51.431,-240.604],[6.58,-22.306]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":80},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.001,0.467,0.031,0.541,0.707,0.435,0.108,0.561,1,0.404,0.184,0.58]}},"s":{"a":0,"k":[4,-20]},"e":{"a":0,"k":[177.39,-20]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 3","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0}]},{"id":"comp_4","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"picies2","sr":1,"ks":{"p":{"a":0,"k":[257.33,185.73,0]},"a":{"a":0,"k":[-265.67,-10.27,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,-0.35],[53.84,0],[-19.93,11.56],[-1,-40.01]],"o":[[0,50.03],[-31.67,-34.87],[39.26,-0.87],[0.01,0.35]],"v":[[-168.19,-10.27],[-265.67,80.32],[-266.5,-79.82],[-168.2,-11.32]],"c":true}]},{"t":35,"s":[{"i":[[0,-0.004],[0.613,0],[-0.227,0.132],[-0.011,-0.455]],"o":[[0,0.569],[-0.36,-0.397],[0.447,-0.01],[0,0.004]],"v":[[-145.03,70.7],[-146.14,71.731],[-146.149,69.909],[-145.03,70.688]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-2.5,-7],[15.65,-61.05],[-53.84,0]],"o":[[0,0],[0,-50.03],[0,0]],"v":[[-266.5,-79.82],[-363.15,-10.27],[-265.67,-100.86]],"c":true}]},{"t":35,"s":[{"i":[[-0.013,-0.036],[0.08,-0.312],[-0.275,0]],"o":[[0,0],[0,-0.256],[0,0]],"v":[[-383.165,-126.689],[-383.659,-126.333],[-383.161,-126.797]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.6,-49.55],[39.26,-0.87],[0,0]],"o":[[-1,-40.01],[-2.5,-7],[53.46,0]],"v":[[-168.2,-11.32],[-266.5,-79.82],[-265.67,-100.86]],"c":true}]},{"t":35,"s":[{"i":[[-0.018,-1.483],[1.175,-0.026],[0,0]],"o":[[-0.03,-1.198],[-0.075,-0.21],[1.6,0]],"v":[[-162.091,-102.75],[-165.034,-104.8],[-165.009,-105.43]],"c":true}]}]},"nm":"Path 3","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0,0.690196078431,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 3","hd":false},{"ty":"tr","p":{"a":0,"k":[-265.67,-10.27]},"a":{"a":0,"k":[-265.67,-10.27]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-31.67,-34.87],[0,50.03],[0,0]],"o":[[-53.84,0],[15.65,-61.05],[-19.93,11.56]],"v":[[-265.67,80.32],[-363.15,-10.27],[-266.5,-79.82]],"c":true}]},{"t":35,"s":[{"i":[[-0.099,-0.109],[0,0.156],[0,0]],"o":[[-0.168,0],[0.049,-0.191],[-0.062,0.036]],"v":[[-415.258,90.5],[-415.562,90.217],[-415.26,90]],"c":true}]}]},"nm":"Path 4","hd":false},{"ty":"fl","c":{"a":0,"k":[0.529411764706,0,0.486274539723,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 3","hd":false},{"ty":"tr","p":{"a":0,"k":[-314.41,0.25]},"a":{"a":0,"k":[-314.41,0.25]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"st","c":{"a":0,"k":[0.301960784314,0,0.274509803922,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-265.67,-10.27]},"a":{"a":0,"k":[-265.67,-10.27]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":30,"op":35,"st":2,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"picies","sr":1,"ks":{"p":{"a":0,"k":[255,191.406,0]},"a":{"a":0,"k":[0,45.406,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-14.81,-13.46],[11.95,21.92],[1.11,16.11],[-22.44,-7.84],[-11.16,1.15]],"o":[[-22.91,4.11],[-6.67,-12.23],[5.79,24.31],[9.97,3.48],[-0.13,0.68]],"v":[[10.978,133.929],[-49.332,107.219],[-76.002,35.549],[-29.982,86.199],[2.028,89.909]],"c":true}]},{"t":36,"s":[{"i":[[0.042,0.009],[-0.025,-0.045],[-0.002,-0.033],[0.03,0.046],[0.013,0.008]],"o":[[0.048,-0.009],[0.014,0.025],[-0.012,-0.05],[-0.009,-0.013],[-0.02,-0.013]],"v":[[-71.68,195.17],[-71.555,195.225],[-71.5,195.374],[-71.582,195.231],[-71.615,195.198]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-20.7,35.34],[6.66,-12.23],[15.67,-2.82],[0,0],[-0.13,0.68]],"o":[[-1.11,16.11],[-8.18,15],[0,0],[-14.81,-13.46],[25.91,-2.68]],"v":[[75.998,35.549],[49.338,107.219],[10.988,133.929],[10.978,133.929],[2.028,89.909]],"c":true}]},{"t":36,"s":[{"i":[[-0.149,0.254],[0.048,-0.088],[0.112,-0.02],[0,0],[-0.001,0.005]],"o":[[-0.008,0.116],[-0.059,0.108],[0,0],[0.129,-0.1],[0.093,-0.157]],"v":[[73.967,180.898],[73.775,181.412],[73.5,181.604],[73.5,181.604],[73.665,181.395]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[4.69,-50.46],[25.91,-2.68],[9.97,3.48],[-5.65,29.96],[19.36,23.12]],"o":[[-20.7,35.34],[-11.16,1.15],[25.15,-11.39],[3.71,-19.59],[38.33,2.51]],"v":[[75.998,35.549],[2.028,89.909],[-29.982,86.199],[26.648,21.049],[6.078,-43.891]],"c":true}]},{"t":36,"s":[{"i":[[0.019,-0.202],[0.104,-0.011],[0.04,0.014],[-0.023,0.12],[0.077,0.092]],"o":[[-0.083,0.141],[-0.045,0.005],[0.101,-0.046],[0.015,-0.078],[0.153,0.01]],"v":[[154.424,34.876],[154.128,35.094],[154,35.079],[154.226,34.818],[154.144,34.559]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[3.71,-19.59],[21,-18.31],[-37.83,-2.49]],"o":[[-10.36,-22.61],[4.41,-44.16],[19.36,23.12]],"v":[[26.648,21.049],[-76.002,18.639],[6.078,-43.891]],"c":true}]},{"t":36,"s":[{"i":[[0.012,-0.061],[0.066,-0.057],[-0.118,-0.008]],"o":[[-0.032,-0.071],[0.014,-0.138],[0.06,0.072]],"v":[[1.192,-97.167],[0.872,-97.174],[1.128,-97.369]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-10.36,-22.61],[25.15,-11.39],[5.79,24.31],[-0.53,5.3]],"o":[[-5.65,29.96],[-22.44,-7.84],[-0.55,-5.97],[21,-18.31]],"v":[[26.648,21.049],[-29.982,86.199],[-76.002,35.549],[-76.002,18.639]],"c":true}]},{"t":36,"s":[{"i":[[-0.156,-0.229],[0.005,-0.198],[0.125,0.524],[-0.011,0.114]],"o":[[0.175,0.257],[-0.483,-0.169],[-0.012,-0.129],[0.113,0.148]],"v":[[-149.053,15.247],[-148.42,15.955],[-149.412,14.864],[-149.412,14.5]],"c":true}]}]},"nm":"Path 5","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0,0.690196078431,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 5","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960784314,0,0.274509803922,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,45.406]},"a":{"a":0,"k":[0,45.406]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":31,"op":36,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"Null 3","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[256]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[257.445]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[251.735]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[262.162]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[256.384]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[256.888]},{"t":29,"s":[254.404]}]},"y":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[198]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[190.425]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[197.133]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[186.523]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[194.791]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[186.058]},{"t":29,"s":[194.761]}]}},"a":{"a":0,"k":[50,50,0]}},"ao":0,"ip":20,"op":30,"st":-60,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"Null 19","parent":3,"sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[50,108,0],"to":[0,0,0],"ti":[0,0,0]},{"t":30,"s":[50,1,0]}]}},"ao":0,"ip":0,"op":36,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"blik","parent":6,"sr":1,"ks":{"p":{"a":0,"k":[20.897,-88.771,0]},"a":{"a":0,"k":[19.25,-92,0]},"s":{"a":0,"k":[70,70,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.427,-0.298],[-30.5,146.5]],"o":[[0,13.193],[-55,1.5],[-0.5,0]],"v":[[80.444,-33.889],[0,-10],[0,-200]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-61.227],[24.905,-1.3],[-8.202,27.448]],"o":[[0,40.169],[-45,-4.333],[2.417,-2.431]],"v":[[98.282,62.507],[32.976,130.655],[10.893,-24.206]],"c":true}]},{"t":30,"s":[{"i":[[0,-77.778],[23.059,-1.647],[-4.109,3.995]],"o":[[0,50.031],[-47.216,-6.039],[3.294,-3.203]],"v":[[109.918,84.947],[41.535,169.497],[12.437,7.17]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":0,"k":8},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-131]},{"t":30,"s":[-5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8.571},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":2}},{"n":"g","nm":"gap","v":{"a":0,"k":12}},{"n":"d","nm":"dash2","v":{"a":0,"k":297}},{"n":"o","nm":"offset","v":{"a":0,"k":0}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":30,"st":-60,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"rocket_cap","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[0,-33.889,0]},"a":{"a":0,"k":[0,-33.889,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.427,-0.298],[-30.5,146.5]],"o":[[0,13.193],[-55,1.5],[-0.5,0]],"v":[[80.444,-33.889],[0,-10],[0,-200]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-61.227],[24.905,-1.3],[-8.202,27.448]],"o":[[0,40.169],[-45,-4.333],[2.417,-2.431]],"v":[[87.389,21.435],[22.083,89.583],[0,-65.278]],"c":true}]},{"t":30,"s":[{"i":[[0,-77.778],[23.059,-1.647],[-4.109,3.995]],"o":[[0,50.031],[-47.216,-6.039],[3.294,-3.203]],"v":[[97.776,39.412],[29.392,123.961],[0.294,-38.366]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0,0.690196078431,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.428,0],[0,13.193],[0,0]],"o":[[0,13.193],[-44.428,0],[0,-13.193],[0,0]],"v":[[80.444,-33.889],[0,-10],[-80.444,-33.889],[0,-200]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-61.227],[48.264,0],[0,40.168],[0,0]],"o":[[0,40.168],[-48.264,0],[0,-61.227],[0,0]],"v":[[87.389,21.435],[0,94.167],[-87.389,21.435],[0,-65.278]],"c":true}]},{"t":30,"s":[{"i":[[0,-77.778],[53.838,0],[0,50.031],[0,0]],"o":[[0,50.031],[-53.838,0],[0,-77.778],[0,0]],"v":[[97.776,39.412],[0.294,130],[-97.187,39.412],[0.294,-38.366]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.529411764706,0,0.486274539723,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-105]},"a":{"a":0,"k":[0,-105]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.428,0],[0,13.193],[-44.428,0]],"o":[[0,13.193],[-44.428,0],[0,-13.193],[44.428,0]],"v":[[80.444,-33.889],[0,-10],[-80.444,-33.889],[0,-57.778]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-40.168],[48.264,0],[0,40.168],[-48.264,0]],"o":[[0,40.168],[-48.264,0],[0,-40.168],[48.264,0]],"v":[[87.389,21.435],[0,94.167],[-87.389,21.435],[0,-51.296]],"c":true}]},{"t":30,"s":[{"i":[[0,-50.031],[53.838,0],[0,50.031],[-53.838,0]],"o":[[0,50.031],[-53.838,0],[0,-50.031],[53.838,0]],"v":[[97.776,39.412],[0.294,130],[-97.187,39.412],[0.294,-51.176]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0,0.690196078431,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-33.889]},"a":{"a":0,"k":[0,-33.889]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"st","c":{"a":0,"k":[0.3,0,0.276439771465,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"rocket body 2 outlines","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[0,71.389,0]},"a":{"a":0,"k":[0,71.389,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[2.222,-10],[7.734,34.804],[0,0]],"o":[[0,0],[-7.676,34.543],[-2.222,-10],[0,0]],"v":[[68.778,-37.222],[59.333,153.333],[-59.333,153.333],[-68.778,-37.222]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[6.667,-12.222],[20.133,36.91],[1.111,16.111]],"o":[[-1.111,16.111],[-20.133,36.911],[-6.667,-12.222],[0,0]],"v":[[76,35.556],[49.333,107.222],[-49.333,107.222],[-76,35.556]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960784314,0,0.274509803922,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"rocket body 2 shadows","parent":10,"sr":1,"ks":{"o":{"a":0,"k":50},"p":{"a":0,"k":[0,71.389,0]},"a":{"a":0,"k":[0,71.389,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0.667,-19.333],[7.333,22.167],[0,0]],"o":[[0,0],[0.167,0.667],[-3.217,-9.726],[0,0]],"v":[[-13.222,-18.222],[-12.667,177.333],[-59.333,153.333],[-68.778,-37.222]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[0.167,-11.222],[18.833,29.278],[1.111,16.111]],"o":[[-1.111,16.111],[-15.833,-1.222],[-7.532,-11.709],[0,0]],"v":[[8,37.056],[7.333,133.222],[-49.333,107.222],[-76,35.556]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.3,0,0.274509803922,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"lines2","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[-4.5,135.446,0]},"a":{"a":0,"k":[-4.5,135.446,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[19,23.25],[0,0],[-72.25,-0.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-45,-7]],"v":[[-67.5,-34.25],[-66,-10.75],[65.25,58.5],[66.5,12.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[19,23.25],[0,0],[-70.25,-2.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-45,-7]],"v":[[-67.5,-34.25],[-67,-26.25],[65.75,25],[68.5,-17]],"c":true}]},{"t":10,"s":[{"i":[[19,23.25],[0,0],[-70.25,-2.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-45,-7]],"v":[[-67.5,-34.25],[-67,-26.25],[68.25,-15],[68.5,-17]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[25,44.25],[0,0],[-71.75,9],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-65,33.75],[-62.5,74.75],[60.75,137],[62.5,98]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[25,44.25],[0,0],[-71.75,10.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-66.5,2.75],[-65,41.25],[61.75,99],[65,63]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[26,30.25],[0,0],[-71.75,10.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-68.5,-6.75],[-66,19.75],[62.75,70.5],[68,37]],"c":true}]},{"t":15,"s":[{"i":[[26,30.25],[0,0],[-54.75,16],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-68.5,-6.75],[-65.5,15.25],[65.75,49],[71,14]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[20,16.5],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[13.25,13.75],[-0.25,0],[-50.75,19]],"v":[[-56.25,160.5],[-56,160.5],[49.25,167.75],[49.75,168]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[20,16.5],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[13.25,13.75],[-0.25,0],[-50.75,19]],"v":[[-54.5,154.25],[-54.25,154.25],[43,161.5],[43.5,161.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[20,16.5],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[13.25,13.75],[-0.25,0],[-50.75,19]],"v":[[-53.75,148],[-53.5,148],[42.25,155.5],[42.75,155.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[17.5,26],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-52.5,136.25],[-52.75,136.25],[42.25,147.75],[42.5,147.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-57.25,102.5],[-55,120.25],[43.25,137.5],[44,133.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-59.25,89.5],[-54.25,106.75],[42.5,128],[48,118.75]],"c":true}]},{"t":30,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-58.5,71.75],[-53.5,89],[43.25,110.25],[48.75,101]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[19,27.5],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-58.5,158.5],[-58.25,158.5],[53.5,166],[54,165]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[19,27.5],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-57.25,147],[-57.25,147.5],[50.5,160],[50,161]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[24.25,45.5],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-60.5,106.5],[-58.75,138.5],[51,150],[51.25,149.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[24.25,45.5],[0,0],[-54.5,29.25],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-62.5,78],[-58.25,106.75],[49,141.75],[53.5,124.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-62.5,67.5],[-59.5,89.75],[50,121.5],[54.5,104.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[21.25,35.75],[0,0],[-49.75,27],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-62.5,63.25],[-60.75,81.25],[52.25,106.5],[57.25,81]],"c":true}]},{"t":30,"s":[{"i":[[21.25,35.75],[0,0],[-49.75,27],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-62.5,63.25],[-60.75,70.5],[56.5,84.75],[57.25,81]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[25,44.25],[0,0],[-47,36.25],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.5,40.25]],"v":[[-61.5,114.75],[-59,155.75],[63.25,158],[63.5,157.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[25,44.25],[0,0],[-55,45.75],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-62,77.5],[-60.75,112.25],[60.75,151.25],[59.5,132.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[25,44.25],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-64.25,50.75],[-60.75,80.5],[58.25,128],[60.75,101.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[25,39],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-65.5,33.75],[-63.75,59.5],[59,101.75],[61.5,76.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[25,39],[0,0],[-55.75,26.75],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-69.5,30],[-65,49],[61,82.75],[63.75,62.25]],"c":true}]},{"t":25,"s":[{"i":[[25,39],[0,0],[-55.75,26.75],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-69.5,30],[-65,54.75],[62.25,76.25],[63.75,62.25]],"c":true}]}]},"nm":"Path 4","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725490196,0.81568627451,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"rocket body","parent":4,"sr":1,"ks":{"p":{"a":0,"k":[0,71.389,0]},"a":{"a":0,"k":[0,71.389,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[2.222,-10],[7.734,34.804],[0,0]],"o":[[0,0],[-7.676,34.543],[-2.222,-10],[0,0]],"v":[[68.778,-37.222],[59.333,153.333],[-59.333,153.333],[-68.778,-37.222]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[6.667,-12.222],[20.133,36.91],[1.111,16.111]],"o":[[-1.111,16.111],[-20.133,36.911],[-6.667,-12.222],[0,0]],"v":[[76,35.556],[49.333,107.222],[-49.333,107.222],[-76,35.556]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.749019607843,0,0.690196078431,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Shape Layer 11","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[283,390,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[257,472,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[283,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[262,427.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[280,323,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[279,288,0],"to":[0,0,0],"ti":[0,0,0]},{"t":31,"s":[259,328,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":4,"s":[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]},"t":10,"s":[20,20,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]},"t":11,"s":[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]},"t":17,"s":[20,20,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]},"t":18,"s":[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]},"t":24,"s":[20,20,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]},"t":25,"s":[100,100,100]},{"t":31,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":4,"op":31,"st":4,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Shape Layer 10","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[255,394,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[257,472,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[258,356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[262,427.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[255,327,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[261,292,0],"to":[0,0,0],"ti":[0,0,0]},{"t":33,"s":[259,328,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":6,"s":[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]},"t":12,"s":[20,20,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]},"t":13,"s":[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]},"t":19,"s":[20,20,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]},"t":20,"s":[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]},"t":26,"s":[20,20,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]},"t":27,"s":[100,100,100]},{"t":33,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":6,"op":33,"st":6,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Shape Layer 9","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[231,397,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[252,494,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[232,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[254,428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[230,336,0],"to":[0,0,0],"ti":[0,0,0]},{"t":28,"s":[256.5,371.5,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":8,"s":[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]},"t":14,"s":[20,20,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]},"t":15,"s":[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]},"t":21,"s":[20,20,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]},"t":22,"s":[100,100,100]},{"t":28,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":8,"op":28,"st":8,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[283,390,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[257,472,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[283,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[262,427.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[280,323,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[279,288,0],"to":[0,0,0],"ti":[0,0,0]},{"t":29,"s":[259,328,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":2,"s":[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]},"t":8,"s":[20,20,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]},"t":9,"s":[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]},"t":15,"s":[20,20,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]},"t":16,"s":[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]},"t":22,"s":[20,20,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]},"t":23,"s":[100,100,100]},{"t":29,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":2,"op":29,"st":2,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[231,397,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[252,494,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[232,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[254,428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[230,336,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[234,298,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[259,328,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[239,262,0],"to":[0,0,0],"ti":[0,0,0]},{"t":33,"s":[264,326,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":0,"s":[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]},"t":6,"s":[20,20,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]},"t":7,"s":[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]},"t":13,"s":[20,20,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]},"t":14,"s":[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]},"t":20,"s":[20,20,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]},"t":21,"s":[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]},"t":27,"s":[20,20,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]},"t":28,"s":[100,100,100]},{"t":33,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":0,"op":34,"st":0,"bm":0}]},{"id":"comp_5","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"picies2","sr":1,"ks":{"p":{"a":0,"k":[257.33,185.73,0]},"a":{"a":0,"k":[-265.67,-10.27,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,-0.35],[53.84,0],[-19.93,11.56],[-1,-40.01]],"o":[[0,50.03],[-31.67,-34.87],[39.26,-0.87],[0.01,0.35]],"v":[[-168.19,-10.27],[-265.67,80.32],[-266.5,-79.82],[-168.2,-11.32]],"c":true}]},{"t":35,"s":[{"i":[[0,-0.004],[0.613,0],[-0.227,0.132],[-0.011,-0.455]],"o":[[0,0.569],[-0.36,-0.397],[0.447,-0.01],[0,0.004]],"v":[[-145.03,70.7],[-146.14,71.731],[-146.149,69.909],[-145.03,70.688]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-2.5,-7],[15.65,-61.05],[-53.84,0]],"o":[[0,0],[0,-50.03],[0,0]],"v":[[-266.5,-79.82],[-363.15,-10.27],[-265.67,-100.86]],"c":true}]},{"t":35,"s":[{"i":[[-0.013,-0.036],[0.08,-0.312],[-0.275,0]],"o":[[0,0],[0,-0.256],[0,0]],"v":[[-383.165,-126.689],[-383.659,-126.333],[-383.161,-126.797]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.6,-49.55],[39.26,-0.87],[0,0]],"o":[[-1,-40.01],[-2.5,-7],[53.46,0]],"v":[[-168.2,-11.32],[-266.5,-79.82],[-265.67,-100.86]],"c":true}]},{"t":35,"s":[{"i":[[-0.018,-1.483],[1.175,-0.026],[0,0]],"o":[[-0.03,-1.198],[-0.075,-0.21],[1.6,0]],"v":[[-162.091,-102.75],[-165.034,-104.8],[-165.009,-105.43]],"c":true}]}]},"nm":"Path 3","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 3","hd":false},{"ty":"tr","p":{"a":0,"k":[-265.67,-10.27]},"a":{"a":0,"k":[-265.67,-10.27]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-31.67,-34.87],[0,50.03],[0,0]],"o":[[-53.84,0],[15.65,-61.05],[-19.93,11.56]],"v":[[-265.67,80.32],[-363.15,-10.27],[-266.5,-79.82]],"c":true}]},{"t":35,"s":[{"i":[[-0.099,-0.109],[0,0.156],[0,0]],"o":[[-0.168,0],[0.049,-0.191],[-0.062,0.036]],"v":[[-415.258,90.5],[-415.562,90.217],[-415.26,90]],"c":true}]}]},"nm":"Path 4","hd":false},{"ty":"fl","c":{"a":0,"k":[0.807843197093,0.643137254902,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 3","hd":false},{"ty":"tr","p":{"a":0,"k":[-314.41,0.25]},"a":{"a":0,"k":[-314.41,0.25]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"st","c":{"a":0,"k":[0.647058823529,0.305882352941,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-265.67,-10.27]},"a":{"a":0,"k":[-265.67,-10.27]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":30,"op":35,"st":2,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"picies","sr":1,"ks":{"p":{"a":0,"k":[255,191.406,0]},"a":{"a":0,"k":[0,45.406,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-14.81,-13.46],[11.95,21.92],[1.11,16.11],[-22.44,-7.84],[-11.16,1.15]],"o":[[-22.91,4.11],[-6.67,-12.23],[5.79,24.31],[9.97,3.48],[-0.13,0.68]],"v":[[10.978,133.929],[-49.332,107.219],[-76.002,35.549],[-29.982,86.199],[2.028,89.909]],"c":true}]},{"t":36,"s":[{"i":[[0.042,0.009],[-0.025,-0.045],[-0.002,-0.033],[0.03,0.046],[0.013,0.008]],"o":[[0.048,-0.009],[0.014,0.025],[-0.012,-0.05],[-0.009,-0.013],[-0.02,-0.013]],"v":[[-71.68,195.17],[-71.555,195.225],[-71.5,195.374],[-71.582,195.231],[-71.615,195.198]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-20.7,35.34],[6.66,-12.23],[15.67,-2.82],[0,0],[-0.13,0.68]],"o":[[-1.11,16.11],[-8.18,15],[0,0],[-14.81,-13.46],[25.91,-2.68]],"v":[[75.998,35.549],[49.338,107.219],[10.988,133.929],[10.978,133.929],[2.028,89.909]],"c":true}]},{"t":36,"s":[{"i":[[-0.149,0.254],[0.048,-0.088],[0.112,-0.02],[0,0],[-0.001,0.005]],"o":[[-0.008,0.116],[-0.059,0.108],[0,0],[0.129,-0.1],[0.093,-0.157]],"v":[[73.967,180.898],[73.775,181.412],[73.5,181.604],[73.5,181.604],[73.665,181.395]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[4.69,-50.46],[25.91,-2.68],[9.97,3.48],[-5.65,29.96],[19.36,23.12]],"o":[[-20.7,35.34],[-11.16,1.15],[25.15,-11.39],[3.71,-19.59],[38.33,2.51]],"v":[[75.998,35.549],[2.028,89.909],[-29.982,86.199],[26.648,21.049],[6.078,-43.891]],"c":true}]},{"t":36,"s":[{"i":[[0.019,-0.202],[0.104,-0.011],[0.04,0.014],[-0.023,0.12],[0.077,0.092]],"o":[[-0.083,0.141],[-0.045,0.005],[0.101,-0.046],[0.015,-0.078],[0.153,0.01]],"v":[[154.424,34.876],[154.128,35.094],[154,35.079],[154.226,34.818],[154.144,34.559]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[3.71,-19.59],[21,-18.31],[-37.83,-2.49]],"o":[[-10.36,-22.61],[4.41,-44.16],[19.36,23.12]],"v":[[26.648,21.049],[-76.002,18.639],[6.078,-43.891]],"c":true}]},{"t":36,"s":[{"i":[[0.012,-0.061],[0.066,-0.057],[-0.118,-0.008]],"o":[[-0.032,-0.071],[0.014,-0.138],[0.06,0.072]],"v":[[1.192,-97.167],[0.872,-97.174],[1.128,-97.369]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-10.36,-22.61],[25.15,-11.39],[5.79,24.31],[-0.53,5.3]],"o":[[-5.65,29.96],[-22.44,-7.84],[-0.55,-5.97],[21,-18.31]],"v":[[26.648,21.049],[-29.982,86.199],[-76.002,35.549],[-76.002,18.639]],"c":true}]},{"t":36,"s":[{"i":[[-0.156,-0.229],[0.005,-0.198],[0.125,0.524],[-0.011,0.114]],"o":[[0.175,0.257],[-0.483,-0.169],[-0.012,-0.129],[0.113,0.148]],"v":[[-149.053,15.247],[-148.42,15.955],[-149.412,14.864],[-149.412,14.5]],"c":true}]}]},"nm":"Path 5","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 5","hd":false},{"ty":"st","c":{"a":0,"k":[0.647058823529,0.305882352941,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,45.406]},"a":{"a":0,"k":[0,45.406]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":31,"op":36,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"Null 3","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[256]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[257.445]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[251.735]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[262.162]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[256.384]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[256.888]},{"t":29,"s":[254.404]}]},"y":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[198]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[190.425]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[197.133]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[186.523]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[194.791]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[186.058]},{"t":29,"s":[194.761]}]}},"a":{"a":0,"k":[50,50,0]}},"ao":0,"ip":20,"op":30,"st":-60,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"Null 19","parent":3,"sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[50,108,0],"to":[0,0,0],"ti":[0,0,0]},{"t":30,"s":[50,1,0]}]}},"ao":0,"ip":0,"op":36,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"blik","parent":6,"sr":1,"ks":{"p":{"a":0,"k":[20.897,-88.771,0]},"a":{"a":0,"k":[19.25,-92,0]},"s":{"a":0,"k":[70,70,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.427,-0.298],[-30.5,146.5]],"o":[[0,13.193],[-55,1.5],[-0.5,0]],"v":[[80.444,-33.889],[0,-10],[0,-200]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-61.227],[24.905,-1.3],[-8.202,27.448]],"o":[[0,40.169],[-45,-4.333],[2.417,-2.431]],"v":[[98.282,62.507],[32.976,130.655],[10.893,-24.206]],"c":true}]},{"t":30,"s":[{"i":[[0,-77.778],[23.059,-1.647],[-4.109,3.995]],"o":[[0,50.031],[-47.216,-6.039],[3.294,-3.203]],"v":[[109.918,84.947],[41.535,169.497],[12.437,7.17]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":0,"k":8},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-131]},{"t":30,"s":[-5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8.571},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":2}},{"n":"g","nm":"gap","v":{"a":0,"k":12}},{"n":"d","nm":"dash2","v":{"a":0,"k":297}},{"n":"o","nm":"offset","v":{"a":0,"k":0}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":30,"st":-60,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"rocket_cap","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[0,-33.889,0]},"a":{"a":0,"k":[0,-33.889,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.427,-0.298],[-30.5,146.5]],"o":[[0,13.193],[-55,1.5],[-0.5,0]],"v":[[80.444,-33.889],[0,-10],[0,-200]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-61.227],[24.905,-1.3],[-8.202,27.448]],"o":[[0,40.169],[-45,-4.333],[2.417,-2.431]],"v":[[87.389,21.435],[22.083,89.583],[0,-65.278]],"c":true}]},{"t":30,"s":[{"i":[[0,-77.778],[23.059,-1.647],[-4.109,3.995]],"o":[[0,50.031],[-47.216,-6.039],[3.294,-3.203]],"v":[[97.776,39.412],[29.392,123.961],[0.294,-38.366]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.428,0],[0,13.193],[0,0]],"o":[[0,13.193],[-44.428,0],[0,-13.193],[0,0]],"v":[[80.444,-33.889],[0,-10],[-80.444,-33.889],[0,-200]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-61.227],[48.264,0],[0,40.168],[0,0]],"o":[[0,40.168],[-48.264,0],[0,-61.227],[0,0]],"v":[[87.389,21.435],[0,94.167],[-87.389,21.435],[0,-65.278]],"c":true}]},{"t":30,"s":[{"i":[[0,-77.778],[53.838,0],[0,50.031],[0,0]],"o":[[0,50.031],[-53.838,0],[0,-77.778],[0,0]],"v":[[97.776,39.412],[0.294,130],[-97.187,39.412],[0.294,-38.366]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.807843197093,0.643137254902,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-105]},"a":{"a":0,"k":[0,-105]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.428,0],[0,13.193],[-44.428,0]],"o":[[0,13.193],[-44.428,0],[0,-13.193],[44.428,0]],"v":[[80.444,-33.889],[0,-10],[-80.444,-33.889],[0,-57.778]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-40.168],[48.264,0],[0,40.168],[-48.264,0]],"o":[[0,40.168],[-48.264,0],[0,-40.168],[48.264,0]],"v":[[87.389,21.435],[0,94.167],[-87.389,21.435],[0,-51.296]],"c":true}]},{"t":30,"s":[{"i":[[0,-50.031],[53.838,0],[0,50.031],[-53.838,0]],"o":[[0,50.031],[-53.838,0],[0,-50.031],[53.838,0]],"v":[[97.776,39.412],[0.294,130],[-97.187,39.412],[0.294,-51.176]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-33.889]},"a":{"a":0,"k":[0,-33.889]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"st","c":{"a":0,"k":[0.647058823529,0.305882352941,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"rocket body 2 outlines","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[0,71.389,0]},"a":{"a":0,"k":[0,71.389,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[2.222,-10],[7.734,34.804],[0,0]],"o":[[0,0],[-7.676,34.543],[-2.222,-10],[0,0]],"v":[[68.778,-37.222],[59.333,153.333],[-59.333,153.333],[-68.778,-37.222]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[6.667,-12.222],[20.133,36.91],[1.111,16.111]],"o":[[-1.111,16.111],[-20.133,36.911],[-6.667,-12.222],[0,0]],"v":[[76,35.556],[49.333,107.222],[-49.333,107.222],[-76,35.556]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.647058823529,0.305882352941,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"rocket body 2 shadows","parent":10,"sr":1,"ks":{"o":{"a":0,"k":50},"p":{"a":0,"k":[0,71.389,0]},"a":{"a":0,"k":[0,71.389,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0.667,-19.333],[7.333,22.167],[0,0]],"o":[[0,0],[0.167,0.667],[-3.217,-9.726],[0,0]],"v":[[-13.222,-18.222],[-12.667,177.333],[-59.333,153.333],[-68.778,-37.222]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[0.167,-11.222],[18.833,29.278],[1.111,16.111]],"o":[[-1.111,16.111],[-15.833,-1.222],[-7.532,-11.709],[0,0]],"v":[[8,37.056],[7.333,133.222],[-49.333,107.222],[-76,35.556]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.713725490196,0.38431372549,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"lines2","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[-4.5,135.446,0]},"a":{"a":0,"k":[-4.5,135.446,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[19,23.25],[0,0],[-72.25,-0.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-45,-7]],"v":[[-67.5,-34.25],[-66,-10.75],[65.25,58.5],[66.5,12.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[19,23.25],[0,0],[-70.25,-2.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-45,-7]],"v":[[-67.5,-34.25],[-67,-26.25],[65.75,25],[68.5,-17]],"c":true}]},{"t":10,"s":[{"i":[[19,23.25],[0,0],[-70.25,-2.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-45,-7]],"v":[[-67.5,-34.25],[-67,-26.25],[68.25,-15],[68.5,-17]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[25,44.25],[0,0],[-71.75,9],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-65,33.75],[-62.5,74.75],[60.75,137],[62.5,98]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[25,44.25],[0,0],[-71.75,10.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-66.5,2.75],[-65,41.25],[61.75,99],[65,63]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[26,30.25],[0,0],[-71.75,10.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-68.5,-6.75],[-66,19.75],[62.75,70.5],[68,37]],"c":true}]},{"t":15,"s":[{"i":[[26,30.25],[0,0],[-54.75,16],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-68.5,-6.75],[-65.5,15.25],[65.75,49],[71,14]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[20,16.5],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[13.25,13.75],[-0.25,0],[-50.75,19]],"v":[[-56.25,160.5],[-56,160.5],[49.25,167.75],[49.75,168]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[20,16.5],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[13.25,13.75],[-0.25,0],[-50.75,19]],"v":[[-54.5,154.25],[-54.25,154.25],[43,161.5],[43.5,161.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[20,16.5],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[13.25,13.75],[-0.25,0],[-50.75,19]],"v":[[-53.75,148],[-53.5,148],[42.25,155.5],[42.75,155.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[17.5,26],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-52.5,136.25],[-52.75,136.25],[42.25,147.75],[42.5,147.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-57.25,102.5],[-55,120.25],[43.25,137.5],[44,133.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-59.25,89.5],[-54.25,106.75],[42.5,128],[48,118.75]],"c":true}]},{"t":30,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-58.5,71.75],[-53.5,89],[43.25,110.25],[48.75,101]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[19,27.5],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-58.5,158.5],[-58.25,158.5],[53.5,166],[54,165]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[19,27.5],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-57.25,147],[-57.25,147.5],[50.5,160],[50,161]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[24.25,45.5],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-60.5,106.5],[-58.75,138.5],[51,150],[51.25,149.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[24.25,45.5],[0,0],[-54.5,29.25],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-62.5,78],[-58.25,106.75],[49,141.75],[53.5,124.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-62.5,67.5],[-59.5,89.75],[50,121.5],[54.5,104.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[21.25,35.75],[0,0],[-49.75,27],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-62.5,63.25],[-60.75,81.25],[52.25,106.5],[57.25,81]],"c":true}]},{"t":30,"s":[{"i":[[21.25,35.75],[0,0],[-49.75,27],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-62.5,63.25],[-60.75,70.5],[56.5,84.75],[57.25,81]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[25,44.25],[0,0],[-47,36.25],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.5,40.25]],"v":[[-61.5,114.75],[-59,155.75],[63.25,158],[63.5,157.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[25,44.25],[0,0],[-55,45.75],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-62,77.5],[-60.75,112.25],[60.75,151.25],[59.5,132.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[25,44.25],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-64.25,50.75],[-60.75,80.5],[58.25,128],[60.75,101.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[25,39],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-65.5,33.75],[-63.75,59.5],[59,101.75],[61.5,76.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[25,39],[0,0],[-55.75,26.75],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-69.5,30],[-65,49],[61,82.75],[63.75,62.25]],"c":true}]},{"t":25,"s":[{"i":[[25,39],[0,0],[-55.75,26.75],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-69.5,30],[-65,54.75],[62.25,76.25],[63.75,62.25]],"c":true}]}]},"nm":"Path 4","hd":false},{"ty":"fl","c":{"a":0,"k":[0.109803921569,0.576470588235,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"rocket body","parent":4,"sr":1,"ks":{"p":{"a":0,"k":[0,71.389,0]},"a":{"a":0,"k":[0,71.389,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[2.222,-10],[7.734,34.804],[0,0]],"o":[[0,0],[-7.676,34.543],[-2.222,-10],[0,0]],"v":[[68.778,-37.222],[59.333,153.333],[-59.333,153.333],[-68.778,-37.222]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[6.667,-12.222],[20.133,36.91],[1.111,16.111]],"o":[[-1.111,16.111],[-20.133,36.911],[-6.667,-12.222],[0,0]],"v":[[76,35.556],[49.333,107.222],[-49.333,107.222],[-76,35.556]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039215686,0.898039215686,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Shape Layer 11","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[283,390,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[257,472,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[283,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[262,427.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[280,323,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[279,288,0],"to":[0,0,0],"ti":[0,0,0]},{"t":31,"s":[259,328,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":4,"s":[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]},"t":10,"s":[20,20,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]},"t":11,"s":[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]},"t":17,"s":[20,20,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]},"t":18,"s":[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]},"t":24,"s":[20,20,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]},"t":25,"s":[100,100,100]},{"t":31,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":4,"op":31,"st":4,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Shape Layer 10","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[255,394,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[257,472,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[258,356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[262,427.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[255,327,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[261,292,0],"to":[0,0,0],"ti":[0,0,0]},{"t":33,"s":[259,328,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":6,"s":[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]},"t":12,"s":[20,20,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]},"t":13,"s":[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]},"t":19,"s":[20,20,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]},"t":20,"s":[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]},"t":26,"s":[20,20,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]},"t":27,"s":[100,100,100]},{"t":33,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":6,"op":33,"st":6,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Shape Layer 9","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[231,397,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[252,494,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[232,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[254,428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[230,336,0],"to":[0,0,0],"ti":[0,0,0]},{"t":28,"s":[256.5,371.5,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":8,"s":[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]},"t":14,"s":[20,20,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]},"t":15,"s":[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]},"t":21,"s":[20,20,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]},"t":22,"s":[100,100,100]},{"t":28,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":8,"op":28,"st":8,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[283,390,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[257,472,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[283,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[262,427.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[280,323,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[279,288,0],"to":[0,0,0],"ti":[0,0,0]},{"t":29,"s":[259,328,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":2,"s":[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]},"t":8,"s":[20,20,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]},"t":9,"s":[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]},"t":15,"s":[20,20,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]},"t":16,"s":[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]},"t":22,"s":[20,20,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]},"t":23,"s":[100,100,100]},{"t":29,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":2,"op":29,"st":2,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[231,397,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[252,494,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[232,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[254,428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[230,336,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[234,298,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[259,328,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[239,262,0],"to":[0,0,0],"ti":[0,0,0]},{"t":33,"s":[264,326,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":0,"s":[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]},"t":6,"s":[20,20,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]},"t":7,"s":[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]},"t":13,"s":[20,20,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]},"t":14,"s":[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]},"t":20,"s":[20,20,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]},"t":21,"s":[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]},"t":27,"s":[20,20,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]},"t":28,"s":[100,100,100]},{"t":33,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":0,"op":34,"st":0,"bm":0}]},{"id":"comp_6","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"pink","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[100]},{"t":100,"s":[0]}]},"p":{"a":0,"k":[245.75,225.75,0]},"a":{"a":0,"k":[2.75,-17.25,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.629,0.629,0.629],"y":[0,0,0]},"t":30,"s":[43.235,43.235,100]},{"t":40,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.312,8.525],[3.244,0.766],[0.278,-4.348]],"o":[[-1.312,-8.525],[-5.358,-1.265],[-0.278,4.348]],"v":[[6.13,-24.571],[8.951,-66.768],[5.014,-23.638]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.55,23.061],[3.244,0.766],[0.753,-11.762]],"o":[[-3.55,-23.061],[-5.358,-1.265],[-0.753,11.762]],"v":[[11.788,-37.733],[14.47,-92.154],[8.769,-35.211]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.113,0.736],[3.244,0.766],[0.024,-0.376]],"o":[[-0.113,-0.736],[-5.358,-1.265],[-0.024,0.376]],"v":[[1.251,-14.165],[19.643,-137.56],[1.155,-14.085]],"c":true}]},{"t":100,"s":[{"i":[[0.002,0.014],[3.244,0.766],[0,-0.007]],"o":[[-0.002,-0.014],[-5.358,-1.265],[0,0.007]],"v":[[29.568,-215.114],[32.47,-250.154],[29.566,-215.113]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.775,14.209],[6.351,4.603],[2.652,-16.185]],"o":[[0.775,-14.209],[-4.056,-2.94],[-2.652,16.185]],"v":[[7.231,-23.969],[18.873,-61.186],[6.13,-24.571]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-2.096,38.439],[6.351,4.603],[7.173,-43.783]],"o":[[2.096,-38.439],[-4.056,-2.94],[-7.173,43.783]],"v":[[14.767,-36.105],[37.637,-108.647],[11.788,-37.733]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.067,1.227],[6.351,4.603],[0.229,-1.398]],"o":[[0.067,-1.227],[-4.056,-2.94],[-0.229,1.398]],"v":[[1.932,-14.242],[49.85,-146.868],[1.837,-14.294]],"c":true}]},{"t":100,"s":[{"i":[[-0.001,0.023],[6.351,4.603],[0.004,-0.026]],"o":[[0.001,-0.023],[-4.056,-2.94],[-0.004,0.026]],"v":[[75.069,-225.113],[80.137,-241.647],[75.068,-225.114]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.749,6.829],[6.31,5.609],[1.359,-6.48]],"o":[[-0.749,-6.829],[-3.554,-3.159],[-1.359,6.48]],"v":[[8.596,-23.217],[31.24,-73.607],[7.231,-23.969]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[2.026,18.473],[6.31,5.609],[3.677,-17.531]],"o":[[-2.026,-18.473],[-3.554,-3.159],[-3.677,17.531]],"v":[[18.46,-34.07],[47.481,-104.355],[14.767,-36.105]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.065,0.59],[6.31,5.609],[0.117,-0.56]],"o":[[-0.065,-0.59],[-3.554,-3.159],[-0.117,0.56]],"v":[[2.166,-13.836],[63.43,-142.576],[2.048,-13.901]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0.011],[6.31,5.609],[0.002,-0.011]],"o":[[-0.001,-0.011],[-3.554,-3.159],[-0.002,0.011]],"v":[[84.072,-198.612],[102.981,-237.355],[84.069,-198.613]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.199,15.089],[5.581,6.595],[12.758,-17.563]],"o":[[6.199,-15.089],[-2.72,-3.214],[-12.758,17.563]],"v":[[9.486,-22.203],[48.882,-61.987],[8.281,-23.532]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-16.769,40.819],[5.581,6.595],[34.513,-47.512]],"o":[[16.769,-40.819],[-2.72,-3.214],[-34.513,47.512]],"v":[[21.719,-30.475],[103.282,-109.764],[18.46,-34.07]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.535,1.303],[5.581,6.595],[1.102,-1.517]],"o":[[0.535,-1.303],[-2.72,-3.214],[-1.102,1.517]],"v":[[3.204,-13.341],[122.823,-131.604],[3.099,-13.456]],"c":true}]},{"t":100,"s":[{"i":[[-0.01,0.025],[5.581,6.595],[0.021,-0.029]],"o":[[0.01,-0.025],[-2.72,-3.214],[-0.021,0.029]],"v":[[156.574,-169.11],[171.282,-185.764],[156.572,-169.112]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.223,9.945],[2.258,6.104],[6.726,-10.205]],"o":[[4.223,-9.945],[-1.817,-4.912],[-6.726,10.205]],"v":[[11.177,-20.424],[48.778,-58.677],[9.801,-21.888]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-11.423,26.904],[2.258,6.104],[18.195,-27.606]],"o":[[11.423,-26.904],[-1.817,-4.912],[-18.195,27.606]],"v":[[25.439,-26.516],[74.48,-79.649],[21.719,-30.475]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.365,0.859],[2.258,6.104],[0.581,-0.882]],"o":[[0.365,-0.859],[-1.817,-4.912],[-0.581,0.882]],"v":[[3.264,-12.932],[105.66,-107.524],[3.146,-13.058]],"c":true}]},{"t":100,"s":[{"i":[[-0.007,0.016],[2.258,6.104],[0.011,-0.017]],"o":[[0.007,-0.016],[-1.817,-4.912],[-0.011,0.017]],"v":[[152.076,-147.108],[182.98,-176.649],[152.074,-147.11]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":5,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-3.334,6.648],[-1.799,5.518],[9.673,-9.931]],"o":[[3.334,-6.648],[1.878,-5.758],[-9.673,9.931]],"v":[[12.897,-19.193],[48.972,-44.204],[11.177,-20.424]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-9.018,17.983],[-1.799,5.518],[26.167,-26.865]],"o":[[9.018,-17.983],[1.878,-5.758],[-26.167,26.865]],"v":[[30.094,-23.186],[81.927,-62.022],[25.439,-26.516]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.288,0.574],[-1.799,5.518],[0.836,-0.858]],"o":[[0.288,-0.574],[1.878,-5.758],[-0.836,0.858]],"v":[[3.883,-12.491],[120.292,-83.862],[3.734,-12.597]],"c":true}]},{"t":100,"s":[{"i":[[-0.005,0.011],[-1.799,5.518],[0.016,-0.016]],"o":[[0.005,-0.011],[1.878,-5.758],[-0.016,0.016]],"v":[[188.579,-121.106],[215.427,-138.022],[188.576,-121.108]],"c":true}]}]},"nm":"Path 6","hd":false},{"ind":6,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-9.869,8.704],[-3.432,7.058],[12.009,-7.852]],"o":[[9.869,-8.704],[2.981,-6.13],[-12.009,7.852]],"v":[[12.832,-16.628],[74.374,-42.527],[12.897,-19.193]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-26.696,23.547],[-3.432,7.058],[32.485,-21.24]],"o":[[26.696,-23.547],[2.981,-6.13],[-32.485,21.24]],"v":[[29.916,-16.247],[117.42,-56.876],[30.094,-23.186]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.852,0.752],[-3.432,7.058],[1.037,-0.678]],"o":[[0.852,-0.752],[2.981,-6.13],[-1.037,0.678]],"v":[[3.897,-11.786],[151.618,-69.521],[3.902,-12.008]],"c":true}]},{"t":100,"s":[{"i":[[-0.016,0.014],[-3.432,7.058],[0.02,-0.013]],"o":[[0.016,-0.014],[2.981,-6.13],[-0.02,0.013]],"v":[[190.079,-83.601],[236.42,-100.876],[190.079,-83.606]],"c":true}]}]},"nm":"Path 7","hd":false},{"ind":7,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-14.199,3.553],[-2.249,4.962],[22.38,-4.873]],"o":[[22.287,-5.577],[4.049,-8.935],[-22.38,4.873]],"v":[[10.861,-15.141],[88.919,-15.854],[12.516,-16.944]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-38.412,9.611],[-2.249,4.962],[60.542,-13.183]],"o":[[60.291,-15.085],[4.049,-8.935],[-60.542,13.183]],"v":[[25.439,-11.372],[154.986,-15.381],[29.916,-16.247]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-1.227,0.307],[-2.249,4.962],[1.933,-0.421]],"o":[[1.925,-0.482],[4.049,-8.935],[-1.933,0.421]],"v":[[3.934,-10.704],[182.862,-13.944],[4.077,-10.859]],"c":true}]},{"t":100,"s":[{"i":[[-0.023,0.006],[-2.249,4.962],[0.036,-0.008]],"o":[[0.036,-0.009],[4.049,-8.935],[-0.036,0.008]],"v":[[204.076,-11.599],[251.986,-10.381],[204.079,-11.601]],"c":true}]}]},"nm":"Path 8","hd":false},{"ind":8,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.711,2.16],[-0.839,0.958],[12.251,-0.88]],"o":[[4.711,-2.16],[1.348,-1.539],[-12.251,0.88]],"v":[[9.079,-12.869],[39.383,-12.388],[10.861,-14.826]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-12.744,5.843],[-0.839,0.958],[33.14,-2.38]],"o":[[12.744,-5.843],[1.348,-1.539],[-33.14,2.38]],"v":[[20.619,-6.076],[78.015,-8.131],[25.439,-11.372]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.407,0.187],[-0.839,0.958],[1.058,-0.076]],"o":[[0.407,-0.187],[1.348,-1.539],[-1.058,0.076]],"v":[[4.224,-10.251],[128.305,-2.239],[4.378,-10.421]],"c":true}]},{"t":100,"s":[{"i":[[-0.008,0.004],[-0.839,0.958],[0.02,-0.001]],"o":[[0.008,-0.004],[1.348,-1.539],[-0.02,0.001]],"v":[[238.573,10.405],[253.015,12.369],[238.576,10.401]],"c":true}]}]},"nm":"Path 9","hd":false},{"ind":9,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-19.702,-2.401],[-2.482,3.154],[14.29,0.398]],"o":[[19.702,2.401],[2.595,-3.297],[-14.29,-0.398]],"v":[[9.698,-12.307],[64.597,6.088],[9.395,-13.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-53.298,-6.494],[-2.482,3.154],[38.657,1.077]],"o":[[53.298,6.494],[2.595,-3.297],[-38.657,-1.077]],"v":[[21.439,-3.705],[93.137,16.968],[20.619,-6.076]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-1.702,-0.207],[-2.482,3.154],[1.234,0.034]],"o":[[1.702,0.207],[2.595,-3.297],[-1.234,-0.034]],"v":[[3.71,-9.493],[135.812,35.216],[3.683,-9.569]],"c":true}]},{"t":100,"s":[{"i":[[-0.032,-0.004],[-2.482,3.154],[0.023,0.001]],"o":[[0.032,0.004],[2.595,-3.297],[-0.023,-0.001]],"v":[[196.573,63.406],[241.637,80.468],[196.573,63.405]],"c":true}]}]},"nm":"Path 10","hd":false},{"ind":10,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-9.253,-3.386],[-5.064,4.293],[16.792,8.51]],"o":[[9.253,3.386],[4.126,-3.498],[-16.792,-8.51]],"v":[[11.313,-9.614],[54.159,17.809],[9.698,-11.992]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-25.032,-9.16],[-5.064,4.293],[45.426,23.022]],"o":[[25.032,9.16],[4.126,-3.498],[-45.426,-23.022]],"v":[[25.808,2.729],[103.197,50.764],[21.439,-3.705]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.799,-0.292],[-5.064,4.293],[1.451,0.735]],"o":[[0.799,0.292],[4.126,-3.498],[-1.451,-0.735]],"v":[[3.881,-8.702],[137.251,71.886],[3.742,-8.908]],"c":true}]},{"t":100,"s":[{"i":[[-0.015,-0.006],[-5.064,4.293],[0.027,0.014]],"o":[[0.015,0.006],[4.126,-3.498],[-0.027,-0.014]],"v":[[199.076,108.91],[221.697,124.264],[199.073,108.906]],"c":true}]}]},"nm":"Path 11","hd":false},{"ind":11,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.526,-3.215],[-3.502,3.162],[9.671,6.481]],"o":[[6.526,3.215],[3.502,-3.162],[-9.671,-6.481]],"v":[[10.491,-8.994],[73.057,40.569],[11.313,-9.929]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-17.653,-8.697],[-3.502,3.162],[26.163,17.532]],"o":[[17.653,8.697],[3.502,-3.162],[-26.163,-17.532]],"v":[[23.585,5.258],[96.236,63.117],[25.808,2.729]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.564,-0.278],[-3.502,3.162],[0.835,0.56]],"o":[[0.564,0.278],[3.502,-3.162],[-0.835,-0.56]],"v":[[3.102,-8.57],[126.267,90.274],[3.173,-8.651]],"c":true}]},{"t":100,"s":[{"i":[[-0.011,-0.005],[-3.502,3.162],[0.016,0.011]],"o":[[0.011,0.005],[3.502,-3.162],[-0.016,-0.011]],"v":[[144.075,112.911],[200.736,157.617],[144.076,112.91]],"c":true}]}]},"nm":"Path 12","hd":false},{"ind":12,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-13.475,-10.482],[-4.458,3.463],[10.073,7.849]],"o":[[13.475,10.482],[4.458,-3.463],[-10.073,-7.849]],"v":[[9.502,-7.951],[52.87,45.892],[10.491,-8.678]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-36.453,-28.355],[-4.458,3.463],[27.249,21.233]],"o":[[36.453,28.355],[4.458,-3.463],[-27.249,-21.233]],"v":[[20.909,7.226],[94.655,93.669],[23.585,5.258]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-1.164,-0.905],[-4.458,3.463],[0.87,0.678]],"o":[[1.164,0.905],[4.458,-3.463],[-0.87,-0.678]],"v":[[3.049,-7.986],[116.926,120.825],[3.134,-8.049]],"c":true}]},{"t":100,"s":[{"i":[[-0.022,-0.017],[-4.458,3.463],[0.016,0.013]],"o":[[0.022,0.017],[4.458,-3.463],[-0.016,-0.013]],"v":[[146.573,153.413],[172.155,188.169],[146.575,153.411]],"c":true}]}]},"nm":"Path 13","hd":false},{"ind":13,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.775,-3.087],[-3.488,2.449],[10.229,14.193]],"o":[[4.775,3.087],[3.488,-2.449],[-10.229,-14.193]],"v":[[7.167,-8.135],[48.091,56.332],[9.187,-7.951]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-12.917,-8.352],[-3.488,2.449],[27.671,38.395]],"o":[[12.917,8.352],[3.488,-2.449],[-27.671,-38.395]],"v":[[15.445,6.729],[62.124,74.78],[20.909,7.226]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.412,-0.267],[-3.488,2.449],[0.884,1.226]],"o":[[0.412,0.267],[3.488,-2.449],[-0.884,-1.226]],"v":[[2.321,-8.079],[84.827,113.576],[2.495,-8.063]],"c":true}]},{"t":100,"s":[{"i":[[-0.008,-0.005],[-3.488,2.449],[0.017,0.023]],"o":[[0.008,0.005],[3.488,-2.449],[-0.017,-0.023]],"v":[[103.57,147.412],[141.124,209.78],[103.573,147.413]],"c":true}]}]},"nm":"Path 14","hd":false},{"ind":14,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-5.362,-6.334],[-2.659,0.857],[3.694,6.735]],"o":[[5.361,6.334],[6.495,-2.093],[-3.694,-6.735]],"v":[[5.102,-9.295],[26.477,35.494],[7.167,-8.45]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-14.504,-17.136],[-2.659,0.857],[9.994,18.219]],"o":[[14.504,17.136],[6.495,-2.093],[-9.994,-18.219]],"v":[[9.859,4.445],[41.772,64.349],[15.445,6.729]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.463,-0.547],[-2.659,0.857],[0.319,0.582]],"o":[[0.463,0.547],[6.495,-2.093],[-0.319,-0.582]],"v":[[2.027,-7.553],[61.313,111.91],[2.205,-7.48]],"c":true}]},{"t":100,"s":[{"i":[[-0.009,-0.01],[-2.659,0.857],[0.006,0.011]],"o":[[0.009,0.01],[6.495,-2.093],[-0.006,-0.011]],"v":[[94.566,193.911],[109.772,229.849],[94.57,193.912]],"c":true}]}]},"nm":"Path 15","hd":false},{"ind":15,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.43,-4.038],[-5.792,0.94],[0.557,8.126]],"o":[[0.43,4.038],[3.71,-0.602],[-0.557,-8.126]],"v":[[3.69,-10.876],[17.077,55.965],[5.102,-9.295]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-1.164,-10.924],[-5.792,0.94],[1.507,21.981]],"o":[[1.164,10.924],[3.71,-0.602],[-1.507,-21.981]],"v":[[6.039,0.167],[22.28,71.891],[9.859,4.445]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.037,-0.349],[-5.792,0.94],[0.048,0.702]],"o":[[0.037,0.349],[3.71,-0.602],[-0.048,-0.702]],"v":[[1.242,-7.799],[31.62,122.9],[1.364,-7.663]],"c":true}]},{"t":100,"s":[{"i":[[-0.001,-0.007],[-5.792,0.94],[0.001,0.013]],"o":[[0.001,0.007],[3.71,-0.602],[-0.001,-0.013]],"v":[[43.064,185.408],[54.78,249.391],[43.066,185.411]],"c":true}]}]},"nm":"Path 16","hd":false},{"ind":16,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.268,-1.072],[-8.766,2.77],[-1.453,20.282]],"o":[[-0.268,1.072],[8.956,-2.83],[1.453,-20.282]],"v":[[2.258,-8.649],[11.352,48.031],[4.005,-10.876]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.726,-2.901],[-8.766,2.77],[-3.93,54.866]],"o":[[-0.726,2.901],[8.956,-2.83],[3.93,-54.866]],"v":[[1.312,6.192],[20.655,115.675],[6.039,0.167]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.023,-0.093],[-8.766,2.77],[-0.125,1.752]],"o":[[-0.023,0.093],[8.956,-2.83],[0.125,-1.752]],"v":[[0.956,-7.06],[24.966,155.333],[1.106,-7.252]],"c":true}]},{"t":100,"s":[{"i":[[0,-0.002],[-8.766,2.77],[-0.002,0.033]],"o":[[0,0.002],[8.956,-2.83],[0.002,-0.033]],"v":[[32.561,227.912],[35.655,253.675],[32.564,227.908]],"c":true}]}]},"nm":"Path 17","hd":false},{"ind":17,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.674,-5.118],[-9.34,-10.304],[-5.656,20.469]],"o":[[-0.674,5.118],[5.335,5.886],[5.656,-20.469]],"v":[[0.319,-7.862],[-7.754,79.004],[2.258,-8.649]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[1.822,-13.845],[-9.34,-10.304],[-15.299,55.372]],"o":[[-1.822,13.845],[5.335,5.886],[15.299,-55.372]],"v":[[-3.933,8.322],[-10.119,142.549],[1.312,6.192]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.058,-0.442],[-9.34,-10.304],[-0.489,1.768]],"o":[[-0.058,0.442],[5.335,5.886],[0.489,-1.768]],"v":[[0.157,-7.436],[-14.573,174.16],[0.325,-7.504]],"c":true}]},{"t":100,"s":[{"i":[[0.001,-0.008],[-9.34,-10.304],[-0.009,0.033]],"o":[[-0.001,0.008],[5.335,5.886],[0.009,-0.033]],"v":[[-16.442,193.413],[-25.619,252.549],[-16.439,193.412]],"c":true}]}]},"nm":"Path 18","hd":false},{"ind":18,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.134,-4.491],[-8.529,-8.273],[-6.696,18.034]],"o":[[-1.134,4.491],[3.166,3.071],[6.696,-18.034]],"v":[[-1.761,-9.64],[-13.598,51.106],[0.003,-7.546]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.068,-12.148],[-8.529,-8.273],[-18.113,48.786]],"o":[[-3.068,12.148],[3.166,3.071],[18.113,-48.786]],"v":[[-8.707,2.658],[-24.162,110.866],[-3.933,8.322]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.098,-0.388],[-8.529,-8.273],[-0.578,1.558]],"o":[[-0.098,0.388],[3.166,3.071],[0.578,-1.558]],"v":[[-0.446,-7.378],[-34.795,149.374],[-0.293,-7.198]],"c":true}]},{"t":100,"s":[{"i":[[0.002,-0.007],[-8.529,-8.273],[-0.011,0.029]],"o":[[-0.002,0.007],[3.166,3.071],[0.011,-0.029]],"v":[[-51.445,211.91],[-61.162,244.866],[-51.442,211.913]],"c":true}]}]},"nm":"Path 19","hd":false},{"ind":19,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[9.217,-13.161],[-2.977,-4.918],[-5.725,7.174]],"o":[[-9.217,13.161],[1.721,2.843],[5.725,-7.174]],"v":[[-1.154,-12.499],[-42.53,56.34],[-1.761,-9.64]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[24.934,-35.602],[-2.977,-4.918],[-15.488,19.406]],"o":[[-24.934,35.602],[1.721,2.843],[15.488,-19.406]],"v":[[-7.064,-5.076],[-47.418,71.95],[-8.707,2.658]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.796,-1.137],[-2.977,-4.918],[-0.495,0.62]],"o":[[-0.796,1.137],[1.721,2.843],[0.495,-0.62]],"v":[[-0.876,-8.404],[-71.414,113.188],[-0.929,-8.157]],"c":true}]},{"t":100,"s":[{"i":[[0.015,-0.021],[-2.977,-4.918],[-0.009,0.012]],"o":[[-0.015,0.021],[1.721,2.843],[0.009,-0.012]],"v":[[-88.944,151.405],[-130.918,215.45],[-88.945,151.41]],"c":true}]}]},"nm":"Path 20","hd":false},{"ind":20,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[7.626,-7.899],[-8.084,-5.313],[-13.235,7.936]],"o":[[-2.855,2.957],[3.306,2.173],[10.979,-6.583]],"v":[[-4.169,-12.723],[-45.434,37.243],[-0.839,-12.499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[20.63,-21.369],[-8.084,-5.313],[-35.802,21.467]],"o":[[-7.724,8],[3.306,2.173],[29.699,-17.808]],"v":[[-16.072,-5.684],[-88.796,85.335],[-7.064,-5.076]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.659,-0.682],[-8.084,-5.313],[-1.143,0.686]],"o":[[-0.247,0.255],[3.306,2.173],[0.948,-0.569]],"v":[[-1.962,-8.308],[-113.223,114.36],[-1.674,-8.288]],"c":true}]},{"t":100,"s":[{"i":[[0.012,-0.013],[-8.084,-5.313],[-0.022,0.013]],"o":[[-0.005,0.005],[3.306,2.173],[0.018,-0.011]],"v":[[-150.949,160.405],[-173.796,186.335],[-150.944,160.405]],"c":true}]}]},"nm":"Path 21","hd":false},{"ind":21,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[14.117,-10.21],[-5.628,-14.818],[-24.822,15.796]],"o":[[-14.086,10.188],[3.081,4.733],[21.924,-13.951]],"v":[[-3.765,-15.075],[-82.448,63.651],[-4.484,-12.723]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[38.189,-27.621],[0.797,-25.979],[-67.149,42.73]],"o":[[-38.106,27.561],[-0.163,5.311],[59.307,-37.74]],"v":[[-14.127,-12.046],[-117.611,102.283],[-16.072,-5.684]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[1.219,-0.882],[-2.13,-20.894],[-2.144,1.364]],"o":[[-1.217,0.88],[1.315,5.048],[1.894,-1.205]],"v":[[-1.552,-9.148],[-137.871,121.393],[-1.614,-8.945]],"c":true}]},{"t":100,"s":[{"i":[[0.023,-0.017],[-9.389,-8.283],[-0.04,0.026]],"o":[[-0.023,0.017],[4.981,4.394],[0.036,-0.023]],"v":[[-123.948,110.901],[-188.111,168.783],[-123.949,110.905]],"c":true}]}]},"nm":"Path 22","hd":false},{"ind":22,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[2.794,-1.349],[0.656,-8.742],[-9.144,3.299]],"o":[[-0.388,0.187],[-0.279,3.717],[9.144,-3.298]],"v":[[-4.357,-15.318],[-39.206,7.131],[-3.283,-15.062]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[7.56,-3.648],[1.507,-8.661],[-24.737,8.919]],"o":[[-1.051,0.507],[-0.641,3.682],[24.737,-8.919]],"v":[[-17.032,-12.737],[-65.957,17.111],[-14.127,-12.046]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.241,-0.117],[1.12,-8.698],[-0.79,0.285]],"o":[[-0.034,0.016],[-0.476,3.698],[0.79,-0.285]],"v":[[-2.581,-9.26],[-111.172,47.264],[-2.489,-9.238]],"c":true}]},{"t":100,"s":[{"i":[[0.004,-0.003],[0.158,-8.79],[-0.014,0.008]],"o":[[-0.001,0],[-0.067,3.737],[0.014,-0.008]],"v":[[-196.685,103.922],[-223.294,122.037],[-196.683,103.922]],"c":true}]}]},"nm":"Path 23","hd":false},{"ind":23,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.652,-0.002],[9.621,-23.195],[-30.797,11.034]],"o":[[-0.652,0.002],[1.201,4.343],[30.797,-11.034]],"v":[[-5.938,-16.534],[-91.485,36.162],[-4.524,-15.646]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[1.764,-0.005],[34.94,-49.93],[-83.311,29.848]],"o":[[-1.764,0.005],[-2.448,3.499],[83.311,-29.848]],"v":[[-20.857,-15.139],[-161.337,74.163],[-17.032,-12.737]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.056,0],[23.404,-37.749],[-2.66,0.953]],"o":[[-0.056,0],[-0.786,3.883],[2.66,-0.953]],"v":[[-2.437,-9.678],[-180.879,84.077],[-2.314,-9.602]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0],[-5.203,-7.542],[-0.05,0.018]],"o":[[-0.001,0],[3.337,4.837],[0.05,-0.018]],"v":[[-175.952,77.399],[-229.337,108.663],[-175.95,77.401]],"c":true}]}]},"nm":"Path 24","hd":false},{"ind":24,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[3.079,-0.51],[0.18,-8.491],[-14.645,0.239]],"o":[[-3.079,0.51],[-0.099,4.7],[14.645,-0.239]],"v":[[-8.996,-17.288],[-60.714,-4.682],[-6.253,-16.534]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[8.33,-1.38],[0.18,-8.491],[-39.617,0.647]],"o":[[-8.33,1.38],[-0.099,4.7],[39.617,-0.647]],"v":[[-28.279,-17.178],[-119.213,6.829],[-20.857,-15.139]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.266,-0.044],[0.18,-8.491],[-1.265,0.021]],"o":[[-0.266,0.044],[-0.099,4.7],[1.265,-0.021]],"v":[[-3.288,-10.423],[-157.506,13.654],[-3.051,-10.357]],"c":true}]},{"t":100,"s":[{"i":[[0.005,-0.001],[0.18,-8.491],[-0.024,0]],"o":[[-0.005,0.001],[-0.099,4.7],[0.024,0]],"v":[[-223.707,24.648],[-252.463,30.579],[-223.702,24.649]],"c":true}]}]},"nm":"Path 25","hd":false},{"ind":25,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.002,-0.018],[4.376,-11.742],[-21.034,-0.505]],"o":[[-5.002,0.018],[-1,2.682],[21.034,0.505]],"v":[[-8.482,-18.09],[-80.041,-5.651],[-8.996,-16.972]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[13.533,-0.05],[4.376,-11.742],[-56.9,-1.366]],"o":[[-13.533,0.05],[-1,2.682],[56.9,1.366]],"v":[[-26.888,-20.202],[-133.179,-1.393],[-28.279,-17.178]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.432,-0.002],[4.376,-11.742],[-1.817,-0.044]],"o":[[-0.432,0.002],[-1,2.682],[1.817,0.044]],"v":[[-2.957,-10.802],[-167.52,2.271],[-3.002,-10.706]],"c":true}]},{"t":100,"s":[{"i":[[0.008,0],[4.376,-11.742],[-0.034,-0.001]],"o":[[-0.008,0],[-1,2.682],[0.034,0.001]],"v":[[-201.456,2.646],[-252.679,11.357],[-201.457,2.648]],"c":true}]}]},"nm":"Path 26","hd":false},{"ind":26,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[4.015,0.648],[9.285,-5.938],[-12.687,-1.577]],"o":[[-1.837,-0.296],[-5.457,3.49],[12.687,1.577]],"v":[[-7.193,-19.109],[-55.539,-18.566],[-8.167,-18.09]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[10.862,1.752],[9.285,-5.938],[-34.32,-4.266]],"o":[[-4.969,-0.802],[-5.457,3.49],[34.32,4.266]],"v":[[-24.253,-22.959],[-119.714,-21.877],[-26.888,-20.202]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.347,0.056],[9.285,-5.938],[-1.096,-0.136]],"o":[[-0.159,-0.026],[-5.457,3.49],[1.096,0.136]],"v":[[-3.256,-11.254],[-157.719,-22.883],[-3.34,-11.166]],"c":true}]},{"t":100,"s":[{"i":[[0.007,0.001],[9.285,-5.938],[-0.021,-0.003]],"o":[[-0.003,0],[-5.457,3.49],[0.021,0.003]],"v":[[-231.204,-25.606],[-251.964,-25.377],[-231.206,-25.604]],"c":true}]}]},"nm":"Path 27","hd":false},{"ind":27,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[4.393,1.499],[5.601,-5.319],[-6.035,-3.074]],"o":[[-4.393,-1.499],[-2.043,1.94],[7.22,3.678]],"v":[[-5.608,-19.397],[-48.68,-27.903],[-7.508,-19.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[11.885,4.055],[5.601,-5.319],[-16.326,-8.316]],"o":[[-11.885,-4.055],[-2.043,1.94],[19.531,9.948]],"v":[[-19.113,-23.736],[-77.851,-34.052],[-24.253,-22.959]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.38,0.13],[5.601,-5.319],[-0.521,-0.266]],"o":[[-0.38,-0.129],[-2.043,1.94],[0.624,0.318]],"v":[[-2.828,-11.723],[-125.77,-43.679],[-2.992,-11.698]],"c":true}]},{"t":100,"s":[{"i":[[0.007,0.002],[5.601,-5.319],[-0.01,-0.005]],"o":[[-0.007,-0.002],[-2.043,1.94],[0.012,0.006]],"v":[[-210.701,-60.106],[-244.601,-67.552],[-210.704,-60.106]],"c":true}]}]},"nm":"Path 28","hd":false},{"ind":28,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.221,2.81],[2.362,-11.3],[-20.382,-17.294]],"o":[[-5.221,-2.81],[-1.358,6.576],[20.382,17.294]],"v":[[-7.193,-23.937],[-71.1,-48.972],[-5.293,-19.397]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[14.123,7.602],[4.156,-15.533],[-55.138,-46.784]],"o":[[-14.123,-7.602],[-2.317,8.659],[55.138,46.784]],"v":[[-24.253,-36.018],[-168.703,-94.857],[-19.113,-23.736]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.451,0.243],[3.339,-13.604],[-1.761,-1.494]],"o":[[-0.451,-0.243],[-1.88,7.71],[1.761,1.494]],"v":[[-2.925,-12.804],[-184.078,-101.754],[-2.761,-12.412]],"c":true}]},{"t":100,"s":[{"i":[[0.008,0.005],[1.312,-8.822],[-0.033,-0.028]],"o":[[-0.008,-0.005],[-0.797,5.357],[0.033,0.028]],"v":[[-205.454,-113.613],[-222.203,-118.857],[-205.451,-113.606]],"c":true}]}]},"nm":"Path 29","hd":false},{"ind":29,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[7.26,4.445],[7.011,-4.124],[-10.385,-10.766]],"o":[[-0.326,-0.199],[-7.011,4.124],[16.897,17.517]],"v":[[-5.801,-24.959],[-56.419,-56.973],[-7.193,-23.937]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[19.64,12.023],[7.011,-4.124],[-28.094,-29.123]],"o":[[-0.881,-0.54],[-7.011,4.124],[45.711,47.385]],"v":[[-20.488,-38.784],[-98.519,-86.459],[-24.253,-36.018]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.627,0.384],[7.011,-4.124],[-0.897,-0.93]],"o":[[-0.028,-0.017],[-7.011,4.124],[1.46,1.513]],"v":[[-2.277,-13.13],[-127.401,-106.145],[-2.397,-13.042]],"c":true}]},{"t":100,"s":[{"i":[[0.012,0.007],[7.011,-4.124],[-0.017,-0.018]],"o":[[-0.001,0],[-7.011,4.124],[0.028,0.029]],"v":[[-164.452,-132.115],[-199.019,-154.959],[-164.454,-132.113]],"c":true}]}]},"nm":"Path 30","hd":false},{"ind":30,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[23.866,20.95],[-0.775,-4.182],[-8.843,-10.116]],"o":[[-23.866,-20.95],[0.799,4.308],[8.843,10.116]],"v":[[-4.127,-25.389],[-47.359,-57.266],[-6.116,-25.275]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[64.562,56.675],[-0.775,-4.182],[-23.921,-27.366]],"o":[[-64.562,-56.675],[0.799,4.308],[23.921,27.366]],"v":[[-15.108,-39.093],[-105.227,-105.674],[-20.488,-38.784]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[2.062,1.81],[-0.775,-4.182],[-0.764,-0.874]],"o":[[-2.062,-1.81],[0.799,4.308],[0.764,0.874]],"v":[[-2.169,-13.514],[-128.217,-124.928],[-2.341,-13.504]],"c":true}]},{"t":100,"s":[{"i":[[0.039,0.034],[-0.775,-4.182],[-0.014,-0.016]],"o":[[-0.039,-0.034],[0.799,4.308],[0.014,0.016]],"v":[[-169.449,-161.115],[-185.227,-172.674],[-169.452,-161.115]],"c":true}]}]},"nm":"Path 31","hd":false},{"ind":31,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.861,0.835],[6.082,-5.676],[-10.296,-14.684]],"o":[[-0.861,-0.835],[-2.893,2.699],[10.296,14.684]],"v":[[-0.366,-23.104],[-55.133,-75.787],[-4.127,-25.389]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[2.329,2.258],[6.082,-5.676],[-27.852,-39.724]],"o":[[-2.329,-2.258],[-2.893,2.699],[27.852,39.724]],"v":[[-4.933,-32.911],[-79.889,-105.589],[-15.108,-39.093]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.074,0.072],[6.082,-5.676],[-0.889,-1.268]],"o":[[-0.074,-0.072],[-2.893,2.699],[0.889,1.268]],"v":[[-1.214,-13.207],[-103.885,-130.878],[-1.539,-13.404]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0.001],[6.082,-5.676],[-0.017,-0.024]],"o":[[-0.001,-0.001],[-2.893,2.699],[0.017,0.024]],"v":[[-120.443,-152.612],[-163.389,-193.589],[-120.449,-152.615]],"c":true}]}]},"nm":"Path 32","hd":false},{"ind":32,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[3.542,19.181],[3.073,-0.981],[-0.152,-9.722]],"o":[[-3.542,-19.181],[-2.453,0.783],[0.152,9.722]],"v":[[0.539,-22.899],[-14.028,-61.928],[-0.366,-22.788]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[9.581,51.887],[3.073,-0.981],[-0.412,-26.3]],"o":[[-9.581,-51.887],[-2.453,0.783],[0.412,26.3]],"v":[[-2.483,-33.211],[-31.215,-116.327],[-4.933,-32.911]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.306,1.657],[3.073,-0.981],[-0.013,-0.84]],"o":[[-0.306,-1.657],[-2.453,0.783],[0.013,0.84]],"v":[[-0.517,-14.182],[-44.865,-152.105],[-0.596,-14.172]],"c":true}]},{"t":100,"s":[{"i":[[0.006,0.031],[3.073,-0.981],[0,-0.016]],"o":[[-0.006,-0.031],[-2.453,0.783],[0,0.016]],"v":[[-72.441,-227.612],[-78.715,-240.827],[-72.443,-227.612]],"c":true}]}]},"nm":"Path 33","hd":false},{"ind":33,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.512,3.311],[7.408,-2.515],[0.879,-9.578]],"o":[[-0.512,-3.311],[-4.274,1.451],[-0.879,9.578]],"v":[[1.755,-24.526],[-15.758,-89.049],[0.539,-22.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[1.386,8.956],[7.408,-2.515],[2.377,-25.91]],"o":[[-1.386,-8.956],[-4.274,1.451],[-2.377,25.91]],"v":[[0.805,-37.612],[-23.169,-137.772],[-2.483,-33.211]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.044,0.286],[7.408,-2.515],[0.076,-0.827]],"o":[[-0.044,-0.286],[-4.274,1.451],[-0.076,0.827]],"v":[[0.051,-14.02],[-30.928,-169.383],[-0.054,-13.879]],"c":true}]},{"t":100,"s":[{"i":[[0.001,0.005],[7.408,-2.515],[0.001,-0.016]],"o":[[-0.001,-0.005],[-4.274,1.451],[-0.001,0.016]],"v":[[-36.439,-204.114],[-50.169,-247.772],[-36.441,-204.112]],"c":true}]}]},"nm":"Path 34","hd":false},{"ind":34,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.275,0.477],[4.481,1.632],[2.961,-6.55],[-1.425,0.478]],"o":[[-2.55,-0.954],[-6.936,-2.526],[-1.48,3.275],[1.425,-0.478]],"v":[[5.014,-23.954],[2.623,-65.932],[2.07,-24.842],[3.754,-13.991]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.449,1.291],[4.481,1.632],[8.009,-17.719],[-3.855,1.292]],"o":[[-6.899,-2.581],[-6.936,-2.526],[-4.004,8.859],[3.855,-1.292]],"v":[[8.769,-35.211],[4.357,-117.808],[0.805,-37.612],[5.361,-8.261]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.11,0.041],[4.481,1.632],[0.256,-0.566],[-0.123,0.041]],"o":[[-0.22,-0.082],[-6.936,-2.526],[-0.128,0.283],[0.123,-0.041]],"v":[[0.788,-14.342],[3.064,-156.748],[0.534,-14.419],[0.679,-13.482]],"c":true}]},{"t":100,"s":[{"i":[[0.002,0.001],[4.481,1.632],[0.005,-0.011],[-0.002,0.001]],"o":[[-0.004,-0.002],[-6.936,-2.526],[-0.002,0.005],[0.002,-0.001]],"v":[[1.066,-235.113],[-0.143,-253.308],[1.061,-235.114],[1.064,-235.097]],"c":true}]}]},"nm":"Path 35","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":7,"k":{"a":0,"k":[0.166,1,1,1,0.291,0.919,0.91,1,0.379,0.837,0.82,1,0.522,0.444,0.645,0.994,0.708,0.05,0.47,0.988,0.865,0.262,0.465,0.992,0.999,0.474,0.461,0.996,0.166,1,0.291,1,0.379,1,0.522,0.9,0.708,0.8,0.865,0.8,0.999,0.8]}},"s":{"a":0,"k":[-12,-18]},"e":{"a":0,"k":[-123.596,-129.596]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-6.793,2.506]},"a":{"a":0,"k":[-6.793,2.506]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"white splashes precomp","refId":"comp_2","sr":1,"ks":{"p":{"a":0,"k":[243,243,0]},"a":{"a":0,"k":[243,243,0]}},"ao":0,"w":486,"h":486,"ip":-4,"op":99,"st":-5,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"ogonek5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[1],"y":[0]},"t":30,"s":[100]},{"t":45,"s":[0]}]},"p":{"a":0,"k":[241,232.25,0]},"a":{"a":0,"k":[-51,43,0]},"s":{"a":1,"k":[{"i":{"x":[0,0,0],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,15.828]},"t":30,"s":[0,0,100]},{"t":45,"s":[151,151,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[164,164]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":7,"k":{"a":0,"k":[0.166,1,1,1,0.291,0.886,0.886,0.99,0.379,0.773,0.773,0.98,0.522,0.386,0.644,0.967,0.708,0,0.516,0.953,0.865,0.203,0.631,0.969,0.999,0.405,0.746,0.984,0.166,1,0.291,1,0.379,1,0.522,0.9,0.708,0.8,0.865,0.8,0.999,0.8]}},"s":{"a":0,"k":[1,0.5]},"e":{"a":0,"k":[-61.596,-53.096]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 8","hd":false},{"ty":"tr","p":{"a":0,"k":[-51,43]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":30,"op":45,"st":-45,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"rose splashes 80%","sr":1,"ks":{"o":{"a":0,"k":80},"p":{"a":0,"k":[283.287,244.6,0]},"a":{"a":0,"k":[40.287,1.6,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[8.458,2.584],[-1.178,1.927]],"o":[[0,0],[1.178,-1.927]],"v":[[47.396,-2.495],[66.132,8.305]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[17.915,5.472],[-2.495,4.082]],"o":[[0,0],[2.494,-4.082]],"v":[[127.416,14.655],[167.1,37.528]],"c":true}]},{"t":100,"s":[{"i":[[2.922,0.892],[-0.407,0.666]],"o":[[0,0],[0.407,-0.666]],"v":[[231.544,79.714],[238.016,83.445]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-7.371,11.75],[-2.605,-2.954]],"o":[[0,0],[2.605,2.954]],"v":[[-19.417,21.61],[-33.613,50.565]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-16.511,26.322],[-5.835,-6.617]],"o":[[0,0],[5.835,6.617]],"v":[[-54.289,78.774],[-86.09,143.637]],"c":true}]},{"t":100,"s":[{"i":[[-2.019,3.219],[-0.714,-0.809]],"o":[[0,0],[0.714,0.809]],"v":[[-120,208.391],[-123.889,216.322]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[4.272,18.752],[3.489,0]],"o":[[0,0],[-2.919,0]],"v":[[13.337,36.564],[18.266,63.997]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[9.5,41.701],[7.758,0]],"o":[[0,0],[-6.491,0]],"v":[[34.44,120.578],[45.401,181.583]],"c":true}]},{"t":100,"s":[{"i":[[1.211,5.316],[0.989,0]],"o":[[0,0],[-0.827,0]],"v":[[49.981,239.625],[51.378,247.402]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.357,10.649],[2.065,-1.671]],"o":[[0,0],[-2.092,1.693]],"v":[[27.785,38.344],[37.752,60.836]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[12.682,25.21],[4.889,-3.955]],"o":[[0,0],[-4.953,4.007]],"v":[[73.965,124.33],[97.561,177.576]],"c":true}]},{"t":100,"s":[{"i":[[1.068,2.124],[0.412,-0.333]],"o":[[0,0],[-0.417,0.338]],"v":[[112.746,219.25],[114.734,223.735]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[7.125,6.764],[2.818,-3.288]],"o":[[0,0],[-1.952,2.278]],"v":[[39.186,19.394],[56.431,42.171]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[16.508,15.671],[6.529,-7.617]],"o":[[0,0],[-4.523,5.277]],"v":[[103.804,73.868],[143.76,126.64]],"c":true}]},{"t":100,"s":[{"i":[[1.631,1.548],[0.645,-0.753]],"o":[[0,0],[-0.447,0.521]],"v":[[178.352,168.75],[182.3,173.964]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":5,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[14.003,-18.483],[-2.995,-2.598]],"o":[[0,0],[2.346,2.035]],"v":[[19.896,-54.149],[37.88,-77.508]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[31.33,-41.355],[-6.701,-5.813]],"o":[[0,0],[5.249,4.553]],"v":[[52.828,-125.71],[93.066,-177.974]],"c":true}]},{"t":100,"s":[{"i":[[3.858,-5.092],[-0.825,-0.716]],"o":[[0,0],[0.646,0.561]],"v":[[119.615,-214],[124.57,-220.435]],"c":true}]}]},"nm":"Path 6","hd":false},{"ind":6,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.092,-13.223],[3.225,-0.461]],"o":[[0,0],[-3.225,0.461]],"v":[[-11.7,-53.501],[-23.447,-74.576]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-13.694,-29.721],[7.248,-1.036]],"o":[[0,0],[-7.248,1.036]],"v":[[-33.744,-123.528],[-60.149,-170.902]],"c":true}]},{"t":100,"s":[{"i":[[-1.641,-3.562],[0.869,-0.124]],"o":[[0,0],[-0.869,0.124]],"v":[[-92.793,-229.25],[-95.958,-234.928]],"c":true}]}]},"nm":"Path 7","hd":false},{"ty":"fl","c":{"a":0,"k":[0.399169562845,0.676376941157,0.988235294118,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 7","hd":false},{"ty":"tr","p":{"a":0,"k":[40.287,1.6]},"a":{"a":0,"k":[40.287,1.6]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"rose splashes 40%","sr":1,"ks":{"o":{"a":0,"k":40},"p":{"a":0,"k":[255.462,250.532,0]},"a":{"a":0,"k":[12.462,7.532,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[2.498,-1.717],[-2.802,-3.967]],"o":[[-1.32,0.907],[0,0]],"v":[[-27.909,-69.864],[-23.485,-62.918]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[5.583,-3.836],[-6.261,-8.864]],"o":[[-2.949,2.026],[0,0]],"v":[[-77.365,-168.395],[-67.479,-152.872]],"c":true}]},{"t":100,"s":[{"i":[[0.692,-0.476],[-0.776,-1.099]],"o":[[-0.366,0.251],[0,0]],"v":[[-104.452,-204.425],[-103.226,-202.5]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-4.758,-1.202],[3.089,-1.172]],"o":[[0,0],[-3.089,1.172]],"v":[[-40.584,-41.866],[-51.165,-45.778]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-10.775,-2.722],[6.996,-2.654]],"o":[[0,0],[-6.996,2.654]],"v":[[-111.836,-92.023],[-135.799,-100.881]],"c":true}]},{"t":100,"s":[{"i":[[-1.235,-0.312],[0.802,-0.304]],"o":[[0,0],[-0.802,0.304]],"v":[[-194.867,-116.25],[-197.612,-117.265]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-6.418,17.711],[-4.713,-1.091]],"o":[[0,0],[2.758,0.638]],"v":[[-22.297,35.041],[-30.452,64.628]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-14.835,40.938],[-10.895,-2.522]],"o":[[0,0],[6.375,1.475]],"v":[[-62.088,115.52],[-80.938,183.907]],"c":true}]},{"t":100,"s":[{"i":[[-1.49,4.112],[-1.094,-0.253]],"o":[[0,0],[0.64,0.148]],"v":[[-89,203.172],[-90.893,210.041]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.125,2.009],[-1.205,-2.41]],"o":[[-0.644,-1.15],[1.205,2.41]],"v":[[60.208,34.488],[58.28,36.577]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[2.266,4.046],[-2.428,-4.856]],"o":[[-1.297,-2.316],[2.428,4.856]],"v":[[161.46,114.372],[157.576,118.58]],"c":true}]},{"t":100,"s":[{"i":[[0.457,0.815],[-0.489,-0.978]],"o":[[-0.261,-0.467],[0.489,0.978]],"v":[[178.425,143.467],[177.643,144.315]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0.378,1.888],[-0.054,-1.294]],"o":[[-0.244,-1.218],[0.054,1.294]],"v":[[57.201,-37.513],[53.318,-36.704]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.721,3.602],[-0.103,-2.47]],"o":[[-0.465,-2.323],[0.103,2.47]],"v":[[152.987,-80.688],[145.577,-79.144]],"c":true}]},{"t":100,"s":[{"i":[[0.177,0.884],[-0.025,-0.606]],"o":[[-0.114,-0.57],[0.025,0.606]],"v":[[207.62,-96.485],[205.801,-96.106]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":5,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.033,1.484],[-0.082,-1.894]],"o":[[0.031,-1.392],[0.082,1.894]],"v":[[53.595,-30.294],[48.408,-29.669]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-0.074,3.328],[-0.185,-4.247]],"o":[[0.069,-3.121],[0.185,4.247]],"v":[[143.792,-61.221],[132.159,-59.821]],"c":true}]},{"t":100,"s":[{"i":[[-0.009,0.404],[-0.022,-0.516]],"o":[[0.008,-0.379],[0.022,0.516]],"v":[[216.285,-76.436],[214.873,-76.266]],"c":true}]}]},"nm":"Path 6","hd":false},{"ty":"fl","c":{"a":0,"k":[0.4,0.674509803922,0.988235294118,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 6","hd":false},{"ty":"tr","p":{"a":0,"k":[12.462,7.532]},"a":{"a":0,"k":[12.462,7.532]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"violet","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[33.333]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[100]},{"t":70,"s":[0]}]},"p":{"a":0,"k":[250.172,221.61,0]},"a":{"a":0,"k":[7.172,-21.39,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.629,0.629,0.629],"y":[0,0,0]},"t":30,"s":[43.235,43.235,100]},{"t":40,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[8.424,-5.071],[2.653,-10.693],[8.493,-0.25],[-0.281,-21.575],[8.206,2.479],[-9.071,-18.319],[10.163,-0.826],[-8.504,-13.367],[7.925,-6.142],[-9.44,-13.344],[2.854,-8.942],[-21.641,-24.17],[6.753,-1.287],[-6.374,-4.022],[10.533,-2.098],[-13.32,-3.511],[-1.839,-6.483],[-21.075,-3.827],[-5.954,-6.816],[-11.932,-2.571],[3.257,-17.575],[-38.942,9.134],[-0.325,-7.706],[-8.742,1.73],[-8.801,-7.785],[-30.134,14.717],[-9.382,-4.129],[-16.279,6.661],[1.088,-8.515],[-7.687,7.097],[-6.012,-8.868],[-10.651,19.166],[-10.35,0.696],[-9.579,21.376],[-8.09,4.605],[-5.131,22.602],[-3.808,-4.758],[-0.748,8.961],[-7.254,-2.788],[2.909,7.968],[-7.635,-1.047],[9.08,17.754],[-7.507,3.193],[9.997,10.579],[-6.351,4.692],[9.781,8.968],[0.178,6.817],[17.454,12.482],[0.03,6.973],[12.265,1.257],[-5.162,4.439],[17.018,1.365],[-5.218,7.12],[24.328,-1.527],[-3.121,9.666],[14.883,-6.778],[10.864,5.993],[11.338,-8.563],[5.168,9.097],[9.336,-10.339],[5.422,9.555],[17.401,-17.591],[8.409,7.467],[2.648,-7.068],[8.104,5.903],[5.776,-17.779],[7.39,-3.513],[1.572,-7.178],[9.221,3.529],[4.343,-6.683]],"o":[[-7.125,5.075],[-0.627,-20.281],[-8.492,0.25],[-7.605,-11.419],[-6.68,-3.509],[-2.4,-2.857],[-8.37,0.053],[-2.455,-2.437],[-7.318,5.151],[-25.313,-18.266],[-0.866,7.957],[-15.111,-8.219],[-6.731,1.147],[0,0],[-8.775,1.322],[-36.623,-3.316],[2.35,6.725],[-4.284,0.119],[5.62,5.119],[0,0],[-0.325,7.953],[-14.317,6.526],[0.333,6.979],[-5.382,3.713],[7.32,4.607],[-4.424,3.372],[7.613,2.532],[-10.42,10.905],[-1.668,7.104],[-2.075,4.92],[4.11,6.36],[-1.424,4.903],[7.699,-1.121],[0,0],[8.176,-4.621],[-1.052,23.086],[4.14,4.652],[5.615,9.885],[7.25,2.786],[5.203,5.546],[7.441,1.093],[15.761,17.732],[7.507,-3.193],[5.904,3.732],[6.351,-4.692],[9.84,5.408],[-0.622,-6.552],[19.337,4.71],[0.329,-7.351],[6.418,-1.574],[5.14,-4.409],[27.522,-2.876],[5.215,-7.117],[4.426,-6.277],[2.875,-9.309],[1.399,-5.562],[-7.079,-5.34],[4.34,-9.001],[-5.002,-8.493],[13.638,-18.255],[-5.312,-9.225],[0.333,-7.822],[-7.414,-6.268],[3.497,-13.498],[-8.104,-5.903],[-0.973,-5.144],[-8.335,3.293],[-2.994,-1.674],[-9.108,-3.513],[-0.006,-3.457]],"v":[[5.228,-95.512],[7.462,-28.929],[-2.195,-87.293],[6.416,-28.961],[-31.261,-81.602],[2.547,-32.204],[-43.849,-81.375],[0.273,-32.419],[-44.643,-71.2],[-1.483,-31.501],[-68.757,-71.437],[-0.116,-26.024],[-42.303,-41.201],[-2.32,-26.028],[-60.656,-35.365],[-6.28,-25.891],[-67.569,-24.781],[-6.096,-24.791],[-61.84,-18.285],[-3.524,-23.253],[-83.167,12.168],[-3.472,-21.52],[-43.616,2.576],[-3.348,-19.306],[-64.141,31.565],[0.002,-18.262],[-50.895,27.819],[3.739,-17.431],[-29.038,27.111],[2.554,-14.294],[-16.457,46.001],[4.192,-11.614],[-10.643,61.853],[6.528,-12.171],[7.719,52.216],[8.895,-14.393],[13.275,34.112],[10.222,-12.355],[26.825,31.666],[12.417,-11.04],[35.999,36.579],[14.675,-10.481],[49.25,44.887],[15.923,-11.135],[54.41,30.884],[17.017,-12.053],[59.976,24.143],[15.598,-15.029],[60.134,6.365],[15.406,-16.076],[56.972,-8.479],[17.766,-17.986],[90.136,-9.191],[19.955,-19.743],[79.759,-35.208],[20.474,-22.64],[63.92,-44.118],[18.736,-24.334],[63.006,-55.052],[17.431,-26.232],[77.149,-67.057],[16.295,-27.947],[47.537,-73.383],[14.878,-29.037],[41.274,-77.714],[13.733,-29.91],[25.971,-72.901],[12.306,-29.047],[19.524,-85.462],[9.122,-30.564]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[8.849,0.01],[7.184,-28.957],[3.052,-1.273],[-0.761,-58.423],[7.839,-5.353],[-24.563,-49.607],[9.192,-3.975],[-23.029,-36.198],[4.861,-7.946],[-25.563,-36.135],[12.25,-6.125],[-58.602,-65.452],[0.423,-3.502],[-17.26,-10.89],[11.497,-5.096],[-36.071,-9.509],[-2.201,-1.041],[-57.07,-10.364],[-1.998,-10.013],[-32.312,-6.962],[9.36,-30.715],[-105.454,24.735],[0.047,-4.178],[-23.672,4.686],[-7.461,-15.968],[-81.601,39.854],[-8.157,-7.347],[-44.083,18.039],[-3.026,-7.306],[-20.815,19.217],[-8.186,-10.792],[-28.842,51.901],[-12.022,-1.924],[-25.94,57.885],[-10.365,1.613],[-13.894,61.205],[-1.581,0.481],[-2.025,24.266],[-5.413,1.006],[7.876,21.576],[-4.573,1.132],[24.589,48.078],[-6.41,1.365],[27.072,28.648],[-4.858,2.346],[26.485,24.286],[-6.451,3.968],[47.266,33.8],[-2.771,2.906],[33.213,3.403],[-1.167,1.667],[46.083,3.696],[-1.333,9],[65.879,-4.134],[-5.083,7.361],[40.303,-18.354],[15.513,2.68],[30.702,-23.187],[1.943,7.096],[25.282,-27.999],[2.5,7.5],[47.12,-47.637],[6.155,7.421],[7.17,-19.139],[5.169,3.176],[15.641,-48.146],[3.103,0.727],[4.257,-19.437],[6.927,0.949],[11.76,-18.098]],"o":[[-5.323,-0.006],[-1.697,-54.919],[-3.052,1.273],[-20.594,-30.923],[-3.728,2.546],[-6.498,-7.737],[-4.346,1.879],[-6.647,-6.6],[-3.22,5.264],[-68.548,-49.463],[-6.872,3.436],[-40.921,-22.258],[-0.377,3.121],[0,0],[-6.756,2.995],[-99.173,-8.979],[3.585,1.695],[-11.602,0.322],[1.08,5.412],[0,0],[-1.42,4.661],[-38.77,17.671],[-0.025,2.213],[-14.575,10.054],[3.439,7.359],[-11.98,9.131],[3.354,3.021],[-28.218,29.53],[1.451,3.503],[-5.619,13.324],[3.041,4.009],[-3.855,13.277],[4.839,0.774],[0,0],[10.589,-1.648],[-2.849,62.516],[2.488,-0.757],[15.206,26.767],[5.413,-1.006],[14.09,15.019],[4.055,-1.004],[42.68,48.017],[6.41,-1.365],[15.989,10.107],[4.858,-2.346],[26.647,14.644],[5.257,-3.234],[52.364,12.754],[3.745,-3.927],[17.38,-4.263],[1.115,-1.592],[74.53,-7.789],[1.333,-9],[11.985,-16.998],[4.419,-6.4],[3.79,-15.061],[-5.258,-0.908],[11.752,-24.375],[-1.495,-5.458],[36.932,-49.434],[-2.202,-6.607],[0.901,-21.183],[-3.464,-4.176],[9.469,-36.552],[-5.169,-3.176],[-2.634,-13.929],[-5.658,-1.325],[-8.107,-4.533],[-6.628,-0.908],[-0.017,-9.362]],"v":[[3.02,-162.999],[8.243,-41.492],[-9.448,-140.273],[5.428,-41.577],[-66.581,-136.474],[-4.982,-50.303],[-94.937,-141.294],[-11.103,-50.883],[-91.631,-117.558],[-15.827,-48.412],[-150.75,-126.625],[-12.148,-33.673],[-76.677,-54.762],[-18.079,-33.683],[-125.935,-48.926],[-28.737,-33.315],[-144.516,-27.935],[-28.241,-30.355],[-129.957,-16.393],[-21.32,-26.218],[-189.443,52.219],[-21.179,-21.553],[-84.613,22.128],[-20.845,-15.595],[-143.927,91.798],[-11.831,-12.788],[-109.552,77.33],[-1.776,-10.549],[-60.574,69.369],[-4.963,-2.109],[-41.055,117.272],[-0.555,5.102],[-30.196,155.83],[5.729,3.604],[8.665,130.425],[12.099,-2.376],[18.32,81.416],[15.669,3.108],[41.962,76.131],[21.577,6.648],[62.49,91.451],[27.654,8.15],[95.923,118.365],[31.011,6.393],[102.975,84.18],[33.954,3.923],[112.957,71.446],[30.136,-4.087],[107.438,31.594],[29.62,-6.903],[94.5,0.667],[35.97,-12.045],[183.167,5],[41.86,-16.772],[147.562,-47.507],[43.258,-24.567],[106.809,-61.148],[38.582,-29.125],[103.057,-80.596],[35.068,-34.233],[141.167,-109],[32.012,-38.849],[76.865,-113.118],[28.198,-41.782],[66.503,-119.657],[25.119,-44.132],[37.324,-105.068],[21.279,-41.807],[29.931,-135.604],[12.71,-45.889]],"c":true}]},{"t":100,"s":[{"i":[[6.52,-0.499],[0,0],[7.552,-1.773],[0,0],[7.419,-3.974],[0,0],[5.063,-2.794],[0,0],[3.869,-4.058],[0,0],[3.25,-5.125],[0,0],[2.323,-7.262],[0,0],[1.065,-7.426],[0,0],[-0.016,-6.935],[0,0],[0.043,-8.393],[0,0],[-1.943,-5.281],[0,0],[-4.613,-6.872],[0,0],[-4.427,-4.702],[0,0],[-5.552,-5.67],[0,0],[-7.074,-5.131],[0,0],[-7.555,-2.728],[0,0],[-8.696,0.33],[0,0],[-5.835,-0.075],[0,0],[-5.179,-0.584],[0,0],[-7.538,4.131],[0,0],[-4.51,1.951],[0,0],[-7.077,4.865],[0,0],[-5.025,3.68],[0,0],[-5.043,6.946],[0,0],[-2.062,4.094],[0,0],[-1.5,7.666],[0,0],[-1.333,7.5],[0,0],[-0.438,6.493],[0,0],[2.309,7.852],[0,0],[1.057,4.404],[0,0],[1.667,6.5],[0,0],[6.365,6.382],[0,0],[3.503,2.843],[0,0],[5.324,3.432],[0,0],[2.931,0.896],[0,0]],"o":[[-6.521,0.499],[0,0],[-7.552,1.773],[0,0],[-7.419,3.974],[0,0],[-5.063,2.794],[0,0],[-3.869,4.058],[0,0],[-3.25,5.125],[0,0],[-2.323,7.262],[0,0],[-1.065,7.426],[0,0],[0.016,6.935],[0,0],[-0.043,8.393],[0,0],[1.943,5.281],[0,0],[4.613,6.872],[0,0],[4.427,4.702],[0,0],[5.552,5.67],[0,0],[7.074,5.131],[0,0],[7.555,2.728],[0,0],[8.696,-0.33],[0,0],[5.835,0.075],[0,0],[5.18,0.584],[0,0],[7.538,-4.131],[0,0],[4.51,-1.951],[0,0],[7.077,-4.865],[0,0],[5.025,-3.68],[0,0],[5.043,-6.946],[0,0],[2.062,-4.094],[0,0],[1.5,-7.666],[0,0],[1.333,-7.5],[0,0],[0.438,-6.493],[0,0],[-2.309,-7.852],[0,0],[-1.057,-4.404],[0,0],[-1.667,-6.5],[0,0],[-6.365,-6.382],[0,0],[-3.503,-2.843],[0,0],[-5.324,-3.432],[0,0],[-2.931,-0.896],[0,0]],"v":[[0.021,-238.999],[6.522,-22.25],[-22.948,-238.773],[6.486,-22.251],[-111.081,-205.974],[6.353,-22.363],[-136.437,-188.794],[6.274,-22.37],[-151.131,-175.058],[6.214,-22.339],[-176.75,-144.125],[6.261,-22.15],[-199.177,-102.262],[6.185,-22.15],[-209.935,-65.926],[6.048,-22.145],[-215.016,-31.435],[6.055,-22.107],[-215.457,-11.893],[6.143,-22.054],[-201.443,57.219],[6.145,-21.994],[-194.113,74.128],[6.149,-21.918],[-171.427,112.298],[6.265,-21.882],[-163.052,122.83],[6.394,-21.853],[-126.074,156.869],[6.353,-21.745],[-65.055,189.772],[6.41,-21.653],[-38.196,196.33],[6.49,-21.672],[9.165,202.425],[6.572,-21.748],[31.821,199.416],[6.618,-21.678],[80.962,187.631],[6.693,-21.633],[105.49,178.451],[6.771,-21.613],[127.923,167.865],[6.814,-21.636],[157.975,144.18],[6.852,-21.668],[174.957,125.946],[6.803,-21.77],[204.438,84.094],[6.796,-21.806],[223.5,34.166],[6.878,-21.872],[227.667,12],[6.953,-21.933],[227.062,-61.507],[6.971,-22.033],[213.309,-104.148],[6.911,-22.091],[198.057,-137.596],[6.866,-22.157],[195.667,-144],[6.827,-22.216],[142.865,-200.118],[6.778,-22.254],[122.503,-211.157],[6.739,-22.284],[84.324,-230.568],[6.689,-22.254],[51.431,-240.604],[6.58,-22.306]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":80},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.001,0.031,0.138,0.537,0.707,0.106,0.275,0.555,1,0.182,0.412,0.573]}},"s":{"a":0,"k":[4,-20]},"e":{"a":0,"k":[177.39,-20]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 3","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":-4,"op":99,"st":-65,"bm":0}]},{"id":"comp_7","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"picies2","sr":1,"ks":{"p":{"a":0,"k":[257.33,185.73,0]},"a":{"a":0,"k":[-265.67,-10.27,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,-0.35],[53.84,0],[-19.93,11.56],[-1,-40.01]],"o":[[0,50.03],[-31.67,-34.87],[39.26,-0.87],[0.01,0.35]],"v":[[-168.19,-10.27],[-265.67,80.32],[-266.5,-79.82],[-168.2,-11.32]],"c":true}]},{"t":35,"s":[{"i":[[0,-0.004],[0.613,0],[-0.227,0.132],[-0.011,-0.455]],"o":[[0,0.569],[-0.36,-0.397],[0.447,-0.01],[0,0.004]],"v":[[-145.03,70.7],[-146.14,71.731],[-146.149,69.909],[-145.03,70.688]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-2.5,-7],[15.65,-61.05],[-53.84,0]],"o":[[0,0],[0,-50.03],[0,0]],"v":[[-266.5,-79.82],[-363.15,-10.27],[-265.67,-100.86]],"c":true}]},{"t":35,"s":[{"i":[[-0.013,-0.036],[0.08,-0.312],[-0.275,0]],"o":[[0,0],[0,-0.256],[0,0]],"v":[[-383.165,-126.689],[-383.659,-126.333],[-383.161,-126.797]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-0.6,-49.55],[39.26,-0.87],[0,0]],"o":[[-1,-40.01],[-2.5,-7],[53.46,0]],"v":[[-168.2,-11.32],[-266.5,-79.82],[-265.67,-100.86]],"c":true}]},{"t":35,"s":[{"i":[[-0.018,-1.483],[1.175,-0.026],[0,0]],"o":[[-0.03,-1.198],[-0.075,-0.21],[1.6,0]],"v":[[-162.091,-102.75],[-165.034,-104.8],[-165.009,-105.43]],"c":true}]}]},"nm":"Path 3","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.360784313725,0.698039215686,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 3","hd":false},{"ty":"tr","p":{"a":0,"k":[-265.67,-10.27]},"a":{"a":0,"k":[-265.67,-10.27]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-31.67,-34.87],[0,50.03],[0,0]],"o":[[-53.84,0],[15.65,-61.05],[-19.93,11.56]],"v":[[-265.67,80.32],[-363.15,-10.27],[-266.5,-79.82]],"c":true}]},{"t":35,"s":[{"i":[[-0.099,-0.109],[0,0.156],[0,0]],"o":[[-0.168,0],[0.049,-0.191],[-0.062,0.036]],"v":[[-415.258,90.5],[-415.562,90.217],[-415.26,90]],"c":true}]}]},"nm":"Path 4","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.286274509804,0.552941176471,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 3","hd":false},{"ty":"tr","p":{"a":0,"k":[-314.41,0.25]},"a":{"a":0,"k":[-314.41,0.25]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"st","c":{"a":0,"k":[0,0.207843152214,0.400000029919,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-265.67,-10.27]},"a":{"a":0,"k":[-265.67,-10.27]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":30,"op":35,"st":2,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"picies","sr":1,"ks":{"p":{"a":0,"k":[255,191.406,0]},"a":{"a":0,"k":[0,45.406,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-14.81,-13.46],[11.95,21.92],[1.11,16.11],[-22.44,-7.84],[-11.16,1.15]],"o":[[-22.91,4.11],[-6.67,-12.23],[5.79,24.31],[9.97,3.48],[-0.13,0.68]],"v":[[10.978,133.929],[-49.332,107.219],[-76.002,35.549],[-29.982,86.199],[2.028,89.909]],"c":true}]},{"t":36,"s":[{"i":[[0.042,0.009],[-0.025,-0.045],[-0.002,-0.033],[0.03,0.046],[0.013,0.008]],"o":[[0.048,-0.009],[0.014,0.025],[-0.012,-0.05],[-0.009,-0.013],[-0.02,-0.013]],"v":[[-71.68,195.17],[-71.555,195.225],[-71.5,195.374],[-71.582,195.231],[-71.615,195.198]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-20.7,35.34],[6.66,-12.23],[15.67,-2.82],[0,0],[-0.13,0.68]],"o":[[-1.11,16.11],[-8.18,15],[0,0],[-14.81,-13.46],[25.91,-2.68]],"v":[[75.998,35.549],[49.338,107.219],[10.988,133.929],[10.978,133.929],[2.028,89.909]],"c":true}]},{"t":36,"s":[{"i":[[-0.149,0.254],[0.048,-0.088],[0.112,-0.02],[0,0],[-0.001,0.005]],"o":[[-0.008,0.116],[-0.059,0.108],[0,0],[0.129,-0.1],[0.093,-0.157]],"v":[[73.967,180.898],[73.775,181.412],[73.5,181.604],[73.5,181.604],[73.665,181.395]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[4.69,-50.46],[25.91,-2.68],[9.97,3.48],[-5.65,29.96],[19.36,23.12]],"o":[[-20.7,35.34],[-11.16,1.15],[25.15,-11.39],[3.71,-19.59],[38.33,2.51]],"v":[[75.998,35.549],[2.028,89.909],[-29.982,86.199],[26.648,21.049],[6.078,-43.891]],"c":true}]},{"t":36,"s":[{"i":[[0.019,-0.202],[0.104,-0.011],[0.04,0.014],[-0.023,0.12],[0.077,0.092]],"o":[[-0.083,0.141],[-0.045,0.005],[0.101,-0.046],[0.015,-0.078],[0.153,0.01]],"v":[[154.424,34.876],[154.128,35.094],[154,35.079],[154.226,34.818],[154.144,34.559]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[3.71,-19.59],[21,-18.31],[-37.83,-2.49]],"o":[[-10.36,-22.61],[4.41,-44.16],[19.36,23.12]],"v":[[26.648,21.049],[-76.002,18.639],[6.078,-43.891]],"c":true}]},{"t":36,"s":[{"i":[[0.012,-0.061],[0.066,-0.057],[-0.118,-0.008]],"o":[[-0.032,-0.071],[0.014,-0.138],[0.06,0.072]],"v":[[1.192,-97.167],[0.872,-97.174],[1.128,-97.369]],"c":true}]}]},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-10.36,-22.61],[25.15,-11.39],[5.79,24.31],[-0.53,5.3]],"o":[[-5.65,29.96],[-22.44,-7.84],[-0.55,-5.97],[21,-18.31]],"v":[[26.648,21.049],[-29.982,86.199],[-76.002,35.549],[-76.002,18.639]],"c":true}]},{"t":36,"s":[{"i":[[-0.156,-0.229],[0.005,-0.198],[0.125,0.524],[-0.011,0.114]],"o":[[0.175,0.257],[-0.483,-0.169],[-0.012,-0.129],[0.113,0.148]],"v":[[-149.053,15.247],[-148.42,15.955],[-149.412,14.864],[-149.412,14.5]],"c":true}]}]},"nm":"Path 5","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.360784313725,0.698039215686,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 5","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.207843137255,0.4,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,45.406]},"a":{"a":0,"k":[0,45.406]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":31,"op":36,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"Null 3","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[256]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[257.445]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[251.735]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[262.162]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[256.384]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[256.888]},{"t":29,"s":[254.404]}]},"y":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[198]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[190.425]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[197.133]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[186.523]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[194.791]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[186.058]},{"t":29,"s":[194.761]}]}},"a":{"a":0,"k":[50,50,0]}},"ao":0,"ip":20,"op":30,"st":-60,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"Null 19","parent":3,"sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[50,108,0],"to":[0,0,0],"ti":[0,0,0]},{"t":30,"s":[50,1,0]}]}},"ao":0,"ip":0,"op":36,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"blik","parent":6,"sr":1,"ks":{"p":{"a":0,"k":[20.897,-88.771,0]},"a":{"a":0,"k":[19.25,-92,0]},"s":{"a":0,"k":[70,70,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.427,-0.298],[-30.5,146.5]],"o":[[0,13.193],[-55,1.5],[-0.5,0]],"v":[[80.444,-33.889],[0,-10],[0,-200]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-61.227],[24.905,-1.3],[-8.202,27.448]],"o":[[0,40.169],[-45,-4.333],[2.417,-2.431]],"v":[[98.282,62.507],[32.976,130.655],[10.893,-24.206]],"c":true}]},{"t":30,"s":[{"i":[[0,-77.778],[23.059,-1.647],[-4.109,3.995]],"o":[[0,50.031],[-47.216,-6.039],[3.294,-3.203]],"v":[[109.918,84.947],[41.535,169.497],[12.437,7.17]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":0,"k":8},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-131]},{"t":30,"s":[-5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8.571},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":2}},{"n":"g","nm":"gap","v":{"a":0,"k":12}},{"n":"d","nm":"dash2","v":{"a":0,"k":297}},{"n":"o","nm":"offset","v":{"a":0,"k":0}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":30,"st":-60,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"rocket_cap","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[0,-33.889,0]},"a":{"a":0,"k":[0,-33.889,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.427,-0.298],[-30.5,146.5]],"o":[[0,13.193],[-55,1.5],[-0.5,0]],"v":[[80.444,-33.889],[0,-10],[0,-200]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-61.227],[24.905,-1.3],[-8.202,27.448]],"o":[[0,40.169],[-45,-4.333],[2.417,-2.431]],"v":[[87.389,21.435],[22.083,89.583],[0,-65.278]],"c":true}]},{"t":30,"s":[{"i":[[0,-77.778],[23.059,-1.647],[-4.109,3.995]],"o":[[0,50.031],[-47.216,-6.039],[3.294,-3.203]],"v":[[97.776,39.412],[29.392,123.961],[0.294,-38.366]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.360784313725,0.698039215686,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.428,0],[0,13.193],[0,0]],"o":[[0,13.193],[-44.428,0],[0,-13.193],[0,0]],"v":[[80.444,-33.889],[0,-10],[-80.444,-33.889],[0,-200]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-61.227],[48.264,0],[0,40.168],[0,0]],"o":[[0,40.168],[-48.264,0],[0,-61.227],[0,0]],"v":[[87.389,21.435],[0,94.167],[-87.389,21.435],[0,-65.278]],"c":true}]},{"t":30,"s":[{"i":[[0,-77.778],[53.838,0],[0,50.031],[0,0]],"o":[[0,50.031],[-53.838,0],[0,-77.778],[0,0]],"v":[[97.776,39.412],[0.294,130],[-97.187,39.412],[0.294,-38.366]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.286274509804,0.552941176471,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-105]},"a":{"a":0,"k":[0,-105]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-13.193],[44.428,0],[0,13.193],[-44.428,0]],"o":[[0,13.193],[-44.428,0],[0,-13.193],[44.428,0]],"v":[[80.444,-33.889],[0,-10],[-80.444,-33.889],[0,-57.778]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-40.168],[48.264,0],[0,40.168],[-48.264,0]],"o":[[0,40.168],[-48.264,0],[0,-40.168],[48.264,0]],"v":[[87.389,21.435],[0,94.167],[-87.389,21.435],[0,-51.296]],"c":true}]},{"t":30,"s":[{"i":[[0,-50.031],[53.838,0],[0,50.031],[-53.838,0]],"o":[[0,50.031],[-53.838,0],[0,-50.031],[53.838,0]],"v":[[97.776,39.412],[0.294,130],[-97.187,39.412],[0.294,-51.176]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.360784313725,0.698039215686,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-33.889]},"a":{"a":0,"k":[0,-33.889]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"st","c":{"a":0,"k":[0,0.207843137255,0.4,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"rocket body 2 outlines","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[0,71.389,0]},"a":{"a":0,"k":[0,71.389,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[2.222,-10],[7.734,34.804],[0,0]],"o":[[0,0],[-7.676,34.543],[-2.222,-10],[0,0]],"v":[[68.778,-37.222],[59.333,153.333],[-59.333,153.333],[-68.778,-37.222]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[6.667,-12.222],[20.133,36.91],[1.111,16.111]],"o":[[-1.111,16.111],[-20.133,36.911],[-6.667,-12.222],[0,0]],"v":[[76,35.556],[49.333,107.222],[-49.333,107.222],[-76,35.556]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.207843137255,0.4,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"rocket body 2 shadows","parent":10,"sr":1,"ks":{"o":{"a":0,"k":50},"p":{"a":0,"k":[0,71.389,0]},"a":{"a":0,"k":[0,71.389,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0.667,-19.333],[7.333,22.167],[0,0]],"o":[[0,0],[0.167,0.667],[-3.217,-9.726],[0,0]],"v":[[-13.222,-18.222],[-12.667,177.333],[-59.333,153.333],[-68.778,-37.222]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[0.167,-11.222],[18.833,29.278],[1.111,16.111]],"o":[[-1.111,16.111],[-15.833,-1.222],[-7.532,-11.709],[0,0]],"v":[[8,37.056],[7.333,133.222],[-49.333,107.222],[-76,35.556]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.207843137255,0.4,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"lines2","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[-4.5,135.446,0]},"a":{"a":0,"k":[-4.5,135.446,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[19,23.25],[0,0],[-72.25,-0.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-45,-7]],"v":[[-67.5,-34.25],[-66,-10.75],[65.25,58.5],[66.5,12.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[19,23.25],[0,0],[-70.25,-2.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-45,-7]],"v":[[-67.5,-34.25],[-67,-26.25],[65.75,25],[68.5,-17]],"c":true}]},{"t":10,"s":[{"i":[[19,23.25],[0,0],[-70.25,-2.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-45,-7]],"v":[[-67.5,-34.25],[-67,-26.25],[68.25,-15],[68.5,-17]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[25,44.25],[0,0],[-71.75,9],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-65,33.75],[-62.5,74.75],[60.75,137],[62.5,98]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[25,44.25],[0,0],[-71.75,10.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-66.5,2.75],[-65,41.25],[61.75,99],[65,63]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[26,30.25],[0,0],[-71.75,10.5],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-68.5,-6.75],[-66,19.75],[62.75,70.5],[68,37]],"c":true}]},{"t":15,"s":[{"i":[[26,30.25],[0,0],[-54.75,16],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50,5]],"v":[[-68.5,-6.75],[-65.5,15.25],[65.75,49],[71,14]],"c":true}]}]},"nm":"Path 3","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[20,16.5],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[13.25,13.75],[-0.25,0],[-50.75,19]],"v":[[-56.25,160.5],[-56,160.5],[49.25,167.75],[49.75,168]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[20,16.5],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[13.25,13.75],[-0.25,0],[-50.75,19]],"v":[[-54.5,154.25],[-54.25,154.25],[43,161.5],[43.5,161.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[20,16.5],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[13.25,13.75],[-0.25,0],[-50.75,19]],"v":[[-53.75,148],[-53.5,148],[42.25,155.5],[42.75,155.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[17.5,26],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-52.5,136.25],[-52.75,136.25],[42.25,147.75],[42.5,147.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-57.25,102.5],[-55,120.25],[43.25,137.5],[44,133.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-59.25,89.5],[-54.25,106.75],[42.5,128],[48,118.75]],"c":true}]},{"t":30,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-58.5,71.75],[-53.5,89],[43.25,110.25],[48.75,101]],"c":true}]}]},"nm":"Path 2","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[19,27.5],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-58.5,158.5],[-58.25,158.5],[53.5,166],[54,165]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[19,27.5],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-57.25,147],[-57.25,147.5],[50.5,160],[50,161]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[24.25,45.5],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-60.5,106.5],[-58.75,138.5],[51,150],[51.25,149.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[24.25,45.5],[0,0],[-54.5,29.25],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.75,19]],"v":[[-62.5,78],[-58.25,106.75],[49,141.75],[53.5,124.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[21.25,35.75],[0,0],[-53.25,24.25],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-62.5,67.5],[-59.5,89.75],[50,121.5],[54.5,104.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[21.25,35.75],[0,0],[-49.75,27],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-62.5,63.25],[-60.75,81.25],[52.25,106.5],[57.25,81]],"c":true}]},{"t":30,"s":[{"i":[[21.25,35.75],[0,0],[-49.75,27],[0,0]],"o":[[-0.25,0.25],[11.75,20.5],[-0.25,0],[-50.75,19]],"v":[[-62.5,63.25],[-60.75,70.5],[56.5,84.75],[57.25,81]],"c":true}]}]},"nm":"Path 5","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[25,44.25],[0,0],[-47,36.25],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-50.5,40.25]],"v":[[-61.5,114.75],[-59,155.75],[63.25,158],[63.5,157.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[25,44.25],[0,0],[-55,45.75],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-62,77.5],[-60.75,112.25],[60.75,151.25],[59.5,132.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[25,44.25],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-64.25,50.75],[-60.75,80.5],[58.25,128],[60.75,101.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[25,39],[0,0],[-58.5,22],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-65.5,33.75],[-63.75,59.5],[59,101.75],[61.5,76.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[25,39],[0,0],[-55.75,26.75],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-69.5,30],[-65,49],[61,82.75],[63.75,62.25]],"c":true}]},{"t":25,"s":[{"i":[[25,39],[0,0],[-55.75,26.75],[0,0]],"o":[[-0.25,0.25],[13.75,25.75],[-0.25,0],[-51,12.25]],"v":[[-69.5,30],[-65,54.75],[62.25,76.25],[63.75,62.25]],"c":true}]}]},"nm":"Path 4","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.360784313725,0.698039215686,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"rocket body","parent":4,"sr":1,"ks":{"p":{"a":0,"k":[0,71.389,0]},"a":{"a":0,"k":[0,71.389,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[2.222,-10],[7.734,34.804],[0,0]],"o":[[0,0],[-7.676,34.543],[-2.222,-10],[0,0]],"v":[[68.778,-37.222],[59.333,153.333],[-59.333,153.333],[-68.778,-37.222]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[6.667,-12.222],[20.133,36.91],[1.111,16.111]],"o":[[-1.111,16.111],[-20.133,36.911],[-6.667,-12.222],[0,0]],"v":[[76,35.556],[49.333,107.222],[-49.333,107.222],[-76,35.556]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.815686334348,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Shape Layer 11","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[283,390,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[257,472,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[283,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[262,427.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[280,323,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[279,288,0],"to":[0,0,0],"ti":[0,0,0]},{"t":31,"s":[259,328,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":4,"s":[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]},"t":10,"s":[20,20,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]},"t":11,"s":[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]},"t":17,"s":[20,20,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]},"t":18,"s":[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]},"t":24,"s":[20,20,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]},"t":25,"s":[100,100,100]},{"t":31,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":4,"op":31,"st":4,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Shape Layer 10","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[255,394,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[257,472,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[258,356,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[262,427.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[255,327,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[261,292,0],"to":[0,0,0],"ti":[0,0,0]},{"t":33,"s":[259,328,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":6,"s":[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]},"t":12,"s":[20,20,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]},"t":13,"s":[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]},"t":19,"s":[20,20,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]},"t":20,"s":[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]},"t":26,"s":[20,20,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]},"t":27,"s":[100,100,100]},{"t":33,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":6,"op":33,"st":6,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Shape Layer 9","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[231,397,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[252,494,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[232,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[254,428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[230,336,0],"to":[0,0,0],"ti":[0,0,0]},{"t":28,"s":[256.5,371.5,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":8,"s":[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]},"t":14,"s":[20,20,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]},"t":15,"s":[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]},"t":21,"s":[20,20,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]},"t":22,"s":[100,100,100]},{"t":28,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":8,"op":28,"st":8,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[283,390,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[257,472,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[283,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[262,427.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[280,323,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[279,288,0],"to":[0,0,0],"ti":[0,0,0]},{"t":29,"s":[259,328,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":2,"s":[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]},"t":8,"s":[20,20,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]},"t":9,"s":[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]},"t":15,"s":[20,20,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]},"t":16,"s":[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]},"t":22,"s":[20,20,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]},"t":23,"s":[100,100,100]},{"t":29,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":2,"op":29,"st":2,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[231,397,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[252,494,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[232,354,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[254,428,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[230,336,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[256.5,371.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[234,298,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[259,328,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[239,262,0],"to":[0,0,0],"ti":[0,0,0]},{"t":33,"s":[264,326,0]}]},"a":{"a":0,"k":[-28,116,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]},"t":0,"s":[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]},"t":6,"s":[20,20,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]},"t":7,"s":[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]},"t":13,"s":[20,20,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]},"t":14,"s":[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]},"t":20,"s":[20,20,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]},"t":21,"s":[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]},"t":27,"s":[20,20,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]},"t":28,"s":[100,100,100]},{"t":33,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[56,56]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.956862745098,0.854901960784,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,116]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":0,"op":34,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"1536_fireworks_3 sec","refId":"comp_0","sr":1,"ks":{"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[768,768,0]},"s":{"a":0,"k":[33.333,33.333,100]}},"ao":0,"w":1536,"h":1536,"ip":0,"op":180,"st":0,"bm":0}]} \ No newline at end of file diff --git a/Tests/LottieMesh/Sources/AppDelegate.swift b/Tests/LottieMesh/Sources/AppDelegate.swift new file mode 100644 index 0000000000..f40c8894f5 --- /dev/null +++ b/Tests/LottieMesh/Sources/AppDelegate.swift @@ -0,0 +1,21 @@ +import Foundation +import UIKit + +@objc(Application) +public final class Application: UIApplication { +} + +@objc(AppDelegate) +public final class AppDelegate: NSObject, UIApplicationDelegate { + public var window: UIWindow? + + public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + let window = UIWindow() + self.window = window + + window.rootViewController = ViewController() + window.makeKeyAndVisible() + + return true + } +} diff --git a/Tests/LottieMesh/Sources/ViewController.swift b/Tests/LottieMesh/Sources/ViewController.swift new file mode 100644 index 0000000000..40d86d5d76 --- /dev/null +++ b/Tests/LottieMesh/Sources/ViewController.swift @@ -0,0 +1,28 @@ +import Foundation +import UIKit + +import LottieMeshSwift + +public final class ViewController: UIViewController { + override public func viewDidLoad() { + super.viewDidLoad() + + self.view.backgroundColor = .black + + let path = Bundle.main.path(forResource: "Fireworks", ofType: "json")! + //let path = Bundle.main.path(forResource: "Cat", ofType: "json")! + /*for _ in 0 ..< 100 { + let _ = generateMeshAnimation(data: try! Data(contentsOf: URL(fileURLWithPath: path)))! + }*/ + + if #available(iOS 13.0, *) { + let animation = generateMeshAnimation(data: try! Data(contentsOf: URL(fileURLWithPath: path)))! + let renderer = MeshRenderer(wireframe: true)! + + renderer.frame = CGRect(origin: CGPoint(x: 0.0, y: 50.0), size: CGSize(width: 300.0, height: 300.0)) + self.view.addSubview(renderer) + + renderer.add(mesh: animation, offset: CGPoint(), loop: true) + } + } +} diff --git a/submodules/AccountContext/BUILD b/submodules/AccountContext/BUILD index a28b4a4daa..fbc7f6c627 100644 --- a/submodules/AccountContext/BUILD +++ b/submodules/AccountContext/BUILD @@ -20,7 +20,7 @@ swift_library( "//submodules/Postbox:Postbox", "//submodules/TelegramCore:TelegramCore", "//submodules/MusicAlbumArtResources:MusicAlbumArtResources", - #"//submodules/MeshAnimationCache:MeshAnimationCache" + "//submodules/MeshAnimationCache:MeshAnimationCache" ], visibility = [ "//visibility:public", diff --git a/submodules/AccountContext/Sources/AccountContext.swift b/submodules/AccountContext/Sources/AccountContext.swift index 8be6add26d..b6eeed0ce3 100644 --- a/submodules/AccountContext/Sources/AccountContext.swift +++ b/submodules/AccountContext/Sources/AccountContext.swift @@ -10,7 +10,7 @@ import AsyncDisplayKit import Display import DeviceLocationManager import TemporaryCachedPeerDataManager -//import MeshAnimationCache +import MeshAnimationCache public final class TelegramApplicationOpenUrlCompletion { public let completion: (Bool) -> Void @@ -737,7 +737,7 @@ public protocol AccountContext: AnyObject { var currentAppConfiguration: Atomic { get } var cachedGroupCallContexts: AccountGroupCallContextCache { get } - //var meshAnimationCache: MeshAnimationCache { get } + var meshAnimationCache: MeshAnimationCache { get } func storeSecureIdPassword(password: String) func getStoredSecureIdPassword() -> String? diff --git a/submodules/LottieMeshSwift/BUILD b/submodules/LottieMeshSwift/BUILD index be8e8a8c67..3782d528d0 100644 --- a/submodules/LottieMeshSwift/BUILD +++ b/submodules/LottieMeshSwift/BUILD @@ -120,6 +120,7 @@ cc_library( ]), copts = [ "-Isubmodules/LottieMeshSwift/LottieMesh/boost", + "-Isubmodules/LottieMeshSwift/libtess2/Include", ] + optimization_flags, hdrs = glob([ "LottieMesh/PublicHeaders/**/*.h", @@ -128,6 +129,27 @@ cc_library( includes = [ "LottieMesh/PublicHeaders", ], + deps = [ + ":libtess2", + ], + visibility = [ + "//visibility:public", + ], +) + +cc_library( + name = "libtess2", + srcs = glob([ + "libtess2/Sources/**/*.c", + "libtess2/Sources/**/*.h", + "libtess2/Include/**/*.h", + ]), + copts = [ + "-Isubmodules/LottieMeshSwift/libtess2/Include", + ] + optimization_flags, + hdrs = glob([ + "libtess2/Include/**/*.h", + ]), deps = [ ], visibility = [ diff --git a/submodules/LottieMeshSwift/LottieMesh/PublicHeaders/LottieMesh/Point.h b/submodules/LottieMeshSwift/LottieMesh/PublicHeaders/LottieMesh/Point.h index 761e15a16e..5c412f6252 100644 --- a/submodules/LottieMeshSwift/LottieMesh/PublicHeaders/LottieMesh/Point.h +++ b/submodules/LottieMeshSwift/LottieMesh/PublicHeaders/LottieMesh/Point.h @@ -10,9 +10,12 @@ struct Point { float x = 0.0f; float y = 0.0f; - explicit Point(float x_, float y_) : + Point(float x_, float y_) : x(x_), y(y_) { } + + Point() : Point(0.0f, 0.0f) { + } bool isEqual(Point const &other, float epsilon = 0.0001f) const { return std::abs(x - other.x) <= epsilon && std::abs(y - other.y) <= epsilon; diff --git a/submodules/LottieMeshSwift/LottieMesh/Sources/LineSegment.h b/submodules/LottieMeshSwift/LottieMesh/Sources/LineSegment.h new file mode 100644 index 0000000000..890351c2bc --- /dev/null +++ b/submodules/LottieMeshSwift/LottieMesh/Sources/LineSegment.h @@ -0,0 +1,86 @@ +#pragma once + +#include "Vec2.h" +#include + +namespace crushedpixel { + +template +struct LineSegment { + LineSegment(const Vec2 &a, const Vec2 &b) : + a(a), b(b) {} + + Vec2 a, b; + + /** + * @return A copy of the line segment, offset by the given vector. + */ + LineSegment operator+(const Vec2 &toAdd) const { + return {Vec2Maths::add(a, toAdd), Vec2Maths::add(b, toAdd)}; + } + + /** + * @return A copy of the line segment, offset by the given vector. + */ + LineSegment operator-(const Vec2 &toRemove) const { + return {Vec2Maths::subtract(a, toRemove), Vec2Maths::subtract(b, toRemove)}; + } + + /** + * @return The line segment's normal vector. + */ + Vec2 normal() const { + auto dir = direction(); + + // return the direction vector + // rotated by 90 degrees counter-clockwise + return {-dir.y, dir.x}; + } + + /** + * @return The line segment's direction vector. + */ + Vec2 direction(bool normalized = true) const { + auto vec = Vec2Maths::subtract(b, a); + + return normalized + ? Vec2Maths::normalized(vec) + : vec; + } + + static Vec2 intersection(const LineSegment &a, const LineSegment &b, bool infiniteLines, bool &success) { + success = true; + + // calculate un-normalized direction vectors + auto r = a.direction(false); + auto s = b.direction(false); + + auto originDist = Vec2Maths::subtract(b.a, a.a); + + auto uNumerator = Vec2Maths::cross(originDist, r); + auto denominator = Vec2Maths::cross(r, s); + + if (std::abs(denominator) < 0.0001f) { + // The lines are parallel + success = false; + return Vec2(); + } + + // solve the intersection positions + auto u = uNumerator / denominator; + auto t = Vec2Maths::cross(originDist, s) / denominator; + + if (!infiniteLines && (t < 0 || t > 1 || u < 0 || u > 1)) { + // the intersection lies outside of the line segments + success = false; + return Vec2(); + } + + // calculate the intersection point + // a.a + r * t; + return Vec2Maths::add(a.a, Vec2Maths::multiply(r, t)); + } +}; + + +} // namespace crushedpixel diff --git a/submodules/LottieMeshSwift/LottieMesh/Sources/LottieMesh.cpp b/submodules/LottieMeshSwift/LottieMesh/Sources/LottieMesh.cpp index 173eda2602..41b2dafb03 100644 --- a/submodules/LottieMeshSwift/LottieMesh/Sources/LottieMesh.cpp +++ b/submodules/LottieMeshSwift/LottieMesh/Sources/LottieMesh.cpp @@ -4,9 +4,85 @@ #include #include "Triangulation.h" +#include "tesselator.h" +#include "Polyline2D.h" + +namespace { +}; + namespace MeshGenerator { std::unique_ptr generateMesh(std::vector const &paths, std::unique_ptr fill, std::unique_ptr stroke) { + if (stroke) { + std::unique_ptr mesh = std::make_unique(); + + for (const auto &path : paths) { + crushedpixel::Polyline2D::JointStyle jointStyle = crushedpixel::Polyline2D::JointStyle::ROUND; + crushedpixel::Polyline2D::EndCapStyle endCapStyle = crushedpixel::Polyline2D::EndCapStyle::SQUARE; + switch (stroke->lineJoin) { + case Stroke::LineJoin::Miter: + jointStyle = crushedpixel::Polyline2D::JointStyle::MITER; + break; + case Stroke::LineJoin::Round: + jointStyle = crushedpixel::Polyline2D::JointStyle::ROUND; + break; + case Stroke::LineJoin::Bevel: + jointStyle = crushedpixel::Polyline2D::JointStyle::BEVEL; + break; + default: { + break; + } + } + switch (stroke->lineCap) { + case Stroke::LineCap::Round: { + endCapStyle = crushedpixel::Polyline2D::EndCapStyle::ROUND; + break; + } + case Stroke::LineCap::Square: { + endCapStyle = crushedpixel::Polyline2D::EndCapStyle::SQUARE; + break; + } + case Stroke::LineCap::Butt: { + endCapStyle = crushedpixel::Polyline2D::EndCapStyle::BUTT; + break; + } + default: { + break; + } + } + + auto vertices = crushedpixel::Polyline2D::create(path.points, stroke->lineWidth, jointStyle, endCapStyle); + for (const auto &vertex : vertices) { + mesh->triangles.push_back((int)mesh->vertices.size()); + mesh->vertices.push_back(vertex); + } + } + + assert(mesh->triangles.size() % 3 == 0); + return mesh; + } else { + TESStesselator *tessellator = tessNewTess(NULL); + tessSetOption(tessellator, TESS_CONSTRAINED_DELAUNAY_TRIANGULATION, 1); + for (const auto &path : paths) { + tessAddContour(tessellator, 2, path.points.data(), sizeof(Point), (int)path.points.size()); + } + tessTesselate(tessellator, TESS_WINDING_ODD, TESS_POLYGONS, 3, 2, NULL); + + int vertexCount = tessGetVertexCount(tessellator); + const TESSreal *vertices = tessGetVertices(tessellator); + int indexCount = tessGetElementCount(tessellator) * 3; + const TESSindex *indices = tessGetElements(tessellator); + + std::unique_ptr mesh = std::make_unique(); + for (int i = 0; i < vertexCount; i++) { + mesh->vertices.push_back(Point(vertices[i * 2 + 0], vertices[i * 2 + 1])); + } + for (int i = 0; i < indexCount; i++) { + mesh->triangles.push_back(indices[i]); + } + return mesh; + } + std::unique_ptr graph; std::unique_ptr> updatedPaths; diff --git a/submodules/LottieMeshSwift/LottieMesh/Sources/Polyline2D.h b/submodules/LottieMeshSwift/LottieMesh/Sources/Polyline2D.h new file mode 100644 index 0000000000..7c95177d1d --- /dev/null +++ b/submodules/LottieMeshSwift/LottieMesh/Sources/Polyline2D.h @@ -0,0 +1,446 @@ +#pragma once + +#include "LineSegment.h" +#include +#include +#include + +namespace crushedpixel { + +class Polyline2D { +public: + enum class JointStyle { + /** + * Corners are drawn with sharp joints. + * If the joint's outer angle is too large, + * the joint is drawn as beveled instead, + * to avoid the miter extending too far out. + */ + MITER, + /** + * Corners are flattened. + */ + BEVEL, + /** + * Corners are rounded off. + */ + ROUND + }; + + enum class EndCapStyle { + /** + * Path ends are drawn flat, + * and don't exceed the actual end point. + */ + BUTT, // lol + /** + * Path ends are drawn flat, + * but extended beyond the end point + * by half the line thickness. + */ + SQUARE, + /** + * Path ends are rounded off. + */ + ROUND, + /** + * Path ends are connected according to the JointStyle. + * When using this EndCapStyle, don't specify the common start/end point twice, + * as Polyline2D connects the first and last input point itself. + */ + JOINT + }; + + /** + * Creates a vector of vertices describing a solid path through the input points. + * @param points The points of the path. + * @param thickness The path's thickness. + * @param jointStyle The path's joint style. + * @param endCapStyle The path's end cap style. + * @param allowOverlap Whether to allow overlapping vertices. + * This yields better results when dealing with paths + * whose points have a distance smaller than the thickness, + * but may introduce overlapping vertices, + * which is undesirable when rendering transparent paths. + * @return The vertices describing the path. + * @tparam Vec2 The vector type to use for the vertices. + * Must have public non-const float fields "x" and "y". + * Must have a two-args constructor taking x and y values. + * See crushedpixel::Vec2 for a type that satisfies these requirements. + * @tparam InputCollection The collection type of the input points. + * Must contain elements of type Vec2. + * Must expose size() and operator[] functions. + */ + template + static std::vector create(const InputCollection &points, float thickness, + JointStyle jointStyle = JointStyle::MITER, + EndCapStyle endCapStyle = EndCapStyle::BUTT, + bool allowOverlap = false) { + std::vector vertices; + create(vertices, points, thickness, jointStyle, endCapStyle, allowOverlap); + return vertices; + } + + template + static std::vector create(const std::vector &points, float thickness, + JointStyle jointStyle = JointStyle::MITER, + EndCapStyle endCapStyle = EndCapStyle::BUTT, + bool allowOverlap = false) { + std::vector vertices; + create>(vertices, points, thickness, jointStyle, endCapStyle, allowOverlap); + return vertices; + } + + template + static size_t create(std::vector &vertices, const InputCollection &points, float thickness, + JointStyle jointStyle = JointStyle::MITER, + EndCapStyle endCapStyle = EndCapStyle::BUTT, + bool allowOverlap = false) { + auto numVerticesBefore = vertices.size(); + + create(std::back_inserter(vertices), points, thickness, + jointStyle, endCapStyle, allowOverlap); + + return vertices.size() - numVerticesBefore; + } + + template + static OutputIterator create(OutputIterator vertices, const InputCollection &points, float thickness, + JointStyle jointStyle = JointStyle::MITER, + EndCapStyle endCapStyle = EndCapStyle::BUTT, + bool allowOverlap = false) { + // operate on half the thickness to make our lives easier + thickness /= 2; + + // create poly segments from the points + std::vector> segments; + for (size_t i = 0; i + 1 < points.size(); i++) { + auto &point1 = points[i]; + auto &point2 = points[i + 1]; + + // to avoid division-by-zero errors, + // only create a line segment for non-identical points + if (!Vec2Maths::equal(point1, point2)) { + segments.emplace_back(LineSegment(point1, point2), thickness); + } + } + + if (endCapStyle == EndCapStyle::JOINT) { + // create a connecting segment from the last to the first point + + auto &point1 = points[points.size() - 1]; + auto &point2 = points[0]; + + // to avoid division-by-zero errors, + // only create a line segment for non-identical points + if (!Vec2Maths::equal(point1, point2)) { + segments.emplace_back(LineSegment(point1, point2), thickness); + } + } + + if (segments.empty()) { + // handle the case of insufficient input points + return vertices; + } + + Vec2 nextStart1{0, 0}; + Vec2 nextStart2{0, 0}; + Vec2 start1{0, 0}; + Vec2 start2{0, 0}; + Vec2 end1{0, 0}; + Vec2 end2{0, 0}; + + // calculate the path's global start and end points + auto &firstSegment = segments[0]; + auto &lastSegment = segments[segments.size() - 1]; + + auto pathStart1 = firstSegment.edge1.a; + auto pathStart2 = firstSegment.edge2.a; + auto pathEnd1 = lastSegment.edge1.b; + auto pathEnd2 = lastSegment.edge2.b; + + // handle different end cap styles + if (endCapStyle == EndCapStyle::SQUARE) { + // extend the start/end points by half the thickness + pathStart1 = Vec2Maths::subtract(pathStart1, Vec2Maths::multiply(firstSegment.edge1.direction(), thickness)); + pathStart2 = Vec2Maths::subtract(pathStart2, Vec2Maths::multiply(firstSegment.edge2.direction(), thickness)); + pathEnd1 = Vec2Maths::add(pathEnd1, Vec2Maths::multiply(lastSegment.edge1.direction(), thickness)); + pathEnd2 = Vec2Maths::add(pathEnd2, Vec2Maths::multiply(lastSegment.edge2.direction(), thickness)); + + } else if (endCapStyle == EndCapStyle::ROUND) { + // draw half circle end caps + createTriangleFan(vertices, firstSegment.center.a, firstSegment.center.a, + firstSegment.edge1.a, firstSegment.edge2.a, false); + createTriangleFan(vertices, lastSegment.center.b, lastSegment.center.b, + lastSegment.edge1.b, lastSegment.edge2.b, true); + + } else if (endCapStyle == EndCapStyle::JOINT) { + // join the last (connecting) segment and the first segment + createJoint(vertices, lastSegment, firstSegment, jointStyle, + pathEnd1, pathEnd2, pathStart1, pathStart2, allowOverlap); + } + + // generate mesh data for path segments + for (size_t i = 0; i < segments.size(); i++) { + auto &segment = segments[i]; + + // calculate start + if (i == 0) { + // this is the first segment + start1 = pathStart1; + start2 = pathStart2; + } + + if (i + 1 == segments.size()) { + // this is the last segment + end1 = pathEnd1; + end2 = pathEnd2; + + } else { + createJoint(vertices, segment, segments[i + 1], jointStyle, + end1, end2, nextStart1, nextStart2, allowOverlap); + } + + // emit vertices + *vertices++ = start1; + *vertices++ = start2; + *vertices++ = end1; + + *vertices++ = end1; + *vertices++ = start2; + *vertices++ = end2; + + start1 = nextStart1; + start2 = nextStart2; + } + + return vertices; + } + +private: + static constexpr float pi = 3.14159265358979323846f; + + /** + * The threshold for mitered joints. + * If the joint's angle is smaller than this angle, + * the joint will be drawn beveled instead. + */ + static constexpr float miterMinAngle = 0.349066; // ~20 degrees + + /** + * The minimum angle of a round joint's triangles. + */ + static constexpr float roundMinAngle = 0.174533; // ~10 degrees + + template + struct PolySegment { + PolySegment(const LineSegment ¢er, float thickness) : + center(center), + // calculate the segment's outer edges by offsetting + // the central line by the normal vector + // multiplied with the thickness + + // center + center.normal() * thickness + edge1(center + Vec2Maths::multiply(center.normal(), thickness)), + edge2(center - Vec2Maths::multiply(center.normal(), thickness)) {} + + LineSegment center, edge1, edge2; + }; + + template + static OutputIterator createJoint(OutputIterator vertices, + const PolySegment &segment1, const PolySegment &segment2, + JointStyle jointStyle, Vec2 &end1, Vec2 &end2, + Vec2 &nextStart1, Vec2 &nextStart2, + bool allowOverlap) { + // calculate the angle between the two line segments + auto dir1 = segment1.center.direction(); + auto dir2 = segment2.center.direction(); + + auto angle = Vec2Maths::angle(dir1, dir2); + + // wrap the angle around the 180ยฐ mark if it exceeds 90ยฐ + // for minimum angle detection + auto wrappedAngle = angle; + if (wrappedAngle > pi / 2) { + wrappedAngle = pi - wrappedAngle; + } + + if (jointStyle == JointStyle::MITER && wrappedAngle < miterMinAngle) { + // the minimum angle for mitered joints wasn't exceeded. + // to avoid the intersection point being extremely far out, + // thus producing an enormous joint like a rasta on 4/20, + // we render the joint beveled instead. + jointStyle = JointStyle::BEVEL; + } + + if (jointStyle == JointStyle::MITER) { + // calculate each edge's intersection point + // with the next segment's central line + bool sec1Success = true; + bool sec2Success = true; + auto sec1 = LineSegment::intersection(segment1.edge1, segment2.edge1, true, sec1Success); + auto sec2 = LineSegment::intersection(segment1.edge2, segment2.edge2, true, sec2Success); + + end1 = sec1Success ? sec1 : segment1.edge1.b; + end2 = sec2Success ? sec2 : segment1.edge2.b; + + nextStart1 = end1; + nextStart2 = end2; + + } else { + // joint style is either BEVEL or ROUND + + // find out which are the inner edges for this joint + auto x1 = dir1.x; + auto x2 = dir2.x; + auto y1 = dir1.y; + auto y2 = dir2.y; + + auto clockwise = x1 * y2 - x2 * y1 < 0; + + const LineSegment *inner1, *inner2, *outer1, *outer2; + + // as the normal vector is rotated counter-clockwise, + // the first edge lies to the left + // from the central line's perspective, + // and the second one to the right. + if (clockwise) { + outer1 = &segment1.edge1; + outer2 = &segment2.edge1; + inner1 = &segment1.edge2; + inner2 = &segment2.edge2; + } else { + outer1 = &segment1.edge2; + outer2 = &segment2.edge2; + inner1 = &segment1.edge1; + inner2 = &segment2.edge1; + } + + // calculate the intersection point of the inner edges + bool innerSecOptSuccess = true; + auto innerSecOpt = LineSegment::intersection(*inner1, *inner2, allowOverlap, innerSecOptSuccess); + + auto innerSec = innerSecOptSuccess + ? innerSecOpt + // for parallel lines, simply connect them directly + : inner1->b; + + // if there's no inner intersection, flip + // the next start position for near-180ยฐ turns + Vec2 innerStart; + if (innerSecOptSuccess) { + innerStart = innerSec; + } else if (angle > pi / 2) { + innerStart = outer1->b; + } else { + innerStart = inner1->b; + } + + if (clockwise) { + end1 = outer1->b; + end2 = innerSec; + + nextStart1 = outer2->a; + nextStart2 = innerStart; + + } else { + end1 = innerSec; + end2 = outer1->b; + + nextStart1 = innerStart; + nextStart2 = outer2->a; + } + + // connect the intersection points according to the joint style + + if (jointStyle == JointStyle::BEVEL) { + // simply connect the intersection points + *vertices++ = outer1->b; + *vertices++ = outer2->a; + *vertices++ = innerSec; + + } else if (jointStyle == JointStyle::ROUND) { + // draw a circle between the ends of the outer edges, + // centered at the actual point + // with half the line thickness as the radius + createTriangleFan(vertices, innerSec, segment1.center.b, outer1->b, outer2->a, clockwise); + } else { + assert(false); + } + } + + return vertices; + } + + /** + * Creates a partial circle between two points. + * The points must be equally far away from the origin. + * @param vertices The vector to add vertices to. + * @param connectTo The position to connect the triangles to. + * @param origin The circle's origin. + * @param start The circle's starting point. + * @param end The circle's ending point. + * @param clockwise Whether the circle's rotation is clockwise. + */ + template + static OutputIterator createTriangleFan(OutputIterator vertices, Vec2 connectTo, Vec2 origin, + Vec2 start, Vec2 end, bool clockwise) { + + auto point1 = Vec2Maths::subtract(start, origin); + auto point2 = Vec2Maths::subtract(end, origin); + + // calculate the angle between the two points + auto angle1 = atan2(point1.y, point1.x); + auto angle2 = atan2(point2.y, point2.x); + + // ensure the outer angle is calculated + if (clockwise) { + if (angle2 > angle1) { + angle2 = angle2 - 2 * pi; + } + } else { + if (angle1 > angle2) { + angle1 = angle1 - 2 * pi; + } + } + + auto jointAngle = angle2 - angle1; + + // calculate the amount of triangles to use for the joint + auto numTriangles = std::max(1, (int) std::floor(std::abs(jointAngle) / roundMinAngle)); + + // calculate the angle of each triangle + auto triAngle = jointAngle / numTriangles; + + Vec2 startPoint = start; + Vec2 endPoint; + for (int t = 0; t < numTriangles; t++) { + if (t + 1 == numTriangles) { + // it's the last triangle - ensure it perfectly + // connects to the next line + endPoint = end; + } else { + auto rot = (t + 1) * triAngle; + + // rotate the original point around the origin + endPoint.x = std::cos(rot) * point1.x - std::sin(rot) * point1.y; + endPoint.y = std::sin(rot) * point1.x + std::cos(rot) * point1.y; + + // re-add the rotation origin to the target point + endPoint = Vec2Maths::add(endPoint, origin); + } + + // emit the triangle + *vertices++ = startPoint; + *vertices++ = endPoint; + *vertices++ = connectTo; + + startPoint = endPoint; + } + + return vertices; + } +}; + +} // namespace crushedpixel diff --git a/submodules/LottieMeshSwift/LottieMesh/Sources/Vec2.h b/submodules/LottieMeshSwift/LottieMesh/Sources/Vec2.h new file mode 100644 index 0000000000..08b9ad1e30 --- /dev/null +++ b/submodules/LottieMeshSwift/LottieMesh/Sources/Vec2.h @@ -0,0 +1,99 @@ +#pragma once + +#include + +namespace crushedpixel { + +/** + * A two-dimensional float vector. + * It exposes the x and y fields + * as required by the Polyline2D functions. + */ +struct Vec2 { + Vec2() : + Vec2(0, 0) {} + + Vec2(float x, float y) : + x(x), y(y) {} + + virtual ~Vec2() = default; + + float x, y; +}; + +namespace Vec2Maths { + +template +static bool equal(const Vec2 &a, const Vec2 &b) { + return a.x == b.x && a.y == b.y; +} + +template +static Vec2 multiply(const Vec2 &a, const Vec2 &b) { + return {a.x * b.x, a.y * b.y}; +} + +template +static Vec2 multiply(const Vec2 &vec, float factor) { + return {vec.x * factor, vec.y * factor}; +} + +template +static Vec2 divide(const Vec2 &vec, float factor) { + return {vec.x / factor, vec.y / factor}; +} + +template +static Vec2 add(const Vec2 &a, const Vec2 &b) { + return {a.x + b.x, a.y + b.y}; +} + +template +static Vec2 subtract(const Vec2 &a, const Vec2 &b) { + return {a.x - b.x, a.y - b.y}; +} + +template +static float magnitude(const Vec2 &vec) { + return std::sqrt(vec.x * vec.x + vec.y * vec.y); +} + +template +static Vec2 withLength(const Vec2 &vec, float len) { + auto mag = magnitude(vec); + auto factor = mag / len; + return divide(vec, factor); +} + +template +static Vec2 normalized(const Vec2 &vec) { + return withLength(vec, 1); +} + +/** + * Calculates the dot product of two vectors. + */ +template +static float dot(const Vec2 &a, const Vec2 &b) { + return a.x * b.x + a.y * b.y; +} + +/** + * Calculates the cross product of two vectors. + */ +template +static float cross(const Vec2 &a, const Vec2 &b) { + return a.x * b.y - a.y * b.x; +} + +/** + * Calculates the angle between two vectors. + */ +template +static float angle(const Vec2 &a, const Vec2 &b) { + return std::acos(dot(a, b) / (magnitude(a) * magnitude(b))); +} + +} // namespace Vec2Maths + +} \ No newline at end of file diff --git a/submodules/LottieMeshSwift/LottieMeshBinding/Sources/LottieMeshBinding.mm b/submodules/LottieMeshSwift/LottieMeshBinding/Sources/LottieMeshBinding.mm index 9ccafa31eb..e76e7d974c 100644 --- a/submodules/LottieMeshSwift/LottieMeshBinding/Sources/LottieMeshBinding.mm +++ b/submodules/LottieMeshSwift/LottieMeshBinding/Sources/LottieMeshBinding.mm @@ -94,7 +94,7 @@ float approximateBezierQubicLength(MeshGenerator::Point const &p0, MeshGenerator + (LottieMeshData * _Nullable)generateWithPath:(UIBezierPath * _Nonnull)path fill: (LottieMeshFill * _Nullable)fill stroke:(LottieMeshStroke * _Nullable)stroke { float scale = 1.0f; - float flatness = 0.5; + float flatness = 1.0; __block MeshGenerator::Point startingPoint(0.0f, 0.0f); __block bool hasStartingPoint = false; __block std::vector paths; diff --git a/submodules/LottieMeshSwift/Sources/MeshAnimation.swift b/submodules/LottieMeshSwift/Sources/MeshAnimation.swift index 000af87d75..0de377be5a 100644 --- a/submodules/LottieMeshSwift/Sources/MeshAnimation.swift +++ b/submodules/LottieMeshSwift/Sources/MeshAnimation.swift @@ -126,13 +126,13 @@ public final class MeshAnimation { static func read(buffer: MeshReadBuffer) -> Segment { let vertCount = Int(buffer.readInt32()) - var vertices = Data(count: 4 * vertCount * 2) + var vertices = Data(count: vertCount) vertices.withUnsafeMutableBytes { bytes in buffer.read(bytes.baseAddress!, length: bytes.count) } let triCount = Int(buffer.readInt32()) - var triangles = Data(count: 3 * triCount * 4) + var triangles = Data(count: triCount) triangles.withUnsafeMutableBytes { bytes in buffer.read(bytes.baseAddress!, length: bytes.count) } @@ -207,6 +207,7 @@ public final class MeshRenderer: MTKView { private final class RenderingMesh { let mesh: MeshAnimation let offset: CGPoint + let loop: Bool var currentFrame: Int = 0 let vertexBuffer: MTLBuffer let indexBuffer: MTLBuffer @@ -214,9 +215,10 @@ public final class MeshRenderer: MTKView { let maxVertices: Int let maxTriangles: Int - init(device: MTLDevice, mesh: MeshAnimation, offset: CGPoint) { + init(device: MTLDevice, mesh: MeshAnimation, offset: CGPoint, loop: Bool) { self.mesh = mesh self.offset = offset + self.loop = loop var maxTriangles = 0 var maxVertices = 0 @@ -254,6 +256,7 @@ public final class MeshRenderer: MTKView { } } + private let wireframe: Bool private let commandQueue: MTLCommandQueue private let drawPassthroughPipelineState: MTLRenderPipelineState private let drawRadialGradientPipelineStates: [Int: MTLRenderPipelineState] @@ -272,6 +275,8 @@ public final class MeshRenderer: MTKView { public var allAnimationsCompleted: (() -> Void)? public init?(wireframe: Bool = false) { + self.wireframe = wireframe + let mainBundle = Bundle(for: MeshRenderer.self) guard let path = mainBundle.path(forResource: "LottieMeshSwiftBundle", ofType: "bundle") else { @@ -357,6 +362,7 @@ public final class MeshRenderer: MTKView { self.displayLink = CADisplayLink(target: DisplayLinkProxy(target: self), selector: #selector(DisplayLinkProxy.displayLinkEvent)) if #available(iOS 15.0, *) { self.displayLink?.preferredFrameRateRange = CAFrameRateRange(minimum: 60.0, maximum: 60.0, preferred: 60.0) + //self.displayLink?.preferredFrameRateRange = CAFrameRateRange(minimum: 10.0, maximum: 60.0, preferred: 10.0) } self.displayLink?.add(to: .main, forMode: .common) self.displayLink?.isPaused = false @@ -372,8 +378,8 @@ public final class MeshRenderer: MTKView { self.displayLink?.invalidate() } - public func add(mesh: MeshAnimation, offset: CGPoint) { - self.meshes.append(RenderingMesh(device: self.device!, mesh: mesh, offset: offset)) + public func add(mesh: MeshAnimation, offset: CGPoint, loop: Bool = false) { + self.meshes.append(RenderingMesh(device: self.device!, mesh: mesh, offset: offset, loop: loop)) } @objc private func displayLinkEvent() { @@ -400,9 +406,9 @@ public final class MeshRenderer: MTKView { } renderEncoder.setCullMode(.none) - /*if displayDebug { + if self.wireframe { renderEncoder.setTriangleFillMode(.lines) - }*/ + } func addTriangle(vertexData: UnsafeMutablePointer, maxVertices: Int, nextVertexIndex: inout Int, vertices: Data, triangles: Data, triangleIndex: Int) { assert(nextVertexIndex + 3 <= maxVertices) @@ -534,7 +540,11 @@ public final class MeshRenderer: MTKView { let nextFrame = mesh.currentFrame + 1 if nextFrame >= mesh.mesh.frames.count { - removeMeshes.append(i) + if mesh.loop { + mesh.currentFrame = 0 + } else { + removeMeshes.append(i) + } } else { mesh.currentFrame = nextFrame } diff --git a/submodules/LottieMeshSwift/libtess2/Include/tesselator.h b/submodules/LottieMeshSwift/libtess2/Include/tesselator.h new file mode 100755 index 0000000000..3d431559a1 --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Include/tesselator.h @@ -0,0 +1,242 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Mikko Mononen, July 2009. +*/ + +#ifndef TESSELATOR_H +#define TESSELATOR_H + +#ifdef __cplusplus +extern "C" { +#endif + +// See OpenGL Red Book for description of the winding rules +// http://www.glprogramming.com/red/chapter11.html +enum TessWindingRule +{ + TESS_WINDING_ODD, + TESS_WINDING_NONZERO, + TESS_WINDING_POSITIVE, + TESS_WINDING_NEGATIVE, + TESS_WINDING_ABS_GEQ_TWO, +}; + +// The contents of the tessGetElements() depends on element type being passed to tessTesselate(). +// Tesselation result element types: +// TESS_POLYGONS +// Each element in the element array is polygon defined as 'polySize' number of vertex indices. +// If a polygon has than 'polySize' vertices, the remaining indices are stored as TESS_UNDEF. +// Example, drawing a polygon: +// const int nelems = tessGetElementCount(tess); +// const TESSindex* elems = tessGetElements(tess); +// for (int i = 0; i < nelems; i++) { +// const TESSindex* poly = &elems[i * polySize]; +// glBegin(GL_POLYGON); +// for (int j = 0; j < polySize; j++) { +// if (poly[j] == TESS_UNDEF) break; +// glVertex2fv(&verts[poly[j]*vertexSize]); +// } +// glEnd(); +// } +// +// TESS_CONNECTED_POLYGONS +// Each element in the element array is polygon defined as 'polySize' number of vertex indices, +// followed by 'polySize' indices to neighour polygons, that is each element is 'polySize' * 2 indices. +// If a polygon has than 'polySize' vertices, the remaining indices are stored as TESS_UNDEF. +// If a polygon edge is a boundary, that is, not connected to another polygon, the neighbour index is TESS_UNDEF. +// Example, flood fill based on seed polygon: +// const int nelems = tessGetElementCount(tess); +// const TESSindex* elems = tessGetElements(tess); +// unsigned char* visited = (unsigned char*)calloc(nelems); +// TESSindex stack[50]; +// int nstack = 0; +// stack[nstack++] = seedPoly; +// visited[startPoly] = 1; +// while (nstack > 0) { +// TESSindex idx = stack[--nstack]; +// const TESSindex* poly = &elems[idx * polySize * 2]; +// const TESSindex* nei = &poly[polySize]; +// for (int i = 0; i < polySize; i++) { +// if (poly[i] == TESS_UNDEF) break; +// if (nei[i] != TESS_UNDEF && !visited[nei[i]]) +// stack[nstack++] = nei[i]; +// visited[nei[i]] = 1; +// } +// } +// } +// +// TESS_BOUNDARY_CONTOURS +// Each element in the element array is [base index, count] pair defining a range of vertices for a contour. +// The first value is index to first vertex in contour and the second value is number of vertices in the contour. +// Example, drawing contours: +// const int nelems = tessGetElementCount(tess); +// const TESSindex* elems = tessGetElements(tess); +// for (int i = 0; i < nelems; i++) { +// const TESSindex base = elems[i * 2]; +// const TESSindex count = elems[i * 2 + 1]; +// glBegin(GL_LINE_LOOP); +// for (int j = 0; j < count; j++) { +// glVertex2fv(&verts[(base+j) * vertexSize]); +// } +// glEnd(); +// } + +enum TessElementType +{ + TESS_POLYGONS, + TESS_CONNECTED_POLYGONS, + TESS_BOUNDARY_CONTOURS, +}; + + +// TESS_CONSTRAINED_DELAUNAY_TRIANGULATION +// If enabled, the initial triagulation is improved with non-robust Constrained Delayney triangulation. +// Disable by default. +// +// TESS_REVERSE_CONTOURS +// If enabled, tessAddContour() will treat CW contours as CCW and vice versa +// Disabled by default. + +enum TessOption +{ + TESS_CONSTRAINED_DELAUNAY_TRIANGULATION, + TESS_REVERSE_CONTOURS +}; + +typedef float TESSreal; +typedef int TESSindex; +typedef struct TESStesselator TESStesselator; +typedef struct TESSalloc TESSalloc; + +#define TESS_UNDEF (~(TESSindex)0) + +#define TESS_NOTUSED(v) do { (void)(1 ? (void)0 : ( (void)(v) ) ); } while(0) + +// Custom memory allocator interface. +// The internal memory allocator allocates mesh edges, vertices and faces +// as well as dictionary nodes and active regions in buckets and uses simple +// freelist to speed up the allocation. The bucket size should roughly match your +// expected input data. For example if you process only hundreds of vertices, +// a bucket size of 128 might be ok, where as when processing thousands of vertices +// bucket size of 1024 might be approproate. The bucket size is a compromise between +// how often to allocate memory from the system versus how much extra space the system +// should allocate. Reasonable defaults are show in commects below, they will be used if +// the bucket sizes are zero. +// +// The use may left the memrealloc to be null. In that case, the tesselator will not try to +// dynamically grow int's internal arrays. The tesselator only needs the reallocation when it +// has found intersecting segments and needs to add new vertex. This defency can be cured by +// allocating some extra vertices beforehand. The 'extraVertices' variable allows to specify +// number of expected extra vertices. +struct TESSalloc +{ + void *(*memalloc)( void *userData, unsigned int size ); + void *(*memrealloc)( void *userData, void* ptr, unsigned int size ); + void (*memfree)( void *userData, void *ptr ); + void* userData; // User data passed to the allocator functions. + int meshEdgeBucketSize; // 512 + int meshVertexBucketSize; // 512 + int meshFaceBucketSize; // 256 + int dictNodeBucketSize; // 512 + int regionBucketSize; // 256 + int extraVertices; // Number of extra vertices allocated for the priority queue. +}; + + +// +// Example use: +// +// +// +// + +// tessNewTess() - Creates a new tesselator. +// Use tessDeleteTess() to delete the tesselator. +// Parameters: +// alloc - pointer to a filled TESSalloc struct or NULL to use default malloc based allocator. +// Returns: +// new tesselator object. +TESStesselator* tessNewTess( TESSalloc* alloc ); + +// tessDeleteTess() - Deletes a tesselator. +// Parameters: +// tess - pointer to tesselator object to be deleted. +void tessDeleteTess( TESStesselator *tess ); + +// tessAddContour() - Adds a contour to be tesselated. +// The type of the vertex coordinates is assumed to be TESSreal. +// Parameters: +// tess - pointer to tesselator object. +// size - number of coordinates per vertex. Must be 2 or 3. +// pointer - pointer to the first coordinate of the first vertex in the array. +// stride - defines offset in bytes between consecutive vertices. +// count - number of vertices in contour. +void tessAddContour( TESStesselator *tess, int size, const void* pointer, int stride, int count ); + +// tessSetOption() - Toggles optional tessellation parameters +// Parameters: +// option - one of TessOption +// value - 1 if enabled, 0 if disabled. +void tessSetOption( TESStesselator *tess, int option, int value ); + +// tessTesselate() - tesselate contours. +// Parameters: +// tess - pointer to tesselator object. +// windingRule - winding rules used for tesselation, must be one of TessWindingRule. +// elementType - defines the tesselation result element type, must be one of TessElementType. +// polySize - defines maximum vertices per polygons if output is polygons. +// vertexSize - defines the number of coordinates in tesselation result vertex, must be 2 or 3. +// normal - defines the normal of the input contours, of null the normal is calculated automatically. +// Returns: +// 1 if succeed, 0 if failed. +int tessTesselate( TESStesselator *tess, int windingRule, int elementType, int polySize, int vertexSize, const TESSreal* normal ); + +// tessGetVertexCount() - Returns number of vertices in the tesselated output. +int tessGetVertexCount( TESStesselator *tess ); + +// tessGetVertices() - Returns pointer to first coordinate of first vertex. +const TESSreal* tessGetVertices( TESStesselator *tess ); + +// tessGetVertexIndices() - Returns pointer to first vertex index. +// Vertex indices can be used to map the generated vertices to the original vertices. +// Every point added using tessAddContour() will get a new index starting at 0. +// New vertices generated at the intersections of segments are assigned value TESS_UNDEF. +const TESSindex* tessGetVertexIndices( TESStesselator *tess ); + +// tessGetElementCount() - Returns number of elements in the the tesselated output. +int tessGetElementCount( TESStesselator *tess ); + +// tessGetElements() - Returns pointer to the first element. +const TESSindex* tessGetElements( TESStesselator *tess ); + +#ifdef __cplusplus +}; +#endif + +#endif // TESSELATOR_H diff --git a/submodules/LottieMeshSwift/libtess2/Sources/bucketalloc.c b/submodules/LottieMeshSwift/libtess2/Sources/bucketalloc.c new file mode 100755 index 0000000000..420ebab5ea --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/bucketalloc.c @@ -0,0 +1,191 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Mikko Mononen, July 2009. +*/ + +#include +#include +#include "../Include/tesselator.h" + +//#define CHECK_BOUNDS + +typedef struct BucketAlloc BucketAlloc; +typedef struct Bucket Bucket; + +struct Bucket +{ + Bucket *next; +}; + +struct BucketAlloc +{ + void *freelist; + Bucket *buckets; + unsigned int itemSize; + unsigned int bucketSize; + const char *name; + TESSalloc* alloc; +}; + +static int CreateBucket( struct BucketAlloc* ba ) +{ + size_t size; + Bucket* bucket; + void* freelist; + unsigned char* head; + unsigned char* it; + + // Allocate memory for the bucket + size = sizeof(Bucket) + ba->itemSize * ba->bucketSize; + bucket = (Bucket*)ba->alloc->memalloc( ba->alloc->userData, size ); + if ( !bucket ) + return 0; + bucket->next = 0; + + // Add the bucket into the list of buckets. + bucket->next = ba->buckets; + ba->buckets = bucket; + + // Add new items to the free list. + freelist = ba->freelist; + head = (unsigned char*)bucket + sizeof(Bucket); + it = head + ba->itemSize * ba->bucketSize; + do + { + it -= ba->itemSize; + // Store pointer to next free item. + *((void**)it) = freelist; + // Pointer to next location containing a free item. + freelist = (void*)it; + } + while ( it != head ); + // Update pointer to next location containing a free item. + ba->freelist = (void*)it; + + return 1; +} + +static void *NextFreeItem( struct BucketAlloc *ba ) +{ + return *(void**)ba->freelist; +} + +struct BucketAlloc* createBucketAlloc( TESSalloc* alloc, const char* name, + unsigned int itemSize, unsigned int bucketSize ) +{ + BucketAlloc* ba = (BucketAlloc*)alloc->memalloc( alloc->userData, sizeof(BucketAlloc) ); + + ba->alloc = alloc; + ba->name = name; + ba->itemSize = itemSize; + if ( ba->itemSize < sizeof(void*) ) + ba->itemSize = sizeof(void*); + ba->bucketSize = bucketSize; + ba->freelist = 0; + ba->buckets = 0; + + if ( !CreateBucket( ba ) ) + { + alloc->memfree( alloc->userData, ba ); + return 0; + } + + return ba; +} + +void* bucketAlloc( struct BucketAlloc *ba ) +{ + void *it; + + // If running out of memory, allocate new bucket and update the freelist. + if ( !ba->freelist || !NextFreeItem( ba ) ) + { + if ( !CreateBucket( ba ) ) + return 0; + } + + // Pop item from in front of the free list. + it = ba->freelist; + ba->freelist = NextFreeItem( ba ); + + return it; +} + +void bucketFree( struct BucketAlloc *ba, void *ptr ) +{ +#ifdef CHECK_BOUNDS + int inBounds = 0; + Bucket *bucket; + + // Check that the pointer is allocated with this allocator. + bucket = ba->buckets; + while ( bucket ) + { + void *bucketMin = (void*)((unsigned char*)bucket + sizeof(Bucket)); + void *bucketMax = (void*)((unsigned char*)bucket + sizeof(Bucket) + ba->itemSize * ba->bucketSize); + if ( ptr >= bucketMin && ptr < bucketMax ) + { + inBounds = 1; + break; + } + bucket = bucket->next; + } + + if ( inBounds ) + { + // Add the node in front of the free list. + *(void**)ptr = ba->freelist; + ba->freelist = ptr; + } + else + { + printf("ERROR! pointer 0x%p does not belong to allocator '%s'\n", ba->name); + } +#else + // Add the node in front of the free list. + *(void**)ptr = ba->freelist; + ba->freelist = ptr; +#endif +} + +void deleteBucketAlloc( struct BucketAlloc *ba ) +{ + TESSalloc* alloc = ba->alloc; + Bucket *bucket = ba->buckets; + Bucket *next; + while ( bucket ) + { + next = bucket->next; + alloc->memfree( alloc->userData, bucket ); + bucket = next; + } + ba->freelist = 0; + ba->buckets = 0; + alloc->memfree( alloc->userData, ba ); +} diff --git a/submodules/LottieMeshSwift/libtess2/Sources/bucketalloc.h b/submodules/LottieMeshSwift/libtess2/Sources/bucketalloc.h new file mode 100755 index 0000000000..c540951ea3 --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/bucketalloc.h @@ -0,0 +1,51 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Mikko Mononen, July 2009. +*/ + +#ifndef MEMALLOC_H +#define MEMALLOC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "tesselator.h" + +struct BucketAlloc *createBucketAlloc( TESSalloc* alloc, const char *name, + unsigned int itemSize, unsigned int bucketSize ); +void *bucketAlloc( struct BucketAlloc *ba); +void bucketFree( struct BucketAlloc *ba, void *ptr ); +void deleteBucketAlloc( struct BucketAlloc *ba ); + +#ifdef __cplusplus +}; +#endif + +#endif diff --git a/submodules/LottieMeshSwift/libtess2/Sources/dict.c b/submodules/LottieMeshSwift/libtess2/Sources/dict.c new file mode 100755 index 0000000000..650adda21d --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/dict.c @@ -0,0 +1,109 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +#include +#include "../Include/tesselator.h" +#include "bucketalloc.h" +#include "dict.h" + +/* really tessDictListNewDict */ +Dict *dictNewDict( TESSalloc* alloc, void *frame, int (*leq)(void *frame, DictKey key1, DictKey key2) ) +{ + Dict *dict = (Dict *)alloc->memalloc( alloc->userData, sizeof( Dict )); + DictNode *head; + + if (dict == NULL) return NULL; + + head = &dict->head; + + head->key = NULL; + head->next = head; + head->prev = head; + + dict->frame = frame; + dict->leq = leq; + + if (alloc->dictNodeBucketSize < 16) + alloc->dictNodeBucketSize = 16; + if (alloc->dictNodeBucketSize > 4096) + alloc->dictNodeBucketSize = 4096; + dict->nodePool = createBucketAlloc( alloc, "Dict", sizeof(DictNode), alloc->dictNodeBucketSize ); + + return dict; +} + +/* really tessDictListDeleteDict */ +void dictDeleteDict( TESSalloc* alloc, Dict *dict ) +{ + deleteBucketAlloc( dict->nodePool ); + alloc->memfree( alloc->userData, dict ); +} + +/* really tessDictListInsertBefore */ +DictNode *dictInsertBefore( Dict *dict, DictNode *node, DictKey key ) +{ + DictNode *newNode; + + do { + node = node->prev; + } while( node->key != NULL && ! (*dict->leq)(dict->frame, node->key, key)); + + newNode = (DictNode *)bucketAlloc( dict->nodePool ); + if (newNode == NULL) return NULL; + + newNode->key = key; + newNode->next = node->next; + node->next->prev = newNode; + newNode->prev = node; + node->next = newNode; + + return newNode; +} + +/* really tessDictListDelete */ +void dictDelete( Dict *dict, DictNode *node ) /*ARGSUSED*/ +{ + node->next->prev = node->prev; + node->prev->next = node->next; + bucketFree( dict->nodePool, node ); +} + +/* really tessDictListSearch */ +DictNode *dictSearch( Dict *dict, DictKey key ) +{ + DictNode *node = &dict->head; + + do { + node = node->next; + } while( node->key != NULL && ! (*dict->leq)(dict->frame, key, node->key)); + + return node; +} diff --git a/submodules/LottieMeshSwift/libtess2/Sources/dict.h b/submodules/LottieMeshSwift/libtess2/Sources/dict.h new file mode 100755 index 0000000000..4cf322657b --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/dict.h @@ -0,0 +1,74 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +#ifndef DICT_LIST_H +#define DICT_LIST_H + +typedef void *DictKey; +typedef struct Dict Dict; +typedef struct DictNode DictNode; + +Dict *dictNewDict( TESSalloc* alloc, void *frame, int (*leq)(void *frame, DictKey key1, DictKey key2) ); + +void dictDeleteDict( TESSalloc* alloc, Dict *dict ); + +/* Search returns the node with the smallest key greater than or equal +* to the given key. If there is no such key, returns a node whose +* key is NULL. Similarly, Succ(Max(d)) has a NULL key, etc. +*/ +DictNode *dictSearch( Dict *dict, DictKey key ); +DictNode *dictInsertBefore( Dict *dict, DictNode *node, DictKey key ); +void dictDelete( Dict *dict, DictNode *node ); + +#define dictKey(n) ((n)->key) +#define dictSucc(n) ((n)->next) +#define dictPred(n) ((n)->prev) +#define dictMin(d) ((d)->head.next) +#define dictMax(d) ((d)->head.prev) +#define dictInsert(d,k) (dictInsertBefore((d),&(d)->head,(k))) + + +/*** Private data structures ***/ + +struct DictNode { + DictKey key; + DictNode *next; + DictNode *prev; +}; + +struct Dict { + DictNode head; + void *frame; + struct BucketAlloc *nodePool; + int (*leq)(void *frame, DictKey key1, DictKey key2); +}; + +#endif diff --git a/submodules/LottieMeshSwift/libtess2/Sources/geom.c b/submodules/LottieMeshSwift/libtess2/Sources/geom.c new file mode 100755 index 0000000000..66005540d4 --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/geom.c @@ -0,0 +1,293 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +//#include "tesos.h" +#include +#include "mesh.h" +#include "geom.h" +#include + +int tesvertLeq( TESSvertex *u, TESSvertex *v ) +{ + /* Returns TRUE if u is lexicographically <= v. */ + + return VertLeq( u, v ); +} + +TESSreal tesedgeEval( TESSvertex *u, TESSvertex *v, TESSvertex *w ) +{ + /* Given three vertices u,v,w such that VertLeq(u,v) && VertLeq(v,w), + * evaluates the t-coord of the edge uw at the s-coord of the vertex v. + * Returns v->t - (uw)(v->s), ie. the signed distance from uw to v. + * If uw is vertical (and thus passes thru v), the result is zero. + * + * The calculation is extremely accurate and stable, even when v + * is very close to u or w. In particular if we set v->t = 0 and + * let r be the negated result (this evaluates (uw)(v->s)), then + * r is guaranteed to satisfy MIN(u->t,w->t) <= r <= MAX(u->t,w->t). + */ + TESSreal gapL, gapR; + + assert( VertLeq( u, v ) && VertLeq( v, w )); + + gapL = v->s - u->s; + gapR = w->s - v->s; + + if( gapL + gapR > 0 ) { + if( gapL < gapR ) { + return (v->t - u->t) + (u->t - w->t) * (gapL / (gapL + gapR)); + } else { + return (v->t - w->t) + (w->t - u->t) * (gapR / (gapL + gapR)); + } + } + /* vertical line */ + return 0; +} + +TESSreal tesedgeSign( TESSvertex *u, TESSvertex *v, TESSvertex *w ) +{ + /* Returns a number whose sign matches EdgeEval(u,v,w) but which + * is cheaper to evaluate. Returns > 0, == 0 , or < 0 + * as v is above, on, or below the edge uw. + */ + TESSreal gapL, gapR; + + assert( VertLeq( u, v ) && VertLeq( v, w )); + + gapL = v->s - u->s; + gapR = w->s - v->s; + + if( gapL + gapR > 0 ) { + return (v->t - w->t) * gapL + (v->t - u->t) * gapR; + } + /* vertical line */ + return 0; +} + + +/*********************************************************************** +* Define versions of EdgeSign, EdgeEval with s and t transposed. +*/ + +TESSreal testransEval( TESSvertex *u, TESSvertex *v, TESSvertex *w ) +{ + /* Given three vertices u,v,w such that TransLeq(u,v) && TransLeq(v,w), + * evaluates the t-coord of the edge uw at the s-coord of the vertex v. + * Returns v->s - (uw)(v->t), ie. the signed distance from uw to v. + * If uw is vertical (and thus passes thru v), the result is zero. + * + * The calculation is extremely accurate and stable, even when v + * is very close to u or w. In particular if we set v->s = 0 and + * let r be the negated result (this evaluates (uw)(v->t)), then + * r is guaranteed to satisfy MIN(u->s,w->s) <= r <= MAX(u->s,w->s). + */ + TESSreal gapL, gapR; + + assert( TransLeq( u, v ) && TransLeq( v, w )); + + gapL = v->t - u->t; + gapR = w->t - v->t; + + if( gapL + gapR > 0 ) { + if( gapL < gapR ) { + return (v->s - u->s) + (u->s - w->s) * (gapL / (gapL + gapR)); + } else { + return (v->s - w->s) + (w->s - u->s) * (gapR / (gapL + gapR)); + } + } + /* vertical line */ + return 0; +} + +TESSreal testransSign( TESSvertex *u, TESSvertex *v, TESSvertex *w ) +{ + /* Returns a number whose sign matches TransEval(u,v,w) but which + * is cheaper to evaluate. Returns > 0, == 0 , or < 0 + * as v is above, on, or below the edge uw. + */ + TESSreal gapL, gapR; + + assert( TransLeq( u, v ) && TransLeq( v, w )); + + gapL = v->t - u->t; + gapR = w->t - v->t; + + if( gapL + gapR > 0 ) { + return (v->s - w->s) * gapL + (v->s - u->s) * gapR; + } + /* vertical line */ + return 0; +} + + +int tesvertCCW( TESSvertex *u, TESSvertex *v, TESSvertex *w ) +{ + /* For almost-degenerate situations, the results are not reliable. + * Unless the floating-point arithmetic can be performed without + * rounding errors, *any* implementation will give incorrect results + * on some degenerate inputs, so the client must have some way to + * handle this situation. + */ + return (u->s*(v->t - w->t) + v->s*(w->t - u->t) + w->s*(u->t - v->t)) >= 0; +} + +/* Given parameters a,x,b,y returns the value (b*x+a*y)/(a+b), +* or (x+y)/2 if a==b==0. It requires that a,b >= 0, and enforces +* this in the rare case that one argument is slightly negative. +* The implementation is extremely stable numerically. +* In particular it guarantees that the result r satisfies +* MIN(x,y) <= r <= MAX(x,y), and the results are very accurate +* even when a and b differ greatly in magnitude. +*/ +#define RealInterpolate(a,x,b,y) \ + (a = (a < 0) ? 0 : a, b = (b < 0) ? 0 : b, \ + ((a <= b) ? ((b == 0) ? ((x+y) / 2) \ + : (x + (y-x) * (a/(a+b)))) \ + : (y + (x-y) * (b/(a+b))))) + +#ifndef FOR_TRITE_TEST_PROGRAM +#define Interpolate(a,x,b,y) RealInterpolate(a,x,b,y) +#else + +/* Claim: the ONLY property the sweep algorithm relies on is that +* MIN(x,y) <= r <= MAX(x,y). This is a nasty way to test that. +*/ +#include +extern int RandomInterpolate; + +double Interpolate( double a, double x, double b, double y) +{ + printf("*********************%d\n",RandomInterpolate); + if( RandomInterpolate ) { + a = 1.2 * drand48() - 0.1; + a = (a < 0) ? 0 : ((a > 1) ? 1 : a); + b = 1.0 - a; + } + return RealInterpolate(a,x,b,y); +} + +#endif + +#define Swap(a,b) if (1) { TESSvertex *t = a; a = b; b = t; } else + +void tesedgeIntersect( TESSvertex *o1, TESSvertex *d1, + TESSvertex *o2, TESSvertex *d2, + TESSvertex *v ) + /* Given edges (o1,d1) and (o2,d2), compute their point of intersection. + * The computed point is guaranteed to lie in the intersection of the + * bounding rectangles defined by each edge. + */ +{ + TESSreal z1, z2; + + /* This is certainly not the most efficient way to find the intersection + * of two line segments, but it is very numerically stable. + * + * Strategy: find the two middle vertices in the VertLeq ordering, + * and interpolate the intersection s-value from these. Then repeat + * using the TransLeq ordering to find the intersection t-value. + */ + + if( ! VertLeq( o1, d1 )) { Swap( o1, d1 ); } + if( ! VertLeq( o2, d2 )) { Swap( o2, d2 ); } + if( ! VertLeq( o1, o2 )) { Swap( o1, o2 ); Swap( d1, d2 ); } + + if( ! VertLeq( o2, d1 )) { + /* Technically, no intersection -- do our best */ + v->s = (o2->s + d1->s) / 2; + } else if( VertLeq( d1, d2 )) { + /* Interpolate between o2 and d1 */ + z1 = EdgeEval( o1, o2, d1 ); + z2 = EdgeEval( o2, d1, d2 ); + if( z1+z2 < 0 ) { z1 = -z1; z2 = -z2; } + v->s = Interpolate( z1, o2->s, z2, d1->s ); + } else { + /* Interpolate between o2 and d2 */ + z1 = EdgeSign( o1, o2, d1 ); + z2 = -EdgeSign( o1, d2, d1 ); + if( z1+z2 < 0 ) { z1 = -z1; z2 = -z2; } + v->s = Interpolate( z1, o2->s, z2, d2->s ); + } + + /* Now repeat the process for t */ + + if( ! TransLeq( o1, d1 )) { Swap( o1, d1 ); } + if( ! TransLeq( o2, d2 )) { Swap( o2, d2 ); } + if( ! TransLeq( o1, o2 )) { Swap( o1, o2 ); Swap( d1, d2 ); } + + if( ! TransLeq( o2, d1 )) { + /* Technically, no intersection -- do our best */ + v->t = (o2->t + d1->t) / 2; + } else if( TransLeq( d1, d2 )) { + /* Interpolate between o2 and d1 */ + z1 = TransEval( o1, o2, d1 ); + z2 = TransEval( o2, d1, d2 ); + if( z1+z2 < 0 ) { z1 = -z1; z2 = -z2; } + v->t = Interpolate( z1, o2->t, z2, d1->t ); + } else { + /* Interpolate between o2 and d2 */ + z1 = TransSign( o1, o2, d1 ); + z2 = -TransSign( o1, d2, d1 ); + if( z1+z2 < 0 ) { z1 = -z1; z2 = -z2; } + v->t = Interpolate( z1, o2->t, z2, d2->t ); + } +} + +TESSreal inCircle( TESSvertex *v, TESSvertex *v0, TESSvertex *v1, TESSvertex *v2 ) { + TESSreal adx, ady, bdx, bdy, cdx, cdy; + TESSreal abdet, bcdet, cadet; + TESSreal alift, blift, clift; + + adx = v0->s - v->s; + ady = v0->t - v->t; + bdx = v1->s - v->s; + bdy = v1->t - v->t; + cdx = v2->s - v->s; + cdy = v2->t - v->t; + + abdet = adx * bdy - bdx * ady; + bcdet = bdx * cdy - cdx * bdy; + cadet = cdx * ady - adx * cdy; + + alift = adx * adx + ady * ady; + blift = bdx * bdx + bdy * bdy; + clift = cdx * cdx + cdy * cdy; + + return alift * bcdet + blift * cadet + clift * abdet; +} + +/* + Returns 1 is edge is locally delaunay + */ +int tesedgeIsLocallyDelaunay( TESShalfEdge *e ) +{ + return inCircle(e->Sym->Lnext->Lnext->Org, e->Lnext->Org, e->Lnext->Lnext->Org, e->Org) < 0; +} diff --git a/submodules/LottieMeshSwift/libtess2/Sources/geom.h b/submodules/LottieMeshSwift/libtess2/Sources/geom.h new file mode 100755 index 0000000000..c29a932685 --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/geom.h @@ -0,0 +1,78 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +#ifndef GEOM_H +#define GEOM_H + +#include "mesh.h" + +#ifdef NO_BRANCH_CONDITIONS +/* MIPS architecture has special instructions to evaluate boolean +* conditions -- more efficient than branching, IF you can get the +* compiler to generate the right instructions (SGI compiler doesn't) +*/ +#define VertEq(u,v) (((u)->s == (v)->s) & ((u)->t == (v)->t)) +#define VertLeq(u,v) (((u)->s < (v)->s) | \ + ((u)->s == (v)->s & (u)->t <= (v)->t)) +#else +#define VertEq(u,v) ((u)->s == (v)->s && (u)->t == (v)->t) +#define VertLeq(u,v) (((u)->s < (v)->s) || ((u)->s == (v)->s && (u)->t <= (v)->t)) +#endif + +#define EdgeEval(u,v,w) tesedgeEval(u,v,w) +#define EdgeSign(u,v,w) tesedgeSign(u,v,w) + +/* Versions of VertLeq, EdgeSign, EdgeEval with s and t transposed. */ + +#define TransLeq(u,v) (((u)->t < (v)->t) || ((u)->t == (v)->t && (u)->s <= (v)->s)) +#define TransEval(u,v,w) testransEval(u,v,w) +#define TransSign(u,v,w) testransSign(u,v,w) + + +#define EdgeGoesLeft(e) VertLeq( (e)->Dst, (e)->Org ) +#define EdgeGoesRight(e) VertLeq( (e)->Org, (e)->Dst ) +#define EdgeIsInternal(e) e->Rface && e->Rface->inside + +#define ABS(x) ((x) < 0 ? -(x) : (x)) +#define VertL1dist(u,v) (ABS(u->s - v->s) + ABS(u->t - v->t)) + +#define VertCCW(u,v,w) tesvertCCW(u,v,w) + +int tesvertLeq( TESSvertex *u, TESSvertex *v ); +TESSreal tesedgeEval( TESSvertex *u, TESSvertex *v, TESSvertex *w ); +TESSreal tesedgeSign( TESSvertex *u, TESSvertex *v, TESSvertex *w ); +TESSreal testransEval( TESSvertex *u, TESSvertex *v, TESSvertex *w ); +TESSreal testransSign( TESSvertex *u, TESSvertex *v, TESSvertex *w ); +int tesvertCCW( TESSvertex *u, TESSvertex *v, TESSvertex *w ); +void tesedgeIntersect( TESSvertex *o1, TESSvertex *d1, TESSvertex *o2, TESSvertex *d2, TESSvertex *v ); +int tesedgeIsLocallyDelaunay( TESShalfEdge *e ); + +#endif diff --git a/submodules/LottieMeshSwift/libtess2/Sources/mesh.c b/submodules/LottieMeshSwift/libtess2/Sources/mesh.c new file mode 100755 index 0000000000..a0fa08e577 --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/mesh.c @@ -0,0 +1,917 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +//#include "tesos.h" +#include +#include +#include "mesh.h" +#include "geom.h" +#include "bucketalloc.h" + +#define TRUE 1 +#define FALSE 0 + +/************************ Utility Routines ************************/ + +/* Allocate and free half-edges in pairs for efficiency. +* The *only* place that should use this fact is allocation/free. +*/ +typedef struct { TESShalfEdge e, eSym; } EdgePair; + +/* MakeEdge creates a new pair of half-edges which form their own loop. +* No vertex or face structures are allocated, but these must be assigned +* before the current edge operation is completed. +*/ +static TESShalfEdge *MakeEdge( TESSmesh* mesh, TESShalfEdge *eNext ) +{ + TESShalfEdge *e; + TESShalfEdge *eSym; + TESShalfEdge *ePrev; + EdgePair *pair = (EdgePair *)bucketAlloc( mesh->edgeBucket ); + if (pair == NULL) return NULL; + + e = &pair->e; + eSym = &pair->eSym; + + /* Make sure eNext points to the first edge of the edge pair */ + if( eNext->Sym < eNext ) { eNext = eNext->Sym; } + + /* Insert in circular doubly-linked list before eNext. + * Note that the prev pointer is stored in Sym->next. + */ + ePrev = eNext->Sym->next; + eSym->next = ePrev; + ePrev->Sym->next = e; + e->next = eNext; + eNext->Sym->next = eSym; + + e->Sym = eSym; + e->Onext = e; + e->Lnext = eSym; + e->Org = NULL; + e->Lface = NULL; + e->winding = 0; + e->activeRegion = NULL; + e->mark = 0; + + eSym->Sym = e; + eSym->Onext = eSym; + eSym->Lnext = e; + eSym->Org = NULL; + eSym->Lface = NULL; + eSym->winding = 0; + eSym->activeRegion = NULL; + eSym->mark = 0; + + return e; +} + +/* Splice( a, b ) is best described by the Guibas/Stolfi paper or the +* CS348a notes (see mesh.h). Basically it modifies the mesh so that +* a->Onext and b->Onext are exchanged. This can have various effects +* depending on whether a and b belong to different face or vertex rings. +* For more explanation see tessMeshSplice() below. +*/ +static void Splice( TESShalfEdge *a, TESShalfEdge *b ) +{ + TESShalfEdge *aOnext = a->Onext; + TESShalfEdge *bOnext = b->Onext; + + aOnext->Sym->Lnext = b; + bOnext->Sym->Lnext = a; + a->Onext = bOnext; + b->Onext = aOnext; +} + +/* MakeVertex( newVertex, eOrig, vNext ) attaches a new vertex and makes it the +* origin of all edges in the vertex loop to which eOrig belongs. "vNext" gives +* a place to insert the new vertex in the global vertex list. We insert +* the new vertex *before* vNext so that algorithms which walk the vertex +* list will not see the newly created vertices. +*/ +static void MakeVertex( TESSvertex *newVertex, + TESShalfEdge *eOrig, TESSvertex *vNext ) +{ + TESShalfEdge *e; + TESSvertex *vPrev; + TESSvertex *vNew = newVertex; + + assert(vNew != NULL); + + /* insert in circular doubly-linked list before vNext */ + vPrev = vNext->prev; + vNew->prev = vPrev; + vPrev->next = vNew; + vNew->next = vNext; + vNext->prev = vNew; + + vNew->anEdge = eOrig; + /* leave coords, s, t undefined */ + + /* fix other edges on this vertex loop */ + e = eOrig; + do { + e->Org = vNew; + e = e->Onext; + } while( e != eOrig ); +} + +/* MakeFace( newFace, eOrig, fNext ) attaches a new face and makes it the left +* face of all edges in the face loop to which eOrig belongs. "fNext" gives +* a place to insert the new face in the global face list. We insert +* the new face *before* fNext so that algorithms which walk the face +* list will not see the newly created faces. +*/ +static void MakeFace( TESSface *newFace, TESShalfEdge *eOrig, TESSface *fNext ) +{ + TESShalfEdge *e; + TESSface *fPrev; + TESSface *fNew = newFace; + + assert(fNew != NULL); + + /* insert in circular doubly-linked list before fNext */ + fPrev = fNext->prev; + fNew->prev = fPrev; + fPrev->next = fNew; + fNew->next = fNext; + fNext->prev = fNew; + + fNew->anEdge = eOrig; + fNew->trail = NULL; + fNew->marked = FALSE; + + /* The new face is marked "inside" if the old one was. This is a + * convenience for the common case where a face has been split in two. + */ + fNew->inside = fNext->inside; + + /* fix other edges on this face loop */ + e = eOrig; + do { + e->Lface = fNew; + e = e->Lnext; + } while( e != eOrig ); +} + +/* KillEdge( eDel ) destroys an edge (the half-edges eDel and eDel->Sym), +* and removes from the global edge list. +*/ +static void KillEdge( TESSmesh *mesh, TESShalfEdge *eDel ) +{ + TESShalfEdge *ePrev, *eNext; + + /* Half-edges are allocated in pairs, see EdgePair above */ + if( eDel->Sym < eDel ) { eDel = eDel->Sym; } + + /* delete from circular doubly-linked list */ + eNext = eDel->next; + ePrev = eDel->Sym->next; + eNext->Sym->next = ePrev; + ePrev->Sym->next = eNext; + + bucketFree( mesh->edgeBucket, eDel ); +} + + +/* KillVertex( vDel ) destroys a vertex and removes it from the global +* vertex list. It updates the vertex loop to point to a given new vertex. +*/ +static void KillVertex( TESSmesh *mesh, TESSvertex *vDel, TESSvertex *newOrg ) +{ + TESShalfEdge *e, *eStart = vDel->anEdge; + TESSvertex *vPrev, *vNext; + + /* change the origin of all affected edges */ + e = eStart; + do { + e->Org = newOrg; + e = e->Onext; + } while( e != eStart ); + + /* delete from circular doubly-linked list */ + vPrev = vDel->prev; + vNext = vDel->next; + vNext->prev = vPrev; + vPrev->next = vNext; + + bucketFree( mesh->vertexBucket, vDel ); +} + +/* KillFace( fDel ) destroys a face and removes it from the global face +* list. It updates the face loop to point to a given new face. +*/ +static void KillFace( TESSmesh *mesh, TESSface *fDel, TESSface *newLface ) +{ + TESShalfEdge *e, *eStart = fDel->anEdge; + TESSface *fPrev, *fNext; + + /* change the left face of all affected edges */ + e = eStart; + do { + e->Lface = newLface; + e = e->Lnext; + } while( e != eStart ); + + /* delete from circular doubly-linked list */ + fPrev = fDel->prev; + fNext = fDel->next; + fNext->prev = fPrev; + fPrev->next = fNext; + + bucketFree( mesh->faceBucket, fDel ); +} + + +/****************** Basic Edge Operations **********************/ + +/* tessMeshMakeEdge creates one edge, two vertices, and a loop (face). +* The loop consists of the two new half-edges. +*/ +TESShalfEdge *tessMeshMakeEdge( TESSmesh *mesh ) +{ + TESSvertex *newVertex1 = (TESSvertex*)bucketAlloc(mesh->vertexBucket); + TESSvertex *newVertex2 = (TESSvertex*)bucketAlloc(mesh->vertexBucket); + TESSface *newFace = (TESSface*)bucketAlloc(mesh->faceBucket); + TESShalfEdge *e; + + /* if any one is null then all get freed */ + if (newVertex1 == NULL || newVertex2 == NULL || newFace == NULL) { + if (newVertex1 != NULL) bucketFree( mesh->vertexBucket, newVertex1 ); + if (newVertex2 != NULL) bucketFree( mesh->vertexBucket, newVertex2 ); + if (newFace != NULL) bucketFree( mesh->faceBucket, newFace ); + return NULL; + } + + e = MakeEdge( mesh, &mesh->eHead ); + if (e == NULL) return NULL; + + MakeVertex( newVertex1, e, &mesh->vHead ); + MakeVertex( newVertex2, e->Sym, &mesh->vHead ); + MakeFace( newFace, e, &mesh->fHead ); + return e; +} + + +/* tessMeshSplice( eOrg, eDst ) is the basic operation for changing the +* mesh connectivity and topology. It changes the mesh so that +* eOrg->Onext <- OLD( eDst->Onext ) +* eDst->Onext <- OLD( eOrg->Onext ) +* where OLD(...) means the value before the meshSplice operation. +* +* This can have two effects on the vertex structure: +* - if eOrg->Org != eDst->Org, the two vertices are merged together +* - if eOrg->Org == eDst->Org, the origin is split into two vertices +* In both cases, eDst->Org is changed and eOrg->Org is untouched. +* +* Similarly (and independently) for the face structure, +* - if eOrg->Lface == eDst->Lface, one loop is split into two +* - if eOrg->Lface != eDst->Lface, two distinct loops are joined into one +* In both cases, eDst->Lface is changed and eOrg->Lface is unaffected. +* +* Some special cases: +* If eDst == eOrg, the operation has no effect. +* If eDst == eOrg->Lnext, the new face will have a single edge. +* If eDst == eOrg->Lprev, the old face will have a single edge. +* If eDst == eOrg->Onext, the new vertex will have a single edge. +* If eDst == eOrg->Oprev, the old vertex will have a single edge. +*/ +int tessMeshSplice( TESSmesh* mesh, TESShalfEdge *eOrg, TESShalfEdge *eDst ) +{ + int joiningLoops = FALSE; + int joiningVertices = FALSE; + + if( eOrg == eDst ) return 1; + + if( eDst->Org != eOrg->Org ) { + /* We are merging two disjoint vertices -- destroy eDst->Org */ + joiningVertices = TRUE; + KillVertex( mesh, eDst->Org, eOrg->Org ); + } + if( eDst->Lface != eOrg->Lface ) { + /* We are connecting two disjoint loops -- destroy eDst->Lface */ + joiningLoops = TRUE; + KillFace( mesh, eDst->Lface, eOrg->Lface ); + } + + /* Change the edge structure */ + Splice( eDst, eOrg ); + + if( ! joiningVertices ) { + TESSvertex *newVertex = (TESSvertex*)bucketAlloc( mesh->vertexBucket ); + if (newVertex == NULL) return 0; + + /* We split one vertex into two -- the new vertex is eDst->Org. + * Make sure the old vertex points to a valid half-edge. + */ + MakeVertex( newVertex, eDst, eOrg->Org ); + eOrg->Org->anEdge = eOrg; + } + if( ! joiningLoops ) { + TESSface *newFace = (TESSface*)bucketAlloc( mesh->faceBucket ); + if (newFace == NULL) return 0; + + /* We split one loop into two -- the new loop is eDst->Lface. + * Make sure the old face points to a valid half-edge. + */ + MakeFace( newFace, eDst, eOrg->Lface ); + eOrg->Lface->anEdge = eOrg; + } + + return 1; +} + + +/* tessMeshDelete( eDel ) removes the edge eDel. There are several cases: +* if (eDel->Lface != eDel->Rface), we join two loops into one; the loop +* eDel->Lface is deleted. Otherwise, we are splitting one loop into two; +* the newly created loop will contain eDel->Dst. If the deletion of eDel +* would create isolated vertices, those are deleted as well. +* +* This function could be implemented as two calls to tessMeshSplice +* plus a few calls to memFree, but this would allocate and delete +* unnecessary vertices and faces. +*/ +int tessMeshDelete( TESSmesh *mesh, TESShalfEdge *eDel ) +{ + TESShalfEdge *eDelSym = eDel->Sym; + int joiningLoops = FALSE; + + /* First step: disconnect the origin vertex eDel->Org. We make all + * changes to get a consistent mesh in this "intermediate" state. + */ + if( eDel->Lface != eDel->Rface ) { + /* We are joining two loops into one -- remove the left face */ + joiningLoops = TRUE; + KillFace( mesh, eDel->Lface, eDel->Rface ); + } + + if( eDel->Onext == eDel ) { + KillVertex( mesh, eDel->Org, NULL ); + } else { + /* Make sure that eDel->Org and eDel->Rface point to valid half-edges */ + eDel->Rface->anEdge = eDel->Oprev; + eDel->Org->anEdge = eDel->Onext; + + Splice( eDel, eDel->Oprev ); + if( ! joiningLoops ) { + TESSface *newFace= (TESSface*)bucketAlloc( mesh->faceBucket ); + if (newFace == NULL) return 0; + + /* We are splitting one loop into two -- create a new loop for eDel. */ + MakeFace( newFace, eDel, eDel->Lface ); + } + } + + /* Claim: the mesh is now in a consistent state, except that eDel->Org + * may have been deleted. Now we disconnect eDel->Dst. + */ + if( eDelSym->Onext == eDelSym ) { + KillVertex( mesh, eDelSym->Org, NULL ); + KillFace( mesh, eDelSym->Lface, NULL ); + } else { + /* Make sure that eDel->Dst and eDel->Lface point to valid half-edges */ + eDel->Lface->anEdge = eDelSym->Oprev; + eDelSym->Org->anEdge = eDelSym->Onext; + Splice( eDelSym, eDelSym->Oprev ); + } + + /* Any isolated vertices or faces have already been freed. */ + KillEdge( mesh, eDel ); + + return 1; +} + + +/******************** Other Edge Operations **********************/ + +/* All these routines can be implemented with the basic edge +* operations above. They are provided for convenience and efficiency. +*/ + + +/* tessMeshAddEdgeVertex( eOrg ) creates a new edge eNew such that +* eNew == eOrg->Lnext, and eNew->Dst is a newly created vertex. +* eOrg and eNew will have the same left face. +*/ +TESShalfEdge *tessMeshAddEdgeVertex( TESSmesh *mesh, TESShalfEdge *eOrg ) +{ + TESShalfEdge *eNewSym; + TESShalfEdge *eNew = MakeEdge( mesh, eOrg ); + if (eNew == NULL) return NULL; + + eNewSym = eNew->Sym; + + /* Connect the new edge appropriately */ + Splice( eNew, eOrg->Lnext ); + + /* Set the vertex and face information */ + eNew->Org = eOrg->Dst; + { + TESSvertex *newVertex= (TESSvertex*)bucketAlloc( mesh->vertexBucket ); + if (newVertex == NULL) return NULL; + + MakeVertex( newVertex, eNewSym, eNew->Org ); + } + eNew->Lface = eNewSym->Lface = eOrg->Lface; + + return eNew; +} + + +/* tessMeshSplitEdge( eOrg ) splits eOrg into two edges eOrg and eNew, +* such that eNew == eOrg->Lnext. The new vertex is eOrg->Dst == eNew->Org. +* eOrg and eNew will have the same left face. +*/ +TESShalfEdge *tessMeshSplitEdge( TESSmesh *mesh, TESShalfEdge *eOrg ) +{ + TESShalfEdge *eNew; + TESShalfEdge *tempHalfEdge= tessMeshAddEdgeVertex( mesh, eOrg ); + if (tempHalfEdge == NULL) return NULL; + + eNew = tempHalfEdge->Sym; + + /* Disconnect eOrg from eOrg->Dst and connect it to eNew->Org */ + Splice( eOrg->Sym, eOrg->Sym->Oprev ); + Splice( eOrg->Sym, eNew ); + + /* Set the vertex and face information */ + eOrg->Dst = eNew->Org; + eNew->Dst->anEdge = eNew->Sym; /* may have pointed to eOrg->Sym */ + eNew->Rface = eOrg->Rface; + eNew->winding = eOrg->winding; /* copy old winding information */ + eNew->Sym->winding = eOrg->Sym->winding; + + return eNew; +} + + +/* tessMeshConnect( eOrg, eDst ) creates a new edge from eOrg->Dst +* to eDst->Org, and returns the corresponding half-edge eNew. +* If eOrg->Lface == eDst->Lface, this splits one loop into two, +* and the newly created loop is eNew->Lface. Otherwise, two disjoint +* loops are merged into one, and the loop eDst->Lface is destroyed. +* +* If (eOrg == eDst), the new face will have only two edges. +* If (eOrg->Lnext == eDst), the old face is reduced to a single edge. +* If (eOrg->Lnext->Lnext == eDst), the old face is reduced to two edges. +*/ +TESShalfEdge *tessMeshConnect( TESSmesh *mesh, TESShalfEdge *eOrg, TESShalfEdge *eDst ) +{ + TESShalfEdge *eNewSym; + int joiningLoops = FALSE; + TESShalfEdge *eNew = MakeEdge( mesh, eOrg ); + if (eNew == NULL) return NULL; + + eNewSym = eNew->Sym; + + if( eDst->Lface != eOrg->Lface ) { + /* We are connecting two disjoint loops -- destroy eDst->Lface */ + joiningLoops = TRUE; + KillFace( mesh, eDst->Lface, eOrg->Lface ); + } + + /* Connect the new edge appropriately */ + Splice( eNew, eOrg->Lnext ); + Splice( eNewSym, eDst ); + + /* Set the vertex and face information */ + eNew->Org = eOrg->Dst; + eNewSym->Org = eDst->Org; + eNew->Lface = eNewSym->Lface = eOrg->Lface; + + /* Make sure the old face points to a valid half-edge */ + eOrg->Lface->anEdge = eNewSym; + + if( ! joiningLoops ) { + TESSface *newFace= (TESSface*)bucketAlloc( mesh->faceBucket ); + if (newFace == NULL) return NULL; + + /* We split one loop into two -- the new loop is eNew->Lface */ + MakeFace( newFace, eNew, eOrg->Lface ); + } + return eNew; +} + + +/******************** Other Operations **********************/ + +/* tessMeshZapFace( fZap ) destroys a face and removes it from the +* global face list. All edges of fZap will have a NULL pointer as their +* left face. Any edges which also have a NULL pointer as their right face +* are deleted entirely (along with any isolated vertices this produces). +* An entire mesh can be deleted by zapping its faces, one at a time, +* in any order. Zapped faces cannot be used in further mesh operations! +*/ +void tessMeshZapFace( TESSmesh *mesh, TESSface *fZap ) +{ + TESShalfEdge *eStart = fZap->anEdge; + TESShalfEdge *e, *eNext, *eSym; + TESSface *fPrev, *fNext; + + /* walk around face, deleting edges whose right face is also NULL */ + eNext = eStart->Lnext; + do { + e = eNext; + eNext = e->Lnext; + + e->Lface = NULL; + if( e->Rface == NULL ) { + /* delete the edge -- see TESSmeshDelete above */ + + if( e->Onext == e ) { + KillVertex( mesh, e->Org, NULL ); + } else { + /* Make sure that e->Org points to a valid half-edge */ + e->Org->anEdge = e->Onext; + Splice( e, e->Oprev ); + } + eSym = e->Sym; + if( eSym->Onext == eSym ) { + KillVertex( mesh, eSym->Org, NULL ); + } else { + /* Make sure that eSym->Org points to a valid half-edge */ + eSym->Org->anEdge = eSym->Onext; + Splice( eSym, eSym->Oprev ); + } + KillEdge( mesh, e ); + } + } while( e != eStart ); + + /* delete from circular doubly-linked list */ + fPrev = fZap->prev; + fNext = fZap->next; + fNext->prev = fPrev; + fPrev->next = fNext; + + bucketFree( mesh->faceBucket, fZap ); +} + + +/* tessMeshNewMesh() creates a new mesh with no edges, no vertices, +* and no loops (what we usually call a "face"). +*/ +TESSmesh *tessMeshNewMesh( TESSalloc* alloc ) +{ + TESSvertex *v; + TESSface *f; + TESShalfEdge *e; + TESShalfEdge *eSym; + TESSmesh *mesh = (TESSmesh *)alloc->memalloc( alloc->userData, sizeof( TESSmesh )); + if (mesh == NULL) { + return NULL; + } + + if (alloc->meshEdgeBucketSize < 16) + alloc->meshEdgeBucketSize = 16; + if (alloc->meshEdgeBucketSize > 4096) + alloc->meshEdgeBucketSize = 4096; + + if (alloc->meshVertexBucketSize < 16) + alloc->meshVertexBucketSize = 16; + if (alloc->meshVertexBucketSize > 4096) + alloc->meshVertexBucketSize = 4096; + + if (alloc->meshFaceBucketSize < 16) + alloc->meshFaceBucketSize = 16; + if (alloc->meshFaceBucketSize > 4096) + alloc->meshFaceBucketSize = 4096; + + mesh->edgeBucket = createBucketAlloc( alloc, "Mesh Edges", sizeof(EdgePair), alloc->meshEdgeBucketSize ); + mesh->vertexBucket = createBucketAlloc( alloc, "Mesh Vertices", sizeof(TESSvertex), alloc->meshVertexBucketSize ); + mesh->faceBucket = createBucketAlloc( alloc, "Mesh Faces", sizeof(TESSface), alloc->meshFaceBucketSize ); + + v = &mesh->vHead; + f = &mesh->fHead; + e = &mesh->eHead; + eSym = &mesh->eHeadSym; + + v->next = v->prev = v; + v->anEdge = NULL; + + f->next = f->prev = f; + f->anEdge = NULL; + f->trail = NULL; + f->marked = FALSE; + f->inside = FALSE; + + e->next = e; + e->Sym = eSym; + e->Onext = NULL; + e->Lnext = NULL; + e->Org = NULL; + e->Lface = NULL; + e->winding = 0; + e->activeRegion = NULL; + + eSym->next = eSym; + eSym->Sym = e; + eSym->Onext = NULL; + eSym->Lnext = NULL; + eSym->Org = NULL; + eSym->Lface = NULL; + eSym->winding = 0; + eSym->activeRegion = NULL; + + return mesh; +} + + +/* tessMeshUnion( mesh1, mesh2 ) forms the union of all structures in +* both meshes, and returns the new mesh (the old meshes are destroyed). +*/ +TESSmesh *tessMeshUnion( TESSalloc* alloc, TESSmesh *mesh1, TESSmesh *mesh2 ) +{ + TESSface *f1 = &mesh1->fHead; + TESSvertex *v1 = &mesh1->vHead; + TESShalfEdge *e1 = &mesh1->eHead; + TESSface *f2 = &mesh2->fHead; + TESSvertex *v2 = &mesh2->vHead; + TESShalfEdge *e2 = &mesh2->eHead; + + /* Add the faces, vertices, and edges of mesh2 to those of mesh1 */ + if( f2->next != f2 ) { + f1->prev->next = f2->next; + f2->next->prev = f1->prev; + f2->prev->next = f1; + f1->prev = f2->prev; + } + + if( v2->next != v2 ) { + v1->prev->next = v2->next; + v2->next->prev = v1->prev; + v2->prev->next = v1; + v1->prev = v2->prev; + } + + if( e2->next != e2 ) { + e1->Sym->next->Sym->next = e2->next; + e2->next->Sym->next = e1->Sym->next; + e2->Sym->next->Sym->next = e1; + e1->Sym->next = e2->Sym->next; + } + + alloc->memfree( alloc->userData, mesh2 ); + return mesh1; +} + + +static int CountFaceVerts( TESSface *f ) +{ + TESShalfEdge *eCur = f->anEdge; + int n = 0; + do + { + n++; + eCur = eCur->Lnext; + } + while (eCur != f->anEdge); + return n; +} + +int tessMeshMergeConvexFaces( TESSmesh *mesh, int maxVertsPerFace ) +{ + TESShalfEdge *e, *eNext, *eSym; + TESShalfEdge *eHead = &mesh->eHead; + TESSvertex *va, *vb, *vc, *vd, *ve, *vf; + int leftNv, rightNv; + + for( e = eHead->next; e != eHead; e = eNext ) + { + eNext = e->next; + eSym = e->Sym; + if( !eSym ) + continue; + + // Both faces must be inside + if( !e->Lface || !e->Lface->inside ) + continue; + if( !eSym->Lface || !eSym->Lface->inside ) + continue; + + leftNv = CountFaceVerts( e->Lface ); + rightNv = CountFaceVerts( eSym->Lface ); + if( (leftNv+rightNv-2) > maxVertsPerFace ) + continue; + + // Merge if the resulting poly is convex. + // + // vf--ve--vd + // ^| + // left e || right + // |v + // va--vb--vc + + va = e->Lprev->Org; + vb = e->Org; + vc = e->Sym->Lnext->Dst; + + vd = e->Sym->Lprev->Org; + ve = e->Sym->Org; + vf = e->Lnext->Dst; + + if( VertCCW( va, vb, vc ) && VertCCW( vd, ve, vf ) ) { + if( e == eNext || e == eNext->Sym ) { eNext = eNext->next; } + if( !tessMeshDelete( mesh, e ) ) + return 0; + } + } + + return 1; +} + +void tessMeshFlipEdge( TESSmesh *mesh, TESShalfEdge *edge ) +{ + TESShalfEdge *a0 = edge; + TESShalfEdge *a1 = a0->Lnext; + TESShalfEdge *a2 = a1->Lnext; + TESShalfEdge *b0 = edge->Sym; + TESShalfEdge *b1 = b0->Lnext; + TESShalfEdge *b2 = b1->Lnext; + + TESSvertex *aOrg = a0->Org; + TESSvertex *aOpp = a2->Org; + TESSvertex *bOrg = b0->Org; + TESSvertex *bOpp = b2->Org; + + TESSface *fa = a0->Lface; + TESSface *fb = b0->Lface; + + assert(EdgeIsInternal(edge)); + assert(a2->Lnext == a0); + assert(b2->Lnext == b0); + + a0->Org = bOpp; + a0->Onext = b1->Sym; + b0->Org = aOpp; + b0->Onext = a1->Sym; + a2->Onext = b0; + b2->Onext = a0; + b1->Onext = a2->Sym; + a1->Onext = b2->Sym; + + a0->Lnext = a2; + a2->Lnext = b1; + b1->Lnext = a0; + + b0->Lnext = b2; + b2->Lnext = a1; + a1->Lnext = b0; + + a1->Lface = fb; + b1->Lface = fa; + + fa->anEdge = a0; + fb->anEdge = b0; + + if (aOrg->anEdge == a0) aOrg->anEdge = b1; + if (bOrg->anEdge == b0) bOrg->anEdge = a1; + + assert( a0->Lnext->Onext->Sym == a0 ); + assert( a0->Onext->Sym->Lnext == a0 ); + assert( a0->Org->anEdge->Org == a0->Org ); + + + assert( a1->Lnext->Onext->Sym == a1 ); + assert( a1->Onext->Sym->Lnext == a1 ); + assert( a1->Org->anEdge->Org == a1->Org ); + + assert( a2->Lnext->Onext->Sym == a2 ); + assert( a2->Onext->Sym->Lnext == a2 ); + assert( a2->Org->anEdge->Org == a2->Org ); + + assert( b0->Lnext->Onext->Sym == b0 ); + assert( b0->Onext->Sym->Lnext == b0 ); + assert( b0->Org->anEdge->Org == b0->Org ); + + assert( b1->Lnext->Onext->Sym == b1 ); + assert( b1->Onext->Sym->Lnext == b1 ); + assert( b1->Org->anEdge->Org == b1->Org ); + + assert( b2->Lnext->Onext->Sym == b2 ); + assert( b2->Onext->Sym->Lnext == b2 ); + assert( b2->Org->anEdge->Org == b2->Org ); + + assert(aOrg->anEdge->Org == aOrg); + assert(bOrg->anEdge->Org == bOrg); + + assert(a0->Oprev->Onext->Org == a0->Org); +} + +#ifdef DELETE_BY_ZAPPING + +/* tessMeshDeleteMesh( mesh ) will free all storage for any valid mesh. +*/ +void tessMeshDeleteMesh( TESSalloc* alloc, TESSmesh *mesh ) +{ + TESSface *fHead = &mesh->fHead; + + while( fHead->next != fHead ) { + tessMeshZapFace( fHead->next ); + } + assert( mesh->vHead.next == &mesh->vHead ); + + alloc->memfree( alloc->userData, mesh ); +} + +#else + +/* tessMeshDeleteMesh( mesh ) will free all storage for any valid mesh. +*/ +void tessMeshDeleteMesh( TESSalloc* alloc, TESSmesh *mesh ) +{ + deleteBucketAlloc(mesh->edgeBucket); + deleteBucketAlloc(mesh->vertexBucket); + deleteBucketAlloc(mesh->faceBucket); + + alloc->memfree( alloc->userData, mesh ); +} + +#endif + +#ifndef NDEBUG + +/* tessMeshCheckMesh( mesh ) checks a mesh for self-consistency. +*/ +void tessMeshCheckMesh( TESSmesh *mesh ) +{ + TESSface *fHead = &mesh->fHead; + TESSvertex *vHead = &mesh->vHead; + TESShalfEdge *eHead = &mesh->eHead; + TESSface *f, *fPrev; + TESSvertex *v, *vPrev; + TESShalfEdge *e, *ePrev; + + for( fPrev = fHead ; (f = fPrev->next) != fHead; fPrev = f) { + assert( f->prev == fPrev ); + e = f->anEdge; + do { + assert( e->Sym != e ); + assert( e->Sym->Sym == e ); + assert( e->Lnext->Onext->Sym == e ); + assert( e->Onext->Sym->Lnext == e ); + assert( e->Lface == f ); + e = e->Lnext; + } while( e != f->anEdge ); + } + assert( f->prev == fPrev && f->anEdge == NULL ); + + for( vPrev = vHead ; (v = vPrev->next) != vHead; vPrev = v) { + assert( v->prev == vPrev ); + e = v->anEdge; + do { + assert( e->Sym != e ); + assert( e->Sym->Sym == e ); + assert( e->Lnext->Onext->Sym == e ); + assert( e->Onext->Sym->Lnext == e ); + assert( e->Org == v ); + e = e->Onext; + } while( e != v->anEdge ); + } + assert( v->prev == vPrev && v->anEdge == NULL ); + + for( ePrev = eHead ; (e = ePrev->next) != eHead; ePrev = e) { + assert( e->Sym->next == ePrev->Sym ); + assert( e->Sym != e ); + assert( e->Sym->Sym == e ); + assert( e->Org != NULL ); + assert( e->Dst != NULL ); + assert( e->Lnext->Onext->Sym == e ); + assert( e->Onext->Sym->Lnext == e ); + } + assert( e->Sym->next == ePrev->Sym + && e->Sym == &mesh->eHeadSym + && e->Sym->Sym == e + && e->Org == NULL && e->Dst == NULL + && e->Lface == NULL && e->Rface == NULL ); +} + +#endif diff --git a/submodules/LottieMeshSwift/libtess2/Sources/mesh.h b/submodules/LottieMeshSwift/libtess2/Sources/mesh.h new file mode 100755 index 0000000000..479c66f369 --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/mesh.h @@ -0,0 +1,269 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +#ifndef MESH_H +#define MESH_H + +#include "../Include/tesselator.h" + +typedef struct TESSmesh TESSmesh; +typedef struct TESSvertex TESSvertex; +typedef struct TESSface TESSface; +typedef struct TESShalfEdge TESShalfEdge; +typedef struct ActiveRegion ActiveRegion; + +/* The mesh structure is similar in spirit, notation, and operations +* to the "quad-edge" structure (see L. Guibas and J. Stolfi, Primitives +* for the manipulation of general subdivisions and the computation of +* Voronoi diagrams, ACM Transactions on Graphics, 4(2):74-123, April 1985). +* For a simplified description, see the course notes for CS348a, +* "Mathematical Foundations of Computer Graphics", available at the +* Stanford bookstore (and taught during the fall quarter). +* The implementation also borrows a tiny subset of the graph-based approach +* use in Mantyla's Geometric Work Bench (see M. Mantyla, An Introduction +* to Sold Modeling, Computer Science Press, Rockville, Maryland, 1988). +* +* The fundamental data structure is the "half-edge". Two half-edges +* go together to make an edge, but they point in opposite directions. +* Each half-edge has a pointer to its mate (the "symmetric" half-edge Sym), +* its origin vertex (Org), the face on its left side (Lface), and the +* adjacent half-edges in the CCW direction around the origin vertex +* (Onext) and around the left face (Lnext). There is also a "next" +* pointer for the global edge list (see below). +* +* The notation used for mesh navigation: +* Sym = the mate of a half-edge (same edge, but opposite direction) +* Onext = edge CCW around origin vertex (keep same origin) +* Dnext = edge CCW around destination vertex (keep same dest) +* Lnext = edge CCW around left face (dest becomes new origin) +* Rnext = edge CCW around right face (origin becomes new dest) +* +* "prev" means to substitute CW for CCW in the definitions above. +* +* The mesh keeps global lists of all vertices, faces, and edges, +* stored as doubly-linked circular lists with a dummy header node. +* The mesh stores pointers to these dummy headers (vHead, fHead, eHead). +* +* The circular edge list is special; since half-edges always occur +* in pairs (e and e->Sym), each half-edge stores a pointer in only +* one direction. Starting at eHead and following the e->next pointers +* will visit each *edge* once (ie. e or e->Sym, but not both). +* e->Sym stores a pointer in the opposite direction, thus it is +* always true that e->Sym->next->Sym->next == e. +* +* Each vertex has a pointer to next and previous vertices in the +* circular list, and a pointer to a half-edge with this vertex as +* the origin (NULL if this is the dummy header). There is also a +* field "data" for client data. +* +* Each face has a pointer to the next and previous faces in the +* circular list, and a pointer to a half-edge with this face as +* the left face (NULL if this is the dummy header). There is also +* a field "data" for client data. +* +* Note that what we call a "face" is really a loop; faces may consist +* of more than one loop (ie. not simply connected), but there is no +* record of this in the data structure. The mesh may consist of +* several disconnected regions, so it may not be possible to visit +* the entire mesh by starting at a half-edge and traversing the edge +* structure. +* +* The mesh does NOT support isolated vertices; a vertex is deleted along +* with its last edge. Similarly when two faces are merged, one of the +* faces is deleted (see tessMeshDelete below). For mesh operations, +* all face (loop) and vertex pointers must not be NULL. However, once +* mesh manipulation is finished, TESSmeshZapFace can be used to delete +* faces of the mesh, one at a time. All external faces can be "zapped" +* before the mesh is returned to the client; then a NULL face indicates +* a region which is not part of the output polygon. +*/ + +struct TESSvertex { + TESSvertex *next; /* next vertex (never NULL) */ + TESSvertex *prev; /* previous vertex (never NULL) */ + TESShalfEdge *anEdge; /* a half-edge with this origin */ + + /* Internal data (keep hidden) */ + TESSreal coords[3]; /* vertex location in 3D */ + TESSreal s, t; /* projection onto the sweep plane */ + int pqHandle; /* to allow deletion from priority queue */ + TESSindex n; /* to allow identify unique vertices */ + TESSindex idx; /* to allow map result to original verts */ +}; + +struct TESSface { + TESSface *next; /* next face (never NULL) */ + TESSface *prev; /* previous face (never NULL) */ + TESShalfEdge *anEdge; /* a half edge with this left face */ + + /* Internal data (keep hidden) */ + TESSface *trail; /* "stack" for conversion to strips */ + TESSindex n; /* to allow identiy unique faces */ + char marked; /* flag for conversion to strips */ + char inside; /* this face is in the polygon interior */ +}; + +struct TESShalfEdge { + TESShalfEdge *next; /* doubly-linked list (prev==Sym->next) */ + TESShalfEdge *Sym; /* same edge, opposite direction */ + TESShalfEdge *Onext; /* next edge CCW around origin */ + TESShalfEdge *Lnext; /* next edge CCW around left face */ + TESSvertex *Org; /* origin vertex (Overtex too long) */ + TESSface *Lface; /* left face */ + + /* Internal data (keep hidden) */ + ActiveRegion *activeRegion; /* a region with this upper edge (sweep.c) */ + int winding; /* change in winding number when crossing + from the right face to the left face */ + int mark; /* Used by the Edge Flip algorithm */ +}; + +#define Rface Sym->Lface +#define Dst Sym->Org + +#define Oprev Sym->Lnext +#define Lprev Onext->Sym +#define Dprev Lnext->Sym +#define Rprev Sym->Onext +#define Dnext Rprev->Sym /* 3 pointers */ +#define Rnext Oprev->Sym /* 3 pointers */ + +struct TESSmesh { + TESSvertex vHead; /* dummy header for vertex list */ + TESSface fHead; /* dummy header for face list */ + TESShalfEdge eHead; /* dummy header for edge list */ + TESShalfEdge eHeadSym; /* and its symmetric counterpart */ + + struct BucketAlloc* edgeBucket; + struct BucketAlloc* vertexBucket; + struct BucketAlloc* faceBucket; +}; + +/* The mesh operations below have three motivations: completeness, +* convenience, and efficiency. The basic mesh operations are MakeEdge, +* Splice, and Delete. All the other edge operations can be implemented +* in terms of these. The other operations are provided for convenience +* and/or efficiency. +* +* When a face is split or a vertex is added, they are inserted into the +* global list *before* the existing vertex or face (ie. e->Org or e->Lface). +* This makes it easier to process all vertices or faces in the global lists +* without worrying about processing the same data twice. As a convenience, +* when a face is split, the "inside" flag is copied from the old face. +* Other internal data (v->data, v->activeRegion, f->data, f->marked, +* f->trail, e->winding) is set to zero. +* +* ********************** Basic Edge Operations ************************** +* +* tessMeshMakeEdge( mesh ) creates one edge, two vertices, and a loop. +* The loop (face) consists of the two new half-edges. +* +* tessMeshSplice( eOrg, eDst ) is the basic operation for changing the +* mesh connectivity and topology. It changes the mesh so that +* eOrg->Onext <- OLD( eDst->Onext ) +* eDst->Onext <- OLD( eOrg->Onext ) +* where OLD(...) means the value before the meshSplice operation. +* +* This can have two effects on the vertex structure: +* - if eOrg->Org != eDst->Org, the two vertices are merged together +* - if eOrg->Org == eDst->Org, the origin is split into two vertices +* In both cases, eDst->Org is changed and eOrg->Org is untouched. +* +* Similarly (and independently) for the face structure, +* - if eOrg->Lface == eDst->Lface, one loop is split into two +* - if eOrg->Lface != eDst->Lface, two distinct loops are joined into one +* In both cases, eDst->Lface is changed and eOrg->Lface is unaffected. +* +* tessMeshDelete( eDel ) removes the edge eDel. There are several cases: +* if (eDel->Lface != eDel->Rface), we join two loops into one; the loop +* eDel->Lface is deleted. Otherwise, we are splitting one loop into two; +* the newly created loop will contain eDel->Dst. If the deletion of eDel +* would create isolated vertices, those are deleted as well. +* +* ********************** Other Edge Operations ************************** +* +* tessMeshAddEdgeVertex( eOrg ) creates a new edge eNew such that +* eNew == eOrg->Lnext, and eNew->Dst is a newly created vertex. +* eOrg and eNew will have the same left face. +* +* tessMeshSplitEdge( eOrg ) splits eOrg into two edges eOrg and eNew, +* such that eNew == eOrg->Lnext. The new vertex is eOrg->Dst == eNew->Org. +* eOrg and eNew will have the same left face. +* +* tessMeshConnect( eOrg, eDst ) creates a new edge from eOrg->Dst +* to eDst->Org, and returns the corresponding half-edge eNew. +* If eOrg->Lface == eDst->Lface, this splits one loop into two, +* and the newly created loop is eNew->Lface. Otherwise, two disjoint +* loops are merged into one, and the loop eDst->Lface is destroyed. +* +* ************************ Other Operations ***************************** +* +* tessMeshNewMesh() creates a new mesh with no edges, no vertices, +* and no loops (what we usually call a "face"). +* +* tessMeshUnion( mesh1, mesh2 ) forms the union of all structures in +* both meshes, and returns the new mesh (the old meshes are destroyed). +* +* tessMeshDeleteMesh( mesh ) will free all storage for any valid mesh. +* +* tessMeshZapFace( fZap ) destroys a face and removes it from the +* global face list. All edges of fZap will have a NULL pointer as their +* left face. Any edges which also have a NULL pointer as their right face +* are deleted entirely (along with any isolated vertices this produces). +* An entire mesh can be deleted by zapping its faces, one at a time, +* in any order. Zapped faces cannot be used in further mesh operations! +* +* tessMeshCheckMesh( mesh ) checks a mesh for self-consistency. +*/ + +TESShalfEdge *tessMeshMakeEdge( TESSmesh *mesh ); +int tessMeshSplice( TESSmesh *mesh, TESShalfEdge *eOrg, TESShalfEdge *eDst ); +int tessMeshDelete( TESSmesh *mesh, TESShalfEdge *eDel ); + +TESShalfEdge *tessMeshAddEdgeVertex( TESSmesh *mesh, TESShalfEdge *eOrg ); +TESShalfEdge *tessMeshSplitEdge( TESSmesh *mesh, TESShalfEdge *eOrg ); +TESShalfEdge *tessMeshConnect( TESSmesh *mesh, TESShalfEdge *eOrg, TESShalfEdge *eDst ); + +TESSmesh *tessMeshNewMesh( TESSalloc* alloc ); +TESSmesh *tessMeshUnion( TESSalloc* alloc, TESSmesh *mesh1, TESSmesh *mesh2 ); +int tessMeshMergeConvexFaces( TESSmesh *mesh, int maxVertsPerFace ); +void tessMeshDeleteMesh( TESSalloc* alloc, TESSmesh *mesh ); +void tessMeshZapFace( TESSmesh *mesh, TESSface *fZap ); + +void tessMeshFlipEdge( TESSmesh *mesh, TESShalfEdge *edge ); + +#ifdef NDEBUG +#define tessMeshCheckMesh( mesh ) +#else +void tessMeshCheckMesh( TESSmesh *mesh ); +#endif + +#endif diff --git a/submodules/LottieMeshSwift/libtess2/Sources/priorityq.c b/submodules/LottieMeshSwift/libtess2/Sources/priorityq.c new file mode 100755 index 0000000000..62a6654535 --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/priorityq.c @@ -0,0 +1,514 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +//#include "tesos.h" +#include +#include +#include "../Include/tesselator.h" +#include "priorityq.h" + + +#define INIT_SIZE 32 + +#define TRUE 1 +#define FALSE 0 + +#ifdef FOR_TRITE_TEST_PROGRAM +#define LEQ(x,y) (*pq->leq)(x,y) +#else +/* Violates modularity, but a little faster */ +#include "geom.h" +#define LEQ(x,y) VertLeq((TESSvertex *)x, (TESSvertex *)y) +#endif + + +/* Include all the code for the regular heap-based queue here. */ + +/* The basic operations are insertion of a new key (pqInsert), +* and examination/extraction of a key whose value is minimum +* (pqMinimum/pqExtractMin). Deletion is also allowed (pqDelete); +* for this purpose pqInsert returns a "handle" which is supplied +* as the argument. +* +* An initial heap may be created efficiently by calling pqInsert +* repeatedly, then calling pqInit. In any case pqInit must be called +* before any operations other than pqInsert are used. +* +* If the heap is empty, pqMinimum/pqExtractMin will return a NULL key. +* This may also be tested with pqIsEmpty. +*/ + + +/* Since we support deletion the data structure is a little more +* complicated than an ordinary heap. "nodes" is the heap itself; +* active nodes are stored in the range 1..pq->size. When the +* heap exceeds its allocated size (pq->max), its size doubles. +* The children of node i are nodes 2i and 2i+1. +* +* Each node stores an index into an array "handles". Each handle +* stores a key, plus a pointer back to the node which currently +* represents that key (ie. nodes[handles[i].node].handle == i). +*/ + + +#define pqHeapMinimum(pq) ((pq)->handles[(pq)->nodes[1].handle].key) +#define pqHeapIsEmpty(pq) ((pq)->size == 0) + + + +/* really pqHeapNewPriorityQHeap */ +PriorityQHeap *pqHeapNewPriorityQ( TESSalloc* alloc, int size, int (*leq)(PQkey key1, PQkey key2) ) +{ + PriorityQHeap *pq = (PriorityQHeap *)alloc->memalloc( alloc->userData, sizeof( PriorityQHeap )); + if (pq == NULL) return NULL; + + pq->size = 0; + pq->max = size; + pq->nodes = (PQnode *)alloc->memalloc( alloc->userData, (size + 1) * sizeof(pq->nodes[0]) ); + if (pq->nodes == NULL) { + alloc->memfree( alloc->userData, pq ); + return NULL; + } + + pq->handles = (PQhandleElem *)alloc->memalloc( alloc->userData, (size + 1) * sizeof(pq->handles[0]) ); + if (pq->handles == NULL) { + alloc->memfree( alloc->userData, pq->nodes ); + alloc->memfree( alloc->userData, pq ); + return NULL; + } + + pq->initialized = FALSE; + pq->freeList = 0; + pq->leq = leq; + + pq->nodes[1].handle = 1; /* so that Minimum() returns NULL */ + pq->handles[1].key = NULL; + return pq; +} + +/* really pqHeapDeletePriorityQHeap */ +void pqHeapDeletePriorityQ( TESSalloc* alloc, PriorityQHeap *pq ) +{ + alloc->memfree( alloc->userData, pq->handles ); + alloc->memfree( alloc->userData, pq->nodes ); + alloc->memfree( alloc->userData, pq ); +} + + +static void FloatDown( PriorityQHeap *pq, int curr ) +{ + PQnode *n = pq->nodes; + PQhandleElem *h = pq->handles; + PQhandle hCurr, hChild; + int child; + + hCurr = n[curr].handle; + for( ;; ) { + child = curr << 1; + if( child < pq->size && LEQ( h[n[child+1].handle].key, + h[n[child].handle].key )) { + ++child; + } + + assert(child <= pq->max); + + hChild = n[child].handle; + if( child > pq->size || LEQ( h[hCurr].key, h[hChild].key )) { + n[curr].handle = hCurr; + h[hCurr].node = curr; + break; + } + n[curr].handle = hChild; + h[hChild].node = curr; + curr = child; + } +} + + +static void FloatUp( PriorityQHeap *pq, int curr ) +{ + PQnode *n = pq->nodes; + PQhandleElem *h = pq->handles; + PQhandle hCurr, hParent; + int parent; + + hCurr = n[curr].handle; + for( ;; ) { + parent = curr >> 1; + hParent = n[parent].handle; + if( parent == 0 || LEQ( h[hParent].key, h[hCurr].key )) { + n[curr].handle = hCurr; + h[hCurr].node = curr; + break; + } + n[curr].handle = hParent; + h[hParent].node = curr; + curr = parent; + } +} + +/* really pqHeapInit */ +void pqHeapInit( PriorityQHeap *pq ) +{ + int i; + + /* This method of building a heap is O(n), rather than O(n lg n). */ + + for( i = pq->size; i >= 1; --i ) { + FloatDown( pq, i ); + } + pq->initialized = TRUE; +} + +/* really pqHeapInsert */ +/* returns INV_HANDLE iff out of memory */ +PQhandle pqHeapInsert( TESSalloc* alloc, PriorityQHeap *pq, PQkey keyNew ) +{ + int curr; + PQhandle free; + + curr = ++ pq->size; + if( (curr*2) > pq->max ) { + if (!alloc->memrealloc) + { + return INV_HANDLE; + } + else + { + PQnode *saveNodes= pq->nodes; + PQhandleElem *saveHandles= pq->handles; + + // If the heap overflows, double its size. + pq->max <<= 1; + pq->nodes = (PQnode *)alloc->memrealloc( alloc->userData, pq->nodes, + (size_t)((pq->max + 1) * sizeof( pq->nodes[0] ))); + if (pq->nodes == NULL) { + pq->nodes = saveNodes; // restore ptr to free upon return + return INV_HANDLE; + } + pq->handles = (PQhandleElem *)alloc->memrealloc( alloc->userData, pq->handles, + (size_t) ((pq->max + 1) * sizeof( pq->handles[0] ))); + if (pq->handles == NULL) { + pq->handles = saveHandles; // restore ptr to free upon return + return INV_HANDLE; + } + } + } + + if( pq->freeList == 0 ) { + free = curr; + } else { + free = pq->freeList; + pq->freeList = pq->handles[free].node; + } + + pq->nodes[curr].handle = free; + pq->handles[free].node = curr; + pq->handles[free].key = keyNew; + + if( pq->initialized ) { + FloatUp( pq, curr ); + } + assert(free != INV_HANDLE); + return free; +} + +/* really pqHeapExtractMin */ +PQkey pqHeapExtractMin( PriorityQHeap *pq ) +{ + PQnode *n = pq->nodes; + PQhandleElem *h = pq->handles; + PQhandle hMin = n[1].handle; + PQkey min = h[hMin].key; + + if( pq->size > 0 ) { + n[1].handle = n[pq->size].handle; + h[n[1].handle].node = 1; + + h[hMin].key = NULL; + h[hMin].node = pq->freeList; + pq->freeList = hMin; + + if( -- pq->size > 0 ) { + FloatDown( pq, 1 ); + } + } + return min; +} + +/* really pqHeapDelete */ +void pqHeapDelete( PriorityQHeap *pq, PQhandle hCurr ) +{ + PQnode *n = pq->nodes; + PQhandleElem *h = pq->handles; + int curr; + + assert( hCurr >= 1 && hCurr <= pq->max && h[hCurr].key != NULL ); + + curr = h[hCurr].node; + n[curr].handle = n[pq->size].handle; + h[n[curr].handle].node = curr; + + if( curr <= -- pq->size ) { + if( curr <= 1 || LEQ( h[n[curr>>1].handle].key, h[n[curr].handle].key )) { + FloatDown( pq, curr ); + } else { + FloatUp( pq, curr ); + } + } + h[hCurr].key = NULL; + h[hCurr].node = pq->freeList; + pq->freeList = hCurr; +} + + + +/* Now redefine all the function names to map to their "Sort" versions. */ + +/* really tessPqSortNewPriorityQ */ +PriorityQ *pqNewPriorityQ( TESSalloc* alloc, int size, int (*leq)(PQkey key1, PQkey key2) ) +{ + PriorityQ *pq = (PriorityQ *)alloc->memalloc( alloc->userData, sizeof( PriorityQ )); + if (pq == NULL) return NULL; + + pq->heap = pqHeapNewPriorityQ( alloc, size, leq ); + if (pq->heap == NULL) { + alloc->memfree( alloc->userData, pq ); + return NULL; + } + +// pq->keys = (PQkey *)memAlloc( INIT_SIZE * sizeof(pq->keys[0]) ); + pq->keys = (PQkey *)alloc->memalloc( alloc->userData, size * sizeof(pq->keys[0]) ); + if (pq->keys == NULL) { + pqHeapDeletePriorityQ( alloc, pq->heap ); + alloc->memfree( alloc->userData, pq ); + return NULL; + } + + pq->size = 0; + pq->max = size; //INIT_SIZE; + pq->initialized = FALSE; + pq->leq = leq; + + return pq; +} + +/* really tessPqSortDeletePriorityQ */ +void pqDeletePriorityQ( TESSalloc* alloc, PriorityQ *pq ) +{ + assert(pq != NULL); + if (pq->heap != NULL) pqHeapDeletePriorityQ( alloc, pq->heap ); + if (pq->order != NULL) alloc->memfree( alloc->userData, pq->order ); + if (pq->keys != NULL) alloc->memfree( alloc->userData, pq->keys ); + alloc->memfree( alloc->userData, pq ); +} + + +#define LT(x,y) (! LEQ(y,x)) +#define GT(x,y) (! LEQ(x,y)) +#define Swap(a,b) if(1){PQkey *tmp = *a; *a = *b; *b = tmp;}else + +/* really tessPqSortInit */ +int pqInit( TESSalloc* alloc, PriorityQ *pq ) +{ + PQkey **p, **r, **i, **j, *piv; + struct { PQkey **p, **r; } Stack[50], *top = Stack; + unsigned int seed = 2016473283; + + /* Create an array of indirect pointers to the keys, so that we + * the handles we have returned are still valid. + */ + /* + pq->order = (PQkey **)memAlloc( (size_t) + (pq->size * sizeof(pq->order[0])) ); + */ + pq->order = (PQkey **)alloc->memalloc( alloc->userData, + (size_t)((pq->size+1) * sizeof(pq->order[0])) ); + /* the previous line is a patch to compensate for the fact that IBM */ + /* machines return a null on a malloc of zero bytes (unlike SGI), */ + /* so we have to put in this defense to guard against a memory */ + /* fault four lines down. from fossum@austin.ibm.com. */ + if (pq->order == NULL) return 0; + + p = pq->order; + r = p + pq->size - 1; + for( piv = pq->keys, i = p; i <= r; ++piv, ++i ) { + *i = piv; + } + + /* Sort the indirect pointers in descending order, + * using randomized Quicksort + */ + top->p = p; top->r = r; ++top; + while( --top >= Stack ) { + p = top->p; + r = top->r; + while( r > p + 10 ) { + seed = seed * 1539415821 + 1; + i = p + seed % (r - p + 1); + piv = *i; + *i = *p; + *p = piv; + i = p - 1; + j = r + 1; + do { + do { ++i; } while( GT( **i, *piv )); + do { --j; } while( LT( **j, *piv )); + Swap( i, j ); + } while( i < j ); + Swap( i, j ); /* Undo last swap */ + if( i - p < r - j ) { + top->p = j+1; top->r = r; ++top; + r = i-1; + } else { + top->p = p; top->r = i-1; ++top; + p = j+1; + } + } + /* Insertion sort small lists */ + for( i = p+1; i <= r; ++i ) { + piv = *i; + for( j = i; j > p && LT( **(j-1), *piv ); --j ) { + *j = *(j-1); + } + *j = piv; + } + } + pq->max = pq->size; + pq->initialized = TRUE; + pqHeapInit( pq->heap ); /* always succeeds */ + +#ifndef NDEBUG + p = pq->order; + r = p + pq->size - 1; + for( i = p; i < r; ++i ) { + assert( LEQ( **(i+1), **i )); + } +#endif + + return 1; +} + +/* really tessPqSortInsert */ +/* returns INV_HANDLE iff out of memory */ +PQhandle pqInsert( TESSalloc* alloc, PriorityQ *pq, PQkey keyNew ) +{ + int curr; + + if( pq->initialized ) { + return pqHeapInsert( alloc, pq->heap, keyNew ); + } + curr = pq->size; + if( ++ pq->size >= pq->max ) { + if (!alloc->memrealloc) + { + return INV_HANDLE; + } + else + { + PQkey *saveKey= pq->keys; + // If the heap overflows, double its size. + pq->max <<= 1; + pq->keys = (PQkey *)alloc->memrealloc( alloc->userData, pq->keys, + (size_t)(pq->max * sizeof( pq->keys[0] ))); + if (pq->keys == NULL) { + pq->keys = saveKey; // restore ptr to free upon return + return INV_HANDLE; + } + } + } + assert(curr != INV_HANDLE); + pq->keys[curr] = keyNew; + + /* Negative handles index the sorted array. */ + return -(curr+1); +} + +/* really tessPqSortExtractMin */ +PQkey pqExtractMin( PriorityQ *pq ) +{ + PQkey sortMin, heapMin; + + if( pq->size == 0 ) { + return pqHeapExtractMin( pq->heap ); + } + sortMin = *(pq->order[pq->size-1]); + if( ! pqHeapIsEmpty( pq->heap )) { + heapMin = pqHeapMinimum( pq->heap ); + if( LEQ( heapMin, sortMin )) { + return pqHeapExtractMin( pq->heap ); + } + } + do { + -- pq->size; + } while( pq->size > 0 && *(pq->order[pq->size-1]) == NULL ); + return sortMin; +} + +/* really tessPqSortMinimum */ +PQkey pqMinimum( PriorityQ *pq ) +{ + PQkey sortMin, heapMin; + + if( pq->size == 0 ) { + return pqHeapMinimum( pq->heap ); + } + sortMin = *(pq->order[pq->size-1]); + if( ! pqHeapIsEmpty( pq->heap )) { + heapMin = pqHeapMinimum( pq->heap ); + if( LEQ( heapMin, sortMin )) { + return heapMin; + } + } + return sortMin; +} + +/* really tessPqSortIsEmpty */ +int pqIsEmpty( PriorityQ *pq ) +{ + return (pq->size == 0) && pqHeapIsEmpty( pq->heap ); +} + +/* really tessPqSortDelete */ +void pqDelete( PriorityQ *pq, PQhandle curr ) +{ + if( curr >= 0 ) { + pqHeapDelete( pq->heap, curr ); + return; + } + curr = -(curr+1); + assert( curr < pq->max && pq->keys[curr] != NULL ); + + pq->keys[curr] = NULL; + while( pq->size > 0 && *(pq->order[pq->size-1]) == NULL ) { + -- pq->size; + } +} diff --git a/submodules/LottieMeshSwift/libtess2/Sources/priorityq.h b/submodules/LottieMeshSwift/libtess2/Sources/priorityq.h new file mode 100755 index 0000000000..6ef1c05f56 --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/priorityq.h @@ -0,0 +1,104 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +#ifndef PRIORITYQ_H +#define PRIORITYQ_H + +/* The basic operations are insertion of a new key (pqInsert), +* and examination/extraction of a key whose value is minimum +* (pqMinimum/pqExtractMin). Deletion is also allowed (pqDelete); +* for this purpose pqInsert returns a "handle" which is supplied +* as the argument. +* +* An initial heap may be created efficiently by calling pqInsert +* repeatedly, then calling pqInit. In any case pqInit must be called +* before any operations other than pqInsert are used. +* +* If the heap is empty, pqMinimum/pqExtractMin will return a NULL key. +* This may also be tested with pqIsEmpty. +*/ + +/* Since we support deletion the data structure is a little more +* complicated than an ordinary heap. "nodes" is the heap itself; +* active nodes are stored in the range 1..pq->size. When the +* heap exceeds its allocated size (pq->max), its size doubles. +* The children of node i are nodes 2i and 2i+1. +* +* Each node stores an index into an array "handles". Each handle +* stores a key, plus a pointer back to the node which currently +* represents that key (ie. nodes[handles[i].node].handle == i). +*/ + +typedef void *PQkey; +typedef int PQhandle; +typedef struct PriorityQHeap PriorityQHeap; + +#define INV_HANDLE 0x0fffffff + +typedef struct { PQhandle handle; } PQnode; +typedef struct { PQkey key; PQhandle node; } PQhandleElem; + +struct PriorityQHeap { + + PQnode *nodes; + PQhandleElem *handles; + int size, max; + PQhandle freeList; + int initialized; + + int (*leq)(PQkey key1, PQkey key2); +}; + +typedef struct PriorityQ PriorityQ; + +struct PriorityQ { + PriorityQHeap *heap; + + PQkey *keys; + PQkey **order; + PQhandle size, max; + int initialized; + + int (*leq)(PQkey key1, PQkey key2); +}; + +PriorityQ *pqNewPriorityQ( TESSalloc* alloc, int size, int (*leq)(PQkey key1, PQkey key2) ); +void pqDeletePriorityQ( TESSalloc* alloc, PriorityQ *pq ); + +int pqInit( TESSalloc* alloc, PriorityQ *pq ); +PQhandle pqInsert( TESSalloc* alloc, PriorityQ *pq, PQkey key ); +PQkey pqExtractMin( PriorityQ *pq ); +void pqDelete( PriorityQ *pq, PQhandle handle ); + +PQkey pqMinimum( PriorityQ *pq ); +int pqIsEmpty( PriorityQ *pq ); + +#endif diff --git a/submodules/LottieMeshSwift/libtess2/Sources/sweep.c b/submodules/LottieMeshSwift/libtess2/Sources/sweep.c new file mode 100755 index 0000000000..32a56bf406 --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/sweep.c @@ -0,0 +1,1324 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +#include +#include +#include /* longjmp */ + +#include "mesh.h" +#include "geom.h" +#include "tess.h" +#include "dict.h" +#include "priorityq.h" +#include "bucketalloc.h" +#include "sweep.h" + +#define TRUE 1 +#define FALSE 0 + +#ifdef FOR_TRITE_TEST_PROGRAM +extern void DebugEvent( TESStesselator *tess ); +#else +#define DebugEvent( tess ) +#endif + +/* +* Invariants for the Edge Dictionary. +* - each pair of adjacent edges e2=Succ(e1) satisfies EdgeLeq(e1,e2) +* at any valid location of the sweep event +* - if EdgeLeq(e2,e1) as well (at any valid sweep event), then e1 and e2 +* share a common endpoint +* - for each e, e->Dst has been processed, but not e->Org +* - each edge e satisfies VertLeq(e->Dst,event) && VertLeq(event,e->Org) +* where "event" is the current sweep line event. +* - no edge e has zero length +* +* Invariants for the Mesh (the processed portion). +* - the portion of the mesh left of the sweep line is a planar graph, +* ie. there is *some* way to embed it in the plane +* - no processed edge has zero length +* - no two processed vertices have identical coordinates +* - each "inside" region is monotone, ie. can be broken into two chains +* of monotonically increasing vertices according to VertLeq(v1,v2) +* - a non-invariant: these chains may intersect (very slightly) +* +* Invariants for the Sweep. +* - if none of the edges incident to the event vertex have an activeRegion +* (ie. none of these edges are in the edge dictionary), then the vertex +* has only right-going edges. +* - if an edge is marked "fixUpperEdge" (it is a temporary edge introduced +* by ConnectRightVertex), then it is the only right-going edge from +* its associated vertex. (This says that these edges exist only +* when it is necessary.) +*/ + +#define MAX(x,y) ((x) >= (y) ? (x) : (y)) +#define MIN(x,y) ((x) <= (y) ? (x) : (y)) + +/* When we merge two edges into one, we need to compute the combined +* winding of the new edge. +*/ +#define AddWinding(eDst,eSrc) (eDst->winding += eSrc->winding, \ + eDst->Sym->winding += eSrc->Sym->winding) + +static void SweepEvent( TESStesselator *tess, TESSvertex *vEvent ); +static void WalkDirtyRegions( TESStesselator *tess, ActiveRegion *regUp ); +static int CheckForRightSplice( TESStesselator *tess, ActiveRegion *regUp ); + +static int EdgeLeq( TESStesselator *tess, ActiveRegion *reg1, ActiveRegion *reg2 ) +/* +* Both edges must be directed from right to left (this is the canonical +* direction for the upper edge of each region). +* +* The strategy is to evaluate a "t" value for each edge at the +* current sweep line position, given by tess->event. The calculations +* are designed to be very stable, but of course they are not perfect. +* +* Special case: if both edge destinations are at the sweep event, +* we sort the edges by slope (they would otherwise compare equally). +*/ +{ + TESSvertex *event = tess->event; + TESShalfEdge *e1, *e2; + TESSreal t1, t2; + + e1 = reg1->eUp; + e2 = reg2->eUp; + + if( e1->Dst == event ) { + if( e2->Dst == event ) { + /* Two edges right of the sweep line which meet at the sweep event. + * Sort them by slope. + */ + if( VertLeq( e1->Org, e2->Org )) { + return EdgeSign( e2->Dst, e1->Org, e2->Org ) <= 0; + } + return EdgeSign( e1->Dst, e2->Org, e1->Org ) >= 0; + } + return EdgeSign( e2->Dst, event, e2->Org ) <= 0; + } + if( e2->Dst == event ) { + return EdgeSign( e1->Dst, event, e1->Org ) >= 0; + } + + /* General case - compute signed distance *from* e1, e2 to event */ + t1 = EdgeEval( e1->Dst, event, e1->Org ); + t2 = EdgeEval( e2->Dst, event, e2->Org ); + return (t1 >= t2); +} + + +static void DeleteRegion( TESStesselator *tess, ActiveRegion *reg ) +{ + if( reg->fixUpperEdge ) { + /* It was created with zero winding number, so it better be + * deleted with zero winding number (ie. it better not get merged + * with a real edge). + */ + assert( reg->eUp->winding == 0 ); + } + reg->eUp->activeRegion = NULL; + dictDelete( tess->dict, reg->nodeUp ); + bucketFree( tess->regionPool, reg ); +} + + +static int FixUpperEdge( TESStesselator *tess, ActiveRegion *reg, TESShalfEdge *newEdge ) +/* +* Replace an upper edge which needs fixing (see ConnectRightVertex). +*/ +{ + assert( reg->fixUpperEdge ); + if ( !tessMeshDelete( tess->mesh, reg->eUp ) ) return 0; + reg->fixUpperEdge = FALSE; + reg->eUp = newEdge; + newEdge->activeRegion = reg; + + return 1; +} + +static ActiveRegion *TopLeftRegion( TESStesselator *tess, ActiveRegion *reg ) +{ + TESSvertex *org = reg->eUp->Org; + TESShalfEdge *e; + + /* Find the region above the uppermost edge with the same origin */ + do { + reg = RegionAbove( reg ); + } while( reg->eUp->Org == org ); + + /* If the edge above was a temporary edge introduced by ConnectRightVertex, + * now is the time to fix it. + */ + if( reg->fixUpperEdge ) { + e = tessMeshConnect( tess->mesh, RegionBelow(reg)->eUp->Sym, reg->eUp->Lnext ); + if (e == NULL) return NULL; + if ( !FixUpperEdge( tess, reg, e ) ) return NULL; + reg = RegionAbove( reg ); + } + return reg; +} + +static ActiveRegion *TopRightRegion( ActiveRegion *reg ) +{ + TESSvertex *dst = reg->eUp->Dst; + + /* Find the region above the uppermost edge with the same destination */ + do { + reg = RegionAbove( reg ); + } while( reg->eUp->Dst == dst ); + return reg; +} + +static ActiveRegion *AddRegionBelow( TESStesselator *tess, + ActiveRegion *regAbove, + TESShalfEdge *eNewUp ) +/* +* Add a new active region to the sweep line, *somewhere* below "regAbove" +* (according to where the new edge belongs in the sweep-line dictionary). +* The upper edge of the new region will be "eNewUp". +* Winding number and "inside" flag are not updated. +*/ +{ + ActiveRegion *regNew = (ActiveRegion *)bucketAlloc( tess->regionPool ); + if (regNew == NULL) longjmp(tess->env,1); + + regNew->eUp = eNewUp; + regNew->nodeUp = dictInsertBefore( tess->dict, regAbove->nodeUp, regNew ); + if (regNew->nodeUp == NULL) longjmp(tess->env,1); + regNew->fixUpperEdge = FALSE; + regNew->sentinel = FALSE; + regNew->dirty = FALSE; + + eNewUp->activeRegion = regNew; + return regNew; +} + +static int IsWindingInside( TESStesselator *tess, int n ) +{ + switch( tess->windingRule ) { + case TESS_WINDING_ODD: + return (n & 1); + case TESS_WINDING_NONZERO: + return (n != 0); + case TESS_WINDING_POSITIVE: + return (n > 0); + case TESS_WINDING_NEGATIVE: + return (n < 0); + case TESS_WINDING_ABS_GEQ_TWO: + return (n >= 2) || (n <= -2); + } + /*LINTED*/ + assert( FALSE ); + /*NOTREACHED*/ + + return( FALSE ); +} + + +static void ComputeWinding( TESStesselator *tess, ActiveRegion *reg ) +{ + reg->windingNumber = RegionAbove(reg)->windingNumber + reg->eUp->winding; + reg->inside = IsWindingInside( tess, reg->windingNumber ); +} + + +static void FinishRegion( TESStesselator *tess, ActiveRegion *reg ) +/* +* Delete a region from the sweep line. This happens when the upper +* and lower chains of a region meet (at a vertex on the sweep line). +* The "inside" flag is copied to the appropriate mesh face (we could +* not do this before -- since the structure of the mesh is always +* changing, this face may not have even existed until now). +*/ +{ + TESShalfEdge *e = reg->eUp; + TESSface *f = e->Lface; + + f->inside = reg->inside; + f->anEdge = e; /* optimization for tessMeshTessellateMonoRegion() */ + DeleteRegion( tess, reg ); +} + + +static TESShalfEdge *FinishLeftRegions( TESStesselator *tess, + ActiveRegion *regFirst, ActiveRegion *regLast ) +/* +* We are given a vertex with one or more left-going edges. All affected +* edges should be in the edge dictionary. Starting at regFirst->eUp, +* we walk down deleting all regions where both edges have the same +* origin vOrg. At the same time we copy the "inside" flag from the +* active region to the face, since at this point each face will belong +* to at most one region (this was not necessarily true until this point +* in the sweep). The walk stops at the region above regLast; if regLast +* is NULL we walk as far as possible. At the same time we relink the +* mesh if necessary, so that the ordering of edges around vOrg is the +* same as in the dictionary. +*/ +{ + ActiveRegion *reg, *regPrev; + TESShalfEdge *e, *ePrev; + + regPrev = regFirst; + ePrev = regFirst->eUp; + while( regPrev != regLast ) { + regPrev->fixUpperEdge = FALSE; /* placement was OK */ + reg = RegionBelow( regPrev ); + e = reg->eUp; + if( e->Org != ePrev->Org ) { + if( ! reg->fixUpperEdge ) { + /* Remove the last left-going edge. Even though there are no further + * edges in the dictionary with this origin, there may be further + * such edges in the mesh (if we are adding left edges to a vertex + * that has already been processed). Thus it is important to call + * FinishRegion rather than just DeleteRegion. + */ + FinishRegion( tess, regPrev ); + break; + } + /* If the edge below was a temporary edge introduced by + * ConnectRightVertex, now is the time to fix it. + */ + e = tessMeshConnect( tess->mesh, ePrev->Lprev, e->Sym ); + if (e == NULL) longjmp(tess->env,1); + if ( !FixUpperEdge( tess, reg, e ) ) longjmp(tess->env,1); + } + + /* Relink edges so that ePrev->Onext == e */ + if( ePrev->Onext != e ) { + if ( !tessMeshSplice( tess->mesh, e->Oprev, e ) ) longjmp(tess->env,1); + if ( !tessMeshSplice( tess->mesh, ePrev, e ) ) longjmp(tess->env,1); + } + FinishRegion( tess, regPrev ); /* may change reg->eUp */ + ePrev = reg->eUp; + regPrev = reg; + } + return ePrev; +} + + +static void AddRightEdges( TESStesselator *tess, ActiveRegion *regUp, + TESShalfEdge *eFirst, TESShalfEdge *eLast, TESShalfEdge *eTopLeft, + int cleanUp ) +/* +* Purpose: insert right-going edges into the edge dictionary, and update +* winding numbers and mesh connectivity appropriately. All right-going +* edges share a common origin vOrg. Edges are inserted CCW starting at +* eFirst; the last edge inserted is eLast->Oprev. If vOrg has any +* left-going edges already processed, then eTopLeft must be the edge +* such that an imaginary upward vertical segment from vOrg would be +* contained between eTopLeft->Oprev and eTopLeft; otherwise eTopLeft +* should be NULL. +*/ +{ + ActiveRegion *reg, *regPrev; + TESShalfEdge *e, *ePrev; + int firstTime = TRUE; + + /* Insert the new right-going edges in the dictionary */ + e = eFirst; + do { + assert( VertLeq( e->Org, e->Dst )); + AddRegionBelow( tess, regUp, e->Sym ); + e = e->Onext; + } while ( e != eLast ); + + /* Walk *all* right-going edges from e->Org, in the dictionary order, + * updating the winding numbers of each region, and re-linking the mesh + * edges to match the dictionary ordering (if necessary). + */ + if( eTopLeft == NULL ) { + eTopLeft = RegionBelow( regUp )->eUp->Rprev; + } + regPrev = regUp; + ePrev = eTopLeft; + for( ;; ) { + reg = RegionBelow( regPrev ); + e = reg->eUp->Sym; + if( e->Org != ePrev->Org ) break; + + if( e->Onext != ePrev ) { + /* Unlink e from its current position, and relink below ePrev */ + if ( !tessMeshSplice( tess->mesh, e->Oprev, e ) ) longjmp(tess->env,1); + if ( !tessMeshSplice( tess->mesh, ePrev->Oprev, e ) ) longjmp(tess->env,1); + } + /* Compute the winding number and "inside" flag for the new regions */ + reg->windingNumber = regPrev->windingNumber - e->winding; + reg->inside = IsWindingInside( tess, reg->windingNumber ); + + /* Check for two outgoing edges with same slope -- process these + * before any intersection tests (see example in tessComputeInterior). + */ + regPrev->dirty = TRUE; + if( ! firstTime && CheckForRightSplice( tess, regPrev )) { + AddWinding( e, ePrev ); + DeleteRegion( tess, regPrev ); + if ( !tessMeshDelete( tess->mesh, ePrev ) ) longjmp(tess->env,1); + } + firstTime = FALSE; + regPrev = reg; + ePrev = e; + } + regPrev->dirty = TRUE; + assert( regPrev->windingNumber - e->winding == reg->windingNumber ); + + if( cleanUp ) { + /* Check for intersections between newly adjacent edges. */ + WalkDirtyRegions( tess, regPrev ); + } +} + + +static void SpliceMergeVertices( TESStesselator *tess, TESShalfEdge *e1, + TESShalfEdge *e2 ) +/* +* Two vertices with idential coordinates are combined into one. +* e1->Org is kept, while e2->Org is discarded. +*/ +{ + if ( !tessMeshSplice( tess->mesh, e1, e2 ) ) longjmp(tess->env,1); +} + +static void VertexWeights( TESSvertex *isect, TESSvertex *org, TESSvertex *dst, + TESSreal *weights ) +/* +* Find some weights which describe how the intersection vertex is +* a linear combination of "org" and "dest". Each of the two edges +* which generated "isect" is allocated 50% of the weight; each edge +* splits the weight between its org and dst according to the +* relative distance to "isect". +*/ +{ + TESSreal t1 = VertL1dist( org, isect ); + TESSreal t2 = VertL1dist( dst, isect ); + + weights[0] = (TESSreal)0.5 * t2 / (t1 + t2); + weights[1] = (TESSreal)0.5 * t1 / (t1 + t2); + isect->coords[0] += weights[0]*org->coords[0] + weights[1]*dst->coords[0]; + isect->coords[1] += weights[0]*org->coords[1] + weights[1]*dst->coords[1]; + isect->coords[2] += weights[0]*org->coords[2] + weights[1]*dst->coords[2]; +} + + +static void GetIntersectData( TESStesselator *tess, TESSvertex *isect, + TESSvertex *orgUp, TESSvertex *dstUp, + TESSvertex *orgLo, TESSvertex *dstLo ) + /* + * We've computed a new intersection point, now we need a "data" pointer + * from the user so that we can refer to this new vertex in the + * rendering callbacks. + */ +{ + TESSreal weights[4]; + TESS_NOTUSED( tess ); + + isect->coords[0] = isect->coords[1] = isect->coords[2] = 0; + isect->idx = TESS_UNDEF; + VertexWeights( isect, orgUp, dstUp, &weights[0] ); + VertexWeights( isect, orgLo, dstLo, &weights[2] ); +} + +static int CheckForRightSplice( TESStesselator *tess, ActiveRegion *regUp ) +/* +* Check the upper and lower edge of "regUp", to make sure that the +* eUp->Org is above eLo, or eLo->Org is below eUp (depending on which +* origin is leftmost). +* +* The main purpose is to splice right-going edges with the same +* dest vertex and nearly identical slopes (ie. we can't distinguish +* the slopes numerically). However the splicing can also help us +* to recover from numerical errors. For example, suppose at one +* point we checked eUp and eLo, and decided that eUp->Org is barely +* above eLo. Then later, we split eLo into two edges (eg. from +* a splice operation like this one). This can change the result of +* our test so that now eUp->Org is incident to eLo, or barely below it. +* We must correct this condition to maintain the dictionary invariants. +* +* One possibility is to check these edges for intersection again +* (ie. CheckForIntersect). This is what we do if possible. However +* CheckForIntersect requires that tess->event lies between eUp and eLo, +* so that it has something to fall back on when the intersection +* calculation gives us an unusable answer. So, for those cases where +* we can't check for intersection, this routine fixes the problem +* by just splicing the offending vertex into the other edge. +* This is a guaranteed solution, no matter how degenerate things get. +* Basically this is a combinatorial solution to a numerical problem. +*/ +{ + ActiveRegion *regLo = RegionBelow(regUp); + TESShalfEdge *eUp = regUp->eUp; + TESShalfEdge *eLo = regLo->eUp; + + if( VertLeq( eUp->Org, eLo->Org )) { + if( EdgeSign( eLo->Dst, eUp->Org, eLo->Org ) > 0 ) return FALSE; + + /* eUp->Org appears to be below eLo */ + if( ! VertEq( eUp->Org, eLo->Org )) { + /* Splice eUp->Org into eLo */ + if ( tessMeshSplitEdge( tess->mesh, eLo->Sym ) == NULL) longjmp(tess->env,1); + if ( !tessMeshSplice( tess->mesh, eUp, eLo->Oprev ) ) longjmp(tess->env,1); + regUp->dirty = regLo->dirty = TRUE; + + } else if( eUp->Org != eLo->Org ) { + /* merge the two vertices, discarding eUp->Org */ + pqDelete( tess->pq, eUp->Org->pqHandle ); + SpliceMergeVertices( tess, eLo->Oprev, eUp ); + } + } else { + if( EdgeSign( eUp->Dst, eLo->Org, eUp->Org ) <= 0 ) return FALSE; + + /* eLo->Org appears to be above eUp, so splice eLo->Org into eUp */ + RegionAbove(regUp)->dirty = regUp->dirty = TRUE; + if (tessMeshSplitEdge( tess->mesh, eUp->Sym ) == NULL) longjmp(tess->env,1); + if ( !tessMeshSplice( tess->mesh, eLo->Oprev, eUp ) ) longjmp(tess->env,1); + } + return TRUE; +} + +static int CheckForLeftSplice( TESStesselator *tess, ActiveRegion *regUp ) +/* +* Check the upper and lower edge of "regUp", to make sure that the +* eUp->Dst is above eLo, or eLo->Dst is below eUp (depending on which +* destination is rightmost). +* +* Theoretically, this should always be true. However, splitting an edge +* into two pieces can change the results of previous tests. For example, +* suppose at one point we checked eUp and eLo, and decided that eUp->Dst +* is barely above eLo. Then later, we split eLo into two edges (eg. from +* a splice operation like this one). This can change the result of +* the test so that now eUp->Dst is incident to eLo, or barely below it. +* We must correct this condition to maintain the dictionary invariants +* (otherwise new edges might get inserted in the wrong place in the +* dictionary, and bad stuff will happen). +* +* We fix the problem by just splicing the offending vertex into the +* other edge. +*/ +{ + ActiveRegion *regLo = RegionBelow(regUp); + TESShalfEdge *eUp = regUp->eUp; + TESShalfEdge *eLo = regLo->eUp; + TESShalfEdge *e; + + assert( ! VertEq( eUp->Dst, eLo->Dst )); + + if( VertLeq( eUp->Dst, eLo->Dst )) { + if( EdgeSign( eUp->Dst, eLo->Dst, eUp->Org ) < 0 ) return FALSE; + + /* eLo->Dst is above eUp, so splice eLo->Dst into eUp */ + RegionAbove(regUp)->dirty = regUp->dirty = TRUE; + e = tessMeshSplitEdge( tess->mesh, eUp ); + if (e == NULL) longjmp(tess->env,1); + if ( !tessMeshSplice( tess->mesh, eLo->Sym, e ) ) longjmp(tess->env,1); + e->Lface->inside = regUp->inside; + } else { + if( EdgeSign( eLo->Dst, eUp->Dst, eLo->Org ) > 0 ) return FALSE; + + /* eUp->Dst is below eLo, so splice eUp->Dst into eLo */ + regUp->dirty = regLo->dirty = TRUE; + e = tessMeshSplitEdge( tess->mesh, eLo ); + if (e == NULL) longjmp(tess->env,1); + if ( !tessMeshSplice( tess->mesh, eUp->Lnext, eLo->Sym ) ) longjmp(tess->env,1); + e->Rface->inside = regUp->inside; + } + return TRUE; +} + + +static int CheckForIntersect( TESStesselator *tess, ActiveRegion *regUp ) +/* +* Check the upper and lower edges of the given region to see if +* they intersect. If so, create the intersection and add it +* to the data structures. +* +* Returns TRUE if adding the new intersection resulted in a recursive +* call to AddRightEdges(); in this case all "dirty" regions have been +* checked for intersections, and possibly regUp has been deleted. +*/ +{ + ActiveRegion *regLo = RegionBelow(regUp); + TESShalfEdge *eUp = regUp->eUp; + TESShalfEdge *eLo = regLo->eUp; + TESSvertex *orgUp = eUp->Org; + TESSvertex *orgLo = eLo->Org; + TESSvertex *dstUp = eUp->Dst; + TESSvertex *dstLo = eLo->Dst; + TESSreal tMinUp, tMaxLo; + TESSvertex isect, *orgMin; + TESShalfEdge *e; + + assert( ! VertEq( dstLo, dstUp )); + assert( EdgeSign( dstUp, tess->event, orgUp ) <= 0 ); + assert( EdgeSign( dstLo, tess->event, orgLo ) >= 0 ); + assert( orgUp != tess->event && orgLo != tess->event ); + assert( ! regUp->fixUpperEdge && ! regLo->fixUpperEdge ); + + if( orgUp == orgLo ) return FALSE; /* right endpoints are the same */ + + tMinUp = MIN( orgUp->t, dstUp->t ); + tMaxLo = MAX( orgLo->t, dstLo->t ); + if( tMinUp > tMaxLo ) return FALSE; /* t ranges do not overlap */ + + if( VertLeq( orgUp, orgLo )) { + if( EdgeSign( dstLo, orgUp, orgLo ) > 0 ) return FALSE; + } else { + if( EdgeSign( dstUp, orgLo, orgUp ) < 0 ) return FALSE; + } + + /* At this point the edges intersect, at least marginally */ + DebugEvent( tess ); + + tesedgeIntersect( dstUp, orgUp, dstLo, orgLo, &isect ); + /* The following properties are guaranteed: */ + assert( MIN( orgUp->t, dstUp->t ) <= isect.t ); + assert( isect.t <= MAX( orgLo->t, dstLo->t )); + assert( MIN( dstLo->s, dstUp->s ) <= isect.s ); + assert( isect.s <= MAX( orgLo->s, orgUp->s )); + + if( VertLeq( &isect, tess->event )) { + /* The intersection point lies slightly to the left of the sweep line, + * so move it until it''s slightly to the right of the sweep line. + * (If we had perfect numerical precision, this would never happen + * in the first place). The easiest and safest thing to do is + * replace the intersection by tess->event. + */ + isect.s = tess->event->s; + isect.t = tess->event->t; + } + /* Similarly, if the computed intersection lies to the right of the + * rightmost origin (which should rarely happen), it can cause + * unbelievable inefficiency on sufficiently degenerate inputs. + * (If you have the test program, try running test54.d with the + * "X zoom" option turned on). + */ + orgMin = VertLeq( orgUp, orgLo ) ? orgUp : orgLo; + if( VertLeq( orgMin, &isect )) { + isect.s = orgMin->s; + isect.t = orgMin->t; + } + + if( VertEq( &isect, orgUp ) || VertEq( &isect, orgLo )) { + /* Easy case -- intersection at one of the right endpoints */ + (void) CheckForRightSplice( tess, regUp ); + return FALSE; + } + + if( (! VertEq( dstUp, tess->event ) + && EdgeSign( dstUp, tess->event, &isect ) >= 0) + || (! VertEq( dstLo, tess->event ) + && EdgeSign( dstLo, tess->event, &isect ) <= 0 )) + { + /* Very unusual -- the new upper or lower edge would pass on the + * wrong side of the sweep event, or through it. This can happen + * due to very small numerical errors in the intersection calculation. + */ + if( dstLo == tess->event ) { + /* Splice dstLo into eUp, and process the new region(s) */ + if (tessMeshSplitEdge( tess->mesh, eUp->Sym ) == NULL) longjmp(tess->env,1); + if ( !tessMeshSplice( tess->mesh, eLo->Sym, eUp ) ) longjmp(tess->env,1); + regUp = TopLeftRegion( tess, regUp ); + if (regUp == NULL) longjmp(tess->env,1); + eUp = RegionBelow(regUp)->eUp; + FinishLeftRegions( tess, RegionBelow(regUp), regLo ); + AddRightEdges( tess, regUp, eUp->Oprev, eUp, eUp, TRUE ); + return TRUE; + } + if( dstUp == tess->event ) { + /* Splice dstUp into eLo, and process the new region(s) */ + if (tessMeshSplitEdge( tess->mesh, eLo->Sym ) == NULL) longjmp(tess->env,1); + if ( !tessMeshSplice( tess->mesh, eUp->Lnext, eLo->Oprev ) ) longjmp(tess->env,1); + regLo = regUp; + regUp = TopRightRegion( regUp ); + e = RegionBelow(regUp)->eUp->Rprev; + regLo->eUp = eLo->Oprev; + eLo = FinishLeftRegions( tess, regLo, NULL ); + AddRightEdges( tess, regUp, eLo->Onext, eUp->Rprev, e, TRUE ); + return TRUE; + } + /* Special case: called from ConnectRightVertex. If either + * edge passes on the wrong side of tess->event, split it + * (and wait for ConnectRightVertex to splice it appropriately). + */ + if( EdgeSign( dstUp, tess->event, &isect ) >= 0 ) { + RegionAbove(regUp)->dirty = regUp->dirty = TRUE; + if (tessMeshSplitEdge( tess->mesh, eUp->Sym ) == NULL) longjmp(tess->env,1); + eUp->Org->s = tess->event->s; + eUp->Org->t = tess->event->t; + } + if( EdgeSign( dstLo, tess->event, &isect ) <= 0 ) { + regUp->dirty = regLo->dirty = TRUE; + if (tessMeshSplitEdge( tess->mesh, eLo->Sym ) == NULL) longjmp(tess->env,1); + eLo->Org->s = tess->event->s; + eLo->Org->t = tess->event->t; + } + /* leave the rest for ConnectRightVertex */ + return FALSE; + } + + /* General case -- split both edges, splice into new vertex. + * When we do the splice operation, the order of the arguments is + * arbitrary as far as correctness goes. However, when the operation + * creates a new face, the work done is proportional to the size of + * the new face. We expect the faces in the processed part of + * the mesh (ie. eUp->Lface) to be smaller than the faces in the + * unprocessed original contours (which will be eLo->Oprev->Lface). + */ + if (tessMeshSplitEdge( tess->mesh, eUp->Sym ) == NULL) longjmp(tess->env,1); + if (tessMeshSplitEdge( tess->mesh, eLo->Sym ) == NULL) longjmp(tess->env,1); + if ( !tessMeshSplice( tess->mesh, eLo->Oprev, eUp ) ) longjmp(tess->env,1); + eUp->Org->s = isect.s; + eUp->Org->t = isect.t; + eUp->Org->pqHandle = pqInsert( &tess->alloc, tess->pq, eUp->Org ); + if (eUp->Org->pqHandle == INV_HANDLE) { + pqDeletePriorityQ( &tess->alloc, tess->pq ); + tess->pq = NULL; + longjmp(tess->env,1); + } + GetIntersectData( tess, eUp->Org, orgUp, dstUp, orgLo, dstLo ); + RegionAbove(regUp)->dirty = regUp->dirty = regLo->dirty = TRUE; + return FALSE; +} + +static void WalkDirtyRegions( TESStesselator *tess, ActiveRegion *regUp ) +/* +* When the upper or lower edge of any region changes, the region is +* marked "dirty". This routine walks through all the dirty regions +* and makes sure that the dictionary invariants are satisfied +* (see the comments at the beginning of this file). Of course +* new dirty regions can be created as we make changes to restore +* the invariants. +*/ +{ + ActiveRegion *regLo = RegionBelow(regUp); + TESShalfEdge *eUp, *eLo; + + for( ;; ) { + /* Find the lowest dirty region (we walk from the bottom up). */ + while( regLo->dirty ) { + regUp = regLo; + regLo = RegionBelow(regLo); + } + if( ! regUp->dirty ) { + regLo = regUp; + regUp = RegionAbove( regUp ); + if( regUp == NULL || ! regUp->dirty ) { + /* We've walked all the dirty regions */ + return; + } + } + regUp->dirty = FALSE; + eUp = regUp->eUp; + eLo = regLo->eUp; + + if( eUp->Dst != eLo->Dst ) { + /* Check that the edge ordering is obeyed at the Dst vertices. */ + if( CheckForLeftSplice( tess, regUp )) { + + /* If the upper or lower edge was marked fixUpperEdge, then + * we no longer need it (since these edges are needed only for + * vertices which otherwise have no right-going edges). + */ + if( regLo->fixUpperEdge ) { + DeleteRegion( tess, regLo ); + if ( !tessMeshDelete( tess->mesh, eLo ) ) longjmp(tess->env,1); + regLo = RegionBelow( regUp ); + eLo = regLo->eUp; + } else if( regUp->fixUpperEdge ) { + DeleteRegion( tess, regUp ); + if ( !tessMeshDelete( tess->mesh, eUp ) ) longjmp(tess->env,1); + regUp = RegionAbove( regLo ); + eUp = regUp->eUp; + } + } + } + if( eUp->Org != eLo->Org ) { + if( eUp->Dst != eLo->Dst + && ! regUp->fixUpperEdge && ! regLo->fixUpperEdge + && (eUp->Dst == tess->event || eLo->Dst == tess->event) ) + { + /* When all else fails in CheckForIntersect(), it uses tess->event + * as the intersection location. To make this possible, it requires + * that tess->event lie between the upper and lower edges, and also + * that neither of these is marked fixUpperEdge (since in the worst + * case it might splice one of these edges into tess->event, and + * violate the invariant that fixable edges are the only right-going + * edge from their associated vertex). + */ + if( CheckForIntersect( tess, regUp )) { + /* WalkDirtyRegions() was called recursively; we're done */ + return; + } + } else { + /* Even though we can't use CheckForIntersect(), the Org vertices + * may violate the dictionary edge ordering. Check and correct this. + */ + (void) CheckForRightSplice( tess, regUp ); + } + } + if( eUp->Org == eLo->Org && eUp->Dst == eLo->Dst ) { + /* A degenerate loop consisting of only two edges -- delete it. */ + AddWinding( eLo, eUp ); + DeleteRegion( tess, regUp ); + if ( !tessMeshDelete( tess->mesh, eUp ) ) longjmp(tess->env,1); + regUp = RegionAbove( regLo ); + } + } +} + + +static void ConnectRightVertex( TESStesselator *tess, ActiveRegion *regUp, + TESShalfEdge *eBottomLeft ) +/* +* Purpose: connect a "right" vertex vEvent (one where all edges go left) +* to the unprocessed portion of the mesh. Since there are no right-going +* edges, two regions (one above vEvent and one below) are being merged +* into one. "regUp" is the upper of these two regions. +* +* There are two reasons for doing this (adding a right-going edge): +* - if the two regions being merged are "inside", we must add an edge +* to keep them separated (the combined region would not be monotone). +* - in any case, we must leave some record of vEvent in the dictionary, +* so that we can merge vEvent with features that we have not seen yet. +* For example, maybe there is a vertical edge which passes just to +* the right of vEvent; we would like to splice vEvent into this edge. +* +* However, we don't want to connect vEvent to just any vertex. We don''t +* want the new edge to cross any other edges; otherwise we will create +* intersection vertices even when the input data had no self-intersections. +* (This is a bad thing; if the user's input data has no intersections, +* we don't want to generate any false intersections ourselves.) +* +* Our eventual goal is to connect vEvent to the leftmost unprocessed +* vertex of the combined region (the union of regUp and regLo). +* But because of unseen vertices with all right-going edges, and also +* new vertices which may be created by edge intersections, we don''t +* know where that leftmost unprocessed vertex is. In the meantime, we +* connect vEvent to the closest vertex of either chain, and mark the region +* as "fixUpperEdge". This flag says to delete and reconnect this edge +* to the next processed vertex on the boundary of the combined region. +* Quite possibly the vertex we connected to will turn out to be the +* closest one, in which case we won''t need to make any changes. +*/ +{ + TESShalfEdge *eNew; + TESShalfEdge *eTopLeft = eBottomLeft->Onext; + ActiveRegion *regLo = RegionBelow(regUp); + TESShalfEdge *eUp = regUp->eUp; + TESShalfEdge *eLo = regLo->eUp; + int degenerate = FALSE; + + if( eUp->Dst != eLo->Dst ) { + (void) CheckForIntersect( tess, regUp ); + } + + /* Possible new degeneracies: upper or lower edge of regUp may pass + * through vEvent, or may coincide with new intersection vertex + */ + if( VertEq( eUp->Org, tess->event )) { + if ( !tessMeshSplice( tess->mesh, eTopLeft->Oprev, eUp ) ) longjmp(tess->env,1); + regUp = TopLeftRegion( tess, regUp ); + if (regUp == NULL) longjmp(tess->env,1); + eTopLeft = RegionBelow( regUp )->eUp; + FinishLeftRegions( tess, RegionBelow(regUp), regLo ); + degenerate = TRUE; + } + if( VertEq( eLo->Org, tess->event )) { + if ( !tessMeshSplice( tess->mesh, eBottomLeft, eLo->Oprev ) ) longjmp(tess->env,1); + eBottomLeft = FinishLeftRegions( tess, regLo, NULL ); + degenerate = TRUE; + } + if( degenerate ) { + AddRightEdges( tess, regUp, eBottomLeft->Onext, eTopLeft, eTopLeft, TRUE ); + return; + } + + /* Non-degenerate situation -- need to add a temporary, fixable edge. + * Connect to the closer of eLo->Org, eUp->Org. + */ + if( VertLeq( eLo->Org, eUp->Org )) { + eNew = eLo->Oprev; + } else { + eNew = eUp; + } + eNew = tessMeshConnect( tess->mesh, eBottomLeft->Lprev, eNew ); + if (eNew == NULL) longjmp(tess->env,1); + + /* Prevent cleanup, otherwise eNew might disappear before we've even + * had a chance to mark it as a temporary edge. + */ + AddRightEdges( tess, regUp, eNew, eNew->Onext, eNew->Onext, FALSE ); + eNew->Sym->activeRegion->fixUpperEdge = TRUE; + WalkDirtyRegions( tess, regUp ); +} + +/* Because vertices at exactly the same location are merged together +* before we process the sweep event, some degenerate cases can't occur. +* However if someone eventually makes the modifications required to +* merge features which are close together, the cases below marked +* TOLERANCE_NONZERO will be useful. They were debugged before the +* code to merge identical vertices in the main loop was added. +*/ +#define TOLERANCE_NONZERO FALSE + +static void ConnectLeftDegenerate( TESStesselator *tess, + ActiveRegion *regUp, TESSvertex *vEvent ) +/* +* The event vertex lies exacty on an already-processed edge or vertex. +* Adding the new vertex involves splicing it into the already-processed +* part of the mesh. +*/ +{ + TESShalfEdge *e, *eTopLeft, *eTopRight, *eLast; + ActiveRegion *reg; + + e = regUp->eUp; + if( VertEq( e->Org, vEvent )) { + /* e->Org is an unprocessed vertex - just combine them, and wait + * for e->Org to be pulled from the queue + */ + assert( TOLERANCE_NONZERO ); + SpliceMergeVertices( tess, e, vEvent->anEdge ); + return; + } + + if( ! VertEq( e->Dst, vEvent )) { + /* General case -- splice vEvent into edge e which passes through it */ + if (tessMeshSplitEdge( tess->mesh, e->Sym ) == NULL) longjmp(tess->env,1); + if( regUp->fixUpperEdge ) { + /* This edge was fixable -- delete unused portion of original edge */ + if ( !tessMeshDelete( tess->mesh, e->Onext ) ) longjmp(tess->env,1); + regUp->fixUpperEdge = FALSE; + } + if ( !tessMeshSplice( tess->mesh, vEvent->anEdge, e ) ) longjmp(tess->env,1); + SweepEvent( tess, vEvent ); /* recurse */ + return; + } + + /* vEvent coincides with e->Dst, which has already been processed. + * Splice in the additional right-going edges. + */ + assert( TOLERANCE_NONZERO ); + regUp = TopRightRegion( regUp ); + reg = RegionBelow( regUp ); + eTopRight = reg->eUp->Sym; + eTopLeft = eLast = eTopRight->Onext; + if( reg->fixUpperEdge ) { + /* Here e->Dst has only a single fixable edge going right. + * We can delete it since now we have some real right-going edges. + */ + assert( eTopLeft != eTopRight ); /* there are some left edges too */ + DeleteRegion( tess, reg ); + if ( !tessMeshDelete( tess->mesh, eTopRight ) ) longjmp(tess->env,1); + eTopRight = eTopLeft->Oprev; + } + if ( !tessMeshSplice( tess->mesh, vEvent->anEdge, eTopRight ) ) longjmp(tess->env,1); + if( ! EdgeGoesLeft( eTopLeft )) { + /* e->Dst had no left-going edges -- indicate this to AddRightEdges() */ + eTopLeft = NULL; + } + AddRightEdges( tess, regUp, eTopRight->Onext, eLast, eTopLeft, TRUE ); +} + + +static void ConnectLeftVertex( TESStesselator *tess, TESSvertex *vEvent ) +/* +* Purpose: connect a "left" vertex (one where both edges go right) +* to the processed portion of the mesh. Let R be the active region +* containing vEvent, and let U and L be the upper and lower edge +* chains of R. There are two possibilities: +* +* - the normal case: split R into two regions, by connecting vEvent to +* the rightmost vertex of U or L lying to the left of the sweep line +* +* - the degenerate case: if vEvent is close enough to U or L, we +* merge vEvent into that edge chain. The subcases are: +* - merging with the rightmost vertex of U or L +* - merging with the active edge of U or L +* - merging with an already-processed portion of U or L +*/ +{ + ActiveRegion *regUp, *regLo, *reg; + TESShalfEdge *eUp, *eLo, *eNew; + ActiveRegion tmp; + + /* assert( vEvent->anEdge->Onext->Onext == vEvent->anEdge ); */ + + /* Get a pointer to the active region containing vEvent */ + tmp.eUp = vEvent->anEdge->Sym; + /* __GL_DICTLISTKEY */ /* tessDictListSearch */ + regUp = (ActiveRegion *)dictKey( dictSearch( tess->dict, &tmp )); + regLo = RegionBelow( regUp ); + if( !regLo ) { + // This may happen if the input polygon is coplanar. + return; + } + eUp = regUp->eUp; + eLo = regLo->eUp; + + /* Try merging with U or L first */ + if( EdgeSign( eUp->Dst, vEvent, eUp->Org ) == 0 ) { + ConnectLeftDegenerate( tess, regUp, vEvent ); + return; + } + + /* Connect vEvent to rightmost processed vertex of either chain. + * e->Dst is the vertex that we will connect to vEvent. + */ + reg = VertLeq( eLo->Dst, eUp->Dst ) ? regUp : regLo; + + if( regUp->inside || reg->fixUpperEdge) { + if( reg == regUp ) { + eNew = tessMeshConnect( tess->mesh, vEvent->anEdge->Sym, eUp->Lnext ); + if (eNew == NULL) longjmp(tess->env,1); + } else { + TESShalfEdge *tempHalfEdge= tessMeshConnect( tess->mesh, eLo->Dnext, vEvent->anEdge); + if (tempHalfEdge == NULL) longjmp(tess->env,1); + + eNew = tempHalfEdge->Sym; + } + if( reg->fixUpperEdge ) { + if ( !FixUpperEdge( tess, reg, eNew ) ) longjmp(tess->env,1); + } else { + ComputeWinding( tess, AddRegionBelow( tess, regUp, eNew )); + } + SweepEvent( tess, vEvent ); + } else { + /* The new vertex is in a region which does not belong to the polygon. + * We don''t need to connect this vertex to the rest of the mesh. + */ + AddRightEdges( tess, regUp, vEvent->anEdge, vEvent->anEdge, NULL, TRUE ); + } +} + + +static void SweepEvent( TESStesselator *tess, TESSvertex *vEvent ) +/* +* Does everything necessary when the sweep line crosses a vertex. +* Updates the mesh and the edge dictionary. +*/ +{ + ActiveRegion *regUp, *reg; + TESShalfEdge *e, *eTopLeft, *eBottomLeft; + + tess->event = vEvent; /* for access in EdgeLeq() */ + DebugEvent( tess ); + + /* Check if this vertex is the right endpoint of an edge that is + * already in the dictionary. In this case we don't need to waste + * time searching for the location to insert new edges. + */ + e = vEvent->anEdge; + while( e->activeRegion == NULL ) { + e = e->Onext; + if( e == vEvent->anEdge ) { + /* All edges go right -- not incident to any processed edges */ + ConnectLeftVertex( tess, vEvent ); + return; + } + } + + /* Processing consists of two phases: first we "finish" all the + * active regions where both the upper and lower edges terminate + * at vEvent (ie. vEvent is closing off these regions). + * We mark these faces "inside" or "outside" the polygon according + * to their winding number, and delete the edges from the dictionary. + * This takes care of all the left-going edges from vEvent. + */ + regUp = TopLeftRegion( tess, e->activeRegion ); + if (regUp == NULL) longjmp(tess->env,1); + reg = RegionBelow( regUp ); + eTopLeft = reg->eUp; + eBottomLeft = FinishLeftRegions( tess, reg, NULL ); + + /* Next we process all the right-going edges from vEvent. This + * involves adding the edges to the dictionary, and creating the + * associated "active regions" which record information about the + * regions between adjacent dictionary edges. + */ + if( eBottomLeft->Onext == eTopLeft ) { + /* No right-going edges -- add a temporary "fixable" edge */ + ConnectRightVertex( tess, regUp, eBottomLeft ); + } else { + AddRightEdges( tess, regUp, eBottomLeft->Onext, eTopLeft, eTopLeft, TRUE ); + } +} + + +/* Make the sentinel coordinates big enough that they will never be +* merged with real input features. +*/ + +static void AddSentinel( TESStesselator *tess, TESSreal smin, TESSreal smax, TESSreal t ) +/* +* We add two sentinel edges above and below all other edges, +* to avoid special cases at the top and bottom. +*/ +{ + TESShalfEdge *e; + ActiveRegion *reg = (ActiveRegion *)bucketAlloc( tess->regionPool ); + if (reg == NULL) longjmp(tess->env,1); + + e = tessMeshMakeEdge( tess->mesh ); + if (e == NULL) longjmp(tess->env,1); + + e->Org->s = smax; + e->Org->t = t; + e->Dst->s = smin; + e->Dst->t = t; + tess->event = e->Dst; /* initialize it */ + + reg->eUp = e; + reg->windingNumber = 0; + reg->inside = FALSE; + reg->fixUpperEdge = FALSE; + reg->sentinel = TRUE; + reg->dirty = FALSE; + reg->nodeUp = dictInsert( tess->dict, reg ); + if (reg->nodeUp == NULL) longjmp(tess->env,1); +} + + +static void InitEdgeDict( TESStesselator *tess ) +/* +* We maintain an ordering of edge intersections with the sweep line. +* This order is maintained in a dynamic dictionary. +*/ +{ + TESSreal w, h; + TESSreal smin, smax, tmin, tmax; + + tess->dict = dictNewDict( &tess->alloc, tess, (int (*)(void *, DictKey, DictKey)) EdgeLeq ); + if (tess->dict == NULL) longjmp(tess->env,1); + + /* If the bbox is empty, ensure that sentinels are not coincident by slightly enlarging it. */ + w = (tess->bmax[0] - tess->bmin[0]) + (TESSreal)0.01; + h = (tess->bmax[1] - tess->bmin[1]) + (TESSreal)0.01; + + smin = tess->bmin[0] - w; + smax = tess->bmax[0] + w; + tmin = tess->bmin[1] - h; + tmax = tess->bmax[1] + h; + + AddSentinel( tess, smin, smax, tmin ); + AddSentinel( tess, smin, smax, tmax ); +} + + +static void DoneEdgeDict( TESStesselator *tess ) +{ + ActiveRegion *reg; + int fixedEdges = 0; + + while( (reg = (ActiveRegion *)dictKey( dictMin( tess->dict ))) != NULL ) { + /* + * At the end of all processing, the dictionary should contain + * only the two sentinel edges, plus at most one "fixable" edge + * created by ConnectRightVertex(). + */ + if( ! reg->sentinel ) { + assert( reg->fixUpperEdge ); + assert( ++fixedEdges == 1 ); + } + assert( reg->windingNumber == 0 ); + DeleteRegion( tess, reg ); + /* tessMeshDelete( reg->eUp );*/ + } + dictDeleteDict( &tess->alloc, tess->dict ); +} + + +static void RemoveDegenerateEdges( TESStesselator *tess ) +/* +* Remove zero-length edges, and contours with fewer than 3 vertices. +*/ +{ + TESShalfEdge *e, *eNext, *eLnext; + TESShalfEdge *eHead = &tess->mesh->eHead; + + /*LINTED*/ + for( e = eHead->next; e != eHead; e = eNext ) { + eNext = e->next; + eLnext = e->Lnext; + + if( VertEq( e->Org, e->Dst ) && e->Lnext->Lnext != e ) { + /* Zero-length edge, contour has at least 3 edges */ + + SpliceMergeVertices( tess, eLnext, e ); /* deletes e->Org */ + if ( !tessMeshDelete( tess->mesh, e ) ) longjmp(tess->env,1); /* e is a self-loop */ + e = eLnext; + eLnext = e->Lnext; + } + if( eLnext->Lnext == e ) { + /* Degenerate contour (one or two edges) */ + + if( eLnext != e ) { + if( eLnext == eNext || eLnext == eNext->Sym ) { eNext = eNext->next; } + if ( !tessMeshDelete( tess->mesh, eLnext ) ) longjmp(tess->env,1); + } + if( e == eNext || e == eNext->Sym ) { eNext = eNext->next; } + if ( !tessMeshDelete( tess->mesh, e ) ) longjmp(tess->env,1); + } + } +} + +static int InitPriorityQ( TESStesselator *tess ) +/* +* Insert all vertices into the priority queue which determines the +* order in which vertices cross the sweep line. +*/ +{ + PriorityQ *pq; + TESSvertex *v, *vHead; + int vertexCount = 0; + + vHead = &tess->mesh->vHead; + for( v = vHead->next; v != vHead; v = v->next ) { + vertexCount++; + } + /* Make sure there is enough space for sentinels. */ + vertexCount += MAX( 8, tess->alloc.extraVertices ); + + pq = tess->pq = pqNewPriorityQ( &tess->alloc, vertexCount, (int (*)(PQkey, PQkey)) tesvertLeq ); + if (pq == NULL) return 0; + + vHead = &tess->mesh->vHead; + for( v = vHead->next; v != vHead; v = v->next ) { + v->pqHandle = pqInsert( &tess->alloc, pq, v ); + if (v->pqHandle == INV_HANDLE) + break; + } + if (v != vHead || !pqInit( &tess->alloc, pq ) ) { + pqDeletePriorityQ( &tess->alloc, tess->pq ); + tess->pq = NULL; + return 0; + } + + return 1; +} + + +static void DonePriorityQ( TESStesselator *tess ) +{ + pqDeletePriorityQ( &tess->alloc, tess->pq ); +} + + +static int RemoveDegenerateFaces( TESStesselator *tess, TESSmesh *mesh ) +/* +* Delete any degenerate faces with only two edges. WalkDirtyRegions() +* will catch almost all of these, but it won't catch degenerate faces +* produced by splice operations on already-processed edges. +* The two places this can happen are in FinishLeftRegions(), when +* we splice in a "temporary" edge produced by ConnectRightVertex(), +* and in CheckForLeftSplice(), where we splice already-processed +* edges to ensure that our dictionary invariants are not violated +* by numerical errors. +* +* In both these cases it is *very* dangerous to delete the offending +* edge at the time, since one of the routines further up the stack +* will sometimes be keeping a pointer to that edge. +*/ +{ + TESSface *f, *fNext; + TESShalfEdge *e; + + /*LINTED*/ + for( f = mesh->fHead.next; f != &mesh->fHead; f = fNext ) { + fNext = f->next; + e = f->anEdge; + assert( e->Lnext != e ); + + if( e->Lnext->Lnext == e ) { + /* A face with only two edges */ + AddWinding( e->Onext, e ); + if ( !tessMeshDelete( tess->mesh, e ) ) return 0; + } + } + return 1; +} + +int tessComputeInterior( TESStesselator *tess ) +/* +* tessComputeInterior( tess ) computes the planar arrangement specified +* by the given contours, and further subdivides this arrangement +* into regions. Each region is marked "inside" if it belongs +* to the polygon, according to the rule given by tess->windingRule. +* Each interior region is guaranteed be monotone. +*/ +{ + TESSvertex *v, *vNext; + + /* Each vertex defines an event for our sweep line. Start by inserting + * all the vertices in a priority queue. Events are processed in + * lexicographic order, ie. + * + * e1 < e2 iff e1.x < e2.x || (e1.x == e2.x && e1.y < e2.y) + */ + RemoveDegenerateEdges( tess ); + if ( !InitPriorityQ( tess ) ) return 0; /* if error */ + InitEdgeDict( tess ); + + while( (v = (TESSvertex *)pqExtractMin( tess->pq )) != NULL ) { + for( ;; ) { + vNext = (TESSvertex *)pqMinimum( tess->pq ); + if( vNext == NULL || ! VertEq( vNext, v )) break; + + /* Merge together all vertices at exactly the same location. + * This is more efficient than processing them one at a time, + * simplifies the code (see ConnectLeftDegenerate), and is also + * important for correct handling of certain degenerate cases. + * For example, suppose there are two identical edges A and B + * that belong to different contours (so without this code they would + * be processed by separate sweep events). Suppose another edge C + * crosses A and B from above. When A is processed, we split it + * at its intersection point with C. However this also splits C, + * so when we insert B we may compute a slightly different + * intersection point. This might leave two edges with a small + * gap between them. This kind of error is especially obvious + * when using boundary extraction (TESS_BOUNDARY_ONLY). + */ + vNext = (TESSvertex *)pqExtractMin( tess->pq ); + SpliceMergeVertices( tess, v->anEdge, vNext->anEdge ); + } + SweepEvent( tess, v ); + } + + /* Set tess->event for debugging purposes */ + tess->event = ((ActiveRegion *) dictKey( dictMin( tess->dict )))->eUp->Org; + DebugEvent( tess ); + DoneEdgeDict( tess ); + DonePriorityQ( tess ); + + if ( !RemoveDegenerateFaces( tess, tess->mesh ) ) return 0; + tessMeshCheckMesh( tess->mesh ); + + return 1; +} diff --git a/submodules/LottieMeshSwift/libtess2/Sources/sweep.h b/submodules/LottieMeshSwift/libtess2/Sources/sweep.h new file mode 100755 index 0000000000..32f0f86dca --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/sweep.h @@ -0,0 +1,74 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +#ifndef SWEEP_H +#define SWEEP_H + +#include "mesh.h" + +/* tessComputeInterior( tess ) computes the planar arrangement specified +* by the given contours, and further subdivides this arrangement +* into regions. Each region is marked "inside" if it belongs +* to the polygon, according to the rule given by tess->windingRule. +* Each interior region is guaranteed be monotone. +*/ +int tessComputeInterior( TESStesselator *tess ); + + +/* The following is here *only* for access by debugging routines */ + +#include "dict.h" + +/* For each pair of adjacent edges crossing the sweep line, there is +* an ActiveRegion to represent the region between them. The active +* regions are kept in sorted order in a dynamic dictionary. As the +* sweep line crosses each vertex, we update the affected regions. +*/ + +struct ActiveRegion { + TESShalfEdge *eUp; /* upper edge, directed right to left */ + DictNode *nodeUp; /* dictionary node corresponding to eUp */ + int windingNumber; /* used to determine which regions are + * inside the polygon */ + int inside; /* is this region inside the polygon? */ + int sentinel; /* marks fake edges at t = +/-infinity */ + int dirty; /* marks regions where the upper or lower + * edge has changed, but we haven't checked + * whether they intersect yet */ + int fixUpperEdge; /* marks temporary edges introduced when + * we process a "right vertex" (one without + * any edges leaving to the right) */ +}; + +#define RegionBelow(r) ((ActiveRegion *) dictKey(dictPred((r)->nodeUp))) +#define RegionAbove(r) ((ActiveRegion *) dictKey(dictSucc((r)->nodeUp))) + +#endif diff --git a/submodules/LottieMeshSwift/libtess2/Sources/tess.c b/submodules/LottieMeshSwift/libtess2/Sources/tess.c new file mode 100755 index 0000000000..5f47f8de06 --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/tess.c @@ -0,0 +1,1114 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +#include +#include +#include +#include "bucketalloc.h" +#include "tess.h" +#include "mesh.h" +#include "sweep.h" +#include "geom.h" +#include +#include +#include + +#define TRUE 1 +#define FALSE 0 + +#define Dot(u,v) (u[0]*v[0] + u[1]*v[1] + u[2]*v[2]) + +#if defined(FOR_TRITE_TEST_PROGRAM) || defined(TRUE_PROJECT) +static void Normalize( TESSreal v[3] ) +{ + TESSreal len = v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; + + assert( len > 0 ); + len = sqrtf( len ); + v[0] /= len; + v[1] /= len; + v[2] /= len; +} +#endif + +#define ABS(x) ((x) < 0 ? -(x) : (x)) + +static int LongAxis( TESSreal v[3] ) +{ + int i = 0; + + if( ABS(v[1]) > ABS(v[0]) ) { i = 1; } + if( ABS(v[2]) > ABS(v[i]) ) { i = 2; } + return i; +} + +static int ShortAxis( TESSreal v[3] ) +{ + int i = 0; + + if( ABS(v[1]) < ABS(v[0]) ) { i = 1; } + if( ABS(v[2]) < ABS(v[i]) ) { i = 2; } + return i; +} + +static void ComputeNormal( TESStesselator *tess, TESSreal norm[3] ) +{ + TESSvertex *v, *v1, *v2; + TESSreal c, tLen2, maxLen2; + TESSreal maxVal[3], minVal[3], d1[3], d2[3], tNorm[3]; + TESSvertex *maxVert[3], *minVert[3]; + TESSvertex *vHead = &tess->mesh->vHead; + int i; + + v = vHead->next; + for( i = 0; i < 3; ++i ) { + c = v->coords[i]; + minVal[i] = c; + minVert[i] = v; + maxVal[i] = c; + maxVert[i] = v; + } + + for( v = vHead->next; v != vHead; v = v->next ) { + for( i = 0; i < 3; ++i ) { + c = v->coords[i]; + if( c < minVal[i] ) { minVal[i] = c; minVert[i] = v; } + if( c > maxVal[i] ) { maxVal[i] = c; maxVert[i] = v; } + } + } + + /* Find two vertices separated by at least 1/sqrt(3) of the maximum + * distance between any two vertices + */ + i = 0; + if( maxVal[1] - minVal[1] > maxVal[0] - minVal[0] ) { i = 1; } + if( maxVal[2] - minVal[2] > maxVal[i] - minVal[i] ) { i = 2; } + if( minVal[i] >= maxVal[i] ) { + /* All vertices are the same -- normal doesn't matter */ + norm[0] = 0; norm[1] = 0; norm[2] = 1; + return; + } + + /* Look for a third vertex which forms the triangle with maximum area + * (Length of normal == twice the triangle area) + */ + maxLen2 = 0; + v1 = minVert[i]; + v2 = maxVert[i]; + d1[0] = v1->coords[0] - v2->coords[0]; + d1[1] = v1->coords[1] - v2->coords[1]; + d1[2] = v1->coords[2] - v2->coords[2]; + for( v = vHead->next; v != vHead; v = v->next ) { + d2[0] = v->coords[0] - v2->coords[0]; + d2[1] = v->coords[1] - v2->coords[1]; + d2[2] = v->coords[2] - v2->coords[2]; + tNorm[0] = d1[1]*d2[2] - d1[2]*d2[1]; + tNorm[1] = d1[2]*d2[0] - d1[0]*d2[2]; + tNorm[2] = d1[0]*d2[1] - d1[1]*d2[0]; + tLen2 = tNorm[0]*tNorm[0] + tNorm[1]*tNorm[1] + tNorm[2]*tNorm[2]; + if( tLen2 > maxLen2 ) { + maxLen2 = tLen2; + norm[0] = tNorm[0]; + norm[1] = tNorm[1]; + norm[2] = tNorm[2]; + } + } + + if( maxLen2 <= 0 ) { + /* All points lie on a single line -- any decent normal will do */ + norm[0] = norm[1] = norm[2] = 0; + norm[ShortAxis(d1)] = 1; + } +} + + +static void CheckOrientation( TESStesselator *tess ) +{ + TESSreal area; + TESSface *f, *fHead = &tess->mesh->fHead; + TESSvertex *v, *vHead = &tess->mesh->vHead; + TESShalfEdge *e; + + /* When we compute the normal automatically, we choose the orientation + * so that the the sum of the signed areas of all contours is non-negative. + */ + area = 0; + for( f = fHead->next; f != fHead; f = f->next ) { + e = f->anEdge; + if( e->winding <= 0 ) continue; + do { + area += (e->Org->s - e->Dst->s) * (e->Org->t + e->Dst->t); + e = e->Lnext; + } while( e != f->anEdge ); + } + if( area < 0 ) { + /* Reverse the orientation by flipping all the t-coordinates */ + for( v = vHead->next; v != vHead; v = v->next ) { + v->t = - v->t; + } + tess->tUnit[0] = - tess->tUnit[0]; + tess->tUnit[1] = - tess->tUnit[1]; + tess->tUnit[2] = - tess->tUnit[2]; + } +} + +#ifdef FOR_TRITE_TEST_PROGRAM +#include +extern int RandomSweep; +#define S_UNIT_X (RandomSweep ? (2*drand48()-1) : 1.0) +#define S_UNIT_Y (RandomSweep ? (2*drand48()-1) : 0.0) +#else +#if defined(SLANTED_SWEEP) +/* The "feature merging" is not intended to be complete. There are +* special cases where edges are nearly parallel to the sweep line +* which are not implemented. The algorithm should still behave +* robustly (ie. produce a reasonable tesselation) in the presence +* of such edges, however it may miss features which could have been +* merged. We could minimize this effect by choosing the sweep line +* direction to be something unusual (ie. not parallel to one of the +* coordinate axes). +*/ +#define S_UNIT_X (TESSreal)0.50941539564955385 /* Pre-normalized */ +#define S_UNIT_Y (TESSreal)0.86052074622010633 +#else +#define S_UNIT_X (TESSreal)1.0 +#define S_UNIT_Y (TESSreal)0.0 +#endif +#endif + +/* Determine the polygon normal and project vertices onto the plane +* of the polygon. +*/ +void tessProjectPolygon( TESStesselator *tess ) +{ + TESSvertex *v, *vHead = &tess->mesh->vHead; + TESSreal norm[3]; + TESSreal *sUnit, *tUnit; + int i, first, computedNormal = FALSE; + + norm[0] = tess->normal[0]; + norm[1] = tess->normal[1]; + norm[2] = tess->normal[2]; + if( norm[0] == 0 && norm[1] == 0 && norm[2] == 0 ) { + ComputeNormal( tess, norm ); + computedNormal = TRUE; + } + sUnit = tess->sUnit; + tUnit = tess->tUnit; + i = LongAxis( norm ); + +#if defined(FOR_TRITE_TEST_PROGRAM) || defined(TRUE_PROJECT) + /* Choose the initial sUnit vector to be approximately perpendicular + * to the normal. + */ + Normalize( norm ); + + sUnit[i] = 0; + sUnit[(i+1)%3] = S_UNIT_X; + sUnit[(i+2)%3] = S_UNIT_Y; + + /* Now make it exactly perpendicular */ + w = Dot( sUnit, norm ); + sUnit[0] -= w * norm[0]; + sUnit[1] -= w * norm[1]; + sUnit[2] -= w * norm[2]; + Normalize( sUnit ); + + /* Choose tUnit so that (sUnit,tUnit,norm) form a right-handed frame */ + tUnit[0] = norm[1]*sUnit[2] - norm[2]*sUnit[1]; + tUnit[1] = norm[2]*sUnit[0] - norm[0]*sUnit[2]; + tUnit[2] = norm[0]*sUnit[1] - norm[1]*sUnit[0]; + Normalize( tUnit ); +#else + /* Project perpendicular to a coordinate axis -- better numerically */ + sUnit[i] = 0; + sUnit[(i+1)%3] = S_UNIT_X; + sUnit[(i+2)%3] = S_UNIT_Y; + + tUnit[i] = 0; + tUnit[(i+1)%3] = (norm[i] > 0) ? -S_UNIT_Y : S_UNIT_Y; + tUnit[(i+2)%3] = (norm[i] > 0) ? S_UNIT_X : -S_UNIT_X; +#endif + + /* Project the vertices onto the sweep plane */ + for( v = vHead->next; v != vHead; v = v->next ) + { + v->s = Dot( v->coords, sUnit ); + v->t = Dot( v->coords, tUnit ); + } + if( computedNormal ) { + CheckOrientation( tess ); + } + + /* Compute ST bounds. */ + first = 1; + for( v = vHead->next; v != vHead; v = v->next ) + { + if (first) + { + tess->bmin[0] = tess->bmax[0] = v->s; + tess->bmin[1] = tess->bmax[1] = v->t; + first = 0; + } + else + { + if (v->s < tess->bmin[0]) tess->bmin[0] = v->s; + if (v->s > tess->bmax[0]) tess->bmax[0] = v->s; + if (v->t < tess->bmin[1]) tess->bmin[1] = v->t; + if (v->t > tess->bmax[1]) tess->bmax[1] = v->t; + } + } +} + +#define AddWinding(eDst,eSrc) (eDst->winding += eSrc->winding, \ + eDst->Sym->winding += eSrc->Sym->winding) + +/* tessMeshTessellateMonoRegion( face ) tessellates a monotone region +* (what else would it do??) The region must consist of a single +* loop of half-edges (see mesh.h) oriented CCW. "Monotone" in this +* case means that any vertical line intersects the interior of the +* region in a single interval. +* +* Tessellation consists of adding interior edges (actually pairs of +* half-edges), to split the region into non-overlapping triangles. +* +* The basic idea is explained in Preparata and Shamos (which I don''t +* have handy right now), although their implementation is more +* complicated than this one. The are two edge chains, an upper chain +* and a lower chain. We process all vertices from both chains in order, +* from right to left. +* +* The algorithm ensures that the following invariant holds after each +* vertex is processed: the untessellated region consists of two +* chains, where one chain (say the upper) is a single edge, and +* the other chain is concave. The left vertex of the single edge +* is always to the left of all vertices in the concave chain. +* +* Each step consists of adding the rightmost unprocessed vertex to one +* of the two chains, and forming a fan of triangles from the rightmost +* of two chain endpoints. Determining whether we can add each triangle +* to the fan is a simple orientation test. By making the fan as large +* as possible, we restore the invariant (check it yourself). +*/ +int tessMeshTessellateMonoRegion( TESSmesh *mesh, TESSface *face ) +{ + TESShalfEdge *up, *lo; + + /* All edges are oriented CCW around the boundary of the region. + * First, find the half-edge whose origin vertex is rightmost. + * Since the sweep goes from left to right, face->anEdge should + * be close to the edge we want. + */ + up = face->anEdge; + assert( up->Lnext != up && up->Lnext->Lnext != up ); + + for( ; VertLeq( up->Dst, up->Org ); up = up->Lprev ) + ; + for( ; VertLeq( up->Org, up->Dst ); up = up->Lnext ) + ; + lo = up->Lprev; + + while( up->Lnext != lo ) { + if( VertLeq( up->Dst, lo->Org )) { + /* up->Dst is on the left. It is safe to form triangles from lo->Org. + * The EdgeGoesLeft test guarantees progress even when some triangles + * are CW, given that the upper and lower chains are truly monotone. + */ + while( lo->Lnext != up && (EdgeGoesLeft( lo->Lnext ) + || EdgeSign( lo->Org, lo->Dst, lo->Lnext->Dst ) <= 0 )) { + TESShalfEdge *tempHalfEdge= tessMeshConnect( mesh, lo->Lnext, lo ); + if (tempHalfEdge == NULL) return 0; + lo = tempHalfEdge->Sym; + } + lo = lo->Lprev; + } else { + /* lo->Org is on the left. We can make CCW triangles from up->Dst. */ + while( lo->Lnext != up && (EdgeGoesRight( up->Lprev ) + || EdgeSign( up->Dst, up->Org, up->Lprev->Org ) >= 0 )) { + TESShalfEdge *tempHalfEdge= tessMeshConnect( mesh, up, up->Lprev ); + if (tempHalfEdge == NULL) return 0; + up = tempHalfEdge->Sym; + } + up = up->Lnext; + } + } + + /* Now lo->Org == up->Dst == the leftmost vertex. The remaining region + * can be tessellated in a fan from this leftmost vertex. + */ + assert( lo->Lnext != up ); + while( lo->Lnext->Lnext != up ) { + TESShalfEdge *tempHalfEdge= tessMeshConnect( mesh, lo->Lnext, lo ); + if (tempHalfEdge == NULL) return 0; + lo = tempHalfEdge->Sym; + } + + return 1; +} + +/* tessMeshTessellateInterior( mesh ) tessellates each region of +* the mesh which is marked "inside" the polygon. Each such region +* must be monotone. +*/ +int tessMeshTessellateInterior( TESSmesh *mesh ) +{ + TESSface *f, *next; + + /*LINTED*/ + for( f = mesh->fHead.next; f != &mesh->fHead; f = next ) { + /* Make sure we don''t try to tessellate the new triangles. */ + next = f->next; + if( f->inside ) { + if ( !tessMeshTessellateMonoRegion( mesh, f ) ) return 0; + } + } + return 1; +} + + +typedef struct EdgeStackNode EdgeStackNode; +typedef struct EdgeStack EdgeStack; + +struct EdgeStackNode { + TESShalfEdge *edge; + EdgeStackNode *next; +}; + +struct EdgeStack { + EdgeStackNode *top; + struct BucketAlloc *nodeBucket; +}; + +int stackInit( EdgeStack *stack, TESSalloc *alloc ) +{ + stack->top = NULL; + stack->nodeBucket = createBucketAlloc( alloc, "CDT nodes", sizeof(EdgeStackNode), 512 ); + return stack->nodeBucket != NULL; +} + +void stackDelete( EdgeStack *stack ) +{ + deleteBucketAlloc( stack->nodeBucket ); +} + +int stackEmpty( EdgeStack *stack ) +{ + return stack->top == NULL; +} + +void stackPush( EdgeStack *stack, TESShalfEdge *e ) +{ + EdgeStackNode *node = (EdgeStackNode *)bucketAlloc( stack->nodeBucket ); + if ( ! node ) return; + node->edge = e; + node->next = stack->top; + stack->top = node; +} + +TESShalfEdge *stackPop( EdgeStack *stack ) +{ + TESShalfEdge *e = NULL; + EdgeStackNode *node = stack->top; + if (node) { + stack->top = node->next; + e = node->edge; + bucketFree( stack->nodeBucket, node ); + } + return e; +} + + +// Starting with a valid triangulation, uses the Edge Flip algorithm to +// refine the triangulation into a Constrained Delaunay Triangulation. +void tessMeshRefineDelaunay( TESSmesh *mesh, TESSalloc *alloc ) +{ + // At this point, we have a valid, but not optimal, triangulation. + // We refine the triangulation using the Edge Flip algorithm + // + // 1) Find all internal edges + // 2) Mark all dual edges + // 3) insert all dual edges into a queue + + TESSface *f; + EdgeStack stack; + TESShalfEdge *e; + int maxFaces = 0, maxIter = 0, iter = 0; + + stackInit(&stack, alloc); + + for( f = mesh->fHead.next; f != &mesh->fHead; f = f->next ) { + if ( f->inside) { + e = f->anEdge; + do { + e->mark = EdgeIsInternal(e); // Mark internal edges + if (e->mark && !e->Sym->mark) stackPush(&stack, e); // Insert into queue + e = e->Lnext; + } while (e != f->anEdge); + maxFaces++; + } + } + + // The algorithm should converge on O(n^2), since the predicate is not robust, + // we'll save guard against infinite loop. + maxIter = maxFaces * maxFaces; + + // Pop stack until we find a reversed edge + // Flip the reversed edge, and insert any of the four opposite edges + // which are internal and not already in the stack (!marked) + while (!stackEmpty(&stack) && iter < maxIter) { + e = stackPop(&stack); + e->mark = e->Sym->mark = 0; + if (!tesedgeIsLocallyDelaunay(e)) { + TESShalfEdge *edges[4]; + int i; + tessMeshFlipEdge(mesh, e); + // for each opposite edge + edges[0] = e->Lnext; + edges[1] = e->Lprev; + edges[2] = e->Sym->Lnext; + edges[3] = e->Sym->Lprev; + for (i = 0; i < 4; i++) { + if (!edges[i]->mark && EdgeIsInternal(edges[i])) { + edges[i]->mark = edges[i]->Sym->mark = 1; + stackPush(&stack, edges[i]); + } + } + } + iter++; + } + + stackDelete(&stack); +} + + +/* tessMeshDiscardExterior( mesh ) zaps (ie. sets to NULL) all faces +* which are not marked "inside" the polygon. Since further mesh operations +* on NULL faces are not allowed, the main purpose is to clean up the +* mesh so that exterior loops are not represented in the data structure. +*/ +void tessMeshDiscardExterior( TESSmesh *mesh ) +{ + TESSface *f, *next; + + /*LINTED*/ + for( f = mesh->fHead.next; f != &mesh->fHead; f = next ) { + /* Since f will be destroyed, save its next pointer. */ + next = f->next; + if( ! f->inside ) { + tessMeshZapFace( mesh, f ); + } + } +} + +/* tessMeshSetWindingNumber( mesh, value, keepOnlyBoundary ) resets the +* winding numbers on all edges so that regions marked "inside" the +* polygon have a winding number of "value", and regions outside +* have a winding number of 0. +* +* If keepOnlyBoundary is TRUE, it also deletes all edges which do not +* separate an interior region from an exterior one. +*/ +int tessMeshSetWindingNumber( TESSmesh *mesh, int value, + int keepOnlyBoundary ) +{ + TESShalfEdge *e, *eNext; + + for( e = mesh->eHead.next; e != &mesh->eHead; e = eNext ) { + eNext = e->next; + if( e->Rface->inside != e->Lface->inside ) { + + /* This is a boundary edge (one side is interior, one is exterior). */ + e->winding = (e->Lface->inside) ? value : -value; + } else { + + /* Both regions are interior, or both are exterior. */ + if( ! keepOnlyBoundary ) { + e->winding = 0; + } else { + if ( !tessMeshDelete( mesh, e ) ) return 0; + } + } + } + return 1; +} + +void* heapAlloc( void* userData, unsigned int size ) +{ + TESS_NOTUSED( userData ); + return malloc( size ); +} + +void* heapRealloc( void *userData, void* ptr, unsigned int size ) +{ + TESS_NOTUSED( userData ); + return realloc( ptr, size ); +} + +void heapFree( void* userData, void* ptr ) +{ + TESS_NOTUSED( userData ); + free( ptr ); +} + +static TESSalloc defaulAlloc = +{ + heapAlloc, + heapRealloc, + heapFree, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +}; + +TESStesselator* tessNewTess( TESSalloc* alloc ) +{ + TESStesselator* tess; + + if (alloc == NULL) + alloc = &defaulAlloc; + + /* Only initialize fields which can be changed by the api. Other fields + * are initialized where they are used. + */ + + tess = (TESStesselator *)alloc->memalloc( alloc->userData, sizeof( TESStesselator )); + if ( tess == NULL ) { + return 0; /* out of memory */ + } + tess->alloc = *alloc; + /* Check and set defaults. */ + if (tess->alloc.meshEdgeBucketSize == 0) + tess->alloc.meshEdgeBucketSize = 512; + if (tess->alloc.meshVertexBucketSize == 0) + tess->alloc.meshVertexBucketSize = 512; + if (tess->alloc.meshFaceBucketSize == 0) + tess->alloc.meshFaceBucketSize = 256; + if (tess->alloc.dictNodeBucketSize == 0) + tess->alloc.dictNodeBucketSize = 512; + if (tess->alloc.regionBucketSize == 0) + tess->alloc.regionBucketSize = 256; + + tess->normal[0] = 0; + tess->normal[1] = 0; + tess->normal[2] = 0; + + tess->bmin[0] = 0; + tess->bmin[1] = 0; + tess->bmax[0] = 0; + tess->bmax[1] = 0; + + tess->reverseContours = 0; + + tess->windingRule = TESS_WINDING_ODD; + tess->processCDT = 0; + + if (tess->alloc.regionBucketSize < 16) + tess->alloc.regionBucketSize = 16; + if (tess->alloc.regionBucketSize > 4096) + tess->alloc.regionBucketSize = 4096; + tess->regionPool = createBucketAlloc( &tess->alloc, "Regions", + sizeof(ActiveRegion), tess->alloc.regionBucketSize ); + + // Initialize to begin polygon. + tess->mesh = NULL; + + tess->outOfMemory = 0; + tess->vertexIndexCounter = 0; + + tess->vertices = 0; + tess->vertexIndices = 0; + tess->vertexCount = 0; + tess->elements = 0; + tess->elementCount = 0; + + return tess; +} + +void tessDeleteTess( TESStesselator *tess ) +{ + + struct TESSalloc alloc = tess->alloc; + + deleteBucketAlloc( tess->regionPool ); + + if( tess->mesh != NULL ) { + tessMeshDeleteMesh( &alloc, tess->mesh ); + tess->mesh = NULL; + } + if (tess->vertices != NULL) { + alloc.memfree( alloc.userData, tess->vertices ); + tess->vertices = 0; + } + if (tess->vertexIndices != NULL) { + alloc.memfree( alloc.userData, tess->vertexIndices ); + tess->vertexIndices = 0; + } + if (tess->elements != NULL) { + alloc.memfree( alloc.userData, tess->elements ); + tess->elements = 0; + } + + alloc.memfree( alloc.userData, tess ); +} + + +static TESSindex GetNeighbourFace(TESShalfEdge* edge) +{ + if (!edge->Rface) + return TESS_UNDEF; + if (!edge->Rface->inside) + return TESS_UNDEF; + return edge->Rface->n; +} + +void OutputPolymesh( TESStesselator *tess, TESSmesh *mesh, int elementType, int polySize, int vertexSize ) +{ + TESSvertex* v = 0; + TESSface* f = 0; + TESShalfEdge* edge = 0; + int maxFaceCount = 0; + int maxVertexCount = 0; + int faceVerts, i; + TESSindex *elements = 0; + TESSreal *vert; + + // Assume that the input data is triangles now. + // Try to merge as many polygons as possible + if (polySize > 3) + { + if (!tessMeshMergeConvexFaces( mesh, polySize )) + { + tess->outOfMemory = 1; + return; + } + } + + // Mark unused + for ( v = mesh->vHead.next; v != &mesh->vHead; v = v->next ) + v->n = TESS_UNDEF; + + // Create unique IDs for all vertices and faces. + for ( f = mesh->fHead.next; f != &mesh->fHead; f = f->next ) + { + f->n = TESS_UNDEF; + if( !f->inside ) continue; + + edge = f->anEdge; + faceVerts = 0; + do + { + v = edge->Org; + if ( v->n == TESS_UNDEF ) + { + v->n = maxVertexCount; + maxVertexCount++; + } + faceVerts++; + edge = edge->Lnext; + } + while (edge != f->anEdge); + + assert( faceVerts <= polySize ); + + f->n = maxFaceCount; + ++maxFaceCount; + } + + tess->elementCount = maxFaceCount; + if (elementType == TESS_CONNECTED_POLYGONS) + maxFaceCount *= 2; + tess->elements = (TESSindex*)tess->alloc.memalloc( tess->alloc.userData, + sizeof(TESSindex) * maxFaceCount * polySize ); + if (!tess->elements) + { + tess->outOfMemory = 1; + return; + } + + tess->vertexCount = maxVertexCount; + tess->vertices = (TESSreal*)tess->alloc.memalloc( tess->alloc.userData, + sizeof(TESSreal) * tess->vertexCount * vertexSize ); + if (!tess->vertices) + { + tess->outOfMemory = 1; + return; + } + + tess->vertexIndices = (TESSindex*)tess->alloc.memalloc( tess->alloc.userData, + sizeof(TESSindex) * tess->vertexCount ); + if (!tess->vertexIndices) + { + tess->outOfMemory = 1; + return; + } + + // Output vertices. + for ( v = mesh->vHead.next; v != &mesh->vHead; v = v->next ) + { + if ( v->n != TESS_UNDEF ) + { + // Store coordinate + vert = &tess->vertices[v->n*vertexSize]; + vert[0] = v->coords[0]; + vert[1] = v->coords[1]; + if ( vertexSize > 2 ) + vert[2] = v->coords[2]; + // Store vertex index. + tess->vertexIndices[v->n] = v->idx; + } + } + + // Output indices. + elements = tess->elements; + for ( f = mesh->fHead.next; f != &mesh->fHead; f = f->next ) + { + if ( !f->inside ) continue; + + // Store polygon + edge = f->anEdge; + faceVerts = 0; + do + { + v = edge->Org; + *elements++ = v->n; + faceVerts++; + edge = edge->Lnext; + } + while (edge != f->anEdge); + // Fill unused. + for (i = faceVerts; i < polySize; ++i) + *elements++ = TESS_UNDEF; + + // Store polygon connectivity + if ( elementType == TESS_CONNECTED_POLYGONS ) + { + edge = f->anEdge; + do + { + *elements++ = GetNeighbourFace( edge ); + edge = edge->Lnext; + } + while (edge != f->anEdge); + // Fill unused. + for (i = faceVerts; i < polySize; ++i) + *elements++ = TESS_UNDEF; + } + } +} + +void OutputContours( TESStesselator *tess, TESSmesh *mesh, int vertexSize ) +{ + TESSface *f = 0; + TESShalfEdge *edge = 0; + TESShalfEdge *start = 0; + TESSreal *verts = 0; + TESSindex *elements = 0; + TESSindex *vertInds = 0; + int startVert = 0; + int vertCount = 0; + + tess->vertexCount = 0; + tess->elementCount = 0; + + for ( f = mesh->fHead.next; f != &mesh->fHead; f = f->next ) + { + if ( !f->inside ) continue; + + start = edge = f->anEdge; + do + { + ++tess->vertexCount; + edge = edge->Lnext; + } + while ( edge != start ); + + ++tess->elementCount; + } + + tess->elements = (TESSindex*)tess->alloc.memalloc( tess->alloc.userData, + sizeof(TESSindex) * tess->elementCount * 2 ); + if (!tess->elements) + { + tess->outOfMemory = 1; + return; + } + + tess->vertices = (TESSreal*)tess->alloc.memalloc( tess->alloc.userData, + sizeof(TESSreal) * tess->vertexCount * vertexSize ); + if (!tess->vertices) + { + tess->outOfMemory = 1; + return; + } + + tess->vertexIndices = (TESSindex*)tess->alloc.memalloc( tess->alloc.userData, + sizeof(TESSindex) * tess->vertexCount ); + if (!tess->vertexIndices) + { + tess->outOfMemory = 1; + return; + } + + verts = tess->vertices; + elements = tess->elements; + vertInds = tess->vertexIndices; + + startVert = 0; + + for ( f = mesh->fHead.next; f != &mesh->fHead; f = f->next ) + { + if ( !f->inside ) continue; + + vertCount = 0; + start = edge = f->anEdge; + do + { + *verts++ = edge->Org->coords[0]; + *verts++ = edge->Org->coords[1]; + if ( vertexSize > 2 ) + *verts++ = edge->Org->coords[2]; + *vertInds++ = edge->Org->idx; + ++vertCount; + edge = edge->Lnext; + } + while ( edge != start ); + + elements[0] = startVert; + elements[1] = vertCount; + elements += 2; + + startVert += vertCount; + } +} + +void tessAddContour( TESStesselator *tess, int size, const void* vertices, + int stride, int numVertices ) +{ + const unsigned char *src = (const unsigned char*)vertices; + TESShalfEdge *e; + int i; + + if ( tess->mesh == NULL ) + tess->mesh = tessMeshNewMesh( &tess->alloc ); + if ( tess->mesh == NULL ) { + tess->outOfMemory = 1; + return; + } + + if ( size < 2 ) + size = 2; + if ( size > 3 ) + size = 3; + + e = NULL; + + for( i = 0; i < numVertices; ++i ) + { + const TESSreal* coords = (const TESSreal*)src; + src += stride; + + if( e == NULL ) { + /* Make a self-loop (one vertex, one edge). */ + e = tessMeshMakeEdge( tess->mesh ); + if ( e == NULL ) { + tess->outOfMemory = 1; + return; + } + if ( !tessMeshSplice( tess->mesh, e, e->Sym ) ) { + tess->outOfMemory = 1; + return; + } + } else { + /* Create a new vertex and edge which immediately follow e + * in the ordering around the left face. + */ + if ( tessMeshSplitEdge( tess->mesh, e ) == NULL ) { + tess->outOfMemory = 1; + return; + } + e = e->Lnext; + } + + /* The new vertex is now e->Org. */ + e->Org->coords[0] = coords[0]; + e->Org->coords[1] = coords[1]; + if ( size > 2 ) + e->Org->coords[2] = coords[2]; + else + e->Org->coords[2] = 0; + /* Store the insertion number so that the vertex can be later recognized. */ + e->Org->idx = tess->vertexIndexCounter++; + + /* The winding of an edge says how the winding number changes as we + * cross from the edge''s right face to its left face. We add the + * vertices in such an order that a CCW contour will add +1 to + * the winding number of the region inside the contour. + */ + e->winding = tess->reverseContours ? -1 : 1; + e->Sym->winding = tess->reverseContours ? 1 : -1; + } +} + +void tessSetOption( TESStesselator *tess, int option, int value ) +{ + switch(option) + { + case TESS_CONSTRAINED_DELAUNAY_TRIANGULATION: + tess->processCDT = value > 0 ? 1 : 0; + break; + case TESS_REVERSE_CONTOURS: + tess->reverseContours = value > 0 ? 1 : 0; + break; + } +} + + +int tessTesselate( TESStesselator *tess, int windingRule, int elementType, + int polySize, int vertexSize, const TESSreal* normal ) +{ + TESSmesh *mesh; + int rc = 1; + + if (tess->vertices != NULL) { + tess->alloc.memfree( tess->alloc.userData, tess->vertices ); + tess->vertices = 0; + } + if (tess->elements != NULL) { + tess->alloc.memfree( tess->alloc.userData, tess->elements ); + tess->elements = 0; + } + if (tess->vertexIndices != NULL) { + tess->alloc.memfree( tess->alloc.userData, tess->vertexIndices ); + tess->vertexIndices = 0; + } + + tess->vertexIndexCounter = 0; + + if (normal) + { + tess->normal[0] = normal[0]; + tess->normal[1] = normal[1]; + tess->normal[2] = normal[2]; + } + + tess->windingRule = windingRule; + + if (vertexSize < 2) + vertexSize = 2; + if (vertexSize > 3) + vertexSize = 3; + + if (setjmp(tess->env) != 0) { + /* come back here if out of memory */ + return 0; + } + + if (!tess->mesh) + { + return 0; + } + + /* Determine the polygon normal and project vertices onto the plane + * of the polygon. + */ + tessProjectPolygon( tess ); + + /* tessComputeInterior( tess ) computes the planar arrangement specified + * by the given contours, and further subdivides this arrangement + * into regions. Each region is marked "inside" if it belongs + * to the polygon, according to the rule given by tess->windingRule. + * Each interior region is guaranteed be monotone. + */ + if ( !tessComputeInterior( tess ) ) { + longjmp(tess->env,1); /* could've used a label */ + } + + mesh = tess->mesh; + + /* If the user wants only the boundary contours, we throw away all edges + * except those which separate the interior from the exterior. + * Otherwise we tessellate all the regions marked "inside". + */ + if (elementType == TESS_BOUNDARY_CONTOURS) { + rc = tessMeshSetWindingNumber( mesh, 1, TRUE ); + } else { + rc = tessMeshTessellateInterior( mesh ); + if (rc != 0 && tess->processCDT != 0) + tessMeshRefineDelaunay( mesh, &tess->alloc ); + } + if (rc == 0) longjmp(tess->env,1); /* could've used a label */ + + tessMeshCheckMesh( mesh ); + + if (elementType == TESS_BOUNDARY_CONTOURS) { + OutputContours( tess, mesh, vertexSize ); /* output contours */ + } + else + { + OutputPolymesh( tess, mesh, elementType, polySize, vertexSize ); /* output polygons */ + } + + tessMeshDeleteMesh( &tess->alloc, mesh ); + tess->mesh = NULL; + + if (tess->outOfMemory) + return 0; + return 1; +} + +int tessGetVertexCount( TESStesselator *tess ) +{ + return tess->vertexCount; +} + +const TESSreal* tessGetVertices( TESStesselator *tess ) +{ + return tess->vertices; +} + +const TESSindex* tessGetVertexIndices( TESStesselator *tess ) +{ + return tess->vertexIndices; +} + +int tessGetElementCount( TESStesselator *tess ) +{ + return tess->elementCount; +} + +const int* tessGetElements( TESStesselator *tess ) +{ + return tess->elements; +} diff --git a/submodules/LottieMeshSwift/libtess2/Sources/tess.h b/submodules/LottieMeshSwift/libtess2/Sources/tess.h new file mode 100755 index 0000000000..30fda27bc2 --- /dev/null +++ b/submodules/LottieMeshSwift/libtess2/Sources/tess.h @@ -0,0 +1,93 @@ +/* +** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +** Copyright (C) [dates of first publication] Silicon Graphics, Inc. +** All Rights Reserved. +** +** 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 including the dates of first publication and either this +** permission notice or a reference to http://oss.sgi.com/projects/FreeB/ 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 SILICON GRAPHICS, INC. +** 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. +** +** Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +** be used in advertising or otherwise to promote the sale, use or other dealings in +** this Software without prior written authorization from Silicon Graphics, Inc. +*/ +/* +** Author: Eric Veach, July 1994. +*/ + +#ifndef TESS_H +#define TESS_H + +#include +#include "bucketalloc.h" +#include "mesh.h" +#include "dict.h" +#include "priorityq.h" +#include "../Include/tesselator.h" + +#ifdef __cplusplus +extern "C" { +#endif + +//typedef struct TESStesselator TESStesselator; + +struct TESStesselator { + + /*** state needed for collecting the input data ***/ + TESSmesh *mesh; /* stores the input contours, and eventually + the tessellation itself */ + int outOfMemory; + + /*** state needed for projecting onto the sweep plane ***/ + + TESSreal normal[3]; /* user-specified normal (if provided) */ + TESSreal sUnit[3]; /* unit vector in s-direction (debugging) */ + TESSreal tUnit[3]; /* unit vector in t-direction (debugging) */ + + TESSreal bmin[2]; + TESSreal bmax[2]; + + int processCDT; /* option to run Constrained Delayney pass. */ + int reverseContours; /* tessAddContour() will treat CCW contours as CW and vice versa */ + + /*** state needed for the line sweep ***/ + int windingRule; /* rule for determining polygon interior */ + + Dict *dict; /* edge dictionary for sweep line */ + PriorityQ *pq; /* priority queue of vertex events */ + TESSvertex *event; /* current sweep event being processed */ + + struct BucketAlloc* regionPool; + + TESSindex vertexIndexCounter; + + TESSreal *vertices; + TESSindex *vertexIndices; + int vertexCount; + TESSindex *elements; + int elementCount; + + TESSalloc alloc; + + jmp_buf env; /* place to jump to when memAllocs fail */ +}; + +#ifdef __cplusplus +}; +#endif + +#endif diff --git a/submodules/MeshAnimationCache/BUILD b/submodules/MeshAnimationCache/BUILD index 301fb25422..e3c8ebcdef 100644 --- a/submodules/MeshAnimationCache/BUILD +++ b/submodules/MeshAnimationCache/BUILD @@ -14,6 +14,7 @@ swift_library( "//submodules/Postbox:Postbox", "//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit", "//submodules/GZip:GZip", + "//submodules/AppBundle:AppBundle", ], visibility = [ "//visibility:public", diff --git a/submodules/MeshAnimationCache/Sources/MeshAnimationCache.swift b/submodules/MeshAnimationCache/Sources/MeshAnimationCache.swift index 114254fc20..4a17830150 100644 --- a/submodules/MeshAnimationCache/Sources/MeshAnimationCache.swift +++ b/submodules/MeshAnimationCache/Sources/MeshAnimationCache.swift @@ -3,8 +3,7 @@ import LottieMeshSwift import Postbox import SwiftSignalKit import GZip - -#error("Exclude") +import AppBundle public final class MeshAnimationCache { private final class Item { @@ -16,14 +15,14 @@ public final class MeshAnimationCache { private let mediaBox: MediaBox - private var items: [MediaResourceId: Item] = [:] + private var items: [String: Item] = [:] public init(mediaBox: MediaBox) { self.mediaBox = mediaBox } public func get(resource: MediaResource) -> MeshAnimation? { - if let item = self.items[resource.id] { + if let item = self.items[resource.id.stringRepresentation] { if let animation = item.animation { return animation } else if let readyPath = item.readyPath, let data = try? Data(contentsOf: URL(fileURLWithPath: readyPath)) { @@ -36,7 +35,7 @@ public final class MeshAnimationCache { } } else { let item = Item() - self.items[resource.id] = item + self.items[resource.id.stringRepresentation] = item let path = self.mediaBox.cachedRepresentationPathForId(resource.id.stringRepresentation, representationId: "mesh-animation", keepDuration: .general) if let data = try? Data(contentsOf: URL(fileURLWithPath: path)) { @@ -50,6 +49,35 @@ public final class MeshAnimationCache { } } } + + public func get(bundleName: String) -> MeshAnimation? { + if let item = self.items[bundleName] { + if let animation = item.animation { + return animation + } else if let readyPath = item.readyPath, let data = try? Data(contentsOf: URL(fileURLWithPath: readyPath)) { + let buffer = MeshReadBuffer(data: data) + let animation = MeshAnimation.read(buffer: buffer) + item.animation = animation + return animation + } else { + return nil + } + } else { + let item = Item() + self.items[bundleName] = item + + let path = self.mediaBox.cachedRepresentationPathForId(bundleName, representationId: "mesh-animation", keepDuration: .general) + if let data = try? Data(contentsOf: URL(fileURLWithPath: path)) { + let animation = MeshAnimation.read(buffer: MeshReadBuffer(data: data)) + item.readyPath = path + item.animation = animation + return animation + } else { + self.cache(item: item, bundleName: bundleName) + return nil + } + } + } private func cache(item: Item, resource: MediaResource) { let mediaBox = self.mediaBox @@ -89,7 +117,53 @@ public final class MeshAnimationCache { return } if let animationAndPath = animationAndPath { - if let item = strongSelf.items[resource.id] { + if let item = strongSelf.items[resource.id.stringRepresentation] { + item.isPending = false + item.animation = animationAndPath.0 + item.readyPath = animationAndPath.1 + } + } + })) + } + + private func cache(item: Item, bundleName: String) { + let mediaBox = self.mediaBox + item.isPending = true + item.disposable.set((Signal<(MeshAnimation, String)?, NoError> { subscriber in + guard let path = getAppBundle().path(forResource: bundleName, ofType: "tgs") else { + subscriber.putNext(nil) + subscriber.putCompletion() + return EmptyDisposable + } + + guard let zippedData = try? Data(contentsOf: URL(fileURLWithPath: path)) else { + subscriber.putNext(nil) + subscriber.putCompletion() + return EmptyDisposable + } + let jsonData = TGGUnzipData(zippedData, 1 * 1024 * 1024) ?? zippedData + if let animation = generateMeshAnimation(data: jsonData) { + let buffer = MeshWriteBuffer() + animation.write(buffer: buffer) + mediaBox.storeCachedResourceRepresentation(bundleName, representationId: "mesh-animation", keepDuration: .general, data: buffer.makeData(), completion: { path in + subscriber.putNext((animation, path)) + subscriber.putCompletion() + }) + } else { + subscriber.putNext(nil) + subscriber.putCompletion() + return EmptyDisposable + } + + return EmptyDisposable + } + |> runOn(Queue.concurrentDefaultQueue()) + |> deliverOnMainQueue).start(next: { [weak self] animationAndPath in + guard let strongSelf = self else { + return + } + if let animationAndPath = animationAndPath { + if let item = strongSelf.items[bundleName] { item.isPending = false item.animation = animationAndPath.0 item.readyPath = animationAndPath.1 diff --git a/submodules/Postbox/Sources/MediaBox.swift b/submodules/Postbox/Sources/MediaBox.swift index d8dcede4ab..eb6839a5c2 100644 --- a/submodules/Postbox/Sources/MediaBox.swift +++ b/submodules/Postbox/Sources/MediaBox.swift @@ -213,7 +213,7 @@ public final class MediaBox { return ResourceStorePaths(partial: "\(fileNameForId(id))_partial", complete: "\(fileNameForId(id))") } - private func cachedRepresentationPathsForId(_ id: MediaResourceId, representationId: String, keepDuration: CachedMediaRepresentationKeepDuration) -> ResourceStorePaths { + private func cachedRepresentationPathsForId(_ id: String, representationId: String, keepDuration: CachedMediaRepresentationKeepDuration) -> ResourceStorePaths { let cacheString: String switch keepDuration { case .general: @@ -784,14 +784,22 @@ public final class MediaBox { public func storeCachedResourceRepresentation(_ resource: MediaResource, representation: CachedMediaResourceRepresentation, data: Data) { self.dataQueue.async { - let path = self.cachedRepresentationPathsForId(resource.id, representationId: representation.uniqueId, keepDuration: representation.keepDuration).complete + let path = self.cachedRepresentationPathsForId(resource.id.stringRepresentation, representationId: representation.uniqueId, keepDuration: representation.keepDuration).complete let _ = try? data.write(to: URL(fileURLWithPath: path)) } } public func storeCachedResourceRepresentation(_ resource: MediaResource, representationId: String, keepDuration: CachedMediaRepresentationKeepDuration, data: Data, completion: @escaping (String) -> Void = { _ in }) { self.dataQueue.async { - let path = self.cachedRepresentationPathsForId(resource.id, representationId: representationId, keepDuration: keepDuration).complete + let path = self.cachedRepresentationPathsForId(resource.id.stringRepresentation, representationId: representationId, keepDuration: keepDuration).complete + let _ = try? data.write(to: URL(fileURLWithPath: path)) + completion(path) + } + } + + public func storeCachedResourceRepresentation(_ resourceId: String, representationId: String, keepDuration: CachedMediaRepresentationKeepDuration, data: Data, completion: @escaping (String) -> Void = { _ in }) { + self.dataQueue.async { + let path = self.cachedRepresentationPathsForId(resourceId, representationId: representationId, keepDuration: keepDuration).complete let _ = try? data.write(to: URL(fileURLWithPath: path)) completion(path) } @@ -802,7 +810,7 @@ public final class MediaBox { let disposable = MetaDisposable() let begin: () -> Void = { - let paths = self.cachedRepresentationPathsForId(resource.id, representationId: representation.uniqueId, keepDuration: representation.keepDuration) + let paths = self.cachedRepresentationPathsForId(resource.id.stringRepresentation, representationId: representation.uniqueId, keepDuration: representation.keepDuration) if let size = fileSize(paths.complete) { self.timeBasedCleanup.touch(paths: [ paths.complete @@ -971,7 +979,7 @@ public final class MediaBox { let begin: () -> Void = { let paths: ResourceStorePaths if let baseResourceId = baseResourceId { - paths = self.cachedRepresentationPathsForId(MediaResourceId(baseResourceId), representationId: id, keepDuration: keepDuration) + paths = self.cachedRepresentationPathsForId(MediaResourceId(baseResourceId).stringRepresentation, representationId: id, keepDuration: keepDuration) } else { paths = self.storePathsForId(MediaResourceId(id)) } diff --git a/submodules/TelegramCallsUI/Sources/ReactionStrip.swift b/submodules/TelegramCallsUI/Sources/ReactionStrip.swift new file mode 100644 index 0000000000..4393b949ea --- /dev/null +++ b/submodules/TelegramCallsUI/Sources/ReactionStrip.swift @@ -0,0 +1,45 @@ +import Foundation +import UIKit +import AsyncDisplayKit +import Display + +final class ReactionStrip: ASDisplayNode { + private var labelValues: [String] = [] + private var labelNodes: [ImmediateTextNode] = [] + + var selected: ((String) -> Void)? + + override init() { + self.labelValues = ["๐Ÿงก", "๐ŸŽ†", "๐ŸŽˆ", "๐ŸŽ‰", "๐Ÿ‘", "๐Ÿ‘Ž", "๐Ÿ’ฉ", "๐Ÿ’ธ", "๐Ÿ˜‚"] + + super.init() + + for labelValue in self.labelValues { + let labelNode = ImmediateTextNode() + labelNode.attributedText = NSAttributedString(string: labelValue, font: Font.regular(20.0), textColor: .black) + self.labelNodes.append(labelNode) + self.addSubnode(labelNode) + labelNode.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.labelTapGesture(_:)))) + } + } + + @objc private func labelTapGesture(_ recognizer: UITapGestureRecognizer) { + if case .ended = recognizer.state { + for i in 0 ..< self.labelNodes.count { + if self.labelNodes[i].view === recognizer.view { + self.selected?(self.labelValues[i]) + break + } + } + } + } + + func update(size: CGSize) { + var labelOrigin = CGPoint(x: 0.0, y: 0.0) + for labelNode in self.labelNodes { + let labelSize = labelNode.updateLayout(CGSize(width: 100.0, height: 100.0)) + labelNode.frame = CGRect(origin: labelOrigin, size: labelSize) + labelOrigin.x += labelSize.width + 10.0 + } + } +} diff --git a/submodules/TelegramCallsUI/Sources/VoiceChatController.swift b/submodules/TelegramCallsUI/Sources/VoiceChatController.swift index f6645a3f7b..ee20195372 100644 --- a/submodules/TelegramCallsUI/Sources/VoiceChatController.swift +++ b/submodules/TelegramCallsUI/Sources/VoiceChatController.swift @@ -32,6 +32,7 @@ import MapResourceToAvatarSizes import SolidRoundedButtonNode import AudioBlob import DeviceAccess +import LottieMeshSwift let panelBackgroundColor = UIColor(rgb: 0x1c1c1e) let secondaryPanelBackgroundColor = UIColor(rgb: 0x2c2c2e) @@ -39,8 +40,8 @@ let fullscreenBackgroundColor = UIColor(rgb: 0x000000) private let smallButtonSize = CGSize(width: 36.0, height: 36.0) private let sideButtonSize = CGSize(width: 56.0, height: 56.0) private let topPanelHeight: CGFloat = 63.0 -let bottomAreaHeight: CGFloat = 206.0 -private let fullscreenBottomAreaHeight: CGFloat = 80.0 +let bottomAreaHeight: CGFloat = 206.0 + 32.0 +private let fullscreenBottomAreaHeight: CGFloat = 80.0 + 32.0 private let bottomGradientHeight: CGFloat = 70.0 func decorationCornersImage(top: Bool, bottom: Bool, dark: Bool) -> UIImage? { @@ -780,11 +781,14 @@ public final class VoiceChatController: ViewController { fileprivate let switchCameraButton: CallControllerButtonItemNode fileprivate let leaveButton: CallControllerButtonItemNode fileprivate let actionButton: VoiceChatActionButton + fileprivate let reactionStrip: ReactionStrip private let leftBorderNode: ASDisplayNode private let rightBorderNode: ASDisplayNode private let mainStageContainerNode: ASDisplayNode private let mainStageBackgroundNode: ASDisplayNode private let mainStageNode: VoiceChatMainStageNode + + private var meshAnimationView: UIView? private let transitionMaskView: UIView private let transitionMaskTopFillLayer: CALayer @@ -1056,6 +1060,7 @@ public final class VoiceChatController: ViewController { self.switchCameraButton.isUserInteractionEnabled = false self.leaveButton = CallControllerButtonItemNode() self.actionButton = VoiceChatActionButton() + self.reactionStrip = ReactionStrip() if self.isScheduling { self.cameraButton.alpha = 0.0 @@ -1136,8 +1141,38 @@ public final class VoiceChatController: ViewController { self.participantsNode = VoiceChatTimerNode(strings: self.presentationData.strings, dateTimeFormat: self.presentationData.dateTimeFormat) + if #available(iOS 13.0, *) { + self.meshAnimationView = MeshRenderer() + self.meshAnimationView?.isUserInteractionEnabled = false + } + super.init() + self.reactionStrip.selected = { [weak self] value in + guard let strongSelf = self else { + return + } + let mapping: [String: String] = [ + "๐Ÿงก": "Hearts", + "๐ŸŽ†": "Fireworks", + "๐ŸŽˆ": "Balloon", + "๐ŸŽ‰": "Party", + "๐Ÿ‘": "SuperThumbsUp1", + "๐Ÿ‘Ž": "SuperThumbsDown", + "๐Ÿ’ฉ": "Poo", + "๐Ÿ’ธ": "Money", + "๐Ÿ˜‚": "Joy" + ] + + if let name = mapping[value] { + if #available(iOS 13.0, *) { + if let animation = call.accountContext.meshAnimationCache.get(bundleName: name), let meshAnimationView = strongSelf.meshAnimationView as? MeshRenderer { + meshAnimationView.add(mesh: animation, offset: CGPoint()) + } + } + } + } + let context = self.context let currentAccountPeer = self.context.account.postbox.loadedPeerWithId(context.account.peerId) |> map { peer in @@ -1840,6 +1875,11 @@ public final class VoiceChatController: ViewController { self.addSubnode(self.dimNode) self.addSubnode(self.contentContainer) + + if let meshAnimationView = self.meshAnimationView { + self.view.addSubview(meshAnimationView) + } + self.contentContainer.addSubnode(self.backgroundNode) self.contentContainer.addSubnode(self.listContainer) @@ -1856,6 +1896,7 @@ public final class VoiceChatController: ViewController { self.contentContainer.addSubnode(self.mainStageContainerNode) self.contentContainer.addSubnode(self.transitionContainerNode) self.contentContainer.addSubnode(self.bottomPanelNode) + self.contentContainer.addSubnode(self.reactionStrip) self.contentContainer.addSubnode(self.timerNode) self.contentContainer.addSubnode(self.scheduleTextNode) self.contentContainer.addSubnode(self.fullscreenListContainer) @@ -4277,6 +4318,12 @@ public final class VoiceChatController: ViewController { let previousLayout = self.validLayout?.0 self.validLayout = (layout, navigationHeight) + if #available(iOS 13.0, *) { + if let meshAnimationView = self.meshAnimationView as? MeshRenderer { + meshAnimationView.frame = CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - layout.size.width), size: CGSize(width: layout.size.width, height: layout.size.width)) + } + } + let size = layout.size let contentWidth: CGFloat let headerWidth: CGFloat @@ -4734,6 +4781,9 @@ public final class VoiceChatController: ViewController { } : nil) } + transition.updateFrame(node: self.reactionStrip, frame: CGRect(origin: CGPoint(x: 12.0, y: size.height - 44.0 - 10.0), size: CGSize(width: size.width - 12.0 * 2.0, height: 44.0))) + self.reactionStrip.update(size: self.reactionStrip.bounds.size) + self.cameraButton.isUserInteractionEnabled = hasCameraButton var buttonsTransition: ContainedViewLayoutTransition = .immediate diff --git a/submodules/TelegramUI/BUILD b/submodules/TelegramUI/BUILD index 1dfb36ce03..6c303a3abe 100644 --- a/submodules/TelegramUI/BUILD +++ b/submodules/TelegramUI/BUILD @@ -243,8 +243,8 @@ swift_library( "//submodules/AdUI:AdUI", "//submodules/SparseItemGrid:SparseItemGrid", "//submodules/CalendarMessageScreen:CalendarMessageScreen", - #"//submodules/LottieMeshSwift:LottieMeshSwift", - #"//submodules/MeshAnimationCache:MeshAnimationCache", + "//submodules/LottieMeshSwift:LottieMeshSwift", + "//submodules/MeshAnimationCache:MeshAnimationCache", "//submodules/DirectMediaImageCache:DirectMediaImageCache", ] + select({ "@build_bazel_rules_apple//apple:ios_armv7": [], diff --git a/submodules/TelegramUI/Sources/AccountContext.swift b/submodules/TelegramUI/Sources/AccountContext.swift index 6ce770d6be..9249524e72 100644 --- a/submodules/TelegramUI/Sources/AccountContext.swift +++ b/submodules/TelegramUI/Sources/AccountContext.swift @@ -16,7 +16,7 @@ import TelegramCallsUI import TelegramBaseController import AsyncDisplayKit import PresentationDataUtils -//import MeshAnimationCache +import MeshAnimationCache private final class DeviceSpecificContactImportContext { let disposable = MetaDisposable() @@ -156,7 +156,7 @@ public final class AccountContextImpl: AccountContext { private var experimentalUISettingsDisposable: Disposable? public let cachedGroupCallContexts: AccountGroupCallContextCache - //public let meshAnimationCache: MeshAnimationCache + public let meshAnimationCache: MeshAnimationCache public init(sharedContext: SharedAccountContextImpl, account: Account, limitsConfiguration: LimitsConfiguration, contentSettings: ContentSettings, appConfiguration: AppConfiguration, temp: Bool = false) { @@ -189,7 +189,7 @@ public final class AccountContextImpl: AccountContext { } self.cachedGroupCallContexts = AccountGroupCallContextCacheImpl() - //self.meshAnimationCache = MeshAnimationCache(mediaBox: account.postbox.mediaBox) + self.meshAnimationCache = MeshAnimationCache(mediaBox: account.postbox.mediaBox) let updatedLimitsConfiguration = account.postbox.preferencesView(keys: [PreferencesKeys.limitsConfiguration]) |> map { preferences -> LimitsConfiguration in diff --git a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift index 58a6272838..a18486ad8e 100644 --- a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift @@ -24,7 +24,7 @@ import ShimmerEffect import WallpaperBackgroundNode import LocalMediaResources import AppBundle -//import LottieMeshSwift +import LottieMeshSwift private let nameFont = Font.medium(14.0) private let inlineBotPrefixFont = Font.regular(14.0) @@ -1435,7 +1435,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { let incomingMessage = item.message.effectivelyIncoming(item.context.account.peerId) - /*if #available(iOS 13.0, *), item.context.sharedContext.immediateExperimentalUISettings.acceleratedStickers, let meshAnimation = item.context.meshAnimationCache.get(resource: file.resource) { + if #available(iOS 13.0, *), item.context.sharedContext.immediateExperimentalUISettings.acceleratedStickers, let meshAnimation = item.context.meshAnimationCache.get(resource: file.resource) { var overlayMeshAnimationNode: ChatMessageTransitionNode.DecorationItemNode? if let current = self.overlayMeshAnimationNode { overlayMeshAnimationNode = current @@ -1466,7 +1466,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { if let meshRenderer = overlayMeshAnimationNode?.contentView as? MeshRenderer { meshRenderer.add(mesh: meshAnimation, offset: CGPoint(x: CGFloat.random(in: -30.0 ... 30.0), y: CGFloat.random(in: -30.0 ... 30.0))) } - } else*/ do { + } else { let pathPrefix = item.context.account.postbox.mediaBox.shortLivedResourceCachePathPrefix(file.resource.id) let additionalAnimationNode = AnimatedStickerNode() additionalAnimationNode.setup(source: source, width: Int(animationSize.width * 2.0), height: Int(animationSize.height * 2.0), playbackMode: .once, mode: .direct(cachePathPrefix: pathPrefix)) diff --git a/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm b/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm index cb2af58c81..2a592aed85 100644 --- a/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm +++ b/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm @@ -803,7 +803,7 @@ static void (*InternalVoipLoggingFunction)(NSString *) = NULL; [list addObject:@"2.7.7"]; [list addObject:@"3.0.0"]; if (includeReference) { - //[list addObject:@"4.0.0"]; + [list addObject:@"4.0.0"]; } return list; }