diff --git a/Directory.Packages.props b/Directory.Packages.props
index b22bb12..77d545d 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -9,6 +9,7 @@
+
diff --git a/LehrerApp.Core/Interfaces/IRepositories.cs b/LehrerApp.Core/Interfaces/IRepositories.cs
index dccf460..4663e12 100644
--- a/LehrerApp.Core/Interfaces/IRepositories.cs
+++ b/LehrerApp.Core/Interfaces/IRepositories.cs
@@ -29,6 +29,14 @@ public interface ISeatingPlanRepository
/// wieder her (14.3). Tut nichts, falls der Papierkorb-Eintrag nicht (mehr) existiert.
void Restore(Guid trashId);
}
+public interface IStudentGroupPlanRepository
+{
+ StudentGroupPlan? GetById(Guid id);
+ List GetByGroup(Guid groupId);
+ List GetByStudent(Guid studentId);
+ void Save(StudentGroupPlan plan);
+ void Delete(Guid id);
+}
public interface IGroupMembershipRepository
{
List GetByStudent(Guid studentId);
diff --git a/LehrerApp.Core/Models/Student.cs b/LehrerApp.Core/Models/Student.cs
index 0c25872..a800e60 100644
--- a/LehrerApp.Core/Models/Student.cs
+++ b/LehrerApp.Core/Models/Student.cs
@@ -52,9 +52,10 @@ public sealed record StudentReferenceSummary(
int Grades,
int ReportGrades,
int ParticipationEntries,
- int DocumentationEntries)
+ int DocumentationEntries,
+ int StudentGroupPlans = 0)
{
public int Total => Memberships + ExamResults + Grades + ReportGrades
- + ParticipationEntries + DocumentationEntries;
+ + ParticipationEntries + DocumentationEntries + StudentGroupPlans;
public bool HasReferences => Total > 0;
}
diff --git a/LehrerApp.Core/Models/StudentGroupPlan.cs b/LehrerApp.Core/Models/StudentGroupPlan.cs
new file mode 100644
index 0000000..82c3a92
--- /dev/null
+++ b/LehrerApp.Core/Models/StudentGroupPlan.cs
@@ -0,0 +1,17 @@
+namespace LehrerApp.Core.Models;
+
+/// Eine wiederverwendbare Einteilung innerhalb einer Lerngruppe.
+public class StudentGroupPlan
+{
+ public Guid Id { get; set; } = Guid.NewGuid();
+ public Guid GroupId { get; set; }
+ public string Name { get; set; } = "";
+ public List Groups { get; set; } = [];
+ public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
+ public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
+}
+
+public class StudentGroupPlanGroup
+{
+ public List StudentIds { get; set; } = [];
+}
diff --git a/LehrerApp.Core/Services/PersonalDataExportService.cs b/LehrerApp.Core/Services/PersonalDataExportService.cs
index eccdc66..4b49038 100644
--- a/LehrerApp.Core/Services/PersonalDataExportService.cs
+++ b/LehrerApp.Core/Services/PersonalDataExportService.cs
@@ -22,7 +22,8 @@ public class PersonalDataExportService(
IExamResultRepository examResults,
IParticipationRepository participation,
IDocumentationRepository documentation,
- ISeatingPlanRepository seatingPlans)
+ ISeatingPlanRepository seatingPlans,
+ IStudentGroupPlanRepository? studentGroupPlans = null)
{
public string ExportAsJson(Guid studentId)
{
@@ -56,6 +57,16 @@ public class PersonalDataExportService(
Platz = a.Column + 1,
}))
.ToList(),
+ GespeicherteGruppeneinteilungen = (studentGroupPlans?.GetByStudent(studentId) ?? [])
+ .SelectMany(plan => plan.Groups.Select((subgroup, index) => new
+ {
+ Einteilung = plan.Name,
+ Gruppe = index + 1,
+ Enthalten = subgroup.StudentIds.Contains(studentId),
+ }))
+ .Where(entry => entry.Enthalten)
+ .Select(entry => new { entry.Einteilung, entry.Gruppe })
+ .ToList(),
};
return JsonSerializer.Serialize(dto, new JsonSerializerOptions
diff --git a/LehrerApp.Data.Tests/RepositoryTests.cs b/LehrerApp.Data.Tests/RepositoryTests.cs
index c39904b..799fccd 100644
--- a/LehrerApp.Data.Tests/RepositoryTests.cs
+++ b/LehrerApp.Data.Tests/RepositoryTests.cs
@@ -8,6 +8,72 @@ public sealed class RepositoryTests
{
private static LiteDbContext NewInMemoryContext() => new(new MemoryStream());
+ [Fact]
+ public void StudentGroupPlanRepository_SpeichertEinteilungUndLoeschtSieMitDerLerngruppe()
+ {
+ using var db = NewInMemoryContext();
+ var group = new LearningGroup { Name = "8a" };
+ new GroupRepository(db).Save(group);
+ var studentIds = new[] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() };
+ var plan = new StudentGroupPlan
+ {
+ GroupId = group.Id,
+ Name = " Projektwoche ",
+ Groups =
+ [
+ new StudentGroupPlanGroup { StudentIds = [studentIds[0], studentIds[1]] },
+ new StudentGroupPlanGroup { StudentIds = [studentIds[2]] },
+ ],
+ };
+ var changes = new List<(string Type, string Operation)>();
+ db.OnChange = (type, _, operation, _) => changes.Add((type, operation));
+ var repo = new StudentGroupPlanRepository(db);
+
+ repo.Save(plan);
+ Assert.Equal("Projektwoche", repo.GetById(plan.Id)?.Name);
+ Assert.Equal(studentIds[2], repo.GetByGroup(group.Id).Single().Groups[1].StudentIds.Single());
+ Assert.Equal(plan.Id, Assert.Single(repo.GetByStudent(studentIds[0])).Id);
+ Assert.Contains((nameof(StudentGroupPlan), "Save"), changes);
+
+ var student = new Student { Id = studentIds[0], FirstName = "Anna", LastName = "Beispiel" };
+ var students = new StudentRepository(db);
+ students.Save(student);
+ Assert.Throws(() => students.Delete(student.Id));
+
+ new GroupRepository(db).Delete(group.Id);
+ Assert.Empty(repo.GetByGroup(group.Id));
+ }
+
+ [Fact]
+ public void StudentGroupPlanRepository_VerhindertDoppelteSchuelerUndNamen()
+ {
+ using var db = NewInMemoryContext();
+ var group = new LearningGroup { Name = "8a" };
+ new GroupRepository(db).Save(group);
+ var repo = new StudentGroupPlanRepository(db);
+ var studentId = Guid.NewGuid();
+ Assert.Throws(() => repo.Save(new StudentGroupPlan
+ {
+ GroupId = group.Id, Name = "Doppelt",
+ Groups =
+ [
+ new StudentGroupPlanGroup { StudentIds = [studentId] },
+ new StudentGroupPlanGroup { StudentIds = [studentId] },
+ ],
+ }));
+
+ repo.Save(new StudentGroupPlan
+ {
+ GroupId = group.Id, Name = "Projektwoche",
+ Groups = [new StudentGroupPlanGroup { StudentIds = [studentId] }],
+ });
+ Assert.Throws(() => repo.Save(new StudentGroupPlan
+ {
+ GroupId = group.Id, Name = "projektwoche",
+ Groups = [new StudentGroupPlanGroup()],
+ }));
+ }
+
// ── StudentRepository ─────────────────────────────────────────────────────
[Fact]
diff --git a/LehrerApp.Data/LiteDbContext.cs b/LehrerApp.Data/LiteDbContext.cs
index 9d12173..bb821e7 100644
--- a/LehrerApp.Data/LiteDbContext.cs
+++ b/LehrerApp.Data/LiteDbContext.cs
@@ -41,6 +41,7 @@ public class LiteDbContext : IDisposable
public ILiteCollection Students => _db.GetCollection("students");
public ILiteCollection Groups => _db.GetCollection("groups");
public ILiteCollection SeatingPlans => _db.GetCollection("seating_plans");
+ public ILiteCollection StudentGroupPlans => _db.GetCollection("student_group_plans");
public ILiteCollection Memberships => _db.GetCollection("group_memberships");
public ILiteCollection Exams => _db.GetCollection("exams");
public ILiteCollection ExamResults => _db.GetCollection("exam_results");
@@ -141,6 +142,8 @@ public class LiteDbContext : IDisposable
foreach (var plan in SeatingPlans.Find(p => p.GroupId == id).ToList())
SeatingPlans.Delete(plan.Id);
+ foreach (var plan in StudentGroupPlans.Find(p => p.GroupId == id).ToList())
+ StudentGroupPlans.Delete(plan.Id);
// Dokumentation und Arbeitszeit sind historische Nachweise. Sie bleiben erhalten,
// werden aber von der nicht mehr existierenden Lerngruppe entkoppelt.
@@ -659,6 +662,7 @@ public class LiteDbContext : IDisposable
Groups.EnsureIndex(x => x.SchoolYear);
Groups.EnsureIndex(x => x.IsActive);
SeatingPlans.EnsureIndex(x => x.GroupId);
+ StudentGroupPlans.EnsureIndex(x => x.GroupId);
Memberships.EnsureIndex(x => x.StudentId);
Memberships.EnsureIndex(x => x.GroupId);
Memberships.EnsureIndex("ux_student_group",
diff --git a/LehrerApp.Data/Repositories/AllRepositories.cs b/LehrerApp.Data/Repositories/AllRepositories.cs
index 9e56096..62f9b63 100644
--- a/LehrerApp.Data/Repositories/AllRepositories.cs
+++ b/LehrerApp.Data/Repositories/AllRepositories.cs
@@ -34,7 +34,9 @@ public class StudentRepository(LiteDbContext db) : IStudentRepository
db.Grades.Count(g => g.StudentId == studentId),
db.ReportGrades.Count(g => g.StudentId == studentId),
db.ParticipationEntries.Count(e => e.StudentId == studentId),
- db.Documentation.FindAll().Count(d => d.Concerns(studentId)));
+ db.Documentation.FindAll().Count(d => d.Concerns(studentId)),
+ db.StudentGroupPlans.FindAll().Count(plan =>
+ plan.Groups.Any(group => group.StudentIds.Contains(studentId))));
public void Save(Student s)
{
s.ExternalIds ??= [];
diff --git a/LehrerApp.Data/Repositories/StudentGroupPlanRepository.cs b/LehrerApp.Data/Repositories/StudentGroupPlanRepository.cs
new file mode 100644
index 0000000..f330526
--- /dev/null
+++ b/LehrerApp.Data/Repositories/StudentGroupPlanRepository.cs
@@ -0,0 +1,55 @@
+using LehrerApp.Core.Interfaces;
+using LehrerApp.Core.Models;
+
+namespace LehrerApp.Data.Repositories;
+
+public class StudentGroupPlanRepository(LiteDbContext db) : IStudentGroupPlanRepository
+{
+ public StudentGroupPlan? GetById(Guid id) => db.StudentGroupPlans.FindById(id);
+
+ public List GetByGroup(Guid groupId) =>
+ db.StudentGroupPlans.Find(p => p.GroupId == groupId)
+ .OrderByDescending(p => p.UpdatedAt).ToList();
+
+ public List GetByStudent(Guid studentId) =>
+ db.StudentGroupPlans.FindAll()
+ .Where(plan => plan.Groups.Any(group => group.StudentIds.Contains(studentId)))
+ .OrderByDescending(plan => plan.UpdatedAt).ToList();
+
+ public void Save(StudentGroupPlan plan)
+ {
+ if (db.Groups.FindById(plan.GroupId) is null)
+ throw new InvalidOperationException("Die zugehörige Lerngruppe existiert nicht.");
+ ArchivedGroupWriteGuard.EnsureActive(db, plan.GroupId);
+ plan.Name = plan.Name?.Trim() ?? "";
+ if (plan.Name.Length == 0)
+ throw new ArgumentException("Bitte einen Namen für die Gruppeneinteilung eingeben.");
+ plan.Groups ??= [];
+ if (plan.Groups.Count == 0)
+ throw new InvalidOperationException("Die Gruppeneinteilung enthält keine Gruppen.");
+ var ids = plan.Groups.SelectMany(g => g.StudentIds ?? []).ToList();
+ if (ids.Count != ids.Distinct().Count())
+ throw new InvalidOperationException("Ein Schüler darf nur in einer Gruppe stehen.");
+ if (db.StudentGroupPlans.Find(p => p.GroupId == plan.GroupId)
+ .Any(p => p.Id != plan.Id && string.Equals(p.Name, plan.Name, StringComparison.OrdinalIgnoreCase)))
+ throw new InvalidOperationException("Eine gespeicherte Einteilung mit diesem Namen gibt es bereits.");
+
+ if (db.StudentGroupPlans.FindById(plan.Id) is { } existing)
+ {
+ if (existing.GroupId != plan.GroupId)
+ throw new InvalidOperationException("Eine Gruppeneinteilung kann nicht in eine andere Lerngruppe verschoben werden.");
+ plan.CreatedAt = existing.CreatedAt;
+ }
+ plan.UpdatedAt = DateTime.UtcNow;
+ db.StudentGroupPlans.Upsert(plan);
+ db.OnChange?.Invoke(nameof(StudentGroupPlan), plan.Id.ToString(), "Save", plan);
+ }
+
+ public void Delete(Guid id)
+ {
+ if (db.StudentGroupPlans.FindById(id) is not { } plan) return;
+ ArchivedGroupWriteGuard.EnsureActive(db, plan.GroupId);
+ db.StudentGroupPlans.Delete(id);
+ db.OnChange?.Invoke(nameof(StudentGroupPlan), id.ToString(), "Delete", null);
+ }
+}
diff --git a/LehrerApp.Desktop.Tests/Fakes.cs b/LehrerApp.Desktop.Tests/Fakes.cs
index 4e2b846..0df1a47 100644
--- a/LehrerApp.Desktop.Tests/Fakes.cs
+++ b/LehrerApp.Desktop.Tests/Fakes.cs
@@ -179,6 +179,22 @@ public class FakeSeatingPlans(List? initial = null) : ISeatingPlanR
public void Restore(Guid trashId) { }
}
+public class FakeStudentGroupPlans : IStudentGroupPlanRepository
+{
+ private readonly List _plans = [];
+ public StudentGroupPlan? GetById(Guid id) => _plans.FirstOrDefault(p => p.Id == id);
+ public List GetByGroup(Guid groupId) =>
+ _plans.Where(p => p.GroupId == groupId).ToList();
+ public List GetByStudent(Guid studentId) =>
+ _plans.Where(p => p.Groups.Any(g => g.StudentIds.Contains(studentId))).ToList();
+ public void Save(StudentGroupPlan plan)
+ {
+ _plans.RemoveAll(p => p.Id == plan.Id);
+ _plans.Add(plan);
+ }
+ public void Delete(Guid id) => _plans.RemoveAll(p => p.Id == id);
+}
+
public class FakeTrash(List? initial = null) : ITrashRepository
{
private readonly List _all = initial ?? [];
diff --git a/LehrerApp.Desktop.Tests/PersonalDataExportServiceTests.cs b/LehrerApp.Desktop.Tests/PersonalDataExportServiceTests.cs
index 0512002..84edeca 100644
--- a/LehrerApp.Desktop.Tests/PersonalDataExportServiceTests.cs
+++ b/LehrerApp.Desktop.Tests/PersonalDataExportServiceTests.cs
@@ -31,8 +31,14 @@ public sealed class PersonalDataExportServiceTests
Assignments = [new SeatAssignment { Row = 1, Column = 2, StudentId = studentId }],
},
]);
+ var groupPlans = new FakeStudentGroupPlans();
+ groupPlans.Save(new StudentGroupPlan
+ {
+ GroupId = groupId, Name = "Projektwoche",
+ Groups = [new StudentGroupPlanGroup { StudentIds = [studentId] }],
+ });
var service = new PersonalDataExportService(students, groups, memberships, grades, results, entries,
- documentation, seatingPlans);
+ documentation, seatingPlans, groupPlans);
var json = service.ExportAsJson(studentId);
@@ -41,6 +47,7 @@ public sealed class PersonalDataExportServiceTests
Assert.Contains("\"Value\": \"2\"", json);
Assert.Contains("\"Sitzplan\": \"Standard\"", json);
Assert.Contains("\"Reihe\": 2", json);
+ Assert.Contains("Projektwoche", json);
}
[Fact]
@@ -53,4 +60,23 @@ public sealed class PersonalDataExportServiceTests
Assert.Throws(() => service.ExportAsJson(Guid.NewGuid()));
}
+
+ [Fact]
+ public void ExportAsJson_EnthaeltGespeichertenPlanAuchNachEndeDerMitgliedschaft()
+ {
+ var student = new Student { FirstName = "Anna", LastName = "Beispiel" };
+ var groupId = Guid.NewGuid();
+ var plans = new FakeStudentGroupPlans();
+ plans.Save(new StudentGroupPlan
+ {
+ GroupId = groupId, Name = "Alte Projektgruppe",
+ Groups = [new StudentGroupPlanGroup { StudentIds = [student.Id] }],
+ });
+ var service = new PersonalDataExportService(
+ new FakeStudents([student]), new FakeGroups([]), new FakeMemberships([]),
+ new FakeGrades(), new FakeResults(), new FakeEntries(), new FakeDocumentation(),
+ new FakeSeatingPlans(), plans);
+
+ Assert.Contains("Alte Projektgruppe", service.ExportAsJson(student.Id));
+ }
}
diff --git a/LehrerApp.Desktop.Tests/StudentGroupGeneratorViewModelTests.cs b/LehrerApp.Desktop.Tests/StudentGroupGeneratorViewModelTests.cs
index f779928..c109ada 100644
--- a/LehrerApp.Desktop.Tests/StudentGroupGeneratorViewModelTests.cs
+++ b/LehrerApp.Desktop.Tests/StudentGroupGeneratorViewModelTests.cs
@@ -7,7 +7,8 @@ namespace LehrerApp.Desktop.Tests;
public sealed class StudentGroupGeneratorViewModelTests
{
private static (StudentGroupGeneratorViewModel Vm, List Students, LearningGroup Group,
- FakeSessions Sessions, FakeEntries Entries) Build(int studentCount = 10)
+ FakeSessions Sessions, FakeEntries Entries) Build(int studentCount = 10,
+ FakeStudentGroupPlans? savedPlans = null)
{
var group = new LearningGroup { Name = "8a", GradingSystem = GradingSystem.Grades1To6 };
var students = Enumerable.Range(1, studentCount).Select(i => new Student
@@ -22,10 +23,77 @@ public sealed class StudentGroupGeneratorViewModelTests
var entries = new FakeEntries();
var vm = new StudentGroupGeneratorViewModel(
new FakeStudents(students), new FakeGroups([group]), new FakeMemberships(memberships),
- sessions, entries, new FakeGrades(), group.Id, new Random(7));
+ sessions, entries, new FakeGrades(), group.Id, new Random(7), savedPlans);
return (vm, students, group, sessions, entries);
}
+ [Fact]
+ public void ManuelleUmverteilung_WirdGespeichertUndSpaeterWiederGeladen()
+ {
+ var plans = new FakeStudentGroupPlans();
+ var (vm, students, group, _, _) = Build(6, plans);
+ vm.TargetGroupCount = 2;
+ vm.CountPriority = 100;
+ vm.GenerateCommand.Execute(null);
+ var source = vm.GeneratedGroups[0];
+ var target = vm.GeneratedGroups[1];
+ var member = source.Members[0];
+
+ Assert.True(vm.MoveStudent(member, target));
+ Assert.False(vm.MoveStudent(member, target));
+ Assert.DoesNotContain(member, source.Members);
+ vm.PlanName = "Projektwoche";
+ vm.SavePlanCommand.Execute(null);
+
+ var saved = Assert.Single(plans.GetByGroup(group.Id));
+ Assert.Equal("Projektwoche", saved.Name);
+ Assert.Contains(member.Id, saved.Groups[1].StudentIds);
+ Assert.False(vm.HasUnsavedChanges);
+
+ vm.GenerateCommand.Execute(null);
+ vm.SelectedSavedPlan = Assert.Single(vm.SavedPlans);
+ vm.LoadSavedPlanCommand.Execute(null);
+ Assert.Contains(vm.GeneratedGroups[1].Members, m => m.Id == member.Id);
+ Assert.DoesNotContain(vm.GeneratedGroups[0].Members, m => m.Id == member.Id);
+ Assert.False(vm.HasUnsavedChanges);
+ Assert.Equal("Projektwoche", vm.PlanName);
+
+ var reopened = new StudentGroupGeneratorViewModel(
+ new FakeStudents(students), new FakeGroups([group]),
+ new FakeMemberships(students.Select(s => new GroupMembership
+ {
+ GroupId = group.Id, StudentId = s.Id,
+ }).ToList()),
+ new FakeSessions([]), new FakeEntries(), new FakeGrades(), group.Id,
+ savedPlans: plans);
+ reopened.SelectedSavedPlan = Assert.Single(reopened.SavedPlans);
+ reopened.LoadSavedPlanCommand.Execute(null);
+ Assert.Contains(reopened.GeneratedGroups[1].Members, m => m.Id == member.Id);
+
+ reopened.PlanName = "Projektwoche aktualisiert";
+ reopened.SavePlanCommand.Execute(null);
+ Assert.Equal("Projektwoche aktualisiert", Assert.Single(plans.GetByGroup(group.Id)).Name);
+ }
+
+ [Fact]
+ public void SpeichernUeberschreibtAusgewaehltenPlanErstNachDemLaden()
+ {
+ var plans = new FakeStudentGroupPlans();
+ var (vm, _, group, _, _) = Build(6, plans);
+ vm.GenerateCommand.Execute(null);
+ vm.PlanName = "Alter Plan";
+ vm.SavePlanCommand.Execute(null);
+
+ vm.GenerateCommand.Execute(null);
+ vm.SelectedSavedPlan = Assert.Single(vm.SavedPlans);
+ vm.PlanName = "Neuer Plan";
+ vm.SavePlanCommand.Execute(null);
+
+ Assert.Equal(2, plans.GetByGroup(group.Id).Count);
+ Assert.Contains(plans.GetByGroup(group.Id), p => p.Name == "Alter Plan");
+ Assert.Contains(plans.GetByGroup(group.Id), p => p.Name == "Neuer Plan");
+ }
+
[Fact]
public void FesteZielgroesse_ErzeugtPassendeAnzahlMitKleinerAusnahme()
{
diff --git a/LehrerApp.Desktop/AppBootstrapper.cs b/LehrerApp.Desktop/AppBootstrapper.cs
index 59c1582..2e1cd74 100644
--- a/LehrerApp.Desktop/AppBootstrapper.cs
+++ b/LehrerApp.Desktop/AppBootstrapper.cs
@@ -156,6 +156,7 @@ public static class AppBootstrapper
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
+ services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
diff --git a/LehrerApp.Desktop/Assets/Animations/LotterySpinWheel.json b/LehrerApp.Desktop/Assets/Animations/LotterySpinWheel.json
new file mode 100644
index 0000000..31cd57a
--- /dev/null
+++ b/LehrerApp.Desktop/Assets/Animations/LotterySpinWheel.json
@@ -0,0 +1 @@
+{"v":"5.7.8","fr":25,"ip":0,"op":25,"w":1080,"h":1080,"nm":"[ pecah Asset - Games Roda Keberuntungan ] EMOS - Juni","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"link-tengah Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[538.46,407.962,0],"ix":2,"l":2},"a":{"a":0,"k":[65.18,65.182,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.586,31.425],[-31.425,-1.586],[1.586,-31.426],[31.425,1.588]],"o":[[1.588,-31.423],[31.426,1.588],[-1.589,31.425],[-31.425,-1.586]],"v":[[-56.9,-2.875],[2.873,-56.901],[56.9,2.873],[-2.874,56.899]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-1.668,33.037],[33.036,1.668],[1.668,-33.037],[-33.036,-1.671]],"o":[[1.67,-33.037],[-33.037,-1.668],[-1.67,33.036],[33.037,1.668]],"v":[[59.817,3.02],[3.021,-59.818],[-59.817,-3.022],[-3.022,59.818]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2196078431372549,0.28627450980392155,0.8196078431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.181,65.182],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-28.146,-8.66],[8.66,-28.146],[28.147,8.66],[-7.333,25.672]],"o":[[28.146,8.661],[-8.66,28.144],[-28.146,-8.661],[8.09,-28.315]],"v":[[14.668,-49.317],[50.116,15.469],[-14.669,49.694],[-50.116,-13.869]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-30.651,-9.431],[-9.431,30.652],[30.651,9.432],[9.431,-30.652]],"o":[[30.652,9.432],[9.432,-30.652],[-30.652,-9.431],[-9.431,30.651]],"v":[[-17.078,55.5],[55.499,17.076],[17.077,-55.501],[-55.5,-17.077]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.181,65.182],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":6,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.55,30.701],[30.701,1.55],[1.55,-30.701],[-30.702,-1.552]],"o":[[1.552,-30.701],[-30.701,-1.55],[-1.552,30.701],[30.701,1.55]],"v":[[55.589,2.806],[2.808,-55.59],[-55.588,-2.809],[-2.808,55.59]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.3686274509803922,0.4470588235294118,0.8941176470588236,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.18,65.182],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Arrow Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[-17]},{"t":7,"s":[10]}],"ix":10,"x":"var $bm_rt;\n$bm_rt = loopOut('cycle', 0);"},"p":{"a":0,"k":[882.284,387.765,0],"ix":2,"l":2},"a":{"a":0,"k":[90.2,66.694,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.184,-20.641],[-20.642,-1.186],[-1.183,20.641],[20.643,1.183]],"o":[[-1.185,20.643],[20.643,1.184],[1.186,-20.644],[-20.643,-1.185]],"v":[[-37.376,-2.145],[-2.144,37.377],[37.375,2.146],[2.145,-37.375]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2196078431372549,0.28627450980392155,0.8196078431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[112.538,63.94],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[25.067,0.563],[26.587,20.289],[-17.345,-0.388],[0.547,-24.392]],"o":[[-17.346,-0.388],[27.47,-19.078],[25.069,0.561],[-0.548,24.392]],"v":[[21.241,44.234],[-61.576,-1.878],[23.223,-44.233],[67.693,1.02]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[30.746,0.688],[0,0],[-30.746,-0.688],[-0.674,30.067]],"o":[[-30.745,-0.691],[0,0],[30.745,0.69],[0.673,-30.068]],"v":[[23.452,-54.441],[-78.574,-2.259],[21.012,54.441],[77.901,1.249]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[90.781,63.95],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":6,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[25.068,0.561],[27.471,-19.078],[-17.346,-0.388],[-0.548,24.392]],"o":[[-17.346,-0.388],[26.587,20.289],[25.067,0.563],[0.547,-24.392]],"v":[[19.891,-44.322],[-64.908,-1.966],[17.908,44.146],[64.361,0.932]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.7764705882352941,0.8117647058823529,0.9725490196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.113,64.038],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[34.766,0.778],[0,0],[-34.765,-0.779],[0.78,-34.767]],"o":[[-34.767,-0.779],[0,0],[34.766,0.778],[-0.778,34.765]],"v":[[23.721,62.949],[-88.859,-2.553],[26.542,-62.948],[88.079,1.412]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.3686274509803922,0.4470588235294118,0.8941176470588236,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[89.109,63.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.695,9.064],[0.067,0.128],[23.997,0.537],[0,0],[0,0],[-34.766,-0.778],[-0.779,34.764]],"o":[[-0.064,-0.128],[-10.177,-19.99],[-34.766,-0.779],[0,0],[0,0],[34.766,0.779],[0.246,-10.926]],"v":[[82.695,-26.194],[80.174,-31.236],[25.451,-65.665],[-89.95,-5.27],[-87.234,0.163],[25.346,65.665],[89.704,4.129]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2196078431372549,0.28627450980392155,0.8196078431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[90.2,66.694],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Outline Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[537.212,407.506,0],"ix":2,"l":2},"a":{"a":0,"k":[413.989,408.491,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[197.712,12.965],[-12.962,197.714],[-197.711,-12.965],[12.963,-197.711]],"o":[[-197.713,-12.963],[12.966,-197.711],[197.714,12.964],[-12.965,197.714]],"v":[[-23.474,357.623],[-357.993,-23.843],[23.473,-358.358],[357.992,23.106]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[217.585,14.268],[14.267,-217.585],[-217.585,-14.266],[-14.266,217.586]],"o":[[-217.587,-14.267],[-14.269,217.585],[217.587,14.268],[14.27,-217.586]],"v":[[25.835,-394.341],[-393.973,-26.202],[-25.835,393.605],[393.972,25.467]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.3686274509803922,0.4470588235294118,0.8941176470588236,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[413.989,408.858],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.731,0],[12.068,-184.032],[-193.212,-12.669],[-7.734,0],[-12.069,184.033],[193.214,12.671]],"o":[[-184.226,0],[-12.666,193.217],[7.749,0.507],[184.22,0],[12.666,-193.214],[-7.749,-0.508]],"v":[[-0.352,-351.171],[-350.406,-22.978],[-22.977,350.407],[0.355,351.171],[350.406,22.978],[22.975,-350.405]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[8.873,0.584],[70.872,80.817],[-7.036,107.259],[-75.153,70.117],[-102.003,0],[-8.874,-0.584],[-70.871,-80.818],[7.036,-107.261],[75.153,-70.116],[101.998,0]],"o":[[-8.858,0],[-107.259,-7.031],[-70.871,-80.819],[6.727,-102.613],[74.815,-69.802],[8.857,0],[107.262,7.032],[70.873,80.82],[-6.727,102.614],[-74.811,69.8],[0,0]],"v":[[0.388,402.436],[-26.333,401.559],[-302.565,265.327],[-401.558,-26.33],[-274.584,-294.19],[-0.39,-402.436],[26.331,-401.558],[302.565,-265.326],[401.559,26.334],[274.585,294.191],[0.389,402.436]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[413.99,408.49],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":6,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.62,0],[11.891,-181.377],[-190.423,-12.486],[-7.623,0],[-11.894,181.377],[190.424,12.488]],"o":[[-181.563,0],[-12.485,190.427],[7.639,0.5],[181.56,0],[12.485,-190.425],[-7.637,-0.5]],"v":[[-0.352,-346.103],[-345.347,-22.646],[-22.645,345.347],[0.356,346.102],[345.348,22.645],[22.644,-345.348]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[8.983,0.589],[71.765,81.838],[-7.123,108.61],[-76.098,71],[-103.29,0],[-8.983,-0.59],[-71.765,-81.835],[7.122,-108.612],[76.098,-71],[103.285,0]],"o":[[-8.967,0],[-108.61,-7.12],[-71.765,-81.835],[6.813,-103.908],[75.757,-70.684],[8.966,0],[108.612,7.122],[71.765,81.837],[-6.813,103.906],[-75.755,70.676],[0,0]],"v":[[0.388,407.505],[-26.664,406.616],[-306.376,268.667],[-406.616,-26.663],[-278.042,-297.896],[-0.389,-407.505],[26.663,-406.617],[306.377,-268.668],[406.617,26.664],[278.043,297.897],[0.39,407.505]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.7764705882352941,0.8117647058823529,0.9725490196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[413.989,408.49],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":6,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.239,0],[11.297,-172.308],[-180.901,-11.86],[-7.241,0],[-11.3,172.308],[180.904,11.864]],"o":[[-172.485,0],[-11.861,180.905],[7.258,0.476],[172.483,0],[11.86,-180.904],[-7.256,-0.475]],"v":[[-0.335,-328.799],[-328.08,-21.516],[-21.514,328.078],[0.337,328.795],[328.081,21.512],[21.511,-328.082]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[8.535,0.56],[68.177,77.746],[-6.766,103.179],[-72.294,67.451],[-98.124,0],[-8.536,-0.559],[-68.177,-77.743],[6.766,-103.182],[72.293,-67.45],[98.12,0]],"o":[[-8.518,0],[-103.179,-6.764],[-68.176,-77.743],[6.472,-98.713],[71.969,-67.149],[8.519,0],[103.181,6.767],[68.176,77.745],[-6.473,98.71],[-71.967,67.142],[0,0]],"v":[[0.368,387.128],[-25.332,386.284],[-291.058,255.232],[-386.286,-25.331],[-264.14,-283.003],[-0.371,-387.132],[25.33,-386.288],[291.058,-255.236],[386.286,25.33],[264.14,283],[0.37,387.128]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":20,"ix":5},"r":1,"bm":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[413.99,408.492],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":6,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Main Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":25,"s":[360]}],"ix":10,"x":"var $bm_rt;\n$bm_rt = loopOut('cycle', 0);"},"p":{"a":0,"k":[537.212,407.512,0],"ix":2,"l":2},"a":{"a":0,"k":[350.883,355.623,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-46.353,-61.15],[0,0]],"o":[[1.387,71.265],[0,0],[0,0]],"v":[[-174.606,-98.409],[-103.746,105.499],[174.606,-105.499]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.7764705882352941,0.8117647058823529,0.9725490196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[176.278,461.123],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.422,-72.897],[0,0]],"o":[[-42.549,61.11],[0,0],[0,0]],"v":[[-111.427,-103.327],[-173.895,103.328],[175.317,96.236]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.3686274509803922,0.4470588235294118,0.8941176470588236,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[175.567,259.388],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-68.24,-20.589],[0,0]],"o":[[46.356,61.149],[0,0],[0,0]],"v":[[-139.176,43.844],[38.007,167.156],[139.176,-167.156]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.3686274509803922,0.4470588235294118,0.8941176470588236,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[211.708,522.779],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-70.332,24.458],[0,0],[0,0]],"o":[[0,0],[0,0],[69.802,21.062]],"v":[[107.923,152.306],[-6.755,-177.686],[-107.923,156.624]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.7764705882352941,0.8117647058823529,0.9725490196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[357.638,533.309],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[30.028,-22.762],[20.426,-29.336],[0,0]],"o":[[-33.765,11.74],[-30.027,22.764],[0,0],[0,0]],"v":[[28.692,-164.997],[-67.629,-113.355],[-143.372,-34.567],[143.372,164.997]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.7764705882352941,0.8117647058823529,0.9725490196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[207.512,190.627],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[46.353,61.15],[0,0]],"o":[[-1.387,-71.266],[0,0],[0,0]],"v":[[174.605,98.406],[103.745,-105.499],[-174.605,105.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.3686274509803922,0.4470588235294118,0.8941176470588236,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[525.489,250.124],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.422,72.898],[0,0]],"o":[[42.549,-61.109],[0,0],[0,0]],"v":[[111.426,103.327],[173.894,-103.327],[-175.316,-96.234]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.7764705882352941,0.8117647058823529,0.9725490196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[526.2,451.858],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[70.332,-24.458],[0,0]],"o":[[-69.802,-21.061],[0,0],[0,0]],"v":[[107.923,-156.626],[-107.923,-152.307],[6.757,177.686]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.3686274509803922,0.4470588235294118,0.8941176470588236,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[344.127,177.937],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-30.028,22.762],[-20.425,29.338],[0,0]],"o":[[33.766,-11.74],[30.027,-22.761],[0,0],[0,0]],"v":[[-28.693,164.996],[67.628,113.353],[143.371,34.565],[-143.371,-164.996]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.3686274509803922,0.4470588235294118,0.8941176470588236,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[494.254,520.619],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[68.241,20.589],[0,0]],"o":[[-46.355,-61.152],[0,0],[0,0]],"v":[[139.175,-43.843],[-38.009,-167.156],[-139.175,167.157]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.7764705882352941,0.8117647058823529,0.9725490196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[490.058,188.467],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":25,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Kaki Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[531.051,890.907,0],"ix":2,"l":2},"a":{"a":0,"k":[423.306,189.343,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[423.056,29.514],[-423.056,29.514],[-423.056,-29.514],[423.056,-29.514]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.3686274509803922,0.4470588235294118,0.8941176470588236,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[423.306,348.921],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.781,171.728],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-3.782,171.728],[0,0],[0,0],[0,0],[0,0]],"v":[[206.108,-159.205],[2.384,-159.205],[-2.384,-159.205],[-206.107,-159.205],[-394.136,159.205],[-2.384,159.205],[2.384,159.205],[394.136,159.205]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2196078431372549,0.28627450980392155,0.8196078431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[430.909,159.455],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":250,"op":25,"st":0,"bm":0,"hidden":0}],"markers":[]}
\ No newline at end of file
diff --git a/LehrerApp.Desktop/Assets/Animations/Teamwork.json b/LehrerApp.Desktop/Assets/Animations/Teamwork.json
new file mode 100644
index 0000000..a7acd0c
--- /dev/null
+++ b/LehrerApp.Desktop/Assets/Animations/Teamwork.json
@@ -0,0 +1 @@
+{"v":"5.6.6","fr":60,"ip":60,"op":120,"w":600,"h":600,"nm":"development and submittals","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"person-top-face-outlinne Outlines","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.415,-16.001,0],"ix":2},"a":{"a":0,"k":[33.313,42.52,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.515,0],[2.745,1.593],[0,10.18],[-5.843,10.003],[-8.233,4.781],[-6.463,-3.719],[0,-10.181],[5.754,-10.093],[8.234,-4.692]],"o":[[-3.276,0],[-6.551,-3.718],[0,-9.561],[5.754,-10.004],[8.853,-5.046],[6.551,3.718],[0,9.561],[-5.843,10.092],[-5.223,2.921]],"v":[[-13.102,41.52],[-22.221,39.13],[-32.313,17.529],[-23.283,-12.836],[-1.505,-35.765],[22.22,-37.801],[32.313,-16.2],[23.372,14.165],[1.593,37.094]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[2.214,0],[4.161,-2.301],[5.312,-9.118],[0,-8.41],[-4.516,-2.656],[-6.816,3.895],[-0.089,0],[-5.222,9.119],[0,8.498],[4.603,2.656]],"o":[[-3.452,0],[-7.348,4.25],[-5.312,9.118],[0,7.879],[4.514,2.656],[0.089,0],[7.17,-4.16],[5.224,-9.118],[0,-7.88],[-1.682,-0.973]],"v":[[13.013,-33.995],[1.505,-30.454],[-18.06,-9.738],[-26.205,17.529],[-19.21,33.818],[-1.594,31.782],[-1.416,31.693],[17.882,11.066],[26.027,-16.2],[18.945,-32.49]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33.313,42.52],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"person-top-face-face Outlines","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.324,-15.34,0],"ix":2},"a":{"a":0,"k":[29.464,39.069,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-8.056,4.692],[-5.223,9.119],[0,9.295],[5.312,3.099],[8.056,-4.692],[5.223,-9.207],[0,-9.384],[-5.312,-3.098]],"o":[[8.056,-4.692],[5.312,-9.118],[0,-9.296],[-5.312,-3.098],[-8.056,4.692],[-5.312,9.119],[0,9.296],[5.312,2.833]],"v":[[0,33.773],[20.627,11.995],[29.214,-16.775],[20.627,-35.722],[0,-33.684],[-20.627,-11.818],[-29.214,17.041],[-20.627,35.986]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.464,39.07],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"person-top-body-front-outline Outlines","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.461,58.935,0],"ix":2},"a":{"a":0,"k":[53.718,49.646,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.531,0],[0.443,0.266],[0,1.151],[-8.764,15.05],[-13.633,7.967],[-10.358,-5.932],[-0.886,-14.431],[0.974,-0.531],[0,0]],"o":[[-0.62,0],[-0.973,-0.531],[0.886,-14.784],[9.649,-16.732],[14.253,-8.233],[9.471,5.488],[0.088,1.151],[0,0],[-0.62,0.354]],"v":[[-49.619,48.646],[-51.214,48.204],[-52.719,45.371],[-37.846,-0.929],[-1.638,-39.173],[36.607,-42.714],[52.63,-11.906],[51.125,-9.074],[-48.025,48.204]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[4.249,0],[7.437,-4.249],[9.119,-15.758],[1.682,-12.305],[0,0],[7.171,4.161]],"o":[[-6.286,0],[-12.837,7.436],[-7.082,12.306],[0,0],[-1.063,-11.332],[-3.364,-1.948]],"v":[[22.089,-40.147],[1.372,-33.773],[-32.622,2.169],[-46.079,39.971],[46.257,-13.324],[33.508,-37.314]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[53.718,49.646],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"person-top-body-front-face Outlines","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.412,59.074,0],"ix":2},"a":{"a":0,"k":[52.076,48.004,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.233,4.781],[13.191,-7.702],[9.03,-15.581],[0.797,-14.784],[0,0]],"o":[[-9.384,-5.4],[-13.722,7.879],[-8.233,14.253],[0,0],[-0.885,-13.81]],"v":[[35.146,-40.104],[0,-36.563],[-35.146,0.531],[-49.576,45.504],[49.576,-11.775]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.019999999626,0.783999992819,0.877999997606,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[52.076,48.004],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"person-top-head-outline Outlines","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[57.083,-22.464,0],"ix":2},"a":{"a":0,"k":[41.325,48.982,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.62,0],[0.443,0.354],[0,0],[0,1.151],[-0.974,0.443],[-0.885,-0.531],[0,0],[-0.089,-1.062],[0.886,-0.531]],"o":[[-0.531,0],[0,0],[-0.975,-0.531],[0,-1.152],[0.885,-0.442],[0,0],[0.973,0.531],[0,1.063],[-0.353,0.354]],"v":[[16.245,47.982],[14.74,47.54],[-6.506,35.323],[-8.1,32.579],[-6.418,29.922],[-3.497,30.011],[17.662,42.228],[19.255,44.795],[17.838,47.451]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.062,0],[0.442,0.354],[0,0],[-6.197,17.882],[-18.502,-2.213],[-9.56,-5.843],[-1.328,-0.797],[0.797,-1.505],[1.417,0.797],[9.296,-16.112],[-11.509,-7.259],[0.885,-1.417]],"o":[[-0.532,0],[0,0],[-10.623,-6.374],[7.525,-21.601],[4.869,0.62],[1.949,1.239],[1.505,0.797],[-0.797,1.505],[-12.04,-6.285],[-9.295,16.112],[1.416,0.886],[-0.443,1.062]],"v":[[-4.382,46.035],[-5.887,45.592],[-27.134,33.375],[-34.128,-5.4],[10.579,-45.769],[33.33,-34.437],[38.377,-31.339],[39.528,-27.178],[35.455,-25.939],[-1.638,-3.187],[-2.877,40.28],[-1.903,44.441]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.708,0],[6.197,-18.059],[-7.879,-4.781],[0,0],[-7.26,12.571],[-11.774,2.745],[2.744,0.355]],"o":[[-14.518,0],[-5.223,14.961],[0,0],[-3.276,-11.509],[7.347,-12.66],[-5.311,-3.187],[-0.797,0.089]],"v":[[7.746,-39.838],[-28.285,-3.453],[-23.947,27.975],[-15.005,33.11],[-6.772,-6.374],[23.681,-33.287],[9.959,-39.838]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.325,48.982],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"person-top-head-face Outlines","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[50.572,-23.126,0],"ix":2},"a":{"a":0,"k":[43.717,45.886,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-27.975,-14.607],[5.843,0.708],[-24.346,-14.695],[0,0]],"o":[[-6.462,-3.718],[-28.861,-3.541],[0,0],[-26.736,-16.909]],"v":[[43.467,-28.02],[16.732,-42.095],[-19.122,31.295],[2.125,43.6]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[22.84,45.636],[1.593,33.42]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[43.717,45.887],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"person-top-body-outline Outlines","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[55.752,53.363,0],"ix":2},"a":{"a":0,"k":[57.259,55.223,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.442,0],[0.443,0.354],[0,0],[0,1.151],[-28.064,16.997],[-10.712,-1.416],[-8.41,-5.134],[-1.947,-1.062],[0.797,-1.506],[1.506,0.797],[13.28,-7.348],[2.302,-31.162],[0.885,-0.443]],"o":[[-0.531,0],[0,0],[-1.062,-0.619],[2.567,-33.552],[7.347,-3.984],[7.702,0.974],[2.213,1.329],[1.417,0.797],[-0.796,1.416],[-9.295,-4.869],[-25.938,15.758],[-0.089,1.062],[-0.443,0.266]],"v":[[-31.914,54.223],[-33.419,53.782],[-54.667,41.564],[-56.259,38.643],[-5.178,-45.813],[22.53,-52.807],[48.116,-40.856],[54.311,-37.137],[55.462,-32.976],[51.302,-31.738],[19.077,-28.285],[-28.904,51.391],[-30.497,53.87]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[3.01,-30.542],[0,0],[-26.647,16.2],[0,0],[-7.524,0.708],[4.072,0.532],[6.375,-3.452]],"o":[[0,0],[3.984,-31.87],[0.088,0],[5.844,-3.187],[-5.223,-3.01],[-9.03,-1.062],[-25.318,15.493]],"v":[[-49.975,37.226],[-34.57,46.079],[15.979,-33.596],[16.068,-33.686],[36.34,-40.768],[21.733,-46.787],[-2.169,-40.59]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.259,55.223],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"person-top-body-face Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[286.029]},{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":60,"s":[238.284]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":120,"s":[357.981]},{"t":180,"s":[286.029]}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[234.238]},{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":60,"s":[379.468]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":120,"s":[310.28]},{"t":180,"s":[234.238]}],"ix":4}},"a":{"a":0,"k":[55.484,53.493,0],"ix":1},"s":{"a":0,"k":[67,67,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-27.444,16.644],[-12.04,-6.286],[9.029,1.062],[7.879,-4.337],[2.479,-31.87],[0,0]],"o":[[11.332,-6.197],[-8.765,-5.046],[-9.207,-1.151],[-27.444,16.644],[0,0],[2.479,-31.782]],"v":[[17.839,-30.986],[52.984,-34.526],[22.353,-49.841],[-3.409,-43.292],[-52.984,38.775],[-31.738,50.992]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.019999999626,0.783999992819,0.877999997606,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.484,53.493],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"person-top-face-outlinne Outlines 2","parent":16,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.406,-15.975,0],"ix":2},"a":{"a":0,"k":[33.313,42.52,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.515,0],[2.745,1.593],[0,10.18],[-5.843,10.003],[-8.233,4.781],[-6.463,-3.719],[0,-10.181],[5.754,-10.093],[8.234,-4.692]],"o":[[-3.276,0],[-6.551,-3.718],[0,-9.561],[5.754,-10.004],[8.853,-5.046],[6.551,3.718],[0,9.561],[-5.843,10.092],[-5.223,2.921]],"v":[[-13.102,41.52],[-22.221,39.13],[-32.313,17.529],[-23.283,-12.836],[-1.505,-35.765],[22.22,-37.801],[32.313,-16.2],[23.372,14.165],[1.593,37.094]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[2.214,0],[4.161,-2.301],[5.312,-9.118],[0,-8.41],[-4.516,-2.656],[-6.816,3.895],[-0.089,0],[-5.222,9.119],[0,8.498],[4.603,2.656]],"o":[[-3.452,0],[-7.348,4.25],[-5.312,9.118],[0,7.879],[4.514,2.656],[0.089,0],[7.17,-4.16],[5.224,-9.118],[0,-7.88],[-1.682,-0.973]],"v":[[13.013,-33.995],[1.505,-30.454],[-18.06,-9.738],[-26.205,17.529],[-19.21,33.818],[-1.594,31.782],[-1.416,31.693],[17.882,11.066],[26.027,-16.2],[18.945,-32.49]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33.313,42.52],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"person-top-face-face Outlines 2","parent":16,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.315,-15.313,0],"ix":2},"a":{"a":0,"k":[29.464,39.069,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-8.056,4.692],[-5.223,9.119],[0,9.295],[5.312,3.099],[8.056,-4.692],[5.223,-9.207],[0,-9.384],[-5.312,-3.098]],"o":[[8.056,-4.692],[5.312,-9.118],[0,-9.296],[-5.312,-3.098],[-8.056,4.692],[-5.312,9.119],[0,9.296],[5.312,2.833]],"v":[[0,33.773],[20.627,11.995],[29.214,-16.775],[20.627,-35.722],[0,-33.684],[-20.627,-11.818],[-29.214,17.041],[-20.627,35.986]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.464,39.07],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"person-top-body-front-outline Outlines 2","parent":16,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.451,58.962,0],"ix":2},"a":{"a":0,"k":[53.718,49.646,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.531,0],[0.443,0.266],[0,1.151],[-8.764,15.05],[-13.633,7.967],[-10.358,-5.932],[-0.886,-14.431],[0.974,-0.531],[0,0]],"o":[[-0.62,0],[-0.973,-0.531],[0.886,-14.784],[9.649,-16.732],[14.253,-8.233],[9.471,5.488],[0.088,1.151],[0,0],[-0.62,0.354]],"v":[[-49.619,48.646],[-51.214,48.204],[-52.719,45.371],[-37.846,-0.929],[-1.638,-39.173],[36.607,-42.714],[52.63,-11.906],[51.125,-9.074],[-48.025,48.204]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[4.249,0],[7.437,-4.249],[9.119,-15.758],[1.682,-12.305],[0,0],[7.171,4.161]],"o":[[-6.286,0],[-12.837,7.436],[-7.082,12.306],[0,0],[-1.063,-11.332],[-3.364,-1.948]],"v":[[22.089,-40.147],[1.372,-33.773],[-32.622,2.169],[-46.079,39.971],[46.257,-13.324],[33.508,-37.314]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[53.718,49.646],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"person-top-body-front-face Outlines 2","parent":16,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.403,59.101,0],"ix":2},"a":{"a":0,"k":[52.076,48.004,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.233,4.781],[13.191,-7.702],[9.03,-15.581],[0.797,-14.784],[0,0]],"o":[[-9.384,-5.4],[-13.722,7.879],[-8.233,14.253],[0,0],[-0.885,-13.81]],"v":[[35.146,-40.104],[0,-36.563],[-35.146,0.531],[-49.576,45.504],[49.576,-11.775]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.019999999626,0.783999992819,0.877999997606,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[52.076,48.004],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"person-top-head-outline Outlines 2","parent":16,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[57.074,-22.437,0],"ix":2},"a":{"a":0,"k":[41.325,48.982,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.62,0],[0.443,0.354],[0,0],[0,1.151],[-0.974,0.443],[-0.885,-0.531],[0,0],[-0.089,-1.062],[0.886,-0.531]],"o":[[-0.531,0],[0,0],[-0.975,-0.531],[0,-1.152],[0.885,-0.442],[0,0],[0.973,0.531],[0,1.063],[-0.353,0.354]],"v":[[16.245,47.982],[14.74,47.54],[-6.506,35.323],[-8.1,32.579],[-6.418,29.922],[-3.497,30.011],[17.662,42.228],[19.255,44.795],[17.838,47.451]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.062,0],[0.442,0.354],[0,0],[-6.197,17.882],[-18.502,-2.213],[-9.56,-5.843],[-1.328,-0.797],[0.797,-1.505],[1.417,0.797],[9.296,-16.112],[-11.509,-7.259],[0.885,-1.417]],"o":[[-0.532,0],[0,0],[-10.623,-6.374],[7.525,-21.601],[4.869,0.62],[1.949,1.239],[1.505,0.797],[-0.797,1.505],[-12.04,-6.285],[-9.295,16.112],[1.416,0.886],[-0.443,1.062]],"v":[[-4.382,46.035],[-5.887,45.592],[-27.134,33.375],[-34.128,-5.4],[10.579,-45.769],[33.33,-34.437],[38.377,-31.339],[39.528,-27.178],[35.455,-25.939],[-1.638,-3.187],[-2.877,40.28],[-1.903,44.441]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.708,0],[6.197,-18.059],[-7.879,-4.781],[0,0],[-7.26,12.571],[-11.774,2.745],[2.744,0.355]],"o":[[-14.518,0],[-5.223,14.961],[0,0],[-3.276,-11.509],[7.347,-12.66],[-5.311,-3.187],[-0.797,0.089]],"v":[[7.746,-39.838],[-28.285,-3.453],[-23.947,27.975],[-15.005,33.11],[-6.772,-6.374],[23.681,-33.287],[9.959,-39.838]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.325,48.982],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"person-top-head-face Outlines 2","parent":16,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[50.563,-23.099,0],"ix":2},"a":{"a":0,"k":[43.717,45.886,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-27.975,-14.607],[5.843,0.708],[-24.346,-14.695],[0,0]],"o":[[-6.462,-3.718],[-28.861,-3.541],[0,0],[-26.736,-16.909]],"v":[[43.467,-28.02],[16.732,-42.095],[-19.122,31.295],[2.125,43.6]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[22.84,45.636],[1.593,33.42]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[43.717,45.887],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"person-top-body-outline Outlines 2","parent":16,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[55.743,53.39,0],"ix":2},"a":{"a":0,"k":[57.259,55.223,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.442,0],[0.443,0.354],[0,0],[0,1.151],[-28.064,16.997],[-10.712,-1.416],[-8.41,-5.134],[-1.947,-1.062],[0.797,-1.506],[1.506,0.797],[13.28,-7.348],[2.302,-31.162],[0.885,-0.443]],"o":[[-0.531,0],[0,0],[-1.062,-0.619],[2.567,-33.552],[7.347,-3.984],[7.702,0.974],[2.213,1.329],[1.417,0.797],[-0.796,1.416],[-9.295,-4.869],[-25.938,15.758],[-0.089,1.062],[-0.443,0.266]],"v":[[-31.914,54.223],[-33.419,53.782],[-54.667,41.564],[-56.259,38.643],[-5.178,-45.813],[22.53,-52.807],[48.116,-40.856],[54.311,-37.137],[55.462,-32.976],[51.302,-31.738],[19.077,-28.285],[-28.904,51.391],[-30.497,53.87]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[3.01,-30.542],[0,0],[-26.647,16.2],[0,0],[-7.524,0.708],[4.072,0.532],[6.375,-3.452]],"o":[[0,0],[3.984,-31.87],[0.088,0],[5.844,-3.187],[-5.223,-3.01],[-9.03,-1.062],[-25.318,15.493]],"v":[[-49.975,37.226],[-34.57,46.079],[15.979,-33.596],[16.068,-33.686],[36.34,-40.768],[21.733,-46.787],[-2.169,-40.59]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.259,55.223],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"person-right-body-face Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[357.981]},{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":60,"s":[286.291]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":120,"s":[238.284]},{"t":180,"s":[357.981]}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[310.28]},{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":60,"s":[233.9]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":120,"s":[379.468]},{"t":180,"s":[310.28]}],"ix":4}},"a":{"a":0,"k":[55.484,53.492,0],"ix":1},"s":{"a":0,"k":[67,67,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-27.354,16.643],[-12.04,-6.286],[9.03,1.062],[7.879,-4.337],[2.389,-31.871],[0,0]],"o":[[11.243,-6.197],[-8.764,-5.046],[-9.206,-1.151],[-27.444,16.644],[0,0],[2.478,-31.783]],"v":[[17.838,-30.986],[52.984,-34.526],[22.353,-49.841],[-3.408,-43.292],[-52.984,38.775],[-31.737,50.992]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.019999999626,0.783999992819,0.877999997606,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.484,53.493],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"person-left-face-outline Outlines","parent":24,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.28,-16.046,0],"ix":2},"a":{"a":0,"k":[33.268,42.563,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.603,0],[2.745,1.594],[0,10.181],[-5.754,10.002],[-8.233,4.781],[-6.463,-3.807],[0,-10.18],[5.754,-10.004],[8.233,-4.78],[0,0]],"o":[[-3.276,0],[-6.551,-3.718],[0,-9.561],[5.754,-10.004],[8.764,-5.046],[6.551,3.717],[0,9.561],[-5.755,10.002],[0,0],[-4.957,2.921]],"v":[[-13.057,41.563],[-22.176,39.173],[-32.269,17.572],[-23.327,-12.791],[-1.549,-35.722],[22.177,-37.756],[32.269,-16.157],[23.328,14.21],[1.55,37.137],[1.461,37.137]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[2.302,0],[4.161,-2.389],[5.224,-9.118],[0,-8.498],[-4.604,-2.656],[-6.905,3.983],[-5.224,9.03],[0,8.499],[4.603,2.656]],"o":[[-3.452,0],[-7.348,4.25],[-5.312,9.118],[0,7.879],[4.515,2.567],[7.436,-4.338],[5.223,-9.118],[0,-7.879],[-1.77,-1.062]],"v":[[13.058,-33.951],[1.55,-30.321],[-18.016,-9.605],[-26.161,17.661],[-19.077,33.951],[-1.46,31.915],[18.105,11.199],[26.249,-16.068],[19.167,-32.357]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.045,34.482],[0.133,34.482]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33.268,42.563],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"person-left-face-face Outlines","parent":24,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.368,-15.297,0],"ix":2},"a":{"a":0,"k":[29.508,39.025,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-8.056,4.604],[-5.311,9.118],[0,9.296],[5.312,3.098],[8.145,-4.603],[5.223,-9.207],[0,-9.296],[-5.312,-3.099]],"o":[[8.056,-4.691],[5.312,-9.119],[0,-9.295],[-5.311,-3.011],[-8.056,4.692],[-5.312,9.118],[0,9.295],[5.223,2.921]],"v":[[-0.044,33.729],[20.671,11.952],[29.258,-16.821],[20.671,-35.765],[-0.044,-33.73],[-20.672,-11.863],[-29.258,16.91],[-20.672,35.854]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.508,39.026],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"person-left-body-front-outline Outlines","parent":24,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.318,58.936,0],"ix":2},"a":{"a":0,"k":[53.674,49.646,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.531,0],[0.443,0.353],[0,1.151],[-8.764,15.226],[-13.632,7.879],[-10.358,-5.932],[-0.797,-14.43],[0.973,-0.531],[0,0]],"o":[[-0.531,0],[-0.974,-0.62],[0.797,-14.696],[9.65,-16.732],[14.254,-8.234],[9.384,5.399],[0.088,1.151],[0,0],[-0.443,0.353]],"v":[[-49.576,48.646],[-51.169,48.204],[-52.674,45.371],[-37.802,-1.018],[-1.594,-39.173],[36.651,-42.714],[52.586,-11.907],[51.081,-9.074],[-48.071,48.204]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[4.162,0],[7.437,-4.25],[9.119,-15.758],[1.682,-12.216],[0,0],[7.171,4.16]],"o":[[-6.285,0],[-12.836,7.437],[-7.082,12.305],[0,0],[-1.062,-11.332],[-3.364,-1.77]],"v":[[22.22,-40.236],[1.505,-33.862],[-32.49,2.081],[-45.946,39.882],[46.389,-13.412],[33.641,-37.403]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[53.674,49.646],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"person-left-body-front-face Outlines","parent":24,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.321,59.071,0],"ix":2},"a":{"a":0,"k":[52.076,48.003,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.233,4.78],[13.191,-7.702],[9.03,-15.581],[0.886,-14.784],[0,0]],"o":[[-9.384,-5.4],[-13.722,7.968],[-8.232,14.253],[0,0],[-0.797,-13.81]],"v":[[35.146,-40.103],[0,-36.562],[-35.146,0.532],[-49.576,45.503],[49.576,-11.774]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.019999999626,0.783999992819,0.877999997606,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[52.076,48.003],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"person-left-head-outlinne Outlines","parent":24,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[57.077,-22.418,0],"ix":2},"a":{"a":0,"k":[41.413,49.027,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.531,0],[0.443,0.265],[0,0],[0,0.974],[-0.797,0.62],[-0.975,-0.62],[0,0],[0,-1.062],[0.885,-0.62]],"o":[[-0.531,0],[0,0],[-0.886,-0.531],[-0.089,-1.062],[0.974,-0.708],[0,0],[0.885,0.531],[0,1.063],[-0.62,0.265]],"v":[[16.245,48.027],[14.74,47.584],[-6.418,35.367],[-7.923,32.888],[-6.684,30.232],[-3.319,30.055],[17.927,42.272],[19.432,44.839],[18.016,47.496]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.062,0],[0.443,0.354],[0,0],[-6.197,17.883],[-18.414,-2.214],[-9.649,-5.843],[-1.417,-0.797],[0.796,-1.504],[1.417,0.708],[9.295,-16.111],[-11.509,-7.26],[0.885,-1.505]],"o":[[-0.532,0],[0,0],[-10.624,-6.374],[7.525,-21.6],[4.869,0.619],[1.948,1.239],[1.505,0.797],[-0.797,1.417],[-12.04,-6.374],[-9.295,16.113],[1.416,0.886],[-0.619,0.974]],"v":[[-4.47,45.99],[-5.976,45.548],[-27.222,33.331],[-34.216,-5.445],[10.491,-45.813],[33.331,-34.482],[38.466,-31.383],[39.617,-27.223],[35.544,-25.983],[-1.549,-3.232],[-2.788,40.236],[-1.815,44.485]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.62,0],[6.197,-18.06],[-7.879,-4.691],[0,0],[-7.259,12.571],[-11.774,2.745],[2.744,0.354]],"o":[[-14.519,0],[-5.223,14.873],[0,0],[-3.276,-11.509],[7.348,-12.659],[-5.312,-3.099],[-0.796,0.089]],"v":[[7.746,-39.882],[-28.285,-3.497],[-23.947,27.93],[-15.005,33.065],[-6.861,-6.418],[23.593,-33.331],[9.871,-39.882]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.413,49.027],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"person-left-head-face Outlines","parent":24,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[50.481,-23.17,0],"ix":2},"a":{"a":0,"k":[43.717,45.93,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-27.886,-14.607],[5.842,0.797],[-24.346,-14.696],[0,0]],"o":[[-6.463,-3.718],[-28.772,-3.629],[0,0],[-26.647,-16.82]],"v":[[43.467,-27.975],[16.732,-42.051],[-19.122,31.339],[2.124,43.556]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[22.84,45.68],[1.593,33.463]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[43.717,45.93],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"person-left-body-outline Outlines","parent":24,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[55.661,53.402,0],"ix":2},"a":{"a":0,"k":[57.259,55.179,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.442,0],[0.443,0.265],[0,0],[-0.088,1.238],[-27.975,16.997],[-10.8,-1.416],[-8.41,-5.134],[-1.859,-1.15],[0.797,-1.505],[1.416,0.797],[13.279,-7.26],[2.39,-31.161],[0.885,-0.53]],"o":[[-0.531,0],[0,0],[-1.062,-0.62],[2.479,-33.553],[7.348,-4.073],[7.702,0.973],[2.213,1.328],[1.505,0.797],[-0.797,1.504],[-9.296,-4.869],[-25.939,15.758],[-0.089,1.062],[-0.442,0.089]],"v":[[-31.915,54.179],[-33.42,53.825],[-54.667,41.608],[-56.172,38.687],[-5.18,-45.769],[22.53,-52.763],[48.114,-40.812],[54.312,-37.006],[55.463,-32.844],[51.39,-31.605],[19.167,-28.152],[-28.905,51.523],[-30.499,54.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[2.921,-30.543],[0,0],[-26.647,16.201],[0,0],[-7.525,0.797],[4.073,0.532],[6.463,-3.454]],"o":[[0,0],[3.984,-31.959],[0,0],[5.843,-3.188],[-5.223,-3.01],[-9.118,-1.151],[-25.23,15.58]],"v":[[-49.886,37.182],[-34.483,46.034],[16.068,-33.641],[16.157,-33.729],[36.429,-40.812],[21.822,-46.832],[-2.169,-40.634]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.259,55.179],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"person-left-body-face Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[238.284]},{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":60,"s":[357.981]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":120,"s":[286.029]},{"t":180,"s":[238.284]}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.66],"y":[0]},"t":0,"s":[379.468]},{"i":{"x":[0.12],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":60,"s":[310.28]},{"i":{"x":[0.34],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":120,"s":[234.238]},{"t":180,"s":[379.468]}],"ix":4}},"a":{"a":0,"k":[55.484,53.536,0],"ix":1},"s":{"a":0,"k":[67,67,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-27.443,16.643],[-12.04,-6.285],[9.029,1.062],[7.88,-4.427],[2.39,-31.87],[0,0]],"o":[[11.332,-6.197],[-8.764,-5.046],[-9.208,-1.152],[-27.443,16.643],[0,0],[2.389,-31.87]],"v":[[17.838,-31.029],[52.984,-34.569],[22.354,-49.884],[-3.409,-43.245],[-52.984,38.82],[-31.737,51.036]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.019999999626,0.783999992819,0.877999997606,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.484,53.536],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"wheel-handle-top Outlines","parent":28,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[24.637,-6.616,0],"ix":2},"a":{"a":0,"k":[4.099,18.617,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.771,0],[0,1.771],[0,0],[-1.771,0],[0,-1.682],[0,0]],"o":[[-1.682,0],[0,0],[0,-1.682],[1.682,0],[0,0],[0,1.682]],"v":[[0,17.617],[-3.099,14.518],[-3.099,-14.519],[0,-17.617],[3.099,-14.519],[3.099,14.518]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[4.099,18.617],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"wheel-handle-left Outlines","parent":28,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-0.598,71.427,0],"ix":2},"a":{"a":0,"k":[13.571,20.078,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.062,0],[0.443,0.265],[-0.797,1.416],[0,0],[-1.416,-0.797],[0.796,-1.506],[0,0]],"o":[[-0.531,0],[-1.505,-0.885],[0,0],[0.885,-1.504],[1.505,0.885],[0,0],[-0.531,0.885]],"v":[[-9.118,19.078],[-10.623,18.635],[-11.774,14.474],[6.463,-17.131],[10.624,-18.281],[11.775,-14.031],[-6.462,17.573]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[13.571,20.078],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"wheel-handle-right Outlines","parent":28,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[49.689,43.223,0],"ix":2},"a":{"a":0,"k":[13.837,9.676,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.062,0],[0.443,0.265],[0,0],[-0.886,1.416],[-1.417,-0.797],[0,0],[0.797,-1.505]],"o":[[-0.531,0],[0,0],[-1.504,-0.797],[0.797,-1.506],[0,0],[1.505,0.885],[-0.62,0.885]],"v":[[9.384,8.676],[7.879,8.234],[-10.801,-2.567],[-11.951,-6.727],[-7.79,-7.879],[10.889,2.922],[12.04,7.171]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[13.837,9.676],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"wheel-middle Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[301.594,279.462,0],"ix":2},"a":{"a":0,"k":[24.637,31.188,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,17.667]},"o":{"x":[0.88,0.88,0.88],"y":[0,0,0]},"t":60,"s":[100,100,100]},{"i":{"x":[0.12,0.12,0.12],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,16.667]},"t":90,"s":[0,0,100]},{"t":120,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.364,0],[2.124,1.152],[0,7.525],[-4.16,7.26],[-5.931,3.365],[-4.869,-2.744],[0,-7.525],[4.161,-7.171],[5.931,-3.453]],"o":[[-2.479,0],[-4.869,-2.833],[0,-6.905],[4.161,-7.17],[6.463,-3.718],[4.869,2.833],[0,6.905],[-4.161,7.171],[-3.718,2.125]],"v":[[-9.207,30.188],[-16.112,28.417],[-23.637,12.394],[-17.175,-9.473],[-1.505,-25.939],[16.112,-27.444],[23.637,-11.42],[17.174,10.358],[1.505,26.913]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,24.256],[0.088,24.256]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[1.417,0],[2.744,-1.681],[3.63,-6.285],[0,-5.842],[-2.922,-1.683],[-4.516,2.655],[-3.63,6.285],[0,5.843],[2.921,1.682]],"o":[[-2.302,0],[-5.046,2.922],[-3.63,6.286],[0,5.224],[2.921,1.681],[5.045,-2.922],[3.629,-6.286],[0,-5.223],[-1.151,-0.708]],"v":[[9.207,-23.017],[1.593,-20.539],[-11.863,-6.286],[-17.44,12.482],[-12.925,23.195],[-1.416,21.69],[12.04,7.437],[17.617,-11.332],[13.102,-22.043]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.4,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.637,31.188],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"base-top-outliiine","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300.001,351.377,0],"ix":2},"a":{"a":0,"k":[160.25,100.487,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[34.557,0],[34.083,-19.644],[0,-19.172],[-33.373,-19.172],[-67.693,39.054],[0,19.172],[33.373,19.172]],"o":[[-34.793,0],[-33.609,19.409],[0,19.172],[67.692,39.054],[33.61,-19.408],[0,-19.172],[-33.846,-19.644]],"v":[[0,-84.379],[-103.669,-54.794],[-154.083,3.195],[-103.669,61.183],[103.432,61.183],[153.846,3.195],[103.432,-54.794]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[35.739,0],[35.03,20.12],[0,21.538],[-35.503,20.356],[-69.586,-40.236],[0,-21.538],[35.503,-20.354]],"o":[[-35.74,0],[-35.503,-20.59],[0,-21.538],[69.822,-40.236],[35.503,20.592],[0,21.538],[-35.03,20.118]],"v":[[0,96.923],[-106.509,66.626],[-160,3.195],[-106.509,-60.001],[106.509,-60.001],[160,3.195],[106.509,66.39]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[160.25,100.487],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"base-top-face 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300.711,354.749,0],"ix":2},"a":{"a":0,"k":[157.41,100.842,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[34.556,19.882],[69.35,-40],[0,-20.356],[-34.792,-19.882],[-69.35,40],[0,20.355]],"o":[[-69.35,-40],[-34.556,20.118],[0,20.355],[69.35,40],[34.556,-20.119],[-0.237,-20.356]],"v":[[105.089,-60.592],[-105.089,-60.592],[-157.16,0],[-105.089,60.592],[105.089,60.592],[157.16,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[157.41,100.842],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"base-bottom-outline 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[299.646,409.837,0],"ix":2},"a":{"a":0,"k":[159.895,58.356,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.047,13.729],[-29.822,-17.278],[-67.692,39.053],[-3.313,17.278],[22.959,-13.491],[69.586,40.237]],"o":[[3.314,17.278],[67.692,39.053],[29.822,-17.278],[-8.047,13.729],[-69.586,40.237],[-23.432,-13.491]],"v":[[-153.018,-32.782],[-103.077,19.054],[104.024,19.054],[153.964,-32.782],[107.1,8.166],[-105.917,8.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[35.739,0],[35.03,20.119],[0,21.302],[0,0],[-1.42,0],[0,-1.42],[-33.373,-19.171],[-67.692,39.054],[0,19.172],[-1.42,0],[0,-1.42],[0,0],[35.503,-20.355]],"o":[[-35.74,0],[-35.503,-20.592],[0,0],[0,-1.657],[1.42,0],[0,19.172],[67.692,39.054],[33.61,-19.408],[0,-1.657],[1.421,0],[0,0],[0,21.539],[-34.319,20.119]],"v":[[0.355,54.32],[-106.154,24.024],[-159.645,-39.173],[-159.645,-55.267],[-156.805,-58.107],[-153.964,-55.267],[-103.55,2.722],[103.55,2.722],[153.964,-55.267],[156.804,-58.107],[159.645,-55.267],[159.645,-39.173],[106.154,24.024]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[159.895,58.356],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"base-bottom-face 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300.002,412.914,0],"ix":2},"a":{"a":0,"k":[157.41,58.593,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[34.556,-19.882],[69.349,40],[0,20.356],[0,0],[-34.793,-19.882],[-69.35,40],[0,20.355],[0,0]],"o":[[-69.35,40],[-34.556,-20.119],[0,0],[0,20.355],[69.349,40],[34.556,-20.118],[0,0],[-0.236,20.356]],"v":[[105.09,2.249],[-105.088,2.249],[-157.159,-58.343],[-157.159,-42.249],[-105.088,18.344],[105.09,18.344],[157.159,-42.249],[157.159,-58.343]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[157.409,58.594],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/LehrerApp.Desktop/LehrerApp.Desktop.csproj b/LehrerApp.Desktop/LehrerApp.Desktop.csproj
index 2465d89..440c4a4 100644
--- a/LehrerApp.Desktop/LehrerApp.Desktop.csproj
+++ b/LehrerApp.Desktop/LehrerApp.Desktop.csproj
@@ -18,6 +18,7 @@
+
diff --git a/LehrerApp.Desktop/ViewModels/Groups/StudentGroupGeneratorViewModel.cs b/LehrerApp.Desktop/ViewModels/Groups/StudentGroupGeneratorViewModel.cs
index 2a2983b..669f6ec 100644
--- a/LehrerApp.Desktop/ViewModels/Groups/StudentGroupGeneratorViewModel.cs
+++ b/LehrerApp.Desktop/ViewModels/Groups/StudentGroupGeneratorViewModel.cs
@@ -7,7 +7,7 @@ using System.Collections.ObjectModel;
namespace LehrerApp.Desktop.ViewModels.Groups;
-public sealed record StudentGroupMember(string Name);
+public sealed record StudentGroupMember(Guid Id, string Name);
public sealed record StudentPairCandidate(Guid Id, string Name);
public sealed class StudentPairRule
@@ -29,8 +29,9 @@ public sealed class StudentPairRule
FirstId == first && SecondId == second || FirstId == second && SecondId == first;
}
-public sealed class GeneratedStudentGroup
+public sealed partial class GeneratedStudentGroup : ObservableObject
{
+ [ObservableProperty] private bool _isDropTarget;
public string Title { get; }
public ObservableCollection Members { get; } = [];
@@ -39,7 +40,13 @@ public sealed class GeneratedStudentGroup
Title = $"Gruppe {number}";
foreach (var student in students.OrderBy(s => s.LastName, StringComparer.CurrentCultureIgnoreCase)
.ThenBy(s => s.FirstName, StringComparer.CurrentCultureIgnoreCase))
- Members.Add(new StudentGroupMember(student.FullName));
+ Members.Add(new StudentGroupMember(student.Id, student.FullName));
+ }
+
+ public GeneratedStudentGroup(int number, IEnumerable members)
+ {
+ Title = $"Gruppe {number}";
+ foreach (var member in members) Members.Add(member);
}
}
@@ -55,10 +62,12 @@ public partial class StudentGroupGeneratorViewModel : ObservableObject
private readonly IParticipationRepository _participation;
private readonly IGradeRepository _grades;
private readonly IGroupRepository _groupRepository;
+ private readonly IStudentGroupPlanRepository? _savedPlans;
private readonly Random _random;
private readonly List _participants = [];
private readonly Dictionary _performance = [];
private readonly HashSet _supportStudentIds = [];
+ private Guid? _editingPlanId;
private string _attendanceWarning = "";
[ObservableProperty] private StudentDrawGroup? _selectedGroup;
@@ -77,14 +86,24 @@ public partial class StudentGroupGeneratorViewModel : ObservableObject
[ObservableProperty] private string _statusText = "Optionen wählen und Gruppen zusammenstellen.";
[ObservableProperty] private string _warningText = "";
[ObservableProperty] private bool _hasGeneratedGroups;
+ [ObservableProperty] private StudentGroupPlan? _selectedSavedPlan;
+ [ObservableProperty] private string _planName = "";
+ [ObservableProperty] private string _saveStatus = "";
+ [ObservableProperty] private bool _hasUnsavedChanges;
public ObservableCollection Groups { get; } = [];
public ObservableCollection GeneratedGroups { get; } = [];
public ObservableCollection PairCandidates { get; } = [];
public ObservableCollection ForcedPairs { get; } = [];
public ObservableCollection ExcludedPairs { get; } = [];
+ public ObservableCollection SavedPlans { get; } = [];
public string[] ParticipantModeOptions { get; } = [FutureModeLabel, AdHocModeLabel];
public bool CanGenerate => SelectedGroup is not null && _participants.Count >= 2;
+ public bool CanSave => _savedPlans is not null && SelectedGroup is not null &&
+ HasGeneratedGroups && !string.IsNullOrWhiteSpace(PlanName);
+ public bool CanLoadSavedPlan => SelectedSavedPlan is not null;
+ public bool CanDeleteSavedPlan => SelectedSavedPlan is not null;
+ public bool HasSavedPlans => SavedPlans.Count > 0;
public string SizePriorityLabel => PriorityLabel(SizePriority);
public string CountPriorityLabel => PriorityLabel(CountPriority);
public string PerformanceDistributionLabel => PerformanceDistribution switch
@@ -106,7 +125,8 @@ public partial class StudentGroupGeneratorViewModel : ObservableObject
IParticipationRepository participation,
IGradeRepository grades,
Guid? initialGroupId = null,
- Random? random = null)
+ Random? random = null,
+ IStudentGroupPlanRepository? savedPlans = null)
{
_students = students;
_groupRepository = groups;
@@ -115,9 +135,13 @@ public partial class StudentGroupGeneratorViewModel : ObservableObject
_participation = participation;
_grades = grades;
_random = random ?? Random.Shared;
+ _savedPlans = savedPlans;
foreach (var group in groups.GetAll().OrderBy(g => g.Name, StringComparer.CurrentCultureIgnoreCase))
Groups.Add(new StudentDrawGroup(group.Id, group.Name));
+ if (initialGroupId is { } requestedId && Groups.All(g => g.Id != requestedId) &&
+ groups.GetById(requestedId) is { } archived)
+ Groups.Add(new StudentDrawGroup(archived.Id, $"{archived.Name} (archiviert)"));
SelectedGroup = Groups.FirstOrDefault(g => g.Id == initialGroupId) ?? Groups.FirstOrDefault();
}
@@ -126,8 +150,24 @@ public partial class StudentGroupGeneratorViewModel : ObservableObject
ForcedPairs.Clear();
ExcludedPairs.Clear();
ReloadParticipants();
+ ReloadSavedPlans();
+ _editingPlanId = null;
+ PlanName = "";
}
partial void OnParticipantModeNameChanged(string value) => ReloadParticipants();
+ partial void OnSelectedSavedPlanChanged(StudentGroupPlan? value)
+ {
+ OnPropertyChanged(nameof(CanLoadSavedPlan));
+ OnPropertyChanged(nameof(CanDeleteSavedPlan));
+ LoadSavedPlanCommand.NotifyCanExecuteChanged();
+ DeleteSavedPlanCommand.NotifyCanExecuteChanged();
+ }
+ partial void OnPlanNameChanged(string value)
+ {
+ SavePlanCommand.NotifyCanExecuteChanged();
+ if (HasGeneratedGroups) HasUnsavedChanges = true;
+ }
+ partial void OnHasGeneratedGroupsChanged(bool value) => SavePlanCommand.NotifyCanExecuteChanged();
partial void OnTargetGroupSizeChanged(int value) => InvalidateResult();
partial void OnTargetGroupCountChanged(int value) => InvalidateResult();
partial void OnSizePriorityChanged(double value)
@@ -177,11 +217,118 @@ public partial class StudentGroupGeneratorViewModel : ObservableObject
GeneratedGroups.Add(new GeneratedStudentGroup(i + 1, assignments[i]));
HasGeneratedGroups = true;
+ _editingPlanId = null;
+ SelectedSavedPlan = null;
+ PlanName = $"Einteilung {DateTime.Now:dd.MM.yyyy HH:mm:ss}";
+ HasUnsavedChanges = true;
+ SaveStatus = "Noch nicht gespeichert.";
StatusText = $"{_participants.Count} Schüler · {groupCount} Gruppen · Größen " +
string.Join("/", capacities.Distinct().OrderBy(x => x));
UpdateWarning(groupCount, assignments);
}
+ [RelayCommand(CanExecute = nameof(CanSave))]
+ private void SavePlan()
+ {
+ if (_savedPlans is null || SelectedGroup is null) return;
+ var plan = new StudentGroupPlan
+ {
+ Id = _editingPlanId ?? Guid.NewGuid(),
+ GroupId = SelectedGroup.Id,
+ Name = PlanName,
+ Groups = GeneratedGroups.Select(group => new StudentGroupPlanGroup
+ {
+ StudentIds = group.Members.Select(member => member.Id).ToList(),
+ }).ToList(),
+ };
+ try
+ {
+ _savedPlans.Save(plan);
+ _editingPlanId = plan.Id;
+ ReloadSavedPlans(plan.Id);
+ HasUnsavedChanges = false;
+ SaveStatus = "Einteilung gespeichert.";
+ }
+ catch (Exception ex) when (ex is ArgumentException or InvalidOperationException)
+ {
+ SaveStatus = ex.Message;
+ }
+ }
+
+ [RelayCommand(CanExecute = nameof(CanLoadSavedPlan))]
+ private void LoadSavedPlan()
+ {
+ if (_savedPlans is null || SelectedSavedPlan is not { } selected ||
+ SelectedGroup?.Id != selected.GroupId) return;
+ var plan = _savedPlans.GetById(selected.Id);
+ if (plan is null) { ReloadSavedPlans(); return; }
+ _editingPlanId = plan.Id;
+
+ var missing = 0;
+ GeneratedGroups.Clear();
+ foreach (var group in plan.Groups ?? [])
+ {
+ var members = new List();
+ foreach (var id in group.StudentIds ?? [])
+ {
+ if (_students.GetById(id) is { } student)
+ members.Add(new StudentGroupMember(id, student.FullName));
+ else missing++;
+ }
+ GeneratedGroups.Add(new GeneratedStudentGroup(GeneratedGroups.Count + 1, members));
+ }
+ HasGeneratedGroups = GeneratedGroups.Count > 0;
+ PlanName = plan.Name;
+ HasUnsavedChanges = missing > 0;
+ SaveStatus = missing > 0
+ ? $"{missing} nicht mehr vorhandene Schüler wurden ausgelassen. Bitte erneut speichern."
+ : "Gespeicherte Einteilung geladen.";
+ StatusText = $"{GeneratedGroups.Sum(group => group.Members.Count)} Schüler · " +
+ $"{GeneratedGroups.Count} Gruppen · gespeichert am {plan.UpdatedAt.ToLocalTime():dd.MM.yyyy}";
+ WarningText = missing > 0 ? SaveStatus : "";
+ }
+
+ [RelayCommand(CanExecute = nameof(CanDeleteSavedPlan))]
+ private void DeleteSavedPlan()
+ {
+ if (_savedPlans is null || SelectedSavedPlan is not { } plan) return;
+ _savedPlans.Delete(plan.Id);
+ var deletedCurrent = _editingPlanId == plan.Id;
+ if (deletedCurrent) _editingPlanId = null;
+ ReloadSavedPlans();
+ if (deletedCurrent) HasUnsavedChanges = HasGeneratedGroups;
+ SaveStatus = "Gespeicherte Einteilung gelöscht.";
+ }
+
+ public bool MoveStudent(StudentGroupMember member, GeneratedStudentGroup target)
+ {
+ if (!HasGeneratedGroups || !GeneratedGroups.Contains(target)) return false;
+ var source = GeneratedGroups.FirstOrDefault(group => group.Members.Contains(member));
+ if (source is null || source == target || target.Members.Any(m => m.Id == member.Id)) return false;
+ source.Members.Remove(member);
+ target.Members.Add(member);
+ HasUnsavedChanges = true;
+ SaveStatus = "Änderungen noch nicht gespeichert.";
+ StatusText = $"{GeneratedGroups.Sum(group => group.Members.Count)} Schüler · " +
+ $"{GeneratedGroups.Count} Gruppen · manuell angepasst";
+ var assignments = GeneratedGroups.Select(group => group.Members
+ .Select(m => _students.GetById(m.Id)).OfType().ToList()).ToList();
+ UpdateWarning(GeneratedGroups.Count, assignments);
+ return true;
+ }
+
+ private void ReloadSavedPlans(Guid? selectedId = null)
+ {
+ SavedPlans.Clear();
+ SelectedSavedPlan = null;
+ if (_savedPlans is not null && SelectedGroup is not null)
+ {
+ foreach (var plan in _savedPlans.GetByGroup(SelectedGroup.Id)) SavedPlans.Add(plan);
+ SelectedSavedPlan = SavedPlans.FirstOrDefault(plan => plan.Id == selectedId);
+ }
+ OnPropertyChanged(nameof(HasSavedPlans));
+ }
+
private void ReloadParticipants()
{
_participants.Clear();
@@ -385,6 +532,8 @@ public partial class StudentGroupGeneratorViewModel : ObservableObject
{
GeneratedGroups.Clear();
HasGeneratedGroups = false;
+ HasUnsavedChanges = false;
+ SaveStatus = "";
StatusText = _participants.Count >= 2
? $"{_participants.Count} Schüler stehen zur Einteilung bereit."
: "Für eine Gruppeneinteilung werden mindestens zwei Schüler benötigt.";
diff --git a/LehrerApp.Desktop/ViewModels/Groups/TeachingModeViewModel.cs b/LehrerApp.Desktop/ViewModels/Groups/TeachingModeViewModel.cs
index 484cc7e..f2b0ec6 100644
--- a/LehrerApp.Desktop/ViewModels/Groups/TeachingModeViewModel.cs
+++ b/LehrerApp.Desktop/ViewModels/Groups/TeachingModeViewModel.cs
@@ -22,6 +22,7 @@ public class TeachingModeViewModel
{
public TeachingTimelineViewModel Timeline { get; }
public string GroupName { get; }
+ public DateOnly LessonDate { get; }
public LessonViewerViewModel LessonInfo { get; }
public SeatingPlanTabViewModel SeatingPlan { get; }
/// Nutzer-Feedback: die Schnellbewertungs-Dialoge für Mitarbeit/Anwesenheit-Hausaufgabe
@@ -41,6 +42,7 @@ public class TeachingModeViewModel
TeachingModeOutstandingHomeworkViewModel? outstandingHomework = null)
{
GroupName = group.Name;
+ LessonDate = lesson.Date;
Timeline = new TeachingTimelineViewModel(lesson, lessons, !group.IsActive);
LessonInfo = new LessonViewerViewModel(lesson, alternativePaths);
diff --git a/LehrerApp.Desktop/Views/Groups/RandomStudentPickerWindow.axaml b/LehrerApp.Desktop/Views/Groups/RandomStudentPickerWindow.axaml
index a069c30..89bb0ef 100644
--- a/LehrerApp.Desktop/Views/Groups/RandomStudentPickerWindow.axaml
+++ b/LehrerApp.Desktop/Views/Groups/RandomStudentPickerWindow.axaml
@@ -1,10 +1,11 @@
@@ -16,12 +17,13 @@
-
-
+
+
+
-
+
InitializeComponent();
private async void OnDraw(object? sender, RoutedEventArgs e)
{
- if (_isAnimating || DataContext is not RandomStudentPickerViewModel vm ||
+ if (DataContext is not RandomStudentPickerViewModel vm ||
!vm.DrawCommand.CanExecute(null)) return;
- _isAnimating = true;
var card = this.FindControl("RevealCard");
- if (card is not null) card.Opacity = 0.15;
- await Task.Delay(150);
+ var wheel = this.FindControl("WheelAnimation");
+ var button = this.FindControl
+
-
+
diff --git a/LehrerApp.Desktop/Views/Groups/StudentGroupGeneratorWindow.axaml.cs b/LehrerApp.Desktop/Views/Groups/StudentGroupGeneratorWindow.axaml.cs
index 88b30ac..c575265 100644
--- a/LehrerApp.Desktop/Views/Groups/StudentGroupGeneratorWindow.axaml.cs
+++ b/LehrerApp.Desktop/Views/Groups/StudentGroupGeneratorWindow.axaml.cs
@@ -1,25 +1,204 @@
using Avalonia.Controls;
+using Avalonia.Input;
using Avalonia.Interactivity;
+using Avalonia.Labs.Lottie;
+using Avalonia.Threading;
+using LehrerApp.Core.Interfaces;
using LehrerApp.Desktop.ViewModels.Groups;
+using LehrerApp.Desktop.Views.Shared;
+using Microsoft.Extensions.DependencyInjection;
namespace LehrerApp.Desktop.Views.Groups;
public partial class StudentGroupGeneratorWindow : Window
{
- private bool _isAnimating;
+ private bool _isSpinning;
+ private DateTime _spinStartedAt;
+ private StudentGroupMember? _dragCandidate;
+ private PointerPressedEventArgs? _dragTrigger;
+ private Avalonia.Point _pressPosition;
+ private StudentGroupMember? _draggedMember;
+ private GeneratedStudentGroup? _pendingDropTarget;
public StudentGroupGeneratorWindow() => InitializeComponent();
+ public static StudentGroupGeneratorWindow Create(Guid? initialGroupId, bool useTodayAttendance = false)
+ {
+ var vm = new StudentGroupGeneratorViewModel(
+ App.Services.GetRequiredService(),
+ App.Services.GetRequiredService(),
+ App.Services.GetRequiredService(),
+ App.Services.GetRequiredService(),
+ App.Services.GetRequiredService(),
+ App.Services.GetRequiredService(),
+ initialGroupId,
+ savedPlans: App.Services.GetRequiredService());
+ if (useTodayAttendance)
+ vm.ParticipantModeName = StudentGroupGeneratorViewModel.AdHocModeLabel;
+ return new StudentGroupGeneratorWindow { DataContext = vm };
+ }
+
private async void OnGenerate(object? sender, RoutedEventArgs e)
{
- if (_isAnimating || DataContext is not StudentGroupGeneratorViewModel vm ||
+ if (DataContext is not StudentGroupGeneratorViewModel vm ||
!vm.GenerateCommand.CanExecute(null)) return;
- _isAnimating = true;
- var results = this.FindControl("GroupResults");
- if (results is not null) results.Opacity = 0.15;
- await Task.Delay(140);
- vm.GenerateCommand.Execute(null);
- if (results is not null) results.Opacity = 1;
- _isAnimating = false;
+ var results = this.FindControl("ResultsScrollViewer");
+ var teamwork = this.FindControl("TeamworkAnimation");
+ var button = this.FindControl("GenerateButton");
+ var options = this.FindControl("OptionsExpander");
+ var summary = this.FindControl("ResultSummary");
+ var actions = this.FindControl("PlanActions");
+ if (results is null || teamwork is null || button is null || options is null ||
+ summary is null || actions is null) return;
+
+ if (!_isSpinning)
+ {
+ _isSpinning = true;
+ _spinStartedAt = DateTime.UtcNow;
+ results.IsVisible = false;
+ actions.IsVisible = false;
+ summary.IsVisible = false;
+ teamwork.IsVisible = true;
+ options.IsEnabled = false;
+ button.Content = "Teamwork läuft …";
+ // Nach dem Layoutwechsel starten, damit der erste Frame sichtbar ist.
+ await Task.Yield();
+ if (!_isSpinning) return;
+ teamwork.Start();
+ button.Content = "Ergebnis anzeigen";
+ return;
+ }
+
+ // Ein Doppelklick soll die Animation nicht sofort wieder schließen.
+ if (DateTime.UtcNow - _spinStartedAt < TimeSpan.FromSeconds(1.2)) return;
+ try
+ {
+ vm.GenerateCommand.Execute(null);
+ }
+ finally
+ {
+ teamwork.Stop();
+ teamwork.IsVisible = false;
+ results.IsVisible = true;
+ actions.IsVisible = true;
+ summary.IsVisible = true;
+ options.IsEnabled = true;
+ button.Content = "Gruppen zusammenstellen";
+ _isSpinning = false;
+ }
+ }
+
+ private void OnMemberPressed(object? sender, PointerPressedEventArgs e)
+ {
+ if (_isSpinning || sender is not Control { DataContext: StudentGroupMember member } control ||
+ !e.GetCurrentPoint(control).Properties.IsLeftButtonPressed) return;
+ _dragCandidate = member;
+ _dragTrigger = e;
+ _pressPosition = e.GetPosition(this);
+ }
+
+ private async void OnLoadSavedPlan(object? sender, RoutedEventArgs e)
+ {
+ if (DataContext is not StudentGroupGeneratorViewModel vm ||
+ !vm.LoadSavedPlanCommand.CanExecute(null)) return;
+ if (vm.HasUnsavedChanges)
+ {
+ var dialog = new ConfirmDialog
+ {
+ DataContext = new ConfirmDialogInfo
+ {
+ Title = "Ungespeicherte Einteilung ersetzen?",
+ Message = "Die aktuelle Einteilung und manuelle Änderungen werden beim Laden verworfen.",
+ ConfirmText = "Gespeicherte Einteilung laden",
+ },
+ };
+ if (!await dialog.ShowDialog(this)) return;
+ }
+ vm.LoadSavedPlanCommand.Execute(null);
+ }
+
+ private async void OnDeleteSavedPlan(object? sender, RoutedEventArgs e)
+ {
+ if (DataContext is not StudentGroupGeneratorViewModel vm ||
+ !vm.DeleteSavedPlanCommand.CanExecute(null)) return;
+ var dialog = new ConfirmDialog
+ {
+ DataContext = new ConfirmDialogInfo
+ {
+ Title = "Einteilung löschen?",
+ Message = $"Die gespeicherte Einteilung „{vm.SelectedSavedPlan!.Name}“ wird gelöscht.",
+ ConfirmText = "Löschen",
+ },
+ };
+ if (await dialog.ShowDialog(this)) vm.DeleteSavedPlanCommand.Execute(null);
+ }
+
+ private async void OnMemberMoved(object? sender, PointerEventArgs e)
+ {
+ if (_dragCandidate is null || _dragTrigger is null ||
+ !e.GetCurrentPoint(this).Properties.IsLeftButtonPressed) return;
+ var position = e.GetPosition(this);
+ if (Math.Abs(position.X - _pressPosition.X) < 6 &&
+ Math.Abs(position.Y - _pressPosition.Y) < 6) return;
+
+ _draggedMember = _dragCandidate;
+ _pendingDropTarget = null;
+ _dragCandidate = null;
+ var trigger = _dragTrigger;
+ _dragTrigger = null;
+ var data = new DataTransfer();
+ data.Add(DataTransferItem.CreateText("LehrerApp-Gruppeneinteilung"));
+ var effect = await DragDrop.DoDragDropAsync(trigger, data, DragDropEffects.Move);
+ var member = _draggedMember;
+ var target = _pendingDropTarget;
+ _draggedMember = null;
+ _pendingDropTarget = null;
+ if ((effect & DragDropEffects.Move) == 0 || member is null || target is null) return;
+ // Die Quelle erst verändern, wenn Avalonia den Drop vollständig verarbeitet hat.
+ Dispatcher.UIThread.Post(() =>
+ {
+ if (DataContext is StudentGroupGeneratorViewModel vm) vm.MoveStudent(member, target);
+ }, DispatcherPriority.Background);
+ }
+
+ private void OnMemberReleased(object? sender, PointerReleasedEventArgs e)
+ {
+ _dragCandidate = null;
+ _dragTrigger = null;
+ }
+
+ private bool CanDropOn(GeneratedStudentGroup target) =>
+ !_isSpinning && _draggedMember is { } member &&
+ !target.Members.Any(existing => existing.Id == member.Id);
+
+ private void OnGroupDragEnter(object? sender, DragEventArgs e)
+ {
+ if (sender is Border { DataContext: GeneratedStudentGroup target } && CanDropOn(target))
+ target.IsDropTarget = true;
+ }
+
+ private void OnGroupDragLeave(object? sender, DragEventArgs e)
+ {
+ if (sender is Border { DataContext: GeneratedStudentGroup target }) target.IsDropTarget = false;
+ }
+
+ private void OnGroupDragOver(object? sender, DragEventArgs e) =>
+ e.DragEffects = sender is Border { DataContext: GeneratedStudentGroup target } && CanDropOn(target)
+ ? DragDropEffects.Move : DragDropEffects.None;
+
+ private void OnGroupDrop(object? sender, DragEventArgs e)
+ {
+ if (sender is not Border { DataContext: GeneratedStudentGroup target }) return;
+ target.IsDropTarget = false;
+ if (!CanDropOn(target)) { e.DragEffects = DragDropEffects.None; return; }
+ _pendingDropTarget = target;
+ e.DragEffects = DragDropEffects.Move;
+ }
+
+ protected override void OnClosed(EventArgs e)
+ {
+ _isSpinning = false;
+ this.FindControl("TeamworkAnimation")?.Stop();
+ base.OnClosed(e);
}
}
diff --git a/LehrerApp.Desktop/Views/Groups/TeachingModeWindow.axaml b/LehrerApp.Desktop/Views/Groups/TeachingModeWindow.axaml
index 2e4e51a..1af5afd 100644
--- a/LehrerApp.Desktop/Views/Groups/TeachingModeWindow.axaml
+++ b/LehrerApp.Desktop/Views/Groups/TeachingModeWindow.axaml
@@ -52,6 +52,8 @@
+
diff --git a/LehrerApp.Desktop/Views/Groups/TeachingModeWindow.axaml.cs b/LehrerApp.Desktop/Views/Groups/TeachingModeWindow.axaml.cs
index 4cff714..a4953c0 100644
--- a/LehrerApp.Desktop/Views/Groups/TeachingModeWindow.axaml.cs
+++ b/LehrerApp.Desktop/Views/Groups/TeachingModeWindow.axaml.cs
@@ -15,6 +15,7 @@ public partial class TeachingModeWindow : Window
private static readonly Dictionary OpenWindows = [];
private readonly DispatcherTimer _clock = new() { Interval = TimeSpan.FromSeconds(1) };
private WindowState _previousState = WindowState.Maximized;
+ private StudentGroupGeneratorWindow? _studentGroupGeneratorWindow;
public static void Open(Lesson lesson)
{
@@ -66,6 +67,20 @@ public partial class TeachingModeWindow : Window
}
private void OnFullScreen(object? sender, RoutedEventArgs e) => ToggleFullScreen();
+ private void OnOpenStudentGroups(object? sender, RoutedEventArgs e)
+ {
+ if (_studentGroupGeneratorWindow is not null)
+ {
+ _studentGroupGeneratorWindow.Activate();
+ return;
+ }
+ if (DataContext is not TeachingModeViewModel vm) return;
+ _studentGroupGeneratorWindow = StudentGroupGeneratorWindow.Create(vm.LessonInfo.GroupId,
+ useTodayAttendance: vm.LessonDate == DateOnly.FromDateTime(DateTime.Today));
+ _studentGroupGeneratorWindow.Closed += (_, _) => _studentGroupGeneratorWindow = null;
+ _studentGroupGeneratorWindow.Show(this);
+ }
+
protected override void OnDataContextChanged(EventArgs e)
{
base.OnDataContextChanged(e);
diff --git a/LehrerApp.Desktop/Views/MainWindow.axaml.cs b/LehrerApp.Desktop/Views/MainWindow.axaml.cs
index a089f88..8d9c6c1 100644
--- a/LehrerApp.Desktop/Views/MainWindow.axaml.cs
+++ b/LehrerApp.Desktop/Views/MainWindow.axaml.cs
@@ -103,15 +103,7 @@ public partial class MainWindow : Window
}
var currentGroupId = (DataContext as MainWindowViewModel)?.CurrentGroupDetail?.Group?.Id;
- var vm = new StudentGroupGeneratorViewModel(
- App.Services.GetRequiredService(),
- App.Services.GetRequiredService(),
- App.Services.GetRequiredService(),
- App.Services.GetRequiredService(),
- App.Services.GetRequiredService(),
- App.Services.GetRequiredService(),
- currentGroupId);
- _studentGroupGeneratorWindow = new StudentGroupGeneratorWindow { DataContext = vm };
+ _studentGroupGeneratorWindow = StudentGroupGeneratorWindow.Create(currentGroupId);
_studentGroupGeneratorWindow.Closed += (_, _) => _studentGroupGeneratorWindow = null;
_studentGroupGeneratorWindow.Show();
}
diff --git a/LehrerApp.Sync.Tests/EventApplierTests.cs b/LehrerApp.Sync.Tests/EventApplierTests.cs
index 149cb6d..7b8c48c 100644
--- a/LehrerApp.Sync.Tests/EventApplierTests.cs
+++ b/LehrerApp.Sync.Tests/EventApplierTests.cs
@@ -11,6 +11,25 @@ public sealed class EventApplierTests
private static LiteDbContext NewInMemoryContext() => new(new MemoryStream());
private static readonly byte[] Key = SyncCrypto.GenerateKey();
+ [Fact]
+ public async Task ApplyAsync_StudentGroupPlan_SynchronisiertEinteilungUndLoeschung()
+ {
+ using var db = NewInMemoryContext();
+ var applier = new EventApplier(db, Key);
+ var studentId = Guid.NewGuid();
+ var plan = new StudentGroupPlan
+ {
+ GroupId = Guid.NewGuid(), Name = "Projektwoche",
+ Groups = [new StudentGroupPlanGroup { StudentIds = [studentId] }],
+ };
+
+ await applier.ApplyAsync(MakeEvent(nameof(StudentGroupPlan), plan.Id.ToString(), "Save", plan));
+ Assert.Equal(studentId, db.StudentGroupPlans.FindById(plan.Id)!.Groups[0].StudentIds[0]);
+
+ await applier.ApplyAsync(MakeEvent(nameof(StudentGroupPlan), plan.Id.ToString(), "Delete", null));
+ Assert.Null(db.StudentGroupPlans.FindById(plan.Id));
+ }
+
[Fact]
public async Task ApplyAsync_Save_SchreibtEntitaetDirektInDieCollection()
{
diff --git a/LehrerApp.Sync/EventApplier.cs b/LehrerApp.Sync/EventApplier.cs
index 5f2859e..d87a432 100644
--- a/LehrerApp.Sync/EventApplier.cs
+++ b/LehrerApp.Sync/EventApplier.cs
@@ -125,6 +125,7 @@ public class EventApplier(LiteDbContext db, byte[] syncKey, HttpClient? http = n
Simple(context => context.Students);
Simple(context => context.SeatingPlans);
+ Simple(context => context.StudentGroupPlans);
Simple(context => context.Memberships);
Simple(context => context.GradingKeyTemplates);
Simple(context => context.Grades);