Q22. Do you do any of the following when you have influenza symptoms?
# subset question data, rename columns, gather into single column
q22_df <- df %>%
select(CaseID, PPGENDER, PPAGE, ppagecat, ppagect4, PPETHM, PPINCIMP, PPEDUC, PPEDUCAT,
work, PPWORK, marital, PPMARIT, PPMSACAT, ppreg9, PPSTATEN, PPHOUSE, PPRENT, PPNET, Q22_1:Q22_9, weight) %>%
rename("Q22_1_Go.to.a.doctor_s.office.or.medical.clinic" = Q22_1,
"Q22_2_Decide.on.treatment.without.consulting.a.health.practitioner" = Q22_2,
"Q22_3_Search.the.internet.for.a.treatment" = Q22_3,
"Q22_4_Get.adequate.sleep" = Q22_4,
"Q22_5_Eat.nutritious.food" = Q22_5,
"Q22_6_Take-over-counter.medication.for.symptoms" = Q22_6,
"Q22_7_Take.an.antiviral.medicine" = Q22_7,
"Q22_8_Take.no.action.to.treat.the.illness" = Q22_8,
"Q22_9_Other" = Q22_9) %>%
gather(Q22_q, Q22_r, Q22_1_Go.to.a.doctor_s.office.or.medical.clinic:Q22_8_Take.no.action.to.treat.the.illness,
na.rm = T) %>%
mutate(Q22_q = as.factor(Q22_q))%>%
mutate(Q22_r = factor(Q22_r, levels = c("Always", "Sometimes", "Never")))
# survey design
options(digits = 4)
options(survey.lonely.psu = "adjust")
des22 <- svydesign(ids = ~1, weights = ~weight, data = q22_df[is.na(q22_df$weight)==F, ])
# weighted data frame
q22 <- data.frame(svytable(~Q22_q + Q22_r + PPGENDER + ppagecat + ppagect4 + PPETHM + PPINCIMP, des22, round = T))
# plot templates
title <- ggtitle("Do you do any of the following when you have influenza symptoms?")
# descending order
## main plot
p <- ggplot(q22, aes(Q22_q, weight = Freq)) + ptext
p + geom_bar(position = "fill") + aes(fill = Q22_r) + title + coord_flip()

Gender
# p2
p2 <- ggplot(q22, aes(Q22_q, weight = Freq)) + ptext
# gender
p2 + geom_bar(position = "fill") + aes(Q22_q, fill = PPGENDER) + facet_wrap(~Q22_r) + ggtitle("By gender") + coord_flip()

p2 + geom_bar(position = "dodge") + aes(Q22_q, fill = PPGENDER) + facet_wrap(~Q22_r) + ggtitle("By gender") + coord_flip()

p2 + geom_bar(position = "fill") + aes(PPGENDER, fill = Q22_r) + facet_wrap(~Q22_q) + coord_flip()

Age group
# by age group
p2 + geom_bar(position = "fill") + aes(Q22_q, fill = ppagect4) + facet_wrap(~Q22_r) + ggtitle("By age group") + coord_flip()

p2 + geom_bar(position = "fill") + aes(Q22_q, fill = ppagect4) + facet_grid(Q22_r ~ .) + coord_flip()

p2 + geom_bar(position = "fill") + aes(ppagecat, fill = Q22_r) + facet_wrap(~Q22_q)

Ethnicity
# by ethnic group
p2 + geom_bar(position = "fill") + aes(Q22_q, fill = PPETHM) + facet_wrap(~Q22_r) + ggtitle("By ethnic group") + coord_flip()

p2 + geom_bar(position = "fill") + aes(Q22_q, fill = PPETHM) + facet_grid(Q22_r ~ .) + coord_flip()

p2 + geom_bar(position = "fill") + aes(PPETHM, fill = Q22_r) + facet_wrap(~Q22_q)

Income
# by income group
p2 + geom_bar(position = "fill") + aes(Q22_q, fill = PPINCIMP) + facet_wrap(~Q22_r) + ggtitle("By income group") + coord_flip() + ptext3

p2 + geom_bar(position = "fill") + aes(Q22_q, fill = PPINCIMP) + facet_grid(Q22_r ~ .) + coord_flip() + ptext3

p2 + geom_bar(position = "fill") + aes(PPINCIMP, fill = Q22_r) + facet_wrap(~Q22_q) + ptext2

# update weighted data frame
q22.2 <- data.frame(svytable(~Q22_q + Q22_r + PPEDUC + PPEDUCAT + work + PPWORK + marital + PPMARIT, des22, round = T))
# restate plots
p3 <- ggplot(q22.2, aes(Q22_q, weight = Freq)) + ptext
# descending order of labels
#plabel <- scale_x_discrete(limits = rev(levels()))
Education
# by education
p3 + geom_bar(position = "fill") + aes(Q22_q, fill = PPEDUCAT) + facet_wrap(~Q22_r) + ggtitle("By education") + coord_flip()

