R Markdown Projects

Modeling, Cross Validation, & Machine Learning

Linear & Logistic Regression Modeling Using Machine learning Approaches

A Blind Taste Test | [Report]
Predicting sommelier quality rankings of wine and wine type (red/white) utilizing chemical composition alone [click for more details]

  • Real world data; medium data set (approx. 6,500 observations)
  • Regularized linear & logistic regression prediction models, support vector machine (SVM) regression and classification models
  • Coefficient path analysis, hyperparameter tuning, and optimal cut off probability analysis for optimized accuracy and specificity.
  • Analysis goals:
    • Identifying the best possible prediction model for sommelier wine quality ranking based on chemical composition
    • Creating a white vs red prediction model for blend wines that do not neatly fall into either category


Hold That Plane! | [Report]
An analisis of global flight delay data and prediction model creation to reduce delays and increase live prediction capabilities [click for more details]

  • Synthetic data with forced missing values. Medium data set (over 3,500 observations)
  • Multiple Imputation by Chained Equations, Ruben’s rules, Recursive feature elimination, Principal Component Analysis, k-Means Clustering
  • Forward elimination model creation, cross validation, Receiver Operating Characteristic (ROC) comparison
  • Analysis goals:
    • Identifying the variables with greatest impact on overall flight delay for subsequent mitigation and preventative efforts
    • Live flight delay prediction based on available flight data prior to landing (predicting total delay time before flights depart)


Unsupervised Learning Algorithms and Predictive modeling

Big Back Behavior ] [Report]
Predicting obesity rankings based on behavioral survey results [click for more details]

  • Real world data; medium data set (approx 2,200 observations)
  • CART regression prediction models, CART classification prediction models, Bootstrap BAGGING regression prediction models, & Bootstrap BAGGING classification prediction models
  • Variable importance analysis, hyperparameter tuning, model pruning, ROC curve analysis & optimal cutoff identification
  • Analysis goals:
    • Develop overweight/obesity prediction model utilizing patient lifestyle and behavioral information, excluding weight
    • Develop weight independent prediction models for overweight/obesity to allow for prediction of those at risk based on behavioral & lifestyle choices


Can you pay me back? | [Report] & [Presentation]
Loan Default Borrower Data Clustering & Analysis [click for more details]

  • Report & supporting presentation
  • Synthetic data. Medium data set (approx. 1000 observations)
  • K means clustering, agglomerative hierarchical data clustering, principal component analysis, local outlier factor analysis


Blind Breast Biopsies | [Report]
Predicting Breast Tissue Biopsy Diagnosis In the Event of Incomplete Biopsy [click for more details]

  • Synthetic data. Small data set (approx. 600 observations)
  • Logistic predictive modeling, single-layer neural network model (perceptron) prediction, decision tree algorithms, ROC analysis, and bagging


Regression Analysis & Model Creation

Can We Predict the Future in Health? | [Report]
Framingham Heart Study Model Fitting and Cross Validatiion for BMI Predictions [click for more details]

  • Real world data. Medium data set (approx. 4,200 observations)
  • Linear regression model creation, box-cox transformation, mean square error (MSE) cross validation, logistic regression model creation, receiver operating characteristic (ROC) and area under the curve (AUC) model comparison


Data Visualization and Exploratory Data Analysis

Exploratory Data Analysis & Variable Relationship Exploration

I’m Going to Miss my Flight! | [Report]
An analysis of flight delay times across airports [click for more details]

  • Synthetic data with forced missing values. Medium data set (over 3,500 observations)
  • Analysis of variables impacting flight delays & solution implementation
  • ggplot & Plot_ly interactive visualizations


Exploratory Data Analysis

Presidential Fitness Test | [Report]
The Impact of Local Education, Poverty, and Unemployment Rates on County Presidential Election Results [click for more details]

  • Four real world data sets utilized. Large data sets (over 72,000 observations)
  • Relational data sets and data aggregation
  • GeoJSON & leaflet Interactive Map, ggplot


Time Series Data

The Price of Longevity | [Report]
An Analysis of Annual Income on Life Expectancy [click for more details]

  • Real world data. Large data set (over 35,000 observations)
  • An analysis of variables impacting average life expectancy
  • ggplot & Plot_ly interactive visualizations


SAS Projects

Linear Regression Analysis

Buisness Analytics Proposal

