Does higher number of hours working have a relationship with number of cigarettes smoked by current smokers?

Part two (Missing Data and Multiple Imputation)

The dataset used for this investigation is the National Health Interview Survey (NHIS) from 1997-2016. The analysis is between Average number of cigarettes smoker per day, the dependent variable and total hours worked in the past week, being the independant variable. For this analysis, I will study the releationship between # of cigarettes smoked and hours worked along with an predicting independent varaible, sex. In my orginal investigation, I had run poisson models but for the sake of this analysis we will run ls models. My hypothesis was that those who work longder hours, smoke more number of cigarettes then those with lower hours worked in the past week. Additionally, I think male smoker wills tend to smoke more than females despite working hours.For this investigation, we will be models using the Zelig and ZeligChoice package. In earlier model, I had filtered out the NA(missing data) while in this analysis I will be tackling missing data with multiple imputations using the Amelia Package.

Loading Packages

library(readr)
library(dplyr)
library(texreg)
library(ggplot2)
library(tidyr)
library(Amelia)
library(Zelig)
library(ZeligChoice)

Loading Data

load("/Users/Deepakie/Documents/Queens College/SOC712/Data/NHIS_v3.rdata")
#head(NHIS_v3)

Cleaning and recoding data

NHIS1 <- NHIS_v3%>%
  select(sex,bmi, hourswrk,cigsday)%>%
  mutate (sex = ifelse(sex==1, "1","2"),
        hourswork = ifelse(hourswrk==0, NA,
                    ifelse(hourswrk>=97, NA, hourswrk)),
        cigsday = ifelse(cigsday >= 91, NA, cigsday))%>%
    select(-hourswrk)
head(NHIS1)

Converting variables into Integers

NHIS1$sex <- as.integer(NHIS1$sex)
NHIS1$hourswork <- as.integer(NHIS1$hourswork)

Litewise Deletion (The Wrong Way)

summary(lm(cigsday ~ hourswork + sex,  data = NHIS1, na.action = na.omit))

Call:
lm(formula = cigsday ~ hourswork + sex, data = NHIS1, na.action = na.omit)

Residuals:
    Min      1Q  Median      3Q     Max 
-15.372  -7.682  -2.182   5.589  79.208 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 15.213010   0.171604   88.65   <2e-16 ***
hourswork    0.035653   0.002771   12.87   <2e-16 ***
sex         -2.228564   0.072773  -30.62   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 9.861 on 76593 degrees of freedom
  (542941 observations deleted due to missingness)
Multiple R-squared:  0.0166,    Adjusted R-squared:  0.01658 
F-statistic: 646.6 on 2 and 76593 DF,  p-value: < 2.2e-16

54,294 cases were deleted due to missingness. These observations have valuable information about the relationships between the number of cigs smoke daily and hours worked. Multiple imputation using Amelia help retrieve the missing values to make inferences.

summary(NHIS1)
      sex            bmi           cigsday         hourswork     
 Min.   :1.00   Min.   : 6.60   Min.   : 1.0     Min.   : 1.00   
 1st Qu.:1.00   1st Qu.:23.15   1st Qu.: 5.0     1st Qu.:36.00   
 Median :2.00   Median :26.35   Median :10.0     Median :40.00   
 Mean   :1.56   Mean   :27.31   Mean   :13.8     Mean   :39.89   
 3rd Qu.:2.00   3rd Qu.:30.15   3rd Qu.:20.0     3rd Qu.:45.00   
 Max.   :2.00   Max.   :99.80   Max.   :90.0     Max.   :95.00   
                NA's   :24428   NA's   :496052   NA's   :252283  

Imputation

a.imp <- amelia(x = NHIS1, m = 30)
-- Imputation 1 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 2 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 3 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 4 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 5 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 6 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 7 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 8 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 9 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 10 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 11 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 12 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 13 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 14 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 15 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 16 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 17 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 18 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 19 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 20 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 21 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 22 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 23 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 24 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23

-- Imputation 25 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 26 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 27 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23

-- Imputation 28 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 29 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

-- Imputation 30 --

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 21 22 23 24

Implementing multiple imputation requires a statistical model from which to compute the m imputations for each missing value in this data set. Here I run 30 imputation.

a.imp

Amelia output with 30 imputed datasets.
Return code:  1 
Message:  Normal EM convergence. 

