diff --git a/aot/aot panel.md b/aot/aot panel.md
new file mode 100644
index 0000000..fb8cf77
--- /dev/null
+++ b/aot/aot panel.md
@@ -0,0 +1,17 @@
+
+
+
+| Week | Ready | Main item | S | Classes | Student work | | |
+| ---- | ----- | ----------- | --- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | --- |
+| 1 | Yes | Python Prep | N | - L1: Introduction and motivation of the course - L2: Simulation, Optimization and Machine Learning in companies | - Python prep | | |
+| 2 | Yes | Python Prep | N | - L3: Introduction to simulation: What is it, When do we use it, Types of simulation - L4: Simulation examples in Python. Introduction to case 1. | - Python prep - View [Primer: Simulating a pandemic](https://www.youtube.com/watch?v=7OLpKqTriio) - Read [Agent-based modeling: Methods and techniques for simulating human systems](https://www.pnas.org/content/99/suppl_3/7280) - Read case 1. | | |
+| 3 | | Case 1 | N | - L5: Simulation methodology. - L6: Simulation-based optimization I. Challenges and issues with simulation. Where to go from here - S1: Workshop for case 1 | - Work on case 1 - Review [HASH model market simulation](https://hash.ai/@hash/model-market-python) - Review [HASH warehouse simulation](https://hash.ai/@hash/warehouse-logistics) | | |
+| 4 | | Case 1 | Y | - L7: Introduction to optimization - L8: Modeling optimization problems - S2: Workshop for case 1 | - Work on case 1 - Read Gurobi's [Modelling Basics](https://www.gurobi.com/resource/modeling-basics/) - Read Neos [taxonomy of optimization problems](https://neos-guide.org/optimization-tree) - View this video on the [Simplex algorithm](https://www.youtube.com/watch?v=RO5477EKlXE) | | |
+| 5 | | Case 1/2 | Y | - L9: Taxonomy of optimization techniques - L10: Simulation-based optimization II. Introduction to case 2 | - Deliver case 1 - Read case 2 - Enjoy watching [simulation-based race car training](https://www.youtube.com/watch?v=-sg-GgoFCP0) - Read how the [4th most popular database software in the world uses GAs to access data faster.](https://www.postgresql.org/docs/8.0/geqo-intro2.html) | | |
+| 6 | | Case 2 | Y | - L11: Challenges in real-world usage. Simulation vs Optimization - L12: Introduction to Machine Learning - S3: Workshop for case 2 | - Work on case 2 - Read this [review on simulation optimization techniques and softwares](https://arxiv.org/pdf/1706.08591.pdf) | | |
+| 7 | | Case 2/3 | Y | - L13: Supervised Machine Learning (SML): NIPS - L14: Typical SML workflow. Introduction to case 3 - S4: Workshop for case 2 | - Work on case 2 - Read case 3 | | |
+| 8 | | Case 3 | Y | - L15: Algorithm deep dive: Decision trees - L16: Feature Engineering and Model Evaluation - S5: Workshop for case 3 | - Deliver case 2 - View this [intro to neural networks](https://www.youtube.com/watch?v=aircAruvnKk&t=10s) and this [intro to random forests](https://www.youtube.com/watch?v=J4Wdy0Wc_xQ) | | |
+| 9 | | Case 3 | Y | - L17: Deployment of Models - L18: Stories from the trenches: applying all of this in the real world - S6: Workshop for case 3 | - Work on case 3 - View this video on [why businesses fail at ML](https://www.youtube.com/watch?v=dRJGyhS6gA0) | | |
+| 10 | | Case 3 | N | - L19: Where to go from here: further learning and carreer advice - L20: Final Q&A, exam preparation | - Work on case 3 | | |
+| 11 | | | | - Exam | - Deliver case 3 | | |
+
diff --git a/aot/cases/case_1/case_1.zip b/aot/cases/case_1/case_1.zip
new file mode 100644
index 0000000..70159e4
Binary files /dev/null and b/aot/cases/case_1/case_1.zip differ
diff --git a/aot/cases/case_1/case_1_description.docx b/aot/cases/case_1/case_1_description.docx
new file mode 100644
index 0000000..21288c9
Binary files /dev/null and b/aot/cases/case_1/case_1_description.docx differ
diff --git a/aot/cases/case_1/case_1_description.pdf b/aot/cases/case_1/case_1_description.pdf
new file mode 100644
index 0000000..c335409
Binary files /dev/null and b/aot/cases/case_1/case_1_description.pdf differ
diff --git a/aot/cases/case_1/case_1_student_notebook.ipynb b/aot/cases/case_1/case_1_student_notebook.ipynb
new file mode 100644
index 0000000..3d7de43
--- /dev/null
+++ b/aot/cases/case_1/case_1_student_notebook.ipynb
@@ -0,0 +1,405 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "provenance": [],
+ "toc_visible": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Introduction to PuLP\n",
+ "\n",
+ "For case 1, you will need to define and solve optimization problems. In this notebook, I'll help you understand how to use `pulp`, a Python package for modeling optimization problems. You might want to check the following links:\n",
+ "\n",
+ "- Documentation: https://coin-or.github.io/pulp/\n",
+ "- Homepage: https://github.com/coin-or/pulp\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "eLvjUuJdzS7z"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Installing and checking all is in place"
+ ],
+ "metadata": {
+ "id": "HFavOEVS0dbY"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "The first thing you need to do is to install `pulp`. `pulp` is not in the standard available packages in Colab, so you need to run the following cell once. "
+ ],
+ "metadata": {
+ "id": "HgZwpjUG0PsK"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!pip install pulp"
+ ],
+ "metadata": {
+ "id": "ni6Q_YiO0nIm"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "After doing that, you can import the library."
+ ],
+ "metadata": {
+ "id": "k9YI0Kzw0qLT"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import pulp"
+ ],
+ "metadata": {
+ "id": "hw6keX7x0tZ1"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "If all is good, running the following command will print a large log testing `pulp`. The last line should read \"OK\"."
+ ],
+ "metadata": {
+ "id": "vD_rXehL1KXX"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "pulp.pulpTestAll()"
+ ],
+ "metadata": {
+ "id": "Ney2a8mu1JqQ"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Defining and solving problems\n",
+ "\n",
+ "The following cells show you the absolute minimum to model and solve a problem with `pulp`. The steps are:\n",
+ "\n",
+ "1. Define decision variables\n",
+ "2. Define the target function\n",
+ "3. Define the constraints\n",
+ "4. Assemble the problem\n",
+ "5. Solve it\n",
+ "6. Examine results\n",
+ "\n",
+ "For more flexibility, options and interesting stuff, please check up the PuLP documentation."
+ ],
+ "metadata": {
+ "id": "oiXz40NR1whf"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Define decision variables"
+ ],
+ "metadata": {
+ "id": "nq5bcQs03g0j"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x = pulp.LpVariable(\n",
+ " name=\"x\",\n",
+ " cat=pulp.LpContinuous \n",
+ " )\n",
+ "\n",
+ "y = pulp.LpVariable(\n",
+ " name=\"y\",\n",
+ " cat=pulp.LpInteger # This will make the variable integer only\n",
+ " )\n",
+ "\n",
+ "z = pulp.LpVariable(\n",
+ " name=\"z\",\n",
+ " cat=pulp.LpBinary # This will make the variable binary (only 0 or 1)\n",
+ ")"
+ ],
+ "metadata": {
+ "id": "0SPhww4L3buh"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Define the target function"
+ ],
+ "metadata": {
+ "id": "uhlbq2oO35kp"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "target_function = 10 * x - 5 * y + z"
+ ],
+ "metadata": {
+ "id": "pu3Im9DH39CN"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Define constraints"
+ ],
+ "metadata": {
+ "id": "lqD0dD474Izw"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "constraint_1 = x >= 0\n",
+ "constraint_2 = y >= 0\n",
+ "constraint_3 = x >= 10\n",
+ "constraint_4 = y <= 50"
+ ],
+ "metadata": {
+ "id": "5Cu51lYj4OUC"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Assemble the problem\n",
+ "\n",
+ "To put all the parts together, you need to declare a problem and specify if you want to minimize or maximize the target function.\n",
+ "\n",
+ "Once you have that:\n",
+ "- First, you \"add\" the target function.\n",
+ "- After, you \"add\" all the constraints you want to include."
+ ],
+ "metadata": {
+ "id": "d5nq94IM4kSU"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "problem = pulp.LpProblem(\"my_silly_problem\", pulp.LpMinimize)\n",
+ "\n",
+ "problem += target_function\n",
+ "\n",
+ "for constraint in (\n",
+ " constraint_1,\n",
+ " constraint_2,\n",
+ " constraint_3,\n",
+ " constraint_4\n",
+ " ):\n",
+ " problem += constraint"
+ ],
+ "metadata": {
+ "id": "yI-Oiwh64mRc"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Solve it\n",
+ "\n",
+ "The problem object is now unsolved. You can call the `solve` method on it to find a solution."
+ ],
+ "metadata": {
+ "id": "RJTWfR8-5fBd"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "f\"Status: {pulp.LpStatus[problem.status]}\"\n",
+ "problem.solve()"
+ ],
+ "metadata": {
+ "id": "4Fbltpbp5mRi"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Examine results\n",
+ "\n",
+ "After calling `solve` on a problem, you can access:\n",
+ "- The status of the problem. It can be solved, but also it might show to be not feasible.\n",
+ "- The values assigned to each decision variable.\n",
+ "- The final value for the target function.\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "0pc9RmrO7FKo"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "print(f\"Status: {pulp.LpStatus[problem.status]}\")\n",
+ "for v in problem.variables():\n",
+ " print(v.name, \"=\", v.varValue)\n",
+ " \n",
+ "print(pulp.value(problem.objective))"
+ ],
+ "metadata": {
+ "id": "8U4xVvUg9W07"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Peanut Butter Example\n",
+ "\n",
+ "As an additional example, you can find below the model and solver for the Peanut Butter Sandwich example we discussed on our lectures."
+ ],
+ "metadata": {
+ "id": "I2lNaFm2XVK1"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "pb = pulp.LpVariable(\n",
+ " name=\"Peanut Butter grams\",\n",
+ " cat=pulp.LpContinuous \n",
+ " )\n",
+ "\n",
+ "b = pulp.LpVariable(\n",
+ " name=\"Bread grams\",\n",
+ " cat=pulp.LpContinuous \n",
+ " )"
+ ],
+ "metadata": {
+ "id": "HI4E2dNoXVK4"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "target_function = 5.88 * pb + 2.87 * b"
+ ],
+ "metadata": {
+ "id": "PfTxq8R0XVLB"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "no_negative_pb = pb >= 0\n",
+ "no_negative_b = b >= 0\n",
+ "max_pb_we_have = pb <= 200\n",
+ "max_b_we_have = b <= 300\n",
+ "doctors_dietary_restriction = pb <= 0.13 * b"
+ ],
+ "metadata": {
+ "id": "2X1AzQM8XVLD"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "problem = pulp.LpProblem(\"sandwich_problem\", pulp.LpMaximize)\n",
+ "\n",
+ "problem += target_function\n",
+ "\n",
+ "for constraint in (\n",
+ " no_negative_pb,\n",
+ " no_negative_b,\n",
+ " max_pb_we_have,\n",
+ " max_b_we_have,\n",
+ " doctors_dietary_restriction\n",
+ " ):\n",
+ " problem += constraint"
+ ],
+ "metadata": {
+ "id": "3oEoQXebXVLE"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "f\"Status: {pulp.LpStatus[problem.status]}\"\n",
+ "problem.solve()\n",
+ "print(f\"Status: {pulp.LpStatus[problem.status]}\")\n",
+ "for v in problem.variables():\n",
+ " print(v.name, \"=\", v.varValue)\n",
+ " \n",
+ "print(f\"Final calories: {pulp.value(problem.objective)}\")"
+ ],
+ "metadata": {
+ "id": "u1vI73kiXVLF"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Case 2\n",
+ "\n",
+ "You can use the rest of the notebook to work on the different parts of case 1."
+ ],
+ "metadata": {
+ "id": "6kWgbTjU-LaN"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Good luck!"
+ ],
+ "metadata": {
+ "id": "aYzseTWh-Sal"
+ },
+ "execution_count": null,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/aot/cases/case_1/grading/case_1_grading.xlsx b/aot/cases/case_1/grading/case_1_grading.xlsx
new file mode 100644
index 0000000..c78cc63
Binary files /dev/null and b/aot/cases/case_1/grading/case_1_grading.xlsx differ
diff --git a/aot/cases/case_1/grading/grading_team_1.xlsx b/aot/cases/case_1/grading/grading_team_1.xlsx
new file mode 100644
index 0000000..27e2431
Binary files /dev/null and b/aot/cases/case_1/grading/grading_team_1.xlsx differ
diff --git a/aot/cases/case_1/grading/grading_team_10.xlsx b/aot/cases/case_1/grading/grading_team_10.xlsx
new file mode 100644
index 0000000..f13c038
Binary files /dev/null and b/aot/cases/case_1/grading/grading_team_10.xlsx differ
diff --git a/aot/cases/case_1/grading/grading_team_11.xlsx b/aot/cases/case_1/grading/grading_team_11.xlsx
new file mode 100644
index 0000000..2284cd2
Binary files /dev/null and b/aot/cases/case_1/grading/grading_team_11.xlsx differ
diff --git a/aot/cases/case_1/grading/grading_team_12.xlsx b/aot/cases/case_1/grading/grading_team_12.xlsx
new file mode 100644
index 0000000..be87f26
Binary files /dev/null and b/aot/cases/case_1/grading/grading_team_12.xlsx differ
diff --git a/aot/cases/case_1/grading/grading_team_2.xlsx b/aot/cases/case_1/grading/grading_team_2.xlsx
new file mode 100644
index 0000000..2149dde
Binary files /dev/null and b/aot/cases/case_1/grading/grading_team_2.xlsx differ
diff --git a/aot/cases/case_1/grading/grading_team_3.xlsx b/aot/cases/case_1/grading/grading_team_3.xlsx
new file mode 100644
index 0000000..ee90eb8
Binary files /dev/null and b/aot/cases/case_1/grading/grading_team_3.xlsx differ
diff --git a/aot/cases/case_1/grading/grading_team_5.xlsx b/aot/cases/case_1/grading/grading_team_5.xlsx
new file mode 100644
index 0000000..15e757a
Binary files /dev/null and b/aot/cases/case_1/grading/grading_team_5.xlsx differ
diff --git a/aot/cases/case_1/grading/grading_team_6.xlsx b/aot/cases/case_1/grading/grading_team_6.xlsx
new file mode 100644
index 0000000..8dc5d22
Binary files /dev/null and b/aot/cases/case_1/grading/grading_team_6.xlsx differ
diff --git a/aot/cases/case_1/grading/grading_team_8.xlsx b/aot/cases/case_1/grading/grading_team_8.xlsx
new file mode 100644
index 0000000..969687f
Binary files /dev/null and b/aot/cases/case_1/grading/grading_team_8.xlsx differ
diff --git a/aot/cases/case_1/grading/grading_team_9.xlsx b/aot/cases/case_1/grading/grading_team_9.xlsx
new file mode 100644
index 0000000..196cf28
Binary files /dev/null and b/aot/cases/case_1/grading/grading_team_9.xlsx differ
diff --git a/aot/cases/case_1/prices_and_capacities.csv b/aot/cases/case_1/prices_and_capacities.csv
new file mode 100644
index 0000000..888d146
--- /dev/null
+++ b/aot/cases/case_1/prices_and_capacities.csv
@@ -0,0 +1,9 @@
+dock,40_ft_container_price_eur,max_capacity
+Rotterdam,470,33000
+Antwerp,470,25000
+Hamburg,480,44000
+Amsterdam,610,11000
+Marseille,380,9000
+Algeciras,280,20000
+Valencia,310,11000
+Genoa,340,7500
diff --git a/aot/cases/case_2/.Rhistory b/aot/cases/case_2/.Rhistory
new file mode 100644
index 0000000..e69de29
diff --git a/aot/cases/case_2/case2_student_notebook.ipynb b/aot/cases/case_2/case2_student_notebook.ipynb
new file mode 100644
index 0000000..0a350b0
--- /dev/null
+++ b/aot/cases/case_2/case2_student_notebook.ipynb
@@ -0,0 +1,2256 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "case1_student_notebook.ipynb",
+ "provenance": [],
+ "toc_visible": true,
+ "collapsed_sections": [
+ "-P1-336gb1mL",
+ "7W7uTUrbcavk",
+ "i7HhY0Vqc4vT",
+ "mjVrfdcE8Wos",
+ "gVQE6YOq-Ic0"
+ ]
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Case 1 - Student notebook\n",
+ "\n",
+ "Welcome to the helper notebook for case 1. This notebook contains prepared code that you can use to tackle case 1. Specifically, you can find here:\n",
+ "\n",
+ "- Code to load the case data.\n",
+ "- Simulation tools to test warehouse purchasing policies.\n",
+ "\n",
+ "This notebook is designed to be used in Google Colab. You can also export it and run it in any other Jupyter Notebook environment, but a thing or two will probably break and you will need to fix them yourself. Your choice."
+ ],
+ "metadata": {
+ "id": "SIqkunrpbF0F"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Imports and Data loading"
+ ],
+ "metadata": {
+ "id": "-P1-336gb1mL"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "id": "Nsf-Vl3-a82N"
+ },
+ "outputs": [],
+ "source": [
+ "# Import all the necessary packages\n",
+ "import io\n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import seaborn as sns\n",
+ "from google.colab import files\n",
+ "from datetime import datetime, timedelta"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Upload files from your computer here\n",
+ "# Run the cell and click the \"Browse\" button to upload the provided CSV \n",
+ "# files\n",
+ "uploaded = files.upload()"
+ ],
+ "metadata": {
+ "colab": {
+ "resources": {
+ "http://localhost:8080/nbextensions/google.colab/files.js": {
+ "data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgZG8gewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwoKICAgICAgbGV0IHBlcmNlbnREb25lID0gZmlsZURhdGEuYnl0ZUxlbmd0aCA9PT0gMCA/CiAgICAgICAgICAxMDAgOgogICAgICAgICAgTWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCk7CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPSBgJHtwZXJjZW50RG9uZX0lIGRvbmVgOwoKICAgIH0gd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCk7CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK",
+ "ok": true,
+ "headers": [
+ [
+ "content-type",
+ "application/javascript"
+ ]
+ ],
+ "status": 200,
+ "status_text": "OK"
+ }
+ },
+ "base_uri": "https://localhost:8080/",
+ "height": 142
+ },
+ "id": "4psao7htcAwr",
+ "outputId": "6bc57f2c-c1ca-49e6-a12c-cf88c5e04452"
+ },
+ "execution_count": 2,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "text/html": [
+ "\n",
+ " \n",
+ " \n",
+ " "
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Saving sourcing_events.csv to sourcing_events.csv\n",
+ "Saving stock_state.csv to stock_state.csv\n",
+ "Saving demand_events.csv to demand_events.csv\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Read the files as pandas dataframes and print them so you can check that the\n",
+ "# process went fine\n",
+ "\n",
+ "demand_events = pd.read_csv(io.BytesIO(uploaded['demand_events.csv']))\n",
+ "sourcing_events = pd.read_csv(io.BytesIO(uploaded['sourcing_events.csv']))\n",
+ "stock_state = pd.read_csv(io.BytesIO(uploaded['stock_state.csv']))\n",
+ "\n",
+ "for table in (demand_events, sourcing_events, stock_state):\n",
+ " print(table.head())"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "X8N0PZ4qcOls",
+ "outputId": "b96a4d01-e827-4de7-8de0-7e0dfdc6c456"
+ },
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ " date demand_quantity\n",
+ "0 2021-01-01 54609.492813\n",
+ "1 2021-01-02 36208.636486\n",
+ "2 2021-01-03 77784.172768\n",
+ "3 2021-01-04 76481.813604\n",
+ "4 2021-01-05 52305.876589\n",
+ " request_date delivery_date amount\n",
+ "0 2021-06-18 2021-06-24 361622.084212\n",
+ "1 2021-04-08 2021-04-17 404943.208184\n",
+ "2 2021-08-02 2021-08-10 372079.374931\n",
+ "3 2021-03-23 2021-03-28 324410.868370\n",
+ "4 2021-07-14 2021-07-19 467167.833054\n",
+ " date amount_in_stock\n",
+ "0 2021-01-01 647479.251651\n",
+ "1 2021-01-02 611270.615165\n",
+ "2 2021-01-03 533486.442397\n",
+ "3 2021-01-04 457004.628793\n",
+ "4 2021-01-05 404698.752204\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Level 1\n",
+ "\n",
+ "From the case description:\n",
+ "\n",
+ " - Elisa wants you to measure the performance of the last year, providing\n",
+ " quantitative metrics. She knows it was a bad year, but hasn't looked at\n",
+ " the real data to summarize how bad it was. Remember that there is a\n",
+ " trade-off: too much stock, is not desired, but running out of stock and making\n",
+ " clients wait is also negative.\n",
+ " - Going one step further, Elisa wants to know: what was done wrong?\n",
+ "\n",
+ "Use this section to visualize/analyse data from last year to answer Elisa's request."
+ ],
+ "metadata": {
+ "id": "7W7uTUrbcavk"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Your code goes in cells in this section"
+ ],
+ "metadata": {
+ "id": "ENVo0y5mc1Ud"
+ },
+ "execution_count": 4,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Level 2\n",
+ "\n",
+ "From the case description:\n",
+ "\n",
+ " - Elisa wants you to propose an ordering policy. This means, that you need\n",
+ " to define a rule that, once each day, should answer the questions: should\n",
+ " be place an order to request material today? If yes, how much should we\n",
+ " order?\n",
+ " - Use simulation to present metrics on what is the expected performance\n",
+ " with the policy you are proposing. Remember, you need to convince Elisa\n",
+ " that this is better than what happens today.\n",
+ " - As a specific constraint, Elisa explains that she wants that the\n",
+ " probability of a stockout to be at most of 5% on any given day.\n",
+ "\n",
+ "Use this Level 2 section to learn how to use the provided code and run your own analysis and simulations to answer Elisa's request."
+ ],
+ "metadata": {
+ "id": "i7HhY0Vqc4vT"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### Prepared simulation code\n",
+ "\n",
+ "To help you out, I have prepared some code that will assist you in running simulations. The cells below contain the code and a small example showing you how to use."
+ ],
+ "metadata": {
+ "id": "-pPzw48XdOtA"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# This is the helper code. Run the cell to load it.\n",
+ "\n",
+ "base = datetime(2022,1,1)\n",
+ "dates_in_2022 = [base + timedelta(days=x) for x in range(365)]\n",
+ "\n",
+ "class SimulationResult:\n",
+ "\n",
+ " def __init__(self, stock_states, demand_by_day, sourcing_events):\n",
+ " self.stock_states = stock_states\n",
+ " self.demand_by_day = demand_by_day\n",
+ " self.sourcing_events = sourcing_events\n",
+ "\n",
+ " def plot_stock_history(self):\n",
+ " sns.lineplot(x=dates_in_2022, y=self.stock_states)\n",
+ "\n",
+ " def plot_stock_distribution(self):\n",
+ " sns.histplot(x=self.stock_states, kde=True)\n",
+ "\n",
+ " def service_level(self):\n",
+ " return (self.stock_states > 0 ).astype(int).mean()\n",
+ "\n",
+ " def stock_level_summary(self):\n",
+ " print(\n",
+ " pd.DataFrame(self.stock_states).describe()\n",
+ " ) \n",
+ " \n",
+ " def mean_stock_level(self):\n",
+ " return self.stock_states.mean()\n",
+ "\n",
+ " def median_stock_level(self):\n",
+ " return np.median(self.stock_states)\n",
+ "\n",
+ " def stdev_stock_level(self):\n",
+ " return self.stock_states.std()\n",
+ "\n",
+ " def mean_demand(self):\n",
+ " return self.demand_by_day.mean()\n",
+ " \n",
+ " def number_of_purchase_orders_placed(self):\n",
+ " return len(self.sourcing_events)\n",
+ "\n",
+ "\n",
+ "class SimulationConfig:\n",
+ "\n",
+ " def __init__(self, starting_stock, demand_generator, lead_time_generator, purchaser):\n",
+ " self.starting_stock = starting_stock\n",
+ " self.demand_generator = demand_generator\n",
+ " self.lead_time_generator = lead_time_generator\n",
+ " self.purchaser = purchaser\n",
+ "\n",
+ "class PurchaseOrder:\n",
+ " \n",
+ " def __init__(self, amount, request_date, delivery_date):\n",
+ " self.amount = amount\n",
+ " self.request_date = request_date\n",
+ " self.delivery_date = delivery_date\n",
+ "\n",
+ " def __repr__(self):\n",
+ " return f\"Order of {self.amount:.0f}, requested on {self.request_date}, delivery on {self.delivery_date}.\"\n",
+ "\n",
+ "\n",
+ "class Simulation:\n",
+ " \n",
+ " def __init__(self, config: SimulationConfig, verbose=False):\n",
+ " self._config = config\n",
+ " self.verbose = verbose\n",
+ "\n",
+ " def run(self):\n",
+ "\n",
+ " stock_states = np.array([self._config.starting_stock])\n",
+ " opened_orders = []\n",
+ " ongoing_orders = {}\n",
+ " demand_by_day = np.array(list())\n",
+ " \n",
+ " for day in dates_in_2022:\n",
+ " if self.verbose:\n",
+ " print(f\"Simulating day: {day}\")\n",
+ " current_stock = stock_states[-1]\n",
+ " if self.verbose:\n",
+ " print(f\"Starting stock: {current_stock:.0f}\")\n",
+ " demand_for_this_day = self._config.demand_generator()\n",
+ " if self.verbose:\n",
+ " print(f\"Generated demand for today: {demand_for_this_day:.0f}\")\n",
+ " demand_by_day = np.append(demand_by_day, [demand_for_this_day])\n",
+ " goods_received_this_day = 0\n",
+ " if day in ongoing_orders:\n",
+ " order_delivered_today = ongoing_orders.pop(day)\n",
+ " goods_received_this_day = order_delivered_today.amount\n",
+ " if self.verbose:\n",
+ " print(f\"Goods received today: {goods_received_this_day:.0f}\")\n",
+ " \n",
+ " current_stock = current_stock + goods_received_this_day - demand_for_this_day\n",
+ " stock_states = np.append(stock_states, [current_stock])\n",
+ "\n",
+ "\n",
+ " order_to_make = self._config.purchaser(\n",
+ " day, \n",
+ " current_stock, \n",
+ " ongoing_orders,\n",
+ " self._config.lead_time_generator\n",
+ " )\n",
+ "\n",
+ " if order_to_make:\n",
+ " if self.verbose:\n",
+ " print(f\"Placing a new order: {order_to_make}\")\n",
+ " opened_orders.append(order_to_make)\n",
+ " ongoing_orders[order_to_make.delivery_date] = order_to_make\n",
+ " \n",
+ " stock_states = np.delete(stock_states, 0) # Remove starting stock\n",
+ " \n",
+ " self.results = SimulationResult(\n",
+ " stock_states=stock_states, \n",
+ " demand_by_day=demand_by_day, \n",
+ " sourcing_events=opened_orders \n",
+ " )\n",
+ "\n",
+ " return self.results\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "JRN7MPU-c84s"
+ },
+ "execution_count": 5,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### Guide on the prepared code"
+ ],
+ "metadata": {
+ "id": "MB_4hRpBhsCd"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### SimulationConfig and PurchaseOrder"
+ ],
+ "metadata": {
+ "id": "hqWXp047lX1R"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# There are four relevant objects you need to know about: Simulation, \n",
+ "# SimulationConfig, PurchaseOrder and Simulation Result.\n",
+ "\n",
+ "# SimulationConfig specifies the context for a simulation. You need to create one\n",
+ "# to run a simulation.\n",
+ "\n",
+ "an_example_config = SimulationConfig(\n",
+ " # How much stock there is in the warehouse when the simulation begins.\n",
+ " starting_stock=100, \n",
+ " # A function that generates the daily demand. You can define any kind of \n",
+ " # function, as long as it returns a number and doesn't require any arguments.\n",
+ " # The example below generates samples from a normal distribution with a mean\n",
+ " # of 10 and variance of 1.\n",
+ " demand_generator=lambda: np.random.normal(10, 1),\n",
+ " # A function that generates the lead time (in days) for purchase orders. \n",
+ " # This way, we simulate how long it will take for goods to reach the \n",
+ " # warehouse after placing an order. You can define any kind of function, as \n",
+ " # long as it returns an integer number and doesn't require any arguments.\n",
+ " # The example below generates samples from a normal distribution with a mean\n",
+ " # of 5 and variance of 1, and rounds the result so that we get full days.\n",
+ " lead_time_generator=lambda: int(np.random.normal(5, 1)),\n",
+ " # A function that decides when and how much to buy. See more details below.\n",
+ " purchaser=lambda: \"ignore_me_for_now\",\n",
+ ")\n",
+ "\n",
+ "# A PurchaseOrder represents an order from Caserta to Diemen requesting goods.\n",
+ "an_example_order = PurchaseOrder(\n",
+ " amount=100,\n",
+ " # We request a 100.\n",
+ " request_date=datetime.today(),\n",
+ " # We request time today\n",
+ " delivery_date=datetime.today() + timedelta(days=1)\n",
+ " # We receive them tomorrow\n",
+ ")\n",
+ "\n",
+ "# The purchaser function is the logical definition of the proposal you need to\n",
+ "# make to Elisa, which is a policy on when, and how much to buy. \n",
+ "# The function receives information from the simulation (which day is it, what \n",
+ "# is the stocklevel, whether there are other ongoing purchase orders, etc.) and \n",
+ "# either does nothing or decides that a PurchaseOrder should be created.\n",
+ "# This function gets called one time on each day of the simulation, so each \n",
+ "# simulated day can have a purchase. \n",
+ "\n",
+ "def a_simple_purchaser(\n",
+ " day, # The current day\n",
+ " current_stock, # The level of stock on that day\n",
+ " ongoing_orders, # A dictionary with the open purchase orders\n",
+ " lead_time_generator # The same lead time generator you pass to the Simulation Config\n",
+ " ):\n",
+ " \n",
+ " if ongoing_orders or current_stock > 100:\n",
+ " # If we are already waiting for an order to arrive or we have enough stock\n",
+ " # we don't request more goods.\n",
+ " return None\n",
+ "\n",
+ " if current_stock <= 100:\n",
+ " # If the stock is going low, we request 200 more.\n",
+ " return PurchaseOrder(\n",
+ " amount=100,\n",
+ " request_date=day,\n",
+ " delivery_date=day + timedelta(days=lead_time_generator()) # We simulate the delay in the delivery\n",
+ " )\n",
+ "\n",
+ "# Now that we have a purchaser function, we can complete the SimulationConfig by\n",
+ "# using it.\n",
+ "\n",
+ "an_example_config = SimulationConfig(\n",
+ " starting_stock=100, \n",
+ " demand_generator=lambda: np.random.normal(10, 1),\n",
+ " lead_time_generator=lambda: int(np.random.normal(10, 1)),\n",
+ " purchaser=a_simple_purchaser\n",
+ ")\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "xBopZNA_dFb5"
+ },
+ "execution_count": 6,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### Simulation"
+ ],
+ "metadata": {
+ "id": "aM8Xzx_zleds"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# The Simulation class is the code that actually runs a simulation. It takes a \n",
+ "# SimulationConfig as an input, and returns a SimulationResult as an output.\n",
+ "\n",
+ "example_simulation = Simulation(\n",
+ " config=an_example_config,\n",
+ " verbose=True # This shows daily details. Turn to False if you don't want to see them.\n",
+ ")\n",
+ "\n",
+ "# Let's run the simulation and store the results\n",
+ "\n",
+ "example_simulation_results = example_simulation.run()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "hQObT4ITlg2G",
+ "outputId": "91c2253c-0740-420e-b084-8dc4a317c3ca"
+ },
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Simulating day: 2022-01-01 00:00:00\n",
+ "Starting stock: 100\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-01-01 00:00:00, delivery on 2022-01-09 00:00:00.\n",
+ "Simulating day: 2022-01-02 00:00:00\n",
+ "Starting stock: 89\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-03 00:00:00\n",
+ "Starting stock: 79\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-04 00:00:00\n",
+ "Starting stock: 70\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-05 00:00:00\n",
+ "Starting stock: 61\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-06 00:00:00\n",
+ "Starting stock: 53\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-07 00:00:00\n",
+ "Starting stock: 43\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-08 00:00:00\n",
+ "Starting stock: 34\n",
+ "Generated demand for today: 13\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-09 00:00:00\n",
+ "Starting stock: 21\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-01-10 00:00:00\n",
+ "Starting stock: 111\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-11 00:00:00\n",
+ "Starting stock: 102\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-01-11 00:00:00, delivery on 2022-01-19 00:00:00.\n",
+ "Simulating day: 2022-01-12 00:00:00\n",
+ "Starting stock: 93\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-13 00:00:00\n",
+ "Starting stock: 83\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-14 00:00:00\n",
+ "Starting stock: 74\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-15 00:00:00\n",
+ "Starting stock: 64\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-16 00:00:00\n",
+ "Starting stock: 54\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-17 00:00:00\n",
+ "Starting stock: 43\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-18 00:00:00\n",
+ "Starting stock: 32\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-19 00:00:00\n",
+ "Starting stock: 22\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-01-20 00:00:00\n",
+ "Starting stock: 112\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-01-20 00:00:00, delivery on 2022-01-28 00:00:00.\n",
+ "Simulating day: 2022-01-21 00:00:00\n",
+ "Starting stock: 100\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-22 00:00:00\n",
+ "Starting stock: 91\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-23 00:00:00\n",
+ "Starting stock: 80\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-24 00:00:00\n",
+ "Starting stock: 71\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-25 00:00:00\n",
+ "Starting stock: 61\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-26 00:00:00\n",
+ "Starting stock: 50\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-27 00:00:00\n",
+ "Starting stock: 39\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-28 00:00:00\n",
+ "Starting stock: 30\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-01-29 00:00:00\n",
+ "Starting stock: 120\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-30 00:00:00\n",
+ "Starting stock: 111\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-01-31 00:00:00\n",
+ "Starting stock: 101\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-01-31 00:00:00, delivery on 2022-02-09 00:00:00.\n",
+ "Simulating day: 2022-02-01 00:00:00\n",
+ "Starting stock: 93\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-02 00:00:00\n",
+ "Starting stock: 83\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-03 00:00:00\n",
+ "Starting stock: 73\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-04 00:00:00\n",
+ "Starting stock: 62\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-05 00:00:00\n",
+ "Starting stock: 53\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-06 00:00:00\n",
+ "Starting stock: 45\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-07 00:00:00\n",
+ "Starting stock: 34\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-08 00:00:00\n",
+ "Starting stock: 23\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-09 00:00:00\n",
+ "Starting stock: 13\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-02-10 00:00:00\n",
+ "Starting stock: 104\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-02-10 00:00:00, delivery on 2022-02-21 00:00:00.\n",
+ "Simulating day: 2022-02-11 00:00:00\n",
+ "Starting stock: 94\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-12 00:00:00\n",
+ "Starting stock: 85\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-13 00:00:00\n",
+ "Starting stock: 76\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-14 00:00:00\n",
+ "Starting stock: 66\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-15 00:00:00\n",
+ "Starting stock: 58\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-16 00:00:00\n",
+ "Starting stock: 49\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-17 00:00:00\n",
+ "Starting stock: 40\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-18 00:00:00\n",
+ "Starting stock: 31\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-19 00:00:00\n",
+ "Starting stock: 21\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-20 00:00:00\n",
+ "Starting stock: 12\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-21 00:00:00\n",
+ "Starting stock: 0\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-02-21 00:00:00, delivery on 2022-03-02 00:00:00.\n",
+ "Simulating day: 2022-02-22 00:00:00\n",
+ "Starting stock: 91\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-23 00:00:00\n",
+ "Starting stock: 81\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-24 00:00:00\n",
+ "Starting stock: 69\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-25 00:00:00\n",
+ "Starting stock: 59\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-26 00:00:00\n",
+ "Starting stock: 49\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-27 00:00:00\n",
+ "Starting stock: 39\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-02-28 00:00:00\n",
+ "Starting stock: 28\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-01 00:00:00\n",
+ "Starting stock: 20\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-02 00:00:00\n",
+ "Starting stock: 8\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-03-02 00:00:00, delivery on 2022-03-10 00:00:00.\n",
+ "Simulating day: 2022-03-03 00:00:00\n",
+ "Starting stock: 99\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-04 00:00:00\n",
+ "Starting stock: 89\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-05 00:00:00\n",
+ "Starting stock: 81\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-06 00:00:00\n",
+ "Starting stock: 70\n",
+ "Generated demand for today: 13\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-07 00:00:00\n",
+ "Starting stock: 57\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-08 00:00:00\n",
+ "Starting stock: 48\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-09 00:00:00\n",
+ "Starting stock: 36\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-10 00:00:00\n",
+ "Starting stock: 28\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-03-11 00:00:00\n",
+ "Starting stock: 117\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-12 00:00:00\n",
+ "Starting stock: 107\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-03-12 00:00:00, delivery on 2022-03-21 00:00:00.\n",
+ "Simulating day: 2022-03-13 00:00:00\n",
+ "Starting stock: 97\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-14 00:00:00\n",
+ "Starting stock: 86\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-15 00:00:00\n",
+ "Starting stock: 77\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-16 00:00:00\n",
+ "Starting stock: 68\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-17 00:00:00\n",
+ "Starting stock: 59\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-18 00:00:00\n",
+ "Starting stock: 49\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-19 00:00:00\n",
+ "Starting stock: 40\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-20 00:00:00\n",
+ "Starting stock: 31\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-21 00:00:00\n",
+ "Starting stock: 20\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-03-22 00:00:00\n",
+ "Starting stock: 111\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-23 00:00:00\n",
+ "Starting stock: 103\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-03-23 00:00:00, delivery on 2022-04-01 00:00:00.\n",
+ "Simulating day: 2022-03-24 00:00:00\n",
+ "Starting stock: 93\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-25 00:00:00\n",
+ "Starting stock: 83\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-26 00:00:00\n",
+ "Starting stock: 74\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-27 00:00:00\n",
+ "Starting stock: 65\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-28 00:00:00\n",
+ "Starting stock: 53\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-29 00:00:00\n",
+ "Starting stock: 43\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-30 00:00:00\n",
+ "Starting stock: 33\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-03-31 00:00:00\n",
+ "Starting stock: 22\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-01 00:00:00\n",
+ "Starting stock: 11\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-04-02 00:00:00\n",
+ "Starting stock: 101\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-04-02 00:00:00, delivery on 2022-04-11 00:00:00.\n",
+ "Simulating day: 2022-04-03 00:00:00\n",
+ "Starting stock: 91\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-04 00:00:00\n",
+ "Starting stock: 82\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-05 00:00:00\n",
+ "Starting stock: 73\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-06 00:00:00\n",
+ "Starting stock: 63\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-07 00:00:00\n",
+ "Starting stock: 51\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-08 00:00:00\n",
+ "Starting stock: 40\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-09 00:00:00\n",
+ "Starting stock: 30\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-10 00:00:00\n",
+ "Starting stock: 20\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-11 00:00:00\n",
+ "Starting stock: 11\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-04-12 00:00:00\n",
+ "Starting stock: 101\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-04-12 00:00:00, delivery on 2022-04-22 00:00:00.\n",
+ "Simulating day: 2022-04-13 00:00:00\n",
+ "Starting stock: 89\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-14 00:00:00\n",
+ "Starting stock: 79\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-15 00:00:00\n",
+ "Starting stock: 70\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-16 00:00:00\n",
+ "Starting stock: 60\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-17 00:00:00\n",
+ "Starting stock: 51\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-18 00:00:00\n",
+ "Starting stock: 41\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-19 00:00:00\n",
+ "Starting stock: 33\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-20 00:00:00\n",
+ "Starting stock: 22\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-21 00:00:00\n",
+ "Starting stock: 11\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-22 00:00:00\n",
+ "Starting stock: -1\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-04-22 00:00:00, delivery on 2022-05-02 00:00:00.\n",
+ "Simulating day: 2022-04-23 00:00:00\n",
+ "Starting stock: 89\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-24 00:00:00\n",
+ "Starting stock: 80\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-25 00:00:00\n",
+ "Starting stock: 70\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-26 00:00:00\n",
+ "Starting stock: 61\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-27 00:00:00\n",
+ "Starting stock: 50\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-28 00:00:00\n",
+ "Starting stock: 40\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-29 00:00:00\n",
+ "Starting stock: 30\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-04-30 00:00:00\n",
+ "Starting stock: 21\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-01 00:00:00\n",
+ "Starting stock: 13\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-02 00:00:00\n",
+ "Starting stock: 3\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-05-02 00:00:00, delivery on 2022-05-10 00:00:00.\n",
+ "Simulating day: 2022-05-03 00:00:00\n",
+ "Starting stock: 94\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-04 00:00:00\n",
+ "Starting stock: 84\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-05 00:00:00\n",
+ "Starting stock: 73\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-06 00:00:00\n",
+ "Starting stock: 63\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-07 00:00:00\n",
+ "Starting stock: 54\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-08 00:00:00\n",
+ "Starting stock: 43\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-09 00:00:00\n",
+ "Starting stock: 33\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-10 00:00:00\n",
+ "Starting stock: 21\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-05-11 00:00:00\n",
+ "Starting stock: 111\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-12 00:00:00\n",
+ "Starting stock: 101\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-05-12 00:00:00, delivery on 2022-05-23 00:00:00.\n",
+ "Simulating day: 2022-05-13 00:00:00\n",
+ "Starting stock: 91\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-14 00:00:00\n",
+ "Starting stock: 83\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-15 00:00:00\n",
+ "Starting stock: 72\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-16 00:00:00\n",
+ "Starting stock: 62\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-17 00:00:00\n",
+ "Starting stock: 51\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-18 00:00:00\n",
+ "Starting stock: 42\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-19 00:00:00\n",
+ "Starting stock: 31\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-20 00:00:00\n",
+ "Starting stock: 22\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-21 00:00:00\n",
+ "Starting stock: 12\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-22 00:00:00\n",
+ "Starting stock: 2\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-23 00:00:00\n",
+ "Starting stock: -6\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-05-23 00:00:00, delivery on 2022-06-01 00:00:00.\n",
+ "Simulating day: 2022-05-24 00:00:00\n",
+ "Starting stock: 84\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-25 00:00:00\n",
+ "Starting stock: 73\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-26 00:00:00\n",
+ "Starting stock: 63\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-27 00:00:00\n",
+ "Starting stock: 53\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-28 00:00:00\n",
+ "Starting stock: 43\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-29 00:00:00\n",
+ "Starting stock: 33\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-30 00:00:00\n",
+ "Starting stock: 23\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-05-31 00:00:00\n",
+ "Starting stock: 12\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-01 00:00:00\n",
+ "Starting stock: 4\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-06-01 00:00:00, delivery on 2022-06-11 00:00:00.\n",
+ "Simulating day: 2022-06-02 00:00:00\n",
+ "Starting stock: 95\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-03 00:00:00\n",
+ "Starting stock: 86\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-04 00:00:00\n",
+ "Starting stock: 76\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-05 00:00:00\n",
+ "Starting stock: 67\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-06 00:00:00\n",
+ "Starting stock: 57\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-07 00:00:00\n",
+ "Starting stock: 47\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-08 00:00:00\n",
+ "Starting stock: 37\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-09 00:00:00\n",
+ "Starting stock: 26\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-10 00:00:00\n",
+ "Starting stock: 17\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-11 00:00:00\n",
+ "Starting stock: 8\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-06-11 00:00:00, delivery on 2022-06-20 00:00:00.\n",
+ "Simulating day: 2022-06-12 00:00:00\n",
+ "Starting stock: 99\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-13 00:00:00\n",
+ "Starting stock: 90\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-14 00:00:00\n",
+ "Starting stock: 79\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-15 00:00:00\n",
+ "Starting stock: 68\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-16 00:00:00\n",
+ "Starting stock: 57\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-17 00:00:00\n",
+ "Starting stock: 47\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-18 00:00:00\n",
+ "Starting stock: 38\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-19 00:00:00\n",
+ "Starting stock: 28\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-20 00:00:00\n",
+ "Starting stock: 16\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-06-21 00:00:00\n",
+ "Starting stock: 106\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-06-21 00:00:00, delivery on 2022-06-29 00:00:00.\n",
+ "Simulating day: 2022-06-22 00:00:00\n",
+ "Starting stock: 97\n",
+ "Generated demand for today: 7\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-23 00:00:00\n",
+ "Starting stock: 90\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-24 00:00:00\n",
+ "Starting stock: 80\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-25 00:00:00\n",
+ "Starting stock: 70\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-26 00:00:00\n",
+ "Starting stock: 58\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-27 00:00:00\n",
+ "Starting stock: 49\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-28 00:00:00\n",
+ "Starting stock: 39\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-06-29 00:00:00\n",
+ "Starting stock: 28\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-06-30 00:00:00\n",
+ "Starting stock: 117\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-01 00:00:00\n",
+ "Starting stock: 107\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-07-01 00:00:00, delivery on 2022-07-10 00:00:00.\n",
+ "Simulating day: 2022-07-02 00:00:00\n",
+ "Starting stock: 96\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-03 00:00:00\n",
+ "Starting stock: 86\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-04 00:00:00\n",
+ "Starting stock: 77\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-05 00:00:00\n",
+ "Starting stock: 68\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-06 00:00:00\n",
+ "Starting stock: 56\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-07 00:00:00\n",
+ "Starting stock: 46\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-08 00:00:00\n",
+ "Starting stock: 37\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-09 00:00:00\n",
+ "Starting stock: 28\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-10 00:00:00\n",
+ "Starting stock: 17\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-07-11 00:00:00\n",
+ "Starting stock: 108\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-07-11 00:00:00, delivery on 2022-07-19 00:00:00.\n",
+ "Simulating day: 2022-07-12 00:00:00\n",
+ "Starting stock: 99\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-13 00:00:00\n",
+ "Starting stock: 89\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-14 00:00:00\n",
+ "Starting stock: 79\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-15 00:00:00\n",
+ "Starting stock: 71\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-16 00:00:00\n",
+ "Starting stock: 61\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-17 00:00:00\n",
+ "Starting stock: 50\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-18 00:00:00\n",
+ "Starting stock: 41\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-19 00:00:00\n",
+ "Starting stock: 29\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-07-20 00:00:00\n",
+ "Starting stock: 119\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-21 00:00:00\n",
+ "Starting stock: 109\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-22 00:00:00\n",
+ "Starting stock: 101\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-07-22 00:00:00, delivery on 2022-07-30 00:00:00.\n",
+ "Simulating day: 2022-07-23 00:00:00\n",
+ "Starting stock: 89\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-24 00:00:00\n",
+ "Starting stock: 80\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-25 00:00:00\n",
+ "Starting stock: 70\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-26 00:00:00\n",
+ "Starting stock: 59\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-27 00:00:00\n",
+ "Starting stock: 50\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-28 00:00:00\n",
+ "Starting stock: 40\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-29 00:00:00\n",
+ "Starting stock: 28\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-07-30 00:00:00\n",
+ "Starting stock: 18\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-07-31 00:00:00\n",
+ "Starting stock: 108\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-07-31 00:00:00, delivery on 2022-08-09 00:00:00.\n",
+ "Simulating day: 2022-08-01 00:00:00\n",
+ "Starting stock: 96\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-02 00:00:00\n",
+ "Starting stock: 84\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-03 00:00:00\n",
+ "Starting stock: 74\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-04 00:00:00\n",
+ "Starting stock: 65\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-05 00:00:00\n",
+ "Starting stock: 55\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-06 00:00:00\n",
+ "Starting stock: 45\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-07 00:00:00\n",
+ "Starting stock: 37\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-08 00:00:00\n",
+ "Starting stock: 26\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-09 00:00:00\n",
+ "Starting stock: 17\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-08-10 00:00:00\n",
+ "Starting stock: 106\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-08-10 00:00:00, delivery on 2022-08-18 00:00:00.\n",
+ "Simulating day: 2022-08-11 00:00:00\n",
+ "Starting stock: 96\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-12 00:00:00\n",
+ "Starting stock: 87\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-13 00:00:00\n",
+ "Starting stock: 78\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-14 00:00:00\n",
+ "Starting stock: 68\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-15 00:00:00\n",
+ "Starting stock: 58\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-16 00:00:00\n",
+ "Starting stock: 47\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-17 00:00:00\n",
+ "Starting stock: 36\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-18 00:00:00\n",
+ "Starting stock: 26\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-08-19 00:00:00\n",
+ "Starting stock: 117\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-20 00:00:00\n",
+ "Starting stock: 107\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-08-20 00:00:00, delivery on 2022-08-28 00:00:00.\n",
+ "Simulating day: 2022-08-21 00:00:00\n",
+ "Starting stock: 97\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-22 00:00:00\n",
+ "Starting stock: 88\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-23 00:00:00\n",
+ "Starting stock: 78\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-24 00:00:00\n",
+ "Starting stock: 68\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-25 00:00:00\n",
+ "Starting stock: 60\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-26 00:00:00\n",
+ "Starting stock: 51\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-27 00:00:00\n",
+ "Starting stock: 42\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-28 00:00:00\n",
+ "Starting stock: 32\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-08-29 00:00:00\n",
+ "Starting stock: 122\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-30 00:00:00\n",
+ "Starting stock: 112\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-08-31 00:00:00\n",
+ "Starting stock: 102\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-08-31 00:00:00, delivery on 2022-09-09 00:00:00.\n",
+ "Simulating day: 2022-09-01 00:00:00\n",
+ "Starting stock: 92\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-02 00:00:00\n",
+ "Starting stock: 84\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-03 00:00:00\n",
+ "Starting stock: 75\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-04 00:00:00\n",
+ "Starting stock: 64\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-05 00:00:00\n",
+ "Starting stock: 52\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-06 00:00:00\n",
+ "Starting stock: 42\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-07 00:00:00\n",
+ "Starting stock: 31\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-08 00:00:00\n",
+ "Starting stock: 20\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-09 00:00:00\n",
+ "Starting stock: 12\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-09-10 00:00:00\n",
+ "Starting stock: 101\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-09-10 00:00:00, delivery on 2022-09-19 00:00:00.\n",
+ "Simulating day: 2022-09-11 00:00:00\n",
+ "Starting stock: 94\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-12 00:00:00\n",
+ "Starting stock: 84\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-13 00:00:00\n",
+ "Starting stock: 74\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-14 00:00:00\n",
+ "Starting stock: 63\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-15 00:00:00\n",
+ "Starting stock: 53\n",
+ "Generated demand for today: 7\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-16 00:00:00\n",
+ "Starting stock: 46\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-17 00:00:00\n",
+ "Starting stock: 35\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-18 00:00:00\n",
+ "Starting stock: 26\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-19 00:00:00\n",
+ "Starting stock: 16\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-09-20 00:00:00\n",
+ "Starting stock: 106\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-09-20 00:00:00, delivery on 2022-10-01 00:00:00.\n",
+ "Simulating day: 2022-09-21 00:00:00\n",
+ "Starting stock: 96\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-22 00:00:00\n",
+ "Starting stock: 85\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-23 00:00:00\n",
+ "Starting stock: 76\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-24 00:00:00\n",
+ "Starting stock: 67\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-25 00:00:00\n",
+ "Starting stock: 56\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-26 00:00:00\n",
+ "Starting stock: 47\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-27 00:00:00\n",
+ "Starting stock: 36\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-28 00:00:00\n",
+ "Starting stock: 27\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-29 00:00:00\n",
+ "Starting stock: 16\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-09-30 00:00:00\n",
+ "Starting stock: 8\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-01 00:00:00\n",
+ "Starting stock: -1\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-10-01 00:00:00, delivery on 2022-10-12 00:00:00.\n",
+ "Simulating day: 2022-10-02 00:00:00\n",
+ "Starting stock: 88\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-03 00:00:00\n",
+ "Starting stock: 78\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-04 00:00:00\n",
+ "Starting stock: 67\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-05 00:00:00\n",
+ "Starting stock: 55\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-06 00:00:00\n",
+ "Starting stock: 44\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-07 00:00:00\n",
+ "Starting stock: 34\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-08 00:00:00\n",
+ "Starting stock: 26\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-09 00:00:00\n",
+ "Starting stock: 16\n",
+ "Generated demand for today: 7\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-10 00:00:00\n",
+ "Starting stock: 9\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-11 00:00:00\n",
+ "Starting stock: -2\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-12 00:00:00\n",
+ "Starting stock: -14\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-10-12 00:00:00, delivery on 2022-10-22 00:00:00.\n",
+ "Simulating day: 2022-10-13 00:00:00\n",
+ "Starting stock: 77\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-14 00:00:00\n",
+ "Starting stock: 66\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-15 00:00:00\n",
+ "Starting stock: 57\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-16 00:00:00\n",
+ "Starting stock: 47\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-17 00:00:00\n",
+ "Starting stock: 38\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-18 00:00:00\n",
+ "Starting stock: 27\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-19 00:00:00\n",
+ "Starting stock: 17\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-20 00:00:00\n",
+ "Starting stock: 8\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-21 00:00:00\n",
+ "Starting stock: -3\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-22 00:00:00\n",
+ "Starting stock: -13\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-10-22 00:00:00, delivery on 2022-11-02 00:00:00.\n",
+ "Simulating day: 2022-10-23 00:00:00\n",
+ "Starting stock: 78\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-24 00:00:00\n",
+ "Starting stock: 68\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-25 00:00:00\n",
+ "Starting stock: 57\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-26 00:00:00\n",
+ "Starting stock: 48\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-27 00:00:00\n",
+ "Starting stock: 38\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-28 00:00:00\n",
+ "Starting stock: 26\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-29 00:00:00\n",
+ "Starting stock: 16\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-30 00:00:00\n",
+ "Starting stock: 8\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-10-31 00:00:00\n",
+ "Starting stock: -1\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-01 00:00:00\n",
+ "Starting stock: -13\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-02 00:00:00\n",
+ "Starting stock: -23\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-11-02 00:00:00, delivery on 2022-11-12 00:00:00.\n",
+ "Simulating day: 2022-11-03 00:00:00\n",
+ "Starting stock: 68\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-04 00:00:00\n",
+ "Starting stock: 57\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-05 00:00:00\n",
+ "Starting stock: 47\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-06 00:00:00\n",
+ "Starting stock: 36\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-07 00:00:00\n",
+ "Starting stock: 27\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-08 00:00:00\n",
+ "Starting stock: 17\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-09 00:00:00\n",
+ "Starting stock: 6\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-10 00:00:00\n",
+ "Starting stock: -4\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-11 00:00:00\n",
+ "Starting stock: -14\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-12 00:00:00\n",
+ "Starting stock: -25\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-11-12 00:00:00, delivery on 2022-11-21 00:00:00.\n",
+ "Simulating day: 2022-11-13 00:00:00\n",
+ "Starting stock: 63\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-14 00:00:00\n",
+ "Starting stock: 54\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-15 00:00:00\n",
+ "Starting stock: 44\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-16 00:00:00\n",
+ "Starting stock: 34\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-17 00:00:00\n",
+ "Starting stock: 24\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-18 00:00:00\n",
+ "Starting stock: 14\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-19 00:00:00\n",
+ "Starting stock: 3\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-20 00:00:00\n",
+ "Starting stock: -7\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-21 00:00:00\n",
+ "Starting stock: -17\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-11-21 00:00:00, delivery on 2022-12-01 00:00:00.\n",
+ "Simulating day: 2022-11-22 00:00:00\n",
+ "Starting stock: 73\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-23 00:00:00\n",
+ "Starting stock: 64\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-24 00:00:00\n",
+ "Starting stock: 55\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-25 00:00:00\n",
+ "Starting stock: 45\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-26 00:00:00\n",
+ "Starting stock: 35\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-27 00:00:00\n",
+ "Starting stock: 26\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-28 00:00:00\n",
+ "Starting stock: 16\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-29 00:00:00\n",
+ "Starting stock: 5\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-11-30 00:00:00\n",
+ "Starting stock: -6\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-01 00:00:00\n",
+ "Starting stock: -17\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-12-01 00:00:00, delivery on 2022-12-09 00:00:00.\n",
+ "Simulating day: 2022-12-02 00:00:00\n",
+ "Starting stock: 71\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-03 00:00:00\n",
+ "Starting stock: 60\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-04 00:00:00\n",
+ "Starting stock: 51\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-05 00:00:00\n",
+ "Starting stock: 40\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-06 00:00:00\n",
+ "Starting stock: 31\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-07 00:00:00\n",
+ "Starting stock: 20\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-08 00:00:00\n",
+ "Starting stock: 8\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-09 00:00:00\n",
+ "Starting stock: -3\n",
+ "Generated demand for today: 12\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-12-09 00:00:00, delivery on 2022-12-18 00:00:00.\n",
+ "Simulating day: 2022-12-10 00:00:00\n",
+ "Starting stock: 86\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-11 00:00:00\n",
+ "Starting stock: 76\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-12 00:00:00\n",
+ "Starting stock: 66\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-13 00:00:00\n",
+ "Starting stock: 56\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-14 00:00:00\n",
+ "Starting stock: 46\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-15 00:00:00\n",
+ "Starting stock: 36\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-16 00:00:00\n",
+ "Starting stock: 27\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-17 00:00:00\n",
+ "Starting stock: 17\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-18 00:00:00\n",
+ "Starting stock: 7\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 100\n",
+ "Placing a new order: Order of 100, requested on 2022-12-18 00:00:00, delivery on 2022-12-27 00:00:00.\n",
+ "Simulating day: 2022-12-19 00:00:00\n",
+ "Starting stock: 98\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-20 00:00:00\n",
+ "Starting stock: 88\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-21 00:00:00\n",
+ "Starting stock: 77\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-22 00:00:00\n",
+ "Starting stock: 66\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-23 00:00:00\n",
+ "Starting stock: 56\n",
+ "Generated demand for today: 9\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-24 00:00:00\n",
+ "Starting stock: 47\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-25 00:00:00\n",
+ "Starting stock: 36\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-26 00:00:00\n",
+ "Starting stock: 27\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-27 00:00:00\n",
+ "Starting stock: 16\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 100\n",
+ "Simulating day: 2022-12-28 00:00:00\n",
+ "Starting stock: 108\n",
+ "Generated demand for today: 8\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-29 00:00:00\n",
+ "Starting stock: 100\n",
+ "Generated demand for today: 11\n",
+ "Goods received today: 0\n",
+ "Placing a new order: Order of 100, requested on 2022-12-29 00:00:00, delivery on 2023-01-09 00:00:00.\n",
+ "Simulating day: 2022-12-30 00:00:00\n",
+ "Starting stock: 89\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n",
+ "Simulating day: 2022-12-31 00:00:00\n",
+ "Starting stock: 79\n",
+ "Generated demand for today: 10\n",
+ "Goods received today: 0\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# That was a simulation of a full year with the passed parameters. If you go \n",
+ "# carefully through the output, you can see the stock, demand and goods received\n",
+ "# on each date, as well as the placing of orders."
+ ],
+ "metadata": {
+ "id": "UkFu2DpXoj99"
+ },
+ "execution_count": 8,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### Simulation Results"
+ ],
+ "metadata": {
+ "id": "Fg4955v-p56d"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# The SimulationResults objects allows to get some summarized statistics from \n",
+ "# a simulation. For example, let's plot the stock in the warehouse over that \n",
+ "# simulation.\n",
+ "\n",
+ "example_simulation_results.plot_stock_history()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 265
+ },
+ "id": "svQJQPCZoxFK",
+ "outputId": "d17e6edc-d51c-41f4-8669-9438bf870fef"
+ },
+ "execution_count": 9,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# We can also visualize the distribution of the stock level during the full year\n",
+ "\n",
+ "example_simulation_results.plot_stock_distribution()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 265
+ },
+ "id": "b5ANCHLmrT6t",
+ "outputId": "01e1f1cd-459a-4cfc-8ef3-78a6c2ec99c9"
+ },
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# And check the details of the distribution\n",
+ "\n",
+ "example_simulation_results.stock_level_summary()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "ekTLMm_6salj",
+ "outputId": "6f1a3f50-bbbd-49eb-95ca-f1bb8b5e5a10"
+ },
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ " 0\n",
+ "count 365.000000\n",
+ "mean 54.411392\n",
+ "std 32.615996\n",
+ "min -24.762915\n",
+ "25% 29.047827\n",
+ "50% 54.524196\n",
+ "75% 79.744893\n",
+ "max 121.614883\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# SimulationResults contains some other helpful functions. See the examples \n",
+ "# below:\n",
+ "\n",
+ "service_level = example_simulation_results.service_level()\n",
+ "mean_stock_level = example_simulation_results.mean_stock_level()\n",
+ "median_stock_level = example_simulation_results.median_stock_level()\n",
+ "stdev_stock_level = example_simulation_results.stdev_stock_level()\n",
+ "number_of_purchase_orders = example_simulation_results.number_of_purchase_orders_placed()\n",
+ "\n",
+ "\n",
+ "print(f\"Demand was properly satisfied on {service_level * 100}% of simulated days.\")\n",
+ "print(f\"The mean and median stock level were: {mean_stock_level} and {median_stock_level}.\")\n",
+ "print(f\"There was a total of {number_of_purchase_orders} orders during the simulation.\")"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "3nORekD6ptpB",
+ "outputId": "770cf04f-c722-4cf0-fb04-7bab92a11287"
+ },
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Demand was properly satisfied on 95.06849315068493% of simulated days.\n",
+ "The mean and median stock level were: 54.41139166431389 and 54.52419638372521.\n",
+ "There was a total of 37 orders during the simulation.\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### Your turn\n",
+ "\n",
+ "Now that you are familiar with the provided simulation objects, use them to answer Elisa's requests on level 2."
+ ],
+ "metadata": {
+ "id": "GMzPWTWF7kdi"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Your code goes in cells in this section"
+ ],
+ "metadata": {
+ "id": "PpS5hsrP8Tw5"
+ },
+ "execution_count": 13,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Level 3\n",
+ "\n",
+ "From the case description:\n",
+ "\n",
+ " - Right after you finished designing your policy for level 2, Elisa called\n",
+ " with some news: she has just been informed by the management in Diemen\n",
+ " that a new Minimum Order Quantity (MOQ) rule will begin soon. This rule\n",
+ " means that, when the Caserta warehouse places an order to request\n",
+ " material from, the order should be of at least 500,000 kgs of beans, and\n",
+ " not less than that.\n",
+ " - Elisa wants you to take this into account. Does it affect the policy you\n",
+ " proposed for level 2? If so, you need to come up with a new one that\n",
+ " adapts to this rule and compare it to the previous one."
+ ],
+ "metadata": {
+ "id": "mjVrfdcE8Wos"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Your code goes in cells in this section"
+ ],
+ "metadata": {
+ "id": "jRAEfGGu8hUs"
+ },
+ "execution_count": 14,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Level 4\n",
+ "\n",
+ "From the case description:\n",
+ "\n",
+ " - Elisa briefly discussed with you in one meeting that there is an option\n",
+ " to come to an agreement with the team in Diemen to improve the lead time\n",
+ " stability. The proposal from Diemen is that, if the target lead time was\n",
+ " set to something higher that the current 7 days target, providing a more\n",
+ " stable delivery would be feasible.\n",
+ " - The specific proposal from Diemen is: if the lead time target is changed\n",
+ " to 15 days, they provide a 100% guarantee that orders will be delivered\n",
+ " in exactly 15 days.\n",
+ " - Elisa would love if you could take some additional time to study this\n",
+ " proposal. What is better for Caserta? The current 7 days target\n",
+ " lead-time, with unstable deliveries? Or a fixed, 15-day lead time?\n",
+ " - The MOQ rule of level 3 still applies."
+ ],
+ "metadata": {
+ "id": "gVQE6YOq-Ic0"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Your code goes in cells in this section"
+ ],
+ "metadata": {
+ "id": "0q7asO3L-ieE"
+ },
+ "execution_count": 15,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/aot/cases/case_2/case_2.zip b/aot/cases/case_2/case_2.zip
new file mode 100644
index 0000000..3395a1a
Binary files /dev/null and b/aot/cases/case_2/case_2.zip differ
diff --git a/aot/cases/case_2/case_2_description.docx b/aot/cases/case_2/case_2_description.docx
new file mode 100644
index 0000000..6621db1
Binary files /dev/null and b/aot/cases/case_2/case_2_description.docx differ
diff --git a/aot/cases/case_2/case_2_description.md b/aot/cases/case_2/case_2_description.md
new file mode 100644
index 0000000..6890e49
--- /dev/null
+++ b/aot/cases/case_2/case_2_description.md
@@ -0,0 +1,196 @@
+# Case 1: Simulating Stock Policies
+
+- Title: Choosing stock policies under uncertainty
+- Description: Students role-play their participation as consultants in a
+ project for Beanie Limited, a coffee beans roasting company. Elisa, the
+ regional manager for the italian region, is not happy with their inventory
+ policies for raw beans. The students are asked to analyse the problems posed
+ by Elisa and apply simulation techniques, together with real data, to
+ recommend a stock policy for the company's warehouse in the italian region.
+ Python notebooks with some helpful prepared functions are provided to the
+ students. The final delivery is a report with their recommendation to the
+ client company, along with the used code.
+
+Stuff I want them to understand:
+
+- The model/hypothesis/validate
+- That in a simulation you set parameters, and you observe results
+- To write in a problem-solving manner.
+- That there are trade-offs and it's not trivial to find optimal solutions.
+
+Elements of the simulation:
+
+- Demand behavior
+- Lead time and standard deviation of provider (or providers)
+- Service level
+- Punishment for sales lost
+
+Observable effects of policies:
+
+- Mean inventory at hand
+- Service level
+- Warehousing/Capital Cost
+- Lost sales cost
+
+# Case 1: Choosing ordering goods under uncertainty
+
+You are part of an expert simulation team in SimiUPF SL. You have been assigned
+to a new project with a client company, Beanie Limited. Beanie Limited is a
+coffee roasting company and also distributes raw coffee beans through Europe
+and Middle East.
+
+Specifically, you will be working for Elisa Bolzano, the Director of Beanie
+Limited's warehouse located in Caserta, near Naples. Elisa is the full
+responsible for all the operations in the warehouse. She has requested the help
+of the SimiUPF team because she is worried about how certain things are managed
+in the warehouse and wants your help.
+
+The Caserta warehouse serves the raw coffee beans distribution business of
+Beanie Limited in southern europe and the mediterranean. The warehouse and its
+team are responsible for serving clients and also other smaller regional
+warehouses from Beanie Limited in this geography. From the warehouse point of
+view, they are usually just called "the clients". Whenever one of the clients
+needs raw beans, they arrange a transport truck that goes to the warehouse to
+pick up a certain amount of goods. Elisa's team fills up the truck with the
+requested goods, and then the clients take care of receiving that at their own
+locations. Given the size and relevance of the Caserta warehouse, activity is
+pretty much constant, with goods leaving the warehouse towards client locations
+every day.
+
+The Caserta warehouse itself has only one way to source coffee beans to store
+in their warehouse: requesting them to the Beanie Limited central offices in
+Diemen, near Amsterdam. Whenever Elisa's team considers that more stock is
+needed, they post a Purchase Order to the central office for a certain amount
+of beans. The central office arranges the goods and the delivery and, after a
+few days, the goods reach Caserta and are stored in the warehouse. The central
+office tries to ensure a lead time of 7 days (lead time is the time that passes
+between an order being placed and the goods reaching their destination), but
+the reality is they do what they can and this time is not always respected.
+
+Stock is a necessary evil (it implies a lot of cost), but Elisa's warehouse
+needs it to serve the clients in their region properly. Having too little stock
+means the clients need to wait long times to get their goods, which is risky
+for the business. On the other hand, having a lot of stock means high warehouse
+costs and financial opportunity cost (if Beanie Limited has 1 million € in
+coffee beans in a warehouse, that is 1 million € they can't invest somewhere
+else to improve their business). Thus, Elisa needs the stock to be as small as
+possible, while making sure she is not disappointing clients at the same time
+because of stockouts.
+
+Elisa is calling you because 2021 was a terrible year for the warehouse. The
+year was a chaotic one, and Elisa's team was not able to run operations
+smoothly. Although Elisa is not providing exact numbers, she is very well aware
+that the warehouse stock was unnecessarily high at times, and that there were
+too many periods where the warehouse was out of stock and clients had to wait
+to get their goods.
+
+Elisa thinks the main reason for this is the lack of a clear policy for when to
+order and how much to order from Diemen. Her team decides independently when to
+do it, and Elisa has a feeling that they are not approaching these decisions
+the right way. This means that sometimes they order when there is no need to,
+sometimes they don't order when they should, and that the amounts being ordered
+might not always be the optimal ones.
+
+Here is where you come in. As simulation experts, Elisa expects from you that
+you can help design an ordering policy to fix these issues. Doing this implies
+examining data from last year, building a proper simulation to examine the
+different factors being involved, and deciding when and how should Elisa's team
+order more goods from Diemen.
+
+Elisa expects a report where you share your findings and recommendations in a
+clear way that can help her team. Also, Elisa does not trust you blindly: you
+need to motivate the reasoning behind your recommendations. Otherwise, she will
+not feel comfortable implementing your recommendations and the bosses at
+SimiUPF will be mad at you...
+
+## Detailed task definition
+
+- Below you will find four levels of questions. Levels 1 to 3 are compulsory.
+ Level 4 is optional.
+- You need to write a report document where you answer the questions of the
+ different levels. This report should be directed towards Elisa, should give
+ her clear recommendations and should justify these recommendations. It's
+ important for you to reflect your methodology to back your proposals.
+- Each level is worth 2 points out of a total of 10. The 2 missing points will
+ grade the clarity and structure of your report and code.
+- You need to use a Python notebook to solve all levels. A helper notebook is
+ provided. Please attach a notebook that shows your
+ solution/proposal/analysis.
+- Include your team number, names and student IDs in all your deliverables.
+
+## Data
+
+- You are provided with three tables that contain real data from 2021.
+ - demand_events: this table shows how many beans left the Caserta warehouse
+ to serve clients. There is some amount leaving every day because the
+ warehouse serves many small orders from small clients, so there is always
+ some order being fulfilled. The amount is measured in kilograms, and
+ represents the total amount that left during that day. Individual orders
+ are not relevant for this case, so we only look at daily total figures.
+ - sourcing_events: this table shows the Purchase Orders that Elisa's team
+ placed to Diemen. For each order, there are two dates: the date when
+ Elisa's team placed the order, and the date where the beans actually
+ reached the Caserta warehouse. The difference between those dates is the
+ real lead time of each order. The amount is measured in kilograms.
+ - stock_state: this table shows the stock at the warehouse at the end of
+ each date. As you can guess, the stock for a certain date is the stock of
+ the previous day, plus the goods that reached Caserta coming from Diemen,
+ minus the goods that left the warehouse to serve client orders. A
+ negative stock is not a challenge to the laws of physics: it means
+ clients are waiting for their requested beans. If one row shows -1.000,
+ it means that the warehouse is empty, and clients are awaiting a total
+ amount of 1.000 kgs of beans. If next morning, a 1.000 kgs reach Caserta
+ from Diemen, those will be used immediately to satisfy those awaiting
+ clients, and the warehouse stock will become 0.
+
+## Notebook
+
+A notebook with some helping code has been provided. The code contains a small
+simulation engine that can help you simulate a year of activity for the
+warehouse. The instructions on how to use the code are in the notebook itself.
+
+## Levels
+
+- Level 1
+ - Elisa wants you to measure the performance of the last year, providing
+ quantitative metrics. She knows it was a bad year, but hasn't looked at
+ the real data to summarize how bad it was. Remember that there is a
+ trade-off: too much stock, is not desired, but running out of stock and
+ making clients wait is also negative.
+ - Going one step further, Elisa wants to know: what was done wrong?
+- Level 2
+ - Elisa wants you to propose an ordering policy. This means, that you need
+ to define a rule that, once each day, should answer the questions: should
+ we place a Purchase Order to request beans from Diemen today? If yes, how
+ much should we order?
+ - Use simulation to present metrics on what is the expected performance
+ with the policy you are proposing. Remember, you need to convince Elisa
+ that this is better than what happens today.
+ - As a specific constraint, Elisa explains that she wants that the
+ probability of a stockout to be at most of 5% on any given day.
+
+- Level 3
+ - Right after you finished designing your policy for level 2, Elisa called
+ with some news: she has just been informed by the management in Diemen
+ that a new Minimum Order Quantity (MOQ) rule will begin soon. This rule
+ means that, when the Caserta warehouse places an order to request
+ material from Diemen, the order should be of at least 500,000 kgs of
+ beans, and not less than that.
+ - Elisa wants you to take this into account. Does it affect the policy you
+ proposed for level 2? If so, you need to come up with a new one that
+ adapts to this rule and compare it to the previous one.
+- Level 4
+ - Elisa briefly discussed with you in one meeting that there is an option
+ to come to an agreement with the team in Diemen to improve the lead time
+ stability. The proposal from Diemen is that, if the target lead time was
+ set to something higher that the current 7 days target, providing a more
+ stable delivery would be feasible.
+ - The specific proposal from Diemen is: if the lead time target is changed
+ to 15 days, they provide a 100% guarantee that orders will be delivered
+ in exactly 15 days.
+ - Elisa would love if you could take some additional time to study this
+ proposal. What is better for Caserta? The current 7 days target
+ lead-time, with unstable delivery times? Or a fixed, 15-day lead time?
+ - The MOQ rule of level 3 still applies.
+
+
diff --git a/aot/cases/case_2/case_2_description.pdf b/aot/cases/case_2/case_2_description.pdf
new file mode 100644
index 0000000..ffd319b
Binary files /dev/null and b/aot/cases/case_2/case_2_description.pdf differ
diff --git a/aot/cases/case_2/demand_events.csv b/aot/cases/case_2/demand_events.csv
new file mode 100644
index 0000000..c85dc86
--- /dev/null
+++ b/aot/cases/case_2/demand_events.csv
@@ -0,0 +1,366 @@
+date,demand_quantity
+2021-01-01,54609.49281314914
+2021-01-02,36208.63648649295
+2021-01-03,77784.17276763407
+2021-01-04,76481.81360421646
+2021-01-05,52305.87658918292
+2021-01-06,57098.56436860317
+2021-01-07,41565.68706138541
+2021-01-08,81995.500619844
+2021-01-09,71041.91466404148
+2021-01-10,31787.17080818402
+2021-01-11,32735.09633866546
+2021-01-12,32855.44553254065
+2021-01-13,55420.934082626205
+2021-01-14,48883.311263507494
+2021-01-15,48368.597773147136
+2021-01-16,40225.99478591274
+2021-01-17,69003.66723779934
+2021-01-18,67378.93368511106
+2021-01-19,59444.432628854185
+2021-01-20,54441.80415596864
+2021-01-21,52796.814721541414
+2021-01-22,30193.150803735854
+2021-01-23,62328.53756562836
+2021-01-24,43690.320158519615
+2021-01-25,78451.89473980921
+2021-01-26,47794.13927746792
+2021-01-27,51454.93947489077
+2021-01-28,64633.17690683539
+2021-01-29,67371.66310250101
+2021-01-30,51137.068372905895
+2021-01-31,62192.931782584405
+2021-02-01,62381.245234820446
+2021-02-02,62744.03145531537
+2021-02-03,51305.706023572566
+2021-02-04,52618.66719247759
+2021-02-05,51961.10865929137
+2021-02-06,55154.27434352692
+2021-02-07,39799.62917632264
+2021-02-08,65486.97890826721
+2021-02-09,55355.23228947571
+2021-02-10,46211.4777291026
+2021-02-11,53132.95392507133
+2021-02-12,31537.03525349067
+2021-02-13,46447.72089889987
+2021-02-14,63731.03176553111
+2021-02-15,54454.77009849779
+2021-02-16,40659.50720269109
+2021-02-17,63493.99813149876
+2021-02-18,54931.266644895266
+2021-02-19,28278.734877540137
+2021-02-20,36379.638867181835
+2021-02-21,62202.758260545044
+2021-02-22,54523.210135004185
+2021-02-23,42395.85236943305
+2021-02-24,42934.425415725156
+2021-02-25,51494.77047631462
+2021-02-26,44220.2960470736
+2021-02-27,45670.120416197926
+2021-02-28,57107.49381367681
+2021-03-01,28972.234058115788
+2021-03-02,43048.734607813065
+2021-03-03,41505.53405595842
+2021-03-04,47926.03548243223
+2021-03-05,61278.99549030161
+2021-03-06,39044.50052424295
+2021-03-07,37142.63665375576
+2021-03-08,59385.01021647509
+2021-03-09,19622.861200135892
+2021-03-10,42875.82033258566
+2021-03-11,37298.094228973925
+2021-03-12,53411.899019061944
+2021-03-13,45345.99865109816
+2021-03-14,53211.40616195306
+2021-03-15,40974.40081655905
+2021-03-16,56025.67583148412
+2021-03-17,42957.88421097572
+2021-03-18,65464.99283743926
+2021-03-19,28628.77720679815
+2021-03-20,50873.13077669
+2021-03-21,47215.115350042746
+2021-03-22,44982.481462385775
+2021-03-23,72845.44784612038
+2021-03-24,36657.28355561715
+2021-03-25,35932.62440127316
+2021-03-26,90802.53749884429
+2021-03-27,54150.36198995029
+2021-03-28,57725.715294590715
+2021-03-29,49797.541628930994
+2021-03-30,39842.574327318325
+2021-03-31,46648.05822011224
+2021-04-01,38251.20061495644
+2021-04-02,54968.95147105346
+2021-04-03,39223.33668121346
+2021-04-04,55196.72314245463
+2021-04-05,60193.96623402014
+2021-04-06,107790.97235982082
+2021-04-07,58927.3553815537
+2021-04-08,52570.524217849554
+2021-04-09,40996.74684261808
+2021-04-10,52952.91853803685
+2021-04-11,55117.279622249654
+2021-04-12,62330.90239991735
+2021-04-13,60352.159875666686
+2021-04-14,46481.1929993728
+2021-04-15,26740.04853400801
+2021-04-16,58824.75809726865
+2021-04-17,48919.848176294996
+2021-04-18,69164.97343682637
+2021-04-19,65052.99346838036
+2021-04-20,86948.6316872793
+2021-04-21,47600.922050548594
+2021-04-22,53629.43407349051
+2021-04-23,58802.85640700405
+2021-04-24,27277.291629712032
+2021-04-25,72991.08369503866
+2021-04-26,46319.17825995694
+2021-04-27,42473.64434623195
+2021-04-28,62986.327912551824
+2021-04-29,59770.868769586974
+2021-04-30,46967.110213491585
+2021-05-01,31283.252270527257
+2021-05-02,45270.96133039481
+2021-05-03,40200.06151139432
+2021-05-04,28769.438869243786
+2021-05-05,41597.284397045456
+2021-05-06,42053.59694349442
+2021-05-07,32056.90063878994
+2021-05-08,24126.23251230451
+2021-05-09,61874.94040944404
+2021-05-10,69582.18210731493
+2021-05-11,54713.709988929106
+2021-05-12,77986.61766717135
+2021-05-13,51047.031274850284
+2021-05-14,59715.32807151039
+2021-05-15,73688.19223261088
+2021-05-16,65807.03078052355
+2021-05-17,55779.76069593255
+2021-05-18,53655.30817237868
+2021-05-19,53863.25586084147
+2021-05-20,42447.86518825701
+2021-05-21,34634.185379985654
+2021-05-22,81385.8091352819
+2021-05-23,53674.49856663084
+2021-05-24,32130.44754196027
+2021-05-25,35141.955123039676
+2021-05-26,35379.77494659018
+2021-05-27,47723.22357446625
+2021-05-28,50903.4531491154
+2021-05-29,52597.71388776773
+2021-05-30,37762.845725518426
+2021-05-31,31687.345250434668
+2021-06-01,1380.9898989639114
+2021-06-02,39384.958015718286
+2021-06-03,62407.74873554036
+2021-06-04,65856.83339328374
+2021-06-05,41159.52864583683
+2021-06-06,78292.78851815795
+2021-06-07,45085.067801033474
+2021-06-08,63969.20178674298
+2021-06-09,61865.47920564571
+2021-06-10,66481.65277980786
+2021-06-11,51663.83884564799
+2021-06-12,49462.60941335073
+2021-06-13,48907.56631014691
+2021-06-14,27822.17014448859
+2021-06-15,35277.37023428074
+2021-06-16,58563.35766039751
+2021-06-17,62202.644540009576
+2021-06-18,59361.79725578232
+2021-06-19,37617.54204811233
+2021-06-20,84719.87850010264
+2021-06-21,50153.4959152938
+2021-06-22,40323.203680923136
+2021-06-23,34962.05953043287
+2021-06-24,46613.355492701965
+2021-06-25,53246.878843729624
+2021-06-26,38693.95753463766
+2021-06-27,64529.674857993334
+2021-06-28,41126.42916746255
+2021-06-29,71984.7315338233
+2021-06-30,28888.043384351673
+2021-07-01,60293.9028556177
+2021-07-02,49816.29840729628
+2021-07-03,42812.38643232065
+2021-07-04,34909.73927750447
+2021-07-05,37591.53584671515
+2021-07-06,39469.203591839716
+2021-07-07,54396.08709948022
+2021-07-08,28047.275778018222
+2021-07-09,41834.25913212226
+2021-07-10,42604.985980117504
+2021-07-11,57706.78926368313
+2021-07-12,37965.84096167571
+2021-07-13,42719.54678256345
+2021-07-14,36541.18442771253
+2021-07-15,45179.2123752051
+2021-07-16,49107.119659072996
+2021-07-17,28547.87933059051
+2021-07-18,49714.75688145967
+2021-07-19,33936.612529083315
+2021-07-20,72130.34325424329
+2021-07-21,21218.431770514377
+2021-07-22,47114.58552828316
+2021-07-23,62864.89434803029
+2021-07-24,48265.27576417639
+2021-07-25,82856.83438714968
+2021-07-26,71619.09933599173
+2021-07-27,31313.91831932018
+2021-07-28,51702.76017876872
+2021-07-29,51759.91074963173
+2021-07-30,43399.332699545244
+2021-07-31,55424.54037571451
+2021-08-01,42225.94672589529
+2021-08-02,34807.53319498364
+2021-08-03,73469.6548372101
+2021-08-04,27209.4505106898
+2021-08-05,57237.08622864778
+2021-08-06,45169.07725691487
+2021-08-07,51028.44462209041
+2021-08-08,40990.419651217926
+2021-08-09,31432.767517597265
+2021-08-10,46704.92168243732
+2021-08-11,67447.45628232439
+2021-08-12,56060.762852218075
+2021-08-13,36096.04292632875
+2021-08-14,82159.16133987988
+2021-08-15,61384.53830739901
+2021-08-16,42921.0220131585
+2021-08-17,57574.80918470686
+2021-08-18,44223.76579375525
+2021-08-19,38112.188923509486
+2021-08-20,43302.275718994686
+2021-08-21,31995.553894163357
+2021-08-22,51456.16324022061
+2021-08-23,51376.41164803253
+2021-08-24,45624.593753100846
+2021-08-25,46734.78195159169
+2021-08-26,37565.07483616892
+2021-08-27,23554.39766955899
+2021-08-28,20604.948141803365
+2021-08-29,66334.25895451049
+2021-08-30,48047.85418448473
+2021-08-31,56191.71390404747
+2021-09-01,44859.282252098456
+2021-09-02,46030.147501430656
+2021-09-03,10703.823438653832
+2021-09-04,70343.60042856235
+2021-09-05,69607.14131423642
+2021-09-06,56931.55211394906
+2021-09-07,54663.61348397007
+2021-09-08,57725.529008129895
+2021-09-09,53757.39275518815
+2021-09-10,53480.74906036454
+2021-09-11,49602.291868261746
+2021-09-12,52985.895433602054
+2021-09-13,37411.73715166042
+2021-09-14,59155.55398150197
+2021-09-15,21991.02211112378
+2021-09-16,59508.78533477017
+2021-09-17,41544.13170794038
+2021-09-18,46878.16624464087
+2021-09-19,32469.82943570702
+2021-09-20,61806.26905613678
+2021-09-21,56074.725664414334
+2021-09-22,53483.80545741505
+2021-09-23,30077.209266523543
+2021-09-24,73070.54849698953
+2021-09-25,44118.377703017635
+2021-09-26,34134.3360656615
+2021-09-27,61619.510801440054
+2021-09-28,29334.959480643633
+2021-09-29,54840.778405071345
+2021-09-30,54861.25954092192
+2021-10-01,37666.69406650353
+2021-10-02,45514.88974301199
+2021-10-03,37872.595956602185
+2021-10-04,54862.49528732663
+2021-10-05,72168.41067112274
+2021-10-06,58411.76789552352
+2021-10-07,64450.64193866483
+2021-10-08,39846.169995410615
+2021-10-09,51012.92307031886
+2021-10-10,56193.97181413436
+2021-10-11,34065.44429410843
+2021-10-12,58206.460717550566
+2021-10-13,46487.945645762295
+2021-10-14,50076.70184963691
+2021-10-15,47580.71432500986
+2021-10-16,53915.82908269834
+2021-10-17,39606.35607109019
+2021-10-18,73790.25224218029
+2021-10-19,38407.621781936425
+2021-10-20,33404.97538990958
+2021-10-21,59931.9601178157
+2021-10-22,74486.16955897454
+2021-10-23,50195.02837816861
+2021-10-24,40073.20302847418
+2021-10-25,64626.796001266266
+2021-10-26,61727.34307665966
+2021-10-27,62187.88733591297
+2021-10-28,54214.87801602549
+2021-10-29,67142.34221772531
+2021-10-30,46487.69937914996
+2021-10-31,31086.740684974324
+2021-11-01,48278.95337799651
+2021-11-02,20718.68300716247
+2021-11-03,58138.40065378947
+2021-11-04,49722.30296011415
+2021-11-05,36742.138456983004
+2021-11-06,42736.48890700623
+2021-11-07,55356.6885726762
+2021-11-08,81832.3429551895
+2021-11-09,62338.173681547836
+2021-11-10,39202.33687407937
+2021-11-11,62786.50002194336
+2021-11-12,37726.689751497914
+2021-11-13,67033.48460270898
+2021-11-14,55366.81040522425
+2021-11-15,53898.24191372635
+2021-11-16,62845.981914852084
+2021-11-17,33833.82833106041
+2021-11-18,61076.99869993116
+2021-11-19,51228.112090794835
+2021-11-20,55635.47027518508
+2021-11-21,71803.01115735975
+2021-11-22,50315.05762449138
+2021-11-23,60710.007411381375
+2021-11-24,73249.01607526309
+2021-11-25,57699.01149670034
+2021-11-26,46798.292724322295
+2021-11-27,36359.18817807891
+2021-11-28,61511.52093729363
+2021-11-29,39284.72872960448
+2021-11-30,28462.06773230841
+2021-12-01,25809.261932155227
+2021-12-02,59425.1826389642
+2021-12-03,43014.05369644615
+2021-12-04,52769.507877984564
+2021-12-05,56657.291422193426
+2021-12-06,59175.14433261302
+2021-12-07,57450.71229516849
+2021-12-08,25887.75148158159
+2021-12-09,21300.79633013303
+2021-12-10,49686.47609053778
+2021-12-11,50683.5775985572
+2021-12-12,43090.41843560319
+2021-12-13,28815.44447997063
+2021-12-14,31445.73933682877
+2021-12-15,50964.200286431944
+2021-12-16,37689.76522472434
+2021-12-17,39270.444361100475
+2021-12-18,63767.92920582164
+2021-12-19,66245.76864762916
+2021-12-20,64310.02645239804
+2021-12-21,20186.46628098661
+2021-12-22,57829.12348425346
+2021-12-23,61209.40407684893
+2021-12-24,60229.294569424455
+2021-12-25,57790.197713617585
+2021-12-26,59848.30412950744
+2021-12-27,48843.47435878844
+2021-12-28,45483.444566160666
+2021-12-29,45361.81436223178
+2021-12-30,57103.88645952773
+2021-12-31,49479.32345442135
diff --git a/aot/cases/case_2/good_examples/Report_case2_Team#1.docx b/aot/cases/case_2/good_examples/Report_case2_Team#1.docx
new file mode 100644
index 0000000..e950866
Binary files /dev/null and b/aot/cases/case_2/good_examples/Report_case2_Team#1.docx differ
diff --git a/aot/cases/case_2/good_examples/TEAM 2 - CASE 2.pdf b/aot/cases/case_2/good_examples/TEAM 2 - CASE 2.pdf
new file mode 100644
index 0000000..ad2383a
--- /dev/null
+++ b/aot/cases/case_2/good_examples/TEAM 2 - CASE 2.pdf
@@ -0,0 +1,32551 @@
+%PDF-1.4
+%
+1 0 obj
+<<
+/Type /Catalog
+/Version /1.4
+/Pages 2 0 R
+/StructTreeRoot 3 0 R
+/MarkInfo 4 0 R
+/Lang (es-ES)
+/ViewerPreferences 5 0 R
+>>
+endobj
+6 0 obj
+<<
+/Creator (Canva)
+/Producer (Canva)
+/CreationDate (D:20230523211037+00'00')
+/ModDate (D:20230523211036+00'00')
+/Keywords (DAFjkDWOkNs,BAD1BpIzfIU)
+/Author <474552415244204341D1414441>
+/Title (CASE 2 BEANIES LIMITED)
+>>
+endobj
+2 0 obj
+<<
+/Type /Pages
+/Kids [7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R
+17 0 R 18 0 R]
+/Count 12
+>>
+endobj
+3 0 obj
+<<
+/Type /StructTreeRoot
+/ParentTree 19 0 R
+/ParentTreeNextKey 100011
+/K 20 0 R
+/IDTree 21 0 R
+>>
+endobj
+4 0 obj
+<<
+/Marked true
+/Suspects false
+>>
+endobj
+5 0 obj
+<<
+/DisplayDocTitle true
+>>
+endobj
+7 0 obj
+<<
+/Type /Page
+/Resources 22 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Contents 23 0 R
+/StructParents 0
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+/Annots []
+>>
+endobj
+8 0 obj
+<<
+/Type /Page
+/Resources 24 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Annots [25 0 R 26 0 R 27 0 R 28 0 R]
+/Contents 29 0 R
+/StructParents 1
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+>>
+endobj
+9 0 obj
+<<
+/Type /Page
+/Resources 30 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Contents 31 0 R
+/StructParents 2
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+/Annots []
+>>
+endobj
+10 0 obj
+<<
+/Type /Page
+/Resources 32 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Contents 33 0 R
+/StructParents 3
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+/Annots []
+>>
+endobj
+11 0 obj
+<<
+/Type /Page
+/Resources 34 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Contents 35 0 R
+/StructParents 4
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+/Annots []
+>>
+endobj
+12 0 obj
+<<
+/Type /Page
+/Resources 36 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Contents 37 0 R
+/StructParents 100004
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+/Annots []
+>>
+endobj
+13 0 obj
+<<
+/Type /Page
+/Resources 38 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Contents 39 0 R
+/StructParents 100005
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+/Annots []
+>>
+endobj
+14 0 obj
+<<
+/Type /Page
+/Resources 40 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Contents 41 0 R
+/StructParents 100006
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+/Annots []
+>>
+endobj
+15 0 obj
+<<
+/Type /Page
+/Resources 42 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Contents 43 0 R
+/StructParents 100007
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+/Annots []
+>>
+endobj
+16 0 obj
+<<
+/Type /Page
+/Resources 44 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Contents 45 0 R
+/StructParents 100008
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+/Annots []
+>>
+endobj
+17 0 obj
+<<
+/Type /Page
+/Resources 46 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Contents 47 0 R
+/StructParents 100009
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+/Annots []
+>>
+endobj
+18 0 obj
+<<
+/Type /Page
+/Resources 48 0 R
+/MediaBox [0.0 6.63003 594.95996 848.88]
+/Contents 49 0 R
+/StructParents 100010
+/Parent 2 0 R
+/Tabs /S
+/BleedBox [0.0 6.63003 594.95996 848.88]
+/TrimBox [0.0 6.63003 594.95996 848.88]
+/CropBox [0.0 6.63003 594.95996 848.88]
+/Rotate 0
+/Annots []
+>>
+endobj
+19 0 obj
+<<
+/Limits [0 100010]
+/Nums [0 [50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R]
+ 1 [58 0 R 59 0 R 60 0 R 61 0 R 61 0 R 61 0 R 62 0 R 63 0 R 63 0 R 63 0 R
+64 0 R 65 0 R 65 0 R 66 0 R 66 0 R 66 0 R 67 0 R 67 0 R 68 0 R 69 0 R
+69 0 R 70 0 R 71 0 R 71 0 R 72 0 R 73 0 R 73 0 R 74 0 R 75 0 R 76 0 R
+77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 82 0 R 82 0 R 82 0 R 83 0 R]
+ 2 [84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R
+94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 100 0 R 101 0 R 102 0 R
+103 0 R 104 0 R 104 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 108 0 R 109 0 R
+110 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 117 0 R
+117 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 121 0 R 121 0 R 122 0 R 123 0 R
+123 0 R 124 0 R 125 0 R 125 0 R 125 0 R 126 0 R 126 0 R 127 0 R 128 0 R 128 0 R
+129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 134 0 R 134 0 R 134 0 R 135 0 R
+136 0 R 137 0 R]
+ 3 [138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R
+148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R
+158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R
+168 0 R 168 0 R 169 0 R 170 0 R 170 0 R 170 0 R 170 0 R 170 0 R 170 0 R 171 0 R
+171 0 R 171 0 R 172 0 R 172 0 R 172 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R
+177 0 R 177 0 R 177 0 R 177 0 R 178 0 R 179 0 R 180 0 R]
+ 4 [181 0 R 182 0 R 183 0 R 183 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 187 0 R
+187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R
+197 0 R 197 0 R 198 0 R 199 0 R 199 0 R 199 0 R 200 0 R 201 0 R 201 0 R 202 0 R
+202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 207 0 R 208 0 R 208 0 R 208 0 R
+209 0 R 210 0 R 211 0 R 212 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R
+218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 224 0 R 225 0 R 226 0 R
+227 0 R 228 0 R 228 0 R 229 0 R 230 0 R 230 0 R 230 0 R 230 0 R 230 0 R 231 0 R
+232 0 R]
+100000 233 0 R 100001 234 0 R 100002 235 0 R 100003 236 0 R 100004 [237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 242 0 R 242 0 R 242 0 R 242 0 R
+242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R
+252 0 R 253 0 R 254 0 R 255 0 R 255 0 R 256 0 R 257 0 R 258 0 R 258 0 R 259 0 R
+260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 264 0 R 264 0 R 264 0 R 265 0 R 265 0 R
+266 0 R 266 0 R]
+100005 [267 0 R 268 0 R 269 0 R 270 0 R 270 0 R 271 0 R 271 0 R 271 0 R 272 0 R 273 0 R
+274 0 R 275 0 R 276 0 R 277 0 R 277 0 R 277 0 R 278 0 R 278 0 R 278 0 R 278 0 R
+279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 283 0 R 284 0 R 284 0 R 285 0 R 286 0 R
+287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 295 0 R
+295 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 301 0 R]
+ 100006 [302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 307 0 R 308 0 R 309 0 R 309 0 R
+309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 313 0 R 313 0 R 313 0 R 314 0 R 315 0 R
+316 0 R 317 0 R 318 0 R 319 0 R 319 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R
+323 0 R 323 0 R 324 0 R 325 0 R 325 0 R 326 0 R 327 0 R 327 0 R 328 0 R 329 0 R
+330 0 R 331 0 R 331 0 R 332 0 R 333 0 R 333 0 R 334 0 R 335 0 R 335 0 R 336 0 R
+337 0 R 337 0 R 338 0 R 339 0 R 339 0 R 339 0 R]
+ 100007 [340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 345 0 R 346 0 R 347 0 R 348 0 R
+348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 355 0 R 356 0 R
+357 0 R 358 0 R 359 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 363 0 R 364 0 R
+364 0 R 365 0 R 366 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R
+373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R
+382 0 R 383 0 R 383 0 R 384 0 R 384 0 R 385 0 R 386 0 R]
+ 100008 [387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R
+396 0 R 396 0 R 396 0 R 397 0 R 397 0 R 397 0 R 398 0 R 399 0 R 399 0 R 399 0 R
+399 0 R 399 0 R 399 0 R 400 0 R 401 0 R 401 0 R 401 0 R 401 0 R 402 0 R 402 0 R
+402 0 R 402 0 R 403 0 R 404 0 R 404 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R
+409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R
+419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R
+429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R]
+ 100009 [437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R
+447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R
+457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R
+467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 472 0 R 473 0 R 473 0 R 474 0 R
+475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 482 0 R 483 0 R
+484 0 R 485 0 R 485 0 R 486 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R
+491 0 R 492 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R
+500 0 R 500 0 R 501 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R]
+100010 [506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R
+516 0 R]
+]
+>>
+endobj
+20 0 obj
+<<
+/K [517 0 R 518 0 R 519 0 R]
+/P 3 0 R
+/S /Document
+>>
+endobj
+21 0 obj
+<<
+/Names [(node00000287) 518 0 R (node00000291) 520 0 R (node00000292) 521 0 R (node00000293) 522 0 R (node00000294) 523 0 R
+(node00000295) 524 0 R (node00000296) 525 0 R (node00000297) 526 0 R (node00000298) 527 0 R (node00000310) 528 0 R
+(node00000311) 529 0 R (node00000316) 530 0 R (node00000317) 531 0 R (node00000318) 532 0 R (node00000319) 533 0 R
+(node00000320) 237 0 R (node00000321) 534 0 R (node00000322) 535 0 R (node00000323) 536 0 R (node00000324) 238 0 R
+(node00000325) 537 0 R (node00000326) 538 0 R (node00000327) 539 0 R (node00000328) 239 0 R (node00000329) 540 0 R
+(node00000330) 541 0 R (node00000331) 542 0 R (node00000332) 240 0 R (node00000333) 241 0 R (node00000334) 242 0 R
+(node00000335) 243 0 R (node00000336) 244 0 R (node00000337) 245 0 R (node00000338) 543 0 R (node00000339) 544 0 R
+(node00000340) 545 0 R (node00000341) 246 0 R (node00000342) 247 0 R (node00000343) 248 0 R (node00000344) 249 0 R
+(node00000345) 250 0 R (node00000346) 251 0 R (node00000347) 252 0 R (node00000348) 253 0 R (node00000349) 254 0 R
+(node00000350) 255 0 R (node00000351) 256 0 R (node00000352) 257 0 R (node00000355) 546 0 R (node00000356) 258 0 R
+(node00000357) 259 0 R (node00000358) 547 0 R (node00000359) 548 0 R (node00000360) 549 0 R (node00000361) 260 0 R
+(node00000362) 550 0 R (node00000363) 551 0 R (node00000364) 552 0 R (node00000365) 261 0 R (node00000366) 553 0 R
+(node00000367) 554 0 R (node00000368) 555 0 R (node00000369) 262 0 R (node00000370) 263 0 R (node00000371) 264 0 R
+(node00000372) 556 0 R (node00000373) 557 0 R (node00000374) 558 0 R (node00000375) 265 0 R (node00000378) 559 0 R
+(node00000379) 266 0 R (node00000381) 560 0 R (node00000382) 561 0 R (node00000383) 562 0 R (node00000384) 563 0 R
+(node00000385) 564 0 R (node00000386) 565 0 R (node00000394) 566 0 R (node00000395) 567 0 R (node00000396) 568 0 R
+(node00000397) 267 0 R (node00000407) 569 0 R (node00000408) 570 0 R (node00000409) 571 0 R (node00000410) 268 0 R
+(node00000411) 572 0 R (node00000412) 573 0 R (node00000417) 574 0 R (node00000418) 575 0 R (node00000419) 576 0 R
+(node00000420) 577 0 R (node00000421) 269 0 R (node00000422) 578 0 R (node00000423) 579 0 R (node00000424) 580 0 R
+(node00000425) 581 0 R (node00000426) 270 0 R (node00000435) 582 0 R (node00000436) 583 0 R (node00000437) 584 0 R
+(node00000438) 271 0 R (node00000439) 272 0 R (node00000440) 273 0 R (node00000441) 274 0 R (node00000442) 275 0 R
+(node00000443) 276 0 R (node00000444) 277 0 R (node00000447) 585 0 R (node00000448) 278 0 R (node00000449) 586 0 R
+(node00000450) 587 0 R (node00000451) 588 0 R (node00000452) 279 0 R (node00000453) 589 0 R (node00000454) 590 0 R
+(node00000455) 591 0 R (node00000456) 592 0 R (node00000457) 280 0 R (node00000458) 281 0 R (node00000459) 282 0 R
+(node00000460) 283 0 R (node00000461) 284 0 R (node00000462) 285 0 R (node00000465) 593 0 R (node00000466) 286 0 R
+(node00000467) 594 0 R (node00000468) 595 0 R (node00000469) 596 0 R (node00000470) 287 0 R (node00000474) 597 0 R
+(node00000475) 598 0 R (node00000476) 599 0 R (node00000477) 288 0 R (node00000478) 600 0 R (node00000479) 289 0 R
+(node00000483) 601 0 R (node00000484) 602 0 R (node00000485) 603 0 R (node00000486) 290 0 R (node00000487) 604 0 R
+(node00000488) 291 0 R (node00000493) 605 0 R (node00000494) 606 0 R (node00000495) 607 0 R (node00000496) 292 0 R
+(node00000497) 608 0 R (node00000498) 609 0 R (node00000499) 610 0 R (node00000500) 293 0 R (node00000501) 294 0 R
+(node00000502) 295 0 R (node00000503) 296 0 R (node00000504) 297 0 R (node00000505) 298 0 R (node00000506) 299 0 R
+(node00000507) 300 0 R (node00000508) 301 0 R (node00000510) 611 0 R (node00000511) 612 0 R (node00000512) 613 0 R
+(node00000513) 614 0 R (node00000514) 615 0 R (node00000515) 616 0 R (node00000537) 617 0 R (node00000538) 618 0 R
+(node00000539) 619 0 R (node00000540) 302 0 R (node00000541) 620 0 R (node00000542) 621 0 R (node00000543) 622 0 R
+(node00000544) 303 0 R (node00000545) 623 0 R (node00000546) 624 0 R (node00000547) 625 0 R (node00000548) 304 0 R
+(node00000549) 305 0 R (node00000550) 626 0 R (node00000551) 627 0 R (node00000552) 628 0 R (node00000553) 306 0 R
+(node00000554) 629 0 R (node00000555) 630 0 R (node00000556) 631 0 R (node00000557) 307 0 R (node00000558) 308 0 R
+(node00000559) 309 0 R (node00000566) 632 0 R (node00000567) 633 0 R (node00000568) 634 0 R (node00000569) 310 0 R
+(node00000570) 311 0 R (node00000571) 312 0 R (node00000572) 635 0 R (node00000573) 636 0 R (node00000574) 637 0 R
+(node00000575) 313 0 R (node00000576) 314 0 R (node00000577) 638 0 R (node00000578) 639 0 R (node00000579) 640 0 R
+(node00000580) 315 0 R (node00000581) 641 0 R (node00000582) 316 0 R (node00000583) 642 0 R (node00000584) 643 0 R
+(node00000585) 644 0 R (node00000586) 317 0 R (node00000587) 645 0 R (node00000588) 318 0 R (node00000589) 646 0 R
+(node00000590) 647 0 R (node00000591) 648 0 R (node00000592) 319 0 R (node00000593) 320 0 R (node00000594) 321 0 R
+(node00000595) 322 0 R (node00000596) 323 0 R (node00000597) 649 0 R (node00000598) 650 0 R (node00000599) 651 0 R
+(node00000600) 324 0 R (node00000605) 652 0 R (node00000606) 653 0 R (node00000607) 654 0 R (node00000608) 325 0 R
+(node00000609) 326 0 R (node00000610) 327 0 R (node00000611) 328 0 R (node00000612) 329 0 R (node00000613) 330 0 R
+(node00000614) 331 0 R (node00000615) 332 0 R (node00000616) 333 0 R (node00000617) 655 0 R (node00000618) 656 0 R
+(node00000619) 657 0 R (node00000620) 334 0 R (node00000621) 658 0 R (node00000622) 659 0 R (node00000623) 660 0 R
+(node00000624) 335 0 R (node00000625) 336 0 R (node00000626) 337 0 R (node00000627) 338 0 R (node00000628) 339 0 R
+(node00000630) 661 0 R (node00000631) 662 0 R (node00000632) 663 0 R (node00000633) 664 0 R (node00000634) 665 0 R
+(node00000635) 666 0 R (node00000639) 667 0 R (node00000640) 668 0 R (node00000645) 669 0 R (node00000646) 670 0 R
+(node00000647) 671 0 R (node00000648) 672 0 R (node00000649) 340 0 R (node00000650) 673 0 R (node00000651) 674 0 R
+(node00000652) 675 0 R (node00000653) 676 0 R (node00000654) 341 0 R (node00000655) 677 0 R (node00000656) 678 0 R
+(node00000661) 679 0 R (node00000662) 680 0 R (node00000663) 681 0 R (node00000664) 342 0 R (node00000687) 682 0 R
+(node00000688) 683 0 R (node00000689) 684 0 R (node00000690) 343 0 R (node00000691) 685 0 R (node00000692) 686 0 R
+(node00000693) 687 0 R (node00000694) 344 0 R (node00000695) 688 0 R (node00000696) 689 0 R (node00000697) 690 0 R
+(node00000698) 345 0 R (node00000699) 691 0 R (node00000700) 692 0 R (node00000701) 693 0 R (node00000702) 346 0 R
+(node00000703) 694 0 R (node00000704) 347 0 R (node00000705) 695 0 R (node00000706) 696 0 R (node00000707) 697 0 R
+(node00000708) 348 0 R (node00000709) 698 0 R (node00000710) 699 0 R (node00000711) 700 0 R (node00000712) 349 0 R
+(node00000713) 701 0 R (node00000714) 350 0 R (node00000715) 702 0 R (node00000716) 351 0 R (node00000717) 703 0 R
+(node00000718) 704 0 R (node00000719) 705 0 R (node00000720) 352 0 R (node00000721) 706 0 R (node00000722) 707 0 R
+(node00000723) 708 0 R (node00000724) 353 0 R (node00000725) 709 0 R (node00000726) 354 0 R (node00000727) 710 0 R
+(node00000728) 711 0 R (node00000729) 712 0 R (node00000730) 355 0 R (node00000731) 713 0 R (node00000732) 356 0 R
+(node00000733) 714 0 R (node00000734) 715 0 R (node00000735) 716 0 R (node00000736) 357 0 R (node00000737) 717 0 R
+(node00000738) 358 0 R (node00000739) 718 0 R (node00000740) 719 0 R (node00000741) 720 0 R (node00000742) 359 0 R
+(node00000743) 721 0 R (node00000744) 360 0 R (node00000745) 722 0 R (node00000746) 723 0 R (node00000747) 724 0 R
+(node00000748) 361 0 R (node00000749) 362 0 R (node00000750) 363 0 R (node00000751) 364 0 R (node00000752) 365 0 R
+(node00000753) 366 0 R (node00000754) 367 0 R (node00000759) 725 0 R (node00000760) 726 0 R (node00000761) 727 0 R
+(node00000762) 728 0 R (node00000763) 729 0 R (node00000764) 368 0 R (node00000765) 730 0 R (node00000766) 731 0 R
+(node00000767) 732 0 R (node00000768) 369 0 R (node00000769) 370 0 R (node00000770) 733 0 R (node00000771) 734 0 R
+(node00000772) 735 0 R (node00000773) 371 0 R (node00000786) 736 0 R (node00000787) 737 0 R (node00000788) 738 0 R
+(node00000789) 372 0 R (node00000790) 373 0 R (node00000791) 739 0 R (node00000792) 740 0 R (node00000793) 741 0 R
+(node00000794) 374 0 R (node00000795) 375 0 R (node00000796) 742 0 R (node00000797) 743 0 R (node00000798) 744 0 R
+(node00000799) 376 0 R (node00000800) 377 0 R (node00000801) 745 0 R (node00000802) 746 0 R (node00000803) 747 0 R
+(node00000804) 378 0 R (node00000805) 379 0 R (node00000806) 748 0 R (node00000807) 749 0 R (node00000808) 750 0 R
+(node00000809) 380 0 R (node00000810) 381 0 R (node00000816) 751 0 R (node00000817) 752 0 R (node00000827) 753 0 R
+(node00000828) 754 0 R (node00000829) 755 0 R (node00000830) 382 0 R (node00000831) 756 0 R (node00000832) 757 0 R
+(node00000833) 758 0 R (node00000834) 383 0 R (node00000835) 759 0 R (node00000836) 760 0 R (node00000837) 761 0 R
+(node00000838) 384 0 R (node00000839) 762 0 R (node00000840) 763 0 R (node00000841) 764 0 R (node00000842) 385 0 R
+(node00000843) 765 0 R (node00000844) 766 0 R (node00000845) 767 0 R (node00000846) 386 0 R (node00000848) 768 0 R
+(node00000849) 769 0 R (node00000850) 770 0 R (node00000851) 771 0 R (node00000852) 772 0 R (node00000853) 773 0 R
+(node00000875) 774 0 R (node00000876) 775 0 R (node00000877) 776 0 R (node00000878) 777 0 R (node00000879) 778 0 R
+(node00000880) 387 0 R (node00000881) 779 0 R (node00000882) 780 0 R (node00000883) 781 0 R (node00000884) 388 0 R
+(node00000885) 782 0 R (node00000886) 783 0 R (node00000887) 784 0 R (node00000888) 389 0 R (node00000889) 785 0 R
+(node00000890) 786 0 R (node00000891) 787 0 R (node00000892) 390 0 R (node00000893) 391 0 R (node00000894) 788 0 R
+(node00000895) 789 0 R (node00000896) 790 0 R (node00000897) 791 0 R (node00000898) 392 0 R (node00000899) 792 0 R
+(node00000900) 793 0 R (node00000901) 794 0 R (node00000902) 795 0 R (node00000903) 393 0 R (node00000904) 796 0 R
+(node00000905) 797 0 R (node00000906) 798 0 R (node00000907) 394 0 R (node00000908) 799 0 R (node00000909) 800 0 R
+(node00000910) 801 0 R (node00000911) 395 0 R (node00000912) 802 0 R (node00000913) 803 0 R (node00000914) 804 0 R
+(node00000915) 396 0 R (node00000916) 805 0 R (node00000917) 397 0 R (node00000918) 398 0 R (node00000927) 806 0 R
+(node00000928) 807 0 R (node00000929) 808 0 R (node00000930) 809 0 R (node00000931) 399 0 R (node00000932) 400 0 R
+(node00000933) 810 0 R (node00000934) 401 0 R (node00000935) 811 0 R (node00000936) 402 0 R (node00000937) 403 0 R
+(node00000938) 812 0 R (node00000939) 813 0 R (node00000940) 814 0 R (node00000941) 404 0 R (node00000942) 405 0 R
+(node00000943) 815 0 R (node00000944) 816 0 R (node00000945) 817 0 R (node00000946) 406 0 R (node00000947) 818 0 R
+(node00000948) 819 0 R (node00000949) 820 0 R (node00000950) 407 0 R (node00000951) 821 0 R (node00000952) 822 0 R
+(node00000953) 823 0 R (node00000954) 824 0 R (node00000955) 825 0 R (node00000956) 826 0 R (node00000957) 827 0 R
+(node00000958) 828 0 R (node00000959) 829 0 R (node00000960) 830 0 R (node00000961) 408 0 R (node00000962) 831 0 R
+(node00000963) 832 0 R (node00000964) 833 0 R (node00000965) 834 0 R (node00000966) 835 0 R (node00000967) 836 0 R
+(node00000968) 409 0 R (node00000969) 837 0 R (node00000970) 838 0 R (node00000971) 839 0 R (node00000972) 840 0 R
+(node00000973) 841 0 R (node00000974) 842 0 R (node00000975) 410 0 R (node00000976) 843 0 R (node00000977) 844 0 R
+(node00000978) 845 0 R (node00000979) 846 0 R (node00000980) 847 0 R (node00000981) 848 0 R (node00000982) 411 0 R
+(node00000983) 849 0 R (node00000984) 850 0 R (node00000985) 851 0 R (node00000986) 852 0 R (node00000987) 853 0 R
+(node00000988) 854 0 R (node00000989) 412 0 R (node00000990) 855 0 R (node00000991) 856 0 R (node00000992) 857 0 R
+(node00000993) 858 0 R (node00000994) 859 0 R (node00000995) 860 0 R (node00000996) 413 0 R (node00000997) 861 0 R
+(node00000998) 862 0 R (node00000999) 863 0 R (node00001000) 864 0 R (node00001001) 865 0 R (node00001002) 866 0 R
+(node00001003) 414 0 R (node00001004) 867 0 R (node00001005) 868 0 R (node00001006) 869 0 R (node00001007) 870 0 R
+(node00001008) 871 0 R (node00001009) 872 0 R (node00001010) 415 0 R (node00001011) 873 0 R (node00001012) 874 0 R
+(node00001013) 875 0 R (node00001014) 876 0 R (node00001015) 877 0 R (node00001016) 878 0 R (node00001017) 416 0 R
+(node00001018) 879 0 R (node00001019) 880 0 R (node00001020) 881 0 R (node00001021) 882 0 R (node00001022) 883 0 R
+(node00001023) 884 0 R (node00001024) 885 0 R (node00001025) 417 0 R (node00001026) 886 0 R (node00001027) 887 0 R
+(node00001028) 888 0 R (node00001029) 889 0 R (node00001030) 890 0 R (node00001031) 891 0 R (node00001032) 418 0 R
+(node00001033) 892 0 R (node00001034) 893 0 R (node00001035) 894 0 R (node00001036) 895 0 R (node00001037) 896 0 R
+(node00001038) 897 0 R (node00001039) 419 0 R (node00001040) 898 0 R (node00001041) 899 0 R (node00001042) 900 0 R
+(node00001043) 901 0 R (node00001044) 902 0 R (node00001045) 903 0 R (node00001046) 420 0 R (node00001047) 904 0 R
+(node00001048) 905 0 R (node00001049) 906 0 R (node00001050) 907 0 R (node00001051) 908 0 R (node00001052) 909 0 R
+(node00001053) 421 0 R (node00001054) 910 0 R (node00001055) 911 0 R (node00001056) 912 0 R (node00001057) 913 0 R
+(node00001058) 914 0 R (node00001059) 915 0 R (node00001060) 422 0 R (node00001061) 916 0 R (node00001062) 917 0 R
+(node00001063) 918 0 R (node00001064) 919 0 R (node00001065) 920 0 R (node00001066) 921 0 R (node00001067) 423 0 R
+(node00001068) 922 0 R (node00001069) 923 0 R (node00001070) 924 0 R (node00001071) 925 0 R (node00001072) 926 0 R
+(node00001073) 927 0 R (node00001074) 424 0 R (node00001075) 928 0 R (node00001076) 929 0 R (node00001077) 930 0 R
+(node00001078) 931 0 R (node00001079) 932 0 R (node00001080) 933 0 R (node00001081) 425 0 R (node00001082) 934 0 R
+(node00001083) 935 0 R (node00001084) 936 0 R (node00001085) 937 0 R (node00001086) 938 0 R (node00001087) 939 0 R
+(node00001088) 940 0 R (node00001089) 426 0 R (node00001090) 941 0 R (node00001091) 942 0 R (node00001092) 943 0 R
+(node00001093) 944 0 R (node00001094) 945 0 R (node00001095) 946 0 R (node00001096) 427 0 R (node00001097) 947 0 R
+(node00001098) 948 0 R (node00001099) 949 0 R (node00001100) 950 0 R (node00001101) 951 0 R (node00001102) 952 0 R
+(node00001103) 428 0 R (node00001104) 953 0 R (node00001105) 954 0 R (node00001106) 955 0 R (node00001107) 956 0 R
+(node00001108) 957 0 R (node00001109) 958 0 R (node00001110) 429 0 R (node00001111) 959 0 R (node00001112) 960 0 R
+(node00001113) 961 0 R (node00001114) 962 0 R (node00001115) 963 0 R (node00001116) 964 0 R (node00001117) 430 0 R
+(node00001118) 965 0 R (node00001119) 966 0 R (node00001120) 967 0 R (node00001121) 968 0 R (node00001122) 969 0 R
+(node00001123) 970 0 R (node00001124) 431 0 R (node00001125) 971 0 R (node00001126) 972 0 R (node00001127) 973 0 R
+(node00001128) 974 0 R (node00001129) 975 0 R (node00001130) 976 0 R (node00001131) 432 0 R (node00001132) 977 0 R
+(node00001133) 978 0 R (node00001134) 979 0 R (node00001135) 980 0 R (node00001136) 981 0 R (node00001137) 982 0 R
+(node00001138) 433 0 R (node00001139) 983 0 R (node00001140) 984 0 R (node00001141) 985 0 R (node00001142) 986 0 R
+(node00001143) 987 0 R (node00001144) 988 0 R (node00001145) 434 0 R (node00001146) 989 0 R (node00001147) 990 0 R
+(node00001148) 991 0 R (node00001149) 435 0 R (node00001150) 992 0 R (node00001151) 993 0 R (node00001152) 994 0 R
+(node00001153) 436 0 R (node00007938) 517 0 R (node00007939) 50 0 R (node00007940) 995 0 R (node00007942) 996 0 R
+(node00007943) 997 0 R (node00007944) 998 0 R (node00007945) 999 0 R (node00007946) 1000 0 R (node00007947) 1001 0 R
+(node00007948) 1002 0 R (node00007949) 1003 0 R (node00007958) 1004 0 R (node00007959) 1005 0 R (node00007960) 1006 0 R
+(node00007976) 1007 0 R (node00007977) 1008 0 R (node00007978) 1009 0 R (node00007979) 51 0 R (node00007980) 1010 0 R
+(node00007981) 1011 0 R (node00007982) 1012 0 R (node00007983) 52 0 R (node00007984) 1013 0 R (node00007985) 1014 0 R
+(node00007986) 1015 0 R (node00007987) 53 0 R (node00007988) 1016 0 R (node00007989) 1017 0 R (node00007990) 1018 0 R
+(node00007991) 54 0 R (node00007992) 1019 0 R (node00007993) 55 0 R (node00007994) 1020 0 R (node00007995) 56 0 R
+(node00007996) 1021 0 R (node00007997) 1022 0 R (node00007998) 1023 0 R (node00007999) 57 0 R (node00008001) 1024 0 R
+(node00008002) 1025 0 R (node00008003) 1026 0 R (node00008004) 1027 0 R (node00008005) 1028 0 R (node00008006) 1029 0 R
+(node00008018) 1030 0 R (node00008019) 1031 0 R (node00008024) 1032 0 R (node00008025) 1033 0 R (node00008026) 1034 0 R
+(node00008027) 58 0 R (node00008028) 1035 0 R (node00008029) 1036 0 R (node00008030) 1037 0 R (node00008031) 59 0 R
+(node00008036) 1038 0 R (node00008037) 1039 0 R (node00008038) 1040 0 R (node00008039) 60 0 R (node00008040) 1041 0 R
+(node00008043) 233 0 R (node00008044) 1042 0 R (node00008045) 1043 0 R (node00008046) 1044 0 R (node00008047) 61 0 R
+(node00008056) 1045 0 R (node00008059) 234 0 R (node00008060) 1046 0 R (node00008061) 1047 0 R (node00008062) 1048 0 R
+(node00008063) 62 0 R (node00008064) 1049 0 R (node00008065) 1050 0 R (node00008066) 1051 0 R (node00008069) 235 0 R
+(node00008070) 1052 0 R (node00008071) 1053 0 R (node00008072) 1054 0 R (node00008073) 63 0 R (node00008074) 1055 0 R
+(node00008075) 1056 0 R (node00008076) 1057 0 R (node00008079) 236 0 R (node00008080) 1058 0 R (node00008081) 1059 0 R
+(node00008082) 1060 0 R (node00008083) 64 0 R (node00008084) 1061 0 R (node00008085) 1062 0 R (node00008086) 1063 0 R
+(node00008087) 65 0 R (node00008088) 1064 0 R (node00008089) 1065 0 R (node00008090) 1066 0 R (node00008091) 66 0 R
+(node00008094) 1067 0 R (node00008095) 67 0 R (node00008096) 68 0 R (node00008097) 69 0 R (node00008098) 70 0 R
+(node00008099) 71 0 R (node00008100) 72 0 R (node00008101) 73 0 R (node00008102) 74 0 R (node00008103) 75 0 R
+(node00008106) 1068 0 R (node00008107) 76 0 R (node00008108) 77 0 R (node00008109) 78 0 R (node00008110) 79 0 R
+(node00008111) 80 0 R (node00008112) 81 0 R (node00008113) 82 0 R (node00008114) 1069 0 R (node00008115) 1070 0 R
+(node00008120) 1071 0 R (node00008121) 1072 0 R (node00008122) 1073 0 R (node00008123) 83 0 R (node00008125) 1074 0 R
+(node00008126) 1075 0 R (node00008127) 1076 0 R (node00008128) 1077 0 R (node00008129) 1078 0 R (node00008130) 1079 0 R
+(node00008152) 1080 0 R (node00008153) 1081 0 R (node00008154) 1082 0 R (node00008155) 84 0 R (node00008156) 1083 0 R
+(node00008157) 1084 0 R (node00008162) 1085 0 R (node00008163) 1086 0 R (node00008164) 1087 0 R (node00008165) 1088 0 R
+(node00008166) 85 0 R (node00008167) 1089 0 R (node00008168) 1090 0 R (node00008169) 1091 0 R (node00008170) 86 0 R
+(node00008171) 1092 0 R (node00008172) 1093 0 R (node00008173) 1094 0 R (node00008174) 1095 0 R (node00008175) 1096 0 R
+(node00008176) 1097 0 R (node00008177) 1098 0 R (node00008178) 1099 0 R (node00008179) 1100 0 R (node00008180) 1101 0 R
+(node00008181) 87 0 R (node00008182) 1102 0 R (node00008183) 1103 0 R (node00008184) 1104 0 R (node00008185) 1105 0 R
+(node00008186) 1106 0 R (node00008187) 1107 0 R (node00008188) 1108 0 R (node00008189) 88 0 R (node00008190) 1109 0 R
+(node00008191) 1110 0 R (node00008192) 1111 0 R (node00008193) 1112 0 R (node00008194) 1113 0 R (node00008195) 1114 0 R
+(node00008196) 89 0 R (node00008197) 1115 0 R (node00008198) 1116 0 R (node00008199) 1117 0 R (node00008200) 1118 0 R
+(node00008201) 1119 0 R (node00008202) 1120 0 R (node00008203) 1121 0 R (node00008204) 90 0 R (node00008205) 1122 0 R
+(node00008206) 1123 0 R (node00008207) 1124 0 R (node00008208) 1125 0 R (node00008209) 1126 0 R (node00008210) 1127 0 R
+(node00008211) 91 0 R (node00008212) 1128 0 R (node00008213) 1129 0 R (node00008214) 1130 0 R (node00008215) 1131 0 R
+(node00008216) 1132 0 R (node00008217) 1133 0 R (node00008218) 1134 0 R (node00008219) 92 0 R (node00008220) 1135 0 R
+(node00008221) 1136 0 R (node00008222) 1137 0 R (node00008223) 1138 0 R (node00008224) 1139 0 R (node00008225) 1140 0 R
+(node00008226) 93 0 R (node00008227) 1141 0 R (node00008228) 1142 0 R (node00008229) 1143 0 R (node00008230) 1144 0 R
+(node00008231) 1145 0 R (node00008232) 1146 0 R (node00008233) 1147 0 R (node00008234) 94 0 R (node00008235) 1148 0 R
+(node00008236) 1149 0 R (node00008237) 1150 0 R (node00008238) 1151 0 R (node00008239) 1152 0 R (node00008240) 1153 0 R
+(node00008241) 95 0 R (node00008249) 1154 0 R (node00008250) 1155 0 R (node00008251) 1156 0 R (node00008252) 98 0 R
+(node00008253) 99 0 R (node00008254) 100 0 R (node00008255) 101 0 R (node00008256) 102 0 R (node00008257) 103 0 R
+(node00008258) 104 0 R (node00008259) 1157 0 R (node00008261) 96 0 R (node00008262) 1158 0 R (node00008264) 97 0 R
+(node00008265) 1159 0 R (node00008266) 1160 0 R (node00008267) 1161 0 R (node00008268) 105 0 R (node00008269) 1162 0 R
+(node00008270) 1163 0 R (node00008271) 1164 0 R (node00008272) 106 0 R (node00008273) 107 0 R (node00008274) 108 0 R
+(node00008277) 1165 0 R (node00008278) 1166 0 R (node00008279) 1167 0 R (node00008280) 109 0 R (node00008281) 1168 0 R
+(node00008282) 1169 0 R (node00008283) 1170 0 R (node00008284) 110 0 R (node00008285) 1171 0 R (node00008286) 111 0 R
+(node00008287) 1172 0 R (node00008288) 1173 0 R (node00008293) 1174 0 R (node00008294) 1175 0 R (node00008295) 1176 0 R
+(node00008296) 1177 0 R (node00008297) 112 0 R (node00008298) 1178 0 R (node00008299) 113 0 R (node00008300) 1179 0 R
+(node00008301) 114 0 R (node00008302) 1180 0 R (node00008303) 115 0 R (node00008304) 1181 0 R (node00008305) 116 0 R
+(node00008306) 1182 0 R (node00008307) 1183 0 R (node00008308) 1184 0 R (node00008309) 117 0 R (node00008310) 118 0 R
+(node00008311) 1185 0 R (node00008312) 119 0 R (node00008313) 120 0 R (node00008314) 121 0 R (node00008315) 1186 0 R
+(node00008316) 1187 0 R (node00008317) 1188 0 R (node00008318) 122 0 R (node00008319) 1189 0 R (node00008320) 1190 0 R
+(node00008321) 1191 0 R (node00008322) 123 0 R (node00008323) 124 0 R (node00008324) 125 0 R (node00008325) 126 0 R
+(node00008326) 127 0 R (node00008327) 1192 0 R (node00008328) 128 0 R (node00008329) 129 0 R (node00008330) 130 0 R
+(node00008331) 131 0 R (node00008332) 132 0 R (node00008333) 133 0 R (node00008334) 134 0 R (node00008335) 1193 0 R
+(node00008336) 1194 0 R (node00008337) 1195 0 R (node00008338) 135 0 R (node00008339) 1196 0 R (node00008340) 1197 0 R
+(node00008341) 1198 0 R (node00008342) 136 0 R (node00008343) 1199 0 R (node00008344) 1200 0 R (node00008349) 1201 0 R
+(node00008350) 1202 0 R (node00008351) 1203 0 R (node00008352) 137 0 R (node00008354) 1204 0 R (node00008355) 1205 0 R
+(node00008356) 1206 0 R (node00008357) 1207 0 R (node00008358) 1208 0 R (node00008359) 1209 0 R (node00008372) 1210 0 R
+(node00008373) 1211 0 R (node00008378) 1212 0 R (node00008379) 1213 0 R (node00008380) 1214 0 R (node00008381) 1215 0 R
+(node00008382) 138 0 R (node00008383) 1216 0 R (node00008384) 1217 0 R (node00008385) 1218 0 R (node00008386) 1219 0 R
+(node00008387) 139 0 R (node00008388) 1220 0 R (node00008389) 1221 0 R (node00008390) 1222 0 R (node00008391) 140 0 R
+(node00008415) 1223 0 R (node00008416) 1224 0 R (node00008417) 1225 0 R (node00008418) 1226 0 R (node00008419) 1227 0 R
+(node00008420) 1228 0 R (node00008421) 1229 0 R (node00008422) 1230 0 R (node00008423) 1231 0 R (node00008424) 1232 0 R
+(node00008425) 141 0 R (node00008426) 1233 0 R (node00008427) 1234 0 R (node00008428) 1235 0 R (node00008429) 1236 0 R
+(node00008430) 1237 0 R (node00008431) 1238 0 R (node00008432) 142 0 R (node00008433) 1239 0 R (node00008434) 1240 0 R
+(node00008435) 1241 0 R (node00008436) 1242 0 R (node00008437) 1243 0 R (node00008438) 1244 0 R (node00008439) 143 0 R
+(node00008440) 1245 0 R (node00008441) 1246 0 R (node00008442) 1247 0 R (node00008443) 1248 0 R (node00008444) 1249 0 R
+(node00008445) 1250 0 R (node00008446) 144 0 R (node00008447) 1251 0 R (node00008448) 1252 0 R (node00008449) 1253 0 R
+(node00008450) 1254 0 R (node00008451) 1255 0 R (node00008452) 1256 0 R (node00008453) 1257 0 R (node00008454) 145 0 R
+(node00008455) 1258 0 R (node00008456) 1259 0 R (node00008457) 1260 0 R (node00008458) 1261 0 R (node00008459) 1262 0 R
+(node00008460) 1263 0 R (node00008461) 146 0 R (node00008462) 1264 0 R (node00008463) 1265 0 R (node00008464) 1266 0 R
+(node00008465) 1267 0 R (node00008466) 1268 0 R (node00008467) 1269 0 R (node00008468) 147 0 R (node00008469) 1270 0 R
+(node00008470) 1271 0 R (node00008471) 1272 0 R (node00008472) 1273 0 R (node00008473) 1274 0 R (node00008474) 1275 0 R
+(node00008475) 148 0 R (node00008476) 1276 0 R (node00008477) 1277 0 R (node00008478) 1278 0 R (node00008479) 1279 0 R
+(node00008480) 1280 0 R (node00008481) 1281 0 R (node00008482) 1282 0 R (node00008483) 149 0 R (node00008484) 1283 0 R
+(node00008485) 1284 0 R (node00008486) 1285 0 R (node00008487) 1286 0 R (node00008488) 1287 0 R (node00008489) 1288 0 R
+(node00008490) 150 0 R (node00008491) 1289 0 R (node00008492) 1290 0 R (node00008493) 1291 0 R (node00008494) 1292 0 R
+(node00008495) 1293 0 R (node00008496) 1294 0 R (node00008497) 151 0 R (node00008498) 1295 0 R (node00008499) 1296 0 R
+(node00008500) 1297 0 R (node00008501) 1298 0 R (node00008502) 1299 0 R (node00008503) 1300 0 R (node00008504) 152 0 R
+(node00008505) 1301 0 R (node00008506) 1302 0 R (node00008507) 1303 0 R (node00008508) 1304 0 R (node00008509) 1305 0 R
+(node00008510) 1306 0 R (node00008511) 1307 0 R (node00008512) 153 0 R (node00008513) 1308 0 R (node00008514) 1309 0 R
+(node00008515) 1310 0 R (node00008516) 1311 0 R (node00008517) 1312 0 R (node00008518) 1313 0 R (node00008519) 154 0 R
+(node00008520) 1314 0 R (node00008521) 1315 0 R (node00008522) 1316 0 R (node00008523) 1317 0 R (node00008524) 1318 0 R
+(node00008525) 1319 0 R (node00008526) 155 0 R (node00008527) 1320 0 R (node00008528) 1321 0 R (node00008529) 1322 0 R
+(node00008530) 1323 0 R (node00008531) 1324 0 R (node00008532) 1325 0 R (node00008533) 156 0 R (node00008534) 1326 0 R
+(node00008535) 1327 0 R (node00008536) 1328 0 R (node00008537) 1329 0 R (node00008538) 1330 0 R (node00008539) 1331 0 R
+(node00008540) 1332 0 R (node00008541) 157 0 R (node00008542) 1333 0 R (node00008543) 1334 0 R (node00008544) 1335 0 R
+(node00008545) 1336 0 R (node00008546) 1337 0 R (node00008547) 1338 0 R (node00008548) 158 0 R (node00008549) 1339 0 R
+(node00008550) 1340 0 R (node00008551) 1341 0 R (node00008552) 1342 0 R (node00008553) 1343 0 R (node00008554) 1344 0 R
+(node00008555) 159 0 R (node00008556) 1345 0 R (node00008557) 1346 0 R (node00008558) 1347 0 R (node00008559) 1348 0 R
+(node00008560) 1349 0 R (node00008561) 1350 0 R (node00008562) 160 0 R (node00008563) 1351 0 R (node00008564) 1352 0 R
+(node00008565) 1353 0 R (node00008566) 161 0 R (node00008567) 1354 0 R (node00008568) 1355 0 R (node00008569) 1356 0 R
+(node00008570) 162 0 R (node00008571) 1357 0 R (node00008572) 1358 0 R (node00008573) 1359 0 R (node00008574) 1360 0 R
+(node00008575) 163 0 R (node00008576) 1361 0 R (node00008577) 1362 0 R (node00008578) 1363 0 R (node00008579) 1364 0 R
+(node00008580) 164 0 R (node00008581) 1365 0 R (node00008582) 1366 0 R (node00008583) 1367 0 R (node00008584) 1368 0 R
+(node00008585) 165 0 R (node00008586) 1369 0 R (node00008587) 1370 0 R (node00008588) 1371 0 R (node00008591) 1372 0 R
+(node00008592) 166 0 R (node00008593) 167 0 R (node00008594) 168 0 R (node00008595) 169 0 R (node00008596) 170 0 R
+(node00008597) 171 0 R (node00008598) 172 0 R (node00008603) 1373 0 R (node00008604) 1374 0 R (node00008605) 1375 0 R
+(node00008608) 1376 0 R (node00008609) 173 0 R (node00008610) 174 0 R (node00008611) 175 0 R (node00008612) 176 0 R
+(node00008613) 177 0 R (node00008616) 1377 0 R (node00008617) 1378 0 R (node00008618) 1379 0 R (node00008619) 178 0 R
+(node00008620) 1380 0 R (node00008621) 1381 0 R (node00008622) 1382 0 R (node00008623) 179 0 R (node00008628) 1383 0 R
+(node00008629) 1384 0 R (node00008630) 1385 0 R (node00008631) 180 0 R (node00008633) 1386 0 R (node00008634) 1387 0 R
+(node00008635) 1388 0 R (node00008636) 1389 0 R (node00008637) 1390 0 R (node00008638) 1391 0 R (node00008651) 1392 0 R
+(node00008652) 1393 0 R (node00008657) 1394 0 R (node00008658) 1395 0 R (node00008659) 1396 0 R (node00008660) 1397 0 R
+(node00008661) 181 0 R (node00008662) 1398 0 R (node00008663) 1399 0 R (node00008664) 1400 0 R (node00008665) 182 0 R
+(node00008666) 1401 0 R (node00008667) 1402 0 R (node00008668) 1403 0 R (node00008669) 183 0 R (node00008670) 184 0 R
+(node00008671) 185 0 R (node00008672) 186 0 R (node00008673) 187 0 R (node00008674) 188 0 R (node00008677) 1404 0 R
+(node00008678) 189 0 R (node00008679) 190 0 R (node00008680) 191 0 R (node00008681) 192 0 R (node00008682) 193 0 R
+(node00008683) 194 0 R (node00008684) 195 0 R (node00008685) 196 0 R (node00008686) 197 0 R (node00008687) 198 0 R
+(node00008688) 199 0 R (node00008691) 1405 0 R (node00008692) 200 0 R (node00008693) 201 0 R (node00008694) 202 0 R
+(node00008695) 203 0 R (node00008696) 204 0 R (node00008697) 205 0 R (node00008698) 206 0 R (node00008699) 207 0 R
+(node00008700) 208 0 R (node00008703) 1406 0 R (node00008704) 209 0 R (node00008705) 210 0 R (node00008706) 211 0 R
+(node00008707) 212 0 R (node00008708) 213 0 R (node00008709) 214 0 R (node00008710) 215 0 R (node00008714) 1407 0 R
+(node00008715) 1408 0 R (node00008716) 1409 0 R (node00008717) 216 0 R (node00008718) 1410 0 R (node00008719) 217 0 R
+(node00008723) 1411 0 R (node00008724) 1412 0 R (node00008725) 1413 0 R (node00008726) 218 0 R (node00008727) 1414 0 R
+(node00008728) 219 0 R (node00008733) 1415 0 R (node00008734) 1416 0 R (node00008739) 1417 0 R (node00008740) 1418 0 R
+(node00008741) 1419 0 R (node00008742) 220 0 R (node00008743) 1420 0 R (node00008744) 1421 0 R (node00008745) 1422 0 R
+(node00008746) 221 0 R (node00008747) 1423 0 R (node00008748) 1424 0 R (node00008749) 1425 0 R (node00008750) 222 0 R
+(node00008751) 223 0 R (node00008752) 224 0 R (node00008753) 225 0 R (node00008754) 226 0 R (node00008755) 227 0 R
+(node00008756) 228 0 R (node00008757) 229 0 R (node00008758) 230 0 R (node00008759) 231 0 R (node00008760) 1426 0 R
+(node00008761) 1427 0 R (node00008762) 1428 0 R (node00008763) 232 0 R (node00028967) 519 0 R (node00028968) 443 0 R
+(node00028969) 1429 0 R (node00028970) 1430 0 R (node00028971) 1431 0 R (node00028972) 1432 0 R (node00028973) 1433 0 R
+(node00028974) 1434 0 R (node00028975) 1435 0 R (node00028976) 1436 0 R (node00028977) 1437 0 R (node00028978) 1438 0 R
+(node00028991) 1439 0 R (node00028992) 1440 0 R (node00028993) 1441 0 R (node00028994) 1442 0 R (node00028995) 437 0 R
+(node00028996) 1443 0 R (node00028997) 1444 0 R (node00028998) 1445 0 R (node00028999) 1446 0 R (node00029000) 438 0 R
+(node00029001) 1447 0 R (node00029002) 1448 0 R (node00029003) 1449 0 R (node00029004) 1450 0 R (node00029005) 439 0 R
+(node00029006) 1451 0 R (node00029007) 1452 0 R (node00029008) 1453 0 R (node00029009) 440 0 R (node00029014) 1454 0 R
+(node00029015) 1455 0 R (node00029016) 1456 0 R (node00029017) 1457 0 R (node00029018) 441 0 R (node00029019) 1458 0 R
+(node00029020) 1459 0 R (node00029021) 1460 0 R (node00029022) 1461 0 R (node00029023) 442 0 R (node00029029) 1462 0 R
+(node00029030) 1463 0 R (node00029031) 1464 0 R (node00029032) 1465 0 R (node00029033) 1466 0 R (node00029034) 1467 0 R
+(node00029035) 1468 0 R (node00029036) 444 0 R (node00029037) 1469 0 R (node00029038) 1470 0 R (node00029039) 1471 0 R
+(node00029040) 445 0 R (node00029041) 1472 0 R (node00029042) 446 0 R (node00029043) 447 0 R (node00029044) 1473 0 R
+(node00029045) 1474 0 R (node00029046) 1475 0 R (node00029047) 1476 0 R (node00029048) 448 0 R (node00029049) 1477 0 R
+(node00029050) 1478 0 R (node00029051) 1479 0 R (node00029052) 1480 0 R (node00029053) 1481 0 R (node00029054) 1482 0 R
+(node00029055) 1483 0 R (node00029056) 1484 0 R (node00029057) 1485 0 R (node00029058) 1486 0 R (node00029059) 449 0 R
+(node00029060) 1487 0 R (node00029061) 1488 0 R (node00029062) 1489 0 R (node00029063) 1490 0 R (node00029064) 1491 0 R
+(node00029065) 1492 0 R (node00029066) 450 0 R (node00029067) 1493 0 R (node00029068) 1494 0 R (node00029069) 1495 0 R
+(node00029070) 1496 0 R (node00029071) 1497 0 R (node00029072) 1498 0 R (node00029073) 451 0 R (node00029074) 1499 0 R
+(node00029075) 1500 0 R (node00029076) 1501 0 R (node00029077) 1502 0 R (node00029078) 1503 0 R (node00029079) 1504 0 R
+(node00029080) 452 0 R (node00029081) 1505 0 R (node00029082) 1506 0 R (node00029083) 1507 0 R (node00029084) 1508 0 R
+(node00029085) 1509 0 R (node00029086) 1510 0 R (node00029087) 453 0 R (node00029088) 1511 0 R (node00029089) 1512 0 R
+(node00029090) 1513 0 R (node00029091) 1514 0 R (node00029092) 1515 0 R (node00029093) 1516 0 R (node00029094) 454 0 R
+(node00029095) 1517 0 R (node00029096) 1518 0 R (node00029097) 1519 0 R (node00029098) 1520 0 R (node00029099) 1521 0 R
+(node00029100) 1522 0 R (node00029101) 455 0 R (node00029102) 1523 0 R (node00029103) 1524 0 R (node00029104) 1525 0 R
+(node00029105) 1526 0 R (node00029106) 1527 0 R (node00029107) 1528 0 R (node00029108) 1529 0 R (node00029109) 456 0 R
+(node00029110) 1530 0 R (node00029111) 1531 0 R (node00029112) 1532 0 R (node00029113) 1533 0 R (node00029114) 1534 0 R
+(node00029115) 1535 0 R (node00029116) 457 0 R (node00029117) 1536 0 R (node00029118) 1537 0 R (node00029119) 1538 0 R
+(node00029120) 1539 0 R (node00029121) 1540 0 R (node00029122) 1541 0 R (node00029123) 458 0 R (node00029124) 1542 0 R
+(node00029125) 1543 0 R (node00029126) 1544 0 R (node00029127) 1545 0 R (node00029128) 1546 0 R (node00029129) 1547 0 R
+(node00029130) 459 0 R (node00029131) 1548 0 R (node00029132) 1549 0 R (node00029133) 1550 0 R (node00029134) 1551 0 R
+(node00029135) 1552 0 R (node00029136) 1553 0 R (node00029137) 460 0 R (node00029138) 1554 0 R (node00029139) 1555 0 R
+(node00029140) 1556 0 R (node00029141) 1557 0 R (node00029142) 1558 0 R (node00029143) 1559 0 R (node00029144) 461 0 R
+(node00029145) 1560 0 R (node00029146) 1561 0 R (node00029147) 1562 0 R (node00029148) 1563 0 R (node00029149) 1564 0 R
+(node00029150) 1565 0 R (node00029151) 462 0 R (node00029152) 1566 0 R (node00029153) 1567 0 R (node00029154) 1568 0 R
+(node00029155) 1569 0 R (node00029156) 1570 0 R (node00029157) 1571 0 R (node00029158) 1572 0 R (node00029159) 463 0 R
+(node00029160) 1573 0 R (node00029161) 1574 0 R (node00029162) 1575 0 R (node00029163) 1576 0 R (node00029164) 1577 0 R
+(node00029165) 1578 0 R (node00029166) 464 0 R (node00029167) 1579 0 R (node00029168) 1580 0 R (node00029169) 1581 0 R
+(node00029170) 1582 0 R (node00029171) 1583 0 R (node00029172) 465 0 R (node00029173) 1584 0 R (node00029174) 1585 0 R
+(node00029175) 1586 0 R (node00029176) 1587 0 R (node00029177) 1588 0 R (node00029178) 1589 0 R (node00029179) 466 0 R
+(node00029180) 1590 0 R (node00029181) 1591 0 R (node00029182) 1592 0 R (node00029183) 1593 0 R (node00029184) 1594 0 R
+(node00029185) 1595 0 R (node00029186) 467 0 R (node00029187) 1596 0 R (node00029188) 1597 0 R (node00029189) 1598 0 R
+(node00029190) 1599 0 R (node00029191) 1600 0 R (node00029192) 1601 0 R (node00029193) 468 0 R (node00029194) 1602 0 R
+(node00029195) 1603 0 R (node00029196) 1604 0 R (node00029197) 1605 0 R (node00029198) 1606 0 R (node00029199) 1607 0 R
+(node00029200) 469 0 R (node00029201) 1608 0 R (node00029202) 1609 0 R (node00029203) 1610 0 R (node00029204) 470 0 R
+(node00029205) 1611 0 R (node00029206) 1612 0 R (node00029207) 1613 0 R (node00029208) 471 0 R (node00029209) 1614 0 R
+(node00029210) 1615 0 R (node00029211) 1616 0 R (node00029212) 472 0 R (node00029213) 1617 0 R (node00029214) 1618 0 R
+(node00029215) 1619 0 R (node00029216) 473 0 R (node00029217) 1620 0 R (node00029218) 1621 0 R (node00029219) 1622 0 R
+(node00029220) 474 0 R (node00029221) 1623 0 R (node00029222) 1624 0 R (node00029223) 1625 0 R (node00029224) 475 0 R
+(node00029225) 1626 0 R (node00029226) 1627 0 R (node00029227) 1628 0 R (node00029228) 476 0 R (node00029229) 1629 0 R
+(node00029230) 1630 0 R (node00029231) 1631 0 R (node00029232) 477 0 R (node00029233) 1632 0 R (node00029234) 1633 0 R
+(node00029235) 1634 0 R (node00029236) 478 0 R (node00029237) 1635 0 R (node00029238) 1636 0 R (node00029239) 1637 0 R
+(node00029240) 479 0 R (node00029241) 1638 0 R (node00029242) 480 0 R (node00029243) 1639 0 R (node00029244) 1640 0 R
+(node00029245) 1641 0 R (node00029246) 481 0 R (node00029247) 1642 0 R (node00029248) 1643 0 R (node00029249) 1644 0 R
+(node00029250) 482 0 R (node00029251) 1645 0 R (node00029252) 1646 0 R (node00029253) 1647 0 R (node00029254) 483 0 R
+(node00029255) 1648 0 R (node00029256) 1649 0 R (node00029257) 1650 0 R (node00029258) 484 0 R (node00029259) 1651 0 R
+(node00029260) 1652 0 R (node00029261) 1653 0 R (node00029262) 485 0 R (node00029263) 1654 0 R (node00029264) 1655 0 R
+(node00029265) 1656 0 R (node00029266) 486 0 R (node00029267) 1657 0 R (node00029268) 1658 0 R (node00029269) 1659 0 R
+(node00029270) 487 0 R (node00029271) 1660 0 R (node00029272) 1661 0 R (node00029273) 1662 0 R (node00029274) 488 0 R
+(node00029275) 1663 0 R (node00029276) 1664 0 R (node00029277) 1665 0 R (node00029278) 489 0 R (node00029279) 1666 0 R
+(node00029280) 1667 0 R (node00029281) 1668 0 R (node00029282) 490 0 R (node00029283) 1669 0 R (node00029284) 1670 0 R
+(node00029285) 1671 0 R (node00029286) 491 0 R (node00029287) 1672 0 R (node00029288) 1673 0 R (node00029289) 1674 0 R
+(node00029290) 492 0 R (node00029291) 1675 0 R (node00029292) 1676 0 R (node00029293) 1677 0 R (node00029294) 493 0 R
+(node00029295) 1678 0 R (node00029296) 1679 0 R (node00029297) 1680 0 R (node00029298) 494 0 R (node00029299) 1681 0 R
+(node00029300) 1682 0 R (node00029301) 1683 0 R (node00029302) 495 0 R (node00029303) 1684 0 R (node00029304) 1685 0 R
+(node00029305) 1686 0 R (node00029306) 496 0 R (node00029307) 1687 0 R (node00029308) 1688 0 R (node00029309) 1689 0 R
+(node00029310) 497 0 R (node00029311) 1690 0 R (node00029312) 1691 0 R (node00029313) 1692 0 R (node00029314) 498 0 R
+(node00029315) 1693 0 R (node00029316) 1694 0 R (node00029317) 1695 0 R (node00029318) 499 0 R (node00029319) 1696 0 R
+(node00029320) 1697 0 R (node00029321) 1698 0 R (node00029322) 500 0 R (node00029323) 1699 0 R (node00029324) 1700 0 R
+(node00029325) 1701 0 R (node00029326) 501 0 R (node00029327) 1702 0 R (node00029328) 1703 0 R (node00029329) 1704 0 R
+(node00029330) 502 0 R (node00029331) 1705 0 R (node00029332) 1706 0 R (node00029333) 1707 0 R (node00029334) 503 0 R
+(node00029335) 1708 0 R (node00029336) 1709 0 R (node00029337) 1710 0 R (node00029338) 504 0 R (node00029339) 1711 0 R
+(node00029340) 1712 0 R (node00029341) 1713 0 R (node00029342) 505 0 R (node00029344) 1714 0 R (node00029345) 1715 0 R
+(node00029346) 1716 0 R (node00029347) 1717 0 R (node00029348) 1718 0 R (node00029349) 1719 0 R (node00029358) 1720 0 R
+(node00029359) 1721 0 R (node00029360) 1722 0 R (node00029361) 1723 0 R (node00029362) 506 0 R (node00029376) 1724 0 R
+(node00029377) 1725 0 R (node00029378) 1726 0 R (node00029379) 507 0 R (node00029380) 1727 0 R (node00029381) 1728 0 R
+(node00029382) 1729 0 R (node00029383) 508 0 R (node00029384) 1730 0 R (node00029385) 1731 0 R (node00029386) 1732 0 R
+(node00029387) 1733 0 R (node00029388) 1734 0 R (node00029389) 509 0 R (node00029390) 1735 0 R (node00029391) 1736 0 R
+(node00029392) 1737 0 R (node00029393) 510 0 R (node00029394) 1738 0 R (node00029395) 1739 0 R (node00029396) 1740 0 R
+(node00029397) 511 0 R (node00029398) 1741 0 R (node00029399) 512 0 R (node00029400) 513 0 R (node00029401) 1742 0 R
+(node00029402) 1743 0 R (node00029403) 1744 0 R (node00029404) 514 0 R (node00029405) 1745 0 R (node00029406) 1746 0 R
+(node00029407) 1747 0 R (node00029408) 515 0 R (node00029409) 1748 0 R (node00029410) 1749 0 R (node00029411) 1750 0 R
+(node00029412) 516 0 R]
+>>
+endobj
+22 0 obj
+<<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState 1751 0 R
+/XObject <<
+/X4 1752 0 R
+>>
+/Font 1753 0 R
+>>
+endobj
+23 0 obj
+<<
+/Length 2278
+/Filter /FlateDecode
+>>
+stream
+xYM
s%$00Ed{t'(UT՞xa$ӀݢJHQՎԿsarv9zIT\PG_x] g3 @_N~TTd}:ϵ>N(/QE(e1Wb2/O߉c)hΓXXd}Eu>o8%A OeX}!*DNbv;z*!6s3_¦5C;zE\Vl)!VP
+{zkFѻl"*jQ"I(%nCԿ:{sTK\DB&ȠO*IЄ9o>bHBI;±t=JI)V<D̾!CڇXcIh] rlnT0w?= >|xxz}⫶JY