Pizzaz.com Speed Dating Comparability Prediction | [Proposal] & [Presentation] & [SAS Code]
Speed Dating Analytics & Online Dating Optimization [click for more details]

  • Synthetic data. Small data set (276 observations)
  • An analysis of variables impacting overall dater interest and linear regression prediction model creation
  • Proposal for data utilization and business improvement


Shiny/FlexDashboard Projects

Linear Regression Dashboard

Melbourne Housing Market | [R Shiny FlexDashboard]
[click for more details]

  • Real world data. Large data set (over 34,000 observations)
  • Housing market price regression analysis


Tableau Projects

Geospatial Data

Interactive Mapping

Presidential Election Results Per County Per Year | [Map]
[click for more details]

  • Real world data. Large data set (over 72,000 observations)
  • An analysis of Presidential Election Data from 2000 through 2020


Public Health Data

Tableau Storypoint & Dahsboard

National Health and Nutrition Examination Survey (NHANES) | [Storypoint] & [Dashboard]
[click for more details]

  • Real world data. Medium data set (approx. 7,900 observations)
  • An analysis of NHANES data of Smoking, Blood Pressure, and Serum Cholesterol Levels

LS0tDQp0aXRsZTogIlByb2plY3RzIGFuZCBQcmVzZW50YXRpb25zIDo8aW1nIHNyYz1cImh0dHBzOi8vbmxlcGVyYS5naXRodWIuaW8vc3RhNTUxL0hXMDEvaW1nL3Blbmd1aW5fY3V0ZS5wbmdcIiBzdHlsZT1cImZsb2F0OiByaWdodDsgd2lkdGg6IDEyJVwiLz4iDQpzdWJ0aXRsZTogIkxpbmtzIHRvIHJlbGV2YW50IGNvdXJzZXdvcmsgcHJvamVjdHMgYW5kIHByZXNlbnRhdGlvbnMiDQphdXRob3I6DQotIG5hbWU6IE5hdGFsaWUgTGVQZXJhDQogIGFmZmlsaWF0aW9uOiBXZXN0IENoZXN0ZXIgVW5pdmVyc2l0eSB8IE0uUy4gQXBwbGllZCBTdGF0aXN0aWNzLCBEYXRhIFNjaWVuY2UgQ29uY2VudHJhdG9uDQpkYXRlOiANCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIHRvY19jb2xsYXBzZTogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIHNtb290aF9zY3JvbGw6IHRydWUNCiAgICB0aGVtZTogcmVhZGFibGUNCiAgICBmaWdfYWxpZ246IGNlbnRlcg0KICAgIGRmX3ByaW50OiBrYWJsZQ0KLS0tDQoNCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0NCmgxLnRpdGxlIHsgIC8qIFRpdGxlIC0gZm9udCBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgcmVwb3J0IHRpdGxlICovDQogIGZvbnQtd2VpZ2h0OmJvbGQ7DQogIGNvbG9yOiBkYXJrbWFnZW50YSA7DQp9DQpoMS5zdWJ0aXRsZSB7ICAvKiBUaXRsZSAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgb2YgdGhlIHJlcG9ydCB0aXRsZSAqLw0KICBmb250LXdlaWdodDpib2xkOw0KICBjb2xvcjogZGFya21hZ2VudGEgOw0KfQ0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBmb250IHNwZWNpZmljYXRpb25zIGZvciBhdXRob3JzICAqLw0KICBmb250LWZhbWlseTogc3lzdGVtLXVpOw0KICBjb2xvcjogbmF2eTsNCn0NCmg0LmRhdGUgeyAvKiBIZWFkZXIgNCAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgZm9yIHRoZSBkYXRlICAqLw0KICBmb250LWZhbWlseTogc3lzdGVtLXVpOw0KICBjb2xvcjogbmF2eTsNCn0NCmgxIHsgLyogSGVhZGVyIDEgLSBmb250IHNwZWNpZmljYXRpb25zIGZvciBsZXZlbCAxIHNlY3Rpb24gdGl0bGUgICovDQogICAgZm9udC13ZWlnaHQ6Ym9sZDsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgIGZvbnQtZmFtaWx5OiB2ZXJkYW5hOw0KfQ0KaDIgeyAvKiBIZWFkZXIgMiAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgZm9yIGxldmVsIDIgc2VjdGlvbiB0aXRsZSAqLw0KICAgIGZvbnQtd2VpZ2h0OmJvbGQ7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICBmb250LWZhbWlseTogdmVyZGFuYTsNCn0NCg0KaDMgeyAvKiBIZWFkZXIgMyAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgb2YgbGV2ZWwgMyBzZWN0aW9uIHRpdGxlICAqLw0KICAgIGZvbnQtd2VpZ2h0OmJvbGQ7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICBmb250LWZhbWlseTogdmVyZGFuYTsNCn0NCg0KaDQgeyAvKiBIZWFkZXIgNCAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgb2YgbGV2ZWwgNCBzZWN0aW9uIHRpdGxlICAqLw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgZm9udC1mYW1pbHk6IHZlcmRhbmE7DQp9DQoNCmJvZHkgew0KICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOw0KICBmb250LWZhbWlseTogdmVyZGFuYTsNCiAgICB9DQoNCi5oaWdobGlnaHRtZSB7IA0KICBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgDQp9DQoNCnAgeyANCiAgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgDQogICAgZm9udC1mYW1pbHk6IHZlcmRhbmE7DQp9DQoNCmg1IHsNCiAgY29sb3I6IG5hdnk7DQogIGZvbnQtZmFtaWx5OiB2ZXJkYW5hOw0KfQ0KDQouaWZyYW1lIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQphOmxpbmsgew0KICBjb2xvcjogYmxhY2s7DQogIGZvbnQtZmFtaWx5OiB2ZXJkYW5hOw0KfQ0KDQouZmlnbGFiZWwgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGNvbG9yOiBkYXJrc2xhdGVncmF5Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zaXplOiAxODsNCiAgICBmb250LWZhbWlseTogdmVyZGFuYTsNCn0NCg0KLnRkMSB7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogdmVyZGFuYTsNCn0NCg0KdGgsIHRkIHsNCiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7DQogIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCnRyOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOiBjb3JhbDt9DQpgYGANCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KDQoNCiMjIFIgTWFya2Rvd24gUHJvamVjdHMNCg0KIyMjIE1vZGVsaW5nLCBDcm9zcyBWYWxpZGF0aW9uLCAmIE1hY2hpbmUgTGVhcm5pbmcNCg0KIyMjIyBMaW5lYXIgJiBMb2dpc3RpYyBSZWdyZXNzaW9uIE1vZGVsaW5nIFVzaW5nIE1hY2hpbmUgbGVhcm5pbmcgQXBwcm9hY2hlcw0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPkEgQmxpbmQgVGFzdGUgVGVzdDwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL3JwdWJzLmNvbS9ubGVwZXJhL3N0YTU1Ml9IVzA0IiB0YXJnZXQgPSAiYmxhbmsiPltSZXBvcnRdPC9hPg0KPGRldGFpbHM+PHN1bW1hcnk+UHJlZGljdGluZyBzb21tZWxpZXIgcXVhbGl0eSByYW5raW5ncyBvZiB3aW5lIGFuZCB3aW5lIHR5cGUgKHJlZC93aGl0ZSkgdXRpbGl6aW5nIGNoZW1pY2FsIGNvbXBvc2l0aW9uIGFsb25lIFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFJlYWwgd29ybGQgZGF0YTsgbWVkaXVtIGRhdGEgc2V0IChhcHByb3guIDYsNTAwIG9ic2VydmF0aW9ucykNCiAgLSBSZWd1bGFyaXplZCBsaW5lYXIgJiBsb2dpc3RpYyByZWdyZXNzaW9uIHByZWRpY3Rpb24gbW9kZWxzLCBzdXBwb3J0IHZlY3RvciBtYWNoaW5lIChTVk0pIHJlZ3Jlc3Npb24gYW5kIGNsYXNzaWZpY2F0aW9uIG1vZGVscw0KICAtIENvZWZmaWNpZW50IHBhdGggYW5hbHlzaXMsIGh5cGVycGFyYW1ldGVyIHR1bmluZywgYW5kIG9wdGltYWwgY3V0IG9mZiBwcm9iYWJpbGl0eSBhbmFseXNpcyBmb3Igb3B0aW1pemVkIGFjY3VyYWN5IGFuZCBzcGVjaWZpY2l0eS4NCiAgLSBBbmFseXNpcyBnb2FsczoNCiAgICAgIC0gSWRlbnRpZnlpbmcgdGhlIGJlc3QgcG9zc2libGUgcHJlZGljdGlvbiBtb2RlbCBmb3Igc29tbWVsaWVyIHdpbmUgcXVhbGl0eSByYW5raW5nIGJhc2VkIG9uIGNoZW1pY2FsIGNvbXBvc2l0aW9uDQogICAgICAtIENyZWF0aW5nIGEgd2hpdGUgdnMgcmVkIHByZWRpY3Rpb24gbW9kZWwgZm9yIGJsZW5kIHdpbmVzIHRoYXQgZG8gbm90IG5lYXRseSBmYWxsIGludG8gZWl0aGVyIGNhdGVnb3J5DQo8L3A+PC9kZXRhaWxzPg0KPGJyPg0KDQogIDxmb250IGNsYXNzID0gInRkMSI+IEhvbGQgVGhhdCBQbGFuZSEgPC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vcnB1YnMuY29tL25sZXBlcmEvc3RhNTUyX0hXMDMiIHRhcmdldCA9ImJsYW5rIj5bUmVwb3J0XTwvYT4gDQo8ZGV0YWlscz48c3VtbWFyeT5BbiBhbmFsaXNpcyBvZiBnbG9iYWwgZmxpZ2h0IGRlbGF5IGRhdGEgYW5kIHByZWRpY3Rpb24gbW9kZWwgY3JlYXRpb24gdG8gcmVkdWNlIGRlbGF5cyBhbmQgaW5jcmVhc2UgbGl2ZSBwcmVkaWN0aW9uIGNhcGFiaWxpdGllcyBbY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBTeW50aGV0aWMgZGF0YSB3aXRoIGZvcmNlZCBtaXNzaW5nIHZhbHVlcy4gTWVkaXVtIGRhdGEgc2V0IChvdmVyIDMsNTAwIG9ic2VydmF0aW9ucykNCiAgLSBNdWx0aXBsZSBJbXB1dGF0aW9uIGJ5IENoYWluZWQgRXF1YXRpb25zLCBSdWJlbidzIHJ1bGVzLCBSZWN1cnNpdmUgZmVhdHVyZSBlbGltaW5hdGlvbiwgUHJpbmNpcGFsIENvbXBvbmVudCBBbmFseXNpcywgay1NZWFucyBDbHVzdGVyaW5nDQogIC0gRm9yd2FyZCBlbGltaW5hdGlvbiBtb2RlbCBjcmVhdGlvbiwgY3Jvc3MgdmFsaWRhdGlvbiwgUmVjZWl2ZXIgT3BlcmF0aW5nIENoYXJhY3RlcmlzdGljIChST0MpIGNvbXBhcmlzb24NCiAgLSBBbmFseXNpcyBnb2FsczoNCiAgICAgIC0gSWRlbnRpZnlpbmcgdGhlIHZhcmlhYmxlcyB3aXRoIGdyZWF0ZXN0IGltcGFjdCBvbiBvdmVyYWxsIGZsaWdodCBkZWxheSBmb3Igc3Vic2VxdWVudCBtaXRpZ2F0aW9uIGFuZCBwcmV2ZW50YXRpdmUgZWZmb3J0cw0KICAgICAgLSBMaXZlIGZsaWdodCBkZWxheSBwcmVkaWN0aW9uIGJhc2VkIG9uIGF2YWlsYWJsZSBmbGlnaHQgZGF0YSBwcmlvciB0byBsYW5kaW5nIChwcmVkaWN0aW5nIHRvdGFsIGRlbGF5IHRpbWUgYmVmb3JlIGZsaWdodHMgZGVwYXJ0KQ0KPC9wPg0KPC9kZXRhaWxzPg0KPGJyPg0KDQojIyMjIFVuc3VwZXJ2aXNlZCBMZWFybmluZyBBbGdvcml0aG1zIGFuZCBQcmVkaWN0aXZlIG1vZGVsaW5nDQoNCjxmb250IGNsYXNzID0gInRkMSI+QmlnIEJhY2sgQmVoYXZpb3I8L2ZvbnQ+IF0gPGEgaHJlZj0iaHR0cHM6Ly9ycHVicy5jb20vbmxlcGVyYS9zdGE1NTJfSFcwNSIgdGFyZ2V0ID0gImJsYW5rIj5bUmVwb3J0XTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PlByZWRpY3Rpbmcgb2Jlc2l0eSByYW5raW5ncyBiYXNlZCBvbiBiZWhhdmlvcmFsIHN1cnZleSByZXN1bHRzIFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFJlYWwgd29ybGQgZGF0YTsgbWVkaXVtIGRhdGEgc2V0IChhcHByb3ggMiwyMDAgb2JzZXJ2YXRpb25zKQ0KICAtIENBUlQgcmVncmVzc2lvbiBwcmVkaWN0aW9uIG1vZGVscywgQ0FSVCBjbGFzc2lmaWNhdGlvbiBwcmVkaWN0aW9uIG1vZGVscywgQm9vdHN0cmFwIEJBR0dJTkcgcmVncmVzc2lvbiBwcmVkaWN0aW9uIG1vZGVscywgJiBCb290c3RyYXAgQkFHR0lORyBjbGFzc2lmaWNhdGlvbiBwcmVkaWN0aW9uIG1vZGVscw0KICAtIFZhcmlhYmxlIGltcG9ydGFuY2UgYW5hbHlzaXMsIGh5cGVycGFyYW1ldGVyIHR1bmluZywgbW9kZWwgcHJ1bmluZywgUk9DIGN1cnZlIGFuYWx5c2lzICYgb3B0aW1hbCBjdXRvZmYgaWRlbnRpZmljYXRpb24NCiAgLSBBbmFseXNpcyBnb2FsczoNCiAgICAtIERldmVsb3Agb3ZlcndlaWdodC9vYmVzaXR5IHByZWRpY3Rpb24gbW9kZWwgdXRpbGl6aW5nIHBhdGllbnQgbGlmZXN0eWxlIGFuZCBiZWhhdmlvcmFsIGluZm9ybWF0aW9uLCA8Yj5leGNsdWRpbmc8L2I+IHdlaWdodA0KICAgIC0gRGV2ZWxvcCB3ZWlnaHQgaW5kZXBlbmRlbnQgcHJlZGljdGlvbiBtb2RlbHMgZm9yIG92ZXJ3ZWlnaHQvb2Jlc2l0eSB0byBhbGxvdyBmb3IgcHJlZGljdGlvbiBvZiB0aG9zZSBhdCByaXNrIGJhc2VkIG9uIGJlaGF2aW9yYWwgJiBsaWZlc3R5bGUgY2hvaWNlcw0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KPGZvbnQgY2xhc3MgPSAidGQxIj5DYW4geW91IHBheSBtZSBiYWNrPzwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL3JwdWJzLmNvbS9ubGVwZXJhL3N0YTU1MV9odzA0IiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+ICYgPGEgaHJlZj0iaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1NTEvRklOQUwvIiB0YXJnZXQgPSJibGFuayI+W1ByZXNlbnRhdGlvbl08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5Mb2FuIERlZmF1bHQgQm9ycm93ZXIgRGF0YSBDbHVzdGVyaW5nICYgQW5hbHlzaXMgW2NsaWNrIGZvciBtb3JlIGRldGFpbHNdPC9zdW1tYXJ5PjxwPg0KDQogIC0gUmVwb3J0ICYgc3VwcG9ydGluZyBwcmVzZW50YXRpb24NCiAgLSBTeW50aGV0aWMgZGF0YS4gTWVkaXVtIGRhdGEgc2V0IChhcHByb3guIDEwMDAgb2JzZXJ2YXRpb25zKQ0KICAtIEsgbWVhbnMgY2x1c3RlcmluZywgYWdnbG9tZXJhdGl2ZSBoaWVyYXJjaGljYWwgZGF0YSBjbHVzdGVyaW5nLCBwcmluY2lwYWwgY29tcG9uZW50IGFuYWx5c2lzLCBsb2NhbCBvdXRsaWVyIGZhY3RvciBhbmFseXNpcw0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPkJsaW5kIEJyZWFzdCBCaW9wc2llczwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL3JwdWJzLmNvbS9ubGVwZXJhL3N0YTU1MV9odzAzIiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5QcmVkaWN0aW5nIEJyZWFzdCBUaXNzdWUgQmlvcHN5IERpYWdub3NpcyBJbiB0aGUgRXZlbnQgb2YgSW5jb21wbGV0ZSBCaW9wc3kgW2NsaWNrIGZvciBtb3JlIGRldGFpbHNdPC9zdW1tYXJ5PjxwPg0KDQogIC0gU3ludGhldGljIGRhdGEuIFNtYWxsIGRhdGEgc2V0IChhcHByb3guIDYwMCBvYnNlcnZhdGlvbnMpDQogIC0gTG9naXN0aWMgcHJlZGljdGl2ZSBtb2RlbGluZywgc2luZ2xlLWxheWVyIG5ldXJhbCBuZXR3b3JrIG1vZGVsIChwZXJjZXB0cm9uKSBwcmVkaWN0aW9uLCBkZWNpc2lvbiB0cmVlIGFsZ29yaXRobXMsIFJPQyBhbmFseXNpcywgYW5kIGJhZ2dpbmcNCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCiMjIyMgUmVncmVzc2lvbiBBbmFseXNpcyAmIE1vZGVsIENyZWF0aW9uDQoNCjxmb250IGNsYXNzID0gInRkMSI+Q2FuIFdlIFByZWRpY3QgdGhlIEZ1dHVyZSBpbiBIZWFsdGg/PC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vcnB1YnMuY29tL25sZXBlcmEvc3RhNTUxX2h3MDIiIHRhcmdldCA9ImJsYW5rIj5bUmVwb3J0XTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PkZyYW1pbmdoYW0gSGVhcnQgU3R1ZHkgTW9kZWwgRml0dGluZyBhbmQgQ3Jvc3MgVmFsaWRhdGlpb24gZm9yIEJNSSBQcmVkaWN0aW9ucyBbY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBSZWFsIHdvcmxkIGRhdGEuIE1lZGl1bSBkYXRhIHNldCAoYXBwcm94LiA0LDIwMCBvYnNlcnZhdGlvbnMpDQogIC0gTGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgY3JlYXRpb24sIGJveC1jb3ggdHJhbnNmb3JtYXRpb24sIG1lYW4gc3F1YXJlIGVycm9yIChNU0UpIGNyb3NzIHZhbGlkYXRpb24sIGxvZ2lzdGljIHJlZ3Jlc3Npb24gbW9kZWwgY3JlYXRpb24sIHJlY2VpdmVyIG9wZXJhdGluZyBjaGFyYWN0ZXJpc3RpYyAoUk9DKSBhbmQgYXJlYSB1bmRlciB0aGUgY3VydmUgKEFVQykgbW9kZWwgY29tcGFyaXNvbg0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KDQojIyMgRGF0YSBWaXN1YWxpemF0aW9uIGFuZCBFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzDQoNCiMjIyMgRXhwbG9yYXRvcnkgRGF0YSBBbmFseXNpcyAmIFZhcmlhYmxlIFJlbGF0aW9uc2hpcCBFeHBsb3JhdGlvbg0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPkknbSBHb2luZyB0byBNaXNzIG15IEZsaWdodCE8L2ZvbnQ+IHwgPGEgaHJlZj0iaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1NTIvSFcwMS9pbmRleC5odG1sIiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5BbiBhbmFseXNpcyBvZiBmbGlnaHQgZGVsYXkgdGltZXMgYWNyb3NzIGFpcnBvcnRzIFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFN5bnRoZXRpYyBkYXRhIHdpdGggZm9yY2VkIG1pc3NpbmcgdmFsdWVzLiBNZWRpdW0gZGF0YSBzZXQgKG92ZXIgMyw1MDAgb2JzZXJ2YXRpb25zKQ0KICAtIEFuYWx5c2lzIG9mIHZhcmlhYmxlcyBpbXBhY3RpbmcgZmxpZ2h0IGRlbGF5cyAmIHNvbHV0aW9uIGltcGxlbWVudGF0aW9uDQogIC0gZ2dwbG90ICYgUGxvdF9seSBpbnRlcmFjdGl2ZSB2aXN1YWxpemF0aW9ucyANCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCiMjIyMgRXhwbG9yYXRvcnkgRGF0YSBBbmFseXNpcw0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPlByZXNpZGVudGlhbCBGaXRuZXNzIFRlc3Q8L2ZvbnQ+IHwgPGEgaHJlZj0iaHR0cHM6Ly9ycHVicy5jb20vbmxlcGVyYS9zdGE1NTFfaHcwMSIgdGFyZ2V0ID0iYmxhbmsiPltSZXBvcnRdPC9hPg0KPGRldGFpbHM+PHN1bW1hcnk+VGhlIEltcGFjdCBvZiBMb2NhbCBFZHVjYXRpb24sIFBvdmVydHksIGFuZCBVbmVtcGxveW1lbnQgUmF0ZXMgb24gQ291bnR5IFByZXNpZGVudGlhbCBFbGVjdGlvbiBSZXN1bHRzIFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIEZvdXIgcmVhbCB3b3JsZCBkYXRhIHNldHMgdXRpbGl6ZWQuIExhcmdlIGRhdGEgc2V0cyAob3ZlciA3MiwwMDAgb2JzZXJ2YXRpb25zKQ0KICAtIFJlbGF0aW9uYWwgZGF0YSBzZXRzIGFuZCBkYXRhIGFnZ3JlZ2F0aW9uDQogIC0gR2VvSlNPTiAmIGxlYWZsZXQgSW50ZXJhY3RpdmUgTWFwLCBnZ3Bsb3QNCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCiMjIyMgVGltZSBTZXJpZXMgRGF0YQ0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPlRoZSBQcmljZSBvZiBMb25nZXZpdHk8L2ZvbnQ+IHwgPGEgaHJlZj0iaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1NTMvdzA2X3Bsb3RseS8iIHRhcmdldCA9ImJsYW5rIj5bUmVwb3J0XTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PkFuIEFuYWx5c2lzIG9mIEFubnVhbCBJbmNvbWUgb24gTGlmZSBFeHBlY3RhbmN5IFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFJlYWwgd29ybGQgZGF0YS4gTGFyZ2UgZGF0YSBzZXQgKG92ZXIgMzUsMDAwIG9ic2VydmF0aW9ucykNCiAgLSBBbiBhbmFseXNpcyBvZiB2YXJpYWJsZXMgaW1wYWN0aW5nIGF2ZXJhZ2UgbGlmZSBleHBlY3RhbmN5DQogIC0gZ2dwbG90ICYgUGxvdF9seSBpbnRlcmFjdGl2ZSB2aXN1YWxpemF0aW9ucw0KPC9wPjwvZGV0YWlscz4NCjxicj4NCiAgDQojIyBTQVMgUHJvamVjdHMNCg0KIyMjIExpbmVhciBSZWdyZXNzaW9uIEFuYWx5c2lzIA0KDQojIyMjIEJ1aXNuZXNzIEFuYWx5dGljcyBQcm9wb3NhbA0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPlBpenphei5jb20gU3BlZWQgRGF0aW5nIENvbXBhcmFiaWxpdHkgUHJlZGljdGlvbjwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL25sZXBlcmEuZ2l0aHViLmlvL3N0YTUxMS9MZVBlcmFfTl9FeGFtJTIwMl8yMDI1LjA0LjIyLnBkZiIgdGFyZ2V0ID0iYmxhbmsiPltQcm9wb3NhbF08L2E+ICYgPGEgaHJlZj0iaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1MTEvZXhhbTJfcGRmLnBkZiIgdGFyZ2V0ID0iYmxhbmsiPltQcmVzZW50YXRpb25dPC9hPiAmIDxhIGhyZWYgPSAiaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1MTEvZXhhbTJfU0FTLnBkZiIgdGFyZ2V0PSJibGFuayI+W1NBUyBDb2RlXTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PlNwZWVkIERhdGluZyBBbmFseXRpY3MgJiBPbmxpbmUgRGF0aW5nIE9wdGltaXphdGlvbiBbY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBTeW50aGV0aWMgZGF0YS4gU21hbGwgZGF0YSBzZXQgKDI3NiBvYnNlcnZhdGlvbnMpDQogIC0gQW4gYW5hbHlzaXMgb2YgdmFyaWFibGVzIGltcGFjdGluZyBvdmVyYWxsIGRhdGVyIGludGVyZXN0IGFuZCBsaW5lYXIgcmVncmVzc2lvbiBwcmVkaWN0aW9uIG1vZGVsIGNyZWF0aW9uDQogIC0gUHJvcG9zYWwgZm9yIGRhdGEgdXRpbGl6YXRpb24gYW5kIGJ1c2luZXNzIGltcHJvdmVtZW50DQo8L3A+PC9kZXRhaWxzPg0KPGJyPg0KICANCiAgDQojIyBTaGlueS9GbGV4RGFzaGJvYXJkIFByb2plY3RzDQoNCiMjIyMgTGluZWFyIFJlZ3Jlc3Npb24gRGFzaGJvYXJkDQoNCjxmb250IGNsYXNzID0gInRkMSI+TWVsYm91cm5lIEhvdXNpbmcgTWFya2V0PC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vbmxlcGVyYS5zaGlueWFwcHMuaW8vZmluYWwvIiB0YXJnZXQgPSJibGFuayI+W1IgU2hpbnkgRmxleERhc2hib2FyZF08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5bY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBSZWFsIHdvcmxkIGRhdGEuICBMYXJnZSBkYXRhIHNldCAob3ZlciAzNCwwMDAgb2JzZXJ2YXRpb25zKQ0KICAtIEhvdXNpbmcgbWFya2V0IHByaWNlIHJlZ3Jlc3Npb24gYW5hbHlzaXMNCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCiMjIFRhYmxlYXUgUHJvamVjdHMNCg0KIyMjIEdlb3NwYXRpYWwgRGF0YQ0KDQojIyMjIEludGVyYWN0aXZlIE1hcHBpbmcNCg0KPGZvbnQgY2xhc3MgPSAidGQxIj5QcmVzaWRlbnRpYWwgRWxlY3Rpb24gUmVzdWx0cyBQZXIgQ291bnR5IFBlciBZZWFyPC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vcHVibGljLnRhYmxlYXUuY29tL3ZpZXdzL1ByZXNpZGVudGlhbEVsZWN0aW9uUmVzdWx0c1BlckNvdW50eVBlclllYXIvU2hlZXQxPzpsYW5ndWFnZT1lbi1VUyY6c2lkPSY6cmVkaXJlY3Q9YXV0aCY6ZGlzcGxheV9jb3VudD1uJjpvcmlnaW49dml6X3NoYXJlX2xpbmsiIHRhcmdldCA9ImJsYW5rIj5bTWFwXTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PltjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFJlYWwgd29ybGQgZGF0YS4gTGFyZ2UgZGF0YSBzZXQgKG92ZXIgNzIsMDAwIG9ic2VydmF0aW9ucykNCiAgLSBBbiBhbmFseXNpcyBvZiBQcmVzaWRlbnRpYWwgRWxlY3Rpb24gRGF0YSBmcm9tIDIwMDAgdGhyb3VnaCAyMDIwDQo8L3A+PC9kZXRhaWxzPg0KPGJyPg0KDQojIyMgUHVibGljIEhlYWx0aCBEYXRhDQoNCiMjIyMgVGFibGVhdSBTdG9yeXBvaW50ICYgRGFoc2JvYXJkDQoNCjxmb250IGNsYXNzID0gInRkMSI+TmF0aW9uYWwgSGVhbHRoIGFuZCBOdXRyaXRpb24gRXhhbWluYXRpb24gU3VydmV5IChOSEFORVMpPC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vcHVibGljLnRhYmxlYXUuY29tL3ZpZXdzL05IQU5FU0hlYWx0aERhdGEtU3Rvcnlwb2ludC9TbW9raW5nSGVhbHRoPzpsYW5ndWFnZT1lbi1VUyY6c2lkPSY6cmVkaXJlY3Q9YXV0aCY6ZGlzcGxheV9jb3VudD1uJjpvcmlnaW49dml6X3NoYXJlX2xpbmsiIHRhcmdldCA9ImJsYW5rIj5bU3Rvcnlwb2ludF08L2E+ICYgPGEgaHJlZj0iaHR0cHM6Ly9wdWJsaWMudGFibGVhdS5jb20vdmlld3MvTkhBTkVTSGVhbHRoRGF0YS9TbW9raW5nRGFzaGJvYXJkPzpsYW5ndWFnZT1lbi1VUyY6c2lkPSY6cmVkaXJlY3Q9YXV0aCY6ZGlzcGxheV9jb3VudD1uJjpvcmlnaW49dml6X3NoYXJlX2xpbmsiIHRhcmdldCA9ImJsYW5rIj5bRGFzaGJvYXJkXTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PltjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFJlYWwgd29ybGQgZGF0YS4gTWVkaXVtIGRhdGEgc2V0IChhcHByb3guIDcsOTAwIG9ic2VydmF0aW9ucykNCiAgLSBBbiBhbmFseXNpcyBvZiBOSEFORVMgZGF0YSBvZiBTbW9raW5nLCBCbG9vZCBQcmVzc3VyZSwgYW5kIFNlcnVtIENob2xlc3Rlcm9sIExldmVscw0KPC9wPjwvZGV0YWlscz4NCiAgDQo=