Introduction

Throughout this project we will be discovering the question, does the data set provide evidence that men are charged significantly more for health insurance than women? The data set we are using for this project can be found here. It has 1,338 total entries consisting of 7 attributes that describe each person’s age, gender, health status, and lifestyle factors, along with the amount they are charged for health insurance. (Click here for more information about this data set). For all our calculations and visuals, we are going to be using the tidyverse, openintro, and DT packages. To download the data set to R, we are going to be using the readr package.

library(tidyverse)
library(openintro)
library(DT)
library(readr)

Insurance Data Set

insurance <- read_csv("insurance.csv")

datatable(insurance, options = list(scrollX = TRUE))

Data Dictionary

data_dictionary <- tibble(
  Column_Name = c("age", "sex", "bmi", "children", "smoker", "region", "charges"),
  Description = c("Age of primary beneficiary", "Insurance contractor gender, female, male", "Body mass index, providing an understanding of body, weights that are relatively high or low relative to height, objective index of body weight (kg / m ^ 2) using the ratio of height to weight, ideally 18.5 to 24.9", "Number of children covered by health insurance / Number of dependents", "Smoking", "The beneficiary's residential area in the US, northeast, southeast, southwest, northwest.", "Individual medical costs billed by health insurance")
)

datatable(data_dictionary, options = list(scrollX = TRUE))

Health Insurance Charges Models

Simple Regression Model

To start our investigation, we are going to make a regression model with sex as the predictor and the charges as the response. This will allow us to compare the health insurance charges solely based on whether a person is male or female. We will also check out the summary of the model to see if there is a significant difference between the two.

insurance_sex_model <- lm(charges ~ sex, insurance)

summary(insurance_sex_model)
## 
## Call:
## lm(formula = charges ~ sex, data = insurance)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -12835  -8435  -3980   3476  51201 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  12569.6      470.1  26.740   <2e-16 ***
## sexmale       1387.2      661.3   2.098   0.0361 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12090 on 1336 degrees of freedom
## Multiple R-squared:  0.003282,   Adjusted R-squared:  0.002536 
## F-statistic:   4.4 on 1 and 1336 DF,  p-value: 0.03613

According to this model summary, the coefficients tells us that men are charged $1387.20, on average, more than women are for health insurance. This is a significant difference as we can see that the p-values for men is 0.036 and <2e-16 for women, which are both below the 0.05 level of significance. However, we can not use this piece of evidence to make a strong conclusion on whether men are significantly charged more than women because we have not controlled for any other factors that is included in the data set.

It is important to control for any factors that may affect the overall health insurance charges because when looking at the adjusted R2 value, we can see that sex can only explain about 0.3% of the variation in charges for this model which is a very small percentage. The other variables such as smoking, age, and the bmi of a person will all affect the overall cost of their health insurance charges.

One important factor mentioned was age, and this can be a confounding variable because older people are likely to be charged more for their health insurance since they are more prone to illnesses and injuries. This requires them to use the insurance more often than younger people. Age can also help explain why men are charged more than women on health insurance because men are more likely to have serious health concerns such as heart diseases, liver diseases, or certain cancers like prostate cancer the older they get. We will explore further below.

Controlling For Sex and Age

This new model will add age as a predictor for the health insurance charges.

insurance_sex_age_model <- lm(charges ~ sex + age, insurance)

summary(insurance_sex_age_model)
## 
## Call:
## lm(formula = charges ~ sex + age, data = insurance)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -8821  -6947  -5511   5443  48203 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2343.62     994.35   2.357   0.0186 *  
## sexmale      1538.83     631.08   2.438   0.0149 *  
## age           258.87      22.47  11.523   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11540 on 1335 degrees of freedom
## Multiple R-squared:  0.09344,    Adjusted R-squared:  0.09209 
## F-statistic:  68.8 on 2 and 1335 DF,  p-value: < 2.2e-16

Just like in the previous model, men are significantly charge more than women are for health insurance by $1,538.83 on average. The p-value for men is 0.0149 and 0.0186 for women, which are all below the level of significance at 0.05. As for the added variable, age, the coefficient tells us that for every 1 year increase in age, the health insurance charge increases by $258.87 on average. Age is also a significant predictor because it has a very small p-value at <2e-16. Another noticeable difference in this model is that the adjusted R2 value increased, and this tells us that about 9% of the variance of health insurance cost can be explained by sex and age. With this information, we can see that age is a much more significant predictor than sex because the p-value in the F-statistic is much smaller than the first model.

Controlling For Sex, Age, and Personal Health

This new model is going to include the BMI and Smoker variables in addition to sex and age. Our hope for this test is to see if these variables that deal with a person’s health directly will have a significant impact on their health insurance charge.

insurance_health_model <- lm(charges ~ sex + age + bmi + smoker, insurance)