p3 + geom_bar(position = "fill") + aes(Q22_q, fill = PPEDUCAT) + facet_grid(Q22_r ~ .) + coord_flip() #+ ptext3

p3 + geom_bar(position = "fill") + aes(PPEDUCAT, fill = Q22_r) + facet_wrap(~Q22_q) + ptext2 + ggtitle("By education")

Q23. Which of the following actions do you take when you have influenza symptoms to avoid someone else from getting sick?
# subset question data, rename columns, gather into single column
q23_df <- df %>%
select(CaseID, PPGENDER, PPAGE, ppagecat, ppagect4, PPETHM, PPINCIMP, PPEDUC, PPEDUCAT,
work, PPWORK, marital, PPMARIT, PPMSACAT, ppreg9, PPSTATEN, PPHOUSE, PPRENT, PPNET, Q23_1:Q23_11, weight) %>%
rename("Q23_1_Stand.away.from.people" = Q23_1,
"Q23_2_Avoid.public.places" = Q23_2,
"Q23_3_Avoid.public.transportation" = Q23_3,
"Q23_4_Stay.at.home" = Q23_4,
"Q23_5_Wash.my.hands.with.soap.more.often" = Q23_5,
"Q23_6_Use.hand.sanitizers" = Q23_6,
"Q23_7_Clean.the.surfaces.in.my.home" = Q23_7,
"Q23_8_Clean.the.surfaces.I.use.at.work" = Q23_8,
"Q23_9_Cover.my.nose.and.mouth.with.a.surgical.mask" = Q23_9,
"Q23_10_Cover.my.nose.and.mouth.when.I.sneeze.or.cough" = Q23_10,
"Q23_11_Other" = Q23_11) %>%
gather(Q23_q, Q23_r, Q23_1_Stand.away.from.people:Q23_10_Cover.my.nose.and.mouth.when.I.sneeze.or.cough, na.rm = T) %>%
mutate(Q23_q = as.factor(Q23_q)) %>%
mutate(Q23_r = factor(Q23_r, levels = c("Always", "Sometimes", "Never")))
# survey design
options(digits = 4)
options(survey.lonely.psu = "adjust")
des23 <- svydesign(ids = ~1, weights = ~weight, data = q23_df[is.na(q23_df$weight)==F, ])
# weighted data frame
q23 <- data.frame(svytable(~Q23_q + Q23_r + PPGENDER + ppagecat + ppagect4 + PPETHM + PPINCIMP, des23, round = T))
# plot templates
title <- ggtitle("Which of the following actions do you take when you have influenza symptoms \nto avoid someone else from getting sick?")
# descending order
## main plot
p <- ggplot(q23, aes(Q23_q, weight = Freq)) + ptext
p + geom_bar(position = 'fill') + aes(fill = Q23_r) + title + coord_flip()

Gender
# p2
p2 <- ggplot(q23, aes(Q23_q, weight = Freq)) + ptext
# by gender
p2 + geom_bar(position = "fill") + aes(Q23_q, fill = PPGENDER) + facet_wrap(~Q23_r) + ggtitle("By gender") + coord_flip()

p2 + geom_bar(position = "dodge") + aes(Q23_q, fill = PPGENDER) + facet_wrap(~Q23_r) + ggtitle("By gender") + coord_flip()

p2 + geom_bar(position = "fill") + aes(PPGENDER, fill = Q23_r) + facet_wrap(~Q23_q) + coord_flip()

Age
# by age group
p2 + geom_bar(position = "fill") + aes(Q23_q, fill = ppagect4) + facet_wrap(~Q23_r) + ggtitle("By age group") + coord_flip()

p2 + geom_bar(position = "fill") + aes(Q23_q, fill = ppagect4) + facet_grid(Q23_r ~ .) + coord_flip()

p2 + geom_bar(position = "fill") + aes(ppagecat, fill = Q23_r) + facet_wrap(~Q23_q)

Ethnicity
# by ethnic group
p2 + geom_bar(position = "fill") + aes(Q23_q, fill = PPETHM) + facet_wrap(~Q23_r) + ggtitle("By ethnic group") + coord_flip()

p2 + geom_bar(position = "fill") + aes(Q23_q, fill = PPETHM) + facet_grid(Q23_r ~ .) + coord_flip()

p2 + geom_bar(position = "fill") + aes(PPETHM, fill = Q23_r) + facet_wrap(~Q23_q)

Income
# by income
p2 + geom_bar(position = "fill") + aes(Q23_q, fill = PPINCIMP) + facet_wrap(~Q23_r) + ggtitle("By income group") + coord_flip() + ptext3

p2 + geom_bar(position = "fill") + aes(Q23_q, fill = PPINCIMP) + facet_grid(Q23_r ~ .) + coord_flip() + ptext3