Chain Lengths:
--------------
Imputation 1:  24
Imputation 2:  24
Imputation 3:  24
Imputation 4:  24
Imputation 5:  24
Imputation 6:  24
Imputation 7:  24
Imputation 8:  24
Imputation 9:  24
Imputation 10:  24
Imputation 11:  24
Imputation 12:  24
Imputation 13:  24
Imputation 14:  24
Imputation 15:  24
Imputation 16:  24
Imputation 17:  24
Imputation 18:  24
Imputation 19:  24
Imputation 20:  24
Imputation 21:  24
Imputation 22:  24
Imputation 23:  24
Imputation 24:  23
Imputation 25:  24
Imputation 26:  24
Imputation 27:  23
Imputation 28:  24
Imputation 29:  24
Imputation 30:  24
names(a.imp)
 [1] "imputations" "m"           "missMatrix"  "overvalues"  "theta"       "mu"          "covMatrices" "code"       
 [9] "message"     "iterHist"    "arguments"   "orig.vars"  

Viewing Imputation #1

View(a.imp$imputations$imp1)

Viewing Imputation #2

View(a.imp$imputations$imp2)

Viewing Imputation #3

View(a.imp$imputations$imp3)

Zelig Model and Amelia

z.out <- zelig(cigsday ~ hourswork + sex, model="ls", data=a.imp, cite = FALSE)

|======                                                                                        |  7% ~37 s remaining    
|=========                                                                                     | 10% ~47 s remaining    
|============                                                                                  | 13% ~46 s remaining    
|===============                                                                               | 17% ~44 s remaining    
|==================                                                                            | 20% ~43 s remaining    
|=====================                                                                         | 23% ~39 s remaining    
|=========================                                                                     | 27% ~36 s remaining    
|============================                                                                  | 30% ~34 s remaining    
|===============================                                                               | 33% ~32 s remaining    
|==================================                                                            | 37% ~32 s remaining    
|=====================================                                                         | 40% ~32 s remaining    
|========================================                                                      | 43% ~31 s remaining    
|===========================================                                                   | 47% ~29 s remaining    
|===============================================                                               | 50% ~27 s remaining    
|==================================================                                            | 53% ~36 s remaining    
|=====================================================                                         | 57% ~32 s remaining    
|========================================================                                      | 60% ~29 s remaining    
|===========================================================                                   | 63% ~26 s remaining    
|==============================================================                                | 67% ~24 s remaining    
|=================================================================                             | 70% ~21 s remaining    
|====================================================================                          | 73% ~18 s remaining    
|========================================================================                      | 77% ~16 s remaining    
|===========================================================================                   | 80% ~14 s remaining    
|==============================================================================                | 83% ~12 s remaining    
|=================================================================================             | 87% ~9 s remaining     
|====================================================================================          | 90% ~7 s remaining     
|=======================================================================================       | 93% ~5 s remaining     
|==========================================================================================    | 97% ~2 s remaining     
|==============================================================================================|100% ~0 s remaining     
summary(z.out)
Model: Combined Imputations 

            Estimate Std.Error z value Pr(>|z|)
(Intercept) 15.32384   0.15005   102.1   <2e-16
hourswork    0.03727   0.00278    13.4   <2e-16
sex         -2.02131   0.05527   -36.6   <2e-16

For results from individual imputed datasets, use summary(x, subset = i:j)
Next step: Use 'setx' method
summary(z.out, subset = 1)
Imputed Dataset 1
Call:
z5$zelig(formula = cigsday ~ hourswork + sex, data = a.imp)

Residuals:
    Min      1Q  Median      3Q     Max 
-48.264  -7.050  -0.330   6.601  78.608 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept) 15.40423    0.06395  240.88   <2e-16
hourswork    0.03476    0.00100   34.75   <2e-16
sex         -2.02331    0.02645  -76.49   <2e-16

Residual standard error: 10.13 on 619534 degrees of freedom
Multiple R-squared:  0.01347,   Adjusted R-squared:  0.01347 
F-statistic:  4229 on 2 and 619534 DF,  p-value: < 2.2e-16

Next step: Use 'setx' method
summary(z.out, subset = 2)
Imputed Dataset 2
Call:
z5$zelig(formula = cigsday ~ hourswork + sex, data = a.imp)

Residuals:
    Min      1Q  Median      3Q     Max 
-47.252  -7.076  -0.341   6.645  78.599 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)
(Intercept) 15.373892   0.064080  239.92   <2e-16
hourswork    0.035210   0.001002   35.13   <2e-16
sex         -2.004235   0.026506  -75.61   <2e-16