summary(insurance_health_model)
## 
## Call:
## lm(formula = charges ~ sex + age + bmi + smoker, data = insurance)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -12364.7  -2972.2   -983.2   1475.8  29018.3 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -11633.49     947.27 -12.281   <2e-16 ***
## sexmale       -109.04     334.66  -0.326    0.745    
## age            259.45      11.94  21.727   <2e-16 ***
## bmi            323.05      27.53  11.735   <2e-16 ***
## smokeryes    23833.87     414.19  57.544   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6094 on 1333 degrees of freedom
## Multiple R-squared:  0.7475, Adjusted R-squared:  0.7467 
## F-statistic: 986.5 on 4 and 1333 DF,  p-value: < 2.2e-16

With this health model, we can see a much different result than the other two models where, unlike the other two models, the men are charged $109.04 less than women for their health insurance on average. However, this is not significant because the p-value for men is 0.745 which is above the level of significance at 0.05. Although sex is no longer a significant predictor of the charges, all the other predictors are statistically significant with a p-value of <2e-16.

What these coefficients mean is that for every year increase in age, their charges increase by $259.45 on average while holding all other variables constant. For every single increase in bmi, their charges increase by $323.05 on average while holding all other variables constant. Finally, if a person does smoke, their charges increase by $23,833.87 on average while holding all other variables constant.

This is a much better model than the previous two because we can see that these predictors can explain 74.67% of the variance in health insurance charges. Looking at the F-statistics, this model is still statistically significant with a p-value of <2.2e-16 which is much less than 0.05. So with this evidence, we should not trust the previous two models over this current model because they do not fit the data as well and are missing important factors.

Controlling for All Variables

For this final model, we will be adding in the last two variables, region and children.

insurance_full_model <- lm(charges ~ sex + age + bmi + smoker + region + children, insurance)

summary(insurance_full_model)
## 
## Call:
## lm(formula = charges ~ sex + age + bmi + smoker + region + children, 
##     data = insurance)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11304.9  -2848.1   -982.1   1393.9  29992.8 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     -11938.5      987.8 -12.086  < 2e-16 ***
## sexmale           -131.3      332.9  -0.394 0.693348    
## age                256.9       11.9  21.587  < 2e-16 ***
## bmi                339.2       28.6  11.860  < 2e-16 ***
## smokeryes        23848.5      413.1  57.723  < 2e-16 ***
## regionnorthwest   -353.0      476.3  -0.741 0.458769    
## regionsoutheast  -1035.0      478.7  -2.162 0.030782 *  
## regionsouthwest   -960.0      477.9  -2.009 0.044765 *  
## children           475.5      137.8   3.451 0.000577 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6062 on 1329 degrees of freedom
## Multiple R-squared:  0.7509, Adjusted R-squared:  0.7494 
## F-statistic: 500.8 on 8 and 1329 DF,  p-value: < 2.2e-16

This model now has every variable controlled for and we can see a few changes. The biggest change we can see right away is that men are charged $131.30 less than women on average, however, the p-value shows that sex is not a significant predictor anymore. There is not much difference with the variables age, bmi, and smoker besides some minimal price changes from the previous model as they remain as significant predictors. The adjusted R2 and F-statistic did not change almost at all so this model is not much better than the previous model.

Moving on to the new variables, it appears that children is a significant predictor with a p-value at 0.000577 which is less than 0.05. The coefficient tells us that for every child or dependent a person has in their insurance, their charges increase by $475.50 on average. As for regions, southeast and southwest are significant predictors with p-values of 0.0308 and 0.0448 respectively. For those who live in the southeast region, they will be charged $1,035.00 less than those who live in the northeast region on average. For those who live in the southwest region, they will be charged $960.00 less than those who live in the northeast region on average. The northwest region is not statistically significant, however, they pay $353.00 less than those who live in the northeast region on average.

Conclusion

The goal of this project was to determine whether men are charged significantly more for health insurance than women. Our initial model that only compared sex to charges suggested that there was evidence that men were charged more for insurance, however the adjusted R2 was very small.

After refining our regression models to control for all variables, we can conclude that there is no evidence to support the claim that men are charged significantly more than women for health insurance.

As we saw throughout the project, sex became more insignificant the more variables we started controlling for, especially major factors such as bmi, and smoking. Controlling for these predictor variables not only showed significance, but they also increased the adjusted R2 which means they can explain a high percentage of the variance in health insurance charges.