p2 + geom_bar(position = "fill") + aes(PPINCIMP, fill = Q23_r) + facet_wrap(~Q23_q) + ptext2

# update weighted data frame
q23.2 <- data.frame(svytable(~Q23_q + Q23_r + PPEDUC + PPEDUCAT + work + PPWORK + marital + PPMARIT, des23, round = T))
# restate plots
p3 <- ggplot(q23.2, aes(Q23_q, weight = Freq)) + ptext
# descending order of labels
#plabel <- scale_x_discrete(limits = rev(levels()))
Education
# by education
p3 + geom_bar(position = "fill") + aes(Q23_q, fill = PPEDUCAT) + facet_wrap(~Q23_r) + ggtitle("By education") + coord_flip()

p3 + geom_bar(position = "fill") + aes(Q23_q, fill = PPEDUCAT) + facet_grid(Q23_r ~ .) + coord_flip() #+ ptext3

p3 + geom_bar(position = "fill") + aes(PPEDUCAT, fill = Q23_r) + facet_wrap(~Q23_q) + ptext2 + ggtitle("By education")

LS0tCnRpdGxlOiAnUTIyLTIzJwpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogCiAgICB0aGVtZTogcGFwZXIKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDIKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IHBhcGVyCiAgICBrZWVwX21kOiB5ZXMKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDIKLS0tCgpRdWVzdGlvbnMgMjIsIDIzCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GfQojIyBTZXR1cC4Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBULCBjYWNoZSA9IFQsIGNhY2hlLmNvbW1lbnRzID0gRiwgd2FybmluZyA9IEYsIG1lc3NhZ2UgPSBGLCBzaXplID0gInNtYWxsIikKcm0obGlzdCA9IGxzKGFsbC5uYW1lcyA9IFQpKQpsaWJyYXJ5KHJtYXJrZG93bik7IGxpYnJhcnkoa25pdHIpOyBsaWJyYXJ5KGdyaWRFeHRyYSkKbGlicmFyeSh0aWR5cik7IGxpYnJhcnkoZHBseXIpOyBsaWJyYXJ5KGdncGxvdDIpOyBsaWJyYXJ5KHN1cnZleSkKYGBgCgpgYGB7ciBsb2FkLWRhdGEsIGluY2x1ZGU9Rn0KIyMgTG9hZCBkYXRhLgpsb2FkKCJ+L2dpdC9mbHUtc3VydmV5L2RhdGEvY2xlYW5pbmcyLlJEYXRhIikKbG9hZCgifi9naXQvZmx1LXN1cnZleS9kYXRhL3JlY29kaW5nLlJEYXRhIikgICMgbG9hZCAiZGF0YXIiCmRmIDwtIGRhdGFyICAjIHJlY29kZWQgdmFyaWFibGVzCmBgYAoKYGBge3IgZ3JvdXAtZGF0YSwgaW5jbHVkZT1GfQojIyBSZWdyb3VwIHZhcmlhYmxlcy4KIyBpbmNvbWUKaW5jb21lLm1hcCA8LSBjKHJlcCgidW5kZXIgJDEwayIsIDMpLCByZXAoIiQxMGsgdG8gJDI1ayIsIDQpLAogICAgICAgICAgICAgICAgcmVwKCIkMjVrIHRvICQ1MGsiLCA0KSwgcmVwKCIkNTBrIHRvICQ3NWsiLCAyKSwKICAgICAgICAgICAgICAgIHJlcCgiJDc1ayB0byAkMTAwayIsIDIpLCByZXAoIiQxMDBrIHRvICQxNTBrIiwgMiksCiAgICAgICAgICAgICAgICByZXAoIm92ZXIgJDE1MGsiLCAyKSkKZGYkaW5jb21lIDwtIGNvZGUoZGF0YXIkUFBJTkNJTVAsIGluY29tZS5tYXAsICJ1bmRlciAkMTBrIikKaW5jb21lLmxhYiA8LSBjKCJ1bmRlciAkMTBrIiwgIiQxMGsgdG8gJDI1ayIsICIkMjVrIHRvICQ1MGsiLAogICAgICAgICAgICAgICAgIiQ1MGsgdG8gJDc1ayIsICIkNzVrIHRvICQxMDBrIiwgIiQxMDBrIHRvICQxNTBrIiwKICAgICAgICAgICAgICAgICJvdmVyICQxNTBrIikKZGYkaW5jb21lIDwtIGZhY3RvcihkZiRpbmNvbWUsIGxldmVscyA9IGluY29tZS5sYWIpCgojIG1hcml0YWwgc3RhdXMKbWFyaXRhbC5tYXAgPC0gYygic2luZ2xlIiwgInBhcnRuZXJlZCIsICJwYXJ0bmVyZWQiLCAic2luZ2xlIiwgInNpbmdsZSIsICJzaW5nbGUiKQpkZiRtYXJpdGFsIDwtIGNvZGUoZGF0YWYkUFBNQVJJVCwgbWFyaXRhbC5tYXAsICJzaW5nbGUiKQoKIyB3b3JrIHN0YXR1cwp3b3JrLm1hcCA8LSBjKHJlcCgidW5lbXBsb3llZCIsIDUpLAogICAgICAgICAgICAgIHJlcCgiZW1wbG95ZWQiLCAyKSkKZGYkd29yayA8LSBjb2RlKGRhdGFmJFBQV09SSywgd29yay5tYXAsICJ1bmVtcGxveWVkIikKYGBgCgpgYGB7ciBkZXMtc3VydmV5fQojIyBDcmVhdGUgc3VydmV5IG9iamVjdC4Kb3B0aW9ucyhkaWdpdHMgPSA0KQpvcHRpb25zKHN1cnZleS5sb25lbHkucHN1ID0gImFkanVzdCIpCgpkZXMgPC0gc3Z5ZGVzaWduKGlkcyA9IH4xLCB3ZWlnaHRzID0gfndlaWdodCwgZGF0YSA9IGRmW2lzLm5hKGRmJHdlaWdodCk9PUYsIF0pCmBgYAoKYGBge3IgcGxvdC10ZW1wLCBpbmNsdWRlPUZ9CiMjIENyZWF0ZSBnZ3Bsb3QgdGVtcGxhdGVzLgojIHNtYWxsZXIgdGV4dApwdGV4dCA8LSB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgwLjgpKSwKICAgICAgICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwKICAgICAgICAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMC44KSksCiAgICAgICAgICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMC44KSkpCiMgcmVtb3ZlIHgtYXhpcyBsYWJlbHMKcHRleHQyIDwtIHB0ZXh0ICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpCiMgcmVtb3ZlIGxlZ2VuZApwdGV4dDMgPC0gZ3VpZGVzKGZpbGwgPSBGQUxTRSkKYGBgCgoKIyMgUTIyLiBEbyB5b3UgZG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgd2hlbiB5b3UgaGF2ZSBpbmZsdWVuemEgc3ltcHRvbXM/CgoKYGBge3IgcTIyLWRhdGF9CiMgc3Vic2V0IHF1ZXN0aW9uIGRhdGEsIHJlbmFtZSBjb2x1bW5zLCBnYXRoZXIgaW50byBzaW5nbGUgY29sdW1uCnEyMl9kZiA8LSBkZiAlPiUKICBzZWxlY3QoQ2FzZUlELCBQUEdFTkRFUiwgUFBBR0UsIHBwYWdlY2F0LCBwcGFnZWN0NCwgUFBFVEhNLCBQUElOQ0lNUCwgUFBFRFVDLCBQUEVEVUNBVCwKICAgICAgICAgd29yaywgUFBXT1JLLCBtYXJpdGFsLCBQUE1BUklULCBQUE1TQUNBVCwgcHByZWc5LCBQUFNUQVRFTiwgUFBIT1VTRSwgUFBSRU5ULCBQUE5FVCwgUTIyXzE6UTIyXzksIHdlaWdodCkgJT4lCiAgcmVuYW1lKCJRMjJfMV9Hby50by5hLmRvY3Rvcl9zLm9mZmljZS5vci5tZWRpY2FsLmNsaW5pYyIgPSBRMjJfMSwKICAgICAgICAgIlEyMl8yX0RlY2lkZS5vbi50cmVhdG1lbnQud2l0aG91dC5jb25zdWx0aW5nLmEuaGVhbHRoLnByYWN0aXRpb25lciIgPSBRMjJfMiwKICAgICAgICAgIlEyMl8zX1NlYXJjaC50aGUuaW50ZXJuZXQuZm9yLmEudHJlYXRtZW50IiA9IFEyMl8zLAogICAgICAgICAiUTIyXzRfR2V0LmFkZXF1YXRlLnNsZWVwIiA9IFEyMl80LAogICAgICAgICAiUTIyXzVfRWF0Lm51dHJpdGlvdXMuZm9vZCIgPSBRMjJfNSwKICAgICAgICAgIlEyMl82X1Rha2Utb3Zlci1jb3VudGVyLm1lZGljYXRpb24uZm9yLnN5bXB0b21zIiA9IFEyMl82LAogICAgICAgICAiUTIyXzdfVGFrZS5hbi5hbnRpdmlyYWwubWVkaWNpbmUiID0gUTIyXzcsCiAgICAgICAgICJRMjJfOF9UYWtlLm5vLmFjdGlvbi50by50cmVhdC50aGUuaWxsbmVzcyIgPSBRMjJfOCwKICAgICAgICAgIlEyMl85X090aGVyIiA9IFEyMl85KSAlPiUKICBnYXRoZXIoUTIyX3EsIFEyMl9yLCBRMjJfMV9Hby50by5hLmRvY3Rvcl9zLm9mZmljZS5vci5tZWRpY2FsLmNsaW5pYzpRMjJfOF9UYWtlLm5vLmFjdGlvbi50by50cmVhdC50aGUuaWxsbmVzcywKICAgICAgICAgbmEucm0gPSBUKSAlPiUKICBtdXRhdGUoUTIyX3EgPSBhcy5mYWN0b3IoUTIyX3EpKSU+JQogIG11dGF0ZShRMjJfciA9IGZhY3RvcihRMjJfciwgbGV2ZWxzID0gYygiQWx3YXlzIiwgIlNvbWV0aW1lcyIsICJOZXZlciIpKSkKCgojIHN1cnZleSBkZXNpZ24Kb3B0aW9ucyhkaWdpdHMgPSA0KQpvcHRpb25zKHN1cnZleS5sb25lbHkucHN1ID0gImFkanVzdCIpCmRlczIyIDwtIHN2eWRlc2lnbihpZHMgPSB+MSwgd2VpZ2h0cyA9IH53ZWlnaHQsIGRhdGEgPSBxMjJfZGZbaXMubmEocTIyX2RmJHdlaWdodCk9PUYsIF0pCmBgYAoKYGBge3IgcTIyLXBsb3QtMSwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KIyB3ZWlnaHRlZCBkYXRhIGZyYW1lCnEyMiA8LSBkYXRhLmZyYW1lKHN2eXRhYmxlKH5RMjJfcSArIFEyMl9yICsgUFBHRU5ERVIgKyBwcGFnZWNhdCArIHBwYWdlY3Q0ICsgUFBFVEhNICsgUFBJTkNJTVAsIGRlczIyLCByb3VuZCA9IFQpKQoKIyBwbG90IHRlbXBsYXRlcwp0aXRsZSA8LSBnZ3RpdGxlKCJEbyB5b3UgZG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgd2hlbiB5b3UgaGF2ZSBpbmZsdWVuemEgc3ltcHRvbXM/IikKIyBkZXNjZW5kaW5nIG9yZGVyCgoKIyMgbWFpbiBwbG90CnAgPC0gZ2dwbG90KHEyMiwgYWVzKFEyMl9xLCB3ZWlnaHQgPSBGcmVxKSkgKyBwdGV4dApwICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKGZpbGwgPSBRMjJfcikgKyB0aXRsZSArIGNvb3JkX2ZsaXAoKQpgYGAKCiMjIyBHZW5kZXIKYGBge3IgcTIyLXBsb3QtMWIsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTh9CiMgcDIKcDIgPC0gZ2dwbG90KHEyMiwgYWVzKFEyMl9xLCB3ZWlnaHQgPSBGcmVxKSkgKyBwdGV4dAoKIyBnZW5kZXIKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIyX3EsIGZpbGwgPSBQUEdFTkRFUikgKyBmYWNldF93cmFwKH5RMjJfcikgKyBnZ3RpdGxlKCJCeSBnZW5kZXIiKSArIGNvb3JkX2ZsaXAoKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImRvZGdlIikgKyBhZXMoUTIyX3EsIGZpbGwgPSBQUEdFTkRFUikgKyBmYWNldF93cmFwKH5RMjJfcikgKyBnZ3RpdGxlKCJCeSBnZW5kZXIiKSArIGNvb3JkX2ZsaXAoKQoKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUFBHRU5ERVIsIGZpbGwgPSBRMjJfcikgKyBmYWNldF93cmFwKH5RMjJfcSkgKyBjb29yZF9mbGlwKCkKYGBgCgojIyMgQWdlIGdyb3VwCmBgYHtyLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQojIGJ5IGFnZSBncm91cApwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMjJfcSwgZmlsbCA9IHBwYWdlY3Q0KSArIGZhY2V0X3dyYXAoflEyMl9yKSArIGdndGl0bGUoIkJ5IGFnZSBncm91cCIpICsgY29vcmRfZmxpcCgpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9CnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyMl9xLCBmaWxsID0gcHBhZ2VjdDQpICsgZmFjZXRfZ3JpZChRMjJfciB+IC4pICsgY29vcmRfZmxpcCgpCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKHBwYWdlY2F0LCBmaWxsID0gUTIyX3IpICsgZmFjZXRfd3JhcCh+UTIyX3EpIApgYGAKCiMjIyBFdGhuaWNpdHkKYGBge3IsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTh9CiMgYnkgZXRobmljIGdyb3VwCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyMl9xLCBmaWxsID0gUFBFVEhNKSArIGZhY2V0X3dyYXAoflEyMl9yKSArIGdndGl0bGUoIkJ5IGV0aG5pYyBncm91cCIpICsgY29vcmRfZmxpcCgpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9CnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyMl9xLCBmaWxsID0gUFBFVEhNKSArIGZhY2V0X2dyaWQoUTIyX3IgfiAuKSArIGNvb3JkX2ZsaXAoKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUEVUSE0sIGZpbGwgPSBRMjJfcikgKyBmYWNldF93cmFwKH5RMjJfcSkgCmBgYAoKIyMjIEluY29tZQpgYGB7ciwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KIyBieSBpbmNvbWUgZ3JvdXAKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIyX3EsIGZpbGwgPSBQUElOQ0lNUCkgKyBmYWNldF93cmFwKH5RMjJfcikgKyBnZ3RpdGxlKCJCeSBpbmNvbWUgZ3JvdXAiKSArIGNvb3JkX2ZsaXAoKSArIHB0ZXh0MwpgYGAKCmBgYHtyLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMjJfcSwgZmlsbCA9IFBQSU5DSU1QKSArIGZhY2V0X2dyaWQoUTIyX3IgfiAuKSArIGNvb3JkX2ZsaXAoKSArIHB0ZXh0MwoKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUFBJTkNJTVAsIGZpbGwgPSBRMjJfcikgKyBmYWNldF93cmFwKH5RMjJfcSkgKyBwdGV4dDIKYGBgCgpgYGB7ciBxMjItcGxvdC0yfQojIHVwZGF0ZSB3ZWlnaHRlZCBkYXRhIGZyYW1lCnEyMi4yIDwtIGRhdGEuZnJhbWUoc3Z5dGFibGUoflEyMl9xICsgUTIyX3IgKyBQUEVEVUMgKyBQUEVEVUNBVCArIHdvcmsgKyBQUFdPUksgKyBtYXJpdGFsICsgUFBNQVJJVCwgZGVzMjIsIHJvdW5kID0gVCkpCgojIHJlc3RhdGUgcGxvdHMKcDMgPC0gZ2dwbG90KHEyMi4yLCBhZXMoUTIyX3EsIHdlaWdodCA9IEZyZXEpKSArIHB0ZXh0CgojIGRlc2NlbmRpbmcgb3JkZXIgb2YgbGFiZWxzCiNwbGFiZWwgPC0gc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSByZXYobGV2ZWxzKCkpKQpgYGAKCiMjIyBFZHVjYXRpb24KYGBge3IgcTIyLXBsb3QtMmIsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTh9CiMgYnkgZWR1Y2F0aW9uCnAzICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyMl9xLCBmaWxsID0gUFBFRFVDQVQpICsgZmFjZXRfd3JhcCh+UTIyX3IpICsgZ2d0aXRsZSgiQnkgZWR1Y2F0aW9uIikgKyBjb29yZF9mbGlwKCkKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0KcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIyX3EsIGZpbGwgPSBQUEVEVUNBVCkgKyBmYWNldF9ncmlkKFEyMl9yIH4gLikgKyBjb29yZF9mbGlwKCkgIysgcHRleHQzCgpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUEVEVUNBVCwgZmlsbCA9IFEyMl9yKSArIGZhY2V0X3dyYXAoflEyMl9xKSArIHB0ZXh0MiArIGdndGl0bGUoIkJ5IGVkdWNhdGlvbiIpCmBgYAoKCgojIyBRMjMuIFdoaWNoIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBkbyB5b3UgdGFrZSB3aGVuIHlvdSBoYXZlIGluZmx1ZW56YSBzeW1wdG9tcyB0byBhdm9pZCBzb21lb25lIGVsc2UgZnJvbSBnZXR0aW5nIHNpY2s/CgoKYGBge3IgcTIzLWRhdGF9CiMgc3Vic2V0IHF1ZXN0aW9uIGRhdGEsIHJlbmFtZSBjb2x1bW5zLCBnYXRoZXIgaW50byBzaW5nbGUgY29sdW1uCnEyM19kZiA8LSBkZiAlPiUKICBzZWxlY3QoQ2FzZUlELCBQUEdFTkRFUiwgUFBBR0UsIHBwYWdlY2F0LCBwcGFnZWN0NCwgUFBFVEhNLCBQUElOQ0lNUCwgUFBFRFVDLCBQUEVEVUNBVCwKICAgICAgICAgd29yaywgUFBXT1JLLCBtYXJpdGFsLCBQUE1BUklULCBQUE1TQUNBVCwgcHByZWc5LCBQUFNUQVRFTiwgUFBIT1VTRSwgUFBSRU5ULCBQUE5FVCwgUTIzXzE6UTIzXzExLCB3ZWlnaHQpICU+JQogIHJlbmFtZSgiUTIzXzFfU3RhbmQuYXdheS5mcm9tLnBlb3BsZSIgPSBRMjNfMSwKICAgICAgICAgIlEyM18yX0F2b2lkLnB1YmxpYy5wbGFjZXMiID0gUTIzXzIsCiAgICAgICAgICJRMjNfM19Bdm9pZC5wdWJsaWMudHJhbnNwb3J0YXRpb24iID0gUTIzXzMsCiAgICAgICAgICJRMjNfNF9TdGF5LmF0LmhvbWUiID0gUTIzXzQsCiAgICAgICAgICJRMjNfNV9XYXNoLm15LmhhbmRzLndpdGguc29hcC5tb3JlLm9mdGVuIiA9IFEyM181LAogICAgICAgICAiUTIzXzZfVXNlLmhhbmQuc2FuaXRpemVycyIgPSBRMjNfNiwKICAgICAgICAgIlEyM183X0NsZWFuLnRoZS5zdXJmYWNlcy5pbi5teS5ob21lIiA9IFEyM183LAogICAgICAgICAiUTIzXzhfQ2xlYW4udGhlLnN1cmZhY2VzLkkudXNlLmF0LndvcmsiID0gUTIzXzgsCiAgICAgICAgICJRMjNfOV9Db3Zlci5teS5ub3NlLmFuZC5tb3V0aC53aXRoLmEuc3VyZ2ljYWwubWFzayIgPSBRMjNfOSwKICAgICAgICAgIlEyM18xMF9Db3Zlci5teS5ub3NlLmFuZC5tb3V0aC53aGVuLkkuc25lZXplLm9yLmNvdWdoIiA9IFEyM18xMCwKICAgICAgICAgIlEyM18xMV9PdGhlciIgPSBRMjNfMTEpICU+JSAgCiAgZ2F0aGVyKFEyM19xLCBRMjNfciwgUTIzXzFfU3RhbmQuYXdheS5mcm9tLnBlb3BsZTpRMjNfMTBfQ292ZXIubXkubm9zZS5hbmQubW91dGgud2hlbi5JLnNuZWV6ZS5vci5jb3VnaCwgbmEucm0gPSBUKSAlPiUKICBtdXRhdGUoUTIzX3EgPSBhcy5mYWN0b3IoUTIzX3EpKSAlPiUKICBtdXRhdGUoUTIzX3IgPSBmYWN0b3IoUTIzX3IsIGxldmVscyA9IGMoIkFsd2F5cyIsICJTb21ldGltZXMiLCAiTmV2ZXIiKSkpCgoKIyBzdXJ2ZXkgZGVzaWduCm9wdGlvbnMoZGlnaXRzID0gNCkKb3B0aW9ucyhzdXJ2ZXkubG9uZWx5LnBzdSA9ICJhZGp1c3QiKQpkZXMyMyA8LSBzdnlkZXNpZ24oaWRzID0gfjEsIHdlaWdodHMgPSB+d2VpZ2h0LCBkYXRhID0gcTIzX2RmW2lzLm5hKHEyM19kZiR3ZWlnaHQpPT1GLCBdKQpgYGAKCgpgYGB7ciBxMjMtcGxvdC0xLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQojIHdlaWdodGVkIGRhdGEgZnJhbWUKcTIzIDwtIGRhdGEuZnJhbWUoc3Z5dGFibGUoflEyM19xICsgUTIzX3IgKyBQUEdFTkRFUiArIHBwYWdlY2F0ICsgcHBhZ2VjdDQgKyBQUEVUSE0gKyBQUElOQ0lNUCwgZGVzMjMsIHJvdW5kID0gVCkpCgojIHBsb3QgdGVtcGxhdGVzCnRpdGxlIDwtIGdndGl0bGUoIldoaWNoIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBkbyB5b3UgdGFrZSB3aGVuIHlvdSBoYXZlIGluZmx1ZW56YSBzeW1wdG9tcyBcbnRvIGF2b2lkIHNvbWVvbmUgZWxzZSBmcm9tIGdldHRpbmcgc2ljaz8iKQojIGRlc2NlbmRpbmcgb3JkZXIKCiMjIG1haW4gcGxvdApwIDwtIGdncGxvdChxMjMsIGFlcyhRMjNfcSwgd2VpZ2h0ID0gRnJlcSkpICsgcHRleHQKcCArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2ZpbGwnKSArIGFlcyhmaWxsID0gUTIzX3IpICsgdGl0bGUgKyBjb29yZF9mbGlwKCkKYGBgCgojIyMgR2VuZGVyCmBgYHtyIHEyMy1wbG90LTFiLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQojIHAyCnAyIDwtIGdncGxvdChxMjMsIGFlcyhRMjNfcSwgd2VpZ2h0ID0gRnJlcSkpICsgcHRleHQKCiMgYnkgZ2VuZGVyCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyM19xLCBmaWxsID0gUFBHRU5ERVIpICsgZmFjZXRfd3JhcCh+UTIzX3IpICsgZ2d0aXRsZSgiQnkgZ2VuZGVyIikgKyBjb29yZF9mbGlwKCkKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJkb2RnZSIpICsgYWVzKFEyM19xLCBmaWxsID0gUFBHRU5ERVIpICsgZmFjZXRfd3JhcCh+UTIzX3IpICsgZ2d0aXRsZSgiQnkgZ2VuZGVyIikgKyBjb29yZF9mbGlwKCkKCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQR0VOREVSLCBmaWxsID0gUTIzX3IpICsgZmFjZXRfd3JhcCh+UTIzX3EpICsgY29vcmRfZmxpcCgpCmBgYAoKIyMjIEFnZQpgYGB7ciwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KIyBieSBhZ2UgZ3JvdXAKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIzX3EsIGZpbGwgPSBwcGFnZWN0NCkgKyBmYWNldF93cmFwKH5RMjNfcikgKyBnZ3RpdGxlKCJCeSBhZ2UgZ3JvdXAiKSArIGNvb3JkX2ZsaXAoKQpgYGAKCmBgYHtyLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMjNfcSwgZmlsbCA9IHBwYWdlY3Q0KSArIGZhY2V0X2dyaWQoUTIzX3IgfiAuKSArIGNvb3JkX2ZsaXAoKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhwcGFnZWNhdCwgZmlsbCA9IFEyM19yKSArIGZhY2V0X3dyYXAoflEyM19xKSAKYGBgCgoKIyMjIEV0aG5pY2l0eQpgYGB7ciwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KIyBieSBldGhuaWMgZ3JvdXAKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIzX3EsIGZpbGwgPSBQUEVUSE0pICsgZmFjZXRfd3JhcCh+UTIzX3IpICsgZ2d0aXRsZSgiQnkgZXRobmljIGdyb3VwIikgKyBjb29yZF9mbGlwKCkKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0KcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIzX3EsIGZpbGwgPSBQUEVUSE0pICsgZmFjZXRfZ3JpZChRMjNfciB+IC4pICsgY29vcmRfZmxpcCgpCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQRVRITSwgZmlsbCA9IFEyM19yKSArIGZhY2V0X3dyYXAoflEyM19xKSAKYGBgCgoKCiMjIyBJbmNvbWUKYGBge3IsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTh9CiMgYnkgaW5jb21lCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyM19xLCBmaWxsID0gUFBJTkNJTVApICsgZmFjZXRfd3JhcCh+UTIzX3IpICsgZ2d0aXRsZSgiQnkgaW5jb21lIGdyb3VwIikgKyBjb29yZF9mbGlwKCkgKyBwdGV4dDMKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0KcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTIzX3EsIGZpbGwgPSBQUElOQ0lNUCkgKyBmYWNldF9ncmlkKFEyM19yIH4gLikgKyBjb29yZF9mbGlwKCkgKyBwdGV4dDMKCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQSU5DSU1QLCBmaWxsID0gUTIzX3IpICsgZmFjZXRfd3JhcCh+UTIzX3EpICsgcHRleHQyCmBgYAoKCiMjIwoKYGBge3IgcTIzLXBsb3QtMn0KIyB1cGRhdGUgd2VpZ2h0ZWQgZGF0YSBmcmFtZQpxMjMuMiA8LSBkYXRhLmZyYW1lKHN2eXRhYmxlKH5RMjNfcSArIFEyM19yICsgUFBFRFVDICsgUFBFRFVDQVQgKyB3b3JrICsgUFBXT1JLICsgbWFyaXRhbCArIFBQTUFSSVQsIGRlczIzLCByb3VuZCA9IFQpKQoKIyByZXN0YXRlIHBsb3RzCnAzIDwtIGdncGxvdChxMjMuMiwgYWVzKFEyM19xLCB3ZWlnaHQgPSBGcmVxKSkgKyBwdGV4dAoKIyBkZXNjZW5kaW5nIG9yZGVyIG9mIGxhYmVscwojcGxhYmVsIDwtIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gcmV2KGxldmVscygpKSkKYGBgCgojIyMgRWR1Y2F0aW9uCmBgYHtyIHEyMy1wbG90LTJiLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQojIGJ5IGVkdWNhdGlvbgpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMjNfcSwgZmlsbCA9IFBQRURVQ0FUKSArIGZhY2V0X3dyYXAoflEyM19yKSArIGdndGl0bGUoIkJ5IGVkdWNhdGlvbiIpICsgY29vcmRfZmxpcCgpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9CnAzICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFEyM19xLCBmaWxsID0gUFBFRFVDQVQpICsgZmFjZXRfZ3JpZChRMjNfciB+IC4pICsgY29vcmRfZmxpcCgpICMrIHB0ZXh0MwoKcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUFBFRFVDQVQsIGZpbGwgPSBRMjNfcikgKyBmYWNldF93cmFwKH5RMjNfcSkgKyBwdGV4dDIgKyBnZ3RpdGxlKCJCeSBlZHVjYXRpb24iKQpgYGAKCg==