From d6a93182469445f039adaccaba06b601fd823256 Mon Sep 17 00:00:00 2001
From: Guillaume Martres <smarter@ubuntu.com>
Date: Mon, 19 Apr 2021 12:02:23 +0200
Subject: [PATCH] Add solution to the 2021 midterm

---
 previous-exams/2021-midterm/m1.md             |  61 +++
 previous-exams/2021-midterm/m1/.gitignore     |  22 +
 previous-exams/2021-midterm/m1/assignment.sbt |   2 +
 previous-exams/2021-midterm/m1/build.sbt      |  12 +
 .../2021-midterm/m1/grading-tests.jar         | Bin 0 -> 33287 bytes
 .../m1/project/FilteringReporterPlugin.scala  |  31 ++
 .../m1/project/MOOCSettings.scala             |  49 ++
 .../m1/project/StudentTasks.scala             | 303 +++++++++++++
 .../2021-midterm/m1/project/build.properties  |   1 +
 .../2021-midterm/m1/project/buildSettings.sbt |   5 +
 .../2021-midterm/m1/project/plugins.sbt       |   2 +
 .../m1/src/main/scala/m1/Lib.scala            |  60 +++
 .../m1/src/main/scala/m1/M1.scala             |  76 ++++
 .../m1/src/test/scala/m1/M1Suite.scala        | 156 +++++++
 previous-exams/2021-midterm/m14.md            |  42 ++
 previous-exams/2021-midterm/m14/.gitignore    |  22 +
 .../2021-midterm/m14/assignment.sbt           |   2 +
 previous-exams/2021-midterm/m14/build.sbt     |  12 +
 .../2021-midterm/m14/grading-tests.jar        | Bin 0 -> 119786 bytes
 .../m14/project/FilteringReporterPlugin.scala |  31 ++
 .../m14/project/MOOCSettings.scala            |  49 ++
 .../m14/project/StudentTasks.scala            | 303 +++++++++++++
 .../2021-midterm/m14/project/build.properties |   1 +
 .../m14/project/buildSettings.sbt             |   5 +
 .../2021-midterm/m14/project/plugins.sbt      |   2 +
 .../scala/m14/AbstractBlockingQueue.scala     |  14 +
 .../m14/AbstractThreadPoolExecutor.scala      |   7 +
 .../m14/src/main/scala/m14/M14.scala          |  80 ++++
 .../m14/src/main/scala/m14/Monitor.scala      |  23 +
 .../m14/src/test/scala/m14/M14Suite.scala     | 159 +++++++
 .../m14/instrumentation/MockedMonitor.scala   |  73 +++
 .../SchedulableBlockingQueue.scala            |  17 +
 .../scala/m14/instrumentation/Scheduler.scala | 305 +++++++++++++
 .../scala/m14/instrumentation/Stats.scala     |  23 +
 .../m14/instrumentation/TestHelper.scala      | 125 ++++++
 .../scala/m14/instrumentation/TestUtils.scala |  20 +
 previous-exams/2021-midterm/m15.md            |  42 ++
 previous-exams/2021-midterm/m15/.gitignore    |  22 +
 .../2021-midterm/m15/assignment.sbt           |   2 +
 previous-exams/2021-midterm/m15/build.sbt     |  12 +
 .../2021-midterm/m15/grading-tests.jar        | Bin 0 -> 126110 bytes
 .../m15/project/FilteringReporterPlugin.scala |  31 ++
 .../m15/project/MOOCSettings.scala            |  49 ++
 .../m15/project/StudentTasks.scala            | 303 +++++++++++++
 .../2021-midterm/m15/project/build.properties |   1 +
 .../m15/project/buildSettings.sbt             |   5 +
 .../2021-midterm/m15/project/plugins.sbt      |   2 +
 .../scala/m15/AbstractBlockingQueue.scala     |  14 +
 .../m15/AbstractThreadPoolExecutor.scala      |   7 +
 .../m15/src/main/scala/m15/M15.scala          |  79 ++++
 .../m15/src/main/scala/m15/Monitor.scala      |  23 +
 .../m15/src/test/scala/m15/M15Suite.scala     | 281 ++++++++++++
 .../m15/instrumentation/MockedMonitor.scala   |  73 +++
 .../SchedulableBlockingQueue.scala            |  17 +
 .../scala/m15/instrumentation/Scheduler.scala | 305 +++++++++++++
 .../scala/m15/instrumentation/Stats.scala     |  23 +
 .../m15/instrumentation/TestHelper.scala      | 125 ++++++
 .../scala/m15/instrumentation/TestUtils.scala |  20 +
 previous-exams/2021-midterm/m2.md             |  61 +++
 previous-exams/2021-midterm/m2/.gitignore     |  22 +
 previous-exams/2021-midterm/m2/assignment.sbt |   2 +
 previous-exams/2021-midterm/m2/build.sbt      |  12 +
 .../2021-midterm/m2/grading-tests.jar         | Bin 0 -> 34633 bytes
 .../m2/project/FilteringReporterPlugin.scala  |  31 ++
 .../m2/project/MOOCSettings.scala             |  49 ++
 .../m2/project/StudentTasks.scala             | 303 +++++++++++++
 .../2021-midterm/m2/project/build.properties  |   1 +
 .../2021-midterm/m2/project/buildSettings.sbt |   5 +
 .../2021-midterm/m2/project/plugins.sbt       |   2 +
 .../m2/src/main/scala/m2/Lib.scala            |  60 +++
 .../m2/src/main/scala/m2/M2.scala             |  75 ++++
 .../m2/src/test/scala/m2/M2Suite.scala        | 175 ++++++++
 previous-exams/2021-midterm/m20.md            |  97 ++++
 previous-exams/2021-midterm/m20/.gitignore    |  22 +
 .../2021-midterm/m20/assignment.sbt           |   2 +
 previous-exams/2021-midterm/m20/build.sbt     |  12 +
 .../2021-midterm/m20/grading-tests.jar        | Bin 0 -> 131660 bytes
 .../m20/project/FilteringReporterPlugin.scala |  31 ++
 .../m20/project/MOOCSettings.scala            |  49 ++
 .../m20/project/StudentTasks.scala            | 303 +++++++++++++
 .../2021-midterm/m20/project/build.properties |   1 +
 .../m20/project/buildSettings.sbt             |   5 +
 .../2021-midterm/m20/project/plugins.sbt      |   2 +
 .../main/scala/m20/MultiWriterSeqCount.scala  |  66 +++
 .../m20/src/main/scala/m20/SeqCount.scala     |  53 +++
 .../m20/instrumentation/AtomicVariable.scala  |  28 ++
 .../scala/m20/instrumentation/Monitor.scala   |  23 +
 .../m20/src/test/scala/m20/TestSuite.scala    | 122 +++++
 .../m20/instrumentation/MockedMonitor.scala   |  72 +++
 .../scala/m20/instrumentation/Scheduler.scala | 304 +++++++++++++
 .../scala/m20/instrumentation/Stats.scala     |  23 +
 .../m20/instrumentation/TestHelper.scala      | 124 +++++
 .../scala/m20/instrumentation/TestUtils.scala |  19 +
 .../m20/src/test/scala/m20/overrides.scala    |  68 +++
 previous-exams/2021-midterm/m21.md            |  97 ++++
 previous-exams/2021-midterm/m21/.gitignore    |  22 +
 .../2021-midterm/m21/assignment.sbt           |   2 +
 previous-exams/2021-midterm/m21/build.sbt     |  12 +
 .../2021-midterm/m21/grading-tests.jar        | Bin 0 -> 131654 bytes
 .../m21/project/FilteringReporterPlugin.scala |  31 ++
 .../m21/project/MOOCSettings.scala            |  49 ++
 .../m21/project/StudentTasks.scala            | 303 +++++++++++++
 .../2021-midterm/m21/project/build.properties |   1 +
 .../m21/project/buildSettings.sbt             |   5 +
 .../2021-midterm/m21/project/plugins.sbt      |   2 +
 .../main/scala/m21/MultiWriterSeqCount.scala  |  66 +++
 .../m21/src/main/scala/m21/SeqCount.scala     |  53 +++
 .../m21/instrumentation/AtomicVariable.scala  |  28 ++
 .../scala/m21/instrumentation/Monitor.scala   |  23 +
 .../m21/src/test/scala/m21/TestSuite.scala    | 122 +++++
 .../m21/instrumentation/MockedMonitor.scala   |  72 +++
 .../scala/m21/instrumentation/Scheduler.scala | 304 +++++++++++++
 .../scala/m21/instrumentation/Stats.scala     |  23 +
 .../m21/instrumentation/TestHelper.scala      | 124 +++++
 .../scala/m21/instrumentation/TestUtils.scala |  19 +
 .../m21/src/test/scala/m21/overrides.scala    |  68 +++
 previous-exams/2021-midterm/m3.md             |  61 +++
 previous-exams/2021-midterm/m3/.gitignore     |  22 +
 previous-exams/2021-midterm/m3/assignment.sbt |   2 +
 previous-exams/2021-midterm/m3/build.sbt      |  12 +
 .../2021-midterm/m3/grading-tests.jar         | Bin 0 -> 34429 bytes
 .../m3/project/FilteringReporterPlugin.scala  |  31 ++
 .../m3/project/MOOCSettings.scala             |  49 ++
 .../m3/project/StudentTasks.scala             | 303 +++++++++++++
 .../2021-midterm/m3/project/build.properties  |   1 +
 .../2021-midterm/m3/project/buildSettings.sbt |   5 +
 .../2021-midterm/m3/project/plugins.sbt       |   2 +
 .../m3/src/main/scala/m3/Lib.scala            |  68 +++
 .../m3/src/main/scala/m3/M3.scala             |  75 ++++
 .../m3/src/test/scala/m3/M3Suite.scala        | 174 ++++++++
 previous-exams/2021-midterm/m6.md             | 155 +++++++
 previous-exams/2021-midterm/m6/.gitignore     |  22 +
 previous-exams/2021-midterm/m6/assignment.sbt |   2 +
 previous-exams/2021-midterm/m6/build.sbt      |  12 +
 .../2021-midterm/m6/grading-tests.jar         | Bin 0 -> 35241 bytes
 .../m6/project/FilteringReporterPlugin.scala  |  31 ++
 .../m6/project/MOOCSettings.scala             |  49 ++
 .../m6/project/StudentTasks.scala             | 303 +++++++++++++
 .../2021-midterm/m6/project/build.properties  |   1 +
 .../2021-midterm/m6/project/buildSettings.sbt |   5 +
 .../2021-midterm/m6/project/plugins.sbt       |   2 +
 .../m6/src/main/scala/m6/M6.scala             | 149 +++++++
 .../m6/src/main/scala/m6/lib.scala            |  84 ++++
 .../m6/src/test/scala/m6/M6Suite.scala        | 422 ++++++++++++++++++
 previous-exams/2021-midterm/m7.md             | 155 +++++++
 previous-exams/2021-midterm/m7/.gitignore     |  22 +
 previous-exams/2021-midterm/m7/assignment.sbt |   2 +
 previous-exams/2021-midterm/m7/build.sbt      |  12 +
 .../2021-midterm/m7/grading-tests.jar         | Bin 0 -> 35244 bytes
 .../m7/project/FilteringReporterPlugin.scala  |  31 ++
 .../m7/project/MOOCSettings.scala             |  49 ++
 .../m7/project/StudentTasks.scala             | 303 +++++++++++++
 .../2021-midterm/m7/project/build.properties  |   1 +
 .../2021-midterm/m7/project/buildSettings.sbt |   5 +
 .../2021-midterm/m7/project/plugins.sbt       |   2 +
 .../m7/src/main/scala/m7/M7.scala             | 149 +++++++
 .../m7/src/main/scala/m7/lib.scala            |  84 ++++
 .../m7/src/test/scala/m7/M7Suite.scala        | 422 ++++++++++++++++++
 158 files changed, 10460 insertions(+)
 create mode 100644 previous-exams/2021-midterm/m1.md
 create mode 100644 previous-exams/2021-midterm/m1/.gitignore
 create mode 100644 previous-exams/2021-midterm/m1/assignment.sbt
 create mode 100644 previous-exams/2021-midterm/m1/build.sbt
 create mode 100644 previous-exams/2021-midterm/m1/grading-tests.jar
 create mode 100644 previous-exams/2021-midterm/m1/project/FilteringReporterPlugin.scala
 create mode 100644 previous-exams/2021-midterm/m1/project/MOOCSettings.scala
 create mode 100644 previous-exams/2021-midterm/m1/project/StudentTasks.scala
 create mode 100644 previous-exams/2021-midterm/m1/project/build.properties
 create mode 100644 previous-exams/2021-midterm/m1/project/buildSettings.sbt
 create mode 100644 previous-exams/2021-midterm/m1/project/plugins.sbt
 create mode 100644 previous-exams/2021-midterm/m1/src/main/scala/m1/Lib.scala
 create mode 100644 previous-exams/2021-midterm/m1/src/main/scala/m1/M1.scala
 create mode 100644 previous-exams/2021-midterm/m1/src/test/scala/m1/M1Suite.scala
 create mode 100644 previous-exams/2021-midterm/m14.md
 create mode 100644 previous-exams/2021-midterm/m14/.gitignore
 create mode 100644 previous-exams/2021-midterm/m14/assignment.sbt
 create mode 100644 previous-exams/2021-midterm/m14/build.sbt
 create mode 100644 previous-exams/2021-midterm/m14/grading-tests.jar
 create mode 100644 previous-exams/2021-midterm/m14/project/FilteringReporterPlugin.scala
 create mode 100644 previous-exams/2021-midterm/m14/project/MOOCSettings.scala
 create mode 100644 previous-exams/2021-midterm/m14/project/StudentTasks.scala
 create mode 100644 previous-exams/2021-midterm/m14/project/build.properties
 create mode 100644 previous-exams/2021-midterm/m14/project/buildSettings.sbt
 create mode 100644 previous-exams/2021-midterm/m14/project/plugins.sbt
 create mode 100644 previous-exams/2021-midterm/m14/src/main/scala/m14/AbstractBlockingQueue.scala
 create mode 100644 previous-exams/2021-midterm/m14/src/main/scala/m14/AbstractThreadPoolExecutor.scala
 create mode 100644 previous-exams/2021-midterm/m14/src/main/scala/m14/M14.scala
 create mode 100644 previous-exams/2021-midterm/m14/src/main/scala/m14/Monitor.scala
 create mode 100644 previous-exams/2021-midterm/m14/src/test/scala/m14/M14Suite.scala
 create mode 100644 previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/MockedMonitor.scala
 create mode 100644 previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/SchedulableBlockingQueue.scala
 create mode 100644 previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/Scheduler.scala
 create mode 100644 previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/Stats.scala
 create mode 100644 previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/TestHelper.scala
 create mode 100644 previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/TestUtils.scala
 create mode 100644 previous-exams/2021-midterm/m15.md
 create mode 100644 previous-exams/2021-midterm/m15/.gitignore
 create mode 100644 previous-exams/2021-midterm/m15/assignment.sbt
 create mode 100644 previous-exams/2021-midterm/m15/build.sbt
 create mode 100644 previous-exams/2021-midterm/m15/grading-tests.jar
 create mode 100644 previous-exams/2021-midterm/m15/project/FilteringReporterPlugin.scala
 create mode 100644 previous-exams/2021-midterm/m15/project/MOOCSettings.scala
 create mode 100644 previous-exams/2021-midterm/m15/project/StudentTasks.scala
 create mode 100644 previous-exams/2021-midterm/m15/project/build.properties
 create mode 100644 previous-exams/2021-midterm/m15/project/buildSettings.sbt
 create mode 100644 previous-exams/2021-midterm/m15/project/plugins.sbt
 create mode 100644 previous-exams/2021-midterm/m15/src/main/scala/m15/AbstractBlockingQueue.scala
 create mode 100644 previous-exams/2021-midterm/m15/src/main/scala/m15/AbstractThreadPoolExecutor.scala
 create mode 100644 previous-exams/2021-midterm/m15/src/main/scala/m15/M15.scala
 create mode 100644 previous-exams/2021-midterm/m15/src/main/scala/m15/Monitor.scala
 create mode 100644 previous-exams/2021-midterm/m15/src/test/scala/m15/M15Suite.scala
 create mode 100644 previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/MockedMonitor.scala
 create mode 100644 previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/SchedulableBlockingQueue.scala
 create mode 100644 previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/Scheduler.scala
 create mode 100644 previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/Stats.scala
 create mode 100644 previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/TestHelper.scala
 create mode 100644 previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/TestUtils.scala
 create mode 100644 previous-exams/2021-midterm/m2.md
 create mode 100644 previous-exams/2021-midterm/m2/.gitignore
 create mode 100644 previous-exams/2021-midterm/m2/assignment.sbt
 create mode 100644 previous-exams/2021-midterm/m2/build.sbt
 create mode 100644 previous-exams/2021-midterm/m2/grading-tests.jar
 create mode 100644 previous-exams/2021-midterm/m2/project/FilteringReporterPlugin.scala
 create mode 100644 previous-exams/2021-midterm/m2/project/MOOCSettings.scala
 create mode 100644 previous-exams/2021-midterm/m2/project/StudentTasks.scala
 create mode 100644 previous-exams/2021-midterm/m2/project/build.properties
 create mode 100644 previous-exams/2021-midterm/m2/project/buildSettings.sbt
 create mode 100644 previous-exams/2021-midterm/m2/project/plugins.sbt
 create mode 100644 previous-exams/2021-midterm/m2/src/main/scala/m2/Lib.scala
 create mode 100644 previous-exams/2021-midterm/m2/src/main/scala/m2/M2.scala
 create mode 100644 previous-exams/2021-midterm/m2/src/test/scala/m2/M2Suite.scala
 create mode 100644 previous-exams/2021-midterm/m20.md
 create mode 100644 previous-exams/2021-midterm/m20/.gitignore
 create mode 100644 previous-exams/2021-midterm/m20/assignment.sbt
 create mode 100644 previous-exams/2021-midterm/m20/build.sbt
 create mode 100644 previous-exams/2021-midterm/m20/grading-tests.jar
 create mode 100644 previous-exams/2021-midterm/m20/project/FilteringReporterPlugin.scala
 create mode 100644 previous-exams/2021-midterm/m20/project/MOOCSettings.scala
 create mode 100644 previous-exams/2021-midterm/m20/project/StudentTasks.scala
 create mode 100644 previous-exams/2021-midterm/m20/project/build.properties
 create mode 100644 previous-exams/2021-midterm/m20/project/buildSettings.sbt
 create mode 100644 previous-exams/2021-midterm/m20/project/plugins.sbt
 create mode 100644 previous-exams/2021-midterm/m20/src/main/scala/m20/MultiWriterSeqCount.scala
 create mode 100644 previous-exams/2021-midterm/m20/src/main/scala/m20/SeqCount.scala
 create mode 100644 previous-exams/2021-midterm/m20/src/main/scala/m20/instrumentation/AtomicVariable.scala
 create mode 100644 previous-exams/2021-midterm/m20/src/main/scala/m20/instrumentation/Monitor.scala
 create mode 100644 previous-exams/2021-midterm/m20/src/test/scala/m20/TestSuite.scala
 create mode 100644 previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/MockedMonitor.scala
 create mode 100644 previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/Scheduler.scala
 create mode 100644 previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/Stats.scala
 create mode 100644 previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/TestHelper.scala
 create mode 100644 previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/TestUtils.scala
 create mode 100644 previous-exams/2021-midterm/m20/src/test/scala/m20/overrides.scala
 create mode 100644 previous-exams/2021-midterm/m21.md
 create mode 100644 previous-exams/2021-midterm/m21/.gitignore
 create mode 100644 previous-exams/2021-midterm/m21/assignment.sbt
 create mode 100644 previous-exams/2021-midterm/m21/build.sbt
 create mode 100644 previous-exams/2021-midterm/m21/grading-tests.jar
 create mode 100644 previous-exams/2021-midterm/m21/project/FilteringReporterPlugin.scala
 create mode 100644 previous-exams/2021-midterm/m21/project/MOOCSettings.scala
 create mode 100644 previous-exams/2021-midterm/m21/project/StudentTasks.scala
 create mode 100644 previous-exams/2021-midterm/m21/project/build.properties
 create mode 100644 previous-exams/2021-midterm/m21/project/buildSettings.sbt
 create mode 100644 previous-exams/2021-midterm/m21/project/plugins.sbt
 create mode 100644 previous-exams/2021-midterm/m21/src/main/scala/m21/MultiWriterSeqCount.scala
 create mode 100644 previous-exams/2021-midterm/m21/src/main/scala/m21/SeqCount.scala
 create mode 100644 previous-exams/2021-midterm/m21/src/main/scala/m21/instrumentation/AtomicVariable.scala
 create mode 100644 previous-exams/2021-midterm/m21/src/main/scala/m21/instrumentation/Monitor.scala
 create mode 100644 previous-exams/2021-midterm/m21/src/test/scala/m21/TestSuite.scala
 create mode 100644 previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/MockedMonitor.scala
 create mode 100644 previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/Scheduler.scala
 create mode 100644 previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/Stats.scala
 create mode 100644 previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/TestHelper.scala
 create mode 100644 previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/TestUtils.scala
 create mode 100644 previous-exams/2021-midterm/m21/src/test/scala/m21/overrides.scala
 create mode 100644 previous-exams/2021-midterm/m3.md
 create mode 100644 previous-exams/2021-midterm/m3/.gitignore
 create mode 100644 previous-exams/2021-midterm/m3/assignment.sbt
 create mode 100644 previous-exams/2021-midterm/m3/build.sbt
 create mode 100644 previous-exams/2021-midterm/m3/grading-tests.jar
 create mode 100644 previous-exams/2021-midterm/m3/project/FilteringReporterPlugin.scala
 create mode 100644 previous-exams/2021-midterm/m3/project/MOOCSettings.scala
 create mode 100644 previous-exams/2021-midterm/m3/project/StudentTasks.scala
 create mode 100644 previous-exams/2021-midterm/m3/project/build.properties
 create mode 100644 previous-exams/2021-midterm/m3/project/buildSettings.sbt
 create mode 100644 previous-exams/2021-midterm/m3/project/plugins.sbt
 create mode 100644 previous-exams/2021-midterm/m3/src/main/scala/m3/Lib.scala
 create mode 100644 previous-exams/2021-midterm/m3/src/main/scala/m3/M3.scala
 create mode 100644 previous-exams/2021-midterm/m3/src/test/scala/m3/M3Suite.scala
 create mode 100644 previous-exams/2021-midterm/m6.md
 create mode 100644 previous-exams/2021-midterm/m6/.gitignore
 create mode 100644 previous-exams/2021-midterm/m6/assignment.sbt
 create mode 100644 previous-exams/2021-midterm/m6/build.sbt
 create mode 100644 previous-exams/2021-midterm/m6/grading-tests.jar
 create mode 100644 previous-exams/2021-midterm/m6/project/FilteringReporterPlugin.scala
 create mode 100644 previous-exams/2021-midterm/m6/project/MOOCSettings.scala
 create mode 100644 previous-exams/2021-midterm/m6/project/StudentTasks.scala
 create mode 100644 previous-exams/2021-midterm/m6/project/build.properties
 create mode 100644 previous-exams/2021-midterm/m6/project/buildSettings.sbt
 create mode 100644 previous-exams/2021-midterm/m6/project/plugins.sbt
 create mode 100644 previous-exams/2021-midterm/m6/src/main/scala/m6/M6.scala
 create mode 100644 previous-exams/2021-midterm/m6/src/main/scala/m6/lib.scala
 create mode 100644 previous-exams/2021-midterm/m6/src/test/scala/m6/M6Suite.scala
 create mode 100644 previous-exams/2021-midterm/m7.md
 create mode 100644 previous-exams/2021-midterm/m7/.gitignore
 create mode 100644 previous-exams/2021-midterm/m7/assignment.sbt
 create mode 100644 previous-exams/2021-midterm/m7/build.sbt
 create mode 100644 previous-exams/2021-midterm/m7/grading-tests.jar
 create mode 100644 previous-exams/2021-midterm/m7/project/FilteringReporterPlugin.scala
 create mode 100644 previous-exams/2021-midterm/m7/project/MOOCSettings.scala
 create mode 100644 previous-exams/2021-midterm/m7/project/StudentTasks.scala
 create mode 100644 previous-exams/2021-midterm/m7/project/build.properties
 create mode 100644 previous-exams/2021-midterm/m7/project/buildSettings.sbt
 create mode 100644 previous-exams/2021-midterm/m7/project/plugins.sbt
 create mode 100644 previous-exams/2021-midterm/m7/src/main/scala/m7/M7.scala
 create mode 100644 previous-exams/2021-midterm/m7/src/main/scala/m7/lib.scala
 create mode 100644 previous-exams/2021-midterm/m7/src/test/scala/m7/M7Suite.scala

diff --git a/previous-exams/2021-midterm/m1.md b/previous-exams/2021-midterm/m1.md
new file mode 100644
index 0000000..0846974
--- /dev/null
+++ b/previous-exams/2021-midterm/m1.md
@@ -0,0 +1,61 @@
+Use the following commands to make a fresh clone of your repository:
+
+```
+git clone -b m1 git@gitlab.epfl.ch:lamp/student-repositories-s21/cs206-GASPAR.git m1
+```
+
+## Useful links
+
+  * [A guide to the Scala parallel collections](https://docs.scala-lang.org/overviews/parallel-collections/overview.html)
+  * [The API documentation of the Scala parallel collections](https://www.javadoc.io/doc/org.scala-lang.modules/scala-parallel-collections_2.13/latest/scala/collection/index.html)
+  * [The API documentation of the Scala standard library](https://www.scala-lang.org/files/archive/api/2.13.4)
+  * [The API documentation of the Java standard library](https://docs.oracle.com/en/java/javase/15/docs/api/index.html)
+
+**If you have issues with the IDE, try [reimporting the
+build](https://gitlab.epfl.ch/lamp/cs206/-/blob/master/labs/example-lab.md#ide-features-like-type-on-hover-or-go-to-definition-do-not-work),
+if you still have problems, use `compile` in sbt instead.**
+
+## Exercise
+
+Given the following sequential implementation of a function that computes the sequence of rolling averages, your task will be to complete and optimize a parallel version of this code.
+
+```scala
+/** Compute the rolling average of array.
+ *
+ *  For an array `arr = Arr(x1, x2, x3, ..., xn)` the result is
+ *  `Arr(x1 / 1, (x1 + x2) / 2, (x1 + x2 + x3) / 3, ..., (x1 + x2 + x3 + ... + xn) / n)`
+ */
+def rollingAveragesSequential(arr: Array[Int]): Array[Double] =
+  // Transform all numbers to fractions with denominator 1
+  val arr1 = arr.map(x => Frac(x, 1))
+  // Compute the rolling average keeping the sum of all elements in the numerator and the count of elements in the denominator.
+  val arr2 = arr1.scan(Frac(0, 0))((acc, x) => Frac(acc.numerator + x.numerator, acc.denominator + x.denominator))
+  // Transform fractions to Doubles
+  arr2.map(frac => frac.toDouble)
+  // Drop the extra initial element that was added by the scan
+  arr3.tail
+```
+
+ This implementation has some issues:
+ - It does not use parallelism
+ - Creates two intermediate arrays by calling `map`
+ - Creates an extra intermediate arrays by calling `tail`
+ - Scan returns an extra element we do not need
+
+ We want to parallelize and avoid the creation of the extra arrays.
+ As we are calling a `scan` the natural operations we need are `upsweep` and `downsweep`.
+ It is possible specialize those operations for our problem by letting those operations do the mapping.
+ It is also possible to change those operations to not generate the first element.
+
+We give you a version of `rollingAveragesSequential` that partially implements the parallelization using `upsweep` and `downsweep`.
+
+ Your tasks in the exercise will be to:
+ - TASK 1: Implement the parallelization of `upsweep` and `downsweep`
+ - TASK 2: Remove the calls to the `map`
+ - TASK 3: Remove the call to `tail`
+
+ You can get partial points for solving part of the tasks.
+ The order of the tasks is a suggestion, you may do them in any order if that is simpler for you.
+
+Look at the `Lib` trait to find the definitions of functions and classes you can use (or already used).
+In this question we use a `Arr` array class instead of the normal `Array`. You may assume that this class has the same performance characteristics as the normal array. `Arr` provides only a limited set of operations.
diff --git a/previous-exams/2021-midterm/m1/.gitignore b/previous-exams/2021-midterm/m1/.gitignore
new file mode 100644
index 0000000..40937dc
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/.gitignore
@@ -0,0 +1,22 @@
+# General
+*.DS_Store
+*.swp
+*~
+
+# Dotty
+*.class
+*.tasty
+*.hasTasty
+
+# sbt
+target/
+
+# IDE
+.bsp
+.bloop
+.metals
+.vscode
+
+# datasets
+stackoverflow-grading.csv
+wikipedia-grading.dat
diff --git a/previous-exams/2021-midterm/m1/assignment.sbt b/previous-exams/2021-midterm/m1/assignment.sbt
new file mode 100644
index 0000000..da7eb3c
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/assignment.sbt
@@ -0,0 +1,2 @@
+// Student tasks (i.e. submit, packageSubmission)
+enablePlugins(StudentTasks)
diff --git a/previous-exams/2021-midterm/m1/build.sbt b/previous-exams/2021-midterm/m1/build.sbt
new file mode 100644
index 0000000..e476688
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/build.sbt
@@ -0,0 +1,12 @@
+course := "midterm"
+assignment := "m1"
+scalaVersion := "3.0.0-RC1"
+scalacOptions ++= Seq("-language:implicitConversions", "-deprecation")
+
+libraryDependencies += "org.scalameta" %% "munit" % "0.7.22"
+
+val MUnitFramework = new TestFramework("munit.Framework")
+testFrameworks += MUnitFramework
+// Decode Scala names
+testOptions += Tests.Argument(MUnitFramework, "-s")
+testSuite := "m1.M1Suite"
diff --git a/previous-exams/2021-midterm/m1/grading-tests.jar b/previous-exams/2021-midterm/m1/grading-tests.jar
new file mode 100644
index 0000000000000000000000000000000000000000..6fa91f4263cecf0bd58cfea49fefc29d3cf7bffa
GIT binary patch
literal 33287
zcmb5V18`(-yRRK*V%whBwr$(ColI;e9ox2TTNB%MCYfZu%>UhI?>c*b=RI}0s;j%J
zp6<HWs=J<bt^4}5f;1=?D$uuY-++LCh`yfx^*{xJ1CkY05u}xr6Qh?El#>(_RaT*s
z6;o9K2Lism`}5~>0to0qc4|^anwD-JPMVf#W@@%kiD8L(_vn6#c1&_wcA8p}1{nH0
z)C6!?q(ymXR+3zVesq3}ZB+KdntcuwI}hjb1QYRck6>UDO(#AhD;<yys|-j@)DN~o
zu7EbG0!h!mNDrLF%)0Kk!mN<&(g9MChWy4xsB!J^RVO+y(AQ^BFlZp4zt#V@@<D;1
zfNUA*|Fhb^EC2rw6!TvzWf_%SEnQ4WNe%7n?MNBvjBN~^o&WReAu86=8wRL;vE3rZ
zy5`+8wpzL^#mmi=o$ab%NZ>@(#z=w?L9L9Hj%S&P<PE*e@&m!Y9P0>J-4a9B48v%r
zz3FB-XPviE-Y#BV2!QnVY4hjGRdHCET|l%KgCC33lm&uKjR_4osz2mbms@=Kx!4g9
zF0@?-2L2F1F9b)BYMyBhpat&(eFmL$#M;>BZuD4ebeF6m>dFQPDPRq6705x4d|T_O
zHOPwJ-|fvn(F1pXOOe#+*9}Z0U6V3FG7Cj!o-85BHi)Xr_h*?IYA@>$YN>>*X5N54
zAF-XdC?*-$chzNf*?P$#0o~a7uv**dyDJLh%n_i+J7Ng(raG<{_<kWw*TE+u)O#5a
z35$=s&|khtB7?)eIvO?pZD(}_N?G{rwk!jqfo@>p%D8?v_7oZ5LZWBnN}sI8B2%r$
zRD&_xR&HGq5Rr>~Jf%$UA|JT`6S+A+%hWR<E3UZjdI}0X-DeIyUQ|itQiXKNY<LgB
zxziWxZuG!y1~Kq9poJhhY07WUv0xXP4Y;C62;6hLOSsJ*lMih7rL^@QMeEL)eo5O&
z0bD$#bsIvKZbKPPxvVRJ<<A-{KML(MykwOz8H*|1!jp7GoHB#pgEs#5nc1c&dWDgx
z{up{CJC37w_*2o<;uSD#k1Lmt&QBTU%BE5S0gE~}1k)1vp+!?4@>6RB+C8>Pe9ow5
z)FaWsmXWJMoj#ucV*<m&4ecU=%lx21Y}2(R?rlR=6kK)2{FNT)`$IW#SOm>5hXJss
zOhJ4MqNf>obOZl%uX>hjBV<=>x{?P<uBMGhi2pzBU7RJ-Zw3McqzU$~_WplpTBiTj
zv@uE_@{0nPezEmv69yf?#8mL*>u@Ib`C{S{-}-}#^6H(T7#Z7bQyo2YBv+CD(E1Z6
zi1@MG#WD4)vKo$H*)DdzJb323)bRWHeLxtX&|^lHS~mx=@&ghaaBD!Xs<aJYqqYSG
zlBz!znU5}m^VeFjW8U1d4L@(l(8aLG7Z0s!r_m^;0^ZyMl$6}vXGF(33*0eT+Eik}
zqxwsj0+|)iN3fiHcLu<OLj!xG<RWNgp12p=LU3T!GDxYHhZ(rD(k)tw0P}2v(l0^o
z1GAp8j$75;mf7KMDlebq-FlWxG&=0~BU0UPMX@4nFYUB5#8?(Etrifi3sc4rt+rE!
zIr-=CoELA1a33w5Yz=Lr4A^*+_=8O^CvXc}CZ3pFIIzV;94wV6Lq$=BXZ*)ZDkcmv
z?Pxb|cHi|nLh&*07zeZbafd3DR|Hi`I@L`p^jQgw%NVBGKr?=SC!KL=F~y-%3wK~Y
z{q`2{JG_-2@3s-bp7I_hXK9~-&o+V~2DSUgZ6;6hh<wm5-)hmeN{?EK(_m=tj_N@C
zdff0+j#Gx{_l8PO)G!sBcR}2iVQWjS#-3lwchDp*Bga_4<HI!7m506}p?Y~u_jo9&
zY1|!s*_G!L_u%L~3LHUN4GlawiH6GTyM^H|8YGpQH^aUS@fuMc0%Idufk_U$LxsuK
zi$GY((rx0y=ioUyWL~gNbmJ_@OFq3+qSHp%D^yo(rsU2v^FULDKQg~3=8{#4@ERY=
zFSZJ<Dc-{t_RsEWHk{mUvV4O4-Fh7vdn#qWdXwhg_9o%~zM;xk8cEtZ*pLc3IsJY8
z?>(w!?T(^~y2WnEC7FSq0T8Fu!Z%LmAw)$=S)oF$=x-8DEcj7t$xW-AD48agCp!G{
zK=2ClIskc=*s#=$$lng=9Y1o~Nw<_pI$J<U_jbN+f4_9T?lC{E_4o6I-6i!y{HcyL
zE*pb-QDR&M?o6j&p0do`LMsj~w0l&)a5m83Cq0|uYE8+`+-ft$U3hR+0uu0zkUcI%
zs_>u?gj+is)#ckzE*I4)>gn?!fp+@pWQRa$YYibeVo8!fLv~?caM<An+T*wHpTy>V
z&>-SEOPfB;I^@8OR!3B>;<?l~oE@juq6Z~fx?LtTR1(m*zva!rKR}S&A=l0lb$6Pd
zjTm5>wcKIpUNF|zCZ8A=nX(-Nn$Qmsf24QN#KZBy(a!M(@czUR{x%EE^X}r?p+~1*
zm4UvNt)I<q#Uu|7nHEd_0=ut(3+c!a0DPI$nHxnCI0%9_<LWGG;19GVJIqk4t3_3Z
zkJPP3T|55dLsh5Oq|BD+%r#Rs3Kl%BpCkRW9(auj(%J0epovO5+wDZIMwu$`yTOo_
zb9IX*0;}efHGrskH~ZCO%W2lzgk`zN*p8c<4M*d4#aHRRShIq!`3Qfi<0WsyxyJ$r
zW~89PAUe9#Y-SpLrV@l3T3bysz_AN^klI5wZ;}mN_h@=a;}=Q5=%$_2E)Ds<2*>Ef
zR>`R>&wW~QX?u5&^id3^9wbc5=mQDSS!(9@3u<aI--z$_(6Fd2nyy48M&Avz2n$&q
zU3JI!JV;(l9T;bP?dyGbsFyWdVXZ@cgPAq`xL)*%-2jGMsSH=jvYes%Iay<b)v6gJ
z*{NkH{;kF{NetNoQoUm?rc#9<Q^+0%&C}H-sk=<vT2Vb00Bw=UyU@wGxA!9$^kI&X
z;vo$qoNKwjICBLVCw}GfLKBP3abv|g)yEeK>?PjK70g|JL~p>goO62(zQ$5<6Y-lV
zf=EAAqzbBPV#Vf9QddFilSh9V;Brz26gOPoU9>Y6yOpQ=NE>G0wcB81Js~=8s~5IP
zT?@AMK;0-qG<Ps1K~^ZL#bvPbSB@Fo+%{h&cQANWu_fE}q6)hnTsLnJ3x8f085NA5
zcO6l&eE!B#wJ9d^ri~1=#vOX;%r-lTG%AvR8tgLfd+npqrpct;&)H5Qx=gWJD*b~(
zA}}gly|>d?iuH@WE1S0>)DJgOI?7C>Lh!>UHhefoFY<+d===)&LlbKl8+3Ll3~Tx+
zvTD!aafGzAvzQ)+DaSvM0I36iApJt=b(a#g+<(GkyeUXO>WkZ3a`Yn%9FDRtdpvC*
zTN0hfXVCN8?A*v|;4IOo{{ltgCzddOJ3Ny_skM$<07^~}!eu~_<s{)nP_z@Qqsju#
z7+j7;2xTWjC+}A^;G>KKt_Zi^%_(lX5IDwlOxP4L7_@!n0xeigacv33d__3DflINm
za*M7+yM{`K_^!=2DeDP#>;-FBi#N|m9y;Mlea&tbs0yvBR&TjxB;w(+a<xW7Y|QYO
z$HyS(Y<KTbx;|iPLgut!I?K_ug4)G4U$C1ok1l<EcEzWda~|>6vFrQ7)8S}rFvcvU
zOe`kXd?hjiM0;@$l9L|K>;>p4CMBsgH-0QedR9U;_9|v^UE#0jDy8hJFe|U|BfcSl
zu2FoGtvw)#@L3Y=^+u3-#UFUVnK*`=*uhjnOh=Rj(Lb<HnO`0IEbsIF{!1Q99Y0|G
zd#=<5rPJxK`RnG%0?p;#ipVwCw@%QVd(ZGfAt~K^ZEWtkB;)W#y|-sW40*dgdSlF;
zc4O2XY4|_??9f+h0qD};KtPbN{}1%=A3OAa+nGa@ChZmlP<h!MjS@@bGWmW4tCt6m
z@)Sr_Wt1VSRG5s<i4wC_WiiO=aI!hsywbXTBSp04gLcH#p5sA;neBG>nQ1pSyPnn8
z?*;XUEe%|MEPFUFBj`+EvURtR-SOrUsdGK^ap1~1h~qvPlxB@|IRqCih*(fWv@vTk
zZ%jDg40L*%^+5{ds)4$fS=fRtGZxM>mj!!To`GU_H9$;9Te@8qM>jWQK*MF(S)bhQ
zpnbQ0sL5N!!L1FH`y9Q5gV;h@sI=^TfYJVSU||FepZQ#|QPaG%qH(BL*8Z*BfMAt9
zeh^NuKbrhnrmj;?laP;JdhT;nvC4JCeFaxxbPKvgQF<N!TT>G?{f<tL&m!!;#NBkX
z*+nGfIpFR3r+Wd13MvQOHlvE|s(S6gnL-Gt`Ke>686<8nyWA<cYl~*RkA6sL4s#}D
z3++n~2W~kt`!DrViXdfF?8UydeF>`!Qaw#xlaxVtsh`96jp9{tSkBSIZU@YEei<Yg
zlCnGuLQxlfkpg&d202>;SNvYyQ?Fp@+mkZ07VJHO?*ZQW4*X%JTjOZDpke7X^?BZ5
zJ+eFoIpUet+4UlRo_-zBY*>|3En^-$=BFNsW4|H(Uc`4C7y6dI?wz7Q|6PmF|L+%Z
zC3_niOFMHxH&Z7=b5my_LuX548GCa}V--_p7t;UMInx^E2Fj~wpE*^A(s6r8eTa~q
ziV?I)9>Fc;M<5WFgz6(;lud|{?=(5nBn_l2409<>WO!$G8Ej`cE=9EQKynrb*G*^J
z-Z$OuFdx^x^6yxkR|Kzn-ZyI}ohLc&LxU#-9*BKh#bSb^D)Orm@}%Y_u76@pc<e~Y
zA>q#~ZIxzi7MR3nva(o=6nT@Lyz{<mcnNS9xehlEnXI0^0`mf%eu!<dAhV6|I#4=D
z2H|_4vLyc`=VnQX^j0X{jcoUYmdAfZWswvYYoIPDg`>5@T^>2;fQ&+=X;7&hA8KkV
z>9gi~K`2_pr%_cHi~-S4m>9!B;~1`yAds?VL;xhvxj`=>bD?FVhi{^D8tP^eo;W!j
zwv4R-HcOKlGjQ8g>wfNwEOzt=&wAW`1INEG5VIlM>n9nn?^CR6z-CMch|u9Cs|IE4
zdNrlAXc7dR#lgdgLKJ@1m)F~YPt*l=oUY&nB~%yg(ei|$E<tDQi^n}8o;g5;3r4!d
z;jB^89^D-26&O#@!lwpOfRPEH$w;EeL@0tQFO0doC$(42yekiieh2H`k-%Jgf(A6D
zGI6;fM;J-kO%5MyB#8y0Lm-Sks;o$m^W>??dXLJXef&HfhJY<Q6|RGaw|O3j0Nzv8
zz*wHQ14l)@7jD~zWN)ErlUdPH=Sm&JR`yaStu&3ntW9|>x8$v{#`2YrA96u6+&j3#
zG&D4Q!Rfl3xee6Ee5ksL8?Kf~O?`*87LU7J+Q&j)hesb6I|bkj2En#-@`ULqh@!Hu
z5Cvv8w*lJZ&)4Q7BBE!QG#2sc3R*a8Oqu$Tg-A2a;`?I_(K_okq+!_0+pt%^jpdN`
z!<L^4wQ}%l>PU)<=Ch#NioTR4Ego+iQCFs;Zl|Vrv2RE?Xm~6#5_QSm6Nwgp&I{ID
z4HES;ItVz}x%K~6FD!uUCjLQMZHFI@_>H@AFkfNR4h=E^{TxdXbk%!47?+3?S=cdV
zM(wAiQUV!6%%IR+c;K7m^jOUXU<w;WOa>)|HEh35#Rocv3N?2Gpcy>sLqN5%r%3#$
z-K9ZE>=;?9NN&-Ch88zs9K6d&uT_-iL2ep&+^Oh@hffWbdm~zjXp?@9^fAakg8K_|
z<adZT-|;HKf`YdMPj<$jpIgAu*?q-kO>wh_4#rhk_n}cxaqE<{9%C4`b;Gn*Q9tLh
zY8Nd1OFp_g12k>6|E=hSotmo=%P@k9H>Fp9gD_T|pkuL81d@xo7(;GDWapg~(ww!3
zK)r_KOJg*3*coB!gv<rkpcQRU=rA&!{jYsm?E%;mDsBOrWR)%~dnCoKlwx~QCC(o7
z6A>=X;=Tma;?*l@If|-pHPlgkY_nZ!4c5Ee-Y{mE8xWm8KVh7yuKPPhr)~`6wOTEF
zl8sZ;NcPQ~Q#o1DLBdZVow>MEN1R|(46JZO_`=9>P^L;o@z0{tlpG<<MSn9#b5`F>
z4nKlJs%rjtN_m5cE^9#F344hO$3Mhi%9mF*bRn*yAa8sZZG}_i86rC(cJVYl6KCR=
z024-|zZHJ1L(uaHE}qs?%Um9DcBHM0T8GypNXgeBCfCxHKRT$LlwRBzVX|j47I(mR
zrs4|-^HsQ$3>^^D&?lQo#KYK;GK|?#(Z5qjsm}Iy9M2s*35lXt;7*W{w{)BYXgS?i
zzBW)kqj^PJpGorG)O+O3t;*)xBQ~q#Yd*KA2XEn35xZz4ThO7cdZ(+k@UJhbe;`FX
zuOqIibDqYDc?VupZpLp)JGC=YS~LCJkmAhx-ZM!>mBdyWcC)(Y{R-@f2G8?~^qvHe
z8vbQyv%gwKrH01eFYo)x=vQKpJ+0o5p#&Vma0^4f^(XOzBmKO*Ch|J(&;k7^1HnMz
zdA#L0^D;VB)!yHK34O<t1u9>J-r&9KGWlrkmpDDwEd?7d4pa-IUj+sm{(UYhE<GFM
zkA07>h9QYhcVR)V=}ml^PC%Y>BQ8C<V^_=;PeE~kksV5kA?c%Sd$}X8ts?e-q~5Sx
zOz)IOOSmhNF;l*&v*q=&0&#xnkpZRutw>_Kiwpr%a27RjO~OHD&|quSgDY)jeB`iB
z=5X@(*$h#MbWJ4Y{h?QN5w($1A~hsQyVLdFIw6Et4YkDC=)vntF3(jl9^@)uCTy2G
z46bv=XwfF`fu#j(#)yF-Xb!d|8+DNMlk5)_)#r4Kx>dCqi!I0O7SkfMSiSB{4($R?
z;{e=Gi(gv8u6Oo#lsx(U^S49HKb`5HbCMaMGwo^y%y^k`8eKZtpev{y2%5Z2){6@U
znysKUYA(`G+sdnGh;{H6V&@HaQJ-`AKVvp)YB+;lOIpZfwj9}gShBc)r&^ZpSd1iV
z+?2?@G2UkKEin=}mQJ8qI^{@A@3u?`Y~7%``C3IQ6IfnoEE`AbN$n$+N(p)$V9c;o
z2>hup`}ts|u5R~0%oWAX`+FW7Ja!$p=x;w|Ccw$HNi0_!%ZGoG4ijm@?|?&f=gk67
z*MqQ7-$r}pIjRXbSHiK(@UT#Wv&=T-wX-6`EJ9$H(z47*f6Fl6TYC^VsQ7WrhGU`Q
zX`uziGFzY5PKyvT34xtT%Tn{T<YeFTYe~(IV>cX&&95ckEcA7G?Ysyv8xYv7v@F-s
z5ZK`KLs3;?%jT>~?gq=278JJJDQl!#A>?NxQELM!#h@NgdRnHX&JeX6^#a`P`zZ@E
zl@6(<=J9FaZWmB4HQD{vS8&Z4#NfjCUGTN3J_y@=*+Jwx;q02^tq<CVhgvwNU0tRS
z_KmGr45rX*){Z)06z=xs9q{emknXHapK@K34LxDBI=^Q_Qi1iiF0=Z*uLO0>rO+<D
zVV=7=h>QT8NgQO(5Bqvf*^e#+a@sl1i#gglC1ZtaYnK`QAJ082nNHyPR{g13W1_6i
z3EX=-l<otSQF;V@?dQLPSFxtn58Ug2-}7~Y=bFtB_af{DEf;eH#nCkd^O>dW3%`1(
zLRA|<`C8?Zk;08{mEK`#3gyy90}apqg6*-0^ISX0n$T}h{X8E??lr6YJq`Zd`46p6
zrjpPv2$+Zw<yXU#kJt9V=KCA0-xbIyE66I?Fl8+JtFJMK?E9^ooIgv0x7{V)@%-%D
zHD~t|R=wfzIzh6{?@pvHiU-v!BQ_&?<L%dfgK9tP-?3)`TSaxZPXM3a{E55g|8zgX
zcI>lbyYrG_ZTr<2abe0sdqQ=*lA@!2w>j_xT~n>I(WW=Pe1pDtjIA@=9MlPPgvaBa
zSnH&Fp@u3dRxg5dyT|{R2+#g-=2k%g0qtY`J0fKGw?rsxXk+87Vy|H6^!3Kn=6@ie
zCX@&2Xo{b_vt+ecI8sYH7%0B6B^WlTvnDbKR1u-60A@@*xSWXfQsT(e5ocQ>hnx|$
zBRoZY_TbD>)=)$e5Cjnn1&8~7w|nDD_ZrFg_KWRv?RidmPCEKnr_X!(4T`GnQ_b7O
za^;Jao}cM8j!08_?<{I~EBH$@+)07vmOlellqgCP@90w#Te-QLb-f087EfOB{JgOr
z0;BTB$GRge<|1-Ze}4V@lf;TJJUM$&aDg$t6JvXk2!dx?7y4cret4-7eubeHZ|_1~
zPQaK}NwJb53l{Fmq9QFiZ*|PD3j(c?mPtd48L^g(u@dajXO7Fd@RJO@OPW<wVO>|i
zIHlL{-DeZ}-P|-L1~2(C6MX2AM))PVxljjNK)PyL!q)!O=V4oHI%`^jZV8t&dDhBP
zkk^RtMH<g>m|=bUH-xQFEEL=lw3P4&G|Vy9fQ8=%TF%*9MpktJ=obX%Hw4!(@8SoA
znQ0#J<>Xy220ORg`E&R_2n?z)c}Au3&7kM;;KOq9cGyv72U-*UkZ;KNK{a$HqVkAR
z!4u?1X=%xXDY6rcG9AR@Iv{QxALBY|qhb~L#N=u2?xHC3HtdW0<QF0jL~W|`>@O!q
z^`PSxAjofWVvj0p88RLg6j_Dkzv891%f$0_mnxMgT$dHlt`x^4yM-#_={AeTS*n!h
zdSjng5;GxG&humgKc8gSC0}4l3~gCzAj2B9*s%NMZi2=wc}uLZy7lEnTv9@VTRvQX
zdH~sxMt|6Y(f!Wr4$o^OrgR=@i=~9u&y>TOG$3Z&*|Usy=5jiPee3)@E$}<!Qm*s8
ztxpkSRFZxUN%C^DFec0gyuOtvAoXoA(k7iX!NQs^)-^PGDipt;!a<XEDHg{pQO$8s
zIf8Quf@X*R%syt?vHU&(Enl2O5&ggeyds(ZVOHrz(&PdUZL5rmwtgLE4IAb?;A@cy
z0XZZSy>CRmM|_YgT+C*L0nulR+vyz&9Gtz>9}sXnNM%Y%@iPv_{b%Kz5*O6B01<zg
zOcO1$Q7AEwK})YB10UwaL=-KSPEUU(oa}HhmOYaP26(9v$g}FeJEGuuVxEx%MN4K|
zq>^6Ye6#`NQVv?O;E_8;OKMw`;2WhfMdZjNWg!b(vXqv^?7&-J=wD!l#$B>QsDHk%
zggY~y(`UUa_I?6^vBHHbA99?D8?=$>o&!AnMZ&EbY-~zhQ|rekj}3$5YglKkPr5Ft
ze8c&4q?aF&H1dld%zM9Y!PUya7N=!oR-L*6e3F4SC|gvR`U7Q;&~@T8i{<AiLIiV>
zAw-D*KP;fl_n6yNj)Q9kY4o938~_Sutb{WSlCaKpt)N4plEw6MScbzGdvEh1RAGzz
zSrQZnGOBB&Gq)c1A_GkZ-Vxv}7gJHRYY>;6N{FBvZtH8$R72&DtX$MKe2^r~vc&fR
z@OoMi;W&<ZHRbsReRZD#a^i;zyLJIgGPW^ewT9&}->OQc@z1QomCnF3P@eTer!9SX
zFy=9ARN6u5C{OhBM2~trLiCW)eNj@)g!q9&^CRMO(x&7hEVvci5HV5{1&*p$-kEZB
zT;P+l`)(FqtR#s{LZda*vX@7k7-=hEcJLYKQ$BTwiG_5vf9=(dD+_PbAltH~OPsiV
zRr>G<(_FMbKY$80K!$ecu*OJ>67$WnO~pEj0Ijllk)G|>>Z!QUaBa{RH;y)^QA#)a
z{8D|R4Z3X2XDlhEc<LJ2hYa_dC4BSE15klYK9?{xvb(CmvSgC%=}?ul8f&iAIB1I>
zks;f)VqMlK%%Q=zy1J>C^*eBfN~cI_8H3bMa|K23%kPSkEr~tfma;w?zcEjxP~Ohz
z6Y^P>t6ZYO6WbL+YpcFdepCVcg#5>w){X&HxRgO+-(Ic3&;LN&aim*SK1RxBJ3&Mg
z8{z)&!=hMa!>dQp+wa!ZHPrU09fbNu<^{ZQU^+_kFzc^ami~z*I2#J`^O*O0Mg+_s
zrE%$wz|P<N>1u$Z?EMP^I;0UuwyR#p*{~WxqSjk0xb8q@(esEV0JellJ?vF-n`#{F
zAyVA#&?)kQ0So@Dsb~v&vP-yeHkEq4Z~!8Ovh`xK2AJzw`zK{*f-U3uAjDys7gwe{
zvKvmizpteOxSq}+wA$=<7**larlFfX(SpD__=u;wee9Y8FOov6GIRPxy+b}2nYNEl
zMSrZ{e!Tz*a&jjq|I7*LwaPiK9?SYndpE)h5yh^WwvhRuyF<nVhtbiIW?wJ0%sJvU
zlegqBMa31%`YO|C%XKek88t*1ve6f-h`Y3$yRgJ@<Mw1(Vm<=nR~4yN*G?&j`g=n~
zp7O3lb;_<locglmaIkyS_k)B0V1IHlpU(EF(%`DA{(d2bnMI-GxK*!!i4LRs0{L&f
z3{sJGY!SANfbU0*PLQjsx3)gqGw$;iujPE@rM#QbF>rCXrzoYpT?UHnA?!;IKiHX?
zRaTg%AHJvPVX5SyluNZv%d!*X+9rFaZ=i7yPE=NqfZ}gE9c<R>9@&Pz+m6a@orOG9
zcRDWID6~(;_kb>Rc5^tgE4-Pdc*CA`$M<YV$Kp`>MooN#KCTMB>CtoA7d=)}^=`-G
z2R{1hIc-UtZK&`WNc6%iAb5@Yk`&vk|FRQ)Ba-MHmBuI9vWIKXWqZki?Ro^`r3AT2
z@Or~qw90g_g^CgD;;p*J@l;{J)4ep5?SaLuIT>?R8i+KH8<17$S|27_?pC2)=(pZj
z$f0MCYLzerQ}v829GH7IJgvXa8YZnUFG9#yH}y={>r^G}RvDzclSz{nY3x^6@Zh;+
zu-fk5RY68#Ls?xYTL>CgVZ)RsC&AjRZFdoy1v{8`lo<+ANRku})Vy??Q&3`A@W81)
zz7IolR&}y>zjX{@_5mSF114VtfEQKfD`krE4VJz(In=Qey)4U@?DD^HIPIt(^!-}x
z;X1%7eBEvxASU}mtd*z7-wS<!cnFo!r8ywGCwS9$r4lP;Plt_zfiXn_Egv;1@T~gK
z3C2~PoYNP`woa&d##DmYw%YlNH-6~GRBPGf;D_44DA?Y+VX{4O`m<@N%Z}nh{%#pU
zIuPtHLfj?}%`)dWwFi^}IcaPr)lbCHkSc^hpW+ODEwg4>CI!o>MWMdYw64en_uJjM
zet7-d2>i=eFee6mmW1*1^)`CWfCPCW!CTRx*tZ7Bop~QZD=S-DTRtk;6=XhH6LW}<
zQeaCNwPGrNz=)M4lt27<seIg-BkEYX+Rn8OS4<8)J+!slMS8i3%_hdQzyQXO^g$X&
zhyD<gcI7YWGM>kzHI{*xR;M@-%|yAVZ2AsC?{Rr7i2SfwVv47@3#<nU$SsM3_-dO*
z$)$UKnbQM^bX}&trjp-eYVp^U6}PwGDl^98CTyVZNGLh4{$o(KLwXc~S$opZ`iGi2
zMD&Drkty`TN0Yz1Qc?YoR{QLJ5w}}#REox4Eh-r*LWLVKWz4;t>>GQn<K9IQB6AlB
zLi9}cXY8Gt2u&U@oK}KH1m^(O0Kd0PFo_rnUc|w5eeLm?jj^!q1Ze6?*ifb9oDwoC
zBn2h)#95nkx>QNDYmx1jh^;Z?ha0+uV;epEQ?At3$v3WCN{epdANB5}f!D>RF7xb2
z_4X;6B&XE#byx3wE4pPm#pvd*sRIB}OBih;9|4-!upD$s7JzFmitW;0k*~QLN2zn=
zB#L~mhU>OX8E?NbUpv+i#UU*<_$+Iatm>VhmE+1?x(`ABcye7<-{Ys}&!0$gQ%EBb
zt-^T`xkqr2lFP?y#CCvSSp4R!r=u=csm2B?IVUUFXG!x!a(FbjMEVY!MPVBndnM!^
zV;q{;ZJnxgK3-am9>{DSQBzgjzsi^76obM-ky8*m+2jHipLOm44(Oy)8p(1uexse#
z4XhosjpaN{!%@&}cM3&6Av1imHLu|lQ8zGyjG6NV+5vh5T3%4Sk9hL7xJRqFS4dg(
zM8mO))&Vbp=QQ(M$wcW+%sNz2y;6nh#>|Dx5Qm<lDQwk;#5TubLD&#Dm=bOj5_kxQ
znjZAD$YPu0u+4Yu3C&9{ao2;yR>xwATNgN(5MKPA=h+H1UFd0{!#3AulkeCan&*ko
z{lYcZHks!+1%d63kDdGD_=B7!?kL~!>sMPsMm{nELeD@S1(_9G(~y?&G&~bVX4k~1
zNF+L71Q%rENW`3d<G!m?9X3rZh|kg~%qTxLB|k8}wNaKL^s5DH%jcO6((oG7kD14#
zf_a`UK4Nj+<j)qUgD2z`&SnxL>^eCWRKqt_S!ETQUztL{W&}=Iy(KcpJ@-T(sf}+t
zpK=m@P(P|FzxjUK+lN#Hhp^YV&MJO*CbVNKgT7A*^a;tqV4K_q@A$r2G6!pxJ?9c(
zCM&BPe}bM#xl+H`zR4<0zkYGfb_(6G6iC-xhrX;4bqVz$w}zsnJNM@LCU*1|yrTIA
z;PqS8($_0hnzO9Zth(8F%$8EmDkh*=3h}e(*q?lKMx$#&rhAlzaV4UZc=k*86YZF*
zMOXT<@5(3LYZ&J_?h1dr(`5RY9m4phhW3Gg<_FdXe-S@OiUB@rf(0yLTS%680(N#O
zzrAO`XQXA&Z~xHGmhd>@{%$<mB=Eu!5V4p?_s16{O_C2#FV)|){nGx?_5MZvOet=I
zDTikICC3Q@lVoqL_junlS{BY3<mY>hmqVxgA&&gN^oo+hW8XLiNC4Jb?ZZ?oMhceO
zv_rFT=<@Hp2T{|ZJ=}_{TTB!Zxz)MwNnV!y=bwn#CuC1g&OX%ho_1Wb)y$i0gPHpK
z)z3veoYy*pXX~8XtO(_m(JrgFFSOAvP`oUoK@W2)os;3|#~v1Z`yEV1qw>cbJOqyJ
zSoJ80;x(c=F6(Y>RPzwOZHqD$z?%j-!yM1?MQm?r&I1XE!gY#iy8>E-4%u=_u0$bE
zU_2o)dgao3+>lCD!D{T%pCPr(UVFTE&wT?_oq3?dtp(qK=1pg!SsZG5UXXLM_Skdt
z*FO>s575@KlJwdoSMWw+qH$P5yq8F(;rm#jT!F^}O(5m8*y%2_9d`AWVDwZ_;57R1
zQ5n2xMoT((e{PMiQh5DFM}mUGI2rstL~z);t^(_OL{YL+W3(IgNk3)(zQgQ2991~p
zH4D4$N<2{I6UsBgeCWcXF0de~dQNAZ-L&ZRdI62Oe79lx`V`47r2H5cQ22B6Of}ZL
ztR#SdPnb5<)9Vnqw=sYqd+(*%Y1r%)6z+Fh@gLGR=HCe)-~*)$K)tUXp#Dnnk_F~-
zD9;mdv)=+SULU@N?mtAQW$u|Dji%n!&&PYLoZ~h-#5e;AoG3os`n|oO%ZJQ5qH+&v
z$JWjUm`Z<DmQc$)tOiprQFDmQX2RGpun(Z59n_*^r_jiKvVHQy#%Y6qb=#E`Ti6e*
z(psbj7=o{-yxNI$Vpk(vX*IPLJavlFcIMcLZ$#?>J*vLi^>;<O1!ex?X4<7YzA5m{
zvhsv;VY{V$)i!(PruoPQeBw*{_bu$$pCM?!y`aC@?=s@kKN@EV_{XAJT>S{;jc*~y
zdI_W&*+F6WjqrECfdWH&>V*gdBtre~1{~!7cEBNLFKg)VKgJpw?mqu%x(qXc*c=%m
z&c~P{#5Vz2HT^$yFTZ6Hh5&+xJke*xL;%4M5FMv^BwMx%|I2hq{g>&&x!-!vd1iLo
z@V~tYyXiL1y~*+3W<=oi`2z~%g_aq(l72mNwUuwfQt0hYZd7mK<8_;tvrzK%sA1Fz
zc<lIcTs`{SWv(MluP!IAhkm??j`?B%Nge&CMKJK-@Rp<Csez%$NhWbqq{ehhlx;SC
z>V~|sN%-K@MTHgx%tfUIS~OlFnbBu-G>UaYD&1Uo^F|pUt$Ul?X;STVI)ZTQ&^)44
zB=#x>7@fqv9L1tK8j>A9DHWtoRV<8%owN_ZTx}z>q{kCBh|Ov0)hWzrIh`sE%EzHf
zU3^P(-1eNn=^hkfqtv4)_VxCkzLTINT@R!zF$gL<L>$F@w`lqi#~F)&5EeSH9g!YE
z2R>02*m2vEEu3$A&|l3H_q`0wU?>*1C)5E#Iv!e~$(ku6J^xAXnhY#-bHRX8NJybT
zp+A|WKUqM9fh<O*ls#ekw2PEgV@hN0z3|S$OrW1hpR&*wL%Kx6-FQvIMw}SCG$dab
zi8nohe4mad2jj+ir<nLhj2)~&QsiiUEj*iz+hDBhKxG}BRG&EnD&oB`=5t>J1)_<j
zLUy?g4@&ktw=mY%9p3GAcxuLiaR*=}?8!q!-Ld+XF_N&7qLF?Ar<<p3?!wTk`6D4M
zeYe6%UGQpbPgjd(nz$o&wa3@z;;ElVY#lXAoGy<z*a6RN|4r)=@!FD?nU6JP#q-^^
z#{j8{mXS6aJ{eIc9n~17DXzi;*{#!Z4+8DNF-5>CZpcAoc=;6d1j-TR3hilLqX}(0
zRcZ?R#woF4ao~MI=|(K-TQs!2cRq~0vJYwgt${~)rM-)Y!!r>T$2%T_pOuPBzBU+Q
z=`w8)5s0CwtBXldc0YxqKw0U~GD2rPNc4axX{hmfQ{b{%hRWeI!BCX~Pf?zqT9ldB
zD02F#3QIvmV1~G(3Kf2TQpmpYPxz=?%vqsf)>E{6{;e1@qzK)va3;Znh%yfrd=jwS
zE3qh4)Y?LsIS)E2{3tk~+h2A~(EWgPyLs7el&J)Jg8^-i4HUf(Ah=&*Ls8|Nherqc
zDOB_$cv@0X!!9k!X8Pm95K{K(sa;<9tSg6H54I4;s_J)4U7JB#U4e=g<-fV<wcHyj
z4h|&2uX>aoK}^G#3_$m#ijhf9E20gEOwru;>HcwC2@;Zv%rVq7AnI)CIm@o0%UTd{
zQDhq1GsD_!Ay_jhYCkl-mwPa86Bl?;OY>vPn++Gs7b7!6+oXei4b+BgHlq!MHNgO$
z$I}2^(3>q?hQXg~TEox!Y07tYo3uuL2ti97BE5yUl}*@46y6<E<@JaH68!PYYwaw6
z%w7=XNy2;1syc>#n~v&)o*$HGrH*1l{s6|($L_W8p3^)kn7SS%{{$q}m3_`GeUV3C
zKg@$S8nltpKrbJzMtPTwgvhYADxF}u+V3B1$D<W}62maR5&13ya0m=78&j9fn#OHp
zCQl1m#HZpW9N6%Ys%tv$?^chB&uo>`*`q8;>V9yd<@QnVD%>Fo8<JGjBAbuPS)Eyk
zXdIL-Df6h9S|91_+@IWf?(M@Y#Zo9SYfUv31G2iPdThddL-38Yth8pmY4E>4x(c7-
zh|p?U0C;;M>pDSHgWZylXUL7c5EdsM!#dw9_=)%MVfF=5f<7JExEU0VLJ#p1C$l9r
zgZj7CCiX<`bk!8on;3b0df|5l5ymPVb_e2q<~Eryxuqc_=oeOKsQw1yf7%^=O%K$I
zsx@IP2EjJm#jxx6L-y`Syr!#*rVBj2XL7)X-&c2;bm7CUg+*Vv{rOo()&paKEEKT~
zLERrx%58lAyAa3r6-7HQ1P+|fuZ`X!g#Xx}YbgyRve3~vqUP6e)Pn5;4!Wu?YLk5e
z^9XWmOM><pBTXo~BK~|EA0Rt@NtwKuC~epGa^bZUW0t(04mCU0I^8DH+m#f5RoSTn
z)qlQCIKqai06{z?i-hzVc`Hlv(!rsn#*{*-KG`}6la+ISZ76(P6)7o4$D33a=^#mm
z6K_0a5MdR9amra&Rto6j_lJCrT?rn}Dj*hek25S_%bbzp<c1@L_OtQl`K+Nf{DypF
z1oEH6UNp2n$0M}OVp!9dpMzUcgV6E^PC&K^+i7TS28CypG3Wc{XOx##b*wyhuy$RL
z?Ad<}m)t*wt8;DX?2xJq{!e$?kzKl5d6`2sHb}{Z7kLHN#02ud5%Co!-kbbh33J-^
z(A9bdbDQf!2U_@+9|jLg76<TDb>)F&CuRGJT>4}7DR&rJXM{-0?4G?-me{}{_c-6?
zA)=SBT#_1z<qYS-ajdcCHgdT<uixkQV@wqSH)Dja88Y{7zbAZA^is&!U|qXG<Hjsb
ztN4WHU&D3m*gpP~=F4!g&3gVdT%dmqSLIz3cwW7_fb$Xvwl{u;8Spf-j798me!aGU
zacl61AClmM439Oi1uohgZsU)Ugs>7(fd^caj4ra$K@jXPGM3n=e*_ndz(LiQ1B0>1
z`j_Bh$p7oW7D2E}$yjEh{w27kz62MWQmOy6<)+g@gEE%vf~G~HT$ct*+fmTJ1Q$uz
zhCI!}44y}E(*sr4dK0sVj7X>JFYc9-TP<th>QIUPc$nJ33$mRMb_esqarS-Ll5xD>
z=xgmOZ`^dY<9oI%Y#*UA{bsb=bb(2o2QsVV?l-$Np({HP?&&Kpbs<rIdK{Q{D>E)R
zyH>G>^n@!6c694*M&3oHoZLYuOzrHlh*#z0Uv~8t7x~tmBPUTkS=KUfIS;FR;V}Qp
zZ#n(-TXbK3D@gBV@MHNGR4pfuLCj9b{p7m~h7UGp)bHcl{&S_Ny}~Hk{J8YuS4SQV
zRUvB)p<FE+C`n<b7fT;8z??Y@iNKw6&LBoLBmH}p@-Jz?guZUp{VGjLZ~HgX>)sH1
zWvTD_=EU<J(EOKe2>j}GdY^nj`l<y^wop_t;40X6*1yH>aqhIQZ9Fv2eZ!h|_FhUd
zr)ls#yHDm?I)ilYXGJeY`p^!07Xm7qWUl-4EvD<<AzQ9`_wCVzmjDw#Mrp#zdjIfG
z{CV9;vHsZ?fb(<gf^vEHa7SK;e$Nt3ow1Y6S$EJGW_7Zy#YuPcOLpl^v`TVhK!qb*
z@ococjjOl2aiHx*H<^wcBmE`7vg5&s;xEP3^KTUw#s7r>RSYfvr`h@+2-qj;YLh-x
zD3_`64+27G5(-KS?ej#Llibrl!Kq>3xfFHEu9I&i#WsN>_d(fiX0vU5Wu0E6w8z|U
zyw_)c+WzV9CFps{@$K=x_8jGL`TT?gdi)L#KE0@mr`<WQrXluXFOMlk!^i3%AaAMc
z<;8+DZxp%%D%!u`yAE7EIJd8iXN>axXfYB*1#U+bW`u&@hT2v{gunxR9%+-v%ahH*
zQ>N%JyxBwSl|k+c4UiPC7ZKNxA7&wO6Uk(7K|rU}Fe%r|j<pK?kD!y%-=Nd*SI{Y7
zV(j8?&`E$m%2E*lkn}g`M9hVTo%R)U;vmw^B>gAo)Q2T|IX|u`8@oxRVdF?lsk>8C
z%IlE~66gATc(`^L#nHbNGLDV8{uEzF5)Ot1eDbPRM6esqPsYi{;yVxKU7UQJJC%YM
z>XJx{4FRk@7L4t&r-op&z#xZHTbM^^WFE9qlQS_OeI@bJx-Atm%_&NF7!gVkN*GId
z0Zf@#aU_|AY3oyjt?&V`q(EdUcoQ{jobCrMtrdl3%dN>AGJrFUJ<=jVBL@={R^Y{i
zB0a?G!DHXkY+D*hxZ*t@2S-&SY!8R~^E3nnCs^H3cS)cUO+jG{!DtMUJtuFMNmCK;
zF9c?;a1VSzVATEnUkHTLmA(-6;;E?gD7a+|M4Y5(WFMi{#mRX2VCX&XDKj)}D_ByO
z;CAvTH7n8-TYcDXjkVoI!Zs;`%jY}{q#6icGT?SoDa`bcKTEG4A8(quu(yOmn_D-r
zICH5BN1Q3b)Ty%-8BVI7{0cgiX@pgRsdSQs4^q{Lg>l41Ra#I}$G-(uk8P{$=lx=$
zDB~jQqNjhhV~f}gziol+xMdqRM~;ORfoN}ug@u{X8v--Wg*lc_iIj7R0NQWruq2cr
zysV0aMQCMwC4Gi@N^W~6q6Y*hdV~+f=gU%RSe8nP>U{v?qDFoN&hVFv(sSlT$l0)>
ztO^Q_6>t+G#cxsbUsc$KKzNQj749$}!{>7ML<_@*D04(2@_vb_=md>I_n&yolY$RF
zd`Dv0iHaQE(;|8Wp<nsdUvfq_FaL2cl@MpJnd`rK;OEN^*9;#;q3k*~yV^^vsui=*
zlx&8{l__OxJwFT)^%nx2;8|Bp8lO0VoWD*ur{110tKRtcCY9@ajH*t}<-7W#z?K!G
z$3U_$WP_l8K_E?>0pI_EKv98t3&qv1pc4&<JX<<n*#)e%EEEe3K*3TN!+s6fj6;1L
z*r>2*pVp%?eBYMlLxU$BEtM}_N`~6O1lecM8yWII4Qv%4VvuP*V>8ZryWQ={9BtdJ
zYx5_B6YZvdi}?73NupYrg=eB(iW<qWv3xS?`~f)l=|eL+TiUoCe1f4FjyQFY>2J_!
z@?SwGY;%#{=2*^BJ4rF;Fz^*!K-QB_7?_Hlv^j&2A|eEbsf;xQMFT%gB;w>vpCj$K
zb)FGZlOyMj*7xI#?dqW6Q@i^R4oLVs?i2xR-kPprnPb>mVi?W5HohvM4R>W0uDVBY
zz2p?K_Bc{qYtcCUo>S$oq<lv~kztt7IEJ<%9MWz=(xU|f*uBL)1Np?-+<*2H`Qzxn
zVdxjR@g!udz<wp2T)vV{k(AG>UMx*Z$vF=i915p6C3EZ%T1-1Mo!XNF*RX1c>oiiN
znJkZXB`If7E>CKHBE(y4L!Z!)z6lcQb-e>$84A)=uA~O?pzi9l!H9kDssdz7XRlX5
zxSlwIMD^poAc97I%kd(|e;_dO3j$I3ANDA|G8FikwI*c6uwM|Es@L%c?JoqXYNBNe
z{)IqRg1-36r0Ht*bu9Yw?Vg@++Mb7hAkft<5C-#RYVAQ@uW5JoGJs9&wf!LVec$ZW
zczPsinlq09j~$&-yS9gLi>cLAaTQ$fgq+iqX5R&;+qDu99eyW^DnU~dXI4t_m@HZj
zL*_xk&HDLkxKXqUYP4iui#&5*4=;A~DLIRNSf6#<fjBerT$qvQ1UhO%1fvw4LI=0D
zaxF@Q=6IbjR2JS7p3%ffb*PGB)lO1<2#8F5M%?M>b+B1(>On_65m|)5pMPp`y6Iqd
zed&|X=VY$;f(F72^s2O;(g8gal=&x9P&LJ{OoadVPGqFN^FfN%Dsu+jD}wu^EH&nE
z8m?ew5xZH4t%m(CtNe~vO&@6P3tU%ut{|M7epw3B=z)^V$~w)-DZ3UIu78qF^mgsq
zCAu_JI+Z0qjyeDlRwWG$;SQb>++tw?%57(`C2S6z9p|uiTR*#CN3Pua#Rnr$`fQxx
z<h5zXm*pmkZbWW4X*NVj8@g)*f-YE)(RXB@_aIW|E?l*ns3e_d6WP3RrJVp0zUy}|
z;*67dUiC1YNX>nl5Cn7%q^3pqBC~^g0fT2<2HW_Q7-=>sMVh0<=*ESpVJ4hD7^IJZ
ze2^@o_j6T4izfjinh?{9I2Ku)7TEs;oj5asMl3;N7SXX!$iSu>Z!f>HP$`1WU-M#h
z_zZI3X=hpsC%`7%SMI50u8oe!A}8!*7Br?4He<sk&+#NrlO)eGAAH)D(_-^$>ijjB
z)@Pdg?t!Fd!&;$Nna}}RDR%%!YRR6kNxb$+aycL?=%>Z&lfG+!=DuQX`xpYb+6+*a
z<gOjDrr{165^4GxDf@20>Y3YH#84)(ANF6|L5#ob#%yw0+{=12nmXb1ipte22Ru(^
zn%%m2X96pe+c#q0Aoh=MIhI_+ce*>Ni(cFebkbgQt_=+P8+c&ds>01+b<N@r;VV<w
z?_{>#48M#12M6kXaiHX14xC)nTX&B7%Yhs?I?QSHFU$55N518r`c`}x%TuD)!TzP2
zP_=Yk-3Tx0#}r*NyTIPR=>YmOrR+D0Q<{hDQ3$GleOSJhIpnuC)yUkwAT+Y3NV3PX
z5I{T&se5j}xha${9X|*v-wE?;BJVL-t}~VYn%XaG80F87>ibsoys3}YJ3J{~nqTC|
zPo=ko&+oS|;1`EC%&)GTR2xwW<+FuKaXY)MiTZInjwgMd<uAGmesTO7c5DqEhfg`e
zlQnK`<GrX=nV{-ve<C4k_L<s2{fk)_uL;&#{)F~!z$#`=fNmRdi+mjXQT#mlQ=>Bs
z0l(QNrYBv_#r`L7-wR8gx-D|8IpKmTC$mkj-xY4vtj4<ijdF*0&w`Y&+TviXpH-k|
zqIs+On|To}BYWIGf3F;q=JT!m0>Qz53xbsY76ku~A*U}C)LusWtf?{_ryq=!+z*Zq
z{w@eO@L*A}Y9|`0kBBiUO-N)5NaUlQjTHb)C5b@LhP1eRNKxR;0pQn#wATZPVu@(;
zlK|J<FWcU&!8hA4EHu0b>t7>5^PTr=-UsfJ9Pb(e&&L2rU>md(7#qwRi;ZQZNeX8%
z2YK=osghBz8b%r4sj=%7S>6;TB|(DVz6I(h>&KSl9DHjW{PqQjL!UCF+eF?B+`E2~
zUBv>QTPT)f$)o4KSCI+G-agJo>nI$}$SM>ImB_^OmNY~1Czbm)zC<P;4br+Xv#mtg
zQ%YSz14@MFv=Rhqa4Qa^GV1Duds7fQPU`BHOs|2kBb`)c;A)#}SXmblS!r%XVS=NX
zwN1svg&Bq8`2OtXO-1E^;b*x`mS|qFl`v;;pXV^s`m10BoOa_NlDZ0P#<PGBo$%!6
zu)c}40n)lDVC8^m=$aN0^6at9l7yM&Cp=c<Uph=l*V9GLBl9{6QgY;p?KIhzXd3+V
zVF<R5B|~B!Vejw8zIVI*cR^PmMhbldJME?PEzTSrK|7!z%}ns+2cv1OQ3a-gk?~Ew
zr0F=T6oD8HHFK?}=;D(>Bv7hARBX!`n<|WDKUJ)euz~}0eFwb{K=v$Byu<EG=(?>h
z<V&yu@SZ8wy831K%o(biEGUJXy0w+;P&AOKb}Y6>N$Inb^L?nAxsymu%y#C38HqyP
z=0;WESZ@~RqNG7iN9Evn+kPToK!7?Jmo8BiOREUC5FknR!U((G8l{c8xnV$$Fel3w
zZghsaU&cHuE{$+*(%p-&3?aT4BRqQ<e1L(?WM?}I$?FWO6gGT-^mD49eoG0R{LS%W
z(o(mo*4@KGJem^2Dwb+9&9vMJ`0lW+KGh)p1{xPO{zj9>_H9VyJWYUwg#$tTVIZj5
z5G(>nm%nI_*e3N36OChXpZ(zs*R*BWiB#@ZhrmoKO>APWQLHyX4imd3d0u9pN)52N
zXQD>j^J9NPr{YSk=+Z`uQCVAs-_IsDCvntCD36kBvSwiE@xaQ&+K~uhAT0q0A8#6)
z=Oa^SUWxCy<k5yrsReN|orP+Fr)&=!7fNA35iZ*!(dDyEY7rPt+p*`jU#!gYab!|w
z6)Cmf&nevc$fqY0yrlKiRO{C3n6bR2XC5AXD{o+9tf-eEPtvbQFL3*VP?yAYS6jS4
zD>hwUQZX=n;nFrfxpY#}KS3-|Y`s`@iD&hRMOIV+61`~_666m`-{|4Rh@@y99rlCf
z#5-4zC-FxUy9)*KR9snd6}zbcjxx-hAKIh`)m<dgw;JHmgUWMcvi{CMl|^KBnw4gV
zTEo)9U|Wf|SHM+@!3}oPgiX-tp`}Kdq+KLGToWCpJ;J&e0wK>xCa3xh>d*0EvDK9o
zECkStGYSO(M`$I^==YycDd22M_@)q^M>IBqo_5uwaZ?jDd!TKd@Xc*uYNuxT$$%p7
z^yM?dV|V8=-0rdHIIO-2Cp*UZz-K9#W8)PE<i&-&_hP{aku_Hn7!2`pLjD9^BTN?S
zEm(^*n)!71E}nii#%a!3C`3qdIE1~yg~&LDr=+t89{DKmrKxC`HYco{J>hf`%Z)%7
zbB*0obHU4K28Qc^0?c){ge2QI;jB>kJtWJAQp=)kIvBjOwBqG(4^LaFTmTweIF|Z}
zrvKXF9ehpS(tLOzLJU0dscabYf^+!7t*MXb`XAMG8|<)qDC2%HRdNGgvOgfS6;s3Z
z``QZy_Kl{JIO1arJlL!Y#_fX*>+mYLLuAa7WlqAL?~13mB%o*%x9_ilcp$Gt%9+ho
zY^8CB%3d?^?Ysv1R3E=wga93}6N5MO3d$SLSnIeQ(_=jQEWcs-YlA}d=TOlH-l&{P
zF2i$V$%|OF^IePMsO+;JCkg+c_a;&K$zQvS;I1mS&{SVim+i@;ujQ6A7H1lZ2^yaT
ziTF2$f6lORJ#u(K1@b6XRcGfz({GTd!ho;c{T7)xCH1f2-kw+WJsIN0LvK~3JdGXY
zCf=x6a%fMQWKN;fvM&7jBf0%2iM=oz;U8L7Le<U+V9tZl!e}ZrHKeB#XU`<w0*AYT
za)6<|G||8n25Vs4IPJ2DbC(us<!s#lSJ^v2N4oUyqH!j+ZQHhO+qN+=CdS0JF)=5$
zZA{d$t($!=_Wt(zpYN>u>+ZE0)lXG-uYOn6TMy_8Qi?5Te_|yZc@?S*P#24`A|bi~
z|FQ<@ZxFYphl1CpO*NIFLWcy*B2$>s5$Bd2@wxJja{p#ytt{eljW8>ymuHP=FkOF{
z2GTVK7h;UD<sW>(@rW-EBIjX)ysX#)OE^3UnHNpcL^EvFxK;gml&DaZ&ypS)ds4WG
zuf&thYp;%Ws*$?+GGn%QLnE!|;jzJVdbDe5T$u&Wvm{Aj{!EU718Rw$>FL6y_^q*S
zJEOMrDDK@_*Y@6_*kiAP`Js>Jw`7-<`|2<JpWimSDtL4UmL>mG=)H*QLL@DVu%@$z
z-RzNsS=F+NvcUH7Z_182_{<W>#1^}y^G0t8a@(by=;eI~A&u`(hRo(ByXK_95^}HD
zweRlsH>7w(gbiL5O7SDFWOeNC1r)~fwPQ1=o(i*fTbmkGiZ@r|;_Q!0$M{}5+y0Sf
za2JeF_dh5f9IWp;Fj~kK{`^S7<ixY*3Y6)mK!Q^+@$f``#lF6i;&p+3L5)Vi%oIPt
zf0jkm**CbtY;pRPrm};j>IjtiY-)S7>@34Ml%UQK<!%O+Ee?^oLT;<<yPqps)4Ld-
z+gI=7RIN&wtjlm*yy4CLVVhYBCtU5__qf~MK}vm4B;90=v{G?;{OLkxULR5R(&|ov
zHrHWO>bU1Fzq};7ONLSFFd*a5jpl~xJHOd;eDCjn{)=k4UFx<%XT}XW<`rtjrk!_}
zd>U%Q^wOv8{e?Vk|MX_fhRu4?C&Q-nvL`W!w5IzymSuU5b@HswUpE%VR?wpm-r{L4
zub6-1ic*)qb>o8NZcCd>MAl{@<GpQRt5q{W#IEgRiV|?}LOZje8DdVh#frds0c~mT
z5-_9}VE!}YkdB?T1uf5sM{v(QWau3%=&;&zop;8QI<IXL7+V22gAF;uV`XMTKVWDN
zC}tQ5dm80ihQ}YhFGWFhz@a>(Whc1hl9c6^orsGCFm^2{tG<L~rvj!W*jDi4T4+U-
zY~m!2z8}c)=ALGG74b10x)j5OaVUn2&lP{?Z)y2)R`N^zyeuE5+(Z`;mF6sdbR8{w
zzulC{dCwlL8Sbbe%8_uDr@XbtU6HId${Qi5M&!0kjh~q&cC80zZ1YcL4HI=@D#=<=
zaZ-B=XM3*8#pby?Rbg`kLlkz$sSP3HpEBT<jy6d?*tt#+PL*P6$pn;R2s;gP=4`LH
z{I$L?J1`q=D)SiEWIFRkW4B|5(gGP9ayeGMlUmE{Q8i^UG$(UEx-C-}tjX^?7G<sP
z6;GG1W2`@mmaKe-v3|F`(Ewmk-L&~-KD(nX)k^=c`Zvy?zSL*`_>%5aDqFIt08(M(
zh{z--{X-2ZQD5Zh!725Q=AVLD4q0kkm_KI|o*7_FJ}OCW1<-pYxOn`-=}oJU!$D&w
zKKp)4k)^Zf{={sOhi0Pcq)X}(AVZgnEPh+jeQPzK^&sLUQ<slyAV5A!P6ksgqTjnj
zGYe=z2X;WS8RRbRRI56gAmb)w_z+p2M#HfsY5uawIm{Bi{cs$Ya?&rxIq=i<df229
zPA)S2L3kq8@Qo+WxxAtE$Chm4o4`cor^g}o?C5V2-D(Q8V2!+lJ*_wGUMDgu4JX~n
zOE%o;-PYJW?^qm8h^}7=n<2NH>@MOg-{#319S!zc(@%9)Zrpnqs;2xR<2~T<LH{~8
z>xq%^$pQle1dspUcIQd|>y-R28S1}Os9jo6uBr!U-5$Sq&6(pzWi(BdLL%k+n8N}H
zBQXgB0s{q+3yG*ZW%UySwfblUH!761w6&^f`S9cPIGdZBGu9MInzTEtG@915+b!v;
zy|vfZ9xUxD-#;GBZ}gcR$f2@Gj(DFwA1~f79yY&Y<-F#7N)cyFw=n5pR$SFoTgrm{
zspud=hK1<MmT9R}DprYME3a=Ao!DP1u+``kBHK8wc33ZXxn>WiQkYMsjI**uHnN|n
z1w$i;<bMXSyC|M56E#V@xo;DNFTw3JrDi1EK#nmRLnF~+fg(?cDqrcNAotO=k^w_&
zolxDoHbcm-m?~{M&`baJx)&(fT2L`zkydMrofKq}ae*biCbefJ47_Sd%)Arp0dA~_
zJq1b*zgONr->aHz9$22=ZdLDKnNj&Q*-*)*UtCaaGL27KT*E05j(e`g>E^L&zj`+w
zz&*Yy-<|SIMXba@{v+$mV~P8dS#D-h0%g~eu*e$+<fEqD5tpnZSxQ^Sz$eB5+?sLJ
zf)1jLnYtw@+&qx9ed48Tt;QY52%h#8qHBJj%RNITH4rM$@olYaZnHXwzRj_IO6s<3
zF0l4CpNbZI^JJ<OJC=w+Hr4Y4F)a2-0#23AU`voPS<oxk5t>TH=#R5DAV4C@b-^5i
z&RiR@!qI{%Z@p`jPmrqxIW~j`*~kNYelVv|JA(zvlR|C&Cp>ilS?IH?8vGhO99w^x
z5n(6aFSYxZWJR5hU+OV5cs~U2BOfFiqph-#qcgXd&L5uUREcKLtbS`lwLmVWtz$&m
z%DHN!4`A;pg{b_LsxL3qskWB0P}6Gfb0)*I75x!Epsl@|chHC|R4r_!RALy%v+q#j
zGTff7Zl)l!irD^5B&xF#GDJnNPDP^9Y~L0x!?tx!x)D9=EJ9Rm5J5e)=#{WSN#PW)
zF_ztsNO?ebAGZ^A{{&BOrepxbU+D!Cz~{0;R#Jr(!sZHefizT8h(2qN(>t~M?J$<~
zPtft+U5?xsG3fF<9LSz{2~}{z5~Vp@q$3KsW$C2syss8%<Dqp!lCZyM7ie}Uyx0u1
zrP`s@<Q7kcZecqdA+;MP&|Kt!LM8XSt^&JSKAWi*)C_ukr>$8ACSF$5y)-JWO0aAa
zUoaNSH$qXPgrsjvz(|sIq`)%bv`r*2W;kMEv`oDzzwXc-m4d7~BcTtM2&xinnJLcm
zviq8Hgd^>pXXQ)Ac1Kx4%2KVU+SSO(ZD;m`BOM7Z?#14IJW<Y`%T{*jAuVvAD;E&P
zaLnO7h7luuhXtl6U}8Ij17Eu)+7CU@T)2$skJjKYekyQSG6Be+O)mnkXa*f@CE+JE
zNBCu3IM3iU;*iZdZD`sW+mmu4FNGtYo3;0(?p6+UE38-%_#w-otMLT&X;M44w9`>l
z{WKH6a}>NG^sE>#wr1@%))9s(kj~^g7W?JN!kXRPOI0<tQ`F3lTS8*o)J-9>d&G6D
z-_<9fv}?i)(Q;sLk8kz;#)gt@WDycekvjV>Aod0;&sV(!H*cZ!*U5y(TyXmo#ux1^
z-5H!GYgdxB2uy`WEzs(uDE$85hz4<<WT`Apnh!+#d7`%Q=5Fm+=_MnIIvpMEH$es*
zj^Az(f4v08EY%t8Hsd+0+sl;V1y=7LgH+wO*JG&k8^9gVG1!;t>hf#&vqi4N$rNyN
z#eRzg-edCH1*J|W%$`A^3g@a$tbP!>w$@s|g|kMZr!)9nf6Ht)%zFS{WgB>{a>to5
z7rh^~AZ_`FO`ZHJ$BHcKKO!0q<8Ud*;?ixa-H_i^1sWFG0naYANR)5Hd<@oiE(-uM
zl^AOYrNTAS7=NMP$yB-eSgtZN7^aa^E62;k-<y}TBmJXdr$sX~+{}MNn1AY%OEIo%
zqfg~7ntgs-6&Pg|cbzIyU6+$=if>|nxv<lFt)2PEly%QPm$ix;t%-s6)mZjNSo=&F
zC3@psX6{M-JgL4BNZtiahX$L40U4ER>*gU>m#k+fy$wpY<NU^AZ<I9e-k#j9W2`$_
zQsNK_3Q{1T`OAfWFIF8@ZP#5E&$ndCpC0#WxECD0hjW?_?>3uP-h>PT{jfo1NbTUK
zY^dhWzHv38t}^AdXZlc%0#N|F6b+aG(0GzrmaKd(&)R`}PRXzn(F}cJIim}1e0KgY
z6N*!-nR6s3bdYqTid;1S-sI3Ut~t*IYrb!HlchIJJI3O;ek#nv#kB77jw^W5<;Kjr
z3=JrgB8gTQFSqvsgl}#f=~y`Zhgi{(Wy{=X)IDK^VT*Q2;_Ww(&JJmW0tiDHGupQF
zAi>TiZ$uiz0qJz|ED1zIy=?pe>lHnc`GK#7qS~d9N(goL%yMIxV2R6Rkh39#H3`Q-
zx8IEOlWOOKEdw`WnC1B62+_HoA^0M2fSaXCsIY<sXV>ls-@X;-m6Wf=8u8P%uP?%r
zAw@?8@K}`w3>Md6))Jv81_frSzE8#A>sUHf+RI8cof@m3;?Ii(KT7E}E-?}@O|?BV
zOOoP8?G^O7PD?ljwggQ2XC5(1;Nt$V-}l3D589bw%);HPW|rIIgeM#)Ij?v+CP!3X
zCKI-^Zj{okOfz-rhG(al>E(T%+rk9E(p-z8npo&@R*5%(#{HO_oQ)X&VW5YF=v-q~
zj(cps=ab{^H#vL^ETOldRL7#w7p52O-g50ep}w<1>#vwFRyx5imW1CsGsH6>5ARf<
z<3;h2Qxg?%nA9|>2U1;Py-k)Ojv-tq0RT=OWbly!;9EwL_*y;hv4V13^0%AnF-%?*
z|H$Ik4md_@IJ!%Ub6m4aGr>$@D_*bvxeXlbF(<oL%%v3j2<|yADVM=h>?${xJqPR|
z4cX>`L~K`L6UpY$8IQ>9bx>M%uQbk?-7d&1k1oIm7<<DI+{L*Rrp<J0pBFhPe#n}S
z<v%$o+}T^OBbm1;kNe}Px1~Tp;vIBhnc#sod!f=;ntE|jDB^clp0C(eibu!QcCYT(
zR{F)n=?eoML4nxMv5ilJUro%^*iK9}*iK~7>XYI2m9dBNYtJXE4Y{zf9A(IVg$vH*
zfW5$5$^#4byeT?^kO35#-~2yUqZ^s9Q9tt}@nd!4BeHgwX?tzhE!E)VaYlU+AIJBf
z$ApKE#=ZjQ#R!t(??1Q*IL?IEhSwS6jJATW1&_Tn5>?z^evvtJb2D%8X8n<q2RqV<
zUvzi3Ebu;N(vTDIOJaO>XL!$x^Iwq=@cQ9z{<Eg&sy6X!@(T57PpI{sF|p~Bq+&WV
zY!sA)`4}5Cv&Kj>jrk?T{EluCkPBCMi7Ac{J3={e5cu}I<i|F$FTk4gi7oy9iAj!N
z#uDi!SDUocH&ftTQ=59;@ZxE^gxru-KfpVCwRd&pk2-t)&bv64(Bx?9t}em48O7q`
z9JxD+bUJk=NQ1Z;V<9la?3Rzxk9nB~dIx=I!T23+uLVE|ug6>~LBVd)83}(qpC%Ce
z+<^I8Fx<|KbbU#&-VSsK=Q!eAY{H=L4Hl0nW7?g4vCX$!?a28#f?Gou-qlRU&v~%r
zWP|v_Lcm92tv%!JZQ{7IPx5H?EYz=RMEt$ebRaDB?q(vamK~M=XUcI3=e^VY>nT?e
z^ZsS*us8&ZCuI!*0|DcHVeL`d)_z7`;`JP7hMYpfYFVA01^Z|p0465Q{At?n$ZH<g
zERLY^<=}EVOow6=SaasIQ42=)hh$O~7p*sj5O?}jA)X}I>|E0_k+{w{P!R;f4mnmg
zQZ9QGf!tV3qd2lY&_cl#o5-sjO2h{(;!bYpkoS~t77~GuJ;=M~N?%G8QBM!lZ{byl
z1DA{>;+(dTj3%hxBxsS)qd|7d$b`=+5o5K8Sz|$VTgimiDG}w1NLq0_!LzGKP$`f|
zt8k!*^Xc24$lv&|EVy~-N#u2_hIY4wX|dUPo%wGkv8hPA!K=R$(35EFttpGKd8SzJ
zox8GZGBfhqV}GAw^|v&9bMwZH<M$8LA4*E}+9dr9vwHKGfAT|_3WtElz~bcXjo+mr
zPd_G4S5BJHO_D8^GEa~?lunvpPMV-jik>EI=p~)EO|)VgwPhbI6AmkEy;vm79Zu*7
zk1tJ4Na8^Je7z&WxCYDVn{P`#awcQ=L*s>2YfRv<V{U&iS#?ugkoO7s*YX4@D(zMD
z%T8&S<i9OX5dUL&@~@@HpeB?j&LG-{#PZtBOCkz|JMI}Nh%IQs^hyksVR+F9C8TCZ
z2x?+er@JU=b)_Dele7#!Wl>`>okXA@g16$Dpmd)RVPnV^U2!qpUH9c{w~W9XM+c1;
zUEKM|{qjn#hx>Nt<8<bC^DUn}3j_WK)&O|*=^cgUu%#Aw(?4O<flSF{Eak08+Nn~j
z%p4-+)pg2oR8WJzA_pLYyN(;d2!f|yQWOVv$caP@LD(eucK0oXg`t8?zcaFOvC=Oh
zM|xTpd9-Axi>r1i%<k1kup`Hbscn9frZnNSGsg=%JicC{j10kFWT&$7Rzd;O990yE
zLKf-2i@<5TAEVr*HPoa$GuC8Ja#M|T;Xr3nje5mYmvy*IlcekabL<`2c+A9UgPg*w
z3dN22gS|$FqmCWh*2wT3c91UEiA3tw+Dw!GR+{u7CSgu1AxVD=KjW0v#>gm#57fLH
zJaFk7#!!$pKWK8X1W?nT;(A2&i3me#WYJAm8<W5+e$WUP>TZ`kSMuq?{>7C>tsySW
z<8a9Q$R<lg+RCuT3JYZMV4(qaR`*zJZxtkMn!3b%<`Jf#-n_&)<^FWlIyG@fNay?p
z-9Bm#a4_zV@mh6vn*5MNY^Xt%jwU^8$^ufz@Z|f7d{`PL5t%qCPw-GEG9yk?SPpja
zlC;D=c{>0x8C$aAy`kv5yP3ETt~IE5M%HEe6eBl##e=QOojq=+b_^DuoC@623j$&k
zAG5b(4MFAgm@`2HlNJ`9Tr_x6{iKjza(=_C5EpPdFkSLgQM9KroYTsMqQGEx8q%^d
zT{Bjoe!vzG(n4xf91>lLBOVk6^If>RwP_8-&&K=`k+m`;X=`m+guzBxZH;?HW`0q;
zQN)<)QWK(XULqR+lta~yc8D7)Dt2iiYP0$WvA`1X#LgEtv0XaPN`aaqDrdwr)rWI#
zFygA%V0xyVZjHy$N#yh=+;gVY!d8$IpVejA1G<fj9qL&rJ65XZ>#_2h0w^$}{IWDm
zmmRgYw9SeTk(mVg+E#TY_{=$Tv*wHr)XNW`E=1RnAbSiE99J-p{Wia1pbn8CcNiZ?
zBO2gVuIAwttYxc5P7fHdK^GIKS5o?nP8Z^_?)ph-;nH|sVJ-XjAsB|Js^V|DDCy#H
z530Bt7$y|%XhvLOD@cngoV-<)jb#>`7;bXHvu?flRwt<mL5CC}N?353>ar?%6CJKY
zmgA1{CMrVpZPv#7fT_l22`pJfrMgVx*>8_-bLvgg76OlU3`4CBub7>nvs(adYn<2q
z&Liy3*vHN-nA2f86Y!vo_tS4~a+g4}<ih6&;h8n@*AN>$lMbeoxxQ(Wx7XqVV@@b^
zz)WrQ`7_3}=tiNFdw1rYp(2~I>&9`&9Ng@d;=Y{r*@;%LuX6n@yXPBMDdlcb`osmG
zj3nDCH!0EcP7p_b@chA^MA0MWP(&QXHF?5EIZ<M8&+G-zo$Ja6p{G@oBg};wZqlR4
zSzTHmpX$^4=`zSIn6kJ?@?6?2c5UIGfdx`_$gv=p-)OfK#109!qkM5rnE5B-EV<yB
zl8YK$m8Dj0AnBfslocqCkrvSfOe5n)TH#t;I>W76IQy_PlCCM2p?8?DF8g2Gmi9Ix
zMc$m!1V-NIarf~E4&Lzo#Pz=k;eBmjdkqhBp@cu}F@DE2YNcGo<{ce`hiHMk&2lcX
zfEJF~C5OH*R{yq|tRB8#1kIRR*d|IoI$?NY%fuhYpt#D+_2<sYN9}!1mRgzsxm%LS
zPH`P)v5!gwPig)QC_MXlAqC~n?b9y;gFX$)v%zpx5SF1E;Uq%5bz&@r9WjCDTQ==9
zS!y0)JHZ4$%^{8}IsTQFvW*Ry@4L@?^>!b5YextbCLej+M+nx7Z$fU91gacA?dC<a
z+Sh}_nA4;v7cO~)#<6dI<S*rn3~c^fR&`CeVI_Uba{j5sKK4YWPut6IMN`qsQYZrE
zfREXWUs801^VST8>@Oi@n}(pzWo8?jDStbdnr%N57RTZ`%`YJV$Yh;t%V^eO3ZvG1
zeE0+}^}8s+bKyA8>Nuv}W?6sC9E22EKEp&QH$y&mX|!cIw$E(vd(EQbnMgRY-{!Iy
zS34ZRb7{WJXfSKxV)oKU!&P=;!_z>%_N#C!F9zw7akRr5v4+#KE`S|Y%r#hbS%jeo
zi%*j^d(SJuYEL*MTetfR$N2^1et61EV{+iHK1My}SCwe2PW&C4xzd;n*mDI08r`Om
z=%)t3b#gmV60YjJl0Tl|x2p~_;|5{&J3AN|NLaGwC}^cu9r#jZ>$T45GS`+HgqZ`*
zlA5U7?jPN>3Mr=xm&NOPt~9^-9dqiVE9emLG@;nunoaOG58P#zAsdS4R&C2q*mS5h
zCR40stu<!Wxiq1MDvnRRgpC)dC*ul>xn`DpVQm6R>)dU2)X)aw3cusxWPoN$`fADR
zCZHL}|Is)aSk$^!BaJ;6a7%fjg!^M01z1J+5CG$l>z4_}C`|0G1b9G6J7QCh90PIb
zhO%4pD8<~CpBG;;s-++;7_s;{<X_^InM6TJHIoMrl`Xt5Wo2$)IcCmQpBa&Y)CfA`
z)_Q@xDBT+HZlL5^9g`!JZ8h6!QvDdA*@5_F<&XKosqX{awbU`}WVihbeC7M=CZ&}>
z>M{XvECWqR?R~R(SGX%Y?!ZZ@V)svg@4U5xOUxsauEXPN*=seMzJ1G@#rQ_agh!U?
z@TG(odSp?{)^}rp*redf`k#_ppd6J%E$m2A6qX00Do{T9VKPDEdt8C=I?h24;p@q(
zxoGYZx#jQ;<7$12v~9r=-jLZGE3WD{mHo5}o;PJ}B7!j#GI9YbE~Rplcv{xHAlAIX
z*1V-58F}&8?dX%jF&uFjK41%;4GXmU3!U>NhdH!t`oL`ZL~L6s!g9aA8evWe$1r>~
z0$+IgwLp8g(79Z4xJApx56s3-#MZ4MJV_>O4M^dGVN=FudxR=W_-eGf;5$=t*iFlp
z7=SG$8RIHlwo05w-t&p#5PtFP{;K=r(8<>l7eRAUqUsPJ$_$mZI%D%k`c5Z|7}D7d
z{y7o%=79Z1xzF1acW;50DVC!8Fl~{SjY+TxO5a#mnz9&ptPb%YRw(5VVwKqS(`3(c
z%{o?RlI8j0)>l&u0K?fl^L{S8uMoYLq<%|P`RvNiJX}GvuPv<4jMi2F@kL;<+qc)I
zFgF`Nvd-<%7{0!zxH^Y)iCF4u;#3^F!t-4gebx`8tQJnb#E6)q7kw5Aq{I_WCipte
zQi(n*1yWXqPzul^7RyB3B!MWkhf)d*PTMBSHTHY@p>bB$w8bjs4Akm*BLDW-v&5fs
zBUcVCjuF_23wVB@cw0R~*kK5{Ain#J4%nL%CisibLP@tza(TOme}zATpV7M({(WWX
zlXfOtCxriv=13&G`ly!kGvIhgvYS92?Dr_R#FNKV9J_JsBbu7=?-utX#cs$J?z1T8
z2ZjS)%O<UO^c{gFNaN>zp2^~@=W*~k$ME<t6pA)fc^d*gS(_o~yIuJNgbBAq{td2C
z$QHYEs+sVP5PnaEx$qA1=beV?Vh}%0%Da33sUIijXt?qG+Vor1Ky%G6mG}kUXgaXi
zw9?ga>*G}mb=JYFdF-)$YpSM$1@*KRUW{~g<p)=#kMg38{elfusYiZ{%@gY5izDH#
zxO%b;yuQl92i~#nqojs&K*4YOSH2U^?L$w3{mW>JZu+^^FrnsTM(V2`8MAB#(ZHCT
zN_@`??7I2Z{!j3~Cfhu2O<Ck$djTK+e<s_mMlP;i|DRR=qNk6is#?nBDh04lqZ(>P
z_`Kmo+5B4d48Zdf5SP@~JQ>|s{SNiMdD$#)f+aoaDyddlp}n4By6m;ce?M}HSdl2L
z{4+!~6s+PKc*x@`njqoLH(*pzMnVwk-S?3yKY2A|VUUxi%SSjOHH*uxrI+`mHJj=#
z1^rrk-_|d~V+srGh8U~3b(fDU6Mv2)sFLdwzv+vdKE~Rjk8-D1$cY(fQhpAvA86O}
z!z4$SLki6ntFn?g@jsKyWF+QXd3;F{jizVOHT9EWI|)gy5nT0uDep-(rdP42XnaHd
z9DmZlw7_xMGWUwZ7)`Qk)4FTRL!>e!olh~FdM1lNC%H-FnwJbWRAG~(_fQ&@RlTj?
z;=w_ki~i1bfW6ILe2`J~V5@@-F6r~86*c(+=4^)Jvdu0Rh*cT**rsGAe8i<U_+nGY
zMsrJcyRMb43emPzv=`#phSTOU(Ka8m8W{=ALF|y}EQr!+?`=2clJq_EOXNBKGFOM`
z60^Emaz=Z42bOB#U!HJ%5B%vTjEMH2oUaMdy%tmPA}N4?yhL?qUtA`?bF2fkpEkdh
zX5ZMEAi6BV)DYK|I{BMLTT!;<M)p(PcBtx%!`{8%4xL3s&@!Yj`pdj(e3}Yp*D^rQ
zLG*^k;Ukp_rMcY@Ke{mD6K{V)M$4g_b2Bk!fnU85z*9n;7!CHPG~j96e4U3dG~~$n
z1A;|?q}LWpK_Ex`2DO81{f;#;8eQgLn@}bNrwEP4L9}q>r-}Dt+r~z;?yc*7S`e6t
zJ$<5K-xCLEaJGh=Ltxj2?#^0B)|DVs{o9aS1R&brRbi)dkPs@fBP|6fRvWPjZ+8V=
z-Z!F1wt;UrECge>{~AVc(+p8Zz?fgSV%D1NU@fuZwv!&>LRj<R*IPFngjZaq6{wU3
zd8_@{LW7o-g!Izgv3utAq%CC{C}aZT>K#Ukz#Wt4{L-Lr&^OxE2CE^r<pIx`S5z(+
zIR`TvV0C_x{byT3#=&okE@!PmT*&9f{Km1&xg<AbOv72XDSVJzTOy=38C1h5X0Mq-
zZ^Ub8VmFsAa`S|^i6wCQxeyD}9ce5hY(&eZOu#3NuA;J+T0q0BaHH)>5XU$kP^g5{
zP9x7Y4P5J{MKxI*5!o0$Lg9;q`qUsN`dxXs97ij%mr6Mruz!A3))6X9vSr$-Abonn
zXFPjPopLdBzMRn1eo&u>f+=F(6qy}p+L7-yvfk=gl@ZY;k$=yCQ)W&ljElqLd5Gkg
z+hRT{!E%|4cJ*Of<+3WVop*Jd=Vm|m^0BAqb<;4-IL8AZU8XgZ7Mp3!$D7dhNlvjJ
zblUkqQmK6GEn<*=4%0BaLrC?oFGt{7jg+pobeTx|^xM~W+b|0$VYvisPvnGJ%~0Kw
z?PFTR$7hxVGqijvhr2o8%(M3?L29XS1WAZN2ni03aNR4}6>1_uP-kaGlG;H)DUOX?
zL+*RRP%(6-TK%$2Cqd0~4yMc#M7ojlAGU=|b)I0SledbWHxaT5Aps#o0)kQwCaS}m
zvs)I#2rCf#_+Yiu<_Z^N1FJxyHi#Qx^{H73uzEQ(J#iA7qGI^C2-Wyt1V=NSA?dlx
z3_+x!EJNBUC<Ep<vBXC<U>30mKPD$#v(s9w+7WWn)QP}GN>60l6pj0a$simBH-%>T
zb*eH0Noq}GYLtQZb8P%~dUO`L$zd*0p5#&{pK^}Ra$2zl!k|w1E*%?UBk@|Odj6u~
zvnmkOrG-{}mQl;9i`(cu1ci1uyK6pN86fmgHr*XMSyqj@E)sclMlFb)<oVq8Hgm|f
zXhuEZXS!KK0Z7+q=gpFg_m@8k?3^{_3OWF%@hP4J#w&UWgD5J7E4@Txi#ftlqY(z0
z5IXADCNtcRal*n)`@=%YnfpNGY7Gw6rlm^#dQBrQ0@)Tp1jf_ikdZrqQ-!)EeX!5?
zqfOnygT)YJXL6lLM<6_5(aa(^F;Rj-1w$SLlF>JG$^HSPJF1W!LT+g!(Rg3nYXxB?
z-aylNgR>!98q!f7ahwrXT|;e37?(b+o{xf<7eELxBNof?K&t&t94Wv%USqD(u>>?+
z1VBrhEo3m;ochz`RX}jjcr29oDGWVQ!hwPTVA&U9AeV>bytN~oZEv|hV?<B*%wf*+
z<PsOa?e%T<pa4g*C<Xy)qn4A}AFfJIY`McyAjG&KBOWI{kw_HT)!Gse)W;2r992jg
zhpW(=Bnido53j(?t0a;Nt4t$fn3DSf*aSIs26Ag*2i{%Q!ZcMkg^~gM5*6@#A(}xz
zY9r4)Z%Z$UuChgO#&XFkNo?ww3Ymh5{316@K!6sX(LUYPQ!g-_G6=)$$O3OIIn6he
z1kT(!%@4;l9Gb@#4qtGd&xu+fw^Y}^&`Cdct!9W#>g3;NmfF0-3;5s)__!8`cs`hP
z|5=S0uyT@rk78BYH`|rsNiT~hGv#;Ekv3qtWw$CYnWI%;Q=;{k!IE{nzrqA~Rmt*d
zS5{G%CjK;~l1;HzNeaqo%h0E!(lseRXF@t*$`^31HU*A+D4Uk=S-J--{B^BFkq3x+
zyAtzpCxpa`(6KD9Yu?8(GUy!2XZLW2l|TXZUZ5KZ3Xn3bb2;jJc(?g;Z5TOL#j_4I
zS37&ywF54H56MBrc`11&((LJANMDFGMEWsd)N!}~OKCCd9ImLxZqo3ievEdG^w_6n
zkAIlz8yl|MK%b4b1$ZG1`y1)^)gO(>4w`70g>t0@I&u5ZX7f#6YSB^Iv{$26S6^o=
zuP)1}PMn^fwk31Ia;$K?AtkPL4#gvrx=D}xa;xxC>94YGu}dB)uF9k-I_qtM0<~#P
zraPvB6T!2t_R6ID8Gy2L7h8^^Odl}+sJo%=G|j<?lsQ%}bn6>i&BEbiTj&KmJXGG$
z)RpDd>b~aT6bQ@f`9%2v5SG$PHub7pFULW#FTJR^c0MD!;=Wh;y1^*$DWSEPp{4!_
zq)L-i;7iN#p3t*hea`U0Np*&5Hhc^bD#n8Mf0ax4A{scQFFR4mnST>;VTPqjC4>z=
zjE_g2=~t`@H&PteHJTBcDE4g*!)avkn-Tt~Az9oBIjV7=vs%p!;Lb<YhSy;SkT}wl
zU98D8Cz>mlwbJ6L3r4w=%dq%|@HN1M-1W*lkD>f>MJ^HVVW3h(J*7HLt@~asGY?sd
z$%MRsI<9qk9XV`x==N0YzV>@Ag+)Cf%zlA-a6NboF6ZDT1^P;j&Lvo(*8_swrNd0b
z&kRO}jCv11)|IEjy`j<GxKJ%+afKxuwjy)n*&^>_kWFXGXGM%3s>$8jizMAWq5^mE
zX$fVpweHsfa@efA{k;*_mjNiWVPi)Dx#kPlUn4CZ;#Q$I(D0-D5HhfQ$?zftGN?`G
zm>`TI*P|a705dPlF35265M;Cj;Ix1kcz%KG71Hc)v)C5od~AG-Bl*sOt3LdET@mQ$
z-`V^<E9f%JWf=<YXzS|h^{Hb53$$tR2Y{V1D2HW(7sg8JL2Z)*OFasuIReekx=u(x
zxf%Q*ckQX;(%@xhrd7YW%lE!u^rZfjamA2jS`FH<fzz4{<=<WLIGuiTF;aR-h&ds+
zNr(baP)UjfMHf*Whd-BuQ>A}D5_%XAT1^CzUUY*x=F6^h=PnPfcExUvKxuEC&z#c-
zi9=wbjZzC%&nUIM9=83E;Ui>$N|2IF57FK5Th~P^=AR)S2;x<Zy7c;U(b3n`t|w(l
z2^|NHMhfD$4IEecxTYv!m5qhA7M47F+hZj}ra}Rmup?-Qk=F<9eqkpc(!Mpk9o`}U
z9%d_(1tRi5rVvPk=Lik^TyX@8IS1T-N0eKF@Ejy@?J#>CjtF={0OOT(e~uUrk}l1d
zrR@ims6bnLB+#7Vt5fF;HCMx>;4cQ70;{W!^vRp-gh1c<{sOuS_6#>d(H8$3M_$Z~
zE%ZTQH=?A#e4m52Y@wAX6<-q?^rCkJr)VUI8mML?c8sgp8@ZzM^8yKRJOWE?6`waJ
z!t8zl3ZZ#U(_2w3)O`aUb$rAl;y}@WI7P%Ju^tyYToYbz7G*r&39|$tJC)y+DXw#y
zI0fM%P!s<A%C{o?mpaTroj6}|f7S+LZ5@<wTZso{_@bb1nAh(2ml+4-jbO`Wb+>*}
zyK}fQN<PJnU>k~jZa!%u7U*^VKk}khQwvc2^mCMW;=9nz@9av@_dgN=&3O<o)*;#-
zb{k5ehikK)k(A=*+B3*B+R$;I7rzS3)El#2N8$15I{jq7J5wXg=juuhxwfJhb9auo
zgyJgo0I+Gad62{^(KJKZG>IycBf#xQg_L2JIT{ClEV=X-)}`=o7>UuTH!l8Qw_*_!
zE!F^w-wksJH+pfz;PCwoKIsPs(hJu?9Q2|dMgFF<K%7{lvwgC~at3|25pkk(!AG(*
zg(iNsbje5Z#h^{&QN=7`SA(U_tKYQQ9%s8khBL+9zM@k!#8|=<=YEcxY2NCSZ`3=j
zSj&m4DrAO{N)FrWUvBK$6L0RLE1d{(mu0K9p)3pAT4&Y3^b$WBgqWA8L07J^uaIn`
z9CZ|Vx4m-I(t_z?Du(JwDpyp=s<X#A_#nBrGYzRlh9H;A{!s<w%yXaeI}8U+#av5~
z<~)SpAXd3e31&_LZ|?B<+0vt>h&FeDd@`h?B`IJC-(J<?MT9vS&06kznPS6~&u(^_
z^n3|_MUsSX?t>D@d0~JLV_s&^#q|t&wNC)#3?DwXytWVIw;`KIafe#>I8i&t?tpni
zZ2q6ha9#+eWSB))YZBAt!w?4H2K*UiJlJG{p=pmnm}m`ot7~n~(`4;t{Lv4YFuSsW
zDiC-xP6DSx*&(rV!ow8#)0anadGK076cdwI%1Ou^xh=WjwS6gfxl{18nP}n^hLz%j
zZ~}HNKaU35a%-xU@)@FkOy3L`F(d(Bqb7jBa7!uND`lrN9Si7T5vsQL?n$<NPh)gm
z5BiainTVDvD~-xGXHdXLh9TnGWC+l)!PHyLE_Ax`yW>_U9na=}VKHQH2M>$w(YC)6
zQmzmj=NDtZg-HxLE<7DYFWv}}pLhRYBT{#TH;xZ%n_a$_5eC&27+Sb)a(ox$IX*C!
z#j<1cX`OwYAD;1$x>I@qfPbk2NW^c-F~*K{#7?w8_<-pYD`)`)OSO4s(f0L)GKO`_
zB#}1Z%w!@bNel$8MZbM#PG9=1!^%DZsiEO&H$<MZbXE`|Cfs^5GA38|#4Ohm(GLjQ
z*Ge25B}s=PKcP(ET})z~Os1UUQ`BAie*n<?)3QkLq=n{S^ui{NjW*wJge3&!eZ0Ih
z&kwa{5i~%EO}N{_82~d@ZksdAsp_J@Y4pw)=nF&m3yKD+FW6uS&aQi5uf23s_j8z7
zTQZ_~nZ2LT8+|~NB$P#EU6g=w)<aUOlU<~XaguryjxIysOgfIy7_MV$`fNx8K2?2I
z-<bvx*=Z7=Tl4IN=MNdQgI9)K`|jbV4jXFAKbv@jXR>`ajV5=D6p<k?@wa>%zX9W2
zn?dc8l|MsMr_YPPx4d6F)kE^(@w0~^J5GUWcE!-ugV<U<eoevhzt29uZw-#tXV&3!
zU99=B^pFfE0mY%+fq3q7f-CB0abCdj!5+t<JwkZyKb>Ax4j(4$dE4TzDwy1kAVtLB
z7#Ch*V+v=3x!pD7*SU65P(r>ynDt<^eYe90gzg)p-V=lb`vuqiv?aaH3<7Gl>3Nt|
z<#!ZL(P}Zr#cZdm8t(I+|ISVm{F@DE!=%z}n}A2g@B5iCGXp-4s3M<GppNvhPLbnw
zNkegNkoHq{ro6}K``N9I%*Cq;8P?5X-pigp!R4{cedHgV@}X}P&s&>9AzM9<Cu%yc
z?vT~#xt-}}J2}G(Jon+bwRzFsyYov01Z4;TzMse6+rzJCyQ6ii6fAe~@8MM;6yTpe
zK21L_KlkUm&FZ3TNn~DAg!oqcE3#@YHesZ{qz*$T7sj3yH_d}rQ7o+Aez(r3z`p4X
z`>k!i@e=_+geYDShL8AmIafGvy$8|n;QPm44El%cu_@tAbY9~6^Shl^#Mu)<`G%};
zdpOS__pI;z6<1maqG7h#!4&jLi7;vIFCYa}ab%Ad-aZZjUO&fyA3k*&h3e!s@eOJ^
z^cI%SuUodCoiNJQ_w3(DHslvS&+hLE0yq4<M<3mBY*kuvsg^eBFHRp=SR76tp5_<M
zua7>F>?uB=A01pEonN<&x7Y2y(EL*X_NjMnuUe0GoBoHGZm;PKJ{$P#wF6TXC|WNP
zu+6sAk7pNBwp=)#Z=@BDyNt2oCQ87yx|#x|`aR<(eQqH7_^~12(d!%zh*yEX(8R<%
zL2IhA`5fN8JN@6oVlvsKJi9tP-OtfbJ<u?C$Y^);GIiF-fLrYCpAoy=!$~SrAauxP
zY6s+6>!EAQ%Ah5D$=qn((cBU=M=O|tm-oQg0+qpEmunn0X?B0rblFvxVWLT|#Nl3%
z5S5a0hFsf3jHFE8j_hi2q!ls{z*IBDFGi)cak`Y3;rARYXB2a-V2Br|anT%UELCz;
zEZnxfHAqHtF^0o)8^vQ}P2&Reg<lJlO5}8@D%J%Bi0OK}#VjLB;tEe<@?OyB1+cXS
z8kfsB-c<KYP2n2~Q{a16MzJz+((pEAY#Y0~wRFiVcvy9!>KuSw#2V0GDmbLeCsGp_
z8^}Z<^FGY<8T)LHzdATM$rwB+c*!s6#(e!V;U?#YZ#hxGTuO{&Zo`Hb@KWAs$k)*1
z19c7)ZXuOOP!0%T;l0H6VXY-&HJJ|tO>pE3qaibA_Zeq&*<J82p&Rlgf#_Oy>W@(r
zP2L?RK!tHE4(S4kjm+6k+8=7bO||h#LvfO&?}@_05cvoQ2u=(MhHj98MZf5S)BDI%
zly+N?Y1MN7vq+Dj9{6mYFsx*CXnjpB-Vr1^U=#;(chU9-R-*P7TXS(fZ(A21W_qxR
zAcOd-UqQqAPC0cqIua$N3uf9O!yMOEq_tq_4|;ECr)RYi5vN@&yP~w42MVu3a}36g
zP*2#1;TIx(g-A%fVD_llxyQ$s5TTf-n(Y1e(+Y3k)ZExfT9iK=j?ecHMxi^9Vo<Ni
zb<!MQOJku=Zgz0W(ZdGZC+U+rNeYqWC#e~N)rgm8NLNt8j}BjQ>;?g%DO=S=zl=9!
zqK`=O-`Z8QN(`tA`i0<#iu;E70qJ-Jm2ZgxjafU)y8cuSOhmQ|yH~Fyyq<*bc`3RR
zC7;__51XsVj%$@#+T;TQ@|qRO<;9hoDWY|xo3nG~YMZy8wo(O7YXub@Y%=4aPx&Fm
zJF?ct(k*0Aw4*I8cc<C!>BjC4&5NE<)#TQd(6)BYoWdD&<`kH(+x2}5d6?JV^Q=d|
zvng$hwayhU_F7v=<G?4<a8iDSXt}rYKVer;iKAYXPC@=*qcHgZ`jD9z$4>!e0os>t
zXiy9r1Ewm*tO(T$gp}a*IvuD>G(bm9gU3a>#X*bz=1oZ5SO?XBl6LbflfDU$OPdxG
z+)zn$YQZd#7W?)yQ!)>R8#az4aBbgYiwIKN__RV?r`%Yd#|2SZ{K3S)j0!$wVz~Ek
zkQ38mFHdF2>va~pgywRulY|pcJJ36aJXUShhS?e&9F?+{5yj+zG=)O8BmjsW4(9%G
z^e3W{W!L=Y_K`%>8H9!F16#BC5EDQp*AKl4c5ALQQSWZOr9>3t{?S!wfl?g$R(`V^
zryd;Hg)4*~=@v%BD^R%ejau&q5<sPs1d#W7V#fa<{^M3-4}2jWk^#MDfg4D#Z?d33
zDmdGm>POcvWC3{S8t1pIl6aR7J)Up*7xZr8r)3=mfgKWY5S7B8m>$6kn^7K)8YyY>
z86AOvn|Al&3vr3DgGFhFD@+?_&^wRQsys&s&^G?XxQ^l^JIj#OJIe_qy^51`{!QF|
zQ#gZxQO-NO@F~+lRTUWh7bufKxvV+;lhBQ(--rwg90npdY9DyQfY?OX;(b9VQ)xgj
zHUb+sF>88-93uW$=MCz=ZJGa?P+6xJ2^-3GJoBP~v6=S5t{vTZd&^T9P%8*N=49|T
z7Q^R0QkVb-$EazGre|j^?cOU#zlMeH(>uX-x$|R6Hn?BZ=p{zGz_}1JJZe~954?F-
zjP4PWNK$6hMKf{sNEzH<t66h!oD3DmsB!iY+T#`%6G{(%SLh<1ekf`Egl{?l%q)%%
zNRvS!yK(b#x;#17)l*s74h=rI>u#aV4=M+{1>m~kEf5iP=2)wBUBG6cVAqP2fP(2N
zn?N_nM7Qd&5=jmHboI$fv!bC5$bn#1_6qclM9Avz?MvrWXVi%Hl<)N@Un2NHl*p7Q
z(4s*G{-yO}XjoF~(C}bBw0B(cC#LV<CAi@w{2`>QmzR_OP#6jhtObL23$>e{n`F-P
z=cSQHc`Ls1A;_K-pgv%h+9*wB{NPE_?Z>IUv7@9AHO^hWnb-0y<5zU>uMiS@)#I3n
z35r(vp-Qv5?uH`7HQWZI*CK`86bh9nAY?LM6#9IB)jj3jLVvki8bByLRU7F&HvAN9
z(2yAJ9-3zO&({dtnzkX_5xDT1{^3|~nhM7GUE$*Rr{`Gx^-WqYBF5AJ4cMA@CO$@O
z`@9GqT6Hc3p$F88Wxf+PCPyUs%Cr`s;T>}n)jvJzTvHsnu{?Egh`LUZ&u`XRJ3uwZ
z70#S#lV)g<a>Vc}^MnXoj$s~eU0;ThXni~M>6=92QRcSSP-n<*dkv(uJu2%zY`AUs
z9Ni(hgmS&Lc=D+o+S8@T?C--AeIl8Wi1c5x;J>?$=Y-;aSEEJ0;o#Yw)9Pp#mK}k_
zlA2WA^o~U7UAotAo<asjPeYlFsb0`mNix4AQP^86;%oJpzAm?53r^tq(x~MkepW~X
zS)uGGIs~Uu9WwGx0#H{_Cc57a?@?{;PvSp6YuuS%d1Ibw+*nKSz+Qt-F@flJ)OlV#
zK_$Bc%yC`nQh``<erE(RpQhgvnU9Ou<p|LkH$J`dInw1s5pc?UbQ4&Xb!F+FtE{u3
z)BOJ2l#hkFeuvszL%y%nag7@L4Hb&bchLif&rAon|I@h&@9s1w$hw_vP%+C77Y@Cd
zuHRdr^N#0!s1ru*tx`lu3O8|c39fal{<{s2)O3I;P?-Ioc7c$C8Rz@TTOsCzQ8~w&
z-1G98DA`U<AqHl{YH72z<%Bp<w*m_~$|*GtJe#_2__>Fd;p=Xbp@i}4(a*Bn?E)Qq
z&T@~~G|7-2INStipW?n~dB|5U59)orDU3!!Hzqxz?;k7u@~U79q4p<s`sU#Zn-wbC
z^aCE`Wz*T4b*Wkgm2-Eex6q1UcKm_05dj2AWRSXAelsmMyzuS@aTK?qo;rO=s~&ax
zDZR+^5T&khaNd5~sUB<wbG)rnx(Ltdk$5=^WHa!e{u2~M>N~F;Baj9GB7<Fz#xV+;
zwOoxSufHcY(qFTGD2{5dZCRu@XpdcevRIA@&aY=4auamcSRdDmM-a#whDuXSk8f%+
z^BLL?y96R`XU@Q-D(CpQUXG}YF)VoIm`sJf{oXng1&e6+LD9PmZZV1hXcPGp0;}^y
zA$Kjn9Tq(%t|P_3T=PL~j?hXs#$Dh=LO<)r0K5);N2b+xKL1yy-V3`egd;8x5FXcG
z96?|ZRG`0OoBx?t{#U5_f7bsoV*M{TXrTXn$ob!JzrXJOXXN>R4&<N7(tm}X|6Rxb
z_dEZ41p2=}*FVF6{}V0;^nVTHKjHozPW^AVe<oM{l_30gaYOtE+<(s#{x|GD(+>Z0
zlp9~$%wJ#E|2xY6IRx|HaQ}?T`70vv@A~}uW&Z*9|0^)@-@W|PulBFloxckS^S|}-
ze+c3EcQ^kuMf=PA_V2o({BPa-k5;(<2LGqg#$Uc_f7c!Je+U1cT-N@L{!h)|UuGSD
z*E{cjL;v4dcl;awpQPWvl!t#;yySnw{~vUS|Azi2#o;g3@ZZIt_D|@4afts7^Up)h
if5K!L{s+u|vLh5_z`y=ZUt-IzOU_q}w~F6ikNz*Zi&e4!

literal 0
HcmV?d00001

diff --git a/previous-exams/2021-midterm/m1/project/FilteringReporterPlugin.scala b/previous-exams/2021-midterm/m1/project/FilteringReporterPlugin.scala
new file mode 100644
index 0000000..2e4fd9a
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/project/FilteringReporterPlugin.scala
@@ -0,0 +1,31 @@
+package sbt // To access the private[sbt] compilerReporter key
+package filteringReporterPlugin
+
+import Keys._
+import ch.epfl.lamp._
+
+object FilteringReporterPlugin extends AutoPlugin {
+  override lazy val projectSettings = Seq(
+    // Turn off warning coming from scalameter that we cannot fix without changing scalameter
+    compilerReporter in (Compile, compile) ~= { reporter => new FilteringReporter(reporter) }
+  )
+}
+
+class FilteringReporter(reporter: xsbti.Reporter) extends xsbti.Reporter {
+
+  def reset(): Unit = reporter.reset()
+  def hasErrors: Boolean = reporter.hasErrors
+  def hasWarnings: Boolean = reporter.hasWarnings
+  def printSummary(): Unit = reporter.printSummary()
+  def problems: Array[xsbti.Problem] = reporter.problems
+
+  def log(problem: xsbti.Problem): Unit = {
+    if (!problem.message.contains("An existential type that came from a Scala-2 classfile cannot be"))
+      reporter.log(problem)
+  }
+
+  def comment(pos: xsbti.Position, msg: String): Unit =
+    reporter.comment(pos, msg)
+
+  override def toString = s"CollectingReporter($reporter)"
+}
diff --git a/previous-exams/2021-midterm/m1/project/MOOCSettings.scala b/previous-exams/2021-midterm/m1/project/MOOCSettings.scala
new file mode 100644
index 0000000..1c40443
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/project/MOOCSettings.scala
@@ -0,0 +1,49 @@
+package ch.epfl.lamp
+
+import sbt._
+import sbt.Keys._
+
+/**
+ * Coursera uses two versions of each assignment. They both have the same assignment key and part id but have
+ * different item ids.
+ *
+ * @param key Assignment key
+ * @param partId Assignment partId
+ * @param itemId Item id of the non premium version
+ * @param premiumItemId Item id of the premium version (`None` if the assignment is optional)
+ */
+case class CourseraId(key: String, partId: String, itemId: String, premiumItemId: Option[String])
+
+/**
+  * Settings shared by all assignments, reused in various tasks.
+  */
+object MOOCSettings extends AutoPlugin {
+
+  override def requires = super.requires && filteringReporterPlugin.FilteringReporterPlugin
+
+  object autoImport {
+    val course = SettingKey[String]("course")
+    val assignment = SettingKey[String]("assignment")
+    val options = SettingKey[Map[String, Map[String, String]]]("options")
+    val courseraId = settingKey[CourseraId]("Coursera-specific information identifying the assignment")
+    val testSuite = settingKey[String]("Fully qualified name of the test suite of this assignment")
+      .withRank(KeyRanks.Invisible)
+    // Convenient alias
+    type CourseraId = ch.epfl.lamp.CourseraId
+    val CourseraId = ch.epfl.lamp.CourseraId
+  }
+
+  import autoImport._
+
+  override val globalSettings: Seq[Def.Setting[_]] = Seq(
+    // supershell is verbose, buggy and useless.
+    useSuperShell := false
+  )
+
+  override val projectSettings: Seq[Def.Setting[_]] = Seq(
+    parallelExecution in Test := false,
+    // Report test result after each test instead of waiting for every test to finish
+    logBuffered in Test := false,
+    name := s"${course.value}-${assignment.value}"
+  )
+}
diff --git a/previous-exams/2021-midterm/m1/project/StudentTasks.scala b/previous-exams/2021-midterm/m1/project/StudentTasks.scala
new file mode 100644
index 0000000..c4669af
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/project/StudentTasks.scala
@@ -0,0 +1,303 @@
+package ch.epfl.lamp
+
+import sbt._
+import Keys._
+
+// import scalaj.http._
+import java.io.{File, FileInputStream, IOException}
+import org.apache.commons.codec.binary.Base64
+// import play.api.libs.json.{Json, JsObject, JsPath}
+import scala.util.{Failure, Success, Try}
+
+/**
+  * Provides tasks for submitting the assignment
+  */
+object StudentTasks extends AutoPlugin {
+
+  override def requires = super.requires && MOOCSettings
+
+  object autoImport {
+    val packageSourcesOnly = TaskKey[File]("packageSourcesOnly", "Package the sources of the project")
+    val packageBinWithoutResources = TaskKey[File]("packageBinWithoutResources", "Like packageBin, but without the resources")
+    val packageSubmissionZip = TaskKey[File]("packageSubmissionZip")
+    val packageSubmission = inputKey[Unit]("package solution as an archive file")
+
+    lazy val Grading = config("grading") extend(Runtime)
+  }
+
+
+  import autoImport._
+  import MOOCSettings.autoImport._
+
+  override lazy val projectSettings = Seq(
+    packageSubmissionSetting,
+    fork := true,
+    connectInput in run := true,
+    outputStrategy := Some(StdoutOutput),
+  ) ++
+    packageSubmissionZipSettings ++
+    inConfig(Grading)(Defaults.testSettings ++ Seq(
+      unmanagedJars += file("grading-tests.jar"),
+
+      definedTests := (definedTests in Test).value,
+      internalDependencyClasspath := (internalDependencyClasspath in Test).value
+    ))
+
+
+  /** **********************************************************
+    * SUBMITTING A SOLUTION TO COURSERA
+    */
+
+  val packageSubmissionZipSettings = Seq(
+    packageSubmissionZip := {
+      val submission = crossTarget.value / "submission.zip"
+      val sources = (packageSourcesOnly in Compile).value
+      val binaries = (packageBinWithoutResources in Compile).value
+      IO.zip(Seq(sources -> "sources.zip", binaries -> "binaries.jar"), submission, None)
+      submission
+    },
+    artifactClassifier in packageSourcesOnly := Some("sources"),
+    artifact in (Compile, packageBinWithoutResources) ~= (art => art.withName(art.name + "-without-resources"))
+  ) ++
+  inConfig(Compile)(
+    Defaults.packageTaskSettings(packageSourcesOnly, Defaults.sourceMappings) ++
+    Defaults.packageTaskSettings(packageBinWithoutResources, Def.task {
+      val relativePaths =
+        (unmanagedResources in Compile).value.flatMap(Path.relativeTo((unmanagedResourceDirectories in Compile).value)(_))
+      (mappings in (Compile, packageBin)).value.filterNot { case (_, path) => relativePaths.contains(path) }
+    })
+  )
+
+  val maxSubmitFileSize = {
+    val mb = 1024 * 1024
+    10 * mb
+  }
+
+  /** Check that the jar exists, isn't empty, isn't crazy big, and can be read
+    * If so, encode jar as base64 so we can send it to Coursera
+    */
+  def prepareJar(jar: File, s: TaskStreams): String = {
+    val errPrefix = "Error submitting assignment jar: "
+    val fileLength = jar.length()
+    if (!jar.exists()) {
+      s.log.error(errPrefix + "jar archive does not exist\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength == 0L) {
+      s.log.error(errPrefix + "jar archive is empty\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength > maxSubmitFileSize) {
+      s.log.error(errPrefix + "jar archive is too big. Allowed size: " +
+        maxSubmitFileSize + " bytes, found " + fileLength + " bytes.\n" +
+        jar.getAbsolutePath)
+      failSubmit()
+    } else {
+      val bytes = new Array[Byte](fileLength.toInt)
+      val sizeRead = try {
+        val is = new FileInputStream(jar)
+        val read = is.read(bytes)
+        is.close()
+        read
+      } catch {
+        case ex: IOException =>
+          s.log.error(errPrefix + "failed to read sources jar archive\n" + ex.toString)
+          failSubmit()
+      }
+      if (sizeRead != bytes.length) {
+        s.log.error(errPrefix + "failed to read the sources jar archive, size read: " + sizeRead)
+        failSubmit()
+      } else encodeBase64(bytes)
+    }
+  }
+
+  /** Task to package solution to a given file path */
+  lazy val packageSubmissionSetting = packageSubmission := {
+    val args: Seq[String] = Def.spaceDelimited("[path]").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val base64Jar = prepareJar(jar, s)
+
+    val path = args.headOption.getOrElse((baseDirectory.value / "submission.jar").absolutePath)
+    scala.tools.nsc.io.File(path).writeAll(base64Jar)
+  }
+
+/*
+  /** Task to submit a solution to coursera */
+  val submit = inputKey[Unit]("submit solution to Coursera")
+  lazy val submitSetting = submit := {
+    // Fail if scalafix linting does not pass.
+    scalafixLinting.value
+
+    val args: Seq[String] = Def.spaceDelimited("<arg>").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val assignmentDetails =
+      courseraId.?.value.getOrElse(throw new MessageOnlyException("This assignment can not be submitted to Coursera because the `courseraId` setting is undefined"))
+    val assignmentKey = assignmentDetails.key
+    val courseName =
+      course.value match {
+        case "capstone" => "scala-capstone"
+        case "bigdata"  => "scala-spark-big-data"
+        case other      => other
+      }
+
+    val partId = assignmentDetails.partId
+    val itemId = assignmentDetails.itemId
+    val premiumItemId = assignmentDetails.premiumItemId
+
+    val (email, secret) = args match {
+      case email :: secret :: Nil =>
+        (email, secret)
+      case _ =>
+        val inputErr =
+          s"""|Invalid input to `submit`. The required syntax for `submit` is:
+              |submit <email-address> <submit-token>
+              |
+              |The submit token is NOT YOUR LOGIN PASSWORD.
+              |It can be obtained from the assignment page:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId
+              |${
+                premiumItemId.fold("") { id =>
+                  s"""or (for premium learners):
+                     |https://www.coursera.org/learn/$courseName/programming/$id
+                   """.stripMargin
+                }
+              }
+          """.stripMargin
+        s.log.error(inputErr)
+        failSubmit()
+    }
+
+    val base64Jar = prepareJar(jar, s)
+    val json =
+      s"""|{
+          |   "assignmentKey":"$assignmentKey",
+          |   "submitterEmail":"$email",
+          |   "secret":"$secret",
+          |   "parts":{
+          |      "$partId":{
+          |         "output":"$base64Jar"
+          |      }
+          |   }
+          |}""".stripMargin
+
+    def postSubmission[T](data: String): Try[HttpResponse[String]] = {
+      val http = Http("https://www.coursera.org/api/onDemandProgrammingScriptSubmissions.v1")
+      val hs = List(
+        ("Cache-Control", "no-cache"),
+        ("Content-Type", "application/json")
+      )
+      s.log.info("Connecting to Coursera...")
+      val response = Try(http.postData(data)
+                         .headers(hs)
+                         .option(HttpOptions.connTimeout(10000)) // scalaj default timeout is only 100ms, changing that to 10s
+                         .asString) // kick off HTTP POST
+      response
+    }
+
+    val connectMsg =
+      s"""|Attempting to submit "${assignment.value}" assignment in "$courseName" course
+          |Using:
+          |- email: $email
+          |- submit token: $secret""".stripMargin
+    s.log.info(connectMsg)
+
+    def reportCourseraResponse(response: HttpResponse[String]): Unit = {
+      val code = response.code
+      val respBody = response.body
+
+       /* Sample JSON response from Coursera
+      {
+        "message": "Invalid email or token.",
+        "details": {
+          "learnerMessage": "Invalid email or token."
+        }
+      }
+      */
+
+      // Success, Coursera responds with 2xx HTTP status code
+      if (response.is2xx) {
+        val successfulSubmitMsg =
+          s"""|Successfully connected to Coursera. (Status $code)
+              |
+                |Assignment submitted successfully!
+              |
+                |You can see how you scored by going to:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId/
+              |${
+            premiumItemId.fold("") { id =>
+              s"""or (for premium learners):
+                 |https://www.coursera.org/learn/$courseName/programming/$id
+                       """.stripMargin
+            }
+          }
+              |and clicking on "My Submission".""".stripMargin
+        s.log.info(successfulSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 4xx HTTP status code (client-side failure)
+      else if (response.is4xx) {
+        val result = Try(Json.parse(respBody)).toOption
+        val learnerMsg = result match {
+          case Some(resp: JsObject) =>
+            (JsPath \ "details" \ "learnerMessage").read[String].reads(resp).get
+          case Some(x) => // shouldn't happen
+            "Could not parse Coursera's response:\n" + x
+          case None =>
+            "Could not parse Coursera's response:\n" + respBody
+        }
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |There was something wrong while attempting to submit.
+              |Coursera says:
+              |$learnerMsg (Status $code)""".stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 5xx HTTP status code (server-side failure)
+      else if (response.is5xx) {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera seems to be unavailable at the moment (Status $code)
+              |Check https://status.coursera.org/ and try again in a few minutes.
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera repsonds with an unexpected status code
+      else {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera replied with an unexpected code (Status $code)
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+    }
+
+    // kick it all off, actually make request
+    postSubmission(json) match {
+      case Success(resp) => reportCourseraResponse(resp)
+      case Failure(e) =>
+        val failedConnectMsg =
+          s"""|Connection to Coursera failed.
+              |There was something wrong while attempting to connect to Coursera.
+              |Check your internet connection.
+              |${e.toString}""".stripMargin
+        s.log.error(failedConnectMsg)
+    }
+
+   }
+*/
+
+  def failSubmit(): Nothing = {
+    sys.error("Submission failed")
+  }
+
+  /**
+    * *****************
+    * DEALING WITH JARS
+    */
+  def encodeBase64(bytes: Array[Byte]): String =
+    new String(Base64.encodeBase64(bytes))
+}
diff --git a/previous-exams/2021-midterm/m1/project/build.properties b/previous-exams/2021-midterm/m1/project/build.properties
new file mode 100644
index 0000000..0b2e09c
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/project/build.properties
@@ -0,0 +1 @@
+sbt.version=1.4.7
diff --git a/previous-exams/2021-midterm/m1/project/buildSettings.sbt b/previous-exams/2021-midterm/m1/project/buildSettings.sbt
new file mode 100644
index 0000000..8fac702
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/project/buildSettings.sbt
@@ -0,0 +1,5 @@
+// Used for Coursera submission (StudentPlugin)
+// libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.4.2"
+// libraryDependencies += "com.typesafe.play" %% "play-json" % "2.7.4"
+// Used for Base64 (StudentPlugin)
+libraryDependencies += "commons-codec" % "commons-codec" % "1.10"
diff --git a/previous-exams/2021-midterm/m1/project/plugins.sbt b/previous-exams/2021-midterm/m1/project/plugins.sbt
new file mode 100644
index 0000000..021c019
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/project/plugins.sbt
@@ -0,0 +1,2 @@
+// addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")
+addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.3")
diff --git a/previous-exams/2021-midterm/m1/src/main/scala/m1/Lib.scala b/previous-exams/2021-midterm/m1/src/main/scala/m1/Lib.scala
new file mode 100644
index 0000000..37ce780
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/src/main/scala/m1/Lib.scala
@@ -0,0 +1,60 @@
+package m1
+
+////////////////////////////////////////
+// NO NEED TO MODIFY THIS SOURCE FILE //
+////////////////////////////////////////
+
+trait Lib {
+
+  /** If an array has `n` elements and `n < THRESHOLD`, then it should be processed sequentially */
+  final val THRESHOLD: Int = 33
+
+  /** Compute the two values in parallel
+   *
+   *  Note: Most tests just compute those two sequentially to make any bug simpler to debug
+   */
+  def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2)
+
+  /** A limited array. It only contains the required operations for this exercise. */
+  trait Arr[T] {
+    /** Get the i-th element of the array (0-based) */
+    def apply(i: Int): T
+    /** Update the i-th element of the array with the given value (0-based) */
+    def update(i: Int, x: T): Unit
+    /** Number of elements in this array */
+    def length: Int
+    /** Create a copy of this array without the first element */
+    def tail: Arr[T]
+    /** Create a copy of this array by mapping all the elements with the given function */
+    def map[U](f: T => U): Arr[U]
+  }
+
+  object Arr {
+    /** Create an array with the given elements */
+    def apply[T](xs: T*): Arr[T] = {
+      val arr: Arr[T] = Arr.ofLength(xs.length)
+      for i <- 0 until xs.length do arr(i) = xs(i)
+      arr
+    }
+
+    /** Create an array with the given length. All elements are initialized to `null`. */
+    def ofLength[T](n: Int): Arr[T] =
+      newArrOfLength(n)
+
+  }
+
+  /** Create an array with the given length. All elements are initialized to `null`. */
+  def newArrOfLength[T](n: Int): Arr[T]
+
+  /** A fractional number representing `numerator/denominator` */
+  case class Frac(numerator: Int, denominator: Int) {
+    def toDouble: Double = numerator.toDouble / denominator
+  }
+
+  /** Tree result of an upsweep operation. Specialized for `Frac` results. */
+  trait TreeRes { val res: Frac }
+  /** Leaf result of an upsweep operation. Specialized for `Frac` results. */
+  case class Leaf(from: Int, to: Int, res: Frac) extends TreeRes
+  /** Tree node result of an upsweep operation. Specialized for `Frac` results. */
+  case class Node(left: TreeRes, res: Frac, right: TreeRes) extends TreeRes
+}
diff --git a/previous-exams/2021-midterm/m1/src/main/scala/m1/M1.scala b/previous-exams/2021-midterm/m1/src/main/scala/m1/M1.scala
new file mode 100644
index 0000000..fc53991
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/src/main/scala/m1/M1.scala
@@ -0,0 +1,76 @@
+package m1
+
+
+trait M1 extends Lib {
+  // Functions and classes of Lib can be used in here
+
+  /** Compute the rolling average of array.
+   *
+   *  For an array `arr = Arr(x1, x2, x3, ..., xn)` the result is
+   *  `Arr(x1 / 1, (x1 + x2) / 2, (x1 + x2 + x3) / 3, ..., (x1 + x2 + x3 + ... + xn) / n)`
+   */
+  def rollingAveragesParallel(arr: Arr[Int]): Arr[Double] = {
+    if (arr.length == 0) return Arr.ofLength(0)
+
+    val out: Arr[Double] = Arr.ofLength(arr.length)
+    val tree = upsweep(arr, 0, arr.length)
+    downsweep(arr, Frac(0, 0), tree, out)
+    out
+  }
+
+  // No need to modify this
+  def scanOp(acc: Frac, x: Frac) =
+    Frac(acc.numerator + x.numerator, acc.denominator + x.denominator)
+
+
+  def upsweep(input: Arr[Int], from: Int, to: Int): TreeRes = {
+    if (to - from < THRESHOLD)
+      Leaf(from, to, reduceSequential(input, from + 1, to, Frac(input(from), 1)))
+    else {
+      val mid = from + (to - from)/2
+      val (tL, tR) = parallel(
+        upsweep(input, from, mid),
+        upsweep(input, mid, to)
+      )
+      Node(tL, scanOp(tL.res, tR.res), tR)
+    }
+  }
+
+
+  def downsweep(input: Arr[Int], a0: Frac, tree: TreeRes, output: Arr[Double]): Unit = {
+    tree match {
+      case Node(left, _, right) =>
+        parallel(
+          downsweep(input, a0, left, output),
+          downsweep(input, scanOp(a0, left.res), right, output)
+        )
+      case Leaf(from, to, _) =>
+        downsweepSequential(input, from, to, a0, output)
+    }
+  }
+
+
+  def downsweepSequential(input: Arr[Int], from: Int, to: Int, a0: Frac, output: Arr[Double]): Unit = {
+    if (from < to) {
+      var i = from
+      var a = a0
+      while (i < to) {
+        a = scanOp(a, Frac(input(i), 1))
+        output(i) = a.toDouble
+        i = i + 1
+      }
+    }
+  }
+
+
+  def reduceSequential(input: Arr[Int], from: Int, to: Int, a0: Frac): Frac = {
+    var a = a0
+    var i = from
+    while (i < to) {
+      a = scanOp(a, Frac(input(i), 1))
+      i = i + 1
+    }
+    a
+  }
+
+}
diff --git a/previous-exams/2021-midterm/m1/src/test/scala/m1/M1Suite.scala b/previous-exams/2021-midterm/m1/src/test/scala/m1/M1Suite.scala
new file mode 100644
index 0000000..ab1b865
--- /dev/null
+++ b/previous-exams/2021-midterm/m1/src/test/scala/m1/M1Suite.scala
@@ -0,0 +1,156 @@
+package m1
+
+class M1Suite extends munit.FunSuite {
+
+  test("Rolling average result test (5pts)") {
+    RollingAveragesBasicLogicTest.basicTests()
+    RollingAveragesBasicLogicTest.normalTests()
+    RollingAveragesBasicLogicTest.largeTests()
+  }
+
+  test("[TASK 1] Rolling average parallelism test (30pts)") {
+    RollingAveragesCallsToParallel.parallelismTest()
+    RollingAveragesParallel.basicTests()
+    RollingAveragesParallel.normalTests()
+    RollingAveragesParallel.largeTests()
+  }
+
+  test("[TASK 2] Rolling average no `map` test (35pts)") {
+    RollingAveragesNoMap.basicTests()
+    RollingAveragesNoMap.normalTests()
+    RollingAveragesNoMap.largeTests()
+  }
+
+  test("[TASK 3] Rolling average no `tail` test (30pts)") {
+    RollingAveragesNoTail.basicTests()
+    RollingAveragesNoTail.normalTests()
+    RollingAveragesNoTail.largeTests()
+  }
+
+
+  object RollingAveragesBasicLogicTest extends M1 with LibImpl with RollingAveragesTest {
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = (op1, op2)
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl(arr)
+  }
+
+  object RollingAveragesCallsToParallel extends M1 with LibImpl with RollingAveragesTest {
+    private var count = 0
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) =
+      count += 1
+      (op1, op2)
+
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl(arr)
+
+    def parallelismTest() = {
+      assertParallelCount(Arr(), 0)
+      assertParallelCount(Arr(1), 0)
+      assertParallelCount(Arr(1, 2, 3, 4), 0)
+      assertParallelCount(Arr(Array.tabulate(16)(identity): _*), 0)
+      assertParallelCount(Arr(Array.tabulate(32)(identity): _*), 0)
+
+      assertParallelCount(Arr(Array.tabulate(33)(identity): _*), 2)
+      assertParallelCount(Arr(Array.tabulate(64)(identity): _*), 2)
+      assertParallelCount(Arr(Array.tabulate(128)(identity): _*), 6)
+      assertParallelCount(Arr(Array.tabulate(256)(identity): _*), 14)
+      assertParallelCount(Arr(Array.tabulate(1000)(identity): _*), 62)
+      assertParallelCount(Arr(Array.tabulate(1024)(identity): _*), 62)
+    }
+
+    def assertParallelCount(arr: Arr[Int], expected: Int): Unit = {
+      try {
+        count = 0
+        rollingAveragesParallel(arr)
+        assert(count == expected, {
+          val extra = if (expected == 0) "" else s" ${expected/2} for the `upsweep` and ${expected/2} for the `downsweep`"
+          s"\n$arr\n\nERROR: Expected $expected instead of $count calls to `parallel(...)` for an array of ${arr.length} elements. Current parallel threshold is $THRESHOLD.$extra"
+        })
+      } finally {
+        count = 0
+      }
+    }
+
+  }
+
+  object RollingAveragesNoMap extends M1 with LibImpl with RollingAveragesTest {
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = (op1, op2)
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl[T](arr) {
+      override def map[U](f: T => U): Arr[U] = throw Exception("Should not call Arr.map")
+    }
+  }
+
+  object RollingAveragesNoTail extends M1 with LibImpl with RollingAveragesTest {
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = (op1, op2)
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl[T](arr) {
+      override def tail: Arr[T] = throw Exception("Should not call Arr.tail")
+    }
+  }
+
+  object RollingAveragesParallel extends M1 with LibImpl with RollingAveragesTest {
+    import scala.concurrent.duration._
+    val TIMEOUT = Duration(10, SECONDS)
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = {
+      import concurrent.ExecutionContext.Implicits.global
+      import scala.concurrent._
+      Await.result(Future(op1).zip(Future(op2)), TIMEOUT) // FIXME not timing-out
+    }
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl(arr)
+  }
+
+  trait LibImpl extends Lib {
+
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T]
+
+    def newArrOfLength[T](n: Int): Arr[T] =
+      newArrFrom(new Array(n))
+
+    class ArrImpl[T](val arr: Array[AnyRef]) extends Arr[T]:
+      def apply(i: Int): T =
+        arr(i).asInstanceOf[T]
+      def update(i: Int, x: T): Unit =
+        arr(i) = x.asInstanceOf[AnyRef]
+      def length: Int =
+        arr.length
+      def map[U](f: T => U): Arr[U] =
+        newArrFrom(arr.map(f.asInstanceOf[AnyRef => AnyRef]))
+      def tail: Arr[T] =
+        newArrFrom(arr.tail)
+      override def toString: String =
+        arr.mkString("Arr(", ", ", ")")
+      override def equals(that: Any): Boolean =
+        that match
+          case that: ArrImpl[_] => Array.equals(arr, that.arr)
+          case _ => false
+  }
+
+  trait RollingAveragesTest extends M1 {
+
+    def tabulate[T](n: Int)(f: Int => T): Arr[T] =
+      val arr = Arr.ofLength[T](n)
+      for i <- 0 until n do
+        arr(i) = f(i)
+      arr
+
+    def basicTests() = {
+      assertEquals(rollingAveragesParallel(Arr()), Arr[Double]())
+      assertEquals(rollingAveragesParallel(Arr(1)), Arr[Double](1))
+      assertEquals(rollingAveragesParallel(Arr(1, 2, 3, 4)), Arr(1, 1.5, 2, 2.5))
+      assertEquals(rollingAveragesParallel(Arr(4, 4, 4, 4)), Arr[Double](4, 4, 4, 4))
+    }
+
+    def normalTests() = {
+      assertEquals(rollingAveragesParallel(Arr(Array.tabulate(64)(identity): _*)), Arr(Array.tabulate(64)(_.toDouble / 2): _*))
+      assertEquals(rollingAveragesParallel(Arr(4, 4, 4, 4)), Arr[Double](4, 4, 4, 4))
+      assertEquals(rollingAveragesParallel(Arr(4, 8, 6, 4)), Arr[Double](4, 6, 6, 5.5))
+      assertEquals(rollingAveragesParallel(Arr(4, 3, 2, 1)), Arr(4, 3.5, 3, 2.5))
+      assertEquals(rollingAveragesParallel(Arr(Array.tabulate(64)(identity).reverse: _*)), Arr(Array.tabulate(64)(i => 63 - i.toDouble / 2): _*))
+      assertEquals(rollingAveragesParallel(Arr(Array.tabulate(128)(i => 128 - 2*i).reverse: _*)), Arr(Array.tabulate(128)(i => -126d + i): _*))
+    }
+
+    def largeTests() = {
+      assertEquals(rollingAveragesParallel(Arr(Array.tabulate(500)(identity): _*)), Arr(Array.tabulate(500)(_.toDouble / 2): _*))
+      assertEquals(rollingAveragesParallel(Arr(Array.tabulate(512)(identity): _*)), Arr(Array.tabulate(512)(_.toDouble / 2): _*))
+      assertEquals(rollingAveragesParallel(Arr(Array.tabulate(1_000)(identity): _*)), Arr(Array.tabulate(1_000)(_.toDouble / 2): _*))
+      assertEquals(rollingAveragesParallel(Arr(Array.tabulate(10_000)(identity): _*)), Arr(Array.tabulate(10_000)(_.toDouble / 2): _*))
+    }
+  }
+}
\ No newline at end of file
diff --git a/previous-exams/2021-midterm/m14.md b/previous-exams/2021-midterm/m14.md
new file mode 100644
index 0000000..62f775d
--- /dev/null
+++ b/previous-exams/2021-midterm/m14.md
@@ -0,0 +1,42 @@
+Use the following commands to make a fresh clone of your repository:
+
+```
+git clone -b m14 git@gitlab.epfl.ch:lamp/student-repositories-s21/cs206-GASPAR.git m14
+```
+
+## Useful links
+
+  * [A guide to the Scala parallel collections](https://docs.scala-lang.org/overviews/parallel-collections/overview.html)
+  * [The API documentation of the Scala parallel collections](https://www.javadoc.io/doc/org.scala-lang.modules/scala-parallel-collections_2.13/latest/scala/collection/index.html)
+  * [The API documentation of the Scala standard library](https://www.scala-lang.org/files/archive/api/2.13.4)
+  * [The API documentation of the Java standard library](https://docs.oracle.com/en/java/javase/15/docs/api/index.html)
+
+**If you have issues with the IDE, try [reimporting the
+build](https://gitlab.epfl.ch/lamp/cs206/-/blob/master/labs/example-lab.md#ide-features-like-type-on-hover-or-go-to-definition-do-not-work),
+if you still have problems, use `compile` in sbt instead.**
+
+## Exercise
+
+In this question, you will implement a simple thread pool executor.
+Thread pool executors provide a way to execute tasks in parallel using one of several pooled threads.
+Using a pool of threads provides improved performance compared to creating a new thread for every operation since threads in the pool are reused throughout the executor's lifetime.
+
+Thread pool executors are one of the core primitive used to implement parallel programs. For example, they are the underlying mechanism used in the implementation of `Future`-s.
+
+Your task is to complete the implementation of the `ThreadPoolExecutor` class. This class' constructor takes the number of threads of the pool as argument and exposes two life-cycle methods (`start` and `shutdown`), and an `execute` method to run tasks on the thread pool. The `execute` method takes as argument `Unit => Unit` functions. These functions can be constructed anonymously using the following syntax: `val func = (x: Unit) => println("hello")`. Furthermore, given a `func` function of type `Unit => Unit`, one can invoke that function using `func(())`.
+For the purpose of this exercise, you can assume that the tasks submitted to the thread pool via the `execute` method do not throw exceptions.
+
+The thread pool implementation uses two additional classes:
+- `BlockingQueue`, used by the `ThreadPoolExecutor` to store pending tasks,
+- `Worker`-s, which each run in a separate thread, consume tasks from the queue and execute those tasks.
+
+The `BlockingQueue` implements two methods:
+- `put` to insert an element in the queue
+- `take` to retrieve and remove an element from the queue, in a last in first out order.
+
+The `put` operation always succeeds and is non-blocking (the queue is unbounded).
+The `take` operation is a potentially blocking operation that waits for new elements when called on an empty queue.
+
+Given that `Worker`-s run on separate threads, the `take` operation must be thread-safe. Furthermore, since the thread pool executor could also be used from multiple threads, the `put` operation should also be thread-safe.
+Your implementation should use a single lock to achieve this thread safety, specifically using the `[wait](http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait())`/`[notify](http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notify())`/`[notifyAll](http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notifyAll())`/`synchronized` primitives.
+Remember that `wait`, `notify` and `notifyAll` should only be invoked inside a synchronized block.
diff --git a/previous-exams/2021-midterm/m14/.gitignore b/previous-exams/2021-midterm/m14/.gitignore
new file mode 100644
index 0000000..40937dc
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/.gitignore
@@ -0,0 +1,22 @@
+# General
+*.DS_Store
+*.swp
+*~
+
+# Dotty
+*.class
+*.tasty
+*.hasTasty
+
+# sbt
+target/
+
+# IDE
+.bsp
+.bloop
+.metals
+.vscode
+
+# datasets
+stackoverflow-grading.csv
+wikipedia-grading.dat
diff --git a/previous-exams/2021-midterm/m14/assignment.sbt b/previous-exams/2021-midterm/m14/assignment.sbt
new file mode 100644
index 0000000..da7eb3c
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/assignment.sbt
@@ -0,0 +1,2 @@
+// Student tasks (i.e. submit, packageSubmission)
+enablePlugins(StudentTasks)
diff --git a/previous-exams/2021-midterm/m14/build.sbt b/previous-exams/2021-midterm/m14/build.sbt
new file mode 100644
index 0000000..aeee575
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/build.sbt
@@ -0,0 +1,12 @@
+course := "midterm"
+assignment := "m14"
+scalaVersion := "3.0.0-RC1"
+scalacOptions ++= Seq("-language:implicitConversions", "-deprecation")
+
+libraryDependencies += "org.scalameta" %% "munit" % "0.7.22"
+
+val MUnitFramework = new TestFramework("munit.Framework")
+testFrameworks += MUnitFramework
+// Decode Scala names
+testOptions += Tests.Argument(MUnitFramework, "-s")
+testSuite := "m14.M14Suite"
diff --git a/previous-exams/2021-midterm/m14/grading-tests.jar b/previous-exams/2021-midterm/m14/grading-tests.jar
new file mode 100644
index 0000000000000000000000000000000000000000..ff7d9e97309ad2d12b3694244f6870f5603f0dbc
GIT binary patch
literal 119786
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
VVEO_9;RSxmUIBA&6JRib{2!V9T$TU;

literal 0
HcmV?d00001

diff --git a/previous-exams/2021-midterm/m14/project/FilteringReporterPlugin.scala b/previous-exams/2021-midterm/m14/project/FilteringReporterPlugin.scala
new file mode 100644
index 0000000..2e4fd9a
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/project/FilteringReporterPlugin.scala
@@ -0,0 +1,31 @@
+package sbt // To access the private[sbt] compilerReporter key
+package filteringReporterPlugin
+
+import Keys._
+import ch.epfl.lamp._
+
+object FilteringReporterPlugin extends AutoPlugin {
+  override lazy val projectSettings = Seq(
+    // Turn off warning coming from scalameter that we cannot fix without changing scalameter
+    compilerReporter in (Compile, compile) ~= { reporter => new FilteringReporter(reporter) }
+  )
+}
+
+class FilteringReporter(reporter: xsbti.Reporter) extends xsbti.Reporter {
+
+  def reset(): Unit = reporter.reset()
+  def hasErrors: Boolean = reporter.hasErrors
+  def hasWarnings: Boolean = reporter.hasWarnings
+  def printSummary(): Unit = reporter.printSummary()
+  def problems: Array[xsbti.Problem] = reporter.problems
+
+  def log(problem: xsbti.Problem): Unit = {
+    if (!problem.message.contains("An existential type that came from a Scala-2 classfile cannot be"))
+      reporter.log(problem)
+  }
+
+  def comment(pos: xsbti.Position, msg: String): Unit =
+    reporter.comment(pos, msg)
+
+  override def toString = s"CollectingReporter($reporter)"
+}
diff --git a/previous-exams/2021-midterm/m14/project/MOOCSettings.scala b/previous-exams/2021-midterm/m14/project/MOOCSettings.scala
new file mode 100644
index 0000000..1c40443
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/project/MOOCSettings.scala
@@ -0,0 +1,49 @@
+package ch.epfl.lamp
+
+import sbt._
+import sbt.Keys._
+
+/**
+ * Coursera uses two versions of each assignment. They both have the same assignment key and part id but have
+ * different item ids.
+ *
+ * @param key Assignment key
+ * @param partId Assignment partId
+ * @param itemId Item id of the non premium version
+ * @param premiumItemId Item id of the premium version (`None` if the assignment is optional)
+ */
+case class CourseraId(key: String, partId: String, itemId: String, premiumItemId: Option[String])
+
+/**
+  * Settings shared by all assignments, reused in various tasks.
+  */
+object MOOCSettings extends AutoPlugin {
+
+  override def requires = super.requires && filteringReporterPlugin.FilteringReporterPlugin
+
+  object autoImport {
+    val course = SettingKey[String]("course")
+    val assignment = SettingKey[String]("assignment")
+    val options = SettingKey[Map[String, Map[String, String]]]("options")
+    val courseraId = settingKey[CourseraId]("Coursera-specific information identifying the assignment")
+    val testSuite = settingKey[String]("Fully qualified name of the test suite of this assignment")
+      .withRank(KeyRanks.Invisible)
+    // Convenient alias
+    type CourseraId = ch.epfl.lamp.CourseraId
+    val CourseraId = ch.epfl.lamp.CourseraId
+  }
+
+  import autoImport._
+
+  override val globalSettings: Seq[Def.Setting[_]] = Seq(
+    // supershell is verbose, buggy and useless.
+    useSuperShell := false
+  )
+
+  override val projectSettings: Seq[Def.Setting[_]] = Seq(
+    parallelExecution in Test := false,
+    // Report test result after each test instead of waiting for every test to finish
+    logBuffered in Test := false,
+    name := s"${course.value}-${assignment.value}"
+  )
+}
diff --git a/previous-exams/2021-midterm/m14/project/StudentTasks.scala b/previous-exams/2021-midterm/m14/project/StudentTasks.scala
new file mode 100644
index 0000000..c4669af
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/project/StudentTasks.scala
@@ -0,0 +1,303 @@
+package ch.epfl.lamp
+
+import sbt._
+import Keys._
+
+// import scalaj.http._
+import java.io.{File, FileInputStream, IOException}
+import org.apache.commons.codec.binary.Base64
+// import play.api.libs.json.{Json, JsObject, JsPath}
+import scala.util.{Failure, Success, Try}
+
+/**
+  * Provides tasks for submitting the assignment
+  */
+object StudentTasks extends AutoPlugin {
+
+  override def requires = super.requires && MOOCSettings
+
+  object autoImport {
+    val packageSourcesOnly = TaskKey[File]("packageSourcesOnly", "Package the sources of the project")
+    val packageBinWithoutResources = TaskKey[File]("packageBinWithoutResources", "Like packageBin, but without the resources")
+    val packageSubmissionZip = TaskKey[File]("packageSubmissionZip")
+    val packageSubmission = inputKey[Unit]("package solution as an archive file")
+
+    lazy val Grading = config("grading") extend(Runtime)
+  }
+
+
+  import autoImport._
+  import MOOCSettings.autoImport._
+
+  override lazy val projectSettings = Seq(
+    packageSubmissionSetting,
+    fork := true,
+    connectInput in run := true,
+    outputStrategy := Some(StdoutOutput),
+  ) ++
+    packageSubmissionZipSettings ++
+    inConfig(Grading)(Defaults.testSettings ++ Seq(
+      unmanagedJars += file("grading-tests.jar"),
+
+      definedTests := (definedTests in Test).value,
+      internalDependencyClasspath := (internalDependencyClasspath in Test).value
+    ))
+
+
+  /** **********************************************************
+    * SUBMITTING A SOLUTION TO COURSERA
+    */
+
+  val packageSubmissionZipSettings = Seq(
+    packageSubmissionZip := {
+      val submission = crossTarget.value / "submission.zip"
+      val sources = (packageSourcesOnly in Compile).value
+      val binaries = (packageBinWithoutResources in Compile).value
+      IO.zip(Seq(sources -> "sources.zip", binaries -> "binaries.jar"), submission, None)
+      submission
+    },
+    artifactClassifier in packageSourcesOnly := Some("sources"),
+    artifact in (Compile, packageBinWithoutResources) ~= (art => art.withName(art.name + "-without-resources"))
+  ) ++
+  inConfig(Compile)(
+    Defaults.packageTaskSettings(packageSourcesOnly, Defaults.sourceMappings) ++
+    Defaults.packageTaskSettings(packageBinWithoutResources, Def.task {
+      val relativePaths =
+        (unmanagedResources in Compile).value.flatMap(Path.relativeTo((unmanagedResourceDirectories in Compile).value)(_))
+      (mappings in (Compile, packageBin)).value.filterNot { case (_, path) => relativePaths.contains(path) }
+    })
+  )
+
+  val maxSubmitFileSize = {
+    val mb = 1024 * 1024
+    10 * mb
+  }
+
+  /** Check that the jar exists, isn't empty, isn't crazy big, and can be read
+    * If so, encode jar as base64 so we can send it to Coursera
+    */
+  def prepareJar(jar: File, s: TaskStreams): String = {
+    val errPrefix = "Error submitting assignment jar: "
+    val fileLength = jar.length()
+    if (!jar.exists()) {
+      s.log.error(errPrefix + "jar archive does not exist\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength == 0L) {
+      s.log.error(errPrefix + "jar archive is empty\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength > maxSubmitFileSize) {
+      s.log.error(errPrefix + "jar archive is too big. Allowed size: " +
+        maxSubmitFileSize + " bytes, found " + fileLength + " bytes.\n" +
+        jar.getAbsolutePath)
+      failSubmit()
+    } else {
+      val bytes = new Array[Byte](fileLength.toInt)
+      val sizeRead = try {
+        val is = new FileInputStream(jar)
+        val read = is.read(bytes)
+        is.close()
+        read
+      } catch {
+        case ex: IOException =>
+          s.log.error(errPrefix + "failed to read sources jar archive\n" + ex.toString)
+          failSubmit()
+      }
+      if (sizeRead != bytes.length) {
+        s.log.error(errPrefix + "failed to read the sources jar archive, size read: " + sizeRead)
+        failSubmit()
+      } else encodeBase64(bytes)
+    }
+  }
+
+  /** Task to package solution to a given file path */
+  lazy val packageSubmissionSetting = packageSubmission := {
+    val args: Seq[String] = Def.spaceDelimited("[path]").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val base64Jar = prepareJar(jar, s)
+
+    val path = args.headOption.getOrElse((baseDirectory.value / "submission.jar").absolutePath)
+    scala.tools.nsc.io.File(path).writeAll(base64Jar)
+  }
+
+/*
+  /** Task to submit a solution to coursera */
+  val submit = inputKey[Unit]("submit solution to Coursera")
+  lazy val submitSetting = submit := {
+    // Fail if scalafix linting does not pass.
+    scalafixLinting.value
+
+    val args: Seq[String] = Def.spaceDelimited("<arg>").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val assignmentDetails =
+      courseraId.?.value.getOrElse(throw new MessageOnlyException("This assignment can not be submitted to Coursera because the `courseraId` setting is undefined"))
+    val assignmentKey = assignmentDetails.key
+    val courseName =
+      course.value match {
+        case "capstone" => "scala-capstone"
+        case "bigdata"  => "scala-spark-big-data"
+        case other      => other
+      }
+
+    val partId = assignmentDetails.partId
+    val itemId = assignmentDetails.itemId
+    val premiumItemId = assignmentDetails.premiumItemId
+
+    val (email, secret) = args match {
+      case email :: secret :: Nil =>
+        (email, secret)
+      case _ =>
+        val inputErr =
+          s"""|Invalid input to `submit`. The required syntax for `submit` is:
+              |submit <email-address> <submit-token>
+              |
+              |The submit token is NOT YOUR LOGIN PASSWORD.
+              |It can be obtained from the assignment page:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId
+              |${
+                premiumItemId.fold("") { id =>
+                  s"""or (for premium learners):
+                     |https://www.coursera.org/learn/$courseName/programming/$id
+                   """.stripMargin
+                }
+              }
+          """.stripMargin
+        s.log.error(inputErr)
+        failSubmit()
+    }
+
+    val base64Jar = prepareJar(jar, s)
+    val json =
+      s"""|{
+          |   "assignmentKey":"$assignmentKey",
+          |   "submitterEmail":"$email",
+          |   "secret":"$secret",
+          |   "parts":{
+          |      "$partId":{
+          |         "output":"$base64Jar"
+          |      }
+          |   }
+          |}""".stripMargin
+
+    def postSubmission[T](data: String): Try[HttpResponse[String]] = {
+      val http = Http("https://www.coursera.org/api/onDemandProgrammingScriptSubmissions.v1")
+      val hs = List(
+        ("Cache-Control", "no-cache"),
+        ("Content-Type", "application/json")
+      )
+      s.log.info("Connecting to Coursera...")
+      val response = Try(http.postData(data)
+                         .headers(hs)
+                         .option(HttpOptions.connTimeout(10000)) // scalaj default timeout is only 100ms, changing that to 10s
+                         .asString) // kick off HTTP POST
+      response
+    }
+
+    val connectMsg =
+      s"""|Attempting to submit "${assignment.value}" assignment in "$courseName" course
+          |Using:
+          |- email: $email
+          |- submit token: $secret""".stripMargin
+    s.log.info(connectMsg)
+
+    def reportCourseraResponse(response: HttpResponse[String]): Unit = {
+      val code = response.code
+      val respBody = response.body
+
+       /* Sample JSON response from Coursera
+      {
+        "message": "Invalid email or token.",
+        "details": {
+          "learnerMessage": "Invalid email or token."
+        }
+      }
+      */
+
+      // Success, Coursera responds with 2xx HTTP status code
+      if (response.is2xx) {
+        val successfulSubmitMsg =
+          s"""|Successfully connected to Coursera. (Status $code)
+              |
+                |Assignment submitted successfully!
+              |
+                |You can see how you scored by going to:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId/
+              |${
+            premiumItemId.fold("") { id =>
+              s"""or (for premium learners):
+                 |https://www.coursera.org/learn/$courseName/programming/$id
+                       """.stripMargin
+            }
+          }
+              |and clicking on "My Submission".""".stripMargin
+        s.log.info(successfulSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 4xx HTTP status code (client-side failure)
+      else if (response.is4xx) {
+        val result = Try(Json.parse(respBody)).toOption
+        val learnerMsg = result match {
+          case Some(resp: JsObject) =>
+            (JsPath \ "details" \ "learnerMessage").read[String].reads(resp).get
+          case Some(x) => // shouldn't happen
+            "Could not parse Coursera's response:\n" + x
+          case None =>
+            "Could not parse Coursera's response:\n" + respBody
+        }
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |There was something wrong while attempting to submit.
+              |Coursera says:
+              |$learnerMsg (Status $code)""".stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 5xx HTTP status code (server-side failure)
+      else if (response.is5xx) {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera seems to be unavailable at the moment (Status $code)
+              |Check https://status.coursera.org/ and try again in a few minutes.
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera repsonds with an unexpected status code
+      else {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera replied with an unexpected code (Status $code)
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+    }
+
+    // kick it all off, actually make request
+    postSubmission(json) match {
+      case Success(resp) => reportCourseraResponse(resp)
+      case Failure(e) =>
+        val failedConnectMsg =
+          s"""|Connection to Coursera failed.
+              |There was something wrong while attempting to connect to Coursera.
+              |Check your internet connection.
+              |${e.toString}""".stripMargin
+        s.log.error(failedConnectMsg)
+    }
+
+   }
+*/
+
+  def failSubmit(): Nothing = {
+    sys.error("Submission failed")
+  }
+
+  /**
+    * *****************
+    * DEALING WITH JARS
+    */
+  def encodeBase64(bytes: Array[Byte]): String =
+    new String(Base64.encodeBase64(bytes))
+}
diff --git a/previous-exams/2021-midterm/m14/project/build.properties b/previous-exams/2021-midterm/m14/project/build.properties
new file mode 100644
index 0000000..0b2e09c
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/project/build.properties
@@ -0,0 +1 @@
+sbt.version=1.4.7
diff --git a/previous-exams/2021-midterm/m14/project/buildSettings.sbt b/previous-exams/2021-midterm/m14/project/buildSettings.sbt
new file mode 100644
index 0000000..8fac702
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/project/buildSettings.sbt
@@ -0,0 +1,5 @@
+// Used for Coursera submission (StudentPlugin)
+// libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.4.2"
+// libraryDependencies += "com.typesafe.play" %% "play-json" % "2.7.4"
+// Used for Base64 (StudentPlugin)
+libraryDependencies += "commons-codec" % "commons-codec" % "1.10"
diff --git a/previous-exams/2021-midterm/m14/project/plugins.sbt b/previous-exams/2021-midterm/m14/project/plugins.sbt
new file mode 100644
index 0000000..021c019
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/project/plugins.sbt
@@ -0,0 +1,2 @@
+// addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")
+addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.3")
diff --git a/previous-exams/2021-midterm/m14/src/main/scala/m14/AbstractBlockingQueue.scala b/previous-exams/2021-midterm/m14/src/main/scala/m14/AbstractBlockingQueue.scala
new file mode 100644
index 0000000..a91a39c
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/src/main/scala/m14/AbstractBlockingQueue.scala
@@ -0,0 +1,14 @@
+package m14
+
+abstract class AbstractBlockingQueue[T] extends Monitor {
+  private var underlying: List[T] = Nil
+
+  def getUnderlying(): List[T] =
+    underlying
+
+  def setUnderlying(newValue: List[T]): Unit =
+    underlying = newValue
+
+  def put(elem: T): Unit
+  def take(): T
+}
diff --git a/previous-exams/2021-midterm/m14/src/main/scala/m14/AbstractThreadPoolExecutor.scala b/previous-exams/2021-midterm/m14/src/main/scala/m14/AbstractThreadPoolExecutor.scala
new file mode 100644
index 0000000..670294c
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/src/main/scala/m14/AbstractThreadPoolExecutor.scala
@@ -0,0 +1,7 @@
+package m14
+
+abstract class AbstractThreadPoolExecutor {
+  def execute(task: Unit => Unit): Unit
+  def start(): Unit
+  def shutdown(): Unit
+}
diff --git a/previous-exams/2021-midterm/m14/src/main/scala/m14/M14.scala b/previous-exams/2021-midterm/m14/src/main/scala/m14/M14.scala
new file mode 100644
index 0000000..82e2e4c
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/src/main/scala/m14/M14.scala
@@ -0,0 +1,80 @@
+package m14
+
+object M14 {
+  /** A thread pool that executes submitted task using one of several threads */
+  class ThreadPoolExecutor(taskQueue: BlockingQueue[Unit => Unit], poolSize: Int)
+      extends AbstractThreadPoolExecutor {
+
+    private class Worker extends Thread {
+      override def run(): Unit = {
+        try {
+          while (true) {
+
+            val task = taskQueue.take()
+            task(())
+          }
+        } catch {
+          case e: InterruptedException =>
+            // Nothing to do here, we are shutting down gracefully.
+        }
+      }
+    }
+    private val workers: List[Worker] = List.fill(poolSize)(new Worker())
+
+    /** Executes the given task, passed by name. */
+    def execute(task: Unit => Unit): Unit =
+
+      taskQueue.put(task)
+
+    /** Starts the thread pool. */
+    def start(): Unit =
+      workers.foreach(_.start())
+
+    /** Instantly shuts down all actively executing tasks using an interrupt. */
+    def shutdown(): Unit =
+      workers.foreach(_.interrupt())
+  }
+
+  /**
+   * A queue whose take operations blocks until the queue become non-empty.
+   * Elements must be retrived from this queue in a last in, first out order.
+   * All methods of this class are thread safe, that is, they can safely
+   * be used from multiple thread without any particular synchronization.
+   */
+  class BlockingQueue[T] extends AbstractBlockingQueue[T] {
+
+    // The state of this queue is stored in an underlying List[T] defined in
+    // the AbstractBlockingQueue class. Your implementation should access and
+    // update this list using the following setter and getter methods:
+    // - def getUnderlying(): List[T]
+    // - def setUnderlying(newValue: List[T]): Unit
+    // Using these methods is required for testing purposes.
+
+    /** Inserts the specified element into this queue (non-blocking) */
+    def put(elem: T): Unit =
+
+      this.synchronized {
+        val underlying = getUnderlying()
+        setUnderlying(elem :: underlying)
+        this.notifyAll()
+      }
+
+
+    /**
+     * Retrieves and removes the head of this queue, waiting if necessary
+     * This queue operates in a first in, first out order.
+     * until an element becomes available (blocking).
+     * This queue operates in a last in, first out order.
+     */
+    def take(): T =
+
+      this.synchronized {
+        while (getUnderlying().isEmpty)
+          this.wait()
+        val underlying = getUnderlying()
+        val head = underlying.head
+        setUnderlying(underlying.tail)
+        head
+      }
+  }
+}
diff --git a/previous-exams/2021-midterm/m14/src/main/scala/m14/Monitor.scala b/previous-exams/2021-midterm/m14/src/main/scala/m14/Monitor.scala
new file mode 100644
index 0000000..97dd73a
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/src/main/scala/m14/Monitor.scala
@@ -0,0 +1,23 @@
+package m14
+
+class Dummy
+
+trait Monitor {
+  implicit val dummy: Dummy = new Dummy
+
+  def wait()(implicit i: Dummy) = waitDefault()
+
+  def synchronized[T](e: => T)(implicit i: Dummy) = synchronizedDefault(e)
+
+  def notify()(implicit i: Dummy) = notifyDefault()
+
+  def notifyAll()(implicit i: Dummy) = notifyAllDefault()
+
+  private val lock = new AnyRef
+
+  // Can be overriden.
+  def waitDefault(): Unit = lock.wait()
+  def synchronizedDefault[T](toExecute: => T): T = lock.synchronized(toExecute)
+  def notifyDefault(): Unit = lock.notify()
+  def notifyAllDefault(): Unit = lock.notifyAll()
+}
diff --git a/previous-exams/2021-midterm/m14/src/test/scala/m14/M14Suite.scala b/previous-exams/2021-midterm/m14/src/test/scala/m14/M14Suite.scala
new file mode 100644
index 0000000..cd04f2a
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/src/test/scala/m14/M14Suite.scala
@@ -0,0 +1,159 @@
+package m14
+
+import instrumentation.SchedulableBlockingQueue
+import instrumentation.TestHelper._
+import instrumentation.TestUtils._
+
+class M14Suite extends munit.FunSuite {
+  import M14._
+
+  test("ThreadPool should put jobs in the queue, Workers should execute jobs from the queue (10pts)") {
+    case class PutE(e: Unit => Unit) extends Exception
+    val nThreads = 3
+    var taken = false
+    class TestBlockingQueue extends BlockingQueue[Unit => Unit] {
+      override def put(e: Unit => Unit): Unit =
+        throw new PutE(e)
+
+      override def take(): Unit => Unit =
+        x => {
+          taken = true
+          Thread.sleep(10 * 1000)
+        }
+    }
+
+    val tpe = new ThreadPoolExecutor(new TestBlockingQueue, nThreads)
+    val unit2unit: Unit => Unit = x => ()
+    try {
+      tpe.execute(unit2unit)
+      assert(false, "ThreadPoolExecutor does not put jobs in the queue")
+    } catch {
+      case PutE(e) =>
+        assert(e == unit2unit)
+    }
+    tpe.start()
+    Thread.sleep(1000)
+    assert(taken, s"ThreadPoolExecutor workers do no execute jobs from the queue")
+    tpe.shutdown()
+  }
+
+  test("BlockingQueue should work in a sequential setting (1pts)") {
+    testSequential[(Int, Int, Int, Int)]{ sched =>
+      val queue = new SchedulableBlockingQueue[Int](sched)
+      queue.put(1)
+      queue.put(2)
+      queue.put(3)
+      queue.put(4)
+      (queue.take(),
+      queue.take(),
+      queue.take(),
+      queue.take())
+    }{ tuple =>
+      (tuple == (4, 3, 2, 1), s"Expected (4, 3, 2, 1) got $tuple")
+    }
+  }
+
+  test("BlockingQueue should work when Thread 1: 'put(1)', Thread 2: 'take' (3pts)") {
+    testManySchedules(2, sched => {
+      val queue = new SchedulableBlockingQueue[Int](sched)
+      (List(() => queue.put(1), () => queue.take()),
+       args => (args(1) == 1, s"Expected 1, got ${args(1)}"))
+    })
+  }
+
+  test("BlockingQueue should not be able to take from an empty queue (3pts)") {
+    testSequential[Boolean]{ sched =>
+      val queue = new SchedulableBlockingQueue[Int](sched);
+      queue.put(1)
+      queue.put(2)
+      queue.take()
+      queue.take()
+      failsOrTimesOut(queue.take())
+    }{ res =>
+      (res, "Was able to retrieve an element from an empty queue")
+    }
+  }
+
+  test("BlockingQueue should work when Thread 1: 'put(1)', Thread 2: 'put(2)', Thread 3: 'take' (5pts)") {
+    testManySchedules(3, sched => {
+      val queue = new SchedulableBlockingQueue[Int](sched)
+      (List(() => queue.put(1), () => queue.put(2), () => queue.take())
+      , args => {
+        val takeRes = args(2).asInstanceOf[Int]
+        val nocreation = (takeRes == 1 || takeRes == 2)
+        if (!nocreation)
+          (false, s"'take' should return either 1 or 2")
+        else (true, "")
+      })
+    })
+  }
+
+  test("BlockingQueue should work when Thread 1: 'put(1)', Thread 2: 'put(2)', Thread 3: 'take', Thread 4: 'take' (10pts)") {
+    testManySchedules(4, sched => {
+      val queue = new SchedulableBlockingQueue[Int](sched)
+      (List(() => queue.put(1), () => queue.put(2), () => queue.take(), () => queue.take())
+      , args => {
+        def m(): (Boolean, String) = {
+          val takeRes1 = args(2).asInstanceOf[Int]
+          val takeRes2 = args(3).asInstanceOf[Int]
+          val nocreation = (x: Int) => List(1, 2).contains(x)
+          if (!nocreation(takeRes1))
+            return (false, s"'Thread 3: take' returned $takeRes1 but should return a value in {1, 2, 3}")
+          if (!nocreation(takeRes2))
+            return (false, s"'Thread 4: take' returned $takeRes2 but should return a value in {1, 2, 3}")
+
+          val noduplication = takeRes1 != takeRes2
+          if (!noduplication)
+            (false, s"'Thread 3 and 4' returned the same value: $takeRes1")
+          else (true, "")
+        }
+        m()
+      })
+    })
+  }
+
+  test("BlockingQueue should work when Thread 1: 'put(1)', Thread 2: 'put(2)', Thread 3: 'put(3)', Thread 4: 'take', Thread 5: 'take' (10pts)") {
+    testManySchedules(5, sched => {
+      val queue = new SchedulableBlockingQueue[Int](sched)
+      (List(() => queue.put(1), () => queue.put(2), () => queue.put(3),
+        () => queue.take(), () => queue.take())
+      , args => {
+        def m(): (Boolean, String) = {
+          val takeRes1 = args(3).asInstanceOf[Int]
+          val takeRes2 = args(4).asInstanceOf[Int]
+          val nocreation = (x: Int) => List(1, 2, 3).contains(x)
+          if (!nocreation(takeRes1))
+            return (false, s"'Thread 4: take' returned $takeRes1 but should return a value in {1, 2, 3}")
+          if (!nocreation(takeRes2))
+            return (false, s"'Thread 5: take' returned $takeRes2 but should return a value in {1, 2, 3}")
+
+          val noduplication = takeRes1 != takeRes2
+          if (!noduplication)
+            return (false, s"'Thread 4 and 5' returned the same value: $takeRes1")
+          else (true, "")
+        }
+        m()
+      })
+    })
+  }
+
+  test("BlockingQueue should work when Thread 1: 'put(1); put(2); take', Thread 2: 'put(3)', Thread 3: 'put(4)' (10pts)") {
+    testManySchedules(3, sched => {
+      val queue = new SchedulableBlockingQueue[Int](sched)
+      (List(
+        () => { queue.put(1); queue.put(2); queue.take() },
+        () => queue.put(3),
+        () => queue.put(4)
+      ), args => {
+        val takeRes = args(0).asInstanceOf[Int]
+        val nocreation = List(1, 2, 3, 4).contains
+        if (!nocreation(takeRes))
+          (false, s"'Thread 1: take' returned $takeRes, but should return a value in {1, 2, 3, 4}")
+        else if (takeRes == 1)
+          (false, s"'Thread 1' returned 2 before returning 1 (got $takeRes)")
+        else
+          (true, "")
+      })
+    })
+  }
+}
diff --git a/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/MockedMonitor.scala b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/MockedMonitor.scala
new file mode 100644
index 0000000..64aa205
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/MockedMonitor.scala
@@ -0,0 +1,73 @@
+package m14
+package instrumentation
+
+trait MockedMonitor extends Monitor {
+  def scheduler: Scheduler
+
+  // Can be overriden.
+  override def waitDefault() = {
+    scheduler.log("wait")
+    scheduler updateThreadState Wait(this, scheduler.threadLocks.tail)
+  }
+  override def synchronizedDefault[T](toExecute: =>T): T = {
+    scheduler.log("synchronized check")
+    val prevLocks = scheduler.threadLocks
+    scheduler updateThreadState Sync(this, prevLocks) // If this belongs to prevLocks, should just continue.
+    scheduler.log("synchronized -> enter")
+    try {
+      toExecute
+    } finally {
+      scheduler updateThreadState Running(prevLocks)
+      scheduler.log("synchronized -> out")
+    }
+  }
+  override def notifyDefault() = {
+    scheduler mapOtherStates {
+      state => state match {
+        case Wait(lockToAquire, locks) if lockToAquire == this => SyncUnique(this, state.locks)
+        case e => e
+      }
+    }
+    scheduler.log("notify")
+  }
+  override def notifyAllDefault() = {
+    scheduler mapOtherStates {
+      state => state match {
+        case Wait(lockToAquire, locks) if lockToAquire == this => Sync(this, state.locks)
+        case SyncUnique(lockToAquire, locks) if lockToAquire == this => Sync(this, state.locks)
+        case e => e
+      }
+    }
+    scheduler.log("notifyAll")
+  }
+}
+
+trait LockFreeMonitor extends Monitor {
+  override def waitDefault() = {
+    throw new Exception("Please use lock-free structures and do not use wait()")
+  }
+  override def synchronizedDefault[T](toExecute: =>T): T = {
+    throw new Exception("Please use lock-free structures and do not use synchronized()")
+  }
+  override def notifyDefault() = {
+    throw new Exception("Please use lock-free structures and do not use notify()")
+  }
+  override def notifyAllDefault() = {
+    throw new Exception("Please use lock-free structures and do not use notifyAll()")
+  }
+}
+
+
+abstract class ThreadState {
+  def locks: Seq[AnyRef]
+}
+trait CanContinueIfAcquiresLock extends ThreadState {
+  def lockToAquire: AnyRef
+}
+case object Start extends ThreadState { def locks: Seq[AnyRef] = Seq.empty }
+case object End extends ThreadState { def locks: Seq[AnyRef] = Seq.empty }
+case class Wait(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState
+case class SyncUnique(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState with CanContinueIfAcquiresLock
+case class Sync(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState with CanContinueIfAcquiresLock
+case class Running(locks: Seq[AnyRef]) extends ThreadState
+case class VariableReadWrite(locks: Seq[AnyRef]) extends ThreadState
diff --git a/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/SchedulableBlockingQueue.scala b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/SchedulableBlockingQueue.scala
new file mode 100644
index 0000000..16e68fa
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/SchedulableBlockingQueue.scala
@@ -0,0 +1,17 @@
+package m14
+package instrumentation
+
+class SchedulableBlockingQueue[T](val scheduler: Scheduler)
+  extends m14.M14.BlockingQueue[T] with MockedMonitor {
+    private var underlying: List[T] = Nil
+
+    override def getUnderlying(): List[T] =
+      scheduler.exec {
+        underlying
+      }(s"Get $underlying")
+
+    override def setUnderlying(newValue: List[T]): Unit =
+      scheduler.exec {
+        underlying = newValue
+      }(s"Set $newValue")
+}
diff --git a/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/Scheduler.scala b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/Scheduler.scala
new file mode 100644
index 0000000..448a809
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/Scheduler.scala
@@ -0,0 +1,305 @@
+package m14
+package instrumentation
+
+import java.util.concurrent._;
+import scala.concurrent.duration._
+import scala.collection.mutable._
+import Stats._
+
+import java.util.concurrent.atomic.AtomicInteger
+
+sealed abstract class Result
+case class RetVal(rets: List[Any]) extends Result
+case class Except(msg: String, stackTrace: Array[StackTraceElement]) extends Result
+case class Timeout(msg: String) extends Result
+
+/**
+ * A class that maintains schedule and a set of thread ids.
+ * The schedules are advanced after an operation of a SchedulableBuffer is performed.
+ * Note: the real schedule that is executed may deviate from the input schedule
+ * due to the adjustments that had to be made for locks
+ */
+class Scheduler(sched: List[Int]) {
+  val maxOps = 500 // a limit on the maximum number of operations the code is allowed to perform
+
+  private var schedule = sched
+  private var numThreads = 0
+  private val realToFakeThreadId = Map[Long, Int]()
+  private val opLog = ListBuffer[String]() // a mutable list (used for efficient concat)
+  private val threadStates = Map[Int, ThreadState]()
+
+  /**
+   * Runs a set of operations in parallel as per the schedule.
+   * Each operation may consist of many primitive operations like reads or writes
+   * to shared data structure each of which should be executed using the function `exec`.
+   * @timeout in milliseconds
+   * @return true - all threads completed on time,  false -some tests timed out.
+   */
+  def runInParallel(timeout: Long, ops: List[() => Any]): Result = {
+    numThreads = ops.length
+    val threadRes = Array.fill(numThreads) { None: Any }
+    var exception: Option[Except] = None
+    val syncObject = new Object()
+    var completed = new AtomicInteger(0)
+    // create threads
+    val threads = ops.zipWithIndex.map {
+      case (op, i) =>
+        new Thread(new Runnable() {
+          def run(): Unit = {
+            val fakeId = i + 1
+            setThreadId(fakeId)
+            try {
+              updateThreadState(Start)
+              val res = op()
+              updateThreadState(End)
+              threadRes(i) = res
+              // notify the master thread if all threads have completed
+              if (completed.incrementAndGet() == ops.length) {
+                syncObject.synchronized { syncObject.notifyAll() }
+              }
+            } catch {
+              case e: Throwable if exception != None => // do nothing here and silently fail
+              case e: Throwable =>
+                log(s"throw ${e.toString}")
+                exception = Some(Except(s"Thread $fakeId crashed on the following schedule: \n" + opLog.mkString("\n"),
+                    e.getStackTrace))
+                syncObject.synchronized { syncObject.notifyAll() }
+              //println(s"$fakeId: ${e.toString}")
+              //Runtime.getRuntime().halt(0) //exit the JVM and all running threads (no other way to kill other threads)
+            }
+          }
+        })
+    }
+    // start all threads
+    threads.foreach(_.start())
+    // wait for all threads to complete, or for an exception to be thrown, or for the time out to expire
+    var remTime = timeout
+    syncObject.synchronized {
+      timed { if(completed.get() != ops.length) syncObject.wait(timeout) } { time => remTime -= time }
+    }
+    if (exception.isDefined) {
+      exception.get
+    } else if (remTime <= 1) { // timeout ? using 1 instead of zero to allow for some errors
+      Timeout(opLog.mkString("\n"))
+    } else {
+      // every thing executed normally
+      RetVal(threadRes.toList)
+    }
+  }
+
+  // Updates the state of the current thread
+  def updateThreadState(state: ThreadState): Unit = {
+    val tid = threadId
+    synchronized {
+      threadStates(tid) = state
+    }
+    state match {
+      case Sync(lockToAquire, locks) =>
+        if (locks.indexOf(lockToAquire) < 0) waitForTurn else {
+          // Re-aqcuiring the same lock
+          updateThreadState(Running(lockToAquire +: locks))
+        }
+      case Start      => waitStart()
+      case End        => removeFromSchedule(tid)
+      case Running(_) =>
+      case _          => waitForTurn // Wait, SyncUnique, VariableReadWrite
+    }
+  }
+
+  def waitStart(): Unit = {
+    //while (threadStates.size < numThreads) {
+    //Thread.sleep(1)
+    //}
+    synchronized {
+      if (threadStates.size < numThreads) {
+        wait()
+      } else {
+        notifyAll()
+      }
+    }
+  }
+
+  def threadLocks = {
+    synchronized {
+      threadStates(threadId).locks
+    }
+  }
+
+  def threadState = {
+    synchronized {
+      threadStates(threadId)
+    }
+  }
+
+  def mapOtherStates(f: ThreadState => ThreadState) = {
+    val exception = threadId
+    synchronized {
+      for (k <- threadStates.keys if k != exception) {
+        threadStates(k) = f(threadStates(k))
+      }
+    }
+  }
+
+  def log(str: String) = {
+    if((realToFakeThreadId contains Thread.currentThread().getId())) {
+      val space = (" " * ((threadId - 1) * 2))
+      val s = space + threadId + ":" + "\n".r.replaceAllIn(str, "\n" + space + "  ")
+      opLog += s
+    }
+  }
+
+  /**
+   * Executes a read or write operation to a global data structure as per the given schedule
+   * @param msg a message corresponding to the operation that will be logged
+   */
+  def exec[T](primop: => T)(msg: => String, postMsg: => Option[T => String] = None): T = {
+    if(! (realToFakeThreadId contains Thread.currentThread().getId())) {
+      primop
+    } else {
+      updateThreadState(VariableReadWrite(threadLocks))
+      val m = msg
+      if(m != "") log(m)
+      if (opLog.size > maxOps)
+        throw new Exception(s"Total number of reads/writes performed by threads exceed $maxOps. A possible deadlock!")
+      val res = primop
+      postMsg match {
+        case Some(m) => log(m(res))
+        case None =>
+      }
+      res
+    }
+  }
+
+  private def setThreadId(fakeId: Int) = synchronized {
+    realToFakeThreadId(Thread.currentThread.getId) = fakeId
+  }
+
+  def threadId =
+    try {
+      realToFakeThreadId(Thread.currentThread().getId())
+    } catch {
+    case e: NoSuchElementException =>
+      throw new Exception("You are accessing shared variables in the constructor. This is not allowed. The variables are already initialized!")
+    }
+
+  private def isTurn(tid: Int) = synchronized {
+    (!schedule.isEmpty && schedule.head != tid)
+  }
+
+  def canProceed(): Boolean = {
+    val tid = threadId
+    canContinue match {
+      case Some((i, state)) if i == tid =>
+        //println(s"$tid: Runs ! Was in state $state")
+        canContinue = None
+        state match {
+          case Sync(lockToAquire, locks) => updateThreadState(Running(lockToAquire +: locks))
+          case SyncUnique(lockToAquire, locks) =>
+            mapOtherStates {
+              _ match {
+                case SyncUnique(lockToAquire2, locks2) if lockToAquire2 == lockToAquire => Wait(lockToAquire2, locks2)
+                case e => e
+              }
+            }
+            updateThreadState(Running(lockToAquire +: locks))
+          case VariableReadWrite(locks) => updateThreadState(Running(locks))
+        }
+        true
+      case Some((i, state)) =>
+        //println(s"$tid: not my turn but $i !")
+        false
+      case None =>
+        false
+    }
+  }
+
+  var threadPreference = 0 // In the case the schedule is over, which thread should have the preference to execute.
+
+  /** returns true if the thread can continue to execute, and false otherwise */
+  def decide(): Option[(Int, ThreadState)] = {
+    if (!threadStates.isEmpty) { // The last thread who enters the decision loop takes the decision.
+      //println(s"$threadId: I'm taking a decision")
+      if (threadStates.values.forall { case e: Wait => true case _ => false }) {
+        val waiting = threadStates.keys.map(_.toString).mkString(", ")
+        val s = if (threadStates.size > 1) "s" else ""
+        val are = if (threadStates.size > 1) "are" else "is"
+        throw new Exception(s"Deadlock: Thread$s $waiting $are waiting but all others have ended and cannot notify them.")
+      } else {
+        // Threads can be in Wait, Sync, SyncUnique, and VariableReadWrite mode.
+        // Let's determine which ones can continue.
+        val notFree = threadStates.collect { case (id, state) => state.locks }.flatten.toSet
+        val threadsNotBlocked = threadStates.toSeq.filter {
+          case (id, v: VariableReadWrite)         => true
+          case (id, v: CanContinueIfAcquiresLock) => !notFree(v.lockToAquire) || (v.locks contains v.lockToAquire)
+          case _                                  => false
+        }
+        if (threadsNotBlocked.isEmpty) {
+          val waiting = threadStates.keys.map(_.toString).mkString(", ")
+          val s = if (threadStates.size > 1) "s" else ""
+          val are = if (threadStates.size > 1) "are" else "is"
+          val whoHasLock = threadStates.toSeq.flatMap { case (id, state) => state.locks.map(lock => (lock, id)) }.toMap
+          val reason = threadStates.collect {
+            case (id, state: CanContinueIfAcquiresLock) if !notFree(state.lockToAquire) =>
+              s"Thread $id is waiting on lock ${state.lockToAquire} held by thread ${whoHasLock(state.lockToAquire)}"
+          }.mkString("\n")
+          throw new Exception(s"Deadlock: Thread$s $waiting are interlocked. Indeed:\n$reason")
+        } else if (threadsNotBlocked.size == 1) { // Do not consume the schedule if only one thread can execute.
+          Some(threadsNotBlocked(0))
+        } else {
+          val next = schedule.indexWhere(t => threadsNotBlocked.exists { case (id, state) => id == t })
+          if (next != -1) {
+            //println(s"$threadId: schedule is $schedule, next chosen is ${schedule(next)}")
+            val chosenOne = schedule(next) // TODO: Make schedule a mutable list.
+            schedule = schedule.take(next) ++ schedule.drop(next + 1)
+            Some((chosenOne, threadStates(chosenOne)))
+          } else {
+            threadPreference = (threadPreference + 1) % threadsNotBlocked.size
+            val chosenOne = threadsNotBlocked(threadPreference) // Maybe another strategy
+            Some(chosenOne)
+            //threadsNotBlocked.indexOf(threadId) >= 0
+            /*
+            val tnb = threadsNotBlocked.map(_._1).mkString(",")
+            val s = if (schedule.isEmpty) "empty" else schedule.mkString(",")
+            val only = if (schedule.isEmpty) "" else " only"
+            throw new Exception(s"The schedule is $s but$only threads ${tnb} can continue")*/
+          }
+        }
+      }
+    } else canContinue
+  }
+
+  /**
+   * This will be called before a schedulable operation begins.
+   * This should not use synchronized
+   */
+  var numThreadsWaiting = new AtomicInteger(0)
+  //var waitingForDecision = Map[Int, Option[Int]]() // Mapping from thread ids to a number indicating who is going to make the choice.
+  var canContinue: Option[(Int, ThreadState)] = None // The result of the decision thread Id of the thread authorized to continue.
+  private def waitForTurn = {
+    synchronized {
+      if (numThreadsWaiting.incrementAndGet() == threadStates.size) {
+        canContinue = decide()
+        notifyAll()
+      }
+      //waitingForDecision(threadId) = Some(numThreadsWaiting)
+      //println(s"$threadId Entering waiting with ticket number $numThreadsWaiting/${waitingForDecision.size}")
+      while (!canProceed()) wait()
+    }
+    numThreadsWaiting.decrementAndGet()
+  }
+
+  /**
+   * To be invoked when a thread is about to complete
+   */
+  private def removeFromSchedule(fakeid: Int) = synchronized {
+    //println(s"$fakeid: I'm taking a decision because I finished")
+    schedule = schedule.filterNot(_ == fakeid)
+    threadStates -= fakeid
+    if (numThreadsWaiting.get() == threadStates.size) {
+      canContinue = decide()
+      notifyAll()
+    }
+  }
+
+  def getOperationLog() = opLog
+}
diff --git a/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/Stats.scala b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/Stats.scala
new file mode 100644
index 0000000..bc1241c
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/Stats.scala
@@ -0,0 +1,23 @@
+package m14
+package instrumentation
+
+import java.lang.management._
+
+/**
+ * A collection of methods that can be used to collect run-time statistics about Leon programs.
+ * This is mostly used to test the resources properties of Leon programs
+ */
+object Stats {
+  def timed[T](code: => T)(cont: Long => Unit): T = {
+    var t1 = System.currentTimeMillis()
+    val r = code
+    cont((System.currentTimeMillis() - t1))
+    r
+  }
+
+  def withTime[T](code: => T): (T, Long) = {
+    var t1 = System.currentTimeMillis()
+    val r = code
+    (r, (System.currentTimeMillis() - t1))
+  }
+}
diff --git a/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/TestHelper.scala b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/TestHelper.scala
new file mode 100644
index 0000000..faa3505
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/TestHelper.scala
@@ -0,0 +1,125 @@
+package m14
+package instrumentation
+
+import scala.util.Random
+import scala.collection.mutable.{Map => MutableMap}
+
+import Stats._
+
+object TestHelper {
+  val noOfSchedules = 10000 // set this to 100k during deployment
+  val readWritesPerThread = 20 // maximum number of read/writes possible in one thread
+  val contextSwitchBound = 10
+  val testTimeout = 240 // the total time out for a test in seconds
+  val schedTimeout = 15 // the total time out for execution of a schedule in secs
+
+  // Helpers
+  /*def testManySchedules(op1: => Any): Unit = testManySchedules(List(() => op1))
+  def testManySchedules(op1: => Any, op2: => Any): Unit = testManySchedules(List(() => op1, () => op2))
+  def testManySchedules(op1: => Any, op2: => Any, op3: => Any): Unit = testManySchedules(List(() => op1, () => op2, () => op3))
+  def testManySchedules(op1: => Any, op2: => Any, op3: => Any, op4: => Any): Unit = testManySchedules(List(() => op1, () => op2, () => op3, () => op4))*/
+
+  def testSequential[T](ops: Scheduler => Any)(assertions: T => (Boolean, String)) =
+    testManySchedules(1,
+      (sched: Scheduler) => {
+        (List(() => ops(sched)),
+         (res: List[Any]) => assertions(res.head.asInstanceOf[T]))
+      })
+
+  /**
+   * @numThreads number of threads
+   * @ops operations to be executed, one per thread
+   * @assertion as condition that will executed after all threads have completed (without exceptions)
+   * 					 the arguments are the results of the threads
+   */
+  def testManySchedules(numThreads: Int,
+      ops: Scheduler =>
+        (List[() => Any], // Threads
+         List[Any] => (Boolean, String)) // Assertion
+      ) = {
+    var timeout = testTimeout * 1000L
+    val threadIds = (1 to numThreads)
+    //(1 to scheduleLength).flatMap(_ => threadIds).toList.permutations.take(noOfSchedules).foreach {
+    val schedules = (new ScheduleGenerator(numThreads)).schedules()
+    var schedsExplored = 0
+    schedules.takeWhile(_ => schedsExplored <= noOfSchedules && timeout > 0).foreach {
+      //case _ if timeout <= 0 => // break
+      case schedule =>
+        schedsExplored += 1
+        val schedr = new Scheduler(schedule)
+        //println("Exploring Sched: "+schedule)
+        val (threadOps, assertion) = ops(schedr)
+        if (threadOps.size != numThreads)
+          throw new IllegalStateException(s"Number of threads: $numThreads, do not match operations of threads: $threadOps")
+        timed { schedr.runInParallel(schedTimeout * 1000, threadOps) } { t => timeout -= t } match {
+          case Timeout(msg) =>
+            throw new java.lang.AssertionError("assertion failed\n"+"The schedule took too long to complete. A possible deadlock! \n"+msg)
+          case Except(msg, stkTrace) =>
+            val traceStr = "Thread Stack trace: \n"+stkTrace.map(" at "+_.toString).mkString("\n")
+            throw new java.lang.AssertionError("assertion failed\n"+msg+"\n"+traceStr)
+          case RetVal(threadRes) =>
+            // check the assertion
+            val (success, custom_msg) = assertion(threadRes)
+            if (!success) {
+              val msg = "The following schedule resulted in wrong results: \n" + custom_msg + "\n" + schedr.getOperationLog().mkString("\n")
+              throw new java.lang.AssertionError("Assertion failed: "+msg)
+            }
+        }
+    }
+    if (timeout <= 0) {
+      throw new java.lang.AssertionError("Test took too long to complete! Cannot check all schedules as your code is too slow!")
+    }
+  }
+
+  /**
+   * A schedule generator that is based on the context bound
+   */
+  class ScheduleGenerator(numThreads: Int) {
+    val scheduleLength = readWritesPerThread * numThreads
+    val rands = (1 to scheduleLength).map(i => new Random(0xcafe * i)) // random numbers for choosing a thread at each position
+    def schedules(): LazyList[List[Int]] = {
+      var contextSwitches = 0
+      var contexts = List[Int]() // a stack of thread ids in the order of context-switches
+      val remainingOps = MutableMap[Int, Int]()
+      remainingOps ++= (1 to numThreads).map(i => (i, readWritesPerThread)) // num ops remaining in each thread
+      val liveThreads = (1 to numThreads).toSeq.toBuffer
+
+      /**
+       * Updates remainingOps and liveThreads once a thread is chosen for a position in the schedule
+       */
+      def updateState(tid: Int): Unit = {
+        val remOps = remainingOps(tid)
+        if (remOps == 0) {
+          liveThreads -= tid
+        } else {
+          remainingOps += (tid -> (remOps - 1))
+        }
+      }
+      val schedule = rands.foldLeft(List[Int]()) {
+        case (acc, r) if contextSwitches < contextSwitchBound =>
+          val tid = liveThreads(r.nextInt(liveThreads.size))
+          contexts match {
+            case prev :: tail if prev != tid => // we have a new context switch here
+              contexts +:= tid
+              contextSwitches += 1
+            case prev :: tail =>
+            case _ => // init case
+              contexts +:= tid
+          }
+          updateState(tid)
+          acc :+ tid
+        case (acc, _) => // here context-bound has been reached so complete the schedule without any more context switches
+          if (!contexts.isEmpty) {
+            contexts = contexts.dropWhile(remainingOps(_) == 0)
+          }
+          val tid = contexts match {
+            case top :: tail => top
+            case _ => liveThreads(0)  // here, there has to be threads that have not even started
+          }
+          updateState(tid)
+          acc :+ tid
+      }
+      schedule #:: schedules()
+    }
+  }
+}
diff --git a/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/TestUtils.scala b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/TestUtils.scala
new file mode 100644
index 0000000..f980f99
--- /dev/null
+++ b/previous-exams/2021-midterm/m14/src/test/scala/m14/instrumentation/TestUtils.scala
@@ -0,0 +1,20 @@
+package m14
+package instrumentation
+
+import scala.concurrent._
+import scala.concurrent.duration._
+import scala.concurrent.ExecutionContext.Implicits.global
+
+object TestUtils {
+  def failsOrTimesOut[T](action: => T): Boolean = {
+    val asyncAction = Future {
+      action
+    }
+    try {
+      Await.result(asyncAction, 2000.millisecond)
+    } catch {
+      case _: Throwable => return true
+    }
+    return false
+  }
+}
diff --git a/previous-exams/2021-midterm/m15.md b/previous-exams/2021-midterm/m15.md
new file mode 100644
index 0000000..781e05a
--- /dev/null
+++ b/previous-exams/2021-midterm/m15.md
@@ -0,0 +1,42 @@
+Use the following commands to make a fresh clone of your repository:
+
+```
+git clone -b m15 git@gitlab.epfl.ch:lamp/student-repositories-s21/cs206-GASPAR.git m15
+```
+
+## Useful links
+
+  * [A guide to the Scala parallel collections](https://docs.scala-lang.org/overviews/parallel-collections/overview.html)
+  * [The API documentation of the Scala parallel collections](https://www.javadoc.io/doc/org.scala-lang.modules/scala-parallel-collections_2.13/latest/scala/collection/index.html)
+  * [The API documentation of the Scala standard library](https://www.scala-lang.org/files/archive/api/2.13.4)
+  * [The API documentation of the Java standard library](https://docs.oracle.com/en/java/javase/15/docs/api/index.html)
+
+**If you have issues with the IDE, try [reimporting the
+build](https://gitlab.epfl.ch/lamp/cs206/-/blob/master/labs/example-lab.md#ide-features-like-type-on-hover-or-go-to-definition-do-not-work),
+if you still have problems, use `compile` in sbt instead.**
+
+## Exercise
+
+In this question, you will implement a simple thread pool executor.
+Thread pool executors provide a way to execute tasks in parallel using one of several pooled threads.
+Using a pool of threads provides improved performance compared to creating a new thread for every operation since threads in the pool are reused throughout the executor's lifetime.
+
+Thread pool executors are one of the core primitive used to implement parallel programs. For example, they are the underlying mechanism used in the implementation of `Future`-s.
+
+Your task is to complete the implementation of the `ThreadPoolExecutor` class. This class' constructor takes the number of threads of the pool as argument and exposes two life-cycle methods (`start` and `shutdown`), and an `execute` method to run tasks on the thread pool. The `execute` method takes as argument `Unit => Unit` functions. These functions can be constructed anonymously using the following syntax: `val func = (x: Unit) => println("hello")`. Furthermore, given a `func` function of type `Unit => Unit`, one can invoke that function using `func(())`.
+For the purpose of this exercise, you can assume that the tasks submitted to the thread pool via the `execute` method do not throw exceptions.
+
+The thread pool implementation uses two additional classes:
+- `BlockingQueue`, used by the `ThreadPoolExecutor` to store pending tasks,
+- `Worker`-s, which each run in a separate thread, consume tasks from the queue and execute those tasks.
+
+The `BlockingQueue` implements two methods:
+- `put` to insert an element in the queue
+- `take` to retrieve and remove an element from the queue, in a first in first out order.
+
+The `put` operation always succeeds and is non-blocking (the queue is unbounded).
+The `take` operation is a potentially blocking operation that waits for new elements when called on an empty queue.
+
+Given that `Worker`-s run on separate threads, the `take` operation must be thread-safe. Furthermore, since the thread pool executor could also be used from multiple threads, the `put` operation should also be thread-safe.
+Your implementation should use a single lock to achieve this thread safety, specifically using the `[wait](http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait())`/`[notify](http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notify())`/`[notifyAll](http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notifyAll())`/`synchronized` primitives.
+Remember that `wait`, `notify` and `notifyAll` should only be invoked inside a synchronized block.
diff --git a/previous-exams/2021-midterm/m15/.gitignore b/previous-exams/2021-midterm/m15/.gitignore
new file mode 100644
index 0000000..40937dc
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/.gitignore
@@ -0,0 +1,22 @@
+# General
+*.DS_Store
+*.swp
+*~
+
+# Dotty
+*.class
+*.tasty
+*.hasTasty
+
+# sbt
+target/
+
+# IDE
+.bsp
+.bloop
+.metals
+.vscode
+
+# datasets
+stackoverflow-grading.csv
+wikipedia-grading.dat
diff --git a/previous-exams/2021-midterm/m15/assignment.sbt b/previous-exams/2021-midterm/m15/assignment.sbt
new file mode 100644
index 0000000..da7eb3c
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/assignment.sbt
@@ -0,0 +1,2 @@
+// Student tasks (i.e. submit, packageSubmission)
+enablePlugins(StudentTasks)
diff --git a/previous-exams/2021-midterm/m15/build.sbt b/previous-exams/2021-midterm/m15/build.sbt
new file mode 100644
index 0000000..3b7539d
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/build.sbt
@@ -0,0 +1,12 @@
+course := "midterm"
+assignment := "m15"
+scalaVersion := "3.0.0-RC1"
+scalacOptions ++= Seq("-language:implicitConversions", "-deprecation")
+
+libraryDependencies += "org.scalameta" %% "munit" % "0.7.22"
+
+val MUnitFramework = new TestFramework("munit.Framework")
+testFrameworks += MUnitFramework
+// Decode Scala names
+testOptions += Tests.Argument(MUnitFramework, "-s")
+testSuite := "m15.M15Suite"
diff --git a/previous-exams/2021-midterm/m15/grading-tests.jar b/previous-exams/2021-midterm/m15/grading-tests.jar
new file mode 100644
index 0000000000000000000000000000000000000000..3243be21fe08c74418f052ef9b4f521129bd62f0
GIT binary patch
literal 126110
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
N9rh=r@iGKV<X_lpOws@V

literal 0
HcmV?d00001

diff --git a/previous-exams/2021-midterm/m15/project/FilteringReporterPlugin.scala b/previous-exams/2021-midterm/m15/project/FilteringReporterPlugin.scala
new file mode 100644
index 0000000..2e4fd9a
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/project/FilteringReporterPlugin.scala
@@ -0,0 +1,31 @@
+package sbt // To access the private[sbt] compilerReporter key
+package filteringReporterPlugin
+
+import Keys._
+import ch.epfl.lamp._
+
+object FilteringReporterPlugin extends AutoPlugin {
+  override lazy val projectSettings = Seq(
+    // Turn off warning coming from scalameter that we cannot fix without changing scalameter
+    compilerReporter in (Compile, compile) ~= { reporter => new FilteringReporter(reporter) }
+  )
+}
+
+class FilteringReporter(reporter: xsbti.Reporter) extends xsbti.Reporter {
+
+  def reset(): Unit = reporter.reset()
+  def hasErrors: Boolean = reporter.hasErrors
+  def hasWarnings: Boolean = reporter.hasWarnings
+  def printSummary(): Unit = reporter.printSummary()
+  def problems: Array[xsbti.Problem] = reporter.problems
+
+  def log(problem: xsbti.Problem): Unit = {
+    if (!problem.message.contains("An existential type that came from a Scala-2 classfile cannot be"))
+      reporter.log(problem)
+  }
+
+  def comment(pos: xsbti.Position, msg: String): Unit =
+    reporter.comment(pos, msg)
+
+  override def toString = s"CollectingReporter($reporter)"
+}
diff --git a/previous-exams/2021-midterm/m15/project/MOOCSettings.scala b/previous-exams/2021-midterm/m15/project/MOOCSettings.scala
new file mode 100644
index 0000000..1c40443
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/project/MOOCSettings.scala
@@ -0,0 +1,49 @@
+package ch.epfl.lamp
+
+import sbt._
+import sbt.Keys._
+
+/**
+ * Coursera uses two versions of each assignment. They both have the same assignment key and part id but have
+ * different item ids.
+ *
+ * @param key Assignment key
+ * @param partId Assignment partId
+ * @param itemId Item id of the non premium version
+ * @param premiumItemId Item id of the premium version (`None` if the assignment is optional)
+ */
+case class CourseraId(key: String, partId: String, itemId: String, premiumItemId: Option[String])
+
+/**
+  * Settings shared by all assignments, reused in various tasks.
+  */
+object MOOCSettings extends AutoPlugin {
+
+  override def requires = super.requires && filteringReporterPlugin.FilteringReporterPlugin
+
+  object autoImport {
+    val course = SettingKey[String]("course")
+    val assignment = SettingKey[String]("assignment")
+    val options = SettingKey[Map[String, Map[String, String]]]("options")
+    val courseraId = settingKey[CourseraId]("Coursera-specific information identifying the assignment")
+    val testSuite = settingKey[String]("Fully qualified name of the test suite of this assignment")
+      .withRank(KeyRanks.Invisible)
+    // Convenient alias
+    type CourseraId = ch.epfl.lamp.CourseraId
+    val CourseraId = ch.epfl.lamp.CourseraId
+  }
+
+  import autoImport._
+
+  override val globalSettings: Seq[Def.Setting[_]] = Seq(
+    // supershell is verbose, buggy and useless.
+    useSuperShell := false
+  )
+
+  override val projectSettings: Seq[Def.Setting[_]] = Seq(
+    parallelExecution in Test := false,
+    // Report test result after each test instead of waiting for every test to finish
+    logBuffered in Test := false,
+    name := s"${course.value}-${assignment.value}"
+  )
+}
diff --git a/previous-exams/2021-midterm/m15/project/StudentTasks.scala b/previous-exams/2021-midterm/m15/project/StudentTasks.scala
new file mode 100644
index 0000000..c4669af
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/project/StudentTasks.scala
@@ -0,0 +1,303 @@
+package ch.epfl.lamp
+
+import sbt._
+import Keys._
+
+// import scalaj.http._
+import java.io.{File, FileInputStream, IOException}
+import org.apache.commons.codec.binary.Base64
+// import play.api.libs.json.{Json, JsObject, JsPath}
+import scala.util.{Failure, Success, Try}
+
+/**
+  * Provides tasks for submitting the assignment
+  */
+object StudentTasks extends AutoPlugin {
+
+  override def requires = super.requires && MOOCSettings
+
+  object autoImport {
+    val packageSourcesOnly = TaskKey[File]("packageSourcesOnly", "Package the sources of the project")
+    val packageBinWithoutResources = TaskKey[File]("packageBinWithoutResources", "Like packageBin, but without the resources")
+    val packageSubmissionZip = TaskKey[File]("packageSubmissionZip")
+    val packageSubmission = inputKey[Unit]("package solution as an archive file")
+
+    lazy val Grading = config("grading") extend(Runtime)
+  }
+
+
+  import autoImport._
+  import MOOCSettings.autoImport._
+
+  override lazy val projectSettings = Seq(
+    packageSubmissionSetting,
+    fork := true,
+    connectInput in run := true,
+    outputStrategy := Some(StdoutOutput),
+  ) ++
+    packageSubmissionZipSettings ++
+    inConfig(Grading)(Defaults.testSettings ++ Seq(
+      unmanagedJars += file("grading-tests.jar"),
+
+      definedTests := (definedTests in Test).value,
+      internalDependencyClasspath := (internalDependencyClasspath in Test).value
+    ))
+
+
+  /** **********************************************************
+    * SUBMITTING A SOLUTION TO COURSERA
+    */
+
+  val packageSubmissionZipSettings = Seq(
+    packageSubmissionZip := {
+      val submission = crossTarget.value / "submission.zip"
+      val sources = (packageSourcesOnly in Compile).value
+      val binaries = (packageBinWithoutResources in Compile).value
+      IO.zip(Seq(sources -> "sources.zip", binaries -> "binaries.jar"), submission, None)
+      submission
+    },
+    artifactClassifier in packageSourcesOnly := Some("sources"),
+    artifact in (Compile, packageBinWithoutResources) ~= (art => art.withName(art.name + "-without-resources"))
+  ) ++
+  inConfig(Compile)(
+    Defaults.packageTaskSettings(packageSourcesOnly, Defaults.sourceMappings) ++
+    Defaults.packageTaskSettings(packageBinWithoutResources, Def.task {
+      val relativePaths =
+        (unmanagedResources in Compile).value.flatMap(Path.relativeTo((unmanagedResourceDirectories in Compile).value)(_))
+      (mappings in (Compile, packageBin)).value.filterNot { case (_, path) => relativePaths.contains(path) }
+    })
+  )
+
+  val maxSubmitFileSize = {
+    val mb = 1024 * 1024
+    10 * mb
+  }
+
+  /** Check that the jar exists, isn't empty, isn't crazy big, and can be read
+    * If so, encode jar as base64 so we can send it to Coursera
+    */
+  def prepareJar(jar: File, s: TaskStreams): String = {
+    val errPrefix = "Error submitting assignment jar: "
+    val fileLength = jar.length()
+    if (!jar.exists()) {
+      s.log.error(errPrefix + "jar archive does not exist\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength == 0L) {
+      s.log.error(errPrefix + "jar archive is empty\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength > maxSubmitFileSize) {
+      s.log.error(errPrefix + "jar archive is too big. Allowed size: " +
+        maxSubmitFileSize + " bytes, found " + fileLength + " bytes.\n" +
+        jar.getAbsolutePath)
+      failSubmit()
+    } else {
+      val bytes = new Array[Byte](fileLength.toInt)
+      val sizeRead = try {
+        val is = new FileInputStream(jar)
+        val read = is.read(bytes)
+        is.close()
+        read
+      } catch {
+        case ex: IOException =>
+          s.log.error(errPrefix + "failed to read sources jar archive\n" + ex.toString)
+          failSubmit()
+      }
+      if (sizeRead != bytes.length) {
+        s.log.error(errPrefix + "failed to read the sources jar archive, size read: " + sizeRead)
+        failSubmit()
+      } else encodeBase64(bytes)
+    }
+  }
+
+  /** Task to package solution to a given file path */
+  lazy val packageSubmissionSetting = packageSubmission := {
+    val args: Seq[String] = Def.spaceDelimited("[path]").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val base64Jar = prepareJar(jar, s)
+
+    val path = args.headOption.getOrElse((baseDirectory.value / "submission.jar").absolutePath)
+    scala.tools.nsc.io.File(path).writeAll(base64Jar)
+  }
+
+/*
+  /** Task to submit a solution to coursera */
+  val submit = inputKey[Unit]("submit solution to Coursera")
+  lazy val submitSetting = submit := {
+    // Fail if scalafix linting does not pass.
+    scalafixLinting.value
+
+    val args: Seq[String] = Def.spaceDelimited("<arg>").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val assignmentDetails =
+      courseraId.?.value.getOrElse(throw new MessageOnlyException("This assignment can not be submitted to Coursera because the `courseraId` setting is undefined"))
+    val assignmentKey = assignmentDetails.key
+    val courseName =
+      course.value match {
+        case "capstone" => "scala-capstone"
+        case "bigdata"  => "scala-spark-big-data"
+        case other      => other
+      }
+
+    val partId = assignmentDetails.partId
+    val itemId = assignmentDetails.itemId
+    val premiumItemId = assignmentDetails.premiumItemId
+
+    val (email, secret) = args match {
+      case email :: secret :: Nil =>
+        (email, secret)
+      case _ =>
+        val inputErr =
+          s"""|Invalid input to `submit`. The required syntax for `submit` is:
+              |submit <email-address> <submit-token>
+              |
+              |The submit token is NOT YOUR LOGIN PASSWORD.
+              |It can be obtained from the assignment page:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId
+              |${
+                premiumItemId.fold("") { id =>
+                  s"""or (for premium learners):
+                     |https://www.coursera.org/learn/$courseName/programming/$id
+                   """.stripMargin
+                }
+              }
+          """.stripMargin
+        s.log.error(inputErr)
+        failSubmit()
+    }
+
+    val base64Jar = prepareJar(jar, s)
+    val json =
+      s"""|{
+          |   "assignmentKey":"$assignmentKey",
+          |   "submitterEmail":"$email",
+          |   "secret":"$secret",
+          |   "parts":{
+          |      "$partId":{
+          |         "output":"$base64Jar"
+          |      }
+          |   }
+          |}""".stripMargin
+
+    def postSubmission[T](data: String): Try[HttpResponse[String]] = {
+      val http = Http("https://www.coursera.org/api/onDemandProgrammingScriptSubmissions.v1")
+      val hs = List(
+        ("Cache-Control", "no-cache"),
+        ("Content-Type", "application/json")
+      )
+      s.log.info("Connecting to Coursera...")
+      val response = Try(http.postData(data)
+                         .headers(hs)
+                         .option(HttpOptions.connTimeout(10000)) // scalaj default timeout is only 100ms, changing that to 10s
+                         .asString) // kick off HTTP POST
+      response
+    }
+
+    val connectMsg =
+      s"""|Attempting to submit "${assignment.value}" assignment in "$courseName" course
+          |Using:
+          |- email: $email
+          |- submit token: $secret""".stripMargin
+    s.log.info(connectMsg)
+
+    def reportCourseraResponse(response: HttpResponse[String]): Unit = {
+      val code = response.code
+      val respBody = response.body
+
+       /* Sample JSON response from Coursera
+      {
+        "message": "Invalid email or token.",
+        "details": {
+          "learnerMessage": "Invalid email or token."
+        }
+      }
+      */
+
+      // Success, Coursera responds with 2xx HTTP status code
+      if (response.is2xx) {
+        val successfulSubmitMsg =
+          s"""|Successfully connected to Coursera. (Status $code)
+              |
+                |Assignment submitted successfully!
+              |
+                |You can see how you scored by going to:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId/
+              |${
+            premiumItemId.fold("") { id =>
+              s"""or (for premium learners):
+                 |https://www.coursera.org/learn/$courseName/programming/$id
+                       """.stripMargin
+            }
+          }
+              |and clicking on "My Submission".""".stripMargin
+        s.log.info(successfulSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 4xx HTTP status code (client-side failure)
+      else if (response.is4xx) {
+        val result = Try(Json.parse(respBody)).toOption
+        val learnerMsg = result match {
+          case Some(resp: JsObject) =>
+            (JsPath \ "details" \ "learnerMessage").read[String].reads(resp).get
+          case Some(x) => // shouldn't happen
+            "Could not parse Coursera's response:\n" + x
+          case None =>
+            "Could not parse Coursera's response:\n" + respBody
+        }
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |There was something wrong while attempting to submit.
+              |Coursera says:
+              |$learnerMsg (Status $code)""".stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 5xx HTTP status code (server-side failure)
+      else if (response.is5xx) {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera seems to be unavailable at the moment (Status $code)
+              |Check https://status.coursera.org/ and try again in a few minutes.
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera repsonds with an unexpected status code
+      else {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera replied with an unexpected code (Status $code)
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+    }
+
+    // kick it all off, actually make request
+    postSubmission(json) match {
+      case Success(resp) => reportCourseraResponse(resp)
+      case Failure(e) =>
+        val failedConnectMsg =
+          s"""|Connection to Coursera failed.
+              |There was something wrong while attempting to connect to Coursera.
+              |Check your internet connection.
+              |${e.toString}""".stripMargin
+        s.log.error(failedConnectMsg)
+    }
+
+   }
+*/
+
+  def failSubmit(): Nothing = {
+    sys.error("Submission failed")
+  }
+
+  /**
+    * *****************
+    * DEALING WITH JARS
+    */
+  def encodeBase64(bytes: Array[Byte]): String =
+    new String(Base64.encodeBase64(bytes))
+}
diff --git a/previous-exams/2021-midterm/m15/project/build.properties b/previous-exams/2021-midterm/m15/project/build.properties
new file mode 100644
index 0000000..0b2e09c
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/project/build.properties
@@ -0,0 +1 @@
+sbt.version=1.4.7
diff --git a/previous-exams/2021-midterm/m15/project/buildSettings.sbt b/previous-exams/2021-midterm/m15/project/buildSettings.sbt
new file mode 100644
index 0000000..8fac702
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/project/buildSettings.sbt
@@ -0,0 +1,5 @@
+// Used for Coursera submission (StudentPlugin)
+// libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.4.2"
+// libraryDependencies += "com.typesafe.play" %% "play-json" % "2.7.4"
+// Used for Base64 (StudentPlugin)
+libraryDependencies += "commons-codec" % "commons-codec" % "1.10"
diff --git a/previous-exams/2021-midterm/m15/project/plugins.sbt b/previous-exams/2021-midterm/m15/project/plugins.sbt
new file mode 100644
index 0000000..021c019
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/project/plugins.sbt
@@ -0,0 +1,2 @@
+// addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")
+addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.3")
diff --git a/previous-exams/2021-midterm/m15/src/main/scala/m15/AbstractBlockingQueue.scala b/previous-exams/2021-midterm/m15/src/main/scala/m15/AbstractBlockingQueue.scala
new file mode 100644
index 0000000..85a28b2
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/src/main/scala/m15/AbstractBlockingQueue.scala
@@ -0,0 +1,14 @@
+package m15
+
+abstract class AbstractBlockingQueue[T] extends Monitor {
+  private var underlying: List[T] = Nil
+
+  def getUnderlying(): List[T] =
+    underlying
+
+  def setUnderlying(newValue: List[T]): Unit =
+    underlying = newValue
+
+  def put(elem: T): Unit
+  def take(): T
+}
diff --git a/previous-exams/2021-midterm/m15/src/main/scala/m15/AbstractThreadPoolExecutor.scala b/previous-exams/2021-midterm/m15/src/main/scala/m15/AbstractThreadPoolExecutor.scala
new file mode 100644
index 0000000..5e663e8
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/src/main/scala/m15/AbstractThreadPoolExecutor.scala
@@ -0,0 +1,7 @@
+package m15
+
+abstract class AbstractThreadPoolExecutor {
+  def execute(task: Unit => Unit): Unit
+  def start(): Unit
+  def shutdown(): Unit
+}
diff --git a/previous-exams/2021-midterm/m15/src/main/scala/m15/M15.scala b/previous-exams/2021-midterm/m15/src/main/scala/m15/M15.scala
new file mode 100644
index 0000000..27bb83d
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/src/main/scala/m15/M15.scala
@@ -0,0 +1,79 @@
+package m15
+
+object M15 {
+  /** A thread pool that executes submitted task using one of several threads */
+  class ThreadPoolExecutor(taskQueue: BlockingQueue[Unit => Unit], poolSize: Int)
+      extends AbstractThreadPoolExecutor {
+
+    private class Worker extends Thread {
+      override def run(): Unit = {
+        try {
+          while (true) {
+
+            val task = taskQueue.take()
+            task(())
+          }
+        } catch {
+          case e: InterruptedException =>
+            // Nothing to do here, we are shutting down gracefully.
+        }
+      }
+    }
+    private val workers: List[Worker] = List.fill(poolSize)(new Worker())
+
+    /** Executes the given task, passed by name. */
+    def execute(task: Unit => Unit): Unit =
+
+      taskQueue.put(task)
+
+    /** Starts the thread pool. */
+    def start(): Unit =
+      workers.foreach(_.start())
+
+    /** Instantly shuts down all actively executing tasks using an interrupt. */
+    def shutdown(): Unit =
+      workers.foreach(_.interrupt())
+  }
+
+  /**
+   * A queue whose take operations blocks until the queue become non-empty.
+   * Elements must be retrived from this queue in a first in, first out order.
+   * All methods of this class are thread safe, that is, they can safely
+   * be used from multiple thread without any particular synchronization.
+   */
+  class BlockingQueue[T] extends AbstractBlockingQueue[T] {
+
+    // The state of this queue is stored in an underlying List[T] defined in
+    // the AbstractBlockingQueue class. Your implementation should access and
+    // update this list using the following setter and getter methods:
+    // - def getUnderlying(): List[T]
+    // - def setUnderlying(newValue: List[T]): Unit
+    // Using these methods is required for testing purposes.
+
+    /** Inserts the specified element into this queue (non-blocking) */
+    def put(elem: T): Unit =
+
+      this.synchronized {
+        val underlying = getUnderlying()
+        setUnderlying(elem :: underlying)
+        this.notifyAll()
+      }
+
+
+    /**
+     * Retrieves and removes the head of this queue, waiting if necessary
+     * until an element becomes available (blocking).
+     * This queue operates in a first in, first out order.
+     */
+    def take(): T =
+
+      this.synchronized {
+        while (getUnderlying().isEmpty)
+          this.wait()
+        val underlying = getUnderlying()
+        val last = underlying.last
+        setUnderlying(underlying.init)
+        last
+      }
+  }
+}
diff --git a/previous-exams/2021-midterm/m15/src/main/scala/m15/Monitor.scala b/previous-exams/2021-midterm/m15/src/main/scala/m15/Monitor.scala
new file mode 100644
index 0000000..b64e697
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/src/main/scala/m15/Monitor.scala
@@ -0,0 +1,23 @@
+package m15
+
+class Dummy
+
+trait Monitor {
+  implicit val dummy: Dummy = new Dummy
+
+  def wait()(implicit i: Dummy) = waitDefault()
+
+  def synchronized[T](e: => T)(implicit i: Dummy) = synchronizedDefault(e)
+
+  def notify()(implicit i: Dummy) = notifyDefault()
+
+  def notifyAll()(implicit i: Dummy) = notifyAllDefault()
+
+  private val lock = new AnyRef
+
+  // Can be overriden.
+  def waitDefault(): Unit = lock.wait()
+  def synchronizedDefault[T](toExecute: => T): T = lock.synchronized(toExecute)
+  def notifyDefault(): Unit = lock.notify()
+  def notifyAllDefault(): Unit = lock.notifyAll()
+}
diff --git a/previous-exams/2021-midterm/m15/src/test/scala/m15/M15Suite.scala b/previous-exams/2021-midterm/m15/src/test/scala/m15/M15Suite.scala
new file mode 100644
index 0000000..e0f2243
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/src/test/scala/m15/M15Suite.scala
@@ -0,0 +1,281 @@
+package m15
+
+import instrumentation.SchedulableBlockingQueue
+import instrumentation.TestHelper._
+import instrumentation.TestUtils._
+
+class M15Suite extends munit.FunSuite {
+  import M15._
+
+  test("ThreadPool should put jobs in the queue, Workers should execute jobs from the queue (10pts)") {
+    case class PutE(e: Unit => Unit) extends Exception
+    val nThreads = 3
+    var taken = false
+    class TestBlockingQueue extends BlockingQueue[Unit => Unit] {
+      override def put(e: Unit => Unit): Unit =
+        throw new PutE(e)
+
+      override def take(): Unit => Unit =
+        x => {
+          taken = true
+          Thread.sleep(10 * 1000)
+        }
+    }
+
+    val tpe = new ThreadPoolExecutor(new TestBlockingQueue, nThreads)
+    val unit2unit: Unit => Unit = x => ()
+    try {
+      tpe.execute(unit2unit)
+      assert(false, "ThreadPoolExecutor does not put jobs in the queue")
+    } catch {
+      case PutE(e) =>
+        assert(e == unit2unit)
+    }
+    tpe.start()
+    Thread.sleep(1000)
+    assert(taken, s"ThreadPoolExecutor workers do no execute jobs from the queue")
+    tpe.shutdown()
+  }
+
+  test("BlockingQueue should work in a sequential setting (1pts)") {
+    testSequential[(Int, Int, Int, Int)]{ sched =>
+      val queue = new SchedulableBlockingQueue[Int](sched)
+      queue.put(1)
+      queue.put(2)
+      queue.put(3)
+      queue.put(4)
+      (queue.take(),
+      queue.take(),
+      queue.take(),
+      queue.take())
+    }{ tuple =>
+      (tuple == (1, 2, 3, 4), s"Expected (1, 2, 3, 4) got $tuple")
+    }
+  }
+
+  test("BlockingQueue should work when Thread 1: 'put(1)', Thread 2: 'take' (3pts)") {
+    testManySchedules(2, sched => {
+      val queue = new SchedulableBlockingQueue[Int](sched)
+      (List(() => queue.put(1), () => queue.take()),
+       args => (args(1) == 1, s"Expected 1, got ${args(1)}"))
+    })
+  }
+
+  test("BlockingQueue should not be able to take from an empty queue (3pts)") {
+    testSequential[Boolean]{ sched =>
+      val queue = new SchedulableBlockingQueue[Int](sched);
+      queue.put(1)
+      queue.put(2)
+      queue.take()
+      queue.take()
+      failsOrTimesOut(queue.take())
+    }{ res =>
+      (res, "Was able to retrieve an element from an empty queue")
+    }
+  }
+
+  test("Should work when Thread 1: 'put(1)', Thread 2: 'put(2)', Thread 3: 'take', and a buffer of size 1") {
+    testManySchedules(3, sched => {
+      val prodCons = new SchedulableBlockingQueue[Int](sched)
+      (List(() => prodCons.put(1), () => prodCons.put(2), () => prodCons.take())
+      , args => {
+        val takeRes = args(2).asInstanceOf[Int]
+        val nocreation = (takeRes == 1 || takeRes == 2)
+        if (!nocreation)
+          (false, s"'take' should return either 1 or 2")
+        else (true, "")
+      })
+    })
+  }
+
+  // testing no duplication
+  test("Should work when Thread 1: 'put(1)', Thread 2: 'put(2)', Thread 3: 'take', Thread 4: 'take', and a buffer of size 3") {
+    testManySchedules(4, sched => {
+      val prodCons = new SchedulableBlockingQueue[Int](sched)
+      (List(() => prodCons.put(1), () => prodCons.put(2), () => prodCons.take(), () => prodCons.take())
+      , args => {
+        def m(): (Boolean, String) = {
+          val takeRes1 = args(2).asInstanceOf[Int]
+          val takeRes2 = args(3).asInstanceOf[Int]
+          val nocreation = (x: Int) => List(1, 2).contains(x)
+          if (!nocreation(takeRes1))
+            return (false, s"'Thread 3: take' returned $takeRes1 but should return a value in {1, 2, 3}")
+          if (!nocreation(takeRes2))
+            return (false, s"'Thread 4: take' returned $takeRes2 but should return a value in {1, 2, 3}")
+
+          val noduplication = takeRes1 != takeRes2
+          if (!noduplication)
+            (false, s"'Thread 3 and 4' returned the same value: $takeRes1")
+          else (true, "")
+        }
+        m()
+      })
+    })
+  }
+
+  // testing no duplication with 5 threads
+  test("Should work when Thread 1: 'put(1)', Thread 2: 'put(2)', Thread 3: 'put(3)', Thread 4: 'take', Thread 5: 'take', and a buffer of size 1") {
+    testManySchedules(5, sched => {
+      val prodCons = new SchedulableBlockingQueue[Int](sched)
+      (List(() => prodCons.put(1), () => prodCons.put(2), () => prodCons.put(3),
+        () => prodCons.take(), () => prodCons.take())
+      , args => {
+        def m(): (Boolean, String) = {
+          val takeRes1 = args(3).asInstanceOf[Int]
+          val takeRes2 = args(4).asInstanceOf[Int]
+          val nocreation = (x: Int) => List(1, 2, 3).contains(x)
+          if (!nocreation(takeRes1))
+            return (false, s"'Thread 4: take' returned $takeRes1 but should return a value in {1, 2, 3}")
+          if (!nocreation(takeRes2))
+            return (false, s"'Thread 5: take' returned $takeRes2 but should return a value in {1, 2, 3}")
+
+          val noduplication = takeRes1 != takeRes2
+          if (!noduplication)
+            return (false, s"'Thread 4 and 5' returned the same value: $takeRes1")
+          else (true, "")
+        }
+        m()
+      })
+    })
+  }
+
+  // testing fifo buffer size 1
+  test("Should work when Thread 1: 'put(1); put(2)', Thread 2: 'take', Thread 3: 'put(3)', Thread 4: 'put(4)', and a buffer of size 3") {
+    testManySchedules(4, sched => {
+      val prodCons = new SchedulableBlockingQueue[Int](sched)
+      (List(() => { prodCons.put(1); prodCons.put(2) }, () => prodCons.take(),
+        () => prodCons.put(3), () => prodCons.put(4))
+      , args => {
+        def m(): (Boolean, String) = {
+          val takeRes = args(1).asInstanceOf[Int]
+          // no creation
+          val nocreation = (x: Int) => List(1, 2, 3, 4).contains(x)
+          if (!nocreation(takeRes))
+            return (false, s"'Thread 2: take' returned $takeRes, but should return a value in {1, 2, 3, 4}")
+          // fifo (cannot have 2 without 1)
+          if (takeRes == 2)
+            (false, s"'Thread 2' returned 2 before returning 1")
+          else
+            (true, "")
+        }
+        m()
+      })
+    })
+  }
+
+  // testing fifo buffer size 5
+  test("Should work when Thread 1: 'put(1); put(2)', Thread 2: 'take', Thread 3: 'put(11)', Thread 4: 'put(10)', and a buffer of size 5") {
+    testManySchedules(4, sched => {
+      val prodCons = new SchedulableBlockingQueue[Int](sched)
+      (List(() => { prodCons.put(1); prodCons.put(2) }, () => prodCons.take(),
+        () => prodCons.put(11), () => prodCons.put(10))
+      , args => {
+        def m(): (Boolean, String) = {
+          val takeRes = args(1).asInstanceOf[Int]
+          // no creation
+          val nocreation = (x: Int) => List(1, 2, 10, 11).contains(x)
+          if (!nocreation(takeRes))
+            return (false, s"'Thread 2: take' returned $takeRes, but should return a value in {1, 2, 10, 11}")
+          // fifo (cannot have 2 without 1)
+          if (takeRes == 2)
+            (false, s"'Thread 2' returned 2 before returning 1")
+          else
+            (true, "")
+        }
+        m()
+      })
+    })
+  }
+
+  // testing fifo on more complicated case
+  test("Should work when Thread 1: 'put(1); put(3)', Thread 2: 'put(2)', Thread 3: 'put(4)', Thread 4: 'take', Thread 5: 'take', and a buffer of size 10") {
+    testManySchedules(5, sched => {
+      val prodCons = new SchedulableBlockingQueue[Int](sched)
+      (List(() => { prodCons.put(1); prodCons.put(3) }, () => prodCons.put(2),
+        () => prodCons.put(4), () => prodCons.take(), () => prodCons.take())
+      , args => {
+        def m(): (Boolean, String) = {
+          val takeRes1 = args(3).asInstanceOf[Int]
+          val takeRes2 = args(4).asInstanceOf[Int]
+          // no creation
+          val nocreation = (x: Int) => List(1, 2, 3, 4).contains(x)
+          if (!nocreation(takeRes1))
+            return (false, s"'Thread 4: take' returned $takeRes1 but should return a value in {1, 2, 3, 4}")
+          if (!nocreation(takeRes2))
+            return (false, s"'Thread 5: take' returned $takeRes2 but should return a value in {1, 2, 3, 4}")
+          // no duplication
+          if (takeRes1 == takeRes2)
+            return (false, s"'Thread 4 and 5' returned the same value: $takeRes1")
+          // fifo (cannot have 3 without 1)
+          val takes = List(takeRes1, takeRes2)
+          if (takes.contains(3) && !takes.contains(1))
+            (false, s"'Thread 4 or 5' returned 3 before returning 1")
+          else
+            (true, "")
+        }
+        m()
+      })
+    })
+  }
+
+  // combining put and take in one thread
+  test("Should work when Thread 1: 'put(21); put(22)', Thread 2: 'take', Thread 3: 'put(23); take', Thread 4: 'put(24); take', and a buffer of size 2") {
+    testManySchedules(4, sched => {
+      val prodCons = new SchedulableBlockingQueue[Int](sched)
+      (List(() => { prodCons.put(21); prodCons.put(22) }, () => prodCons.take(),
+        () => { prodCons.put(23); prodCons.take() }, () => { prodCons.put(24); prodCons.take() })
+      , args => {
+        def m(): (Boolean, String) = {
+          val takes = List(args(1).asInstanceOf[Int], args(2).asInstanceOf[Int], args(3).asInstanceOf[Int])
+          // no creation
+          val vals = List(21, 22, 23, 24)
+
+          var i = 0
+          while (i < takes.length) {
+            val x = takes(i)
+            if (!vals.contains(x))
+              return (false, s"'Thread $i: take' returned $x but should return a value in $vals")
+            i += 1
+          }
+
+          // no duplication
+          if (takes.distinct.size != takes.size)
+            return (false, s"Takes did not return unique values: $takes")
+          // fifo (cannot have 22 without 21)
+          if (takes.contains(22) && !takes.contains(21))
+            (false, s"`Takes returned 22 before returning 21")
+          else
+            (true, "")
+        }
+        m()
+      })
+    })
+  }
+
+  // completely hidden hard to crack test
+  test("[Black box test] Values should be taken in the order they are put") {
+    testManySchedules(4, sched => {
+      val prodCons = new SchedulableBlockingQueue[(Char, Int)](sched)
+      val n = 2
+      (List(
+        () => for (i <- 1 to n) { prodCons.put(('a', i)) },
+        () => for (i <- 1 to n) { prodCons.put(('b', i)) },
+        () => for (i <- 1 to n) { prodCons.put(('c', i)) },
+        () => {
+          import scala.collection.mutable
+          var counts = mutable.HashMap.empty[Char, Int]
+          counts('a') = 0
+          counts('b') = 0
+          counts('c') = 0
+          for (i <- 1 to (3 * n)) {
+            val (c, n) = prodCons.take()
+            counts(c) += 1
+            assert(counts(c) == n)
+          }
+        })
+      , _ =>
+        (true, "")
+      )
+    })
+  }
+}
diff --git a/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/MockedMonitor.scala b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/MockedMonitor.scala
new file mode 100644
index 0000000..c0591e3
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/MockedMonitor.scala
@@ -0,0 +1,73 @@
+package m15
+package instrumentation
+
+trait MockedMonitor extends Monitor {
+  def scheduler: Scheduler
+
+  // Can be overriden.
+  override def waitDefault() = {
+    scheduler.log("wait")
+    scheduler updateThreadState Wait(this, scheduler.threadLocks.tail)
+  }
+  override def synchronizedDefault[T](toExecute: =>T): T = {
+    scheduler.log("synchronized check")
+    val prevLocks = scheduler.threadLocks
+    scheduler updateThreadState Sync(this, prevLocks) // If this belongs to prevLocks, should just continue.
+    scheduler.log("synchronized -> enter")
+    try {
+      toExecute
+    } finally {
+      scheduler updateThreadState Running(prevLocks)
+      scheduler.log("synchronized -> out")
+    }
+  }
+  override def notifyDefault() = {
+    scheduler mapOtherStates {
+      state => state match {
+        case Wait(lockToAquire, locks) if lockToAquire == this => SyncUnique(this, state.locks)
+        case e => e
+      }
+    }
+    scheduler.log("notify")
+  }
+  override def notifyAllDefault() = {
+    scheduler mapOtherStates {
+      state => state match {
+        case Wait(lockToAquire, locks) if lockToAquire == this => Sync(this, state.locks)
+        case SyncUnique(lockToAquire, locks) if lockToAquire == this => Sync(this, state.locks)
+        case e => e
+      }
+    }
+    scheduler.log("notifyAll")
+  }
+}
+
+trait LockFreeMonitor extends Monitor {
+  override def waitDefault() = {
+    throw new Exception("Please use lock-free structures and do not use wait()")
+  }
+  override def synchronizedDefault[T](toExecute: =>T): T = {
+    throw new Exception("Please use lock-free structures and do not use synchronized()")
+  }
+  override def notifyDefault() = {
+    throw new Exception("Please use lock-free structures and do not use notify()")
+  }
+  override def notifyAllDefault() = {
+    throw new Exception("Please use lock-free structures and do not use notifyAll()")
+  }
+}
+
+
+abstract class ThreadState {
+  def locks: Seq[AnyRef]
+}
+trait CanContinueIfAcquiresLock extends ThreadState {
+  def lockToAquire: AnyRef
+}
+case object Start extends ThreadState { def locks: Seq[AnyRef] = Seq.empty }
+case object End extends ThreadState { def locks: Seq[AnyRef] = Seq.empty }
+case class Wait(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState
+case class SyncUnique(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState with CanContinueIfAcquiresLock
+case class Sync(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState with CanContinueIfAcquiresLock
+case class Running(locks: Seq[AnyRef]) extends ThreadState
+case class VariableReadWrite(locks: Seq[AnyRef]) extends ThreadState
diff --git a/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/SchedulableBlockingQueue.scala b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/SchedulableBlockingQueue.scala
new file mode 100644
index 0000000..31b09be
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/SchedulableBlockingQueue.scala
@@ -0,0 +1,17 @@
+package m15
+package instrumentation
+
+class SchedulableBlockingQueue[T](val scheduler: Scheduler)
+  extends m15.M15.BlockingQueue[T] with MockedMonitor {
+    private var underlying: List[T] = Nil
+
+    override def getUnderlying(): List[T] =
+      scheduler.exec {
+        underlying
+      }(s"Get $underlying")
+
+    override def setUnderlying(newValue: List[T]): Unit =
+      scheduler.exec {
+        underlying = newValue
+      }(s"Set $newValue")
+}
diff --git a/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/Scheduler.scala b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/Scheduler.scala
new file mode 100644
index 0000000..fd5f427
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/Scheduler.scala
@@ -0,0 +1,305 @@
+package m15
+package instrumentation
+
+import java.util.concurrent._;
+import scala.concurrent.duration._
+import scala.collection.mutable._
+import Stats._
+
+import java.util.concurrent.atomic.AtomicInteger
+
+sealed abstract class Result
+case class RetVal(rets: List[Any]) extends Result
+case class Except(msg: String, stackTrace: Array[StackTraceElement]) extends Result
+case class Timeout(msg: String) extends Result
+
+/**
+ * A class that maintains schedule and a set of thread ids.
+ * The schedules are advanced after an operation of a SchedulableBuffer is performed.
+ * Note: the real schedule that is executed may deviate from the input schedule
+ * due to the adjustments that had to be made for locks
+ */
+class Scheduler(sched: List[Int]) {
+  val maxOps = 500 // a limit on the maximum number of operations the code is allowed to perform
+
+  private var schedule = sched
+  private var numThreads = 0
+  private val realToFakeThreadId = Map[Long, Int]()
+  private val opLog = ListBuffer[String]() // a mutable list (used for efficient concat)
+  private val threadStates = Map[Int, ThreadState]()
+
+  /**
+   * Runs a set of operations in parallel as per the schedule.
+   * Each operation may consist of many primitive operations like reads or writes
+   * to shared data structure each of which should be executed using the function `exec`.
+   * @timeout in milliseconds
+   * @return true - all threads completed on time,  false -some tests timed out.
+   */
+  def runInParallel(timeout: Long, ops: List[() => Any]): Result = {
+    numThreads = ops.length
+    val threadRes = Array.fill(numThreads) { None: Any }
+    var exception: Option[Except] = None
+    val syncObject = new Object()
+    var completed = new AtomicInteger(0)
+    // create threads
+    val threads = ops.zipWithIndex.map {
+      case (op, i) =>
+        new Thread(new Runnable() {
+          def run(): Unit = {
+            val fakeId = i + 1
+            setThreadId(fakeId)
+            try {
+              updateThreadState(Start)
+              val res = op()
+              updateThreadState(End)
+              threadRes(i) = res
+              // notify the master thread if all threads have completed
+              if (completed.incrementAndGet() == ops.length) {
+                syncObject.synchronized { syncObject.notifyAll() }
+              }
+            } catch {
+              case e: Throwable if exception != None => // do nothing here and silently fail
+              case e: Throwable =>
+                log(s"throw ${e.toString}")
+                exception = Some(Except(s"Thread $fakeId crashed on the following schedule: \n" + opLog.mkString("\n"),
+                    e.getStackTrace))
+                syncObject.synchronized { syncObject.notifyAll() }
+              //println(s"$fakeId: ${e.toString}")
+              //Runtime.getRuntime().halt(0) //exit the JVM and all running threads (no other way to kill other threads)
+            }
+          }
+        })
+    }
+    // start all threads
+    threads.foreach(_.start())
+    // wait for all threads to complete, or for an exception to be thrown, or for the time out to expire
+    var remTime = timeout
+    syncObject.synchronized {
+      timed { if(completed.get() != ops.length) syncObject.wait(timeout) } { time => remTime -= time }
+    }
+    if (exception.isDefined) {
+      exception.get
+    } else if (remTime <= 1) { // timeout ? using 1 instead of zero to allow for some errors
+      Timeout(opLog.mkString("\n"))
+    } else {
+      // every thing executed normally
+      RetVal(threadRes.toList)
+    }
+  }
+
+  // Updates the state of the current thread
+  def updateThreadState(state: ThreadState): Unit = {
+    val tid = threadId
+    synchronized {
+      threadStates(tid) = state
+    }
+    state match {
+      case Sync(lockToAquire, locks) =>
+        if (locks.indexOf(lockToAquire) < 0) waitForTurn else {
+          // Re-aqcuiring the same lock
+          updateThreadState(Running(lockToAquire +: locks))
+        }
+      case Start      => waitStart()
+      case End        => removeFromSchedule(tid)
+      case Running(_) =>
+      case _          => waitForTurn // Wait, SyncUnique, VariableReadWrite
+    }
+  }
+
+  def waitStart(): Unit = {
+    //while (threadStates.size < numThreads) {
+    //Thread.sleep(1)
+    //}
+    synchronized {
+      if (threadStates.size < numThreads) {
+        wait()
+      } else {
+        notifyAll()
+      }
+    }
+  }
+
+  def threadLocks = {
+    synchronized {
+      threadStates(threadId).locks
+    }
+  }
+
+  def threadState = {
+    synchronized {
+      threadStates(threadId)
+    }
+  }
+
+  def mapOtherStates(f: ThreadState => ThreadState) = {
+    val exception = threadId
+    synchronized {
+      for (k <- threadStates.keys if k != exception) {
+        threadStates(k) = f(threadStates(k))
+      }
+    }
+  }
+
+  def log(str: String) = {
+    if((realToFakeThreadId contains Thread.currentThread().getId())) {
+      val space = (" " * ((threadId - 1) * 2))
+      val s = space + threadId + ":" + "\n".r.replaceAllIn(str, "\n" + space + "  ")
+      opLog += s
+    }
+  }
+
+  /**
+   * Executes a read or write operation to a global data structure as per the given schedule
+   * @param msg a message corresponding to the operation that will be logged
+   */
+  def exec[T](primop: => T)(msg: => String, postMsg: => Option[T => String] = None): T = {
+    if(! (realToFakeThreadId contains Thread.currentThread().getId())) {
+      primop
+    } else {
+      updateThreadState(VariableReadWrite(threadLocks))
+      val m = msg
+      if(m != "") log(m)
+      if (opLog.size > maxOps)
+        throw new Exception(s"Total number of reads/writes performed by threads exceed $maxOps. A possible deadlock!")
+      val res = primop
+      postMsg match {
+        case Some(m) => log(m(res))
+        case None =>
+      }
+      res
+    }
+  }
+
+  private def setThreadId(fakeId: Int) = synchronized {
+    realToFakeThreadId(Thread.currentThread.getId) = fakeId
+  }
+
+  def threadId =
+    try {
+      realToFakeThreadId(Thread.currentThread().getId())
+    } catch {
+    case e: NoSuchElementException =>
+      throw new Exception("You are accessing shared variables in the constructor. This is not allowed. The variables are already initialized!")
+    }
+
+  private def isTurn(tid: Int) = synchronized {
+    (!schedule.isEmpty && schedule.head != tid)
+  }
+
+  def canProceed(): Boolean = {
+    val tid = threadId
+    canContinue match {
+      case Some((i, state)) if i == tid =>
+        //println(s"$tid: Runs ! Was in state $state")
+        canContinue = None
+        state match {
+          case Sync(lockToAquire, locks) => updateThreadState(Running(lockToAquire +: locks))
+          case SyncUnique(lockToAquire, locks) =>
+            mapOtherStates {
+              _ match {
+                case SyncUnique(lockToAquire2, locks2) if lockToAquire2 == lockToAquire => Wait(lockToAquire2, locks2)
+                case e => e
+              }
+            }
+            updateThreadState(Running(lockToAquire +: locks))
+          case VariableReadWrite(locks) => updateThreadState(Running(locks))
+        }
+        true
+      case Some((i, state)) =>
+        //println(s"$tid: not my turn but $i !")
+        false
+      case None =>
+        false
+    }
+  }
+
+  var threadPreference = 0 // In the case the schedule is over, which thread should have the preference to execute.
+
+  /** returns true if the thread can continue to execute, and false otherwise */
+  def decide(): Option[(Int, ThreadState)] = {
+    if (!threadStates.isEmpty) { // The last thread who enters the decision loop takes the decision.
+      //println(s"$threadId: I'm taking a decision")
+      if (threadStates.values.forall { case e: Wait => true case _ => false }) {
+        val waiting = threadStates.keys.map(_.toString).mkString(", ")
+        val s = if (threadStates.size > 1) "s" else ""
+        val are = if (threadStates.size > 1) "are" else "is"
+        throw new Exception(s"Deadlock: Thread$s $waiting $are waiting but all others have ended and cannot notify them.")
+      } else {
+        // Threads can be in Wait, Sync, SyncUnique, and VariableReadWrite mode.
+        // Let's determine which ones can continue.
+        val notFree = threadStates.collect { case (id, state) => state.locks }.flatten.toSet
+        val threadsNotBlocked = threadStates.toSeq.filter {
+          case (id, v: VariableReadWrite)         => true
+          case (id, v: CanContinueIfAcquiresLock) => !notFree(v.lockToAquire) || (v.locks contains v.lockToAquire)
+          case _                                  => false
+        }
+        if (threadsNotBlocked.isEmpty) {
+          val waiting = threadStates.keys.map(_.toString).mkString(", ")
+          val s = if (threadStates.size > 1) "s" else ""
+          val are = if (threadStates.size > 1) "are" else "is"
+          val whoHasLock = threadStates.toSeq.flatMap { case (id, state) => state.locks.map(lock => (lock, id)) }.toMap
+          val reason = threadStates.collect {
+            case (id, state: CanContinueIfAcquiresLock) if !notFree(state.lockToAquire) =>
+              s"Thread $id is waiting on lock ${state.lockToAquire} held by thread ${whoHasLock(state.lockToAquire)}"
+          }.mkString("\n")
+          throw new Exception(s"Deadlock: Thread$s $waiting are interlocked. Indeed:\n$reason")
+        } else if (threadsNotBlocked.size == 1) { // Do not consume the schedule if only one thread can execute.
+          Some(threadsNotBlocked(0))
+        } else {
+          val next = schedule.indexWhere(t => threadsNotBlocked.exists { case (id, state) => id == t })
+          if (next != -1) {
+            //println(s"$threadId: schedule is $schedule, next chosen is ${schedule(next)}")
+            val chosenOne = schedule(next) // TODO: Make schedule a mutable list.
+            schedule = schedule.take(next) ++ schedule.drop(next + 1)
+            Some((chosenOne, threadStates(chosenOne)))
+          } else {
+            threadPreference = (threadPreference + 1) % threadsNotBlocked.size
+            val chosenOne = threadsNotBlocked(threadPreference) // Maybe another strategy
+            Some(chosenOne)
+            //threadsNotBlocked.indexOf(threadId) >= 0
+            /*
+            val tnb = threadsNotBlocked.map(_._1).mkString(",")
+            val s = if (schedule.isEmpty) "empty" else schedule.mkString(",")
+            val only = if (schedule.isEmpty) "" else " only"
+            throw new Exception(s"The schedule is $s but$only threads ${tnb} can continue")*/
+          }
+        }
+      }
+    } else canContinue
+  }
+
+  /**
+   * This will be called before a schedulable operation begins.
+   * This should not use synchronized
+   */
+  var numThreadsWaiting = new AtomicInteger(0)
+  //var waitingForDecision = Map[Int, Option[Int]]() // Mapping from thread ids to a number indicating who is going to make the choice.
+  var canContinue: Option[(Int, ThreadState)] = None // The result of the decision thread Id of the thread authorized to continue.
+  private def waitForTurn = {
+    synchronized {
+      if (numThreadsWaiting.incrementAndGet() == threadStates.size) {
+        canContinue = decide()
+        notifyAll()
+      }
+      //waitingForDecision(threadId) = Some(numThreadsWaiting)
+      //println(s"$threadId Entering waiting with ticket number $numThreadsWaiting/${waitingForDecision.size}")
+      while (!canProceed()) wait()
+    }
+    numThreadsWaiting.decrementAndGet()
+  }
+
+  /**
+   * To be invoked when a thread is about to complete
+   */
+  private def removeFromSchedule(fakeid: Int) = synchronized {
+    //println(s"$fakeid: I'm taking a decision because I finished")
+    schedule = schedule.filterNot(_ == fakeid)
+    threadStates -= fakeid
+    if (numThreadsWaiting.get() == threadStates.size) {
+      canContinue = decide()
+      notifyAll()
+    }
+  }
+
+  def getOperationLog() = opLog
+}
diff --git a/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/Stats.scala b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/Stats.scala
new file mode 100644
index 0000000..e82c098
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/Stats.scala
@@ -0,0 +1,23 @@
+package m15
+package instrumentation
+
+import java.lang.management._
+
+/**
+ * A collection of methods that can be used to collect run-time statistics about Leon programs.
+ * This is mostly used to test the resources properties of Leon programs
+ */
+object Stats {
+  def timed[T](code: => T)(cont: Long => Unit): T = {
+    var t1 = System.currentTimeMillis()
+    val r = code
+    cont((System.currentTimeMillis() - t1))
+    r
+  }
+
+  def withTime[T](code: => T): (T, Long) = {
+    var t1 = System.currentTimeMillis()
+    val r = code
+    (r, (System.currentTimeMillis() - t1))
+  }
+}
diff --git a/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/TestHelper.scala b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/TestHelper.scala
new file mode 100644
index 0000000..5f86338
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/TestHelper.scala
@@ -0,0 +1,125 @@
+package m15
+package instrumentation
+
+import scala.util.Random
+import scala.collection.mutable.{Map => MutableMap}
+
+import Stats._
+
+object TestHelper {
+  val noOfSchedules = 10000 // set this to 100k during deployment
+  val readWritesPerThread = 20 // maximum number of read/writes possible in one thread
+  val contextSwitchBound = 10
+  val testTimeout = 240 // the total time out for a test in seconds
+  val schedTimeout = 15 // the total time out for execution of a schedule in secs
+
+  // Helpers
+  /*def testManySchedules(op1: => Any): Unit = testManySchedules(List(() => op1))
+  def testManySchedules(op1: => Any, op2: => Any): Unit = testManySchedules(List(() => op1, () => op2))
+  def testManySchedules(op1: => Any, op2: => Any, op3: => Any): Unit = testManySchedules(List(() => op1, () => op2, () => op3))
+  def testManySchedules(op1: => Any, op2: => Any, op3: => Any, op4: => Any): Unit = testManySchedules(List(() => op1, () => op2, () => op3, () => op4))*/
+
+  def testSequential[T](ops: Scheduler => Any)(assertions: T => (Boolean, String)) =
+    testManySchedules(1,
+      (sched: Scheduler) => {
+        (List(() => ops(sched)),
+         (res: List[Any]) => assertions(res.head.asInstanceOf[T]))
+      })
+
+  /**
+   * @numThreads number of threads
+   * @ops operations to be executed, one per thread
+   * @assertion as condition that will executed after all threads have completed (without exceptions)
+   * 					 the arguments are the results of the threads
+   */
+  def testManySchedules(numThreads: Int,
+      ops: Scheduler =>
+        (List[() => Any], // Threads
+         List[Any] => (Boolean, String)) // Assertion
+      ) = {
+    var timeout = testTimeout * 1000L
+    val threadIds = (1 to numThreads)
+    //(1 to scheduleLength).flatMap(_ => threadIds).toList.permutations.take(noOfSchedules).foreach {
+    val schedules = (new ScheduleGenerator(numThreads)).schedules()
+    var schedsExplored = 0
+    schedules.takeWhile(_ => schedsExplored <= noOfSchedules && timeout > 0).foreach {
+      //case _ if timeout <= 0 => // break
+      case schedule =>
+        schedsExplored += 1
+        val schedr = new Scheduler(schedule)
+        //println("Exploring Sched: "+schedule)
+        val (threadOps, assertion) = ops(schedr)
+        if (threadOps.size != numThreads)
+          throw new IllegalStateException(s"Number of threads: $numThreads, do not match operations of threads: $threadOps")
+        timed { schedr.runInParallel(schedTimeout * 1000, threadOps) } { t => timeout -= t } match {
+          case Timeout(msg) =>
+            throw new java.lang.AssertionError("assertion failed\n"+"The schedule took too long to complete. A possible deadlock! \n"+msg)
+          case Except(msg, stkTrace) =>
+            val traceStr = "Thread Stack trace: \n"+stkTrace.map(" at "+_.toString).mkString("\n")
+            throw new java.lang.AssertionError("assertion failed\n"+msg+"\n"+traceStr)
+          case RetVal(threadRes) =>
+            // check the assertion
+            val (success, custom_msg) = assertion(threadRes)
+            if (!success) {
+              val msg = "The following schedule resulted in wrong results: \n" + custom_msg + "\n" + schedr.getOperationLog().mkString("\n")
+              throw new java.lang.AssertionError("Assertion failed: "+msg)
+            }
+        }
+    }
+    if (timeout <= 0) {
+      throw new java.lang.AssertionError("Test took too long to complete! Cannot check all schedules as your code is too slow!")
+    }
+  }
+
+  /**
+   * A schedule generator that is based on the context bound
+   */
+  class ScheduleGenerator(numThreads: Int) {
+    val scheduleLength = readWritesPerThread * numThreads
+    val rands = (1 to scheduleLength).map(i => new Random(0xcafe * i)) // random numbers for choosing a thread at each position
+    def schedules(): LazyList[List[Int]] = {
+      var contextSwitches = 0
+      var contexts = List[Int]() // a stack of thread ids in the order of context-switches
+      val remainingOps = MutableMap[Int, Int]()
+      remainingOps ++= (1 to numThreads).map(i => (i, readWritesPerThread)) // num ops remaining in each thread
+      val liveThreads = (1 to numThreads).toSeq.toBuffer
+
+      /**
+       * Updates remainingOps and liveThreads once a thread is chosen for a position in the schedule
+       */
+      def updateState(tid: Int): Unit = {
+        val remOps = remainingOps(tid)
+        if (remOps == 0) {
+          liveThreads -= tid
+        } else {
+          remainingOps += (tid -> (remOps - 1))
+        }
+      }
+      val schedule = rands.foldLeft(List[Int]()) {
+        case (acc, r) if contextSwitches < contextSwitchBound =>
+          val tid = liveThreads(r.nextInt(liveThreads.size))
+          contexts match {
+            case prev :: tail if prev != tid => // we have a new context switch here
+              contexts +:= tid
+              contextSwitches += 1
+            case prev :: tail =>
+            case _ => // init case
+              contexts +:= tid
+          }
+          updateState(tid)
+          acc :+ tid
+        case (acc, _) => // here context-bound has been reached so complete the schedule without any more context switches
+          if (!contexts.isEmpty) {
+            contexts = contexts.dropWhile(remainingOps(_) == 0)
+          }
+          val tid = contexts match {
+            case top :: tail => top
+            case _ => liveThreads(0)  // here, there has to be threads that have not even started
+          }
+          updateState(tid)
+          acc :+ tid
+      }
+      schedule #:: schedules()
+    }
+  }
+}
diff --git a/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/TestUtils.scala b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/TestUtils.scala
new file mode 100644
index 0000000..3f4afe8
--- /dev/null
+++ b/previous-exams/2021-midterm/m15/src/test/scala/m15/instrumentation/TestUtils.scala
@@ -0,0 +1,20 @@
+package m15
+package instrumentation
+
+import scala.concurrent._
+import scala.concurrent.duration._
+import scala.concurrent.ExecutionContext.Implicits.global
+
+object TestUtils {
+  def failsOrTimesOut[T](action: => T): Boolean = {
+    val asyncAction = Future {
+      action
+    }
+    try {
+      Await.result(asyncAction, 2000.millisecond)
+    } catch {
+      case _: Throwable => return true
+    }
+    return false
+  }
+}
diff --git a/previous-exams/2021-midterm/m2.md b/previous-exams/2021-midterm/m2.md
new file mode 100644
index 0000000..47b0976
--- /dev/null
+++ b/previous-exams/2021-midterm/m2.md
@@ -0,0 +1,61 @@
+Use the following commands to make a fresh clone of your repository:
+
+```
+git clone -b m2 git@gitlab.epfl.ch:lamp/student-repositories-s21/cs206-GASPAR.git m2
+```
+
+## Useful links
+
+  * [A guide to the Scala parallel collections](https://docs.scala-lang.org/overviews/parallel-collections/overview.html)
+  * [The API documentation of the Scala parallel collections](https://www.javadoc.io/doc/org.scala-lang.modules/scala-parallel-collections_2.13/latest/scala/collection/index.html)
+  * [The API documentation of the Scala standard library](https://www.scala-lang.org/files/archive/api/2.13.4)
+  * [The API documentation of the Java standard library](https://docs.oracle.com/en/java/javase/15/docs/api/index.html)
+
+**If you have issues with the IDE, try [reimporting the
+build](https://gitlab.epfl.ch/lamp/cs206/-/blob/master/labs/example-lab.md#ide-features-like-type-on-hover-or-go-to-definition-do-not-work),
+if you still have problems, use `compile` in sbt instead.**
+
+## Exercise
+
+Given the following sequential implementation of a function that computes the sequence of rolling geometric means, your task will be to complete and optimize a parallel version of this code.
+
+```scala
+/** Compute the rolling geometric mean of an array.
+  *
+  *  For an array `arr = Arr(x1, x2, x3, ..., xn)` the result is
+  *  `Arr(math.pow(x1, 1), math.pow((x1 + x2), 1.0/2), math.pow((x1 + x2 + x3), 1.0/3), ..., math.pow((x1 + x2 + x3 + ... + xn), 1.0/n))`
+  */
+def rollingGeoMeanParallel(arr: Arr[Int]): Arr[Double] = {
+  // Transform all numbers to roots with degree 1
+  val arr1 = arr.map(x => Root(x, 1))
+  // Compute the rolling geometric mean keeping the root structured
+  val arr2 = arr1.scan(Root(1, 0))((acc, x) => Root(acc.radicand * x.radicand, acc.degree + x.degree))
+  // Transform the roots to Doubles
+  arr2.map(root => root.toDouble)
+  // Drop the extra initial element that was added by the scan
+  arr3.tail
+```
+
+ This implementation has some issues:
+ - It does not use parallelism
+ - Creates two intermediate arrays by calling `map`
+ - Creates an extra intermediate arrays by calling `tail`
+ - Scan returns an extra element we do not need
+
+ We want to parallelize and avoid the creation of the extra arrays.
+ As we are calling a `scan` the natural operations we need are `upsweep` and `downsweep`.
+ It is possible specialize those operations for our problem by letting those operations do the mapping.
+ It is also possible to change those operations to not generate the first element.
+
+We give you a version of `rollingGeoMeanSequential` that partially implements the parallelization using `upsweep` and `downsweep`.
+
+ Your tasks in the exercise will be to:
+ - TASK 1: Implement the parallelization of `upsweep` and `downsweep`
+ - TASK 2: Remove the calls to the `map`
+ - TASK 3: Remove the call to `tail`
+
+ You can get partial points for solving part of the tasks.
+ The order of the tasks is a suggestion, you may do them in any order if that is simpler for you.
+
+Look at the `Lib` trait to find the definitions of functions and classes you can use (or already used).
+In this question we use a `Arr` array class instead of the normal `Array`. You may assume that this class has the same performance characteristics as the normal array. `Arr` provides only a limited set of operations.
diff --git a/previous-exams/2021-midterm/m2/.gitignore b/previous-exams/2021-midterm/m2/.gitignore
new file mode 100644
index 0000000..40937dc
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/.gitignore
@@ -0,0 +1,22 @@
+# General
+*.DS_Store
+*.swp
+*~
+
+# Dotty
+*.class
+*.tasty
+*.hasTasty
+
+# sbt
+target/
+
+# IDE
+.bsp
+.bloop
+.metals
+.vscode
+
+# datasets
+stackoverflow-grading.csv
+wikipedia-grading.dat
diff --git a/previous-exams/2021-midterm/m2/assignment.sbt b/previous-exams/2021-midterm/m2/assignment.sbt
new file mode 100644
index 0000000..da7eb3c
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/assignment.sbt
@@ -0,0 +1,2 @@
+// Student tasks (i.e. submit, packageSubmission)
+enablePlugins(StudentTasks)
diff --git a/previous-exams/2021-midterm/m2/build.sbt b/previous-exams/2021-midterm/m2/build.sbt
new file mode 100644
index 0000000..4a68d9e
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/build.sbt
@@ -0,0 +1,12 @@
+course := "midterm"
+assignment := "m2"
+scalaVersion := "3.0.0-RC1"
+scalacOptions ++= Seq("-language:implicitConversions", "-deprecation")
+
+libraryDependencies += "org.scalameta" %% "munit" % "0.7.22"
+
+val MUnitFramework = new TestFramework("munit.Framework")
+testFrameworks += MUnitFramework
+// Decode Scala names
+testOptions += Tests.Argument(MUnitFramework, "-s")
+testSuite := "m2.M2Suite"
diff --git a/previous-exams/2021-midterm/m2/grading-tests.jar b/previous-exams/2021-midterm/m2/grading-tests.jar
new file mode 100644
index 0000000000000000000000000000000000000000..66ce3fdf704542bc3d07a5b92687caf1fd2b3cf1
GIT binary patch
literal 34633
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%0AhB#V!ya~=w(#p>tWK0IPIZ8yjNmH
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

literal 0
HcmV?d00001

diff --git a/previous-exams/2021-midterm/m2/project/FilteringReporterPlugin.scala b/previous-exams/2021-midterm/m2/project/FilteringReporterPlugin.scala
new file mode 100644
index 0000000..2e4fd9a
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/project/FilteringReporterPlugin.scala
@@ -0,0 +1,31 @@
+package sbt // To access the private[sbt] compilerReporter key
+package filteringReporterPlugin
+
+import Keys._
+import ch.epfl.lamp._
+
+object FilteringReporterPlugin extends AutoPlugin {
+  override lazy val projectSettings = Seq(
+    // Turn off warning coming from scalameter that we cannot fix without changing scalameter
+    compilerReporter in (Compile, compile) ~= { reporter => new FilteringReporter(reporter) }
+  )
+}
+
+class FilteringReporter(reporter: xsbti.Reporter) extends xsbti.Reporter {
+
+  def reset(): Unit = reporter.reset()
+  def hasErrors: Boolean = reporter.hasErrors
+  def hasWarnings: Boolean = reporter.hasWarnings
+  def printSummary(): Unit = reporter.printSummary()
+  def problems: Array[xsbti.Problem] = reporter.problems
+
+  def log(problem: xsbti.Problem): Unit = {
+    if (!problem.message.contains("An existential type that came from a Scala-2 classfile cannot be"))
+      reporter.log(problem)
+  }
+
+  def comment(pos: xsbti.Position, msg: String): Unit =
+    reporter.comment(pos, msg)
+
+  override def toString = s"CollectingReporter($reporter)"
+}
diff --git a/previous-exams/2021-midterm/m2/project/MOOCSettings.scala b/previous-exams/2021-midterm/m2/project/MOOCSettings.scala
new file mode 100644
index 0000000..1c40443
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/project/MOOCSettings.scala
@@ -0,0 +1,49 @@
+package ch.epfl.lamp
+
+import sbt._
+import sbt.Keys._
+
+/**
+ * Coursera uses two versions of each assignment. They both have the same assignment key and part id but have
+ * different item ids.
+ *
+ * @param key Assignment key
+ * @param partId Assignment partId
+ * @param itemId Item id of the non premium version
+ * @param premiumItemId Item id of the premium version (`None` if the assignment is optional)
+ */
+case class CourseraId(key: String, partId: String, itemId: String, premiumItemId: Option[String])
+
+/**
+  * Settings shared by all assignments, reused in various tasks.
+  */
+object MOOCSettings extends AutoPlugin {
+
+  override def requires = super.requires && filteringReporterPlugin.FilteringReporterPlugin
+
+  object autoImport {
+    val course = SettingKey[String]("course")
+    val assignment = SettingKey[String]("assignment")
+    val options = SettingKey[Map[String, Map[String, String]]]("options")
+    val courseraId = settingKey[CourseraId]("Coursera-specific information identifying the assignment")
+    val testSuite = settingKey[String]("Fully qualified name of the test suite of this assignment")
+      .withRank(KeyRanks.Invisible)
+    // Convenient alias
+    type CourseraId = ch.epfl.lamp.CourseraId
+    val CourseraId = ch.epfl.lamp.CourseraId
+  }
+
+  import autoImport._
+
+  override val globalSettings: Seq[Def.Setting[_]] = Seq(
+    // supershell is verbose, buggy and useless.
+    useSuperShell := false
+  )
+
+  override val projectSettings: Seq[Def.Setting[_]] = Seq(
+    parallelExecution in Test := false,
+    // Report test result after each test instead of waiting for every test to finish
+    logBuffered in Test := false,
+    name := s"${course.value}-${assignment.value}"
+  )
+}
diff --git a/previous-exams/2021-midterm/m2/project/StudentTasks.scala b/previous-exams/2021-midterm/m2/project/StudentTasks.scala
new file mode 100644
index 0000000..c4669af
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/project/StudentTasks.scala
@@ -0,0 +1,303 @@
+package ch.epfl.lamp
+
+import sbt._
+import Keys._
+
+// import scalaj.http._
+import java.io.{File, FileInputStream, IOException}
+import org.apache.commons.codec.binary.Base64
+// import play.api.libs.json.{Json, JsObject, JsPath}
+import scala.util.{Failure, Success, Try}
+
+/**
+  * Provides tasks for submitting the assignment
+  */
+object StudentTasks extends AutoPlugin {
+
+  override def requires = super.requires && MOOCSettings
+
+  object autoImport {
+    val packageSourcesOnly = TaskKey[File]("packageSourcesOnly", "Package the sources of the project")
+    val packageBinWithoutResources = TaskKey[File]("packageBinWithoutResources", "Like packageBin, but without the resources")
+    val packageSubmissionZip = TaskKey[File]("packageSubmissionZip")
+    val packageSubmission = inputKey[Unit]("package solution as an archive file")
+
+    lazy val Grading = config("grading") extend(Runtime)
+  }
+
+
+  import autoImport._
+  import MOOCSettings.autoImport._
+
+  override lazy val projectSettings = Seq(
+    packageSubmissionSetting,
+    fork := true,
+    connectInput in run := true,
+    outputStrategy := Some(StdoutOutput),
+  ) ++
+    packageSubmissionZipSettings ++
+    inConfig(Grading)(Defaults.testSettings ++ Seq(
+      unmanagedJars += file("grading-tests.jar"),
+
+      definedTests := (definedTests in Test).value,
+      internalDependencyClasspath := (internalDependencyClasspath in Test).value
+    ))
+
+
+  /** **********************************************************
+    * SUBMITTING A SOLUTION TO COURSERA
+    */
+
+  val packageSubmissionZipSettings = Seq(
+    packageSubmissionZip := {
+      val submission = crossTarget.value / "submission.zip"
+      val sources = (packageSourcesOnly in Compile).value
+      val binaries = (packageBinWithoutResources in Compile).value
+      IO.zip(Seq(sources -> "sources.zip", binaries -> "binaries.jar"), submission, None)
+      submission
+    },
+    artifactClassifier in packageSourcesOnly := Some("sources"),
+    artifact in (Compile, packageBinWithoutResources) ~= (art => art.withName(art.name + "-without-resources"))
+  ) ++
+  inConfig(Compile)(
+    Defaults.packageTaskSettings(packageSourcesOnly, Defaults.sourceMappings) ++
+    Defaults.packageTaskSettings(packageBinWithoutResources, Def.task {
+      val relativePaths =
+        (unmanagedResources in Compile).value.flatMap(Path.relativeTo((unmanagedResourceDirectories in Compile).value)(_))
+      (mappings in (Compile, packageBin)).value.filterNot { case (_, path) => relativePaths.contains(path) }
+    })
+  )
+
+  val maxSubmitFileSize = {
+    val mb = 1024 * 1024
+    10 * mb
+  }
+
+  /** Check that the jar exists, isn't empty, isn't crazy big, and can be read
+    * If so, encode jar as base64 so we can send it to Coursera
+    */
+  def prepareJar(jar: File, s: TaskStreams): String = {
+    val errPrefix = "Error submitting assignment jar: "
+    val fileLength = jar.length()
+    if (!jar.exists()) {
+      s.log.error(errPrefix + "jar archive does not exist\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength == 0L) {
+      s.log.error(errPrefix + "jar archive is empty\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength > maxSubmitFileSize) {
+      s.log.error(errPrefix + "jar archive is too big. Allowed size: " +
+        maxSubmitFileSize + " bytes, found " + fileLength + " bytes.\n" +
+        jar.getAbsolutePath)
+      failSubmit()
+    } else {
+      val bytes = new Array[Byte](fileLength.toInt)
+      val sizeRead = try {
+        val is = new FileInputStream(jar)
+        val read = is.read(bytes)
+        is.close()
+        read
+      } catch {
+        case ex: IOException =>
+          s.log.error(errPrefix + "failed to read sources jar archive\n" + ex.toString)
+          failSubmit()
+      }
+      if (sizeRead != bytes.length) {
+        s.log.error(errPrefix + "failed to read the sources jar archive, size read: " + sizeRead)
+        failSubmit()
+      } else encodeBase64(bytes)
+    }
+  }
+
+  /** Task to package solution to a given file path */
+  lazy val packageSubmissionSetting = packageSubmission := {
+    val args: Seq[String] = Def.spaceDelimited("[path]").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val base64Jar = prepareJar(jar, s)
+
+    val path = args.headOption.getOrElse((baseDirectory.value / "submission.jar").absolutePath)
+    scala.tools.nsc.io.File(path).writeAll(base64Jar)
+  }
+
+/*
+  /** Task to submit a solution to coursera */
+  val submit = inputKey[Unit]("submit solution to Coursera")
+  lazy val submitSetting = submit := {
+    // Fail if scalafix linting does not pass.
+    scalafixLinting.value
+
+    val args: Seq[String] = Def.spaceDelimited("<arg>").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val assignmentDetails =
+      courseraId.?.value.getOrElse(throw new MessageOnlyException("This assignment can not be submitted to Coursera because the `courseraId` setting is undefined"))
+    val assignmentKey = assignmentDetails.key
+    val courseName =
+      course.value match {
+        case "capstone" => "scala-capstone"
+        case "bigdata"  => "scala-spark-big-data"
+        case other      => other
+      }
+
+    val partId = assignmentDetails.partId
+    val itemId = assignmentDetails.itemId
+    val premiumItemId = assignmentDetails.premiumItemId
+
+    val (email, secret) = args match {
+      case email :: secret :: Nil =>
+        (email, secret)
+      case _ =>
+        val inputErr =
+          s"""|Invalid input to `submit`. The required syntax for `submit` is:
+              |submit <email-address> <submit-token>
+              |
+              |The submit token is NOT YOUR LOGIN PASSWORD.
+              |It can be obtained from the assignment page:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId
+              |${
+                premiumItemId.fold("") { id =>
+                  s"""or (for premium learners):
+                     |https://www.coursera.org/learn/$courseName/programming/$id
+                   """.stripMargin
+                }
+              }
+          """.stripMargin
+        s.log.error(inputErr)
+        failSubmit()
+    }
+
+    val base64Jar = prepareJar(jar, s)
+    val json =
+      s"""|{
+          |   "assignmentKey":"$assignmentKey",
+          |   "submitterEmail":"$email",
+          |   "secret":"$secret",
+          |   "parts":{
+          |      "$partId":{
+          |         "output":"$base64Jar"
+          |      }
+          |   }
+          |}""".stripMargin
+
+    def postSubmission[T](data: String): Try[HttpResponse[String]] = {
+      val http = Http("https://www.coursera.org/api/onDemandProgrammingScriptSubmissions.v1")
+      val hs = List(
+        ("Cache-Control", "no-cache"),
+        ("Content-Type", "application/json")
+      )
+      s.log.info("Connecting to Coursera...")
+      val response = Try(http.postData(data)
+                         .headers(hs)
+                         .option(HttpOptions.connTimeout(10000)) // scalaj default timeout is only 100ms, changing that to 10s
+                         .asString) // kick off HTTP POST
+      response
+    }
+
+    val connectMsg =
+      s"""|Attempting to submit "${assignment.value}" assignment in "$courseName" course
+          |Using:
+          |- email: $email
+          |- submit token: $secret""".stripMargin
+    s.log.info(connectMsg)
+
+    def reportCourseraResponse(response: HttpResponse[String]): Unit = {
+      val code = response.code
+      val respBody = response.body
+
+       /* Sample JSON response from Coursera
+      {
+        "message": "Invalid email or token.",
+        "details": {
+          "learnerMessage": "Invalid email or token."
+        }
+      }
+      */
+
+      // Success, Coursera responds with 2xx HTTP status code
+      if (response.is2xx) {
+        val successfulSubmitMsg =
+          s"""|Successfully connected to Coursera. (Status $code)
+              |
+                |Assignment submitted successfully!
+              |
+                |You can see how you scored by going to:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId/
+              |${
+            premiumItemId.fold("") { id =>
+              s"""or (for premium learners):
+                 |https://www.coursera.org/learn/$courseName/programming/$id
+                       """.stripMargin
+            }
+          }
+              |and clicking on "My Submission".""".stripMargin
+        s.log.info(successfulSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 4xx HTTP status code (client-side failure)
+      else if (response.is4xx) {
+        val result = Try(Json.parse(respBody)).toOption
+        val learnerMsg = result match {
+          case Some(resp: JsObject) =>
+            (JsPath \ "details" \ "learnerMessage").read[String].reads(resp).get
+          case Some(x) => // shouldn't happen
+            "Could not parse Coursera's response:\n" + x
+          case None =>
+            "Could not parse Coursera's response:\n" + respBody
+        }
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |There was something wrong while attempting to submit.
+              |Coursera says:
+              |$learnerMsg (Status $code)""".stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 5xx HTTP status code (server-side failure)
+      else if (response.is5xx) {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera seems to be unavailable at the moment (Status $code)
+              |Check https://status.coursera.org/ and try again in a few minutes.
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera repsonds with an unexpected status code
+      else {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera replied with an unexpected code (Status $code)
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+    }
+
+    // kick it all off, actually make request
+    postSubmission(json) match {
+      case Success(resp) => reportCourseraResponse(resp)
+      case Failure(e) =>
+        val failedConnectMsg =
+          s"""|Connection to Coursera failed.
+              |There was something wrong while attempting to connect to Coursera.
+              |Check your internet connection.
+              |${e.toString}""".stripMargin
+        s.log.error(failedConnectMsg)
+    }
+
+   }
+*/
+
+  def failSubmit(): Nothing = {
+    sys.error("Submission failed")
+  }
+
+  /**
+    * *****************
+    * DEALING WITH JARS
+    */
+  def encodeBase64(bytes: Array[Byte]): String =
+    new String(Base64.encodeBase64(bytes))
+}
diff --git a/previous-exams/2021-midterm/m2/project/build.properties b/previous-exams/2021-midterm/m2/project/build.properties
new file mode 100644
index 0000000..0b2e09c
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/project/build.properties
@@ -0,0 +1 @@
+sbt.version=1.4.7
diff --git a/previous-exams/2021-midterm/m2/project/buildSettings.sbt b/previous-exams/2021-midterm/m2/project/buildSettings.sbt
new file mode 100644
index 0000000..8fac702
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/project/buildSettings.sbt
@@ -0,0 +1,5 @@
+// Used for Coursera submission (StudentPlugin)
+// libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.4.2"
+// libraryDependencies += "com.typesafe.play" %% "play-json" % "2.7.4"
+// Used for Base64 (StudentPlugin)
+libraryDependencies += "commons-codec" % "commons-codec" % "1.10"
diff --git a/previous-exams/2021-midterm/m2/project/plugins.sbt b/previous-exams/2021-midterm/m2/project/plugins.sbt
new file mode 100644
index 0000000..021c019
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/project/plugins.sbt
@@ -0,0 +1,2 @@
+// addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")
+addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.3")
diff --git a/previous-exams/2021-midterm/m2/src/main/scala/m2/Lib.scala b/previous-exams/2021-midterm/m2/src/main/scala/m2/Lib.scala
new file mode 100644
index 0000000..9f1aff5
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/src/main/scala/m2/Lib.scala
@@ -0,0 +1,60 @@
+package m2
+
+////////////////////////////////////////
+// NO NEED TO MODIFY THIS SOURCE FILE //
+////////////////////////////////////////
+
+trait Lib {
+
+  /** If an array has `n` elements and `n < THRESHOLD`, then it should be processed sequentially */
+  final val THRESHOLD: Int = 33
+
+  /** Compute the two values in parallel
+   *
+   *  Note: Most tests just compute those two sequentially to make any bug simpler to debug
+   */
+  def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2)
+
+  /** A limited array. It only contains the required operations for this exercise. */
+  trait Arr[T] {
+    /** Get the i-th element of the array (0-based) */
+    def apply(i: Int): T
+    /** Update the i-th element of the array with the given value (0-based) */
+    def update(i: Int, x: T): Unit
+    /** Number of elements in this array */
+    def length: Int
+    /** Create a copy of this array without the first element */
+    def tail: Arr[T]
+    /** Create a copy of this array by mapping all the elements with the given function */
+    def map[U](f: T => U): Arr[U]
+  }
+
+  object Arr {
+    /** Create an array with the given elements */
+    def apply[T](xs: T*): Arr[T] = {
+      val arr: Arr[T] = Arr.ofLength(xs.length)
+      for i <- 0 until xs.length do arr(i) = xs(i)
+      arr
+    }
+
+    /** Create an array with the given length. All elements are initialized to `null`. */
+    def ofLength[T](n: Int): Arr[T] =
+      newArrOfLength(n)
+
+  }
+
+  /** Create an array with the given length. All elements are initialized to `null`. */
+  def newArrOfLength[T](n: Int): Arr[T]
+
+  /** A number representing `radicand^(1.0/degree)` */
+  case class Root(radicand: Int, degree: Int) {
+    def toDouble: Double = scala.math.pow(radicand, 1.0/degree)
+  }
+
+  /** Tree result of an upsweep operation. Specialized for `Root` results. */
+  trait TreeRes { val res: Root }
+  /** Leaf result of an upsweep operation. Specialized for `Root` results. */
+  case class Leaf(from: Int, to: Int, res: Root) extends TreeRes
+  /** Tree node result of an upsweep operation. Specialized for `Root` results. */
+  case class Node(left: TreeRes, res: Root, right: TreeRes) extends TreeRes
+}
diff --git a/previous-exams/2021-midterm/m2/src/main/scala/m2/M2.scala b/previous-exams/2021-midterm/m2/src/main/scala/m2/M2.scala
new file mode 100644
index 0000000..1710998
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/src/main/scala/m2/M2.scala
@@ -0,0 +1,75 @@
+package m2
+
+
+trait M2 extends Lib {
+  // Functions and classes of Lib can be used in here
+
+  /** Compute the rolling geometric mean of an array.
+   *
+   *  For an array `arr = Arr(x1, x2, x3, ..., xn)` the result is
+   *  `Arr(math.pow(x1, 1), math.pow((x1 + x2), 1.0/2), math.pow((x1 + x2 + x3), 1.0/3), ..., math.pow((x1 + x2 + x3 + ... + xn), 1.0/n))`
+   */
+  def rollingGeoMeanParallel(arr: Arr[Int]): Arr[Double] = {
+    if (arr.length == 0) return Arr.ofLength(0)
+
+    val out: Arr[Double] = Arr.ofLength(arr.length)
+    val tree = upsweep(arr, 0, arr.length)
+    downsweep(arr, Root(1, 0), tree, out)
+    out
+  }
+
+  // No need to modify this
+  def scanOp(acc: Root, x: Root) =
+    Root(acc.radicand * x.radicand, acc.degree + x.degree)
+
+
+  def upsweep(input: Arr[Int], from: Int, to: Int): TreeRes = {
+    if (to - from < THRESHOLD)
+      Leaf(from, to, reduceSequential(input, from + 1, to, Root(input(from), 1)))
+    else {
+      val mid = from + (to - from)/2
+      val (tL, tR) = parallel(
+        upsweep(input, from, mid),
+        upsweep(input, mid, to)
+      )
+      Node(tL, scanOp(tL.res, tR.res), tR)
+    }
+  }
+
+
+  def downsweep(input: Arr[Int], a0: Root, tree: TreeRes, output: Arr[Double]): Unit = {
+    tree match {
+      case Node(left, _, right) =>
+        parallel(
+          downsweep(input, a0, left, output),
+          downsweep(input, scanOp(a0, left.res), right, output)
+        )
+      case Leaf(from, to, _) =>
+        downsweepSequential(input, from, to, a0, output)
+    }
+  }
+
+
+  def downsweepSequential(input: Arr[Int], from: Int, to: Int, a0: Root, output: Arr[Double]): Unit = {
+    if (from < to) {
+      var i = from
+      var a = a0
+      while (i < to) {
+        a = scanOp(a, Root(input(i), 1))
+        output(i) = a.toDouble
+        i = i + 1
+      }
+    }
+  }
+
+
+  def reduceSequential(input: Arr[Int], from: Int, to: Int, a0: Root): Root = {
+    var a = a0
+    var i = from
+    while (i < to) {
+      a = scanOp(a, Root(input(i), 1))
+      i = i + 1
+    }
+    a
+  }
+}
diff --git a/previous-exams/2021-midterm/m2/src/test/scala/m2/M2Suite.scala b/previous-exams/2021-midterm/m2/src/test/scala/m2/M2Suite.scala
new file mode 100644
index 0000000..a5b3a44
--- /dev/null
+++ b/previous-exams/2021-midterm/m2/src/test/scala/m2/M2Suite.scala
@@ -0,0 +1,175 @@
+package m2
+
+class M2Suite extends munit.FunSuite {
+
+  test("Rolling geometric mean result test (5pts)") {
+    RollingGeoMeanBasicLogicTest.basicTests()
+    RollingGeoMeanBasicLogicTest.normalTests()
+    RollingGeoMeanBasicLogicTest.largeTests()
+  }
+
+  test("[TASK 1] Rolling geometric mean parallelism test (30pts)") {
+    RollingGeoMeanCallsToParallel.parallelismTest()
+    RollingGeoMeanParallel.basicTests()
+    RollingGeoMeanParallel.normalTests()
+    RollingGeoMeanParallel.largeTests()
+  }
+
+  test("[TASK 2] Rolling geometric mean no `map` test (35pts)") {
+    RollingGeoMeanNoMap.basicTests()
+    RollingGeoMeanNoMap.normalTests()
+    RollingGeoMeanNoMap.largeTests()
+  }
+
+  test("[TASK 3] Rolling geometric mean no `tail` test (30pts)") {
+    RollingGeoMeanNoTail.basicTests()
+    RollingGeoMeanNoTail.normalTests()
+    RollingGeoMeanNoTail.largeTests()
+  }
+
+
+  object RollingGeoMeanBasicLogicTest extends M2 with LibImpl with RollingGeoMeanTest {
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = (op1, op2)
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl(arr)
+  }
+
+  object RollingGeoMeanCallsToParallel extends M2 with LibImpl with RollingGeoMeanTest {
+    private var count = 0
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) =
+      count += 1
+      (op1, op2)
+
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl(arr)
+
+    def parallelismTest() = {
+      assertParallelCount(Arr(), 0)
+      assertParallelCount(Arr(1), 0)
+      assertParallelCount(Arr(1, 2, 3, 4), 0)
+      assertParallelCount(Arr(Array.tabulate(16)(identity): _*), 0)
+      assertParallelCount(Arr(Array.tabulate(32)(identity): _*), 0)
+
+      assertParallelCount(Arr(Array.tabulate(33)(identity): _*), 2)
+      assertParallelCount(Arr(Array.tabulate(64)(identity): _*), 2)
+      assertParallelCount(Arr(Array.tabulate(128)(identity): _*), 6)
+      assertParallelCount(Arr(Array.tabulate(256)(identity): _*), 14)
+      assertParallelCount(Arr(Array.tabulate(1000)(identity): _*), 62)
+      assertParallelCount(Arr(Array.tabulate(1024)(identity): _*), 62)
+    }
+
+    def assertParallelCount(arr: Arr[Int], expected: Int): Unit = {
+      try {
+        count = 0
+        rollingGeoMeanParallel(arr)
+        assert(count == expected, {
+          val extra = if (expected == 0) "" else s" ${expected/2} for the `upsweep` and ${expected/2} for the `downsweep`"
+          s"\n$arr\n\nERROR: Expected $expected instead of $count calls to `parallel(...)` for an array of ${arr.length} elements. Current parallel threshold is $THRESHOLD.$extra"
+        })
+      } finally {
+        count = 0
+      }
+    }
+
+  }
+
+  object RollingGeoMeanNoMap extends M2 with LibImpl with RollingGeoMeanTest {
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = (op1, op2)
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl[T](arr) {
+      override def map[U](f: T => U): Arr[U] = throw Exception("Should not call Arr.map")
+    }
+  }
+
+  object RollingGeoMeanNoTail extends M2 with LibImpl with RollingGeoMeanTest {
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = (op1, op2)
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl[T](arr) {
+      override def tail: Arr[T] = throw Exception("Should not call Arr.tail")
+    }
+  }
+
+  object RollingGeoMeanParallel extends M2 with LibImpl with RollingGeoMeanTest {
+    import scala.concurrent.duration._
+    val TIMEOUT = Duration(10, SECONDS)
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = {
+      import concurrent.ExecutionContext.Implicits.global
+      import scala.concurrent._
+      Await.result(Future(op1).zip(Future(op2)), TIMEOUT) // FIXME not timing-out
+    }
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl(arr)
+  }
+
+  trait LibImpl extends Lib {
+
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T]
+
+    def newArrOfLength[T](n: Int): Arr[T] =
+      newArrFrom(new Array(n))
+
+    class ArrImpl[T](val arr: Array[AnyRef]) extends Arr[T]:
+      def apply(i: Int): T =
+        arr(i).asInstanceOf[T]
+      def update(i: Int, x: T): Unit =
+        arr(i) = x.asInstanceOf[AnyRef]
+      def length: Int =
+        arr.length
+      def map[U](f: T => U): Arr[U] =
+        newArrFrom(arr.map(f.asInstanceOf[AnyRef => AnyRef]))
+      def tail: Arr[T] =
+        newArrFrom(arr.tail)
+      override def toString: String =
+        arr.mkString("Arr(", ", ", ")")
+      override def equals(that: Any): Boolean =
+        that match
+          case that: ArrImpl[_] => Array.equals(arr, that.arr)
+          case _ => false
+  }
+
+  trait RollingGeoMeanTest extends M2 {
+
+    def tabulate[T](n: Int)(f: Int => T): Arr[T] =
+      val arr = Arr.ofLength[T](n)
+      for i <- 0 until n do
+        arr(i) = f(i)
+      arr
+
+    def asSeq(arr: Arr[Double]) =
+      val array = new Array[Double](arr.length)
+      for i <- 0 to (arr.length - 1) do
+        array(i) = arr(i)
+      array.toSeq
+
+    def scanOp_(acc: Root, x: Root) =
+      Root(acc.radicand * x.radicand, acc.degree + x.degree)
+
+    def result(ds: Seq[Int]): Arr[Double] =
+      Arr(ds.map(x => Root(x, 1)).scan(Root(1, 0))(scanOp_).tail.map(_.toDouble): _*)
+
+    def check(input: Seq[Int]) =
+      assertEquals(
+        // .toString calls are a terrible kludge so that NaNs compare equal to eachother...
+        asSeq(rollingGeoMeanParallel(Arr(input: _*))).map(_.toString),
+        asSeq(result(input)).map(_.toString)
+      )
+
+    def basicTests() = {
+      check(Seq())
+      check(Seq(1))
+      check(Seq(1, 2, 3, 4))
+      check(Seq(4, 4, 4, 4))
+    }
+
+    def normalTests() = {
+      check(Seq.tabulate(64)(identity))
+      check(Seq(4, 4, 4, 4))
+      check(Seq(4, 8, 6, 4))
+      check(Seq(4, 3, 2, 1))
+      check(Seq.tabulate(64)(identity).reverse)
+      check(Seq.tabulate(128)(i => 128 - 2*i).reverse)
+    }
+
+    def largeTests() = {
+      check(Seq.tabulate(500)(identity))
+      check(Seq.tabulate(512)(identity))
+      check(Seq.tabulate(1_000)(identity))
+      check(Seq.tabulate(10_000)(identity))
+    }
+  }
+}
diff --git a/previous-exams/2021-midterm/m20.md b/previous-exams/2021-midterm/m20.md
new file mode 100644
index 0000000..59f6c09
--- /dev/null
+++ b/previous-exams/2021-midterm/m20.md
@@ -0,0 +1,97 @@
+Use the following commands to make a fresh clone of your repository:
+
+```
+git clone -b m20 git@gitlab.epfl.ch:lamp/student-repositories-s21/cs206-GASPAR.git m20
+```
+
+## Useful links
+
+  * [A guide to the Scala parallel collections](https://docs.scala-lang.org/overviews/parallel-collections/overview.html)
+  * [The API documentation of the Scala parallel collections](https://www.javadoc.io/doc/org.scala-lang.modules/scala-parallel-collections_2.13/latest/scala/collection/index.html)
+  * [The API documentation of the Scala standard library](https://www.scala-lang.org/files/archive/api/2.13.4)
+  * [The API documentation of the Java standard library](https://docs.oracle.com/en/java/javase/15/docs/api/index.html)
+
+**If you have issues with the IDE, try [reimporting the
+build](https://gitlab.epfl.ch/lamp/cs206/-/blob/master/labs/example-lab.md#ide-features-like-type-on-hover-or-go-to-definition-do-not-work),
+if you still have problems, use `compile` in sbt instead.**
+
+## Exercise
+
+In this question, you will complete the definition of two concurrent data
+structures **without using `synchronized`**: `SeqCount` and `MultiWriterSeqCount`.
+
+## Part 1: SeqCount (defined in `SeqCount.scala`)
+
+An instance of this class stores two integers (initially set to 0), the stored
+values can be updated using `write` and retrieved using `copy`. Only one thread
+at a time is allowed to call `write` but multiple threads can call `copy` at
+once.
+
+Your task in this part is to implement `copy` such that this method never
+returns _partially updated values_, for example given two threads operating
+concurrently on a `SeqCount` `sc`:
+```scala
+// Thread 1
+sc.write(1, 2)
+```
+```scala
+// Thread 2
+val result = sc.copy()
+```
+`result` must either be `(0, 0)` (since the initial values are 0) or `(1, 2)`,
+but it must not be `(1, 0)`, `(0, 2)` or any other value.
+
+To successfully implement this method you will need to use `generation`: this
+method returns the current value of a volatile variable which is initially set
+to 0, gets incremented by one at the beginning of `write`, and incremented by
+one again at the end of `write`.
+
+**You are not allowed to use `synchronized` or directly call any of
+`myGeneration`, `myX` or `myY` (use the pre-defined getters and setters
+instead).**
+
+Hints:
+- Remember that a write to a volatile field _happens-before_ every subsequent
+  read of that field.
+- `generation` will always be even when a write has completed and always
+odd when a write is in progress.
+- `copy` can be implemented as a tail-recursive method.
+
+## Part 2: MultiWriterSeqCount (defined in `MultiWriterSeqCount.scala`)
+
+Like `SeqCount`, this class stores two integers updated using `write` and
+retrieved using `copy`, but unlike `SeqCount` multiple threads are allowed to
+call `write` at the same time: these writes will all succeed but they are
+allowed to complete in any order, for example given three threads operating
+concurrently on a `MultiWriterSeqCount` `msc`:
+```scala
+// Thread 1
+msc.write(1, 2)
+```
+```scala
+// Thread 2
+msc.write(10, 20)
+```
+```scala
+// Thread 3
+val result = msc.copy()
+```
+`result` must either be `(0, 0)`, `(1, 2)` or `(10, 20)`.
+
+In this class, the generation is stored in an atomic variable instead of a
+volatible field therefore it's important to note that:
+- a `set` on an atomic variable _happens-before_ every subsequent `get` of that
+  variable.
+- A call to `compareAndSet` both gets and set an atomic variable.
+
+Your task in this part is to implement both `copy` and `write`.
+
+**You are not allowed to use `synchronized` or directly call any of
+`myGeneration`, `myX` or `myY` (use the pre-defined getters and setters
+instead).**
+
+Hints:
+- you should be able to just copy-paste the implementation of `copy` you
+  implemented in Part 1
+- you will need to make use of `compareAndSetGeneration` in `write`
+- `write` can be implemented as a tail-recursive method.
diff --git a/previous-exams/2021-midterm/m20/.gitignore b/previous-exams/2021-midterm/m20/.gitignore
new file mode 100644
index 0000000..40937dc
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/.gitignore
@@ -0,0 +1,22 @@
+# General
+*.DS_Store
+*.swp
+*~
+
+# Dotty
+*.class
+*.tasty
+*.hasTasty
+
+# sbt
+target/
+
+# IDE
+.bsp
+.bloop
+.metals
+.vscode
+
+# datasets
+stackoverflow-grading.csv
+wikipedia-grading.dat
diff --git a/previous-exams/2021-midterm/m20/assignment.sbt b/previous-exams/2021-midterm/m20/assignment.sbt
new file mode 100644
index 0000000..da7eb3c
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/assignment.sbt
@@ -0,0 +1,2 @@
+// Student tasks (i.e. submit, packageSubmission)
+enablePlugins(StudentTasks)
diff --git a/previous-exams/2021-midterm/m20/build.sbt b/previous-exams/2021-midterm/m20/build.sbt
new file mode 100644
index 0000000..8cd8c7a
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/build.sbt
@@ -0,0 +1,12 @@
+course := "midterm"
+assignment := "m20"
+scalaVersion := "3.0.0-RC1"
+scalacOptions ++= Seq("-language:implicitConversions", "-deprecation")
+
+libraryDependencies += "org.scalameta" %% "munit" % "0.7.22"
+
+val MUnitFramework = new TestFramework("munit.Framework")
+testFrameworks += MUnitFramework
+// Decode Scala names
+testOptions += Tests.Argument(MUnitFramework, "-s")
+testSuite := "m20.M20Suite"
diff --git a/previous-exams/2021-midterm/m20/grading-tests.jar b/previous-exams/2021-midterm/m20/grading-tests.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b6bb8fe06564ac4c2bec2396c5dfe7caa3b51e44
GIT binary patch
literal 131660
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

literal 0
HcmV?d00001

diff --git a/previous-exams/2021-midterm/m20/project/FilteringReporterPlugin.scala b/previous-exams/2021-midterm/m20/project/FilteringReporterPlugin.scala
new file mode 100644
index 0000000..2e4fd9a
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/project/FilteringReporterPlugin.scala
@@ -0,0 +1,31 @@
+package sbt // To access the private[sbt] compilerReporter key
+package filteringReporterPlugin
+
+import Keys._
+import ch.epfl.lamp._
+
+object FilteringReporterPlugin extends AutoPlugin {
+  override lazy val projectSettings = Seq(
+    // Turn off warning coming from scalameter that we cannot fix without changing scalameter
+    compilerReporter in (Compile, compile) ~= { reporter => new FilteringReporter(reporter) }
+  )
+}
+
+class FilteringReporter(reporter: xsbti.Reporter) extends xsbti.Reporter {
+
+  def reset(): Unit = reporter.reset()
+  def hasErrors: Boolean = reporter.hasErrors
+  def hasWarnings: Boolean = reporter.hasWarnings
+  def printSummary(): Unit = reporter.printSummary()
+  def problems: Array[xsbti.Problem] = reporter.problems
+
+  def log(problem: xsbti.Problem): Unit = {
+    if (!problem.message.contains("An existential type that came from a Scala-2 classfile cannot be"))
+      reporter.log(problem)
+  }
+
+  def comment(pos: xsbti.Position, msg: String): Unit =
+    reporter.comment(pos, msg)
+
+  override def toString = s"CollectingReporter($reporter)"
+}
diff --git a/previous-exams/2021-midterm/m20/project/MOOCSettings.scala b/previous-exams/2021-midterm/m20/project/MOOCSettings.scala
new file mode 100644
index 0000000..1c40443
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/project/MOOCSettings.scala
@@ -0,0 +1,49 @@
+package ch.epfl.lamp
+
+import sbt._
+import sbt.Keys._
+
+/**
+ * Coursera uses two versions of each assignment. They both have the same assignment key and part id but have
+ * different item ids.
+ *
+ * @param key Assignment key
+ * @param partId Assignment partId
+ * @param itemId Item id of the non premium version
+ * @param premiumItemId Item id of the premium version (`None` if the assignment is optional)
+ */
+case class CourseraId(key: String, partId: String, itemId: String, premiumItemId: Option[String])
+
+/**
+  * Settings shared by all assignments, reused in various tasks.
+  */
+object MOOCSettings extends AutoPlugin {
+
+  override def requires = super.requires && filteringReporterPlugin.FilteringReporterPlugin
+
+  object autoImport {
+    val course = SettingKey[String]("course")
+    val assignment = SettingKey[String]("assignment")
+    val options = SettingKey[Map[String, Map[String, String]]]("options")
+    val courseraId = settingKey[CourseraId]("Coursera-specific information identifying the assignment")
+    val testSuite = settingKey[String]("Fully qualified name of the test suite of this assignment")
+      .withRank(KeyRanks.Invisible)
+    // Convenient alias
+    type CourseraId = ch.epfl.lamp.CourseraId
+    val CourseraId = ch.epfl.lamp.CourseraId
+  }
+
+  import autoImport._
+
+  override val globalSettings: Seq[Def.Setting[_]] = Seq(
+    // supershell is verbose, buggy and useless.
+    useSuperShell := false
+  )
+
+  override val projectSettings: Seq[Def.Setting[_]] = Seq(
+    parallelExecution in Test := false,
+    // Report test result after each test instead of waiting for every test to finish
+    logBuffered in Test := false,
+    name := s"${course.value}-${assignment.value}"
+  )
+}
diff --git a/previous-exams/2021-midterm/m20/project/StudentTasks.scala b/previous-exams/2021-midterm/m20/project/StudentTasks.scala
new file mode 100644
index 0000000..c4669af
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/project/StudentTasks.scala
@@ -0,0 +1,303 @@
+package ch.epfl.lamp
+
+import sbt._
+import Keys._
+
+// import scalaj.http._
+import java.io.{File, FileInputStream, IOException}
+import org.apache.commons.codec.binary.Base64
+// import play.api.libs.json.{Json, JsObject, JsPath}
+import scala.util.{Failure, Success, Try}
+
+/**
+  * Provides tasks for submitting the assignment
+  */
+object StudentTasks extends AutoPlugin {
+
+  override def requires = super.requires && MOOCSettings
+
+  object autoImport {
+    val packageSourcesOnly = TaskKey[File]("packageSourcesOnly", "Package the sources of the project")
+    val packageBinWithoutResources = TaskKey[File]("packageBinWithoutResources", "Like packageBin, but without the resources")
+    val packageSubmissionZip = TaskKey[File]("packageSubmissionZip")
+    val packageSubmission = inputKey[Unit]("package solution as an archive file")
+
+    lazy val Grading = config("grading") extend(Runtime)
+  }
+
+
+  import autoImport._
+  import MOOCSettings.autoImport._
+
+  override lazy val projectSettings = Seq(
+    packageSubmissionSetting,
+    fork := true,
+    connectInput in run := true,
+    outputStrategy := Some(StdoutOutput),
+  ) ++
+    packageSubmissionZipSettings ++
+    inConfig(Grading)(Defaults.testSettings ++ Seq(
+      unmanagedJars += file("grading-tests.jar"),
+
+      definedTests := (definedTests in Test).value,
+      internalDependencyClasspath := (internalDependencyClasspath in Test).value
+    ))
+
+
+  /** **********************************************************
+    * SUBMITTING A SOLUTION TO COURSERA
+    */
+
+  val packageSubmissionZipSettings = Seq(
+    packageSubmissionZip := {
+      val submission = crossTarget.value / "submission.zip"
+      val sources = (packageSourcesOnly in Compile).value
+      val binaries = (packageBinWithoutResources in Compile).value
+      IO.zip(Seq(sources -> "sources.zip", binaries -> "binaries.jar"), submission, None)
+      submission
+    },
+    artifactClassifier in packageSourcesOnly := Some("sources"),
+    artifact in (Compile, packageBinWithoutResources) ~= (art => art.withName(art.name + "-without-resources"))
+  ) ++
+  inConfig(Compile)(
+    Defaults.packageTaskSettings(packageSourcesOnly, Defaults.sourceMappings) ++
+    Defaults.packageTaskSettings(packageBinWithoutResources, Def.task {
+      val relativePaths =
+        (unmanagedResources in Compile).value.flatMap(Path.relativeTo((unmanagedResourceDirectories in Compile).value)(_))
+      (mappings in (Compile, packageBin)).value.filterNot { case (_, path) => relativePaths.contains(path) }
+    })
+  )
+
+  val maxSubmitFileSize = {
+    val mb = 1024 * 1024
+    10 * mb
+  }
+
+  /** Check that the jar exists, isn't empty, isn't crazy big, and can be read
+    * If so, encode jar as base64 so we can send it to Coursera
+    */
+  def prepareJar(jar: File, s: TaskStreams): String = {
+    val errPrefix = "Error submitting assignment jar: "
+    val fileLength = jar.length()
+    if (!jar.exists()) {
+      s.log.error(errPrefix + "jar archive does not exist\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength == 0L) {
+      s.log.error(errPrefix + "jar archive is empty\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength > maxSubmitFileSize) {
+      s.log.error(errPrefix + "jar archive is too big. Allowed size: " +
+        maxSubmitFileSize + " bytes, found " + fileLength + " bytes.\n" +
+        jar.getAbsolutePath)
+      failSubmit()
+    } else {
+      val bytes = new Array[Byte](fileLength.toInt)
+      val sizeRead = try {
+        val is = new FileInputStream(jar)
+        val read = is.read(bytes)
+        is.close()
+        read
+      } catch {
+        case ex: IOException =>
+          s.log.error(errPrefix + "failed to read sources jar archive\n" + ex.toString)
+          failSubmit()
+      }
+      if (sizeRead != bytes.length) {
+        s.log.error(errPrefix + "failed to read the sources jar archive, size read: " + sizeRead)
+        failSubmit()
+      } else encodeBase64(bytes)
+    }
+  }
+
+  /** Task to package solution to a given file path */
+  lazy val packageSubmissionSetting = packageSubmission := {
+    val args: Seq[String] = Def.spaceDelimited("[path]").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val base64Jar = prepareJar(jar, s)
+
+    val path = args.headOption.getOrElse((baseDirectory.value / "submission.jar").absolutePath)
+    scala.tools.nsc.io.File(path).writeAll(base64Jar)
+  }
+
+/*
+  /** Task to submit a solution to coursera */
+  val submit = inputKey[Unit]("submit solution to Coursera")
+  lazy val submitSetting = submit := {
+    // Fail if scalafix linting does not pass.
+    scalafixLinting.value
+
+    val args: Seq[String] = Def.spaceDelimited("<arg>").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val assignmentDetails =
+      courseraId.?.value.getOrElse(throw new MessageOnlyException("This assignment can not be submitted to Coursera because the `courseraId` setting is undefined"))
+    val assignmentKey = assignmentDetails.key
+    val courseName =
+      course.value match {
+        case "capstone" => "scala-capstone"
+        case "bigdata"  => "scala-spark-big-data"
+        case other      => other
+      }
+
+    val partId = assignmentDetails.partId
+    val itemId = assignmentDetails.itemId
+    val premiumItemId = assignmentDetails.premiumItemId
+
+    val (email, secret) = args match {
+      case email :: secret :: Nil =>
+        (email, secret)
+      case _ =>
+        val inputErr =
+          s"""|Invalid input to `submit`. The required syntax for `submit` is:
+              |submit <email-address> <submit-token>
+              |
+              |The submit token is NOT YOUR LOGIN PASSWORD.
+              |It can be obtained from the assignment page:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId
+              |${
+                premiumItemId.fold("") { id =>
+                  s"""or (for premium learners):
+                     |https://www.coursera.org/learn/$courseName/programming/$id
+                   """.stripMargin
+                }
+              }
+          """.stripMargin
+        s.log.error(inputErr)
+        failSubmit()
+    }
+
+    val base64Jar = prepareJar(jar, s)
+    val json =
+      s"""|{
+          |   "assignmentKey":"$assignmentKey",
+          |   "submitterEmail":"$email",
+          |   "secret":"$secret",
+          |   "parts":{
+          |      "$partId":{
+          |         "output":"$base64Jar"
+          |      }
+          |   }
+          |}""".stripMargin
+
+    def postSubmission[T](data: String): Try[HttpResponse[String]] = {
+      val http = Http("https://www.coursera.org/api/onDemandProgrammingScriptSubmissions.v1")
+      val hs = List(
+        ("Cache-Control", "no-cache"),
+        ("Content-Type", "application/json")
+      )
+      s.log.info("Connecting to Coursera...")
+      val response = Try(http.postData(data)
+                         .headers(hs)
+                         .option(HttpOptions.connTimeout(10000)) // scalaj default timeout is only 100ms, changing that to 10s
+                         .asString) // kick off HTTP POST
+      response
+    }
+
+    val connectMsg =
+      s"""|Attempting to submit "${assignment.value}" assignment in "$courseName" course
+          |Using:
+          |- email: $email
+          |- submit token: $secret""".stripMargin
+    s.log.info(connectMsg)
+
+    def reportCourseraResponse(response: HttpResponse[String]): Unit = {
+      val code = response.code
+      val respBody = response.body
+
+       /* Sample JSON response from Coursera
+      {
+        "message": "Invalid email or token.",
+        "details": {
+          "learnerMessage": "Invalid email or token."
+        }
+      }
+      */
+
+      // Success, Coursera responds with 2xx HTTP status code
+      if (response.is2xx) {
+        val successfulSubmitMsg =
+          s"""|Successfully connected to Coursera. (Status $code)
+              |
+                |Assignment submitted successfully!
+              |
+                |You can see how you scored by going to:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId/
+              |${
+            premiumItemId.fold("") { id =>
+              s"""or (for premium learners):
+                 |https://www.coursera.org/learn/$courseName/programming/$id
+                       """.stripMargin
+            }
+          }
+              |and clicking on "My Submission".""".stripMargin
+        s.log.info(successfulSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 4xx HTTP status code (client-side failure)
+      else if (response.is4xx) {
+        val result = Try(Json.parse(respBody)).toOption
+        val learnerMsg = result match {
+          case Some(resp: JsObject) =>
+            (JsPath \ "details" \ "learnerMessage").read[String].reads(resp).get
+          case Some(x) => // shouldn't happen
+            "Could not parse Coursera's response:\n" + x
+          case None =>
+            "Could not parse Coursera's response:\n" + respBody
+        }
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |There was something wrong while attempting to submit.
+              |Coursera says:
+              |$learnerMsg (Status $code)""".stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 5xx HTTP status code (server-side failure)
+      else if (response.is5xx) {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera seems to be unavailable at the moment (Status $code)
+              |Check https://status.coursera.org/ and try again in a few minutes.
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera repsonds with an unexpected status code
+      else {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera replied with an unexpected code (Status $code)
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+    }
+
+    // kick it all off, actually make request
+    postSubmission(json) match {
+      case Success(resp) => reportCourseraResponse(resp)
+      case Failure(e) =>
+        val failedConnectMsg =
+          s"""|Connection to Coursera failed.
+              |There was something wrong while attempting to connect to Coursera.
+              |Check your internet connection.
+              |${e.toString}""".stripMargin
+        s.log.error(failedConnectMsg)
+    }
+
+   }
+*/
+
+  def failSubmit(): Nothing = {
+    sys.error("Submission failed")
+  }
+
+  /**
+    * *****************
+    * DEALING WITH JARS
+    */
+  def encodeBase64(bytes: Array[Byte]): String =
+    new String(Base64.encodeBase64(bytes))
+}
diff --git a/previous-exams/2021-midterm/m20/project/build.properties b/previous-exams/2021-midterm/m20/project/build.properties
new file mode 100644
index 0000000..0b2e09c
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/project/build.properties
@@ -0,0 +1 @@
+sbt.version=1.4.7
diff --git a/previous-exams/2021-midterm/m20/project/buildSettings.sbt b/previous-exams/2021-midterm/m20/project/buildSettings.sbt
new file mode 100644
index 0000000..8fac702
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/project/buildSettings.sbt
@@ -0,0 +1,5 @@
+// Used for Coursera submission (StudentPlugin)
+// libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.4.2"
+// libraryDependencies += "com.typesafe.play" %% "play-json" % "2.7.4"
+// Used for Base64 (StudentPlugin)
+libraryDependencies += "commons-codec" % "commons-codec" % "1.10"
diff --git a/previous-exams/2021-midterm/m20/project/plugins.sbt b/previous-exams/2021-midterm/m20/project/plugins.sbt
new file mode 100644
index 0000000..021c019
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/project/plugins.sbt
@@ -0,0 +1,2 @@
+// addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")
+addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.3")
diff --git a/previous-exams/2021-midterm/m20/src/main/scala/m20/MultiWriterSeqCount.scala b/previous-exams/2021-midterm/m20/src/main/scala/m20/MultiWriterSeqCount.scala
new file mode 100644
index 0000000..89df220
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/src/main/scala/m20/MultiWriterSeqCount.scala
@@ -0,0 +1,66 @@
+package m20
+
+import instrumentation._
+
+import scala.annotation.tailrec
+
+/** Multi-writer, multi-reader data structure containing a pair of integers. */
+class MultiWriterSeqCount extends Monitor:
+  /** Do not directly use this variable, use `generation`, `setGeneration` and
+   *  `compareAndSetGeneration` instead.
+   */
+  protected val myGeneration: AbstractAtomicVariable[Int] = new AtomicVariable(0)
+  protected def generation: Int = myGeneration.get
+  protected def setGeneration(newGeneration: Int): Unit =
+    myGeneration.set(newGeneration)
+  protected def compareAndSetGeneration(expected: Int, newValue: Int): Boolean =
+    myGeneration.compareAndSet(expected, newValue)
+
+  /** Do not directly use this variable, use `x` and `setX` instead. */
+  protected var myX: Int = 0
+  protected def x: Int = myX
+  protected def setX(newX: Int): Unit =
+    myX = newX
+
+  /** Do not directly use this variable, use `y` and `setY` instead. */
+  protected var myY: Int = 0
+  protected def y: Int = myY
+  protected def setY(newY: Int): Unit =
+    myY = newY
+
+  /** Write new values into this data structure.
+   *  This method is always safe to call.
+   *  The implementation of this method is not allowed to call `synchronized`.
+   */
+
+  @tailrec
+  final def write(newX: Int, newY: Int): Unit =
+    val old = generation
+    if old % 2 != 0 then
+      write(newX, newY)
+    else
+      if !compareAndSetGeneration(old, old + 1) then
+        write(newX, newY)
+      else
+        setX(newX)
+        setY(newY)
+        setGeneration(old + 2)
+
+  /** Copy the values previously written into this data structure into a tuple.
+   *  This method is always safe to call.
+   *  The implementation of this method is not allowed to call `synchronized`.
+   */
+
+  @tailrec
+  final def copy(): (Int, Int) =
+    val old = generation
+    if old % 2 != 0 then
+      copy()
+    else
+      val result = (x, y)
+      if generation != old then
+        copy()
+      else
+        result
+
+end MultiWriterSeqCount
diff --git a/previous-exams/2021-midterm/m20/src/main/scala/m20/SeqCount.scala b/previous-exams/2021-midterm/m20/src/main/scala/m20/SeqCount.scala
new file mode 100644
index 0000000..ff95a2c
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/src/main/scala/m20/SeqCount.scala
@@ -0,0 +1,53 @@
+package m20
+
+import instrumentation._
+
+import scala.annotation.tailrec
+
+/** Single-writer, multi-reader data structure containing a pair of integers. */
+class SeqCount extends Monitor:
+  /** Do not directly use this variable, use `generation` and `setGeneration` instead. */
+  @volatile protected var myGeneration: Int = 0
+  protected def generation: Int = myGeneration
+  protected def setGeneration(newGeneration: Int): Unit =
+    myGeneration = newGeneration
+
+  /** Do not directly use this variable, use `x` and `setX` instead. */
+  protected var myX: Int = 0
+  protected def x: Int = myX
+  protected def setX(newX: Int): Unit =
+    myX = newX
+
+  /** Do not directly use this variable, use `y` and `setY` instead. */
+  protected var myY: Int = 0
+  protected def y: Int = myY
+  protected def setY(newY: Int): Unit =
+    myY = newY
+
+  /** Write new values into this data structure.
+   *  This method must only be called from one thread at a time.
+   */
+  final def write(newX: Int, newY: Int): Unit =
+    setGeneration(generation + 1)
+    setX(newX)
+    setY(newY)
+    setGeneration(generation + 1)
+
+  /** Copy the values previously written into this data structure into a tuple.
+   *  This method is always safe to call.
+   *  The implementation of this method is not allowed to call `synchronized`.
+   */
+
+  @tailrec
+  final def copy(): (Int, Int) =
+    val old = generation
+    if old % 2 != 0 then
+      copy()
+    else
+      val result = (x, y)
+      if generation != old then
+        copy()
+      else
+        result
+
+end SeqCount
diff --git a/previous-exams/2021-midterm/m20/src/main/scala/m20/instrumentation/AtomicVariable.scala b/previous-exams/2021-midterm/m20/src/main/scala/m20/instrumentation/AtomicVariable.scala
new file mode 100644
index 0000000..b966283
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/src/main/scala/m20/instrumentation/AtomicVariable.scala
@@ -0,0 +1,28 @@
+package m20.instrumentation
+
+import java.util.concurrent.atomic._
+
+abstract class AbstractAtomicVariable[T] {
+  def get: T
+  def set(value: T): Unit
+  def compareAndSet(expect: T, newval: T) : Boolean
+}
+
+class AtomicVariable[T](initial: T) extends AbstractAtomicVariable[T] {
+
+  private val atomic = new AtomicReference[T](initial)
+
+  override def get: T = atomic.get()
+
+  override def set(value: T): Unit = atomic.set(value)
+
+  override def compareAndSet(expected: T, newValue: T): Boolean = {
+    val current = atomic.get
+    if (current == expected) {
+      atomic.compareAndSet(current, newValue)
+    }
+    else {
+      false
+    }
+  }
+}
diff --git a/previous-exams/2021-midterm/m20/src/main/scala/m20/instrumentation/Monitor.scala b/previous-exams/2021-midterm/m20/src/main/scala/m20/instrumentation/Monitor.scala
new file mode 100644
index 0000000..bf844ac
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/src/main/scala/m20/instrumentation/Monitor.scala
@@ -0,0 +1,23 @@
+package m20.instrumentation
+
+class Dummy
+
+trait Monitor {
+  implicit val dummy: Dummy = new Dummy
+
+  def wait()(implicit i: Dummy) = waitDefault()
+
+  def synchronized[T](e: => T)(implicit i: Dummy) = synchronizedDefault(e)
+
+  def notify()(implicit i: Dummy) = notifyDefault()
+
+  def notifyAll()(implicit i: Dummy) = notifyAllDefault()
+
+  private val lock = new AnyRef
+
+  // Can be overriden.
+  def waitDefault(): Unit = lock.wait()
+  def synchronizedDefault[T](toExecute: =>T): T = lock.synchronized(toExecute)
+  def notifyDefault(): Unit = lock.notify()
+  def notifyAllDefault(): Unit = lock.notifyAll()
+}
diff --git a/previous-exams/2021-midterm/m20/src/test/scala/m20/TestSuite.scala b/previous-exams/2021-midterm/m20/src/test/scala/m20/TestSuite.scala
new file mode 100644
index 0000000..14e707c
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/src/test/scala/m20/TestSuite.scala
@@ -0,0 +1,122 @@
+package m20
+
+import scala.concurrent._
+import scala.concurrent.duration._
+import scala.collection.mutable.HashMap
+import scala.util.Random
+import instrumentation._
+import instrumentation.TestHelper._
+import instrumentation.TestUtils._
+
+enum ThreadResult:
+  case WriteError(error: String)
+  case WriteSuccess
+  case Read(result: (Int, Int))
+import ThreadResult._
+
+class M20Suite extends munit.FunSuite:
+  /** If at least one thread resulted in an error,
+   *  return `(false, errorMessage)` otherwise return `(true, "")`.
+   */
+  def processResults(results: List[ThreadResult]): (Boolean, String) =
+    val success = (true, "")
+    results.foldLeft(success) {
+      case (acc @ (false, _), _) =>
+        // Report the first error found
+        acc
+      case (_, WriteError(error)) =>
+        (false, error)
+      case (_, Read((x, y))) if x + 1 != y =>
+        (false, s"Read ($x, $y) but expected y to be ${x + 1}")
+      case (_, _: Read | WriteSuccess) =>
+        success
+    }
+
+  def randomList(length: Int): List[Int] =
+    List.fill(length)(Random.nextInt)
+
+  test("SeqCount: single-threaded write and copy (1 pts)") {
+    val sc = new SeqCount
+    randomList(100).lazyZip(randomList(100)).foreach { (x, y) =>
+      sc.write(x, y)
+      assertEquals(sc.copy(), (x, y))
+    }
+  }
+
+  test("SeqCount: one write thread, two copy threads (4 pts)") {
+    testManySchedules(3, sched =>
+      val sc = new SchedulableSeqCount(sched)
+      // Invariant in this test: y == x + 1
+      sc.write(0, 1)
+
+      val randomValues = randomList(length = 5)
+
+      def writeThread(): ThreadResult =
+        randomValues.foldLeft(WriteSuccess) {
+          case (res: WriteError, _) =>
+            // Report the first error found
+            res
+          case (_, i) =>
+            sc.write(i, i + 1)
+            val writtenValues = (i, i + 1)
+            val readBack = sc.copy()
+            if writtenValues != readBack then
+              WriteError(s"Wrote $writtenValues but read back $readBack")
+            else
+              WriteSuccess
+        }
+
+      def copyThread(): ThreadResult =
+        Read(sc.copy())
+
+      val threads = List(
+        () => writeThread(),
+        () => copyThread(),
+        () => copyThread()
+      )
+
+      (threads, results => processResults(results.asInstanceOf[List[ThreadResult]]))
+    )
+  }
+
+  test("MultiWriterSeqCount: single-threaded write and copy (1 pts)") {
+    val sc = new MultiWriterSeqCount
+    randomList(100).lazyZip(randomList(100)).foreach { (x, y) =>
+      sc.write(x, y)
+      assertEquals(sc.copy(), (x, y))
+    }
+  }
+
+  test("MultiWriterSeqCount: two write threads, two copy threads (4 pts)") {
+    testManySchedules(4, sched =>
+      val msc = new SchedulableMultiWriterSeqCount(sched)
+      // Invariant in this test: y == x + 1
+      msc.write(0, 1)
+
+      val randomValues = randomList(length = 5)
+
+      def writeThread(): ThreadResult =
+        randomValues.foreach(i => msc.write(i, i + 1))
+        // Unlke in the SeqCount test, we do not verify that we can read back
+        // the values we wrote, because the other writer thread might have
+        // overwritten them already.
+        WriteSuccess
+
+      def copyThread(): ThreadResult =
+        Read(msc.copy())
+
+      val threads = List(
+        () => writeThread(),
+        () => writeThread(),
+        () => copyThread(),
+        () => copyThread()
+      )
+
+      (threads, results => processResults(results.asInstanceOf[List[ThreadResult]]))
+    )
+  }
+
+  import scala.concurrent.duration._
+  override val munitTimeout = 200.seconds
+end M20Suite
+
diff --git a/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/MockedMonitor.scala b/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/MockedMonitor.scala
new file mode 100644
index 0000000..0b7e94f
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/MockedMonitor.scala
@@ -0,0 +1,72 @@
+package m20.instrumentation
+
+trait MockedMonitor extends Monitor {
+  def scheduler: Scheduler
+  
+  // Can be overriden.
+  override def waitDefault() = {
+    scheduler.log("wait")
+    scheduler updateThreadState Wait(this, scheduler.threadLocks.tail)
+  }
+  override def synchronizedDefault[T](toExecute: =>T): T = {
+    scheduler.log("synchronized check") 
+    val prevLocks = scheduler.threadLocks
+    scheduler updateThreadState Sync(this, prevLocks) // If this belongs to prevLocks, should just continue.
+    scheduler.log("synchronized -> enter")
+    try {
+      toExecute
+    } finally {
+      scheduler updateThreadState Running(prevLocks)
+      scheduler.log("synchronized -> out")
+    }    
+  }
+  override def notifyDefault() = {
+    scheduler mapOtherStates {
+      state => state match {
+        case Wait(lockToAquire, locks) if lockToAquire == this => SyncUnique(this, state.locks)
+        case e => e
+      }
+    }
+    scheduler.log("notify")
+  }
+  override def notifyAllDefault() = {
+    scheduler mapOtherStates {
+      state => state match {
+        case Wait(lockToAquire, locks) if lockToAquire == this => Sync(this, state.locks)
+        case SyncUnique(lockToAquire, locks) if lockToAquire == this => Sync(this, state.locks)
+        case e => e
+      }
+    }
+    scheduler.log("notifyAll")
+  }
+}
+
+trait LockFreeMonitor extends Monitor {
+  override def waitDefault() = {
+    throw new Exception("Please use lock-free structures and do not use wait()")
+  }
+  override def synchronizedDefault[T](toExecute: =>T): T = {
+    throw new Exception("Please use lock-free structures and do not use synchronized()")
+  }
+  override def notifyDefault() = {
+    throw new Exception("Please use lock-free structures and do not use notify()")
+  }
+  override def notifyAllDefault() = {
+    throw new Exception("Please use lock-free structures and do not use notifyAll()")
+  }
+}
+
+
+abstract class ThreadState {
+  def locks: Seq[AnyRef]
+}
+trait CanContinueIfAcquiresLock extends ThreadState {
+  def lockToAquire: AnyRef
+}
+case object Start extends ThreadState { def locks: Seq[AnyRef] = Seq.empty }
+case object End extends ThreadState { def locks: Seq[AnyRef] = Seq.empty }
+case class Wait(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState
+case class SyncUnique(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState with CanContinueIfAcquiresLock
+case class Sync(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState with CanContinueIfAcquiresLock
+case class Running(locks: Seq[AnyRef]) extends ThreadState
+case class VariableReadWrite(locks: Seq[AnyRef]) extends ThreadState
diff --git a/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/Scheduler.scala b/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/Scheduler.scala
new file mode 100644
index 0000000..bdc09b5
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/Scheduler.scala
@@ -0,0 +1,304 @@
+package m20.instrumentation
+
+import java.util.concurrent._;
+import scala.concurrent.duration._
+import scala.collection.mutable._
+import Stats._
+
+import java.util.concurrent.atomic.AtomicInteger
+
+sealed abstract class Result
+case class RetVal(rets: List[Any]) extends Result
+case class Except(msg: String, stackTrace: Array[StackTraceElement]) extends Result
+case class Timeout(msg: String) extends Result
+
+/**
+ * A class that maintains schedule and a set of thread ids.
+ * The schedules are advanced after an operation of a SchedulableBuffer is performed.
+ * Note: the real schedule that is executed may deviate from the input schedule
+ * due to the adjustments that had to be made for locks
+ */
+class Scheduler(sched: List[Int]) {
+  val maxOps = 500 // a limit on the maximum number of operations the code is allowed to perform
+
+  private var schedule = sched
+  private var numThreads = 0
+  private val realToFakeThreadId = Map[Long, Int]()
+  private val opLog = ListBuffer[String]() // a mutable list (used for efficient concat)
+  private val threadStates = Map[Int, ThreadState]()
+
+  /**
+   * Runs a set of operations in parallel as per the schedule.
+   * Each operation may consist of many primitive operations like reads or writes
+   * to shared data structure each of which should be executed using the function `exec`.
+   * @timeout in milliseconds
+   * @return true - all threads completed on time,  false -some tests timed out.
+   */
+  def runInParallel(timeout: Long, ops: List[() => Any]): Result = {
+    numThreads = ops.length
+    val threadRes = Array.fill(numThreads) { None: Any }
+    var exception: Option[Except] = None
+    val syncObject = new Object()
+    var completed = new AtomicInteger(0)
+    // create threads
+    val threads = ops.zipWithIndex.map {
+      case (op, i) =>
+        new Thread(new Runnable() {
+          def run(): Unit = {
+            val fakeId = i + 1
+            setThreadId(fakeId)
+            try {
+              updateThreadState(Start)
+              val res = op()
+              updateThreadState(End)
+              threadRes(i) = res
+              // notify the master thread if all threads have completed
+              if (completed.incrementAndGet() == ops.length) {
+                syncObject.synchronized { syncObject.notifyAll() }
+              }
+            } catch {
+              case e: Throwable if exception != None => // do nothing here and silently fail
+              case e: Throwable =>
+                log(s"throw ${e.toString}")
+                exception = Some(Except(s"Thread $fakeId crashed on the following schedule: \n" + opLog.mkString("\n"),
+                    e.getStackTrace))
+                syncObject.synchronized { syncObject.notifyAll() }
+              //println(s"$fakeId: ${e.toString}")
+              //Runtime.getRuntime().halt(0) //exit the JVM and all running threads (no other way to kill other threads)
+            }
+          }
+        })
+    }
+    // start all threads
+    threads.foreach(_.start())
+    // wait for all threads to complete, or for an exception to be thrown, or for the time out to expire
+    var remTime = timeout
+    syncObject.synchronized {
+      timed { if(completed.get() != ops.length) syncObject.wait(timeout) } { time => remTime -= time }
+    }
+    if (exception.isDefined) {
+      exception.get
+    } else if (remTime <= 1) { // timeout ? using 1 instead of zero to allow for some errors
+      Timeout(opLog.mkString("\n"))
+    } else {
+      // every thing executed normally
+      RetVal(threadRes.toList)
+    }
+  }
+
+  // Updates the state of the current thread
+  def updateThreadState(state: ThreadState): Unit = {
+    val tid = threadId
+    synchronized {
+      threadStates(tid) = state
+    }
+    state match {
+      case Sync(lockToAquire, locks) =>
+        if (locks.indexOf(lockToAquire) < 0) waitForTurn else {
+          // Re-aqcuiring the same lock
+          updateThreadState(Running(lockToAquire +: locks))
+        }
+      case Start      => waitStart()
+      case End        => removeFromSchedule(tid)
+      case Running(_) =>
+      case _          => waitForTurn // Wait, SyncUnique, VariableReadWrite
+    }
+  }
+
+  def waitStart(): Unit = {
+    //while (threadStates.size < numThreads) {
+    //Thread.sleep(1)
+    //}
+    synchronized {
+      if (threadStates.size < numThreads) {
+        wait()
+      } else {
+        notifyAll()
+      }
+    }
+  }
+
+  def threadLocks = {
+    synchronized {
+      threadStates(threadId).locks
+    }
+  }
+
+  def threadState = {
+    synchronized {
+      threadStates(threadId)
+    }
+  }
+
+  def mapOtherStates(f: ThreadState => ThreadState) = {
+    val exception = threadId
+    synchronized {
+      for (k <- threadStates.keys if k != exception) {
+        threadStates(k) = f(threadStates(k))
+      }
+    }
+  }
+
+  def log(str: String) = {
+    if((realToFakeThreadId contains Thread.currentThread().getId())) {
+      val space = (" " * ((threadId - 1) * 2))
+      val s = space + threadId + ":" + "\n".r.replaceAllIn(str, "\n" + space + "  ")
+      opLog += s
+    }
+  }
+
+  /**
+   * Executes a read or write operation to a global data structure as per the given schedule
+   * @param msg a message corresponding to the operation that will be logged
+   */
+  def exec[T](primop: => T)(msg: => String, postMsg: => Option[T => String] = None): T = {
+    if(! (realToFakeThreadId contains Thread.currentThread().getId())) {
+      primop
+    } else {
+      updateThreadState(VariableReadWrite(threadLocks))
+      val m = msg
+      if(m != "") log(m)
+      if (opLog.size > maxOps)
+        throw new Exception(s"Total number of reads/writes performed by threads exceed $maxOps. A possible deadlock!")
+      val res = primop
+      postMsg match {
+        case Some(m) => log(m(res))
+        case None =>
+      }
+      res
+    }
+  }
+
+  private def setThreadId(fakeId: Int) = synchronized {
+    realToFakeThreadId(Thread.currentThread.getId) = fakeId
+  }
+
+  def threadId =
+    try {
+      realToFakeThreadId(Thread.currentThread().getId())
+    } catch {
+    case e: NoSuchElementException =>
+      throw new Exception("You are accessing shared variables in the constructor. This is not allowed. The variables are already initialized!")
+    }
+
+  private def isTurn(tid: Int) = synchronized {
+    (!schedule.isEmpty && schedule.head != tid)
+  }
+
+  def canProceed(): Boolean = {
+    val tid = threadId
+    canContinue match {
+      case Some((i, state)) if i == tid =>
+        //println(s"$tid: Runs ! Was in state $state")
+        canContinue = None
+        state match {
+          case Sync(lockToAquire, locks) => updateThreadState(Running(lockToAquire +: locks))
+          case SyncUnique(lockToAquire, locks) =>
+            mapOtherStates {
+              _ match {
+                case SyncUnique(lockToAquire2, locks2) if lockToAquire2 == lockToAquire => Wait(lockToAquire2, locks2)
+                case e => e
+              }
+            }
+            updateThreadState(Running(lockToAquire +: locks))
+          case VariableReadWrite(locks) => updateThreadState(Running(locks))
+        }
+        true
+      case Some((i, state)) =>
+        //println(s"$tid: not my turn but $i !")
+        false
+      case None =>
+        false
+    }
+  }
+
+  var threadPreference = 0 // In the case the schedule is over, which thread should have the preference to execute.
+
+  /** returns true if the thread can continue to execute, and false otherwise */
+  def decide(): Option[(Int, ThreadState)] = {
+    if (!threadStates.isEmpty) { // The last thread who enters the decision loop takes the decision.
+      //println(s"$threadId: I'm taking a decision")
+      if (threadStates.values.forall { case e: Wait => true case _ => false }) {
+        val waiting = threadStates.keys.map(_.toString).mkString(", ")
+        val s = if (threadStates.size > 1) "s" else ""
+        val are = if (threadStates.size > 1) "are" else "is"
+        throw new Exception(s"Deadlock: Thread$s $waiting $are waiting but all others have ended and cannot notify them.")
+      } else {
+        // Threads can be in Wait, Sync, SyncUnique, and VariableReadWrite mode.
+        // Let's determine which ones can continue.
+        val notFree = threadStates.collect { case (id, state) => state.locks }.flatten.toSet
+        val threadsNotBlocked = threadStates.toSeq.filter {
+          case (id, v: VariableReadWrite)         => true
+          case (id, v: CanContinueIfAcquiresLock) => !notFree(v.lockToAquire) || (v.locks contains v.lockToAquire)
+          case _                                  => false
+        }
+        if (threadsNotBlocked.isEmpty) {
+          val waiting = threadStates.keys.map(_.toString).mkString(", ")
+          val s = if (threadStates.size > 1) "s" else ""
+          val are = if (threadStates.size > 1) "are" else "is"
+          val whoHasLock = threadStates.toSeq.flatMap { case (id, state) => state.locks.map(lock => (lock, id)) }.toMap
+          val reason = threadStates.collect {
+            case (id, state: CanContinueIfAcquiresLock) if !notFree(state.lockToAquire) =>
+              s"Thread $id is waiting on lock ${state.lockToAquire} held by thread ${whoHasLock(state.lockToAquire)}"
+          }.mkString("\n")
+          throw new Exception(s"Deadlock: Thread$s $waiting are interlocked. Indeed:\n$reason")
+        } else if (threadsNotBlocked.size == 1) { // Do not consume the schedule if only one thread can execute.
+          Some(threadsNotBlocked(0))
+        } else {
+          val next = schedule.indexWhere(t => threadsNotBlocked.exists { case (id, state) => id == t })
+          if (next != -1) {
+            //println(s"$threadId: schedule is $schedule, next chosen is ${schedule(next)}")
+            val chosenOne = schedule(next) // TODO: Make schedule a mutable list.
+            schedule = schedule.take(next) ++ schedule.drop(next + 1)
+            Some((chosenOne, threadStates(chosenOne)))
+          } else {
+            threadPreference = (threadPreference + 1) % threadsNotBlocked.size
+            val chosenOne = threadsNotBlocked(threadPreference) // Maybe another strategy
+            Some(chosenOne)
+            //threadsNotBlocked.indexOf(threadId) >= 0
+            /*
+            val tnb = threadsNotBlocked.map(_._1).mkString(",")
+            val s = if (schedule.isEmpty) "empty" else schedule.mkString(",")
+            val only = if (schedule.isEmpty) "" else " only"
+            throw new Exception(s"The schedule is $s but$only threads ${tnb} can continue")*/
+          }
+        }
+      }
+    } else canContinue
+  }
+
+  /**
+   * This will be called before a schedulable operation begins.
+   * This should not use synchronized
+   */
+  var numThreadsWaiting = new AtomicInteger(0)
+  //var waitingForDecision = Map[Int, Option[Int]]() // Mapping from thread ids to a number indicating who is going to make the choice.
+  var canContinue: Option[(Int, ThreadState)] = None // The result of the decision thread Id of the thread authorized to continue.
+  private def waitForTurn = {
+    synchronized {
+      if (numThreadsWaiting.incrementAndGet() == threadStates.size) {
+        canContinue = decide()
+        notifyAll()
+      }
+      //waitingForDecision(threadId) = Some(numThreadsWaiting)
+      //println(s"$threadId Entering waiting with ticket number $numThreadsWaiting/${waitingForDecision.size}")
+      while (!canProceed()) wait()
+    }
+    numThreadsWaiting.decrementAndGet()
+  }
+
+  /**
+   * To be invoked when a thread is about to complete
+   */
+  private def removeFromSchedule(fakeid: Int) = synchronized {
+    //println(s"$fakeid: I'm taking a decision because I finished")
+    schedule = schedule.filterNot(_ == fakeid)
+    threadStates -= fakeid
+    if (numThreadsWaiting.get() == threadStates.size) {
+      canContinue = decide()
+      notifyAll()
+    }
+  }
+
+  def getOperationLog() = opLog
+}
diff --git a/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/Stats.scala b/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/Stats.scala
new file mode 100644
index 0000000..e38dd2a
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/Stats.scala
@@ -0,0 +1,23 @@
+/* Copyright 2009-2015 EPFL, Lausanne */
+package m20.instrumentation
+
+import java.lang.management._
+
+/**
+ * A collection of methods that can be used to collect run-time statistics about Leon programs.
+ * This is mostly used to test the resources properties of Leon programs
+ */
+object Stats {
+  def timed[T](code: => T)(cont: Long => Unit): T = {
+    var t1 = System.currentTimeMillis()
+    val r = code
+    cont((System.currentTimeMillis() - t1))
+    r
+  }
+
+  def withTime[T](code: => T): (T, Long) = {
+    var t1 = System.currentTimeMillis()
+    val r = code
+    (r, (System.currentTimeMillis() - t1))
+  }
+}
diff --git a/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/TestHelper.scala b/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/TestHelper.scala
new file mode 100644
index 0000000..b361ded
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/TestHelper.scala
@@ -0,0 +1,124 @@
+package m20.instrumentation
+
+import scala.util.Random
+import scala.collection.mutable.{Map => MutableMap}
+
+import Stats._
+
+object TestHelper {
+  val noOfSchedules = 10000 // set this to 100k during deployment
+  val readWritesPerThread = 20 // maximum number of read/writes possible in one thread
+  val contextSwitchBound = 10
+  val testTimeout = 150 // the total time out for a test in seconds
+  val schedTimeout = 15 // the total time out for execution of a schedule in secs
+
+  // Helpers
+  /*def testManySchedules(op1: => Any): Unit = testManySchedules(List(() => op1))
+  def testManySchedules(op1: => Any, op2: => Any): Unit = testManySchedules(List(() => op1, () => op2))
+  def testManySchedules(op1: => Any, op2: => Any, op3: => Any): Unit = testManySchedules(List(() => op1, () => op2, () => op3))
+  def testManySchedules(op1: => Any, op2: => Any, op3: => Any, op4: => Any): Unit = testManySchedules(List(() => op1, () => op2, () => op3, () => op4))*/
+
+  def testSequential[T](ops: Scheduler => Any)(assertions: T => (Boolean, String)) =
+    testManySchedules(1,
+      (sched: Scheduler) => {
+        (List(() => ops(sched)),
+         (res: List[Any]) => assertions(res.head.asInstanceOf[T]))
+      })
+
+  /**
+   * @numThreads number of threads
+   * @ops operations to be executed, one per thread
+   * @assertion as condition that will executed after all threads have completed (without exceptions)
+   * 					 the arguments are the results of the threads
+   */
+  def testManySchedules(numThreads: Int,
+      ops: Scheduler =>
+        (List[() => Any], // Threads
+         List[Any] => (Boolean, String)) // Assertion
+      ) = {
+    var timeout = testTimeout * 1000L
+    val threadIds = (1 to numThreads)
+    //(1 to scheduleLength).flatMap(_ => threadIds).toList.permutations.take(noOfSchedules).foreach {
+    val schedules = (new ScheduleGenerator(numThreads)).schedules()
+    var schedsExplored = 0
+    schedules.takeWhile(_ => schedsExplored <= noOfSchedules && timeout > 0).foreach {
+      //case _ if timeout <= 0 => // break
+      case schedule =>
+        schedsExplored += 1
+        val schedr = new Scheduler(schedule)
+        //println("Exploring Sched: "+schedule)
+        val (threadOps, assertion) = ops(schedr)
+        if (threadOps.size != numThreads)
+          throw new IllegalStateException(s"Number of threads: $numThreads, do not match operations of threads: $threadOps")
+        timed { schedr.runInParallel(schedTimeout * 1000, threadOps) } { t => timeout -= t } match {
+          case Timeout(msg) =>
+            throw new java.lang.AssertionError("assertion failed\n"+"The schedule took too long to complete. A possible deadlock! \n"+msg)
+          case Except(msg, stkTrace) =>
+            val traceStr = "Thread Stack trace: \n"+stkTrace.map(" at "+_.toString).mkString("\n")
+            throw new java.lang.AssertionError("assertion failed\n"+msg+"\n"+traceStr)
+          case RetVal(threadRes) =>
+            // check the assertion
+            val (success, custom_msg) = assertion(threadRes)
+            if (!success) {
+              val msg = "The following schedule resulted in wrong results: \n" + custom_msg + "\n" + schedr.getOperationLog().mkString("\n")
+              throw new java.lang.AssertionError("Assertion failed: "+msg)
+            }
+        }
+    }
+    if (timeout <= 0) {
+      throw new java.lang.AssertionError("Test took too long to complete! Cannot check all schedules as your code is too slow!")
+    }
+  }
+
+  /**
+   * A schedule generator that is based on the context bound
+   */
+  class ScheduleGenerator(numThreads: Int) {
+    val scheduleLength = readWritesPerThread * numThreads
+    val rands = (1 to scheduleLength).map(i => new Random(0xcafe * i)) // random numbers for choosing a thread at each position
+    def schedules(): LazyList[List[Int]] = {
+      var contextSwitches = 0
+      var contexts = List[Int]() // a stack of thread ids in the order of context-switches
+      val remainingOps = MutableMap[Int, Int]()
+      remainingOps ++= (1 to numThreads).map(i => (i, readWritesPerThread)) // num ops remaining in each thread
+      val liveThreads = (1 to numThreads).toSeq.toBuffer
+
+      /**
+       * Updates remainingOps and liveThreads once a thread is chosen for a position in the schedule
+       */
+      def updateState(tid: Int): Unit = {
+        val remOps = remainingOps(tid)
+        if (remOps == 0) {
+          liveThreads -= tid
+        } else {
+          remainingOps += (tid -> (remOps - 1))
+        }
+      }
+      val schedule = rands.foldLeft(List[Int]()) {
+        case (acc, r) if contextSwitches < contextSwitchBound =>
+          val tid = liveThreads(r.nextInt(liveThreads.size))
+          contexts match {
+            case prev :: tail if prev != tid => // we have a new context switch here
+              contexts +:= tid
+              contextSwitches += 1
+            case prev :: tail =>
+            case _ => // init case
+              contexts +:= tid
+          }
+          updateState(tid)
+          acc :+ tid
+        case (acc, _) => // here context-bound has been reached so complete the schedule without any more context switches
+          if (!contexts.isEmpty) {
+            contexts = contexts.dropWhile(remainingOps(_) == 0)
+          }
+          val tid = contexts match {
+            case top :: tail => top
+            case _ => liveThreads(0)  // here, there has to be threads that have not even started
+          }
+          updateState(tid)
+          acc :+ tid
+      }
+      schedule #:: schedules()
+    }
+  }
+}
diff --git a/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/TestUtils.scala b/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/TestUtils.scala
new file mode 100644
index 0000000..a6a1cac
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/src/test/scala/m20/instrumentation/TestUtils.scala
@@ -0,0 +1,19 @@
+package m20.instrumentation
+
+import scala.concurrent._
+import scala.concurrent.duration._
+import scala.concurrent.ExecutionContext.Implicits.global
+
+object TestUtils {
+  def failsOrTimesOut[T](action: => T): Boolean = {
+    val asyncAction = Future {
+      action
+    }
+    try {
+      Await.result(asyncAction, 2000.millisecond)
+    } catch {
+      case _: Throwable => return true
+    }
+    return false
+  }
+}
diff --git a/previous-exams/2021-midterm/m20/src/test/scala/m20/overrides.scala b/previous-exams/2021-midterm/m20/src/test/scala/m20/overrides.scala
new file mode 100644
index 0000000..cffe5c5
--- /dev/null
+++ b/previous-exams/2021-midterm/m20/src/test/scala/m20/overrides.scala
@@ -0,0 +1,68 @@
+package m20
+
+import instrumentation._
+
+import scala.annotation.tailrec
+import java.util.concurrent.atomic._
+
+class SchedulableAtomicVariable[T](initial: T, scheduler: Scheduler, name: String) extends AbstractAtomicVariable[T]:
+  private val proxied: AtomicVariable[T] = new AtomicVariable[T](initial)
+
+  override def get: T = scheduler.exec {
+    proxied.get
+  } (s"", Some(res => s"$name: get $res"))
+
+  override def set(value: T): Unit = scheduler.exec {
+    proxied.set(value)
+  } (s"$name: set $value", None)
+
+  override def compareAndSet(expected: T, newValue: T): Boolean = {
+    scheduler.exec {
+      proxied.compareAndSet(expected, newValue)
+    } (s"$name: compareAndSet(expected = $expected, newValue = $newValue)", Some(res => s"$name: Did it set? $res") )
+  }
+
+end SchedulableAtomicVariable
+
+class SchedulableSeqCount(val scheduler: Scheduler) extends SeqCount with LockFreeMonitor:
+  override def generation: Int = scheduler.exec {
+    super.generation
+  } ("", Some(res => s"generation is $res"))
+  override def setGeneration(newGeneration: Int): Unit = scheduler.exec {
+    super.setGeneration(newGeneration)
+  } ( s"setGeneration($newGeneration)", None )
+
+  override def x: Int = scheduler.exec {
+    super.x
+  } ("", Some(res => s"x is $res"))
+  override def setX(newX: Int): Unit = scheduler.exec {
+    super.setX(newX)
+  } (s"setX($newX)", None)
+
+  override def y: Int = scheduler.exec {
+    super.y
+  } ("", Some(res => s"y is $res"))
+  override def setY(newY: Int): Unit = scheduler.exec {
+    super.setY(newY)
+  } (s"setY($newY)", None)
+
+end SchedulableSeqCount
+
+class SchedulableMultiWriterSeqCount(val scheduler: Scheduler) extends MultiWriterSeqCount with LockFreeMonitor:
+  override protected val myGeneration: AbstractAtomicVariable[Int] = new SchedulableAtomicVariable(0, scheduler, "myGeneration")
+
+  override def x: Int = scheduler.exec {
+    super.x
+  } ("", Some(res => s"x is $res"))
+  override def setX(newX: Int): Unit = scheduler.exec {
+    super.setX(newX)
+  } (s"setX($newX)", None)
+
+  override def y: Int = scheduler.exec {
+    super.y
+  } ("", Some(res => s"y is $res"))
+  override def setY(newY: Int): Unit = scheduler.exec {
+    super.setY(newY)
+  } (s"setY($newY)", None)
+
+end SchedulableMultiWriterSeqCount
diff --git a/previous-exams/2021-midterm/m21.md b/previous-exams/2021-midterm/m21.md
new file mode 100644
index 0000000..fb11db8
--- /dev/null
+++ b/previous-exams/2021-midterm/m21.md
@@ -0,0 +1,97 @@
+Use the following commands to make a fresh clone of your repository:
+
+```
+git clone -b m21 git@gitlab.epfl.ch:lamp/student-repositories-s21/cs206-GASPAR.git m21
+```
+
+## Useful links
+
+  * [A guide to the Scala parallel collections](https://docs.scala-lang.org/overviews/parallel-collections/overview.html)
+  * [The API documentation of the Scala parallel collections](https://www.javadoc.io/doc/org.scala-lang.modules/scala-parallel-collections_2.13/latest/scala/collection/index.html)
+  * [The API documentation of the Scala standard library](https://www.scala-lang.org/files/archive/api/2.13.4)
+  * [The API documentation of the Java standard library](https://docs.oracle.com/en/java/javase/15/docs/api/index.html)
+
+**If you have issues with the IDE, try [reimporting the
+build](https://gitlab.epfl.ch/lamp/cs206/-/blob/master/labs/example-lab.md#ide-features-like-type-on-hover-or-go-to-definition-do-not-work),
+if you still have problems, use `compile` in sbt instead.**
+
+## Exercise
+
+In this question, you will complete the definition of two concurrent data
+structures **without using `synchronized`**: `SeqCount` and `MultiWriterSeqCount`.
+
+## Part 1: SeqCount (defined in `SeqCount.scala`)
+
+An instance of this class stores two integers (initially set to 1), the stored
+values can be updated using `write` and retrieved using `copy`. Only one thread
+at a time is allowed to call `write` but multiple threads can call `copy` at
+once.
+
+Your task in this part is to implement `copy` such that this method never
+returns _partially updated values_, for example given two threads operating
+concurrently on a `SeqCount` `sc`:
+```scala
+// Thread 1
+sc.write(1, 2)
+```
+```scala
+// Thread 2
+val result = sc.copy()
+```
+`result` must either be `(0, 0)` (since the initial values are 0) or `(1, 2)`,
+but it must not be `(1, 0)`, `(0, 2)` or any other value.
+
+To successfully implement this method you will need to use `generation`: this
+method returns the current value of a volatile variable which is initially set
+to 1, gets incremented by one at the beginning of `write`, and incremented by
+one again at the end of `write`.
+
+**You are not allowed to use `synchronized` or directly call any of
+`myGeneration`, `myX` or `myY` (use the pre-defined getters and setters
+instead).**
+
+Hints:
+- Remember that a write to a volatile field _happens-before_ every subsequent
+  read of that field.
+- `generation` will always be odd when a write has completed and always
+even when a write is in progress.
+- `copy` can be implemented as a tail-recursive method.
+
+## Part 2: MultiWriterSeqCount (defined in `MultiWriterSeqCount.scala`)
+
+Like `SeqCount`, this class stores two integers updated using `write` and
+retrieved using `copy`, but unlike `SeqCount` multiple threads are allowed to
+call `write` at the same time: these writes will all succeed but they are
+allowed to complete in any order, for example given three threads operating
+concurrently on a `MultiWriterSeqCount` `msc`:
+```scala
+// Thread 1
+msc.write(1, 2)
+```
+```scala
+// Thread 2
+msc.write(10, 20)
+```
+```scala
+// Thread 3
+val result = msc.copy()
+```
+`result` must either be `(0, 0)`, `(1, 2)` or `(10, 20)`.
+
+In this class, the generation is stored in an atomic variable instead of a
+volatible field therefore it's important to note that:
+- a `set` on an atomic variable _happens-before_ every subsequent `get` of that
+  variable.
+- A call to `compareAndSet` both gets and set an atomic variable.
+
+Your task in this part is to implement both `copy` and `write`.
+
+**You are not allowed to use `synchronized` or directly call any of
+`myGeneration`, `myX` or `myY` (use the pre-defined getters and setters
+instead).**
+
+Hints:
+- you should be able to just copy-paste the implementation of `copy` you
+  implemented in Part 1
+- you will need to make use of `compareAndSetGeneration` in `write`
+- `write` can be implemented as a tail-recursive method.
diff --git a/previous-exams/2021-midterm/m21/.gitignore b/previous-exams/2021-midterm/m21/.gitignore
new file mode 100644
index 0000000..40937dc
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/.gitignore
@@ -0,0 +1,22 @@
+# General
+*.DS_Store
+*.swp
+*~
+
+# Dotty
+*.class
+*.tasty
+*.hasTasty
+
+# sbt
+target/
+
+# IDE
+.bsp
+.bloop
+.metals
+.vscode
+
+# datasets
+stackoverflow-grading.csv
+wikipedia-grading.dat
diff --git a/previous-exams/2021-midterm/m21/assignment.sbt b/previous-exams/2021-midterm/m21/assignment.sbt
new file mode 100644
index 0000000..da7eb3c
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/assignment.sbt
@@ -0,0 +1,2 @@
+// Student tasks (i.e. submit, packageSubmission)
+enablePlugins(StudentTasks)
diff --git a/previous-exams/2021-midterm/m21/build.sbt b/previous-exams/2021-midterm/m21/build.sbt
new file mode 100644
index 0000000..15c6258
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/build.sbt
@@ -0,0 +1,12 @@
+course := "midterm"
+assignment := "m21"
+scalaVersion := "3.0.0-RC1"
+scalacOptions ++= Seq("-language:implicitConversions", "-deprecation")
+
+libraryDependencies += "org.scalameta" %% "munit" % "0.7.22"
+
+val MUnitFramework = new TestFramework("munit.Framework")
+testFrameworks += MUnitFramework
+// Decode Scala names
+testOptions += Tests.Argument(MUnitFramework, "-s")
+testSuite := "m21.M21Suite"
diff --git a/previous-exams/2021-midterm/m21/grading-tests.jar b/previous-exams/2021-midterm/m21/grading-tests.jar
new file mode 100644
index 0000000000000000000000000000000000000000..879793e5498e751321315fff68817cea677fc435
GIT binary patch
literal 131654
zcmb@tV~j6A^Da2HZQHhO|Hk&r8QV6_*tTuk_8Hr@XZHPPZ|>$|@nJjZq^nb%uJnhl
zr=F@(k_81r1A>Br0s;ae{?Gis1{x4Nki58>Fuk;b1f#sLg0zIVsv3j51V9ZO2>9;)
z_xEQK2<TCMdP+`~o?!uAmY!yIdag-@X_<BJ_+grUTzW=+hE|#m80I3(H1()hoBGJS
zG`Se#_~HZy+n6fwl5-w3GavWr6btEUpKx#rT{k{6J0mp%PBk?x(ICVetrDe>4m6|i
zG9ze>C|hCB8Yfe^TNg-4780s`Rc^xZKZfE01N}z^1%m+s`Y-eUC;P#Gpn+^zm>K`O
zz5n;BX#Y*s%Ffxv$<@}(&c(>Z%HHmOJo>+XC6xbmRGx)d)z!+yjKRdl$l3Y7-`S%L
z?SZ?}B4A<jhtAW6mPMg(SQ@X0tkFiY!Nj7WX<sNJ7@vrP0s)O=>QGZG6_1|G+{(%-
zkijLemClTwzJT70IlmY|Howlu>Rco+HMMnq5nLa0V=+`^@7vv+EUx%oWcQQ6z{X&k
zdz1e)`!}2Qpu&BWkfPAMB10P6&icuno!yO66dFKbPJ^o;Ap-rIYC8On){y2_`4Ia0
z@WF!#34sX!)0<n6j)V2DU^Hnz!~!yvWj#H+BhHk@oCa+!!(8XV)0D=DW-(Rn@zHWN
zM)+B}L6eO_6+6k~fK_z`Z8@Gdx?;F_U^zdhpD;!uXhKsimh203LX!wNO5%$&aBrud
zV8ywxVF5YtdW@MqH&wiJect2%H5c9Q3L3s@flR=QhY~aK<c~>X4Q${aP}RV;R*iyp
zwc~sd?f&LMo$WU6%osB5s>6cu-1?39`Ppg&wOh=wDg-fz%HV~B1#5egXDJeW9l7Xi
zwGp-{QZg^TTp=<XY&i+OSeO;41{8b)hNLo}f`C7D+>8!>{e%c&FK?m=k44@9e+$EQ
zf1>#k3XtGHLlPX^6f5jOQY3}+mvn|lx08k-Ln@wnbc)cG_A*wS?JPVi)&y5dV=mE6
z(-{6DQtM5v(z3FbyfO$>+m?5@EYN)i&cC~*O7!n|M<tz3xGO{7fe8tB<rZB3E+gZZ
zYF^wjN%0GxE+Ynt+DZD5x<~uql?l-}8wL$S{v98=4~WyUWGrCATep#`qAt1pDxqE7
z?+eitjD9U7g!psez>hl4O=#-Ieuj&JdN5sKZX7n`3kJ$PTz0nf&nQ$Iizv*#oOD%+
z#)Sb8w56*O<VE0?XkcXy4KtFOUCpz$DadL{)RBRp+D{_eqa@TwQ=jH5>lCiyE|^Q~
zhpT#KBy4KhpsFcCIW7WQpaWflqBT8gYGAps7gd;Ec1+&HVEJj$HwrJgvAtS5>jQG-
zQ@w_vr!ArsUCUMJlG$mOOK3L{%*r~;g{Z1B2*gY`2FToVybiE)C_PJOf7xIQYr<#i
zRXLvzqI&RK@L^_3au95u&T+MovXAp+cyI>~X^P>8GcI~sR3mmt{uY}HNfbDr=@J{a
ziP&XYj4gbKi@}EyRnYOu*E6F;L#%k{j;SlLd9hXw8Udo2{VhGXGN7KqfpH2vNRo8<
zClcy6z=*xej<wb@U=M9^osO!fAVa>+c7be5%o(;sp}^^66K~FX+<4*!<sKUo^7*}l
zVsE7+z?`PgfD@l25ue01ix%o}A|kG~%tnb#2vH<0^MVUQ62(SBj_4MVps-JJ7VqF%
z&EDk-9<BO7AqWh$Sw(?8brd=SCUSfOOL_X62eN9|PgQqPj<7wE_2^U%zx%fki8h@_
z<SF~53B_Dz_A6(EnYOXhI+Y*=r<*M^g%ZzMN)HAsJ@QrY<t+R2Zo75CF?v<cU_Q!&
z8Oq{_L8f0Oo}d%FCh{FBrP8xC(@f6gwD@cb^HU;$9}9;LP?<om1weDzS&5pYFcNUg
zcs9W#d=b92EnZ4f@z(yGKf2Hx65Fmf<ACozKY>HO*%|W8{=tspEO5@|a#W`)+y~y;
z7HNwL_#gqf;Go=|RNJ444M*4J+qx+v;Tc!s&(UJ>1s}tL3r)Cy-}%dDgaIk~&gDvm
zz-~~)i~j`p;Q45*$5~IpGCn{kEm0k;smRhv)sfehlbq%8ZS8|&0{sVe;K-iJWo5vE
z^w%3=c_6^jK^f?_>@y^fK<GEC$|R+N1oqcTE4?<t7N3elVl!_i=^R&xwnpZlu1%Dd
zRq{+2GImMyE{7@=3e{f!MNmW%e5S}MMr^n0M%e^}ly`cJ`DNf<{(~_vVOPacPO$%w
zs#1~bTmT+|j<@;h&u?qA%@ckp_lGFr$5cC{24?J;Y(_8a_+|D{1;)m1+tTY9B$tL9
zJ{+vhQYPPpK(OXE<Rsx@6M~WerI+*)J=1kAGJ)b|xV&-kYTkE*A6@q&NOcUPxKFa#
zF3AB>XrN^1Cnl8(x*q+w0mw%PC}zwJOspk<l(C+79yfBj9_B+KM|ta#@mvGsUEgsr
z7zV#^NaV%dQMnKG+P|~r=4>A4GRe7?esk7p<Ek`<$kI3VXH%Tzo8XnR!ja`0*#a-7
zuox^{Z1qT#yZe>rdtKPSu#ZXlo@hyzzWJFaIms<6<_Zd-0(7F@L4Ne<>mW3Jb~8B2
znOW&O*v@G_<w@}#+4ipQDb5~vHz~oz8t8)#L^5D!^Xcz+lsocjk|rrDuV!KRFk^8R
zt47SUct6z&l#(oe7g}n^zX6U`R{Ck)NKb1Ft3h%%rv{KDC!-2}Y#79H=8P#kT?Pr&
z&5Q;roGateYFkmC@&sVumUoX-M8~jdj!@b+u86})JcZ~Jiah7Pd)d(pb)AA4<ro%~
zH<HZ3;*ayNWQ9E8gMfZKC5HJ-P1wuQyGS5H{i6WcN@lVn<Vju7^!f3wrJO)oL2a~`
zI}~2RIa$YWuOl~blmX)J6$o$24xWYQrn!L@-Ef}BpCGG&<k3P%4CXu~(w;yEm3d6q
zK{qb&a^yv2vl5`mi9$jz1WUks02Rr~37mE2cz(Z-Az1+e)ZkLtcrmtX-TQ1|-@-01
zf44-Ndy0b<L6PHfvm@8?3pHJapHoA76QEl=y`f-h6xU)W_7vLb0oqt4Ynf}RH;uEa
zJY8{_KOl>0sf+SkJ9HOaIcMo#Df!&d1O5CTJ3l-t`+YX3f98~-%xH{Lm-F-)Y~EdX
zd+W8En{Z#OJ#GiC-TGWk;Xf{}H&*JI6Ip0GllVbjaydS+@8>eU_BG<sEgPL9Dwgpt
zP>#1vmKm$2EpmR_;RRBB$g&7UZA+g#LuLKh-S4gD+6eTapaJ%y)%=28RBq9Vqr=c-
z*huUA;Gu5p!EWlFh(wHKQ}NuzcjujXuOx;;UVp5RW3bG+el#+S7jo|-qOZCY_w~Oo
z4(f^SbA$9ToqMD4x()XAI@6USI{L-Qy9w`m1u?MJ3lMUVqQU1=TD|CZQ5B4OM*q?C
z@b#we-Ui?b=Fgm|)<aoOA>aG_5S@Vj#A895b0j>5qYLOD4o^**^=?Ufm)iT{vI7X6
ziJJrv5Yv+&w&U+{U~9Z}xv)qd*ao0rXhH62oT_jLlue)p=OXT1acJm~>RKNGUs|Da
z$J+-=d1D2&jt_R2DKI(~k*~>mf#a6iU8^}q2u86af^V=s!Jv(H&Ew}SNwM;<5Bhd>
z<1)vgVHS@D@HoNq+0q14U*eFv6gah;XUd`WtEK3@_+`9jg)Gd0P+wNkX-c%<L9T&=
zZT0Dv@0W%>(N^JrE}N0>Tpo+wG4W#`dxfga>|+{xeH3jkajp_`FOdvF2M3v$aPc88
zvxjLhABC2%-w$)sRezQC9GBF=*Zc3mPefp0g0P3kb8%e#2c6L0JsO;)hX5+ccV$fO
zcjoAYVr4>kEYQ2-FZv<-*ber3>aIdgtMAbmn`z#@_B=^=eyx%gt$jxUlC1~5Lr3RY
zY^{{8k$mfk5^HAF8kIL`KN%_CoqPi`zwV8H!v^;HiyX6jee&BDs0!oXFoHFNC#UU)
z229sqeK1s2gHMgo=J$-~ei9n*Fls*=p#?xXbLZi|_^tXgKD%r~<CE$^%<Vz`b$76x
z!-66QdAcsy|2``8d452c-m9W%z=tvVt6=)dhi(P$_VO4q=?Rjti^}f9wD;SXew34c
zV>1(Cuo%nMJj?LNN;4wg@cl4Z6U2-`AVgAS6JId?b@FF7+a9?Wi!{foBp^923pbLP
zB%;k#_Kcv6u2f#VN_(Q_s|9r^4A#@EXkf~k1w3opqNyRq?76K3UMyUQHFpxSRvv|n
zfea88DzEejx@q;eH{ss8i^Fw3@ybw$82uv9fAKf6;bQM({0b$DS=H)gl6LGLM|cqh
z4j3eyEY%=f0hj?E5X<d2u;7CQuxj79>WZ_n)`wX$H*6~b3g#;cruyM!1=5uKjv}FS
zM*1zUl10$T_drCq7r)_kf9Qu5zPD@CNbzsuF=TU{vYNs4M7dtEqMGHjj|#a_B#s7W
z7JvahC8$y5n@L08*42_nY3&nK*$cQphyu7-FE{hKQbY+cMtU1L{a{<@Sj@T9_z4j>
zn|K&?uk-0#okbIxO4}$XbJ^EcdFNwD-+(#jZGPXks+Pm%bTS$=gWM!ppSZ9U<LXmY
z^oFCMvQz0%i$c&|(dPNn%9mJG(gkGg^;2udRl-7cYVA{J+y0l6=@+Z>>!kV~`lcS%
zp6$r%CDu)8lTRqXOYA~M(^(|iHILY>tnwZ(%ns~!qFVTF&6#F|`M^d=eFZ_4%)gFo
zj76)Xk<LgrCD`lYSWWkNhKpjd=O{*~^8htO1#v-0`1r~k%p^3jXx0~1;K<*=eCwDn
zSVYyW6uAXU4L#p)F5eI;aY8{Ejh&>1BDta*`4YD9$qMZxz1SWVzIQTTn4b_b(P&NI
zOaV{>4k$mIpq;8SYth?@J(Oj16BoTGyKF%PcPLkP{E{ik<#o0u{>;pE9#07m@NM~5
z(-41*WV_C_b}m5y=vk88Z?tK2ix;T`;#u+?^Hb(Bs+6g#DGRsGVO;g#cNm&gk;;x*
zYvCw@mz9z;W{=hjCVZU$!Z(c9Uzd{~WX(ULXBlYxd4+j$x^1#a%CI>CJOpcJtWO^<
z>)3>BON!^>GpXhu*xkfdRe2@=AZ+#wp&QO@J?D_oPlN?V9^ctOw4Ul;g@rm_*TW~s
z{hz**je0b}DF+HhhOM-YaO1ZRcv0ur{ZP*Xv$)zgd$2mtxtqa-%gQHbdwVX4HMZij
znIcnrdKXLqnd3F(j;=eZls1fxXoSTQkGI<)xhk7p8J&_E2lpu0egiAezPIvds}x^q
z1{->}shb0J@7=@V?DJN_q7}%BVOzz9L$6B0!$nfv9ruVF^edTro3?CYcknsPDPua-
zZl;lF#6;VeG<>pSsI?b%yn_$PVLeQ#sryg5#NASejN0UhABMz9;-(PtOWxvN^xvnF
zHoYRybh&xt9#~HFW9AL^Q-(5>FMUykFOP(6_~ySH3tkrm@Z&qN<2&*$s4Yu1n*Na+
z>|^%gC*BnixE|ahb>Rvof-DLU-yHgZ0Op!PD9(ci+rj6pVcHg=j_54UNH>7HV>AZY
z<1j2UDVqZGL*KGScyvYhFXH3IR=NEg84py)3X(3&fbGVkirs(=l>XQy`~beh^h{-N
zmhYiYVj#r}^gcqYA$w5CcJe`!M|6Q9MjqWAsBxQ9IB_dDn~2#2mV1<x)O|(AsvYyO
zC3GG|2={5E22EImdIVCGO>gJWR?gJ65zELZe;74~fM_}hcMrBIMZf{m?KFDR3>?~)
z1y;i!^XW2E=DZT-u3??<FVy0<Y~7pd6I9ds!O~#nBg1*lBRtVJwEf#zQo83A`~yP`
zUtm7%Jz59`o3#Ybm~b1!drx2RXZS-r(u*6~YQj@cW95($an0hlL^K1KBRhJr!A@Am
z%{-(wejXz&_`xJgaHo9e&?4;gR&?-c(8zjtU<VlW&Xt+^F@?=@_-ri@0Ivab73^Ji
zj9_F+e{oI*>-CZ1eOb#x4|A|<mJofn631v>(?H^-5%exw;2$q&omxHNf&##+i&iIA
zL>f3NHAIj4h)_2}Jq^ScxucfBEIq_miX8J<P9;`0a88c|^H~c6#24Uaqj<zHTAX=r
z6DZML8x548i4KDIZYh@aIUnoE91~R3xfCm+VSB!fpj#wwo72A+=vnmjq@CF^N`sg1
z#NKkO;g1qUB4JT2v2`@^tC_3A7U#$a0ciUXhzyedYr1Lb{bATNi{Bs+8eHdUz=JKU
z5H};NQZH%9eu$#Q^dv~~?XeT01@Po6ysFI?D5z3yMnSezYBr(y5#OJ2PX=c)*48g7
z4LLSg9X}hqlh6$2I8)|dF%!4Q3^$2>v^<D({b``3CJ3fy!u@2R(!BG27b?i~BRHmS
z8Ayt1zbuJT!H7`!Xh9v(<y|KtYwCdTGn+2~NTe3r3=9Y{cu*RW@<nByKnbL8M^w4%
zqrM?fkWwD_^b3vwHUE>4Z|wAo#t>@k)vqa(Qnv(42^jbqEvC@0OOj5_w6ObTC=S#)
zOn8l+9ovR#cO8vZjHp?eW<BwnK@+yNe!U3D@b_ySDM!rKjjh(;r>HKeKjS`@xm)6A
z6DlZelV{n*AWzz7%|z`$hrnKRIQ&wGP)_eWQKVL2+-Ej52yLX~=xwR(vVRvC+#^ea
z)v1k3o?S~)WcF_+7qhH-i0QUVq!F6UQ)FalYT_qH8r5`W7u|rdRVpmkLw26S^fkM|
zGHw~H>6di+8%@;Q;wQJvEP-3b-Y7q-ySl)*cM4k031)l0=r?XXFdxM{&1sv64*Ogl
zDP#+0nzWF6rNIjio4hDC1XUwuM%vjhiP_>-N%}vKP(+&p?8ca0QRoj;OsY|?2?phy
z3R;>1D|IX5|APLmK#>67!fZ!0sP=nTw0l&bxR9xD#i0MG!eH||n;ia4G7H%zp$~D$
zXSULp(RL`?V~W#O2ya%>Hbv6FQVMuWwvN16;EE;_j66^+<{oL7fS0|hABY8NPD0Jo
zd(#P=OQAw_o}jNm5{4I;p6y2Gg@-yDX$BLNjdks^+BVY8OVu)vN}CUld7iP1?90{?
zlvc#P+?}s_V?OglZ7Z|#NH5B8U2N`U>N$zKL;qTs{?P7a5Op34@#*EI&m%mNd>eq9
zk)_D!W3Dk^tuf#{_Zlj`lrNCghB2TIB;;{8k#*>$JO^YOVy)^!P1PRrzS&v&Krb2u
z7jwSJS3v8#s%%d+%nM^Kn0)4T>`$yoFLti{0{<7$nN?AC&w~a8M9A`g5}p4aDM%M1
zXBW@^PC=$<{&7InNWGzb2R4E-^`ld}wySZo_6vdIrK|W(k&(@vKwvjY%&h3YQk$_s
zM|K0v9aoX8$=$Po()d<!uQHpk)3MfRHPad8Xl;N(#GM|(qGYZMVL~z##Y;qT0GR+8
z1rCnvDbs0nBw$TZQ{HZy<A2?{&3^QK#rbwO8S7g<FmwSFY#zGtO?nyJeds?h5c|C(
z^tC^afjPd7^sN%~2v6Hf4l=6Om?IfHyg3zPd~}Ca?<#tNN|{clP_;u$h*$68Q@wa9
zmxsW&uX#}|EgTlWG>sZ`Wx&sMT9MTU8Y3p=I(tX^kW*=2nSuDVf*ET?+v+mKEU%!U
zzOf${Pz$O|-`^TR2RE<aekFIEaYq^P1Ct4UzC8eJ90NoalSXz90#GB#>ADlTgPyff
zIci1R9gkC_-g>MUi@tkBqKq0ZvC$qB;X^E<GJs$fZU!;8E{V6SQ(u(gisl)81rU#4
zNUQ+;23LA<#k=nnB-Z$eYwvvGb4r&WQg2P4jCN!mTRYDjwFSu1eR`i3<7=brB?%x*
z)ysr!j$asQ>DIY6cES&e+xmI#_?O~eqj?ORgmI(`@=LiYcQT#Be`h04%+ZW{QsF@s
z*DLR^)8<=z3sLWH21Te;T$CLsRetxv+5C@RKfgHa*6c8MSGIeou*6BsGUM;?)L<#R
zjEr{$h6UljVeG^PRM1R;jPb?biA&l|EA=>T?tl(7lo>bL*LEGC!#^T9mC3R`R0Zq<
zHlRH3C3Qu{l+)u^-+X)fan4Au_C3%XW$~#Rh8t4hxyobNmIG*<l6gP`#<V8`nN;$g
zRN0Ops!;Fy?m&X_gzG^W_Up<bmm)qjP<pNP2D>cwWt$qcM=&yHM2O9;^FQcEHG2~I
zlHGj`K~YxGz4?IJK7?C-@kxC5V0r}Eq_Zg)3ga;yL=PBlik6s)h=_rFf|T(l=H6h+
zxHKF`$o-u%&L|mBhAerL_oxXk;raFriQEyN?SZ4+;}>KpSRnTt&_2#o#)_u!T>`X%
zL@s^yl-dW#b$j^MgG2~kr%L?kN{zy=fUq3iV95mW^S@L>dv8z#fBU2l!el+{$K}>%
zn34tWsxY-U@3Q?LA}N9Q%V~WsS?UMC#C;;coMkcH%bW?^qn+>FKPlt8b00*c;sf@|
zRy~mv1&lBrXfgf$jZq>ov^Ajir$PW`rAQM?9qVsI2YNo-DD$<D?;qXEYJb<0(|AA_
z-y1v3;bRULe#cLA?N;x#+S*(I`w*28&q~w51axipe2GS<NLMjvkMTf+#d2LAdLo5M
zSS(9^I7hcH7%F{wrzlEVk7SEw+0!C35V%eEIE%W*+%%HtQd5cheOm+=90)q;O=X}5
z!mCu8R|mWNn{cMr6dwsskbQ_wBFfQurD-Pg5!-<zCxbx8IZ>ops(m5Yk4J^FO~86S
zW4#J!nUjQQFw<VB*WMU^{~AYE{18rKe)D2vahJ}7u@#B#VsBmzU+pmYmvQ?*KXv-4
zlmCu}*_!jW6~d%J4TnlttwMKpwud}4IK=;)E=M9{AK36+pa{pJ;r)m!J)Co^>X3NN
zkfnD{j(xyZppTp^+`f4Es!H<28(}6!??c^tZxdt%xE0xXyyWMcym;peZ->?=7Nnbz
zkBIL98sTa)%wqZ+GNc>LR?$r|rn~xiHvDsY+>&?S(~X@G&$d;2Q64dj?np83NKavd
zg2bG`zwE(;OT{xu(f^Pw5Mxa+mG$eOhk(Feq2LqqR=aDx%!t7T^&!7WPMWm9-cAyC
zTF*p#34>FnFq$2L^QECGN*zn6X4GZYm|Kq%8zjdjg36=Ypp3TI&{w=&{NpLj#ap~u
zGyUXsN<k^o$w|WjIKi2R|LY8*u$T?c?CFYeFNCwWwN4tYA!EUi7UAV?gpyG1BEFPK
z-x(E>d!vxdwk$(^rhtqg5HB$xU4Wk2z#<u|7VdU~?2hHCo={j#EC;4@s{;b{h_P&>
z;a;HnmpB%a(-a(kmU(Vg?iwci%G5RC=k`jt&VMANyDm#Ikc}#}X(XREB`>wK58k!p
z#uoVz)3l3y72goIGxsD?ufO=xxlm%6is~JpCgrVH1lND<ddFCc7eZOh9PYa$x=66H
zlcG4cQ#ZhXI3Mf;>Kh{<@(4b*;sL-?s^)8Ws7bM}<6Flv-evwnUhWFu@s7fC+UUxD
z>6!0kHC3<_uU96yHZetDOj|fLk1_q5dBvjLM;j>Cf%5_b)VsSTdy;K9oAiyNSa>2H
z9en>A>dF1W?!Zl}=#=qFb{=#K)NilivvLIZL!~jL9Pvx6D({CdfynJVY8LsEt_;gC
zaVCo0Lm7Uq_<Ix$4lxm!l4o_69^*!(bN<JvNJV%zWCA&z%(+VgDKCA&+`q|DWg$Ml
zfC!1&J*I1o0@|FJe4v^%<1@oeT!0pl3c{DStCSfI4^WM9#2)`*u2npi?OCK%nNgvM
z?|AZ;_c6$@^VL+JJVOKY?=+WlsE>wny0rQ7l|fVW0+rN>Yl3I^csFo)<X<ifyL@1+
zl7#kA$f0g#mfPm+F3H(#<`fbl%}6r(HtAXUf!NuAEA>0=T7<L5u8u8-EHn`#3@dPL
z6JG9B%~5sC?j5Qo!T?i+1R0ZTaTabc-)TXalf2e)LE!IIr=5g2+7xvVqK2=cSdt8X
z6r2qIS?=4!R{X-bilbH$TR4_qP?q1Q>|$jySjdpb!ddP}iuDT(v}MR^cGXB>8f2XF
zc$t`N*1hRlc2-!P)2Et#+8|+2fO(*hZ1Z_)w~JBe_&S90iVAC@4KL9j8K`8zQ<VG(
zPmLy5kkk(N>>BKTo6sJz27C}Y63N2Wa$R7$hD;{o7el)yXFKmkOc&M>`6cUP8-xRN
zs@WhV0D3!*`@c3^f>b-Yl(`<TJn80LsTqB_S>HK6$O9S~xhgqPiKF)F`EiF?TIbnI
z<<|**wn_?H$YVGu`ivADtG?>dMr~1cT4kqW=|w*s`YIJ6`6JP;@o=y4?DmubU86?h
z+0WVV3;M{J!+f=xayRYk4tA$!y2|6#fH6=>_!ZzyIR%jj@#qd5HG6awdQRR1lI#5n
zZYMG>uri&Wb{}=%yI51Z?Cju`B7pDRB2E6dAWDbBrpg)c(@&LnbW`gE_Gb5h)n=;|
z?t9Vbe>N<J@wzP=r1hRsV<0S4+oVPLS!AefcV%-*f9$L{jndwE+@Ez8`Dpv7Zvm5~
zB^fIj<m2y2yJ$yW?aqER|5;~LlkTaKvD^;Epq;)ZJSrwU&dJF#=cF89?Ad4fq;ozt
zR5j|Q=O{*-<EGehPJGeRg3Y{O6ZyUYS$sm-k)lyNA|}3rW?m=zc;LwXv{P4v=A;%A
z5d3r{dc9q6lC4Y@wpJH!0IT435Z(B+3({7Aqo)?Ts7cRa|Ab{ilnxg^XFhG%wssA5
z<Zsd$;^u4Kfv;H(%9}=K9`6RlI1j)_tHTDW`)5hPvIrGtX_4sV$QKt>E-i^^zrDa&
zVc_MF%nZg^NHyJEHDABP><<1*zD9ly+#Ti|f8Lu*Gz4*NwA2BfoVV<%X0n8Y)5s@<
zZ3Wa@S^zU4L^Zp^zmG4Zlw)4&IN0&URAp(ylWvF5;ykIL+pRMb^=f6ww1s6IZho{%
zh;Q|R-_{AJb%-C`7mV8Cr*H-9w6(a1#eTe;*h-qP!`MmhU2K@jL*)VI4V+ZpMvnI2
z14`{*b;dGj9ixE-SQTb;*kj)PyXj!dIZ>%E5XnVQ6Mx7Rk|iC2WV7;)Kk%niP$6Y;
zHAg3(nWt28hM_xf=-kPD@hAsz6hfxwptB<!_qJ^Qnv_~NQE1Ec!58!=wM)op_tqfa
z9b+1#Wugv`U2ft+Op<*gP|Oxs&gzI%{Y<j!mKpkjp#~d+y$)A8@OhBp5AsLF{Jtw_
z1uGHurW}yA^LmUiC4&5w0daesXq9E3kpDC}=Vbv~LeIcrNMpVi?x?A=T5>EJV2VJ*
zjY&@+Q`isjKvVZeD1~M2)|r&ppgypS7{eCsulXYAHlwUPRxSA6^8v@J#g>pndcE(=
z?2V3$HiEvzx=k!bOB)6lrT2j=O#=~UM<J~_%4}r=U&dAd%tXB4P$@@{{*A^$9B3om
zrcd92@O60zxNF8pojWSz^;7@jCyr`&NhgJ9Oo-D;P%XGl=bFkP{wq5V;($`=NJ4%%
z;~nux_3;zm!lJ6mi+{B8DQucA{0tQG2~w!r5RXLZN$`4yG8<CZ-cr4|6}Tw!%T|qY
z8mjgLR-5D~vB<>M1_<%kuQ~pJC+DXKBBqb3v4*lZ(v%7}ojo7M4e|q7+qy;eb}+`2
zIrI!(ta=T>I5)>6+@{|XVr%rS5=fOYh&wl-5i9S=flk|BPLrWC8#c!dTdt|8L$()g
zdh?!`fpnZPg^^KZ)gpvD(MQyn`rsGvL@dkyrVcRRsc5!7XLOjc3=fN(%ipn<%G)E>
zrNL{t_(K+)YOzMS#>-x$zZNOFDT{m3T2AArLWBVQfh?4R{JOuK`-RFyzRjp;#~1oZ
z!&T0dx0|{1Mr?<3i!$<M^vo`GYK*!2k92E<KLthMnjB$nFeyL}<pQCAoI?)oVWm>Q
z`dAIUQl;OnkNWAX?rCo|<lEBuA!Q11o&e>*S|NsV4`r%jQfKLP+-n3xJPXPin0Z>D
z^Bq5gDG}3-2F`VGjeu^!mQSvTH>mTHkqx)W6KIfCtKBi`1`$}xcat+cqsBJ%acyOZ
zt)ES-)~sqt-6x)%g)Dz}xkN7#&5?P~Qo-|cY>ekBw5)NPM&37A;RJ7C9hqc3CQTGF
zBJyTWl3dt`PzE<*OyqboSjGjg*kfgJEY3YdfzSEZC;NHd0dtTZU(p`qjlwQ6mImbA
zsqtKy9UsXnBJ1I78$~IA{9>zM0-6F?W#3*TH413$pdBm-ZrCVQ)>Eyqzt-8!GX4CQ
z2VpV{8NYUtlYeIlbw@pnJF(_Cv;Cn&MSjJ&G<Q&%AlF=`@~f+`Ggwgx@#tU`+GMtr
zrTla3!PH(%CmSm)eA`woj5k^#upCM_X^QPz5?u!@(Nr_~YVI;={It1i>@wSi{rzAg
zq2W&`(uU2*Ih}Fv2razZEg0>ER2H%J=+%_W&=aDnC36ZWk(CTsd@f9PR^TUU4w-ei
z&%r2B#VCP9`_454QR$O7Uv9&)-6S`Ck}q=jOZK8(S|^rh!bL3^(F9nTm~%+V(3g>-
z`nWzfY|?B!=fL!F#ljc1sQ=a_UqEbbhijIC!7mbuuCG>vqM#oXf>ncV_CS{j3lf4o
z=e4>IwtNuGJHcUmnwcMd+oxM!#)tbE5(dZ%-}gF-!dxe$UL+839d7n*O_($jI%3|^
zdtWh+EnVW>1PqCGWCT1X>AsxeOTN5XSB@)RxwiKpTuSbgAadjV9m8Y7H2l^ddyK1f
z_QtZda(mE<GTOSVAfMy)34~AnEin%B+QYhQ+IvmPqx1YZRgW<n*BAOn`%Cy=>_eNN
zk{LS^5D*I1{}cN_`ritmR81_+OkHh^jBU(>UF>bGOw^5>to}>-pDUs?-u>~+@ck&(
z>`If&S*5j|fU+7>XBI+A>1(8Q<Zxg_HfXxwZTn3cdF9KtbF|zoM72jyl@baAFry+~
z0WE5ohBO`qR0LEzuiwG`!GwA4=59@08RQLuZ$sw2kF&47xwqfFo+pB`ilG1g`b)R-
z@prpYrE=9$K2qCKl*Fy8Z%D~mX^D1&6G^ulx%-$tgm9F>m#{gzoy|`}^Bcw8<e>4w
zvszd@T5UJ8Z`My2G+_7sf$qXHcjpu6bXODE-Dm?-qAXa?Tx!xHtvH2nhNdr(ww&%L
zz0iWz_|Qh8rHZecU0&=2YZ?AX&tad|@`E*PT<tEPBp3VQr)CYu^;*kUcW5?hGs1b%
zhyE<0C2fmZr;WYNNp$EJgjPn;2gwZr3W_Zkjt-I-7qL!J!bLY&Ez*<V=aBl>+&KiS
zOHr^rCXHF4DgoJvRvk>j#b6<Gbtq9A-&N^K`9MlyX<6~`<ayTYs@_K4Ebjd+uqx?|
zorXk$vZ~66vLH9bm&!@1gRUDJA*Wh61N^kw2&=i5l}ZffJj+voC~tk9QS2tv)?!jE
zN9#=!0BmeU-DN62$Y1i;Tc^TdOJ=7$V<I^>T26a)!e^8ca)o15(d=nq)90YWX-I%R
zB?`M$pwbXYl%;hq^8~`C<Wrj>snBz10Z_Qbd)~Y<|I?j;G|>~Lv{|obrs<{@X4lTL
zkxL5WW}Fsr7A-A+GROd3qwK%OPeXQ91GY07dJvYLg7MQ0W&+}rExmy`m@eZP&RJE7
z;RVE5-~HstKahZ~XViZID^OCrSJEy$8rz<Mo`#CPM#NL=P7~smnNw9>lNK3NH!x-O
zLXUz*37_C%Op`bzm99^Z>nH7QJAER*DRn6-Vzf3dFP_A2lZicMgx-=~$rh!xd9{|~
z=gAjTH27hq?VlAADa+Z$cUh;T9Il~`Gg{4w+2l9R@(h(?057k}G$bPvl3#%*N|*M*
zO`md#WiO+79+SE<Hf<_bd|=(T-nm$Am5W1SMPi@KNGnP$yDN<qBrpP0oMXj>A4G0+
z;U71wZSshN4nMBW8Fjwd!om2BVol2Ul~E+<UY`BNDAX)JVAXc2FMGXK0TmT?Nypgd
z_(y+kJCXCy2YL@)&T1#S;pA|&-K@lArrHTbj@AQphwd=eBRV8sAaB2t%RRW%Z!B4=
zCa7vy>84+YJpSz(g=dmt_$84}`k&_cxyOzax%lrc<zWn08_qwEPU$du<-8&Lk;Jw<
zU~kGDav}nvVX1VAkYJB;kP_=|S>+v4r5#yB+o|vJy>DZw+<~F$s_I!#hwX>%Xs|n|
zxh~Lf3Is*{Int^MQ;euu4>Ur%;qbeE7d2P(p?AvQw+>zJhjOQsB3xe3WdrJEVuCdf
zVRzWjMg}*H6+Q5INmgfC;E-EMzpyS-R{9B?VQi-%Pxl8G4$KI%U{HIJX1B1c`^t1|
z2Ot>ec$nAgfsC^8u;OG6$0FE~X|)LsTA`A#nfv^veo=Rz`$4@;PXK5Ydn5x!aC`>v
z<0$|jv$UIGvuH^`Z=3=fS`lla-U#-!j`Y}_+~xB;Rek<dyn#=2ldIvQYW`Leqop|2
zaj;--^X>2WXB-;erFy@jCa@rYIGU_g!Xs@p<2Kn*+nte{u02O!EnQQX_Pp|a1-s7i
z7<3Sjqge{Ihnd~Wnrar!D}Xo<{)5O#LHG|)tJpVKXZD5Cx8L!o15IBc!-@7qFjv(*
z@)Ni-9HXV$^r)39<@#AoMmUocRzWyjX7OaB>yp^ss0}Aq(9|u?ZGPMY?b}DJFLD@~
z-|pr_wmddw?8ss5D+h+oKdr}aZ`^{^#49E3Qh3GZnRf!XP)z<aAA&J?xghsGr^`KY
z*!p*_wl@$~>9bW=NN1OX<3&$wY~e@T#h@QOju-cLu<w%ire9b9cOf$Njdu5A>$)Aq
zs6WB0J`zm?C2W~1k*Q>rm3X)gZ$B59)46Z{=FB_jOST<DbI^5IZ_v*WIO&w;EbC2Y
zOkN(L=fLjeOfLx2F_v|NluJa<NUTkCzAr=vdUmV|Y=JraU{wZF=k3o)FGjdYa97`%
zF{e2`re14sGM5cstCqPi(Nnt(sO&g2kANb#K+g`b4~lzEO}@=>U2HNg-ef(jO7Yde
zw!WIT17ZnI+!xr=)UWcJc)Y<>**tXOR}^@+Ew@YK;UEvC;gk`q*IUkk`i+qbw}GbA
zMUQdUk&V3rMwUn=7Zu+K7cscy8_6u5-thND53EQ0u&qz|?MdDbc(*+;p(e+mD0QS&
z`<WpYp$neci0zKaKWTi6F;Ab6g3oHG?bGjlG)1?4HOICWp;10oTyZ(eMa(qkYlxDJ
zKBY+cSn(_z$JwUy@r`Z)gYC;y8h!r>qcgNLt+;|sS)pxDKCO&EjEzC>vNG-o5@a(H
z-dcD%!*iQZd)u#;G_+)0(^SU=S}JS<M;IA&P9a3@5%&VYv(w|H+_Z}|DmbWpTr?ja
z2KwUxl1HN6b7sT?ouCZBh>0cr{Wrm{3;iA>pyR9ZB3uC?kKWutv4QAgJuLd|9#%L7
zL$p9hQG<3q?;YbTECn1V@!py5Hn7=C9+zm4Fwhx6r)O=q<t^*crhoU{Cx&S#8##;H
zm9uC!NwT4fN^#FiQ6L1%KlFK1)+KR1x-n8tIhS#vqbcH%*#{+$W^#`E;g(DKW1Ls`
z?`EWh({0YOH^Q$&X2tt{>->IMfMn;-Hg^)_54G+G<A31|_d4}yjQ<pJOZ_L~@n5yt
z|NCsm|2y9JAJZSMDmpfJE7-YBt)B2HG}<kQ+mHl8l^2U+5r-|ZBf+G~#oz=RGOMQi
zAq8EmOC2FZFx<|9tlp1aJ-qj|oR=;5_9$aoiShqhvNr4vhAFrZ_EpdpNC4I{$gy%8
zWb(KUbL%a_=f_sF{y(=5zq{FaE2X`xK~FYpqoeD0q?vcl!amX-$?MEt&yaciQ%t10
zKTkSc?4^gShR<So$^jW~113aMuu(LBpcRy~QZPf~3vh*QK?P``j4xsS!2rN&Cm$R$
zqJhH!BVdG}esXBWnRKWO^=v6|pqJuqjId!v4VdkI^s_gAo%!X@oU5moV9w@%Ua6IR
z12JEKnj}52+q?U#_;4X}7fBph?g|YE=mX^)`Xeh@%(xV%bOm4e90<y)8I-Qp<-;sY
zF1{Ivhu}!e@B1n0bIG~(WE$J!PCtZC`W#66qnZYD;}iIxvI%ef5~3@Ji+FGvqEcpX
zm|h)BS?vhd*S%FxjoD&v!{JVqhBL}-6%-Ue^oZ|>GsXC3N3?-?Bm>7NQ8G6k(s>}J
zsa~VwnSJ?;2?Q2_IB2Es(}X))mQf4yojxO~oLP)>xmJJ_^5~+h35ELobx+9t0y=&e
z48=#lke$s*S0fD)7J9Q!nF9#T!IeGqQ3I%*VI17TCjJ>2(wKU9GvcmM)uAzCrdl^w
z%$GhVQ#lafqoShFI`fP8CkHUMDU!&>=hyf5JmHyvyoMKIooaTj$_#7k*Q^M6TD%GD
zkZv|J!396L4{hpdU&IAX&)&to{V>(3oJwK6DJv(LY$fr*k2L_FNCP$YkBW|_w26+c
zxISF&aD&VaL&@zY&w}kLencufX!D|TuU0rkZLIqw%+NYAQcn2@mig2@%k-3qhn5Xc
z0SOXQoDHcfjR9RqxnHKP*xoeKNj7%n=+z#}YCe$l@peqHY}yw~Y}BovKXI+HZ2wIS
zT|(qLdIP;UQe3ufQ<$|=zzt#G_VBcoqMjF+_2#x}x1YuYr4Oi04{LH*#bVsB^BN3N
zt>6C#YRvPXF*X|+eAjJqIzrrDnzGld&xpDj!Lew(U&u)m`yA_e00lOZ`qu|%mj5mu
zSYj*-3TZDWyri=m>~zm&GHJBrL2(2vdrY!;?H>3X{=E3eCGUk59Jcm3w}N{EE<5ax
zU!!5a#7x*8h0UIO#7s5|Y!iF+OwtRTt}MOjbnSdO^XH#2K3T@QhPo%B_M0-;beNZ)
z(pNYzT(R9?_;-1(HFTWty=Z$M=kWW5AQQ$#;t`Z}`e??(##3omD0Qoh$-U&K%^IUF
z5&wSGU!7lF*}PPEtWLO1U6Q)&@O69$O>MU;*yVu+MvhqZX7oZh1QQ1+4NJOVxK=&s
zV+VCF=glhHhN^24znp(5y^T{CU!~h6J8fQT<@-X!9cFKw|J<@X4yyFkGlL6E;fIv|
zmfM9c_sWSj&T`oQ>|&(d?iN=0mY^@XNa)=5Mm0Ry5neHQ?Rxipzc``b3#~xA{6WW`
zB@i!*E;`#%I!ukEIopUVFsVu!Ti8E(n^v;=M9qf}_&KzL%P{B)p+D)7&~870xWS~t
zVp1|(9e*cO_`!g2@<iJcZ3c|*K0mfyef23ZvB)vu56z0T`2M7Ls;#UoEX)M<%N0e1
zUzj5U63cU^^P_?(vNf81xF-GonuCDK{~RA`+|U^amB^pW(X%z}1kE+?T@SE1lLF{{
zmQ78ehX{1)Z{{n7X+;rTV$4;hpIv+%ex=pg(x<{t=H5*!9XAmh#nHH49exOCwsR)n
ziBEh@lC(r{i>6)m2sN3kS1SYyl;ay@j}?{99}BHkYe>XxnX0Jjlc?_KT|%`?SM7Hw
zaNo}KlC<8B!S(FB4w>>wsye>Mlt;*G88RI+WXBZr@@LI9>nv!Oxik7US?bE1$`fc*
z&v7>wsmsWF?%mboOXtHmnl#z<mhVK|I`#c*Q2;(D`kn6$K5U1<&gB<dCJeKEF9WIa
z?7XsmV}h{nijF@NEz|^JfL+O0yhn`ZjlOv{T=4-g>B6(3M;_-;Edy<dl?7-udW;3n
zX&<GQ(rVQ{Nk}OKlVia|JcLC&1eL(JET4xt$Tp|9BZ$fq$c1o<CMoAP{149ma!Q7-
zhDy8;KtNRgaZLaBPKoM&4T9xeZCtE0oc_}i<fLlmC~EI&=kmWq!oEJZX86AXe-?|+
zZD;Jv+FRRMKuYnetLbe>i*%N1i&(GYlkJev>Lyxx*gI$^%>D?W2_qkkOrQayi~C@1
zr&rhH1ldO@DEs*POWuR;j<{3yo!%tsCQfPpHssAc=XQPe`1SSe-g-J691W5Jb!Ma)
z=~X(LNU{k~Q#MLl(NQCsC3QAZ)|@%<&=_o&nE|#zM;&<5oWC@O958;%%dz=$<R>Z_
z&ZA1*#G2ohg|t({*#HYI&5(9s5Vn2U3bfGNO~j~ai729aqfhi@*sBuRS7MJK#1O<O
zo77cK8*hUSwM8PgSp2e%JsN8&GCpcDw0z8qwcC|SRQ$;<4#<kOMIhbfRYNS*hUL%?
z7QlXlx|$OX64>S?fB7^==1q&&5-38Fledsp&5x$dv|K|7__$(Gu$RmwnuP&rlpZHl
z!NIl(zKebpq|_Ct_^Y4s0ZaFMgz6@-m;zye`SRwk{{*;e!!e|XOOaNVqIi&5RITm{
zkS(C@3UVnsQU^*DX|ThDOz(q;s4fwuqIMYLWS>$R8~DMof@beh(L<1>fh^XFFix4O
zCy$ojOf!4+NGV}b=MW_1$RHc7vvs%ym(`&`M2mts#2f!uCD4t82e?(AHss2RSN-8N
zKk`sd!&X<PVx`ky*TbGeZ`4$Nz(cBEkn2hsu=l%=r+{6goia!m1TP&7g|mRz#IQ|*
z2bfm6Nxb>1{L_w9K*Tm;m8gPySY5v=s_abnfaVc8ALFRZ$Pf}zVRz-Lg5ZET8&R)C
zvAfHki>qO0%d@<wroEuK@UxY<iIA#j2w@|;T;v)lDRCyaA`2)fw(}lyNa_L50Z`JH
zQPQNWNvJJAkma)`6?oaC*hdn!n(;adS+ZJXLItQZVpPVI7T}E25YzTT;aeh@+Dp#Q
z$wJ$x+mku|R8i3b5B;M@;Ydpb`KR@_IVCz^3hB80Z~X7ncZ5nFc+SiX`T!Cw`=<Cf
z#&D5#6r~Gz?Gc252!z4KSPDsv$*NSfb|OK{LO?==8J3&6+tUFf-X}BgdN|i8wvQIO
zpdz+{b9!Po6=lJla%UXL#Q2AP=fXVx^N`{uiodeTUmO*_DJz<>DrnT;Rv{VzoN+l;
zIL64H0X~O!`2fk54igPx+9?9F#6X5Zi1jEb9#5X&zrzImaB)nMe7ZyHgf6Ae$0XNU
zYXB??b6l8dgg=#dMCTd@UUm-v(+3E_TFm{E<xaJCpn?&I^TI`RCvu@}<Cp78sB#_g
zOr^9`85fxLq3Zs%q?KS2K8e_MvQ98O7TJqfvU`ezFv;m+Dsu^Z+I#mn>FJ)MTY8d<
zhx8E{-5m?#M>m!?goKy&OPY}JOHlLHTap6z=<>NT98{zO?v6V@2$+*#mzRbXu{L^~
z4;2MDt|~Ir?mfY)AtOI^hq-2&40T3=!b3<vLNx`}EG&=B6nY(<>hP509aEcIOu<M6
z)>V+Ru0!rX)t?hdU|780Aufd>Zu%vJzSYzj@R5?__)=HyfhL}@ir{SPJ5h?+JVT@$
zj^mGmJt&VmD~P%Io1ZCCUP}{wJ6xLXCxRi1%R6ko-uA~qf(K9FxIN{YUs$ny%x{ln
zt9Dzq&b=v;9M4=+OIJ31mff&>0HOE;JFv9AHG@xZ`XPP4_vlO))!9f}1?EQgo86D9
zJF!+#8sD2R^N5c-e;DD)e)wBMK-SF12la|#t+rW*v-$Q{Hq=y3CKIq?2H%%T{}KgB
zABC77sWEphnnPR0=<T$o$vc~I@+jfsE!7VIm?vebd4Td9%Iu~Q*rcfP-*%yAMF{nY
z4~dQr&zIc7Pa!Pgj|^l5v;5LKa&YNI!S7J&wV_+W_vh_fIHLcMAoRTd!UCOEZdkzY
zo)$8#Lt<kj4Qgev#gYr1%d-`9C%YILfMB+C^ymp{m&&8e5=`!g%B<%}yv2rx0g>u!
zfN(b0cvPDIlHfe{?|guhBzHMi5|!J6o1Uz@0Mq4}SpTUmzaZ<vE{k@{yn7%`0CwFA
zPNR_Q=ZA^qe_F}@`QgPfukmHBM$b5V{4h5Q46|dWX#@NHT#$5aTS}zgm#vfvyz7tY
z%}0Hj{pe?d_Z^o6`#f}Y`4TWvWmd84yJ4GysrIvpP6{_`O=2d1igx;b^Ud-el-oim
z>p&G^;I^waI`^6&>B+(tZYp~&p(I<$hi}6ihcE193w1Oi>PS`UcC_erbg8V9e2{3*
z`<aO|nI?nJZwW-_zJPZ_vHciK|4R4MQJgS88)8pk;-tZ5*)n9p-Y>v4%iR)Zn1L_N
z!2VOb1n&;Q^^Z03QS<~3J=+kmCdPH20l&#~MAiR8=IgxjW`DYRd-S`bOaBucJ0&hi
zoqf>P<@IIHdf-pV`J;dOHsoSU+2WA$wrerW_^`{6np6uC>HH?dtddtSnXq%D1TOy-
zZ-;Hk;VB;bwugL3snh_$@tO4&_6PbUUfR!|@9$6pHy(1_tZ}Oq24T*~*ksk1f-R|l
zg0gd2v!`||PfdA`+LP+z+fl_+Pw_9cXr3RG<_9n-e<D}Z9Q__G-gKRYm?D=IIExod
zk3!RFmiU%@e(Rl;Qps+gnc>cGTwiL90Bj_?Ct0rvF|l7927*I~&3W~}D?QiQ-5+e5
z1}+Eu5yi<RC}o^BuEp;rr%q3!7p_I$F_p6&2^T>?&W(XunRgcHwxUMSr$*T#<Dzdl
z%yyq^u{Z9%OC0NVA7hy}uU-$}>?c_K)pzCmXNklmT=wjz349DxwvhMgb)V5=HBr|L
z__Sc+$zU&{VpMmFm~UGC71fd{?4R3{2_!`IGnIVa*9T4aw04!$Qi{KSjr@s3cV~U?
zjQJ@%M@E;8+m3aUbD#VPKR7St9ayiLrl3jnue?cZo^e;yL3^stj>O9?iOy@%4ys4k
zii&{WvKQrT_p9Tc;p>FQkT4UX;s^JC0U=1n)P>6bfFKc!{~v(R{}`gDB+A;Lx#Eqz
zw$+3Ui#``~a(e_sqaP;tyW=L}L=#CX52UkAxy27`XE+kfOMw1*UR_PQY-)9O<@C0}
z`Yxnm6gPLvgg%^!Mg{S~;4Onf%0q>#D^ooSb`|giK_VpmPTxL%`}{tBvMjy2!KPj}
z8WN#t_KFzyn*Yn0mYJ)XYF%O1yYo08<b%N&=C7L$QrB%&24esEp{ci$K=P!PV>T8l
z)*7uEhZ#RM1jh=S2_+(FM<u3#I73nd7e<V*Nk<4mH_gZ&ek{ghlP(s`w?({y64KFf
zzy%P8g6N1W^H7s5<~=q`-J30Q{?UwF&J<x#yf;jx@42Y53d4vdx(~t-L4T!wA*dHL
z4>m}<Lu>g<K0=4MQFauf*?u7!Rq%#q?|YANK#hbJ-ISdN?y(^b{7g!+^M<z7<Vms!
zq)pZDa}21=68bfra-)$d&eG|Q(uVcQ7+<oh<-T6J9vxY2b&IIA7_lXT`cJPA_=7||
zt#A>|1bzlN3aX3M&LfRio8qmt-qrazFkAxASZJjXt;vv>^6jgYFC>Oe-f|s?FQ_6w
zNoT-=vcG;>JrX#j3@je}bx@R;CjC?K11a5wi!PG;g>)!C@$!L&RMPii|HVWp=}>Qo
zg#;jNb4KZ7y*pu&pY}*cn<`rD#7$2J`G;N6QBA0rCQ1mE$`REPuEiO(LNRgd-l}Yj
z-(mtLei|lTBd9gkj4Hm0NG0Xk-J8S0o8z<je5@r)BLFZe;}cI)pvS`x0wFKtL4ou@
zBlvv<U@&;7cu8@?LP%r@M1dJ{0iOtmolwVs@u^oT25VsI@?1yi3O?}c3_{tNu`TKd
zM7MmU0ApIMH*yaI&lZe&jQcc`f2{h$E`Lhm=WDCh#1+iSJ!R0NuKJi|LjSJJuR^*~
zSZ?IxdTgWnpMRNym|RIMa-D2sweVYIv2LnN#oNTDM=h?fnv{E-<71kGL3Nhnsgxyb
zIUwvah1VmG_*z_bQGjhF&|KEE_Y#&lHcVD^3MM%`r#jd?mb+*+#_1Dz+>!(1m`4Wy
zW^GmHxGCoZDk9j(%4~%sU!X-zk0++u(9~j$EJs}w?(*!-7Hzo9HIC1z-L8BCR`#i=
z<@$ec_Kv}ohFRBecZ?I;w(X>o6RTs}wr$(CZKGp#Y`bH2%r7(byg#0KXQt}?>eTst
zPTh6wb+5Jey4EhIgieV`elRJRLnuNLtzJ_C+hhocOos~aJpRbEMWbviy&uKG@RO00
z01?n<%`ib9c#j$aMDnDHP~9$JZVLB}Q4u~(MjVn(rRw~!TW;9c9pwq?QcL^c;_u+f
zY<WJ_I807}lgVUl^Q|vG%3qK4jL;>(ZQN2ZB*)F8eox8#D#1WrCxo&?rAFo~p1@Hh
zu62vkmNiXOc6mLW&4J03^lJDsD%*Wcd<z6Cva1&zw=9|dnE?mlQHpDvfVSI%uJ=rf
z&F0q$Jg-2w=edqoQ4d}$1>}+PMuaWC<ik%FxSgC+Z<4W+k<h@a?>_V`7?rltI2lK$
zdT@>`r@{pK6g7HclW~u)9tQY4p2#aq+?z_&H?hfSv84EVrNu}*wK82k3RlN|n%lB_
zO<iTpYi$D?&YKoPB+*n|XIG9aHlvyNfkYIW?huJRNMZv6v-M0Dt^gF-L>i^&k&68`
zp51ok#F#7mq0J6cUPrfK;>Ag%iTbm;LV*R8Si8+Yr|4+BYIUAB3Y$=W@rGx78;vs6
zMM1h4zU8D|-g%_+H0&Pxg~mF+qlKI+*)azn?!D(ia_v@6%+^yQ57by;zWr_~m`#_)
zN<FfVMG3z!rFFMD?nC&jzgk3~ba>k-u^#k%YJ-j%KQ&mc^PU~*;N)IGR%oQ^FdXY#
zjkvB}{?-Lf|0>bNf8hQ=_y=lt;UeRxf`9vF4f)?t8}I*?um4fAy6fQ@qkVdhk!M<w
zkD1KfiLa5Hb6l8Yx|nN#Nx=OvBXXXn#?dek$vT%^v*utq!M8?7LTCzrgt-S1;gtiE
zU(=YwMm>vm^M~B}8sSD0!@TsQudc3c+9tdm5+r)Dyl!2+Z@qS3O>!Xcu{?hBtEL^S
zv#M})<izI58*Y>^CN39U8~}Q#Ot|%7lJ1MWN{|g`e30fBvy`7FRTw8p3oZ8}@wu3Z
zNh*su)5Xs!>L@X>o{B9fQ6s6&XU;K^l`}4sOj24z<ns~thyQ_l!K`Q{gR08am$Cc4
ze#wVyA*UG$BMwLw^tl2CBH*(!yD>u|n}?twrSeiKZOW6yW2sOiTQLK<crHNzg7!}d
zNpQ$gGYX*=w8mz#M@=jKsP8V#*sbxM0Z4_YyLjq!!}3#SXEC@+F_gPS1s4ccIh<v~
zoVjEmwgwH3_R{DmKp~nn&gEoMDba2I!r=z2<oxpA>G?YIEa78W*&@JM?;k>?=?~Zt
zz0dPMn9VgglKF{4>F4$FfTnexeWKSFs%&h=yc`R7yB3h%MGp|v%5rhp1UOh4FgE^v
z1t)7pDzH{5h@xSyIm^dGCIUjqO$cSP%cwt)*O1=huwy6{QS6PCCMgpoqfRsa?s-Y-
zNSNSGW5$4!7}prt{fO1AFuN(rfERXpmviZu)<>T#LSFme=NPHqXj*Hn<*mN_x==-y
z9!1Vf4ejxr{%%*@&Bc(7-k?mOq%={umg0Erano2sY9-`oR4L9U_4YmmePdj>-;wE8
zCAau&=o@Ap9wO@gRa~E4IP3>Hb=?KVVyT-B$;w!KuGlD&fXjFj`J?h*muQUX(&$<R
zRmG}Xnbxm~UP?Pao<PTsDMV$SU&L5ix_npATU16jWpVg;IFfInLETy?7i(UOb?rNy
zpnuZBpsL<RXtx{DMO{-y`{3+B&W`vaz5q663dXy_!iegwq)uw89KpO*GN2n&v7XQW
zj&&fe^PJ@Q<<F|414fAJ+L$I`k{!SvD_L&S{qFWoGzhPr0Ftv8?8GImbuz4tAb~mh
zgz6D$0Xf=5>U@rk?S~C_3D<*uzw9#;U17wdaCZs5b4q;l3>&aHor+p(3iq3;;;s($
zJmx7w%W<+@_3Cd1iYL|4YX_^+A#~{FbeU(12DfPG{V-bIq+e*lDW5bEu7OkwXOvrK
z#tXL&DVXx3IFlCL;or7t=hrPOeuov{bIkj|Vs$HvW+Np#l$1rabR^NhcvhzW;h{S3
zG!hrhXfH@>%{1=`-Pxik+!AL|MZJb+nM8;if;475n8)Q9i^dr0T$lbkfO>_G75&UQ
z5-GH0S>hh>?dSOQ(L63ggvXlnUw-C{<k_U3j#@$-(_?{L5Eai9nB2lZqsl;ZJX=Xk
zN5)L?;pecYB!r`<@A>)P=HkU&7j{^jp7Jh=EbK#~`);@BZCzm#x&Jyo@rJ&G3`oxQ
z*kSXJ!u1ZyCC*L~ka?xkIKb=XKWa%91Eu7?4BWxR$f_kQ7FkE_vaH6!ueaY71H>?m
zW>*Vq7`;GsydwK}Iy|3lM_ssm7kD68wu58$c$%NsdphmxUc2ACp>;<Fcs~#%HVK|@
z>W*dVSJMCj@kIOf$m&o!cQGp=xzAx^(_~#?uKAF?MLpCR5M9D>A|&K$f!i~~CpCRn
z<58X$+?XgMkpk!q)6;okH%A(8(7y4EhAxNOWveC|YjqaG=heP5v#usSbY#5xl6MTy
zKQo42IMB`nm@{tLg3cxZpHed8k3HX~C`9T)ln-)eWjlumhmHw*XpbbRP2&vMgsEG<
zQT<^PujdYb1}IeZ)Mv1bIvtZKxMCHlB}(Y={<O#vryCO}EMSK`cKjhjmPDFuH3^D-
zzX%>cqQq*8#xXevdHAr$k#5ed1+{BTbL_>Fe}=_PNqMKk`{B!34Xt-1&{5CcGB={J
zN=<!i!OcV=H6N!2sYzcL>^w(`JGbxEB#NBTLBqqAUo!l3mVITC9Z@evM9|TS|5D(=
zj;82J`V{TUs0)>d1D94&?|+OL{kMXWfi(MormR_<vE#|II%O(AyXj$eBBZ|Ai9;M6
z?QR=m&5qy{Xu2aH;fhB4D;KM`DPA?rdDf!bTmmI4m+Co!g!%Iun?qnQ2DwwlpE8*2
zp#~78=9{`nzj$d-l#r}c!{9@&c##tBrd?W<Y($St(h6(jMYU*`K;h81!L^}yD5&gZ
zhW_-WyJv+zUfB10V3OG<cxGI&*c$QLX6StRTv~wNy9yts9E_0@(+1mo>_(tZsZ)~s
zw|dQ>9g`s?yXJydWSKBH9oF!PO*w(XeT@)LTZv>d*-p)gnx%#3)-J2-c3@)BMy6WN
zy-|g|5ufhWIG@eKhk~hbpZAw<+h*6j>4Cl4zXimXxgB6Tu6;v?KG9V_uKpZf9r^Mf
z3=0@(;om_$Zy!#57D9Z++Fv&seCT(uCupt&e~!R?Fn@kD2Uyi-UI8u{7};8xu9B1k
zAgm5^J<xw--oVOH`Q8TIU}+z3E`F%^%+&#2p%VnO9R#MLbNfmUr>FKJs~g?S&~@o9
zJWMU=`<BDl5F|?>U@Mmmw1KbI+v;A1{GZsjpC!9Lb>mZfe~HJ^%I<nPK2b6JVHjUg
ztWaJ3GRGN~TmXEOxv$nvPVKPRdf6?u#(RTltB5L*X>OCBs+FOiADa-93g_deVBY$u
zA-%t;`_a(B@s?gM&#`ici_20zZc81qQ<EgUt__WDiZ}@D(mx7p9$q4kzZYe0{G2?}
zjeF(BXwO9&-xMj|B23E6SGsg|s>Ya@Oe1@Yb|DL?mTb~UHZw_vJ;rl7m>=g=;frCA
zydq?3S1#hHq+iTLD1Z~{w$+W=;`@3AgiQd3mIkZ(#wurw4XziB+kn3;#d3D!Uq6HR
z24BDPn*p^e)S+9GwoQxrNwkB#9cs%8+UJTlpp}-;txf#8IAy04gUoH^%5Y-EVWMHR
zB8!7{Wa%4)G{-Pc3y4ljj+ZB8IKPL4RRObYpNb`4)Ww4bYG>7bB$J@($1_o=3^tah
zcQoixGJK{Xd=>|%osGjv*QCE=Cg_njd?pVbCxQJ=mcvR`y}gg$$hD#8yOaJT_H#zF
z;>5i|PhrwJ(fB_0o>$b<rm&VxVVkQ$lw!~$W{yd86an;`+jaSPW@!x=zBzZ*q{&HS
zeCoaLKd2k_K8%Mc^q1hq`u|Ja{<q3rO!z5{s){>u)LK`HA65FGg1~oNypV&3ZfKx*
zPJpr|oXKvaE!x?^!!mVF$tt=vmD}3bNZZ)Z83lFL5a3tlSKx=H8Lt3VsZ43HXlA+2
zTAiV$Xh9?LVuC@+YB9|xZSv=_=j!#{M`tTEJ&=JTFHe2X{&hntMe-ayWqpdiaEgDt
z^2S$KJ{8^8*pqa874CFA;Za!bt(F0Dej?(#;4O>QFT87qDj@tgA}#p9WP_FsScVyo
z5arIp3)nE|3f|6}4gw~A%)NNPkB0zi@GgEij?UJ0BAvbGG^#|eOE~_Lpw*6u#4tkI
zKOs@yb`vOa-GWo^Az%b^=i}efq}W~kpV5z28#MINTDb~#z~r_mY#G^^Xh{w{sBG8z
zq`AtAUN+9jLvdH(o;Kk!u@G*`*Fkp|k<aRjYq^XzcKTJ`rKyuaz%nwAywUPf?0iCK
zjkPTHd(vOr-yMFDeeavF0qIiF8&8YQ>)kWqaw!y602d9)69;)%r`Y++l(W&d8;JPu
z@~-gfkIQH%e4tPnu7g;q6xYla`0Q7dNDLg~VG$w!sRDLq=eJZCTnx(KQ}-q^9eZd@
z8n6)4jqfE@h)Ky-;KCy0*TcL%NyaVHpUAyn?iSkP;fe2Z-9I`|115fWhZ<r*r39+v
zG^>Ui;gt;<WlLd^da`={C_>9q=9RCSre5kyidP?cDb`D}OW4s@@wAq%^1mb#2044+
zI)K&XIfy*cj&Lu>^WYUGXEyNP))ZZO2S4aR3kxVE{1xUOaGpIL(`Fq-=r)0Qv$(+r
zTYD&6tE~y<jds*pTN0K99Ca_DEUOS1$5tNdQVCiPQVLvtX0$~WSt^TYEU)M@H=v_d
zo+sk_y`1F0M5Tgyu&0m(Kc@VEtSUnghb*E7!8W!i+1ykvFqgOs)vIduOc+<<d0bEZ
zn?jNKUE5xx7ftqB#vp{9MOlG`Pcl~GbqL*~$)ZhzDk#mX1C7S|4ihe7Ym#6V=gII*
z9v=gb!y<u*nf8)O)>KG=VHGN(o(3!7<#<*o%#;z1j}_4MG)Me=3SH$rzBp&7B_tWg
zJkWu*^xS<X^IA(SL@B$f4YS*@B}!bS1qN3ws!YG%xHoOiX(F6p#Q9?Y70z^MzNuZj
zhedDwRN%Otu?4PC542J5Xh6Ov+$Rlsc7F9k`8{aVUX!2y=iOZ!%h1Vlo6yKl(y8Gz
z%)vDbE&#U83DCouGYKx(Q#~x7R#@j0t45dJZ<I$y%UldcAJYeB;QBA-t>#DO?m0-v
z8>l0IL=DFqexRKe`0+Sx_iph$P%+z>Q;RN}p`+~VO^xc}oDTnUc$E!Ruv5MROC~0d
zy%7(u)>=3)d`bemc&3>o97sZkS4KCtkh#M0*f8V$<1^y|IKJoDAsOu|x@t*8bBC$U
zgrzPS;`JH6pE$aPCYI8(ts^=7$-I}S;RT}(=RE3=<F$)uQxkZW3&?Y_6O~CX<Ldew
zAs^^bnP_%25V^fZBKCsGDy(@%jZmN?Ez{(x`hYXITV$eU!q;%U?IJ#zq}++4Zqc~*
zmHs0Xno{wJb&+19oFv-}FQ0noxzKK5v{-g*K_FZ@8!NdT6Qjr2s~YG%>*Q?=h%ZvX
z73wBBP5rnWXXhcV!K(hF&qIv=2{%HpLKO};m2O#$X)U+kThS}P>Ek~g55#ifSW8xM
zUND#AC^%6&q}mgMGwERXt)XrrQ*&XsPGOPIa&Pg7hYDInc6v449KE{bE4Po`(C?yY
zVSv4<+~KkTfcR@;zEC^sBx8&qxofpPg~+z@K}wX(gFx~DmG~VxJgtl+p$X1+8XKEa
z)g>ZHxzSj2VB!8#W)=GGp9*}oX`IFJOM$EZ*8wvA|0r-JGY4aRBL!o}ujw%<slJV^
z4Jp&VjE#$vEEVVF5JR>VC4uYW^;+Ov$jx-(;6s|-MCjEmeyDQtBhVLudqvPC(1o94
z2&a_HKG%>>g}9Hb`3l&G!w3>n#*eFfS2>fl+X6lyZBeQK@8p~MyZ(%!#arH5?v858
z3VrPHG_c{BdQVj$SfFil(W%9n13<I#+G)v-TB_pG4!RmZu{p`y+5|W0mPl`wVyqz<
zKg``K0}L2M)Z9_-JT_w|s7`0WwH^lw1?8`&k_(zZEyn|9mm|!R*?^15Ob{uCaj3v*
zJEq8^?Ft+V4b`!3GtGk}eW=X^z+}(lOyVfp6-BDi;0%)Jw@v04VtUbT03CGwe7GSJ
z*z7c7({d9v(AS3ni3P4adU?J;UQ>dt;R;u|6iDt;#MpV8l6o%fkS^P1UBDPce(PD5
zbK{s|4*`@9%3Ekqx)8<V<$-YDWS)>6%V}bL1zz|SZN_Iuf?;m(xG+<Y1nVQ22jy=%
z{yy#MhttfWO}&G~v1Hx&^zwni!eAmVNJxmH|IvlS2_)tasm17RTzx{sa>K+@wU;rn
z%eLsUNKfX%7-#H(yH#NxdlT>wLN$O4NT4GBIB`5CWVYFLLA7oJW>hO8xgZ_mZo#qN
z!zI+x>}v9qGkW@dg^7^zWM1)sj~Q@BQR2rHyWSWd#6`)$^4%6?I4^g@T!bK!#0mvr
zviM%@Weuq|KXxWoq&7{mZ!!(YHNNpLQv_xb7lK>FQZ@b##?I(7%^HVkMPES6jtpT6
zZ!FTtNb`(zm||>WE3RCmE?tT>j!v*qp|bN|w=_v7Qeefa94uwi-_$@&-+>T;nL{DI
z0S$}vg?;zk-<uZNrWBWSn)M7f0dFwNx20vfhT|)bw>_5f9{FXe0kcEZ4K#vk+Q;ht
z*<OM<XrIT<Eoi2KlTGTDXP96m>uDA*`U6p6K$G)zHg#oRV<DU<Yrvgxk2LO%)BFV{
zc4+~f{>jj2`PWd~U$e<_rf`2ctrw?Xr1X)7NTwjFZ=4+P6ZyBV;SP^^SrQwC@83%7
zw)drHq}_yjcl0e#VmX-35FCrcJs3l{c+KbTX<i;2ZK`>uKVu!IN(*#n9qS@Y<g8Te
zP$EMW8N-g6W$mDU2sn=-HHG%8m8i!Vf#@uR>35+*_<mVDAfW`$gqgKLzkTcauN8~&
z?<)3RO4VD*(iK}7bu)E2NM8YYt%zull-inTcCM&d<L@y^K6-Ewh|HiW-cCz8_irOO
z7P=S9w?7yHW}PZ_>CFq%ALOYMjtnFc-$7w7_s=`0SC1~!dq18pT)%N#2kAF7cO+Ee
zb86Y9xUaKpHh~N?-bnk_97%6_WUN;U?8B)F#u2UB9GB!+I*hp4$dws!##|K9=tv2s
z?FR4~t+c~@cbb3Fsm;{#??<e?ZPB~|r0OQ40$70V^Bu;TCurc*0}FCZ(u&~N%Iug5
zb}>Yxdw_Y8>G&dvkh(19q7cScc(fD@1yn6Pxt~h_N7KCUM`Gal0)#Sug9wZXR=@&9
z$n&0hlqDcTOQlORuyq{}PQ<Hk5+YH=4MSDDc_B8$o9y6&DSR{9p^tS*o}4&#Y3_z&
zjz*+afZhQKafqX7n}(cE>?ei2HK-|{K^Lu`!)PAatJju5h58eqV2`KJk%C9BG|<^b
z?dE{}r=HMFMSKUAsO~p{On2WHTe_9~jJ49yp$-Y&v_mxdbn<zL>1|KF)<6qBx62U^
z_!V@7B0#fb%cl0esk?TMoS#rPidIdCUkM5HFp^((U3R|CDbXKol-^v*)_(RgKhWvu
zCvIo+D}fiaA|_FezI@J|*1+$J6{mbi_r%t=!#_N5K9s1GD+X!a+Q)pI1M9}q6>~y@
zIcv(TJj$JV?Qc}BMM?ATw~ytE1iStbuX%G6q5UxY`I*iaIevXPuMMn8b%h0C+C(Rx
zFZbmU)=6Wg58-e6H>&}xYJxyCPwKsuQfCTpYroar3;fG?yK#(#_o*}OD^21iV~!Ki
zJ&}Pu9-Ydm><YI5s3sY{jrlR$rU#A@nwqVrmLh@|%W6IKjrhx*1IK0qPuak24q;j?
zBv(H)YC_>&s9`f{18m!Gt_l5}cRkVuAdwD5rU9bCad%ICyG+$J^P^?}250+cj0~`A
zxOZ3?KT)UsnM3ISI}rup_!E=^#GofFUeUZIkq5LCT?4Kpx6(+<+B#~=^r9&72z%ll
z*{kcVT^uL1^NNu+bt$lpwtL6kAbfro>h9B0gs`J|Q@0;v5T1Z~jfjLA1m>(nKqOz%
zG@%L3%ALCHK76)bTcjtyW#9}*Z`>Nx<h$R>+=o=vN7x`!i)Fd)%?%R1i~KXN2&Q1`
zY<WAZ5igjRCCx+Q!684_!(Y0QYF+lv4a!!5d|v;A*wcAwJm2wb&?~F{LRf^%23f|m
zcLrQPl#-MA^UuN9>qB*=S$<_y-CfHFND0n5$(6K?+~Ttc!+@%!yc=G1vxs4Hjp>=R
zB3m%3-y#KO<Gk{A_UF3)fDE2Elhea5$SD7>ZFby$2N?=q?|agJ!Hr-g%bzHMsC<pZ
zn?00r?lja2`Ncw1#ME?9w{lHrKpJR*RF@#K^-Yt`$er4`v=z$mn?`|gH`7k`mZY^J
z7FUz0uLu?%*N5e+D}iscyKDn?#!T7NIcZu{SAR3A)$6^P4Vf{4pXClEMXVwMvKM&S
zw+Une1B~)CR2d1>j*5JWCzQ1rCHli#8KSG`hztXH`(@bWApWQ_?`62=S|Pt@R1erH
z^(xVGUCl5<xMAXuik>dSnEL^Ids%&F$E2Sz4n}t@qc!9Wx1O3;4(nh9lg_f713MEH
z9TwG0ZhPT@j3JD;!U&?21<nOam~X2Ie+UEO7?FqJ01%@cLx>-G3Zk!F6;x!hCnG5B
z4|7PLPQY^WvlNZpa$fU!w??59i{qllH=$u|!5f5ul9C0B^pFxyL1}}CIn@f~ivWG{
z9LpK>i;7_kmhh=(`6n+LW>4k4#q4H!FVKs4JntJqA#ph-8OYy=<|4D&D;<^IL_ToO
z_kw&!^<T+{%||{HlxpPng0FO}E-XI6m_k=Fg>&c8Pusj3+4QrXntseFRNWSa_0=~p
z%i%VZJ?py<18xDOM7+Z=&J(@h@$t?L8hNd=C4u^<6;1HJrQArl9RmH8%hfrenK6ti
zrnXm-No>%E&J4r;0QR`$%C^leY#?Ax>uc0nBwXB7m)lQRaY|hf&;jeTH+afBUEukk
z<`MHiUxGJ1Oq8E~{G|OQ%R>9;)e5XE8QqP}Q9k6re)ed7Q<eZc>;brMNKlX8hBK!W
zgV1|t$chHIZG8HI^7QCXk!|*4&g#Ho8*#b@5A>BPNFK_iM)PnIcKJ)7$uL#I1;OC7
zh@H}^3|m<G>_88Yp=iP(oj&>nr{mZ{-BlNuCqd}QI_)K7=))sgc9Q6#MN$o?=n5%b
z>NG`jOhgwTYR+OD#eOV|jsAthf)=QM$z3Rr;gYY~#Zvo(u&?RNq6tEx+_t)<$#LDk
zVRQFdLFFyFA*&uXhtJ1|zh~;dFNn3{2N0gZ>MifW?j+m2g8rkjdKfZ4AipXr_sfI%
zpZ%9O|EaS6rLc;XHC1txQ9oqq0qOAh!je+?X4XyqKNRa8hKo@pnXu^-k|eulBpm$m
z$E3N_?Pqi6ICQnTo@P2wwU!PKMV4;~P8`%9)3G3c5W<t=zuPamd%r%9>AIh951!vt
z<xDx1@vx>)*`;ezQr$Ld)W*m%B=rCk2>23EEKL}0o8#*lLkx>j79z%BP;enNKcpm}
zk%0^8%uQ)i&_LcJN>dn@>V7d%38Csm>YteOCD=b-9Q{os3~S^aXj{vDDom&=dUDh$
zZEh3T*1A~igZRvCcBi^G0PgPOYUErMd3Y3tW+I^=;MUBOI{KXTCfJK2^OWmk5wy)m
zDXor_1p$i3$mFspE!Cbky0Uo0K5gkXS!gC6VOvZx%T>@JF@d!7ELyL&UUW2Z_QWBG
zI)+fCgD<!`sYrd`lHJYu@<`eINefGG%{@%kN$rK1#>e*FjMkfT6}*WUm1LR>GXavt
zxw~4IP|y^hCzue7qllWD964qNe3d)M%*^3B<OWZMn$=+rKiMExKm9ED7Pm*!!d@bz
z<$Gm9A(ctB6d40rjkHGKBCKd6FvCqI0OQ-yl9&{tv?R9a89h@o5_zxOmzQN>mbwQ*
zj%;k^lx@*eNXM+|4COCTVT)tYlJ{i`T9fM~Ci33R?h_)3wdR`DX8AgIEhf}m<IYlX
zNf!t(<W1aFghzACVm%j;M)%Cy8g<pd%~S(R6Zh%W$hGPj`BG|noa<?`RECku-BFTm
zxmvW?n&2drnqJwNPVub$p0B7T_~2MlZDRMEPPDr{0h(z^H{Vs@4_5cb=r$3IY4=DV
zO6Gy!>1I(rI@P!25WJw(aX1lun<;VzZ60|(F{|21#R>AB#BZl4RSLuV1|;f#EGx_k
z^*e9?ja4Vah4o!6HI*sW386@>m+OuhQ%4sT@tNSwYDn2}ETgf;iwlEm>sAw*7ALb=
z8h@80RhHYiwB^s7WwnWp;JyH(GlMgd8;^ra`cn9qMi6}n{Kr0tMzGnEe_GqSnNEJT
zEH+kjwJtGJUEq`{qJS#9Y=YC+th?U<mMSy(WvyPgj%on33vUxNHjs53^rY6_M-OA{
z2wow1i!R0nm%F=Di>k|?0}sam2&kPqCsx2e9pyho%!l_yGLyGA=8cqY>Mi}mlMpk{
z!V~w6(L8DI%SH5v_`MSgHJR953B22gs(J%C^l?2f9c-Q5!dvZ|ER7>x4-0A~nnl^t
zgn42Fc*GJvB&=~$6OrzA{4E^=!|X1)CVhp=H-F#}@+FiGWe8rcDSPsOWMMvIVV3$c
za-0=j18uT5)o94Xw9jH6DC&<ag96^i+F>K?%~8;H*3NWBVKk$j=yFh|6yycDbpwid
z%Q_H#F5eUCz36(AQ>sz4$r$a;x4*kJUG~d`u{U}UmbT{3EASAHcV%cqfcI}A3GCLs
zl@2K>=P19xD8E;L@<?;29A8%`zD{lAat7rGNe1!Ecxc}Ji&-~6ws(J5&zRewFl0~v
zb79%)MASNE*2B`93IT;Fn9@185Y36U6&Q}gd-(ImAhrjCEDPN)28#sWqh%AvZsAx}
zhW1Yc0?}v_=p*)sJmZGU7oxol<5;|KN@=8*e{u~VPRzwGuy5ZiVE-E;68}3y{HGmV
z#KFPV;s0VBNf$ro<xq!n*Xv!*h9eU(+?9>?hJ%=dmC|7P<r0WOh(cnGJ0&HS>9s?5
zbc>nn<&pPIKPmUyty%PGjmJE6AF{UHFWXCB|2`fue2ZK$z^tS{Xz&zcU#9Nt+G5N)
z@YHm5>uaIoDfeT#!?UE&Sep4AyP7><sN;efggJa>JUP>VW^+ct{oYjFiDYYCIft0Q
z2<*iv(_BRkX9a#%;bDIXm6^_wGud)M_di;I0W&{1aO!q549YN;vQK3|J?s<~1UI(Q
z%t+o7y?IM_<4uhk;j=JP86pk9L5IWnhzm%WycKKsEs(l{ad74k_ry6wyvM2y1`Ro6
zuPyw8a&j1RFBi-#bs13oyPUS%slK~tF!$kY4Q_t6lDAU^9&W25t5B1?ou5z9PK=Nq
zaS5(kNB4$zQ<*88Dx^-O63Z0O9@(E@s7RzTCrCj?0-9~0_2P}jR1`MV9Y9e7Q(go&
z|1;+&xJk#9*fDE*A%CYRnmsLpv!}i{5a~|N)T^%A;%x3nL8Nx+W2#xUgJBGf*WkF^
zJu;xLa>Ge@v4va95;yjSG=z+|`wriI3)QVOs}!SP5@}#TIT7y|p`LQhI@y1*3}v|*
z27__)z!rNEXmb^=Dyx+wQso_;5x(?c;x)nAe&K>p`k^ePGC==VM*9t&K73;osWY;N
znOF}KoloWy$3XVt=d`nivAGdzh-pUKeKI*R`!Q8#rakILDGi|?RIEV}8n1}OO?Wnt
z+sxn&XBa#{TSz?Zm$iT%5|OJa-^hWWkOlEG8Da5hsZm>~dG2)-6tVdoZhfFM%E^?U
z;LiilK`RKX$1()Qv%(ZJRB9@e!8i>7w4+b^pYkSr!zBh?%6den1i3R(r$e9P5>JjF
z{d^L~kSSzuq8}L~WEw8WN|8r;-j;)2yDX^^Bucl^e|VMxI2|HM_KSDoMr1UiXE1>r
z9x9;{%h5V>V{QIHxI;9l7(<pw5C3e)MVt`E9D#iM7V=*i1<`-6pMT*M*~*rRILeql
zvh4ba7a(K`NeK$g@<5QHJ`L;kBq1u%0g(jsa*PfM_`0<7;mKhMU&-F*q1{M=vces;
zkqM0K8-f$grN?s{45IX3qjg8;o>QLgIY(Wle@6ra-oSRSU9dtbP|}_BNA@(_qnB~e
zczSG3*mdh@=M(xcr*fU*h?wrs-8QE<Mjg9!=BTj)9Z*LQ&*IqVfhL@fx!@s)uKNY;
z+83~N+Ots?PFpQbhMo!R%^KCWVMK{$n|Nc+Wy1BhbK}{b?cmf*8)Gc|<pq%4NI~{G
z!4WpWTLnQ56U>#BDe5*!Rv|aSQ$(2$DzfD@1q2wv1>gH;8F|qa!(#+Xi@l%&i4R3W
zYN$46F0eviFPz$Ih5Fi|Krl_>ko#kHjll)G`VpI4@3;qw6$fFj%<i+@8-Hg5)Gg3c
zdlnh3y2t0;^{d&UK(L%DY{R1PcyXh}h{XxV5LbC6@vUdsDh*H#VcKI*<Uibjl?y)+
zwW%&0c3=GR1(@b4{B{KL5kEP~Lw|;hxk(Kv8=-2AtPj>;^?GzYcb$(2Z4NRAF}Iv(
z1dPtUCNDvl2U<e3f;Fm3D$YfL3r=w%M{7t|x5u}h;FhU(@HsB-X?n0k(TCvMn&<ad
zZqx-+ug1HKf@Wf&sjCJ)LaoP3Em8jcBRQb6n!$o2+TJrmdy`R}84`s%FtjhmY0B=t
z$s>d{0akCu4r{Vh_sm{O!(-Rg)hf%XdgC8}R>gGJY&AhymWIA^*?00=3MS>62$bbG
zUp5low7p8%9aiz@3?phnt<e%bbV*X7Sl7semlO(KcK(E^hViDIk_%1^M=6e1yF8sk
zWgZ$$0k|W1eNU}=M_u>OWmk1Fzvi4pPPGYKpypq+YMrBn7|AUwH8LMn3{RrcMN<|q
zBJpjNamq`A?t3C)e##~V;>z3ytjS&5nN;3iu&;=|NH@i1S2uf(2pvxsd?8v0<VttE
zCZi-j8WW_wLnp?7T`xgZ-^N*8xaz4nqd{vhY6ve6<ZypGfw;lddbX3tR1}wKyqvY9
zD=m*q3=VGI?)j2lAx=h)EvU97Yhb^l`HzUlegyntKI~){ou1qozLHyp4D8J}Md%Lf
z1MT{Y>0pN-XpX?lH|MCBlv*dUPf9!;CoC@dW7zp9SEuBcSzNLD0|m(6a|W=F5aG;e
zFso(dw~A&}gIQGrBo4cI`GAh5ZsgX->7v1`+CjJskz~0DQZt4^SdxPQDE+NK`w@XS
z`H_-iz0yLcr*G(9Aci_csNL((od==xd)f?5;+4pg1HgHOb191|(5~LlV?|nPfOqWM
z_a%h-o4-B2oDnnKp>&a;=06=)D7c~^pGN&3nD}o_`R-1KHavEZOG{N0d6Xlc7Y%&a
zhA_x4piv}!A}6wopr7ZgUQ|6YeuN>%mqJ+;!Qa$*gJ6gajv(D!Wh_BJYDYBgQnow<
zJGJzTetb3{x0pw9>!uTSm_U|q2M(Gc^2j<tb>uz$^P=>VH))E+7XvW+T731NH4*y1
zL9l;;t!Twf*{?psN68GmHHL<nV16Em@_GdA4uT|7nOq_{8dNo+VVBz4_Y^DFNheD$
zxZFOB9}IDByP!|pTR78BmT{LMO%jh;T(9q0*(`t0rekxz;TMh~+S1ZlETZ(?zu?=p
zNQ-?hJT3o_UzXnFUUGr|=^kC-4G5gfusL0;sXL=nhhdItBkPNm7BUy9T$IaW9IWU%
zQPKz*I9i7anYAgr!!L#*2D~#HV*V8=LIW^^ty2NV1Gx~56j1xoVfFy=6Kn$qY-V#Z
zjKZHZGpFJ!(RlJ4w3|gSEX7vsnncr#=km&SiGuFkjrS#5r0GGS$y1eSKd7VZr7JK8
zqM?jiF@-8aj5#d<-s$H(5j<%zc?2v?WK-d@MHlyfW4-Ml<s8~(@Sd|3)2&wVgeTb#
z2?6VKAKm1lU6F!(Q^w<}CF#Agf+7&BltQDkM8{?qbHAg10wivGc<Io@FqfFr;kEta
zcdM3XfQn2AGB30<rLJHR<hFJbt4latEXV|{K^W30CpJ<74U&&L;dfr+zi3}ly$;PV
zC2}n^M7B0Fl(E-Jv`fhijR*GDtA~j&l;39#9HQ9o>uX_wH9R8CM(SEt86J&PizH~B
zWEOA9MBCt%!IJlMLlNh`me}99(Z4%j<$2-=so@hbR?SjNIE&iv;FOS0*}npAM-J3a
z30WhMk$!uRoU2NLsM$`88ld9bDQSP3Yl9txZ3}(HzXiw7x);tF02169*dCDap2n#{
z;l&+moq|k!oHJqUHmt9*@IsPgqir*|%>q%H=D|It<f4#OHZeyKhcGu+^dm@`Qat%3
z&r+?M8QH0ZZ$2JxI|ChmU_B+gbbYfLi}?Wghs<}}bMy@PdMR6dP0IcskM#d`Ie4pR
z+MybwU$PKElgeo})AJzkjso#rD$7K?Rx!B4HRND|)xerzHZt%ivW=bQHm9UXtkh>7
zPufXY+9#dT(i!6<m=PfYFrcWB2St7eDk08LrtV;OeIrh_i$8z%On~ZKP${1C&Hdy#
z^4jLoh16M@d9{;FDqy289pU=>6Xcb7qI>)!{bilOSNr1)K7u-XgRAfa$zuF0k6)#6
z0aEh4(2?+9Pc3!lp1F#Em0%2P?7L|7j`PbVF08*t-<8+w0Ak+AKpRXSMRpHbWEO8(
z!1l#=@9@Ox!&9PD6K|hdx!C3^qfFXhqNb#q=UgLR-u+-gE`dlY{xDkYUE{1~Da_oR
zn?U~M$&UBryq*KC6R^d7qfh<B%nU)@w>_zqdGgjKm9ctuxubd^KCmw7>=76m^0H|I
z@}Qi@j`!cZwW)uF2Dz7^=rQ*H`gee>|0oMV>7qC3$)vPzpyim7Q%4BNyl2r_I;kH^
zhhuj)ggj>Rsm+u#8&jdGpQ2yc?RO&B&(yxE5wUu=!ripWU1nR44KUF(Y!njKjrQC8
zRKP5L7=&ppMYsG@H&r6vi8_=nd@+ZvlnD9G<Z_Q(0-uD9TFl^p^5A05Bb$5Ep{fCv
z#6fsV9p4zV%O{HwxCXv-RbzT>0ht!rrqMUBK)7*Y|2dy<7nQ2nyheU?KJo{@bUKuH
zYxqy+*7xZ8;X;9ZV~ccdqdM>?w6;--HVufR(wT39BTqaj+pyoOlxfr)Kk_8KeF^Rv
z!qom~5Z6h?2Wr0{I{iWG3x8EoQRW4KfeHAvk9(w_MLSyC9g<F<S{@oJC-%ccr(7Wh
z-#l;_ru2%6H6qcODe{cEB58U}l!&sf1}*B$7$US77icpgSaL#r2u6<SQ&Wd<z~NJ+
z(0eY#9WpUCMFRHYzSizb;q{a{CErfQ%ZFWqBgO8bssaaAaHjI6x?!+KbdKCH_cY?-
znhoKb1csKFE74&;hMZ#^K{U@YTgQj4!3UbWBIn;+Rg=9cU^A|M`mU)@`<?E&W%=@l
z*AaA#A6|(xEi##9AU<WGv<8D&-wsJp-Z6u5+E(LSn5HJUoInD!!6(Q5;^P+oLWk$v
z<U*w33@X<itlyYh<OSX3W>6JqDWbmD!f8fux>~_#R@&kFT_{c(jq=_s8NFFN<7?jO
zgc0r!umGRvia@ExJcHK&mwJN4MMINCPo{Q<LM-#=ApItId&75h2L(8WXBc_LL#*o4
zcEc3d3K`)yooaN5TG<oYrG_ieEc1TigCzQ34c$JBsCR#7S4PXo!{QQ>!T`(N^|C>}
z_rC#C{px?(uc_`eB`zjZ{B>w<kW+@!**E4k%XZ@TqX4}McmkALID_qTZ~u7Im=?WN
zsu5Gn7WIqe30gWuCz9W!hcsvma$X#lW;+kgUYzSc=wIl+ySt@&hR84UATj8~yNiYO
zxV0w|(`7a26ZL5f?73iQum6n@dOZJ3{?amw2+)+b9aG2de++(OhXyJrCY==%863Z<
zjA*&N61_?rSIlNo_o@&!M)MQh(V^(n`ZyMk&jdDLXNnM{YHnqSd?omW`7RUPsa|>c
z<I~pDh^!h_P*&q~23KA2y$k|q>qd6Bfw?IpOxoL%#^#!7{QQdSkS5TcCn%zYwx7(q
z-{4wP93`+@KBwq&xymd<gJSCrN8EgqJ_pVA1n4#(K;Mp%Ti);bj%(Um@()tJ{!~<m
zhFUXU0Oa|7FpyI;H_w_Qn$kC6TU&hJRdtP?%vq(_8ZxpDxL&R<l=3kO_1aTlZ7ah%
z1voujhRU}N4V-*C886_w&{t3%sc?!9fZ7LGPfVwdp3t7E#SPAD9yvKf4WwaSl+$*k
z046b>{{|O~ah{}qcFvCa9wGJ&rC<y2x+a8~YcfQY1{bD}OK2vXdfE3~8m+4dfs)T8
zDuBPq4pQ_iH*Z4uq%p$W3UFVmbD7W3m-_UZl}%c*r07E(F`l4L?V5(#mA@2d!)p;m
ziFD#}$1?hG@SUi7t}dJ?SSGv<>AvA#;vZ@|{-(Pm;|cxEK&2KM&zbTm^yC*JsMXfW
z8Oo_nB9-fYwPcRz?oZFJW01PP?3`TJnW}X|*NNMmZ%OiGK;fTYlC@6NVTO{PiQKhX
zj`Wxxv_aQ!gK&)UkuW)Nyw`=qko1GaH%7xoHRWy^qrT&vsB<Bsz#5w5fQ~>|_HQwG
zd3kRxzarJCL}>)G$K6y&-8BujDFa@S6ex?_7(V3Qp__E<=IY9iRO$_#t~wtirb*C7
zJATo)mhSp2sd>GfqF(;8%1{_~Mt&?;g7(G@RmqKIfz~^#1`eBo*C;ub4uoKweg1qY
zTeUx(ilcj1N+};svCkPlC;O4~CJL-k=swro6J0k|Z@y1S?Vn6~W-V)TJ<qlM6`zH~
zHovX@WZFuipKx=<56hhkbwi1E4W&=UCl3<h4Qs<HbQrhq%zA?!$XBr)({{@7k1Ev?
z85ZC<-n(wQF`95IM)nQOaTs9M;hpq9U|1K)!q^eC|4lc6UInQDvo_K#hCx6+MYDeG
zo2B{y&CTFHMRIp(sOsX}?-7y>HjXn~or>S8GZxKsw%Z`Jb(88!S2*DjHK-O2eU{wo
zzeJNf<H5`tSYer$&**im23L*Njuw$PEC>miUr`=U4;ly(ROw1>N|^NGun|!EBW=5n
zW)Tr7?|W~hy*xRqMg_Ke*lgfi@}XJ?J%Na^V8ikFt^S7K=q-TnUa`TKd1d^z@qyWM
zjNoP(LD=~|qInwZ<2~Jj4l9k}h6-1+!P}}>hPR0u%&aDa+_HLJxD&Z;wOlVm+ort$
z68^a~o&mS-EqUDBwqVIC?ZbX=8(p~=5~E^9rQz8{&1!qaFe4jh=#TWo3w!<Rz4zM3
z!pl^S9ed7pBUMFsX6K;mI;2J?s|fB&+?6$2YdGKY<yP5hJy)gxrX~hzCyIe5bvr#F
zKJa(wD#*h=T&Kr6l*`C2a8;##UHCT`WhWJJ#CVh~T(hYr@M7x+v7M@IJ2`m<_F&M4
zgifZ0jat03ebfOX^V|Znfyi2-LBH9^s7&`^OB$5eps-)p78(i@R-d{<43d#UfkxFK
zcZyJvkoF9DcWL!SnBbQ^8A)>!vv5kjb;)M3>Y~T1od>;8)S+I@eh>1LrMl4iLIo;L
zu?22RY&3%f>y)zj^Y#$H7PpGNUSV8Vr>(^h9dY8<CZfAeDS`NT*(punoVU%&vcTy4
zs|a2Wlu$wJ)sc&3emT^>al1(LdhLbDv0Y2RIRU#RrXJvYdpNJ3xbQl#2z!FbW#nw}
zITN><Et?6|O(RjVYVX*DhjWRQ(BynXxSDT`8w>=dvr))c_;r+-k4|scuhSls!aS=8
zC=8zC<BQ@FxrK0>54)7yu60PY_pD4UU1+dFnZiZ@nCLgfsrT4rP+BYIGTtdKGk15T
z>4B_z7J@iz%q7)`zHu!qz2>iSQgP$+BpCBV4x=GuBuCSko8_ppE}L^M(Ppq0T(N5*
zc^uW&_`$8yrb~cK?_LQh)H%iAy8zZIeHYy}JqZ^32TE&5_Ng5_fa#8z$>jG_N}Yo;
zf84$unJHFP(-%om<{&-t(1M!U3$=CqhjbHN_$5W)f_R@ATmzK-jle&6Fe9H^K<AgN
zJB9ymJecKwq}{*nD+cP@0BvoY%x#>FB}@bj?VZgXj2)$I4K4pg_wn4@F7rb`K%hX_
zh(c^?kpSO+ckLw<%xx@mB@8C~e&h8%8st5C>q_|DHK#PqI&#oI_q$-hAouOS$^}AH
z6vDr1utE4eYp~17`?IKO;Q-kM!bB88UpLRoBEr^3$3(&>UdP_SK$e&U^e4O=E9o|p
z6&OiiSV##%hmEBuM9t3IT)}}->u=mV>?OpJoj7qqJOFb*bi9AKfADuOOm$4G70eZX
zS`!F(!m+_$<G-Mbz%hGDySus{SV0H4v;As(d?6s{;~f5J*NI3St{(f^{`}|b`=6!5
z|NA5R-?~Ek=d|U*57emxg6p|XK5Ep!ocDNRK{;CV#w{?chDL7o^jYbGFi47YtAt4#
z8DF!`^^yq<?UzXE0v*YpU#95*D50UiBcY$&cO|kaU2b2|L07L^kKL9(mt+5IOao9f
z?4HuZhM~K~VrW8}y9saz&<=-2)iShI7EB3gvCtrbyiZ9-8TD)SSHs$7hLXzs3H)TS
z5}3*8$?-enXwqGI&k0?^Gxqb;+fNA9*hq2wk6FoA_+a}h8~nIwq68-rx?t$wgbAtR
zUsdJciXiTBQL;zSL8wTBJ{qMo2>S*_;QdpurFj(stDyTeuj#?^!N=g((lQ|8ce&es
zvBXY?o83aMFdcG*q?znjEUaa`i5SL|w}-W_5svEJZM&|O{SK)pRQgjq72fNQW0<sS
zF!4j7#6{5L4b8V4wjTeFwZ`LV2h^U~VC20KXBZCay#gQBTH1AnN6KKUX>G2%k9|$|
zqrU&+QQ)f1QTK|5`lha>(Q0OMh}!8N0n@#gfMeIcSKy~GxeSjzVb$98cglCYV<|`0
zpBG)9=0|_~KK`&{04uBQY@SCK0w>ElZ>8K@*FB#)#*()aBX{>$ude@DUoQ@1%L89)
z!_WU`b@;!}nEO9&%zv#f5u5+Zs?n`%`HzY6CI=A!3ql-vsAWY3cIn!TL`_qZ65Xs~
zHi$6)%Pv2000Nqr&X}HG-aCfCzXXy}MfPCno8)o%8xtS8??rIQz~r*s^y+WhYfjh8
z-`4H#8-4Ht#kYfQYjqVh`^mwF4$F1bPQ%o2RC<8r%nN#J&Vba2CS;fbfVOgWCU5u7
z3fWIrv_Z@l_GkE?I4&KOxPh6&2wsb%root?N64$L0874X4%`u!kcc~LnB^AKL97IK
z&28l3E^Dlsi;V{&07j+|ni=4RJ4bK~17Bd$I0UoiV2au%A>VtP@WDL9%)(850Q|1P
z449BVxye`oz*Fov@hl4?EYF7w=k(V8npA)#n`rOajmPd<Sa4#HmadmjISEV&tfSJ{
z!w9xV7dud_v9Cr54rI2ig}Z1KZUt#!DUN3RaaWgX@s_CqVsF9gabR*U<96Z>8>Dg4
zyrdrqDVvQ@mIWA`YW=o^oV7!_auE`V@K-KdEXAY@KZ@Cn5RqqUr!TWP?W$!<MA6lE
zR(#Uo08QIhuaQST;mwzkUoNnsXIj#sY@?%!VfvlkrI8H)yUB@Q9hQK`>FQuIO%19|
zwnC+~|Dm!>-vMvz!yW!hQbJh59PcSk%h|@bh0i7-L^1jV-uEyvX1@K7okkRP+9ibA
zS8$n5i=NY9vW&?om)8U9D=>~KP^_g&8M!&&2z|-KdYW39g-u(@NE7w<TsPNhw|Xae
zMPyF1Ff4d1Rlag(i;*dvY89-4@8_6Xe)iNYG`~uG9|Zsdy9LdwVwe81{0Y#m=nc(-
znbqGF!G$Ug@6@cGa_4&>7C7pIFP%bsUvmS)dRO4X&Xh<F*v!P4w5gG&_pCW6zG;@3
za-DY0usDBY{oV<x6nv)Xr9C5FoG5!Bi%oH8_DmjAdlN+p)N+zL8cr;`y6%>w)X6P3
z<))b_H;}Ipe+ICUP}B+)OBR7xQcDub>srcG{E7=_-?$FpH^c1baR^CxSr5=$NMxa9
zx=L0JZX|s!y0qR?|KlWRj)&cOOd+~G{#UZCgs9iXe%bL@b3!A<?roiVBv+$}PYmNH
z-~@waJd075X&tfnW?2w4c((y}_pWgn=#ueZRBx7C!cpjIWrW}@FfRti&bRKpk4t^G
z00OCXw`+g5+!uI2_sNZbsJ=RY)4SJDq&Gr^%+eO%A7b{}_A&oF3-zX=c)imLs(1#x
z2E9!gYl)4zG;HJQ5V(edP1YsBEPjU?wxc;{2jV3|-G4ht-WtUx*Dx*!(E?ndFzdCU
zr666r?~I_&nBhq(7JT>URbC)D29*w(dG*0t$ec|LV~xd0BB)Fy7(m5;K`K2Piw(vS
zE~s{hT|jv{?mhZ|Vj;T2QZKxdh3Dn{wK4vSzoB#VN`LqIdM4Crp2dGux5!e6TFpcF
z({v%VYB_cANbRoCBjWIrW&z_V;lZfPQy<vj)7RRmwmCFRuwu2CQ4=?H<E`T5Zp$|A
ziE+4`=!&YWTfr(yDeCHpTN8T~M6vk+@ejh#RT5_4_0<ce|F6^F|8v3n-vHXbP=nxv
zNyYgen8Udk8ba&WM5uzONL6zM$Ujh<sR#73Po!z0h61-zoZ|H|M%hK)Nq9Z(kH-S{
z{R1IKSU5h3MqD$8v8=iO#BH9xdggQyc)pyiyMD7=A(UoUQKcQRgs51I(;);Id8|rM
z<@gaa3$&-DRdr*izUT&;Lqfbj?<;Tnkew-SJA&xav03lJ^jmp0pDJ*Tz{6I=DD;dk
zx?PR`dISIv$qk4=1A`U_5*W>3Yn>L5>Ax<m`6g1L>mZhR9AvXF3Nu!$$L1(Ya`ihE
zW2mt*1<ay`*bfUsm}I!_2mS83#o-yRZ9Vs^%cu>aa+Qq;9``*pT8GYBG)dGN^*6(}
zdUlpLp2ip_pVHR|okB^VcdeI5n-)uHx$4l$nVL3d)$m_&ELKhwJLe3H)L@rl)C~={
zqNZ>&HK4!CqyV^rkg1+>J0Fb)Uv8z3?nb0&kwv}Jxf5eINU6Z0stz~s!f3RN{=G`E
z$78W~P690l(?wp=9fA9@WkfmM$<GWrU}_QpoDFy+FL`XCSG}y5IqFNmTiXWw334*j
z5D=~qk@Y7gzk(5)4<k$zP19<g>5L~vVkYVjE={Z-xoX+6SyX01!R`_TCAT3EFK<*+
zro)%}YB4o=1s@zUB~Fk=P!x5!!G3lCqgwa<`Uauth0%HE)pisP7?%fj9S(jaMoAdF
zfWgLtBhclvp(F98tmLX8)op;PMSsf?p|#@yS@Qhm3MBL=?w!YF#*{@Uvdis#jT;2j
z5xZ%+KiQ9c{FS+yOCXEk7pifG^N&-C@cXBT!dH8D;OnIRXO8yYPU*j}F$HaDTxHZ8
z7Wv!^GX)g<$e$KM8^?~2DeQ4GU_@5lOfpL+=f%?L-L7fr6S1>KE+#H6524x`FqaK9
z((*nq#l>q8a>7-2w#6wg7~Z$}2v2g}jI7pPbz8>e;rzch9H-u=__n!@cwAgQevCyO
z3MG_<HP^~*L`x9(B%kHY@1F(YF1zk*i9Z`(uAc3%hQyreiEX>#IWRB5MT;V_3j@j1
zS`E-wWH=R29Dngq8m^Wd(XE$<lVQ^?2j0!n!-dBq0!h$+*6U#-UtovJjrq0dl*8Gm
zkqkls$%9zcl@45o_F)2y#D^(RjSvAgl~v}#mEqYC4E>DV=OL{PriADaM|3JE%-$JR
zdGJNl1wp^82SM@5P>`{QLU4_f8x7-ZjYZJzY@=bkMT>m>S|iBpWFxwXIV05E-Mv8e
zLeb=x-6sUr^*RY;1D457wL>Mq{5J#Ot^vr*tfHVB-SdgU8w)@YaNI&E)?X&Lg!ca*
zXYcskX_S5YR$Q@d+qP}nwylc3u~o5c+qNrqQnBru?mp+mug~p1cib1xKk$sP_g-tR
z&s;MM0W2JYseY@UjNAya$(4!g4)*aSggmZL<5WnAJ)(9+lr2+qv~+2gr5*ro;4ovo
ztWdH6PsdGMS$D42Dk+$(DgYy#2PUrIkIlNq1&<g(?DZWpws;!zPWm`iE5@g9S6iIA
zd+)!njZ*M)4=TQWHAT1-0;!zBHIiHdK~!~^h!jy&Q0bxWTs<zSK+#I2c~E<~`)^fr
z6S()sE3(6SOpXbIM99x2l0}*Z)?$&UG37cF`yg^-5K9dekBWC#d)qCe#!DJuO(ROK
zc@Ra;{>uWO;^tq~-+29rn1MQZN8Z;7{j3z#f;FiOsEBt}d5H=4+~If?+?F9y)i2jX
zea4rfTwLzMxYl_1H9Z|!0KC`R<MP_ONarAVS7AD2B8n_zTDBl7_T&RhndUAq?*khy
zT+Dq85iOlbWw5q5|4%dPD&`k1ErfABsSgSn>ApQi!;dyB>N`i=ETr+NnNF977c6R4
zU2*fkPsGsG#0I-}oGj#V7d;Ac`3m&YKAOUiq*Mj^kQ33oNrrIw;0v=v%oF*OC_hb#
zE3;`G$BUU@TcGm|4c<x=@$1sskC;?d^?nygk3p<9F9bFW2QOFn);Q|Lfseg3Du*~A
zu;=cGx2)aap5K!RtnJ1Alu42SXo0IHT3vZHknfaU${vmOUqUHcP<CF~ueKUHGx%*C
zU=uBoe;0qVo}$~WR5TpnO_DmdO*l(>J9XZlIS}bJmJCbxs8l*~n@vA!Kc3D!9=Ja)
z#!j+IzpNzJt(d(`=fJD6$-E6YV}^Ek?}kWUd3x5iIhk>NvHROj_<#AW9r#Jm!#VQv
z`iy?mHS9aLylZaj-~00CJheUWJaO<J9HFPNvv5z?I`;6gHjk)fh2O_;zONkEaX~&x
z!*UJyr`=UM&%8tY<HjlLL6*Y%zHLta>y7ijDUbi-UGy+Eb#VE2NGe(7?H`cTxB2W(
z6}CJODmanM28M!X*!Xn-4+=A$qlD0VSrj!&huaAk=oeLVcw_>G|6?pu_BtDE5aV7#
zQ%lMA%k)#0xBS=p#|v~X%@)IbYH^9mW+jJP)1a)lv&)2vx?Du(d7%jdAcputLm768
zM}hq*#$zs?kP${DB0aC{ZR1a@t5;L?db4RsvyF8R6@ekZj$N^35jfx<l+*?0Kj3UV
z3cTBo^1chnR6t${VHQk?;3KDHQ+L}tT~9*(=?hu8GfX_#=3<sPj1pHvq5wA+N@H$f
z-Vo;^HOyQ{{w@(p@NAj@^_o%Rsi}ldy=!RCp{X#n({0@J0sSlar=ondE-P-=;F7EK
zZ%7*`Mv~V9m2Xv<W2Dx^B3WvBAxUL67U-LZqQfqM!9EHA8!6^H*jf&0+#9jYaH+!3
zX`MDrZwyd*)csH!)&-<}(H}$MD>A^Wft9In8XULF^nd5R>j3)x7B<$YE?o8bw5JtW
zze|yqQ36by6&CAwlF`}OXYp=o6?qK8{A;U}9Db0`d)n`RjJgJDoy{_tVXlpD1=(lI
z`FU0KAxay-#qN28jktmwTP88m6Ysy0hF_qwFh=R5tmgKzm<^uz_w|mmU`YSrLpNz3
zV=ph_wX=_OL|wN=T#gYl&&d8TsLaLxovz$unWe!jYu5phv0y<7R$+zyQcmZv8#o(4
zS-v3j^)ug~m3BCqk6$rj)<nr9JX@umxjl5m>iAVE5+UUT%P|PDvQ-`Z7q*=j%%<S&
z&%7aeKftUVEbq31vO+Ca1cIHSExjRH0=DY(Y|lDsx#6{RVnT#|!Y&-(Cn<(rBJr3p
z#@1BKvO^8yKwRi8=AaeIlkXoErlh*lzp#onFq-<?IGZ6w3eAkxHBW2?u!cCub`a#7
za!@glJq1e3D$LGG1~GEMIqjmlXkZD|oF@?3!PnSrHjzDAt@G97G?+i7_b9UiTxpQr
zoO67$8GunSC;Uc?n6o8%k^7|kgst@3stOoIal$2{*n|#7YRL?~{;9pV(JElUebd=%
z|COa8_z!ZG=s!={zZIZGYU|3#<|tpjZM9?d2vHK$xerK|5`l<~=%U(!b;SS!$;Ck1
zlLVUD^nZ|4V%~L6d{6N$-Ho01eQs1-uEnXTZpFUWSC%7XyxW)U7)V4hFdf?$I(|p)
z)9!5kA5VAmKj3z$0bBE<4oXW@#fr3)>697e)uiNBo<%lL2H2VM)X7%y(_JvQ$(=e$
ziRQ3f3R4RyIeBjhKB{u%UQ87j<vJ=g6L+Gbzj_hI|E4AhHI-t#(XxWum(`CV$Z1oF
zYHG`v$qFx_iDM2%P#)1A!En|voOf!F-(DN!mpZ7BT%=AM?y&-78t2rkH~a2~QQ~&H
zqveT#+cAR2$`X&}kr4s7v^1h(q``HpVYJ67v*B?P4S0Y@FkyPmb4D1^1y`SDaPnPE
zn<F<bNKsX13=SmQqC1SBkCi^yOA`z3a;x$esDVCm^ZQOv#0x=>TJgYOI6h*(PDQ_Z
zXb>VFkL*5kx-wM2=O4(Q$+mP##YUsWb_g?bf}zEodNfp?(x1DGmM&Eb1k2%KM(oW5
zhCkod=Kv%FY9lGg+G2E+pluyvb|U>@Rc>*FwIu2(a>rmp5nQ6CCLPS>>18QNCMh+=
z6<RT9Dq{3EdzOTTs583+dc%l-osIMx2VosbNO4CQ62)=d45uP0bja&w@k9<*f63ka
z29%$Qt8u#7U5@ciZh@^jHDm@t{f<%L93jgXZlVy{=pgjJP}m>2>Jn0$AY&wi(zUM*
z5}wOM;TBtdK<H;VW2gUOAB`wmr<NO9^RYLM$Ph^x;GCZFtavqPcS=YcXB1{Vd352J
zXaLmb{s|N8fCFhAoz={7owl;7#k8B*s14@K7;t}a66x=p63YHnZCThDsFYEjt_;2J
zrAn=0W3CbfOwrc$fXZ0CoD`vq2uxvQsaJD&pJYZA38fpE?Zq<9H&nTo5JswFwleQP
zlS@K4k!Ll#yc8~+?rT{Srt!nm5Q|r3c6XS1Rv^rn;0NQ6aEzI=L+gz{cGH7zA{5(U
zC`n*xeB|-F57@+oMyZ|*6?9hhnyeOhQWfb5WhsAAiAQ>9I^A4|PCI4vv9-7}aMdW~
z#!by>%^u3*)#b{3c4wkZotas*T3|XLV`8(}K#y_%PDOUd8g8{)Yyb%CS6rM1v^*`r
zLH!4tHGEKKHbB4Le&fMIf_ch=H;8mthR$K^<X0RwkOp;*v88%Urx;`sjck%c>tPAk
zJ=2~?liC^TpR?ujYh3c>xo4OP^q1UknMN8RFit3pMg(gz<3)}Hv~^g+IFjHXNMf}`
z@w-7l*s-zFtO7S1D&g6c`&b~4v-ktibBz;Q@5U-U*Z6G<@$Z}}-#Ol2#W&^*uWGz&
z%Z!jC_Y5>d-3;1an~ZLa5qiZun|%hm7<OF2yHp#@xNTF((HEq~%*@`TT_IrQdw!b@
z?ZNo2pg_Gk;Zt$q(R1d!QTiZ2d+B?Lcak3D6D=9MAbCet`L8n#zWSZ<^|*X`iR(mP
zYDymnA2di=&d99LlsT*!CDrRVInlM^JH+JHNRJqzHzN7vDp}0`0CwFCpKppmjEAQb
z`z32fwyC)B(0ePfd*cdDV0)IJI+j&^v9CDFxh`&%Vjghs9{oY$_fpks7mg;Osef({
z^~-GIqNpo&M~~OAZ;CVxc;jbP@(#4w<2g=7bAThOLLaGi9&z-XbKuuzLG(AF-oI6@
zHjQwle1{56<hShuE#Le)({O>*?vUm;y!v~I<g1+}c2j!WJw>rzMIh?Ey!qEHeT@KK
zw-b6shQ|>bpQXiw9cwOH%mq7IW7$He@yRgp`B=}6t~)k;P`u@FY%jwb3-nGtwl{L7
zN)thUb_ML=%2~ae5A-0lW~)OwYfoBk_v;@eRK5H9C*YgMNrwGzP22zFa{r%wo2jz4
z1M(5-mVR^EWFxchXpmVtgogps1&ng448Epxa36DA9>eeZfLTTMTVSZ$%X)O+tVX>H
zD|Id1O6>YSDJB!>CIL5K*fylY>I}cvezi62{1(u%>mor=GER`mGbha`zL>oHJo5Sa
z?%i58m*(4;NZW-}-TEafU&9413Xb8+a*Se5+@Hk#0t_DkAgQ5xMm3)C-o8t4aAU0Y
zRicCtLpPNQ!b&`S+!o^`Z6pT`3rV^Lnm^*TcW~tnK7Vlt5TwF-R)94dgrQ9D2xemi
zkZ-vs01_7@*CO3j5u$~u`W9H>xS^`)Gczc%H-zgYHa%wLn0QEfF9fYnXSgUhTIx(#
z+pu3avTLu_`;gp_D9<!gID&~(YjUII>Wkx&6LTMblQiL#o#7+})d-xrB_L;ZN+w{_
zBy5H8tZTGu)!s=o)v-*iE96F);07<;tP3??y7xhQJ|S&v!Md=9n@GS}Hk)peSkhh>
z(>PgcbGKp@*`b%>#$e5#j}yUDEAWgOBnVTr=@Vqm&IDEX#~eH?5*~PF6lakL5}p*q
z_7+YMxj)?#gm1(yR$cl3;AN5w=Zo~oFTr1`B5Rdp01m8A)ON3F9xZv*Cz8!Q_m+I)
ztH<hu$jjtO*z#E*@;4IcbBy%C;^}e=T(e-%K0p*cJSmd1YBoi*AVTx>$;WMb=>m-f
zj=6HwJQ&MPrRYUjZ_IYR4pnfF4AMMz!x3?nK6P5wRfxBx?X=GW$f~e<I#l%9Z+@`R
zDlF+Z7Kgw}=`^-JNUsEoVr2--eZ|~J=Yyx)m!t_Zlp#cXY+G!<v4XbRDLz=QfV%BN
z%&Q{4{EWy?T~_X}Ot6E^AFV+9i1<|}BuZv^scf;t)7lzW6M?3|t$FfG(Hpncoko<S
z@1|Pv^&QUS$=n9`J6IW3-06@t#)_eoGW07i)A-_$XYA%M<bqD%>n=1&9muh1hh#Me
z)n>9fZq*g`H-7JWtcu33i`tP>G>D1$%GC$<XLEx)IF!G6A0S|S!D@-?lEapjt=%DP
zMqO*NK|pLz1dT_>#)UQxNH`F%FHlZ?fxMzneGGCM3;|S7wa(UxtrDVY_IZ?EBZL5v
z&rKTLhI<f=1LzN1iFGk&IAV^_PV8f>0xUTlM^PQeF{+NPs0_u*Q*OLCfo3bPv61H+
z4hbss+Hr^1-?@gNZ`);w(sy|(mKmq8(1>(aOIr#cb!asX7_rcf)_bru!z8vYL9@Ty
z&*d4@S-X0|=dRzB3aY6LxdLM=J~b**`J(g-_n%SoFmrTBPtsV0p!rU!_G8XbxGKfB
z3xwYZwr+?Uf;&f4ij+BG<e_v8t}{;_hJPnI#1=FbGlHO&3LiI+3Az8tYZ$9|fX({#
zW|UMy_#<$6z{ds|{6-RI%3GdMc+1U0c#;8`4&0z0_1Fq1j24J-gT(t|k^)DRq)Z79
z2bVfP<#goFPedHu>(@4BjtKNCpqZ%B%Lap>0z2CA%nAlwi)-uys<{1QAPtY1eF_cA
zfP=LD5%y4l->tdrUq2|GL*&$c>yh{-6ESxUo>aInGD|!4@4$b8*LT_=(_!61F?Upp
z1Yvxrrx-<r)}xXlOS%`ea>D2@|J7jXK0pIy?>rEhvjopfuPMJ|;Oka$9l1V97Rv_u
z8yjcdo^Mi@f1qzxb|e4Xdd0w9kIZmvWC_*ou}<b=mBlRmYX00vKQ6ahB&%R-iD%Vm
zJ0KmKL28SIZ{Ghah$Bc|m{{=LP(90G<h5;i;vKB=(zg33BINkZCk^82$4qFmYY}u!
zhWgm?`v=M?NV+)NZVkinqTKG)A9^?siROFCEyA)_ESxrV$s79R9aBb$C+m!B4DnaG
z&Pvk|O{p*C<U9gZfLFJ^+^UM`s%Qg>mO`?5ZU*#<Fvc*3-6^vffj8Q^$-Wqthuygb
zRL;SK-sPY)x}iK2V<Q3c4@+O=x_*7iz5R*Pc2sd{-RH&^S7&vE@mG1z?UaW!Ig+8`
zKPg;w>M~iae`v>r+3DcNZQX~8RlcSY^O>9u)x6X=GbWF;oNjbFX*U;f#){XNkHpD@
zZeIRO4-q5#&II}8<g@cyN$@MA8{OFk*d!7~j>s>GXCzCESd7H|*{YBSNji`5&d+jn
zWrU}=v9R9F2)r_&;&Rydfj#4@4?j>gIYZ&B9MEeZV(+DfZ_j-`2h%{P31j`TgNULu
zn2o1tQ!S5!Z4tH27ca#l4G0`y*2*no$AAsISl+XF>Pl=l0+;jGW?$#$zrR_KZ`@Gv
zGpVz-%e$FQe7qhwcuyV+I4;s23uvE<EU|xMmFGo>#ZzpLhmbruHc_5rzHL=K`Ej4b
z<W$_@$bcF!Iz^{A>_!R1?p8yt+wq!2zU#RgNlQ_8H7LSEMRwo@5<ZBwv=aE+q7ofh
z$r{m9PXKH0S1^poxdLhJ708Pv&*PL++#(`lfG=R}<03v`MZMQuT87#vl%2X5#ONIQ
zIwE4V^vu1WyEaT$-FvQK&BvB+Au`&~7?U@Mx4+osoQw@1f--H~@Zv+3v%vha)meS!
ziR)c`hRK@=MEc!^ID0bq0!xvhPX{xv$U4m;vp$PO`tWDB&EaG*|N2W5H(%%6G|)8A
zo-JGAYTz3`70CQ}{;CtSQf+ot?{HjN;>K}qUwI+Kc%I(#0GVEaJN@oQ6*Og}|N4Px
zL&IJhrw^4$0nYbM<uL3~zk+!V6DK2k(v@rMUYFs8;r(sHeg9|1im=&57Si{!4W9qX
zvs3<uF7h9IgP4=4sjR)7rHj4OzqONDs=D9v3>02zOX+ojLv64kD2Z`(iZF}FNd_o*
zt;IAoGY_44FknK%d6C|n-5dv>1#&YNvFyW=XX3>U$s*KonQOy_4)-hGql0r>ug9}9
z_aE@_<``Q!Q<eZ#S6q924LWz&_4$bA?v~S^b!OTCYi>sdz&)M+2y3GD`r6r)ZeE9@
z2nKk1a!#r!X8ZC_X%(xylk#cV>0BJA0bjc2R`YgZm~t%`!h$$ma|u=zCXvPS_COLP
z%0>ahu$WeEv1CIQ6uh#Ep2hKaIye(89816pd-0BH{EfwL6}Bc(S4_x~j%?y`OgmL3
zRBq$d>KtO#vQ;)0#z8dLKz*ZQ)kxRpgfomkZi3?%g7!#R$Ho@0i)^J7R~(Oo+uuY|
z3x-$uNQxZdga<v9YlmKNL&b4MRh3r?-HbWZ>fR7{5*o`c0mu@=64d2Rb)#Px;qDr>
zxX_bM->hfZZ^9OhX?-z`_Q3`XI`kAMO)n;%uD`S_-4UIzx2ND)nA#(*cWYme6d2Iy
z;-(s{WZFMSJcmz`gEs3e|CG(68$%TXH(LVU{p%1@NHX)bJk8WcPh;{8!_~Jwiyg-6
z?J?R*;al6LafL6f`yLY}9=cfl6xPY5hMR{-5rykbykqFpU_B9N=~KtCSyB(01~I~I
z!B|;+>DS_}AqHqJSkf`4=5CN1{qsbj{~lxB1ts1)0woauvCj%JC-y98-AIePH!QNd
z*txjo<bK^JH6u<!nD$VnQth=~1d&1F9N;o+{>bc?#pehBf>8p1PA||n8}B2NkNVhA
zRnU)?jwMuhx5^*IzMl(fDXK4DZzU9`IOi4Y22an9vMPL_QmIF)43K;XDhoI4!r*rF
z&xSj29li4hm;vP2REt8CSzSZQbvRV#GeXG9iBOX79eIj5VLyboM?RT%j%H6v@S(0n
zu>PfIqB$g84}MQj*8i*0^8fXW{LiX9OG#P=SrH{mTn7`GO(fL?GJNfLO)9)UFf0MZ
zT@0fH9^>~k%UyhIWcPGN^8&vDZBHI;k{bm80XZBXpiqDmMm9JoVwCSF{<GfUus^JZ
z7Qr+$GPUh0`)-;u&HGA*x0)@E{nEf9rg@RV2cG`^wh4vV=MPVdpd$BDMaTp5Vi|Al
z61NuVFWpr70FDXi`qEYc`UNKHYt(Xeup4aPg#`+s6`Jcxny_B~Gd*?_lU&z@C(B$%
zmTk?vR}caRk=Fi%J*ru|MEGmTp`QdB(haw+D}vOSFoCeXFfOUI_ZZjQCh@f8$3d<f
zDEPoY>{Iu%SqL=E4sj{DqJ*KuoOCX61Sv)mVrn83nigA@j!<ZNanhOjlCrcC5+6JZ
zqzODAvz`{GwqOAnfg7TkKdO)31QpP*UJ1U<E|r<HNA|vZ=%l{Q1z)o#tB_0MHR00+
zZRJO;!evEY2}Hmmv<C<%@d42^5Q1TUAzc`jB*2ep=!N4;+Mrym+J&Zy$6|9Zfw5sc
zi3G<^jj}-9HOI6xNaO3q6%wk7BvZ6T(1zAz@&%9jfOTl(c~*!dY!H)w`N=w<jv)bK
zf|6Ze1SwAa(70K3B`gKK(0~n|rZ)5*%#RV37B#8WjcpHI5B`mmh{RTKVpyc*aR5zj
z?(!XyPEo)%aE0GNO>(9dTxiRTWVswf+I}Iq;8B$Ro5OzMbAd&|`PPG3Rg)E8dH%7o
zy2II)jbS5+y>IIkbUeCZY;r}rlSg|c3wn58{wUCc%hX2})CZX(m8m&G70Nq4ZFO)W
z=lUKZ^G%|96yt#|#(Ueg^Q*4o9&5K;NMwROa~f{)?XGNlaXRP<Q{KsY9Y>bfieKm>
z>hB0|ad;Um%idQA(I=QKtfF<^5k(i&{M>yKdDP!WW->gXL_-wS_%h1_h3%N*Y*iCL
zDLRF0mEzl6=k8dv!Ra01J0MpY)CbaM&S#BTwwGRfhZ?v#SM&a#V*$)`7R`T{KWYE#
zSb+RLJT<c4PmQU`|NBGJrSaj7qK@ik-)-jJFlL98Ym<l2FT|b^%u=etE&<jbYKvsy
z4z!T6XX2hflQv1x!7MPV)gx5#(BU^{^}!aQrMxIwigpVB%JX?1%l8TP3GyN8b2Vw>
zmM9~1KCqAccRGvvDElqjdCPg4#{X-kss*SM-yd;>v8kno-5#YXkhcgk#p+PDz<qR5
z&Z>=YVN}~pFaRMeTb;hNtKBN<DI0^g#*`MU30V7`-Fy8MY%RrNO?k4soeF`*jJz?k
z${H*?=NRXHA%QOP9y*x5+|ybBTiJFq0{UF;`BKA4#sA1MV7S~DxG8*k!7zAkF${|Z
zdU2#G+(*&ih^sLKQ9$9+8nrZ03uJ}hdN#cm)n+fRos+JXkx}DDe~s!O`o<5^jM<2g
z=NAN+kze`rb#7~574Z0Mcz|+{xWzk~eq#)YqTRqF0iF=IZ3`JxdOCI?W@BBDo?GU2
z2CHk<Zeqr*vT}1#%&C^WR>tmMxbq|nkJ08PQ`GZfY#P=YXq()>ha0)opj_BD3<)j`
zT)b5?P%z|b<D1Zl{H%p_Jo(tXglp~MxkK60Whp6+G;+#P$YF1Zg;K-ey~M|fY*)#T
z95yQonXL85V8b8vDHRTv&t4oyY0ismIL3G<PmZw8{YRhyy5SG!aQlir3b)t7lSC6d
zPLdOA^J^)n8DOuE=1SD8I2w-ApEAW?0{-OU0e`G)E=-)<n0|p&%reVr&fgJN#Ls(P
z#oa0(KsY}8Iequ{91bKROX6up(s55X7A2)>KX+OMOw#(G@KU)YXUQ2TYM11{l$#A1
zq%F4?7W&YIGzaUhO%TYh3ww>jpUh%QCK)Ml^Q$MB@+A^wGF(GlX*qOf={(Xl{c7$?
zOZJ@Sw>v5HDLu4uR~f3_S8PHKWu?*jInK}~jxy6bh@AM|qxSZJGg8Z=D*%>Jt74t<
z1_rpAp7P-gV)4nXPKaPyD63j*%#WopP??>MeVL115KCoqnOudMr@zxp0n=2Y3pT1P
z<$pk{Rj`k2i+Y38xT~=^b*YCTWS!@;FZDHt)YpHfW&L^0(Ofs*0t}Q_m)ynZCe8|T
z#Fj~bzy$c7ojOm<x6S0ux=`yf2`iT@o*@4TR&(GXpIE=Wzj7WoKun?ePWcML?)*Vl
zU*38b)UKB&;qsz|k*b^G6X<F%1dzHO@Ysr8E5T?&*CHh8-q{2E;FJDasdkC#lPx>T
z)~Qz?VV*f$Yc|swh;BOLA({IZ2hkTXi*Rz+^re+Oihcr|BeZ4~dM&EzbjUQT181OQ
z;2EnMPYAc0u-3Qf)@6KjW(A9Sl>H^S!3y!NFq7!^f}lI(sxrTx3Is*RRDa17=;uBw
z<g2QWJb|-*MFsSv;ldf=-YZbgz(G9b-A+^%eeFr(t1Ek6m6@$86tdsk#lrd@KK;HK
zFu0e{4yZ$}$<{!931&acejdFPkbw=f8B5WsICa+)jTVi#z1Y{JAQw%lqllN5$BXI~
z=w`#ilJP_HT&Li`?S#96VoStQF52tyue{sm(k^jKFXUxmjovE_fZq&NE<HPO6w;Q3
zDb@Cl`GO(y2!j~-9e~Y7KH4fIiX_z}RMI?Ctu1tB%ZMQhpIv1l<=&DAwLVe!wDE~9
ziS0s2jXOOReookwysb4Y;vp^QWb)^g<;el~UmE1NvT-T&YUEpxtOf!hi-S|yZ^Jrz
z=Q6oH!7Uj%YwJ*5pJwHdwo?K1FA6Oa`1l^U&Z#4uLjn0)vNemTVWj5Pg|n4-7jx3{
z_HeoYZjaXBEu<}V&O*$3O3F^)LF7uV%Fvz;Eu2F9UOuUb0j17m35&66Yzf+Dq0Iv+
z4~4@@{I{1+`IvjY>1WI1Q)BwdeS8DY9eiz2`B7n0X7GefQXFC%`O|`=)An$}zJnD;
zofNMKp%N+~bBaZ0@90!$k$Le*CAeFD=cv5Dbokb&ixeJ0yEDLfJ82D2gi^#$vw{xQ
z3?pPVg?DbmLZpg%-*KAJ_*U50j9cU$snZrEr_mlU*2FQ|G&5yRY8NT+3sW<%NP8Qv
zKONoT5#*J$y6<q(Izxbur=hb?QZ2khO)K_4Av|o0U#l9;w3A<HBT;@o3_XrL7<P1m
zH_xaTzh%NVyXkS4>UnY1A!#>?`I&g0Zj=5(xFXgS-n=rnq{1_YbJ_0Gfz-#iq}-J*
z<BHLjT^c!6f~|W^Lb8@91}63wewLxRR%e+ZMuSee9#?JD8F5e4CH3hE#-A>z<3^1F
zJ5ubZ9ZmiyP1J$p((zn+VHeMjV>zr7t1ppjlis&RFZyNdRQVg-*)tTvF@db>@ZDaV
zchAO*zdzQ}EzrLvo(F1P=L^#BR3$cE6f1hiTnE`@;LemiY&o29+<o~n6dRm}9VcU?
zVUf)rRrnsZX)4u0w!J7=zewoz@l3^-CJAZ;OIfzgfobWS%H|P;?Tw;PpSW%msYfsH
zcI%zWU9>!VH>v66i<T_o*f@8f&8jw$F`OB$BeNB!gsZ1@WlQU~<X$x^BavMt5ffBo
zUHji5s^IM%*w}hoJub@05Po3j7z5lbw|ap-TL>vynd&l(0S@X&?ypAXFOZ^PjvnDQ
z3Oe_V&*cvHlflHVXZJJy0QbWBuYWpF849dSJHOYri6Z|uwfp~DW$-`C>*NGon{^eG
z5#NnK4`CsR>)~LJACRRxnB=(l-U2@1aD+g>X^RDh)fc3X8i=y?@2KQ;8E$fkEIGFI
zEV?IJD{B3GQWzI%7*T!TFrYT`WE4?Afv_033e^jyXW%^72uEAaGhhDxM;mvG*Awg}
ziVT1L=4pBjO(C_U?CbB?5$bi;x!pgB2CiI>ikDQs1h&@0oQ^jy`6+N+b%Ge_P1C;?
z$^noq=O&yBagzGH;+`r^*YFQGYewG${GV5kFk^q7-raj)sigePCN|{-&4Y$?_q^!`
zJ2ifWXXyd?Vc1g=WSOcl46)k`J#h@(sNR{XDJ)(2^CMwaE^_h|4qv#X#qb9pX^KLG
z9+CokQ%b)F7K`?$4SH#;F$j)qTz#J4;6MY7Sw&*T_j+tMHz}eIn#hn77z*1-E~V+e
z8>a$H$q=fAT{I#??H?emVjG|-{&4qfb4RWbOj345D?N}Zp-49V=tn2lyF~gXYuJ;0
zO9)<J=-du`6x3~WKO^6Lu`yyvm{OtCHvVe$NfQO*C393?R@*pIgCKjZct~Q|MVr$G
zgW)&$K}wEP$1+(9*bZ1~G{G*|kKBW#cI>kc;5KpS-B+JjU7tv6A72!Pgbu+CtJ@dg
z_g9cqZ<TO66u7k~<9>AXwub-pu!|ntWp}P8AaQ)4>qypOf+UOdRJ)^Imej)s=`$BF
zKKq3T0mJ{mHRhSE8P$TmKZXL9*WsCMYH>un<wos%RY))@u#Ge)m14^PpcmP&vZb#>
z=e|vt8K}IihY_)W!_UDNy8~h9luN^zO1KRTm3X-pY(aXlKt6vm2+z4`aq(Ke@id3d
z{)^T#vk(}Gs(nhV0k6xpO`96^cyT2DfVg$#D)(WqG2qTM=H~(?H09q+C3UCCy6z)1
zuLa9T6QYgEiPEMT(VR|w5I6KB)up1dg;*gzsUBrWNT(rxTVAT@NKA+F4oUS1`t3DF
z0-QNor6Qt^AEiFU>d*@7i$=!SF%?d!s9_b<w}0L)yq9`s;}@Y#E?~1~)SpFZYSCeh
zbl(6pHGbdQ=k3w0wDBA!8@w+W3XeCL6;&+`4pktdhbS73_e4i1JEKI=rgj73m6o*2
z9FbpBM)cW#Kz7VrP3liBbVWqcjF%L<Ucg!svk{3;(HrM<j5-ygQ5N0yXDmhqN6H63
zDKHFlh46=8!+<SJJEaqCvls(N&+lfqVESQ1?U;r7{m?n3r%b_-cHQgnrw5D0MBL+h
z_Lp3jjT>jSD++M+V%&OvrA1mOuo`j$tjot3_^K-G4a)XG+As=rWtr1XBp8#OuNemY
z7ap*R8ASW)xO5iszCTA8^++2j)Ziz|+hCTroI_Uh&!yb9d;29;e9iL9HQKKEzCQy1
zLZ5e-rT4p!9GtejUT#bkxry++KHu@nxv7%j{<@XNx>}`4^Vn5F+JdCJ)tO9HJ;?m=
zS%~pV`Q$yqqIbrvd>bl`WVr5@uilvww`roowW(q$AEva#=~Lp>p0LET1!3OsL~`nI
z93r%-%=E~-)1NS!#3$J%qJ-U|2ZdYArmN<}kN6ZH+C}U!?bLrA20wwW$~E_Bn_N&-
zSzuA`ZTk7p>t=R1NFrrND#x#-_4De6@*?JAofJ*RO7qK~mr;ZcV!hl~>*d*GA}P`^
z)$jhW4<eE_9Vp7m)9NaXb(g33Rc^;G7L*E{6U%8l`Uq=@VWT<E#wJ+F<4a*dQ=}33
zi6St2xv}3P=grfX8i^<nEb`l}ZnG7Vx|mi9J!&Ga3h<TnI)Z}nDnzdEbCv|vf*@XD
zL#OpxCh@W7TP9LzwBtU5pdt;jW0=d)`i7RLhcsuWoj1+>aYk;3Q(bC4=U2>|5eVS4
z#ek)VpMNSva$TwO0z$k4!Ax45&Z~+{tdALo8VBzXgCRzUM5BFM2G;`CRlOkYX(of(
z^iF`%be?UGWuKM6Mih?@Q8GX%IApCV@9)fpM8R#`$GG?v#O8^)cEHpaqy=73hEbJE
zD^C0u*A=wFdhV;{Q`}H#i=iF8;JHYi9SU0{C%*^iA5&Fkl1F!_ZxN^9zit=)PgB)@
zZ3h20jnh?*S9(wYC9}&XbNG0OdT3aVRtJUqa0j6p3W^Lz!_FzPMZ7*>O6+SsSql>F
z^GBatZEbB!6S{tW)m7i*^f#PxbTvZ$V+4cACRsdG=VUFtIB5;4f@+H1bQ7f+ei(sv
zFnT9scKMx1do)ug)G+SAnbR7|67Ez7C9scQRcjS7sG)-$cDDe(cL*xT`l#G&CFYBs
zD{oPgHSylQvXRGrTqa$`1dMZ_H9xS7p?t~TEKVhQ>`<hsUwTB+OEj}FwUzr=(UChU
z<&pqK@<tA1>k~xn>SS(!D{ngui0$XV_Kz}FBZwfnLqejM>n5MH&P|}hvyr1W+S*mO
z_kWT|CWd6cetesHr2nh2=l}9s|L41{8@Fk{u7WY_Tu(iS-$&Q_0}`>1)i8~WtdCB>
zWZz2Zu<g&^-Plol7{`G!+;zw9%$251vX})QRz%$eH|+%>aVl6fvO2*LsB_|l-z>Ju
z_5#?t6LG)xRgmWk3-0(nvyOObww)W<?h+tIqBvp{SGLqe{u%>#hdQymHrkx7mtPdZ
zwptrJ&r~Sh$t5mh@&5+M^t^yGNC40|;>j?8kR?(erHzp!_GyA5aY6|sB7h|W4kXW!
zVWOgcEtZbLMhol)@d*@&0&$BW_K`*qU2isUNbLtiK+?$W5w!SgY@34aar6N_2nV85
z0+rgw!%%j@CZG)Cz)M>pmR{j=hZFTDSY9MT?Gt!{VhV6gN8rfekOa|T4Ajo}spkBk
zL<(_&5eq3AQ_`U75Qv7x!8}My_I2vJ>%)qvz5~V28&f<eBDT2vIkSrxuoE)s5JBj5
zNlN7S4$4TS1p4%PSvVemOu`!BwWwhCp`VLOW*LY&hjZl<fecCbTl)ED!LLuCi9|tA
zcqIr8E{Ov|jL=++#KbZYro6#LVJszyk^4L;awbJ=%H)}06P1N<ot;QCxWhwjfO&Ca
zFfWl7qw+jdO}L!Q_S+tG1Ls_H@|>hA$?Jl*a)W3c+NOl53-268_!er$++!tT*BieD
zFMM&q#bb8cwGig(gBISju>GzU`ZzWJS1Sp-Ur@LE<11(Bea%*BCG~bnDtA-NW*s(a
zk5=Ymy7Kk|J;q}$U&Cg*gBf|MBsKEqz}UF&Pz!kUd1KA!^?kmvTC$OMQ&&Fw5qY<G
z=|&T)Gg(dx%e`U7!|r9C?-;Xp35bT)nH`FPDtKygMr!?P(O&S^U>){;I^K$!iN<WI
zGpzxIgPj~eb>t&oz22VQ<1(>6{_V9s`{Bsh49*jO;Nh~%`OLcOPX6x99D-V(?^Wtb
zN9)plW^03L^QA!3Ljg~xYlYeWJ1Fu{y(Y6KYmOCyRnL}EHy5bPNbjDu>dRZ#lDNI}
zzUL$*rISdiI!2JwMP-bv<S$iDPiJY{8o#BrbloSQ+Ez&24!qF9w&D+(i!_`|(JS35
zW`ZO(A~8X2mDH#|_=$M)!*T;c4VdnL`=d)%Nyw~RE#KQWljP!SHRZ_lFB4uiVN$m0
zH#K<t{rzV*z<*+Ml}ugK3~m0M&5c(1PDS{h^JEAu0B*~FjSCN{*$Dn5$iGGLq+k}s
zDWAM%OhQeOOq^yDyjDNqATF5X@Ou>J+>$jC$7_BRuJ?AnY&$yNT+iw0_Jv>wNrmw}
z9D`KmP?di*z4S;S*BRN^+iEs7cl{=Fh0jKrY$sOP+1=qi#}*KcF-lWt)|sAKQN#oJ
zY=2Vfruout^6CqwW3~s1?52wXYc@X{T&(GYPS5Jm;9m1?|8=6tH9YQ4kPGe070+y3
zThZ~<)|gUy5W-z*fVtt^{b?USm@;8sG8+R2B71CNaSJDsOvtES4-yOnn?>1}Pb*o0
z2Uzr`<mn!wZdTnpAWWs#xtD(z&eJ*J&Zcm79#A#2VoSzA^7Y9tP*;2(s<qKxI<+Y+
z+ZMnF$4IY|8san5m_!v?OR!#75!XaItiLLAW`@o`o%(zBOr|*mfN@UUq+v0-_;^ys
zb;qp#%Hw9pWR2_NwF*4IV>PTb#A@1b&tFIzTT))_6*}kO?wi%ePrBa7CqH@AweiMK
zU8Wi&Ghk}$OtforV-^3(6hyHkDSg1v8W9FGOSNh?wMpfsjaKP9z9@MFpP;30j=;2F
z<K)Ja1UxxnwL!mPFr|{}E7|}jT8UXCX@qdKoL@SMlHq)g(_cBgh@l!wpzG|dHCq5%
z;DaTK)?I02(_3a~x#Q3Uoz0XziOoHjhSxxbSkqDAsz?<OE+L2m!>}(Y%;%^C60!84
zXy#{0+KXNN-Bm8+pA#Bz_8JZ{fKE9{g92(rD<q#&m7Ye>`p}xry~xaeW3Hx#a*Gif
zfGx)*lOaSCiDtgPC~Q*Rc-1H=L`*L1-hs<Q8Q@_o%^zbnaTAkcbYT^g{~7Uf@s!W$
z-j`GWex53JS7MQ+3snodY@}$Zl_hFN(7~nvBa%a`z&NUC<cu?731^NqOldg~59p*<
z@tiu_;yEA<{Lefqr{$y(T%~b1#}V-~W<Q0B&$n)mc6Kvp&Ev?U%v0#d%Hf?ZCse#A
zsZ@HK=#gjeuhJsedeQO6_nA8TuQQ_m{09ExT>V>V@lE48Bb$EHxEX~RHZABvKzT(P
z*iGud9=l54+wL)Bu}O+F6eieKo1rr{YgdPUQJgl&$IwU7$1uz3`;^9@CEc*?A4h$~
z#}H@RyRXV**aohhT)K0oZogzXcTZjU`#*vFI=bN-sGbk_u$(GgNl{jU)vjY*kjPQL
z&=f`QW8<yiXs0FWpH-uzXiwlXPZKQ>&}IZwSB%4wR;8VET3JR^Zz`d=s0NSD#?#YO
zh>ELMbyZ^tFDhL?3G4r1R%US3rETSFR2r*mGvlgIJ!b^`R-!v&$BcnzLB*T2!$Z{^
zXK!*~IUCNU9#-ONaY!~99?sCb*m`Fn%?}dH9M9^G%aUO{w=<w*B{POjfOIjcfWfpy
znrdcjq|-7RD@ilFSN!=YXY9b_wgYKrPM+rglQT*T677<XaV`eW-kOnjSZZeR$RT{n
zh{QbMaLixNPc1BD4Gf%Z6b5tsfLBN&a>KF|-&LuI`@kZnD86b;ZCsIJl!0byWKfGY
zRbV`Sypbz7hFw<T=M2pRV4ROYi(;~Qu$4Wf8eywSQVHBZt<OlPn^9h$LC{yDnkbpf
zKNZW$6S~{bj4`w(Wz9OOxQk&FhNk*nKkdmH=P+?*08GD!Ap9ME&7+B~E;fu9B}w9y
zG+(Lbj*|7m9=lY2W``8;$w0+^kW+FUEJB${V8yP5=qNSJ5hKkJEg8}A{R(fCL^b#*
z_kI_htWB}Ge~1lM76#kGXfT_mI&Ce7kr3rQtj#(%8RaBpzqgqzxneO*@2XDEdA2~I
zTFI@-p9B}JE}GkZ-ewljS*aS$SB!AbF*VlA@R_qSW1wX*^ym+p#&#}4YRZxrqbylX
z*EvU$%Z^Z}kyU^-P41)LkZo?CN$(bFs#5z=hP4W5piiDgr7_yLN*4L8bZ>R_$P3ct
z5(o;$8%l51g^6M=j7n<s-vWSdG;iA<%7Z<1j19nfRmR3%*J_M=*%3k;t4%s>5rbb0
z?)ss-6e;w<8hjE#yb~6@g68|!l|)??^RBcb(&^)uQ(%VNXn@fkUJHpUFi#tmwG^r_
zFMp*LNM4$wzOK!!ZQD$&OYN>DDLpPLZMjqidWr2vu1t#fnZ<~;u+E8Z72G!xz%h+n
zabnrevuovQB0+xQ=DyIbo#e;QVSGX93R|yqLwz2NH7Am6-n-xtwM`_-Tvu@G<S!>0
zWFl;@b3_A2&(B`7ALF-&ns>YKcFA6$skflEoOEp__BUWS*h-uk9iL_P5&(Q^EV0_m
zY>xRJs{!eWyg)NJlqJH+@H_yfshk3RuI$?Yt<F%&En|I_*;t5I7t)v4o;a7N;f>kr
zBMxpJ)?4P_4i1i6<Y3Escc-Lm;<>hM0{sol57Z0ll{)5j0JHlXqtsDa2SNdLn3x*D
zJhErw0Rxdo=$5erPoaV_5h!BGrhmFjz?`%VZ{O!HhlmfzU3!t@Yr@d0@Y@`#UCuEu
z&aqw7&b@i@F05&ZZo~psv1#xqoZ@)za9Cv2T^BC~BcLb@Gan4}z`>|zP1O8oB_hxt
zW<fv1e5WLCo5WU#15R=1Udo{xvGeL$-ZTo2l&Nl5JL>`uKqhBgw?o^(FYxa1)q@Ts
zGN0VorjU{FOzaU%=%pBREXc;Yd#Jm6@MiRRJiE%+)4VHe_NvIQ{~&u5%v5Z*HHp1o
zeZ($M=vAyW9)YG#F#-?hlHv*c#_kSn>4)|7Kmy7hY`?TG(PRZhXPxL7aDDm04&Tvr
zPwB<Q;=Z}KnBimWhTzM5KE55n|8eE`{4blt$q=@L&^Jj-@c)aX{a3+5_ixRK>i;5X
z*)D{+7eaYTnSFo4%M@oBp3a;9K{7M|M}i8n#QVv7DyAnOxTgCklq<ZpRQ*^S>Do}(
zM1rl!)(rd%=tE<~z;?E7O%uQ}hA9p~5Xt}*?jyNK%1)L^e-wP3d71t;O?=+rM>jX(
z`>@i#7Qou|OVfO|30&kJKb7hmj69+_FG9jV*GP13(irl0#sX7gu{laSet2O<cu~Zd
zgW*fwfL`TMW*np{%*ra;1(*Vf00lgGDDLPQp$ELv6|zIwgnWav^MdK}JK^q~g~<mG
z371xtK;@1Sq#kQWjs>F;<86SwF<X+z#b}Z*G$2t;B#8iaUL5<xC<G>+?hqq3%6O4m
zC@XlSRBsA+efvX)Ky(kMVZtKWLR*6qvA!wdrJ;G2E1_NRga-t@nJelk3z*$4K^tPl
zotC(m`wP$(U(!tpBFuCFz*!M|JJ_=cu9J5ih?R!=8ihgz58wRdb}Wlpu19Uae6)&F
ziGYWpT}SFWlx59AV=4&+$;Br0ToBxgf;@b}Xcol|X{jxn<c0X@tNT_+z)E4j09;#*
zIRYy!VJj<xeV|j~Sqq)xs5pc^fpG4|y5tjFJ>n_Mz~Q)r*9B|nd!8!%2=1-p=;9`5
z(|CgWXhF)v0xZv2UNfQVE{hI5VH~#mXbBmY!mn+)Yl`!i>|$ZQ^*i8@w9{*~T0B4a
z2pSJ;4W|locBNe#l9v2pFpuQa#%7S0-Rf%7Qd8I^iAz2D>$8?_IcOE)7OR#Flky5?
zhgC!g{XR0B`4v#9cl%HKpZJ}C470~xY%yCUXPnmMI(a`5U1Y_$T#DC2U@T>}lVOGk
zfA-XtpB|bP+hnra!7r1!1|YPxc1}$YdRkAtYIP{PA%&V5E=O!hAJA+8)9nER@j6*E
z3qL{iac#VDN7~Ok686uiI<x~m?Z3{j1R52u6VB<WaXR>|p7bG>W_FmvR942K8E{;)
zLQO6ITz&!jA=Y|yPzAAn0{XA|WX7UN_DMHLn3m_%s;<-)lzt6u!ZK6%h9o8H1@0Tz
z#O5B=)NvLf!0c}Zu>_Q3)mly{R8onuRToftE#Lt}@~UVqv{(E?eGF^EqF`B$>LQ#a
z^d;Xa*B$oqGxqW+OK@h>eiU#lv9r|nx?!PGj|N|(Xi%ZMjXQv+g$)e|+p~<ZF3kB%
zVY1>_FNd@?XiDss<(z;o?Bz2HfnRN<nZlUcnP)RzXDE?Xi5U+u;G*y8R4n8wKXc~6
z=4jKTy`?~b`N-Mtaj`?|PS3BqB;gNt_#35W`{YtV<Q``_AnduP>G6)?1Te%H0s3H;
z3ea|Ioe5s&oLG{$<Lx+qcrZv>(i$?jM05T{0^D%o=>CD848t>(W2m!YLaq=mc|dSR
z5_eW5DN(|Txn(6t$J3^Y+P4sacPw!%RNw!FF1FN*xwBJhK=Rx9p}9IGuBadoE~fZb
zUd~8->l(b;v3x(r6Cz&=8`ShH7^?#!Q5-hy(z=;*-x86tr69ZUNkmW3C7Eu&skEA5
zHC+pDaOYMm`mGJVIP?Q+nvOwJD_e>*t%(Q$NR1-(dwTxTGb<~?z=(cRI@51{Vdc8l
zbZ0lpH%dM{8#8fskRJtQZO{d6he&o@B^L>fkoe|C9#iIz_)jd5Em`g^SuYjPHLA;7
z599^+yxor=o!HeL+fAKpcM-mIQLmSWifB|mmq>WM119Xy@LB%bMe#Pa%v-dSCq>Wi
zMwAbSN}Z3TcxHGV!8HyjYk|vh@4a+I*`-V_&mZ8{J+;zv{-xu}4(DjK62XEoyUnGn
z+?w8h2(=N*ytlMMX!u6xnb`N6XuZm{dczomXQ%F7MYAeIeKtNLy2ybqzMinQ7yT@;
zN5gH09?9zTC*gI@P!Hqft6?T^-3OcBcNP&9F}u79T$MPps8iRZ%aqCsnr!tuskb#b
z*uALI(<$*XxBXAA?<BsrK-<D=X<bp<j-|yosAmvGhQ<^lza@D*ja?!ZG;DYNP^e}v
zB86jPC1rI`3O73BhTk4|8Js1Ap3J`J!V6MPYb%w>fe#JcH(PITDKF4urdbQ48IE!?
z;g6s)($Ar}ls1QhF;#8>zfCi5vp5(OCEoahFDdftO(gTY%iZMmeD=mZgABr4EQa@U
zmLiKjcKS(%e`=cVG|D$Sqs_~V!tq7SuJq)fXum}WkOID&_?E0!NLa?|SWH_M?We2K
z4#Zm?C3kNYdgoZ$IrAMaj7Eynd->S(={TlHTkygC+ozo5i_%O9l9AY5OM-{9hAbx{
z%|>fdVu<RtGqADnN4QqlN|jVEKg{F4%56rf=<VCkB%uw{B4&&1WWWY=ohmBfuPkL?
zBlX^|&yv31VY;FGBkKzbA$~S6*vwPFk3YEWjg(g~km|$_o$_>;pbtOmEz?brz2QI`
zdVa{2sZfEODGo)U)|OoiXssbVTYd^!_cPssyScgjIk&QB&wK9qt34<O@-Q_lv`S6E
zi9p3Cw9pX3pGj|!xbmS;`YSpakX>9+Hnp@ESY&pXp$m_n{-NgVUQ5aRSoMtm4?%ZD
z{3HeNJvh|=&g%WoYR3Q0WB7Ncv68Euou!@mzsnil2~htCdE{j;lGXp26bg@*U$vq{
z_$v$wOayOSh8j-Q>=|Q?8hoL!7&5R&Y6O#eJZj(EKWTr9M6FjY9lp(*-Fzl{)0@4=
z&;JX^0B;6U%*weT!i>dcqReqX&31|<Nq2;SWuJjKi18k;Y@|HDVmPnf*<p~nISOIG
zq9FgYT<I{yO-7-pP&38SR8Pxn2{Ddg;1_mjnpB!Vd9|+!yvz4;`D6ODWcN-jCfF&q
zD$CRe!&=&+D2|}>y9Cv>RS(^bNrouYph9{^5h$#i8iwHdwk{H{S!{9iSB&=a7Ofyc
zt<qyUA~;B2Ntb=8s7gY>0fcnJ3ti2bRfsa-s?LoQa+rVrf;A_gYN=I;D1^&?iE1(K
zG*KCo9dw8j;HqoOlENcP><D9=L|FOf?3HrBs`+?MO-8qbC!efJ&Dmy-=k(yMNJn9l
zq+%mH@7kY{8dozEgm0pCD(;eIgO&qX9Lv4bAnWo+R=-CH1DEs2_4h(W@bPmMkz*2O
zY4sKmDyt0Bb)vW1F>gJ>Q3&xo29hlevnp5qlCS2zCzr)VUm&`DzJcWSmes|!u-vgx
zyOy>9NuFMzz~N^?SYZcbQy#a99K++b!mEw3kHihKWtzW(nX?>qT+y@bnumch%+Jsz
zZoO6NMCiih7D&t4Qpy6}+nChWp#UpxwAC@&ft?g?;LI3)JvQ8m{uY)1=+qE6Dbl%I
zsW1X4z?l)li90GO{1k)dAB&RNaSK>^w)j^WKyb-@OzX6{Mv418NbWXltYI!{CRw8g
zl6l-?2F80}MPQ(AZk$83lQ+=a&$g{+Ou&<}60&g)u+s2H5)3<|97SKP3=EOwIn2q2
z4>IxvB!DMQo}jX0bp8nz-8Zrlhs;+Ix)G`|34Sj@O9$z;^{CkvYJqPgX?s|~imWtW
zp@OI#-0wKWTTEcQisBwNmgIfVD0E(lmXneu@5i4GvCIj+BO*gkDyForh$Vt-iAeH5
z^1x6QyY{XUe10SeF{46-!4Zm>?0>H7!nB~x2l-Ys9{#JM@gJ4Kf1R!WL(;JRhos@R
zB|9(Mysk|_(3m7$@F-=Wil7A*l7eN6O_KM&B#kk<m2;!sw;6-?J@gX&cLiKq%(NS(
z{o`Z%Yy4+u7o3~UjtMiN6ws!H%_ldy8P93XtG~-VJuhgzk<Y*LN;vpZ7Vqm#*F;rY
zP^6jf4@k9_S$%aujX5w#;x-vnNptd&sfY$=)ut)INImCRZr!Gl5WjW7ybZO4^!Ulr
z;$oD>j&ZAiU{QcBwAf{Fx;}%;6w_ou43%)9K!+(n_^!GtQ<0*Sb0kBJW(`f9T)Tx#
zLWMFJ${k}Gh9wa<(;fj&bDX7tf%7U@QQ`i<#Onb(Tt<eqX>EOngYaA2(2<zY$<C2w
zxM!_T{v9_L;sKMjLMkklA=0o3Q)OMOct2{!@k;U2z66pF)B6U7y)o8drG4b^KtQ<2
zjLds>LKe@!B5jePMj7T~s-a=fVXw#3KoSuA2Llwx@F(o`gCGe>@C}Xd%Gzvc0vwB^
zviR5`wP{(gP_hITNYH}?9&V!8kug?MPrTP{j*Z|jgP7J_pyDa;%pV)U!yUBbe5v0Z
zAa2M^F>O}HFmtd)osL_h6>=+-RtC#i-&t^KB*V`UMw9b_Ru`ml!XS_(y>f#NIP}be
zYX1*w?+_(Q)Glq7ZQJH4+qSJ!wr$(CZQDL&+qUh$?)^vot=0GTpeMO<n3KJC#<Smu
zs2DkLwl6ly8VC|DNK7(*N~uPHxV`p&|Af&sW=9e>wtjbqnvqNzFgJL%CnlPnNE^U}
zWJ)WpbBy4f&>2rV$OO_Q1fmKz3~IsyXjU=YAvzu_F*c$}wD310Z&IPYz6K#LqMFys
zJ>`VOM8D%SJxx#wf?_GXBz0O}q_JpZwRN9UUTK12$y19_(AGDrmEk34W5Gblu45!S
z$dKC31gWM<n18S!wbnXob_}ULnP^PT(%ip`bj#HDwI<DCqOw@41VLPZysS_d!=l_$
zTv4$I<!Qd|_Kt8s<$#2`htY8!C0aJ3A)?jC#g1JH6-(TxW+SQEB?DeK%NLAUN%g@6
z&he)x%1E$p6+t*Ykh!3{70mZKikiobxj-;|Vl@u5CAmM(FhH*YY1XAFtiFga&J3cy
zbdebCDyfWgu~%Vf+~lnl4eX+)e4Hw5Ze0`A8{eD)Ek3L+j?&NMcnTOnkH2&x>y$2B
zNMo1Y9{lARP>iFs99TEAFTY#^hvC1thR*s~$uHOVLfR7ASZxITJ{kYz8alsRgP?sU
zIqJ@nOTAzw`Il?VY@qyKuCa28zuxbt$DXrY>>63f75Z}8J(@i5fMI7P&cc9moi#!b
z!d?4oDmF1X<&Cic%}CS%T*09v2TmT%6-+;-pRL7HbML~sk%)MCJb`^I?BU%K&-soe
z!OdsjVgAHC4nY_7@w0;`7wrkH6MvqLo_D0``eZt!{utoP_eS=732wFD!{Zb^<93EO
za6{gkB@^}#j7`B2g}7Pp1gZ~3u@DX-Fc^6&9RtGX9$Id^goij;%SHGW41>dWc&(xM
zSwhQ7Y|2e!)*ZHl^Iojzk21ny&@?uhHa#SX-jp&*D}yLm2u8fq7mj=StNo13v~R2e
z!6q5L3#@(*jPb-QbjOCJ5C2v%(RN;5Gj9_%(v!20zb#ij)Oxo}whv#|u<3|@&f0{F
z(z9`&NNm5ou|^~(ZWrh66X#7K=$eN~;r?CY`R$?OJNH^$vTbx-{Rv{*-P5YOgYB);
zJzdQ@u6F91A!@I+RKT;*YbA?}aZU9MFmQhhw++d9xF7!JX27zwBikqmKxdKS8+x(+
z!-g~fK1~w>Z+<CU?)!#r&o}#&`Pg|2d5akO^WQx>|MsPEgnyw1&Ho5B{<ppPKd6S1
zr<KwPYVT-CWs^(>8JULW55>HEvxFJuM<zY1h%ivNKSU<8>R4y9?LXS*?$nPw{qvTK
zk7sHZJHLxnki^|Z$b1GJ^MzY+)@>BQQ$L`5n@+J)f-Ch>$z;~>Y)hfetJumLt`n}_
zUjRMoy|=q(I$=Syf|+ml*l<I==@R3c{sBnpb#sEA`%Nd}{c*j5|0=n-5ZbT4)h+_W
z^L>yUXUHLemdrjl)--vaB`0O}*H)E1=BULV^MH7Rp&@Y%u;lPgkZNGmK)MLkk}J;W
zz+R+8FN%SeHXX>4rPY#Y0d$!v#qh{Q-1ZC&lXE@%5+m;gtl0|gQicd$g@{pIKmO$C
zj}a$ke6itWEjL~rC}%_V_K4q|(jh=;W=hA(tpeDia~90lEi(4Q&0sBkS?4g|;q7Do
zJ*`z1B+2;SNGS3HTp_T20~ZP>7^yRjZ{k@6lGT|9uc&;ESzUKfp^(7$d<#_OsztZ(
zZHYj{!gg!kYF4P_5p=zQ2=DdPy}WM=XB>~zg?Y|P>?x77Xq}0`cgurV0>qG_0g;aM
ze=cMZL1OibD*~R^?RnoJV$$OBzR3NuLC4D;1_AFyrsH0vG#*nec)7oyh;G7-w<wo|
z10Zx=V*Ib}Cz-WuMj2l~)U4T|`QLaa!N=-438Rh`yt<pHJw|uzmZf17o0<6ExxHk0
z?NO2Roal(I`U`j6y@L7m90=kjGA<XwGE@2-7z-tG{g<BsU%^p(W<=f9U|<$6&2=cO
zHI4IgwkB$-BD0u-+^U4H8o7@Hh0~7)TE0U2$+GQIonHT|cF1yBT|{DO@JK^fby*YP
zm>9y-7P(GGXw=EvASpzcc#Lw|Y0*2L?GVcivhaA;^!US;V?|b-pVoiY*lzR(V0da_
z=)S8_&?Hg(2588>emm^y*y;+0!~FYlyTbN>uB=)%KcI~ChHU9mQ3!>^Fm2d%?-&n9
z5gwOqeLU*l{+@qp!sil#U_Y>3_6*N?)0zl|?7C5Eocp7-Am3CgO7MIp==}YiQvZ$O
z|9}g8UAiGAWV(ev{UfzozO}DKlJKS~<V}V->-dRMc$QPge8?+Q&u>bAT$^E+AjCiR
zOx}*`DU_=d>U2c`$&9l2Xi%NT8NW?2koY3ZoQdNZ$7Af4c6_Oke~vdVRim<2c@Bm9
z3}7=#gz=@$qgADO$YT^PN!Iu3rH*3v9zgUWi!LITZrV|T3mtJVRrA;N@Vw~>EQ(*B
zT8cEEx3l_<MmVBKCzE#q3pSLky-oSc>L0KM=T1)ACG)r9j3Qk-d-KJx<+~hp+#aYU
zF-bN)b4u*-I=AW3+#%O1;}Y3t2M#`h@~|~7w-14L!<V2D7qY8Jj(W71$;hMIf8@fH
z_6sMS^u>|*sz;J?Eg$McYwg*fWlfKhV^2}NeV3Fe*j4pS6p_iNJ@^jQ0esziMM^ZZ
zW1Hrwb-xiq&Z|^wE~o07Iz>NWvyoy1@pzzU?s^4C^A2mQ7|Ote+8l*xNN+^63tiPF
zs0O_0&^-ZJdLJLg>p{HMf!Yb&-gR)u*W&9VJfNS==ts;51N!4n*SN2<`QLQ7W>HM2
zf42(iW4jRVEmXd6U(Tl4h+nB=btWciag7sA-@&LuKjDdJctOdYhtJSMKee@>O#=nR
zg&nm+wB;a8m*gpTl;$AZ59<7mB@mmB9mQI{_{+1k(cF(CTVf?gq&HTi-<Gnz$XSz6
z$P@?oS5h`EWhCh8SnLTRTY6_dlWN`Sij~0Y+md%#J_W2D>?xB++Za;kLV-u{P%Rqs
zm4Qba+t%`OWwolukI1c$`L0jru*^#hne41_ZC+>Nrjbgf%3oZCn1LR?24}0bv8C`=
z&)K@l@FaNUAJ)yc!IIf*R?b7RpYPp^c*z|(H9`mL&63#}`6k+}g5J_ohviy{i|C7k
z??%PC_SA{Z9T&$JbWgKWYTA#x3YAOc98PU-nzVZP$E%goexvw*(4Nt|q&U1Se0cd3
zt2>gho^EC$&-0n3CvPO+vjPW{Jx&2P(`!GEfr!e3oqj!0%G;k_dBK;qL=2G|L7l|V
z&^A*_&x9-|$3NxY|83+k<BLZm`&9+e|6}7a_5X{JN6FC4*vQ$+*nxyZ-^SL4gyBCl
zLbURPBC^7-{Dv1DxD6}V2Nn^T0>%k^CBhH^i3YVuPl9G!o;rjoOypvRhyH@(3yg-|
z+BMX#ci8iNMNcu_8B0TAjL6(*?d*`t<@Gl0`TG0>?PI=X%(9V5hLQ5<!EOqAY`5i@
zFH5g1z+4@`#Xp&kKOlvT(svyDt)YQsi|biJ8qp4{XglNEt+BQDWQZ%N$cdgm@6Vtu
zF-gt2OWmw%*Jik8%Yj^=ryp*vs_h71vpfuUD8>;;i?NPGSgg~m?mL0i!eF^00&6O$
z7$`fEkB|zgTA}KdX8K0Ag{2JHV~2p{feFM_m=3msDf~&26`~iKsUoHA9f+Ge!aq9=
z%n`u)f}!+Xy2qFvv6v&}o0>IsZyi#Sia5@iiJP)UZqM?a%=^KdtBWPPD-uRNy5F)m
zTa5+AggGD>+`Bs8bXpF6`4i{tz>H(?52WF@11Y<rXyn6j>+f4d3^98~zkXCji4tc_
z>)a?t%uRz8EP45e1!EnR(7F;s2y$l+;<%nE#ws1~*wD)IrP|9D=mv2bG?!6C*A6y)
zvSAS+Qi~yP=}{KR(f1de#3-b+i5=9*ssAOwid{~fATNyRzEkAJ1Pa|_evmm>HD%6y
zpX$c-{?wnQM%BUO-l~)O7@B93IDn<A=*(9K>9rrT;zGXypdMLzk8SgW!$7G=(Hqd}
z5W5RWvZXn~BC)I<^83QSeAaVbJ(DX$dbN_2o9>yOIRt0m=tbsSIizYS!M*3R7pK)4
z)CnK{Qe){E$ZaL+P0Gd{C2j^G>O}$-bFnfS?~A8d#4`jF%1yU`z&B?JeKMS$1G}!1
z3+1iIf5HeGG)UEyyJT5qT&mi*?@)=6Gcn%63{e}%TkI^zlGpuGHu>*qk4WqzWfKm-
zW6UseOm)1W#PtEbFh<SCdBwLevx*aM3%AcxgmNqzBsao_vG+HHTGYGP-cSn@t<h2y
z6A_~y^B>8gU?1gB`1TBdgim!s<7yzH5%ViTDs_@d2J0IMi%~@D$cu_Z>0BsKi6zfn
zAXDQpG72No!!}unQVD+bvW>nQa-*#w3-7G#x!*I=Da)S#syrltEy8h$Vtoh^q8&H%
zNS5X4^S{RH>U*>#;=nXPc+i~zJ~EL`B@{rLa14oyGHX0#6+wFcMb9V<k19-l6+X)U
zFYB1`Ki9E}j2iZTX?-u)pnU!yqGsCic_binKO$wp__zS!H?z#Jl!_}7cS7JqOiuii
zjw?O8!ctFGokd3)RGv{KHl0_s-*L!;yPiZsa6u@YKR4jNX=Co!-8WOYKVR=$ehjNH
zsnmtU5-P1$3*~lOs#Z(0iR}jIsW{P@-rf;5r{0A~7=tg7stR*SMQ5iintNkT{#{80
z-ck(KDs#uU-4tD=+>Kq0)pv8{!!k!&q~(<Fq7KD%W05Wv^$P#I)(#~p#mI9qWN{tF
z*GejE7q69x(+|jkm3oz+u;k(cS`A1E`)1c51O>zLtI2-vLr3lQhK9t=Ow5*HJ+}|L
zY=a2T%jvK(Mz+EvnicJ>5d8<%gq3}iS<z4|=O}El&+Ch<62;6UmsC762$8v9znSa&
zRWNDeGWUc+qg1mHJ6$n88SZjfoq`dEG(!AzRB1!LLqs^2(aVJ-+FX?PD1;&{whk{U
zrlri!n_^buN5o;P;s^JzA<;3tUdHN~Snay3jfCwfqjbAwW<4dLB~Fp$i5Y8@z27mX
zajz0J3`4bCad_mwA%S7^#pp4(+=(lZ*J@Vnfq*qI12Le8V?cxo5QC!%OkoCAaC3Cz
z(D6Ad#<rZq#S=86UEGPUbSE(Si_u^LA9cCg+mJ>u0>+<Po?l@nmyMzf3qbMrIW;ti
zKw-v0SiFcuDvIT38R}@huKr|kXwp%YPW&CtTA&f^RaKL{ak||WRfLuNH>>kgXNs#r
z9sa_MEh@^Kr%Y?u1nKw)KtZw+u1w_OMFNA<dEZy2!rLFvM@)HQxRwaZha3{Q=%la|
z!K<h&IVHL{TUekzWYA9cDljfL)J6KomZ?c>LYrCyI=1lHzhZOjsHBx@&oP9$bf}6a
z!rp5xK*eip)(BgL><RwgL~0bvCh|~EfxDU-E#ywqZV!LFq?e98^WERr<Rp+Kra1W|
zdpz_3X4x`oqUZ?TIsS=_rpPGFBG5WXM@qvah+gaXk+B9PN;@X{dr~5-pr(ph{?bO*
zHA$tsHj(znX@}pk==3?1iGAj+_2b6^6ZNDdQkzuR^V;LAj(qAC!vuSFQ+AX1naTmC
zG-PfD37UYs%ULYMz$70&VuPr8s_Tte*&SL=+W6qy<(Ai7XyJV!`dLih@ax>uaq#FK
zLPn5p(cqrB3d(H}_}%MiL}o|V8$@<k%Xn@0cgk#`rfC>D*zS?1d>*e`sMJ*R=&yjv
z1OFj>jBmiXA!-;oume8gdE`y-=p%2h!@<}%pw76@&RafW7(S<WMTZ{|NkQ9?_D$gi
z&{mXh`?q04e*6vzp9mwD1s^E3(-`(e_L;v}_{f8B3be6jdO`Ga??!eUcUZCo<4%lm
zw`E|SKy)jfJb(hMhY7H_WSQTv>7DfUOpLvua-9L5>Je45(@g7w+2T1dhbtNnofpV2
zp06J0)k1+EZo9zY-nz)t(Dhs-tkn5V!q-LQu2I6z2QAcW!a(?K4uOK=GS|p*HLH{q
zeJeR7NHT5%wg?4%Rx$8Bf;V`}xhz#5YZVHxP3in>eGnF4#_+!=De@YkQ(pOS>V*7J
zzAXf`#-N=ml>qY3CbDB;fQMCP4`2r%UPqcw+Vwh!6vpR&EAIBWn$PiH<1*p@n3M7U
z^`D37KlaLGwKrF6HPr7MT1yi50PN;`l}6?2<RQg<3RxJ?VUnqRl)%fRRoQ<)MnpVX
ziBTp=a}?0U!GaU2nr3TSDGew}6jIVfvtSv5GZO5dJfB1Gusfa!2Qtp%9Lrr?FI%2F
zIz1oPuRAwAZ)ko3pF)2P-ADPCT`K+csHNEIfHoW(4}ueDmT}HX6;m$S%d^3P`gBaI
z9#og>H_tBf7fg)^|IAV%<euQwwAVPV$Afi%c-UaCsnV*)kk<JO7s3dGbaY9wun^q-
z)x9u+&N;XxAT>*!Xy(_LIli)}lgi_wc$=rfOVK>IMt&>4ro?owC!m(p8za$F{mQ^z
zHC{vFqA8^?SEX+cCKC!D+0dkRJBlC%)=(xQtSv}cqAdistZ{MT0_C!9CKd%5psYm`
z*W2~~jF?lR<TmPbsngnh>fsXIAzOWky81!X!5aUE+a-(7fGFgOf~#&hFhnI%&2|U)
zNO2B`?5f{ffX9qzd+#B$8SRPEJU4{pC9jYP$~x)Eq3W15%DrK{9da^mN-)**T>gNx
ziX;T4C9@g%k@VbxA-Fmo07BYHRp)M;dqU7%8Qjt@BEH@Z!4w#2&(H<|6et66IeVlk
zcbv$c6>C^<=!u^3)i=oaNYy-4xd>ES!I(B{6NO^lW-A>0&Ttt+7{LSd(i%-!_eo&<
zx7Lrr<FwDnhn=*p#`{&%DK-3y9buRk2Dz<Sat_MqLH-(Ckzi>>)zd$U?yc~(?LPAL
zS|b1hIM+z`cc`?T#7<7ngX2{?%Ag9{9S5ncc1wTICZ54Nf}!<E#QK7Lq>w!d(%*9j
zcnU1$PyBqmF><ad1$TrYkolE7Z5?h)s#e(>FRf{HAN5A?rEYf=g8Ra`AZP!pRqL*l
z^Sf^AYZ(kPgqXA!SZ?$l3Ge7gk5Dbv?h?975f^TfG)mI8dEJo03iM^U)bE_ZP*Q*s
z#KJ_t+KEomu!Jr&m=zck2P<R!CsrrzP*YYg@-Su+s$KJJzUqhDkWC`faeD$JFL@nR
zuV0~~X7m7fAk2g#%Y;5t^_iA#|D!$fiM@ckS3KU#O)PlNmF!LBnyf<c%>x5>%{wDb
znW(tvEr_|GPzOw}Z~k7%e$6AJ>I9ni2T@PaBo8S9WY_VrqF-}W+ACB}j6TE+MX;$l
z!)T^1(%7c|(EZ9CZ19oo_Vi4fn(EuzvX>9D*vZKoMb2O==yHolNe^4uJCLc4=Ors?
zQ~8bP9Z}Edv^6XG!UHfX{fEym$*1`6qhZXIQGaVi7k5HVCX6H_hsdWpIz@I>%XN}A
zBU=B&<r$YYw=QYzeWU%`tOmq^cXK)A)u7y6BgMm$<22j)PcZ+@$1Kw=HCm0AOO0LT
zw%U{XdgZGOOz#LxBm*t*Hh*v<a*xWcO7f*tu6hweE6e4nPw~CwYxY3@4d}>vR%?Tc
zM=;Pi*Cjl|@=fe`EGupU0K4Yv48#6$Lk41k4C(22hF7LQeh*MdRik3G-)a{mu-e+^
zM>o-vs=1n2^>~otE@*PA4u>jrZi-JN@{H#qx4~PBhb_Yt;!5(j&uE2eGC0qmP5)hm
z^k5l`WDcjzX5|~G`>g7`&cV6WA-lFvo?MunhvW1^Aw$h?hAGFv(>P@9irYo@f=+GL
zmB&%i@wxyP<mSu?wpVBW3&jdgI<0fngjKbnP)To$5gB5|LB4cBWsEWzVvV7aNwk8P
z9+3m`)=C_Q3+mSjQ@A+p+N6qAuQYPDn-bqJK}~$v9Ah19r#*r%v2%kv99SLj?4s-l
zAv4QAaZctZ!uRd+a(JeUxDq_FS}7%bePMkW?<5Ay3`GSIGxAW{sWi@<k|xM7|4G!x
zU|CrEu^Q`L#OCS!zreW!&1bOOWPjEVWmw&@lLnUUd6m@cKCQE?c2V?}SqSv{Jrv<_
zu|G;Ru_&enc-DWWVFtc#v~&A=9rA@KR+3LU{42w2wAm4-F;S!~n36RX9pVky^zmeb
zZT>#NbRfrr(RByi!sHa2DZAUl#xj-bh4HQRr6SLP^^7<B*RtGR()2Jz-ppM6#CeH6
zD1MTYB<-ViA^jKw_garrFRfs|DgigPr#TQJRvxrH^Q?5wz6rB+v%MC5><Nd>OixIE
zk;n=#y4%<5J~H<6P}rxyHdlNwcG%i;8RZFKSP)Xd!hE6QwyO8R4KGJ&(ReBM)=LUO
ze|t6SFi?DhOtt{MzpZdgWRKgp<rCc2aF&ts_|h<+kA!&;OzgOf!_R)<eqNF6gU?Ah
zJt3>XBa0ad%cpyunB8*w)*_X%g_r#7B7O%piw(WfruG9yZwl;}qYu79Bd+<A*JG;5
zmp-lBCY2QY5ypZgQlwaHM!*}`aYl!TwyHbWp4VOiU2(?8a?`T@zejCmqJbgguOtEe
zAA7in|2MqwA4lx4Hl&;K(%SblN8;w>A()_`AEcHafqnu4D`2RIi$sQB20(zdy*QZ>
zK{_N8GFmg0b+u-tb9J!AFsh~bk}?>QvK{5Rg_b3{rB-!uwQ8rC)`o@7?~%I6m6&cs
z7ViCh@{>C{w#o65b>sEn0_XEncs&|s)^d)-++uwkRl)xU3D&jgEl@#^839UliLK=|
zlT-6cKQJiov$_Yjr$SZFPHHJ*O6x0HAuuT~KU`vgD7r^AH*f4KfQt4BRH%O*^Y`Dy
z;aob<0gS^rMSxCV&ALa&a-BFpxH&H?j7MxXNHbbr#jvay^_0nvUrS4Dv9*0kPX#+n
z_yn5MJC6g}!n0BTo2beWlxrPJbHGOr`I)xQ)l$f;*fw(qtI`IExrY9beUnp<i=XDk
zRWQSQ!B7!OH2K*;*&L}*@TxhVcGvWHD{ZnEcWUbUPhU1en)}$lC9y&OU9{*3%%#N@
zU`W1I#h-deY4V2<yflwQFU!QnK_7yBcvivLL64yNZS*i8T!ACB*BG-rR0t4ku7Nb1
z>U$9(>)&J(()UVEj3?VU<rCKTfC)hXnk#@VLe_oDbxh!{X<Y;eu!6|G%LYJai*rta
z2e7OZ)oQnLs?3h*qC4g}5x5Ma1POQ91m?9OLgu90k~HQ?tV}4T>)63!uw-b)^JN-6
zt<D1F*;k(<1<su!$&BM7s0t+J^$e_Q0J-(gKir?3t;DN-_yAnMTr1B^LV+1aMd{4g
zn))(Ur)IWKgDoe2jZ9Zpd}?~#CD<=FX#Z)s_~_Y4U&RJ`=y&^aJ*SJAw$;U|$*0tI
zccbo_yi9oMvNYegkkRG^)6K#W#-7E>fYGv+`$1^{NaZ60)}j5eYR_8$GgL=AQROrT
z%}(C;r=?~pTMt(2v!5sM!&J6ZM2!Bctd_|<F8FSh7(x5Rp*FiHfE_LX8-QcHl;Tq3
zIH##;J8y<H7{}TdKog`I8c;=W0zF<SgEeR5JuZ=3B$vsYGICb{4M4w+6jo>Od~vDo
zr?FmXdEpm36F9E|KJy&xo!6r>yWf!EKgD>3ck)h*Ta5$W0s~{<&!cZFCf}QrvmAmB
z+qCcs*up>o5V~*<Zxh~<))f6ow=P)?$uwU94+rkKnZ#10v3XsDV2#e)MH3x!g6wuR
zAK%yxOt@AA7tux#jw{q?UMgteSH@RwszK03+ypEBw$94-cK)fL*I3Jd1$D!EDrj|W
z8BG=q`7Wqoom-qXi)5jB1kKv~PF&oaKid-X{N`;a_8UCfx$*U|@E*boog#pG4h(@v
zrX!teKPTb@8P=gJufMjq?XWP?Qws3tqdF_T5&f2_fuk~^=^ZZ~Xba8$=`L`+4r9yG
z*t=UaaRx<klt6GwFKe~v$x5atqUWT4za;;5%uij^URKosubG}w>a4ah+f4WGeIoA<
zY$!}ePbl+-kXG%k3v34>)^eB|rbt~S&BUeG2hH#Z+k%?56Y>^Nbl0ER9$p0NayZsE
z*Yu{;WOM4Pz)C4-#%SK{jH*~B&?{{At`b64;s$(E3x_yKfn`Y={@0Z=7uJ+7A=nOJ
z7e&_H1g{RM*)L;Y_SPTz2+z!67;Cf_l(;<4`~~Zt=OX!art+P(symi5-ghv|fv<pw
zdGmn|FHQ<G<p^Z@D|@MK)wRjPwg+nuKhj$QnvZ-h5B@l%&`;-leq?GL+iL5U_?ik1
zE*uMx&Osltdwou201Ad8(J8_{8!LU^wN!a4x1f%+IGemAs18<?%>vppMApxYZLW>l
z=4S5W0<klUl42ELFR@)qJhA0?UAae)E1MjrdE`fBUYW^BuC&>;z_4I^F{!@b(lbnx
zkC(pZo56FI8L17dm1NO8BChY$my4$mwdu+V33drjy+4N>?*f37?}VnLELBP~rpFUB
zBu&PcM!%_TJ^Xz7NWM@=z9FAP0tV3~_7Ww{z<;@j;ebwi#Cs|DMSqYSFms@Svws_K
zkq`;i*5}*4_2z1I<bzW`++K_Gb-qiQ%amc>VORHUpIY<TWx)4ao#r9QzdMCB^^-Zl
zz5qp0!)RXEzyn-*n&*mE&SL32qPP2QXur!Od=2D&u)a6~6}8G^1bjtAbO$}VuYw>y
zVX1OjdVr7fV<@6_@wJ&>*hDh>`LZA3zM%7TI3DTFzgnzS(dMWxSIdVNdxXfoLbqKN
zaJ>o4MAu2bcJs0i#pv?vpg5Cr-cLF8EXxT&&?UYm|5^k&KvCkzb4bCIS!8}rsb|re
znOTpg<>VZogxD1@uI|IX5BiThQ50QLS=jK|bIYX9DhY;b>vsUK%FPA=mSP)FIE0#o
zU16z+uMrIRV~{~<6X~HqaXKO#Ir7mM9!C<Pv$FzOSUdqvAISzT^j6N*vanN{UL0t}
zSqZy<V^;&xSim$BI*Dn_M4NS`8U}q?(^z7tffb&tr7-s432wSlNr$WEXG=#D?v{o+
zH?a|pNm}Tiq7Cp{!(9U(3SY@4P|6-)@kdbpY3+H&`%UW<k`89Dg}btVSVPUsL!?+q
zNFv(4{v*;}W(OHt7DPb{11cj?$a`kcN?9@VsI5taP>O4*rpESo<Te1SU#elylBkPX
zI>=TEYa16zcnl<3(pneH^w<0>khping<*%X%K(sM0kNqQz>)D#M?FDc^pRSL2FbJo
zz^b00-8_UcWnd-T-2n3^Ys_4)7t0oN5vo36B`*Mf<wrY^D@D}r;e=%hv!U2R$xCqY
zI08!{l*+S|9zh2aip?n~uteREa%2sYo0^#zA`}cRCv&WEq|}Uzm0hG;JyJ$;LyL>3
zn4dF9W_h8y>&+clqjpLC%oN$W8(U}fz)LA9Vl3*tl<`DFKM170JhzL&3KV3|F#>wX
zq^!Z$Gqjc^!9N;XW{#wfE)<|Jdr}m30EKqbB9SOgKu8TF({Ge@HysV$r@G$EF+vq_
zv3s{=7Vc-<u8cP4AhRGFn@rJa28EFZ3=`-dy?AY_Jsw=2zL_n!qZ>F%YVsc{mwxJ|
z5Uf^~pcJbch#>tljZb8*WEc{ewpI$$Wevm$M;VM+dq^z4J`^EsuwFz+ZHOALl+R0X
z-cZ1lP)fR1;X6<W3XBM_3|D${YnI{U<x>@T=?U`XUoC+-i?YCK#_qQ>{-J9a5t%0D
zIh2Z=XN^B)Z~a#@G*46$+4?T@0QTnLT^SJ?41_5xhb<I%l=a8v@((NS)RKa4nncK}
zEt;PGyiL8PGxo!<u1htgS&6cyhVjyp6_y@yD`TuJb_Q)vPSTG})$*Gy$7nntlMW9i
z`z5+7ihN2NGMB0F5`rr+)(woXmMWNLAx>ope8r-6uDXBpH7dBnFwcIEm*xt5GE=kA
zDQxCP+J5FffznrXe#onf!?LYHw|!i)r(VzpHMkWS4+S1op4D9XX;UfbJOX^@5Md49
znkDQ-BVodju29Hnz*@_FxST@Ari+fG+S)vm5I5BM)p0G$VrL+RZ9tgeew!3GnS8BD
zK1x}OWDu4TH)YQL-OYfLGu*%!65EbNLjEnmUvAo*y~_hnaR)4+ztrqj5vIW|U^B&r
zVZomnF3RKkp*&*n=B8$*pIu6y;-47W)MJQz`eQCu`hc2^(sxXUKjLn_aJoqic|^tE
zItspj3LZu&%~w^kYoZW(5$N0NX6WOoo_#u-h-cS_?mwEPx}*~kvhuXQ|0>nGXpImJ
z>&D9X5bJ_M+-ZRfG%%Zy$bI6<ee#q&ABU~%&JT<ksT6Om7!+Oqw7wNY(_)C!bPxAJ
z1N=~I|GnQ9K2`$a{Z4nBm+xAZREY(V`li}8Ala5(^}(7AdF3)tT;16|w|pENR0D6v
z%>c31h@^+P+3FAVH18NTXY&#JTp;}>lt({SUyJnp7^MrJZcuXd^Hl2!g;Mwo4b<z5
zoxy;9zlM?>B&BWxr)zP2!v@V}`74uaLLd`Qe;NY{yUn~;3I7QS3k!kxg)2h>XZ9g0
zS@Y$IZ#((--&x-&6I|EDfmaE(qP<h}p=9W!AWzP;cg;gE@Z_Q6p4@UMu!3(nA*{fe
zxAo4L)%N^Z634u8L?vR6grt)ElW%&)^P1lRFvk$+YndaZ7#!2E!X3no;y<W64&Jz<
zBCQy4$`93{3pt?}BqvcJigQa^NS7w-=TIrZDbkLXs`W8!VafHcy<_>dsU778ch~S=
z^N}53WIT>WRD-qVSVF?HJP8tj38{?R4CY1<4#!B*9lvPD5qpg>OaBw$qE7=zM91LD
z`X1YnFba)BKvoiU$1uyS-EtErYd`9q9fj4ug;$W9JSo|DWBEPSGP|_K)XQhPJle%=
zwrS}T={j1VN;W^0rkLE2x}H?lw@h!`YK80C<j1AYwsH+}zkp+3n&j*5b*4U^&@jGr
z$2X$RwbrQ_cv2qltV*FL++Bgn+*ESN%g3TwJ!_WFwnBC5@pcD1g9PC(%x#2oio4)1
z(w-4fJ`m(hMI`^!fFYMvEEGye5JDMWNI|TFf29Tsl31ERZitiuoLc*q*05KPY<GEl
z=IJ5p<6$>+ds<+CdejXEWMP@OFx)dk>;7iD*iiluD?!>aqN+{JVy>AE46au#<D>+o
zptCaV()hFgj%KrC{&p$-9ZxPm+fy&lbY^)E=unxajsFy`FxLzGV_sFIzw{Fnc^qL(
z;fT4d-HsJQaP~e#cI6S8Tudk0K{}Iia_c}R%Cxj&83_35EyQY6M&fbYXI(X+oIo-)
z|Gm#$s!h)Zp_$Q6{#WLvl<BV=e=zBcE8r%%jzhKjh;Lt80p3V)(aOa<iwfA~Hw^n=
z61q5kqr=0jRd`vW7XocDpy{F1>2Ez2k;%9~{H7v*h!w+dw3jf^(J~BM%R9TeP|H2x
zFhTcSUN`Fyl2I+L!x(FgdwUN4_D4xvafStYBw6R!4u%=fn5E~LJ2#x>iO0_tZL!G1
znr+{GL$gv$nnNnx<e`mvNV9!J4onGo+guX*SY-N2uKyzaSSorc*JevlV<|xXMdKxy
zkQYkAw-+=3A3ePoD5-)SI?3!E%iDV4>;Wcl?!ibSy?b$21mXt~LMNx5t_r{Gwzoq^
z0^OAUkoWyW)UfmIGA8s03j+SUr_i>aQxlN=eTlX^v3DFXZvg+EpyQ$19TCD<{Ksxb
z$_B%NmO=d=v2Ch<S`7;wII0cpLY@Z+2rH5C31~ZTzK{uyZjO3&<sdDS*X!r}byBvO
zDa5_kM1c=(gCo(A`)<D5=q9DO<cze@_rEhK6F)Uht&vE~jNUJK0aPL|dnkY&j{MgG
z<wQ3JgX5}tC}&-iH{iX8-S?SZNhlRBV&HShMkqa`y|6iB;Frc5GH-F}W8%(axdSuv
zp+vv{7tW8cG9K!92C!iQz;NX5KSNPo;T=xPetrv;4|6~cV`A#r&MH>pqw0nhhYa71
zB-!`V%ty#6vb>N{IaGPts{in)OfLe;Rsel^$HBpPY2R>^ec%y#bLn#_2@?G++85u}
zW!{9KEAdIEk0cRyu6Qe+%>LoOG);VTE!Cfs%f1DCQW~)80q>#t;LyL)c{0AF9nBm?
z(oKE_r<ma4FMCcf0$l%0=Fk^r+^62FRpIoaHCffo&p^oNAtu(g?SlFcm#Lew`xCg0
zk&Qtj=waNkx$AJ;w{B{FYwtf}kT?FFzwxw*Jwu#ITgkeIzjwB=R4(o9CExjb-CM3S
z7bOt2cQ)qh0=TJ{;Jp9nU*qb4*}uj3mg1F(x@Rj7lGMNwSjGdk!<~48BA@d~j<7Ha
zbg`HJdG^JIwCFqG%2DVU`_nbHau)Z*h`JQWo|1_F58fRYr>u~2(*5VP>B0h7ptol9
zBr_tZ4~aD0x?}v9@9c_m*kvA4nnM{4ctRG(M>9m-qAV+CP|h=og}*&(yxifbI;kH=
zr8tAlsODZ9;7`yEp95s+y$t4Dw7Uub(>7)=$L0DOlIBsQU8=huS-W#A7d9f<04<uS
zp%leFd<`U-4q=Nccx>Re&g~-D!1#FG4&UF8Y)^o}%X2$tijKvGY=7CLf)K3VnA&pu
zi)TlL+>Zs-66WelL%+S{{f@<|A7Aoh16M}P<hm@$d<_4;hU%$&QUNliZ-piEqlK1B
zC`vA;@4_-H#w;tmiphq&^VN%Q$;+SS0VB^ml@gK@(kwcz!%I>5YZfMeuzM*j3s3@a
zVdb(bD_M&;F{{=T-c=<FnE174$~yr#7MV*fiVusJ5dX#})M%I!pf43uVt)(a?!;D_
z1}ogUdlvXebynp(D}BFrO-$NWd~bg~G<D_V@;&@=x?*@N$|D_?7>D+ZG;Rsgj~iJ`
zgQd7jREf-uR#H(dVs9k`Z1xrXzmwZk`+6sHCV=0K_um12_L&;~I2o|W7`0i(CEM(y
zaJE~gnHA{C&UF6EKYv3C^lml|i5{$4^foEJ4AhhT@BpH>6Mo_eCZS>QkNqu1?!`L{
z=f#hzkn0Q*vmUpDnc)T0T}wT~(CuBp>zFHNr7k-^chdS%gXIjV_I7QA&dYyr9}7)q
zdMjbh1>4sbzlSct2TDudlTXdZs-RuSui0kiU`bmbzY=fq3w>(W(=V%&5@`d6gE2|3
z(6Kh9Zvgh;*fN>$&?H})lEPwn=X}MmNTsAJ60cdWraNqO^sT|Fr8|x~<M@YpTLRO-
zc{~oGST4!MbMXC8ZKxijIysGJGr5#B#kzDtJ1)<QMyfk4MQKHztOAdbp8pR}$A(iq
zprk|5e!r#%q}DUK$CL}f&+Ex}I<8^?4gUNc2&=+ock#Bvh<ir7zmdQmmrJ4k_KXeO
zKXXY9BfAzTyBjpA)@C;otaJB)sH7wL;snbXo9d1?KcgQ?_!DQscLOV&q_M7P4F4{)
znm5<Ey{BnKBiOsVo0qq8EF<N+=&x6;rKHFCeGV;*b1ZK%v<RUa9g58-Ut4)DnAOk9
z^AezQuGCg#4<PRje51vcOh`FgMJKdb+B;fVIlL9*djW117FSAeTQpPB!{SoM!FJ#J
zObr{z$WV1Z-lUN3TpMh7=GR6Q9N3q>_fn4MZq2*ASle7LW8ckv>WI5Zy#I>^tkgL+
z>uzU`yDYMJLSR^ya^H_Uv|PeZIvV7YpU?EDX&N5=t}jy(27b&O5mx*w50b4IX}9Zv
zlGPx#jN#*pI##M1UknvwKq(T%aUg~}n!31`7<Xv-B9nBNW0>qi5`F<=ET=G@9J$O*
z(ZW(8Gn?pxq0_OwrbAeYzFRVjc3~)=ebzbLT*hPLjK26&PGOTvAgA;RZb5Wf>lwlu
zo<R`G&r=+<Z=~Ni#5gF&8$lt2k+NTqF@XVbw|J&7pf&QK3b{#4oqWmEqIgkmMuIvU
zAV|jHs4ZC?R4+(RBRBklIXJSG$wfaRR+hO;T|cBn2`!rIkOZS2!rVp9I7YKSVKxdF
zjvSkJOj%-0)Lg28)0TZl{{?`I*lFc<RpH?(fT~C10mws{|B)V-tQJqQO(@qy_7!W#
z8Gu4m&)JmyiPM6<4=?981nvvx)*5zK4LRpo=K*zfI3JM%SLazO_et`><GDxc#Tc;B
z?hS+M^5Emg!J}r>_NLUJr_a|Bd$+TnNqaW@!j2BxmZ(VfqwQ{Y$!<4>HwN;mr(5a2
za}>H(VzQ8-q1!Z!a8mey*DEL3Er^8VcewBAf=i{>Ge&Vvn01R;Sg<XlIH8~68L>O*
z0ffZGwmDPm$7Mw?W?wZyxp1-rN35e+lnilWga>7S$5{i2XPQa&+zP@HxmnhV;TC5n
z=<0mWQ>!?4INValGti=Xnq0X7NwRq*0~DRuE$+uKyGVn7mT2B$Q6-6SM+O~gQT=Iv
zX=;)6@*z0<-QrQm2lZ(8Qf1>81wq@(_dYt(ecZ;>GSHAc8YYy{ZU7%?7{1fU$i~n-
z*s6Sh*V#<RVQH${q$X77D2~f&f)H!Ta(L7)oSQMD!(H8rvy^BZxW8{{>ibg;ro%%H
zwyeI@_gL3f;_H4++1FWg^_mGCi4HuW!yFgzaT^Pi%Nq2o;+%9A2K$K&cW1y&B}&W<
zK`oc0=zrEc{Low?;&>7+Fdfx{;NwDFW3P)1zyh`k8R{1<96AjQTG?Ls4Uok_x8cE5
z5)f>7IOO)ogD7F^#df746>|!THTRzhdSDo0gXt`)dh3>y(z22nL(SCt*@d8eV_f*L
z?>O)c4DP%m$mYn(20#(2;lY;0(GNZp!+tzIJFvlCNSe*`XGS78Gr}K_NP^tpWRTIr
zBLN8`Wy59w=(N5aA?<m|=@3&Jf**{zH}-pjIJhgv8}n5ss-?Vi5i+l`lfYSZ0ncz}
zVZMka>a&j2zYiIXV}U7B$X}VFaPVi@<y+_T)YSf%GCL2;vlpm(t=IqM(ssbGVUb)g
z6HDMKkLX0^wQR}0YVM2tsoy+gH>uK<ub{K1o$!{E)>c#dHVO`&3B<~svop2#B10Aq
z?9)H}X{u6(8GoO0=$DTkspkhz-FnpyD~&8mqLUu5ZV1jSe&3hsyYsLQoa(N$#vwQ9
zt7i)+<oARMIAA1h3k`iHA#|hUP2Dqx|JOkS*&hyhyd|!~`p^T}<TiDQl6i@whss={
zwJEYl+Cw;|v`y<LDLs^6y*U5nkdedhOj5|XwfuFBw<VWwd-UoB=-~>Qq8m=|F2bHw
z$&x_IPYRuJ*79WUB8YDqIk+#*jTD~A-=}aFHnp~62#Z_??nci=loJ+?EH?DgIRsB~
zRs6Tq4e+~7{*#$Z*9Zz%MuV2&uCk+W{|Gj8m>QMAJ|Wa_A3k{B`LphLFh3IAa9{4|
znfcp0;RG$Bch^?>la}n;ny2a*KpqqMrq-9DKbQvTCh!jaEG?s$CFyh`tb2t}rY*;1
z9yUW4{<fyb<IevT;qjWJ^c6y`iqsP+=?1a%513TY9VC|*Z;bP$kKA*y8-Dtc4r8X!
z9Hd<7<kOImuJrNXmCEVff%2eFvpkwxBP+Mev4`t2Bo>_O$hXr3ufxFA@S$A^C0S&h
z$KjT;i*g6sY7|9MA<O8Y_;DJJ<=t)_j_>69a;A>?%>!0e<6T=;T`F07^nrt*bP68&
z);3No*J$<@DY?`Ls1|PCT-cqB5ZBHnaFVOC?Ak6X+(h~4<{CVidPh{&fh=L4aia;L
zndT27H+d#`Pos&CxGt`s-bCOJY6{$l={=5E0`gYq%nCuAmcE)E`09o^-Bl^96S($q
zww<%<oQz#=E3pl)%*(v(DKBlEN>~uQQvM@9reoc{54Sgj{-&^VgSMD71Sw%hVuPTn
zMJE?!>7K-SDHZqHoWcP6p%ceo%aD88gd_Wjd!3qSGd-n%BZ-ThI@ju~3D7!?rfKHz
zkvxfNF=Y;{vs@9yxY?D<rJYuPi8i9^!U2NZJ`VnL3Aco2x~>biFfeb}+fIPtj|-B8
z5>lB=d}F^^3_&TW!w7YqtOb4=f2ouQs#9}bigT4b-Cr3ZP8WG(o+PM49PG@wqG^`H
zEG16cC{KQ9`uHFeK4&6Zz9jw#_+Yeg5z245ai(Ei?DEXZi2Q+LB@Jo1EisYhg$QDY
zrPGZuI~>1fnhH0Es^O}@42>+$;dGW5Lrut84I0(;e;igL;mR<ve~r<-j^jyMR7h4;
z^8*<&Jz2iy2IOm&_xy&^FU!#So-Hn@R_lT~2U@5zIy>%z>{LdKa1nA2`UbIvP;6D>
z4dEC`YZa1sJovf?Kn10jiS-0ss+203IGV@nm8eM+vNYRYEtA<+uI@9gwQX~z3+^{f
zZfMRe`r<5K6lF>`Aut@QrG3V^hImNG_^xor^)kEOuJgC`uf1&jM|rBWz!3NjSz&AX
zc&gaiKw)Zr(`;7^?5r8qu4$dnM-E+X>|X3_<8{?ha&6kfaa@oQrp*bQKp=3-;Ry5#
zWl+~MF<y=DyP$Gh{t#BRCpki0ubM-ivIHJOW!u^dhIn0gYw}FJ;VV{IwmkQWCbf<y
z7{K23D*1xsitVlA3xzww_+MZ+9F4|%^Z9puNc8zYX}l=i66_TJh6;Ror|1eOvLyI~
zO}>j6Ky?$ymgbtlnvK%wV^tzECA!3Ek(;>xTb_7a{c~QT$fL@SKPUgC3_|}5jyY0g
zbw6+G++adLJ~L-XJVfGfS|6W8I$g&C^`2NZ6tR$E|I|IvhQ5$&?<HtR|GbW=-(t!v
zITt!#(}KdymA|{jXhH23T2+seI|zL$RL5S#1mCVS%X`+CLyxjZtAOG%M$Mk3m;6tr
z<EWY2gU3mHTb;u8Izca9Ia6E;*EO+GejCV9q^$CSrArOo*V<W9yOS1iFP<vvw;)92
zKC!Ete72v5p{vlyik;@gb*vLJ*fXAa=#Z`BP#{`9)eE71R)6jmSHMQB)hp?ar^Y#_
zGL7!74M1duRKcl$US#|7k;Favk(sb(<mEDj@2}g8rCavBDZ`s$suw0fHro3%EJa3k
z=ussrBpX_nsrA|UAbQL+E7#^)20r=QT=D=4*_kW9DPP3jH!;_g^90|7y4PO3yo<HW
zj>e9o-c`^~Q&}5@nl4<*KcbNihWFksnkD4l4@pnEZ3HFC(wJp8@CumxE>w;Ggf9&q
zp8}_|4K2#H3+E5Q%k^WRt(eyhD`vBYg|J}T#BK2klS|35FGV~PB0bGk!595#fSg^X
zz?IGTvIEjJ`j3IL&2tN+{{3kZ#J1?7+mLV6unZwzzLbWNUmI&g9Fpyanp|YCj&p)y
z@j5rs{|6b4AvUoa*kr9!b`hYr|3IyNJOLqCJBvg@aWYqlQm`}c{Rr-X_kB+45xD)E
zA;<M-%8>O<M0Hwgz|l?GGP_}b{iUNV_=BJ}%eAlYUg{R|O{!bqI*k38;}*FsCi&ox
zBZEI4>?B#U=W9Y9v`OXA%%cY_r6VX~(KanPQ^=X!D0#^v=9Ap0cIi^<lNrrZyJQP{
z*(KCF)&KoeAs)?N;|V&YNX&3NV49BwTKjigCaF-A^6;nc2x%C$Rog>%vp}?x0V2RQ
zVy3L#&R64-I>C~*9k?w@mDD_IeMC1si9-BjaS?>2K30jEPZ%3tvXe7g3A>OD7u(f>
zQvB6}n4yavi6`l{SsGg$im_+=AIwacbOA#-8KF<LMB7KFl^eAaDwa~BVFk^e`168%
z3t^fl5Bi;3)oSU*8#P?kyQzbOEp1gpL*9bF(Pm7D9U3zvRAwtxJWY(yv~&SPE@GG@
zv3U`O$brJX43eRFK1S|P80y_+)Q@vc^sSN$TBoY1=_Q7!YvtN4kp&%_l7Gjv$&#1E
z1#J@=*_=|6bgYe>(aV&(<r$8oxl9!hpp=p(GIIP?Vj9e6seC*I@U@b8%<U|Zf^22p
zF>C>&1d1hcfqEsHM!#%!Ia=vlBun>G0ac=I87ag%E=v6xqv*^jC91IEW_E&J-;XIu
z=TQkjbY~y+=9+d~cHWxZal>_+lik5@J<o^kiNf7#NMTZEe%HWx(J=}KPw3M9;CWS2
zK-H+BEb$v)s+OZ%KGKp*^|sDr`)95b#B*>gY4Sia#arndh-Nsm6_%5!aRIu9xY8ok
zA`?d%gQ_XxG)Z+|V#TpblTU>JW;LpYw;+lotVX^?JT1qgQuejszJ%zWbi+gBo3HZx
zD96y^TDN1$xzTr}<6`@ePUP=3r>8x?D@B-SJ8lPg7uvfjVqwb$WvPR<G|OWX07`hg
zgx>`cC?8s7^J7biS&}ArM3Ijs{AIEaC;Tdx-vjg`vgZb=`sl{7fay2ycJCt79>P~Q
z+qJU<Raz-40WQf`Q#^L#+wdnnl(ij83;I7?9h_QgkAwr7gz4e2cPC?{O>O5My4<(3
z#H#f-&`;ZEtF~zMNfK#sC+7orPQ{A?J@g!&vQFkz>brKTIUpdvph@yFIr{@KzPk{{
z-n3fH4Q#v-tL6B{@pd9XT1NP0@nDsRs+vQ=AgO#A@m3sN9q{%>9<fDGPs(1Uw>K1m
z5=}UH8_*RYaPg<I*0J+$h^0P_^5|yMTMoeA!3&W`>4I8K$ziIzi62I+{1zfXOazS-
z?JyMX&^e`z+muHo>K7G(A(4B7%&-RmJY=4EC9Ur^sB6;3&o-!K0UGUI5{Z#vaa4eO
z<FS2r4njOPy>|IvW-+mG3f6*81K!IPwhVJiA6W(xB&E4+o)EQ!Bt9``GXeAmnf>hx
zo?A?@#cBWL+{3Royo#%c2tQ0IY9RCMJZn_d=8m!fI#pc56MoqaFr0mtJb*`&K=8_u
zX@)-)E;q$Yzt0Oe#ncXQ`P6rq6_8==K8IK~1}{i>Esw3x@W!{pVx)Go2AZovr!z5%
z>f?T;@-2({I*-b`mw(;D31D4t272Ire2Q_~vmo>X|CFtq%R6A?hLy{n{hT$N$W-(%
z8)yB_n#5x<rMup<unL_C3$l@&{N=8|DGT^Y>s}qSgyoEo=1_sFSBUl>ygk1RI)x00
zR_I#oFxIh0v?RX!l=Ygv{L5>=n3pe0jW@Nnty)v$LQQh>8XTl{p(kkl2l<Dc4Lg>i
z%M=%7I_MfEp6(abnL?g=v_~^=;OOkjpPG&m5e?xPgGMYur1CV1sP$Rv7FY(;cYjfc
z70Sy7oOj0Z7^JszgPX5l;(Rlb<k%hJi#M}i<glkU$zk5P><HtU=8nveKcO9JRH0yU
zPN}_-s*F<WDoi$-8hp=YMi_9)!Sn+G^gGtW)kT7b+SN_TkpISBbQOD@-p7SOkI)Jm
z+$H`WxG+je``s8}oHnIF=km_QE!IszEofM|)_2yqKo5fykF;deN33_(`e)G3Y)kJ-
zA!&%?;oC2`$!NJh1x?VoTkmhI9f{X1xxK$K8~5W4geNlg>C^C?gZEwI61g?f`}yH(
zAJE<xC&nsaD*Qz1$T<9je#{bSM$E`{|E*KvU}pSe|MrLv>Gq{u<Ic20MyIkyiu=Zp
z{XA2g))nwacK6+J_X)tR4dnwD@Y3{%Z;_^ItrRZs-mBxZ*qkerxEwEmjqm=$OHnM1
z=Lh(|Tr^j&r?x6&007jQ|5FCd|30qv|8!$7d73+6uOypv1CdTRj7nvxJ0!&9HyzNp
zTuOXTMva1wOK35vx{h+xm+~xR+hCFrA~HZK8_w+qd-0<}f#%iK3de&$)*z7xQcKX1
zH7P|_4=0F>X<APt6r1gcD<E;asQ9BKw{V^DI!<SCH2GDi-E6tuxZZqSd-Im<upH%-
z4aV$N8ox_+KaaXBXpuc|FUXa-!trq3Xw4`s2JXDtE+@h(?Q8|SqU(82MYL7ued2&d
zlT}U`)H0@7d1TI66=cJa->0O@7`sG*f+5<rVp1dicz$W~I7|u}v~Lwi3)4}rfwxy)
zvVLVIgEf>j%*&VXdZHF-#OJl9S4J8C`#+q$)0QaFwr!iXZOpW7+qP}nwr$&X=1kkR
zZEL1)?tP!mD&?$)^9|9Xl^SF8X!WP?;j3}nG~KA4V7AHxHPq3IL^}|nUHEestA=&s
z{GKqbp^`k_RkScXh(+AJ-<)y7IlOKu>ts%rFd|rO=aa`;giEQVWJVaPL&IlX>zxB^
z=tnL+BAD{)Q%#);sb)APe$}|nvu40>E=@}Tq=!<EX?CvHL_SQHR%~ncTw`qxIx}6y
zDPC%}F$LP(%n8k*4(mI_b!0>8ZKZV|j`**s85L|V{|-7e*h+pI=7h_biRsS@H@HUx
zVsG<oF03nL-3GNN0`cdFAvxO=n1mF6-$DW$@p>{3BtIC{L$~WI+#8MS;$-RW8I31E
zBT|RW2xZW^txz_m_5D<R7K;53@_{Zh4gY{0tg2TDEI`wDi$Uu=2)UyZ4C|41fWVDj
z=5z`e5BuUH?`Kq+<E1C`*jFZHoU0=?K!>cnIZ+E_go<6oMCyYUYk#*9V}i|xmk){b
z7FcPR!GWtKIFhxgAtBT>Lplta(fTDC&qv{Kp`O3+u@qpXhZ@Dt{!Ici5+!UYM=R8k
z!ZoN(f>h4*EURjuwH%wH7EBWrDxW7D!M$3FXVo(ck9+%%enmSUk77P=DIDSVs%a9S
z2h8InOf{1B0M+nqS~B5L3oU(01z-TT$qD5hd^_mDkO&vwvBjyG@5Y-)ezH_H2#obG
z0fO=#A>`AQj<p|LW;TV3Plr)3XH;=p%+;l+*6?Jh<DfS&?{96SOw%>#(6ryf=~xw8
z##9l-VMjPOLBW9h3)=d>1rrp!t}n0d;c~VV0d~C(s0L5ij_XoGXOGx{UXhYoY~aBq
z0>?~^Bl^H!Xt-~4O_G=nSjti4b;!a3(*sHP9qS{x`QQ^oQMh_2jsz)8!1KZIAPhm-
zP>SOOY;U-89aDz*E8ltL?_JndMK}*A@ju}z>QkhLo1qVi=np0R26*+O>|Xs*k#-jb
z-T0t=aIH9kPTI+Vf2bruQU1WEaJTXMYr?E3npt5v&}B>{<ktpBNT84xCjkEi2by|B
z$+VXx>KyN;?^xglCtWTAh~T7(Hf41o=*5ceWdzokYMajnXA$@;pf28_j#{_Q0(B4%
zw&?esH>C}w4clNN{8n*F38+?AzpxaE5?#o@WIzGMo!s%9E~I1nt6af<ANM2dMA2Nl
zv>k~yxRNt=&urb}jC>bvS&r6XF-h%76(6=@y|6(Ev$4)^d*V@_;+m|KyZSv7{2A})
zb{v$PLLi$CyY%45k)T0NkhiRleT>=H2~IC?vu=t(UPbOw#6r#=IL&c6K8~Y#3Lr`x
zKd_<8kAYMiX-wmYNJ~zKIv@H3VLYq>Iv`l#WCM8r_#~PrK;wUmrrv~lZ_McU2?N$T
zc&#czdI$YO*`9O4{scIL^N#RcEXh=E>wB+vB^m_?*+<pOG9^mOXeknluAdeM;ea6l
z_LmX6c~{S0{5}EKES;uqord&?v;nFeq2p^v37jkb@%+@_h76aua%@X2iWC>{+25yX
z$_bW<`lNE65x^-9kW#oJ=x%g9`gm_cVQfnhL!ka%6+$guF#4$??kAO8k`)$RG)$Qi
zmS3|M$hQf_V}$|R<5YllmR@zkKexLsPG?aYBnP<o+kYkq`(GOjwEl}0vH!r`sDOj;
zpJbsdJSY-!&z7`3NL{s0FI?NtVabYjj6V*0tN?v|TUk<so!YA9GJ7$315cY-P-As%
zvxEZbFxu!?s^V%=c<4}f9k_-g_uPs3J<0=;W20#@;_oUUJ3t^-YzUP5ip^C^GLKp2
z0o5%8WvWr`gWf`zj(<b9dRaFqlMe<pqgDDSwNqT+lEs^rU)+v>{*5;3uP~#imP0x|
zwB^5Eq7fajj?M>PpNoS#Diem)CYK!|0OY2Lj;C4YP`i+vp;-TYXVLGIq)A?3gGH<H
zXjLs(IXyvCP^Gb|=T8<|vfS0qr&*{?t!IzUA8Oh_Z^=(shWN0W+{cXQun2}0n=4eT
zby0c;jD6u$xh<*zkhTKsll|QItn98XOdm6{ETH<?v|hcS0jue$o&r#m$OSU2U*0NA
zP_0pzHnt}{cb~8}oow1zrHsDos|3ASypRaRo*2(J*kTm1BvJ4SNPQv{^&u&kwh*V+
zOo6fIeMZ?^TG)h+F!ZU2Y!Qg4B4`=bDrNf`F(gGJ!q-NYWy-voi-{KwmId9CARr_0
zpPA<fA7J7SHG@QCPw?}${RX<Ah<Mf`_;yLWskg)&BJbwjE}-|x3=g0C^;jo_wgPV;
zAW@S)j1o0r5GP|#L?6fB?-9~>Es50Kgq)$DTu@!d(-id5avpiuG)ULZCvub4_gJXK
zFJwx%YP6ufcYxIZ{wvU~VoR}_Ol~Y!k%A29y3jbHr4>1tjJK22IQ-*Wp!_dUm#<KB
zlJJyCa|m#0%%b^^2H-XXYM)>;0WYD*n*8_Yt+X*G{J6HkH@+v;xZj>=(?a)fzJ}NS
z8+ty#92X&1>mpa^IlR9m)ibNRF6CSoC&c1_vp6wv4CNyf;J5{d?YE-GOcD*?X8*o3
z)_t*%0L~+~(9jF8Jos4<kvM>SHG=Dn;jEO?G&72p`L?)wv@5dlxWe2Ky^nD)Z>Xi8
z3mb@T?w4W4f%<YVMnu0taKQlrYBPCp4ZU)#6h6(72q7$f_mL68Lu2)THA}iK1Ljx~
z(A>--$VRt5RWtn)W;uv_1OfX`J@AEa$MDp^vq!t@Cju?)0MrhM2$~0KpdT&{l(w`U
z1ppM>St0CW!8Y(hQC-rWeUOrwIt<tX;;+}M{|18x0@-#!h=_85H3*Wr2NrD*X*Ma|
zIvB*i=zPD4h+O*!P`_NSGB*T4*}Q$J#KAe<=k(8M*KO(pR!^H+fmS);e%JKJ<*<C@
zcNJl{<xe|K&?W)MTX%Qdh!*+rS*-5AGfeqO=47n6O29J^Nf5Vk#B;%!Jb|LZh~@yj
zfEztPPNhzsl10B|>$YUfe1DAi^56={PLrENQh~?JVp2Ge-(Am+7MK$a*p<`D=wted
z3l4S%9<!EY9`H|dFIf&g3L!sdFfZFH@26_dk%!L_YnDVZ`{K8hj!5a|12gx}Xd}+i
zDC*hHQfR-!P^$Lao8QBm>bQu(6#bM^r@L#DFJrvJk1T-Kr&#^%#Ys@Va*5`!ve7FC
zQr>%p`RR$KtCmHj8DT+)(8fd#Yj~~8Qm-k8(plZvZ0B%T`o|-fX_hd)LF@Xb@1UA2
zi@bkphj0xE9o)c4RV*?xx?ZlHP2C{@DhGmc@jB)qUQW<K3&Qbih_5UjS5fIn^nFh(
z9oHO=>pb@iV!jSZvpvBA6kcU4v)L$@JV;$rP{6n+vS80%Uk-3RnIK>`p?2zXEq})c
z^Fhqp0xi%txdB}XgEq!!Pf%fKJdGUelE(6vrSZ2aF3+xpMzddGt5JegA|(ZzsjwNt
zGLSXuy0bVeZW><c9Ud(|EK7Ad?c)5vyF|-6C_C0#V0;#O;RrPAx_aG0g(SlnT$@~g
zt*IKc)`x%0;TR!iuaYc>iMtj%V=T=05Weu{JHrIRFg){Qn^sQEu$L{abaA`q=bsVR
zdf=_gUL&H0sxhA3*W{`{09ZYD&!opspVi@m1bK|>M?LL5dx<<jxSf`KQAFd`;~1`^
zPmT^_`y5V)=7GPNR*~R23(2km&hw&pU!pWl06MY*@ZFNLxj_l68}m$GqDa7bbYI}F
zI7Al*ldBUYTfy0N#_`O?LmvgVLrPKnRk1_IpTdNB*t~pFzb>Arrj9A-In)zZQm)dZ
z3@frnM|YZ$)KYPbXshIts)EfRdSq<>iMQJ^r0ric7IRQo@|uX5X2=Brkw8i`?P8;K
z&t*+967@I_=zid095Z)^*DX3n(bkJFKz5jB+|ncS+IJ$&(wnu&#zY63O+6#TIY=N!
z&!HDLeP?4BCXho>KU_#EUg^?DvX2opiZ7&uPiaVaU>K9KE*koaAfoC}MKWH)@kJtH
z?|W#o5qiuX1|R4q8!|(?AUAeKWF4gn!z^zQ+VefW_f<x)P1*C@haTleRJtG#@4;c>
zN(#%<MDKDz+E8DBct)>EYz-BHxyUtyiNq966`G>4G~}L_4`YW5MZeAp*Dxty2h|FE
ziz5_~jUT{m`?Of9@3QTE0I{OW`HRWVM4|~|r06@)MLnp7BRcRzrAA2IBusC)8A`uA
zWSD~{Tt`6@NV1(nF-3H-)sMSYrAw?K^6N~QAXcB5lIG^@6a1@IC1Xf}lg?!{sazAV
z)~=$`0AgJcP~YCYiOxd@dEy<KK{=sLP@dcFHJ?xp1Fs1~S(>-PL+`}^pCbHiqV?EP
zZBDQV*%b8yzP}}Hv}a;sDEyb!_gg8m+Z&R~S<Jd-<~WzZLDxRVDoBkSS{zT;H@7-A
zgi9xFyCf4UopDi&UKqb8%7yAnznWy>{3l%YjI=H>VX=!F6yv(F5I)_N>rGtTybbr-
z;9zfLoD7+;8QrlpXB~*m_y~&Wt^O&%FAT$Mo|gdtGMaZqrUyXIB}s0oFEPz@KERN)
zEppl@fuvO3c`Wk1pJAeKa0*yKeTZA0Dl9#sJ28&jM>&T|EF(g!1fc(|owM*GD#URE
zTMm$vEFFAhJpxB1t9OqO;h21Du8=rp7q9SBsWeU`4;6JRkv$>Omy1edm_CZvEDaqT
zuYE>(=VmJ=mb*x>S!B!k_A}-C*bvCtbbfqZ#El|~{Ac)IR=($<cC2hbsv=xvptBlQ
z^irca-5mud52>}Xf*GEVMD#g;D}Ec8D3V?iKn=fHFa&27?Ak0q9+fXCem;w2#F$SV
zVbB4r9J+8-y4gG^nhs71nF&EY9{0X<4!XNDB-GSLyo3G(>2^@wC7vde31zhoxDwt$
zc2%U3K1eeTc+m}EfWNcGYyJSGQ70q(ve1>3*vQ);q}i8e_#~BN0a2yvyMnBA(;3#L
zvU5hB2%Gp0tS0KaFfT=Q{Q8`E;sxG~3$^Gk%CAinautq7isrvh6*CNxUHf-5J6Vrn
z#$w8jvL-jU2{Op95lZj|-W7PUGqc)|PDf~@x;8bFcczD7o4%amz5kY!F&0iVX824E
z;?EZIG$-K|bkjz>w1m5A1_s*i`tKEd{aBa!l*EDfl7>6)<)LnZWWaqpvD)%Zn1?n3
zp7eXB_j4~4a(fAOr=FqudQwP*iDz!L?2281Ltz->b<#R?ie2cl)#ZCRBT^$?-khkW
zmlUaT!k}X0P=fV}kMjS$Nr3ayEU?&S+w_-~kVLgedoyLb<^$R(L?$kd@^2h2vjgCF
zzNTi%X<n2#VRCp|y(iDfm6!|`6LP>Opzp*RL)i;sd=!U%9FxB@+9sMjw%M6k5`;g~
z9F>+7M1R!h@qpTnF$aI(9p~Oiy9->2dl6vd+Zg43Pr$k>G8q_Lc<vO7qu+I&08+*g
z_c9~e-g^iH202MsbN|<i8VnbhOmfP(1kAi8@=lb$Km2Mc$fGW7)`MiT-Igk__yqVK
zeI8|<vapBNc~3<)fh*}zoE3R|zv;lF?Z-tMvg3cJLTKFMVL_VX@-jc2KUo$@3!jVF
zHDdM}WLC`D5K^K=2&Uc{Gac=LW@C8%GVitBwhP`OxiW`4o4y+c5+g;D)1Szhs;h1+
zJI!imXUT$44aC^&D^G>L4ZmA~X6|dti0od%5Dd6bf=~?T+>9KG0%n3YDfJ{DA%~R&
zK>&76=Ms0F!uQl#l9{hep9Iej>#x!kMY2z<eG4j!O$9$~xVXI*e8vfqtYhr6jWY1w
zNnwkL`$8)j&=FPh^oN}1=+MeUmV=;R_$PI4F>-G350bj4M8b@%1Y1B&DXo)kfTXlr
zpo`L;-W}8SQpy9`Fq$U=lL;L}SpDSgcA74y?=HfAJgTZE=3;GDrySce`!6|6EfJbp
z)?@?FScx?x35!pUei`RgIHtAHrWl{AOtC4sCZ@lpKmKE6X(TdAs8KKS`WvMk**V&J
z-qWOf^IR)igL5izH=TDY99Ei6oXJNS1jn{50!JIi_2t~wr$_L0t?_<;%iik{bmKva
zt)d|r*y?&EP3Uu2|AP%46~LiM-7|mrGotB$E>&l6-eOeL?f=g$D`$HyNn0Mk?@qd2
z=yjX5Lv<R7Utv7)ww7h^*=<!a7O5jVSBS}^GT60;(6%Fs<-k&qOXkpm3=N*Lxe1P4
z_wCk4kaxdbIJ5oMr{Y7m>xPb}k2e-*TWUfOzDq@0RNQQ^U2&BAuY$#5Pg_*81+6F1
zA{*$)()WXxSDEy$n#j>u9&F^3BHuUVPg-1RLIydo_Qlv-R<A8kw+Csrh$q2yo-%a)
zd2T0x%-)YrstrwRkH}<CufnTOm~7Y2Y|GULZl#IOA<c*H%}=5U+!J9ptT`97&AyoZ
zkw`b*()a>?Wce_#bVpXnYc#EbocP??v&0x|Bu_)XL`?a9LJrWMv+hNrDde|3%xz??
zqoj%zJ~;b??=wBI_GVRW*el3Wp=Pz$A%f~Ov_NZ{ZYHVd9k~~;Kk%bc_)>n-#R*?7
z8=~9D=%vyjqF}<F-m35MDLdow8F0>#-@*Ekv4G{}__E7S_xJII(*g0ency=QPYRCS
z(*wq26LA}WZUV{o?=Fj<Eq|D5Y*W7&fyMs#QT{xi49&@M`4pzZFS=&#dv3^DbgjL*
z1OSquy)R}wnGN@i4J{JWmv+w<Zg*Pv$giKzy2#zxkA4z>83<-VVsKS_?7O<ac<-LB
zx{E&t@}3Ysrcv!l=b;=13p!B_^9Kp}3E=5R@a~I+Nenhgyc+LDBU%V+Gx{1HVl)pi
zZtJz|Zr*&UOd%G@2^a&!mx)E8KL$<q<TgyKoCm;NQ)k%QZh@!+4Wf^jQiRpwYlF$S
zRT%3j^S>JJfFCzjvBNfAA<gG|S(}Fnwag~~@bK^FTduD;fwKteg(_{!r1o%jW;w$J
zo{i6D>+yR@=_yq?^GWUcyDZo~oW(kArcVZ}t6utsAE)@)PQ5ET{t%vhgGLB~Pb>i2
zw-$m+pn1qgm)J#!KgbVK`-tJRvw`go-H8z7drd(5B)O)8>>W|f_!vz{_aJRur8vvI
zS#3`#Jy4r!UiJ#n)rA$$D`g2ljl;%`N+ywJDp$tgocV(Z!85#J0V3L%vCKG((-h$O
zAB!=NX>#JBFO`2NNQMR-uTmk*+slKctoeCoU{Vq<373P4{VZi#aNSO)4IlhbJ;aJ}
zIRTfFVEsHR#Q^r41314n@r9AkA;!Ertk(SPrmDcSvd2M;$qJx6Qu*#hR9X<VG~y>h
z@{%-eVdpgV+*eB#ec&t1R)`V1(*=lU7J>qj<PfoS_V1up7|c%}8MWLR7VoyVgZAXs
zmP&rD$2zxVlINCqXG_G>Bj)LHlkQ_@P0bw1VfJZYhze)!^^_253s22A3e1N@@zPgz
zs{<3qYMVXzIpgiAZAjLcvJ^DJ6q!kut0Oj(Oe2-HL@Z8D1e0^S^zF2qP!`veai*Tg
z+ktxrV{S0RXf}HiZX`Bb9V)X*+#`^=ran2RVq&p~`82}smL7p!F9pzzyiC2m9NOB5
zb8~Z=CbJjXjtrt|sB*h4c;~5|c9auS68lTEqrDps*|yxm{PJuIGZJU)1YCoi2LJA(
zt5&%`x$&-48+w*tT2a$Kygyupln_m|rE9KtX`zw10V(8YwuL(m3Z%fcHAJLw+yuwl
zb@@jpYFyvb>hv4IyDQdv@7*|y*d<H}mJR9tBz;q;wC31;Z1K=eL;!u}lp|Y$7~Q4h
zP%Lek#BNOB=L6rpIJD$D9REaj*o#xHcB`qyYFl1^Hj>CnO;6+Sd~IcstNtkI^87GO
zQ?Trq$g9m+#1%KO3n&DB75CX=3v#V}?&2c2+-XIum05VZ8@;L46+`FvVtXm$rWQKr
zC>q#l=~f%5PU7^^Dp&hhwll1I{<8LrCOcZpKGBMhX#dO~p*uF|97LA0>0&IOQ4u>V
zfdI4rIuQAUF6@%({%l%-(4~f5V?gPrUc($3u4s^jj|0FfcF&V7v`jfKYSiX$k>_QF
z(sEh11*5bc4Cz0xTX`<BJ(y<(7Xiy~SW*r|r7y$orTF%oBlql6HAz_5(~3oHW(3@m
z%(_EYJb4uD^o<Fw@}MP$Rip|+@6gUM5~6tnyGMeVkFE5LW7p#HZ`37pMWG86mu#ug
z@e647!N>OP<1om?pbeqt#Z$bP`)kBUfZA98HIQ021Nye@<71?O9Mikp&8RLO_?%(n
zK%g#!GP|QM30_ZRv%n?Ko_;?F*4k%QJ><SI)3o^ew=t9ov^Fj~AbHxYOUKqOw1<p6
z85~>?3)`)0REI9INj4B#vUdGk{E_W%oN&&?5t7GG+$~)D1L?0XAMY%?8_3GIu3m=R
zEG~rDos%N91{^r0(Tm&D#>Ze3&UWQo=3u5;55%ow3`=Q+Jg)nPeQtne^WvN=XUNqL
zdp5p0;3DW7i7(vpq`cL2b)MhmfJFE`)WLMlob2Y@+m~rBut=GS1B&Z_H@Kc@E(ltO
zi9sm!asDEBl;1CSDMaov9@kx83|}+MQZd2X8Yp0d^{6*-q|-xK@2n5gP$w>@dio7K
zF#fS3_I4)CC?;L{iQ^GySEamsxxNUN49+)M8h7cQV5SUFP{jz&$SxxM599j9Td7iG
zh>m@A=QXn3K3H7X%m7tOblJ|Hp(O@eg46yb2fs0@-G0p8a4RT;qos4&ccZn_ZmB(e
z6DX{TS*LkAhZorZIirifN1PV;0h)_ZuX3BE;Y%V}4}jGtPo5>nN<LM1PJ&!Lt-<}+
z=%`MbBTE2**G#;6$d#MomktNgdXQVYpy96%zW&qTk_?gVfU|f6+`e<IH+_`0NgLTW
zsMg~q9z6?)P5&O@(bO4ub{si0P0yg|RS^$_$wKjKD33+pm>7jPF3zjuF#Bf)_@|;J
zk-73|H=;og!kFSthJq!Lc62L7cS2bx&_-a}Q@F4rF5kcl8+yjl!VQ#YxPM1l?8py?
zVDpGaSOB=E_1<`9c5HXv0k43GyohR2pHkPpSV%c_aGphM_M|(pNeA(4Py?3p40oE(
zo(xd#AKLr?OZfJQ8=ObByiuFO|9CKniIxnqr{E#u9j<Tc-QG&z)`Nbe0^akFDD&k0
zGKFhxv*Y{w-5`Pc)@!-5!OlDJjKA5t#&2BL4X;~qK$3mowiD!zo?ChNL6~jfS$ASA
z9D%-V%Q=vOK^^NXcfD=l6AXz<-nOU03p2R9sFo2J<CtT{euPi7T^<?uJ)#N-XpDh;
z0)WUvoQCD|o;)gi0fBzDK8Uh=3P!Az+-zY2kmr`4+HdDfEdyqss{<Rj!Cl4fv!6!5
z9bWPCHo}d>_N$|f{2|_;J1T-~mjm|NayY#~xMg=JTTF1XXFs!0`NMWAwNH}W*>rM1
z*%>e!R)r1>XU=z1`mzinN>fIQa3)dsB+Tz;kDrfVCBIezO4c33t#Ihd+Zw%v;$m4?
zdvDX9>4F)%5#1HiU0EN^CuU4?Oi1A-1jqzOe|lNbMDJk~dKpsjRivafzT|a6GLOoO
zU-OOO=1`XD!;TMgAUmFLH1~)5yilG8U`gd^>+g}ytimeFSH<E^CasFs#Zryw8^TO1
zF;48wh9{YXw!PM~DLkiJ{Kh=dDsu&V5_H93`yNk0IfB0gq}a`$8FnEg|H{~Iuc=d-
zbLcswJoMk%mE{nwZQ+t8cA~A&LWOPyD34!3VV#x|Ixg5G;oDYx${XoYj6$0_^5G_T
z-iZf%@7W3z++G~$W2_e59yk3O_<I+@K({jA?n&kO&B>9mEqQhqErKkH&jik#lsZ;S
zuH&SdPE@Ed!Gt=>0mIQOY^T2F0?mLjTdtb|6r?`IQOIbNm0_$z7YJdvCz<x)W3JoF
z;V}^|CT+Nu$knNR05qb~9wnVCe@wdsZNQV)Hr#qZmyUeI01|!Y3DfWt%<BzD_#v{M
zjb$lCojU>Y{9XL+ffx1&5O;Q0<RfB4yeBm<DV&Ko<cr|^L2Z?7fR^qN!E%$EIERHj
zXP|8|!Tj0X_#n{zY0Y20$VH(y1eR!$f~-1=5auVvJcPn(4e@I&SP>r|o}D}bWse7H
zX&wTIrT$Q5s7{EnmjIa40QVq6{F?KTj3q<ytjW&}F7}WIS~6Xxg>z?99076K*d_eA
z!OJng2o8_@J!1DWxV~wF-%k3#%l5FY9gcU~-=k<Oer6Z+`IOj~6dv}X4tYmyOSxs|
zL<4i7PJ;pSY}+Bw@b9M(L1zhWwqk<SIe;T!wnv)<ue2mvPH_kaTtKEoE`j)1+Aj3-
z<1_LzC7;}-lBN!j8`(ngSTAMuJ_}ufbQl)FoTQDSe8P4NXY%Na_<J`%iQGtlyJtA~
zdS%ag1S`lfH*S!VesA{B#|0m}9<IiGG-Da=7{7QFwCcZ7=|9SMa$7{>(5;AJrDRV)
zw06LWtM*WxMEK2Mz!h^)VGGFN?$b50ZC;j%=qh4e4kGazP$sCUV1M$ZB$5bvo$x*d
za)83Fh_5zaH9AH2S6C=pYJtkO22;Ba#~G#kps@bBja4Bu-R8DDoy!By=#GQW6XvhY
zr8qx-kBDN@xFY$E7gr#zId!8Gy9x!?bY#Mh+-DNXW1#+1_b11J+rO~&14G#}P~8Ew
zzzB|YAW(tFYX?<Ga)W9|b#|EQMTF}1(k|uwrzu00GouJ@FgUosB|~r-PH(AKWw=XX
zqEdv7XDSS+b|t%dP~m|O>N2OYShctLwR~ragP?Nn!cNW-pvtdPOJ5-}hHG=UX(*|u
z<rg~Zn;{v(XnuL9cefn?1s^NO*j2>7-%jo%8J7t!(@{ansh1G8c9*o)o+>9DfCj@s
z(Db$&c4Y1+-E*F1M+u@OXCsa;!Qwi`u;vyYe0Yrm|Bc*Ffa4sZ?+kF7gXj2h!<lx%
zEN3@BGTOb2cSg@UWlx1B64p2$;QrVW?yY5Vt<5cnEB<eR4NHlG&LXuk&V#3X7d@Ez
z3h?G^)*d<loi>h2agN`fHv1j`_<bjgemiYHwJ-V6j~P^xA`e~b<8z6IMJclnQrABX
zL7b`up3)a&h6Ya`QjM<GLPH2v@rz}fC4TmI@t;<^DYi&f`l8g8+Y?oZE;c{k0(SSj
z>O6E2s3m8E{~AY=27V+fuDtKq(03_gs+3QL<)yeh2NU3s(ft<8J+68B`Y-t3G&doZ
zeUP&rEboEMf+gWsxZ4Xf%ddqg&w!2iV%NnSZ?n&CskyYpf@W<R5y*ETkS}N(=Cm4H
zSr*!q01urs{+Dxxb&7>}-Kh|VHk{u!(c;>H;!L0^PF~ikgelIPAm%i}z>N;07AT5#
zr#Yf10WxRb5cMW<`1l)nxX6rpMlg>iTw~n6w-XWJ*6Zx5lhd*y_!2_FZxTenL#Bsd
zn?190+;hHz)45E(b2Gnvxi`!isUUB&{8Gpcjtll>I{5L9X$22?P`b3(LgBB>s~2S=
z7r`5_Up+&JRjR*B|A|wgcNV+&i{w&(JPL%mg%Oi|>3N8@v`7Iz1h?-k*r|Kh^nQAB
zod&hymqBH32&Z7p?7uVS-E*H?)zBiHvsUilT0n%3i_$KE#um)$N!2=Fm6ft`AM@W<
z@n;M9)4Oy|ns`mygEGkeP|{(6Ih;rZ!0dZh!qBaDmTKXKY8;He64@GSkxY}B_A*6C
zLo_Tlef7A;zNIazQmP-x%gbGbfX$;jC(fmK7!t+zm%xM<N-SKSDOYR!N49^naHjj(
zZVK1F@T)TBvqPp3%8~t8kUDyyGYdM{k{)s(H~@;fi|u-0d_HEdKR24#Qyhi|=afzU
z*cZmhS`NX3mAr+$$u^LJKk~+kvbi5!$_JGzF<939)v%dm{OsH~i-3@abK$p@@e}w5
z2FG4|skh%i4{}d07LFY|aBJ<VETmxeQSx!YU-Q=Xd%-1dl~}fFC=>rK^o-Xt?Z+@4
zGQ5RA;e$uezkG`f>iUsscx23^OdVOQs<Ur2ZajhCT@Z^3#IWFDvc;X72l;Ym#Ygzk
zA}Eg|6SDU&;eJ`N<5ChhqYs%8mIR#M68^6fiWwbhVF&S(pTWY9&V(4GS1D>=W(7_D
zJQ-#!O?DRmeaQYBR|sBZoSs*X`0D{#P^PI26-C}yNb0@KJrnE&1Fu}{JvffHt6wFe
zc@K8Z{^lTCZ{#sg`!f-57nO)jkcYNJ+ERx1t8wDul0h>1PB+I!#atLeC%LLyJgv1w
zly?~gCr(1jpXD8;sW$Q!Y$c){AxRcFh$DG=<!!uLr8w|2b>??hB$tA?d>-83`sc)b
z>^FXC9;v@x+<zUV&wM~H{+0?&nC*0_TW3PKWsz<KNVzI;Rr39*y`zZ~uJhb8mO3Eb
zi0^@e8K~M0LGSbejDc|It#-aC0LfLmQ#g%))S-Bj&AxKYN++PhV=~}MC&24o4c7Nu
z3bt=QYF~rG;Z6^5%<3tr@XBw<vh}<v<IAc3s(2Bx!SpDTw5pohY*z6sdPf^v!=|2~
zYkk(N>KFC>tM?hx(6IGRts&(L!pGV0kLce+$B_uBI^(8keV<{C$CFrtaksA4=Q`z^
zLd!cA&YQ~PniW9gl3tcg=xIvcep1@qjb)*^Iq@wx#>5rtT9ITgzm{#f)zaqg{sx*;
zO5=#R;dN_+h_G%4?n-7#*!#ooW)16cTSH|#R6SU3w*`Q~@ewRu)I*mgRkat~*A=W}
zQhwLjENXc(!9|;^zbQ-%!(#F)*xCV?hi127eB*98)@<dZ-a?v6G;r{l+zvCnCaQyq
z=OPe|2kxLb(+o>=ny!WSWPT5O0VwFQ8<}!MzSli&sAD%QijuBoeGn1MglbdEBW1L`
zK@I)pc-;`JTYnQ39Y1*;4XR&ctxpiQcTxG}(?M3qP&1{GNy)q=fX-yphin^$K6Vn?
z3zNBD>F1i?({oHi+hy`<A^#YY=C!p?3F?W)w8|b-P)fesj><xyw@cUQS>*Xr@c<EC
zvmwk?nz9Pyp5#(YCNG=-y<T08l7%nw!BHFl#%Tx#K$(TMI5`-Cn~FtMwG+Q!O26gu
zEMc9GIyD#-v?=9UIRld|8xq4K05p(siN_3%P)FtG(dbUT@6tWZ?$79iUzs2JS*^;p
zrOKCOcFh<$sShTxlg548qp&waVy*&)piBKj&nR~|3c|;pUupRd*1!AQD5H4t+xciq
zc~Qp@VPcQTnBpZJU5v7)tWXYq(b-rny=dbHpa|R-%%8+U%b7OcvJ&6R&-?KowvTUT
zi~XA(s5%T8r)j(X*hk8~n0E%SkUsY$V{`zHO!~^~QC~rYpUbHKe>E`xgD+Zu8~~u4
z=fABc{@<kJO3nt3&i^UL>sHZH!&X80mKDTcgh@k+MDv^vWYOM$SXp63fljt$CKM-+
z)O@Dr=<72kl{PiMuzTpA)a*-a8RB)J$@}8D;AJvuCkD9;svg#Uxw_p<d%Vus{rNmr
z188d)oYTw1ki%3RcKMrFuYH5nnnKyW<q(EKA8HlTLubPth(11v3RMV$i<*<g-LkhP
zBIkxWgyG5d1}BH<T1kKtlr`e!y-aKtf&qN`XWb3PiYJ8$XVf(m>d6{vwH0Lu6Ny7>
z7il=#2DA2h>wypk9a|999OfP?S77`YpJ#jqmO*<aS4TIqz-58pn<CWQ(OqK@^r_rj
zAh2L~o1PNJCaLq>t2~^bpa6Q?!P7IRpbBRx(;;M#LMW7KeBU}g*EXwk?o0f~yHtI<
z3?X@2ozbh%;oKAki}p~GOVc5x6WMV(Ls0d%5i79q+D0FD;m#DGYi6$JWUYiAZE#3q
zewG`vQjkkj02L+i)KHfrJQUl#3zsqxrdqm&cbH#-+X+UEI<j%xMZiVr)TbpQ``<%V
z*1&5gVjs?|V@#s>F@#NICYFg)M8mswKaGS#w86?ziX<n(5ErE)1{sO<-NZ<>4oZ(I
z<9uqG-&Fi^3v{heMxN}SdPO7#Ju4gcylfZSX&bLCVqCIIWW4WzG~BYJa|`8IwA>r!
z<?n1!T5lcup-csnGj5N6jH0CmT3~V3m{sJJ9<$SR(`&gZ)l(`i3aK#){KL<ASG&<V
zs3{_|nuX|~apVOmU7f~e)N0kx3x2!f?gcrrj|{xZ3}JB?v`ap!cMYLj?NtZJ#&XXj
zR|fWQkCdhfWCC;UO)xTj3HUTb9~$*KP)l9!gyomR^XKW!CgzT{Y?(Sm$`9J(QdHJi
z*|*u3%o@A56hN+E<&3Ls|2p$qB+0gOcr2tRj~`TU^bRN}qTA2%XJW_{cK5VW<o~v+
z%{r^*D-9Par#@hs3(M-hIfjUXt|+4jH1=#{D+drF*JRyy@|t4|XgNkDzH0??Tufl4
zroT#74QM2KE55ScQ#)ZPc*4ivG7G$`#-<IrX+B+|x$%VMwnUpij^?R#04xVyb9A~}
zi}$JvoCG^Wt_PCS^s#DEz@!}^mErf&HZJy%MTyu^bTW00ioVQ!5b+4>FSabR&E!j~
z(b)Hi;Nywu!E%f5Jk)&wB&6{CePN=NfO5?)^uqeWD35B5v*OFfkLj~x27&+PqHo~^
z*(I~fu)Z8S;|;|w`T&Znmw#gpRCveh$FL3MZmTFlD!?OXSwLPN6mF7UijUgY5d?!_
z8)Pixx%Jrv!Kx9kkXjPBWr^|x>5g-T=ssN)=*IL35I<}ecx%vnV~{=wz;~!j{ZvmE
zAl{&U6{iV+|Mt3pXTTNAOJtFJ9qJ1Lo~nhpB5I1-!b5|DhxZv{)#*Zfi*l9`2bF?9
z|A~G_YI#TchZ5zhDp&vM7xE61x5$QhVY?O|n|Jq2tLoNpkIkCZQc6_p<ei7Ax1;s^
zup@H5e1t19oJLuL7&*U=6?S>Jxi8Vy3-~`9*Y7>p)Be9*+|1DbE!OY>AOUO`8R-7g
z`uV@H_8;Y-A&I}v5doCYpFx{MdhMgaKmzn4(sCGrNG!ULaFq(l;L84xn@kC!pd`$5
zXL1^JTOVk>zL4WT(CEDWbbAwJ_I4hb<LV{S6VwY#r`|t&rwhBjK5tO^sPGWT&nYIO
z@YtFxmyAn-9|~vfn&dVC5QE?c;_LwsdhA+V;0uT5YzEC(9&{!(SRp;JONN8U0R&Sx
zd9pH;KVxPB%W9O09%*^N6-9G`_y*jljq!xWKk>oQWCPQKr4Z^0<)2!@75}p7*Bc)G
zh5!btY<oU6H)fDYt8f;PU<+Z)7$THeKMl^@FOnDd$%#DMpe|?Tl2)ToI;>xdSE#?q
z)md}JE{<Hmur<+PePAodAaz0yH^x9pXD)FF+Vv$_Bb-1-l%RtGwwY5tT|Sqhbp<$U
zdyK^{vfCLmfqbZFk99sgV`Dot>~b5_=d8gLpD#(*X>)V%VS8vZCrSk;^peO4>*U6F
zXgZitQ{|f*LwkeEPPE6JH}g(tQud>VJgYfOpP@qv+4v+jH=vxRLIPiJwI+IfTMeia
zwxnOGvjk#u8{iHrU|Tudp%swfb?CqeRj>lho2NrL*)A#PdS8KOUv6u-x#ixUXJ$4;
z(?0cmz9+D>0S0q@vW_?$Fg;=tLDNM0aGN%o4xbOL%h?37ZIg<|J^Bv|Ln}pq-ZG=6
z%ix@FvTKXuxF=DFNVnQ^H0+g>Agdt-t|q=Ck^!c20#HHrb%}%8lJ;qW@43P}<q!RE
z$ZEixzBjf{-s+qU^YDh<JH2kdwgI`bKOTOCY3%hNeu4eZtk$-2nW+K+0F3|6>;K(Q
z``>5v|NJvRM^Q@}M+GC-56Q=JAuRI_Lavl_D2A7*o}ZuqQn2%Rm{}uiT_}T*%Pc)Z
zsDFf=i;0WN%ODMCSV!F;(h)s!0~$qmsC6zylll2Y-@6`?m)VCu3jx2{OvADep6T?b
z_wnnr*T<}GD(y5zoRr`WNzdU|u+G>+&^z!s|MF{{_6V(@`WeQp)7M=C>SDDQ1*ZCZ
zw~9wJkx`St80V~uQa7Crhn)AHsq)kq0xOeD7U|Apq3NPVs$#%JPc-9H9ttBD5krxa
zr-y7%MGXtj7gDA&1t%*vtOh4U<*yu*I^goo3MRn&tuRDdXn>JzDz8+hiGuORF3h&|
z9Lzi?3<v4=O*#o)0##X>w<s3>>)%(A;w4w)8eSp1GE6_6jTd0eBtu!?=Y)ctAM*6n
zcw&xs_2|t8-#Ub@hld?z-aTZ6W#y@6NqrgwY0u?eQ-l|Wpf1x0R~rl5DLDyndgctO
zYkT(RFG%Z7|E2ys7J+J5L$EuhV&RIg+2|yYrA68C)T%l@9d{6WLI@nOb0NZT?ZQ5_
zfFuQMSt{!iw2zo>RpiDnp8XkSVN6Nf9vCEQ8XzL3ql_cOb2CDBNjDraM={G2ggAxG
zc$Y-4#m3l!WDG|O5bzJIUl2S|xTN}7u@_uEZ8*i>x$(Rr0w}8H$Y6gGNXU}W1wBD+
zn6L=lEhH;j-{H)*RjcY4uGu~d3obc}cnJMMsB(p3E9tw&=)6f1A9!trl?2L1BrCKY
z)9D-=&6O`yatLN&p-ejJ&@-PkvFDRT<^D1vnOEG4BZT)nAfM@W_HI*Y5&va1DbL6@
zLmBEF%e|FD`-E!DtIB@bkD4(OY_aF+UB@CxZuMh4E(L=IUFKQRt@cEy0}u)OidtTh
z>sjY#Dht~LZO<r}cRDwCB9@7gsdOcYo!2s|sRC<~aR*Sg0&fgrkDoIQ+rweTrrRP(
z#&J|EJzBmFkH1sW(kh7-y>1hwFGJDDIV4Wn0aH#P|NI-(VH30yrP>*elL$H{P|3+&
zDB4!d<%!-fGgfMU0c`C2GS($%^RRCwT6yr|%)}#o(`!?Psx9z{)Qz7@qb86mnZ3nT
zSbOTIa)16zK4MKQ0*9OWK39Hc?G)MKuk1<-T|3ZBLN*_+9Hm=}ODryd)>eN5GPFhG
z^{#`?aTdWSZMJ7UG}WtU%s8Uc+T?c2im567>@ZV?m6L;&A@$FtJ~gMMOzg2At)`Lc
zQ2L8&O-o*N#BKHXZH3iQQ^F-tLe9X~*Jzt9_KH*!MV3ds`{(@dGPU}Ytfl3VovYKT
z*K1pGKesgPGZP=T&jk1S?rXY@-N<7q&+Mcrk15e4j`2tL71Hy&nQ6Mt$?NHeuJ1OU
z+_wb`9>!EEZc(pr9?!othTFAWte@YI0f#s_*7L^y4V<h08an@l`<<QsllxPYt?U-X
zQFxNrT@Klw1Sp#2Q)xBCCy0u*bY;k;ptnh~fc_L9;p@05N8@l^f;Wfb57QzY6JEow
z;fJsv3YXM$QPq&dnayl@o&3|*`+0nR+yy|ZC#B!csZ+tFiw<n3>K=>4*{y1QgOTD4
z?mLsZOi^*6v8#G_KP+h`!qo_f0CD-W)B=k==CrGZRl692L`mGLDzNED_3wH4_uaG-
zl-QTC(u=Q*j$z53i%bJ)JelHx3<d?poDQV<Gyn-2irtzej4{^7%n<FJ+r$9)=&~pL
zP;u3fN>fp-ZGoFA{S6(FZ;9ZQu$Z#U;>YBAoa<h4EU{;Id&XWs{=!h*u8OhpktvIn
zK130aeXxeou3-CYp=LCzinDqV=CAoB&f;6tls=NC=o}+k){}f-U96-9u4lKto0>Ii
zj^0Fd#4bPbB8xFz8;cphzy$|{Ry0`5GU}4DNX@@E1kY}^M{No!3TLt4kPD~Yo!ez}
zKqieMKM<m<E+eLqpB|jj`Qq7x@}fTFsKmh$CIzZ&uR(yk3?iK5MnLbItde<c*H~>t
zQI<qQCuz6b&hohtp<CXDlrDo_!N||)Fq`rSWA{_%i6gDHhS*_Da|3V0wp}U(t|;a5
zOt|`}E*zATUTg4=`DID#OyBH??ejWz_o166;E>sIw*ZQGm9E`vk2Vz)Z9>eOh~g+7
zzVdfBH`0UOP7P^OOf!}Ye|Q@f(^)yH>d)JhM%x;PHhiD==K4c5IUGCNhA+;V<FW#F
zM=K`)OKT;VE5|Lxa@Xg_QFz02#OH)cid?~5hYrfm5pmEiI~+-VKp4)nFF-8GxkvOB
zNuF7ACzM{iM^DuJD~1}1A-+fe;V1)xxH^BU+$U(#>?l)Ly5}pt7*-IG#-D7{WJ7l;
zLLqNizoEFvG~WHfKEoSE^ri>oT4RQkj~Vt~LgT-;Aa~>rO-lZuS4bps1yVcbPvsKP
zF4Cg(^|Y_doIX4i9%nwROKQom&m(jNW&@A>&c{n(6GD6ii)`+-H<Ki?m-QW*0I&8%
zXPGfthS(^a$4L5<oX=6qoGl4*FBdg093Pppj?B!2u$1Ny^?ExlEhc5-_rE_18p&Wd
z@%`$y^!}?*`@f)ov(tZIYf5~t?0`JVNbe-R6d)?9@Z4~)z>+%QNIw$N55qEjGfe05
z0zYJPY4ZgzJ7)&_2UKW4e*pMhLG&prjHJmO?QVyj?`hZR)@)rIq(6~0BMR7Zr184Y
z>@#@j^?B~`TB0N;N*@Lz&zEl6d*^mSW*g7q9f&ZdBA`7z^Ha|Z!fSQFx+(jP0+5*H
zzt(;yxMR$sKWQoJ{2Bcf7Gws!c#%~WncDCsD+4u3L(ew6na(HNnb)Z{3Z>emFrf!q
zHBvyrVEdIG^NO@mFj^Dd%CbZu&Edpoi|YRI#g-X__xc_>F?gnHaDEaV7v|qOyVVQS
z7rm`N+cVvKo)-0})ejDhFbz&+GDYE)%MC8GZWXeXvA0;JgBOb=wK<g=EEN+$3IZSu
zcgO)_ZGUviwBQsf0UUx$w!0Y^Zvm6x`#=hw4p62O85cmrM#sL0SIJF@$`8onP4Au@
znb!TlI^TBAu2IPy|6%`6sBTiW$5;RY02KYw-2W5F{XV|`ljN3_HtjZ*ab6h0!F6Bd
zuOayamuW9@Pl=a@@YcW<6?Nx?k4epHqKve7UnJ*gN8LuHl9(;Bs%;W=7fRb|v{q|y
z>*?>6hX!{#$_0T5@i-BJpp?mR%+N7@0258t^Llq*eR_BAZ>OFfsFKuYM-H<480st!
zyb75KdPFte+^}pcA}_4Y^{QeO>8^mPm{vmkGq|?^8~=tYi%1D794qT0SqQQD=N$>x
zqJt6CgUDWis`9zT0(-L68wH1HI>WPzxhJR%HXC@-ydQ_}mst!p1U#zB@kLiPCyXOe
zgIBjfLa&iSfGz+-)eS7lqqVbx$d<9YW95R@7DiC!1ve{T0GA{w3L@*nP;!&q;WG>6
zC>FnhTNJ4Sy(k0-g@?z9N&ifM)CYBf%ys#Hlor3-6IV(o2cV`Q(YGhTDULET;Eg#0
zTm}ncgl+(a9%dHCe|L(1N$4WD|IsWLiGJg>Hw+RFk;td&J2BQEm<jP7($=j2?&dMn
zty&FW>#On+ps?>`*6<I5JQf|&)!m#u_Qy|RCV`8)2Lj<Gi(FV7N3#WtLsuye&*sN&
zV>35$%4x5FijdKKk8gH9CAzc7P9_Q$l;9O;A4lLQMNm8-ME%3Elx>9kKHDFX3GQ@u
zpRH6zJOoY-w4*?Q8IMq^M&FIWLL=8|%yog|_MA;tvUFa4zWyNpn(zrYQrx{n?0(eo
zVBeM+V>;6zKi>Fz<K1TQW*)#GD!S3E(7ONjVBDq}i8fn*N!Nn0n|eK&l3Av*9?Ck*
zievV!Q-SnWxJ@xNb=0iUO1Rvt*-Y@;U-D6=Y~Z$F)q@MhbQPPMv1lngn}9xN$m}HF
zmbR92_o}PggY`WwHCaWx0R%l^5YN`rY1@^OIc(bmkJEMza5D{K!4~cv0{U8l)s?pM
zR9VsNjf@!2PmKY)_~th`mztYPbeHrR)Y&EMZg96AP=#s3(|PXkFuF~x<8f#kluJh=
zy~oJf);2X&<7vCjdN0Y-W_+=x<9(mi?Bdqqy<;DB)1&uqnf7Y`z#K0wz{S2v_<BCC
z>v8Zy|8rnvsbuQLcJQ?#tgB0DX=SMrUbVW??;iZ`)2i||&VUIxe1`inPXB7Qo+-`W
zeGm7+7W?f&JcElKr}J192fU?e$BOz}G`xf5i)@t!Ke|j>+EUf(^*V>`3Tc#=Jn!1n
zx;^OS<S;UqcQN>At>uC!KZH8%dwe>on9-+QQ<sB_y-u-f{mzRmXzR*Z>x(#>%Au1_
zS4+&@mELShnRukC_rL38PqP~KJWCtzjEldjGY1I-eWz`VbLymE%e-X%=#9||>1^Z-
zyfJeKQVbQ(3FEPsHgKz{{5?5QN_;VxRU!*YCm<wLjRa3r+6Xw%cO4&Y!?Bd)cuE-F
zBq-G&cYe`;@(you@}z>ohogieci9Mtkn&Z`$amZKAFNNi|B0nQkDxAr|6#pf9r*u4
zEP2=({U_?>s94GU9)|ENuD%R^5P~WsM}`1FLzMfIKgh#?8YKkBNpT(QxwcumA%3c0
zA!Cy;_`Zl?-d@>a1+<E0H8VNAZaK~ROud}e+3f;O9e@f|GBedc6&Y&DMqsy^LNCfc
znu!wD_%k%)TaaZ|T8$KRI@u3Fw+0dn>X+o7XKEg$vLil`lTlALFVN96or#O57i_wq
zlxC8}mqx*F1k9k4!{~4{-Nm9il@eMnW;$13cwQ({hBJ}#(p@`pS=F_zEW!Y5!Me~f
z3a5f3&@q896?sWC7x2U)aAF9)Xek(k)1o?~BZ>jwN;K!Qh<53Q9(hTveWKD`Y6d8w
zWz5%1q7r-~%2gj@w30iph&?##N-0Ycj+dE1y^{>%!&G&uR#1Cp){Zjx3xw9I(q5Xu
zY-UsywEpD>Ra!kKS3)UCG@8^@G>AhN!%huQ#{1;jUr>oVJ`s4w;!(2CGPv<`bgW8>
zHNtQ!C*+iwtnF~Tf{4Oe(5S;Th$v`<`-;gV9b@=(oHfHLTV_7ov+&F;=*1+q%<|YQ
zWa!}*$W1{YjED{lN3x@CQqH=w9+~ZLV@_Le1gz4JEoiyIU2&n^cWz+JaxrC(_;8Q!
z<Hlp$GS_7R)m>16u}K?ZfYDplB3t2^n#g(y4oIPRRcRU{$)Nw&s>HdsQX5T@Wrehw
zEBYEf)5DO89u{iK)%Y<kGq{)P6~X?@mCJ@()yEb*6!NGDUP>Vw-h(JCV8`asa;}0-
z0^JQd)+kAqqAF_TUL83j*9@s2<4aWQ0DSqB^#pL{xNUS+%K?w9>5Fs<aiuo@h`CA(
z+Qt8?5gdNOF-3H)xp#uOas#Vuzi*HjYsXLACk=%l!OT?>6^Ju%=i|~H7WWAygg<5)
z+txAmUQvin7!AF2i?Y^;{&+vJNTC32eAe*lE@N2%Af-Q7l^;%?W!P6^UgKD#?$D><
z$b{Hs5mQM8RJ3*MuTzI0z;;Z-SGP>BDx*|UN*N%c4r-}Gcs9!O44_9s#hmo*mt@Kn
zk0A>zOAIUKb-EPwBNZpWj8H%?_Jhendih@#kWmkO!T&`$q5o=5#rwaVK>ogT|3Pv!
zs^d<Jsu({!bYrf`ph*CP)PP&@YmlTA@-Ik&zqZhlwSZ98lE@n3Kdnb=NU+Ykuh;1r
zc%J7+3&7XOeaV<mX|0Rr4Pm-o=lK2fCA&$%ildQ`B^m0s-M2oIw^}87Ki~Uc{@eco
z4SagaxN6Huy3LPFRMMP9lnyJREJXo~)(%{=aw#ViSw+Y+{L>01V=CknKbTe2l!aua
zpG-|*O32d^HBB}B^9ov%6C4%2+sjR2qG|c{&AI7x;twLx<i<rrCMeR1?{UuI8LKe~
z7&y4{D<W%A-7*Vd3}eeJYF3w~5M(nSI3#kS;bZdBnBE1z_)aMpnn`KAFlo|?uw&)M
zPhoSi2)vlGRVYy$(J{d`sZh7&I*B^85hU*a1yOM;Q#cfNCY&7K`~g~_hX58D6-)d=
z3{5p@5r&I2AJ`zkYLFEMRt+;>oswr#SbA_R#4x-bZ(LFdA}IvL?nsph?vuX;xV6#K
zEv#&$F+ZMYWvu2bmZ!imSbO|!QO+d1_d7mnhCpl)aGxVBgnRa0o!PTFW!prA?GO9^
zIC}>s(W0(Nvu@e8ZQHhO+qh-hwr$(?E!(zjPkr4JG1J}A?{v(6IQy)X&(58R9w?Wq
zSO(3eEM?%`A7L(-8i}~XF<9~(BPst<BT--w4qV*Y$jCEc1wR*^g9&^~{*+c-$w%gB
z9H^*E+80f`7#7x@vT6kFPf^aiRBB?fa00xPYEok^e{n)#|LHU?zu=UoNIaXFpu#?h
z$c;TjApbY;1T{I7>Qgd|Jz^Wa9=9+c&J3DD%r8?Lal;`6J6~Q^`*t%MTwx?9Z!xKm
zvt(+V1S=Wf-YQgUxGfFQ0b4HkmN)@=WAk23H>%4Vlp}~h@<h=YFz5LEU5Gsxd6<)^
z{A*JVfhg<rk4l3pYeS@gqcanrsD$>4qKAS4S*qw@0q)@+J>xZ94RI7i!jW6<nLduj
z0TN8O0v-Bp5s^~e+UD3n5qH6K5?bAhKgJm6<5ZDmw0jAJpfl~Z2ui9s$Uc_{3^v2m
zV)SSvh?c53IE;_^;YPnL=2Bmc80~#V1pFlW2kX|FQe_?76iQarG_9r!V}*dGZqH#R
z&cn?BIzx?aw7@`UDT^66h?Q4nLbLqWOpKFdZUf0S%6oOy_y7!k9Sw$cw!mHeW+z{i
z<Id6wyG)vUgrTT={+^-xGZ67r+yodLJoDX2vqDR8ilizMY_AhbX3hrQiV8;pM0~Vp
z3!C`97nZ;$O~Q88oEt-$@67+C;lx2ce$%Z)8HjS_U;A^fWs1wOzf2E|sQT~vBUPB?
z*qi8cOCN0zj~9@k@n*M$I!S@wxWb?D5R1c!xtl<H2j9)D|6tJu{%A}Z7#5?!K{zgp
z7SL+~WjX)Jq?yL|&1`eDZe&M?OR=%_Q>CkZnp;J=40F*H5PPKL>}8qq7M@Wl2|#*H
z%c(}C>Zn^#R<`pPn#6e-GaB?N%13j!Y!Dc-IO6_3Wx4FRtWa-4ryeHm8dY)Ifef<f
z#RIe6%Mp3OBYXMiDJR6UKeV7;yYEG6&0VfHzqE=P0_C*pXA1qE&b)<A=t<Oh><sbe
zxGY+r&klim74;2qD_MI%IzO(jS!?xs#6Isl{hq`I-r@Gzb_aia*yj2xuj?f^GYGyt
z%=-%B2AswCW8sJzg*#xgh;7okcXklVbvys0a~(50$!DJW-n?8@$UvrL<Tf&idJuh$
zn~zo@;>I9IBpdX+Fkby?gpB!et4aR}3(ZH2HPV(?Cd)N}>)VX%jtzh@>QAdRkCjqs
z@WNSul-4A|QgH7P(}MkM`w2;K|MSVs`f=&)gS&SzE2>qK-{gl@yFVYBnytLl=NW3M
zF@+!7-8rf-dO)r_FhM%4c3WZNwa&V2iUAj-mpLk$+wS?*6C#32JZML2)HcPid5m6C
z>mL#Fj?1OGEdPkxS~}bt%%w_bJr&p*_T0j>C!3*!0Im~i#=Pu~a?@eeP$Kj1j`UDE
zQ+}-p0_lne?Wc@G?Re*d_FI9DFU?m8E>Qn{55euOyuGsDtci7ZIa=@g^`7(=jqA4b
z9qX0@ZjbN3*0wy;G4re6l?@l}Kdo*5af1AhVp2y*#~x_~Wt(d4F+clEdI4jK8Sb{v
zcpamJ*8TET@-Md=XbCcCr*~eu0^2<%m3ZgH7lBJCMWxP_rCLIBL-8sVvGtx_y1vn5
zu8{R*5ydL7rdZI(Eb~ylvxEau7AxPvbXrcb^!&4d^Ud2e&yMS~YithR+xT)9GAq`X
zaopy!cRa5&6WtsizHV<rT~;nxn9Ab;$~)*?bSJsu%IXji$>XK0F{ruj?hw2PR1v(s
zc_?;@LQ#F-bD?nD9iFY>`T7um7(sQ+H9LPZesb$syd@r>7|~LQp${o~(P#3bIW&g9
zyg2edw16a`7_vB3tURCqtl>;ejtFa8U;=h|>DVmkd}|(w6{aTmJP}J*sq9|rkssiH
z3Ql~Z%#l8SEO=uKfbk@m6}A1KL48b=3dyD3;Sxj1k>4<8iMo>ywJy?4At^d7{$TWw
zF(f4g(_JaVoZR;rr26s~Wdah6qg)Fq$O1pbc~|=}SI7_t&Z>Sq;}L*xiq4&&lZwYP
zC&c0gQw`#p7&{@4%{m{7+=GV`3MB9z#>sUDG<nl?fs?WyE*#*RSUUldv?hMq+NTzM
zE%u~b;hOy2XMp^OBbfhI9rsPM1RZeP9dIY+dx#QiH%BtMR45_Pcu9Pu?L?3Ly9NtV
zqOc42NKj-`6LJFq9MOn-G_H*+5~QlgAKvFX=8?oEidP7%Ro@T;1&&kZ$h1DAK;!RH
z)V~f*m$@0_3PRzDEsvh@d=+$~k+dblrgZfoY@j#c7$wg3(7FDFtmS^YVCSB67|jvO
z%@o@4le%AO44yMOQ-^cAjS#wN;kJ0Vfh2sEd7ltuNG!u7S3>KtLGZJOef~b4nVWdK
zJR2b7<BGxE0YqVdY-KDwEyn`9`}G7s^Xn}GCAgD=efxUJi}G|l?ZB(KMb<-tWFB-c
z11;$aIr(G(9EM^!+M^NrVS8cm#L#l418N+y=cC?n3?{0%-N5(3>wze`g0aUQY#*o;
zw+oTrR($4t2O!Y})G7x;#v=YgZg>s=5jd~ZXkIf&*ys;Tgp1e2BX-Bt{^%r2&?e#)
zr5tMzNMnkxvDSZdDNq)v(1u%B>{le;9$?6y;tLXMXN?yc@d<%jJ>;IhNRQisptA{=
z(sHUTP|l7ytn^@!L1D3bw4f=;T@)VN2%jo-4!pW&C^7dyDbczdF|x5>J)dgoo)o<U
zX{ReMrz|v3VtVoiHVOmXIf!2OTaA?3FrHW^Fm;fSyC;K<_}WhF)h7&y811=Ah-c0#
z58Q{R4Ii}ML(p36TxGJ4S%Jysx%h5nzvi*oE*I%;&*bS2bmLi;kuy1P(}`_B^V;Xo
z9x&I=HKaQOx+Pgt(`e3`tgvNPj(L)-GE$y5y0ofG^3Rf#+k+uXic4Q3m^MsWfbqfg
zRpte5x@josieaNqh^BpJvlZjS0#bkxX6OJvnPa<?41~^nwHwy>rlh?J=co6SQ9`|i
z+@_!Dz=`B26fi`i`YS4w)~&nt>~}v-=bYGmhP2ZVtn%#I9D`US_tledoyHKlCCh_m
z5%*kni?v;N!kAno`)?qIZk%J<_8&)mk%+Rj?Ghp9^%f+{$eI>!*R{)ZTee->;U(8<
zRB`)|Kv#~8{t3_RRgIkXbI(OWHQ)ZWI$LW0G>ZM=8{O%34ICGr%h(7Zs|Jews_tmF
zKCX2yOAhkRLr?9+B^a+ZOM@9nRt!BJq)Mb4G~>@@Wp&46l2vBFG4Eud68-~PZdre0
z30#EllaG^e#D2x}0fUCjb>GCs;pC3XZpDWD1sU%hfvzX6+Sbl~f@3T*h{qhV`O$@J
zg|n-3snoUh3SsWPb80knr?EF^A<Tx8$j4|Nbeq>+?lXC@gG8Cn6@HC}3Lf<dR`#U^
z`3aNj(-J5|rrf~#`3H=_=7q;N%QnQ7*Vgh$%+hccvzPWYg>fw<({O#WQiw$kp9wjT
z_nYTgS%y-`$Gz*NPA+1KD3sLrWCNqTVu+m(`BC+4@WCF|ik(k~%bSeE+qF8OU{%)J
z^d$oYuQ4Z>o#fYE=zMq)bA?$Ek^;q7v9NZeaB;l(>nT}%YO$2g7vi0)%lw>U)sMQb
zK|&hYF_fym8~<c!*pbD)R8j_U3TY`+qMs}p84VSS4MJ>{az7w&ilIXTI2%BN;;>;w
z93{Neq7jRgRZh9N51nHrU$ZID7YaV!@6SH2K{O<!N-%!)pYi3<!%}k<b5S%phWh^L
z<iOkOoe@S7>GD1h+w4~GKrNbIhI;fUl>Gki%m^EYCskHDB-x^Iv1mytjn&~YO{KX2
z6&}2lYJ^+dyWsnOYhGX6^E6ueMdn`M|7lW^{0FV2Vr${xZ1TUw9P_qX;~)89<f{=h
zAgJ*2e-v^e@(rouZXGPd&^NDBu4n^#C5;Fb5D(0JlkTRkOCT3fZ5FcAJ5O>vue+HR
z@c4Rtfat@~pj#u64l3x!TaJ+14Xj$|VOU%Z4_l!fPH&3<M`k_pa4afnFg(vkuK&zz
zKn6g2A9a;jS^8`3i_cb8)ln}<_B2ce5D^fB$gU`)S;p{Z&~96Ga;oLgI~h-XYU%#V
z2&t2?S}Zm^t&l9oAIW>|VxF+2wyUls#sFQuD9begpMij6n1PorZapv;u!4p$H!`n#
z5lJUtOkL3thW^tu{F`b<KGlJ-e?x8Xu+mjz<u2P^G=G71!T%YUV?4oNt#D|WB7EMJ
zP=hQy5G#kg8HemkPkpA@&V6CgfgwcqjxMNKUX)93T|yhG`2u((qf=Tet&AKQLqjEb
z#FHhnLIG;A_2atUK7sq72H{-ED%g(`QvNeGU#-R%0(`9)>9j7Ac|4F$L~W_y*$f&?
z9D=!}7n|XdV)P25F1;jm2gw4COEzk<+0hqfb8H>S`Z=s~tO0@W5gqF%j<ut1TK|`D
zM9Igt=ZJDYW7?fO&Cs0IJrX5bii|U+yqVIIHwMgYHOzv$fOVy&9IzJJ2$}|sn30&a
zvIg;jm-J}NYrId=$vkxuFx7Zqmo9ssww2X{dd(xTt%Zftwdpx}E^C#Ec_ZGFsK*q2
z^Di6@-9$h}O!7&k;JzS7InV)eslShbaNjIZEno*Jk#W9OAhlGJqJ=SYNQms*cRcAI
z>IJ4tOtn*}Aszru?H6)Rs%Z$p3AqCdK(5l$_aLi;fb2r>UCv+HLHbKO>X{y|o4{lp
zE`*}v82E^{&QHmbjNN20KzKriWKCa@1D7z~d6H)E&0gZ}H5SkbV^vn{{H!scKi*3$
zk|;nJmoz%NTTzw)MCs3eX-C>`-S;o;;8mb%*C*jvN9eIish|dWY#RgV)hG3n4&?G0
z-PCh@Qhriae%fU??$<;Mdk>f65ke1#gfrna%14!J8$cQ<I3y^a+3c9hg~LRE6Dx<B
z=Zj#0_yGB@WwpGznU?GqcliEC+(G>Rc?AC#=&_-MWQP3X-QG6VpdFPb(v?XFOfR_P
zQR}C^K*}#OYbbS<KwXz`DcE2&r+fM3<9!NbcO?{>>N4U&xz4#TA(egRX!gFj@(t#k
zwf=BbBSm1<rx|kT%GK-Wb8?@(^-Ddz!2mk%AO=eW)y%Y)Bt_?_$ukJBDr$xo(3&pe
zN@O!507mN8q)3?*ln=EtREZDGPHz#<lbdyQn3SiK5skLiER<*{i;Hryk>QQYXibi~
zu<@wRIhd@#;nB}$#!imfDn=J16_Ov$MckR?-Up$r6oHlgQs^kbbhj-8Fp9gcPn~Y1
zn1+bY51g3TaP!i8$c|xxVFYNG4AqfXY)qWLacA56Smx_vZUV1m9v9p%Dt`kCl@x2w
z{XJbaK9Wy(5BF5_EW>s%CMn@|Y{5rBsS6Phhrz~@d=|lIp)F+akQW464pE48Mm(?6
zEYctnT2fb_V}~$4wU(fjJi8YrVKx9-X^vk_%Ru_hNjb8olJCOMYTK`du7oXDW)?$#
z{!DGkF%<vQbLS!v5OhZ8WtJ)vpvi5ff7N;&a~To_o*jXwCsnT0PnB`JO2Rn{%11Wo
zK!e88(wr#Y;vf~?LIfu1?dG;|UBS;s(oq55`>h0ssp;t&czc=v2{vExyc8w5Y&L*n
z3L-t67p~1wqMkv5mT74(kf<);-#e&GEJ?`+L7|M_POHK<NIu@9hxJ#)=IzYmRy<Y{
z98hqIBwiOX$(PRjn*+|~R@C|g%^{di&9#fcO{=(#YogwprV`6rn1rng_^%d6*ZIIe
za)5!GcAtS5qs9Hm&OzdS{_F%9lssE%3BoO)@&d^L(IUcGb@{z57cu0u1WtM8JN=Z_
z@+)}?9G$c+zcjj_BAPBbq}wwN%uB%7)14rhfH-OwBgel{HG5)_mAF*DBeFuEwRc?u
z7B!i{IYdCa>=phmG)v?~<O$tgJUQsjnk)p8ON(;PWdgm07_FQ!8axC|=_GX8NS}JF
zt!2C7j<jm}J_14>Lbrl9X(1W25Qf@mK(&tb)EZfD3H_9#IAP^P3<x@6&cFhpbe5i?
zgRK4~Dm{@P7>IwofhY+wMX$68EEl9;oM4%TGU9W%pBnlzt(IC2O=LpSQYo#yr2=jn
z8~L{vQHIipF_WDzSE{X(f=tnpgAA+mw<PSUYdveZrDU%Lx=I9wZCr1qbAh8|$qRRN
z_LSv&-apxrLkcsR66eM=m6%E|gh{7TCgmi7i+3ZcIf%Ykl|>cyX7HQpM;)ZSY!v95
z*-f!V(4aT0$m5%NSs(&0=8)cgp!yc~s$S@CGbl0fBwcaf<ASHAL33z_Id|&@lEKfZ
zeVY2I6n$>>n0Dl7A51GF8?`#3Wgn30`bzVkb;cK59yJZf_gh|`*42X3K3OS+>LY|k
z(@nBmp@;qs+oAdi0)*1|31Fj@x{roZ!!gu46ePD;vS0Yo$Gj5@1lwlS|0VYCYnzU0
zSBN$zBQfwNx+su2W@x>qPhP9y%k0&3Zsi-v>#OKS80@QtfF&}!3A1Qv*T3%;M!XaY
zs5j3P_5u^=;ooFIOW?HJj3D?V!ESCKKi^L_3E9yo*duq;t<9y7yq{d3#6>QtS>Gwa
zrtp%23sR5ncN+*F&d%}m>cA(HTe+T9H7BM+BTE2TwKap!TsP69bul=du=&5}Ss%>y
zWPPmQ5w0%Q=sYPR@U?t~bJB{fu?9MI3K8B^{$=O9L4kK7Ns?<HG|mtQu!;rR+7tB!
zgP)KY{DhyA<2s7nNhrrK?NHuLCzxV)ZdVjE->%D&3dnD*#fge{_sedcn0DOJTW;Mt
zx1O+6?1RLZJJSs}^1l|aSb)oyM<y^*)Y2h(-I05yEB1|6X+03*w2Q5)^$k!Wc8;Z5
zpIDn6h;>_Vx`o{<Td=MJ=MjExI6ZqU&y{WqT8UdW!Yf#FSFHO5wn+Kit=yl56YY#Y
z+t0VL*Z19TYz}<Tq&K<#czBwPlwQI{IJ`e!oweWZ$ghPiFS*fdezET0KmX0aizC9d
z{rpQmH2)+0_&*pZ|AB#wIn86pWPrKpGhRU}rAp&@lW^d211UiUZt>1emSMR^v;E%;
z1meFl5Rx^-XGjb!*3}do>!>%TA^r0bc&;|*MR{l$AXplbei?cjpY{Khf#_cQ8X3i6
zOD=zm0kofaA~xn4=o$6MJ??bTKhF#T*MCmN^7>q3{uc$&R@%YGXL;RMO)A0=I4s5=
z4l5FGj1q#NAlKX(dG#Hir9lkd|FhiN>tAgVZ=NIQ0khB&YAKkZABjK33tZw+0V48c
zjnDr!K^#xcc&0CpIHm@eBosazuPejUbShdOVwyvUbs+!?yI3S9Q6%4zVr;1)T7(h4
zzO8&f7Y@M(`WJa^sxdl2Pq-u2Ok*x|{|Q+x@y~lID@%lZkuP6+te`=eny@Gn1@lTn
zG_qnV6CtCwoDn$%l-_zF?${GRsLnTTxJ6!I64heluRZcy;6oGlOgT~*G_QJjicgr*
zDT<J;-rA24qX?TDTn&`xeD;=JG4JBG^6(F0Fc5L$Ony|4|D#TA7bGcr5|R<Fv#}dC
z32Wkj%WazR=VDFC6t1)3Cj{hM90kL->3DChCGfz)?f^zn*KL3pkJ*2bkW&1$+r&xM
zUlQUm2P@K|duU;bH@~8`@PZ6DEQR}YFAWD7IaL(4|M*Kn7T5O3$fuL5tM)AFVVY~j
zI^8S6ZACb%qHi0*o!zwj8bSes^DK5$Uv-7ouB3^UI;0R?S-OWLr3>q-m*gCd!1(TB
z#ALK{@5mRJ${u_vd;~%F+&`&TKyPqd$gfJoq`J6dk$cOj$H^rbp+B6S3E8m6@nj2Q
zYP;SrAnagh*po7)cIRlsA^P1K5N}G)&E0$hO@$-O{s9nwkL7#a@+LW$flhtwMeswY
z2y`G!2ddCtr~uy7B2oxcQNq|ky!W2fu8*x(aA~BGr2Gh+<xnBJ1aE`fdEQ17d6P{&
zP~SjqiHQ>Zn)4H0;=#zjF;^w8^4kE;O5>W5sKMp+rYfdj6E`7oANhneZTygd?XT=|
z><xoofh~wfLG-7IOS=5$HX;;F$`yI6g|Ni()sbdESAO7epVr-A(>pc%TgE_)7aIgR
zkp#Bk6WP#pRjSz$uFFrCon_{`<4>N-=4z!%T5-s7*`#X*M@fr|)J(XFWx3}QjtRG=
zCk$u<W+=NMbQaWc$exNA;LT*lkUP2%u;Mx#91;yRw2G){F(LL&b<1ZqejHh;E!_?=
zQUebE=x~wZjEY#m({k@aih{W!PTy5n*q3hpq>OZtCA3y3xZ37dexU0{yD%oMq3f~`
zZffK@VWKf$GLg1Fi~x8+TmzOSCvZ$f$D|q-Vq>ABM3cXeQvcS?G9<c9L68`iw2G(F
zk7JbBgZL_Q0yn)B)O<tM8Wg4BY}RhYII%(&aE2K=!A=v|?HzG~u-5O0rv_EFwGl!0
z7h83_v+9mmjValVYEM@swzoHAX`t;NPi)Z2>wX8vAEJ8AbG6ise6_4A1U-)JBro7B
zj0v<Z{0qJ~#KHUwaY1jF=BUJJs5^*MjA=yr8$)|;07J%hZUE$J7ldiFdE@Q2bd}}8
zWu_zf%##&W^7g9Rl@V=pf^&P-BBy!3?L@JR=iu6uIHP~U$bSBb=H$8&nw{H*><CN7
z0b{>9ePBxu*Rq2tC4S?{M-TmrNz|aP)M1MUFGCH7v2pz;`93PBrui<`iwe@=JZH)O
zeGZeI-Bz7-&+B#L;iMJ4MliVv&mn5v&XbZn+@Wea09k%5lJN{t(H%s1VrffW$JYqb
zbwE~oZAldG)mXbyTvd9!GUz(5{mYYLC}GfSlu>)?#Zv-MoBkfeEoP>TNVdBkMnQ`*
zD)ws3<^nnLI<D!`Bs(}<sOz}b)d6?y%yEux7UI%teQH1W)|SQPE^s<(R9iY5_%~jb
zE}etHvgE&=!*v#xq6FsYX}i{`%R&ryg0^%<;+$6oyX_}`T`y=B8&oqx$F1A`no{Ls
zMvP0EBIo1z{p57{YH(8ji{KvRc{Acdqocf-2}^sE!makgxRD`nKAAn#d3WZ>kZw%K
zuysNkLL1&7_8}ce?2f|0hLVx%nMJ(96_JMahm?H)XUhkIOo~gW_v4etwfy=N$)%BZ
zLHSiH<i(Ga+zsPB5HA{8<Wg9AGc`^xH0%9)7-x|>xw$eMLPW)?z5LZD{tJbCP-(oi
z@fw@zhvz3Yni-10lE`PcVPmz$*v=g5`C^rYf7GkvN^-xfojFfmGn$o5La=C*=TD^4
zSeYC2Q>xF7>ln^SBETu?{rm586S!Otee0Kn1pNPEA<8C>PU0rk_9lP-XBN`U389Z|
zvUFp^ntf@UXw7P|F5zLlUc7~E<H1jnspzqg^oS1;-1M1rW;##3b{Vv_rb|c;p5tbZ
z2BI8SP#`GDR*bS<pgOFj&;?-EkA*^)^nK&a)VXHlk{Ix_L-a5;>3QS%awn7Hb9I^s
zV9)vuW^g=P5Nxw&z8OXm(o~j@X~46-TsR#4q-m@k`9{JIJfm`M+e}j+>e_6x?VgOv
zNK7tJh9WoUq1B2CRT+Ql<7_6Jn3uFW3O*Sdx)>Hwr=R8BAq1qUM_8a!CeoZ{dCCAW
z4sVJ)n!qnwHZ3G#j@sE0{3ssOW>R!JD?gwQy3rvHJ+*@XBZ7E$YirmB*w2RB1*`&I
z!;Cnv$sL9KIj%0fwNkBfwer!~<O9(K9(@2PB_AnINe@q1@P7QAr0f8E$zK+3VYyRW
zUzb1JYF?l7r$^*A<gqOOilyTvD0;S!k_VwU^a$AKF({Oo#{j?WK$_f}%4W0cIAOZk
z$FRZ?JF$sKS`#%UB>D)P#J{B4HVuLoBWpHnml<?mNMo%*UYP&iuAeBIbSMU`=9I%A
za@u&M9~QFX(q)K;<I;Hus3Xe`%);anprI3-)Jido*djbd8|&<1`i0BT9JW$&z3?J_
z{5tD-RbdlQ1Gtvq`?fctJ6rs}ygJT;k%OxeWGQ2IuxS*<cuOh`J>x)N3jcrjStzH>
zt{SOfkd8FgGoG_eD0{mNIr_Y@6AyK%YnGfQyXu`V(Ood9Pme`8PsAZa>jfrn>KJkz
z(dz6Sk*CyXS<?`QLK|f(Kqo}xYv;EgOJ%rMa>8Fw2(&qVrXvU~6jBi`Y}x=+tDdT=
z5_ORIH1?*ixavxR?NJGfRSXUTb6f9u%gg1kSC>j`mLco4A>?#%YTDw*szjnAOhK89
z$wv8zeSX`my3x-H!0%kn-t-LCg*$>_JRc#=&sW3FwggqGMDezNz2=3%tm6!Lw3S&P
zI4Q8o1_u!g?JB!P8G)PuuQOhTU^4X^Q<YnT70ENb3Ng1*<DE#sIIXj`VRUAvj?eQ?
z=RzTBIN=}#O5_&|z0kyx9w4Hz;MZbwi8)+D4n`WV@1d*(joNj@qvhJ{^>Ym1GyMOB
z-*7K)w<yB<O6n4en3*-n@^nZoMpKc0g^*8SB|%>RVJV_c`V(>KLR3I=>5~cSu!^g(
zGtVNhl!Yj%q^(>0G-Nlr^g=POiX@K)tsySFH~9=e5h**H@*wR7(zZd8D~#`zIaow}
zDi>y4Kszxzw-G>gNZW-{<YRT@S|*}KCt8*Rfjc=dqbRw{8kA%k!l#Ba3=-2SzSv@D
z*M(X-culIDfJV$;DZktpIU@FZ*X7>r2saaGVHH8-Ke8!(LpdFuuX|A`duKzh3~0fZ
z90f;t7fiCG@*Lf9*LPcFV%3CVt-5ZDhTn?<`|1OV<GOJLaP9#!GMHXDj&XJS-O>iF
zA=L!|-w;4yp69uo@v{qlcQg0aNG}%M1iy^gGj-)MrN|6yo%?G=Xjvf${v%!aO1%=B
z_Qcwpe(nssbUhim6r04u7YP@vQ-OO4*JR0|*~ues@7b}7x7gs1RtZZ&TUg!23xac(
zNb@W!yj-D>3I-MKHBn=@4uoqA<`q<^5@{khH)Ctt^Kt7Fk+?8QN*jr4VN_vV9x>$p
zgDre&Fy{q|qW`@Y34hac8~jKx-W#%fs#Pso*s({{83O99EaiPRw5xQ`<LyBx+UK1?
zhm8ijkMO$$V|Zmbj?pl31LqP$L@B#+7yDJLYKcs2&56C0JV`g8Hzy+98(T^PpWHQj
zh7uJiFuG)S2b153A_*OX^KU92ooWXR9_j>Vw25d~SVqh6vFUy!qZwg;oumpO;+`Ow
zvQHzBKxnu{rXRpl4_xe5;p?c>y-*_xtW6O*Fu{fZll_wc6K}M2gG8OMN8}|lEn}cW
z^zzS%a%P{@l8CyHKWO_bqN<XJpuAi#LRt18rMy(rxkY)+xP|axsR{vA`AY@SBe39X
z_AKOoOM~Wx)FadNz?-ELaUut3*k!ic$++hYmrt;<)bUnBg>cj!@AAbv@HkBf9}tY!
zu?u!v$Q`PU-|vX4ei@>`KJa!!mh|HjG5g}Nz8)S8dX^n*^}Pv2atp<vS22jpXLu+I
z4r=}JKqx6SbuRp*c59U$<X!(d=0Dp2+$+G|Y2IL#0kVJY%J_-ua}z?g$9{1gThz%%
zK%K>Z^$#cUJF4#4xoop%^=Ao6)=lJ}O4Xm~IZKbj4Pf8YvECnpqsZX3JK@%1LT~%z
zwDSU=3qG$Le9V)Dtnex8Df^tuq_J2@m)n_k5y<cTDrC1|H=q+>WgD?PsYo(H?7N0=
zI!uQw;R2T!p53;7Ml{LO{X%$Dgb9T4vRd7t;%RFywzhgeDwBYU0(R>0>Y$}0BXUu$
z0<A^#WTEKwM-+b;J85vXW&P?X-7M)Yh~!aq=Oa^@P3w%hwDFng@k5y4jNkAz)%cbh
z!*gWv<gxT+P4s^mwd6q0LyK`ODesVmoKz82XOR&e*NrOS_C>MIEJ~ue>{IvUA+^wE
zb3?;}(0Bz?P=|@*rM3!$Aa8fngdvXN9fZ)5==d<09pTxY|4eKSMog{a>mjt#4J+->
zM6&!MC8ob7|F9xZjMW?EW1%@daR!?`ToJO-GT6<aFbsD5#x~^tX`C5&Foyn1bQl%-
zVr8p6661zAQ~H;q#RSZKnwCY73u}G7o4_UwM|c1V-jbCh#Kn>!cl(A3hY*+8q^77Q
zldRm3QfmsZMj&nB{9?g-a|DJ#jn_L3?k@+%A-qni5qhRk@~6)711%26gTQzZxAMLS
zV@;ndW}}T!WQ_ylmJD&6cLh8EVNz?GJ(KRGC|Sy1a#uBp)j)b8dFBpoaa}uUe74>_
zZWATkJ4U)BLpn0d2wpf_*TR6O$<H772Q_&{goRLF@+Rj%K3S!&=@lNCV_8(|sA3ze
z`DBu2FpMin<!*WiS49$i`G`@H_N^VjPR(RJp?Wx$^r(5gzK#+Y;-b6aepOl~3<)=s
z^j>fP4serojOUJe{-8)<9rhqj=YQd4&V8*_exkqKcIg~X%h75^(xeFvknXZrfoc4!
zS+u1+KFOq)yzOTEQgWifqvdZs$vp-<xNwOJukYmNgdXN~b7ZM|Ie_m>O8!9~kf$?V
za_jC$W_5({f*f`(dn|4=Y-S?-Q07A(W03BV(#G4A2R_TebhAy}Zs$WJudJXw@qdFj
zRNsJ;X7uauBY#{fTo@`{H@T^&vqm_!Ww>^^?sOQngKtPdjz!EPaL-OmW$A+d1bJ+q
z47}`rY_a2**#~V4B6w7SnT7FMcjYzN9NxmxiMx?4iBmB*`)sd$s?Qf*6ZXL3lV^i$
zLzeKK4s_lLY2ZOj9a8RfgVV6?=tIUKL3^u{TH@t5F%`j@<>1=3Trfl7I2|IkG*5iJ
z`bnREqNC7bDM`A)8@vIV0e{H(a+B?ju07}G$%bT|8dQ7<1(vV#nF->6GQ3-SMnSW@
zf(tt9s;BOW_Yav`s}Ldbs^Zg6y%_Hr=l3<?2gS#>*(2l8p{J3W_me7i9rkgPBBjp|
zPU8A<+njhk7e$5MxpDqgOg2jHQH#`SEDa*Fkd_s8J@@o{RO!H-TQv7??6a}`#P-o0
zDUBn0wGQg&Ymq+Enh6i5+fPM5m;jID2z^HCeaB^-RA-G2M=W@H8&KHEK{r!=kkB@c
zsh#ETl44>l)y$CfR`W-?kUmo*dH)dkxM%s~bamdT<5Hgzi@Vig^vTp2?qnQQY4i3V
z^^PI=n?`jdyJ!SE98OoO^P`Q*HW?)GRP9E3w4HJTksRxXm>-9Fa<j5g770hPAHv%t
zWNpMSHylcuIO$HvqE7tEzRKg$LsBAui-=|>4H|h*#>X49HqpoO%}ZnJ4Yxc==jRjT
zXw!37+=FT5O`4{YA)bp~oQd(L!_*oI!lK9ZYSB5cOSc&GZ22d2CY;qc(pPI}XYa=3
zljb|$67f48QG!?vnyn{_&OIOcN4k2~vRm%JvD{vn$@2sEnaKq%JE>lU1iPaZx1(dQ
zv!EhAY_3D_bx72C)#KzkOtd-e-=MWsyO!LL;5w(n@r_3Ed^!baHyui-WL+GnH(8w3
z?2gB`3?M)U<#O|O2dnyu#eT)@4eo4nh`m_=9Q==@Yh*a&d~=gKvMG-w6j+ZS-y89t
zyeQW4zTUZU8^C^RfdP<jW`7w#MEz+7`^T68jZl5tC+!&m^ZP~I0MuA7@MD!hoY1@}
zC1-F{UdkTf2Uur$N^*De+A(=q>yB_!5CyFvX^3?*q3~5TUeJ?A51hif$9U$@#G%Xv
z=xgIhuERq3$N?`Y?h|lko~*!&@jmAg2NbT&6m9J_)YffSS6y1$b{gA299u2gnhjLf
z44mr$?M+CnP5dS#<O5rR$Xh!|Wmc|CEzQ`0VE~CX;uW&<Q?u^8L#BKh$*y(CRLJvW
zdyH!ASJ#nXlgBEkjwzkGsJ8gix8x~_RUac7ZCqZ!d>JBodO)FRV(qQCAmLeeXzgy8
z!a6pH6<{f;m_Dt*#H9IS_wk~_TU*l$pedN@{cGKxkJGNvU4a#w7ye-ex3ZOwa0Rzl
z_6MDSpS;`!0J%ZfIO2W&fFfWn;<BV&Q-~T8AN2-~!_ZG8eOh;YKfvPj@0LD5^WdX8
zNKOM7Z9uEw#f$I{$b=K6TZ;r=&h9U0Zozl!5J!DHZb?pU02_M1P;uD=#_DXUJqAc2
z<jQJ{^|L3px6PG?9Zrt{O&Ti;Z|oRO{FR+jQ}Z5bnNH{!jSRZLnE|9-{0zAPhe*>>
zk;aB%7KmIlW4XR^?QzLJnLZ3Q3v~UdAV*O8!6I*%^O=b?)kL>X2(Pk;IXM1!T)BQH
zo>CcF$2h@yfKFt4#l)Za>7QqI))l@nS6UR$83T#}h0VT=5_H|ZRG$;;y(qdS)!|FM
z5+jKFhaPSH`^I6n=#4#33~trwm@Oau3xrwwx^Y=x{Tlc7>v)p=49*~?VcQw?&fXpu
z9>R<a5y^p*XYiGXih>YsZ=VC}9g(-{aqB4vNfuVF&SQ~45|2%!^|WeZC&uLMtldg9
zvIPF}RV5jc$3&o!-=YOGHOj;HuT75GG|tn5x4VTR;%dbbY6gKM!YHzVV89j`(Tv=I
z!x<jX-ra?(>Vb`k?5!l>52p!3Z|#@4WY1+x4)dPU!>rl>;?Hd`wrmusykZJ}Q3=G7
z6eBhz1SA|146@W{DU`AjCtwGyMrSuF#S7cWPc2onDN3PJsE$heYLm$BvXJZ<Pmh=8
zk>a3L<02_+ivze%@q;-)J(KShtod-0P}Trz4wC_D6e$ziy7qX@c|)i?76z&b%P|w$
zT0rTFPzJ5>3B()@?hr05RkbCL6gEX;=x@kF{;4^vKtO}>M4S-A;`$X6u~)gt?&>2(
z>o+TA4{Zt5?!zqGk4xCqr$VfxtshVi{riCHt0r>8A-a*<f9lsPW({WpCVMz4(a&b&
zU>7Neidoym36dR)`=(Gze9h7S0{7uBx8sd){S&pz!{Vlg$d@q$Cbugj@o5a>Lm3{M
z!3CO3Z3@f4q;wkUmtIM}=7qxxAQ!!>aC~8pm<!HIUX+E@Z!zAq>r^b6p2IpWZE{SJ
zRyj$`gV(Pl<<+I>0eAz&nxH`X5wp7>X%wPk3fVa+Z>oOV=ti<@CYR&Prk!+rQ#rYK
z$?&Z$@mZqoGm1ExOET?>F~UbGWXT72;|ec1kFmo5GA^f-;B034X+^?r@ht>lQ4*>I
zP)gyef(nM{DuExSRBAxu1}Oxk54Al|AncqTw5PTwYdY#m+7<+Q#)pW@YB0K*^Rz=C
zdi$a=a0UE>RcbN7pdyg2?#%y$k!bSg2QH04X$_^|u;~w*lx&A=aR5(d#`M;ri>?^W
zNuct-+yIhW>MW@!Y7*QOLz-e<oB%hnCZv29FZ5|w<$=FqFxtE7uvFL^7TzFLPSCSl
zvhg!Y30(jsyD#LK4|X)FyN$|Sl)Gm1IK8oaewbN6YLQFG)*%F+1m9uvWw3uf8F-X#
zF)Em6_8xW%e{g?Q1Is)wY0b`Fkj?%T^}a!*8yA+?9{zWbOD1e1&c$7+vYa-2|3W~Z
z<Z5&+IBZ4UB*H-M98-9rBV{lb;j3dKNB$DsB%@TNUIc2WT5rMo338<#l5M%z2-+P<
zW!R!RO{p-(IUPPH>N(wAZb4cKJl0VWU<A|oV`X_~O}=e!jPPgbsSmMNa!uzMPip&7
zU524`c5@HJwn4RBaObYA)fXVeT`=?H#BJ)LV;3+T%ZeMvuSrXZ-VJLT_TpA<5v!Us
z!xiCs0=P3U=O<I+OYgrt3X9ifYrTlS@1W@ZlTC>Af8$a3f1xoYBXbjDXKNEN6I+wN
z22OT=|0mZ%w+4il)|2<oH}x7_LavckcsBWTG=N_JP*KP#K`=IP!C%070(i^>w6ir;
zLaB(yq(*)%@NTKtWWhDnW#<Xl77#WESn{F`b2XRR&h_id>qe;+=Zp1t@1GyCiH4$o
zw7EW#b&tM3FP%3(dbPa{XD9#{heiRJqn<0zLx~z>iCC?PF-Jp6V>t#~7uKyv7F<Y}
z5ix7^+5_9BWLHr~MU0@rvre;|hEK#*hvqZWKwwv8Mty@@7G0SQ3RDIVDQaYPd9t(G
zBSLlR2QQn6^+wO)r_<7;&X3d9tSB%Tw-A&2t)S;1Pa^mMEY~0Al<|4i5hh+<+$ZW_
zh%RzNoDSTGGo1M}&tchP@*+SFAS+XUhWQiw)cTN|R0Y;W4p#H+88iNw9Ee#1K><^l
z1+vWw!h#U{^QB|q;ZCfoQd7m%>HDzSRfT0^JC6W2V^EdrZljkAa%V-Yjb5(CdAsq;
zw-V$;abbaMKiiLf{kFE93c;v?b6=giW2nCE4O{j{Xao!bMC(IeZ~oOYrc$dUZ0v(e
zYx~3YZqKt00+poN$>cCPy=`QsP0|c*fRufDk5sWSgs9e*30z&{lde4<9=o7>cdE{Q
zCLfZCK^s3#$1<pkx4e%kFc_7_c#A4vWIU1s+Pn07#VWcmnmBzOm0Yr0Q%<hN2m0yN
zDKI7iVZ~3CAxmkD=XhzHvd);l{u^X%*+UKiecuJ-`cAP=+7ELTKR=0iO1@(`fGR*=
zw22NGTxCqjksuXPm6q&sscudam`{kKR+fb%M^0c^?r`4&wULCofdvzkSvNJ<(f6s#
z6OAK>D}kfPLGOca3bP)=VknYcFbV_Bh*=$^)I{dikmi7!3}95g>hf25bxoc)nKMZW
z4%r`uBi-$<)2?RN;ON40pU~1(g4n7x38D}*`FS(a%WFN*3+u80T4Io`w0u|fRb#NZ
z1`XxvRgJb{=U<v~xPu-58fU%(=S@kd_l*g^iV=PV-V8SYxc7Q^Pw6Iua>(aartPeH
z_QZ}CFf_H<IbOBxfN00yEqMYD)&xJh3fyu;<?K~u43gzR$G}Z_6mg)W;9*gk<$?4k
zzh?c^bL6TrX9ZNu&`5nx0y(pQIg&#32P0qy9Xk}^^$6UCv=&g<`WX>Z+w%s7Yazf%
z-`WHz_zV%DCI7J05d*$Eb%S-&2*#oum!pJ1FMKscZPaqWd=d72Ay_eu_?QN31+-`3
zi?)c+&<ZtTn3IuxhpgMgf4?==l2UfN2>l(;mO&^}kVjHSGe$n#5v~otrE?>Fogk5>
zme&b$u-*YvJ(AT_gR?!}^RY^9a5S1Do)Hgu$t6BFg>FaZD1+vWzI~xD2Z6!m#_XxG
ztKFcyS+2nC$2fC4y7f_0Q%rdMV##K_$7D?FHWn=H&|ZQ<hfIxzk?K0b)-{mE?-JaF
z9fOURu(_54On<^E++p&WJySmn@KCMG;eic8pThPprA4nKIb|g}qm42(<JRQ%7oOZO
zXBxG+$_Yf=oS%sQ!aQJnHc{s09@S~!EceYo9&?n-w8tYXE!0*DdqZx65WeLO&a50T
z`v|C<e2t^if!kK<cXF^^>mBPW*n@4|YI+`FI!yu8V8*FzAERVclfx*NJv6E^W}HFm
zDvzY=7kSCnby{k;J$U`rklwbl%?<fBiPGX=csP%7;pO?$g4g6K4YJsW&v7P54iP?s
zPyAFT8`dPr3>$th^6JH=-a=;1Yfp=S(mKLtOL@9X?9{&Bf_!3X*?JE9`O2^zG)Oir
z52eDZ5IkT(r_-?!ybq>N+b)-UR|9ar+LUA@W^mS&r)Yy}L43I0dHPsBegx!jVC385
zE-t@Dz(v0fj&r`K(k7EI@TOXS7=4B_ZspE9>2-?|P)%gjLWypB9Z%BUNW*=)`-%PQ
z-Bm}zY-}(hC@4*Mn<*GnY}+JRc~p2xpC8iOtNm*FVsopAEJ=WEhsKHKS`1CJusZrQ
z3pf&hK<YAO(I=W&JwT1s8k@_u2%xRi#RGnV$hm|(c~)seg@$BAp+o7HlBPAM<@u~n
zZjyy-8dgc}Gsy(~4kYVV>nVr*nD}Z7_(29Q-6CO<siSb7oIVzl2HG*;JxTym91T%w
z%FQdD2ksZT|Jm*I`DFWE8R|XAq?GQZ15XN6okqx6$Si&O2S*s(*!h9YC|ojg{l=5*
zy?-YW?RHj6L2;#!{I<@x0C@NUCS8scSTN4b^KZJmI2BraaQ`LIq&vK_3D&a6zu|bE
zA%{LBO{e94;uw<S2dFvGJ`}U#5rLH%7ba9_t%+g^eYc6&Uy|ri+Di!aJ_{8ymh9nS
z{hhK<4}?<4h&vbWZz!`xvdGgsVPyH$V{#^iRNZhauSMa@_@(tfM$zTT%#?x)&Z{;Q
z-dB@ieFxo11#j^Q=@m#N)rCdij+k~v9uL*?2*(W8Bae20wHwhK@bpd2>Jv1x_Iqt1
z1<XpbSfp5n>r$xqs821P$lO63Pf2(Bb)Jt!v#FlulB!`VA8wNF^ZJz}=j#J4w~{8L
z=QfJgiq1NO_UJR_!T}q}qXY(}_ow1?dabUtSBQ<Ijk#j4W(9p>2x-@}zo8xd9fYnG
zk1%SynPaBG%_4W6gP}@)(d3?0C>0%S*o?W_W9M{BHf8QesO<_dP+sCtqSrMt=8^=w
zbh_92InO*44>JD7LKci3=_+9sOOPzY1=x>Ku`69W5~RV3a(6m&UtzDXg?LK4^W!Sp
zJ-4YjduAM7l~l!NA}5Dp!K|qz@p~!*Ldbr~XBgB6O37u9x3xZP>a-zc>`$FG9`XY;
z59E)cO%%;{j_z07zf7KCQXtB$tBT_J45c6xKbPf=1!Fa#!)vAMNO!)nST=PWBn$a)
zkV9lpW!J}+L6K2SlfiWlsrF^G=NVGnu~TH!v={YPoW968D?ZUPjeANlhR@^}apuMZ
zd&pqVI_72JN0*1>>C%D^Ush#@Ye9fEdVZl(O1yqH@5~}APl8l3gQATeCOK-)(kxIz
zyGL!a$4PQPgFBbM+~M`>n1VDc(Xk%s+}rkcDdE~xC6b+n3zuV-a8tyB%9GvXvkKkK
z6&)QiM$z0HD^IHGB+fMwvHA2(Ls#~xRC9<7ZrUN_&b&>5y40Q$fI5G#L6fBeWg@Av
zRvuIQ$Wx|<ue+X=*{n00FsZ@x)GnnesSh9DfUrk`E!IM7gDeL3eA^BxhIPeWVAdQ9
zEs_spzc`K(s7AjBS2SK>tGeWjI%gxDrVVAZ)H|N;d29hMdy+YLo)B+yhEHXu)?uX$
z37!19p+yvU^W4d|5nk!TP%npQ+?09$WviyL;*Rk0*Cts<c{rEnrsj$90X1iv%{>VE
z8)t80FB(gu;me6GJ^|!Q#=qoH2yAP_WVHqi^Bf0A1ugCD^6dtk0K$rr#$^b*0FH9g
zeURP7NOWB=;`aKzz{>6lS-w2DSt8=)4#nz>EO0F&W1Lc}c7VP^*yKgNmSbMhdh&(m
zwuk8<KYCis=~0?3uPt?xo^}UC?*69r@E?CQBfUD$f8mI{z`b9P-iq~iOzU5fd={_2
zWm<IG<$?JTe8VUme4HMA%t?j9?EN7&IDp9deK#q*VM0``90~DDgJPD|r@wkf`DR(W
z*@JzD_!trrzz=fo=pL^cy?$z6*#;IQnW!<WAj{U6ZYH?y=Zt%TsNg_*mRMbIcWN$C
z*cc}TjniJ~a4`NnF-hdCUj-@1_e|G7y>7dI>ai&H08-#dbpOfM$3}iAYEi-gX|@-%
z+@KAciFTkR9i}es=nOj_09*<N`NJ1(MhQj!P#I5&1pjBr>!FC$e1p@+?po7D0d+BN
zW@G<}JNEe61o^%I7(=pjZhKf=v!qzpLnDQW)>x&kW%wfctb10(f-Fl?D%LA37u2$6
z<{N1qvDxzG>S$*$Ngr><?n46%)*NExE*tKmIFPbJdRsfrxzULcRk*eT9g4+cNrqic
ziNE=)>(ld9^s8WLvsrmUZVl$f!i|Rxxu{%3<^V_07)R_u_iP`9omEOM$Ea~rnwQ1t
z5Ton#{*GJhO?9@i^z@&;O<m0Q1zW%f8VLe3=@Du&%|pP$yZ3qd4P(vYN9Xjo$C2&Y
zEk+mSBj}gFjfi`tz9OqmQZ-A|$<5P}Yi_a)<O+0#UfgZtDjqYPR9i2>Dm?`P2!md=
z%QIWc<c$?1>oZ#`bMvAvCfm`S=6N%a3k9P8wf=6FwUTxB#|NrYGc`Neg<N4|8dUh&
zUrZ`0{bm<1t#D_|9N7|IsV{d7*!O#YP6&I<+&s<5`?SRS+0r_~pV{`~gdufsV`&7<
zO&o1$K_y5U2--Qw-~g#4L7RTo;t|EC;wMd1?e*R+lQj!wu<jfRPx*+RycD9cL-j>O
z>V(2Q5{_5>S$4XE+8m14=Z#yP;#j~ab|4~9Sq!)JI8>lmtTw}4if(x;1-&fsx8iTV
zO701kNeCGAcOB}U2wUnL6kL%Xi$%6N)mqRaO3#@tD+KxbS9w0J-}iKoM>y(zGYFu!
z;P3R~Ck&{Y?13CHWDf8%2k<b7eG}BBdLo!ReFk1o8h7-cYP(@g2W6X)MuvMq*h3Q8
zh>2B<WbPwUjGvje=pH1)`x{Y?^pD$uEugX6Rs_8>=T22-nqDIFn-BRwdMSemdkD5%
zUI|AVCWw2`RrD!|O7cd)cR1Yn45;Nn8It@QBr&!SmdOh=0@X36DS4`5&QkJ~Mz&JB
z=j`oE3g>k7<tZ&s5*!+uXn5tb%RuK9G_jkbY!&m1PAVf#RF*RNri=f$$RXtz@58t=
zO6&3I{N~&xwxP1-{B+;w`P430P4sbXj!MyC<kiBbko(0pTIO*D+<*JclVeZ!P3wX^
z>QP(|Y_J_SpB!KBKHt^sQ+OR$^oA~8rv~1wUYT5JJWYBpMS@&vh>}mj?l^l!x??Hp
zzw!P{1E({WrKQ3G0FV*?Ck_0+vsL~-8u))wyxECciVOV6qdyaB))4<f^YQ}7^`Rso
z50bCg3&{th(>W8v4vrFPY|@+p$3|k=ZdtnS1??UI&AM*?cmd({t=MyCD(bH%O{ZlW
zyUu)1pX7YLe;kncdDfvHV`5#TkP)Gbz!0FQ>EhFf30rEth7vOOp^w16V%ffFFISC!
z``ah``y}KjTE$OzPs_9KtQK4?i?BQoD-rx&4)Py|qK|M5K_l7XC%ctiw&wi3hz(Fz
z#dvpo!wGrAm4$|8Lhno-otcnB#XueBc`XP>h%(jRF9?Tj(9n!#iu#v#UxA`wY}nxb
zH{5^`x$B+qF)1u3e75|eI{fVT%><NbUNdF|UZ6^Pk{QmFLSbIMQ@e+cVS+w+gMw_S
zvBmK0e04eUjc24G`(DwKlt#<oF3ojcNY6Sc#?^NBgK)03OO!~}YX?nrEmFCB$}3;l
zw)c1+2s2yZkvYq-l%@rCKWa!dpUf)Uj_2N!v}Uh^c8`0oj5eP}cQmPY)H|eDTkLKA
zJY0_C#79yeXPqZ<lc!w?E9M~=;=&lsUWrVqnyV_2=dAF^6mQEEeHFSQfWXL;WlRNo
zetk3k@y7a{JHkoL<O&~Fr~c^8iS?AbDLa*UgOj+b5DsWIR^Un&1}=pAiqt~3Xoub<
zD4cGLwD5x$CC&2Bf{q^*jeZG~eKW}HlcF?cnjl}bxM<(yIfAX1OdN{G2fY|M3K@tF
zfzuhaN961gt*xU>E0B6|tthl&8$YBg;*!8-u{(6GZ{+?cU*C7=)xZmZz6{mZf6GGa
zOsuMw`wi0K{Ew+M{|8^{|7ZaA*6?&fR>`QXbrZJt^2a>B#M{VunoL(PL;p%F=47v#
zJUu-{Fg?j~&srq~F_!Ka_W^ICYJa+{I9Hp`c5<DUaGi&Mh>L>-4#S5R0Y(Y#)0cOr
zxJN!jID{GVY3176yQcP5^uFkP`MAFM@Q&4T`f6@J(8CHt&QaMXcU|?lcJ8@GKIZc6
zck&wh@q9oCai4nKs`VUYg7X19UuZP#6exE)mjF-Y*uqV14RH0q&SC5y8&80)SW!}i
z&B(+A{6YzBR4xP13tl;JtIh(e6eg!Tkvg@M*L4ch?@r6jH?l!pcL-F5Ubf!8dc)D9
zy{{3Z0DpgEG)o_y9+#|>ub@mAT*~|2x+?)%{2S^>OC@H-?|atVTd1R26TRn!y~tMp
z3Vhr-&izT%rG8DmC*Zr@ev9G*`>L&5T3QugW>WnJkq)wW`|tln+B<gH)-Bt*bEY-Z
zwrv|TZQHhO+qP}nwr$&X=E=49y&vv6WxaQob4nTG4~)@z?a^vP)W-|?n%q7ixiiuJ
zz%aQ+2akfKh}XSnW7jEvu?U|i!zw68-o<pPBF>d_kq<q~-VOI`53A5S52IE4NVEQU
zRy`yEObVvEhr!${wb)?G8mPJ+@uQ`W0fPm(18h>VGGZ(6WP$SQ4~<<YD{tDLE*`Kf
zSHr2+99#<-pxHl164eaDoAEkPem1^=V6G@g?R?pnNaL@?J<k|?q{moNGsdnO3n5>1
z;WUEVk-}I~y==qh1$ciUbGl@Xgw_}VC+fmtX>0E|%&je-%x5t3RH6b*D8d>ZF@pAN
zm9&;2A@&A)-AT_ejJ80tPe@%i=};OIEn?farz}9s+rm*?gM(=r{rC1Z1;^h0*n+Wc
zOzR%8W)OXd+lM7Y@Av0S<rgT*BWpRZqHO7{*tt>MCA9HnP2mM4zAUR1SZ(({@SmK@
zE@wNo0-+3<q70ql*se$-j2yuQET0Z4QL`TJ^(f&h;BsMq!L2hu7t7zQ*ks2oTSnd4
zrMo+br}tZ`le%cOv?Meqw%UVi9QJ((_Z*{vC%*xp1D(<Z)D??-?uj3X({iyTOyf!2
zvl)xFE^9s!!=NMgXkZ&e`$$~UBtX~QEx(5?0B+;Dluw+#{@|?+H3iR_KS}AV{eJBO
z5357o=c+n4h;Z9Ml?jW!Qe7WtLc=&VzX`;me?`H^&O7k5^HQSF&g`W7Ye&Vog4IBO
zw}mxaOT#c2!xrv4eo5btjlJSOZqOl)3`R>OOpD`wUl<FX1!7G=$6N@W5s6jR?aY$&
zq6Pw?J9Z&PcB&t=BjXrV<u`pnTt6kb<AxwTX51SFL#7^#)BO$#d(g$5NcPmpNtTxV
z3TKSzHh7DrJ}W!;eVR-<N9N33&5*3SgHZ~qB-=wd*ZT{SM=TIy)C)6z-5;F~Y%urD
zXlnh4btZi-w8r*{^UDbF+x5iT(0z><!pa%#sI?N2K#4k`<154x|74n)ba!xLDRyH?
z_5;;w`n+DV!PP{%T_Y+G6&S|IRqDZlO<EmC1flmv=64eM!cqKUlDg4&XmPG>{@$Yp
zUfv;Lz>R<9D4rh6Sn8nPy>BeWT%H^r@abQ)G+u<G9dtxSevk-{==bq$l|p2-aE}=<
zs{R_(*WRO3`&)YxV?(4rNj|aX>h)OmvW{ew6!bY<Qv2J#y_QF^XhN-k>M_Hu>5P6c
zTc!8w^GgT7<&anSz%DU6K(Wm8x_`~fN{y-}5*Rai3CUsG<D&2__w5Pe-aSMEFie7Q
zG1A-D+(O>Z-c+Kt+Ku)nuZ?9iy;7qWcMM3PK~5iX(S$P2&MrarY1Ei7eGG9JLtl@<
zHDJSaL1OT_IphI&(pyq_>gY}95k-cEaa!~l{leK<#XX85N$^Mk>^3w3eA(EFgWrn8
zDjGO{0z(>P96i`0xxFS!Gh`Hf#8g00Tip<5iLI%$>}g`&dl7FS+LjQA!P%9$#c6O*
za9&mCT;L8~q+OPkie}=@)?`C%q?IWM)P*tf70|yS3aIe}x$oeK=V2jT=}h?aWGzH#
z2kMoFn&ok!(Aw8z){UZy{*~(2L}F3s7s*@?0gBDUtee32oOwPX63=_2y_0Frb<b<R
zdl~`6c}#hTa#PsqR8?A02Mw)n*Vr$cMkj|>-UF8jz|EK5*DaYI6eEq@5ArKX_yq=g
zf42|1sQ-Dnl+t6kSD0fpr036X6z$!f_zgCcRQ_@@%G*a;)&OksXr3v)9X6Q1!)+em
z(jZE%pwu~wI6AODyTO?4rzdPV$Mrr(XO^!vz@yy|%R#lW;3p6-oqA+<Sp+zU(yC-5
zm>?lUjJ$U=t@xRVyXaUvQiJ4BR=l-X!EZsktSTymeI64=xj=$K9;{OBiqsS{f7Ce7
z+}w<H^pd-Jrf)acX|wxwYIE^%Fa)TWB`{9qb6Ca1c<p>SFKru?=Y!Q>GDIM``F1=b
z(&CCG`R`VN;-cBuCzgE4+g@1s9(9QDCQMsuV#&qkZ4-*TUdA@2l|r%tb&}eE=(bmw
znCFKxdef9<EPvzF8ts}Y^-WXePiwd8Pt(akTew$o-BXh!HH}g0Chs|-tq1iQanN!!
zC*>5SJ4;uRQVc30$={Y*m#r((CuYsd+ef>w%|>Sd7H_$^y(@mP&3LHVBp+tWL>LD^
zw9QFkYyEuK_+=esGjl(+l&NM(&@*1$?}5b^H^0!vt^wr~Wx!nBT7>u!2nOfXN!AmB
zgZTfzU@>{<<*i_(%f1`=I5XKt)?s_~sk89Mo1bOh5Vv~u!!rzSEkq1;+o=zsh#7@9
zC!S}Ie&mYHA={G}FNvsOc&Wy1MQOvvHxRvGC9S3vrg^KD?_Tb_b!KXGV{2xW-Z|NR
z{#{BxL=TigOzU2l-%JI8UJEc3l!*^@QQr9wyB3>5bnD={Qq<sS-t>{y&|mwWXq-#{
zm_d=dxaoxIEO+#bj5*AycSQqLPxIf}LOW0M+;Wx$RAL^UF{q!a4cJO)@$r{tTR}pl
zuS)-Io9_;+$vjZYm%scFp1#p}1tZf}wiLG}^Z`L=gW=Sy(fJ0>sDru}>}1mPlXgMY
zGMKb6#tWlqCwiq(8Qg3H@VB}-S^qsiN@KeAQApuq1iG_jnPiWd!(EX#<{CwcECXM9
z<)ifKUBW~VUh?zvFg0?)^-S0Zsc#}6P|GSJfsR#adUdS8hFkxzz?Ba+8JuDkCl{1!
zuL<-D9coD*%6V;=*eH(oM6sXdirPy*S%rb%?c=xt5$oov7x!(jS_9Yi=Fu85>RUnV
z;_=G<dRUm3fDoJB<EkI?B8zNw*g>RHIA%PbHNMzdq8Sb@dcQ1wun&A%S}Omy)rFBL
zPaqvJ4-*7++WA2J5V`FPx0AUJn;iXA+`7{F8O+8?ChCwE0kzfu&|jPF_NaV%fX<1?
zMB}(VGO*5^WV4E7$hvaJONcT=yY+rx$tT-uBFHoSBgF((Ko@XCpuT+t{p?vo^eYUF
zIgSA)5PG5b5NQ<z8uZ4OZcrBDLO57H$KONm=c&NMm(DOCNx(@v(EIXs3`dYABLSzC
z`xCs0JOQLo2-9z;`^qcBEGSZ<R&_scRJacpSldV~w@_7B-l)unzQ}Dj6SqYZ%-tjm
z45l(cFnNUC<J>dXlBVeG%m7a%={)fObQXb<*pW;jJ=qe=rVdzsRM>3U@IJpn4L-?V
zYT8W5+eU3sX<eILojF&oA}f$l;>x*G>;0Y9P)EdPk=Ftyw9u(V7;Cg48ogxu_W9Eh
zp);ldB@GlLmrW>?L#;h}1^ZQpc42d|g0^^yV22Wp7;Rt_m(GqTQgrw!tuy;Uh77-M
zGv6q_cArF(4%pQ8gA^A!71^F?ZwXGoF?O%maeO{|z2LTLr9UWZ9u@PSn6vM)DjKCv
z5|RjrTCCTjJ2Z^5Uy!W$Zy9B1F<NbtZ?h7odfZvcTXqy)auN&Buh*}!o3<TWsRbaR
zuUSysbrF`cJ!onZ`nJbv$L}FnqiK2iFwg^~Z9nM5GTESHE50LHl-Ed#E)h5&h`g;D
z!LnCKF8VRrGy*I)2DrX(S*Rob{N~Q&z8#Pd4eK*jX=l7`LOC8=;kHV40CKXiA?nyJ
z%ddI6)K|(SaBO)*lJE`~m0Y+266JuK!mr76;pc<ibwLp$tL|OrolAUbXIa0#D#krE
zgSfNe*_t^-JlI_J2PMtf#P^trjMi!GGRvXRMueo@3H)7^GrWS^rz{i>_Aa<WVaBlI
zgH&Gl`pSvvf!*bW-IY7&4FIgvfb425fMH@Purh)yB};4|%_wm)^Eh3@AK{G}oghHB
zO!D4O3a2JJWSMNX3+p@wHXp|sjdc1p8pva>4<qiryKdBt0<9l@d&aO6avQ2j(?@5)
z5DXQG(XLxW*q7T4Mq)$dJYB|1LVUpmdN8;mzr*SbFSsJN)2_!iZLV(OP5l0Z_Rh7f
z<J?JMdk`w2z$(U}vTd?n-~s^5FI1k2yqf^WQad2sZW`Uc<X6kdUAMlH`2>1Kgp)D)
z$Xp6MHTPOz8k)}P#6J~*RH1l7F+GrSl`VF@i|M96<%8&m-fkF-2DjUhE@p@B+PJ3X
z&FyO+es}iFG+(1px9vW=l2MFn6Ay5eb!3F2=^e*`X2K6~^)4h8EoZYWmA}S#5AJ*a
z^d3_Z)JG;qp<%_`VH4Qy9Ks>W(c=hbwPBjTL6#kew+Y(sYU8-^Qs@iVD;)!@RL7$;
z14sy~LuaWv=+$k}-OVtAbYc)$h+l5|T*;I+sTTWqhz@B!H{|!V@y!;5_DFU01yh4x
zrowahn+iw<(74bR!t!8f<$OqvfwE2!-@`rLmcR+LQz%O7YU>(Mzd3&y<|2033XKch
zA+vJm24#<xv*}z(GGa4S?j6wm5(ZPO?wU|(gR*=>AnR#^)<`!TolVvTQxGnSZg>aa
zQN+OfGG5Kb{k`B)jteSZnQ0;P-5D>~VuPDZ9P;c-Q+LIr+u8Uoppm#4Mg7_cA;prh
zswf%S5Hs(S&@1<Iqea(2+o}%T<Pr4p*(<>sKfc{a?2DA;^qtdh;b9bm^mlyI>{RVK
zH(Nx%LGxm)N&fufMuEA5Tix6DYVwK!|JO=IXa9qLDBOJ8=NHk#I!&GA#sT%RBIPvU
zg`~k%K~#D|OJ*Hhl~SbL<Ib<cv)ssD$(3utCNyV=ireZu3?sp&z^x{IC>*gdNtd-6
z#;(APmJ->(Qsy-5r(n4US)W9Zm}|PtU96JCi%*_S&5!8~Cd$pPnco>AO2?f|Cd_j!
zlY~K2TrC;yH*&iPqvHfxO_m_-P#hrZsuNrrcbx4RmuU?s1%#pxF|eUsJTou7Qt&IT
z7N}<<R|5L;#Qr9!Sp=PHaW3a(-+P0?+$A_F$l^{$?a5j^835&<GrZzPp6~$KK$29@
z0`ehETIU+&fA)*(Z_6)IokLt#G}e^1WfGY@DYn(MyEzg~#|l0knUonkzm}4$Z4Sgu
z!vqpY)BwrbIoDa+*HE4{XY-dueqhM9+vFWwiddZ$!Za~1o&ZF6@Gx_N`~{lHq7tzP
z6OF^kZ)<w|GCc1R@`fiHt&zL5_75Aa#7Fr>7A~P_WnCLps0E$juQHN@)q_Zp11z+F
zX5>jY=HN_7UFgaVaayAmO7e=Xw<{AbDQno83Hakd>1&BVr*l(HDFrMi1fFUXrw|^=
z2_j16M0BSX;n5FiAi7Pcb{n9Ui=%@61uXaoMm+%D;)WrNZz9E`*z+lT@XgfmOmc?m
z^7v@-?o#nqV6Wv2DDg>ic7X+onUv^rKNu0#6Fwt*I~daiu({dd(gN|sxiz`+LsHTA
zbF+Mwi4#|(;<;M%yC-zPtnMMkYwrFtn1}L9I$Ii3s2D9CdnjAwCL+nWN<%07rLo6R
zT0Z9bw8DW04ADS~is*et^szl`RRSR_u{RN9tTVHS;Y9ajc+@4$xU@U(<#Gk!JpKZf
z01q`wGjf-()m(JDBe&oHfgq8zRxm8mttlu9ie%wnHT}83iZ?*rCZP|)%@zeo!Kz`T
z#Dd4r<CILSt^SGO+40#EW(qgB(X!Q)4XLwW`M8DhCZ@&=aAE5hhk~>R#eMl6SW$Iy
z*LV3)E|u0L18yS_-b~c-j#M#5Dp4s`fw{GGEQ7;C?ErK705;TKFtzbT=5rIV(rZPU
zxC%r3HmV7{xYcFl<uV5ip*l~(!}y+N>llj!DPnjoVpV6d^Xgs-`<^=Zm+DUwk#UdN
zObxlf<p+orzO_Zc<i1f1CHT~6fmlzY5TFOGMmshu41FiKqXvyuzgJMHLZujoW<m08
z-7ce`=7;!)Fsr(C18%*hkvr>pBi{j!DGPN}!pW3zb5RZKvQV!}ap<_JHQIVAL<#&^
zT^zf>1>keAdQEJxETYt1W>LMSGOvxP>e%LLaSLmz3jE8pJU;DVroIb0g}N)D<gy|n
zu-G-)yz#QcN~MPkA%BhG3_TEba+W2+V9~au)qo0%KA(VHbqOCqoD;0$nSkiD5i>r3
zyF==E0~$p-;l(E2!!)fzJU*oJI`KT^^d-;P%~<FL59_M;Tn^KpXnlIXUXd~9+EUY3
zB&=maPcJstP|7e>Vh&u<%}^%_fsTH-qj1bJ8Y{mu(~Fj*la?&dKpTZWfM#)iyJ>VO
zVQcH6o%;ZThPoDQl;#^tT1V<}tCLV9?2;Lx>d2z1@B_}-Ju+E+GH)Yo6sinjOPU7I
zFQ2V4*x}}>UsndsVAWMye=fw}l~D#o^9AOJGjMB)%jz^O?-kQj16O-3&RhB{u2{Fj
zWkst0=mF8fcNtF3mOGA$*Pg_{@W)Ou#(uLa^?Rh*ADu`VCq=f=5hH_tU*;LQ&UvXw
zFdT#W7cmA=Rrv_+4J~@uBt?`Aou|YT4qZIcO+V3b;F!#<?=9nzUyzuZrYzYP%cZir
z)X-y@7CG1Sck@|>Uko29_><Px;+~cpa?7tzR8F87T566r*H$<{gfobSGyJ9ZUoD?S
zWsup9;S4iHj4wzCYxG@g?Kgg#`P&`}?8KY2!c}wGRghNcbXioHH{D>>80_8#*4}TU
zsj!~+D#n~fM+Y)5HWC3{N~MC>60uq(27Yh@c$BcF<OnspuqY5*0ZqxzgFf4^0dWLr
z6s?LPp+$0f*4Rk3El@YND%-FkR%He^qhETk%emCB=Hq!UkVhVND`z&EClfi)<V+8`
z&~)Q<lrk45qV*TD*t%IJF@&FiBd1B3>dl98NknPb;I0>){wc2U1i&d+-n5X|M=&0`
z?4Z&DRsl-Ra3OgBSCvs@Ttr)kme;x#mSUM=qL$nU<LL`>Hl8oxN%4KrQMtV~lo+XT
zvxYR(RBR7j72UqHYll&;ekZd*?naj1u9vsuup??PrgaH!Zhp7td+(gLM90>sH&j4g
z9^sy8a^)a}iuH3_ovyH&5PrgyNI8LBmBnMb2D>^hUC?Y4<COS_YhrzRUo5zLUp)?*
zF=ck%4jv;z5hcg6ELKyGcpH1*cR{VWN+SKK5w&JJ-;(Au`tJ_CdL5WDuSj;Ymyx`S
zHts%5Y0y7)q?n?)VhRKnoC^|(H1Pu0nPsY?crFK4f9IUzDl&*JOUDV$PT!n(xbgtV
zT?w$GN?Lx?Ck{Q?X*1Irkvv}YcQ|w9PxUGp!Ez7JRcQDYn#!^KEGEohzo9}F6Tp8?
zNzB#br%3@<Gcp-Yn=6iD_(B6={|wfjwFa#qK?QyK1czA9ZZ!aePoCg&GGcJRb-x1c
zb$j_+9o-+_78Bv9R>Xi1VQEBgX9(fo7bxAz=l@O}Nd0{@Qi8JefTeX)jL4m2vR$I3
zvnBpUmsjv5x9sTsHmBNWG<<<R56v%+<8F~RY2-e^yuXAYl72tj-5pH{C-8jP-R=&w
zZr%~8-IMIX<#CF@+&j8%<0N1zaJ+;;8N9B9&nj-u6SIdNJj~o((eY8#HAy$@KlVU$
zI8xQ*8pZOOZrvbe$&;;pluF{lRYHFk*ZUd%L5*<2qp)uYy}YqO(_n>p%QiYPp47qe
zfrTw;n8|F^*UrP%c}V<6dfUyK!TAB$0NWyU{VA<KlGg5otZL)>vuXK6{JNv{7CYz_
z<@}4tpWw)XE#7<LllQu5^GmJg$R=sc>b({xG70wu&cUHN&ebp7dF^QD3HptgMp|9f
z>smH~g(cN(d7L3d`0X3?U;Qq3y8FU&lwZGgaQ{#HU5XB-7XKUT=>KJ$LjMke+KuWg
zO=uz`ZXgQGs{~RfLkSO(OXn?obfRYqAd63BO$K<Bd+g=eiM}a>2{Z47Uz&5yehaU7
zpMXlH|Ls9<Zg@1oz5Vs{cya&CqwWoWIus4Xm6+QbVZ~l`sTgo-r`$Xt!N+=)QH~)c
z_gmk@dm{TLqIc5HsOd$;q{<JKznNySQbKEmo#mmp!vqZY50qv58(`GXpDCMFZ)3*s
z1<rM1j?_`bT-Ujk7Q;5ZMM){;vY@Kds)p48n=6$+z~ugI#X~kkdGdD`xOwEuNv^7d
zB!7DwMBk_yComOcXNG1vq@(##Q!`V>CF2ISHfB%9=^3NWimtW{LJH^Z!5#LQkRDlk
zWv;1Dq50=aj9$Qy99d&|N!s=r+%oZM_0FqWXv#pAfetwmr?4o2Zl8hSR<cgdkYZD7
z#j^06#PL5{jn&J|A*RH_JfZeMoHHzT=Gl-sS)~)z4-TFxG;x1s9_&36dwLR#&EhW2
zm_K9i7}QWh-Rv0vu&EI1SUe-ExEypxo0R;lT*G%23V`IZ&R6~3a3^huomZTcj?UyT
zKU+4Uu+0JqS*Yx18RGq+P|RDf9$9>$s>V8Cn#fSYW>a&lc)CI7CrOs-Mh;vGRrVPA
z4#PF<snX+KnfWPLHazKrvY(7u6o`7_6x;eI<M1*Jrs|S9&75#3uh-gCr?87uRLa9H
z@=NwlOZr$@A~+u*fgQ0}6gvE!*U{<vW_rpM{WsD@u$C*B<eX&UdPuj<3j}2OVFbkO
z2TGsDAH6VbBW80+F_dC4>ZDHhRYe>z5y(rW=qH3I-f>XPRKV9pqE7%5+fJbSN5M=i
z0?(-(_ky8{^AUTia8#+IqG|az?LVO8XvbqB>I8kbZ-;F+`aRK6N>3jg0I*0)2vZ<|
zzIHux@{qD;V#-c}ayk4+#To6)4V{(;5-{2HjLTwkgIx$sxeM1;`fj1v-vSr#;KuXS
z2~OJ&+8danH;!Na7HW8kLfacpE)0E;FHKmh;NOJ?=R}Fznwnt2lBrZEj`>LR##OjT
zGmN=N%(LJo5#&>-!b`ET2>wJ&_i0z#mN*xclLFVM+0titI?{s9gmNK3PzJfo)@iWE
zbd25Hf79}q&0sS~boo{0K?DbZKMDlf(nbJf^;`h;Lo^<=DCVV?Q5C1}RVkA}wBx!5
z<}w(|(jT#%&N!1=jJ7YFFm#}M4d1)19@L3AJWHk*)qGNj%@CCyQB5xmBv9L4HapuP
z2k^cBaZNRcnj@_yQAR)YR@*9IEI}6)N~RWFI-%gV7P=1llFaysM0RvJ^DmI;U4D=N
z`jv6FxG&I<@8LUhx7-og7ATqVie)VV(G;B*iff%mqJSzikzBTZqIpuWJ`kuKO<Nj7
zY|6TWpG(*e**EHLYJjEuMq{~)Tobj9k+RnFFu{JMwIy`k$9{)37XD|#T2B`++tTOT
z@5TS^xJMgCZ#uLZ127>Sk<OD}gFmFRU^>N*9oP_<J;iT9oTnvou{`~;YnbbxGD3!!
zD9A`JalSb4WzEJPBtD`b*{N;zr!}5!O&B3sB?fyi-s}bPR>JP^9OT+2XdS9V{po8M
z)Ja&{#d=ju_!;`ENxZBlrr?sCoR+_?s%Aj!8(C>L-WUHRDl4-9n`9c{!9tMZ)dPLn
zLm#56*qNoWE&!{C=?$izAkX}T5B>x4Ujhrft9}FW)1v)n(kj6}4AuXa!2a7jfoBw#
zR6j3bfbqS*zJACbUuc0?08$&j5*tMD-=z_h2a>-x^&$>Oc;Y&X4#2=>?SRQ4ARx%e
zr+QRjfBHAPV`Am0tDjpZo?hLZfUG_2{X%s-4S5YQuBkw!i1cG};h=#TW2DrGv>^J#
zR)I+2j13#*sypJql0jEA4azV0$Pab|q^)exaXB{PqciJHXFTR|MP7@XHO|y%6>vNb
zUrB5G-Zvrk?i$h-Q=4_wyoNGU8}X&~YsM>fNBd1tf+ysRl&2~_d9mm84N>*yK75aP
zv`BRmqvl#lM_#m{dJvXg2e*)N)oKX*j5B{7O^V8LE#%H(>F1^(lbp46IhQ9OHbK};
z^ctNk_kIE9ntE-r_yo7#4;RDeRQh@U7r~EyVY3bA2R4=a^Zn0Mm;e7C{{Pz^*NoHr
zL5Cs^A4_0pOU{F0AIioLDQ0tA;ETyc%0YUX6ZX><&QDEA98FQ_;BRGKr)GZo7^;rl
z)$(dWAlBj!HZ>`#tt;X%a$+Db-3|^g3lJ$nZfRD)a8FEhcHi?HZ?t~fn>oFvipGsO
zLUc^9@PsGYhpkm}4nJVAKWHWyrhLq(6CAcr^lH|qbF{;%j3#RZWE9}?4~xpux$w&&
zElH%pLX_d_Xcog_D$szITHUzUZq4x8P?nCy;i7@vRYQjWRLwIh(hd9u+~8Kd+%*Ji
z6EMhNBt&B>oZG=pL>x8Im895A7#o_DfWD~zaQ&%4l;2eBU4S;Cvg-46YK(LfhQf8S
z3(#O6&*Sj2V3|@;1Z>n3dlB|bZyYL6<>U+`jRA(XW!!5iox<7%#^*R98L*cZefgFs
zrTylK@4;rv=4~k$m;hVnIl1J6w*=>9L78zEfw$7jY=z|Bdh#B74+Dp+-Dt|oDDNN&
zTp3HiD&H3@hkqhkGc9dgB;!rf2gP9<^b7G^e1)jx5eG604?7cKdKLu(3<3R?ytL?F
zuv3qywQ{3DzbL-7$jqxeF`c<7uRI%|rT9Tl3kb*I;Y(3EW4!P=g{W#z!kJsKo2xck
z_^w|gs-Bj|{fck<*t(<xYUBsoaGS&tgF5m`q$eD?0k!kEPa$aPkB-wTT#uPsGJ~iW
zB}qNtni-r^-EE|EUPT0I3l_u&M^Uj7QRf0v__!jOi1U2ESU79HDZRbC&HVPs<IdoK
zywcMuAmMbueTTuvotQXwJFeEcj!c<RW)w?a)n-(JOFh&gBOU_|In=t|O&)FPfg4TW
zmpr5~&WG|t`&^Y5j$4W5$1!^g1LiHFqHuaqTBvvy$TwZ+Ww{3zv&`u6n9d81soz|(
z*85Oesg^yzEgh-9cq{kFQ3QAnC$*sq${_2pyAo6mdLBqVG+<52O}sHusl4-HUrBdz
z*z2$*-w^mpGzBpn#QUjYmbq`a9!&KrKToa42Wj(LUWnTUElXM0UbyQ_U;TrX>t3Ap
zqOQ%K+u2sUDxZirF{$Dq?UzSJ)*KFil<5^otP4XNb1+vWEFI4_>y+=DHv6s%7&GvQ
z?7O<Ks4o~t22hEX$y^zgU-VmUa(>fP$IxwK8h`0&R;z6UhUV^$xvyScs;^SspFcST
zmMSXM->hh%VwJ@ec8>Wa63BCpsu=V_j|zdM8}wtnO=eAfg0WHHCZbh~h<#-nP}-$h
zV;Th~TvVUqrhWHPapI3>am0s?NEi*Iy0coxr;^u;B4=cS+i#1-FVYH!A*bGr>_}B9
ze0vFg{a3!8yvaf6;ZI;|_CEqZ|5IkNf{C4>uE7r{+rjYPlsizmQwo3&_A99!kPi`v
z$q9slb|`#kg;yjZbTM~OQzT;1&O+z*iW%EosVg8_&rna-@DOt4?U&GY539S{D(#@h
z{iMhJ^V{bG)DBoW)cWnNFGYN-RJ{sent3TaOG=Snw5MJk(2z{_t@@P^XKD*dekzzF
zI5NL|PM<j)c8P#l;?*=iwr!A}H2gJ#%H>o|7`_<Nii%#%qrw!L+RrkICJ0I1Xu+nb
zbB9L-Mj2^drx5u*>%0dd_%aF$A-5Lknd|rU^;79Ax1xTp%)J5rRJ{w~T#o}SBd6ef
z5NBf0H_>=k2BC&A*&vd(p(*K90U2v=D2@jF+YwlMAi$@2#V?~R5^aJbc>2G_&v1vq
z9U3Is6Y*RXvDIG?GQIRV40{v_rUz?^Dkev<{*Ha@S6vs=ohUn>mtN=l5G%AC|1Iwt
zLJ{c#KhnPbkMjOM`G5XR;G?BY=4CL4@BL6{vN&Drg#&eG>g}=oKy^utvJi(DJf|v7
z-5F?P5n*UtMdKUJ>#Ee+na|B~rzAPSAn*t0Q&=%WaM@|xFhpzz=cV?>2f~}Tv#+n8
zU%jfi-P{;;r7Fy3eE5egGWrjgxv4kTxo+%TG~>Fwt1wTsV-E~>B1;hvZ$3)nahK>C
zB{-sMfT=QdRvk5D(pq%!QxpfmeEUqX&X>@3B>UB2T|frp>(s$`cl#Pm3smbcgz~Gj
zfwm0s0J$Ykdssq}5WtW&fqJ19>}<q5(EFXKbI)^1;MW&s*fx1{!03p-XAa5194+t=
z`1zf#d15x#07y%cN{c6IxW_(!_KV~ZjuB;vs*MAgt3xm$n3x9tF33H-zUP0(k?r@v
zk3}Kq#;1^cy+u&Nmldl+^wkq)hmpDWyP-{KyNa?v8HvR^C4g`C;4~RC9O5<8FQ*dJ
zV$HwCvX`zTO1$pW*LB8}f?Mj_9lX98(Yq`gYzC>D(^%bX#V>xTAr8|l;cuA|ZI}6O
zA8absWhzl!)g(TFZoT($;J7}=o2be;YcXd$r>l3rRWGCQbg-W@DMMRsZ-%OmcNbRk
ztYP^3HgJ5esFT;8VaIQ|{Z`le??c0qlkK|tb6`IH@zCJ^r((?1($Lz`;op<L0uwH!
z=YJ5Q+3U5A=R@m29=n2pp%@5bu(GSXvB?1jA+{oY!*!au1?I_Bf;ZK3DJ`U-xAi|k
z=o?L`9h94Kjm^!|pP9!Q?pEI)pRbTT_)VxoXOO^(Ea_2~ORc9SQC6vESz5<Q=LQC}
zLB0r=3i5v@Ipv&Tq+J$c;dD{0m6-VDe>_BKN4LiO^(I5(tyQH-q&U+4m}Z&g1&B~a
z{_hGbbd8{i8SPT+`!sVK_o;qbDCdDu8Po$G(frKKNSMP(sD1&q38z>*r8&t>Rl^Vi
z`**SjeO^8o5Hz<8{mxNX8pS`-xx9Tk5S=IDGbRCekE2UiUs)_rm1AU~7F8adzXr0O
zKG&*FWn>(O;a3~(5v@iZS6d_80c=BStV|}2W}g|0bP)HUWGiQBr+!ddfk?wee-Z6<
zQ{!T1W0vW$<qSFaI&b75i1`L17Se^GPSfejTFgPV#8zbpHZ6pv=z-1BsLNXPUvsOM
zKf7~zF^4hv@A54d*Ei{ssovA!CmbFZ+y$xieRHdKc`VR1Dqt7auWG)@*g2--T*3+|
zhWnk#_5+izIUiq{grVeFB%N}m^Kswo0)3fE43{g>QD`?0tT*5Anx6+m;nj`c%(e5Y
z@{e`s8!gi|p4KAd^C^(V8_PY!QLgil;4pyoo@aQ1SW&OSj*6%GGK@|#W+u$t<W8qf
zurp2ZJ`+LUmrl^{iQR95s>rl`)VJ<{g4V)|MX0<+Aw@u`puGDneRY&!;jd&YynFHS
zw<_#>XZ;%%`Ua9?V#HwMcDb>E0+8@SazY^`un*K-7SL$-!U23xCHHHS&5&DvH3~TA
z#@*>cl}^Uc`gaVw_^tZTVI<JRDfQEbHvD8Oz$96@x&sz;O5pR{X!KckT*S$>S&~E=
zBKCqTg{VTLj2FO_tw?-vDD|_}GLr-;`|)Ehcc#q?BZ(I1fm^toBdj3SdH?I`a(jPc
zw)it)D)|$a_n#|hynlXL{_XXbsbndSp@`^pMXVcd=xQofiWsJs|JSEzA$jd@Y;qA3
z1Q57quF^VDYfsatRoiOig7=)Y*UYXskBo4xzVX78gToNd4$n<IgV&O6#qkyOIPcO-
zY@Pe_mV1_c)_sOO&F5kEbr<Lj@)BAbMX@k_n`}K*ao->HddK+@$}=P@_9mzy8_EeC
z-{lPYOJP(sGr`IV!y~Ht14L7@p&48C_F_W^2Kk+&s>H|X#zXpKJcb6OF!PRsgjUD7
zKso{PM#Z3m2uL#XA+sVK^|o5}G1&RC#XHZS*sr%u-&Bwe@b!5e4x;=-zN|^@7S4D{
zx(DXFM0Ca3D1Pt;ywbmd;eWNUpe8AjRBz*rSXX)Kg@XWJN>2u4cTb4+c2T{u^gsXb
zfwpo6S?$&Z=bB2eIJjr*ilo>nE0CH<@%B*=dUvNh?<oSyX6S^hnY%^qzWlyxQtafk
zXKrR(ZvdO+*%6mv95>W*_|35%V6q*IyBT~Y_-+kD4iaM}gaCpD{oYk)NIf!XiX@f6
z@mEQnT*|Emir+)Byiziq=&C3)f9ttVHA+|BDAn)BVGa_BcRP^8;|GLnrrVO5p>qqy
zv$bD#t)s5a2y?bo!kf2O!17w29c%Pl9HrSl>U&@(`YX4TD2ZsPk(<{ktacSVnxa4#
zbPrKPD;bK+L_pzJG7=^TjzV_$xKP>&ItkM{oQ)zm^wX(l?o1uAdVUx1T>LvSr6*O8
z?#v;UkC6AanA+fw?$$Y&J*Dm;SZprx<W3PK7_`)xh$wal(ibAmBCMcs@1Tlr)=tcp
zKd^ism8qRdkCm@5UWMYS=#UT*eJZuCzC>o9x%^Q#_7X5coqir}G*$CTUc7a+fw84s
zOliHB<R{Iyypr2yi6)4|;HM6*fmxf3wDAjk1j?=CJ?`;SExEMX7!v|qm9hL;u;?IP
z(W6+*LonZ*mFaJ~)_LRP2}rg*`S^w!VsaH}i)gFX><NBRYxjy=P2*msYUSB<qTi{C
zpqDI4{K}qzZtOxt>t+;p7;0fLxNQuFt@F%w6e0W`eL-S7<9Uv!kp71`rj+&W2=RdQ
z-wnH6WK9la2h%`x%xB6J*r{ez639>?BCZ#zx4Cr@uDn#B@GVK|CSWEvXE!C6Kh^Er
zh{+7**#j6S&z^=Rh#@L(bV1Dgn<ZJk$3Z>)xjXVSzlyHmGM;*io$opMU8A@ye4;^J
z*f+Sp&{T&_CW=A3`wDwkbBklJcP3_{V~$3)2WYvD^Tc`hJJ*mt!7DLX*N`^*0zpkM
ziay0*aD`c5BQ1D~Na`4n81ZXPxxxnQ3*h4MMpNv(Pxtw0-9{%7E~G`~FK9%(3I3)}
z1A9&@d|2akAiw4yyLLopP~c!i+6W$DkhPVIFv}cJM&gTE#1w!f&*#Jaq&wZjO6%j1
zPQ+*{lC6~x%JJsF64G7}5R8sTwg>~9AZa}2jyIs^);7O;6dXgET~cXm^WK45Q9AMr
z-61PA)jstb$zTeeY>gcW@b$%C{E52=j9RB|<RE>&wR*jE>u|X>IP5Vo%QxZTYskV)
zg9od3m+9i$4#z?yXi=C#0EffB1)7`NVV<x7#f}!}A=u4ydQ<+h%NM*q=%Vrdy#t21
zOz!K>*u?MobUq)+;}a{~{mpz!bd#F%O7k!6#23G3J@~mg1VH}ZXy?C`ri%X$pDgt#
zH}#a?s4SQ}0F-!siq`Rz!90|f77z`>-xP<G;Y>)2H?*Ps0){SAqHS%ls^RUswxW?}
zypK7_tj3~eMJ&Qwpl1KqZv+Xt1*sBIFjIb83Gjr5nR@sFQ{x8rX|89EV~%GIV<mTJ
z98We1x4cN`KEaBwQr=F{S!-FIel1S-O1YL`-Sa4K$Mq%uPTHUj40LB(5vOlEtT1-6
zC}Ut2(OaPF0<!pnSeYI^d1zn5-p~$!YX`h*i~&9X*Nc&D!Wu<fIaYtr*9`#ajw}2~
z+~jbFg(-AAj9>-7;!P<~2<wt6b<(U2;kuFL@l#?`-(ZLqPZ7%lRTAKH=p+mLXMD%b
zc)PnlBAcRie&H;lcHxR*MKRW(;w<3M*riTMMXnqWOmP+QHf-M7h0kB;c`@ERy_ee}
zEU_XW%mu62*OGBbfh3lR9Cn$oW(!^NIT2!%S^Xo!5Qs3$ylt^!*sx$IU<(~bC?Z?D
zSbw{eP1gkB5#zSJFmMISKZd)w31dNHmIY<rCF0hi7cQ&2e=oC$7XB{xsIZ0=T!P&|
zmPyXRJb3Cfueb~CEfzr_9rl{LC0+$`4cgHwj(HfPP;wm@3Eo$F)eL#y05gl1^;g7Z
zYU2EqAej8x07`37#Lhku(DLHx&5yZv*HC(u*p^4sGxM|5$^5`W^lAc3d}dFVJy>;$
z4`+0X=ComXXJ2RvG{aAChWvQyteyi{9I!NVijlCS6~j?GJZJ?kXJqz;|Hk;D==+0Z
zGc$o_qKv4MOzcIfi74xnL;CirV~UerK*3M?l?l*|m*Xu{BbwF@A@%_djBe`d7?Ykk
zBi)Tq6j%s`0;I_z%5sEvo=q~-0Emk@y4ap6X>(N-j8}E6BFrUi=i%u{SYGvwasDQ>
zV*#&0_<m15v=^$zne6i*?*bAFA-QEbvBgX>K36el4+(-*bgrXldTEd71}Q-392XI8
z6C<)MgwfiS&g1{Ps2<H~+a8n*LlbD&SIfK6EnZvCn;)W=mKqh`w+xL|`CO(#NRZhw
zpUiC;FG!%blk(Dw`9R6ljW)Oei}9E-&VHmj)(N9|cR&%zcCkhB=?#r0e`R6WL&w*0
zzD&sne2=U~f!ZKm_YbWuU@)k5_{fnMqd9lcoBrPn@s)<`7p9^`sb(-LmtEepS&KJc
zW}*IS(cOZwffH6OxV78T#kee03WHlR?||`Z<TeYg?!x>JFs+wZ!8UIJMYlizZX(3p
z4`lm=Y=fwNx+p?PeJSRg99kU;!Rboj!3h;}b($AI(XnM@fc|U!pvyj3?!bIe?<}(S
z{0Vo73gn3a^qCr-k&L0)$~2OEIc`kB3Enhxb&3Jog=-j__?P`Px|aL=vSt8SOri#$
zdoO>oO=LzBg`D15Hr|)1J&JU$Ai6;1CZS%`G^InB8>EmhWORvR2H#11hWm&bBrs(!
zP{qt<NE~zr2z%YmQ*r^U&k|(CP$%XTF0^YSTXV{JIsf3_QRzwLI`+SMDp3@zp{hG9
z67uNkWx^J8s8tJ|#$AYJ`l7BuKu>hJLESX!A(budkww#cDI}m+v}-z6aNv$CSw6gs
zdZW^>tu!A9^B+h&G@)pE2CdeX)3ZAaRH^dkNK_X<(7yCgl5#LkH~Wm6)<Hc9&A*Uo
zM8xc<z7EYw55pT>G?5KH$EY`YzdJ#z&)<KKxGE>+_FOM3JCEWEepit{>*$xVTd5O%
zqgvgemW_7(Y>u+VLTF=LO7F{iY{qZ8WS&Sb!kg$G5hB*l)j$9ZQY0l)e(IKdbvL(Y
zKewK`2u(O*MTPk5J-sBxkw$BEGU7XLBigUV-}C3ud%e01SJ*MjQ)5#Xg_T;pm<_wv
zbG^b0O$*3FY6|0Ev)S*-vZBg7Y-Bb?t&35&&S0HQlGV9fD46HThoTTe<f~2RcwuX#
z%8eznqK6WC)`$|dm0eSI2-k(~>Ic<(wlSjkE2_5SY@~n(3hlXFr7tNshf6c)<kz9j
zkL?nWmW2QU)~&3jU13;BQ(;dRb&m@4>!UQtSkY#H0X}uHs=ry7IJvz%?2lZG2F^Mw
zZ_S4>9Nq?hvS2rOw{0N2<Ja4`nz7p6x*4(3-_D*6<{X&=?}ZYGfxpHq#HNf9dG0^A
zB>=cclkHz8uL;-Lj%=L58Cpcc-|2+|VtK3Bk0n2GffM48j#>{okmD5{V)r9Rb1THd
z3^=%#rzEwRWeF=vt3z<g_7fm0fZvexXo(VizjBH`g`^0P%p~ea_bq%f-EbjsAl3?d
z7Q=>wu4F)Xn}&zK@>#&AFFbNOfu_&ax>~@8uGqC^(4aWFjI~uIJ6^<Mk7Mv~DN!Pi
zuTVBY8FitK>(@^ee-*?&58FGlmkB8i79}S=Y-vaZAAGxQfFzjckRe-qqY{btRv9|z
zlYLJ?1?V;V_i{3);&{bW1U4=F^(E1cTz0?SS_F;Uv(meFyTIA|Z$ltgG>KUH2g!s8
z{!g!I%Kvc1QPQ<D)zz~wl>71el<iC%{x?8cqN1ui!jIW!#9!Ci(zol2E9Ud74*(xO
z89!Ji5lj#<926(XV4!!>YU2X`rM#gcPOgkH`%^ZFE1k$r5zKWZ_44!WyxP5u#QW>(
z16T*39Lh8BmQFH-XxIsI!@)sVrKqWJ{qHv23-R*3wZ-mD0mRTuL-F-_T5fv#+S?TN
zG#fbpRAym@)rnfxx}Nq-aYT*fxRlk3(pF*&E`RwkDJ7LS?j~$DQ7c4ZE|LBr_l?I8
zeW3m-0X7o<dSL>29#q-1c>BcL-1&oD9A07-RVZ4}Oht~!J(TZ4j}m62Nmw5AB$VTn
zyR07A^br&cT%g|(>)9-9t|kZnNBqIcfgu01tr!_o47WD)-Zce9v*tV;aFwA*c`t>k
zxMsokj?AE?sBM_;?2LF}YF!bBtV2#bUI|M05MI9;xn|L%Y7n2Tfm5E04OS}l;=|8i
zxg`>=uXXiaT4&1A2h)qYIY3#<^o+funigA}>_blSn66Cq44R|%p-|^;n%5<>nMIU&
z0V=CV6y3ve1k4Yewzf2S+F5c{EaV8%O4kIc*11Ws<l%imwAEvr32`~wR^c`#H&?|=
zmAU1iFjc%#b8gm_v(F%+Dr^`^b8)<CFH|{QHfYFROgi(?`!;z1y}u=c16^9FAXcN{
zP9qLHzS{wkW5bI`pN?=2**25#41++m*8D8We4e|@=*LMA3X|^_s82FKehG_d(NQ|f
zk%9Qr<p<lR(?SHASv5ebdLo584$x`ZK(FTSFD&9w80mNX0OdNQNIA!#1(GvpADz><
zx501n8ji)k%Kdkp<p(i$0Tt+%j@W)d>+542iJh;{k&BsoE}j@8%R|_&>3|?cKLO_t
zh0Z24{WJsjMonTu<L?2`dM+H+MdNzn-hk1QLt_@F6si<dW=n=d4b1PdlW2)bz&%`}
zJ;bZmpeE!iCbR(3bspv{#M?Jcdh<hn@zQ?_TYyJm1E0`At}yjwJ@%L~?GsTju{q($
zQrZVsbouK->?*Qfr|kYlzz20J6M!i84W=cs!t<}XSPq0E82ZOnSN%s08pZ$gf%`Xi
zp-@TnhXIfHRh2xVlmLv769b!sIuhpFWZ|3e3$Mj-kC8docMf-548MkmKzv~)@Tt?=
zr@4zZ_4EPnvcZ>(LDPu+Qo>vG`!9#(X=@yQbghU)dZ@!S7yGz#mwnX1_Sfr``>*O<
z`5?eTePM($CAvT51tvunWo=0*@qZMjkP=k|sWq4s<l%ZypI%ChlK;q!&4ecSL0Kkt
zXe1yo1ZmaW75UKeFH^l%Wym}V2;nsgK5{!#@#?Iw7am(v1pZLZBsW<t(&+=j2`gzY
zB-y&|+-ge>E=|lz4N^BUJT}pY6k9c@xAaAxtcy5e%*bW$T=f~WjpdyF3aYA$71%e6
z7&=@Kec)J#(NX94^QDMscf_TIFg&mv^Kg^vLh8vn=#>M3TjF0f(KS$`yNyyo^p8Fw
zYKqRE5MA_8Y#d7U8JSYQGf4Wmhth7I?CLr(G-Sw@atxuqF<0MW_J@8eb+UoutL1~~
z@bK4UXFuao;|Bmj;n}MedT}l|gmR2QSBuKi8Jt-JZGHkqwk+Yq3m)4eE8Ol5;die1
z2jD?9=K&KiDppm8=Jn}HjS~gVIKPVQ!$+|i38UeU+Zn$4X~|ds#6fLJvG&hNGzx6o
z&Q}x~p7L(KvJ)k)@%CE{Ajo14iw2$iopi0ht1bwbM@15Sgj!T@)gKiE=&0<jl>=Nx
zeR`Kw-3IGOITj#4Vx@cUK=_S97_s{Y4uy`-^oJqm7o0#l8u(j-7@+KyAfN&67ytE8
zEpWj|ajCHc|6)>z(_i)bJrQ9xJf_61p}#CDA}PJ=8M&(MScd3&qf{rXOjv(()7>-Z
z5(FE^Y6^4d2wKKww6;Mqjt+dZvwQ>d;j1_pyTozL$we!36y}pswK%KQ)pF@&Cn*f4
z0(_oPofe-5TszAYHnL!C;&qN6%#@_fis}kxbS$c2uE)r>G4JpV5J}^Mh5?X?BnYVV
zz{jT@!^Be<dYc6(cbEa^Px6wYn4tLp0jvDM2HK8n2LQnCZzVZqo{9Jq$IlPlF_*Qb
z&NRzFPzE5!@+^=hS^wxV=2M&2nW6<y988D{i!COYmM6$ZP(Dw;%N3uTKRO0lKKz;5
z&WanqQk^(SidCjA{eYc{GOoLCSR)AYMC1}shQ!Bp{#X<~=X#Tb&C!IC{W{F~^o(<u
z9W#mah^*>mvd{+pws%+;jpqh?*buf)&PO}Ew)2kE685+KyJ4c=0Ahj!8r&tgy`zu$
zF&6dkdsE$Fef%ZnY8{IT^KbVhf5o`2_Ax66?TL`&%otU_zqF0Z;&SEzDeKh;>#n&+
z1-SlNw^(-t=DvQThqP>$arZ_K_ulG!`)K2LYD0fR5oj>BuAPb53keYR-oQ;Xm_&T{
zJ%K|e^yD|h>Dkl_jfr+|RAw%dhFeG!oLiO$7+!;)j14e=X73|GFx-H!1CHPWS|K_z
zEUeA!SMekw>Sn-_{RIpVbqx>P3nZW0OGLl3!s|8PcUnPbTEQ*xR^4g7?4vPZJzPGM
z5HXjK)a+P(KyV0zH#-)pE{qVWD#{R2HEq9@B4BQ$82rtz30LrlmZaVl4h&rwx1#%&
zqqHLt^n%9bcZ-^1d$U`n4Hdo%GUTK7Y+hCWH`GBKrOv&OjAtk2NyxoygX&}h8nGD*
z6ZSEyj&!RIY!WR(C*ye&_-G|pz6NX>wP=*cuKKHkC6Ggm2POv6sgg9p`i|sDRe*ke
z!EAh5o(I(HcMiK70WQwjwo~h3%|%d@KjY)OZC~G+K)1D>;d{R;GhZ&QJ*H9EbdC=4
zw^p}(rCC3`|Emo;Jf<Qp^)tQ_^XH!mr2n~I|C^&BZ)t(>jMhC|v>q(E21@+eUz7+_
zvPRet;kgF-RZE5sF9MZNBdM3zvG0MWe9^wIWs=f%>EYbP(LD$aZ6lST6UXZKS4Bd(
zjj@9eV@3u7@6-oCeA7uC(!W7JlU#9)_$lMhWfRQO=lAsYYbPg-*VW2xvA7!Na_@|+
z+hnt%7Y$8Ek9Y9cNBZm0fK}Mqt^Zi_+O@1UH}KI=R3<%Y?R9l9=J0q}!H|kpE|S!a
zr<+Fb7S24p@O4z(B_-Bt=l~fdVIDv|3LVx3x5!8qKmjTqx?w8um=o^k5Ab)d*Tan-
zcuDAsmt!4#2_)(`K}qELA}*#1(2=(H1pI6jbA^KtFOMEVMOPFyf!2UsB_Ya==h>wP
z+0=-pGZ^?@c;vSf3YD`ZJU%6=x(jgJE{XF3k6-sz&MxwMZ2$do)g4DGDn>|hPm+RG
zFGCTO@8FgEDQVJN=aaimj%ZCbQUIy=eNOiaeo+Ka<g6I5L&bte)|RwCTHz}fcPBga
z($nU&{vfyKp396&DLpusxv49pQ_K;Xll$>n&h7cAFf0te++iwp((1TS%nf1E8~w>N
zCjz6^Z3s9xdNuxvu8CK@F|mn+yRzVk3}MtZ;L^S|{Rd${Sh4?5YW=4Uxn=_Z+EurK
z|B%KZoWXz*1<PIsH1E@`W$=KL-KNeii(mhVE9MraVP`BqW;k?p@E$UEpOdw6;$`ME
z1UXJDi!(#TO2)-NVNR^)zJ*LS8zksA$`?O-P`)nE?Jwwshf`Au6C;!obM4t`vzR<r
zEtfilCw1;m7?RxQ`zA(asLl6>bCwz|7Q98g68QcmTUMvweI%v5Q&K;x_Xm#VnO>af
zK0^?B10}0aTR4yC#vOp>5%~GMn!33;l`)}{Z>2WF^c^xQ1e-vh)Aq;?-VLY$6qy&z
z4@tkq$aq3Nh=Fe)DIgRZ@BG6jZQOgm=FiIt)Iv1m4NDczgijAaE+>s0E6VQ^O%aQ*
zxw?oy?-WkE*p4{x4WvT0oeEv9J(21#uSE*|(KYuzBY)fE;q{`wLHYLg4B+B8fKu;A
z3~iXf>8jyX-O2O05~0w7zWr41q*YS~=!6^pnld5Ob?*`mdZ?Vpy8j*O(wc?F+E9kI
zq_4smRcjrv5voxTzk*!-8-ytb6T8aP=I)Z|7BIoib=O1fNbB%W>{m)SGO`TtCblYu
zDIYvq!R~iGzLzpjk=0`?C(XX6aIX32VuJ5%3y2C>jm2#ju^<onszxVy7De?%T#-ds
z4-_^P<1%&%=S@M3&Pz87;Yvc(C8SdXhbnTzWVan{=E-orFb`xwLY7Uyf)S01mC+QT
zYM1Siae?H$3;`2HcF-J?-9yX0-c15&Y0FtKU0!?$Y2Z{Inw(6dHgs;_yD=Tv_%;SO
z$}E{-U4|vp7?{n*c5A27c@Ro8z{2t}1jpc77<!9jC#>$d3_8JVX|9)3oti!9vB$AJ
z@nrF+**F0-$`xsZX-g+@R_Vo+gOV&ltr$b!F4CET_XW?qcUj{`;J}qbax5w(0sAep
zQ%>Txpq~4`Dm(9Zs^74WQz(+`y~@hoWMxZa@9ez~4zjn9y%kCJ$Vg-)kx@pn_XwFs
zh>-31>i6{Ih;w>wuk(5xf1LMy-JkEhzxQ=t0wLNMI7ih*t4&vO6gBo&<FJ^%)qY1g
zdfo5GjiS0lbCa@h&yYKSYGFM4kZ<GtAu;1lNi>#FjP4zl;_kiMI(POd_$=2%HEU%-
z!guzM_LW6g3pG*R>@|!PfJHjJO`cH1x!2b`LtFTa?w6uhiN0h<#s6WmG<c%QqqXoA
zq(ir<Zf1kKzP0eyL!QHlHxRQFDX?F^ACA_>!NVg3&jenSa+x~sDjm=9TPkGwPo(F-
zCHJT!rqX+AkOkNcRD)zHYkQ-y2K5+NiOoSojdnx{B(D83pnX-J{kGW`X@#G3y24AM
z%<n-`ab5^ZM<sgBYm{fM-5Ggagm=3)&#iah!?$hL33;-fyro6rzWMofZmY;-$8iql
zsN{B)%AEYpyx`Z1;G%Ddxi7c}I|g+i=_#x=gzptz-_OKnpPYNq@A>5ZOfebh=Jv(8
z^~vWhH?upLnP)%d<cxt6b_a7MZMm+h$OiWu)bU?LhKRXuBaUe?9Iay;<zMSv<lxru
z-t6tBttj!6B&!sijAUl5QR^J_=*vhs3f}s4Ka-8mJ|he8J~9dB`hnt{^@E0?<zKJw
zQ`M{$a71y1dIu}A-%_k&O5|(aeCg|ph9^lLnr^^kv|VL;hxDu<=2#Zi<#z=*U4Z@a
zv5z)Bhr3&3^`y@@HxkUuRSi{b+UXq{2W$+9A=Yw3cag)>mlXvDRCPHq`hY!L)*&E#
zc|d|c5WYM{ds?$A^S|)rFF$2aT{jG3`5nIewuM_Nqaq=Hnb{N>tC^hmP!9L3GP~1Y
zmMW&XqNm=7smp+#Z4n(2N(BU>XB1+B6vN7iq+;xWTAslii8(?fwxz9P7-EL@CM<-?
zcMB=G8#`0?n)q}rjm=?fl5<f#eOTYnz$_Z(Q6Aj@7+pKQDw)QOzl4?{J9;Kg1^FO$
z`dW~h?hDmKLAk-Ng!Po-nv6-CDnZMA{fgRp&;9e4oZ{(2m0L?qne$)Xku`R17h(8u
zB>%V?QaW}^+OF0d4aENGNI@Rt9P1E1$-^y?YdOrV5lL#OB+hU3nu>|NZ(yoUsTYYa
zNPp#_>OncN8L8mi&ukmK{t~vF=Gt5zlIU8>uy0VuC}Aq~lC(3a(FvxmJAP-5$mY_o
zXLxLGLGKaloGN=ux3JGFf=GUne1+E#@fu+ev4)&q(gv6K5{&~omB!{kh%<rXdXA8p
zfoYppKNI*aE&99V`1P@ogi;enx#^MK1@i7;-VfmE`YxM04}?oCf!O7&Sh?OG9dnHF
zwu7Rp?ByZ#=*_6zy#6;AmT60PY9SdW>6Hjt>Wf)DZ5CIf($c@;*j~`g{1RfV)5w27
zD~Q0a`;+iZ!Dp(##Izhoq^-`b1EN7{<Qfqy5mq32`5dNG(V8RrHy0$Ju%)6cRTQyP
zC_$(+M9-9@M57E%goPY}x<}9($=l4MYXqcs3XKWrqOK0E(hm1L{=UiF#h`+gWnH%A
zs_>!^@t#pz(eqHtG~=EUi<ia~O5pcaV6NZM%d3It<woqjPA$6Llq$R$3TpalY82!~
zM1{5w^C))u!UALRT3mOps1vVA6bNDo#t2ex=4<ora*E<$#}GP;?tXkpZ&>$h7HCcB
z)k6ua+QnhEI&v7T?$koPNF9h<u0eQ|sxxMy#UiDMWv3<~U4L0kTe2wcSK#ud-+{{;
z%my=RhxQKEKWXdpzjex~Q0dO+eC=gvJ~DWS<prUby!HCaux^rAV#sTBzNA&pq%SUf
zUxvRN9!}js*!zy$_(560MY+E%$1nl6BVJBzFm~RgAGe;cVkdQu_NpX{iDmBP%N%`)
zKfp@z7)0*x+v0Q{r>|vr-jy$K=XgO_prcySVk~KdPdH$@u^+G8vXE>A`9Q86FUo+;
zo%^#xvml+Vsi(qIX@E91z?dN6?QlEhoS<pYvgJoTJy!h1Kq_Tfn)VsmmI-w8gxuV)
zBqEd%Mm!<uH&nIC64Gl!jf{di^bX~3V&)P)-$yPq#pDQ}>&)5HCc3ZQ*E7OsNJg9)
zl73f=3?g~o)*z3FcOy3CW{`x3`&~%E``E5<IUU(6*I#n+)?XUYNX#p+xl#c(9VHwf
zRnNzb<oI^P+DdFDeW1@rlt`ID8;WqBMmlfy1y7KHfUq0-@(r;CgUe6i7!sy(tmq5V
z9^6Rgz!T5mHy`SmP(p<qvft%mihI8CKt0FY^eT4jkahs~LXN;31j5QdI_#^XeAzzp
zS_0|#e8{qS$i24NRvdTHQZIQWFTOc+S<ZfJ<jB>}n)f4lR6{Sd<~!kG)F63e-U@6)
z@4gb&W{l^ZO-<UYa-)<y(_hhysao1M#S?qf;TdVVqB`mKu~b}o<AeC*?7YaOGMQmX
znn}x`ac{h@#xe~KSrSh_aH0$BuUD26x^-vq1)^s=R`VkU=!~OciMvJ`r6#@hUdat)
zqC<(!%<HUJF&(-;9`5T%4T5O(D!zU++ijm$D>xa(B*1tjUremwiffFyL0_@`laYWK
z{CjEX$xegT<IB<M;V;UXnyrQW*@NC>Cp2>=t>48GpA@SMbf8nf@f@WRbvAksW56Pl
zRqoFrVDTj2>qlo<#`rz+A8lMw4}EVSlJuH8y324Tpgt@f*v%f$;djdtogYpy)6{lg
zs*h&#|8b*@EvY}51bco&A6uz`5&d2!g>I<kEO&wZkQ$~Rp<j6x;Zqz$4YyTKMai8C
zdNfbHw0ED<mnZ!^f~PxCi;zuqDniYye}cuXsfnwncA4}}M_IR2KisrbQ$Z>0d2BRO
zC3*;fAen3C5TtCelqOE>?5j#Wd+^gpy)yhQSY|fGzL+(IBz^eZcHm7BW)6{YYBA$*
z7nR*lA!~YQLDwwEo~z+x>`P{B21{6qMXQT!2oy%q;lErX-cD;A6Di#I7R_dEOO2Mv
z*Puo4a(F6yy|O9IxTf*FYo3lHQE~v+;76RnQpO24vYM~Fm`4LVKd~aLZIJ2K*ds>C
z)Tz5H84D_fjJ87eaP19OY!<``wyG#&xg4L_@6);$?=U2iqTFFe6<%TVG{9>p_r9R;
zra>rdh2r|py?4boDAs23>8sa$FkK$cb-PY8K9w`!_mMKdI7k(~&L*-e@7%pg`z*DQ
zeB^2uXj0K)Mnif&S-kE!h@2!@{K_rP;9VAeVS!86xuO*9$uAuE|Ewfc#Z2pRMe6nl
z6k?*JG-x@@ZT?}vb=gJHF??Kf5{Y8vhV;juRRS2CM?AVKgYGqvQnfY_Mnj+RzYdNG
zi?OPOeK!hxr5A|N^QkBh2bcKhJ3m_kc{m$O6`S4`cK@OoA7*i4hVLbjEz$)rO+cw9
z_cu|6a)f5Q{zq*~d=p^msvX&onWGuOilDL0K0%{OMPke9M^BJ7dD%Snl9LLEkybMz
z`_aD-?Rk*?6pZ}JQ9N`@zuCHYjegKI#aIyA!;3scd<znBi8xU+9=)#Ge~PEmKE?d;
zJ7flyzMn&{-&~O_sTyTIWPa<x-5@XQ8fIbVLAJuRDY5d#^@?AN#QfE_OC_y~JQ?#5
z3(h1CcPlL^M?7vHcF*dh`mFA4-*MTQ+9&bBMS^5fU7l9)z-u<=;+@>$^*ONI$B0+p
z)_>!Lx&1Ww`>)B_L(QGx9$>Rz5x79}`~zb!hl$hs1G+Z2gLuzstb2o1t+G|`OS<`9
z!p+7mkey)ISz!^?yzt2X<){o-&x2RwUr}o~zwTV8m1)~w{Zw3ARzcwLjeE<;rYy+j
z?X6o5{>CcF*cWA|#k>*X0;!qPOH+CjZwO1sb$(0ET5kL%G+*=c>8j`aQ!mIu>t?{K
zX)dW&!s;o9N5h>jJ2`}D=IH9)HtOHFoIVwE@kbq{H(S&ObA;T5o@oUeDU6QGH&~nL
zrKly7O+5=TZXEDZGiO8+l8k?80$IiZQOM`;=O)Pukcs@0$cZLsW-PKs6gk>H7^#*M
zKa;+Z68VuP#*<%ar%&|~$C70be!$KCzBUyTM=H$s59b2=oKR>U{IDs*#fu@D(ozq9
z9w`-?+e&!wlpqS5lxSRGB{TYvvBj@YUD;y1jYma#^m9l{q~LeI!G|RRS)12pD1$Y=
z0wKpUzN(7w`D4Fr3NdJmGc-}Q#U=_E8Rb1BwWPd4^UP$JP?AI1>(I@WgSh9zhmSF6
zJsajN7pZ%Ufso_5@=rzPigVKtvu|(Cgk3LU)00??$a+b3Uz$V7N~8TlG>_IkK0TI+
z?7i}Y(3RZe>r=SWUPSp(Lijy7wM~S<<r>$ALSsMilst~!N}dn3$!zKUblapj^}!4x
zQh3?*<%nw1o@RCIAn_vtTj{;V?aI7>7Zu<u3SpO&=94Q^a_=uZFliV@|0)YyN@Eny
z>zL)c&|<dzOypqniCKYH67`CeTWrE(Ged2U_~`-_AvgA{Y}Ss4eVmSYdp;`rvEhxb
z8B8viK?Qq#@&YDV1Yu2S6v|&>lwwT?x87UPOl;<_%B2^ty8p1oHoJ=L3E86%i7FNi
z@sEutY`T+=LOf^J9WK3wP83j|a(lCp=H}N-J|}iG1tgigu-*=Pijn}eVw`P@RB2Qr
zT~l$!t|Mlbarpt`@zw^G()~_`)eE8Iiuiu}D%+tgV|RZDwqJ^`yYYgEXH6vg=c7)g
zk7ZrzR@a)FTW&raOYQO}+#D}<A2y5|O~16m8ePgQg?7QomL@AV=}{e3z)Th4w<k@i
zS2b%pZmMJ#^fmI3&D@N)ni}370bHL`SurR*cp1C&z=&Gf!&SKw(SwWY{4|A@+{U{G
zav!*^wxZLKbH@!Rsk~}T9dhe?Rb6~}Nm^dhdT9=O>RAO-QhgjmafAzfpeb@ulZvd6
zdAMQ9zTsk)p3cPcH(n{!1W85ZY*iY>X!AbpkPJUMZ(PL~&ps}xEaNJsh=zcgF^3mn
z9;hp8uWTK%C%qP%zu%pA7lO3ut}K(hZ*K+7srsO?YNM_=NhCLzhDU0vj4=*e_Ot{A
zaWcGriX|bA_oZMLU&@rRwHD(JatqNX`nQl^>{sSIcgqOLDr^kNeblRwHd?H69^jWu
z+kInM(dil-PD7H%xy8=#-g!F8HD45&YBPt6aUV6wWnuEI!$jXigRE;mAKpf4`|wqc
zN=4H$65JKB{%^?B*<Z9UG$N%5g!BSxbXIGSrc~@S8ohcyYj%~)Y@oOWBi6NHFeVjA
zIg8<LjTbd-tLUY!K7Qkux|su-dbg=)99o0@zFqXlsmq7<`IdgO{Hx&Ap|GSqftN?b
z<;(68yOjIhBF=V`?@V~pnh$|Z$s-{}7a{+Hv`eZUhyqU$Z#^ckr`W*wM1kMiqr5HN
zK7BiKGI@%uGM+s3K%$T@n2vJ2OxjCsajG8WYKIR;h&)1v{*72vmE{S>af~l~_My|(
zp{`=wJt^N4u3Bx`rPz0jDlR2qEne~5qt|hC)D`JCXzUXS%lC_4P3U8If1mUDg9+|U
zpXpiOV02{FC3LA5dcE8~UKle>LN<i#;@&uD6$;f74BpfF$guW+PQxF3h*y|u7hU?J
zzNn;j`1$0!`bIw^x|SWi0k1E)1mN`{-;tD6;gSw~T6OuMNXOm4q6qY>-eYlW;E|!O
zN#{=D9^4&QZ>5yloCuxn4-*$P$ej`v5wktl)-@PQ>gcV7pDc7e(vA~8oO|eL)wedT
z9TS{jx+8u6Hpq0A3boo?jdr33XWdoI&G43+Chde=f@f{;97e~iY?Ics%|r)|OGp{f
z^ay%sC<l#EDOVgTBEQPbYEaG$w#)dv31p;5v2;~m0)*-(V%Ot3XC5^tYD9QP*}ZD}
z+0yZ%@d@5F!r}`7`PB~}h6~*0hs<4Rsw>l4-QL}jsS~t{9M!s|YyqCKx0>u~&kL@4
zN~|Tti@#o{@7ve3tjchW<{h}MDzU62nNzz1mAm@M+7qHdvO4#E<|@ir{L%%p5P>Hp
zvq!(250&<cz^{RA3iV%6#t|>zBH$uiz6|_>a2=s);9jc(@Qnm;Lcm1;_SK=1oTREK
za8-*GtDLC(T`5TwRTeoZHC1E;#P4fIM~7|411sVMGz2sRgku_jJDHGx71*Ct4}7)d
zU}ycmpTqhoF4Rw#{`aSrAV(*#v#luz@MN;I13{xs7Ahq_ca0wx0fB-80RbBdMGF-3
z*a|rgb`@vfjKryx;IU07L6yRarrekSgzz*dAMX?hdaiI9<Wi#k2_Mi%8nEiv%kxj7
zqx}!`zhSD5PjHAj+1Xke|31$F$3z2X14RMg;ob!3(Bvc*cx2c%Ut&${E&!-v_y8Ts
zW+v{x$a2m$PL{upoq$zL9mMUNK~8WCe@lu@q5;g$Y=LDwG@kqRKjC3pPy7|l-5d~F
zj0gdN49fZ?@xSo@XmWRX8>b^+vKF8UG&4u;d?su=MVBNvbb;NBw*d2aGWsXks{F_N
z&wWqX)De)Fn%WR#2cl+&qpd)+8RXbsFdxvC018T>aRw9)?Hy~%;U$2U22?XrD4MeN
z8MNaANT=PBPPYeflE~$H;6$<&a3Yxm3R$Rk4ib)$p^KD}^MHRy5Mbo7&(xpv&iD-C
zuc|5u2HSz*nY!&oooEG^Y60|e$L=M6(xDklFdTy&ryV_l0E2CS3WX2Ft+)Q03kSv~
z<mz7o7zhCtJJ7H=&>1k;RWdZ`Ls2VG%sJr031wM|+kddrJ+ZhUNZbzOWC?OMy=x|F
z?BHw(Hg&vbXKW3}>|HR;U?b2ae*-?yIem8j|K<d{OmA~Sj68v-$O2S2=w`O(d3H{c
zAh@;o+9w4`W#ADu0$}L=;FI6EP&kt0*Wt*J1H8q*nBc(knXn80fLW3F_?*)S&^Dl}
z@Jz@#Ojl!5`@h~!oNmRhTt*Lrfa;q7%o`}7DvC@vEG`@g#Lbpdv4QST5U9}5Sh`r4
zSlBAy+sA)z0-n|=paMOVwb99EV~=aF6xh^M&JJYxci_m=Y7ixJX&v`K%)pa_=9j1b
z8y~j)Y?)T3Z-EY75(kI~0%iZ+^RxMKfc>T>|7JZW^_B}7piCwpJTx6I|6k~^Z8tHb
z^+f<0xh(L3exzO{XVd>1@8HywXV>GOsR0#x0r)^;`(DDt!nQWhy3YXtKra2&UVO{X
z!#b%O+Q1u17Mn?=#enug`B!@xs)WUbqr%Xg#l#?>V(0^d6SN8rwJ@=;RUoop&bSDu
zunDLDJ)+7tpM!M<fh<Ah@MLJ2zDFtn$iM{10NouGw7>+z(ZNDE28$LjHUiKBnk)4g
zHW#)KH;rct%m5*90q*hPqCcsr?`-bxn6u!2oUc`P7w@+L-NtpG$AiuxeCXeD;DDn|
zN}Q1~Dque{FhPLMp=$i!a^QrM!}9imof<7bzkhlmLNyB~2RLLuLg8@Hn+OPbLZ`_+
zR}g<K=T6T@{!f1v*iUx%9Z82Tp!@NCNYE|Emg^j{lOY)HxL8~P_^SaUK`Vehe*6C?
zN$|nI!jWNaR^O8XAb$Ic`dt7P6}AM%a)ge;K;_m48V<AsrXuH3o&LIG@AP0e%1{+y
zi3kiQfDF(Q?1{s`!jZt=Eucp9SOTE;fTq5Yghhodft;rQ76l-|@e5^Ws*=n(R5y?@
zyk73PS*yh|U?=&t(=*Nwa_3Xw2+%j>VcZWqDNkUOhMvY=R)qnDUH<%{*DQ2E`F()$
zAKy{(Cvj+>4^;zMIynF3WOBM5kVy(mYym3V2UIu?|MVxl)`Q1}qXkmFKH)f^g+HJL
zG#bSeE*iEXCxeeeD{|ZBZ1kUCYw+sD$)IjLP>N{zz-9mL*v<=Pep>#Mak-#1(v5_d
z865dfUe*bXz7zu&4O{+`*VI9y<?_!*pLzG^X+ch2#0I@xR$L4R4M&fYcQiqh>0ZJk
z!<OUZ?LyGC(X9L&^0_xYoz~;zB{a}%lnVH4*mj@1vIBYoDNuC|`|L|?P8)sFpB;Ll
zXITRi4CfJ^bijk=X4k{!!WQDBpV6`V-k)@@<!tWn&EIpK`A$o6@@PEt{I0hBAG3fX
z&dI}$&^g$4|7#AgWjcAV3wj(r7(6?NvyM=nR_5e60O%pparAsD95GJ5Qh|mhPr-nm
YE<Z9bd?6sn0Ds}YHg(nlFkwRYA1a_=8~^|S

literal 0
HcmV?d00001

diff --git a/previous-exams/2021-midterm/m21/project/FilteringReporterPlugin.scala b/previous-exams/2021-midterm/m21/project/FilteringReporterPlugin.scala
new file mode 100644
index 0000000..2e4fd9a
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/project/FilteringReporterPlugin.scala
@@ -0,0 +1,31 @@
+package sbt // To access the private[sbt] compilerReporter key
+package filteringReporterPlugin
+
+import Keys._
+import ch.epfl.lamp._
+
+object FilteringReporterPlugin extends AutoPlugin {
+  override lazy val projectSettings = Seq(
+    // Turn off warning coming from scalameter that we cannot fix without changing scalameter
+    compilerReporter in (Compile, compile) ~= { reporter => new FilteringReporter(reporter) }
+  )
+}
+
+class FilteringReporter(reporter: xsbti.Reporter) extends xsbti.Reporter {
+
+  def reset(): Unit = reporter.reset()
+  def hasErrors: Boolean = reporter.hasErrors
+  def hasWarnings: Boolean = reporter.hasWarnings
+  def printSummary(): Unit = reporter.printSummary()
+  def problems: Array[xsbti.Problem] = reporter.problems
+
+  def log(problem: xsbti.Problem): Unit = {
+    if (!problem.message.contains("An existential type that came from a Scala-2 classfile cannot be"))
+      reporter.log(problem)
+  }
+
+  def comment(pos: xsbti.Position, msg: String): Unit =
+    reporter.comment(pos, msg)
+
+  override def toString = s"CollectingReporter($reporter)"
+}
diff --git a/previous-exams/2021-midterm/m21/project/MOOCSettings.scala b/previous-exams/2021-midterm/m21/project/MOOCSettings.scala
new file mode 100644
index 0000000..1c40443
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/project/MOOCSettings.scala
@@ -0,0 +1,49 @@
+package ch.epfl.lamp
+
+import sbt._
+import sbt.Keys._
+
+/**
+ * Coursera uses two versions of each assignment. They both have the same assignment key and part id but have
+ * different item ids.
+ *
+ * @param key Assignment key
+ * @param partId Assignment partId
+ * @param itemId Item id of the non premium version
+ * @param premiumItemId Item id of the premium version (`None` if the assignment is optional)
+ */
+case class CourseraId(key: String, partId: String, itemId: String, premiumItemId: Option[String])
+
+/**
+  * Settings shared by all assignments, reused in various tasks.
+  */
+object MOOCSettings extends AutoPlugin {
+
+  override def requires = super.requires && filteringReporterPlugin.FilteringReporterPlugin
+
+  object autoImport {
+    val course = SettingKey[String]("course")
+    val assignment = SettingKey[String]("assignment")
+    val options = SettingKey[Map[String, Map[String, String]]]("options")
+    val courseraId = settingKey[CourseraId]("Coursera-specific information identifying the assignment")
+    val testSuite = settingKey[String]("Fully qualified name of the test suite of this assignment")
+      .withRank(KeyRanks.Invisible)
+    // Convenient alias
+    type CourseraId = ch.epfl.lamp.CourseraId
+    val CourseraId = ch.epfl.lamp.CourseraId
+  }
+
+  import autoImport._
+
+  override val globalSettings: Seq[Def.Setting[_]] = Seq(
+    // supershell is verbose, buggy and useless.
+    useSuperShell := false
+  )
+
+  override val projectSettings: Seq[Def.Setting[_]] = Seq(
+    parallelExecution in Test := false,
+    // Report test result after each test instead of waiting for every test to finish
+    logBuffered in Test := false,
+    name := s"${course.value}-${assignment.value}"
+  )
+}
diff --git a/previous-exams/2021-midterm/m21/project/StudentTasks.scala b/previous-exams/2021-midterm/m21/project/StudentTasks.scala
new file mode 100644
index 0000000..c4669af
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/project/StudentTasks.scala
@@ -0,0 +1,303 @@
+package ch.epfl.lamp
+
+import sbt._
+import Keys._
+
+// import scalaj.http._
+import java.io.{File, FileInputStream, IOException}
+import org.apache.commons.codec.binary.Base64
+// import play.api.libs.json.{Json, JsObject, JsPath}
+import scala.util.{Failure, Success, Try}
+
+/**
+  * Provides tasks for submitting the assignment
+  */
+object StudentTasks extends AutoPlugin {
+
+  override def requires = super.requires && MOOCSettings
+
+  object autoImport {
+    val packageSourcesOnly = TaskKey[File]("packageSourcesOnly", "Package the sources of the project")
+    val packageBinWithoutResources = TaskKey[File]("packageBinWithoutResources", "Like packageBin, but without the resources")
+    val packageSubmissionZip = TaskKey[File]("packageSubmissionZip")
+    val packageSubmission = inputKey[Unit]("package solution as an archive file")
+
+    lazy val Grading = config("grading") extend(Runtime)
+  }
+
+
+  import autoImport._
+  import MOOCSettings.autoImport._
+
+  override lazy val projectSettings = Seq(
+    packageSubmissionSetting,
+    fork := true,
+    connectInput in run := true,
+    outputStrategy := Some(StdoutOutput),
+  ) ++
+    packageSubmissionZipSettings ++
+    inConfig(Grading)(Defaults.testSettings ++ Seq(
+      unmanagedJars += file("grading-tests.jar"),
+
+      definedTests := (definedTests in Test).value,
+      internalDependencyClasspath := (internalDependencyClasspath in Test).value
+    ))
+
+
+  /** **********************************************************
+    * SUBMITTING A SOLUTION TO COURSERA
+    */
+
+  val packageSubmissionZipSettings = Seq(
+    packageSubmissionZip := {
+      val submission = crossTarget.value / "submission.zip"
+      val sources = (packageSourcesOnly in Compile).value
+      val binaries = (packageBinWithoutResources in Compile).value
+      IO.zip(Seq(sources -> "sources.zip", binaries -> "binaries.jar"), submission, None)
+      submission
+    },
+    artifactClassifier in packageSourcesOnly := Some("sources"),
+    artifact in (Compile, packageBinWithoutResources) ~= (art => art.withName(art.name + "-without-resources"))
+  ) ++
+  inConfig(Compile)(
+    Defaults.packageTaskSettings(packageSourcesOnly, Defaults.sourceMappings) ++
+    Defaults.packageTaskSettings(packageBinWithoutResources, Def.task {
+      val relativePaths =
+        (unmanagedResources in Compile).value.flatMap(Path.relativeTo((unmanagedResourceDirectories in Compile).value)(_))
+      (mappings in (Compile, packageBin)).value.filterNot { case (_, path) => relativePaths.contains(path) }
+    })
+  )
+
+  val maxSubmitFileSize = {
+    val mb = 1024 * 1024
+    10 * mb
+  }
+
+  /** Check that the jar exists, isn't empty, isn't crazy big, and can be read
+    * If so, encode jar as base64 so we can send it to Coursera
+    */
+  def prepareJar(jar: File, s: TaskStreams): String = {
+    val errPrefix = "Error submitting assignment jar: "
+    val fileLength = jar.length()
+    if (!jar.exists()) {
+      s.log.error(errPrefix + "jar archive does not exist\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength == 0L) {
+      s.log.error(errPrefix + "jar archive is empty\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength > maxSubmitFileSize) {
+      s.log.error(errPrefix + "jar archive is too big. Allowed size: " +
+        maxSubmitFileSize + " bytes, found " + fileLength + " bytes.\n" +
+        jar.getAbsolutePath)
+      failSubmit()
+    } else {
+      val bytes = new Array[Byte](fileLength.toInt)
+      val sizeRead = try {
+        val is = new FileInputStream(jar)
+        val read = is.read(bytes)
+        is.close()
+        read
+      } catch {
+        case ex: IOException =>
+          s.log.error(errPrefix + "failed to read sources jar archive\n" + ex.toString)
+          failSubmit()
+      }
+      if (sizeRead != bytes.length) {
+        s.log.error(errPrefix + "failed to read the sources jar archive, size read: " + sizeRead)
+        failSubmit()
+      } else encodeBase64(bytes)
+    }
+  }
+
+  /** Task to package solution to a given file path */
+  lazy val packageSubmissionSetting = packageSubmission := {
+    val args: Seq[String] = Def.spaceDelimited("[path]").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val base64Jar = prepareJar(jar, s)
+
+    val path = args.headOption.getOrElse((baseDirectory.value / "submission.jar").absolutePath)
+    scala.tools.nsc.io.File(path).writeAll(base64Jar)
+  }
+
+/*
+  /** Task to submit a solution to coursera */
+  val submit = inputKey[Unit]("submit solution to Coursera")
+  lazy val submitSetting = submit := {
+    // Fail if scalafix linting does not pass.
+    scalafixLinting.value
+
+    val args: Seq[String] = Def.spaceDelimited("<arg>").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val assignmentDetails =
+      courseraId.?.value.getOrElse(throw new MessageOnlyException("This assignment can not be submitted to Coursera because the `courseraId` setting is undefined"))
+    val assignmentKey = assignmentDetails.key
+    val courseName =
+      course.value match {
+        case "capstone" => "scala-capstone"
+        case "bigdata"  => "scala-spark-big-data"
+        case other      => other
+      }
+
+    val partId = assignmentDetails.partId
+    val itemId = assignmentDetails.itemId
+    val premiumItemId = assignmentDetails.premiumItemId
+
+    val (email, secret) = args match {
+      case email :: secret :: Nil =>
+        (email, secret)
+      case _ =>
+        val inputErr =
+          s"""|Invalid input to `submit`. The required syntax for `submit` is:
+              |submit <email-address> <submit-token>
+              |
+              |The submit token is NOT YOUR LOGIN PASSWORD.
+              |It can be obtained from the assignment page:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId
+              |${
+                premiumItemId.fold("") { id =>
+                  s"""or (for premium learners):
+                     |https://www.coursera.org/learn/$courseName/programming/$id
+                   """.stripMargin
+                }
+              }
+          """.stripMargin
+        s.log.error(inputErr)
+        failSubmit()
+    }
+
+    val base64Jar = prepareJar(jar, s)
+    val json =
+      s"""|{
+          |   "assignmentKey":"$assignmentKey",
+          |   "submitterEmail":"$email",
+          |   "secret":"$secret",
+          |   "parts":{
+          |      "$partId":{
+          |         "output":"$base64Jar"
+          |      }
+          |   }
+          |}""".stripMargin
+
+    def postSubmission[T](data: String): Try[HttpResponse[String]] = {
+      val http = Http("https://www.coursera.org/api/onDemandProgrammingScriptSubmissions.v1")
+      val hs = List(
+        ("Cache-Control", "no-cache"),
+        ("Content-Type", "application/json")
+      )
+      s.log.info("Connecting to Coursera...")
+      val response = Try(http.postData(data)
+                         .headers(hs)
+                         .option(HttpOptions.connTimeout(10000)) // scalaj default timeout is only 100ms, changing that to 10s
+                         .asString) // kick off HTTP POST
+      response
+    }
+
+    val connectMsg =
+      s"""|Attempting to submit "${assignment.value}" assignment in "$courseName" course
+          |Using:
+          |- email: $email
+          |- submit token: $secret""".stripMargin
+    s.log.info(connectMsg)
+
+    def reportCourseraResponse(response: HttpResponse[String]): Unit = {
+      val code = response.code
+      val respBody = response.body
+
+       /* Sample JSON response from Coursera
+      {
+        "message": "Invalid email or token.",
+        "details": {
+          "learnerMessage": "Invalid email or token."
+        }
+      }
+      */
+
+      // Success, Coursera responds with 2xx HTTP status code
+      if (response.is2xx) {
+        val successfulSubmitMsg =
+          s"""|Successfully connected to Coursera. (Status $code)
+              |
+                |Assignment submitted successfully!
+              |
+                |You can see how you scored by going to:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId/
+              |${
+            premiumItemId.fold("") { id =>
+              s"""or (for premium learners):
+                 |https://www.coursera.org/learn/$courseName/programming/$id
+                       """.stripMargin
+            }
+          }
+              |and clicking on "My Submission".""".stripMargin
+        s.log.info(successfulSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 4xx HTTP status code (client-side failure)
+      else if (response.is4xx) {
+        val result = Try(Json.parse(respBody)).toOption
+        val learnerMsg = result match {
+          case Some(resp: JsObject) =>
+            (JsPath \ "details" \ "learnerMessage").read[String].reads(resp).get
+          case Some(x) => // shouldn't happen
+            "Could not parse Coursera's response:\n" + x
+          case None =>
+            "Could not parse Coursera's response:\n" + respBody
+        }
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |There was something wrong while attempting to submit.
+              |Coursera says:
+              |$learnerMsg (Status $code)""".stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 5xx HTTP status code (server-side failure)
+      else if (response.is5xx) {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera seems to be unavailable at the moment (Status $code)
+              |Check https://status.coursera.org/ and try again in a few minutes.
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera repsonds with an unexpected status code
+      else {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera replied with an unexpected code (Status $code)
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+    }
+
+    // kick it all off, actually make request
+    postSubmission(json) match {
+      case Success(resp) => reportCourseraResponse(resp)
+      case Failure(e) =>
+        val failedConnectMsg =
+          s"""|Connection to Coursera failed.
+              |There was something wrong while attempting to connect to Coursera.
+              |Check your internet connection.
+              |${e.toString}""".stripMargin
+        s.log.error(failedConnectMsg)
+    }
+
+   }
+*/
+
+  def failSubmit(): Nothing = {
+    sys.error("Submission failed")
+  }
+
+  /**
+    * *****************
+    * DEALING WITH JARS
+    */
+  def encodeBase64(bytes: Array[Byte]): String =
+    new String(Base64.encodeBase64(bytes))
+}
diff --git a/previous-exams/2021-midterm/m21/project/build.properties b/previous-exams/2021-midterm/m21/project/build.properties
new file mode 100644
index 0000000..0b2e09c
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/project/build.properties
@@ -0,0 +1 @@
+sbt.version=1.4.7
diff --git a/previous-exams/2021-midterm/m21/project/buildSettings.sbt b/previous-exams/2021-midterm/m21/project/buildSettings.sbt
new file mode 100644
index 0000000..8fac702
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/project/buildSettings.sbt
@@ -0,0 +1,5 @@
+// Used for Coursera submission (StudentPlugin)
+// libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.4.2"
+// libraryDependencies += "com.typesafe.play" %% "play-json" % "2.7.4"
+// Used for Base64 (StudentPlugin)
+libraryDependencies += "commons-codec" % "commons-codec" % "1.10"
diff --git a/previous-exams/2021-midterm/m21/project/plugins.sbt b/previous-exams/2021-midterm/m21/project/plugins.sbt
new file mode 100644
index 0000000..021c019
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/project/plugins.sbt
@@ -0,0 +1,2 @@
+// addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")
+addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.3")
diff --git a/previous-exams/2021-midterm/m21/src/main/scala/m21/MultiWriterSeqCount.scala b/previous-exams/2021-midterm/m21/src/main/scala/m21/MultiWriterSeqCount.scala
new file mode 100644
index 0000000..73a81fb
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/src/main/scala/m21/MultiWriterSeqCount.scala
@@ -0,0 +1,66 @@
+package m21
+
+import instrumentation._
+
+import scala.annotation.tailrec
+
+/** Multi-writer, multi-reader data structure containing a pair of integers. */
+class MultiWriterSeqCount extends Monitor:
+  /** Do not directly use this variable, use `generation`, `setGeneration` and
+   *  `compareAndSetGeneration` instead.
+   */
+  protected val myGeneration: AbstractAtomicVariable[Int] = new AtomicVariable(1)
+  protected def generation: Int = myGeneration.get
+  protected def setGeneration(newGeneration: Int): Unit =
+    myGeneration.set(newGeneration)
+  protected def compareAndSetGeneration(expected: Int, newValue: Int): Boolean =
+    myGeneration.compareAndSet(expected, newValue)
+
+  /** Do not directly use this variable, use `x` and `setX` instead. */
+  protected var myX: Int = 0
+  protected def x: Int = myX
+  protected def setX(newX: Int): Unit =
+    myX = newX
+
+  /** Do not directly use this variable, use `y` and `setY` instead. */
+  protected var myY: Int = 0
+  protected def y: Int = myY
+  protected def setY(newY: Int): Unit =
+    myY = newY
+
+  /** Write new values into this data structure.
+   *  This method is always safe to call.
+   *  The implementation of this method is not allowed to call `synchronized`.
+   */
+
+  @tailrec
+  final def write(newX: Int, newY: Int): Unit =
+    val old = generation
+    if old % 2 != 1 then
+      write(newX, newY)
+    else
+      if !compareAndSetGeneration(old, old + 1) then
+        write(newX, newY)
+      else
+        setX(newX)
+        setY(newY)
+        setGeneration(old + 2)
+
+  /** Copy the values previously written into this data structure into a tuple.
+   *  This method is always safe to call.
+   *  The implementation of this method is not allowed to call `synchronized`.
+   */
+
+  @tailrec
+  final def copy(): (Int, Int) =
+    val old = generation
+    if old % 2 != 1 then
+      copy()
+    else
+      val result = (x, y)
+      if generation != old then
+        copy()
+      else
+        result
+
+end MultiWriterSeqCount
diff --git a/previous-exams/2021-midterm/m21/src/main/scala/m21/SeqCount.scala b/previous-exams/2021-midterm/m21/src/main/scala/m21/SeqCount.scala
new file mode 100644
index 0000000..c17f45e
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/src/main/scala/m21/SeqCount.scala
@@ -0,0 +1,53 @@
+package m21
+
+import instrumentation._
+
+import scala.annotation.tailrec
+
+/** Single-writer, multi-reader data structure containing a pair of integers. */
+class SeqCount extends Monitor:
+  /** Do not directly use this variable, use `generation` and `setGeneration` instead. */
+  @volatile protected var myGeneration: Int = 1
+  protected def generation: Int = myGeneration
+  protected def setGeneration(newGeneration: Int): Unit =
+    myGeneration = newGeneration
+
+  /** Do not directly use this variable, use `x` and `setX` instead. */
+  protected var myX: Int = 0
+  protected def x: Int = myX
+  protected def setX(newX: Int): Unit =
+    myX = newX
+
+  /** Do not directly use this variable, use `y` and `setY` instead. */
+  protected var myY: Int = 0
+  protected def y: Int = myY
+  protected def setY(newY: Int): Unit =
+    myY = newY
+
+  /** Write new values into this data structure.
+   *  This method must only be called from one thread at a time.
+   */
+  final def write(newX: Int, newY: Int): Unit =
+    setGeneration(generation + 1)
+    setX(newX)
+    setY(newY)
+    setGeneration(generation + 1)
+
+  /** Copy the values previously written into this data structure into a tuple.
+   *  This method is always safe to call.
+   *  The implementation of this method is not allowed to call `synchronized`.
+   */
+
+  @tailrec
+  final def copy(): (Int, Int) =
+    val old = generation
+    if old % 2 != 1 then
+      copy()
+    else
+      val result = (x, y)
+      if generation != old then
+        copy()
+      else
+        result
+
+end SeqCount
diff --git a/previous-exams/2021-midterm/m21/src/main/scala/m21/instrumentation/AtomicVariable.scala b/previous-exams/2021-midterm/m21/src/main/scala/m21/instrumentation/AtomicVariable.scala
new file mode 100644
index 0000000..5a5d2f4
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/src/main/scala/m21/instrumentation/AtomicVariable.scala
@@ -0,0 +1,28 @@
+package m21.instrumentation
+
+import java.util.concurrent.atomic._
+
+abstract class AbstractAtomicVariable[T] {
+  def get: T
+  def set(value: T): Unit
+  def compareAndSet(expect: T, newval: T) : Boolean
+}
+
+class AtomicVariable[T](initial: T) extends AbstractAtomicVariable[T] {
+
+  private val atomic = new AtomicReference[T](initial)
+
+  override def get: T = atomic.get()
+
+  override def set(value: T): Unit = atomic.set(value)
+
+  override def compareAndSet(expected: T, newValue: T): Boolean = {
+    val current = atomic.get
+    if (current == expected) {
+      atomic.compareAndSet(current, newValue)
+    }
+    else {
+      false
+    }
+  }
+}
diff --git a/previous-exams/2021-midterm/m21/src/main/scala/m21/instrumentation/Monitor.scala b/previous-exams/2021-midterm/m21/src/main/scala/m21/instrumentation/Monitor.scala
new file mode 100644
index 0000000..0655100
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/src/main/scala/m21/instrumentation/Monitor.scala
@@ -0,0 +1,23 @@
+package m21.instrumentation
+
+class Dummy
+
+trait Monitor {
+  implicit val dummy: Dummy = new Dummy
+
+  def wait()(implicit i: Dummy) = waitDefault()
+
+  def synchronized[T](e: => T)(implicit i: Dummy) = synchronizedDefault(e)
+
+  def notify()(implicit i: Dummy) = notifyDefault()
+
+  def notifyAll()(implicit i: Dummy) = notifyAllDefault()
+
+  private val lock = new AnyRef
+
+  // Can be overriden.
+  def waitDefault(): Unit = lock.wait()
+  def synchronizedDefault[T](toExecute: =>T): T = lock.synchronized(toExecute)
+  def notifyDefault(): Unit = lock.notify()
+  def notifyAllDefault(): Unit = lock.notifyAll()
+}
diff --git a/previous-exams/2021-midterm/m21/src/test/scala/m21/TestSuite.scala b/previous-exams/2021-midterm/m21/src/test/scala/m21/TestSuite.scala
new file mode 100644
index 0000000..5038092
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/src/test/scala/m21/TestSuite.scala
@@ -0,0 +1,122 @@
+package m21
+
+import scala.concurrent._
+import scala.concurrent.duration._
+import scala.collection.mutable.HashMap
+import scala.util.Random
+import instrumentation._
+import instrumentation.TestHelper._
+import instrumentation.TestUtils._
+
+enum ThreadResult:
+  case WriteError(error: String)
+  case WriteSuccess
+  case Read(result: (Int, Int))
+import ThreadResult._
+
+class M21Suite extends munit.FunSuite:
+  /** If at least one thread resulted in an error,
+   *  return `(false, errorMessage)` otherwise return `(true, "")`.
+   */
+  def processResults(results: List[ThreadResult]): (Boolean, String) =
+    val success = (true, "")
+    results.foldLeft(success) {
+      case (acc @ (false, _), _) =>
+        // Report the first error found
+        acc
+      case (_, WriteError(error)) =>
+        (false, error)
+      case (_, Read((x, y))) if x + 1 != y =>
+        (false, s"Read ($x, $y) but expected y to be ${x + 1}")
+      case (_, _: Read | WriteSuccess) =>
+        success
+    }
+
+  def randomList(length: Int): List[Int] =
+    List.fill(length)(Random.nextInt)
+
+  test("SeqCount: single-threaded write and copy (1 pts)") {
+    val sc = new SeqCount
+    randomList(100).lazyZip(randomList(100)).foreach { (x, y) =>
+      sc.write(x, y)
+      assertEquals(sc.copy(), (x, y))
+    }
+  }
+
+  test("SeqCount: one write thread, two copy threads (4 pts)") {
+    testManySchedules(3, sched =>
+      val sc = new SchedulableSeqCount(sched)
+      // Invariant in this test: y == x + 1
+      sc.write(0, 1)
+
+      val randomValues = randomList(length = 5)
+
+      def writeThread(): ThreadResult =
+        randomValues.foldLeft(WriteSuccess) {
+          case (res: WriteError, _) =>
+            // Report the first error found
+            res
+          case (_, i) =>
+            sc.write(i, i + 1)
+            val writtenValues = (i, i + 1)
+            val readBack = sc.copy()
+            if writtenValues != readBack then
+              WriteError(s"Wrote $writtenValues but read back $readBack")
+            else
+              WriteSuccess
+        }
+
+      def copyThread(): ThreadResult =
+        Read(sc.copy())
+
+      val threads = List(
+        () => writeThread(),
+        () => copyThread(),
+        () => copyThread()
+      )
+
+      (threads, results => processResults(results.asInstanceOf[List[ThreadResult]]))
+    )
+  }
+
+  test("MultiWriterSeqCount: single-threaded write and copy (1 pts)") {
+    val sc = new MultiWriterSeqCount
+    randomList(100).lazyZip(randomList(100)).foreach { (x, y) =>
+      sc.write(x, y)
+      assertEquals(sc.copy(), (x, y))
+    }
+  }
+
+  test("MultiWriterSeqCount: two write threads, two copy threads (4 pts)") {
+    testManySchedules(4, sched =>
+      val msc = new SchedulableMultiWriterSeqCount(sched)
+      // Invariant in this test: y == x + 1
+      msc.write(0, 1)
+
+      val randomValues = randomList(length = 5)
+
+      def writeThread(): ThreadResult =
+        randomValues.foreach(i => msc.write(i, i + 1))
+        // Unlke in the SeqCount test, we do not verify that we can read back
+        // the values we wrote, because the other writer thread might have
+        // overwritten them already.
+        WriteSuccess
+
+      def copyThread(): ThreadResult =
+        Read(msc.copy())
+
+      val threads = List(
+        () => writeThread(),
+        () => writeThread(),
+        () => copyThread(),
+        () => copyThread()
+      )
+
+      (threads, results => processResults(results.asInstanceOf[List[ThreadResult]]))
+    )
+  }
+
+  import scala.concurrent.duration._
+  override val munitTimeout = 200.seconds
+end M21Suite
+
diff --git a/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/MockedMonitor.scala b/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/MockedMonitor.scala
new file mode 100644
index 0000000..f7629e1
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/MockedMonitor.scala
@@ -0,0 +1,72 @@
+package m21.instrumentation
+
+trait MockedMonitor extends Monitor {
+  def scheduler: Scheduler
+  
+  // Can be overriden.
+  override def waitDefault() = {
+    scheduler.log("wait")
+    scheduler updateThreadState Wait(this, scheduler.threadLocks.tail)
+  }
+  override def synchronizedDefault[T](toExecute: =>T): T = {
+    scheduler.log("synchronized check") 
+    val prevLocks = scheduler.threadLocks
+    scheduler updateThreadState Sync(this, prevLocks) // If this belongs to prevLocks, should just continue.
+    scheduler.log("synchronized -> enter")
+    try {
+      toExecute
+    } finally {
+      scheduler updateThreadState Running(prevLocks)
+      scheduler.log("synchronized -> out")
+    }    
+  }
+  override def notifyDefault() = {
+    scheduler mapOtherStates {
+      state => state match {
+        case Wait(lockToAquire, locks) if lockToAquire == this => SyncUnique(this, state.locks)
+        case e => e
+      }
+    }
+    scheduler.log("notify")
+  }
+  override def notifyAllDefault() = {
+    scheduler mapOtherStates {
+      state => state match {
+        case Wait(lockToAquire, locks) if lockToAquire == this => Sync(this, state.locks)
+        case SyncUnique(lockToAquire, locks) if lockToAquire == this => Sync(this, state.locks)
+        case e => e
+      }
+    }
+    scheduler.log("notifyAll")
+  }
+}
+
+trait LockFreeMonitor extends Monitor {
+  override def waitDefault() = {
+    throw new Exception("Please use lock-free structures and do not use wait()")
+  }
+  override def synchronizedDefault[T](toExecute: =>T): T = {
+    throw new Exception("Please use lock-free structures and do not use synchronized()")
+  }
+  override def notifyDefault() = {
+    throw new Exception("Please use lock-free structures and do not use notify()")
+  }
+  override def notifyAllDefault() = {
+    throw new Exception("Please use lock-free structures and do not use notifyAll()")
+  }
+}
+
+
+abstract class ThreadState {
+  def locks: Seq[AnyRef]
+}
+trait CanContinueIfAcquiresLock extends ThreadState {
+  def lockToAquire: AnyRef
+}
+case object Start extends ThreadState { def locks: Seq[AnyRef] = Seq.empty }
+case object End extends ThreadState { def locks: Seq[AnyRef] = Seq.empty }
+case class Wait(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState
+case class SyncUnique(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState with CanContinueIfAcquiresLock
+case class Sync(lockToAquire: AnyRef, locks: Seq[AnyRef]) extends ThreadState with CanContinueIfAcquiresLock
+case class Running(locks: Seq[AnyRef]) extends ThreadState
+case class VariableReadWrite(locks: Seq[AnyRef]) extends ThreadState
diff --git a/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/Scheduler.scala b/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/Scheduler.scala
new file mode 100644
index 0000000..cef9ac5
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/Scheduler.scala
@@ -0,0 +1,304 @@
+package m21.instrumentation
+
+import java.util.concurrent._;
+import scala.concurrent.duration._
+import scala.collection.mutable._
+import Stats._
+
+import java.util.concurrent.atomic.AtomicInteger
+
+sealed abstract class Result
+case class RetVal(rets: List[Any]) extends Result
+case class Except(msg: String, stackTrace: Array[StackTraceElement]) extends Result
+case class Timeout(msg: String) extends Result
+
+/**
+ * A class that maintains schedule and a set of thread ids.
+ * The schedules are advanced after an operation of a SchedulableBuffer is performed.
+ * Note: the real schedule that is executed may deviate from the input schedule
+ * due to the adjustments that had to be made for locks
+ */
+class Scheduler(sched: List[Int]) {
+  val maxOps = 500 // a limit on the maximum number of operations the code is allowed to perform
+
+  private var schedule = sched
+  private var numThreads = 0
+  private val realToFakeThreadId = Map[Long, Int]()
+  private val opLog = ListBuffer[String]() // a mutable list (used for efficient concat)
+  private val threadStates = Map[Int, ThreadState]()
+
+  /**
+   * Runs a set of operations in parallel as per the schedule.
+   * Each operation may consist of many primitive operations like reads or writes
+   * to shared data structure each of which should be executed using the function `exec`.
+   * @timeout in milliseconds
+   * @return true - all threads completed on time,  false -some tests timed out.
+   */
+  def runInParallel(timeout: Long, ops: List[() => Any]): Result = {
+    numThreads = ops.length
+    val threadRes = Array.fill(numThreads) { None: Any }
+    var exception: Option[Except] = None
+    val syncObject = new Object()
+    var completed = new AtomicInteger(0)
+    // create threads
+    val threads = ops.zipWithIndex.map {
+      case (op, i) =>
+        new Thread(new Runnable() {
+          def run(): Unit = {
+            val fakeId = i + 1
+            setThreadId(fakeId)
+            try {
+              updateThreadState(Start)
+              val res = op()
+              updateThreadState(End)
+              threadRes(i) = res
+              // notify the master thread if all threads have completed
+              if (completed.incrementAndGet() == ops.length) {
+                syncObject.synchronized { syncObject.notifyAll() }
+              }
+            } catch {
+              case e: Throwable if exception != None => // do nothing here and silently fail
+              case e: Throwable =>
+                log(s"throw ${e.toString}")
+                exception = Some(Except(s"Thread $fakeId crashed on the following schedule: \n" + opLog.mkString("\n"),
+                    e.getStackTrace))
+                syncObject.synchronized { syncObject.notifyAll() }
+              //println(s"$fakeId: ${e.toString}")
+              //Runtime.getRuntime().halt(0) //exit the JVM and all running threads (no other way to kill other threads)
+            }
+          }
+        })
+    }
+    // start all threads
+    threads.foreach(_.start())
+    // wait for all threads to complete, or for an exception to be thrown, or for the time out to expire
+    var remTime = timeout
+    syncObject.synchronized {
+      timed { if(completed.get() != ops.length) syncObject.wait(timeout) } { time => remTime -= time }
+    }
+    if (exception.isDefined) {
+      exception.get
+    } else if (remTime <= 1) { // timeout ? using 1 instead of zero to allow for some errors
+      Timeout(opLog.mkString("\n"))
+    } else {
+      // every thing executed normally
+      RetVal(threadRes.toList)
+    }
+  }
+
+  // Updates the state of the current thread
+  def updateThreadState(state: ThreadState): Unit = {
+    val tid = threadId
+    synchronized {
+      threadStates(tid) = state
+    }
+    state match {
+      case Sync(lockToAquire, locks) =>
+        if (locks.indexOf(lockToAquire) < 0) waitForTurn else {
+          // Re-aqcuiring the same lock
+          updateThreadState(Running(lockToAquire +: locks))
+        }
+      case Start      => waitStart()
+      case End        => removeFromSchedule(tid)
+      case Running(_) =>
+      case _          => waitForTurn // Wait, SyncUnique, VariableReadWrite
+    }
+  }
+
+  def waitStart(): Unit = {
+    //while (threadStates.size < numThreads) {
+    //Thread.sleep(1)
+    //}
+    synchronized {
+      if (threadStates.size < numThreads) {
+        wait()
+      } else {
+        notifyAll()
+      }
+    }
+  }
+
+  def threadLocks = {
+    synchronized {
+      threadStates(threadId).locks
+    }
+  }
+
+  def threadState = {
+    synchronized {
+      threadStates(threadId)
+    }
+  }
+
+  def mapOtherStates(f: ThreadState => ThreadState) = {
+    val exception = threadId
+    synchronized {
+      for (k <- threadStates.keys if k != exception) {
+        threadStates(k) = f(threadStates(k))
+      }
+    }
+  }
+
+  def log(str: String) = {
+    if((realToFakeThreadId contains Thread.currentThread().getId())) {
+      val space = (" " * ((threadId - 1) * 2))
+      val s = space + threadId + ":" + "\n".r.replaceAllIn(str, "\n" + space + "  ")
+      opLog += s
+    }
+  }
+
+  /**
+   * Executes a read or write operation to a global data structure as per the given schedule
+   * @param msg a message corresponding to the operation that will be logged
+   */
+  def exec[T](primop: => T)(msg: => String, postMsg: => Option[T => String] = None): T = {
+    if(! (realToFakeThreadId contains Thread.currentThread().getId())) {
+      primop
+    } else {
+      updateThreadState(VariableReadWrite(threadLocks))
+      val m = msg
+      if(m != "") log(m)
+      if (opLog.size > maxOps)
+        throw new Exception(s"Total number of reads/writes performed by threads exceed $maxOps. A possible deadlock!")
+      val res = primop
+      postMsg match {
+        case Some(m) => log(m(res))
+        case None =>
+      }
+      res
+    }
+  }
+
+  private def setThreadId(fakeId: Int) = synchronized {
+    realToFakeThreadId(Thread.currentThread.getId) = fakeId
+  }
+
+  def threadId =
+    try {
+      realToFakeThreadId(Thread.currentThread().getId())
+    } catch {
+    case e: NoSuchElementException =>
+      throw new Exception("You are accessing shared variables in the constructor. This is not allowed. The variables are already initialized!")
+    }
+
+  private def isTurn(tid: Int) = synchronized {
+    (!schedule.isEmpty && schedule.head != tid)
+  }
+
+  def canProceed(): Boolean = {
+    val tid = threadId
+    canContinue match {
+      case Some((i, state)) if i == tid =>
+        //println(s"$tid: Runs ! Was in state $state")
+        canContinue = None
+        state match {
+          case Sync(lockToAquire, locks) => updateThreadState(Running(lockToAquire +: locks))
+          case SyncUnique(lockToAquire, locks) =>
+            mapOtherStates {
+              _ match {
+                case SyncUnique(lockToAquire2, locks2) if lockToAquire2 == lockToAquire => Wait(lockToAquire2, locks2)
+                case e => e
+              }
+            }
+            updateThreadState(Running(lockToAquire +: locks))
+          case VariableReadWrite(locks) => updateThreadState(Running(locks))
+        }
+        true
+      case Some((i, state)) =>
+        //println(s"$tid: not my turn but $i !")
+        false
+      case None =>
+        false
+    }
+  }
+
+  var threadPreference = 0 // In the case the schedule is over, which thread should have the preference to execute.
+
+  /** returns true if the thread can continue to execute, and false otherwise */
+  def decide(): Option[(Int, ThreadState)] = {
+    if (!threadStates.isEmpty) { // The last thread who enters the decision loop takes the decision.
+      //println(s"$threadId: I'm taking a decision")
+      if (threadStates.values.forall { case e: Wait => true case _ => false }) {
+        val waiting = threadStates.keys.map(_.toString).mkString(", ")
+        val s = if (threadStates.size > 1) "s" else ""
+        val are = if (threadStates.size > 1) "are" else "is"
+        throw new Exception(s"Deadlock: Thread$s $waiting $are waiting but all others have ended and cannot notify them.")
+      } else {
+        // Threads can be in Wait, Sync, SyncUnique, and VariableReadWrite mode.
+        // Let's determine which ones can continue.
+        val notFree = threadStates.collect { case (id, state) => state.locks }.flatten.toSet
+        val threadsNotBlocked = threadStates.toSeq.filter {
+          case (id, v: VariableReadWrite)         => true
+          case (id, v: CanContinueIfAcquiresLock) => !notFree(v.lockToAquire) || (v.locks contains v.lockToAquire)
+          case _                                  => false
+        }
+        if (threadsNotBlocked.isEmpty) {
+          val waiting = threadStates.keys.map(_.toString).mkString(", ")
+          val s = if (threadStates.size > 1) "s" else ""
+          val are = if (threadStates.size > 1) "are" else "is"
+          val whoHasLock = threadStates.toSeq.flatMap { case (id, state) => state.locks.map(lock => (lock, id)) }.toMap
+          val reason = threadStates.collect {
+            case (id, state: CanContinueIfAcquiresLock) if !notFree(state.lockToAquire) =>
+              s"Thread $id is waiting on lock ${state.lockToAquire} held by thread ${whoHasLock(state.lockToAquire)}"
+          }.mkString("\n")
+          throw new Exception(s"Deadlock: Thread$s $waiting are interlocked. Indeed:\n$reason")
+        } else if (threadsNotBlocked.size == 1) { // Do not consume the schedule if only one thread can execute.
+          Some(threadsNotBlocked(0))
+        } else {
+          val next = schedule.indexWhere(t => threadsNotBlocked.exists { case (id, state) => id == t })
+          if (next != -1) {
+            //println(s"$threadId: schedule is $schedule, next chosen is ${schedule(next)}")
+            val chosenOne = schedule(next) // TODO: Make schedule a mutable list.
+            schedule = schedule.take(next) ++ schedule.drop(next + 1)
+            Some((chosenOne, threadStates(chosenOne)))
+          } else {
+            threadPreference = (threadPreference + 1) % threadsNotBlocked.size
+            val chosenOne = threadsNotBlocked(threadPreference) // Maybe another strategy
+            Some(chosenOne)
+            //threadsNotBlocked.indexOf(threadId) >= 0
+            /*
+            val tnb = threadsNotBlocked.map(_._1).mkString(",")
+            val s = if (schedule.isEmpty) "empty" else schedule.mkString(",")
+            val only = if (schedule.isEmpty) "" else " only"
+            throw new Exception(s"The schedule is $s but$only threads ${tnb} can continue")*/
+          }
+        }
+      }
+    } else canContinue
+  }
+
+  /**
+   * This will be called before a schedulable operation begins.
+   * This should not use synchronized
+   */
+  var numThreadsWaiting = new AtomicInteger(0)
+  //var waitingForDecision = Map[Int, Option[Int]]() // Mapping from thread ids to a number indicating who is going to make the choice.
+  var canContinue: Option[(Int, ThreadState)] = None // The result of the decision thread Id of the thread authorized to continue.
+  private def waitForTurn = {
+    synchronized {
+      if (numThreadsWaiting.incrementAndGet() == threadStates.size) {
+        canContinue = decide()
+        notifyAll()
+      }
+      //waitingForDecision(threadId) = Some(numThreadsWaiting)
+      //println(s"$threadId Entering waiting with ticket number $numThreadsWaiting/${waitingForDecision.size}")
+      while (!canProceed()) wait()
+    }
+    numThreadsWaiting.decrementAndGet()
+  }
+
+  /**
+   * To be invoked when a thread is about to complete
+   */
+  private def removeFromSchedule(fakeid: Int) = synchronized {
+    //println(s"$fakeid: I'm taking a decision because I finished")
+    schedule = schedule.filterNot(_ == fakeid)
+    threadStates -= fakeid
+    if (numThreadsWaiting.get() == threadStates.size) {
+      canContinue = decide()
+      notifyAll()
+    }
+  }
+
+  def getOperationLog() = opLog
+}
diff --git a/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/Stats.scala b/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/Stats.scala
new file mode 100644
index 0000000..6eb7239
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/Stats.scala
@@ -0,0 +1,23 @@
+/* Copyright 2009-2015 EPFL, Lausanne */
+package m21.instrumentation
+
+import java.lang.management._
+
+/**
+ * A collection of methods that can be used to collect run-time statistics about Leon programs.
+ * This is mostly used to test the resources properties of Leon programs
+ */
+object Stats {
+  def timed[T](code: => T)(cont: Long => Unit): T = {
+    var t1 = System.currentTimeMillis()
+    val r = code
+    cont((System.currentTimeMillis() - t1))
+    r
+  }
+
+  def withTime[T](code: => T): (T, Long) = {
+    var t1 = System.currentTimeMillis()
+    val r = code
+    (r, (System.currentTimeMillis() - t1))
+  }
+}
diff --git a/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/TestHelper.scala b/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/TestHelper.scala
new file mode 100644
index 0000000..5be75d6
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/TestHelper.scala
@@ -0,0 +1,124 @@
+package m21.instrumentation
+
+import scala.util.Random
+import scala.collection.mutable.{Map => MutableMap}
+
+import Stats._
+
+object TestHelper {
+  val noOfSchedules = 10000 // set this to 100k during deployment
+  val readWritesPerThread = 20 // maximum number of read/writes possible in one thread
+  val contextSwitchBound = 10
+  val testTimeout = 150 // the total time out for a test in seconds
+  val schedTimeout = 15 // the total time out for execution of a schedule in secs
+
+  // Helpers
+  /*def testManySchedules(op1: => Any): Unit = testManySchedules(List(() => op1))
+  def testManySchedules(op1: => Any, op2: => Any): Unit = testManySchedules(List(() => op1, () => op2))
+  def testManySchedules(op1: => Any, op2: => Any, op3: => Any): Unit = testManySchedules(List(() => op1, () => op2, () => op3))
+  def testManySchedules(op1: => Any, op2: => Any, op3: => Any, op4: => Any): Unit = testManySchedules(List(() => op1, () => op2, () => op3, () => op4))*/
+
+  def testSequential[T](ops: Scheduler => Any)(assertions: T => (Boolean, String)) =
+    testManySchedules(1,
+      (sched: Scheduler) => {
+        (List(() => ops(sched)),
+         (res: List[Any]) => assertions(res.head.asInstanceOf[T]))
+      })
+
+  /**
+   * @numThreads number of threads
+   * @ops operations to be executed, one per thread
+   * @assertion as condition that will executed after all threads have completed (without exceptions)
+   * 					 the arguments are the results of the threads
+   */
+  def testManySchedules(numThreads: Int,
+      ops: Scheduler =>
+        (List[() => Any], // Threads
+         List[Any] => (Boolean, String)) // Assertion
+      ) = {
+    var timeout = testTimeout * 1000L
+    val threadIds = (1 to numThreads)
+    //(1 to scheduleLength).flatMap(_ => threadIds).toList.permutations.take(noOfSchedules).foreach {
+    val schedules = (new ScheduleGenerator(numThreads)).schedules()
+    var schedsExplored = 0
+    schedules.takeWhile(_ => schedsExplored <= noOfSchedules && timeout > 0).foreach {
+      //case _ if timeout <= 0 => // break
+      case schedule =>
+        schedsExplored += 1
+        val schedr = new Scheduler(schedule)
+        //println("Exploring Sched: "+schedule)
+        val (threadOps, assertion) = ops(schedr)
+        if (threadOps.size != numThreads)
+          throw new IllegalStateException(s"Number of threads: $numThreads, do not match operations of threads: $threadOps")
+        timed { schedr.runInParallel(schedTimeout * 1000, threadOps) } { t => timeout -= t } match {
+          case Timeout(msg) =>
+            throw new java.lang.AssertionError("assertion failed\n"+"The schedule took too long to complete. A possible deadlock! \n"+msg)
+          case Except(msg, stkTrace) =>
+            val traceStr = "Thread Stack trace: \n"+stkTrace.map(" at "+_.toString).mkString("\n")
+            throw new java.lang.AssertionError("assertion failed\n"+msg+"\n"+traceStr)
+          case RetVal(threadRes) =>
+            // check the assertion
+            val (success, custom_msg) = assertion(threadRes)
+            if (!success) {
+              val msg = "The following schedule resulted in wrong results: \n" + custom_msg + "\n" + schedr.getOperationLog().mkString("\n")
+              throw new java.lang.AssertionError("Assertion failed: "+msg)
+            }
+        }
+    }
+    if (timeout <= 0) {
+      throw new java.lang.AssertionError("Test took too long to complete! Cannot check all schedules as your code is too slow!")
+    }
+  }
+
+  /**
+   * A schedule generator that is based on the context bound
+   */
+  class ScheduleGenerator(numThreads: Int) {
+    val scheduleLength = readWritesPerThread * numThreads
+    val rands = (1 to scheduleLength).map(i => new Random(0xcafe * i)) // random numbers for choosing a thread at each position
+    def schedules(): LazyList[List[Int]] = {
+      var contextSwitches = 0
+      var contexts = List[Int]() // a stack of thread ids in the order of context-switches
+      val remainingOps = MutableMap[Int, Int]()
+      remainingOps ++= (1 to numThreads).map(i => (i, readWritesPerThread)) // num ops remaining in each thread
+      val liveThreads = (1 to numThreads).toSeq.toBuffer
+
+      /**
+       * Updates remainingOps and liveThreads once a thread is chosen for a position in the schedule
+       */
+      def updateState(tid: Int): Unit = {
+        val remOps = remainingOps(tid)
+        if (remOps == 0) {
+          liveThreads -= tid
+        } else {
+          remainingOps += (tid -> (remOps - 1))
+        }
+      }
+      val schedule = rands.foldLeft(List[Int]()) {
+        case (acc, r) if contextSwitches < contextSwitchBound =>
+          val tid = liveThreads(r.nextInt(liveThreads.size))
+          contexts match {
+            case prev :: tail if prev != tid => // we have a new context switch here
+              contexts +:= tid
+              contextSwitches += 1
+            case prev :: tail =>
+            case _ => // init case
+              contexts +:= tid
+          }
+          updateState(tid)
+          acc :+ tid
+        case (acc, _) => // here context-bound has been reached so complete the schedule without any more context switches
+          if (!contexts.isEmpty) {
+            contexts = contexts.dropWhile(remainingOps(_) == 0)
+          }
+          val tid = contexts match {
+            case top :: tail => top
+            case _ => liveThreads(0)  // here, there has to be threads that have not even started
+          }
+          updateState(tid)
+          acc :+ tid
+      }
+      schedule #:: schedules()
+    }
+  }
+}
diff --git a/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/TestUtils.scala b/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/TestUtils.scala
new file mode 100644
index 0000000..5da7604
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/src/test/scala/m21/instrumentation/TestUtils.scala
@@ -0,0 +1,19 @@
+package m21.instrumentation
+
+import scala.concurrent._
+import scala.concurrent.duration._
+import scala.concurrent.ExecutionContext.Implicits.global
+
+object TestUtils {
+  def failsOrTimesOut[T](action: => T): Boolean = {
+    val asyncAction = Future {
+      action
+    }
+    try {
+      Await.result(asyncAction, 2000.millisecond)
+    } catch {
+      case _: Throwable => return true
+    }
+    return false
+  }
+}
diff --git a/previous-exams/2021-midterm/m21/src/test/scala/m21/overrides.scala b/previous-exams/2021-midterm/m21/src/test/scala/m21/overrides.scala
new file mode 100644
index 0000000..92d0cec
--- /dev/null
+++ b/previous-exams/2021-midterm/m21/src/test/scala/m21/overrides.scala
@@ -0,0 +1,68 @@
+package m21
+
+import instrumentation._
+
+import scala.annotation.tailrec
+import java.util.concurrent.atomic._
+
+class SchedulableAtomicVariable[T](initial: T, scheduler: Scheduler, name: String) extends AbstractAtomicVariable[T]:
+  private val proxied: AtomicVariable[T] = new AtomicVariable[T](initial)
+
+  override def get: T = scheduler.exec {
+    proxied.get
+  } (s"", Some(res => s"$name: get $res"))
+
+  override def set(value: T): Unit = scheduler.exec {
+    proxied.set(value)
+  } (s"$name: set $value", None)
+
+  override def compareAndSet(expected: T, newValue: T): Boolean = {
+    scheduler.exec {
+      proxied.compareAndSet(expected, newValue)
+    } (s"$name: compareAndSet(expected = $expected, newValue = $newValue)", Some(res => s"$name: Did it set? $res") )
+  }
+
+end SchedulableAtomicVariable
+
+class SchedulableSeqCount(val scheduler: Scheduler) extends SeqCount with LockFreeMonitor:
+  override def generation: Int = scheduler.exec {
+    super.generation
+  } ("", Some(res => s"generation is $res"))
+  override def setGeneration(newGeneration: Int): Unit = scheduler.exec {
+    super.setGeneration(newGeneration)
+  } ( s"setGeneration($newGeneration)", None )
+
+  override def x: Int = scheduler.exec {
+    super.x
+  } ("", Some(res => s"x is $res"))
+  override def setX(newX: Int): Unit = scheduler.exec {
+    super.setX(newX)
+  } (s"setX($newX)", None)
+
+  override def y: Int = scheduler.exec {
+    super.y
+  } ("", Some(res => s"y is $res"))
+  override def setY(newY: Int): Unit = scheduler.exec {
+    super.setY(newY)
+  } (s"setY($newY)", None)
+
+end SchedulableSeqCount
+
+class SchedulableMultiWriterSeqCount(val scheduler: Scheduler) extends MultiWriterSeqCount with LockFreeMonitor:
+  override protected val myGeneration: AbstractAtomicVariable[Int] = new SchedulableAtomicVariable(1, scheduler, "myGeneration")
+
+  override def x: Int = scheduler.exec {
+    super.x
+  } ("", Some(res => s"x is $res"))
+  override def setX(newX: Int): Unit = scheduler.exec {
+    super.setX(newX)
+  } (s"setX($newX)", None)
+
+  override def y: Int = scheduler.exec {
+    super.y
+  } ("", Some(res => s"y is $res"))
+  override def setY(newY: Int): Unit = scheduler.exec {
+    super.setY(newY)
+  } (s"setY($newY)", None)
+
+end SchedulableMultiWriterSeqCount
diff --git a/previous-exams/2021-midterm/m3.md b/previous-exams/2021-midterm/m3.md
new file mode 100644
index 0000000..ee3969e
--- /dev/null
+++ b/previous-exams/2021-midterm/m3.md
@@ -0,0 +1,61 @@
+Use the following commands to make a fresh clone of your repository:
+
+```
+git clone -b m3 git@gitlab.epfl.ch:lamp/student-repositories-s21/cs206-GASPAR.git m3
+```
+
+## Useful links
+
+  * [A guide to the Scala parallel collections](https://docs.scala-lang.org/overviews/parallel-collections/overview.html)
+  * [The API documentation of the Scala parallel collections](https://www.javadoc.io/doc/org.scala-lang.modules/scala-parallel-collections_2.13/latest/scala/collection/index.html)
+  * [The API documentation of the Scala standard library](https://www.scala-lang.org/files/archive/api/2.13.4)
+  * [The API documentation of the Java standard library](https://docs.oracle.com/en/java/javase/15/docs/api/index.html)
+
+**If you have issues with the IDE, try [reimporting the
+build](https://gitlab.epfl.ch/lamp/cs206/-/blob/master/labs/example-lab.md#ide-features-like-type-on-hover-or-go-to-definition-do-not-work),
+if you still have problems, use `compile` in sbt instead.**
+
+## Exercise
+
+Given the following sequential implementation of a function that computes the sequence of rolling windowed averages, your task will be to complete and optimize a parallel version of this code.
+
+```scala
+/** Compute the rolling windowed mean of an array.
+  *
+  *  For an array `arr = Arr(x1, x2, x3, ..., x_n)` the result is
+  *  `Arr(x1, (x1+x2)/2, (x1+x2+x3)/3, (x2+x3+x4)/3, ..., (x_{n-2}, x_{n-1}, x_n)/n)`
+  */
+def rollingWinMeanParallel(arr: Arr[Int]): Arr[Double] = {
+  // Transform all numbers to averages of window of size 1
+  val arr1 = arr.map(x => AvgWin(x :: Nil))
+  // Compute the rolling windowed average by combining the windows together
+  val arr2 = arr1.scan(AvgWin(Nil))((acc, x) => acc.pushAll(x))
+  // Transform the windowed averages to Doubles
+  arr2.map(win => win.toDouble)
+  // Drop the extra initial element that was added by the scan
+  arr3.tail
+```
+
+ This implementation has some issues:
+ - It does not use parallelism
+ - Creates two intermediate arrays by calling `map`
+ - Creates an extra intermediate arrays by calling `tail`
+ - Scan returns an extra element we do not need
+
+ We want to parallelize and avoid the creation of the extra arrays.
+ As we are calling a `scan` the natural operations we need are `upsweep` and `downsweep`.
+ It is possible specialize those operations for our problem by letting those operations do the mapping.
+ It is also possible to change those operations to not generate the first element.
+
+We give you a version of `rollingWinMeanSequential` that partially implements the parallelization using `upsweep` and `downsweep`.
+
+ Your tasks in the exercise will be to:
+ - TASK 1: Implement the parallelization of `upsweep` and `downsweep`
+ - TASK 2: Remove the calls to the `map`
+ - TASK 3: Remove the call to `tail`
+
+ You can get partial points for solving part of the tasks.
+ The order of the tasks is a suggestion, you may do them in any order if that is simpler for you.
+
+Look at the `Lib` trait to find the definitions of functions and classes you can use (or already used).
+In this question we use a `Arr` array class instead of the normal `Array`. You may assume that this class has the same performance characteristics as the normal array. `Arr` provides only a limited set of operations.
diff --git a/previous-exams/2021-midterm/m3/.gitignore b/previous-exams/2021-midterm/m3/.gitignore
new file mode 100644
index 0000000..40937dc
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/.gitignore
@@ -0,0 +1,22 @@
+# General
+*.DS_Store
+*.swp
+*~
+
+# Dotty
+*.class
+*.tasty
+*.hasTasty
+
+# sbt
+target/
+
+# IDE
+.bsp
+.bloop
+.metals
+.vscode
+
+# datasets
+stackoverflow-grading.csv
+wikipedia-grading.dat
diff --git a/previous-exams/2021-midterm/m3/assignment.sbt b/previous-exams/2021-midterm/m3/assignment.sbt
new file mode 100644
index 0000000..da7eb3c
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/assignment.sbt
@@ -0,0 +1,2 @@
+// Student tasks (i.e. submit, packageSubmission)
+enablePlugins(StudentTasks)
diff --git a/previous-exams/2021-midterm/m3/build.sbt b/previous-exams/2021-midterm/m3/build.sbt
new file mode 100644
index 0000000..b15645a
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/build.sbt
@@ -0,0 +1,12 @@
+course := "midterm"
+assignment := "m3"
+scalaVersion := "3.0.0-RC1"
+scalacOptions ++= Seq("-language:implicitConversions", "-deprecation")
+
+libraryDependencies += "org.scalameta" %% "munit" % "0.7.22"
+
+val MUnitFramework = new TestFramework("munit.Framework")
+testFrameworks += MUnitFramework
+// Decode Scala names
+testOptions += Tests.Argument(MUnitFramework, "-s")
+testSuite := "m3.M3Suite"
diff --git a/previous-exams/2021-midterm/m3/grading-tests.jar b/previous-exams/2021-midterm/m3/grading-tests.jar
new file mode 100644
index 0000000000000000000000000000000000000000..dea8c3895d7df93482a29b4f7e0c85a5f13b7c12
GIT binary patch
literal 34429
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

literal 0
HcmV?d00001

diff --git a/previous-exams/2021-midterm/m3/project/FilteringReporterPlugin.scala b/previous-exams/2021-midterm/m3/project/FilteringReporterPlugin.scala
new file mode 100644
index 0000000..2e4fd9a
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/project/FilteringReporterPlugin.scala
@@ -0,0 +1,31 @@
+package sbt // To access the private[sbt] compilerReporter key
+package filteringReporterPlugin
+
+import Keys._
+import ch.epfl.lamp._
+
+object FilteringReporterPlugin extends AutoPlugin {
+  override lazy val projectSettings = Seq(
+    // Turn off warning coming from scalameter that we cannot fix without changing scalameter
+    compilerReporter in (Compile, compile) ~= { reporter => new FilteringReporter(reporter) }
+  )
+}
+
+class FilteringReporter(reporter: xsbti.Reporter) extends xsbti.Reporter {
+
+  def reset(): Unit = reporter.reset()
+  def hasErrors: Boolean = reporter.hasErrors
+  def hasWarnings: Boolean = reporter.hasWarnings
+  def printSummary(): Unit = reporter.printSummary()
+  def problems: Array[xsbti.Problem] = reporter.problems
+
+  def log(problem: xsbti.Problem): Unit = {
+    if (!problem.message.contains("An existential type that came from a Scala-2 classfile cannot be"))
+      reporter.log(problem)
+  }
+
+  def comment(pos: xsbti.Position, msg: String): Unit =
+    reporter.comment(pos, msg)
+
+  override def toString = s"CollectingReporter($reporter)"
+}
diff --git a/previous-exams/2021-midterm/m3/project/MOOCSettings.scala b/previous-exams/2021-midterm/m3/project/MOOCSettings.scala
new file mode 100644
index 0000000..1c40443
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/project/MOOCSettings.scala
@@ -0,0 +1,49 @@
+package ch.epfl.lamp
+
+import sbt._
+import sbt.Keys._
+
+/**
+ * Coursera uses two versions of each assignment. They both have the same assignment key and part id but have
+ * different item ids.
+ *
+ * @param key Assignment key
+ * @param partId Assignment partId
+ * @param itemId Item id of the non premium version
+ * @param premiumItemId Item id of the premium version (`None` if the assignment is optional)
+ */
+case class CourseraId(key: String, partId: String, itemId: String, premiumItemId: Option[String])
+
+/**
+  * Settings shared by all assignments, reused in various tasks.
+  */
+object MOOCSettings extends AutoPlugin {
+
+  override def requires = super.requires && filteringReporterPlugin.FilteringReporterPlugin
+
+  object autoImport {
+    val course = SettingKey[String]("course")
+    val assignment = SettingKey[String]("assignment")
+    val options = SettingKey[Map[String, Map[String, String]]]("options")
+    val courseraId = settingKey[CourseraId]("Coursera-specific information identifying the assignment")
+    val testSuite = settingKey[String]("Fully qualified name of the test suite of this assignment")
+      .withRank(KeyRanks.Invisible)
+    // Convenient alias
+    type CourseraId = ch.epfl.lamp.CourseraId
+    val CourseraId = ch.epfl.lamp.CourseraId
+  }
+
+  import autoImport._
+
+  override val globalSettings: Seq[Def.Setting[_]] = Seq(
+    // supershell is verbose, buggy and useless.
+    useSuperShell := false
+  )
+
+  override val projectSettings: Seq[Def.Setting[_]] = Seq(
+    parallelExecution in Test := false,
+    // Report test result after each test instead of waiting for every test to finish
+    logBuffered in Test := false,
+    name := s"${course.value}-${assignment.value}"
+  )
+}
diff --git a/previous-exams/2021-midterm/m3/project/StudentTasks.scala b/previous-exams/2021-midterm/m3/project/StudentTasks.scala
new file mode 100644
index 0000000..c4669af
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/project/StudentTasks.scala
@@ -0,0 +1,303 @@
+package ch.epfl.lamp
+
+import sbt._
+import Keys._
+
+// import scalaj.http._
+import java.io.{File, FileInputStream, IOException}
+import org.apache.commons.codec.binary.Base64
+// import play.api.libs.json.{Json, JsObject, JsPath}
+import scala.util.{Failure, Success, Try}
+
+/**
+  * Provides tasks for submitting the assignment
+  */
+object StudentTasks extends AutoPlugin {
+
+  override def requires = super.requires && MOOCSettings
+
+  object autoImport {
+    val packageSourcesOnly = TaskKey[File]("packageSourcesOnly", "Package the sources of the project")
+    val packageBinWithoutResources = TaskKey[File]("packageBinWithoutResources", "Like packageBin, but without the resources")
+    val packageSubmissionZip = TaskKey[File]("packageSubmissionZip")
+    val packageSubmission = inputKey[Unit]("package solution as an archive file")
+
+    lazy val Grading = config("grading") extend(Runtime)
+  }
+
+
+  import autoImport._
+  import MOOCSettings.autoImport._
+
+  override lazy val projectSettings = Seq(
+    packageSubmissionSetting,
+    fork := true,
+    connectInput in run := true,
+    outputStrategy := Some(StdoutOutput),
+  ) ++
+    packageSubmissionZipSettings ++
+    inConfig(Grading)(Defaults.testSettings ++ Seq(
+      unmanagedJars += file("grading-tests.jar"),
+
+      definedTests := (definedTests in Test).value,
+      internalDependencyClasspath := (internalDependencyClasspath in Test).value
+    ))
+
+
+  /** **********************************************************
+    * SUBMITTING A SOLUTION TO COURSERA
+    */
+
+  val packageSubmissionZipSettings = Seq(
+    packageSubmissionZip := {
+      val submission = crossTarget.value / "submission.zip"
+      val sources = (packageSourcesOnly in Compile).value
+      val binaries = (packageBinWithoutResources in Compile).value
+      IO.zip(Seq(sources -> "sources.zip", binaries -> "binaries.jar"), submission, None)
+      submission
+    },
+    artifactClassifier in packageSourcesOnly := Some("sources"),
+    artifact in (Compile, packageBinWithoutResources) ~= (art => art.withName(art.name + "-without-resources"))
+  ) ++
+  inConfig(Compile)(
+    Defaults.packageTaskSettings(packageSourcesOnly, Defaults.sourceMappings) ++
+    Defaults.packageTaskSettings(packageBinWithoutResources, Def.task {
+      val relativePaths =
+        (unmanagedResources in Compile).value.flatMap(Path.relativeTo((unmanagedResourceDirectories in Compile).value)(_))
+      (mappings in (Compile, packageBin)).value.filterNot { case (_, path) => relativePaths.contains(path) }
+    })
+  )
+
+  val maxSubmitFileSize = {
+    val mb = 1024 * 1024
+    10 * mb
+  }
+
+  /** Check that the jar exists, isn't empty, isn't crazy big, and can be read
+    * If so, encode jar as base64 so we can send it to Coursera
+    */
+  def prepareJar(jar: File, s: TaskStreams): String = {
+    val errPrefix = "Error submitting assignment jar: "
+    val fileLength = jar.length()
+    if (!jar.exists()) {
+      s.log.error(errPrefix + "jar archive does not exist\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength == 0L) {
+      s.log.error(errPrefix + "jar archive is empty\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength > maxSubmitFileSize) {
+      s.log.error(errPrefix + "jar archive is too big. Allowed size: " +
+        maxSubmitFileSize + " bytes, found " + fileLength + " bytes.\n" +
+        jar.getAbsolutePath)
+      failSubmit()
+    } else {
+      val bytes = new Array[Byte](fileLength.toInt)
+      val sizeRead = try {
+        val is = new FileInputStream(jar)
+        val read = is.read(bytes)
+        is.close()
+        read
+      } catch {
+        case ex: IOException =>
+          s.log.error(errPrefix + "failed to read sources jar archive\n" + ex.toString)
+          failSubmit()
+      }
+      if (sizeRead != bytes.length) {
+        s.log.error(errPrefix + "failed to read the sources jar archive, size read: " + sizeRead)
+        failSubmit()
+      } else encodeBase64(bytes)
+    }
+  }
+
+  /** Task to package solution to a given file path */
+  lazy val packageSubmissionSetting = packageSubmission := {
+    val args: Seq[String] = Def.spaceDelimited("[path]").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val base64Jar = prepareJar(jar, s)
+
+    val path = args.headOption.getOrElse((baseDirectory.value / "submission.jar").absolutePath)
+    scala.tools.nsc.io.File(path).writeAll(base64Jar)
+  }
+
+/*
+  /** Task to submit a solution to coursera */
+  val submit = inputKey[Unit]("submit solution to Coursera")
+  lazy val submitSetting = submit := {
+    // Fail if scalafix linting does not pass.
+    scalafixLinting.value
+
+    val args: Seq[String] = Def.spaceDelimited("<arg>").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val assignmentDetails =
+      courseraId.?.value.getOrElse(throw new MessageOnlyException("This assignment can not be submitted to Coursera because the `courseraId` setting is undefined"))
+    val assignmentKey = assignmentDetails.key
+    val courseName =
+      course.value match {
+        case "capstone" => "scala-capstone"
+        case "bigdata"  => "scala-spark-big-data"
+        case other      => other
+      }
+
+    val partId = assignmentDetails.partId
+    val itemId = assignmentDetails.itemId
+    val premiumItemId = assignmentDetails.premiumItemId
+
+    val (email, secret) = args match {
+      case email :: secret :: Nil =>
+        (email, secret)
+      case _ =>
+        val inputErr =
+          s"""|Invalid input to `submit`. The required syntax for `submit` is:
+              |submit <email-address> <submit-token>
+              |
+              |The submit token is NOT YOUR LOGIN PASSWORD.
+              |It can be obtained from the assignment page:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId
+              |${
+                premiumItemId.fold("") { id =>
+                  s"""or (for premium learners):
+                     |https://www.coursera.org/learn/$courseName/programming/$id
+                   """.stripMargin
+                }
+              }
+          """.stripMargin
+        s.log.error(inputErr)
+        failSubmit()
+    }
+
+    val base64Jar = prepareJar(jar, s)
+    val json =
+      s"""|{
+          |   "assignmentKey":"$assignmentKey",
+          |   "submitterEmail":"$email",
+          |   "secret":"$secret",
+          |   "parts":{
+          |      "$partId":{
+          |         "output":"$base64Jar"
+          |      }
+          |   }
+          |}""".stripMargin
+
+    def postSubmission[T](data: String): Try[HttpResponse[String]] = {
+      val http = Http("https://www.coursera.org/api/onDemandProgrammingScriptSubmissions.v1")
+      val hs = List(
+        ("Cache-Control", "no-cache"),
+        ("Content-Type", "application/json")
+      )
+      s.log.info("Connecting to Coursera...")
+      val response = Try(http.postData(data)
+                         .headers(hs)
+                         .option(HttpOptions.connTimeout(10000)) // scalaj default timeout is only 100ms, changing that to 10s
+                         .asString) // kick off HTTP POST
+      response
+    }
+
+    val connectMsg =
+      s"""|Attempting to submit "${assignment.value}" assignment in "$courseName" course
+          |Using:
+          |- email: $email
+          |- submit token: $secret""".stripMargin
+    s.log.info(connectMsg)
+
+    def reportCourseraResponse(response: HttpResponse[String]): Unit = {
+      val code = response.code
+      val respBody = response.body
+
+       /* Sample JSON response from Coursera
+      {
+        "message": "Invalid email or token.",
+        "details": {
+          "learnerMessage": "Invalid email or token."
+        }
+      }
+      */
+
+      // Success, Coursera responds with 2xx HTTP status code
+      if (response.is2xx) {
+        val successfulSubmitMsg =
+          s"""|Successfully connected to Coursera. (Status $code)
+              |
+                |Assignment submitted successfully!
+              |
+                |You can see how you scored by going to:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId/
+              |${
+            premiumItemId.fold("") { id =>
+              s"""or (for premium learners):
+                 |https://www.coursera.org/learn/$courseName/programming/$id
+                       """.stripMargin
+            }
+          }
+              |and clicking on "My Submission".""".stripMargin
+        s.log.info(successfulSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 4xx HTTP status code (client-side failure)
+      else if (response.is4xx) {
+        val result = Try(Json.parse(respBody)).toOption
+        val learnerMsg = result match {
+          case Some(resp: JsObject) =>
+            (JsPath \ "details" \ "learnerMessage").read[String].reads(resp).get
+          case Some(x) => // shouldn't happen
+            "Could not parse Coursera's response:\n" + x
+          case None =>
+            "Could not parse Coursera's response:\n" + respBody
+        }
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |There was something wrong while attempting to submit.
+              |Coursera says:
+              |$learnerMsg (Status $code)""".stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 5xx HTTP status code (server-side failure)
+      else if (response.is5xx) {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera seems to be unavailable at the moment (Status $code)
+              |Check https://status.coursera.org/ and try again in a few minutes.
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera repsonds with an unexpected status code
+      else {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera replied with an unexpected code (Status $code)
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+    }
+
+    // kick it all off, actually make request
+    postSubmission(json) match {
+      case Success(resp) => reportCourseraResponse(resp)
+      case Failure(e) =>
+        val failedConnectMsg =
+          s"""|Connection to Coursera failed.
+              |There was something wrong while attempting to connect to Coursera.
+              |Check your internet connection.
+              |${e.toString}""".stripMargin
+        s.log.error(failedConnectMsg)
+    }
+
+   }
+*/
+
+  def failSubmit(): Nothing = {
+    sys.error("Submission failed")
+  }
+
+  /**
+    * *****************
+    * DEALING WITH JARS
+    */
+  def encodeBase64(bytes: Array[Byte]): String =
+    new String(Base64.encodeBase64(bytes))
+}
diff --git a/previous-exams/2021-midterm/m3/project/build.properties b/previous-exams/2021-midterm/m3/project/build.properties
new file mode 100644
index 0000000..0b2e09c
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/project/build.properties
@@ -0,0 +1 @@
+sbt.version=1.4.7
diff --git a/previous-exams/2021-midterm/m3/project/buildSettings.sbt b/previous-exams/2021-midterm/m3/project/buildSettings.sbt
new file mode 100644
index 0000000..8fac702
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/project/buildSettings.sbt
@@ -0,0 +1,5 @@
+// Used for Coursera submission (StudentPlugin)
+// libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.4.2"
+// libraryDependencies += "com.typesafe.play" %% "play-json" % "2.7.4"
+// Used for Base64 (StudentPlugin)
+libraryDependencies += "commons-codec" % "commons-codec" % "1.10"
diff --git a/previous-exams/2021-midterm/m3/project/plugins.sbt b/previous-exams/2021-midterm/m3/project/plugins.sbt
new file mode 100644
index 0000000..021c019
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/project/plugins.sbt
@@ -0,0 +1,2 @@
+// addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")
+addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.3")
diff --git a/previous-exams/2021-midterm/m3/src/main/scala/m3/Lib.scala b/previous-exams/2021-midterm/m3/src/main/scala/m3/Lib.scala
new file mode 100644
index 0000000..68e89db
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/src/main/scala/m3/Lib.scala
@@ -0,0 +1,68 @@
+package m3
+
+////////////////////////////////////////
+// NO NEED TO MODIFY THIS SOURCE FILE //
+////////////////////////////////////////
+
+trait Lib {
+
+  /** If an array has `n` elements and `n < THRESHOLD`, then it should be processed sequentially */
+  final val THRESHOLD: Int = 33
+
+  /** Compute the two values in parallel
+   *
+   *  Note: Most tests just compute those two sequentially to make any bug simpler to debug
+   */
+  def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2)
+
+  /** A limited array. It only contains the required operations for this exercise. */
+  trait Arr[T] {
+    /** Get the i-th element of the array (0-based) */
+    def apply(i: Int): T
+    /** Update the i-th element of the array with the given value (0-based) */
+    def update(i: Int, x: T): Unit
+    /** Number of elements in this array */
+    def length: Int
+    /** Create a copy of this array without the first element */
+    def tail: Arr[T]
+    /** Create a copy of this array by mapping all the elements with the given function */
+    def map[U](f: T => U): Arr[U]
+  }
+
+  object Arr {
+    /** Create an array with the given elements */
+    def apply[T](xs: T*): Arr[T] = {
+      val arr: Arr[T] = Arr.ofLength(xs.length)
+      for i <- 0 until xs.length do arr(i) = xs(i)
+      arr
+    }
+
+    /** Create an array with the given length. All elements are initialized to `null`. */
+    def ofLength[T](n: Int): Arr[T] =
+      newArrOfLength(n)
+
+  }
+
+  /** Create an array with the given length. All elements are initialized to `null`. */
+  def newArrOfLength[T](n: Int): Arr[T]
+
+  /** A number representing the average of a list of integers (the "window") */
+  case class AvgWin(list: List[Int]) {
+    def push(i: Int) = list match {
+      case i3 :: i2 :: i1 :: Nil => AvgWin(i :: i3 :: i2 :: Nil)
+      case list => AvgWin(i :: list)
+    }
+
+    def pushAll(other: AvgWin) =
+      other.list.foldRight(this)((el, self) => self.push(el))
+
+    def toDouble: Double = if list.isEmpty then 0 else list.sum / list.length
+  }
+
+  /** Tree result of an upsweep operation. Specialized for `AvgWin` results. */
+  trait TreeRes { val res: AvgWin }
+  /** Leaf result of an upsweep operation. Specialized for `AvgWin` results. */
+  case class Leaf(from: Int, to: Int, res: AvgWin) extends TreeRes
+  /** Tree node result of an upsweep operation. Specialized for `AvgWin` results. */
+  case class Node(left: TreeRes, res: AvgWin, right: TreeRes) extends TreeRes
+}
diff --git a/previous-exams/2021-midterm/m3/src/main/scala/m3/M3.scala b/previous-exams/2021-midterm/m3/src/main/scala/m3/M3.scala
new file mode 100644
index 0000000..81aff19
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/src/main/scala/m3/M3.scala
@@ -0,0 +1,75 @@
+package m3
+
+
+trait M3 extends Lib {
+  // Functions and classes of Lib can be used in here
+
+  /** Compute the rolling windowed mean of an array.
+   *
+   *  For an array `arr = Arr(x1, x2, x3, ..., x_n)` the result is
+   *  `Arr(x1, (x1+x2)/2, (x1+x2+x3)/3, (x2+x3+x4)/3, ..., (x_{n-2}, x_{n-1}, x_n)/n)`
+   */
+  def rollingWinMeanParallel(arr: Arr[Int]): Arr[Double] = {
+    if (arr.length == 0) return Arr.ofLength(0)
+
+    val out: Arr[Double] = Arr.ofLength(arr.length)
+    val tree = upsweep(arr, 0, arr.length)
+    downsweep(arr, AvgWin(Nil), tree, out)
+    out
+  }
+
+  // No need to modify this
+  def scanOp(acc: AvgWin, x: AvgWin) =
+    acc.pushAll(x)
+
+
+  def upsweep(input: Arr[Int], from: Int, to: Int): TreeRes = {
+    if (to - from < THRESHOLD)
+      Leaf(from, to, reduceSequential(input, from + 1, to, AvgWin(input(from) :: Nil)))
+    else {
+      val mid = from + (to - from)/2
+      val (tL, tR) = parallel(
+        upsweep(input, from, mid),
+        upsweep(input, mid, to)
+      )
+      Node(tL, scanOp(tL.res, tR.res), tR)
+    }
+  }
+
+
+  def downsweep(input: Arr[Int], a0: AvgWin, tree: TreeRes, output: Arr[Double]): Unit = {
+    tree match {
+      case Node(left, _, right) =>
+        parallel(
+          downsweep(input, a0, left, output),
+          downsweep(input, scanOp(a0, left.res), right, output)
+        )
+      case Leaf(from, to, _) =>
+        downsweepSequential(input, from, to, a0, output)
+    }
+  }
+
+
+  def downsweepSequential(input: Arr[Int], from: Int, to: Int, a0: AvgWin, output: Arr[Double]): Unit = {
+    if (from < to) {
+      var i = from
+      var a = a0
+      while (i < to) {
+        a = scanOp(a, AvgWin(input(i) :: Nil))
+        output(i) = a.toDouble
+        i = i + 1
+      }
+    }
+  }
+
+
+  def reduceSequential(input: Arr[Int], from: Int, to: Int, a0: AvgWin): AvgWin = {
+    var a = a0
+    var i = from
+    while (i < to) {
+      a = scanOp(a, AvgWin(input(i) :: Nil))
+      i = i + 1
+    }
+    a
+  }
+}
diff --git a/previous-exams/2021-midterm/m3/src/test/scala/m3/M3Suite.scala b/previous-exams/2021-midterm/m3/src/test/scala/m3/M3Suite.scala
new file mode 100644
index 0000000..176df6a
--- /dev/null
+++ b/previous-exams/2021-midterm/m3/src/test/scala/m3/M3Suite.scala
@@ -0,0 +1,174 @@
+package m3
+
+class M3Suite extends munit.FunSuite {
+
+  test("Rolling windowed average result test (5pts)") {
+    RollingWinMeanBasicLogicTest.basicTests()
+    RollingWinMeanBasicLogicTest.normalTests()
+    RollingWinMeanBasicLogicTest.largeTests()
+  }
+
+  test("[TASK 1] Rolling windowed average parallelism test (30pts)") {
+    RollingWinMeanCallsToParallel.parallelismTest()
+    RollingWinMeanParallel.basicTests()
+    RollingWinMeanParallel.normalTests()
+    RollingWinMeanParallel.largeTests()
+  }
+
+  test("[TASK 2] Rolling windowed average no `map` test (35pts)") {
+    RollingWinMeanNoMap.basicTests()
+    RollingWinMeanNoMap.normalTests()
+    RollingWinMeanNoMap.largeTests()
+  }
+
+  test("[TASK 3] Rolling windowed average no `tail` test (30pts)") {
+    RollingWinMeanNoTail.basicTests()
+    RollingWinMeanNoTail.normalTests()
+    RollingWinMeanNoTail.largeTests()
+  }
+
+
+  object RollingWinMeanBasicLogicTest extends M3 with LibImpl with RollingWinMeanTest {
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = (op1, op2)
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl(arr)
+  }
+
+  object RollingWinMeanCallsToParallel extends M3 with LibImpl with RollingWinMeanTest {
+    private var count = 0
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) =
+      count += 1
+      (op1, op2)
+
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl(arr)
+
+    def parallelismTest() = {
+      assertParallelCount(Arr(), 0)
+      assertParallelCount(Arr(1), 0)
+      assertParallelCount(Arr(1, 2, 3, 4), 0)
+      assertParallelCount(Arr(Array.tabulate(16)(identity): _*), 0)
+      assertParallelCount(Arr(Array.tabulate(32)(identity): _*), 0)
+
+      assertParallelCount(Arr(Array.tabulate(33)(identity): _*), 2)
+      assertParallelCount(Arr(Array.tabulate(64)(identity): _*), 2)
+      assertParallelCount(Arr(Array.tabulate(128)(identity): _*), 6)
+      assertParallelCount(Arr(Array.tabulate(256)(identity): _*), 14)
+      assertParallelCount(Arr(Array.tabulate(1000)(identity): _*), 62)
+      assertParallelCount(Arr(Array.tabulate(1024)(identity): _*), 62)
+    }
+
+    def assertParallelCount(arr: Arr[Int], expected: Int): Unit = {
+      try {
+        count = 0
+        rollingWinMeanParallel(arr)
+        assert(count == expected, {
+          val extra = if (expected == 0) "" else s" ${expected/2} for the `upsweep` and ${expected/2} for the `downsweep`"
+          s"\n$arr\n\nERROR: Expected $expected instead of $count calls to `parallel(...)` for an array of ${arr.length} elements. Current parallel threshold is $THRESHOLD.$extra"
+        })
+      } finally {
+        count = 0
+      }
+    }
+
+  }
+
+  object RollingWinMeanNoMap extends M3 with LibImpl with RollingWinMeanTest {
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = (op1, op2)
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl[T](arr) {
+      override def map[U](f: T => U): Arr[U] = throw Exception("Should not call Arr.map")
+    }
+  }
+
+  object RollingWinMeanNoTail extends M3 with LibImpl with RollingWinMeanTest {
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = (op1, op2)
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl[T](arr) {
+      override def tail: Arr[T] = throw Exception("Should not call Arr.tail")
+    }
+  }
+
+  object RollingWinMeanParallel extends M3 with LibImpl with RollingWinMeanTest {
+    import scala.concurrent.duration._
+    val TIMEOUT = Duration(10, SECONDS)
+    def parallel[T1, T2](op1: => T1, op2: => T2): (T1, T2) = {
+      import concurrent.ExecutionContext.Implicits.global
+      import scala.concurrent._
+      Await.result(Future(op1).zip(Future(op2)), TIMEOUT) // FIXME not timing-out
+    }
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T] = new ArrImpl(arr)
+  }
+
+  trait LibImpl extends Lib {
+
+    def newArrFrom[T](arr: Array[AnyRef]): Arr[T]
+
+    def newArrOfLength[T](n: Int): Arr[T] =
+      newArrFrom(new Array(n))
+
+    class ArrImpl[T](val arr: Array[AnyRef]) extends Arr[T]:
+      def apply(i: Int): T =
+        arr(i).asInstanceOf[T]
+      def update(i: Int, x: T): Unit =
+        arr(i) = x.asInstanceOf[AnyRef]
+      def length: Int =
+        arr.length
+      def map[U](f: T => U): Arr[U] =
+        newArrFrom(arr.map(f.asInstanceOf[AnyRef => AnyRef]))
+      def tail: Arr[T] =
+        newArrFrom(arr.tail)
+      override def toString: String =
+        arr.mkString("Arr(", ", ", ")")
+      override def equals(that: Any): Boolean =
+        that match
+          case that: ArrImpl[_] => Array.equals(arr, that.arr)
+          case _ => false
+  }
+
+  trait RollingWinMeanTest extends M3 {
+
+    def tabulate[T](n: Int)(f: Int => T): Arr[T] =
+      val arr = Arr.ofLength[T](n)
+      for i <- 0 until n do
+        arr(i) = f(i)
+      arr
+
+    def asSeq(arr: Arr[Double]) =
+      val array = new Array[Double](arr.length)
+      for i <- 0 to (arr.length - 1) do
+        array(i) = arr(i)
+      array.toSeq
+
+    def scanOp_(acc: AvgWin, x: AvgWin) =
+      acc.pushAll(x)
+
+    def result(ds: Seq[Int]): Arr[Double] =
+      Arr(ds.map(x => AvgWin(x :: Nil)).scan(AvgWin(Nil))(scanOp_).tail.map(_.toDouble): _*)
+
+    def check(input: Seq[Int]) =
+      assertEquals(
+        asSeq(rollingWinMeanParallel(Arr(input: _*))),
+        asSeq(result(input))
+      )
+
+    def basicTests() = {
+      check(Seq())
+      check(Seq(1))
+      check(Seq(1, 2, 3, 4))
+      check(Seq(4, 4, 4, 4))
+    }
+
+    def normalTests() = {
+      check(Seq.tabulate(64)(identity))
+      check(Seq(4, 4, 4, 4))
+      check(Seq(4, 8, 6, 4))
+      check(Seq(4, 3, 2, 1))
+      check(Seq.tabulate(64)(identity).reverse)
+      check(Seq.tabulate(128)(i => 128 - 2*i).reverse)
+    }
+
+    def largeTests() = {
+      check(Seq.tabulate(500)(identity))
+      check(Seq.tabulate(512)(identity))
+      check(Seq.tabulate(1_000)(identity))
+      check(Seq.tabulate(10_000)(identity))
+    }
+  }
+}
diff --git a/previous-exams/2021-midterm/m6.md b/previous-exams/2021-midterm/m6.md
new file mode 100644
index 0000000..f0eb449
--- /dev/null
+++ b/previous-exams/2021-midterm/m6.md
@@ -0,0 +1,155 @@
+Use the following commands to make a fresh clone of your repository:
+
+```
+git clone -b m6 git@gitlab.epfl.ch:lamp/student-repositories-s21/cs206-GASPAR.git m6
+```
+
+## Useful links
+
+  * [A guide to the Scala parallel collections](https://docs.scala-lang.org/overviews/parallel-collections/overview.html)
+  * [The API documentation of the Scala parallel collections](https://www.javadoc.io/doc/org.scala-lang.modules/scala-parallel-collections_2.13/latest/scala/collection/index.html)
+  * [The API documentation of the Scala standard library](https://www.scala-lang.org/files/archive/api/2.13.4)
+  * [The API documentation of the Java standard library](https://docs.oracle.com/en/java/javase/15/docs/api/index.html)
+
+**If you have issues with the IDE, try [reimporting the
+build](https://gitlab.epfl.ch/lamp/cs206/-/blob/master/labs/example-lab.md#ide-features-like-type-on-hover-or-go-to-definition-do-not-work),
+if you still have problems, use `compile` in sbt instead.**
+
+## Exercise
+
+In this exercise, you will implement an array Combiner using internally a doubly linked list of arrays. Your goal is to complete the implementation of the (simplified) Combiner interface, by implementing the `result` method to compute the result array from this array combiner.
+
+Here you can see the declaration of the `DLLCombiner` class and the related `Node` class definition. Look at the `Lib` trait in the `lib.scala` file to find all definitions of relevant functions and classes.
+
+
+```scala
+  class Node(val size: Int) {
+    var value: Array[Int] = new Array(size)
+    var next: Node = null
+    var previous: Node = null
+    var cnt = 0
+
+    def add(v: Int) = {
+      value(cnt) = v
+      cnt += 1
+    }
+  }
+
+  // Simplified Combiner interface
+  // Implements methods += and combine
+  // Abstract methods should be implemented in subclasses
+  abstract class DLLCombiner(val chunk_size: Int)
+```
+
+`DLLCombiner` class contains the implementation of methods `+=` and `combine`. You should look at them to better understand the structure of this array Combiner, before moving on to solving this exercise.
+
+Your task in the exercise will be to implement the `result` method of the `DLLCombinerImplementation` class. This method should compute the result array from this array combiner. This method should work in parallel according to the Combiner contract. Implement this method efficiently using 4 parallel tasks, by copying the doubly linked list to the array from both ends at the same time. Two threads should start from the start of the list and two from the end. In each case, one thread would be responsible for odd list indexes and the other for even ones.
+
+
+```scala
+  class DLLCombinerImplementation(chunk_size: Int = 3) extends DLLCombiner(chunk_size) {
+
+    // Computes every other Integer element of data array, starting from the first (index 0), up to the middle
+    def task1(data: Array[Int]) = task {
+      ???
+    }
+
+    // Computes every other Integer element of data array, starting from the second, up to the middle
+    def task2(data: Array[Int]) = task {
+      ???
+    }
+
+    // Computes every other Integer element of data array, starting from the second to last, up to the middle
+    def task3(data: Array[Int]) = task {
+      ???
+    }
+
+    // Computes every other Integer element of data array, starting from the last, up to the middle
+    // This is executed on the current thread.
+    def task4(data: Array[Int]) = {
+      ???
+    }
+
+    def result(): Array[Int] = {
+      val data = new Array[Int](cnt)
+
+      ???
+
+      data
+    }
+
+  }
+```
+
+Following the description above, your task in the exercise is to:
+
+- Implement the four tasks to copy parts of the array. Each task is responsible for computing one quarter of the array, as indicated in comments:
+    + Task 1: Computes every other Integer element of data array, starting from the first (index 0), up to the middle
+    + Task 2: Computes every other Integer element of data array, starting from the second, up to the middle
+    + Task 3: Computes every other Integer element of data array, starting from the second to last, up to the middle
+    + Task 4: Computes every other Integer element of data array, starting from the last, up to the middle
+- Implement the method `result` to compute the result array in parallel using those four tasks.
+
+Hints:
+
+- Note that this doubly linked list implementation uses `null` pointers to represent the absence of nodes. Be careful when working with `null` pointers in your solution, to avoid causing a `NullPointerException`.
+
+- `DLLCombinerImplementation` comes with a private `copyForward` method that you can use in your solution:
+
+```scala
+  private def copyForward(data: Array[Int], curr: Node, from: Int, to: Int, limit: Int)
+```
+
+This method copies certain elements from a doubly linked list to an array, in a way that might be useful for this exercise.
+
+## Examples
+
+Here is one example of the `result` method with intermediate results:
+
+```scala
+    val combiner1 = DLLCombinerImplementation(4)
+    combiner1 += 7 // (7)
+    combiner1 += 2 // (7, 2)
+    combiner1 += 4 // (7, 2, 4)
+    combiner1 += 3 // (7, 2, 4, 3)
+    combiner1 += 9 // (7, 2, 4, 3) <-> (9)
+    combiner1 += 5 // (7, 2, 4, 3) <-> (9, 5)
+    combiner1 += 1 // (7, 2, 4, 3) <-> (9, 5, 1)
+
+    val res1 = combiner1.result() // (7, 2, 4, 3, 9, 5, 1)
+
+```
+In this example, `task1` was responsible for computing elements at indexes 0 and 2, `task2` for computing the element at index 1, `task3` for computing elements at indexes 5 and 3, and `task4` for computing elements at indexes 6 and 4.
+
+Here is another example with combining:
+
+```scala
+    val c1 = DLLCombinerImplementation(4)
+    c1 += 7 // (7)
+    c1 += 2 // (7, 2)
+    c1 += 4 // (7, 2, 4)
+    c1 += 3 // (7, 2, 4, 3)
+    c1 += 9 // (7, 2, 4, 3) <-> (9)
+    c1 += 5 // (7, 2, 4, 3) <-> (9, 5)
+    c1 += 1 // (7, 2, 4, 3) <-> (9, 5, 1)
+
+    val c2 = DLLCombinerImplementation(4)
+    c2 += 6 // (6)
+    c2 += 8 // (6, 8)
+    c2 += 5 // (6, 8, 5)
+    c2 += 1 // (6, 8, 5, 1)
+
+    val c3 = DLLCombinerImplementation(4)
+    c3 += 1 // (1)
+
+    c1.combine(c2).combine(c3) // (7, 2, 4, 3) <-> (9, 5, 1) <-> (6, 8, 5, 1) <-> (1)
+    val res = c1.result() // (7, 2, 4, 3, 9, 5, 1, 6, 8, 5, 1, 1)
+
+```
+
+You can look at the public tests to find more examples.
+
+In your solution you should only make changes to the `DLLCombinerImplementation` class. You are not allowed to change the file `lib.scala`. You can get partial points for solving parts of this exercise.
+
+
+
diff --git a/previous-exams/2021-midterm/m6/.gitignore b/previous-exams/2021-midterm/m6/.gitignore
new file mode 100644
index 0000000..40937dc
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/.gitignore
@@ -0,0 +1,22 @@
+# General
+*.DS_Store
+*.swp
+*~
+
+# Dotty
+*.class
+*.tasty
+*.hasTasty
+
+# sbt
+target/
+
+# IDE
+.bsp
+.bloop
+.metals
+.vscode
+
+# datasets
+stackoverflow-grading.csv
+wikipedia-grading.dat
diff --git a/previous-exams/2021-midterm/m6/assignment.sbt b/previous-exams/2021-midterm/m6/assignment.sbt
new file mode 100644
index 0000000..da7eb3c
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/assignment.sbt
@@ -0,0 +1,2 @@
+// Student tasks (i.e. submit, packageSubmission)
+enablePlugins(StudentTasks)
diff --git a/previous-exams/2021-midterm/m6/build.sbt b/previous-exams/2021-midterm/m6/build.sbt
new file mode 100644
index 0000000..96606f6
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/build.sbt
@@ -0,0 +1,12 @@
+course := "midterm"
+assignment := "m6"
+scalaVersion := "3.0.0-RC1"
+scalacOptions ++= Seq("-language:implicitConversions", "-deprecation")
+
+libraryDependencies += "org.scalameta" %% "munit" % "0.7.22"
+
+val MUnitFramework = new TestFramework("munit.Framework")
+testFrameworks += MUnitFramework
+// Decode Scala names
+testOptions += Tests.Argument(MUnitFramework, "-s")
+testSuite := "m6.M6Suite"
diff --git a/previous-exams/2021-midterm/m6/grading-tests.jar b/previous-exams/2021-midterm/m6/grading-tests.jar
new file mode 100644
index 0000000000000000000000000000000000000000..2127d4e28e16c94709e41b0e9a6bf7e9a5ad4b88
GIT binary patch
literal 35241
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

literal 0
HcmV?d00001

diff --git a/previous-exams/2021-midterm/m6/project/FilteringReporterPlugin.scala b/previous-exams/2021-midterm/m6/project/FilteringReporterPlugin.scala
new file mode 100644
index 0000000..2e4fd9a
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/project/FilteringReporterPlugin.scala
@@ -0,0 +1,31 @@
+package sbt // To access the private[sbt] compilerReporter key
+package filteringReporterPlugin
+
+import Keys._
+import ch.epfl.lamp._
+
+object FilteringReporterPlugin extends AutoPlugin {
+  override lazy val projectSettings = Seq(
+    // Turn off warning coming from scalameter that we cannot fix without changing scalameter
+    compilerReporter in (Compile, compile) ~= { reporter => new FilteringReporter(reporter) }
+  )
+}
+
+class FilteringReporter(reporter: xsbti.Reporter) extends xsbti.Reporter {
+
+  def reset(): Unit = reporter.reset()
+  def hasErrors: Boolean = reporter.hasErrors
+  def hasWarnings: Boolean = reporter.hasWarnings
+  def printSummary(): Unit = reporter.printSummary()
+  def problems: Array[xsbti.Problem] = reporter.problems
+
+  def log(problem: xsbti.Problem): Unit = {
+    if (!problem.message.contains("An existential type that came from a Scala-2 classfile cannot be"))
+      reporter.log(problem)
+  }
+
+  def comment(pos: xsbti.Position, msg: String): Unit =
+    reporter.comment(pos, msg)
+
+  override def toString = s"CollectingReporter($reporter)"
+}
diff --git a/previous-exams/2021-midterm/m6/project/MOOCSettings.scala b/previous-exams/2021-midterm/m6/project/MOOCSettings.scala
new file mode 100644
index 0000000..1c40443
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/project/MOOCSettings.scala
@@ -0,0 +1,49 @@
+package ch.epfl.lamp
+
+import sbt._
+import sbt.Keys._
+
+/**
+ * Coursera uses two versions of each assignment. They both have the same assignment key and part id but have
+ * different item ids.
+ *
+ * @param key Assignment key
+ * @param partId Assignment partId
+ * @param itemId Item id of the non premium version
+ * @param premiumItemId Item id of the premium version (`None` if the assignment is optional)
+ */
+case class CourseraId(key: String, partId: String, itemId: String, premiumItemId: Option[String])
+
+/**
+  * Settings shared by all assignments, reused in various tasks.
+  */
+object MOOCSettings extends AutoPlugin {
+
+  override def requires = super.requires && filteringReporterPlugin.FilteringReporterPlugin
+
+  object autoImport {
+    val course = SettingKey[String]("course")
+    val assignment = SettingKey[String]("assignment")
+    val options = SettingKey[Map[String, Map[String, String]]]("options")
+    val courseraId = settingKey[CourseraId]("Coursera-specific information identifying the assignment")
+    val testSuite = settingKey[String]("Fully qualified name of the test suite of this assignment")
+      .withRank(KeyRanks.Invisible)
+    // Convenient alias
+    type CourseraId = ch.epfl.lamp.CourseraId
+    val CourseraId = ch.epfl.lamp.CourseraId
+  }
+
+  import autoImport._
+
+  override val globalSettings: Seq[Def.Setting[_]] = Seq(
+    // supershell is verbose, buggy and useless.
+    useSuperShell := false
+  )
+
+  override val projectSettings: Seq[Def.Setting[_]] = Seq(
+    parallelExecution in Test := false,
+    // Report test result after each test instead of waiting for every test to finish
+    logBuffered in Test := false,
+    name := s"${course.value}-${assignment.value}"
+  )
+}
diff --git a/previous-exams/2021-midterm/m6/project/StudentTasks.scala b/previous-exams/2021-midterm/m6/project/StudentTasks.scala
new file mode 100644
index 0000000..c4669af
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/project/StudentTasks.scala
@@ -0,0 +1,303 @@
+package ch.epfl.lamp
+
+import sbt._
+import Keys._
+
+// import scalaj.http._
+import java.io.{File, FileInputStream, IOException}
+import org.apache.commons.codec.binary.Base64
+// import play.api.libs.json.{Json, JsObject, JsPath}
+import scala.util.{Failure, Success, Try}
+
+/**
+  * Provides tasks for submitting the assignment
+  */
+object StudentTasks extends AutoPlugin {
+
+  override def requires = super.requires && MOOCSettings
+
+  object autoImport {
+    val packageSourcesOnly = TaskKey[File]("packageSourcesOnly", "Package the sources of the project")
+    val packageBinWithoutResources = TaskKey[File]("packageBinWithoutResources", "Like packageBin, but without the resources")
+    val packageSubmissionZip = TaskKey[File]("packageSubmissionZip")
+    val packageSubmission = inputKey[Unit]("package solution as an archive file")
+
+    lazy val Grading = config("grading") extend(Runtime)
+  }
+
+
+  import autoImport._
+  import MOOCSettings.autoImport._
+
+  override lazy val projectSettings = Seq(
+    packageSubmissionSetting,
+    fork := true,
+    connectInput in run := true,
+    outputStrategy := Some(StdoutOutput),
+  ) ++
+    packageSubmissionZipSettings ++
+    inConfig(Grading)(Defaults.testSettings ++ Seq(
+      unmanagedJars += file("grading-tests.jar"),
+
+      definedTests := (definedTests in Test).value,
+      internalDependencyClasspath := (internalDependencyClasspath in Test).value
+    ))
+
+
+  /** **********************************************************
+    * SUBMITTING A SOLUTION TO COURSERA
+    */
+
+  val packageSubmissionZipSettings = Seq(
+    packageSubmissionZip := {
+      val submission = crossTarget.value / "submission.zip"
+      val sources = (packageSourcesOnly in Compile).value
+      val binaries = (packageBinWithoutResources in Compile).value
+      IO.zip(Seq(sources -> "sources.zip", binaries -> "binaries.jar"), submission, None)
+      submission
+    },
+    artifactClassifier in packageSourcesOnly := Some("sources"),
+    artifact in (Compile, packageBinWithoutResources) ~= (art => art.withName(art.name + "-without-resources"))
+  ) ++
+  inConfig(Compile)(
+    Defaults.packageTaskSettings(packageSourcesOnly, Defaults.sourceMappings) ++
+    Defaults.packageTaskSettings(packageBinWithoutResources, Def.task {
+      val relativePaths =
+        (unmanagedResources in Compile).value.flatMap(Path.relativeTo((unmanagedResourceDirectories in Compile).value)(_))
+      (mappings in (Compile, packageBin)).value.filterNot { case (_, path) => relativePaths.contains(path) }
+    })
+  )
+
+  val maxSubmitFileSize = {
+    val mb = 1024 * 1024
+    10 * mb
+  }
+
+  /** Check that the jar exists, isn't empty, isn't crazy big, and can be read
+    * If so, encode jar as base64 so we can send it to Coursera
+    */
+  def prepareJar(jar: File, s: TaskStreams): String = {
+    val errPrefix = "Error submitting assignment jar: "
+    val fileLength = jar.length()
+    if (!jar.exists()) {
+      s.log.error(errPrefix + "jar archive does not exist\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength == 0L) {
+      s.log.error(errPrefix + "jar archive is empty\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength > maxSubmitFileSize) {
+      s.log.error(errPrefix + "jar archive is too big. Allowed size: " +
+        maxSubmitFileSize + " bytes, found " + fileLength + " bytes.\n" +
+        jar.getAbsolutePath)
+      failSubmit()
+    } else {
+      val bytes = new Array[Byte](fileLength.toInt)
+      val sizeRead = try {
+        val is = new FileInputStream(jar)
+        val read = is.read(bytes)
+        is.close()
+        read
+      } catch {
+        case ex: IOException =>
+          s.log.error(errPrefix + "failed to read sources jar archive\n" + ex.toString)
+          failSubmit()
+      }
+      if (sizeRead != bytes.length) {
+        s.log.error(errPrefix + "failed to read the sources jar archive, size read: " + sizeRead)
+        failSubmit()
+      } else encodeBase64(bytes)
+    }
+  }
+
+  /** Task to package solution to a given file path */
+  lazy val packageSubmissionSetting = packageSubmission := {
+    val args: Seq[String] = Def.spaceDelimited("[path]").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val base64Jar = prepareJar(jar, s)
+
+    val path = args.headOption.getOrElse((baseDirectory.value / "submission.jar").absolutePath)
+    scala.tools.nsc.io.File(path).writeAll(base64Jar)
+  }
+
+/*
+  /** Task to submit a solution to coursera */
+  val submit = inputKey[Unit]("submit solution to Coursera")
+  lazy val submitSetting = submit := {
+    // Fail if scalafix linting does not pass.
+    scalafixLinting.value
+
+    val args: Seq[String] = Def.spaceDelimited("<arg>").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val assignmentDetails =
+      courseraId.?.value.getOrElse(throw new MessageOnlyException("This assignment can not be submitted to Coursera because the `courseraId` setting is undefined"))
+    val assignmentKey = assignmentDetails.key
+    val courseName =
+      course.value match {
+        case "capstone" => "scala-capstone"
+        case "bigdata"  => "scala-spark-big-data"
+        case other      => other
+      }
+
+    val partId = assignmentDetails.partId
+    val itemId = assignmentDetails.itemId
+    val premiumItemId = assignmentDetails.premiumItemId
+
+    val (email, secret) = args match {
+      case email :: secret :: Nil =>
+        (email, secret)
+      case _ =>
+        val inputErr =
+          s"""|Invalid input to `submit`. The required syntax for `submit` is:
+              |submit <email-address> <submit-token>
+              |
+              |The submit token is NOT YOUR LOGIN PASSWORD.
+              |It can be obtained from the assignment page:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId
+              |${
+                premiumItemId.fold("") { id =>
+                  s"""or (for premium learners):
+                     |https://www.coursera.org/learn/$courseName/programming/$id
+                   """.stripMargin
+                }
+              }
+          """.stripMargin
+        s.log.error(inputErr)
+        failSubmit()
+    }
+
+    val base64Jar = prepareJar(jar, s)
+    val json =
+      s"""|{
+          |   "assignmentKey":"$assignmentKey",
+          |   "submitterEmail":"$email",
+          |   "secret":"$secret",
+          |   "parts":{
+          |      "$partId":{
+          |         "output":"$base64Jar"
+          |      }
+          |   }
+          |}""".stripMargin
+
+    def postSubmission[T](data: String): Try[HttpResponse[String]] = {
+      val http = Http("https://www.coursera.org/api/onDemandProgrammingScriptSubmissions.v1")
+      val hs = List(
+        ("Cache-Control", "no-cache"),
+        ("Content-Type", "application/json")
+      )
+      s.log.info("Connecting to Coursera...")
+      val response = Try(http.postData(data)
+                         .headers(hs)
+                         .option(HttpOptions.connTimeout(10000)) // scalaj default timeout is only 100ms, changing that to 10s
+                         .asString) // kick off HTTP POST
+      response
+    }
+
+    val connectMsg =
+      s"""|Attempting to submit "${assignment.value}" assignment in "$courseName" course
+          |Using:
+          |- email: $email
+          |- submit token: $secret""".stripMargin
+    s.log.info(connectMsg)
+
+    def reportCourseraResponse(response: HttpResponse[String]): Unit = {
+      val code = response.code
+      val respBody = response.body
+
+       /* Sample JSON response from Coursera
+      {
+        "message": "Invalid email or token.",
+        "details": {
+          "learnerMessage": "Invalid email or token."
+        }
+      }
+      */
+
+      // Success, Coursera responds with 2xx HTTP status code
+      if (response.is2xx) {
+        val successfulSubmitMsg =
+          s"""|Successfully connected to Coursera. (Status $code)
+              |
+                |Assignment submitted successfully!
+              |
+                |You can see how you scored by going to:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId/
+              |${
+            premiumItemId.fold("") { id =>
+              s"""or (for premium learners):
+                 |https://www.coursera.org/learn/$courseName/programming/$id
+                       """.stripMargin
+            }
+          }
+              |and clicking on "My Submission".""".stripMargin
+        s.log.info(successfulSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 4xx HTTP status code (client-side failure)
+      else if (response.is4xx) {
+        val result = Try(Json.parse(respBody)).toOption
+        val learnerMsg = result match {
+          case Some(resp: JsObject) =>
+            (JsPath \ "details" \ "learnerMessage").read[String].reads(resp).get
+          case Some(x) => // shouldn't happen
+            "Could not parse Coursera's response:\n" + x
+          case None =>
+            "Could not parse Coursera's response:\n" + respBody
+        }
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |There was something wrong while attempting to submit.
+              |Coursera says:
+              |$learnerMsg (Status $code)""".stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 5xx HTTP status code (server-side failure)
+      else if (response.is5xx) {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera seems to be unavailable at the moment (Status $code)
+              |Check https://status.coursera.org/ and try again in a few minutes.
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera repsonds with an unexpected status code
+      else {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera replied with an unexpected code (Status $code)
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+    }
+
+    // kick it all off, actually make request
+    postSubmission(json) match {
+      case Success(resp) => reportCourseraResponse(resp)
+      case Failure(e) =>
+        val failedConnectMsg =
+          s"""|Connection to Coursera failed.
+              |There was something wrong while attempting to connect to Coursera.
+              |Check your internet connection.
+              |${e.toString}""".stripMargin
+        s.log.error(failedConnectMsg)
+    }
+
+   }
+*/
+
+  def failSubmit(): Nothing = {
+    sys.error("Submission failed")
+  }
+
+  /**
+    * *****************
+    * DEALING WITH JARS
+    */
+  def encodeBase64(bytes: Array[Byte]): String =
+    new String(Base64.encodeBase64(bytes))
+}
diff --git a/previous-exams/2021-midterm/m6/project/build.properties b/previous-exams/2021-midterm/m6/project/build.properties
new file mode 100644
index 0000000..0b2e09c
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/project/build.properties
@@ -0,0 +1 @@
+sbt.version=1.4.7
diff --git a/previous-exams/2021-midterm/m6/project/buildSettings.sbt b/previous-exams/2021-midterm/m6/project/buildSettings.sbt
new file mode 100644
index 0000000..8fac702
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/project/buildSettings.sbt
@@ -0,0 +1,5 @@
+// Used for Coursera submission (StudentPlugin)
+// libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.4.2"
+// libraryDependencies += "com.typesafe.play" %% "play-json" % "2.7.4"
+// Used for Base64 (StudentPlugin)
+libraryDependencies += "commons-codec" % "commons-codec" % "1.10"
diff --git a/previous-exams/2021-midterm/m6/project/plugins.sbt b/previous-exams/2021-midterm/m6/project/plugins.sbt
new file mode 100644
index 0000000..021c019
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/project/plugins.sbt
@@ -0,0 +1,2 @@
+// addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")
+addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.3")
diff --git a/previous-exams/2021-midterm/m6/src/main/scala/m6/M6.scala b/previous-exams/2021-midterm/m6/src/main/scala/m6/M6.scala
new file mode 100644
index 0000000..f754c4a
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/src/main/scala/m6/M6.scala
@@ -0,0 +1,149 @@
+package m6
+
+import java.util.concurrent._
+import scala.util.DynamicVariable
+
+trait M6 extends Lib {
+
+  class DLLCombinerImplementation(chunk_size: Int = 3) extends DLLCombiner(chunk_size){
+
+    // Computes every other Integer element of data array, starting from the first (index 0), up to the middle
+    def task1(data: Array[Int]): ForkJoinTask[Unit] = task {
+
+      var current = head
+      if(current != null) {
+        var i_from = 0
+        var i_to = 0
+        copyForward(data, current, i_from, i_to, cnt/2)
+      }
+    }
+
+    // Computes every other Integer element of data array, starting from the second, up to the middle
+    def task2(data: Array[Int]): ForkJoinTask[Unit] = task {
+
+      var current = head
+      if(current != null) {
+        var i_from = 1
+        var i_to = 1
+
+        if(i_from >= current.cnt) {
+          current = current.next
+          if(current != null) {
+            i_from = 0
+          }
+          else i_to = cnt/2 // to stop the loop
+        }
+
+        copyForward(data, current, i_from, i_to, cnt/2)
+      }  
+    }
+
+    // Computes every other Integer element of data array, starting from the second to last, up to the middle
+    def task3(data: Array[Int]): ForkJoinTask[Unit] = task {
+
+      var current = last
+      if( current != null) {
+        var i_to = cnt - 2
+        var i_from = current.cnt - 2
+        if(i_from < 0) {
+          current = current.previous
+          if(current != null) {
+            i_from = current.cnt - 1
+          }
+          else i_to = cnt/2 - 1 // to stop the loop
+        }
+
+        copyBackward(data, current, i_from, i_to, cnt/2)
+      }
+    }
+
+    // Computes every other Integer element of data array, starting from the last, up to the middle
+    // This is executed on the current thread.
+    def task4(data: Array[Int]): Unit = {
+
+      var current = last
+      if( current != null) {
+        var i_from = current.cnt - 1
+        var i_to = cnt - 1
+        copyBackward(data, current, i_from, i_to, cnt/2)
+      }
+    }
+
+    def result(): Array[Int] = {
+      val data = new Array[Int](cnt)
+
+      val t1 = task1(data)
+      val t2 = task2(data)
+      val t3 = task3(data)
+
+      task4(data)
+
+      t1.join()
+      t2.join()
+      t3.join()
+
+
+      data
+    }
+
+
+    private def copyBackward(data: Array[Int], curr: Node, from: Int, to: Int, limit: Int) = {
+      var current = curr
+      var i_from = from
+      var i_to = to 
+
+      while (i_to >= limit) {
+        try{
+          data(i_to) = current.value(i_from)
+          i_to -= 2
+          i_from -= 2
+          if(i_from == -1) {
+            current = current.previous
+            i_from = current.cnt - 1
+          }
+          else if(i_from == -2) {
+            current = current.previous
+            i_from = current.cnt - 2
+            if(current.cnt == 1) {
+              current = current.previous
+              i_from = current.cnt - 1
+            }
+          }
+        }
+        catch{
+          case e: Exception =>
+        }
+      }
+        
+    }
+    private def copyForward(data: Array[Int], curr: Node, from: Int, to: Int, limit: Int) = {
+      var current = curr
+      var i_from = from
+      var i_to = to 
+
+      while (i_to < limit) {
+        try {
+          data(i_to) = current.value(i_from)
+          i_to += 2
+          i_from += 2
+          if(i_from == current.cnt){
+            current = current.next
+            i_from = 0
+          }
+          else if(i_from > current.cnt) {
+            current = current.next
+            i_from = 1
+            if(current.cnt == 1) {
+              current = current.next
+              i_from = 0
+            }
+          }
+        }
+        catch{
+          case e: Exception =>
+        }
+      }
+    }
+  }
+
+}
diff --git a/previous-exams/2021-midterm/m6/src/main/scala/m6/lib.scala b/previous-exams/2021-midterm/m6/src/main/scala/m6/lib.scala
new file mode 100644
index 0000000..bfb2838
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/src/main/scala/m6/lib.scala
@@ -0,0 +1,84 @@
+package m6
+
+import java.util.concurrent._
+import scala.util.DynamicVariable
+
+trait Lib {
+
+  class Node(val size: Int) {
+    var value: Array[Int] = new Array(size)
+    var next: Node = null    
+    var previous: Node = null
+    var cnt = 0
+
+    def add(v: Int) = {
+      value(cnt) = v
+      cnt += 1
+    }
+  }
+
+  // Simplified Combiner interface
+  // Implements methods += and combine
+  // Abstract methods should be implemented in subclasses
+  abstract class DLLCombiner(val chunk_size: Int) {
+    var head: Node = null
+    var last: Node = null
+    var cnt: Int = 0
+    var chunks: Int = 0
+
+    // Adds an Integer to the last node of this array combiner. If the last node is full, allocates a new node.
+    def +=(elem: Int): Unit = {
+      if(cnt % chunk_size == 0) {
+        chunks = chunks + 1
+        val node = new Node(chunk_size)
+        if (cnt == 0) {
+          head = node
+          last = node
+        }
+        else {
+          last.next = node
+          node.previous = last
+          last = node
+        }
+      }
+      last.add(elem)
+      cnt += 1
+    }
+
+    // Combines this array combiner and another given combiner in constant O(1) complexity.
+    def combine(that: DLLCombiner): DLLCombiner = {
+      assert(this.chunk_size == that.chunk_size)
+      if (this.cnt == 0) {
+        this.head = that.head
+        this.last = that.last
+        this.cnt = that.cnt
+        this.chunks = that.chunks
+
+        this
+      }
+      else if (that.cnt == 0)
+        this
+      else {
+        this.last.next = that.head
+        that.head.previous = this.last
+
+        this.cnt = this.cnt + that.cnt
+        this.chunks = this.chunks + that.chunks
+        this.last = that.last
+
+        this
+      }
+    }
+
+    def task1(data: Array[Int]): ForkJoinTask[Unit]
+    def task2(data: Array[Int]): ForkJoinTask[Unit]
+    def task3(data: Array[Int]): ForkJoinTask[Unit]
+    def task4(data: Array[Int]): Unit
+
+    def result(): Array[Int]
+
+  }
+
+  def task[T](body: => T): ForkJoinTask[T]
+
+}
\ No newline at end of file
diff --git a/previous-exams/2021-midterm/m6/src/test/scala/m6/M6Suite.scala b/previous-exams/2021-midterm/m6/src/test/scala/m6/M6Suite.scala
new file mode 100644
index 0000000..e04fcf0
--- /dev/null
+++ b/previous-exams/2021-midterm/m6/src/test/scala/m6/M6Suite.scala
@@ -0,0 +1,422 @@
+package m6
+
+import java.util.concurrent._
+import scala.util.DynamicVariable
+
+class M6Suite extends AbstractM6Suite {
+
+  // (70+) 30 / 500 points for correct implementation, don't check parallelism
+  test("[Correctness] fetch result - simple combiners (5pts)") {
+    assertCorrectnessSimple()
+  }
+
+  test("[Correctness] fetch result - small combiners (5pts)") {
+    assertCorrectnessBasic()
+  }
+
+  test("[Correctness] fetch result - small combiners after combining (10pts)") {
+    assertCorrectnessCombined()
+  }
+
+  test("[Correctness] fetch result - large combiners (10pts)") {
+    assertCorrectnessLarge()
+  }
+
+  def assertCorrectnessSimple() = {
+    simpleCombiners.foreach(elem => assert(compare(elem._1, elem._2)))
+  }
+
+  def assertCorrectnessBasic() = {
+    basicCombiners.foreach(elem => assert(compare(elem._1, elem._2)))
+  }
+
+  def assertCorrectnessCombined() = {
+    combinedCombiners.foreach(elem => assert(compare(elem._1, elem._2)))
+  }
+
+  def assertCorrectnessLarge() = {
+    largeCombiners.foreach(elem => assert(compare(elem._1, elem._2)))
+  }
+
+  // (70+30+) 50 / 500 points for correct parallel implementation, don't check if it's exactly 1/4 of the array per task
+  private var count = 0
+  private val expected = 3
+
+  override def task[T](body: => T): ForkJoinTask[T] = {
+    count += 1
+    scheduler.value.schedule(body)
+  }
+
+  test("[TaskCount] number of newly created tasks should be 3 (5pts)") {
+    assertTaskCountSimple()
+  }
+
+  test("[TaskCount] fetch result and check parallel - simple combiners (5pts)") {
+    assertTaskCountSimple()
+    assertCorrectnessSimple()
+  }
+
+  test("[TaskCount] fetch result and check parallel - small combiners (10pts)") {
+    assertTaskCountSimple()
+    assertCorrectnessBasic()
+  }
+
+  test("[TaskCount] fetch result and check parallel - small combiners after combining (15pts)") {
+    assertTaskCountSimple()
+    assertCorrectnessCombined()
+  }
+
+  test("[TaskCount] fetch result and check parallel - large combiners (15pts)") {
+    assertTaskCountSimple()
+    assertCorrectnessLarge()
+  }
+
+  def assertTaskCountSimple(): Unit = {
+    simpleCombiners.foreach(elem => assertTaskCount(elem._1, elem._2))
+  }
+
+  def assertTaskCount(combiner: DLLCombinerTest, array: Array[Int]): Unit = {
+    try {
+      count = 0
+      build(combiner, array)
+      combiner.result()
+      assertEquals(count, expected, {
+        s"ERROR: Expected $expected instead of $count calls to `task(...)`"
+      })
+    } finally {
+      count = 0
+    }
+  }
+
+  //(70+30+50+) 200 / 500 points for correct parallel implementation, exactly 1/4 of the array per task
+  test("[TaskFairness] each task should compute 1/4 of the result (50pts)") {
+    assertTaskFairness(simpleCombiners.unzip._1)
+  }
+
+  test("[TaskFairness] each task should correctly compute 1/4 of the result - simple combiners (20pts)") {
+    assertTaskFairness(simpleCombiners.unzip._1)
+    assertCorrectnessSimple()
+  }
+
+  test("[TaskFairness] each task should correctly compute 1/4 of the result - small combiners (30pts)") {
+    assertTaskFairness(basicCombiners.unzip._1)
+    assertCorrectnessBasic()
+  }
+
+  test("[TaskFairness] each task should correctly compute 1/4 of the result - small combiners after combining (50pts)") {
+    assertTaskFairness(combinedCombiners.unzip._1)
+    assertCorrectnessCombined()
+  }
+
+  test("[TaskFairness] each task should correctly compute 1/4 of the result - large combiners (50pts)") {
+    assertTaskFairness(largeCombiners.unzip._1)
+    assertCorrectnessLarge()
+  }
+
+  def assertTaskFairness(combiners: List[DLLCombinerTest]): Unit = {
+    def assertNewTaskFairness(combiner: DLLCombinerTest, task: ForkJoinTask[Unit], data: Array[Int]) = {
+      var count = 0
+      var expected = combiner.cnt / 4
+      task.join
+      count = data.count(elem => elem != 0)
+
+      assert((count - expected).abs <= 1)
+    }
+
+    def assertMainTaskFairness(combiner: DLLCombinerTest, task: Unit, data: Array[Int]) = {
+      var count = 0
+      var expected = combiner.cnt / 4
+      count = data.count(elem => elem != 0)
+
+      assert((count - expected).abs <= 1)
+    }
+
+    combiners.foreach { elem =>
+      var data = Array.fill(elem.cnt)(0)
+      assertNewTaskFairness(elem, elem.task1(data), data)
+
+      data = Array.fill(elem.cnt)(0)
+      assertNewTaskFairness(elem, elem.task2(data), data)
+
+      data = Array.fill(elem.cnt)(0)
+      assertNewTaskFairness(elem, elem.task3(data), data)
+
+      data = Array.fill(elem.cnt)(0)
+      assertMainTaskFairness(elem, elem.task4(data), data)
+    }
+  }
+
+  //(70+30+50+200+) 150 / 500 points for correct parallel implementation, exactly 1/4 of the array per task, exactly the specified quarter
+
+  test("[TaskPrecision] each task should compute specified 1/4 of the result - simple combiners (20pts)") {
+    assertTaskPrecision(simpleCombiners)
+  }
+
+  test("[TaskPrecision] each task should compute specified 1/4 of the result - small combiners (30pts)") {
+    assertTaskPrecision(basicCombiners)
+  }
+
+  test("[TaskPrecision] each task should compute specified 1/4 of the result - small combiners after combining (50pts)") {
+    assertTaskPrecision(combinedCombiners)
+  }
+
+  test("[TaskPrecision] each task should compute specified 1/4 of the result - large combiners (50pts)") {
+    assertTaskPrecision(largeCombiners)
+  }
+
+  def assertTaskPrecision(combiners: List[(DLLCombinerTest, Array[Int])]): Unit = {
+    combiners.foreach { elem =>
+      var data = Array.fill(elem._1.cnt)(0)
+      var ref = Array.fill(elem._1.cnt)(0)
+      val task1 = elem._1.task1(data)
+      task1.join
+      Range(0, elem._1.cnt).foreach(i => (if (i < elem._1.cnt / 2 - 1 && i % 2 == 0) ref(i) = elem._2(i)))
+      assert(Range(0, elem._1.cnt / 2 - 1).forall(i => data(i) == ref(i)))
+
+      data = Array.fill(elem._1.cnt)(0)
+      ref = Array.fill(elem._1.cnt)(0)
+      val task2 = elem._1.task2(data)
+      task2.join
+      Range(0, elem._1.cnt).foreach(i => (if (i < elem._1.cnt / 2 - 1 && i % 2 == 1) ref(i) = elem._2(i)))
+      assert(Range(0, elem._1.cnt / 2 - 1).forall(i => data(i) == ref(i)))
+
+      data = Array.fill(elem._1.cnt)(0)
+      ref = Array.fill(elem._1.cnt)(0)
+      val task3 = elem._1.task3(data)
+      task3.join
+      Range(0, elem._1.cnt).foreach(i => (if (i > elem._1.cnt / 2 + 1 && i % 2 == elem._1.cnt % 2) ref(i) = elem._2(i)))
+      assert(Range(elem._1.cnt / 2 + 2, elem._1.cnt).forall(i => data(i) == ref(i)))
+
+      data = Array.fill(elem._1.cnt)(0)
+      ref = Array.fill(elem._1.cnt)(0)
+      val task4 = elem._1.task4(data)
+      Range(0, elem._1.cnt).foreach(i => (if (i > elem._1.cnt / 2 + 1 && i % 2 != elem._1.cnt % 2) ref(i) = elem._2(i)))
+      assert(Range(elem._1.cnt / 2 + 2, elem._1.cnt).forall(i => data(i) == ref(i)))
+    }
+  }
+
+  test("[Public] fetch simple result without combining (5pts)") {
+    val combiner1 = DLLCombinerTest(2)
+    combiner1 += 7
+    combiner1 += 2
+    combiner1 += 3
+    combiner1 += 8
+    combiner1 += 1
+    combiner1 += 2
+    combiner1 += 3
+    combiner1 += 8
+
+    val result = combiner1.result()
+    val array = Array(7, 2, 3, 8, 1, 2, 3, 8)
+
+    assert(Range(0,array.size).forall(i => array(i) == result(i)))
+  }
+
+  test("[Public] fetch result without combining (5pts)") {
+    val combiner1 = DLLCombinerTest(2)
+    combiner1 += 7
+    combiner1 += 2
+    combiner1 += 3
+    combiner1 += 8
+    combiner1 += 1
+
+    val result = combiner1.result()
+    val array = Array(7, 2, 3, 8, 1)
+
+    assert(Range(0,array.size).forall(i => array(i) == result(i)))
+  }
+
+  test("[Public] fetch result after simple combining (5pts)") {
+    val combiner1 = DLLCombinerTest(2)
+    combiner1 += 7
+    combiner1 += 2
+
+    val combiner2 = DLLCombinerTest(2)
+    combiner2 += 3
+    combiner2 += 8
+
+    val combiner3 = DLLCombinerTest(2)
+    combiner2 += 1
+    combiner2 += 9
+
+    val combiner4 = DLLCombinerTest(2)
+    combiner2 += 3
+    combiner2 += 2
+
+    val result = combiner1.combine(combiner2).combine(combiner3).combine(combiner4).result()
+    val array = Array(7, 2, 3, 8, 1, 9, 3, 2)
+
+    assert(Range(0,array.size).forall(i => array(i) == result(i)))
+  }
+
+  test("[Public] fetch result - empty combiner (20pts)") {
+    val combiner1 = DLLCombinerTest(2)
+    val result = combiner1.result()
+    assertEquals(result.size, 0)
+  }
+
+  test("[Public] fetch result - full single element combiner (15pts)") {
+    val combiner1 = DLLCombinerTest(3)
+    combiner1 += 4
+    combiner1 += 2
+    combiner1 += 6
+
+    val result = combiner1.result()
+    val array = Array(4, 2, 6)
+
+    assert(Range(0,array.size).forall(i => array(i) == result(i)))
+  }
+
+}
+
+
+trait AbstractM6Suite extends munit.FunSuite with LibImpl {
+
+  def simpleCombiners = buildSimpleCombiners()
+  def basicCombiners = buildBasicCombiners()
+  def combinedCombiners = buildCombinedCombiners()
+  def largeCombiners = buildLargeCombiners()
+
+  def buildSimpleCombiners() = {
+    val simpleCombiners = List(
+      (DLLCombinerTest(4), Array(4, 2, 6, 1, 5, 4, 3, 5, 6, 3, 4, 5, 6, 3, 4, 5)),
+      (DLLCombinerTest(4), Array(7, 2, 2, 9, 3, 2, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2)),
+      (DLLCombinerTest(4), Array.fill(16)(5))
+    )
+    simpleCombiners.foreach(elem => build(elem._1, elem._2))
+    simpleCombiners
+  }
+
+  def buildBasicCombiners() = {
+    val basicCombiners = List(
+      (DLLCombinerTest(2), Array(4, 2, 6)),
+      (DLLCombinerTest(5), Array(4, 2, 6)),
+      (DLLCombinerTest(3), Array(4, 2, 6, 1, 7, 2, 4)),
+      (DLLCombinerTest(4), Array(7, 2, 2, 9, 3, 2, 11, 12, 13, 14, 15, 16, 17, 22)),
+      (DLLCombinerTest(3), Array.fill(16)(7)),
+      (DLLCombinerTest(3), Array.fill(19)(7)),
+      (DLLCombinerTest(3), Array.fill(5)(7)),
+      (DLLCombinerTest(3), Array.fill(6)(7))
+    )
+    basicCombiners.foreach(elem => build(elem._1, elem._2))
+    basicCombiners
+  }
+
+  def buildCombinedCombiners() = {
+    var combinedCombiners = List[(DLLCombinerTest, Array[Int])]()
+    Range(1, 10).foreach { chunk_size =>
+      val array = basicCombiners.filter(elem => elem._1.chunk_size == chunk_size).foldLeft(Array[Int]()) { (acc, i) => acc ++ i._2 }
+      val combiner = DLLCombinerTest(chunk_size)
+      basicCombiners.filter(elem => elem._1.chunk_size == chunk_size).foreach(elem => combiner.combine(elem._1))
+
+      combinedCombiners  = combinedCombiners :+ (combiner, array)
+    }
+    combinedCombiners
+  }
+
+  def buildLargeCombiners() = {
+    val largeCombiners = List(
+      (DLLCombinerTest(21), Array.fill(1321)(4) ++ Array.fill(1322)(7)),
+      (DLLCombinerTest(18), Array.fill(1341)(2) ++ Array.fill(1122)(5)),
+      (DLLCombinerTest(3), Array.fill(1321)(4) ++ Array.fill(1322)(7) ++ Array.fill(321)(4) ++ Array.fill(322)(7)),
+      (DLLCombinerTest(12), Array.fill(992321)(4) ++ Array.fill(99322)(7)),
+      (DLLCombinerTest(4), Array.fill(953211)(4) ++ Array.fill(999322)(1))
+    )
+    largeCombiners.foreach(elem => build(elem._1, elem._2))
+    largeCombiners
+  }
+
+  def build(combiner: DLLCombinerTest, array: Array[Int]): DLLCombinerTest = {
+    array.foreach(elem => combiner += elem)
+    combiner
+  }
+
+  def compare(combiner: DLLCombinerTest, array: Array[Int]): Boolean = {
+    val result = combiner.result()
+    Range(0,array.size).forall(i => array(i) == result(i))
+  }
+
+  def buildAndCompare(combiner: DLLCombinerTest, array: Array[Int]): Boolean = {
+    array.foreach(elem => combiner += elem)
+    val result = combiner.result()
+
+    Range(0,array.size).forall(i => array(i) == result(i))
+  }
+
+}
+
+trait LibImpl extends M6 {
+
+  val forkJoinPool = new ForkJoinPool
+
+  abstract class TaskScheduler {
+    def schedule[T](body: => T): ForkJoinTask[T]
+  }
+
+  class DefaultTaskScheduler extends TaskScheduler {
+    def schedule[T](body: => T): ForkJoinTask[T] = {
+      val t = new RecursiveTask[T] {
+        def compute = body
+      }
+      Thread.currentThread match {
+        case wt: ForkJoinWorkerThread =>
+          t.fork()
+        case _ =>
+          forkJoinPool.execute(t)
+      }
+      t
+    }
+  }
+
+  val scheduler =
+    new DynamicVariable[TaskScheduler](new DefaultTaskScheduler)
+
+  def task[T](body: => T): ForkJoinTask[T] = {
+    scheduler.value.schedule(body)
+  }
+
+  class DLLCombinerTest(chunk_size: Int = 3) extends DLLCombinerImplementation(chunk_size) {
+
+    override def +=(elem: Int): Unit = {
+      if(cnt % chunk_size == 0) {
+        chunks = chunks + 1
+        val node = new Node(chunk_size)
+        if (cnt == 0) {
+          head = node
+          last = node
+        }
+        else {
+          last.next = node
+          node.previous = last
+          last = node
+        }
+      }
+      last.add(elem)
+      cnt += 1
+    }
+
+    override def combine(that: DLLCombiner): DLLCombiner = {
+      assert(this.chunk_size == that.chunk_size)
+      if (this.cnt == 0) {
+        this.head = that.head
+        this.last = that.last
+        this.cnt = that.cnt
+        this.chunks = that.chunks
+
+        this
+      }
+      else if (that.cnt == 0)
+        this
+      else {
+        this.last.next = that.head
+        that.head.previous = this.last
+
+        this.cnt = this.cnt + that.cnt
+        this.chunks = this.chunks + that.chunks
+        this.last = that.last
+
+        this
+      }
+    }
+  }
+}
diff --git a/previous-exams/2021-midterm/m7.md b/previous-exams/2021-midterm/m7.md
new file mode 100644
index 0000000..899703e
--- /dev/null
+++ b/previous-exams/2021-midterm/m7.md
@@ -0,0 +1,155 @@
+Use the following commands to make a fresh clone of your repository:
+
+```
+git clone -b m7 git@gitlab.epfl.ch:lamp/student-repositories-s21/cs206-GASPAR.git m7
+```
+
+## Useful links
+
+  * [A guide to the Scala parallel collections](https://docs.scala-lang.org/overviews/parallel-collections/overview.html)
+  * [The API documentation of the Scala parallel collections](https://www.javadoc.io/doc/org.scala-lang.modules/scala-parallel-collections_2.13/latest/scala/collection/index.html)
+  * [The API documentation of the Scala standard library](https://www.scala-lang.org/files/archive/api/2.13.4)
+  * [The API documentation of the Java standard library](https://docs.oracle.com/en/java/javase/15/docs/api/index.html)
+
+**If you have issues with the IDE, try [reimporting the
+build](https://gitlab.epfl.ch/lamp/cs206/-/blob/master/labs/example-lab.md#ide-features-like-type-on-hover-or-go-to-definition-do-not-work),
+if you still have problems, use `compile` in sbt instead.**
+
+## Exercise
+
+In this exercise, you will implement an array Combiner using internally a doubly linked list of arrays. Your goal is to complete the implementation of the (simplified) Combiner interface, by implementing the `result` method to compute the result array from this array combiner.
+
+Here you can see the declaration of the `DLLCombiner` class and the related `Node` class definition. Look at the `Lib` trait in the `lib.scala` file to find all definitions of relevant functions and classes.
+
+
+```scala
+  class Node(val size: Int) {
+    var value: Array[Int] = new Array(size)
+    var next: Node = null
+    var previous: Node = null
+    var cnt = 0
+
+    def add(v: Int) = {
+      value(cnt) = v
+      cnt += 1
+    }
+  }
+
+  // Simplified Combiner interface
+  // Implements methods += and combine
+  // Abstract methods should be implemented in subclasses
+  abstract class DLLCombiner(val chunk_size: Int)
+```
+
+`DLLCombiner` class contains the implementation of methods `+=` and `combine`. You should look at them to better understand the structure of this array Combiner, before moving on to solving this exercise.
+
+Your task in the exercise will be to implement the `result` method of the `DLLCombinerImplementation` class. This method should compute the result array from this array combiner. This method should work in parallel according to the Combiner contract. Implement this method efficiently using 4 parallel tasks, by copying the doubly linked list to the array from both ends at the same time. Two threads should start from the start of the list and two from the end. In each case, one thread would be responsible for odd list indexes and the other for even ones.
+
+
+```scala
+  class DLLCombinerImplementation(chunk_size: Int = 3) extends DLLCombiner(chunk_size) {
+
+    // Computes every other Integer element of data array, starting from the second, up to the middle
+    def task1(data: Array[Int]) = task {
+      ???
+    }
+
+    // Computes every other Integer element of data array, starting from the first (index 0), up to the middle
+    def task2(data: Array[Int]) = task {
+      ???
+    }
+
+    // Computes every other Integer element of data array, starting from the last, up to the middle
+    def task3(data: Array[Int]) = task {
+      ???
+    }
+
+    // Computes every other Integer element of data array, starting from the second to last, up to the middle
+    // This is executed on the current thread.
+    def task4(data: Array[Int]) = {
+      ???
+    }
+
+    def result(): Array[Int] = {
+      val data = new Array[Int](cnt)
+
+      ???
+
+      data
+    }
+
+  }
+```
+
+Following the description above, your task in the exercise is to:
+
+- Implement the four tasks to copy parts of the array. Each task is responsible for computing one quarter of the array, as indicated in comments:
+    + Task 1: Computes every other Integer element of data array, starting from the second, up to the middle
+    + Task 2: Computes every other Integer element of data array, starting from the first (index 0), up to the middle
+    + Task 3: Computes every other Integer element of data array, starting from the last, up to the middle
+    + Task 4: Computes every other Integer element of data array, starting from the second to last, up to the middle
+- Implement the method `result` to compute the result array in parallel using those four tasks.
+
+Hints:
+
+- Note that this doubly linked list implementation uses `null` pointers to represent the absence of nodes. Be careful when working with `null` pointers in your solution, to avoid causing a `NullPointerException`.
+
+- `DLLCombinerImplementation` comes with a private `copyForward` method that you can use in your solution:
+
+```scala
+  private def copyForward(data: Array[Int], curr: Node, from: Int, to: Int, limit: Int)
+```
+
+This method copies certain elements from a doubly linked list to an array, in a way that might be useful for this exercise.
+
+## Examples
+
+Here is one example of the `result` method with intermediate results:
+
+```scala
+    val combiner1 = DLLCombinerImplementation(4)
+    combiner1 += 7 // (7)
+    combiner1 += 2 // (7, 2)
+    combiner1 += 4 // (7, 2, 4)
+    combiner1 += 3 // (7, 2, 4, 3)
+    combiner1 += 9 // (7, 2, 4, 3) <-> (9)
+    combiner1 += 5 // (7, 2, 4, 3) <-> (9, 5)
+    combiner1 += 1 // (7, 2, 4, 3) <-> (9, 5, 1)
+
+    val res1 = combiner1.result() // (7, 2, 4, 3, 9, 5, 1)
+
+```
+In this example, `task1` was responsible for computing elements at index 1, `task2` for computing elements at indexes 0 and 2, `task3` for computing elements at indexes 6 and 4, and `task4` for computing elements at indexes 5 and 3.
+
+Here is another example with combining:
+
+```scala
+    val c1 = DLLCombinerImplementation(4)
+    c1 += 7 // (7)
+    c1 += 2 // (7, 2)
+    c1 += 4 // (7, 2, 4)
+    c1 += 3 // (7, 2, 4, 3)
+    c1 += 9 // (7, 2, 4, 3) <-> (9)
+    c1 += 5 // (7, 2, 4, 3) <-> (9, 5)
+    c1 += 1 // (7, 2, 4, 3) <-> (9, 5, 1)
+
+    val c2 = DLLCombinerImplementation(4)
+    c2 += 6 // (6)
+    c2 += 8 // (6, 8)
+    c2 += 5 // (6, 8, 5)
+    c2 += 1 // (6, 8, 5, 1)
+
+    val c3 = DLLCombinerImplementation(4)
+    c3 += 1 // (1)
+
+    c1.combine(c2).combine(c3) // (7, 2, 4, 3) <-> (9, 5, 1) <-> (6, 8, 5, 1) <-> (1)
+    val res = c1.result() // (7, 2, 4, 3, 9, 5, 1, 6, 8, 5, 1, 1)
+
+```
+
+You can look at the public tests to find more examples.
+
+In your solution you should only make changes to the `DLLCombinerImplementation` class. You are not allowed to change the file `lib.scala`. You can get partial points for solving parts of this exercise.
+
+
+
diff --git a/previous-exams/2021-midterm/m7/.gitignore b/previous-exams/2021-midterm/m7/.gitignore
new file mode 100644
index 0000000..40937dc
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/.gitignore
@@ -0,0 +1,22 @@
+# General
+*.DS_Store
+*.swp
+*~
+
+# Dotty
+*.class
+*.tasty
+*.hasTasty
+
+# sbt
+target/
+
+# IDE
+.bsp
+.bloop
+.metals
+.vscode
+
+# datasets
+stackoverflow-grading.csv
+wikipedia-grading.dat
diff --git a/previous-exams/2021-midterm/m7/assignment.sbt b/previous-exams/2021-midterm/m7/assignment.sbt
new file mode 100644
index 0000000..da7eb3c
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/assignment.sbt
@@ -0,0 +1,2 @@
+// Student tasks (i.e. submit, packageSubmission)
+enablePlugins(StudentTasks)
diff --git a/previous-exams/2021-midterm/m7/build.sbt b/previous-exams/2021-midterm/m7/build.sbt
new file mode 100644
index 0000000..25a0926
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/build.sbt
@@ -0,0 +1,12 @@
+course := "midterm"
+assignment := "m7"
+scalaVersion := "3.0.0-RC1"
+scalacOptions ++= Seq("-language:implicitConversions", "-deprecation")
+
+libraryDependencies += "org.scalameta" %% "munit" % "0.7.22"
+
+val MUnitFramework = new TestFramework("munit.Framework")
+testFrameworks += MUnitFramework
+// Decode Scala names
+testOptions += Tests.Argument(MUnitFramework, "-s")
+testSuite := "m7.M7Suite"
diff --git a/previous-exams/2021-midterm/m7/grading-tests.jar b/previous-exams/2021-midterm/m7/grading-tests.jar
new file mode 100644
index 0000000000000000000000000000000000000000..4536552028df3dbab3c2d6fd1d7ae9f4f1322f75
GIT binary patch
literal 35244
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
Il2#B805RkCod5s;

literal 0
HcmV?d00001

diff --git a/previous-exams/2021-midterm/m7/project/FilteringReporterPlugin.scala b/previous-exams/2021-midterm/m7/project/FilteringReporterPlugin.scala
new file mode 100644
index 0000000..2e4fd9a
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/project/FilteringReporterPlugin.scala
@@ -0,0 +1,31 @@
+package sbt // To access the private[sbt] compilerReporter key
+package filteringReporterPlugin
+
+import Keys._
+import ch.epfl.lamp._
+
+object FilteringReporterPlugin extends AutoPlugin {
+  override lazy val projectSettings = Seq(
+    // Turn off warning coming from scalameter that we cannot fix without changing scalameter
+    compilerReporter in (Compile, compile) ~= { reporter => new FilteringReporter(reporter) }
+  )
+}
+
+class FilteringReporter(reporter: xsbti.Reporter) extends xsbti.Reporter {
+
+  def reset(): Unit = reporter.reset()
+  def hasErrors: Boolean = reporter.hasErrors
+  def hasWarnings: Boolean = reporter.hasWarnings
+  def printSummary(): Unit = reporter.printSummary()
+  def problems: Array[xsbti.Problem] = reporter.problems
+
+  def log(problem: xsbti.Problem): Unit = {
+    if (!problem.message.contains("An existential type that came from a Scala-2 classfile cannot be"))
+      reporter.log(problem)
+  }
+
+  def comment(pos: xsbti.Position, msg: String): Unit =
+    reporter.comment(pos, msg)
+
+  override def toString = s"CollectingReporter($reporter)"
+}
diff --git a/previous-exams/2021-midterm/m7/project/MOOCSettings.scala b/previous-exams/2021-midterm/m7/project/MOOCSettings.scala
new file mode 100644
index 0000000..1c40443
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/project/MOOCSettings.scala
@@ -0,0 +1,49 @@
+package ch.epfl.lamp
+
+import sbt._
+import sbt.Keys._
+
+/**
+ * Coursera uses two versions of each assignment. They both have the same assignment key and part id but have
+ * different item ids.
+ *
+ * @param key Assignment key
+ * @param partId Assignment partId
+ * @param itemId Item id of the non premium version
+ * @param premiumItemId Item id of the premium version (`None` if the assignment is optional)
+ */
+case class CourseraId(key: String, partId: String, itemId: String, premiumItemId: Option[String])
+
+/**
+  * Settings shared by all assignments, reused in various tasks.
+  */
+object MOOCSettings extends AutoPlugin {
+
+  override def requires = super.requires && filteringReporterPlugin.FilteringReporterPlugin
+
+  object autoImport {
+    val course = SettingKey[String]("course")
+    val assignment = SettingKey[String]("assignment")
+    val options = SettingKey[Map[String, Map[String, String]]]("options")
+    val courseraId = settingKey[CourseraId]("Coursera-specific information identifying the assignment")
+    val testSuite = settingKey[String]("Fully qualified name of the test suite of this assignment")
+      .withRank(KeyRanks.Invisible)
+    // Convenient alias
+    type CourseraId = ch.epfl.lamp.CourseraId
+    val CourseraId = ch.epfl.lamp.CourseraId
+  }
+
+  import autoImport._
+
+  override val globalSettings: Seq[Def.Setting[_]] = Seq(
+    // supershell is verbose, buggy and useless.
+    useSuperShell := false
+  )
+
+  override val projectSettings: Seq[Def.Setting[_]] = Seq(
+    parallelExecution in Test := false,
+    // Report test result after each test instead of waiting for every test to finish
+    logBuffered in Test := false,
+    name := s"${course.value}-${assignment.value}"
+  )
+}
diff --git a/previous-exams/2021-midterm/m7/project/StudentTasks.scala b/previous-exams/2021-midterm/m7/project/StudentTasks.scala
new file mode 100644
index 0000000..c4669af
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/project/StudentTasks.scala
@@ -0,0 +1,303 @@
+package ch.epfl.lamp
+
+import sbt._
+import Keys._
+
+// import scalaj.http._
+import java.io.{File, FileInputStream, IOException}
+import org.apache.commons.codec.binary.Base64
+// import play.api.libs.json.{Json, JsObject, JsPath}
+import scala.util.{Failure, Success, Try}
+
+/**
+  * Provides tasks for submitting the assignment
+  */
+object StudentTasks extends AutoPlugin {
+
+  override def requires = super.requires && MOOCSettings
+
+  object autoImport {
+    val packageSourcesOnly = TaskKey[File]("packageSourcesOnly", "Package the sources of the project")
+    val packageBinWithoutResources = TaskKey[File]("packageBinWithoutResources", "Like packageBin, but without the resources")
+    val packageSubmissionZip = TaskKey[File]("packageSubmissionZip")
+    val packageSubmission = inputKey[Unit]("package solution as an archive file")
+
+    lazy val Grading = config("grading") extend(Runtime)
+  }
+
+
+  import autoImport._
+  import MOOCSettings.autoImport._
+
+  override lazy val projectSettings = Seq(
+    packageSubmissionSetting,
+    fork := true,
+    connectInput in run := true,
+    outputStrategy := Some(StdoutOutput),
+  ) ++
+    packageSubmissionZipSettings ++
+    inConfig(Grading)(Defaults.testSettings ++ Seq(
+      unmanagedJars += file("grading-tests.jar"),
+
+      definedTests := (definedTests in Test).value,
+      internalDependencyClasspath := (internalDependencyClasspath in Test).value
+    ))
+
+
+  /** **********************************************************
+    * SUBMITTING A SOLUTION TO COURSERA
+    */
+
+  val packageSubmissionZipSettings = Seq(
+    packageSubmissionZip := {
+      val submission = crossTarget.value / "submission.zip"
+      val sources = (packageSourcesOnly in Compile).value
+      val binaries = (packageBinWithoutResources in Compile).value
+      IO.zip(Seq(sources -> "sources.zip", binaries -> "binaries.jar"), submission, None)
+      submission
+    },
+    artifactClassifier in packageSourcesOnly := Some("sources"),
+    artifact in (Compile, packageBinWithoutResources) ~= (art => art.withName(art.name + "-without-resources"))
+  ) ++
+  inConfig(Compile)(
+    Defaults.packageTaskSettings(packageSourcesOnly, Defaults.sourceMappings) ++
+    Defaults.packageTaskSettings(packageBinWithoutResources, Def.task {
+      val relativePaths =
+        (unmanagedResources in Compile).value.flatMap(Path.relativeTo((unmanagedResourceDirectories in Compile).value)(_))
+      (mappings in (Compile, packageBin)).value.filterNot { case (_, path) => relativePaths.contains(path) }
+    })
+  )
+
+  val maxSubmitFileSize = {
+    val mb = 1024 * 1024
+    10 * mb
+  }
+
+  /** Check that the jar exists, isn't empty, isn't crazy big, and can be read
+    * If so, encode jar as base64 so we can send it to Coursera
+    */
+  def prepareJar(jar: File, s: TaskStreams): String = {
+    val errPrefix = "Error submitting assignment jar: "
+    val fileLength = jar.length()
+    if (!jar.exists()) {
+      s.log.error(errPrefix + "jar archive does not exist\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength == 0L) {
+      s.log.error(errPrefix + "jar archive is empty\n" + jar.getAbsolutePath)
+      failSubmit()
+    } else if (fileLength > maxSubmitFileSize) {
+      s.log.error(errPrefix + "jar archive is too big. Allowed size: " +
+        maxSubmitFileSize + " bytes, found " + fileLength + " bytes.\n" +
+        jar.getAbsolutePath)
+      failSubmit()
+    } else {
+      val bytes = new Array[Byte](fileLength.toInt)
+      val sizeRead = try {
+        val is = new FileInputStream(jar)
+        val read = is.read(bytes)
+        is.close()
+        read
+      } catch {
+        case ex: IOException =>
+          s.log.error(errPrefix + "failed to read sources jar archive\n" + ex.toString)
+          failSubmit()
+      }
+      if (sizeRead != bytes.length) {
+        s.log.error(errPrefix + "failed to read the sources jar archive, size read: " + sizeRead)
+        failSubmit()
+      } else encodeBase64(bytes)
+    }
+  }
+
+  /** Task to package solution to a given file path */
+  lazy val packageSubmissionSetting = packageSubmission := {
+    val args: Seq[String] = Def.spaceDelimited("[path]").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val base64Jar = prepareJar(jar, s)
+
+    val path = args.headOption.getOrElse((baseDirectory.value / "submission.jar").absolutePath)
+    scala.tools.nsc.io.File(path).writeAll(base64Jar)
+  }
+
+/*
+  /** Task to submit a solution to coursera */
+  val submit = inputKey[Unit]("submit solution to Coursera")
+  lazy val submitSetting = submit := {
+    // Fail if scalafix linting does not pass.
+    scalafixLinting.value
+
+    val args: Seq[String] = Def.spaceDelimited("<arg>").parsed
+    val s: TaskStreams = streams.value // for logging
+    val jar = (packageSubmissionZip in Compile).value
+
+    val assignmentDetails =
+      courseraId.?.value.getOrElse(throw new MessageOnlyException("This assignment can not be submitted to Coursera because the `courseraId` setting is undefined"))
+    val assignmentKey = assignmentDetails.key
+    val courseName =
+      course.value match {
+        case "capstone" => "scala-capstone"
+        case "bigdata"  => "scala-spark-big-data"
+        case other      => other
+      }
+
+    val partId = assignmentDetails.partId
+    val itemId = assignmentDetails.itemId
+    val premiumItemId = assignmentDetails.premiumItemId
+
+    val (email, secret) = args match {
+      case email :: secret :: Nil =>
+        (email, secret)
+      case _ =>
+        val inputErr =
+          s"""|Invalid input to `submit`. The required syntax for `submit` is:
+              |submit <email-address> <submit-token>
+              |
+              |The submit token is NOT YOUR LOGIN PASSWORD.
+              |It can be obtained from the assignment page:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId
+              |${
+                premiumItemId.fold("") { id =>
+                  s"""or (for premium learners):
+                     |https://www.coursera.org/learn/$courseName/programming/$id
+                   """.stripMargin
+                }
+              }
+          """.stripMargin
+        s.log.error(inputErr)
+        failSubmit()
+    }
+
+    val base64Jar = prepareJar(jar, s)
+    val json =
+      s"""|{
+          |   "assignmentKey":"$assignmentKey",
+          |   "submitterEmail":"$email",
+          |   "secret":"$secret",
+          |   "parts":{
+          |      "$partId":{
+          |         "output":"$base64Jar"
+          |      }
+          |   }
+          |}""".stripMargin
+
+    def postSubmission[T](data: String): Try[HttpResponse[String]] = {
+      val http = Http("https://www.coursera.org/api/onDemandProgrammingScriptSubmissions.v1")
+      val hs = List(
+        ("Cache-Control", "no-cache"),
+        ("Content-Type", "application/json")
+      )
+      s.log.info("Connecting to Coursera...")
+      val response = Try(http.postData(data)
+                         .headers(hs)
+                         .option(HttpOptions.connTimeout(10000)) // scalaj default timeout is only 100ms, changing that to 10s
+                         .asString) // kick off HTTP POST
+      response
+    }
+
+    val connectMsg =
+      s"""|Attempting to submit "${assignment.value}" assignment in "$courseName" course
+          |Using:
+          |- email: $email
+          |- submit token: $secret""".stripMargin
+    s.log.info(connectMsg)
+
+    def reportCourseraResponse(response: HttpResponse[String]): Unit = {
+      val code = response.code
+      val respBody = response.body
+
+       /* Sample JSON response from Coursera
+      {
+        "message": "Invalid email or token.",
+        "details": {
+          "learnerMessage": "Invalid email or token."
+        }
+      }
+      */
+
+      // Success, Coursera responds with 2xx HTTP status code
+      if (response.is2xx) {
+        val successfulSubmitMsg =
+          s"""|Successfully connected to Coursera. (Status $code)
+              |
+                |Assignment submitted successfully!
+              |
+                |You can see how you scored by going to:
+              |https://www.coursera.org/learn/$courseName/programming/$itemId/
+              |${
+            premiumItemId.fold("") { id =>
+              s"""or (for premium learners):
+                 |https://www.coursera.org/learn/$courseName/programming/$id
+                       """.stripMargin
+            }
+          }
+              |and clicking on "My Submission".""".stripMargin
+        s.log.info(successfulSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 4xx HTTP status code (client-side failure)
+      else if (response.is4xx) {
+        val result = Try(Json.parse(respBody)).toOption
+        val learnerMsg = result match {
+          case Some(resp: JsObject) =>
+            (JsPath \ "details" \ "learnerMessage").read[String].reads(resp).get
+          case Some(x) => // shouldn't happen
+            "Could not parse Coursera's response:\n" + x
+          case None =>
+            "Could not parse Coursera's response:\n" + respBody
+        }
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |There was something wrong while attempting to submit.
+              |Coursera says:
+              |$learnerMsg (Status $code)""".stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera responds with 5xx HTTP status code (server-side failure)
+      else if (response.is5xx) {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera seems to be unavailable at the moment (Status $code)
+              |Check https://status.coursera.org/ and try again in a few minutes.
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+
+      // Failure, Coursera repsonds with an unexpected status code
+      else {
+        val failedSubmitMsg =
+          s"""|Submission failed.
+              |Coursera replied with an unexpected code (Status $code)
+           """.stripMargin
+        s.log.error(failedSubmitMsg)
+      }
+    }
+
+    // kick it all off, actually make request
+    postSubmission(json) match {
+      case Success(resp) => reportCourseraResponse(resp)
+      case Failure(e) =>
+        val failedConnectMsg =
+          s"""|Connection to Coursera failed.
+              |There was something wrong while attempting to connect to Coursera.
+              |Check your internet connection.
+              |${e.toString}""".stripMargin
+        s.log.error(failedConnectMsg)
+    }
+
+   }
+*/
+
+  def failSubmit(): Nothing = {
+    sys.error("Submission failed")
+  }
+
+  /**
+    * *****************
+    * DEALING WITH JARS
+    */
+  def encodeBase64(bytes: Array[Byte]): String =
+    new String(Base64.encodeBase64(bytes))
+}
diff --git a/previous-exams/2021-midterm/m7/project/build.properties b/previous-exams/2021-midterm/m7/project/build.properties
new file mode 100644
index 0000000..0b2e09c
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/project/build.properties
@@ -0,0 +1 @@
+sbt.version=1.4.7
diff --git a/previous-exams/2021-midterm/m7/project/buildSettings.sbt b/previous-exams/2021-midterm/m7/project/buildSettings.sbt
new file mode 100644
index 0000000..8fac702
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/project/buildSettings.sbt
@@ -0,0 +1,5 @@
+// Used for Coursera submission (StudentPlugin)
+// libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.4.2"
+// libraryDependencies += "com.typesafe.play" %% "play-json" % "2.7.4"
+// Used for Base64 (StudentPlugin)
+libraryDependencies += "commons-codec" % "commons-codec" % "1.10"
diff --git a/previous-exams/2021-midterm/m7/project/plugins.sbt b/previous-exams/2021-midterm/m7/project/plugins.sbt
new file mode 100644
index 0000000..021c019
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/project/plugins.sbt
@@ -0,0 +1,2 @@
+// addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")
+addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.3")
diff --git a/previous-exams/2021-midterm/m7/src/main/scala/m7/M7.scala b/previous-exams/2021-midterm/m7/src/main/scala/m7/M7.scala
new file mode 100644
index 0000000..d941f26
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/src/main/scala/m7/M7.scala
@@ -0,0 +1,149 @@
+package m7
+
+import java.util.concurrent._
+import scala.util.DynamicVariable
+
+trait M7 extends Lib {
+
+  class DLLCombinerImplementation(chunk_size: Int = 3) extends DLLCombiner(chunk_size){
+
+    // Computes every other Integer element of data array, starting from the second, up to the middle
+    def task1(data: Array[Int]): ForkJoinTask[Unit] = task {
+
+      var current = head
+      if(current != null) {
+        var i_from = 1
+        var i_to = 1
+
+        if(i_from >= current.cnt) {
+          current = current.next
+          if(current != null) {
+            i_from = 0
+          }
+          else i_to = cnt/2 // to stop the loop
+        }
+
+        copyForward(data, current, i_from, i_to, cnt/2)
+      }
+    }
+
+    // Computes every other Integer element of data array, starting from the first (index 0), up to the middle
+    def task2(data: Array[Int]): ForkJoinTask[Unit] = task {
+
+      var current = head
+      if(current != null) {
+        var i_from = 0
+        var i_to = 0
+        copyForward(data, current, i_from, i_to, cnt/2)
+      } 
+    }
+
+    // Computes every other Integer element of data array, starting from the last, up to the middle
+    def task3(data: Array[Int]): ForkJoinTask[Unit] = task {
+
+      var current = last
+      if( current != null) {
+        var i_from = current.cnt - 1
+        var i_to = cnt - 1
+        copyBackward(data, current, i_from, i_to, cnt/2)
+      }
+    }
+
+    // Computes every other Integer element of data array, starting from the second to last, up to the middle
+    // This is executed on the current thread.
+    def task4(data: Array[Int]): Unit = {
+
+      var current = last
+      if( current != null) {
+        var i_to = cnt - 2
+        var i_from = current.cnt - 2
+        if(i_from < 0) {
+          current = current.previous
+          if(current != null) {
+            i_from = current.cnt - 1
+          }
+          else i_to = cnt/2 - 1 // to stop the loop
+        }
+
+        copyBackward(data, current, i_from, i_to, cnt/2)
+      }
+    }
+
+    def result(): Array[Int] = {
+      val data = new Array[Int](cnt)
+
+      val t1 = task1(data)
+      val t2 = task2(data)
+      val t3 = task3(data)
+
+      task4(data)
+
+      t1.join()
+      t2.join()
+      t3.join()
+
+
+      data
+    }
+
+
+    private def copyBackward(data: Array[Int], curr: Node, from: Int, to: Int, limit: Int) = {
+      var current = curr
+      var i_from = from
+      var i_to = to 
+
+      while (i_to >= limit) {
+        try{
+          data(i_to) = current.value(i_from)
+          i_to -= 2
+          i_from -= 2
+          if(i_from == -1) {
+            current = current.previous
+            i_from = current.cnt - 1
+          }
+          else if(i_from == -2) {
+            current = current.previous
+            i_from = current.cnt - 2
+            if(current.cnt == 1) {
+              current = current.previous
+              i_from = current.cnt - 1
+            }
+          }
+        }
+        catch{
+          case e: Exception =>
+        }
+      }
+        
+    }
+    private def copyForward(data: Array[Int], curr: Node, from: Int, to: Int, limit: Int) = {
+      var current = curr
+      var i_from = from
+      var i_to = to 
+
+      while (i_to < limit) {
+        try {
+          data(i_to) = current.value(i_from)
+          i_to += 2
+          i_from += 2
+          if(i_from == current.cnt){
+            current = current.next
+            i_from = 0
+          }
+          else if(i_from > current.cnt) {
+            current = current.next
+            i_from = 1
+            if(current.cnt == 1) {
+              current = current.next
+              i_from = 0
+            }
+          }
+        }
+        catch{
+          case e: Exception =>
+        }
+      }
+    }
+  }
+
+}
diff --git a/previous-exams/2021-midterm/m7/src/main/scala/m7/lib.scala b/previous-exams/2021-midterm/m7/src/main/scala/m7/lib.scala
new file mode 100644
index 0000000..20eda60
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/src/main/scala/m7/lib.scala
@@ -0,0 +1,84 @@
+package m7
+
+import java.util.concurrent._
+import scala.util.DynamicVariable
+
+trait Lib {
+
+  class Node(val size: Int) {
+    var value: Array[Int] = new Array(size)
+    var next: Node = null    
+    var previous: Node = null
+    var cnt = 0
+
+    def add(v: Int) = {
+      value(cnt) = v
+      cnt += 1
+    }
+  }
+
+  // Simplified Combiner interface
+  // Implements methods += and combine
+  // Abstract methods should be implemented in subclasses
+  abstract class DLLCombiner(val chunk_size: Int) {
+    var head: Node = null
+    var last: Node = null
+    var cnt: Int = 0
+    var chunks: Int = 0
+
+    // Adds an Integer to the last node of this array combiner. If the last node is full, allocates a new node.
+    def +=(elem: Int): Unit = {
+      if(cnt % chunk_size == 0) {
+        chunks = chunks + 1
+        val node = new Node(chunk_size)
+        if (cnt == 0) {
+          head = node
+          last = node
+        }
+        else {
+          last.next = node
+          node.previous = last
+          last = node
+        }
+      }
+      last.add(elem)
+      cnt += 1
+    }
+
+    // Combines this array combiner and another given combiner in constant O(1) complexity.
+    def combine(that: DLLCombiner): DLLCombiner = {
+      assert(this.chunk_size == that.chunk_size)
+      if (this.cnt == 0) {
+        this.head = that.head
+        this.last = that.last
+        this.cnt = that.cnt
+        this.chunks = that.chunks
+
+        this
+      }
+      else if (that.cnt == 0)
+        this
+      else {
+        this.last.next = that.head
+        that.head.previous = this.last
+
+        this.cnt = this.cnt + that.cnt
+        this.chunks = this.chunks + that.chunks
+        this.last = that.last
+
+        this
+      }
+    }
+
+    def task1(data: Array[Int]): ForkJoinTask[Unit]
+    def task2(data: Array[Int]): ForkJoinTask[Unit]
+    def task3(data: Array[Int]): ForkJoinTask[Unit]
+    def task4(data: Array[Int]): Unit
+
+    def result(): Array[Int]
+
+  }
+
+  def task[T](body: => T): ForkJoinTask[T]
+
+}
\ No newline at end of file
diff --git a/previous-exams/2021-midterm/m7/src/test/scala/m7/M7Suite.scala b/previous-exams/2021-midterm/m7/src/test/scala/m7/M7Suite.scala
new file mode 100644
index 0000000..8e1c344
--- /dev/null
+++ b/previous-exams/2021-midterm/m7/src/test/scala/m7/M7Suite.scala
@@ -0,0 +1,422 @@
+package m7
+
+import java.util.concurrent._
+import scala.util.DynamicVariable
+
+class M7Suite extends AbstractM7Suite {
+
+  // (70+) 30 / 500 points for correct implementation, don't check parallelism
+  test("[Correctness] fetch result - simple combiners (5pts)") {
+    assertCorrectnessSimple()
+  }
+
+  test("[Correctness] fetch result - small combiners (5pts)") {
+    assertCorrectnessBasic()
+  }
+
+  test("[Correctness] fetch result - small combiners after combining (10pts)") {
+    assertCorrectnessCombined()
+  }
+
+  test("[Correctness] fetch result - large combiners (10pts)") {
+    assertCorrectnessLarge()
+  }
+
+  def assertCorrectnessSimple() = {
+    simpleCombiners.foreach(elem => assert(compare(elem._1, elem._2)))
+  }
+
+  def assertCorrectnessBasic() = {
+    basicCombiners.foreach(elem => assert(compare(elem._1, elem._2)))
+  }
+
+  def assertCorrectnessCombined() = {
+    combinedCombiners.foreach(elem => assert(compare(elem._1, elem._2)))
+  }
+
+  def assertCorrectnessLarge() = {
+    largeCombiners.foreach(elem => assert(compare(elem._1, elem._2)))
+  }
+
+  // (70+30+) 50 / 500 points for correct parallel implementation, don't check if it's exactly 1/4 of the array per task
+  private var count = 0
+  private val expected = 3
+
+  override def task[T](body: => T): ForkJoinTask[T] = {
+    count += 1
+    scheduler.value.schedule(body)
+  }
+
+  test("[TaskCount] number of newly created tasks should be 3 (5pts)") {
+    assertTaskCountSimple()
+  }
+
+  test("[TaskCount] fetch result and check parallel - simple combiners (5pts)") {
+    assertTaskCountSimple()
+    assertCorrectnessSimple()
+  }
+
+  test("[TaskCount] fetch result and check parallel - small combiners (10pts)") {
+    assertTaskCountSimple()
+    assertCorrectnessBasic()
+  }
+
+  test("[TaskCount] fetch result and check parallel - small combiners after combining (15pts)") {
+    assertTaskCountSimple()
+    assertCorrectnessCombined()
+  }
+
+  test("[TaskCount] fetch result and check parallel - large combiners (15pts)") {
+    assertTaskCountSimple()
+    assertCorrectnessLarge()
+  }
+
+  def assertTaskCountSimple(): Unit = {
+    simpleCombiners.foreach(elem => assertTaskCount(elem._1, elem._2))
+  }
+
+  def assertTaskCount(combiner: DLLCombinerTest, array: Array[Int]): Unit = {
+    try {
+      count = 0
+      build(combiner, array)
+      combiner.result()
+      assertEquals(count, expected, {
+        s"ERROR: Expected $expected instead of $count calls to `task(...)`"
+      })
+    } finally {
+      count = 0
+    }
+  }
+
+  //(70+30+50+) 200 / 500 points for correct parallel implementation, exactly 1/4 of the array per task
+  test("[TaskFairness] each task should compute 1/4 of the result (50pts)") {
+    assertTaskFairness(simpleCombiners.unzip._1)
+  }
+
+  test("[TaskFairness] each task should correctly compute 1/4 of the result - simple combiners (20pts)") {
+    assertTaskFairness(simpleCombiners.unzip._1)
+    assertCorrectnessSimple()
+  }
+
+  test("[TaskFairness] each task should correctly compute 1/4 of the result - small combiners (30pts)") {
+    assertTaskFairness(basicCombiners.unzip._1)
+    assertCorrectnessBasic()
+  }
+
+  test("[TaskFairness] each task should correctly compute 1/4 of the result - small combiners after combining (50pts)") {
+    assertTaskFairness(combinedCombiners.unzip._1)
+    assertCorrectnessCombined()
+  }
+
+  test("[TaskFairness] each task should correctly compute 1/4 of the result - large combiners (50pts)") {
+    assertTaskFairness(largeCombiners.unzip._1)
+    assertCorrectnessLarge()
+  }
+
+  def assertTaskFairness(combiners: List[DLLCombinerTest]): Unit = {
+    def assertNewTaskFairness(combiner: DLLCombinerTest, task: ForkJoinTask[Unit], data: Array[Int]) = {
+      var count = 0
+      var expected = combiner.cnt / 4
+      task.join
+      count = data.count(elem => elem != 0)
+
+      assert((count - expected).abs <= 1)
+    }
+
+    def assertMainTaskFairness(combiner: DLLCombinerTest, task: Unit, data: Array[Int]) = {
+      var count = 0
+      var expected = combiner.cnt / 4
+      count = data.count(elem => elem != 0)
+
+      assert((count - expected).abs <= 1)
+    }
+
+    combiners.foreach { elem =>
+      var data = Array.fill(elem.cnt)(0)
+      assertNewTaskFairness(elem, elem.task1(data), data)
+
+      data = Array.fill(elem.cnt)(0)
+      assertNewTaskFairness(elem, elem.task2(data), data)
+
+      data = Array.fill(elem.cnt)(0)
+      assertNewTaskFairness(elem, elem.task3(data), data)
+
+      data = Array.fill(elem.cnt)(0)
+      assertMainTaskFairness(elem, elem.task4(data), data)
+    }
+  }
+
+  //(70+30+50+200+) 150 / 500 points for correct parallel implementation, exactly 1/4 of the array per task, exactly the specified quarter
+
+  test("[TaskPrecision] each task should compute specified 1/4 of the result - simple combiners (20pts)") {
+    assertTaskPrecision(simpleCombiners)
+  }
+
+  test("[TaskPrecision] each task should compute specified 1/4 of the result - small combiners (30pts)") {
+    assertTaskPrecision(basicCombiners)
+  }
+
+  test("[TaskPrecision] each task should compute specified 1/4 of the result - small combiners after combining (50pts)") {
+    assertTaskPrecision(combinedCombiners)
+  }
+
+  test("[TaskPrecision] each task should compute specified 1/4 of the result - large combiners (50pts)") {
+    assertTaskPrecision(largeCombiners)
+  }
+
+  def assertTaskPrecision(combiners: List[(DLLCombinerTest, Array[Int])]): Unit = {
+    combiners.foreach { elem =>
+      var data = Array.fill(elem._1.cnt)(0)
+      var ref = Array.fill(elem._1.cnt)(0)
+      val task1 = elem._1.task1(data)
+      task1.join
+      Range(0, elem._1.cnt).foreach(i => (if (i < elem._1.cnt / 2 - 1 && i % 2 == 1) ref(i) = elem._2(i)))
+      assert(Range(0, elem._1.cnt / 2 - 1).forall(i => data(i) == ref(i)))
+
+      data = Array.fill(elem._1.cnt)(0)
+      ref = Array.fill(elem._1.cnt)(0)
+      val task2 = elem._1.task2(data)
+      task2.join
+      Range(0, elem._1.cnt).foreach(i => (if (i < elem._1.cnt / 2 - 1 && i % 2 == 0) ref(i) = elem._2(i)))
+      assert(Range(0, elem._1.cnt / 2 - 1).forall(i => data(i) == ref(i)))
+
+      data = Array.fill(elem._1.cnt)(0)
+      ref = Array.fill(elem._1.cnt)(0)
+      val task3 = elem._1.task3(data)
+      task3.join
+      Range(0, elem._1.cnt).foreach(i => (if (i > elem._1.cnt / 2 + 1 && i % 2 != elem._1.cnt % 2) ref(i) = elem._2(i)))
+      assert(Range(elem._1.cnt / 2 + 2, elem._1.cnt).forall(i => data(i) == ref(i)))
+
+      data = Array.fill(elem._1.cnt)(0)
+      ref = Array.fill(elem._1.cnt)(0)
+      val task4 = elem._1.task4(data)
+      Range(0, elem._1.cnt).foreach(i => (if (i > elem._1.cnt / 2 + 1 && i % 2 == elem._1.cnt % 2) ref(i) = elem._2(i)))
+      assert(Range(elem._1.cnt / 2 + 2, elem._1.cnt).forall(i => data(i) == ref(i)))
+    }
+  }
+
+  test("[Public] fetch simple result without combining (5pts)") {
+    val combiner1 = DLLCombinerTest(2)
+    combiner1 += 7
+    combiner1 += 2
+    combiner1 += 3
+    combiner1 += 8
+    combiner1 += 1
+    combiner1 += 2
+    combiner1 += 3
+    combiner1 += 8
+
+    val result = combiner1.result()
+    val array = Array(7, 2, 3, 8, 1, 2, 3, 8)
+
+    assert(Range(0,array.size).forall(i => array(i) == result(i)))
+  }
+
+  test("[Public] fetch result without combining (5pts)") {
+    val combiner1 = DLLCombinerTest(2)
+    combiner1 += 7
+    combiner1 += 2
+    combiner1 += 3
+    combiner1 += 8
+    combiner1 += 1
+
+    val result = combiner1.result()
+    val array = Array(7, 2, 3, 8, 1)
+
+    assert(Range(0,array.size).forall(i => array(i) == result(i)))
+  }
+
+  test("[Public] fetch result after simple combining (5pts)") {
+    val combiner1 = DLLCombinerTest(2)
+    combiner1 += 7
+    combiner1 += 2
+
+    val combiner2 = DLLCombinerTest(2)
+    combiner2 += 3
+    combiner2 += 8
+
+    val combiner3 = DLLCombinerTest(2)
+    combiner2 += 1
+    combiner2 += 9
+
+    val combiner4 = DLLCombinerTest(2)
+    combiner2 += 3
+    combiner2 += 2
+
+    val result = combiner1.combine(combiner2).combine(combiner3).combine(combiner4).result()
+    val array = Array(7, 2, 3, 8, 1, 9, 3, 2)
+
+    assert(Range(0,array.size).forall(i => array(i) == result(i)))
+  }
+
+  test("[Public] fetch result - empty combiner (20pts)") {
+    val combiner1 = DLLCombinerTest(2)
+    val result = combiner1.result()
+    assertEquals(result.size, 0)
+  }
+
+  test("[Public] fetch result - full single element combiner (15pts)") {
+    val combiner1 = DLLCombinerTest(3)
+    combiner1 += 4
+    combiner1 += 2
+    combiner1 += 6
+
+    val result = combiner1.result()
+    val array = Array(4, 2, 6)
+
+    assert(Range(0,array.size).forall(i => array(i) == result(i)))
+  }
+
+}
+
+
+trait AbstractM7Suite extends munit.FunSuite with LibImpl {
+
+  def simpleCombiners = buildSimpleCombiners()
+  def basicCombiners = buildBasicCombiners()
+  def combinedCombiners = buildCombinedCombiners()
+  def largeCombiners = buildLargeCombiners()
+
+  def buildSimpleCombiners() = {
+    val simpleCombiners = List(
+      (DLLCombinerTest(4), Array(4, 2, 6, 1, 5, 4, 3, 5, 6, 3, 4, 5, 6, 3, 4, 5)),
+      (DLLCombinerTest(4), Array(7, 2, 2, 9, 3, 2, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2)),
+      (DLLCombinerTest(4), Array.fill(16)(5))
+    )
+    simpleCombiners.foreach(elem => build(elem._1, elem._2))
+    simpleCombiners
+  }
+
+  def buildBasicCombiners() = {
+    val basicCombiners = List(
+      (DLLCombinerTest(2), Array(4, 2, 6)),
+      (DLLCombinerTest(5), Array(4, 2, 6)),
+      (DLLCombinerTest(3), Array(4, 2, 6, 1, 7, 2, 4)),
+      (DLLCombinerTest(4), Array(7, 2, 2, 9, 3, 2, 11, 12, 13, 14, 15, 16, 17, 22)),
+      (DLLCombinerTest(3), Array.fill(16)(7)),
+      (DLLCombinerTest(3), Array.fill(19)(7)),
+      (DLLCombinerTest(3), Array.fill(5)(7)),
+      (DLLCombinerTest(3), Array.fill(6)(7))
+    )
+    basicCombiners.foreach(elem => build(elem._1, elem._2))
+    basicCombiners
+  }
+
+  def buildCombinedCombiners() = {
+    var combinedCombiners = List[(DLLCombinerTest, Array[Int])]()
+    Range(1, 10).foreach { chunk_size =>
+      val array = basicCombiners.filter(elem => elem._1.chunk_size == chunk_size).foldLeft(Array[Int]()) { (acc, i) => acc ++ i._2 }
+      val combiner = DLLCombinerTest(chunk_size)
+      basicCombiners.filter(elem => elem._1.chunk_size == chunk_size).foreach(elem => combiner.combine(elem._1))
+
+      combinedCombiners  = combinedCombiners :+ (combiner, array)
+    }
+    combinedCombiners
+  }
+
+  def buildLargeCombiners() = {
+    val largeCombiners = List(
+      (DLLCombinerTest(21), Array.fill(1321)(4) ++ Array.fill(1322)(7)),
+      (DLLCombinerTest(18), Array.fill(1341)(2) ++ Array.fill(1122)(5)),
+      (DLLCombinerTest(3), Array.fill(1321)(4) ++ Array.fill(1322)(7) ++ Array.fill(321)(4) ++ Array.fill(322)(7)),
+      (DLLCombinerTest(12), Array.fill(992321)(4) ++ Array.fill(99322)(7)),
+      (DLLCombinerTest(4), Array.fill(953211)(4) ++ Array.fill(999322)(1))
+    )
+    largeCombiners.foreach(elem => build(elem._1, elem._2))
+    largeCombiners
+  }
+
+  def build(combiner: DLLCombinerTest, array: Array[Int]): DLLCombinerTest = {
+    array.foreach(elem => combiner += elem)
+    combiner
+  }
+
+  def compare(combiner: DLLCombinerTest, array: Array[Int]): Boolean = {
+    val result = combiner.result()
+    Range(0,array.size).forall(i => array(i) == result(i))
+  }
+
+  def buildAndCompare(combiner: DLLCombinerTest, array: Array[Int]): Boolean = {
+    array.foreach(elem => combiner += elem)
+    val result = combiner.result()
+
+    Range(0,array.size).forall(i => array(i) == result(i))
+  }
+
+}
+
+trait LibImpl extends M7 {
+
+  val forkJoinPool = new ForkJoinPool
+
+  abstract class TaskScheduler {
+    def schedule[T](body: => T): ForkJoinTask[T]
+  }
+
+  class DefaultTaskScheduler extends TaskScheduler {
+    def schedule[T](body: => T): ForkJoinTask[T] = {
+      val t = new RecursiveTask[T] {
+        def compute = body
+      }
+      Thread.currentThread match {
+        case wt: ForkJoinWorkerThread =>
+          t.fork()
+        case _ =>
+          forkJoinPool.execute(t)
+      }
+      t
+    }
+  }
+
+  val scheduler =
+    new DynamicVariable[TaskScheduler](new DefaultTaskScheduler)
+
+  def task[T](body: => T): ForkJoinTask[T] = {
+    scheduler.value.schedule(body)
+  }
+
+  class DLLCombinerTest(chunk_size: Int = 3) extends DLLCombinerImplementation(chunk_size) {
+
+    override def +=(elem: Int): Unit = {
+      if(cnt % chunk_size == 0) {
+        chunks = chunks + 1
+        val node = new Node(chunk_size)
+        if (cnt == 0) {
+          head = node
+          last = node
+        }
+        else {
+          last.next = node
+          node.previous = last
+          last = node
+        }
+      }
+      last.add(elem)
+      cnt += 1
+    }
+
+    override def combine(that: DLLCombiner): DLLCombiner = {
+      assert(this.chunk_size == that.chunk_size)
+      if (this.cnt == 0) {
+        this.head = that.head
+        this.last = that.last
+        this.cnt = that.cnt
+        this.chunks = that.chunks
+
+        this
+      }
+      else if (that.cnt == 0)
+        this
+      else {
+        this.last.next = that.head
+        that.head.previous = this.last
+
+        this.cnt = this.cnt + that.cnt
+        this.chunks = this.chunks + that.chunks
+        this.last = that.last
+
+        this
+      }
+    }
+  }
+}
-- 
GitLab