Assignment
Preparation
All assignments must be prepared in R Markdown. The dataset used for
your project must be read directly from a URL in RMarkdown so that I can
run your source file on my machine without making any modifications. If
your dataset is not available on a website, you may upload the file to
your GitHub repository and read it directly from there. We will outline
the steps to configure your GitHub repository and locate the correct URL
for your dataset in a subsequent section.
A well-structured statistical or data science report ensures clarity,
reproducibility, and actionable insights. Below is a standard structure,
adaptable based on the audience (technical vs. non-technical) and
project scope
- Introduction
- Problem statement: What question(s) are you
addressing?
- Objectives: Goals of the analysis (e.g.,
prediction, inference, exploration).
- Background: Context (industry, prior work, why the
problem matters).
- Data source(s): How/where was data collected?
- Data Description
- Dataset overview: Size (rows, columns), variables,
time range.
- Variables: List with descriptions (include units,
measurement scales).
- Data collection methods: Sampling, biases,
limitations.
- Ethical considerations: Privacy, anonymization,
biases.
- Data Processing
- Handling missing values, outliers, and duplicates.
- Transformations, scaling, etc.
- Exploratory Data Analysis (EDA)
- Visualizations (distributions, correlations, trends).
- Summary statistics.
- Modeling approach
- Algorithms chosen (e.g., linear regression, random forest) and
why.
- Validation strategy (train-test split, cross-validation).
- Performance metrics (e.g., RMSE, accuracy, AUC-ROC).
- Results
- Key findings: Supported by visuals (tables, graphs).
- Model performance: Metrics compared to benchmarks/baselines.
- Statistical significance: p-values, confidence intervals (if
applicable).
- Limitations: Assumptions, caveats, or unexpected results.
- Discussion
- Interpretation: What do the results mean in context?
- Comparison to expectations: Hypotheses confirmed/rejected?
- Broader implications: Business, scientific, or policy
recommendations.
- Failures/unanswered questions: What didn’t work? Why?
- Conclusion & Recommendations
- Summary: Reiterate key takeaways.
- References
- Citations for papers (if any).
Assignment
Submission
First of all, all assignments must be submitted to the D2L dropbox.
Please don’t send your report via email. To submit your report to D2L
dropbox, go to D2L to submit your work: Assessment =>
Assignments.
- Two required files
- upload the RMarkdown source file to Dropbox,
and
- Copy the URL of your published report and
paste it into the D2L dropbox as
required for all assignments throughout the
semester.
Publishing Report on
RPubs
- Steps for publishing your HTML format report on RPubs
- Register an RPubs account (https://rpubs.com/)
- Stay singed in to your account
- Knit you RMarkdown report to HTML format
- Click the RPubs publish icon
on the top-right of
your HTML document.
- Select RPubs
- Click Publish
- Add a title of your report in the
title field (this helps others find your report via
search)
- (Optional but recommended) Add a brief description
summarizing your report.
- Enter a descriptive filename to complete your
report’s URL.
- Click Continue
- Your report will now be published in RPubs
- Copy the URL of your published report and
paste it into the D2L dropbox as
required for all assignments throughout the
semester.
Publishing Report on
GitHub Repository
The following is a step-by-step guide to setting up a GitHub
repository for a webpage and finding its accessible URL
- Sign in to your GitHub account
- Use my GitHub account
pengdsci
as an example.
- Create a New Repository
- Click the
+
icon in the top-right corner and select
New repository.
- Name your repository: for example,
STA888
.
- Choose Public (Private repos require a paid plan for GitHub
Pages).
- Check: Add a README file (optional but recommended).
- Click Create repository.
- Upload Data and Report Files
- To upload your first file to the repository,
- Go to Quick setup, click
uploading an existing file
- Drag and drop your files for batch uploading
- To upload subsequent files
- Click
+
next to the green button
<>Code and select Upload files
- Drag and drop the files you want to upload.
- Create a Folder with a Repository: Creating folders
and sub-folders within a repository helps organize different types of
files, such as images, data, and notes. To create a folder in a
repository:
- Click
+
next to the green button
<>Code and select
Create new files
- In the
Name your file...
field, enter your folder name
followed by / (e.g., project/
) and hit
Enter.
- Add a keyword describing the folder’s purpose (e.g.,
project-files
) in the field
Name your file...
- Click the green button labeled with Commit change…
to finalize the folder creation.
- Repeat these steps to create additional folders or sub-folders as
needed.
- Enable/Configure GitHub Pages
- Go to your repository’s Settings tab.
- In the left sidebar, click Pages.
- Under Build and deployment
- Branch: click
None
drop down, select
main
- Folder: select the default
/ (root)
.
- Click Save.
- Find Your Accessible URL of the Repository:
- Wait a few moments after you save the configurations in the above
step, refresh the page, and you will see the URL of your repository
under GitHub Pages:
- If your repository has a file named
index.html
, this
file will be displayed when visiting the URL. Otherwise, you will see a
404 error page. This does not mean that you set
up the page incorrectly. It simply means that you don’t have an
HTML file named index.html
in your repository.
- Once your repository is enabled/configured, you can locate the URLs
of specific files. For illustration, we assume the repository is named
STA888 and your GitHub account is
pengdsci.
- Example 1: If a PDF file named
guidelines.pdf
is in the repository
STA888, its URL would be: https://pengdsci.github.io/STA888/guidelines.pdf.[this
is only a hypothetical URL].
- Example 2: If an HTML report named
report01.html
is in a folder called project
,
its URL would be: https://pengdsci.github.io/STA888/project/report01.html.
[this is only a hypothetical URL].
- If you have created subfolders or nested subfolders, you can use the
same pattern to locate the URL of a file within any specific folder or
subfolder.
Best Practices for Folder Structure: Create a
directory on your machine using the same repository
name and mirror the folder structure from your
GitHub repository. This will simplify future updates and new file
creation.
LS0tDQp0aXRsZTogJ0d1aWRlbGluZXMgZm9yIEFzc2lnbm1lbnQgUHJlcGFyYXRpb24gYW5kIFN1Ym1pc3Npb24nDQphdXRob3I6ICcnDQpkYXRlOiAiIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50OiAgICAgICAgICAgIyBvdXRwdXQgZG9jdW1lbnQgZm9ybWF0DQogICAgdG9jOiB5ZXMgICAgICAgICAgICAgICAjIGFkZCB0YWJsZSBjb250ZW50cw0KICAgIHRvY19mbG9hdDogeWVzICAgICAgICAgIyB0b2NfcHJvcGVydHk6IGZsb2F0aW5nDQogICAgdG9jX2RlcHRoOiA0ICAgICAgICAgICAjIGRlcHRoIG9mIFRPQyBoZWFkaW5ncw0KICAgIGZpZ193aWR0aDogNiAgICAgICAgICAgIyBnbG9iYWwgZmlndXJlIHdpZHRoDQogICAgZmlnX2hlaWdodDogNCAgICAgICAgICAjIGdsb2JhbCBmaWd1cmUgaGVpZ2h0DQogICAgZmlnX2NhcHRpb246IHllcyAgICAgICAjIGFkZCBmaWd1cmUgY2FwdGlvbg0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzICAgIyBudW1iZXJpbmcgc2VjdGlvbiBoZWFkaW5ncw0KICAgIHRvY19jb2xsYXBzZWQ6IHllcyAgICAgIyBUT0Mgc3ViaGVhZGluZyBjbGFwc2luZw0KICAgIGNvZGVfZm9sZGluZzogaGlkZSAgICAgIyBmb2xkaW5nL3Nob3dpbmcgY29kZSANCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMgICAgICMgYWxsb3cgdG8gZG93bmxvYWQgY29tcGxldGUgUk1hcmtkb3duIHNvdXJjZSBjb2RlDQogICAgc21vb3RoX3Njcm9sbDogeWVzICAgICAjIHNjcm9sbGluZyB0ZXh0IG9mIHRoZSBkb2N1bWVudA0KICAgIHRoZW1lOiBsdW1lbiAgICAgICAgICAgIyB2aXN1YWwgdGhlbWUgZm9yIEhUTUwgZG9jdW1lbnQgb25seQ0KICAgIGhpZ2hsaWdodDogdGFuZ28gICAgICAgIyBjb2RlIHN5bnRheCBoaWdodGxpZ2h0aW5nIHN0eWxlcw0KICBwZGZfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6ICc0Jw0KLS0tDQoNCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0NCmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8NCiAgICBsaXN0LXN0eWxlOnVwcGVyLXJvbWFuOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCn0NCg0KaDEudGl0bGUgeyAgICAvKiBsZXZlbCAxIGhlYWRlciBvZiB0aXRsZSAgKi8NCiAgZm9udC1zaXplOiAyNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmg0LmRhdGUgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6IERhcmtCbHVlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDIwcHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoMiB7IC8qIEhlYWRlciAyIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmgzIHsgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE2cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KLyogQWRkIGRvdHMgYWZ0ZXIgbnVtYmVyZWQgaGVhZGVycyAqLw0KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgew0KICBjb250ZW50OiAiLiI7DQp9DQpgYGANCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQojIGNvZGUgY2h1bmsgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIFIgY29kZSwgd2FybmluZ3MsIGFuZCBvdXRwdXQgDQojIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCBmaWxlcy4NCg0KaWYgKCFyZXF1aXJlKCJrbml0ciIpKSB7ICAgICAgICAgICAgICAgICAgICAgICMgdXNlIGNvbmRpdGlvbmFsIHN0YXRlbWVudCB0byBkZXRlY3QNCiAgIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikgICAgICAgICAgICAgICAgICAjIHdoZXRoZXIgYSBwYWNrYWdlIHdhcyBpbnN0YWxsZWQgaW4NCiAgIGxpYnJhcnkoa25pdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHlvdXIgbWFjaGluZS4gSWYgbm90LCBpbnN0YWxsIGl0IGFuZA0KfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbG9hZCBpdCB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkuDQojDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsICAgICAgICAgICAgIyBpbmNsdWRlIGNvZGUgY2h1bmsgaW4gdGhlIG91dHB1dCBmaWxlDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgICAgICAgIyBzb21ldGltZXMsIHlvdSBjb2RlIG1heSBwcm9kdWNlIHdhcm5pbmcgbWVzc2FnZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB5b3UgY2FuIGNob29zZSB0byBpbmNsdWRlIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIGluDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgb3V0cHV0IGZpbGUuIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBUUlVFLCAgICAgICAgICMgeW91IGNhbiBhbHNvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIG91dHB1dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIG91dHB1dCBmaWxlLg0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwgICAgICAgICMgc3VwcHJlc3MgbWVzc2FnZXMgDQogICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IE5BICAgICAgICAgICAgIyByZW1vdmUgdGhlIGRlZmF1bHQgbGVhZGluZyBoYXNoIHRhZ3MgaW4gdGhlIG91dHB1dA0KICAgICAgICAgICAgICAgICAgICAgICkgICANCmBgYA0KDQpcDQoNClwNCg0KIyBBc3NpZ25tZW50IFByZXBhcmF0aW9uDQoNCkFsbCBhc3NpZ25tZW50cyBtdXN0IGJlIHByZXBhcmVkIGluIFIgTWFya2Rvd24uIFRoZSBkYXRhc2V0IHVzZWQgZm9yIHlvdXIgcHJvamVjdCBtdXN0IGJlIHJlYWQgZGlyZWN0bHkgZnJvbSBhIFVSTCBpbiBSTWFya2Rvd24gc28gdGhhdCBJIGNhbiBydW4geW91ciBzb3VyY2UgZmlsZSBvbiBteSBtYWNoaW5lIHdpdGhvdXQgbWFraW5nIGFueSBtb2RpZmljYXRpb25zLiBJZiB5b3VyIGRhdGFzZXQgaXMgbm90IGF2YWlsYWJsZSBvbiBhIHdlYnNpdGUsIHlvdSBtYXkgdXBsb2FkIHRoZSBmaWxlIHRvIHlvdXIgR2l0SHViIHJlcG9zaXRvcnkgYW5kIHJlYWQgaXQgZGlyZWN0bHkgZnJvbSB0aGVyZS4gV2Ugd2lsbCBvdXRsaW5lIHRoZSBzdGVwcyB0byBjb25maWd1cmUgeW91ciBHaXRIdWIgcmVwb3NpdG9yeSBhbmQgbG9jYXRlIHRoZSBjb3JyZWN0IFVSTCBmb3IgeW91ciBkYXRhc2V0IGluIGEgc3Vic2VxdWVudCBzZWN0aW9uLg0KDQpBIHdlbGwtc3RydWN0dXJlZCBzdGF0aXN0aWNhbCBvciBkYXRhIHNjaWVuY2UgcmVwb3J0IGVuc3VyZXMgY2xhcml0eSwgcmVwcm9kdWNpYmlsaXR5LCBhbmQgYWN0aW9uYWJsZSBpbnNpZ2h0cy4gQmVsb3cgaXMgYSBzdGFuZGFyZCBzdHJ1Y3R1cmUsIGFkYXB0YWJsZSBiYXNlZCBvbiB0aGUgYXVkaWVuY2UgKHRlY2huaWNhbCB2cy4gbm9uLXRlY2huaWNhbCkgYW5kIHByb2plY3Qgc2NvcGUNCg0KKiAqKkludHJvZHVjdGlvbioqDQogICsgKipQcm9ibGVtIHN0YXRlbWVudCoqOiBXaGF0IHF1ZXN0aW9uKHMpIGFyZSB5b3UgYWRkcmVzc2luZz8NCiAgKyAqKk9iamVjdGl2ZXMqKjogR29hbHMgb2YgdGhlIGFuYWx5c2lzIChlLmcuLCBwcmVkaWN0aW9uLCBpbmZlcmVuY2UsIGV4cGxvcmF0aW9uKS4NCiAgKyAqKkJhY2tncm91bmQqKjogQ29udGV4dCAoaW5kdXN0cnksIHByaW9yIHdvcmssIHdoeSB0aGUgcHJvYmxlbSBtYXR0ZXJzKS4NCiAgKyAqKkRhdGEgc291cmNlKHMpKio6IEhvdy93aGVyZSB3YXMgZGF0YSBjb2xsZWN0ZWQ/DQoNCiogKipEYXRhIERlc2NyaXB0aW9uKioNCiAgKyAqKkRhdGFzZXQgb3ZlcnZpZXcqKjogU2l6ZSAocm93cywgY29sdW1ucyksIHZhcmlhYmxlcywgdGltZSByYW5nZS4NCiAgKyAqKlZhcmlhYmxlcyoqOiBMaXN0IHdpdGggZGVzY3JpcHRpb25zIChpbmNsdWRlIHVuaXRzLCBtZWFzdXJlbWVudCBzY2FsZXMpLg0KICArICoqRGF0YSBjb2xsZWN0aW9uIG1ldGhvZHMqKjogU2FtcGxpbmcsIGJpYXNlcywgbGltaXRhdGlvbnMuDQogICsgKipFdGhpY2FsIGNvbnNpZGVyYXRpb25zKio6IFByaXZhY3ksIGFub255bWl6YXRpb24sIGJpYXNlcy4NCg0KKiAqKkRhdGEgUHJvY2Vzc2luZyoqDQogICsgSGFuZGxpbmcgbWlzc2luZyB2YWx1ZXMsIG91dGxpZXJzLCBhbmQgZHVwbGljYXRlcy4NCiAgKyBUcmFuc2Zvcm1hdGlvbnMsIHNjYWxpbmcsIGV0Yy4NCg0KKiAqKkV4cGxvcmF0b3J5IERhdGEgQW5hbHlzaXMgKEVEQSkqKg0KICArIFZpc3VhbGl6YXRpb25zIChkaXN0cmlidXRpb25zLCBjb3JyZWxhdGlvbnMsIHRyZW5kcykuDQogICsgU3VtbWFyeSBzdGF0aXN0aWNzLg0KDQoqICoqTW9kZWxpbmcgYXBwcm9hY2gqKg0KICArIEFsZ29yaXRobXMgY2hvc2VuIChlLmcuLCBsaW5lYXIgcmVncmVzc2lvbiwgcmFuZG9tIGZvcmVzdCkgYW5kIHdoeS4NCiAgKyBWYWxpZGF0aW9uIHN0cmF0ZWd5ICh0cmFpbi10ZXN0IHNwbGl0LCBjcm9zcy12YWxpZGF0aW9uKS4NCiAgKyBQZXJmb3JtYW5jZSBtZXRyaWNzIChlLmcuLCBSTVNFLCBhY2N1cmFjeSwgQVVDLVJPQykuDQoNCiogKipSZXN1bHRzKioNCiAgKyBLZXkgZmluZGluZ3M6IFN1cHBvcnRlZCBieSB2aXN1YWxzICh0YWJsZXMsIGdyYXBocykuDQogICsgTW9kZWwgcGVyZm9ybWFuY2U6IE1ldHJpY3MgY29tcGFyZWQgdG8gYmVuY2htYXJrcy9iYXNlbGluZXMuDQogICsgU3RhdGlzdGljYWwgc2lnbmlmaWNhbmNlOiBwLXZhbHVlcywgY29uZmlkZW5jZSBpbnRlcnZhbHMgKGlmIGFwcGxpY2FibGUpLg0KICArIExpbWl0YXRpb25zOiBBc3N1bXB0aW9ucywgY2F2ZWF0cywgb3IgdW5leHBlY3RlZCByZXN1bHRzLg0KDQoqICoqRGlzY3Vzc2lvbioqDQogICsgSW50ZXJwcmV0YXRpb246IFdoYXQgZG8gdGhlIHJlc3VsdHMgbWVhbiBpbiBjb250ZXh0Pw0KICArIENvbXBhcmlzb24gdG8gZXhwZWN0YXRpb25zOiBIeXBvdGhlc2VzIGNvbmZpcm1lZC9yZWplY3RlZD8NCiAgKyBCcm9hZGVyIGltcGxpY2F0aW9uczogQnVzaW5lc3MsIHNjaWVudGlmaWMsIG9yIHBvbGljeSByZWNvbW1lbmRhdGlvbnMuDQogICsgRmFpbHVyZXMvdW5hbnN3ZXJlZCBxdWVzdGlvbnM6IFdoYXQgZGlkbuKAmXQgd29yaz8gV2h5Pw0KDQoqICoqQ29uY2x1c2lvbiAmIFJlY29tbWVuZGF0aW9ucyoqDQogICsgU3VtbWFyeTogUmVpdGVyYXRlIGtleSB0YWtlYXdheXMuDQoNCiogKipSZWZlcmVuY2VzKioNCiAgKyBDaXRhdGlvbnMgZm9yIHBhcGVycyAoaWYgYW55KS4NCg0KDQoNCg0KIyBBc3NpZ25tZW50IFN1Ym1pc3Npb24NCg0KRmlyc3Qgb2YgYWxsLCBhbGwgYXNzaWdubWVudHMgbXVzdCBiZSBzdWJtaXR0ZWQgdG8gdGhlIEQyTCBkcm9wYm94LiBQbGVhc2UgZG9uJ3Qgc2VuZCB5b3VyIHJlcG9ydCB2aWEgZW1haWwuIFRvIHN1Ym1pdCB5b3VyIHJlcG9ydCB0byBEMkwgZHJvcGJveCwgZ28gdG8gRDJMIHRvIHN1Ym1pdCB5b3VyIHdvcms6ICoqQXNzZXNzbWVudCA9PiBBc3NpZ25tZW50cyoqLg0KDQoqIFR3byByZXF1aXJlZCBmaWxlcw0KICArICoqdXBsb2FkKiogdGhlIFJNYXJrZG93biBzb3VyY2UgZmlsZSB0byBEcm9wYm94LCBhbmQNCiAgKyAqKkNvcHkgdGhlIFVSTCoqIG9mIHlvdXIgcHVibGlzaGVkIHJlcG9ydCBhbmQgKipwYXN0ZSBpdCBpbnRvIHRoZSBEMkwgZHJvcGJveCoqIGFzIDxmb250IGNvbG9yID0gInJlZCI+KipcY29sb3J7cmVkfXJlcXVpcmVkIGZvciBhbGwgYXNzaWdubWVudHMgdGhyb3VnaG91dCB0aGUgc2VtZXN0ZXIqKi48L2ZvbnQ+IA0KDQoNCg0KDQojIFB1Ymxpc2hpbmcgUmVwb3J0IG9uIFJQdWJzDQoNCg0KKiBTdGVwcyBmb3IgcHVibGlzaGluZyB5b3VyIEhUTUwgZm9ybWF0IHJlcG9ydCBvbiBSUHVicw0KICArICoqUmVnaXN0ZXIgYW4gUlB1YnMgYWNjb3VudCoqICg8aHR0cHM6Ly9ycHVicy5jb20vPikNCiAgKyAqKlN0YXkgc2luZ2VkIGluKiogdG8geW91ciBhY2NvdW50DQogICsgKipLbml0IHlvdSBSTWFya2Rvd24gcmVwb3J0KiogdG8gSFRNTCBmb3JtYXQNCiAgKyAqKkNsaWNrIHRoZSBSUHVicyBwdWJsaXNoIGljb24qKiA8aW1nIHNyYz0iUlB1YnNJY29uLnBuZyIgd2lkdGg9IjkwIiBoZWlnaHQ9IjIwIj4gb24gdGhlIHRvcC1yaWdodCBvZiB5b3VyIEhUTUwgZG9jdW1lbnQuDQogICsgU2VsZWN0ICoqUlB1YnMqKg0KICArIENsaWNrICoqUHVibGlzaCoqDQogICsgKipBZGQgYSB0aXRsZSoqIG9mIHlvdXIgcmVwb3J0IGluIHRoZSAqKnRpdGxlKiogZmllbGQgKHRoaXMgaGVscHMgb3RoZXJzIGZpbmQgeW91ciByZXBvcnQgdmlhIHNlYXJjaCkNCiAgKyAoT3B0aW9uYWwgYnV0IHJlY29tbWVuZGVkKSAqKkFkZCBhIGJyaWVmIGRlc2NyaXB0aW9uKiogc3VtbWFyaXppbmcgeW91ciByZXBvcnQuDQogICsgKipFbnRlciBhIGRlc2NyaXB0aXZlIGZpbGVuYW1lKiogdG8gY29tcGxldGUgeW91ciByZXBvcnTigJlzIFVSTC4NCiAgKyBDbGljayAqKkNvbnRpbnVlKioNCiAgKyBZb3VyIHJlcG9ydCB3aWxsIG5vdyBiZSBwdWJsaXNoZWQgaW4gKipSUHVicyoqDQogICsgKipDb3B5IHRoZSBVUkwqKiBvZiB5b3VyIHB1Ymxpc2hlZCByZXBvcnQgYW5kICoqcGFzdGUgaXQgaW50byB0aGUgRDJMIGRyb3Bib3gqKiBhcyA8Zm9udCBjb2xvciA9ICJyZWQiPioqXGNvbG9ye3JlZH1yZXF1aXJlZCBmb3IgYWxsIGFzc2lnbm1lbnRzIHRocm91Z2hvdXQgdGhlIHNlbWVzdGVyKiouPC9mb250Pg0KICANCiAgDQojIFB1Ymxpc2hpbmcgUmVwb3J0IG9uIEdpdEh1YiBSZXBvc2l0b3J5DQoNCg0KVGhlIGZvbGxvd2luZyBpcyBhIHN0ZXAtYnktc3RlcCBndWlkZSB0byBzZXR0aW5nIHVwIGEgR2l0SHViIHJlcG9zaXRvcnkgZm9yIGEgd2VicGFnZSBhbmQgZmluZGluZyBpdHMgYWNjZXNzaWJsZSBVUkwNCg0KKiAqKlNpZ24gaW4gdG8geW91ciBHaXRIdWIgYWNjb3VudCoqIA0KICArIFVzZSBteSBHaXRIdWIgYWNjb3VudCBgcGVuZ2RzY2lgIGFzIGFuIGV4YW1wbGUuDQoNCiogKipDcmVhdGUgYSA8Zm9udCBjb2xvciA9ICJyZWQiPk5ldyBSZXBvc2l0b3J5PC9mb250PioqDQogICsgQ2xpY2sgdGhlIGArYCBpY29uIGluIHRoZSB0b3AtcmlnaHQgY29ybmVyIGFuZCBzZWxlY3QgKipOZXcgcmVwb3NpdG9yeSoqLg0KICArIE5hbWUgeW91ciByZXBvc2l0b3J5OiBmb3IgZXhhbXBsZSwgYFNUQTg4OGAuDQogICsgQ2hvb3NlIFB1YmxpYyAoUHJpdmF0ZSByZXBvcyByZXF1aXJlIGEgcGFpZCBwbGFuIGZvciBHaXRIdWIgUGFnZXMpLg0KICArIENoZWNrOiBBZGQgYSBSRUFETUUgZmlsZSAob3B0aW9uYWwgYnV0IHJlY29tbWVuZGVkKS4NCiAgKyBDbGljayBDcmVhdGUgcmVwb3NpdG9yeS4NCiAgDQoNCiogKipVcGxvYWQgRGF0YSBhbmQgUmVwb3J0IEZpbGVzKioNCiAgKyBUbyB1cGxvYWQgeW91ciBmaXJzdCBmaWxlIHRvIHRoZSByZXBvc2l0b3J5LCANCiAgICAtIEdvIHRvICoqUXVpY2sgc2V0dXAqKiwgY2xpY2sgYHVwbG9hZGluZyBhbiBleGlzdGluZyBmaWxlYA0KICAgIC0gRHJhZyBhbmQgZHJvcCB5b3VyIGZpbGVzIGZvciBiYXRjaCB1cGxvYWRpbmcNCiAgKyBUbyB1cGxvYWQgc3Vic2VxdWVudCBmaWxlcw0KICAgIC0gQ2xpY2sgYCtgIG5leHQgdG8gdGhlIGdyZWVuIGJ1dHRvbiAqKjw+Q29kZSoqIGFuZCBzZWxlY3QgYFVwbG9hZCBmaWxlc2ANCiAgICAtIERyYWcgYW5kIGRyb3AgdGhlIGZpbGVzIHlvdSB3YW50IHRvIHVwbG9hZC4NCg0KKiAqKkNyZWF0ZSBhIEZvbGRlciB3aXRoIGEgUmVwb3NpdG9yeSoqOiBDcmVhdGluZyBmb2xkZXJzIGFuZCBzdWItZm9sZGVycyB3aXRoaW4gYSByZXBvc2l0b3J5IGhlbHBzIG9yZ2FuaXplIGRpZmZlcmVudCB0eXBlcyBvZiBmaWxlcywgc3VjaCBhcyBpbWFnZXMsIGRhdGEsIGFuZCBub3Rlcy4gVG8gY3JlYXRlIGEgZm9sZGVyIGluIGEgcmVwb3NpdG9yeToNCiAgKyBDbGljayBgK2AgbmV4dCB0byB0aGUgZ3JlZW4gYnV0dG9uICoqPD5Db2RlKiogYW5kIHNlbGVjdCBgQ3JlYXRlIG5ldyBmaWxlc2ANCiAgKyBJbiB0aGUgYE5hbWUgeW91ciBmaWxlLi4uYCBmaWVsZCwgZW50ZXIgeW91ciBmb2xkZXIgbmFtZSBmb2xsb3dlZCBieSAqKi8qKiAoZS5nLiwgYHByb2plY3QvYCkgYW5kIGhpdCAqKkVudGVyKiouDQogICsgQWRkIGEga2V5d29yZCBkZXNjcmliaW5nIHRoZSBmb2xkZXLigJlzIHB1cnBvc2UgKGUuZy4sIGBwcm9qZWN0LWZpbGVzYCkgaW4gdGhlIGZpZWxkIGBOYW1lIHlvdXIgZmlsZS4uLmANCiAgKyBDbGljayB0aGUgZ3JlZW4gYnV0dG9uIGxhYmVsZWQgd2l0aCAqKkNvbW1pdCBjaGFuZ2UuLi4qKiB0byBmaW5hbGl6ZSB0aGUgZm9sZGVyIGNyZWF0aW9uLg0KICArIFJlcGVhdCB0aGVzZSBzdGVwcyB0byBjcmVhdGUgYWRkaXRpb25hbCBmb2xkZXJzIG9yIHN1Yi1mb2xkZXJzIGFzIG5lZWRlZC4NCg0KKiAqKkVuYWJsZS9Db25maWd1cmUgR2l0SHViIFBhZ2VzKioNCiAgKyBHbyB0byB5b3VyIHJlcG9zaXRvcnnigJlzICoqU2V0dGluZ3MqKiB0YWIuDQogICsgSW4gdGhlIGxlZnQgc2lkZWJhciwgY2xpY2sgKipQYWdlcyoqLg0KICArIFVuZGVyICoqQnVpbGQgYW5kIGRlcGxveW1lbnQqKg0KICAgIC0gQnJhbmNoOiBjbGljayBgTm9uZWAgZHJvcCBkb3duLCBzZWxlY3QgICoqbWFpbioqIA0KICAgIC0gRm9sZGVyOiBzZWxlY3QgdGhlIGRlZmF1bHQgYC8gKHJvb3QpYC4NCiAgKyBDbGljayBTYXZlLg0KDQoqICoqRmluZCBZb3VyIEFjY2Vzc2libGUgVVJMIG9mIHRoZSBSZXBvc2l0b3J5Kio6IA0KICArIFdhaXQgYSBmZXcgbW9tZW50cyBhZnRlciB5b3Ugc2F2ZSB0aGUgY29uZmlndXJhdGlvbnMgaW4gdGhlIGFib3ZlIHN0ZXAsIHJlZnJlc2ggdGhlIHBhZ2UsIGFuZCB5b3Ugd2lsbCBzZWUgdGhlIFVSTCBvZiB5b3VyIHJlcG9zaXRvcnkgdW5kZXIgKipHaXRIdWIgUGFnZXMqKjogDQogICAgLSBZb3VyIHNpdGUgaXMgbGl2ZSBhdCA8Zm9udCBjb2xvciA9ICJibHVlIj5odHRwczovL3Blbmdkc2NpLmdpdGh1Yi5pby9TVEE4ODgvPC9mb250Pi4NCiAgKyBJZiB5b3VyIHJlcG9zaXRvcnkgaGFzIGEgZmlsZSBuYW1lZCBgaW5kZXguaHRtbGAsIHRoaXMgZmlsZSB3aWxsIGJlIGRpc3BsYXllZCB3aGVuIHZpc2l0aW5nIHRoZSBVUkwuIE90aGVyd2lzZSwgeW91IHdpbGwgc2VlIGEgKio0MDQgZXJyb3IgcGFnZSoqLiBUaGlzIGRvZXMgbm90IG1lYW4gdGhhdCB5b3UgKipzZXQgdXAqKiB0aGUgcGFnZSBpbmNvcnJlY3RseS4gSXQgc2ltcGx5IG1lYW5zIHRoYXQgeW91IGRvbuKAmXQgaGF2ZSBhbiBIVE1MIGZpbGUgbmFtZWQgYGluZGV4Lmh0bWxgIGluIHlvdXIgcmVwb3NpdG9yeS4NCiAgDQogIA0KKiBPbmNlIHlvdXIgcmVwb3NpdG9yeSBpcyBlbmFibGVkL2NvbmZpZ3VyZWQsIHlvdSBjYW4gbG9jYXRlIHRoZSBVUkxzIG9mIHNwZWNpZmljIGZpbGVzLiBGb3IgaWxsdXN0cmF0aW9uLCB3ZSBhc3N1bWUgdGhlIHJlcG9zaXRvcnkgaXMgbmFtZWQgKipTVEE4ODgqKiBhbmQgeW91ciBHaXRIdWIgYWNjb3VudCBpcyAqKnBlbmdkc2NpKiouDQogICsgKipFeGFtcGxlIDEqKjogSWYgYSBQREYgZmlsZSBuYW1lZCBgZ3VpZGVsaW5lcy5wZGZgIGlzIGluIHRoZSByZXBvc2l0b3J5ICoqU1RBODg4KiosIGl0cyBVUkwgd291bGQgYmU6DQo8Zm9udCBjb2xvcj0iYmx1ZSI+KipodHRwczovL3Blbmdkc2NpLmdpdGh1Yi5pby9TVEE4ODgvZ3VpZGVsaW5lcy5wZGYqKjwvZm9udD4uPGZvbnQgY29sb3I9InJlZCI+W3RoaXMgaXMgb25seSBhIGh5cG90aGV0aWNhbCBVUkxdLjwvZm9udD4NCiAgKyAqKkV4YW1wbGUgMioqOiBJZiBhbiBIVE1MIHJlcG9ydCBuYW1lZCBgcmVwb3J0MDEuaHRtbGAgaXMgaW4gYSBmb2xkZXIgY2FsbGVkIGBwcm9qZWN0YCwgaXRzIFVSTCB3b3VsZCBiZToNCjxmb250IGNvbG9yPSJibHVlIj4qKmh0dHBzOi8vcGVuZ2RzY2kuZ2l0aHViLmlvL1NUQTg4OC9wcm9qZWN0L3JlcG9ydDAxLmh0bWwqKjwvZm9udD4uIDxmb250IGNvbG9yPSJyZWQiPlt0aGlzIGlzIG9ubHkgYSBoeXBvdGhldGljYWwgVVJMXS48L2ZvbnQ+DQogICsgSWYgeW91IGhhdmUgY3JlYXRlZCBzdWJmb2xkZXJzIG9yIG5lc3RlZCBzdWJmb2xkZXJzLCB5b3UgY2FuIHVzZSB0aGUgc2FtZSBwYXR0ZXJuIHRvIGxvY2F0ZSB0aGUgVVJMIG9mIGEgZmlsZSB3aXRoaW4gYW55IHNwZWNpZmljIGZvbGRlciBvciBzdWJmb2xkZXIuDQoNCjx1bD4NCjxmb250IGNvbG9yPSJyZWQiPkJlc3QgUHJhY3RpY2VzIGZvciBGb2xkZXIgU3RydWN0dXJlPC9mb250PjogQ3JlYXRlIGEgZGlyZWN0b3J5IG9uIHlvdXIgbWFjaGluZSB1c2luZyB0aGUgc2FtZSAqKnJlcG9zaXRvcnkgbmFtZSoqIGFuZCAqKm1pcnJvcioqIHRoZSBmb2xkZXIgc3RydWN0dXJlIGZyb20geW91ciBHaXRIdWIgcmVwb3NpdG9yeS4gVGhpcyB3aWxsIHNpbXBsaWZ5IGZ1dHVyZSB1cGRhdGVzIGFuZCBuZXcgZmlsZSBjcmVhdGlvbi4NCjwvdWw+ICANCiAgDQogIA0KDQogIA0KICANCiAgDQogIA0KICANCiAgDQogIA0KICANCiAgDQogIA0KICANCiAgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K