diff --git a/.gitattributes b/.gitattributes
index d2bd0c9..3d608b3 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -5,10 +5,10 @@
*.mexa64 binary
*.mexw64 binary
*.mexmaci64 binary
-*.mlapp binary
+*.mlapp binary linguist-language=MATLAB
*.mldatx binary
*.mlproj binary
-*.mlx binary
+*.mlx binary merge=mlAutoMerge linguist-language=MATLAB
*.p binary
*.sfx binary
*.sldd binary
@@ -16,7 +16,7 @@
*.slmx binary merge=mlAutoMerge
*.sltx binary
*.slxc binary
-*.slx binary merge=mlAutoMerge
+*.slx binary merge=mlAutoMerge linguist-language=Simulink
*.slxp binary
## Other common binary file types
@@ -26,3 +26,7 @@
*.pdf binary
*.png binary
*.xlsx binary
+
+# Ignore HTML
+
+*.html linguist-detectable=false
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..fa2450b
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,120 @@
+name: MATLAB Build
+
+# Controls when the action will run.
+on:
+ push:
+ branches: [ release ]
+ pull_request:
+ branches: [ release ]
+ workflow_dispatch:
+
+# Add permission to write GitHub pages
+permissions:
+ contents: write
+ pages: write
+ id-token: write
+
+jobs:
+ test:
+ strategy:
+ fail-fast: false
+ matrix:
+ MATLABVersion: [R2024b,R2025a,R2025b]
+ runs-on: ubuntu-latest
+ env:
+ LD_PRELOAD: /usr/lib/x86_64-linux-gnu/libstdc++.so.6
+ steps:
+ # Checks-out your repository
+ - uses: actions/checkout@v4
+
+ # Sets up a display server
+ - name: Start display server
+ if: ${{ always() }}
+ run: |
+ sudo apt-get install xvfb
+ Xvfb :99 &
+ echo "DISPLAY=:99" >> $GITHUB_ENV
+
+ # Sets up MATLAB
+ - name: Setup MATLAB
+ uses: matlab-actions/setup-matlab@v2
+ with:
+ release: ${{ matrix.MATLABVersion }}
+ products: >
+ Symbolic_Math_Toolbox
+ # Simulink Statistics_and_Machine_Learning_Toolbox
+ # List required products above in the format shown (and uncomment them)
+ # List of product strings:
+ # Simulink
+ # Statistics_and_Machine_Learning_Toolbox
+ # Simulink_Coder
+ # Econometrics_Toolbox
+ # Deep_Learning_Toolbox
+
+
+ # Run all the tests
+ - name: Run SmokeTests
+ uses: matlab-actions/run-command@v2
+ with:
+ command: openProject(pwd); RunAllTests;
+
+ # Upload the test results as artifact
+ - name: Upload TestResults
+ if: ${{ always() }}
+ uses: actions/upload-artifact@v4
+ with:
+ name: TestResults_${{ matrix.MATLABVersion }}
+ path: ./public/*
+ overwrite: true
+
+ badge:
+ if: ${{ always() }}
+ needs: [test]
+ strategy:
+ fail-fast: false
+ runs-on: ubuntu-latest
+ steps:
+
+ # Checks-out your repository
+ - uses: actions/checkout@v4
+
+ # Sets up R2023b
+ - name: Setup MATLAB
+ uses: matlab-actions/setup-matlab@v2
+ with:
+ release: R2024b
+
+ # Download the test results from artifact
+ - name: Download All TestResults
+ uses: actions/download-artifact@v4
+ with:
+ path: public
+ pattern: TestResults_*
+ merge-multiple: true
+
+ # Create the test results badge
+ - name: Run PostSmokeTest
+ uses: matlab-actions/run-command@v2
+ with:
+ command: openProject(pwd); PostSmokeTest;
+
+ # Deploy reports to GitHub pages
+ - name: Setup Pages
+ uses: actions/configure-pages@v5
+ - name: Upload pages artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: public
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
+
+ # Commit the JSON for the MATLAB releases badge
+ - name: Commit changed files
+ continue-on-error: true
+ run: |
+ git config user.name "${{ github.workflow }} by ${{ github.actor }}"
+ git config user.email "<>"
+ git add Images/TestedWith.json
+ git commit Images/TestedWith.json -m "Update CI badges ${{ github.ref_name }}"
+ git push
diff --git a/.gitignore b/.gitignore
index f10e12e..14f9f76 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,61 @@
# List of untracked files to ignore
+# Autosave files
*.asv
-*.zip
-*.pyc
+*.m~
+*.autosave
+*.slx.r*
+*.mdl.r*
+__pycache__
*.pyc
-*.vs
-*TestOutput
-MATLAB-Live-Task-for-Python
\ No newline at end of file
+*/*.pyc
+
+# MATLAB Drive
+*.MATLABDriveTag
+
+# Compiled files
+*.mex*
+*.p
+
+# Compressed files
+*.zip
+
+# Packaged app and toolbox files
+*.mlappinstall
+*.mltbx
+
+# Deployable archives
+*.ctf
+
+# Generated helpsearch folders
+helpsearch*/
+
+# Defined Simulink cache folder
+Utilities/SimulinkCache/*
+
+# Standard code generation folders
+slprj/
+sccprj/
+codegen/
+
+# Code generation file
+*.eep
+*.elf
+*.hex
+*.bin
+
+# Cache files
+*.slxc
+
+# Project settings
+Utilities/ProjectSettings.mat
+
+# GitLab page folder
+public/
+
+# Prevent accidentally committing your API key
+myAPIkey.txt
+
+# Live Task Repository
+MATLAB-Live-Task-for-Python
+
diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json
deleted file mode 100644
index f8b4888..0000000
--- a/.vs/ProjectSettings.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "CurrentProjectSetting": null
-}
\ No newline at end of file
diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite
deleted file mode 100644
index 53d9b1b..0000000
Binary files a/.vs/slnx.sqlite and /dev/null differ
diff --git a/Apps/CurrentWeatherAppDemo.mlapp b/Apps/CurrentWeatherAppDemo.mlapp
new file mode 100644
index 0000000..29e8eca
Binary files /dev/null and b/Apps/CurrentWeatherAppDemo.mlapp differ
diff --git a/Apps/CurrentWeatherAppStart.mlapp b/Apps/CurrentWeatherAppStart.mlapp
new file mode 100644
index 0000000..7911e83
Binary files /dev/null and b/Apps/CurrentWeatherAppStart.mlapp differ
diff --git a/Apps/WeatherDisplay.mlapp b/Apps/WeatherDisplay.mlapp
new file mode 100644
index 0000000..051c401
Binary files /dev/null and b/Apps/WeatherDisplay.mlapp differ
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..14d6bdc
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,27 @@
+# Contributing
+
+>_If you believe you have discovered a security vulnerability, please **do not** open an issue or make a pull request. Follow the instructions in the [SECURITY.md](SECURITY.md) file in this repository._
+
+Thank you for your interest in contributing to a MathWorks repository! We encourage contributions large and small to this repository.
+
+**Contributions do not have to be code!** If you see a way to explain things more clearly or a great example of how to use something, please contribute it (or a link to your content). We welcome issues even if you don't code the solution. We also welcome pull requests to resolve issues that we haven't gotten to yet!
+
+## How to give feedback
+* **Send us an email:** Contact the [MathWorks teaching resources team.](mailto:onlineteaching@mathworks.com)
+* **Open an issue:** Start by [creating an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/creating-an-issue) in the repository that you're interested in. That will start a conversation with the maintainer. When you are creating a bug report, please include as many details as possible. Please remember that other people do not have your background or understanding of the issue; make sure you are clear and complete in your description.
+
+## How to contribute to the repository
+* **Work in your own public fork:** If you choose to make a contribution, you should [fork the repository](https://docs.github.com/en/get-started/quickstart/fork-a-repo). This creates an editable copy on GitHub where you can write, test, and refine your changes. We suggest that you keep your changes small and focused on the issue you submitted.
+* **Sign a Contributor License Agreement (CLA):** We require that all outside contributors sign a [CLA](https://en.wikipedia.org/wiki/Contributor_License_Agreement) before we can accept your contribution. When you create a pull request (see below), we'll reach out to you if you do not already have one on file. Essentially, the CLA gives us permission to publish your contribution as part of the repository.
+* **Make a pull request:** "[Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests)" is a confusing term, but it means exactly what it says: You're requesting that the maintainers of the repository pull your changes in. If you don't have a CLA on file, we'll reach out to you. Your contribution will be reviewed, and we may ask you to revise your pull request based on our feedback. Once everyone is satisfied, we'll merge your pull request into the repository.
+
+## Guidelines
+
+We don't have best practices for writing MATLAB® code, but we do have some recommendations:
+
+* You should not have any warnings or errors in the [code analyzer report](http://www.mathworks.com/help/matlab/matlab_prog/matlab-code-analyzer-report.html)
+* [Loren Shure's blog](https://blogs.mathworks.com/loren) has [great advice on improving your MATLAB code](https://blogs.mathworks.com/loren/category/best-practice/)
+* Examples should be written as [live scripts](https://www.mathworks.com/help/matlab/matlab_prog/what-is-a-live-script-or-function.html) or [Simulink® models](https://www.mathworks.com/help/simulink/index.html).
+* We adhere to the [CommonMark](https://commonmark.org/) specification where it does not conflict with GitHub rendering. If you edit your Markdown in Visual Studio Code or a similar editor, it uses [markdownlint](https://github.com/DavidAnson/markdownlint) to highlight issues in your Markdown.
+
+**Again, thanks for contributing, and we look forward to your issues and pull requests!**
diff --git a/CheckingTheWeather.mlx b/CheckingTheWeather.mlx
deleted file mode 100644
index 4c474f2..0000000
Binary files a/CheckingTheWeather.mlx and /dev/null differ
diff --git a/FunctionLibrary/CheckPythonVersion.mlx b/FunctionLibrary/CheckPythonVersion.mlx
new file mode 100644
index 0000000..b5e0ab7
Binary files /dev/null and b/FunctionLibrary/CheckPythonVersion.mlx differ
diff --git a/helloworld.py b/FunctionLibrary/helloworld.py
similarity index 100%
rename from helloworld.py
rename to FunctionLibrary/helloworld.py
diff --git a/HelperFunctions/Navigation.mlx b/HelperFunctions/Navigation.mlx
deleted file mode 100644
index 165180c..0000000
Binary files a/HelperFunctions/Navigation.mlx and /dev/null differ
diff --git a/HelperFunctions/OpenOverview.m b/HelperFunctions/OpenOverview.m
deleted file mode 100644
index 45101a2..0000000
--- a/HelperFunctions/OpenOverview.m
+++ /dev/null
@@ -1,10 +0,0 @@
-function OpenOverview
-% Open the overview file
-locDir = pwd;
-if contains(locDir,filesep+"MATLAB Drive")
- open("Navigation.mlx")
-else
- open("Overview.html")
-end
-
-end
\ No newline at end of file
diff --git a/HelperFunctions/Overview.html b/HelperFunctions/Overview.html
deleted file mode 100644
index d8f52c9..0000000
--- a/HelperFunctions/Overview.html
+++ /dev/null
@@ -1,331 +0,0 @@
-
-
-
-
- Programming: A Starter Project Using MATLAB with Python Programming: A Starter Project Using MATLAB with Python
-
-
- Information
- This curriculum module contains interactive
- MATLAB® live scripts
- that teach fundamental concepts and basic terminology related to
- programming computers. This module explores interactions between systems
- by using the OpenWeather API and calling into Python from MATLAB.
-
-
- Programming: A Starter Project Using MATLAB with Python covers
- downloading and installing a Live Task to run Python code, accessing the OpenWeather API
- to check the weather , and choosing how to package
- the weather reports into your personalized weather dashboard .
-
-
- You can use these live scripts as demonstrations in a lecture, class activities,
- or interactive assignments outside of class. The module is divided into
- two interactive scripts and an example script: setting up your environment
- to run Python from MATLAB in UsingPythonWithMATLAB.mlx,
- exploring the API with CheckingTheWeather.mlx, and the
- example SampleWeatherDashboard.mlx.
-
-
- The instructions inside the live scripts will guide you through the exercises and activities.
- Get started with each live script by running it one section at a time. To stop running the script
- or a section midway (for example, when an animation is in progress), use the Stop button in the
- RUN section of the Live Editor tab in the MATLAB Toolstrip.
-
-
- If you are an instructor who would like solutions, or if you find an issue or have a suggestion,
-email the MathWorks online teaching team at
- onlineteaching@mathworks.com .
-
-
- Related Courseware Modules
-
- Fundamentals of Programming available on
- GitHub or
-
-
- Programming: Organizing Data available on
- GitHub or
-
-
- Programming: Structuring Code available on
- GitHub or
-
-
-
- Prerequisites
- This module assumes familiarity with basic programming concepts such as variables,
- data types, and functions, structures including arrays and structs, and control flows
- including if/else as well as how to use them in MATLAB. These ideas are all presented
- with interactive examples in
-
- Fundamentals of Programming ,
- Programming: Organizing Data , and
- Programming: Structuring Code .
-
-
- Getting Started
-
- Open the project file.
-
- Get started with each topic by clicking the link in the first column of the table below to access the
- full script example.
- The instructions inside each live script will walk
- you through the live scripts and related functions.
-
-
- Products
- MATLAB® and Symbolic Toolbox™
-
-
-
-
- Organization of Programming: A Starter Project Using MATLAB with Python
-
- Script
- In this script, you will...
-
-
-
- Setting up MATLAB to run Python code
-
-
-
-
- check that an appropriate version of Python is installed and visible within MATLAB.
- download and install the Run Python Code Live Task.
- try running Python commands and a Python script from MATLAB.
-
-
-
-
-
- Reading and Accessing the OpenWeather API
-
-
-
-
- set up an account with OpenWeather to create your own API key.
- use checkweather.py to make an API call to OpenWeather.
- use MATLAB to explore the data returned by checkweather.py,
- including data type conversions, unit conversions, and data
- visualization options.
-
-
-
-
-
- Example Weather Dashboard
-
-
-
-
- use hidden code interactions in live scripts to design a streamlined user experience.
-
-
-
-
-
-
-
-
Copyright 2022 The MathWorks™, Inc.
\ No newline at end of file
diff --git a/Images/AddCallbackFromContextMenu.mlx b/Images/AddCallbackFromContextMenu.mlx
new file mode 100644
index 0000000..d7fd67b
Binary files /dev/null and b/Images/AddCallbackFromContextMenu.mlx differ
diff --git a/Images/AddCallbackInComponentBrowser.mlx b/Images/AddCallbackInComponentBrowser.mlx
new file mode 100644
index 0000000..225fde9
Binary files /dev/null and b/Images/AddCallbackInComponentBrowser.mlx differ
diff --git a/Images/AddFunction.mlx b/Images/AddFunction.mlx
new file mode 100644
index 0000000..07b5c4d
Binary files /dev/null and b/Images/AddFunction.mlx differ
diff --git a/Images/AddMultipleComponentsToApp.mlx b/Images/AddMultipleComponentsToApp.mlx
new file mode 100644
index 0000000..2cb497d
Binary files /dev/null and b/Images/AddMultipleComponentsToApp.mlx differ
diff --git a/Images/AddOnsIcon.png b/Images/AddOnsIcon.png
new file mode 100644
index 0000000..3c2252f
Binary files /dev/null and b/Images/AddOnsIcon.png differ
diff --git a/Images/AddProperty.mlx b/Images/AddProperty.mlx
new file mode 100644
index 0000000..97b05a7
Binary files /dev/null and b/Images/AddProperty.mlx differ
diff --git a/Images/EndIcon.png b/Images/EndIcon.png
new file mode 100644
index 0000000..46b8835
Binary files /dev/null and b/Images/EndIcon.png differ
diff --git a/Images/MouseThoughtBubble.png b/Images/MouseThoughtBubble.png
new file mode 100644
index 0000000..b5d45dc
Binary files /dev/null and b/Images/MouseThoughtBubble.png differ
diff --git a/Images/OpenInFX.png b/Images/OpenInFX.png
new file mode 100644
index 0000000..987bb51
Binary files /dev/null and b/Images/OpenInFX.png differ
diff --git a/Images/OpenInMO.png b/Images/OpenInMO.png
new file mode 100644
index 0000000..41c17fe
Binary files /dev/null and b/Images/OpenInMO.png differ
diff --git a/Images/RGBTurkeys.png b/Images/RGBTurkeys.png
new file mode 100644
index 0000000..75e040e
Binary files /dev/null and b/Images/RGBTurkeys.png differ
diff --git a/Images/SeaSurfaceTemps.png b/Images/SeaSurfaceTemps.png
new file mode 100644
index 0000000..1326b82
Binary files /dev/null and b/Images/SeaSurfaceTemps.png differ
diff --git a/Images/TestedWith.json b/Images/TestedWith.json
new file mode 100644
index 0000000..7e7e1c0
--- /dev/null
+++ b/Images/TestedWith.json
@@ -0,0 +1 @@
+{"schemaVersion":1,"label":"Test Status","color":"success","message":"R2024b | R2025a | R2025b"}
diff --git a/Images/WeatherDashboard.png b/Images/WeatherDashboard.png
new file mode 100644
index 0000000..6f234bd
Binary files /dev/null and b/Images/WeatherDashboard.png differ
diff --git a/Images/WeatherStruct.png b/Images/WeatherStruct.png
new file mode 100644
index 0000000..5ce65d8
Binary files /dev/null and b/Images/WeatherStruct.png differ
diff --git a/InstructorResources/Solutions/CheckingTheWeatherSoln.mlx b/InstructorResources/Solutions/CheckingTheWeatherSoln.mlx
new file mode 100644
index 0000000..c81f902
Binary files /dev/null and b/InstructorResources/Solutions/CheckingTheWeatherSoln.mlx differ
diff --git a/InstructorResources/Solutions/CreateCurrentWeatherAppSoln.mlx b/InstructorResources/Solutions/CreateCurrentWeatherAppSoln.mlx
new file mode 100644
index 0000000..acb7550
Binary files /dev/null and b/InstructorResources/Solutions/CreateCurrentWeatherAppSoln.mlx differ
diff --git a/InstructorResources/Solutions/UsingMATLABwithPythonSoln.mlx b/InstructorResources/Solutions/UsingMATLABwithPythonSoln.mlx
new file mode 100644
index 0000000..f286f6c
Binary files /dev/null and b/InstructorResources/Solutions/UsingMATLABwithPythonSoln.mlx differ
diff --git a/LICENSE.md b/LICENSE.md
index 2ea369e..0051e60 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,10 +1,27 @@
-Copyright (c) 2022, The MathWorks, Inc.
+Copyright (c) 2024, The MathWorks, Inc.
All rights reserved.
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
-1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-3. In all cases, the software is, and all modifications and derivatives of the software shall be, licensed to you solely for use in conjunction with MathWorks products and service offerings.
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the distribution
+ * Neither the name of the The MathWorks, Inc. nor the names
+ of its contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/MainMenu.mlx b/MainMenu.mlx
new file mode 100644
index 0000000..d9f6355
Binary files /dev/null and b/MainMenu.mlx differ
diff --git a/README.md b/README.md
index fd089d4..f2b2f91 100644
--- a/README.md
+++ b/README.md
@@ -1,80 +1,117 @@
-# Programming: A Starter Project Using MATLAB with Python
-[](https://www.mathworks.com/matlabcentral/fileexchange/116490-programming-a-starter-project-using-matlab-and-python)
-**Curriculum Module**
-_Created with R2022a. Compatible with R2022a and later releases._
-
-## Description ##
-This curriculum module contains interactive [live scripts](https://www.mathworks.com/products/matlab/live-editor.html) that teach fundamental concepts and basic terminology related to programming computers.
-This module explores interactions between systems by using the OpenWeather API and calling into Python from MATLAB.
-**Programming: A Starter Project Using MATLAB with Python** covers downloading and installing a Live Task to run Python code
-from a Git repository, accessing the OpenWeather API to check the weather, and choosing how to package the weather
-reports into your personalized weather display.
-
-These lessons can be used as part of a lecture, as activities in an instructional setting, or as interactive assignments
-to be completed outside of class.
-
-Get started with the Programming: A Starter Project Using MATLAB with Python interactive examples by downloading
-and unzipping the repository. Then, double-click the MATLABwithPython.prj file inside MATLAB®. From there,
-you can follow the landing page instructions to get started with the examples. The instructions inside the live
-scripts will guide you through the exercises and activities. Get started with each live script by running it one
-section at a time. To stop running the script or a section midway (for example, if a loop is running longer than
-intended), click the
-**Stop** button in the **RUN** section of the **Live Editor** tab in the MATLAB Toolstrip.
-
-## Prerequisite Domain Knowledge ##
-This module assumes familiarity with basic programming concepts such as variables, data types, and functions,
-structures including arrays and structs, and control flows including if/else as well as how to use them in MATLAB.
-These ideas are all presented with interactive examples in
-[Fundamentals of Programming](https://www.mathworks.com/matlabcentral/fileexchange/103225-fundamentals-of-programming),
-[Programming: Organizing Data](https://www.mathworks.com/matlabcentral/fileexchange/115900-programming-organizing-data),
-[Programming: Structuring Code](https://www.mathworks.com/matlabcentral/fileexchange/115905-programming-structuring-code).
-
-## Details ##
-
-## ##
-**UsingMATLABwithPython.mlx**
-This script introduces the Run Python Code Live Task, as well as walking through checking that an appropriate version
-of Python is installed and visible to MATLAB.
-
-
-
-**Learning Goals:**
-In this script, students will...
-- check that an appropriate version of Python is installed and visible within MATLAB.
-- download and install the Run Python Code Live Task.
-- try running Python commands and a Python script from MATLAB.
-
-## ##
-**CheckingTheWeather.mlx**
-This script introduces the OpenWeather API, walking through setting up an account to get an API key, using an existing python script to access the API, and then investigation of the data that is returned.
-
-
-
-**Learning Goals:**
-In this script, students will...
-- set up an account with OpenWeather to create your own API key.
-- use checkweather.py to make an API call to OpenWeather.
-- use MATLAB to explore the data returned by checkweather.py, including data type conversions,
-unit conversions, and data visualization options.
-
-## ##
-**MyWeatherDashboard.mlx**
-This script presents an example of a cleaned-up final product from following the directions in `CheckingTheWeather.mlx`. It uses a live script with Code Hidden to offer a pleasant user experience.
-
-
-
-**Learning Goals:**
-In this script, students will
-- use hidden code interactions in live scripts to design a streamlined user experience.
-
-## Products ##
-MATLAB®, Symbolic Math Toolbox™
-
-## License ##
-The license for this module is available in the [License.md](LICENSE.md) file in this GitHub repository.
-
-## Support ##
-Have any questions or feedback? Are you an instructor who would like solutions? Contact the MathWorks online teaching team.
-
-# #
-_Copyright 2022 The MathWorks, Inc._
+
+# Programming: A Starter Project Using MATLAB with Python
+
+Learn how to call Python code, convert data types and units, and use App Designer to build an app to display your results.
+
+[](https://www.mathworks.com/matlabcentral/fileexchange/116490-programming-a-starter-project-using-matlab-and-python) or [](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Programming-A-Starter-Project-Using-MATLAB-and-Python&project=MATLABwithPython.prj&file=README.mlx)
+
+[](https://MathWorks-Teaching-Resources.github.io/Programming-A-Starter-Project-Using-MATLAB-and-Python)
+
+**Curriculum Module**
+
+_Created with R2024a. Compatible with R2024a and later releases._
+
+# Information
+
+This curriculum module contains interactive [MATLAB® live scripts](https://www.mathworks.com/products/matlab/live-editor.html) that teach fundamental concepts and basic terminology related to programming computers.
+
+# Prerequisite Domain Knowledge
+
+This module assumes familiarity with basic programming concepts such as variables, data types, and functions, structures including arrays and structs, and control flows including if/else as well as how to use them in MATLAB. These ideas are all presented with interactive examples in [Fundamentals of Programming ](https://www.mathworks.com/matlabcentral/fileexchange/103225-fundamentals-of-programming), [Programming: Organizing Data ](https://www.mathworks.com/matlabcentral/fileexchange/115900-programming-organizing-data), [Programming: Structuring Code ](https://www.mathworks.com/matlabcentral/fileexchange/115905-programming-structuring-code).
+
+
+## Background
+
+You can use these live scripts as demonstrations in lectures, class activities, or interactive assignments outside class. This module explores interactions between systems by using the OpenWeather API and calling into Python from MATLAB. **Programming: A Starter Project Using MATLAB with Python** covers using the Run Python Code Live Task to run provided Python code, accessing the OpenWeather API to check the weather, extracting useful data from the API call, and using App Designer to create an app with a personalized weather display.
+
+
+The instructions inside the live scripts will guide you through the exercises and activities. Get started with each live script by running it one section at a time. To stop running the script or a section midway (for example, when an animation is in progress), use the Stop button in the **RUN** section of the **Live Editor** tab in the MATLAB Toolstrip.
+
+## Contact Us
+
+Contact the [MathWorks Educator Content Development Team](mailto:onlineteaching@mathworks.com) if you would like to request assistance, provide feedback, or if you have a question.
+
+
+## Prerequisites
+
+This module assumes familiarity with basic programming concepts such as variables, data types, and functions, structures including arrays and structs, and control flows including if/else as well as how to use them in MATLAB. These ideas are all presented with interactive examples in [Fundamentals of Programming ](https://github.com/MathWorks-Teaching-Resources/Fundamentals-of-Programming), [Programming: Organizing Data ](https://github.com/MathWorks-Teaching-Resources/Programming-Organizing-Data), [Programming: Structuring Code ](https://github.com/MathWorks-Teaching-Resources/Programming-Structuring-Code).
+
+
+## Getting Started
+### Accessing the Module
+### **On MATLAB Online:**
+
+Use the [ ](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Programming-A-Starter-Project-Using-MATLAB-and-Python&project=MATLABwithPython.prj) link to download the module. You will be prompted to log in or create a MathWorks account. The project will be loaded, and you will see an app with several navigation options to get you started.
+
+### **On Desktop:**
+
+Download or clone this repository. Open MATLAB, navigate to the folder containing these scripts and double\-click on [MATLABwithPython.prj](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Programming-A-Starter-Project-Using-MATLAB-and-Python&project=MATLABwithPython.prj&file=README.mlx). It will add the appropriate files to your MATLAB path and open an app that asks you where you would like to start.
+
+
+Ensure you have all the required products (listed below) installed. If you need to include a product, add it using the Add\-On Explorer. To install an add\-on, go to the **Home** tab and select **Add-Ons** > **Get Add-Ons**.
+
+
+## Products
+
+MATLAB® is used throughout. Tools from the Symbolic Math Toolbox™ are used to convert between different unit systems in the weather applications.
+
+# Scripts
+## [**UsingMATLABwithPython.mlx**](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Programming-A-Starter-Project-Using-MATLAB-and-Python&project=MATLABwithPython.prj&file=Scripts/UsingMATLABwithPython.mlx)
+| | |
+| :-- | :-- |
+| **Introductory script** | **In this script, students will...** |
+| | $\bullet$ check that an appropriate version of Python is installed and visible within MATLAB $\bullet$ explore the Run Python Code Live Task $\bullet$ try running Python commands and a Python script from MATLAB |
+| | |
+
+## [**CheckingTheWeather.mlx**](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Programming-A-Starter-Project-Using-MATLAB-and-Python&project=MATLABwithPython.prj&file=Scripts/CheckingTheWeather.mlx)
+| | |
+| :-- | :-- |
+| **Investigatory script** | **In this script, students will...** |
+| | $\bullet$ set up an account with OpenWeather to create your own API key $\bullet$ use existing Python code to make an API call to OpenWeather $\bullet$ use MATLAB to explore the data returned by the API call, including data type conversions and unit conversions |
+| | |
+
+## [**CreateCurrentWeatherApp.mlx**](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Programming-A-Starter-Project-Using-MATLAB-and-Python&project=MATLABwithPython.prj&file=Scripts/CreateCurrentWeatherApp.mlx)
+| | |
+| :-- | :-- |
+| **Application script** | **In this script, students will...** |
+| | $\bullet$ use App Designer to build a custom app using the code from CheckingTheWeather.mlx $\bullet$ create callbacks, properties, and functions $\bullet$ design and organize a UI with drag and drop elements $\bullet$ reuse code from CheckingTheWeather in a new context |
+| | |
+
+# Apps
+
+Both of these apps require running Python from MATLAB, as set up in UsingMATLABwithPython and an OpenWeather API key, as set up in CheckingTheWeather.
+
+- **CurrentWeatherAppDemo.mlapp ** shows the results of working through CreateCurrentWeatherApp.
+- **WeatherDisplay.mlapp ** shows one elaborated version of the basic current weather app.
+
+# License
+
+The license for this module is available in the [LICENSE.md](https://github.com/MathWorks-Teaching-Resources/Programming-A-Starter-Project-Using-MATLAB-and-Python/blob/release/LICENSE.md).
+
+# Related Courseware Modules
+| | | |
+| :-- | :-- | :-- |
+| **Courseware Module** | **Sample Content** | **Available on:** |
+| [**Fundamentals of Programming**](https://www.mathworks.com/matlabcentral/fileexchange/103225-fundamentals-of-programming) Learn the basics of how to make a computer accept, store, and compute with information | | [ ](https://www.mathworks.com/matlabcentral/fileexchange/103225-fundamentals-of-programming) [ ](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Fundamentals-of-Programming&project=FundamentalsofProgramming.prj) [GitHub](https://github.com/MathWorks-Teaching-Resources/Fundamentals-of-Programming) |
+| [**Programming: Structuring Code**](https://www.mathworks.com/matlabcentral/fileexchange/115905-programming-structuring-code) Learn how to organize your code into functions, debug, comment, and share | | [ ](https://www.mathworks.com/matlabcentral/fileexchange/115905-programming-structuring-code) [ ](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Programming-Structuring-Code&project=StructuringCode.prj) [GitHub](https://github.com/MathWorks-Teaching-Resources/Programming-Structuring-Code) |
+| [**Programming: Organizing Data**](https://www.mathworks.com/matlabcentral/fileexchange/115900-programming-organizing-data) Learn more about strings, numeric data types, memory, and ways of storing data | | [ ](https://www.mathworks.com/matlabcentral/fileexchange/115900-programming-organizing-data) [ ](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Programming-Organizing-Data&project=OrganizingData.prj) [GitHub](https://github.com/MathWorks-Teaching-Resources/Programming-Organizing-Data) |
+| | | |
+
+
+Or feel free to explore our other [modular courseware content](https://www.mathworks.com/matlabcentral/fileexchange/?q=author%3A%22MathWorks+Educator+Content+Development+Team%22&sort=relevancy).
+
+# Educator Resources
+- [Educator Page](https://www.mathworks.com/academia/educators.html)
+
+# Contribute
+
+Looking for more? Find an issue? Have a suggestion? Please contact the [MathWorks Educator Content Development team](mailto:%20onlineteaching@mathworks.com). If you want to contribute directly to this project, you can find information about how to do so in the [CONTRIBUTING.md](https://github.com/MathWorks-Teaching-Resources/Programming-A-Starter-Project-Using-MATLAB-and-Python/blob/release/CONTRIBUTING.md) page on GitHub.
+
+# Acknowledgments
+
+Many thanks to Blake Naccarato on his suggestions for improvement.
+
+
+*©* Copyright 2025 The MathWorks, Inc
+
+
diff --git a/README.mlx b/README.mlx
new file mode 100644
index 0000000..63575f7
Binary files /dev/null and b/README.mlx differ
diff --git a/SampleWeatherDashboard.mlx b/SampleWeatherDashboard.mlx
deleted file mode 100644
index bf47397..0000000
Binary files a/SampleWeatherDashboard.mlx and /dev/null differ
diff --git a/Scripts/CheckingTheWeather.mlx b/Scripts/CheckingTheWeather.mlx
new file mode 100644
index 0000000..f6e122f
Binary files /dev/null and b/Scripts/CheckingTheWeather.mlx differ
diff --git a/Scripts/CreateCurrentWeatherApp.mlx b/Scripts/CreateCurrentWeatherApp.mlx
new file mode 100644
index 0000000..8411010
Binary files /dev/null and b/Scripts/CreateCurrentWeatherApp.mlx differ
diff --git a/Scripts/UsingMATLABwithPython.mlx b/Scripts/UsingMATLABwithPython.mlx
new file mode 100644
index 0000000..9a5db69
Binary files /dev/null and b/Scripts/UsingMATLABwithPython.mlx differ
diff --git a/checkweather.py b/Scripts/checkcurrentweather.py
similarity index 54%
rename from checkweather.py
rename to Scripts/checkcurrentweather.py
index 459c814..d846b07 100644
--- a/checkweather.py
+++ b/Scripts/checkcurrentweather.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
'''
+Python 3.8 code
Created on Thu Jan 4 20:41:45 2018
Modified May 2022
@@ -14,18 +15,21 @@
https://creativecommons.org/licenses/by-sa/4.0/
'''
-# checkweather.py
+# checkcurrentweather.py
import datetime
import json
import urllib.request
-BASE_URL = 'http://api.openweathermap.org/data/2.5/onecall?lat={}&lon={}&exclude=minutely,daily,alerts&units={}&appid={}'
+BASE_URL = 'http://api.openweathermap.org/data/2.5/weather?lat={}&lon={}&units={}&appid={}'
def get_weather(lat,lon,apikey,**kwargs):
'''get current conditions in specified location, e.g.,
lat = 42.2775 N, lon = 71.3468 W is Natick, MA, US
get_current_weather('42.2775','-71.3468',key,units='metric')'''
-
+
+ # Initialize json_data
+ json_data = {'Feedback': 'nothing'}
+
# Set a default of imperial units
info = {'units':'imperial'}
for key, value in kwargs.items():
@@ -44,60 +48,35 @@ def get_weather(lat,lon,apikey,**kwargs):
def parse_current_json(json_data):
'''parse and extract json data from the current weather data'''
+ # Initialize weather_info
+ weather_info = {'Feedback': 'nothing'}
+
try:
# select data of interest from dictionary
- weather_info = json_data["current"]
+ weather_info = json_data['main']
# add current date and time
- weather_info['current_time'] = str(datetime.datetime.now())
+ weather_info['local_time'] = str(datetime.datetime.now())
+ weather_info['current_time'] = json_data['dt']
# make sure values are returned as floats
weather_info['temp'] = float(weather_info['temp'])
weather_info['feels_like'] = float(weather_info['feels_like'])
weather_info['pressure'] = float(weather_info['pressure'])
weather_info['humidity'] = float(weather_info['humidity'])
- weather_info['wind_speed'] = float(weather_info['wind_speed'])
- weather_info['wind_deg'] = float(weather_info['wind_deg'])
- weather_info['uvi'] = float(weather_info['uvi'])
- weather_info['clouds'] = float(weather_info['clouds'])
+ weather_info['wind_speed'] = float(json_data['wind']['speed'])
+ weather_info['wind_deg'] = float(json_data['wind']['deg'])
+ weather_info['clouds'] = float(json_data['clouds']['all'])
+ # Seconds shifted from UTC for location
weather_info['timezone'] = json_data['timezone']
+ # UTC Unix time
+ weather_info['sunrise'] = json_data['sys']['sunrise']
+ weather_info['sunset'] = json_data['sys']['sunset']
+ # String
+ weather_info['city_name'] = json_data['name']
+ # Weather description as list
+ weather_info['weather'] = json_data['weather']
except KeyError as e:
print('Something went wrong while parsing current json')
raise e
- return weather_info
-
-
-def parse_forecast(json_data):
- '''parse and extract json data from the forecast weather data'''
-
- import array
-
- try:
- timezone = json_data['timezone']
- data = json_data['hourly']
- # create arrays
- temp = []
- pressure = []
- humidity = []
- speed = []
- deg = []
- date = []
-
- # loop over all and add to arrays
- for i in range(48):
- x1 = data[i]
- temp.append(x1['temp'])
- pressure.append(x1['pressure'])
- humidity.append(x1['humidity'])
- speed.append(x1['wind_speed'])
- deg.append(x1['wind_deg'])
- date.append(x1['dt'])
-
- # create dictionary
- weather_info = dict(current_time=date,temp=temp,deg=deg,
- speed=speed,humidity=humidity,pressure=pressure,timezone=timezone)
- except KeyError as e:
- print('Something went wrong with parsing the forecast json.')
- raise e
-
- return weather_info
+ return weather_info
\ No newline at end of file
diff --git a/SoftwareTests/CheckTestResults.m b/SoftwareTests/CheckTestResults.m
new file mode 100644
index 0000000..579ad43
--- /dev/null
+++ b/SoftwareTests/CheckTestResults.m
@@ -0,0 +1,49 @@
+classdef CheckTestResults < matlab.unittest.TestCase
+
+ properties (SetAccess = protected)
+ end
+
+ properties (ClassSetupParameter)
+ Project = {currentProject()};
+ end
+
+ properties (TestParameter)
+ Version
+ end
+
+
+ methods (TestParameterDefinition,Static)
+
+ function Version = GetResults(Project)
+ RootFolder = Project.RootFolder;
+ Version = dir(fullfile(RootFolder,"public","TestResults*.txt"));
+ Version = extractBetween([Version.name],"TestResults_",".txt");
+ end
+
+ end
+
+ methods (TestClassSetup)
+
+ function SetUpSmokeTest(testCase,Project)
+ try
+ currentProject;
+ catch
+ error("Project is not loaded.")
+ end
+ end
+
+ end
+
+ methods(Test)
+
+ function CheckResults(testCase,Version)
+ File = fullfile("public","TestResults_"+Version+".txt");
+ Results = readtable(File,TextType="string");
+ if ~all(Results.Passed)
+ error("Some of the tests did not pass.")
+ end
+ end
+
+ end
+
+end
\ No newline at end of file
diff --git a/SoftwareTests/CreateBadge.m b/SoftwareTests/CreateBadge.m
new file mode 100644
index 0000000..c873088
--- /dev/null
+++ b/SoftwareTests/CreateBadge.m
@@ -0,0 +1,28 @@
+% Create the test suite with SmokeTest and Function test if they exist
+Suite = testsuite("CheckTestResults");
+
+% Create a runner with no plugins
+Runner = matlab.unittest.TestRunner.withNoPlugins;
+
+% Run the test suite
+Results = Runner.run(Suite);
+
+% Format the results in a table and save them
+Results = table(Results');
+Results = Results(Results.Passed,:);
+Version = extractBetween(string(Results.Name),"Version=",")");
+
+
+% Format the JSON file
+Badge = struct;
+Badge.schemaVersion = 1;
+Badge.label = "Tested with";
+if size(Results,1) >= 1
+ Badge.color = "success"
+ Badge.message = join(Version," | ");
+else
+ Badge.color = "failure";
+ Badge.message = "Pipeline fails";
+end
+Badge = jsonencode(Badge);
+writelines(Badge,fullfile("Images","TestedWith.json"));
\ No newline at end of file
diff --git a/SoftwareTests/FunctionTests.m b/SoftwareTests/FunctionTests.m
new file mode 100644
index 0000000..c490eb2
--- /dev/null
+++ b/SoftwareTests/FunctionTests.m
@@ -0,0 +1,14 @@
+classdef FunctionTests < matlab.unittest.TestCase
+
+ % https://www.mathworks.com/help/matlab/matlab_prog/use-parameters-in-class-based-tests.html
+
+ methods(Test)
+
+ function IsKnownPythonVersion(testCase)
+ Known = CheckPythonVersion;
+ verifyTrue(testCase,Known)
+ end
+
+ end % methods
+
+end % classdef
\ No newline at end of file
diff --git a/SoftwareTests/OrigSmokeTests.m b/SoftwareTests/OrigSmokeTests.m
new file mode 100644
index 0000000..e9a1427
--- /dev/null
+++ b/SoftwareTests/OrigSmokeTests.m
@@ -0,0 +1,149 @@
+classdef SmokeTests < matlab.unittest.TestCase
+
+ properties (ClassSetupParameter)
+ Project = {''};
+ end
+
+ properties (TestParameter)
+ Scripts;
+ end
+
+ methods (TestParameterDefinition,Static)
+
+ function Scripts = GetScriptName(Project)
+ RootFolder = currentProject().RootFolder;
+ Scripts = dir(fullfile(RootFolder,"Scripts","*.mlx"));
+ Scripts = {Scripts.name};
+ end
+
+ end
+
+ methods (TestClassSetup)
+
+ function SetUpSmokeTest(testCase,Project)
+ try
+ currentProject;
+ catch ME
+ warning("Project is not loaded.")
+ end
+ end
+
+
+ end
+
+
+
+ methods(Test)
+
+ function SmokeRun(testCase,Scripts)
+ Filename = string(Scripts);
+ switch (Filename)
+ case "CreateCurrentWeatherApp.mlx"
+ disp("Skipping " + Filename)
+ case "CheckingTheWeather.mlx"
+ txt = readlines("Response.json");
+ pycode = ["import checkcurrentweather"
+ "import json"
+ ""
+ "json_data = json.loads(txt)"
+ "currentWeather = checkcurrentweather.parse_current_json(json_data)"
+ ];
+ APISmokeTest(testCase,Filename,pycode,txt)
+ case "WeatherForecast.mlx"
+ % txt = readlines("ResponseOneCall.json");
+ % pycode = ["import checkweather"
+ % ""
+ % "json_data = json.loads(txt)"
+ % "currentWeather = checkweather.parse_current_json(json_data)"
+ % "forecastWeather = checkweather.parse_forecast_json(json_data)"
+ % ];
+ % APISmokeTest(testCase,Filename,pycode,txt)
+ case "SampleWeatherDashboard.mlx"
+
+ otherwise
+ SimpleSmokeTest(testCase,Filename)
+ end
+ end
+
+ end
+
+
+ methods (Access = private)
+
+ function APISmokeTest(testCase,Filename,pycode,txt)
+ RootFolder = currentProject().RootFolder;
+ cd(RootFolder)
+ cd Scripts
+ if Filename == "CheckingTheWeather.mlx"
+ [currentWeather] = pyrun(pycode, "currentWeather","txt",txt);
+ elseif Filename == "WeatherForecast.mlx"
+ [currentWeather,forecastWeather] = pyrun(pycode,["currentWeather","forecastWeather"],"txt",txt);
+ end
+
+ disp(">> Running " + Filename);
+ try
+ run(fullfile(Filename));
+ catch ME
+ testCase.verifyTrue(false,ME.message);
+ end
+
+ try
+ % Log the opened figures to the test reports
+ Figures = findall(groot,'Type','figure');
+ Figures = flipud(Figures);
+ if ~isempty(Figures)
+ for f = 1:size(Figures,1)
+ FigDiag = matlab.unittest.diagnostics.FigureDiagnostic(Figures(f));
+ log(testCase,1,FigDiag);
+ end
+ end
+ catch ME
+ disp("Failed to capture images")
+ end
+ close all
+ end
+
+ function RunMyFile(~,Filename)
+ run(Filename);
+ end
+
+ function SimpleSmokeTest(testCase,Filename)
+
+ % Run the Smoke test
+ RootFolder = currentProject().RootFolder;
+ cd(RootFolder)
+ disp(">> Running " + Filename);
+ try
+ RunMyFile(testCase,Filename)
+ catch ME
+ testCase.verifyTrue(false,ME.message);
+ end
+
+ % Log the opened figures to the test reports
+ try
+ Figures = findall(groot,'Type','figure');
+ Figures = flipud(Figures);
+ if ~isempty(Figures)
+ for f = 1:size(Figures,1)
+ FigDiag = matlab.unittest.diagnostics.FigureDiagnostic(Figures(f));
+ log(testCase,1,FigDiag);
+ end
+ end
+ catch ME
+ disp("Failed to capture figures")
+ end
+ close all
+
+ end
+
+ end
+
+ methods (TestClassTeardown)
+
+ function closeAllFigure(testCase)
+ close all force % Close figure windows
+ end
+
+ end % methods (TestClassTeardown)
+
+end
\ No newline at end of file
diff --git a/SoftwareTests/PostFiles/PostCheckingTheWeather.m b/SoftwareTests/PostFiles/PostCheckingTheWeather.m
new file mode 100644
index 0000000..5e1183b
--- /dev/null
+++ b/SoftwareTests/PostFiles/PostCheckingTheWeather.m
@@ -0,0 +1,3 @@
+% Post-run script for CheckingTheWeather.mlx
+% ---- Post-run commands -----
+
diff --git a/SoftwareTests/PostFiles/PostCheckingTheWeatherSoln.m b/SoftwareTests/PostFiles/PostCheckingTheWeatherSoln.m
new file mode 100644
index 0000000..3bca581
--- /dev/null
+++ b/SoftwareTests/PostFiles/PostCheckingTheWeatherSoln.m
@@ -0,0 +1,7 @@
+% Post-run script for CheckingTheWeatherSoln.mlx
+% ---- Post-run commands -----
+
+writelines("",fullfile(currentProject().RootFolder,"Scripts","myAPIkey.txt"))
+if exist(fullfile(currentProject().RootFolder,"InstructorResources","Solutions","Response.json"),"file")
+ delete(fullfile(currentProject().RootFolder,"InstructorResources","Solutions","Response.json"))
+end
\ No newline at end of file
diff --git a/SoftwareTests/PostFiles/PostCreateCurrentWeatherApp.m b/SoftwareTests/PostFiles/PostCreateCurrentWeatherApp.m
new file mode 100644
index 0000000..9530d14
--- /dev/null
+++ b/SoftwareTests/PostFiles/PostCreateCurrentWeatherApp.m
@@ -0,0 +1,3 @@
+% Post-run script for CreateCurrentWeatherApp.mlx
+% ---- Post-run commands -----
+
diff --git a/SoftwareTests/PostFiles/PostCreateCurrentWeatherAppSoln.m b/SoftwareTests/PostFiles/PostCreateCurrentWeatherAppSoln.m
new file mode 100644
index 0000000..197fb02
--- /dev/null
+++ b/SoftwareTests/PostFiles/PostCreateCurrentWeatherAppSoln.m
@@ -0,0 +1,4 @@
+% Post-run script for CreateCurrentWeatherAppSoln.mlx
+% ---- Post-run commands -----
+
+delete(findall(groot,'Name','MATLAB App'))
\ No newline at end of file
diff --git a/SoftwareTests/PostFiles/PostUsingMATLABwithPython.m b/SoftwareTests/PostFiles/PostUsingMATLABwithPython.m
new file mode 100644
index 0000000..9416232
--- /dev/null
+++ b/SoftwareTests/PostFiles/PostUsingMATLABwithPython.m
@@ -0,0 +1,3 @@
+% Post-run script for UsingMATLABwithPython.mlx
+% ---- Post-run commands -----
+
diff --git a/SoftwareTests/PostFiles/PostUsingMATLABwithPythonSoln.m b/SoftwareTests/PostFiles/PostUsingMATLABwithPythonSoln.m
new file mode 100644
index 0000000..e6e41ac
--- /dev/null
+++ b/SoftwareTests/PostFiles/PostUsingMATLABwithPythonSoln.m
@@ -0,0 +1,3 @@
+% Post-run script for UsingMATLABwithPythonSoln.mlx
+% ---- Post-run commands -----
+
diff --git a/SoftwareTests/PostSmokeTest.m b/SoftwareTests/PostSmokeTest.m
new file mode 100644
index 0000000..080cd0b
--- /dev/null
+++ b/SoftwareTests/PostSmokeTest.m
@@ -0,0 +1,66 @@
+function PostSmokeTest(ShowReport)
+arguments
+ ShowReport (1,1) logical = false;
+end
+
+import matlab.unittest.plugins.TestRunnerPlugin;
+
+% Create the runner:
+Runner = matlab.unittest.TestRunner.withTextOutput;
+
+% Create report folder:
+Folder = fullfile(currentProject().RootFolder,"public");
+if ~isfolder(Folder)
+ mkdir(Folder)
+end
+
+% Add HTML plugin:
+Plugin = matlab.unittest.plugins.TestReportPlugin.producingHTML(Folder,...
+ "IncludingPassingDiagnostics",true,...
+ "IncludingCommandWindowText",false,...
+ "LoggingLevel",matlab.automation.Verbosity(1));
+Runner.addPlugin(Plugin);
+
+
+% Create Test Suite
+Suite = testsuite("CheckTestResults");
+
+% Run the test suite
+Results = Runner.run(Suite);
+
+
+% Format the results in a table and save them
+Results = table(Results');
+Version = extractBetween(string(Results.Name),"Version=",")");
+Passed = logical(Results.Passed);
+
+% Add link to other report
+File = fileread(fullfile("public","index.html"));
+for iVer = 1:length(Version)
+ File = replace(File,"Version="+Version(iVer),...
+ sprintf('%s ',Version(iVer),"Version="+Version(iVer)));
+end
+writelines(File,fullfile("public","index.html"),"WriteMode","overwrite");
+
+% Format the JSON file
+Badge = struct;
+Badge.schemaVersion = 1;
+Badge.label = "Test Status";
+if all(Passed)
+ Badge.color = "success";
+ Badge.message = join("R"+Version," | ");
+elseif any(Passed)
+ Badge.color = "yellowgreen";
+ Badge.message = join("R"+Version(Passed)," | ");
+elseif all(~Passed)
+ Badge.color = "critical";
+ Badge.message = join("R"+Version," | ");
+end
+Badge = jsonencode(Badge);
+writelines(Badge,fullfile("Images","TestedWith.json"));
+
+if ShowReport
+ web(fullfile(Folder,"index.html"))
+end
+
+end
\ No newline at end of file
diff --git a/SoftwareTests/PreFiles/PreCheckingTheWeather.m b/SoftwareTests/PreFiles/PreCheckingTheWeather.m
new file mode 100644
index 0000000..13788f4
--- /dev/null
+++ b/SoftwareTests/PreFiles/PreCheckingTheWeather.m
@@ -0,0 +1,17 @@
+% Pre-run script for CheckingTheWeather.mlx
+% ---- Known Issues -----
+KnownIssuesID = "";
+% ---- Pre-run commands -----
+
+txt = readlines("Response.json");
+curpath = pwd;
+mypath = fullfile(currentProject().RootFolder,"Scripts");
+cd(mypath)
+pycode = ["import checkcurrentweather"
+ "import json"
+ ""
+ "json_data = json.loads(txt)"
+ "currentWeather = checkcurrentweather.parse_current_json(json_data)"
+ ];
+[currentWeather] = pyrun(pycode, "currentWeather","txt",txt);
+cd(curpath)
\ No newline at end of file
diff --git a/SoftwareTests/PreFiles/PreCheckingTheWeatherSoln.m b/SoftwareTests/PreFiles/PreCheckingTheWeatherSoln.m
new file mode 100644
index 0000000..fdff0a6
--- /dev/null
+++ b/SoftwareTests/PreFiles/PreCheckingTheWeatherSoln.m
@@ -0,0 +1,23 @@
+% Pre-run script for CheckingTheWeatherSoln.mlx
+% ---- Known Issues -----
+KnownIssuesID = "";
+% ---- Pre-run commands -----
+
+try
+copyfile(fullfile(currentProject().RootFolder,"InternalFiles","Solutions","myAPIkey.txt"),...
+ fullfile(currentProject().RootFolder,"Scripts","myAPIkey.txt"))
+catch
+ copyfile("Response.json",fullfile(currentProject().RootFolder,"InstructorResources","Solutions","Response.json"))
+ pycode = ["import checkcurrentweather"
+ "import json"
+ ""
+ "json_data = json.load(open(""Response.json""))"
+ "currentWeather = checkcurrentweather.parse_current_json(json_data)"
+ ];
+ apikey = "TestString";
+ pyrun = @(txt,out,varargin)TestPyRun(pycode,out,varargin);
+end
+
+function out = TestPyRun(txt,in,varargin)
+out = pyrun(txt,in);
+end
diff --git a/SoftwareTests/PreFiles/PreCreateCurrentWeatherApp.m b/SoftwareTests/PreFiles/PreCreateCurrentWeatherApp.m
new file mode 100644
index 0000000..ca7aa9b
--- /dev/null
+++ b/SoftwareTests/PreFiles/PreCreateCurrentWeatherApp.m
@@ -0,0 +1,6 @@
+% Pre-run script for CreateCurrentWeatherApp.mlx
+% ---- Known Issues -----
+KnownIssuesID = "";
+% ---- Pre-run commands -----
+
+appdesigner = @()disp("Open App Designer here.");
\ No newline at end of file
diff --git a/SoftwareTests/PreFiles/PreCreateCurrentWeatherAppSoln.m b/SoftwareTests/PreFiles/PreCreateCurrentWeatherAppSoln.m
new file mode 100644
index 0000000..ece9e8e
--- /dev/null
+++ b/SoftwareTests/PreFiles/PreCreateCurrentWeatherAppSoln.m
@@ -0,0 +1,7 @@
+% Pre-run script for CreateCurrentWeatherAppSoln.mlx
+% ---- Known Issues -----
+KnownIssuesID = "";
+% ---- Pre-run commands -----
+
+open = @(x)run(x);
+
diff --git a/SoftwareTests/PreFiles/PreUsingMATLABwithPython.m b/SoftwareTests/PreFiles/PreUsingMATLABwithPython.m
new file mode 100644
index 0000000..7a4b22b
--- /dev/null
+++ b/SoftwareTests/PreFiles/PreUsingMATLABwithPython.m
@@ -0,0 +1,5 @@
+% Pre-run script for UsingMATLABwithPython.mlx
+% ---- Known Issues -----
+KnownIssuesID = "";
+% ---- Pre-run commands -----
+
diff --git a/SoftwareTests/PreFiles/PreUsingMATLABwithPythonSoln.m b/SoftwareTests/PreFiles/PreUsingMATLABwithPythonSoln.m
new file mode 100644
index 0000000..d8e1896
--- /dev/null
+++ b/SoftwareTests/PreFiles/PreUsingMATLABwithPythonSoln.m
@@ -0,0 +1,5 @@
+% Pre-run script for UsingMATLABwithPythonSoln.mlx
+% ---- Known Issues -----
+KnownIssuesID = "";
+% ---- Pre-run commands -----
+
diff --git a/SoftwareTests/PreFiles/Response.json b/SoftwareTests/PreFiles/Response.json
new file mode 100644
index 0000000..d8135a4
--- /dev/null
+++ b/SoftwareTests/PreFiles/Response.json
@@ -0,0 +1 @@
+{"coord":{"lon":-71.3468,"lat":42.2775},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"base":"stations","main":{"temp":274.86,"feels_like":270.03,"temp_min":273.44,"temp_max":276.25,"pressure":1003,"humidity":76},"visibility":10000,"wind":{"speed":5.66,"deg":280,"gust":10.8},"clouds":{"all":75},"dt":1710986897,"sys":{"type":2,"id":2005486,"country":"US","sunrise":1710931672,"sunset":1710975450},"timezone":-14400,"id":4944994,"name":"Natick","cod":200}
\ No newline at end of file
diff --git a/SoftwareTests/PreFiles/ResponseOneCall.json b/SoftwareTests/PreFiles/ResponseOneCall.json
new file mode 100644
index 0000000..676ca0b
--- /dev/null
+++ b/SoftwareTests/PreFiles/ResponseOneCall.json
@@ -0,0 +1,114 @@
+{
+ "lat":33.44,
+ "lon":-94.04,
+ "timezone":"America/Chicago",
+ "timezone_offset":-18000,
+ "current":{
+ "dt":1684929490,
+ "sunrise":1684926645,
+ "sunset":1684977332,
+ "temp":292.55,
+ "feels_like":292.87,
+ "pressure":1014,
+ "humidity":89,
+ "dew_point":290.69,
+ "uvi":0.16,
+ "clouds":53,
+ "visibility":10000,
+ "wind_speed":3.13,
+ "wind_deg":93,
+ "wind_gust":6.71,
+ "weather":[
+ {
+ "id":803,
+ "main":"Clouds",
+ "description":"broken clouds",
+ "icon":"04d"
+ }
+ ]
+ },
+ "minutely":[
+ {
+ "dt":1684929540,
+ "precipitation":0
+ }
+ ],
+ "hourly":[
+ {
+ "dt":1684926000,
+ "temp":292.01,
+ "feels_like":292.33,
+ "pressure":1014,
+ "humidity":91,
+ "dew_point":290.51,
+ "uvi":0,
+ "clouds":54,
+ "visibility":10000,
+ "wind_speed":2.58,
+ "wind_deg":86,
+ "wind_gust":5.88,
+ "weather":[
+ {
+ "id":803,
+ "main":"Clouds",
+ "description":"broken clouds",
+ "icon":"04n"
+ }
+ ],
+ "pop":0.15
+ }
+ ],
+ "daily":[
+ {
+ "dt":1684951200,
+ "sunrise":1684926645,
+ "sunset":1684977332,
+ "moonrise":1684941060,
+ "moonset":1684905480,
+ "moon_phase":0.16,
+ "summary":"Expect a day of partly cloudy with rain",
+ "temp":{
+ "day":299.03,
+ "min":290.69,
+ "max":300.35,
+ "night":291.45,
+ "eve":297.51,
+ "morn":292.55
+ },
+ "feels_like":{
+ "day":299.21,
+ "night":291.37,
+ "eve":297.86,
+ "morn":292.87
+ },
+ "pressure":1016,
+ "humidity":59,
+ "dew_point":290.48,
+ "wind_speed":3.98,
+ "wind_deg":76,
+ "wind_gust":8.92,
+ "weather":[
+ {
+ "id":500,
+ "main":"Rain",
+ "description":"light rain",
+ "icon":"10d"
+ }
+ ],
+ "clouds":92,
+ "pop":0.47,
+ "rain":0.15,
+ "uvi":9.23
+ }
+ ],
+ "alerts": [
+ {
+ "sender_name": "NWS Philadelphia - Mount Holly (New Jersey, Delaware, Southeastern Pennsylvania)",
+ "event": "Small Craft Advisory",
+ "start": 1684952747,
+ "end": 1684988747,
+ "description": "...SMALL CRAFT ADVISORY REMAINS IN EFFECT FROM 5 PM THIS\nAFTERNOON TO 3 AM EST FRIDAY...\n* WHAT...North winds 15 to 20 kt with gusts up to 25 kt and seas\n3 to 5 ft expected.\n* WHERE...Coastal waters from Little Egg Inlet to Great Egg\nInlet NJ out 20 nm, Coastal waters from Great Egg Inlet to\nCape May NJ out 20 nm and Coastal waters from Manasquan Inlet\nto Little Egg Inlet NJ out 20 nm.\n* WHEN...From 5 PM this afternoon to 3 AM EST Friday.\n* IMPACTS...Conditions will be hazardous to small craft.",
+ "tags": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/SoftwareTests/Response.json b/SoftwareTests/Response.json
new file mode 100644
index 0000000..d8135a4
--- /dev/null
+++ b/SoftwareTests/Response.json
@@ -0,0 +1 @@
+{"coord":{"lon":-71.3468,"lat":42.2775},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"base":"stations","main":{"temp":274.86,"feels_like":270.03,"temp_min":273.44,"temp_max":276.25,"pressure":1003,"humidity":76},"visibility":10000,"wind":{"speed":5.66,"deg":280,"gust":10.8},"clouds":{"all":75},"dt":1710986897,"sys":{"type":2,"id":2005486,"country":"US","sunrise":1710931672,"sunset":1710975450},"timezone":-14400,"id":4944994,"name":"Natick","cod":200}
\ No newline at end of file
diff --git a/SoftwareTests/ResponseOneCall.json b/SoftwareTests/ResponseOneCall.json
new file mode 100644
index 0000000..85242b8
--- /dev/null
+++ b/SoftwareTests/ResponseOneCall.json
@@ -0,0 +1,119 @@
+
+{
+ "lat":33.44,
+ "lon":-94.04,
+ "timezone":"America/Chicago",
+ "timezone_offset":-18000,
+ "current":{
+ "dt":1684929490,
+ "sunrise":1684926645,
+ "sunset":1684977332,
+ "temp":292.55,
+ "feels_like":292.87,
+ "pressure":1014,
+ "humidity":89,
+ "dew_point":290.69,
+ "uvi":0.16,
+ "clouds":53,
+ "visibility":10000,
+ "wind_speed":3.13,
+ "wind_deg":93,
+ "wind_gust":6.71,
+ "weather":[
+ {
+ "id":803,
+ "main":"Clouds",
+ "description":"broken clouds",
+ "icon":"04d"
+ }
+ ]
+ },
+ "minutely":[
+ {
+ "dt":1684929540,
+ "precipitation":0
+ }
+ ],
+ "hourly":[
+ {
+ "dt":1684926000,
+ "temp":292.01,
+ "feels_like":292.33,
+ "pressure":1014,
+ "humidity":91,
+ "dew_point":290.51,
+ "uvi":0,
+ "clouds":54,
+ "visibility":10000,
+ "wind_speed":2.58,
+ "wind_deg":86,
+ "wind_gust":5.88,
+ "weather":[
+ {
+ "id":803,
+ "main":"Clouds",
+ "description":"broken clouds",
+ "icon":"04n"
+ }
+ ],
+ "pop":0.15
+ }
+ ],
+ "daily":[
+ {
+ "dt":1684951200,
+ "sunrise":1684926645,
+ "sunset":1684977332,
+ "moonrise":1684941060,
+ "moonset":1684905480,
+ "moon_phase":0.16,
+ "summary":"Expect a day of partly cloudy with rain",
+ "temp":{
+ "day":299.03,
+ "min":290.69,
+ "max":300.35,
+ "night":291.45,
+ "eve":297.51,
+ "morn":292.55
+ },
+ "feels_like":{
+ "day":299.21,
+ "night":291.37,
+ "eve":297.86,
+ "morn":292.87
+ },
+ "pressure":1016,
+ "humidity":59,
+ "dew_point":290.48,
+ "wind_speed":3.98,
+ "wind_deg":76,
+ "wind_gust":8.92,
+ "weather":[
+ {
+ "id":500,
+ "main":"Rain",
+ "description":"light rain",
+ "icon":"10d"
+ }
+ ],
+ "clouds":92,
+ "pop":0.47,
+ "rain":0.15,
+ "uvi":9.23
+ }
+ ],
+ "alerts": [
+ {
+ "sender_name": "NWS Philadelphia - Mount Holly (New Jersey, Delaware, Southeastern Pennsylvania)",
+ "event": "Small Craft Advisory",
+ "start": 1684952747,
+ "end": 1684988747,
+ "description": "...SMALL CRAFT ADVISORY REMAINS IN EFFECT FROM 5 PM THIS\nAFTERNOON TO 3 AM EST FRIDAY...\n* WHAT...North winds 15 to 20 kt with gusts up to 25 kt and seas\n3 to 5 ft expected.\n* WHERE...Coastal waters from Little Egg Inlet to Great Egg\nInlet NJ out 20 nm, Coastal waters from Great Egg Inlet to\nCape May NJ out 20 nm and Coastal waters from Manasquan Inlet\nto Little Egg Inlet NJ out 20 nm.\n* WHEN...From 5 PM this afternoon to 3 AM EST Friday.\n* IMPACTS...Conditions will be hazardous to small craft.",
+ "tags": [
+
+ ]
+ }
+ ]
+ }
+
+
\ No newline at end of file
diff --git a/SoftwareTests/ResponseOneCallOneLine.json b/SoftwareTests/ResponseOneCallOneLine.json
new file mode 100644
index 0000000..63c5ef7
--- /dev/null
+++ b/SoftwareTests/ResponseOneCallOneLine.json
@@ -0,0 +1 @@
+{"lat":33.44,"lon":-94.04,"timezone":"America/Chicago","timezone_offset":-18000,"current":{"dt":1684929490,"sunrise":1684926645,"sunset":1684977332,"temp":292.55,"feels_like":292.87,"pressure":1014,"humidity":89,"dew_point":290.69,"uvi":0.16,"clouds":53,"visibility":10000,"wind_speed":3.13,"wind_deg":93,"wind_gust":6.71,"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}]},"minutely":[{"dt":1684929540,"precipitation":0}],"hourly":[{"dt":1684926000,"temp":292.01,"feels_like":292.33,"pressure":1014,"humidity":91,"dew_point":290.51,"uvi":0,"clouds":54,"visibility":10000,"wind_speed":2.58,"wind_deg":86,"wind_gust":5.88,"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"pop":0.15}],"daily":[{"dt":1684951200,"sunrise":1684926645,"sunset":1684977332,"moonrise":1684941060,"moonset":1684905480,"moon_phase":0.16,"summary":"Expect a day of partly cloudy with rain","temp":{"day":299.03,"min":290.69,"max":300.35,"night":291.45,"eve":297.51,"morn":292.55},"feels_like":{"day":299.21,"night":291.37,"eve":297.86,"morn":292.87},"pressure":1016,"humidity":59,"dew_point":290.48,"wind_speed":3.98,"wind_deg":76,"wind_gust":8.92,"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":92,"pop":0.47,"rain":0.15,"uvi":9.23} ],"alerts": [{"sender_name": "NWS Philadelphia - Mount Holly (New Jersey, Delaware, Southeastern Pennsylvania)","event": "Small Craft Advisory","start": 1684952747,"end": 1684988747,"description": "...SMALL CRAFT ADVISORY REMAINS IN EFFECT FROM 5 PM THIS\nAFTERNOON TO 3 AM EST FRIDAY...\n* WHAT...North winds 15 to 20 kt with gusts up to 25 kt and seas\n3 to 5 ft expected.\n* WHERE...Coastal waters from Little Egg Inlet to Great Egg\nInlet NJ out 20 nm, Coastal waters from Great Egg Inlet to\nCape May NJ out 20 nm and Coastal waters from Manasquan Inlet\nto Little Egg Inlet NJ out 20 nm.\n* WHEN...From 5 PM this afternoon to 3 AM EST Friday.\n* IMPACTS...Conditions will be hazardous to small craft.","tags": [ ]}] }
\ No newline at end of file
diff --git a/SoftwareTests/RunAllTests.m b/SoftwareTests/RunAllTests.m
new file mode 100644
index 0000000..046a893
--- /dev/null
+++ b/SoftwareTests/RunAllTests.m
@@ -0,0 +1,44 @@
+function RunAllTests(ShowReport)
+arguments
+ ShowReport (1,1) logical = false;
+end
+
+import matlab.unittest.plugins.TestReportPlugin;
+
+% Create a runner
+Runner = matlab.unittest.TestRunner.withTextOutput;
+Folder = fullfile(currentProject().RootFolder,"public",version("-release"));
+if ~isfolder(Folder)
+ mkdir(Folder)
+else
+ rmdir(Folder,'s')
+ mkdir(Folder)
+end
+Plugin = TestReportPlugin.producingHTML(Folder,...
+ "IncludingPassingDiagnostics",true,...
+ "IncludingCommandWindowText",true,...
+ "LoggingLevel",matlab.automation.Verbosity(1));
+Runner.addPlugin(Plugin);
+
+
+% Create the test suite with SmokeTest and Function test if they exist
+Suite = testsuite("SmokeTests");
+Suite = [Suite testsuite("FunctionTests")];
+Suite = [Suite testsuite("SolnSmokeTests")];
+
+% Run the test suite
+Results = Runner.run(Suite);
+
+if ShowReport
+ web(fullfile(Folder,"index.html"))
+end
+
+% Format the results in a table and save them
+ResultsTable = table(Results')
+writetable(ResultsTable,fullfile(currentProject().RootFolder,...
+ "public","TestResults_"+version("-release")+".txt"));
+
+% Assert success of test
+assertSuccess(Results);
+
+end
diff --git a/SoftwareTests/SmokeTests.m b/SoftwareTests/SmokeTests.m
new file mode 100644
index 0000000..dac5c42
--- /dev/null
+++ b/SoftwareTests/SmokeTests.m
@@ -0,0 +1,152 @@
+classdef SmokeTests < matlab.unittest.TestCase
+
+ properties
+ RootFolder
+ sparedEditors % Files already open when the test starts
+ end % properties
+
+ properties (ClassSetupParameter)
+ Project = {currentProject()};
+ end % ClassSetupParameter
+
+ properties (TestParameter)
+ File;
+ end % TestParameter
+
+ methods (TestParameterDefinition,Static)
+
+ function File = RetrieveFile(Project) %#ok
+ % Retrieve student template files:
+ RootFolder = currentProject().RootFolder;
+ File = dir(fullfile(RootFolder,"Scripts","*.m"));
+ File = [File; dir(fullfile(RootFolder,"Scripts","*.mlx"))];
+ File = {File.name};
+ end
+
+ end % Static TestParameterDefinition
+
+ methods (TestClassSetup)
+
+ function SetUpSmokeTest(testCase,Project) %#ok
+ % Navigate to project root folder:
+ testCase.RootFolder = Project.RootFolder;
+ cd(testCase.RootFolder)
+
+ % Close the StartUp app if still open:
+ delete(findall(groot,'Name','StartUp App'))
+
+ % Log MATLAB version:
+ testCase.log("Running in " + version)
+ end
+
+ end % TestClassSetup
+
+ methods(TestMethodSetup)
+ function recordEditorsToSpare(testCase)
+ testCase.sparedEditors = matlab.desktop.editor.getAll;
+ testCase.sparedEditors = {testCase.sparedEditors.Filename};
+ end
+ end % TestMethodSetup
+
+ methods(TestMethodTeardown)
+ function closeOpenedEditors_thenDeleteWorkingDir(testCase)
+ openEditors = matlab.desktop.editor.getAll;
+ for editor=openEditors(1:end)
+ if any(strcmp(editor.Filename, testCase.sparedEditors))
+ continue;
+ end
+ % if not on our list, close the file
+ editor.close();
+ end
+ end
+ end % TestMethodTeardown
+
+ methods(Test)
+
+ function SmokeRun(testCase,File)
+
+ % Navigate to project root folder:
+ cd(testCase.RootFolder)
+ FileToRun = string(File);
+
+ % Pre-test:
+ PreFiles = CheckPreFile(testCase,FileToRun);
+ run(PreFiles);
+
+ % Run SmokeTest
+ disp(">> Running " + FileToRun);
+ try
+ run(fullfile("Scripts",FileToRun));
+ catch ME
+
+ end
+
+ % Post-test:
+ PostFiles = CheckPostFile(testCase,FileToRun);
+ run(PostFiles)
+
+ % Log every figure created during run:
+ Figures = findall(groot,'Type','figure');
+ Figures = flipud(Figures);
+ if ~isempty(Figures)
+ for f = 1:size(Figures,1)
+ if ~isempty(Figures(f).Number)
+ FigDiag = matlab.unittest.diagnostics.FigureDiagnostic(Figures(f),'Formats','png');
+ log(testCase,1,FigDiag);
+ end
+ end
+ end
+
+ % Close all figures and Simulink models
+ close all force
+ if any(matlab.addons.installedAddons().Name == "Simulink")
+ bdclose all
+ end
+
+ % Rethrow error if any
+ if exist("ME","var")
+ if ~any(strcmp(ME.identifier,KnownIssuesID))
+ rethrow(ME)
+ end
+ end
+
+ end
+
+ end % Test Methods
+
+
+ methods (Access = private)
+
+ function Path = CheckPreFile(testCase,Filename)
+ PreFile = "Pre"+extractBefore(Filename,".m")+".m";
+ PreFilePath = fullfile(testCase.RootFolder,"SoftwareTests","PreFiles",PreFile);
+ if ~isfolder(fullfile(testCase.RootFolder,"SoftwareTests/PreFiles"))
+ mkdir(fullfile(testCase.RootFolder,"SoftwareTests/PreFiles"))
+ end
+ if ~isfile(PreFilePath)
+ writelines("% Pre-run script for "+Filename,PreFilePath)
+ writelines("% ---- Known Issues -----",PreFilePath,'WriteMode','append');
+ writelines("KnownIssuesID = "+char(34)+char(34)+";",PreFilePath,'WriteMode','append');
+ writelines("% ---- Pre-run commands -----",PreFilePath,'WriteMode','append');
+ writelines(" ",PreFilePath,'WriteMode','append');
+ end
+ Path = PreFilePath;
+ end
+
+ function Path = CheckPostFile(testCase,Filename)
+ PostFile = "Post"+extractBefore(Filename,".m")+".m";
+ PostFilePath = fullfile(testCase.RootFolder,"SoftwareTests","PostFiles",PostFile);
+ if ~isfolder(fullfile(testCase.RootFolder,"SoftwareTests/PostFiles"))
+ mkdir(fullfile(testCase.RootFolder,"SoftwareTests/PostFiles"))
+ end
+ if ~isfile(PostFilePath)
+ writelines("% Post-run script for "+Filename,PostFilePath)
+ writelines("% ---- Post-run commands -----",PostFilePath,'WriteMode','append');
+ writelines(" ",PostFilePath,'WriteMode','append');
+ end
+ Path = PostFilePath;
+ end
+
+ end % Private Methods
+
+end % Smoketests
\ No newline at end of file
diff --git a/SoftwareTests/SolnSmokeTests.m b/SoftwareTests/SolnSmokeTests.m
new file mode 100644
index 0000000..7caeb21
--- /dev/null
+++ b/SoftwareTests/SolnSmokeTests.m
@@ -0,0 +1,177 @@
+classdef SolnSmokeTests < matlab.unittest.TestCase
+
+ properties
+ RootFolder
+ isSolnOnPath
+ sparedEditors % Track open files
+ end % properties
+
+ properties (ClassSetupParameter)
+ Project = {currentProject()};
+ end % ClassSetupParameter
+
+ methods(TestMethodSetup)
+ function recordEditorsToSpare(testCase)
+ testCase.sparedEditors = matlab.desktop.editor.getAll;
+ testCase.sparedEditors = {testCase.sparedEditors.Filename};
+ end
+ end % TestMethodSetup
+
+ methods(TestMethodTeardown)
+ function closeOpenedEditors_thenDeleteWorkingDir(testCase)
+ openEditors = matlab.desktop.editor.getAll;
+ for editor=openEditors(1:end)
+ if any(strcmp(editor.Filename, testCase.sparedEditors))
+ continue;
+ end
+ % if not on our list, close the file
+ editor.close();
+ end
+ end
+ end % TestMethodTeardown
+
+ properties (TestParameter)
+ File;
+ end % TestParameter
+
+ methods (TestParameterDefinition,Static)
+
+ function File = GetScriptName(Project)
+ % Retrieve student template files:
+ RootFolder = Project.RootFolder;
+ File = dir(fullfile(RootFolder,"Scripts","*.m"));
+ File = [File; dir(fullfile(RootFolder,"Scripts","*.mlx"))];
+ File = {File.name};
+ end
+
+ end % Static TestParameterDefinition
+
+ methods (TestClassSetup)
+
+ function SetUpPath(testCase,Project)
+ % Navigate to project root folder:
+ testCase.RootFolder = Project.RootFolder;
+ cd(testCase.RootFolder)
+
+ % Check that solutions are on path:
+ testCase.isSolnOnPath = isfolder("Solutions");
+ if testCase.isSolnOnPath == 0
+ addpath(genpath(fullfile(testCase.RootFolder,"InstructorResources","Solutions")))
+ end
+
+ % Close the StartUp app if still open:
+ delete(findall(groot,'Name','StartUp App'))
+
+ % Log MATLAB version:
+ testCase.log("Running in " + version)
+
+ end % function setUpPath
+
+ end % methods (TestClassSetup)
+
+ methods(Test)
+
+ % Check that solutions files exist for each of the student
+ % templates
+ function ExistSolns(testCase,File)
+ SolutionName = replace(string(File),".m","Soln.m");
+ assert(exist(SolutionName,"file"),"Missing solutions for "+File);
+ end
+
+
+ function SmokeRun(testCase,File)
+
+ % Navigate to project root folder:
+ cd(testCase.RootFolder)
+ FileToRun = replace(string(File),".m","Soln.m");
+
+ % Pre-test:
+ PreFiles = CheckPreFile(testCase,FileToRun);
+ run(PreFiles);
+
+ % Run SmokeTest
+ disp(">> Running " + FileToRun);
+ try
+ run(fullfile("InstructorResources","Solutions",FileToRun));
+ catch ME
+
+ end
+
+ % Post-test:
+ PostFiles = CheckPostFile(testCase,FileToRun);
+ run(PostFiles)
+
+ % Log every figure created during run:
+ Figures = findall(groot,'Type','figure');
+ Figures = flipud(Figures);
+ if ~isempty(Figures)
+ for f = 1:size(Figures,1)
+ if ~isempty(Figures(f).Number)
+ FigDiag = matlab.unittest.diagnostics.FigureDiagnostic(Figures(f),'Formats','png');
+ log(testCase,1,FigDiag);
+ end
+ end
+ end
+
+ % Close all figures and Simulink models
+ close all force
+ if any(matlab.addons.installedAddons().Name == "Simulink")
+ bdclose all
+ end
+
+ % Rethrow error if any
+ if exist("ME","var")
+ if ~any(strcmp(ME.identifier,KnownIssuesID))
+ rethrow(ME)
+ end
+ end
+
+ end
+
+ end % Test Methods
+
+ methods (Access = private)
+
+ function Path = CheckPreFile(testCase,Filename)
+ PreFile = "Pre"+extractBefore(Filename,".m")+".m";
+ PreFilePath = fullfile(testCase.RootFolder,"SoftwareTests","PreFiles",PreFile);
+ if ~isfolder(fullfile(testCase.RootFolder,"SoftwareTests/PreFiles"))
+ mkdir(fullfile(testCase.RootFolder,"SoftwareTests/PreFiles"))
+ end
+ if ~isfile(PreFilePath)
+ writelines("% Pre-run script for "+Filename,PreFilePath)
+ writelines("% ---- Known Issues -----",PreFilePath,'WriteMode','append');
+ writelines("KnownIssuesID = "+char(34)+char(34)+";",PreFilePath,'WriteMode','append');
+ writelines("% ---- Pre-run commands -----",PreFilePath,'WriteMode','append');
+ writelines(" ",PreFilePath,'WriteMode','append');
+ end
+ Path = PreFilePath;
+ end
+
+ function Path = CheckPostFile(testCase,Filename)
+ PostFile = "Post"+extractBefore(Filename,".m")+".m";
+ PostFilePath = fullfile(testCase.RootFolder,"SoftwareTests","PostFiles",PostFile);
+ if ~isfolder(fullfile(testCase.RootFolder,"SoftwareTests/PostFiles"))
+ mkdir(fullfile(testCase.RootFolder,"SoftwareTests/PostFiles"))
+ end
+ if ~isfile(PostFilePath)
+ writelines("% Post-run script for "+Filename,PostFilePath)
+ writelines("% ---- Post-run commands -----",PostFilePath,'WriteMode','append');
+ writelines(" ",PostFilePath,'WriteMode','append');
+ end
+ Path = PostFilePath;
+ end
+
+ end % Private Access Methods
+
+ methods (TestClassTeardown)
+
+ function ResetPath(testCase)
+ if ~testCase.isSolnOnPath && exist("Solutions","dir")
+ rmpath(genpath(fullfile(currentProject().RootFolder,"InstructorResources","Solutions")))
+ end
+ end
+
+ end % TestClassTeardown
+
+end % SolnSmokeTests
diff --git a/SoftwareTests/TestResults_R2023a.txt b/SoftwareTests/TestResults_R2023a.txt
new file mode 100644
index 0000000..5c9f3b0
--- /dev/null
+++ b/SoftwareTests/TestResults_R2023a.txt
@@ -0,0 +1,6 @@
+Name,Passed,Failed,Incomplete,Duration,Details
+SmokeTests[Project=0x0_char]/SmokeRun(Scripts=CheckingTheWeather.mlx),1,0,0,8.2960691,
+SmokeTests[Project=0x0_char]/SmokeRun(Scripts=CreateCurrentWeatherApp.mlx),1,0,0,0.0004901,
+SmokeTests[Project=0x0_char]/SmokeRun(Scripts=SampleWeatherDashboard.mlx),1,0,0,0.0004588,
+SmokeTests[Project=0x0_char]/SmokeRun(Scripts=UsingMATLABwithPython.mlx),1,0,0,2.2924885,
+SmokeTests[Project=0x0_char]/SmokeRun(Scripts=WeatherForecast.mlx),1,0,0,0.3437829,
diff --git a/SoftwareTests/TestResults_R2024a.txt b/SoftwareTests/TestResults_R2024a.txt
new file mode 100644
index 0000000..73f4a8d
--- /dev/null
+++ b/SoftwareTests/TestResults_R2024a.txt
@@ -0,0 +1,6 @@
+Name,Passed,Failed,Incomplete,Duration,Details
+SmokeTests[Project=0x0_char]/SmokeRun(Scripts=CheckingTheWeather.mlx),1,0,0,0.1316994,
+SmokeTests[Project=0x0_char]/SmokeRun(Scripts=CreateCurrentWeatherApp.mlx),1,0,0,0.0003877,
+SmokeTests[Project=0x0_char]/SmokeRun(Scripts=SampleWeatherDashboard.mlx),1,0,0,0.000197,
+SmokeTests[Project=0x0_char]/SmokeRun(Scripts=UsingMATLABwithPython.mlx),1,0,0,0.3888675,
+SmokeTests[Project=0x0_char]/SmokeRun(Scripts=WeatherForecast.mlx),1,0,0,0.0044386,
diff --git a/UsingMATLABwithPython.mlx b/UsingMATLABwithPython.mlx
deleted file mode 100644
index 7a389f6..0000000
Binary files a/UsingMATLABwithPython.mlx and /dev/null differ
diff --git a/Utilities/ProjectShutdown.m b/Utilities/ProjectShutdown.m
new file mode 100644
index 0000000..8c3c77c
--- /dev/null
+++ b/Utilities/ProjectShutdown.m
@@ -0,0 +1,2 @@
+% Close the StartUp app if still open:
+delete(findall(groot,'Name','StartUp App'))
\ No newline at end of file
diff --git a/Utilities/ProjectStartupApp.m b/Utilities/ProjectStartupApp.m
new file mode 100644
index 0000000..0cb0ebb
--- /dev/null
+++ b/Utilities/ProjectStartupApp.m
@@ -0,0 +1,322 @@
+classdef ProjectStartupApp < matlab.apps.AppBase
+
+ % Properties that correspond to app components
+ properties (Access = public)
+ StartUpAppUIFigure matlab.ui.Figure
+ FeedBackPanel matlab.ui.container.Panel
+ FeedBackGrid matlab.ui.container.GridLayout
+ ReviewTitle matlab.ui.control.Label
+ ReviewText matlab.ui.control.Label
+ OtherButton matlab.ui.control.Button
+ StudentButton matlab.ui.control.Button
+ FacultyButton matlab.ui.control.Button
+ Q1 matlab.ui.control.Label
+ WelcomePanel matlab.ui.container.Panel
+ WelcomeGrid matlab.ui.container.GridLayout
+ WelcomeTitle matlab.ui.control.Label
+ CoverImage matlab.ui.control.Image
+ ReviewUsButton matlab.ui.control.Button
+ READMEButton matlab.ui.control.Button
+ MainMenuButton matlab.ui.control.Button
+ end
+
+ % Properties to be modified
+ properties (Access = private)
+ GitHubOrganization = "MathWorks-Teaching-Resources"; % Description
+ GitHubRepository = "Programming-A-Starter-Project-Using-MATLAB-and-Python";
+ ImagePath {mustBeFile} = fullfile("Images","windTokyo.gif");
+ end
+
+ properties (Access = private)
+ InitPosition;
+ ProjectName;
+ end
+
+ methods (Access = private, Static)
+
+ function saveSettings(isReviewed,numLoad)
+ try
+ save(fullfile("Utilities","ProjectSettings.mat"),"isReviewed","numLoad");
+ catch
+ end
+ end
+
+ end
+
+
+ % Callbacks that handle component events
+ methods (Access = private)
+
+ % Code that executes after component creation
+ function startupFcn(app)
+
+ % Copy title and set cover image
+ app.ProjectName = currentProject().Name;
+ app.WelcomeTitle.Text = app.ProjectName;
+ app.ReviewTitle.Text = app.WelcomeTitle.Text;
+ app.CoverImage.ImageSource = app.ImagePath;
+
+ % Switch tab to review if has not been reviewed yet
+ if isfile(fullfile("Utilities","ProjectSettings.mat"))
+ load(fullfile("Utilities","ProjectSettings.mat"),"isReviewed","numLoad");
+ numLoad = numLoad + 1; % Increment counter
+ else
+ isReviewed = false;
+ numLoad = 1; % Initialize counter
+ end
+
+ % Select tab to display
+ if ~isReviewed && numLoad > 2
+ isReviewed = true;
+ app.FeedBackGrid.Parent = app.StartUpAppUIFigure;
+ else
+ app.WelcomeGrid.Parent = app.StartUpAppUIFigure;
+ end
+ app.InitPosition = app.StartUpAppUIFigure.Position;
+
+ % Save new settings
+ app.saveSettings(isReviewed,numLoad)
+
+ end
+
+ % Close request function: StartUpAppUIFigure
+ function StartUpAppUIFigureCloseRequest(app, event)
+ if event.Source == app.READMEButton
+ open README.mlx
+ elseif event.Source == app.MainMenuButton
+ open MainMenu.mlx
+ elseif event.Source == app.FacultyButton
+ open MainMenu.mlx
+ elseif event.Source == app.StudentButton
+ open MainMenu.mlx
+ elseif event.Source == app.OtherButton
+ open MainMenu.mlx
+ else
+ disp("Thank you for your time.")
+ end
+ delete(app)
+ end
+
+ % Button pushed function: MainMenuButton
+ function MainMenuButtonPushed(app, event)
+ StartUpAppUIFigureCloseRequest(app,event)
+ end
+
+ % Button pushed function: FacultyButton
+ function FacultyButtonPushed(app, event)
+ % Open Faculty Form
+ import matlab.net.*
+ % Create the URI object with the base URL
+ uri = URI('https://forms.office.com/Pages/ResponsePage.aspx','literal');
+ % Set the Query property with an array of QueryParameter objects
+ uri.Query = [
+ QueryParameter('id', 'ETrdmUhDaESb3eUHKx3B5mlcO9AKxC5AgMAKBg6OKuBUNTVXVlBTS0lOU0hPRExYMldGWldVQUhIRC4u')
+ QueryParameter('r2017080ed20546d1a2db18fe36421929', app.ProjectName)
+ ];
+ web(strrep(uri.EncodedURI,"+","%20"))
+ StartUpAppUIFigureCloseRequest(app,event)
+ end
+
+ % Button pushed function: StudentButton
+ function StudentButtonPushed(app, event)
+ % Open Student Form
+ import matlab.net.*
+ % Create the URI object with the base URL
+ uri = URI('https://forms.office.com/Pages/ResponsePage.aspx','literal');
+ % Set the Query property with an array of QueryParameter objects
+ uri.Query = [
+ QueryParameter('id', 'ETrdmUhDaESb3eUHKx3B5mlcO9AKxC5AgMAKBg6OKuBUNlNBOVRZSDZHT1VTMzA4MjdHSUdVR0o3Vy4u')
+ QueryParameter('r362e367caa234debbf4f65a58a0338e6', app.ProjectName)
+ ];
+ web(strrep(uri.EncodedURI,"+","%20"))
+ StartUpAppUIFigureCloseRequest(app,event)
+ end
+
+ % Button pushed function: OtherButton
+ function OtherButtonPushed(app, event)
+ % Open Student Form
+ import matlab.net.*
+ % Create the URI object with the base URL
+ uri = URI('https://forms.office.com/Pages/ResponsePage.aspx','literal');
+ % Set the Query property with an array of QueryParameter objects
+ uri.Query = [
+ QueryParameter('id', 'ETrdmUhDaESb3eUHKx3B5mlcO9AKxC5AgMAKBg6OKuBUNlNBOVRZSDZHT1VTMzA4MjdHSUdVR0o3Vy4u')
+ QueryParameter('r362e367caa234debbf4f65a58a0338e6', app.ProjectName)
+ ];
+ web(strrep(uri.EncodedURI,"+","%20"))
+ StartUpAppUIFigureCloseRequest(app,event)
+ end
+
+ % Button pushed function: ReviewUsButton
+ function ReviewUsButtonPushed(app, event)
+ app.WelcomeGrid.Parent = app.WelcomePanel;
+ app.FeedBackGrid.Parent = app.StartUpAppUIFigure;
+ end
+
+ % Button pushed function: READMEButton
+ function READMEButtonPushed(app, event)
+ StartUpAppUIFigureCloseRequest(app,event)
+ end
+ end
+
+ % Component initialization
+ methods (Access = private)
+
+ % Create UIFigure and components
+ function createComponents(app)
+
+ % Create StartUpAppUIFigure and hide until all components are created
+ app.StartUpAppUIFigure = uifigure('Visible', 'off');
+ app.StartUpAppUIFigure.AutoResizeChildren = 'off';
+ app.StartUpAppUIFigure.Position = [100 100 276 430];
+ app.StartUpAppUIFigure.Name = 'StartUp App';
+ app.StartUpAppUIFigure.CloseRequestFcn = createCallbackFcn(app, @StartUpAppUIFigureCloseRequest, true);
+
+ % Create WelcomePanel
+ app.WelcomePanel = uipanel(app.StartUpAppUIFigure);
+ app.WelcomePanel.AutoResizeChildren = 'off';
+ app.WelcomePanel.Position = [-551 33 244 410];
+
+ % Create WelcomeGrid
+ app.WelcomeGrid = uigridlayout(app.WelcomePanel);
+ app.WelcomeGrid.ColumnWidth = {'1x', '8x', '1x'};
+ app.WelcomeGrid.RowHeight = {'2x', '5x', '1x', '1x', '1x'};
+
+ % Create MainMenuButton
+ app.MainMenuButton = uibutton(app.WelcomeGrid, 'push');
+ app.MainMenuButton.ButtonPushedFcn = createCallbackFcn(app, @MainMenuButtonPushed, true);
+ app.MainMenuButton.FontSize = 18;
+ app.MainMenuButton.Layout.Row = 3;
+ app.MainMenuButton.Layout.Column = 2;
+ app.MainMenuButton.Text = 'Main Menu';
+
+ % Create READMEButton
+ app.READMEButton = uibutton(app.WelcomeGrid, 'push');
+ app.READMEButton.ButtonPushedFcn = createCallbackFcn(app, @READMEButtonPushed, true);
+ app.READMEButton.FontSize = 18;
+ app.READMEButton.Layout.Row = 4;
+ app.READMEButton.Layout.Column = 2;
+ app.READMEButton.Text = 'README';
+
+ % Create ReviewUsButton
+ app.ReviewUsButton = uibutton(app.WelcomeGrid, 'push');
+ app.ReviewUsButton.ButtonPushedFcn = createCallbackFcn(app, @ReviewUsButtonPushed, true);
+ app.ReviewUsButton.FontSize = 18;
+ app.ReviewUsButton.Layout.Row = 5;
+ app.ReviewUsButton.Layout.Column = 2;
+ app.ReviewUsButton.Text = 'Review Us';
+
+ % Create CoverImage
+ app.CoverImage = uiimage(app.WelcomeGrid);
+ app.CoverImage.Layout.Row = 2;
+ app.CoverImage.Layout.Column = [1 3];
+ app.CoverImage.ImageSource = 'windTokyo.gif';
+
+ % Create WelcomeTitle
+ app.WelcomeTitle = uilabel(app.WelcomeGrid);
+ app.WelcomeTitle.HorizontalAlignment = 'center';
+ app.WelcomeTitle.VerticalAlignment = 'top';
+ app.WelcomeTitle.WordWrap = 'on';
+ app.WelcomeTitle.FontSize = 24;
+ app.WelcomeTitle.FontWeight = 'bold';
+ app.WelcomeTitle.Layout.Row = 1;
+ app.WelcomeTitle.Layout.Column = [1 3];
+ app.WelcomeTitle.Text = '';
+
+ % Create FeedBackPanel
+ app.FeedBackPanel = uipanel(app.StartUpAppUIFigure);
+ app.FeedBackPanel.AutoResizeChildren = 'off';
+ app.FeedBackPanel.Position = [-291 33 236 409];
+
+ % Create FeedBackGrid
+ app.FeedBackGrid = uigridlayout(app.FeedBackPanel);
+ app.FeedBackGrid.ColumnWidth = {'1x', '8x', '1x'};
+ app.FeedBackGrid.RowHeight = {'2x', '3x', '2x', '1x', '1x', '1x'};
+
+ % Create Q1
+ app.Q1 = uilabel(app.FeedBackGrid);
+ app.Q1.HorizontalAlignment = 'center';
+ app.Q1.WordWrap = 'on';
+ app.Q1.FontSize = 18;
+ app.Q1.FontWeight = 'bold';
+ app.Q1.Layout.Row = 3;
+ app.Q1.Layout.Column = [1 3];
+ app.Q1.Text = 'What describes you best?';
+
+ % Create FacultyButton
+ app.FacultyButton = uibutton(app.FeedBackGrid, 'push');
+ app.FacultyButton.ButtonPushedFcn = createCallbackFcn(app, @FacultyButtonPushed, true);
+ app.FacultyButton.FontSize = 18;
+ app.FacultyButton.Layout.Row = 4;
+ app.FacultyButton.Layout.Column = 2;
+ app.FacultyButton.Text = 'Faculty';
+
+ % Create StudentButton
+ app.StudentButton = uibutton(app.FeedBackGrid, 'push');
+ app.StudentButton.ButtonPushedFcn = createCallbackFcn(app, @StudentButtonPushed, true);
+ app.StudentButton.FontSize = 18;
+ app.StudentButton.Layout.Row = 5;
+ app.StudentButton.Layout.Column = 2;
+ app.StudentButton.Text = 'Student';
+
+ % Create OtherButton
+ app.OtherButton = uibutton(app.FeedBackGrid, 'push');
+ app.OtherButton.ButtonPushedFcn = createCallbackFcn(app, @OtherButtonPushed, true);
+ app.OtherButton.FontSize = 18;
+ app.OtherButton.Layout.Row = 6;
+ app.OtherButton.Layout.Column = 2;
+ app.OtherButton.Text = 'Other';
+
+ % Create ReviewText
+ app.ReviewText = uilabel(app.FeedBackGrid);
+ app.ReviewText.HorizontalAlignment = 'center';
+ app.ReviewText.WordWrap = 'on';
+ app.ReviewText.FontSize = 14;
+ app.ReviewText.Layout.Row = 2;
+ app.ReviewText.Layout.Column = [1 3];
+ app.ReviewText.Text = 'Please help us improve your experience by answering a few questions.';
+
+ % Create ReviewTitle
+ app.ReviewTitle = uilabel(app.FeedBackGrid);
+ app.ReviewTitle.HorizontalAlignment = 'center';
+ app.ReviewTitle.VerticalAlignment = 'top';
+ app.ReviewTitle.WordWrap = 'on';
+ app.ReviewTitle.FontSize = 24;
+ app.ReviewTitle.FontWeight = 'bold';
+ app.ReviewTitle.Layout.Row = 1;
+ app.ReviewTitle.Layout.Column = [1 3];
+ app.ReviewTitle.Text = '';
+
+ % Show the figure after all components are created
+ app.StartUpAppUIFigure.Visible = 'on';
+ end
+ end
+
+ % App creation and deletion
+ methods (Access = public)
+
+ % Construct app
+ function app = ProjectStartupApp
+
+ % Create UIFigure and components
+ createComponents(app)
+
+ % Register the app with App Designer
+ registerApp(app, app.StartUpAppUIFigure)
+
+ % Execute the startup function
+ runStartupFcn(app, @startupFcn)
+
+ if nargout == 0
+ clear app
+ end
+ end
+
+ % Code that executes before app deletion
+ function delete(app)
+
+ % Delete UIFigure when app is deleted
+ delete(app.StartUpAppUIFigure)
+ end
+ end
+end
\ No newline at end of file
diff --git a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/90gVWNHk1C35z8jvR-PGomhcMqAp.xml b/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/90gVWNHk1C35z8jvR-PGomhcMqAp.xml
deleted file mode 100644
index 438a229..0000000
--- a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/90gVWNHk1C35z8jvR-PGomhcMqAp.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/X5VMcdhMX1-1XVsQsrBIibQhm2Qp.xml b/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/X5VMcdhMX1-1XVsQsrBIibQhm2Qp.xml
deleted file mode 100644
index 050422b..0000000
--- a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/X5VMcdhMX1-1XVsQsrBIibQhm2Qp.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/txvWpnSOoi78sA8cwulqXkK1MG4p.xml b/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/txvWpnSOoi78sA8cwulqXkK1MG4p.xml
deleted file mode 100644
index ea1f4a6..0000000
--- a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/txvWpnSOoi78sA8cwulqXkK1MG4p.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/5R7G30JHZVF_lDxt6auPkBjLcVUd.xml b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/5R7G30JHZVF_lDxt6auPkBjLcVUd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/5R7G30JHZVF_lDxt6auPkBjLcVUd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/5R7G30JHZVF_lDxt6auPkBjLcVUp.xml b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/5R7G30JHZVF_lDxt6auPkBjLcVUp.xml
new file mode 100644
index 0000000..2ca006b
--- /dev/null
+++ b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/5R7G30JHZVF_lDxt6auPkBjLcVUp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/pK1REetAkuQtB5n4SKwdAbVpYIcd.xml b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/QEd0x6jBcKf03RgXQ3y07QAWBCsd.xml
similarity index 100%
rename from resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/pK1REetAkuQtB5n4SKwdAbVpYIcd.xml
rename to resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/QEd0x6jBcKf03RgXQ3y07QAWBCsd.xml
diff --git a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/pK1REetAkuQtB5n4SKwdAbVpYIcp.xml b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/QEd0x6jBcKf03RgXQ3y07QAWBCsp.xml
similarity index 100%
rename from resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/pK1REetAkuQtB5n4SKwdAbVpYIcp.xml
rename to resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/QEd0x6jBcKf03RgXQ3y07QAWBCsp.xml
diff --git a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/90gVWNHk1C35z8jvR-PGomhcMqAd.xml b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/_kanDHLwZvrSM1wrb2rL3R-TtpAd.xml
similarity index 100%
rename from resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/90gVWNHk1C35z8jvR-PGomhcMqAd.xml
rename to resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/_kanDHLwZvrSM1wrb2rL3R-TtpAd.xml
diff --git a/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/_kanDHLwZvrSM1wrb2rL3R-TtpAp.xml b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/_kanDHLwZvrSM1wrb2rL3R-TtpAp.xml
new file mode 100644
index 0000000..7f3884f
--- /dev/null
+++ b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/_kanDHLwZvrSM1wrb2rL3R-TtpAp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/X5VMcdhMX1-1XVsQsrBIibQhm2Qd.xml b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/b4fK1nwNVcMFfH2HWk_9bHC2cXcd.xml
similarity index 100%
rename from resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/X5VMcdhMX1-1XVsQsrBIibQhm2Qd.xml
rename to resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/b4fK1nwNVcMFfH2HWk_9bHC2cXcd.xml
diff --git a/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/b4fK1nwNVcMFfH2HWk_9bHC2cXcp.xml b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/b4fK1nwNVcMFfH2HWk_9bHC2cXcp.xml
new file mode 100644
index 0000000..cc303be
--- /dev/null
+++ b/resources/project/2zjcQkVJSJ_AwC9M8R9BTSESRzc/b4fK1nwNVcMFfH2HWk_9bHC2cXcp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUd.xml b/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUd.xml
new file mode 100644
index 0000000..ff2009c
--- /dev/null
+++ b/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUp.xml b/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUp.xml
new file mode 100644
index 0000000..3b8316b
--- /dev/null
+++ b/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/-kvj53q_l7Lhz3DXOqqQqn6H9Y8d.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/-Yp4iI7AkN0RXWsqH_qBv8BSoUsd.xml
similarity index 100%
rename from resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/-kvj53q_l7Lhz3DXOqqQqn6H9Y8d.xml
rename to resources/project/BT5hWoz-UTefONdqForZyI91O8Y/-Yp4iI7AkN0RXWsqH_qBv8BSoUsd.xml
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/-Yp4iI7AkN0RXWsqH_qBv8BSoUsp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/-Yp4iI7AkN0RXWsqH_qBv8BSoUsp.xml
new file mode 100644
index 0000000..3b0739e
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/-Yp4iI7AkN0RXWsqH_qBv8BSoUsp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/1pYehALnaCNxtxsVT8HUsm31wjod.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/5wkpcXVsAhrdVuZJuRCjlxSek_Yd.xml
similarity index 100%
rename from resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/1pYehALnaCNxtxsVT8HUsm31wjod.xml
rename to resources/project/BT5hWoz-UTefONdqForZyI91O8Y/5wkpcXVsAhrdVuZJuRCjlxSek_Yd.xml
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/5wkpcXVsAhrdVuZJuRCjlxSek_Yp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/5wkpcXVsAhrdVuZJuRCjlxSek_Yp.xml
new file mode 100644
index 0000000..4cf13cf
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/5wkpcXVsAhrdVuZJuRCjlxSek_Yp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/iJQ6ISymCE_oVhqvDHiIgzDCXjEd.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/897K1ZIAIxWZa69h7rzaFEkJJ1Yd.xml
similarity index 100%
rename from resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/iJQ6ISymCE_oVhqvDHiIgzDCXjEd.xml
rename to resources/project/BT5hWoz-UTefONdqForZyI91O8Y/897K1ZIAIxWZa69h7rzaFEkJJ1Yd.xml
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/897K1ZIAIxWZa69h7rzaFEkJJ1Yp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/897K1ZIAIxWZa69h7rzaFEkJJ1Yp.xml
new file mode 100644
index 0000000..80dfd38
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/897K1ZIAIxWZa69h7rzaFEkJJ1Yp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/CNywfkA_sVJKQVIu_dt3FgNM43gd.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/CNywfkA_sVJKQVIu_dt3FgNM43gd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/CNywfkA_sVJKQVIu_dt3FgNM43gd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/CNywfkA_sVJKQVIu_dt3FgNM43gp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/CNywfkA_sVJKQVIu_dt3FgNM43gp.xml
new file mode 100644
index 0000000..c83abf5
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/CNywfkA_sVJKQVIu_dt3FgNM43gp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Pq7gqYnkFyhKab7XB8O0iwQTIP0d.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/LUM1KVG-kpiMYV7i1xDItZmUkVQd.xml
similarity index 56%
rename from resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Pq7gqYnkFyhKab7XB8O0iwQTIP0d.xml
rename to resources/project/BT5hWoz-UTefONdqForZyI91O8Y/LUM1KVG-kpiMYV7i1xDItZmUkVQd.xml
index aee0cde..a75f7a8 100644
--- a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Pq7gqYnkFyhKab7XB8O0iwQTIP0d.xml
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/LUM1KVG-kpiMYV7i1xDItZmUkVQd.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/LUM1KVG-kpiMYV7i1xDItZmUkVQp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/LUM1KVG-kpiMYV7i1xDItZmUkVQp.xml
new file mode 100644
index 0000000..b76f883
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/LUM1KVG-kpiMYV7i1xDItZmUkVQp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/BGOXG2tSxDz1sTeU_KwACyFzCLsd.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/SGHsdnqYqyGyYGQP-0wqh6AyERAd.xml
similarity index 100%
rename from resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/BGOXG2tSxDz1sTeU_KwACyFzCLsd.xml
rename to resources/project/BT5hWoz-UTefONdqForZyI91O8Y/SGHsdnqYqyGyYGQP-0wqh6AyERAd.xml
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/SGHsdnqYqyGyYGQP-0wqh6AyERAp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/SGHsdnqYqyGyYGQP-0wqh6AyERAp.xml
new file mode 100644
index 0000000..cd5003e
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/SGHsdnqYqyGyYGQP-0wqh6AyERAp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/nBednXcpm1PUS8qxyRkFXdab-P4d.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/TzEa1ML1Hz49sPNQX5JM6EE413Qd.xml
similarity index 52%
rename from resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/nBednXcpm1PUS8qxyRkFXdab-P4d.xml
rename to resources/project/BT5hWoz-UTefONdqForZyI91O8Y/TzEa1ML1Hz49sPNQX5JM6EE413Qd.xml
index b343995..a75f7a8 100644
--- a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/nBednXcpm1PUS8qxyRkFXdab-P4d.xml
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/TzEa1ML1Hz49sPNQX5JM6EE413Qd.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/TzEa1ML1Hz49sPNQX5JM6EE413Qp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/TzEa1ML1Hz49sPNQX5JM6EE413Qp.xml
new file mode 100644
index 0000000..f22e615
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/TzEa1ML1Hz49sPNQX5JM6EE413Qp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/Z7BMyvzqSGzrBtf2gsuU4DgxWc0d.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/VnvWkijFxdp8LV3ck_Qpq9eyOpMd.xml
similarity index 100%
rename from resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/Z7BMyvzqSGzrBtf2gsuU4DgxWc0d.xml
rename to resources/project/BT5hWoz-UTefONdqForZyI91O8Y/VnvWkijFxdp8LV3ck_Qpq9eyOpMd.xml
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/VnvWkijFxdp8LV3ck_Qpq9eyOpMp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/VnvWkijFxdp8LV3ck_Qpq9eyOpMp.xml
new file mode 100644
index 0000000..ad517f4
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/VnvWkijFxdp8LV3ck_Qpq9eyOpMp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/zp0wS8F9EP0ARGsuyU8i2Z0DMsQd.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/WNBzWWmVwu8nwCU7p01ZJtQ5j-od.xml
similarity index 100%
rename from resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/zp0wS8F9EP0ARGsuyU8i2Z0DMsQd.xml
rename to resources/project/BT5hWoz-UTefONdqForZyI91O8Y/WNBzWWmVwu8nwCU7p01ZJtQ5j-od.xml
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/WNBzWWmVwu8nwCU7p01ZJtQ5j-op.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/WNBzWWmVwu8nwCU7p01ZJtQ5j-op.xml
new file mode 100644
index 0000000..b808c17
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/WNBzWWmVwu8nwCU7p01ZJtQ5j-op.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/cNV9fbD7U86DbYesWtgxlSbObDsd.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/cNV9fbD7U86DbYesWtgxlSbObDsd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/cNV9fbD7U86DbYesWtgxlSbObDsd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/cNV9fbD7U86DbYesWtgxlSbObDsp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/cNV9fbD7U86DbYesWtgxlSbObDsp.xml
new file mode 100644
index 0000000..1bc0750
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/cNV9fbD7U86DbYesWtgxlSbObDsp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/eKfjzGwp0oXUNjB8dt6OlGMU7rQd.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/eKfjzGwp0oXUNjB8dt6OlGMU7rQd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/eKfjzGwp0oXUNjB8dt6OlGMU7rQd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/eKfjzGwp0oXUNjB8dt6OlGMU7rQp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/eKfjzGwp0oXUNjB8dt6OlGMU7rQp.xml
new file mode 100644
index 0000000..bbde243
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/eKfjzGwp0oXUNjB8dt6OlGMU7rQp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/gK0bzvM8fEYFwItc078tqn4EOmId.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/gK0bzvM8fEYFwItc078tqn4EOmId.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/gK0bzvM8fEYFwItc078tqn4EOmId.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/gK0bzvM8fEYFwItc078tqn4EOmIp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/gK0bzvM8fEYFwItc078tqn4EOmIp.xml
new file mode 100644
index 0000000..295de5f
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/gK0bzvM8fEYFwItc078tqn4EOmIp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/txvWpnSOoi78sA8cwulqXkK1MG4d.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h026LEbG6ImfsgAII1WcSM9Hnnod.xml
similarity index 76%
rename from resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/txvWpnSOoi78sA8cwulqXkK1MG4d.xml
rename to resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h026LEbG6ImfsgAII1WcSM9Hnnod.xml
index 0675ae3..7a6326b 100644
--- a/resources/project/-kvj53q_l7Lhz3DXOqqQqn6H9Y8/txvWpnSOoi78sA8cwulqXkK1MG4d.xml
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h026LEbG6ImfsgAII1WcSM9Hnnod.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h026LEbG6ImfsgAII1WcSM9Hnnop.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h026LEbG6ImfsgAII1WcSM9Hnnop.xml
new file mode 100644
index 0000000..614b1cb
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h026LEbG6ImfsgAII1WcSM9Hnnop.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h5s8ch2zj9r3lWUKcsOjX8zQlFsd.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h5s8ch2zj9r3lWUKcsOjX8zQlFsd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h5s8ch2zj9r3lWUKcsOjX8zQlFsd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h5s8ch2zj9r3lWUKcsOjX8zQlFsp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h5s8ch2zj9r3lWUKcsOjX8zQlFsp.xml
new file mode 100644
index 0000000..0f2387d
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/h5s8ch2zj9r3lWUKcsOjX8zQlFsp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/hXn6UklILyp-D_dXtEVXkR6HWa0d.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/hXn6UklILyp-D_dXtEVXkR6HWa0d.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/hXn6UklILyp-D_dXtEVXkR6HWa0d.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/hXn6UklILyp-D_dXtEVXkR6HWa0p.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/hXn6UklILyp-D_dXtEVXkR6HWa0p.xml
new file mode 100644
index 0000000..81d26d5
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/hXn6UklILyp-D_dXtEVXkR6HWa0p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/nA_28eBnx5NCFw_vQVWFh5ohqUAd.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/nA_28eBnx5NCFw_vQVWFh5ohqUAd.xml
new file mode 100644
index 0000000..7a6326b
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/nA_28eBnx5NCFw_vQVWFh5ohqUAd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/nA_28eBnx5NCFw_vQVWFh5ohqUAp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/nA_28eBnx5NCFw_vQVWFh5ohqUAp.xml
new file mode 100644
index 0000000..093ab90
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/nA_28eBnx5NCFw_vQVWFh5ohqUAp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/qu4wtrgMg5JS7iVtXmbBSA9GENId.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/qu4wtrgMg5JS7iVtXmbBSA9GENId.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/qu4wtrgMg5JS7iVtXmbBSA9GENId.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/qu4wtrgMg5JS7iVtXmbBSA9GENIp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/qu4wtrgMg5JS7iVtXmbBSA9GENIp.xml
new file mode 100644
index 0000000..b0bbaec
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/qu4wtrgMg5JS7iVtXmbBSA9GENIp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/w234j28OzyIgK86-1WWW6oJ1rp4d.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/w234j28OzyIgK86-1WWW6oJ1rp4d.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/w234j28OzyIgK86-1WWW6oJ1rp4d.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/w234j28OzyIgK86-1WWW6oJ1rp4p.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/w234j28OzyIgK86-1WWW6oJ1rp4p.xml
new file mode 100644
index 0000000..7e726f3
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/w234j28OzyIgK86-1WWW6oJ1rp4p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/xH29tmOwPG1ix8h2YNwMHPQ_-ukd.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/xH29tmOwPG1ix8h2YNwMHPQ_-ukd.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/xH29tmOwPG1ix8h2YNwMHPQ_-ukd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/xH29tmOwPG1ix8h2YNwMHPQ_-ukp.xml b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/xH29tmOwPG1ix8h2YNwMHPQ_-ukp.xml
new file mode 100644
index 0000000..b0242b0
--- /dev/null
+++ b/resources/project/BT5hWoz-UTefONdqForZyI91O8Y/xH29tmOwPG1ix8h2YNwMHPQ_-ukp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/AHoLGOV6JxAa3mDfXPOye2W3psUd.xml b/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/AHoLGOV6JxAa3mDfXPOye2W3psUd.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/AHoLGOV6JxAa3mDfXPOye2W3psUd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/iJQ6ISymCE_oVhqvDHiIgzDCXjEp.xml b/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/AHoLGOV6JxAa3mDfXPOye2W3psUp.xml
similarity index 100%
rename from resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/iJQ6ISymCE_oVhqvDHiIgzDCXjEp.xml
rename to resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/AHoLGOV6JxAa3mDfXPOye2W3psUp.xml
diff --git a/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/NvNsziUvXU2FO5oXU12jeMmASEwd.xml b/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/NvNsziUvXU2FO5oXU12jeMmASEwd.xml
new file mode 100644
index 0000000..7a6326b
--- /dev/null
+++ b/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/NvNsziUvXU2FO5oXU12jeMmASEwd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/NvNsziUvXU2FO5oXU12jeMmASEwp.xml b/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/NvNsziUvXU2FO5oXU12jeMmASEwp.xml
new file mode 100644
index 0000000..ead8cbc
--- /dev/null
+++ b/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/NvNsziUvXU2FO5oXU12jeMmASEwp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/dxW0rLxFMXm0cpQGCSkWQRi2YRsd.xml b/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/dxW0rLxFMXm0cpQGCSkWQRi2YRsd.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/dxW0rLxFMXm0cpQGCSkWQRi2YRsd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/dxW0rLxFMXm0cpQGCSkWQRi2YRsp.xml b/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/dxW0rLxFMXm0cpQGCSkWQRi2YRsp.xml
new file mode 100644
index 0000000..842de6a
--- /dev/null
+++ b/resources/project/BjxNC43HIPP8KZwg_cceb68ikkA/dxW0rLxFMXm0cpQGCSkWQRi2YRsp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/-upqjogKesBp3DwJRlG6KjrKvd4d.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/-upqjogKesBp3DwJRlG6KjrKvd4d.xml
new file mode 100644
index 0000000..6c2fd15
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/-upqjogKesBp3DwJRlG6KjrKvd4d.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/-upqjogKesBp3DwJRlG6KjrKvd4p.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/-upqjogKesBp3DwJRlG6KjrKvd4p.xml
new file mode 100644
index 0000000..66245ed
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/-upqjogKesBp3DwJRlG6KjrKvd4p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/2vfmNT5dFMoKB5FDZBSr3ouDAL8d.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/2vfmNT5dFMoKB5FDZBSr3ouDAL8d.xml
new file mode 100644
index 0000000..ad72581
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/2vfmNT5dFMoKB5FDZBSr3ouDAL8d.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/2vfmNT5dFMoKB5FDZBSr3ouDAL8p.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/2vfmNT5dFMoKB5FDZBSr3ouDAL8p.xml
new file mode 100644
index 0000000..d8cbcb9
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/2vfmNT5dFMoKB5FDZBSr3ouDAL8p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/DxJWFQ6s-5tgLo-3uCpCdq16n-sd.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/DxJWFQ6s-5tgLo-3uCpCdq16n-sd.xml
new file mode 100644
index 0000000..8978875
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/DxJWFQ6s-5tgLo-3uCpCdq16n-sd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/DxJWFQ6s-5tgLo-3uCpCdq16n-sp.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/DxJWFQ6s-5tgLo-3uCpCdq16n-sp.xml
new file mode 100644
index 0000000..f842b96
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/DxJWFQ6s-5tgLo-3uCpCdq16n-sp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/JzO7EW4RnUYzi9OV7qh3x-wX4z8d.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/JzO7EW4RnUYzi9OV7qh3x-wX4z8d.xml
new file mode 100644
index 0000000..f8d0933
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/JzO7EW4RnUYzi9OV7qh3x-wX4z8d.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/JzO7EW4RnUYzi9OV7qh3x-wX4z8p.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/JzO7EW4RnUYzi9OV7qh3x-wX4z8p.xml
new file mode 100644
index 0000000..516dcb8
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/JzO7EW4RnUYzi9OV7qh3x-wX4z8p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Pq7gqYnkFyhKab7XB8O0iwQTIP0p.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Pq7gqYnkFyhKab7XB8O0iwQTIP0p.xml
deleted file mode 100644
index d1e8194..0000000
--- a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/Pq7gqYnkFyhKab7XB8O0iwQTIP0p.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/cn2Ee7NifKI7ffnw_Fjz5lrC1Qgd.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/cn2Ee7NifKI7ffnw_Fjz5lrC1Qgd.xml
new file mode 100644
index 0000000..c75735a
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/cn2Ee7NifKI7ffnw_Fjz5lrC1Qgd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/cn2Ee7NifKI7ffnw_Fjz5lrC1Qgp.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/cn2Ee7NifKI7ffnw_Fjz5lrC1Qgp.xml
new file mode 100644
index 0000000..a3b49bd
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/cn2Ee7NifKI7ffnw_Fjz5lrC1Qgp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/dzjyExK2OLpL1YhePZIjY4vjrpsd.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/dzjyExK2OLpL1YhePZIjY4vjrpsd.xml
new file mode 100644
index 0000000..52eac4e
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/dzjyExK2OLpL1YhePZIjY4vjrpsd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/dzjyExK2OLpL1YhePZIjY4vjrpsp.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/dzjyExK2OLpL1YhePZIjY4vjrpsp.xml
new file mode 100644
index 0000000..c1f9f02
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/dzjyExK2OLpL1YhePZIjY4vjrpsp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/e7wCov_BYJUY6VsFZYx5ab3064gd.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/e7wCov_BYJUY6VsFZYx5ab3064gd.xml
new file mode 100644
index 0000000..db0a237
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/e7wCov_BYJUY6VsFZYx5ab3064gd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/e7wCov_BYJUY6VsFZYx5ab3064gp.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/e7wCov_BYJUY6VsFZYx5ab3064gp.xml
new file mode 100644
index 0000000..f329c5a
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/e7wCov_BYJUY6VsFZYx5ab3064gp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikoU0GqEAVreEIpyvUR8mCIaiqUd.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikoU0GqEAVreEIpyvUR8mCIaiqUd.xml
new file mode 100644
index 0000000..cdddfcf
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikoU0GqEAVreEIpyvUR8mCIaiqUd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikoU0GqEAVreEIpyvUR8mCIaiqUp.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikoU0GqEAVreEIpyvUR8mCIaiqUp.xml
new file mode 100644
index 0000000..635b49b
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/ikoU0GqEAVreEIpyvUR8mCIaiqUp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/lMJoqU1GA86jWAvX6adHL2EbMzMd.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/lMJoqU1GA86jWAvX6adHL2EbMzMd.xml
new file mode 100644
index 0000000..50dd813
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/lMJoqU1GA86jWAvX6adHL2EbMzMd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/lMJoqU1GA86jWAvX6adHL2EbMzMp.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/lMJoqU1GA86jWAvX6adHL2EbMzMp.xml
new file mode 100644
index 0000000..455e98b
--- /dev/null
+++ b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/lMJoqU1GA86jWAvX6adHL2EbMzMp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/nBednXcpm1PUS8qxyRkFXdab-P4p.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/nBednXcpm1PUS8qxyRkFXdab-P4p.xml
deleted file mode 100644
index 21379fc..0000000
--- a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/nBednXcpm1PUS8qxyRkFXdab-P4p.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/pEP2mULJHg2sLA6ZikixBlQCM9sd.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/pEP2mULJHg2sLA6ZikixBlQCM9sd.xml
deleted file mode 100644
index 61cbffb..0000000
--- a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/pEP2mULJHg2sLA6ZikixBlQCM9sd.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/pEP2mULJHg2sLA6ZikixBlQCM9sp.xml b/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/pEP2mULJHg2sLA6ZikixBlQCM9sp.xml
deleted file mode 100644
index 539cd08..0000000
--- a/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/pEP2mULJHg2sLA6ZikixBlQCM9sp.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/Yxkg-DfklTv8uiIAZptPJ3X2mowd.xml b/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/Yxkg-DfklTv8uiIAZptPJ3X2mowd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/Yxkg-DfklTv8uiIAZptPJ3X2mowd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/Yxkg-DfklTv8uiIAZptPJ3X2mowp.xml b/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/Yxkg-DfklTv8uiIAZptPJ3X2mowp.xml
new file mode 100644
index 0000000..01cb34e
--- /dev/null
+++ b/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/Yxkg-DfklTv8uiIAZptPJ3X2mowp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/lUEE6oMS266pXRAZlg3smfxXDbgd.xml b/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/lUEE6oMS266pXRAZlg3smfxXDbgd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/lUEE6oMS266pXRAZlg3smfxXDbgd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/lUEE6oMS266pXRAZlg3smfxXDbgp.xml b/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/lUEE6oMS266pXRAZlg3smfxXDbgp.xml
new file mode 100644
index 0000000..4e217fb
--- /dev/null
+++ b/resources/project/GKJsEpq9HmT2JOvWOg3ZiDtMKEI/lUEE6oMS266pXRAZlg3smfxXDbgp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/HoHDHQ_WvHAAKj5aJOrvrg_vpt8/xXlmKuOQ7YT_G1elNhbKQIUqSRMd.xml b/resources/project/HoHDHQ_WvHAAKj5aJOrvrg_vpt8/xXlmKuOQ7YT_G1elNhbKQIUqSRMd.xml
new file mode 100644
index 0000000..4a6ad83
--- /dev/null
+++ b/resources/project/HoHDHQ_WvHAAKj5aJOrvrg_vpt8/xXlmKuOQ7YT_G1elNhbKQIUqSRMd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/HoHDHQ_WvHAAKj5aJOrvrg_vpt8/xXlmKuOQ7YT_G1elNhbKQIUqSRMp.xml b/resources/project/HoHDHQ_WvHAAKj5aJOrvrg_vpt8/xXlmKuOQ7YT_G1elNhbKQIUqSRMp.xml
new file mode 100644
index 0000000..fdb1445
--- /dev/null
+++ b/resources/project/HoHDHQ_WvHAAKj5aJOrvrg_vpt8/xXlmKuOQ7YT_G1elNhbKQIUqSRMp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEd.xml b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEp.xml b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEp.xml
new file mode 100644
index 0000000..01cb34e
--- /dev/null
+++ b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0d.xml b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0d.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0d.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0p.xml b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0p.xml
new file mode 100644
index 0000000..db2f6df
--- /dev/null
+++ b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qumT5QrZyzJpg63uQsNB9i1TMcd.xml b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qumT5QrZyzJpg63uQsNB9i1TMcd.xml
deleted file mode 100644
index 8a44090..0000000
--- a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qumT5QrZyzJpg63uQsNB9i1TMcd.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qumT5QrZyzJpg63uQsNB9i1TMcp.xml b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qumT5QrZyzJpg63uQsNB9i1TMcp.xml
deleted file mode 100644
index 6a094a8..0000000
--- a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qumT5QrZyzJpg63uQsNB9i1TMcp.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/jYpi1Pu6k-AfWEJrahCTREe7wz0d.xml b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/jYpi1Pu6k-AfWEJrahCTREe7wz0d.xml
new file mode 100644
index 0000000..31836f0
--- /dev/null
+++ b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/jYpi1Pu6k-AfWEJrahCTREe7wz0d.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/jYpi1Pu6k-AfWEJrahCTREe7wz0p.xml b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/jYpi1Pu6k-AfWEJrahCTREe7wz0p.xml
new file mode 100644
index 0000000..1986cbb
--- /dev/null
+++ b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/jYpi1Pu6k-AfWEJrahCTREe7wz0p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/xcK8fO1pjra5DR0jot5vrzlBV84d.xml b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/xcK8fO1pjra5DR0jot5vrzlBV84d.xml
new file mode 100644
index 0000000..dc157b3
--- /dev/null
+++ b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/xcK8fO1pjra5DR0jot5vrzlBV84d.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/xcK8fO1pjra5DR0jot5vrzlBV84p.xml b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/xcK8fO1pjra5DR0jot5vrzlBV84p.xml
new file mode 100644
index 0000000..5b1fbb8
--- /dev/null
+++ b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/xcK8fO1pjra5DR0jot5vrzlBV84p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/423KLn4R-ovXBwba8WqQP1OUOKQd.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/423KLn4R-ovXBwba8WqQP1OUOKQd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/423KLn4R-ovXBwba8WqQP1OUOKQd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/423KLn4R-ovXBwba8WqQP1OUOKQp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/423KLn4R-ovXBwba8WqQP1OUOKQp.xml
new file mode 100644
index 0000000..de0d0b8
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/423KLn4R-ovXBwba8WqQP1OUOKQp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/4P66G48h4uNHb9ng6NyN6i-qzUgd.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/4P66G48h4uNHb9ng6NyN6i-qzUgd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/4P66G48h4uNHb9ng6NyN6i-qzUgd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/4P66G48h4uNHb9ng6NyN6i-qzUgp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/4P66G48h4uNHb9ng6NyN6i-qzUgp.xml
new file mode 100644
index 0000000..433ac3a
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/4P66G48h4uNHb9ng6NyN6i-qzUgp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/5geZ6FmFP1wNQNTkBPiRBgM6q-Ud.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/5geZ6FmFP1wNQNTkBPiRBgM6q-Ud.xml
new file mode 100644
index 0000000..378b613
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/5geZ6FmFP1wNQNTkBPiRBgM6q-Ud.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/5geZ6FmFP1wNQNTkBPiRBgM6q-Up.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/5geZ6FmFP1wNQNTkBPiRBgM6q-Up.xml
new file mode 100644
index 0000000..a990ac4
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/5geZ6FmFP1wNQNTkBPiRBgM6q-Up.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/EyDhXb-HjEIhAYfuSMUxquCH4aYd.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/EyDhXb-HjEIhAYfuSMUxquCH4aYd.xml
new file mode 100644
index 0000000..7a6326b
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/EyDhXb-HjEIhAYfuSMUxquCH4aYd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/EyDhXb-HjEIhAYfuSMUxquCH4aYp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/EyDhXb-HjEIhAYfuSMUxquCH4aYp.xml
new file mode 100644
index 0000000..173d9ab
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/EyDhXb-HjEIhAYfuSMUxquCH4aYp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/MCVCPT9iaAzOGyx97P9tMdlmgCId.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/MCVCPT9iaAzOGyx97P9tMdlmgCId.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/MCVCPT9iaAzOGyx97P9tMdlmgCId.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/MCVCPT9iaAzOGyx97P9tMdlmgCIp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/MCVCPT9iaAzOGyx97P9tMdlmgCIp.xml
new file mode 100644
index 0000000..c79dd14
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/MCVCPT9iaAzOGyx97P9tMdlmgCIp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/OrFTDQK52Rk7nEyrvqtK57u0xLQd.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/OrFTDQK52Rk7nEyrvqtK57u0xLQd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/OrFTDQK52Rk7nEyrvqtK57u0xLQd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/OrFTDQK52Rk7nEyrvqtK57u0xLQp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/OrFTDQK52Rk7nEyrvqtK57u0xLQp.xml
new file mode 100644
index 0000000..f8892bd
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/OrFTDQK52Rk7nEyrvqtK57u0xLQp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/WS0nNp0eS-otExzyipU1hnjde8Yd.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/WS0nNp0eS-otExzyipU1hnjde8Yd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/WS0nNp0eS-otExzyipU1hnjde8Yd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/WS0nNp0eS-otExzyipU1hnjde8Yp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/WS0nNp0eS-otExzyipU1hnjde8Yp.xml
new file mode 100644
index 0000000..8873bdf
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/WS0nNp0eS-otExzyipU1hnjde8Yp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/b3JIy73ZrzFnWNgKhssf5hAuqQ4d.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/b3JIy73ZrzFnWNgKhssf5hAuqQ4d.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/b3JIy73ZrzFnWNgKhssf5hAuqQ4d.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/b3JIy73ZrzFnWNgKhssf5hAuqQ4p.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/b3JIy73ZrzFnWNgKhssf5hAuqQ4p.xml
new file mode 100644
index 0000000..2e087b5
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/b3JIy73ZrzFnWNgKhssf5hAuqQ4p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/d1u4eIKNgMuS21WRxXrD0UScuR8d.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/d1u4eIKNgMuS21WRxXrD0UScuR8d.xml
new file mode 100644
index 0000000..7a6326b
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/d1u4eIKNgMuS21WRxXrD0UScuR8d.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/d1u4eIKNgMuS21WRxXrD0UScuR8p.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/d1u4eIKNgMuS21WRxXrD0UScuR8p.xml
new file mode 100644
index 0000000..95526bd
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/d1u4eIKNgMuS21WRxXrD0UScuR8p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gZEyOulxWBf_r9MGlsJJ-P82NOUd.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gZEyOulxWBf_r9MGlsJJ-P82NOUd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gZEyOulxWBf_r9MGlsJJ-P82NOUd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gZEyOulxWBf_r9MGlsJJ-P82NOUp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gZEyOulxWBf_r9MGlsJJ-P82NOUp.xml
new file mode 100644
index 0000000..fab485f
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gZEyOulxWBf_r9MGlsJJ-P82NOUp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gfdF9UWoOuFoiyliJym7waW4XEkd.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gfdF9UWoOuFoiyliJym7waW4XEkd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gfdF9UWoOuFoiyliJym7waW4XEkd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gfdF9UWoOuFoiyliJym7waW4XEkp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gfdF9UWoOuFoiyliJym7waW4XEkp.xml
new file mode 100644
index 0000000..ab8d5f1
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gfdF9UWoOuFoiyliJym7waW4XEkp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gjXMbSOzqQJbg7H7bMF0OVGji80d.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gjXMbSOzqQJbg7H7bMF0OVGji80d.xml
new file mode 100644
index 0000000..30f473b
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gjXMbSOzqQJbg7H7bMF0OVGji80d.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gjXMbSOzqQJbg7H7bMF0OVGji80p.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gjXMbSOzqQJbg7H7bMF0OVGji80p.xml
new file mode 100644
index 0000000..ac1e04c
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/gjXMbSOzqQJbg7H7bMF0OVGji80p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/p5HYYVUpTuYgZwnT8QkkzaoJraUd.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/p5HYYVUpTuYgZwnT8QkkzaoJraUd.xml
new file mode 100644
index 0000000..30f473b
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/p5HYYVUpTuYgZwnT8QkkzaoJraUd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/p5HYYVUpTuYgZwnT8QkkzaoJraUp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/p5HYYVUpTuYgZwnT8QkkzaoJraUp.xml
new file mode 100644
index 0000000..bb30d6d
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/p5HYYVUpTuYgZwnT8QkkzaoJraUp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/q4FWbcu8zEbneDjWzNwfvfvjQNAd.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/q4FWbcu8zEbneDjWzNwfvfvjQNAd.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/q4FWbcu8zEbneDjWzNwfvfvjQNAd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/q4FWbcu8zEbneDjWzNwfvfvjQNAp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/q4FWbcu8zEbneDjWzNwfvfvjQNAp.xml
new file mode 100644
index 0000000..842de6a
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/q4FWbcu8zEbneDjWzNwfvfvjQNAp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/s-04wUzHjOhlMa1CW_zpJwm8iDMd.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/s-04wUzHjOhlMa1CW_zpJwm8iDMd.xml
new file mode 100644
index 0000000..30f473b
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/s-04wUzHjOhlMa1CW_zpJwm8iDMd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/s-04wUzHjOhlMa1CW_zpJwm8iDMp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/s-04wUzHjOhlMa1CW_zpJwm8iDMp.xml
new file mode 100644
index 0000000..8c8d837
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/s-04wUzHjOhlMa1CW_zpJwm8iDMp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/tYqv97of56K959ec20E127ONNkkd.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/tYqv97of56K959ec20E127ONNkkd.xml
new file mode 100644
index 0000000..378b613
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/tYqv97of56K959ec20E127ONNkkd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/tYqv97of56K959ec20E127ONNkkp.xml b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/tYqv97of56K959ec20E127ONNkkp.xml
new file mode 100644
index 0000000..8031d61
--- /dev/null
+++ b/resources/project/ZN2RlSIbyWXhOxbxxI4hOawbMD4/tYqv97of56K959ec20E127ONNkkp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/IeTljmmsHd59nip38CQ5y5dOQnQd.xml b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/IeTljmmsHd59nip38CQ5y5dOQnQd.xml
new file mode 100644
index 0000000..7a6326b
--- /dev/null
+++ b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/IeTljmmsHd59nip38CQ5y5dOQnQd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/IeTljmmsHd59nip38CQ5y5dOQnQp.xml b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/IeTljmmsHd59nip38CQ5y5dOQnQp.xml
new file mode 100644
index 0000000..b5a5a81
--- /dev/null
+++ b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/IeTljmmsHd59nip38CQ5y5dOQnQp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/QOpe-1pctdftDIjwQLRdjOUZW44d.xml b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/QOpe-1pctdftDIjwQLRdjOUZW44d.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/QOpe-1pctdftDIjwQLRdjOUZW44d.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/QOpe-1pctdftDIjwQLRdjOUZW44p.xml b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/QOpe-1pctdftDIjwQLRdjOUZW44p.xml
new file mode 100644
index 0000000..842de6a
--- /dev/null
+++ b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/QOpe-1pctdftDIjwQLRdjOUZW44p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/Y4iX7VSqYaXWuqu1GuH08Q4gCR4d.xml b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/Y4iX7VSqYaXWuqu1GuH08Q4gCR4d.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/Y4iX7VSqYaXWuqu1GuH08Q4gCR4d.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/Y4iX7VSqYaXWuqu1GuH08Q4gCR4p.xml b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/Y4iX7VSqYaXWuqu1GuH08Q4gCR4p.xml
new file mode 100644
index 0000000..3dd7bef
--- /dev/null
+++ b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/Y4iX7VSqYaXWuqu1GuH08Q4gCR4p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/bzMXcEpQelehv3qzHYr9ceCGgIod.xml b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/bzMXcEpQelehv3qzHYr9ceCGgIod.xml
new file mode 100644
index 0000000..7a6326b
--- /dev/null
+++ b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/bzMXcEpQelehv3qzHYr9ceCGgIod.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/Z7BMyvzqSGzrBtf2gsuU4DgxWc0p.xml b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/bzMXcEpQelehv3qzHYr9ceCGgIop.xml
similarity index 100%
rename from resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/Z7BMyvzqSGzrBtf2gsuU4DgxWc0p.xml
rename to resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/bzMXcEpQelehv3qzHYr9ceCGgIop.xml
diff --git a/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/hy3T897OVbl4TCaWFBnKRKDU0M8d.xml b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/hy3T897OVbl4TCaWFBnKRKDU0M8d.xml
new file mode 100644
index 0000000..7a6326b
--- /dev/null
+++ b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/hy3T897OVbl4TCaWFBnKRKDU0M8d.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/BGOXG2tSxDz1sTeU_KwACyFzCLsp.xml b/resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/hy3T897OVbl4TCaWFBnKRKDU0M8p.xml
similarity index 100%
rename from resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/BGOXG2tSxDz1sTeU_KwACyFzCLsp.xml
rename to resources/project/ZdVxxv9BsNz7MGUxtEc6Pq3qh1M/hy3T897OVbl4TCaWFBnKRKDU0M8p.xml
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/FclaQiuRRvqZzfnvReCKRLYQG04d.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/FclaQiuRRvqZzfnvReCKRLYQG04d.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/FclaQiuRRvqZzfnvReCKRLYQG04d.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/FclaQiuRRvqZzfnvReCKRLYQG04p.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/FclaQiuRRvqZzfnvReCKRLYQG04p.xml
new file mode 100644
index 0000000..751b47c
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/FclaQiuRRvqZzfnvReCKRLYQG04p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/GJtrdTUc8krbVlhASJzieoFELdYd.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/GJtrdTUc8krbVlhASJzieoFELdYd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/GJtrdTUc8krbVlhASJzieoFELdYd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/GJtrdTUc8krbVlhASJzieoFELdYp.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/GJtrdTUc8krbVlhASJzieoFELdYp.xml
new file mode 100644
index 0000000..01cb34e
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/GJtrdTUc8krbVlhASJzieoFELdYp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/KQMigY2OjWa9g6M-C5r8Up0357od.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/KQMigY2OjWa9g6M-C5r8Up0357od.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/KQMigY2OjWa9g6M-C5r8Up0357od.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/KQMigY2OjWa9g6M-C5r8Up0357op.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/KQMigY2OjWa9g6M-C5r8Up0357op.xml
new file mode 100644
index 0000000..f6639b1
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/KQMigY2OjWa9g6M-C5r8Up0357op.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/ZL0yxdr5cvq5LeopyaxBqpitpjod.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/ZL0yxdr5cvq5LeopyaxBqpitpjod.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/ZL0yxdr5cvq5LeopyaxBqpitpjod.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/ZL0yxdr5cvq5LeopyaxBqpitpjop.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/ZL0yxdr5cvq5LeopyaxBqpitpjop.xml
new file mode 100644
index 0000000..433ac3a
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/ZL0yxdr5cvq5LeopyaxBqpitpjop.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/a2u5yuXrr23Y2L727aZhI7qT6L0d.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/a2u5yuXrr23Y2L727aZhI7qT6L0d.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/a2u5yuXrr23Y2L727aZhI7qT6L0d.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/a2u5yuXrr23Y2L727aZhI7qT6L0p.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/a2u5yuXrr23Y2L727aZhI7qT6L0p.xml
new file mode 100644
index 0000000..cded3de
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/a2u5yuXrr23Y2L727aZhI7qT6L0p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/cKSOiL8BaQ7iBaT8jcDLSFaxjZwd.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/cKSOiL8BaQ7iBaT8jcDLSFaxjZwd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/cKSOiL8BaQ7iBaT8jcDLSFaxjZwd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/cKSOiL8BaQ7iBaT8jcDLSFaxjZwp.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/cKSOiL8BaQ7iBaT8jcDLSFaxjZwp.xml
new file mode 100644
index 0000000..23ee4a6
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/cKSOiL8BaQ7iBaT8jcDLSFaxjZwp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/eYUVfav41Z3DHR_zeNxtEc1qeNQd.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/eYUVfav41Z3DHR_zeNxtEc1qeNQd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/eYUVfav41Z3DHR_zeNxtEc1qeNQd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/eYUVfav41Z3DHR_zeNxtEc1qeNQp.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/eYUVfav41Z3DHR_zeNxtEc1qeNQp.xml
new file mode 100644
index 0000000..72889d4
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/eYUVfav41Z3DHR_zeNxtEc1qeNQp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/jeDtnYbvc6Yk7ncJK0puH-ERRmgd.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/jeDtnYbvc6Yk7ncJK0puH-ERRmgd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/jeDtnYbvc6Yk7ncJK0puH-ERRmgd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/jeDtnYbvc6Yk7ncJK0puH-ERRmgp.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/jeDtnYbvc6Yk7ncJK0puH-ERRmgp.xml
new file mode 100644
index 0000000..53eada2
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/jeDtnYbvc6Yk7ncJK0puH-ERRmgp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/taJ-MPP-S0lkh692qkaYjcSSzmsd.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/taJ-MPP-S0lkh692qkaYjcSSzmsd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/taJ-MPP-S0lkh692qkaYjcSSzmsd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/taJ-MPP-S0lkh692qkaYjcSSzmsp.xml b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/taJ-MPP-S0lkh692qkaYjcSSzmsp.xml
new file mode 100644
index 0000000..c79dd14
--- /dev/null
+++ b/resources/project/b3JIy73ZrzFnWNgKhssf5hAuqQ4/taJ-MPP-S0lkh692qkaYjcSSzmsp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/2w5jVWjTyrsOArdYS-TFzvwPxeQd.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/2w5jVWjTyrsOArdYS-TFzvwPxeQd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/2w5jVWjTyrsOArdYS-TFzvwPxeQd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/2w5jVWjTyrsOArdYS-TFzvwPxeQp.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/2w5jVWjTyrsOArdYS-TFzvwPxeQp.xml
new file mode 100644
index 0000000..5fd7791
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/2w5jVWjTyrsOArdYS-TFzvwPxeQp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/TgS6JVkSWBMTwjsBx4_tl5SNRQsd.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/TgS6JVkSWBMTwjsBx4_tl5SNRQsd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/TgS6JVkSWBMTwjsBx4_tl5SNRQsd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/TgS6JVkSWBMTwjsBx4_tl5SNRQsp.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/TgS6JVkSWBMTwjsBx4_tl5SNRQsp.xml
new file mode 100644
index 0000000..01cb34e
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/TgS6JVkSWBMTwjsBx4_tl5SNRQsp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/W7HxaTKwnbY_JHKBUQsxSq-M7DId.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/W7HxaTKwnbY_JHKBUQsxSq-M7DId.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/W7HxaTKwnbY_JHKBUQsxSq-M7DId.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/W7HxaTKwnbY_JHKBUQsxSq-M7DIp.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/W7HxaTKwnbY_JHKBUQsxSq-M7DIp.xml
new file mode 100644
index 0000000..23b293a
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/W7HxaTKwnbY_JHKBUQsxSq-M7DIp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/eDyOl6rEuVOucYR_D6iogiukXU0d.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/eDyOl6rEuVOucYR_D6iogiukXU0d.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/eDyOl6rEuVOucYR_D6iogiukXU0d.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/eDyOl6rEuVOucYR_D6iogiukXU0p.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/eDyOl6rEuVOucYR_D6iogiukXU0p.xml
new file mode 100644
index 0000000..b5b34ac
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/eDyOl6rEuVOucYR_D6iogiukXU0p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/oBdTHGBwsy9mdLBLqTf4qrO3OgUd.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/oBdTHGBwsy9mdLBLqTf4qrO3OgUd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/oBdTHGBwsy9mdLBLqTf4qrO3OgUd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/oBdTHGBwsy9mdLBLqTf4qrO3OgUp.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/oBdTHGBwsy9mdLBLqTf4qrO3OgUp.xml
new file mode 100644
index 0000000..6260d4b
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/oBdTHGBwsy9mdLBLqTf4qrO3OgUp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/q72DRlja6oz95_3ufhCRCr2JQ5Qd.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/q72DRlja6oz95_3ufhCRCr2JQ5Qd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/q72DRlja6oz95_3ufhCRCr2JQ5Qd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/q72DRlja6oz95_3ufhCRCr2JQ5Qp.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/q72DRlja6oz95_3ufhCRCr2JQ5Qp.xml
new file mode 100644
index 0000000..640c955
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/q72DRlja6oz95_3ufhCRCr2JQ5Qp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/u6SYVnPwrg97eiGyp5phLZfATsYd.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/u6SYVnPwrg97eiGyp5phLZfATsYd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/u6SYVnPwrg97eiGyp5phLZfATsYd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/u6SYVnPwrg97eiGyp5phLZfATsYp.xml b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/u6SYVnPwrg97eiGyp5phLZfATsYp.xml
new file mode 100644
index 0000000..3b09c20
--- /dev/null
+++ b/resources/project/gZEyOulxWBf_r9MGlsJJ-P82NOU/u6SYVnPwrg97eiGyp5phLZfATsYp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/RMvf4mEDuznAOqU6SKNmIWErfxgd.xml b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/RMvf4mEDuznAOqU6SKNmIWErfxgd.xml
new file mode 100644
index 0000000..7a6326b
--- /dev/null
+++ b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/RMvf4mEDuznAOqU6SKNmIWErfxgd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/RMvf4mEDuznAOqU6SKNmIWErfxgp.xml b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/RMvf4mEDuznAOqU6SKNmIWErfxgp.xml
new file mode 100644
index 0000000..a15b379
--- /dev/null
+++ b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/RMvf4mEDuznAOqU6SKNmIWErfxgp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/ZTr3GAe6p03ZVs2FdKKE0JsiFMQd.xml b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/ZTr3GAe6p03ZVs2FdKKE0JsiFMQd.xml
new file mode 100644
index 0000000..7a6326b
--- /dev/null
+++ b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/ZTr3GAe6p03ZVs2FdKKE0JsiFMQd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/ZTr3GAe6p03ZVs2FdKKE0JsiFMQp.xml b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/ZTr3GAe6p03ZVs2FdKKE0JsiFMQp.xml
new file mode 100644
index 0000000..31a64a5
--- /dev/null
+++ b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/ZTr3GAe6p03ZVs2FdKKE0JsiFMQp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/uIbyU9dPEHKvxjdwx5pD9PDDCZYd.xml b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/uIbyU9dPEHKvxjdwx5pD9PDDCZYd.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/uIbyU9dPEHKvxjdwx5pD9PDDCZYd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/uIbyU9dPEHKvxjdwx5pD9PDDCZYp.xml b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/uIbyU9dPEHKvxjdwx5pD9PDDCZYp.xml
new file mode 100644
index 0000000..842de6a
--- /dev/null
+++ b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/uIbyU9dPEHKvxjdwx5pD9PDDCZYp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/49hEt7xc-yV109-DLI01XSb5oAUd.xml b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/49hEt7xc-yV109-DLI01XSb5oAUd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/49hEt7xc-yV109-DLI01XSb5oAUd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/49hEt7xc-yV109-DLI01XSb5oAUp.xml b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/49hEt7xc-yV109-DLI01XSb5oAUp.xml
new file mode 100644
index 0000000..3eb6641
--- /dev/null
+++ b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/49hEt7xc-yV109-DLI01XSb5oAUp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/71slgtYMdvtDd-aCg1j37m77sBQd.xml b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/71slgtYMdvtDd-aCg1j37m77sBQd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/71slgtYMdvtDd-aCg1j37m77sBQd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/71slgtYMdvtDd-aCg1j37m77sBQp.xml b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/71slgtYMdvtDd-aCg1j37m77sBQp.xml
new file mode 100644
index 0000000..01cb34e
--- /dev/null
+++ b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/71slgtYMdvtDd-aCg1j37m77sBQp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/QBdt0OfZFDNvrKtB0lIq-wHjnf4d.xml b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/QBdt0OfZFDNvrKtB0lIq-wHjnf4d.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/QBdt0OfZFDNvrKtB0lIq-wHjnf4d.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/QBdt0OfZFDNvrKtB0lIq-wHjnf4p.xml b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/QBdt0OfZFDNvrKtB0lIq-wHjnf4p.xml
new file mode 100644
index 0000000..989e27c
--- /dev/null
+++ b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/QBdt0OfZFDNvrKtB0lIq-wHjnf4p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/bZkRvzxrhH4veiPi3nwMKeBp52gd.xml b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/bZkRvzxrhH4veiPi3nwMKeBp52gd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/bZkRvzxrhH4veiPi3nwMKeBp52gd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/bZkRvzxrhH4veiPi3nwMKeBp52gp.xml b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/bZkRvzxrhH4veiPi3nwMKeBp52gp.xml
new file mode 100644
index 0000000..036032e
--- /dev/null
+++ b/resources/project/lUEE6oMS266pXRAZlg3smfxXDbg/bZkRvzxrhH4veiPi3nwMKeBp52gp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUd.xml b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUp.xml b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUp.xml
new file mode 100644
index 0000000..01cb34e
--- /dev/null
+++ b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/geuseqfzde5lmCB2PlA6wD238ucd.xml b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/geuseqfzde5lmCB2PlA6wD238ucd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/geuseqfzde5lmCB2PlA6wD238ucd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/geuseqfzde5lmCB2PlA6wD238ucp.xml b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/geuseqfzde5lmCB2PlA6wD238ucp.xml
new file mode 100644
index 0000000..9c44b89
--- /dev/null
+++ b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/geuseqfzde5lmCB2PlA6wD238ucp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/-kvj53q_l7Lhz3DXOqqQqn6H9Y8p.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/-kvj53q_l7Lhz3DXOqqQqn6H9Y8p.xml
deleted file mode 100644
index 287f4a1..0000000
--- a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/-kvj53q_l7Lhz3DXOqqQqn6H9Y8p.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/1pYehALnaCNxtxsVT8HUsm31wjop.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/1pYehALnaCNxtxsVT8HUsm31wjop.xml
deleted file mode 100644
index 952d96b..0000000
--- a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/1pYehALnaCNxtxsVT8HUsm31wjop.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/2zjcQkVJSJ_AwC9M8R9BTSESRzcd.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/2zjcQkVJSJ_AwC9M8R9BTSESRzcd.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/2zjcQkVJSJ_AwC9M8R9BTSESRzcd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/2zjcQkVJSJ_AwC9M8R9BTSESRzcp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/2zjcQkVJSJ_AwC9M8R9BTSESRzcp.xml
new file mode 100644
index 0000000..58cd85b
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/2zjcQkVJSJ_AwC9M8R9BTSESRzcp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/BjxNC43HIPP8KZwg_cceb68ikkAd.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/BjxNC43HIPP8KZwg_cceb68ikkAd.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/BjxNC43HIPP8KZwg_cceb68ikkAd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/BjxNC43HIPP8KZwg_cceb68ikkAp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/BjxNC43HIPP8KZwg_cceb68ikkAp.xml
new file mode 100644
index 0000000..ea866dd
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/BjxNC43HIPP8KZwg_cceb68ikkAp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/GKJsEpq9HmT2JOvWOg3ZiDtMKEId.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/GKJsEpq9HmT2JOvWOg3ZiDtMKEId.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/GKJsEpq9HmT2JOvWOg3ZiDtMKEId.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/GKJsEpq9HmT2JOvWOg3ZiDtMKEIp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/GKJsEpq9HmT2JOvWOg3ZiDtMKEIp.xml
new file mode 100644
index 0000000..6cd4da7
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/GKJsEpq9HmT2JOvWOg3ZiDtMKEIp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUd.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUp.xml
new file mode 100644
index 0000000..a9c1803
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/KocSmEw1PpelhlG7ZNeMUdHVtywd.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/KocSmEw1PpelhlG7ZNeMUdHVtywd.xml
new file mode 100644
index 0000000..7a6326b
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/KocSmEw1PpelhlG7ZNeMUdHVtywd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/KocSmEw1PpelhlG7ZNeMUdHVtywp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/KocSmEw1PpelhlG7ZNeMUdHVtywp.xml
new file mode 100644
index 0000000..d262f87
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/KocSmEw1PpelhlG7ZNeMUdHVtywp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/TMK4UzWHdRLhy_w-CHt9y11Q8XAd.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/TMK4UzWHdRLhy_w-CHt9y11Q8XAd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/TMK4UzWHdRLhy_w-CHt9y11Q8XAd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/TMK4UzWHdRLhy_w-CHt9y11Q8XAp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/TMK4UzWHdRLhy_w-CHt9y11Q8XAp.xml
new file mode 100644
index 0000000..77329db
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/TMK4UzWHdRLhy_w-CHt9y11Q8XAp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZN2RlSIbyWXhOxbxxI4hOawbMD4d.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZN2RlSIbyWXhOxbxxI4hOawbMD4d.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZN2RlSIbyWXhOxbxxI4hOawbMD4d.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZN2RlSIbyWXhOxbxxI4hOawbMD4p.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZN2RlSIbyWXhOxbxxI4hOawbMD4p.xml
new file mode 100644
index 0000000..8e01b55
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZN2RlSIbyWXhOxbxxI4hOawbMD4p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZdVxxv9BsNz7MGUxtEc6Pq3qh1Md.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZdVxxv9BsNz7MGUxtEc6Pq3qh1Md.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZdVxxv9BsNz7MGUxtEc6Pq3qh1Md.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZdVxxv9BsNz7MGUxtEc6Pq3qh1Mp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZdVxxv9BsNz7MGUxtEc6Pq3qh1Mp.xml
new file mode 100644
index 0000000..a62ce64
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/ZdVxxv9BsNz7MGUxtEc6Pq3qh1Mp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/iMwdHOXOBiBXhnA_li8gtEJVTjcd.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/iMwdHOXOBiBXhnA_li8gtEJVTjcd.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/iMwdHOXOBiBXhnA_li8gtEJVTjcd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/iMwdHOXOBiBXhnA_li8gtEJVTjcp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/iMwdHOXOBiBXhnA_li8gtEJVTjcp.xml
new file mode 100644
index 0000000..a4a8be3
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/iMwdHOXOBiBXhnA_li8gtEJVTjcp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/qD-kr16wmwlzR-nIg1IG_vvRrWkd.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/qD-kr16wmwlzR-nIg1IG_vvRrWkd.xml
new file mode 100644
index 0000000..4356a6a
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/qD-kr16wmwlzR-nIg1IG_vvRrWkd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/qD-kr16wmwlzR-nIg1IG_vvRrWkp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/qD-kr16wmwlzR-nIg1IG_vvRrWkp.xml
new file mode 100644
index 0000000..603491d
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/qD-kr16wmwlzR-nIg1IG_vvRrWkp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/rnpMu7jn2QWt_rQcz8FJ-MxGzVId.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/rnpMu7jn2QWt_rQcz8FJ-MxGzVId.xml
new file mode 100644
index 0000000..7a6326b
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/rnpMu7jn2QWt_rQcz8FJ-MxGzVId.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/rnpMu7jn2QWt_rQcz8FJ-MxGzVIp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/rnpMu7jn2QWt_rQcz8FJ-MxGzVIp.xml
new file mode 100644
index 0000000..218c5b5
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/rnpMu7jn2QWt_rQcz8FJ-MxGzVIp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/trBOSMFt-ZFz0tI8PrpBhVjGM5Md.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/trBOSMFt-ZFz0tI8PrpBhVjGM5Md.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/trBOSMFt-ZFz0tI8PrpBhVjGM5Md.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/trBOSMFt-ZFz0tI8PrpBhVjGM5Mp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/trBOSMFt-ZFz0tI8PrpBhVjGM5Mp.xml
new file mode 100644
index 0000000..078dc96
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/trBOSMFt-ZFz0tI8PrpBhVjGM5Mp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/zp0wS8F9EP0ARGsuyU8i2Z0DMsQp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/zp0wS8F9EP0ARGsuyU8i2Z0DMsQp.xml
deleted file mode 100644
index 65c7868..0000000
--- a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/zp0wS8F9EP0ARGsuyU8i2Z0DMsQp.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/resources/project/root/6xhH2l9GP9loT6TdFn_Mo65sDHgp.xml b/resources/project/root/6xhH2l9GP9loT6TdFn_Mo65sDHgp.xml
new file mode 100644
index 0000000..b1ca35e
--- /dev/null
+++ b/resources/project/root/6xhH2l9GP9loT6TdFn_Mo65sDHgp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQd.xml b/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQd.xml
index e794403..438f9d5 100644
--- a/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQd.xml
+++ b/resources/project/root/GiiBklLgTxteCEmomM8RCvWT0nQd.xml
@@ -1,2 +1,2 @@
-
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/resources/project/root/HoHDHQ_WvHAAKj5aJOrvrg_vpt8p.xml b/resources/project/root/HoHDHQ_WvHAAKj5aJOrvrg_vpt8p.xml
new file mode 100644
index 0000000..ec7cfd3
--- /dev/null
+++ b/resources/project/root/HoHDHQ_WvHAAKj5aJOrvrg_vpt8p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/root/LUgSFhI3RPozNzNcutxrczVe6f0p.xml b/resources/project/root/LUgSFhI3RPozNzNcutxrczVe6f0p.xml
new file mode 100644
index 0000000..cfaf73d
--- /dev/null
+++ b/resources/project/root/LUgSFhI3RPozNzNcutxrczVe6f0p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/root/WZRuNzqc-Db7NcQAZO8Y-R8U9ccp.xml b/resources/project/root/WZRuNzqc-Db7NcQAZO8Y-R8U9ccp.xml
new file mode 100644
index 0000000..0a54bce
--- /dev/null
+++ b/resources/project/root/WZRuNzqc-Db7NcQAZO8Y-R8U9ccp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/uuid-366ca619-578a-4bc0-8012-bfa62d28c37f.xml b/resources/project/uuid-366ca619-578a-4bc0-8012-bfa62d28c37f.xml
new file mode 100644
index 0000000..a75f7a8
--- /dev/null
+++ b/resources/project/uuid-366ca619-578a-4bc0-8012-bfa62d28c37f.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file