#1. Define a binary outcome of your choosing
self rated health status
1 Define an ordinal or multinomial outcome variable of your choosing and define how you will recode the original variable.
Answer: Health status, with 5 being the worst and 1 being the best health
1&2= 1 (Excellent/V. good) 3=2 (Good) 4&5= 3(Fair/poor)
data$generalhealth<-Recode(data$health,
recodes="1:2=1;3=2;4:5=3; else=NA",
as.factor = T)
data$generalhealth<-relevel(data$generalhealth, ref = "1")
data$healthnum<-car::Recode(data$health,
recodes="1:2=1;3=2;4:5=3; else=NA",
as.factor = F)
data <- data%>%
filter(age >=16 & age<=24)
#First we tell R our survey design
options(survey.lonely.psu = "adjust")
library(dplyr)
sub<-data%>%
select(badhealth,healthnum,generalhealth, opportunity_youth_cat,
age2,race_eth, male, educ,whitemajority,otherminority,urban_rural,healthinsurace_coverage,
,sampweight, strata) %>%
filter( complete.cases(.))
#First we tell R our survey design
options(survey.lonely.psu = "adjust")
des<-svydesign(ids=~1,
strata=~strata,
weights=~sampweight,
data =sub )
State a research question about what factors you believe will affect your outcome variable.
Research question
Is there an association between the health status and opportunity youth status
Other Predictor Variables
Education
gender
health insurance
3. Fit the ordinal or the multinomial logistic regression models to your outcome.
#Multinomial Model
mfit<-svy_vglm(generalhealth~opportunity_youth_cat+educ+male+healthinsurace_coverage,
family=multinomial(refLevel = 1),
design = des)
mfit%>%
tbl_regression()
## ! `broom::tidy()` failed to tidy the model.
## x No tidy method for objects of class svy_vglm
## ✓ `tidy_parameters()` used instead.
## ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
## x Unable to identify the list of variables.
##
## This is usually due to an error calling `stats::model.frame(x)`or `stats::model.matrix(x)`.
## It could be the case if that type of model does not implement these methods.
## Rarely, this error may occur if the model object was created within
## a functional programming framework (e.g. using `lappy()`, `purrr::map()`, etc.).
Characteristic |
Beta |
95% CI |
p-value |
(Intercept):1 |
-0.79 |
-1.3, -0.31 |
0.001 |
(Intercept):2 |
-1.0 |
-1.6, -0.37 |
0.002 |
opportunity_youth_catNot opportunity youth:1 |
-0.40 |
-0.73, -0.08 |
0.013 |
opportunity_youth_catNot opportunity youth:2 |
-0.93 |
-1.3, -0.50 |
<0.001 |
educ2hsgrad:1 |
0.18 |
-0.18, 0.54 |
0.3 |
educ2hsgrad:2 |
-0.59 |
-1.1, -0.10 |
0.018 |
educ3More than HS:1 |
-0.13 |
-0.48, 0.22 |
0.5 |
educ3More than HS:2 |
-0.69 |
-1.2, -0.22 |
0.004 |
maleMale:1 |
0.03 |
-0.17, 0.23 |
0.8 |
maleMale:2 |
-0.34 |
-0.69, 0.01 |
0.054 |
healthinsurace_coverageno, has coverage:1 |
-0.29 |
-0.57, -0.02 |
0.036 |
healthinsurace_coverageno, has coverage:2 |
-0.29 |
-0.73, 0.15 |
0.2 |
3.1. Describe the results of your model
opportunity_youth_catNot opportunity youth:1
corresponds to the odds ratio for non opportunity youth respondents having good compared to verygood/excellent health, compared to opportunity youth.
And the opportunity_youth_catNot opportunity youth:2
odds ratio is the odds ratio for non opportunity youth respondents having fair/poor versus verygood/excellent health, compared to opportunity youths.
In terms of education, those high school grads are more likely to report good, compared to excellent/vg health, compared to those with less than high school, but those with more than High school education are less likely to report good vs excellent/vg health, compared to those with less than high school.
While those high school grads and more than high school grad are less likely to report fair/poor health versus verygood/ excellent health, compared to those with less than high school grad
In terms of gender, females are more likely to report good, compared to excellent/vg health, compared to males.
While females are less likely to report fair/poor versus verygood/excellent health compared to males
In terms of health insurance coverage, those who have health insurance coverage are less likely to report good, compared to excellent/vg health, compared to those without health insurance coverage. Also those with health insurance coverage are less likely to report fair/poor health versus verygood/ excellent health, compared to those without health insurance
LS0tCnRpdGxlOiAiQXNzaWdubWVudCA1IgphdXRob3I6ICJKb3NlcGggSmFpeWVvbGEiCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiCm91dHB1dDoKICAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCgojMS4gRGVmaW5lIGEgYmluYXJ5IG91dGNvbWUgb2YgeW91ciBjaG9vc2luZwoKc2VsZiByYXRlZCBoZWFsdGggc3RhdHVzCgoKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoc3RhcmdhemVyLCBxdWlldGx5ID0gVCkKbGlicmFyeShzdXJ2ZXksIHF1aWV0bHkgPSBUKQpsaWJyYXJ5KGNhciwgcXVpZXRseSA9IFQpCmxpYnJhcnkocXVlc3Rpb25yLCBxdWlldGx5ID0gVCkKbGlicmFyeShkcGx5ciwgcXVpZXRseSA9IFQpCmxpYnJhcnkoZm9yY2F0cywgcXVpZXRseSA9IFQpCmxpYnJhcnkodGlkeXZlcnNlLCBxdWlldGx5ID0gVCkKbGlicmFyeShzcnZ5ciwgcXVpZXRseSA9IFQpCmxpYnJhcnkoIGd0c3VtbWFyeSwgcXVpZXRseSA9IFQpCmxpYnJhcnkoY2FyZXQsIHF1aWV0bHkgPSBUKQpsaWJyYXJ5KFZHQU0sIHF1aWV0bHkgPSBUKQpsaWJyYXJ5KGdncGxvdDIsIHF1aWV0bHkgPSBUKQpsaWJyYXJ5KHN2eVZHQU0sIHF1aWV0bHkgPSBUKQpgYGAKCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KGlwdW1zcikKYGBgCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQpkZGkgPC0gcmVhZF9pcHVtc19kZGkoIm5oaXNfMDAwMDIueG1sIikKZGF0YSA8LSByZWFkX2lwdW1zX21pY3JvKGRkaSkKZGF0YTwtIGhhdmVuOjp6YXBfbGFiZWxzKGRhdGEpCmBgYAoKYGBge3IgaW5jbHVkZT1GQUxTRX0KbmFtZXMoZGF0YSkgPC0gdG9sb3dlcihnc3ViKHBhdHRlcm4gPSAiXyIscmVwbGFjZW1lbnQgPSAgIiIseCA9ICBuYW1lcyhkYXRhKSkpCmBgYAoKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CiNzZXgKZGF0YSRtYWxlPC1hcy5mYWN0b3IoaWZlbHNlKGRhdGEkc2V4PT0xLCAiTWFsZSIsICJGZW1hbGUiKSkKCgojYWdlCgpkYXRhJGFnZTI8LSBkYXRhJGFnZV4yCgojcmFjZS9ldGhuaWNpdHkKZGF0YSR3aGl0ZW1ham9yaXR5PC0gY2FyOjpSZWNvZGUoZGF0YSRoaXNwcmFjZSwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIwMj0xOyA5OT1OQTsgZWxzZT0wIikKCmRhdGEkb3RoZXJtaW5vcml0eTwtIGNhcjo6UmVjb2RlKGRhdGEkaGlzcHJhY2UsCiAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSJjKDEsMyw0LDUsNiw3KT0xOyA5OT1OQTsgZWxzZT0wIikKCmRhdGEkcmFjZV9ldGg8LWNhcjo6UmVjb2RlKGRhdGEkaGlzcHJhY2UsCnJlY29kZXM9IjAyPSd3aGl0ZW1ham9yaXR5JzsgYygxLDMsNCw1LDYsNyk9J290aGVybWlub3JpdHknO2Vsc2U9TkEiLAphcy5mYWN0b3IgPSBUKQpkYXRhJHJhY2VfZXRoPC1yZWxldmVsKGRhdGEkcmFjZV9ldGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmID0gIndoaXRlbWFqb3JpdHkiKQoKCiNlZHVjYXRpb24gbGV2ZWwKCgoKZGF0YSRlZHVjPC0gY2FyOjpSZWNvZGUoZGF0YSRlZHVjLAogICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxMDI6MTE2PScxTGVzcyB0aGFuIEhTJzsgMjAxOjIwMj0nMmhzZ3JhZCc7IDMwMTo1MDM9JzNNb3JlIHRoYW4gSFMnOzk5Nzo5OTk9TkE7MDAwPU5BIiwKICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkZWR1YzwtZmN0X3JlbGV2ZWwoZGF0YSRlZHVjLCcxTGVzcyB0aGFuIEhTJywnMmhzZ3JhZCcsJzNNb3JlIHRoYW4gSFMnKSAKCgojVXJiYW4tcnVyYWwgY2xhc3NpZmljYXRpb24KCgpkYXRhJHVyYmFuX3J1cmFsPC0gY2FyOjpSZWNvZGUoZGF0YSR1cmJycmwsCiAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjE6Mz0ndXJiYW4nOyA0PSdydXJhbCc7MDAwPU5BIiwKICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkdXJiYW5fcnVyYWw8LXJlbGV2ZWwoZGF0YSR1cmJhbl9ydXJhbCwgcmVmPSdydXJhbCcpIAoKCmRhdGEkcnVyYWw8LSBjYXI6OlJlY29kZShkYXRhJGhpc3ByYWNlLAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjQ9MTsgOTk9TkE7IGVsc2U9MCIpCgpkYXRhJHVyYmFuPC0gY2FyOjpSZWNvZGUoZGF0YSRoaXNwcmFjZSwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxOjM9MTsgOTk9TkE7IGVsc2U9MCIpCgoKCgojZW1wbG95bWVudCBzdGF0dXMKCgpkYXRhJHVuZW1wbG95PC0gY2FyOjpSZWNvZGUoZGF0YSRlbXBzdGF0LAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjIwMD0xOyAwMD1OQTsgOTk5PU5BOyBlbHNlPTAiKQoKCmRhdGEkZW1wbG95X3N0YXR1czwtIGNhcjo6UmVjb2RlKGRhdGEkZW1wc3RhdCwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxMDA9J0VtcGxveWVkJzsgMjAwPSd1bmVtcGxveWVkJztlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3I9VCkKZGF0YSRlbXBsb3lfc3RhdHVzPC1yZWxldmVsKGRhdGEkZW1wbG95X3N0YXR1cywgcmVmPSdFbXBsb3llZCcpCgoKIyBjdXJyZW50bHkgaW4gc2Nob29sCgpkYXRhJG5vbl9zY2hvb2xpbmc8LSBjYXI6OlJlY29kZShkYXRhJHNjaG9vbG5vdywKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPTE7IDA9TkE7IDc6OT1OQTsgZWxzZT0wIikKCmRhdGEkc2Nob29sc3RhdHVzPC0gY2FyOjpSZWNvZGUoZGF0YSRzY2hvb2xub3csCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0nbm8nOyAyPSd5ZXMnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJHNjaG9vbHN0YXR1czwtcmVsZXZlbChkYXRhJHNjaG9vbHN0YXR1cywgcmVmPSdubycpCgoKCgojIG1lcmdpbmcgc2Nob29saW5nIGFuZCB3b3JraW5nCgpkYXRhJG9wcG9ydHVuaXR5X3lvdXRoIDwtIHBhc3RlKCBkYXRhJHVuZW1wbG95LCBkYXRhJG5vbl9zY2hvb2xpbmcsIHNlcCA9IiIpCgoKZGF0YSRvcHBvcnR1bml0eV95b3V0aF9jYXRfbnVtPC0gY2FyOjpSZWNvZGUoZGF0YSRvcHBvcnR1bml0eV95b3V0aCwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxMT0xOyAwMDoxMD0wO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1GKQoKCmRhdGEkb3Bwb3J0dW5pdHlfeW91dGhfY2F0PC0gY2FyOjpSZWNvZGUoZGF0YSRvcHBvcnR1bml0eV95b3V0aCwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxMT0nT3Bwb3J0dW5pdHkgeW91dGgnOzAwOjEwPSdOb3Qgb3Bwb3J0dW5pdHkgeW91dGgnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJG9wcG9ydHVuaXR5X3lvdXRoX2NhdDwtcmVsZXZlbChkYXRhJG9wcG9ydHVuaXR5X3lvdXRoX2NhdCwgcmVmPSdPcHBvcnR1bml0eSB5b3V0aCcpCgpkYXRhJG5vbl9vcHBvcnR1bml0eV95b3V0aF9jYXRfbnVtPC0gY2FyOjpSZWNvZGUoZGF0YSRvcHBvcnR1bml0eV95b3V0aF9jYXRfbnVtLAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjA9MTsgOTk9TkE7IGVsc2U9MCIpCgojaW5jb21lIGdyb3VwaW5nCgpkYXRhJGZhbWlseWluY29tZSA8LSBkYXRhJGluY2ZhbTA3b24KCiMgYm9ybiBpbiB0aGUgVVMKCmRhdGEkdXNib3JuPC0gY2FyOjpSZWNvZGUoZGF0YSR1c2Jvcm4sCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMjA9MTsgOTc6OTg9TkE7IGVsc2U9MCIpCgojIFVTIENpdGl6ZW4KZGF0YSRjaXRpemVuPC0gY2FyOjpSZWNvZGUoZGF0YSRjaXRpemVuLAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjI9MTsgODo5PU5BOyBlbHNlPTAiKQoKI2xhc3QgZW1wbG95ZWQKCgoKZGF0YSRlbXBsb3llZGxhc3Q8LSBjYXI6OlJlY29kZShkYXRhJGVtcGxhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0nV2l0aGluIHBhc3QgMTJtb250aHMnOyAyPScxLTV5ZWFycyBhZ28nOyAzPSdvdmVyIDV5ZWFycyBhZ28nOyA0PSduZXZlciB3b3JrZWQnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJGVtcGxveWVkbGFzdDwtcmVsZXZlbChkYXRhJGVtcGxveWVkbGFzdCwgcmVmPScxLTV5ZWFycyBhZ28nKQoKCiNIRUFMVEggVkFSSUFCTEVTCgojUG9vciBvciBmYWlyIHNlbGYgcmF0ZWQgaGVhbHRoCmRhdGEkYmFkaGVhbHRoPC1jYXI6OlJlY29kZShkYXRhJGhlYWx0aCwgcmVjb2Rlcz0iNDo1PTE7IDE6Mz0wOyBlbHNlPU5BIikKCiNHZW5lcmFsIG9yZGluYWwgY29kaW5nLCB3aXRoIDUgYmVpbmcgdGhlIHdvcnN0IGFuZCAxIGJlaW5nIHRoZSBiZXN0IGhlYWx0aAoKCiNwbGFjZSBmb3IgbWVkaWNhbCBjYXJlCgoKZGF0YSRtZWRpY2FscGxhY2U8LSBjYXI6OlJlY29kZShkYXRhJHVzdWFscGwsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0nbm8nOyAyOjM6PSd5ZXMnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJG1lZGljYWxwbGFjZTwtcmVsZXZlbChkYXRhJG1lZGljYWxwbGFjZSwgcmVmPSdubycpCgoKIyBkZWxheWVkIG1lZGljYWwgY2FyZSBkdWUgdG8gY29zdAoKCmRhdGEkbWVkaWNhbF9jYXJlX2Nvc3Q8LSBjYXI6OlJlY29kZShkYXRhJGRlbGF5Y29zdCwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIyPSd5ZXMnOyAxPSdubyc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkbWVkaWNhbF9jYXJlX2Nvc3Q8LXJlbGV2ZWwoZGF0YSRtZWRpY2FsX2NhcmVfY29zdCwgcmVmPSd5ZXMnKQoKIyB3b3JyaWVkIGFib3V0IHBheWluZyBtZWRpY2FsIGJpbGxzCgoKZGF0YSRtZWRpY2FsX2JpbGxfd29ycmllZDwtIGNhcjo6UmVjb2RlKGRhdGEkd29ybWVkYmlsbCwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPSd2ZXJ5IHdvcnJpZWQnOyAyPSdzb21ld2hhdCB3b3JyaWVkJzsgMz0nbm90IGF0IGFsbCc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkbWVkaWNhbF9iaWxsX3dvcnJpZWQ8LXJlbGV2ZWwoZGF0YSRtZWRpY2FsX2JpbGxfd29ycmllZCwgcmVmPSd2ZXJ5IHdvcnJpZWQnKQoKIyB1bmFibGUgdG8gcGF5IG1lZGljYWwgYmlsbHMKCgojZGF0YSRtZWRpY2FsX2JpbGxfdW5hYmxldG9wYXk8LSBjYXI6OlJlY29kZShkYXRhJGhpdW5hYmxlcGF5LAogICAgICAgICAgICAgICAgICAgICAgICNyZWNvZGVzPSIxPSdubyc7IDI9J3llcyc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAjIGFzLmZhY3Rvcj1UKQojZGF0YSRtZWRpY2FsX2JpbGxfdW5hYmxldG9wYXk8LXJlbGV2ZWwoZGF0YSRtZWRpY2FsX2JpbGxfdW5hYmxldG9wYXksIHJlZj0neWVzJykKCgojIGhlYWx0aCBpbnN1cmFuY2UgY292ZXJhZ2UKCgpkYXRhJGhlYWx0aGluc3VyYWNlX2NvdmVyYWdlPC0gY2FyOjpSZWNvZGUoZGF0YSRoaW5vdGNvdmUsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0nbm8sIGhhcyBjb3ZlcmFnZSc7IDI9J3llcywgbm8gY292ZXJhZ2UnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJGhlYWx0aGluc3VyYWNlX2NvdmVyYWdlPC1yZWxldmVsKGRhdGEkaGVhbHRoaW5zdXJhY2VfY292ZXJhZ2UsIHJlZj0neWVzLCBubyBjb3ZlcmFnZScpCgojIGRvbnQgaGF2ZSBoZWFsdGggaW5zdXJhbmNlIGN1eiBvZiBjb3N0CgoKI2RhdGEkbm9oZWFsdGhpbnN1cmFjZV9jb3N0PC0gY2FyOjpSZWNvZGUoZGF0YSRoaW5vY29zdHIsCiAgICAgICAgICAgICAgICAgICAgICAjIHJlY29kZXM9IjE9J25vJzsgMj0neWVzJztlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICAjYXMuZmFjdG9yPVQpCiNkYXRhJG5vaGVhbHRoaW5zdXJhY2VfY29zdDwtcmVsZXZlbChkYXRhJG5vaGVhbHRoaW5zdXJhY2VfY29zdCwgcmVmPSd5ZXMnKQoKIyB1c2VkIG1lZGljYXRpb24gaW4gdGhlIHBhc3QgeWVhcgoKCmRhdGEkdXNlZG1lZGljYXRpb25zPC0gY2FyOjpSZWNvZGUoZGF0YSRwcmVtZWR5ciwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPSdubyc7IDI9J3llcyc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkdXNlZG1lZGljYXRpb25zPC1yZWxldmVsKGRhdGEkdXNlZG1lZGljYXRpb25zLCByZWY9J3llcycpCgoKIyBpZiB0aGV5IHNtb2tlZAoKCmRhdGEkc21va2VfZnJlcXVlbnRseTwtIGNhcjo6UmVjb2RlKGRhdGEkc21va2ZyZXFub3csCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0nbm8nOyAyOjM9J3NvbWVkYXlzL2V2ZXJ5ZGF5JztlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3I9VCkKZGF0YSRzbW9rZV9mcmVxdWVudGx5PC1yZWxldmVsKGRhdGEkc21va2VfZnJlcXVlbnRseSwgcmVmPSdzb21lZGF5cy9ldmVyeWRheScpCgojIHNtb2tlZCB1cCB0byAxMDAgY2lnYXJyZXRoIGluIGxpZmUgdGltZQoKCiNkYXRhJHNtb2tlXzEwMGNpZzwtIGNhcjo6UmVjb2RlKGRhdGEkc21va2V2LAogICAgICAgICAgICAgICAgICAgICAjICByZWNvZGVzPSIxPSdubyc7IDI9J3llcyc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAjIGFzLmZhY3Rvcj1UKQojZGF0YSRzbW9rZV8xMDBjaWc8LXJlbGV2ZWwoZGF0YSRzbW9rZV8xMDBjaWcsIHJlZj0neWVzJykKCgojTWVudGFsIGhlYWx0aAoKIyBldmVyIGhhZCBhbnhpZXR5IGRpc29yZWRlcgoKCmRhdGEkYW54aWV0eV9kaXNvcmVkZXI8LSBjYXI6OlJlY29kZShkYXRhJGFueGlldHlldiwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPSdubyc7IDI9J3llcyc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkYW54aWV0eV9kaXNvcmVkZXI8LXJlbGV2ZWwoZGF0YSRhbnhpZXR5X2Rpc29yZWRlciwgcmVmPSd5ZXMnKQoKIyBtZWRpY2F0aW9uIGZvciB3b3JyeWluZwoKCmRhdGEkbWVkaWNhdGlvbl9mb3Jfd29ycnk8LSBjYXI6OlJlY29kZShkYXRhJHdvcnJ4LAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjE9J25vJzsgMj0neWVzJztlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3I9VCkKZGF0YSRtZWRpY2F0aW9uX2Zvcl93b3JyeTwtcmVsZXZlbChkYXRhJG1lZGljYXRpb25fZm9yX3dvcnJ5LCByZWY9J3llcycpCgoKIyBtZWRpY2F0aW9uIGZvciBkZXByZXNzaW9uCgoKCmRhdGEkbWVkaWNhdGlvbl9mb3JfZGVwcmVzc2lvbjwtIGNhcjo6UmVjb2RlKGRhdGEkZGVwcngsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0nbm8nOyAyPSd5ZXMnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJG1lZGljYXRpb25fZm9yX2RlcHJlc3Npb248LXJlbGV2ZWwoZGF0YSRtZWRpY2F0aW9uX2Zvcl9kZXByZXNzaW9uLCByZWY9J3llcycpCgojIGxldmVsIG9mIHdvcnJ5CgoKCmRhdGEkbGV2ZWxfb2Zfd29ycnk8LSBjYXI6OlJlY29kZShkYXRhJHdvcmZlZWxldmwsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0nYWxvdCc7IDI9J2EgbGl0dGxlJzsgMz0nYnR3IGxpdHRsZSBhbmQgYWxvdCc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkbGV2ZWxfb2Zfd29ycnk8LXJlbGV2ZWwoZGF0YSRsZXZlbF9vZl93b3JyeSwgcmVmPSdhbG90JykKCgojIGxldmVsIG9mIGRlcHJlc3Npb24KCgoKZGF0YSRsZXZlbF9vZl9kZXByZXNzaW9uPC0gY2FyOjpSZWNvZGUoZGF0YSRkZXBmZWVsZXZsLAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjE9JzFhbG90JzsgMj0nM2EgbGl0dGxlJzsgMz0nMmJ0dyBsaXR0bGUgYW5kIGFsb3QnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJGxldmVsX29mX2RlcHJlc3Npb248LXJlbGV2ZWwoZGF0YSRsZXZlbF9vZl9kZXByZXNzaW9uLCByZWY9JzFhbG90JykKCgpkYXRhJGxldmVsX29mX2RlcHJlc3Npb25fbnVtPC0gY2FyOjpSZWNvZGUoZGF0YSRkZXBmZWVsZXZsLAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjE9MTsgMj0nM2EgbGl0dGxlJzsgMz0nMmJ0dyBsaXR0bGUgYW5kIGFsb3QnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJGxldmVsX29mX2RlcHJlc3Npb248LXJlbGV2ZWwoZGF0YSRsZXZlbF9vZl9kZXByZXNzaW9uLCByZWY9JzFhbG90JykKCgoKCmBgYAoKCgojIDEgRGVmaW5lIGFuIG9yZGluYWwgb3IgbXVsdGlub21pYWwgb3V0Y29tZSB2YXJpYWJsZSBvZiB5b3VyIGNob29zaW5nIGFuZCBkZWZpbmUgaG93IHlvdSB3aWxsIHJlY29kZSB0aGUgb3JpZ2luYWwgdmFyaWFibGUuCgpBbnN3ZXI6IEhlYWx0aCBzdGF0dXMsIHdpdGggNSBiZWluZyB0aGUgd29yc3QgYW5kIDEgYmVpbmcgdGhlIGJlc3QgaGVhbHRoCgoxJjI9IDEgKEV4Y2VsbGVudC9WLiBnb29kKQozPTIgKEdvb2QpCjQmNT0gMyhGYWlyL3Bvb3IpCgpgYGB7cn0KCmRhdGEkZ2VuZXJhbGhlYWx0aDwtUmVjb2RlKGRhdGEkaGVhbHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMToyPTE7Mz0yOzQ6NT0zOyBlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3RvciA9IFQpCgpkYXRhJGdlbmVyYWxoZWFsdGg8LXJlbGV2ZWwoZGF0YSRnZW5lcmFsaGVhbHRoLCByZWYgPSAiMSIpCgpkYXRhJGhlYWx0aG51bTwtY2FyOjpSZWNvZGUoZGF0YSRoZWFsdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMToyPTE7Mz0yOzQ6NT0zOyBlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3IgPSBGKQoKCgpkYXRhIDwtIGRhdGElPiUKZmlsdGVyKGFnZSA+PTE2ICYgYWdlPD0yNCkKCiNGaXJzdCB3ZSB0ZWxsIFIgb3VyIHN1cnZleSBkZXNpZ24Kb3B0aW9ucyhzdXJ2ZXkubG9uZWx5LnBzdSA9ICJhZGp1c3QiKQoKCgoKCmxpYnJhcnkoZHBseXIpCnN1YjwtZGF0YSU+JQogIHNlbGVjdChiYWRoZWFsdGgsaGVhbHRobnVtLGdlbmVyYWxoZWFsdGgsIG9wcG9ydHVuaXR5X3lvdXRoX2NhdCwKICAgICAgICAgYWdlMixyYWNlX2V0aCwgbWFsZSwgZWR1Yyx3aGl0ZW1ham9yaXR5LG90aGVybWlub3JpdHksdXJiYW5fcnVyYWwsaGVhbHRoaW5zdXJhY2VfY292ZXJhZ2UsCiAgICAgICAgICxzYW1wd2VpZ2h0LCBzdHJhdGEpICU+JQogIGZpbHRlciggY29tcGxldGUuY2FzZXMoLikpCgoKCgojRmlyc3Qgd2UgdGVsbCBSIG91ciBzdXJ2ZXkgZGVzaWduCm9wdGlvbnMoc3VydmV5LmxvbmVseS5wc3UgPSAiYWRqdXN0IikKZGVzPC1zdnlkZXNpZ24oaWRzPX4xLAogICAgICAgICAgICAgICBzdHJhdGE9fnN0cmF0YSwKICAgICAgICAgICAgICAgd2VpZ2h0cz1+c2FtcHdlaWdodCwKICAgICAgICAgICAgICAgZGF0YSA9c3ViICkKCmBgYAoKCiMgU3RhdGUgYSByZXNlYXJjaCBxdWVzdGlvbiBhYm91dCB3aGF0IGZhY3RvcnMgeW91IGJlbGlldmUgd2lsbCBhZmZlY3QgeW91ciBvdXRjb21lIHZhcmlhYmxlLgoKIyMgUmVzZWFyY2ggcXVlc3Rpb24KCiMjIyMjIElzIHRoZXJlIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIGhlYWx0aCBzdGF0dXMgYW5kIG9wcG9ydHVuaXR5IHlvdXRoIHN0YXR1cwoKIyMjIyMgT3RoZXIgUHJlZGljdG9yIFZhcmlhYmxlcwphLiBFZHVjYXRpb24KCmIuIGdlbmRlcgoKYy4gaGVhbHRoIGluc3VyYW5jZQoKCiMgMy4gRml0IHRoZSBvcmRpbmFsIG9yIHRoZSBtdWx0aW5vbWlhbCBsb2dpc3RpYyByZWdyZXNzaW9uIG1vZGVscyB0byB5b3VyIG91dGNvbWUuCiNNdWx0aW5vbWlhbCBNb2RlbAoKYGBge3J9Cm1maXQ8LXN2eV92Z2xtKGdlbmVyYWxoZWFsdGh+b3Bwb3J0dW5pdHlfeW91dGhfY2F0K2VkdWMrbWFsZStoZWFsdGhpbnN1cmFjZV9jb3ZlcmFnZSwKICAgICAgICAgICBmYW1pbHk9bXVsdGlub21pYWwocmVmTGV2ZWwgPSAxKSwKICAgICAgICAgICBkZXNpZ24gPSBkZXMpCm1maXQlPiUKICB0YmxfcmVncmVzc2lvbigpCmBgYAoKCiMgMy4xLiBEZXNjcmliZSB0aGUgcmVzdWx0cyBvZiB5b3VyIG1vZGVsCgpgb3Bwb3J0dW5pdHlfeW91dGhfY2F0Tm90IG9wcG9ydHVuaXR5IHlvdXRoOjFgIGNvcnJlc3BvbmRzIHRvIHRoZSBvZGRzIHJhdGlvIGZvciBub24gb3Bwb3J0dW5pdHkgeW91dGggcmVzcG9uZGVudHMgaGF2aW5nIGdvb2QgIGNvbXBhcmVkIHRvICB2ZXJ5Z29vZC9leGNlbGxlbnQgaGVhbHRoLCBjb21wYXJlZCB0byBvcHBvcnR1bml0eSB5b3V0aC4gCgpBbmQgdGhlIGAgb3Bwb3J0dW5pdHlfeW91dGhfY2F0Tm90IG9wcG9ydHVuaXR5IHlvdXRoOjJgIG9kZHMgcmF0aW8gaXMgdGhlIG9kZHMgcmF0aW8gZm9yIG5vbiBvcHBvcnR1bml0eSB5b3V0aCByZXNwb25kZW50cyBoYXZpbmcgZmFpci9wb29yIHZlcnN1cyB2ZXJ5Z29vZC9leGNlbGxlbnQgaGVhbHRoLCBjb21wYXJlZCB0byBvcHBvcnR1bml0eSB5b3V0aHMuIAoKCkluIHRlcm1zIG9mIGVkdWNhdGlvbiwgdGhvc2UgaGlnaCBzY2hvb2wgZ3JhZHMgYXJlIG1vcmUgbGlrZWx5IHRvIHJlcG9ydCBnb29kLCBjb21wYXJlZCB0byBleGNlbGxlbnQvdmcgaGVhbHRoLCBjb21wYXJlZCB0byB0aG9zZSB3aXRoIGxlc3MgdGhhbiBoaWdoIHNjaG9vbCwgYnV0IHRob3NlIHdpdGggbW9yZSB0aGFuIEhpZ2ggc2Nob29sIGVkdWNhdGlvbiBhcmUgbGVzcyBsaWtlbHkgdG8gcmVwb3J0IGdvb2QgdnMgZXhjZWxsZW50L3ZnIGhlYWx0aCwgY29tcGFyZWQgdG8gdGhvc2Ugd2l0aCBsZXNzIHRoYW4gaGlnaCBzY2hvb2wuCgpXaGlsZSB0aG9zZSBoaWdoIHNjaG9vbCBncmFkcyBhbmQgbW9yZSB0aGFuIGhpZ2ggc2Nob29sIGdyYWQgYXJlIGxlc3MgbGlrZWx5IHRvIHJlcG9ydCBmYWlyL3Bvb3IgaGVhbHRoIHZlcnN1cyB2ZXJ5Z29vZC8gZXhjZWxsZW50IGhlYWx0aCwgY29tcGFyZWQgdG8gdGhvc2Ugd2l0aCBsZXNzIHRoYW4gaGlnaCBzY2hvb2wgZ3JhZAoKSW4gdGVybXMgb2YgZ2VuZGVyLCBmZW1hbGVzIGFyZSBtb3JlIGxpa2VseSB0byByZXBvcnQgZ29vZCwgY29tcGFyZWQgdG8gZXhjZWxsZW50L3ZnIGhlYWx0aCwgY29tcGFyZWQgdG8gbWFsZXMuCgpXaGlsZSBmZW1hbGVzIGFyZSBsZXNzIGxpa2VseSB0byByZXBvcnQgZmFpci9wb29yIHZlcnN1cyB2ZXJ5Z29vZC9leGNlbGxlbnQgaGVhbHRoIGNvbXBhcmVkIHRvIG1hbGVzCgpJbiB0ZXJtcyBvZiBoZWFsdGggaW5zdXJhbmNlIGNvdmVyYWdlLCB0aG9zZSB3aG8gaGF2ZSBoZWFsdGggaW5zdXJhbmNlIGNvdmVyYWdlIGFyZSBsZXNzIGxpa2VseSB0byByZXBvcnQgZ29vZCwgY29tcGFyZWQgdG8gZXhjZWxsZW50L3ZnIGhlYWx0aCwgY29tcGFyZWQgdG8gdGhvc2Ugd2l0aG91dCBoZWFsdGggaW5zdXJhbmNlIGNvdmVyYWdlLiBBbHNvIHRob3NlIHdpdGggaGVhbHRoIGluc3VyYW5jZSBjb3ZlcmFnZSBhcmUgbGVzcyBsaWtlbHkgdG8gcmVwb3J0IGZhaXIvcG9vciBoZWFsdGggdmVyc3VzIHZlcnlnb29kLyBleGNlbGxlbnQgaGVhbHRoLCBjb21wYXJlZCB0byB0aG9zZSB3aXRob3V0IGhlYWx0aCBpbnN1cmFuY2UKCgoK