Residual standard error: 10.15 on 619534 degrees of freedom
Multiple R-squared:  0.01329,   Adjusted R-squared:  0.01329 
F-statistic:  4172 on 2 and 619534 DF,  p-value: < 2.2e-16

Next step: Use 'setx' method
z.out$setx()
z.out$sim()

|=======                            | 20% ~8 s remaining     
|========                           | 23% ~9 s remaining     
|=========                          | 27% ~9 s remaining     
|==========                         | 30% ~8 s remaining     
|===========                        | 33% ~8 s remaining     
|============                       | 37% ~8 s remaining     
|==============                     | 40% ~8 s remaining     
|===============                    | 43% ~7 s remaining     
|================                   | 47% ~7 s remaining     
|=================                  | 50% ~7 s remaining     
|==================                 | 53% ~6 s remaining     
|===================                | 57% ~6 s remaining     
|=====================              | 60% ~5 s remaining     
|======================             | 63% ~5 s remaining     
|=======================            | 67% ~4 s remaining     
|========================           | 70% ~4 s remaining     
|=========================          | 73% ~3 s remaining     
|==========================         | 77% ~3 s remaining     
|============================       | 80% ~2 s remaining     
|=============================      | 83% ~2 s remaining     
|==============================     | 87% ~2 s remaining     
|===============================    | 90% ~1 s remaining     
|================================   | 93% ~1 s remaining     
|=================================  | 97% ~2 s remaining     
|===================================|100% ~0 s remaining     
plot(z.out)

Conclusion

After comparing the litewise method to multiple impitations, we can see the results vary. THe litewise deletion method shows that for every extra hour of working, cigs smoked per smoker would be 0.035653 more, and in imputation 2 from Amelia, it is 0.03670. So despite the difference being small, there is a slight difference.Examing the data through two different types of missing values analysis, there are certain differences. The Amelia package changed the coefficent a big higher than litewise deletion.