LS0tDQp0aXRsZTogIkdlbmRlciBhbmQgSGVhbHRoIEluc3VyYW5jZSAtIEFyZSBNZW4gQ2hhcmdlZCBNb3JlPyINCmF1dGhvcjogIlZpa3RvciBDaGh1biINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0DQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQobWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSkNCmBgYA0KDQojIEludHJvZHVjdGlvbg0KDQpUaHJvdWdob3V0IHRoaXMgcHJvamVjdCB3ZSB3aWxsIGJlIGRpc2NvdmVyaW5nIHRoZSBxdWVzdGlvbiwgZG9lcyB0aGUgZGF0YSBzZXQgcHJvdmlkZSBldmlkZW5jZSB0aGF0IG1lbiBhcmUgY2hhcmdlZCBzaWduaWZpY2FudGx5IG1vcmUgZm9yIGhlYWx0aCBpbnN1cmFuY2UgdGhhbiB3b21lbj8gVGhlIGRhdGEgc2V0IHdlIGFyZSB1c2luZyBmb3IgdGhpcyBwcm9qZWN0IGNhbiBiZSBmb3VuZCBbaGVyZV0oaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2ZpbGUvZC8xM2wwZy05Q2lzbm9sTzhmN3ROWnVMajEtVkpxckVwWncvdmlldyl7dGFyZ2V0PSJfYmxhbmsifS4gSXQgaGFzIDEsMzM4IHRvdGFsIGVudHJpZXMgY29uc2lzdGluZyBvZiA3IGF0dHJpYnV0ZXMgdGhhdCBkZXNjcmliZSBlYWNoIHBlcnNvbidzIGFnZSwgZ2VuZGVyLCBoZWFsdGggc3RhdHVzLCBhbmQgbGlmZXN0eWxlIGZhY3RvcnMsIGFsb25nIHdpdGggdGhlIGFtb3VudCB0aGV5IGFyZSBjaGFyZ2VkIGZvciBoZWFsdGggaW5zdXJhbmNlLiAoQ2xpY2sgW2hlcmVdKGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vZGF0YXNldHMvbWlyaWNob2kwMjE4L2luc3VyYW5jZSl7dGFyZ2V0PSJfYmxhbmsifSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRhdGEgc2V0KS4gRm9yIGFsbCBvdXIgY2FsY3VsYXRpb25zIGFuZCB2aXN1YWxzLCB3ZSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlICoqdGlkeXZlcnNlKiosICoqb3BlbmludHJvKiosIGFuZCAqKkRUKiogcGFja2FnZXMuIFRvIGRvd25sb2FkIHRoZSBkYXRhIHNldCB0byBSLCB3ZSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlICoqcmVhZHIqKiBwYWNrYWdlLg0KDQpgYGB7ciBsb2FkLXBhY2thZ2VzLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KG9wZW5pbnRybykNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KHJlYWRyKQ0KYGBgDQoNCiMgSW5zdXJhbmNlIERhdGEgU2V0DQoNCmBgYHtyIGltcG9ydH0NCmluc3VyYW5jZSA8LSByZWFkX2NzdigiaW5zdXJhbmNlLmNzdiIpDQoNCmRhdGF0YWJsZShpbnN1cmFuY2UsIG9wdGlvbnMgPSBsaXN0KHNjcm9sbFggPSBUUlVFKSkNCmBgYA0KDQojIyMgRGF0YSBEaWN0aW9uYXJ5DQoNCmBgYHtyIGRhdGEtZGljdGlvbmFyeX0NCmRhdGFfZGljdGlvbmFyeSA8LSB0aWJibGUoDQogIENvbHVtbl9OYW1lID0gYygiYWdlIiwgInNleCIsICJibWkiLCAiY2hpbGRyZW4iLCAic21va2VyIiwgInJlZ2lvbiIsICJjaGFyZ2VzIiksDQogIERlc2NyaXB0aW9uID0gYygiQWdlIG9mIHByaW1hcnkgYmVuZWZpY2lhcnkiLCAiSW5zdXJhbmNlIGNvbnRyYWN0b3IgZ2VuZGVyLCBmZW1hbGUsIG1hbGUiLCAiQm9keSBtYXNzIGluZGV4LCBwcm92aWRpbmcgYW4gdW5kZXJzdGFuZGluZyBvZiBib2R5LCB3ZWlnaHRzIHRoYXQgYXJlIHJlbGF0aXZlbHkgaGlnaCBvciBsb3cgcmVsYXRpdmUgdG8gaGVpZ2h0LCBvYmplY3RpdmUgaW5kZXggb2YgYm9keSB3ZWlnaHQgKGtnIC8gbSBeIDIpIHVzaW5nIHRoZSByYXRpbyBvZiBoZWlnaHQgdG8gd2VpZ2h0LCBpZGVhbGx5IDE4LjUgdG8gMjQuOSIsICJOdW1iZXIgb2YgY2hpbGRyZW4gY292ZXJlZCBieSBoZWFsdGggaW5zdXJhbmNlIC8gTnVtYmVyIG9mIGRlcGVuZGVudHMiLCAiU21va2luZyIsICJUaGUgYmVuZWZpY2lhcnkncyByZXNpZGVudGlhbCBhcmVhIGluIHRoZSBVUywgbm9ydGhlYXN0LCBzb3V0aGVhc3QsIHNvdXRod2VzdCwgbm9ydGh3ZXN0LiIsICJJbmRpdmlkdWFsIG1lZGljYWwgY29zdHMgYmlsbGVkIGJ5IGhlYWx0aCBpbnN1cmFuY2UiKQ0KKQ0KDQpkYXRhdGFibGUoZGF0YV9kaWN0aW9uYXJ5LCBvcHRpb25zID0gbGlzdChzY3JvbGxYID0gVFJVRSkpDQpgYGANCg0KIyBIZWFsdGggSW5zdXJhbmNlIENoYXJnZXMgTW9kZWxzDQoNCiMjIyBTaW1wbGUgUmVncmVzc2lvbiBNb2RlbA0KDQpUbyBzdGFydCBvdXIgaW52ZXN0aWdhdGlvbiwgd2UgYXJlIGdvaW5nIHRvIG1ha2UgYSByZWdyZXNzaW9uIG1vZGVsIHdpdGggc2V4IGFzIHRoZSBwcmVkaWN0b3IgYW5kIHRoZSBjaGFyZ2VzIGFzIHRoZSByZXNwb25zZS4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGNvbXBhcmUgdGhlIGhlYWx0aCBpbnN1cmFuY2UgY2hhcmdlcyBzb2xlbHkgYmFzZWQgb24gd2hldGhlciBhIHBlcnNvbiBpcyBtYWxlIG9yIGZlbWFsZS4gV2Ugd2lsbCBhbHNvIGNoZWNrIG91dCB0aGUgc3VtbWFyeSBvZiB0aGUgbW9kZWwgdG8gc2VlIGlmIHRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28uDQoNCmBgYHtyfQ0KaW5zdXJhbmNlX3NleF9tb2RlbCA8LSBsbShjaGFyZ2VzIH4gc2V4LCBpbnN1cmFuY2UpDQoNCnN1bW1hcnkoaW5zdXJhbmNlX3NleF9tb2RlbCkNCmBgYA0KDQpBY2NvcmRpbmcgdG8gdGhpcyBtb2RlbCBzdW1tYXJ5LCB0aGUgY29lZmZpY2llbnRzIHRlbGxzIHVzIHRoYXQgbWVuIGFyZSBjaGFyZ2VkICQxMzg3LjIwLCBvbiBhdmVyYWdlLCBtb3JlIHRoYW4gd29tZW4gYXJlIGZvciBoZWFsdGggaW5zdXJhbmNlLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBhcyB3ZSBjYW4gc2VlIHRoYXQgdGhlIHAtdmFsdWVzIGZvciBtZW4gaXMgMC4wMzYgYW5kIDwyZS0xNiBmb3Igd29tZW4sIHdoaWNoIGFyZSBib3RoIGJlbG93IHRoZSAwLjA1IGxldmVsIG9mIHNpZ25pZmljYW5jZS4gSG93ZXZlciwgd2UgY2FuIG5vdCB1c2UgdGhpcyBwaWVjZSBvZiBldmlkZW5jZSB0byBtYWtlIGEgc3Ryb25nIGNvbmNsdXNpb24gb24gd2hldGhlciBtZW4gYXJlIHNpZ25pZmljYW50bHkgY2hhcmdlZCBtb3JlIHRoYW4gd29tZW4gYmVjYXVzZSB3ZSBoYXZlIG5vdCBjb250cm9sbGVkIGZvciBhbnkgb3RoZXIgZmFjdG9ycyB0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBkYXRhIHNldC4gDQoNCkl0IGlzIGltcG9ydGFudCB0byBjb250cm9sIGZvciBhbnkgZmFjdG9ycyB0aGF0IG1heSBhZmZlY3QgdGhlIG92ZXJhbGwgaGVhbHRoIGluc3VyYW5jZSBjaGFyZ2VzIGJlY2F1c2Ugd2hlbiBsb29raW5nIGF0IHRoZSBhZGp1c3RlZCBSXjJeIHZhbHVlLCB3ZSBjYW4gc2VlIHRoYXQgc2V4IGNhbiBvbmx5IGV4cGxhaW4gYWJvdXQgMC4zJSBvZiB0aGUgdmFyaWF0aW9uIGluIGNoYXJnZXMgZm9yIHRoaXMgbW9kZWwgd2hpY2ggaXMgYSB2ZXJ5IHNtYWxsIHBlcmNlbnRhZ2UuIFRoZSBvdGhlciB2YXJpYWJsZXMgc3VjaCBhcyBzbW9raW5nLCBhZ2UsIGFuZCB0aGUgYm1pIG9mIGEgcGVyc29uIHdpbGwgYWxsIGFmZmVjdCB0aGUgb3ZlcmFsbCBjb3N0IG9mIHRoZWlyIGhlYWx0aCBpbnN1cmFuY2UgY2hhcmdlcy4NCg0KT25lIGltcG9ydGFudCBmYWN0b3IgbWVudGlvbmVkIHdhcyBhZ2UsIGFuZCB0aGlzIGNhbiBiZSBhIGNvbmZvdW5kaW5nIHZhcmlhYmxlIGJlY2F1c2Ugb2xkZXIgcGVvcGxlIGFyZSBsaWtlbHkgdG8gYmUgY2hhcmdlZCBtb3JlIGZvciB0aGVpciBoZWFsdGggaW5zdXJhbmNlIHNpbmNlIHRoZXkgYXJlIG1vcmUgcHJvbmUgdG8gaWxsbmVzc2VzIGFuZCBpbmp1cmllcy4gVGhpcyByZXF1aXJlcyB0aGVtIHRvIHVzZSB0aGUgaW5zdXJhbmNlIG1vcmUgb2Z0ZW4gdGhhbiB5b3VuZ2VyIHBlb3BsZS4gQWdlIGNhbiBhbHNvIGhlbHAgZXhwbGFpbiB3aHkgbWVuIGFyZSBjaGFyZ2VkIG1vcmUgdGhhbiB3b21lbiBvbiBoZWFsdGggaW5zdXJhbmNlIGJlY2F1c2UgbWVuIGFyZSBtb3JlIGxpa2VseSB0byBoYXZlIHNlcmlvdXMgaGVhbHRoIGNvbmNlcm5zIHN1Y2ggYXMgaGVhcnQgZGlzZWFzZXMsIGxpdmVyIGRpc2Vhc2VzLCBvciBjZXJ0YWluIGNhbmNlcnMgbGlrZSBwcm9zdGF0ZSBjYW5jZXIgdGhlIG9sZGVyIHRoZXkgZ2V0LiBXZSB3aWxsIGV4cGxvcmUgZnVydGhlciBiZWxvdy4NCg0KIyMjIENvbnRyb2xsaW5nIEZvciBTZXggYW5kIEFnZQ0KDQpUaGlzIG5ldyBtb2RlbCB3aWxsIGFkZCBhZ2UgYXMgYSBwcmVkaWN0b3IgZm9yIHRoZSBoZWFsdGggaW5zdXJhbmNlIGNoYXJnZXMuIA0KDQpgYGB7cn0NCmluc3VyYW5jZV9zZXhfYWdlX21vZGVsIDwtIGxtKGNoYXJnZXMgfiBzZXggKyBhZ2UsIGluc3VyYW5jZSkNCg0Kc3VtbWFyeShpbnN1cmFuY2Vfc2V4X2FnZV9tb2RlbCkNCmBgYA0KDQpKdXN0IGxpa2UgaW4gdGhlIHByZXZpb3VzIG1vZGVsLCBtZW4gYXJlIHNpZ25pZmljYW50bHkgY2hhcmdlIG1vcmUgdGhhbiB3b21lbiBhcmUgZm9yIGhlYWx0aCBpbnN1cmFuY2UgYnkgJDEsNTM4LjgzIG9uIGF2ZXJhZ2UuIFRoZSBwLXZhbHVlIGZvciBtZW4gaXMgMC4wMTQ5IGFuZCAwLjAxODYgZm9yIHdvbWVuLCB3aGljaCBhcmUgYWxsIGJlbG93IHRoZSBsZXZlbCBvZiBzaWduaWZpY2FuY2UgYXQgMC4wNS4gQXMgZm9yIHRoZSBhZGRlZCB2YXJpYWJsZSwgYWdlLCB0aGUgY29lZmZpY2llbnQgdGVsbHMgdXMgdGhhdCBmb3IgZXZlcnkgMSB5ZWFyIGluY3JlYXNlIGluIGFnZSwgdGhlIGhlYWx0aCBpbnN1cmFuY2UgY2hhcmdlIGluY3JlYXNlcyBieSAkMjU4Ljg3IG9uIGF2ZXJhZ2UuIEFnZSBpcyBhbHNvIGEgc2lnbmlmaWNhbnQgcHJlZGljdG9yIGJlY2F1c2UgaXQgaGFzIGEgdmVyeSBzbWFsbCBwLXZhbHVlIGF0IDwyZS0xNi4gQW5vdGhlciBub3RpY2VhYmxlIGRpZmZlcmVuY2UgaW4gdGhpcyBtb2RlbCBpcyB0aGF0IHRoZSBhZGp1c3RlZCBSXjJeIHZhbHVlIGluY3JlYXNlZCwgYW5kIHRoaXMgdGVsbHMgdXMgdGhhdCBhYm91dCA5JSBvZiB0aGUgdmFyaWFuY2Ugb2YgaGVhbHRoIGluc3VyYW5jZSBjb3N0IGNhbiBiZSBleHBsYWluZWQgYnkgc2V4IGFuZCBhZ2UuIFdpdGggdGhpcyBpbmZvcm1hdGlvbiwgd2UgY2FuIHNlZSB0aGF0IGFnZSBpcyBhIG11Y2ggbW9yZSBzaWduaWZpY2FudCBwcmVkaWN0b3IgdGhhbiBzZXggYmVjYXVzZSB0aGUgcC12YWx1ZSBpbiB0aGUgRi1zdGF0aXN0aWMgaXMgbXVjaCBzbWFsbGVyIHRoYW4gdGhlIGZpcnN0IG1vZGVsLg0KDQojIyMgQ29udHJvbGxpbmcgRm9yIFNleCwgQWdlLCBhbmQgUGVyc29uYWwgSGVhbHRoDQoNClRoaXMgbmV3IG1vZGVsIGlzIGdvaW5nIHRvIGluY2x1ZGUgdGhlIEJNSSBhbmQgU21va2VyIHZhcmlhYmxlcyBpbiBhZGRpdGlvbiB0byBzZXggYW5kIGFnZS4gT3VyIGhvcGUgZm9yIHRoaXMgdGVzdCBpcyB0byBzZWUgaWYgdGhlc2UgdmFyaWFibGVzIHRoYXQgZGVhbCB3aXRoIGEgcGVyc29uJ3MgaGVhbHRoIGRpcmVjdGx5IHdpbGwgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiB0aGVpciBoZWFsdGggaW5zdXJhbmNlIGNoYXJnZS4gICANCg0KYGBge3J9DQppbnN1cmFuY2VfaGVhbHRoX21vZGVsIDwtIGxtKGNoYXJnZXMgfiBzZXggKyBhZ2UgKyBibWkgKyBzbW9rZXIsIGluc3VyYW5jZSkNCg0Kc3VtbWFyeShpbnN1cmFuY2VfaGVhbHRoX21vZGVsKQ0KYGBgDQoNCldpdGggdGhpcyBoZWFsdGggbW9kZWwsIHdlIGNhbiBzZWUgYSBtdWNoIGRpZmZlcmVudCByZXN1bHQgdGhhbiB0aGUgb3RoZXIgdHdvIG1vZGVscyB3aGVyZSwgdW5saWtlIHRoZSBvdGhlciB0d28gbW9kZWxzLCB0aGUgbWVuIGFyZSBjaGFyZ2VkICQxMDkuMDQgbGVzcyB0aGFuIHdvbWVuIGZvciB0aGVpciBoZWFsdGggaW5zdXJhbmNlIG9uIGF2ZXJhZ2UuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHNpZ25pZmljYW50IGJlY2F1c2UgdGhlIHAtdmFsdWUgZm9yIG1lbiBpcyAwLjc0NSB3aGljaCBpcyBhYm92ZSB0aGUgbGV2ZWwgb2Ygc2lnbmlmaWNhbmNlIGF0IDAuMDUuIEFsdGhvdWdoIHNleCBpcyBubyBsb25nZXIgYSBzaWduaWZpY2FudCBwcmVkaWN0b3Igb2YgdGhlIGNoYXJnZXMsIGFsbCB0aGUgb3RoZXIgcHJlZGljdG9ycyBhcmUgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCB3aXRoIGEgcC12YWx1ZSBvZiA8MmUtMTYuIA0KDQpXaGF0IHRoZXNlIGNvZWZmaWNpZW50cyBtZWFuIGlzIHRoYXQgZm9yIGV2ZXJ5IHllYXIgaW5jcmVhc2UgaW4gYWdlLCB0aGVpciBjaGFyZ2VzIGluY3JlYXNlIGJ5ICQyNTkuNDUgb24gYXZlcmFnZSB3aGlsZSBob2xkaW5nIGFsbCBvdGhlciB2YXJpYWJsZXMgY29uc3RhbnQuIEZvciBldmVyeSBzaW5nbGUgaW5jcmVhc2UgaW4gYm1pLCB0aGVpciBjaGFyZ2VzIGluY3JlYXNlIGJ5ICQzMjMuMDUgb24gYXZlcmFnZSB3aGlsZSBob2xkaW5nIGFsbCBvdGhlciB2YXJpYWJsZXMgY29uc3RhbnQuIEZpbmFsbHksIGlmIGEgcGVyc29uIGRvZXMgc21va2UsIHRoZWlyIGNoYXJnZXMgaW5jcmVhc2UgYnkgJDIzLDgzMy44NyBvbiBhdmVyYWdlIHdoaWxlIGhvbGRpbmcgYWxsIG90aGVyIHZhcmlhYmxlcyBjb25zdGFudC4gDQoNClRoaXMgaXMgYSBtdWNoIGJldHRlciBtb2RlbCB0aGFuIHRoZSBwcmV2aW91cyB0d28gYmVjYXVzZSB3ZSBjYW4gc2VlIHRoYXQgdGhlc2UgcHJlZGljdG9ycyBjYW4gZXhwbGFpbiA3NC42NyUgb2YgdGhlIHZhcmlhbmNlIGluIGhlYWx0aCBpbnN1cmFuY2UgY2hhcmdlcy4gTG9va2luZyBhdCB0aGUgRi1zdGF0aXN0aWNzLCB0aGlzIG1vZGVsIGlzIHN0aWxsIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgd2l0aCBhIHAtdmFsdWUgb2YgPDIuMmUtMTYgd2hpY2ggaXMgbXVjaCBsZXNzIHRoYW4gMC4wNS4gU28gd2l0aCB0aGlzIGV2aWRlbmNlLCB3ZSBzaG91bGQgbm90IHRydXN0IHRoZSBwcmV2aW91cyB0d28gbW9kZWxzIG92ZXIgdGhpcyBjdXJyZW50IG1vZGVsIGJlY2F1c2UgdGhleSBkbyBub3QgZml0IHRoZSBkYXRhIGFzIHdlbGwgYW5kIGFyZSBtaXNzaW5nIGltcG9ydGFudCBmYWN0b3JzLg0KDQojIyMgQ29udHJvbGxpbmcgZm9yIEFsbCBWYXJpYWJsZXMNCg0KRm9yIHRoaXMgZmluYWwgbW9kZWwsIHdlIHdpbGwgYmUgYWRkaW5nIGluIHRoZSBsYXN0IHR3byB2YXJpYWJsZXMsIHJlZ2lvbiBhbmQgY2hpbGRyZW4uDQoNCmBgYHtyfQ0KaW5zdXJhbmNlX2Z1bGxfbW9kZWwgPC0gbG0oY2hhcmdlcyB+IHNleCArIGFnZSArIGJtaSArIHNtb2tlciArIHJlZ2lvbiArIGNoaWxkcmVuLCBpbnN1cmFuY2UpDQoNCnN1bW1hcnkoaW5zdXJhbmNlX2Z1bGxfbW9kZWwpDQpgYGANCg0KVGhpcyBtb2RlbCBub3cgaGFzIGV2ZXJ5IHZhcmlhYmxlIGNvbnRyb2xsZWQgZm9yIGFuZCB3ZSBjYW4gc2VlIGEgZmV3IGNoYW5nZXMuIFRoZSBiaWdnZXN0IGNoYW5nZSB3ZSBjYW4gc2VlIHJpZ2h0IGF3YXkgaXMgdGhhdCBtZW4gYXJlIGNoYXJnZWQgJDEzMS4zMCBsZXNzIHRoYW4gd29tZW4gb24gYXZlcmFnZSwgaG93ZXZlciwgdGhlIHAtdmFsdWUgc2hvd3MgdGhhdCBzZXggaXMgbm90IGEgc2lnbmlmaWNhbnQgcHJlZGljdG9yIGFueW1vcmUuIFRoZXJlIGlzIG5vdCBtdWNoIGRpZmZlcmVuY2Ugd2l0aCB0aGUgdmFyaWFibGVzIGFnZSwgYm1pLCBhbmQgc21va2VyIGJlc2lkZXMgc29tZSBtaW5pbWFsIHByaWNlIGNoYW5nZXMgZnJvbSB0aGUgcHJldmlvdXMgbW9kZWwgYXMgdGhleSByZW1haW4gYXMgc2lnbmlmaWNhbnQgcHJlZGljdG9ycy4gVGhlIGFkanVzdGVkIFJeMl4gYW5kIEYtc3RhdGlzdGljIGRpZCBub3QgY2hhbmdlIGFsbW9zdCBhdCBhbGwgc28gdGhpcyBtb2RlbCBpcyBub3QgbXVjaCBiZXR0ZXIgdGhhbiB0aGUgcHJldmlvdXMgbW9kZWwuIA0KDQpNb3Zpbmcgb24gdG8gdGhlIG5ldyB2YXJpYWJsZXMsIGl0IGFwcGVhcnMgdGhhdCBjaGlsZHJlbiBpcyBhIHNpZ25pZmljYW50IHByZWRpY3RvciB3aXRoIGEgcC12YWx1ZSBhdCAwLjAwMDU3NyB3aGljaCBpcyBsZXNzIHRoYW4gMC4wNS4gVGhlIGNvZWZmaWNpZW50IHRlbGxzIHVzIHRoYXQgZm9yIGV2ZXJ5IGNoaWxkIG9yIGRlcGVuZGVudCBhIHBlcnNvbiBoYXMgaW4gdGhlaXIgaW5zdXJhbmNlLCB0aGVpciBjaGFyZ2VzIGluY3JlYXNlIGJ5ICQ0NzUuNTAgb24gYXZlcmFnZS4gQXMgZm9yIHJlZ2lvbnMsIHNvdXRoZWFzdCBhbmQgc291dGh3ZXN0IGFyZSBzaWduaWZpY2FudCBwcmVkaWN0b3JzIHdpdGggcC12YWx1ZXMgb2YgMC4wMzA4IGFuZCAwLjA0NDggcmVzcGVjdGl2ZWx5LiBGb3IgdGhvc2Ugd2hvIGxpdmUgaW4gdGhlIHNvdXRoZWFzdCByZWdpb24sIHRoZXkgd2lsbCBiZSBjaGFyZ2VkICQxLDAzNS4wMCBsZXNzIHRoYW4gdGhvc2Ugd2hvIGxpdmUgaW4gdGhlIG5vcnRoZWFzdCByZWdpb24gb24gYXZlcmFnZS4gRm9yIHRob3NlIHdobyBsaXZlIGluIHRoZSBzb3V0aHdlc3QgcmVnaW9uLCB0aGV5IHdpbGwgYmUgY2hhcmdlZCAkOTYwLjAwIGxlc3MgdGhhbiB0aG9zZSB3aG8gbGl2ZSBpbiB0aGUgbm9ydGhlYXN0IHJlZ2lvbiBvbiBhdmVyYWdlLiBUaGUgbm9ydGh3ZXN0IHJlZ2lvbiBpcyBub3Qgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCwgaG93ZXZlciwgdGhleSBwYXkgJDM1My4wMCBsZXNzIHRoYW4gdGhvc2Ugd2hvIGxpdmUgaW4gdGhlIG5vcnRoZWFzdCByZWdpb24gb24gYXZlcmFnZS4NCg0KIyBDb25jbHVzaW9uDQoNClRoZSBnb2FsIG9mIHRoaXMgcHJvamVjdCB3YXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgbWVuIGFyZSBjaGFyZ2VkIHNpZ25pZmljYW50bHkgbW9yZSBmb3IgaGVhbHRoIGluc3VyYW5jZSB0aGFuIHdvbWVuLiBPdXIgaW5pdGlhbCBtb2RlbCB0aGF0IG9ubHkgY29tcGFyZWQgc2V4IHRvIGNoYXJnZXMgc3VnZ2VzdGVkIHRoYXQgdGhlcmUgd2FzIGV2aWRlbmNlIHRoYXQgbWVuIHdlcmUgY2hhcmdlZCBtb3JlIGZvciBpbnN1cmFuY2UsIGhvd2V2ZXIgdGhlIGFkanVzdGVkIFJeMl4gd2FzIHZlcnkgc21hbGwuIA0KDQpBZnRlciByZWZpbmluZyBvdXIgcmVncmVzc2lvbiBtb2RlbHMgdG8gY29udHJvbCBmb3IgYWxsIHZhcmlhYmxlcywgd2UgY2FuIGNvbmNsdWRlIHRoYXQgdGhlcmUgaXMgbm8gZXZpZGVuY2UgdG8gc3VwcG9ydCB0aGUgY2xhaW0gdGhhdCBtZW4gYXJlIGNoYXJnZWQgc2lnbmlmaWNhbnRseSBtb3JlIHRoYW4gd29tZW4gZm9yIGhlYWx0aCBpbnN1cmFuY2UuIA0KDQpBcyB3ZSBzYXcgdGhyb3VnaG91dCB0aGUgcHJvamVjdCwgc2V4IGJlY2FtZSBtb3JlIGluc2lnbmlmaWNhbnQgdGhlIG1vcmUgdmFyaWFibGVzIHdlIHN0YXJ0ZWQgY29udHJvbGxpbmcgZm9yLCBlc3BlY2lhbGx5IG1ham9yIGZhY3RvcnMgc3VjaCBhcyBibWksIGFuZCBzbW9raW5nLiBDb250cm9sbGluZyBmb3IgdGhlc2UgcHJlZGljdG9yIHZhcmlhYmxlcyBub3Qgb25seSBzaG93ZWQgc2lnbmlmaWNhbmNlLCBidXQgdGhleSBhbHNvIGluY3JlYXNlZCB0aGUgYWRqdXN0ZWQgUl4yXiB3aGljaCBtZWFucyB0aGV5IGNhbiBleHBsYWluIGEgaGlnaCBwZXJjZW50YWdlIG9mIHRoZSB2YXJpYW5jZSBpbiBoZWFsdGggaW5zdXJhbmNlIGNoYXJnZXMuDQoNCi4uLg0KDQo=