LS0tCnRpdGxlOiAiSG9tZXdvcmsgMTEiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KIyNEb2VzIGhpZ2hlciBudW1iZXIgb2YgaG91cnMgd29ya2luZyBoYXZlIGEgcmVsYXRpb25zaGlwIHdpdGggbnVtYmVyIG9mIGNpZ2FyZXR0ZXMgc21va2VkIGJ5IGN1cnJlbnQgc21va2Vycz8gCiMjIyNQYXJ0IHR3byAoTWlzc2luZyBEYXRhIGFuZCBNdWx0aXBsZSBJbXB1dGF0aW9uKQoKIyMjIyMjIyMjIFRoZSBkYXRhc2V0IHVzZWQgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbiBpcyB0aGUgTmF0aW9uYWwgSGVhbHRoIEludGVydmlldyBTdXJ2ZXkgKE5ISVMpIGZyb20gMTk5Ny0yMDE2LiBUaGUgYW5hbHlzaXMgaXMgYmV0d2VlbiBBdmVyYWdlIG51bWJlciBvZiBjaWdhcmV0dGVzIHNtb2tlciBwZXIgZGF5LCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIGFuZCB0b3RhbCBob3VycyB3b3JrZWQgaW4gdGhlIHBhc3Qgd2VlaywgYmVpbmcgdGhlIGluZGVwZW5kYW50IHZhcmlhYmxlLiBGb3IgdGhpcyBhbmFseXNpcywgSSB3aWxsIHN0dWR5IHRoZSByZWxlYXRpb25zaGlwIGJldHdlZW4gIyBvZiBjaWdhcmV0dGVzIHNtb2tlZCBhbmQgaG91cnMgd29ya2VkIGFsb25nIHdpdGggYW4gcHJlZGljdGluZyBpbmRlcGVuZGVudCB2YXJhaWJsZSwgc2V4LiBJbiBteSBvcmdpbmFsIGludmVzdGlnYXRpb24sIEkgaGFkIHJ1biBwb2lzc29uIG1vZGVscyBidXQgZm9yIHRoZSBzYWtlIG9mIHRoaXMgYW5hbHlzaXMgd2Ugd2lsbCBydW4gbHMgbW9kZWxzLiBNeSBoeXBvdGhlc2lzIHdhcyB0aGF0IHRob3NlIHdobyB3b3JrIGxvbmdkZXIgaG91cnMsIHNtb2tlIG1vcmUgbnVtYmVyIG9mIGNpZ2FyZXR0ZXMgdGhlbiB0aG9zZSB3aXRoIGxvd2VyIGhvdXJzIHdvcmtlZCBpbiB0aGUgcGFzdCB3ZWVrLiBBZGRpdGlvbmFsbHksIEkgdGhpbmsgbWFsZSBzbW9rZXIgd2lsbHMgdGVuZCB0byBzbW9rZSBtb3JlIHRoYW4gZmVtYWxlcyBkZXNwaXRlIHdvcmtpbmcgaG91cnMuRm9yIHRoaXMgaW52ZXN0aWdhdGlvbiwgd2Ugd2lsbCBiZSBtb2RlbHMgdXNpbmcgdGhlIFplbGlnIGFuZCBaZWxpZ0Nob2ljZSBwYWNrYWdlLiBJbiBlYXJsaWVyIG1vZGVsLCBJIGhhZCBmaWx0ZXJlZCBvdXQgdGhlIE5BKG1pc3NpbmcgZGF0YSkgd2hpbGUgaW4gdGhpcyBhbmFseXNpcyBJIHdpbGwgYmUgdGFja2xpbmcgbWlzc2luZyBkYXRhIHdpdGggbXVsdGlwbGUgaW1wdXRhdGlvbnMgdXNpbmcgdGhlIEFtZWxpYSBQYWNrYWdlLgoKIyMjI0xvYWRpbmcgUGFja2FnZXMKYGBge3J9CmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkodGV4cmVnKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkodGlkeXIpCmxpYnJhcnkoQW1lbGlhKQpsaWJyYXJ5KFplbGlnKQpsaWJyYXJ5KFplbGlnQ2hvaWNlKQpgYGAKCiMjIyNMb2FkaW5nIERhdGEKYGBge3J9CmxvYWQoIi9Vc2Vycy9EZWVwYWtpZS9Eb2N1bWVudHMvUXVlZW5zIENvbGxlZ2UvU09DNzEyL0RhdGEvTkhJU192My5yZGF0YSIpCiNoZWFkKE5ISVNfdjMpCmBgYAoKIyMjI0NsZWFuaW5nIGFuZCByZWNvZGluZyBkYXRhCmBgYHtyfQpOSElTMSA8LSBOSElTX3YzJT4lCiAgc2VsZWN0KHNleCxibWksIGhvdXJzd3JrLGNpZ3NkYXkpJT4lCiAgbXV0YXRlIChzZXggPSBpZmVsc2Uoc2V4PT0xLCAiMSIsIjIiKSwKICAgICAgICBob3Vyc3dvcmsgPSBpZmVsc2UoaG91cnN3cms9PTAsIE5BLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZShob3Vyc3dyaz49OTcsIE5BLCBob3Vyc3dyaykpLAogICAgICAgIGNpZ3NkYXkgPSBpZmVsc2UoY2lnc2RheSA+PSA5MSwgTkEsIGNpZ3NkYXkpKSU+JQogICAgc2VsZWN0KC1ob3Vyc3dyaykKYGBgCgpgYGB7cn0KaGVhZChOSElTMSkKYGBgCgojIyMjQ29udmVydGluZyB2YXJpYWJsZXMgaW50byBJbnRlZ2VycwpgYGB7cn0KTkhJUzEkc2V4IDwtIGFzLmludGVnZXIoTkhJUzEkc2V4KQpOSElTMSRob3Vyc3dvcmsgPC0gYXMuaW50ZWdlcihOSElTMSRob3Vyc3dvcmspCmBgYAoKCiMjI0xpdGV3aXNlIERlbGV0aW9uIChUaGUgV3JvbmcgV2F5KQpgYGB7cn0Kc3VtbWFyeShsbShjaWdzZGF5IH4gaG91cnN3b3JrICsgc2V4LCAgZGF0YSA9IE5ISVMxLCBuYS5hY3Rpb24gPSBuYS5vbWl0KSkKYGBgCiMjIyMjIyMgNTQsMjk0IGNhc2VzIHdlcmUgZGVsZXRlZCBkdWUgdG8gbWlzc2luZ25lc3MuIFRoZXNlIG9ic2VydmF0aW9ucyBoYXZlIHZhbHVhYmxlIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIG51bWJlciBvZiBjaWdzIHNtb2tlIGRhaWx5IGFuZCBob3VycyB3b3JrZWQuIE11bHRpcGxlIGltcHV0YXRpb24gdXNpbmcgQW1lbGlhIGhlbHAgcmV0cmlldmUgdGhlIG1pc3NpbmcgdmFsdWVzIHRvIG1ha2UgaW5mZXJlbmNlcy4gCgpgYGB7cn0Kc3VtbWFyeShOSElTMSkKYGBgCgojIyNJbXB1dGF0aW9uCmBgYHtyfQphLmltcCA8LSBhbWVsaWEoeCA9IE5ISVMxLCBtID0gMzApCmBgYAojIyMjIyMjIEltcGxlbWVudGluZyBtdWx0aXBsZSBpbXB1dGF0aW9uIHJlcXVpcmVzIGEgc3RhdGlzdGljYWwgbW9kZWwgZnJvbSB3aGljaCB0byBjb21wdXRlIHRoZSBtIGltcHV0YXRpb25zIGZvciBlYWNoIG1pc3NpbmcgdmFsdWUgaW4gdGhpcyBkYXRhIHNldC4gSGVyZSBJIHJ1biAzMCBpbXB1dGF0aW9uLgoKYGBge3J9CmEuaW1wCmBgYAoKYGBge3J9Cm5hbWVzKGEuaW1wKQpgYGAKCiMjI1ZpZXdpbmcgSW1wdXRhdGlvbiAjMQpgYGB7cn0KVmlldyhhLmltcCRpbXB1dGF0aW9ucyRpbXAxKQpgYGAKCiMjI1ZpZXdpbmcgSW1wdXRhdGlvbiAjMgpgYGB7cn0KVmlldyhhLmltcCRpbXB1dGF0aW9ucyRpbXAyKQpgYGAKCiMjI1ZpZXdpbmcgSW1wdXRhdGlvbiAjMwpgYGB7cn0KVmlldyhhLmltcCRpbXB1dGF0aW9ucyRpbXAzKQpgYGAKCiMjI1plbGlnIE1vZGVsIGFuZCBBbWVsaWEgCmBgYHtyfQp6Lm91dCA8LSB6ZWxpZyhjaWdzZGF5IH4gaG91cnN3b3JrICsgc2V4LCBtb2RlbD0ibHMiLCBkYXRhPWEuaW1wLCBjaXRlID0gRkFMU0UpCnN1bW1hcnkoei5vdXQpCmBgYAoKYGBge3J9CnN1bW1hcnkoei5vdXQsIHN1YnNldCA9IDEpCmBgYAoKYGBge3J9CnN1bW1hcnkoei5vdXQsIHN1YnNldCA9IDIpCmBgYAoKCmBgYHtyfQp6Lm91dCRzZXR4KCkKei5vdXQkc2ltKCkKcGxvdCh6Lm91dCkKYGBgCgojIyMjQ29uY2x1c2lvbgpBZnRlciBjb21wYXJpbmcgdGhlIGxpdGV3aXNlIG1ldGhvZCB0byBtdWx0aXBsZSBpbXBpdGF0aW9ucywgd2UgY2FuIHNlZSB0aGUgcmVzdWx0cyB2YXJ5LiBUSGUgbGl0ZXdpc2UgZGVsZXRpb24gbWV0aG9kIHNob3dzIHRoYXQgZm9yIGV2ZXJ5IGV4dHJhIGhvdXIgb2Ygd29ya2luZywgY2lncyBzbW9rZWQgcGVyIHNtb2tlciB3b3VsZCBiZSAwLjAzNTY1MyBtb3JlLCBhbmQgaW4gaW1wdXRhdGlvbiAyIGZyb20gQW1lbGlhLCBpdCBpcyAwLjAzNjcwLiBTbyBkZXNwaXRlIHRoZSBkaWZmZXJlbmNlIGJlaW5nIHNtYWxsLCB0aGVyZSBpcyBhIHNsaWdodCBkaWZmZXJlbmNlLkV4YW1pbmcgdGhlIGRhdGEgdGhyb3VnaCB0d28gZGlmZmVyZW50IHR5cGVzIG9mIG1pc3NpbmcgdmFsdWVzIGFuYWx5c2lzLCB0aGVyZSBhcmUgY2VydGFpbiBkaWZmZXJlbmNlcy4gVGhlIEFtZWxpYSBwYWNrYWdlIGNoYW5nZWQgdGhlIGNvZWZmaWNlbnQgYSBiaWcgaGlnaGVyIHRoYW4gbGl0ZXdpc2UgZGVsZXRpb24uIA==