Data Visualization Exercise
TidyTuesday week9/2021 Employment and Earnings, data from BLS
# load libaries
library(tidyverse)
library(ggtext)
# import data
employed <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-02-23/employed.csv')
── Column specification ─────────────────────────────────────────────────────────────────────────────────────────────────
cols(
industry = col_character(),
major_occupation = col_character(),
minor_occupation = col_character(),
race_gender = col_character(),
industry_total = col_double(),
employ_n = col_double(),
year = col_double()
)
earn <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-02-23/earn.csv')
── Column specification ─────────────────────────────────────────────────────────────────────────────────────────────────
cols(
sex = col_character(),
race = col_character(),
ethnic_origin = col_character(),
age = col_character(),
year = col_double(),
quarter = col_double(),
n_persons = col_double(),
median_weekly_earn = col_double()
)
# plot 1
p1 = earn %>%
group_by(year, sex) %>%
filter(sex!="Both Sexes") %>%
summarise(med = median(median_weekly_earn)) %>%
ggplot(aes(x=year, y=med)) +
geom_line(aes(group=year), color="#3d405b", size=0.7) +
geom_point(aes(color=sex), size=8, show.legend=FALSE) +
geom_text(aes(label=paste0("$",round(med))), size=2.2, color="white") +
scale_color_manual(values=c("#668586","#9E8FB2")) +
scale_x_continuous(breaks=(seq(2010,2020,1))) +
theme_minimal() +
theme(plot.title = ggtext::element_markdown(size=17, face="bold"),
axis.title.y=element_markdown(size=10),
axis.title.x=element_markdown(size=10),
plot.caption=element_markdown(),
panel.grid.minor.x=element_blank()) +
labs(x="__Year__",
y="__Median Weekly Earn__ (current dollars)",
title= "Median Weekly Earn of <span style = 'color:#668586'><b>Men</b></span> and <span style = 'color:#9E8FB2'><b>Women</b></span> in the U.S.",
caption="TidyTuesday Week 9 | Data from _BLS_"
)
p1

e1 = employed %>%
filter(year=="2020") %>% filter(race_gender=="Women"|race_gender=="Men") %>%
filter(!is.na(employ_n)) %>%
group_by(industry, race_gender) %>%
summarise(industry_total=max(industry_total)) %>%
pivot_wider(names_from=race_gender, values_from=industry_total) %>%
mutate(pct = Women/(Men+Women)) %>%
arrange(desc(pct))
e1 %>%
ggplot(aes(y=reorder(industry,pct), x=pct)) +
geom_point() +
#geom_segment(aes(x=0, xend=pct, y=industry, yend=industry)) +
geom_label(aes(label=paste(industry, round(pct*100,1),"%")), size=2) +
scale_y_discrete(labels=function(x) str_wrap(x,25)) +
scale_x_continuous(labels=scales::percent, limits=c(0,1),breaks=seq(0,1,0.2),expand=c(0,0)) +
theme_light() +
theme(axis.text.y = element_blank(),
axis.ticks.y=element_blank(),
plot.title=element_markdown(size=16,face="bold")) +
labs(x="Percent", y="Industry",
title="Percentage of <span style = 'color:#0091ad'><b>Women</b></span> Employed in the U.S., by Industry in 2020",
caption="TidyTuesday Week 9 | Data from BLS")

e2 = employed %>%
filter(year=="2020") %>% filter(race_gender=="Women"|race_gender=="Men") %>%
filter(!is.na(employ_n)) %>%
group_by(industry, race_gender) %>%
summarise(industry_total=max(industry_total/1000))
`summarise()` has grouped output by 'industry'. You can override using the `.groups` argument.
e2
p3 = e2 %>%
ggplot(aes(y=reorder(industry, industry_total), x=industry_total)) +
geom_line(aes(group=industry), color="#778da9") +
geom_point(aes(color = race_gender)) +
scale_y_discrete(labels=function(x) str_wrap(x,25)) +
scale_color_manual(values=c("#A23E48","#FF8C42")) +
theme_light() +
theme(legend.position="none",
plot.title = ggtext::element_markdown(size=16, face="bold"),
axis.title.y=element_markdown(size=10),
axis.title.x=element_markdown(size=10),
plot.caption=element_markdown(),
) +
labs(x="__Employed Number__ (in thousands)", y="__Industry__",
caption="TidyTuesday Week 9 | Data from BLS",
title="Employed <span style = 'color:#A23E48'><b>Men</b></span> and <span style = 'color:#FF8C42'><b>Women</b></span> in the U.S., by Industry in 2020")
p3

# women in major occupation
p4_data = employed %>%
filter(year=="2020") %>%
filter(race_gender=="Women"|race_gender=="Men") %>%
filter(!is.na(employ_n))%>%
group_by(major_occupation, race_gender) %>%
summarise(employ_n = sum(employ_n))
p4 = ggplot(p4_data, aes(y=reorder(major_occupation,employ_n), x=employ_n, fill=fct_rev(race_gender))) +
geom_col(position="dodge", show.legend = F) +
geom_text(aes(x=employ_n+2200000,label=scales::comma(employ_n)), color="black", size=3,position=position_dodge(0.9)) +
scale_y_discrete(labels=function(x) str_wrap(x,20)) +
scale_fill_manual(values=c("#6a6b83","#86bbbd")) +
scale_x_continuous(expand=c(0,0), labels=comma, limits=c(0,42000000)) +
theme_light() +
theme(plot.title=element_markdown()) +
labs(y="Major Occupation", x= "Employed number",
title= "Major Occupation of <span style = 'color:#86bbbd'><b>Men</b></span> and <span style = 'color:#6a6b83'><b>Women</b></span> in 2020.",
subtitle="U.S. Employed Numbers",
caption= "TidyTuesday Week 9 | Data from BLS")
p4

# Minor occupations
p5_data = employed %>%
filter(year=="2020") %>%
filter(race_gender=="Women"|race_gender=="Men") %>%
filter(!is.na(employ_n))%>%
group_by(minor_occupation, race_gender) %>%
summarise(employ_n = sum(employ_n)) %>%
mutate(pct= employ_n/sum(employ_n)) %>%
filter(race_gender!="Men")
p5 = p5_data %>%
ggplot(aes(y=reorder(minor_occupation,pct), x=pct)) +
geom_col(aes(fill=I(ifelse(pct==max(pct),"#4281a4","#9cafb7"))), width=0.85) +
geom_text(aes(label=percent(round(pct,3)), color= I(ifelse(pct==max(pct),"white","black"))), size=2.9, hjust=1.1) +
scale_y_discrete(labels=function(x) str_wrap(x,28)) +
scale_x_continuous(labels=percent, limits=c(0,0.80), expand=c(0,0)) +
theme_light() +
theme(plot.margin=ggplot2::margin(0,10,0,0),
plot.title=element_text(face="bold", size=15)) +
theme(axis.ticks.y=element_blank()) +
labs(y="Minor Occupation", x="Percent",
title= "Percentage of Women in Minor Occupations",
subtitle="U.S. Employed Numbers in 2020",
caption="TidyTuesday Week 9 | Data from BLS")
p5

LS0tCnRpdGxlOiAiRW1wbG95bWVudCBhbmQgRWFybmluZ3MiCmRhdGU6ICIyMDIxLzAyLzI0IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIyBEYXRhIFZpc3VhbGl6YXRpb24gRXhlcmNpc2UgCgpUaWR5VHVlc2RheSB3ZWVrOS8yMDIxIFtFbXBsb3ltZW50IGFuZCBFYXJuaW5nc10oaHR0cHM6Ly9naXRodWIuY29tL3Jmb3JkYXRhc2NpZW5jZS90aWR5dHVlc2RheS90cmVlL21hc3Rlci9kYXRhLzIwMjEpLCBkYXRhIGZyb20gW0JMU10oaHR0cHM6Ly93d3cuYmxzLmdvdi9jcHMvdGFibGVzLmh0bSNjaGFyZW1wX20pCgpgYGB7cn0KIyBsb2FkIGxpYmFyaWVzCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGdndGV4dCkKYGBgCgpgYGB7cn0KIyBpbXBvcnQgZGF0YQplbXBsb3llZCA8LSByZWFkcjo6cmVhZF9jc3YoJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9yZm9yZGF0YXNjaWVuY2UvdGlkeXR1ZXNkYXkvbWFzdGVyL2RhdGEvMjAyMS8yMDIxLTAyLTIzL2VtcGxveWVkLmNzdicpCgplYXJuIDwtIHJlYWRyOjpyZWFkX2NzdignaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3Jmb3JkYXRhc2NpZW5jZS90aWR5dHVlc2RheS9tYXN0ZXIvZGF0YS8yMDIxLzIwMjEtMDItMjMvZWFybi5jc3YnKQpgYGAKCgpgYGB7ciwgbWVzc2FnZT1GQUxTRX0KIyBwbG90IDEKcDEgPSBlYXJuICU+JQoJZ3JvdXBfYnkoeWVhciwgc2V4KSAlPiUKCWZpbHRlcihzZXghPSJCb3RoIFNleGVzIikgJT4lCglzdW1tYXJpc2UobWVkID0gbWVkaWFuKG1lZGlhbl93ZWVrbHlfZWFybikpICU+JQoJZ2dwbG90KGFlcyh4PXllYXIsIHk9bWVkKSkgKwoJZ2VvbV9saW5lKGFlcyhncm91cD15ZWFyKSwgY29sb3I9IiMzZDQwNWIiLCBzaXplPTAuNykgKyAKCWdlb21fcG9pbnQoYWVzKGNvbG9yPXNleCksIHNpemU9OCwgc2hvdy5sZWdlbmQ9RkFMU0UpICsgCglnZW9tX3RleHQoYWVzKGxhYmVsPXBhc3RlMCgiJCIscm91bmQobWVkKSkpLCBzaXplPTIuMiwgY29sb3I9IndoaXRlIikgKwoJc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCIjNjY4NTg2IiwiIzlFOEZCMiIpKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3M9KHNlcSgyMDEwLDIwMjAsMSkpKSArCiAgdGhlbWVfbWluaW1hbCgpICsgCiAgdGhlbWUocGxvdC50aXRsZSA9IGdndGV4dDo6ZWxlbWVudF9tYXJrZG93bihzaXplPTE3LCBmYWNlPSJib2xkIiksCiAgICAgICAgYXhpcy50aXRsZS55PWVsZW1lbnRfbWFya2Rvd24oc2l6ZT0xMCksCiAgICAgICAgYXhpcy50aXRsZS54PWVsZW1lbnRfbWFya2Rvd24oc2l6ZT0xMCksCiAgICAgICAgcGxvdC5jYXB0aW9uPWVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLng9ZWxlbWVudF9ibGFuaygpKSArCiAgbGFicyh4PSJfX1llYXJfXyIsCiAgICAgICB5PSJfX01lZGlhbiBXZWVrbHkgRWFybl9fIChjdXJyZW50IGRvbGxhcnMpIiwKICAgICAgIHRpdGxlPSAiTWVkaWFuIFdlZWtseSBFYXJuIG9mIDxzcGFuIHN0eWxlID0gJ2NvbG9yOiM2Njg1ODYnPjxiPk1lbjwvYj48L3NwYW4+IGFuZCA8c3BhbiBzdHlsZSA9ICdjb2xvcjojOUU4RkIyJz48Yj5Xb21lbjwvYj48L3NwYW4+IGluIHRoZSBVLlMuIiwKICAgICAgIGNhcHRpb249IlRpZHlUdWVzZGF5IFdlZWsgOSB8IERhdGEgZnJvbSBfQkxTXyIKICAgICAgICkKcDEKYGBgCgoKYGBge3IsIGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTQsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CmUxID0gZW1wbG95ZWQgJT4lIAogIGZpbHRlcih5ZWFyPT0iMjAyMCIpICU+JSBmaWx0ZXIocmFjZV9nZW5kZXI9PSJXb21lbiJ8cmFjZV9nZW5kZXI9PSJNZW4iKSAlPiUgCiAgZmlsdGVyKCFpcy5uYShlbXBsb3lfbikpICU+JQogIGdyb3VwX2J5KGluZHVzdHJ5LCByYWNlX2dlbmRlcikgJT4lIAogIHN1bW1hcmlzZShpbmR1c3RyeV90b3RhbD1tYXgoaW5kdXN0cnlfdG90YWwpKSAlPiUKICBwaXZvdF93aWRlcihuYW1lc19mcm9tPXJhY2VfZ2VuZGVyLCB2YWx1ZXNfZnJvbT1pbmR1c3RyeV90b3RhbCkgJT4lCiAgbXV0YXRlKHBjdCA9IFdvbWVuLyhNZW4rV29tZW4pKSAlPiUgCiAgYXJyYW5nZShkZXNjKHBjdCkpCgplMSAlPiUgCiAgZ2dwbG90KGFlcyh5PXJlb3JkZXIoaW5kdXN0cnkscGN0KSwgeD1wY3QpKSArCiAgZ2VvbV9wb2ludCgpICsgCiAgI2dlb21fc2VnbWVudChhZXMoeD0wLCB4ZW5kPXBjdCwgeT1pbmR1c3RyeSwgeWVuZD1pbmR1c3RyeSkpICsgCiAgZ2VvbV9sYWJlbChhZXMobGFiZWw9cGFzdGUoaW5kdXN0cnksIHJvdW5kKHBjdCoxMDAsMSksIiUiKSksIHNpemU9MikgKyAKICBzY2FsZV95X2Rpc2NyZXRlKGxhYmVscz1mdW5jdGlvbih4KSBzdHJfd3JhcCh4LDI1KSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHM9c2NhbGVzOjpwZXJjZW50LCBsaW1pdHM9YygwLDEpLGJyZWFrcz1zZXEoMCwxLDAuMiksZXhwYW5kPWMoMCwwKSkgKwogIHRoZW1lX2xpZ2h0KCkgKyAKICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpY2tzLnk9ZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBsb3QudGl0bGU9ZWxlbWVudF9tYXJrZG93bihzaXplPTE2LGZhY2U9ImJvbGQiKSkgKyAKICBsYWJzKHg9IlBlcmNlbnQiLCB5PSJJbmR1c3RyeSIsCiAgICAgICB0aXRsZT0iUGVyY2VudGFnZSBvZiA8c3BhbiBzdHlsZSA9ICdjb2xvcjojMDA5MWFkJz48Yj5Xb21lbjwvYj48L3NwYW4+IEVtcGxveWVkIGluIHRoZSBVLlMuLCBieSBJbmR1c3RyeSBpbiAyMDIwIiwKICAgICAgIGNhcHRpb249IlRpZHlUdWVzZGF5IFdlZWsgOSB8IERhdGEgZnJvbSBCTFMiKQpgYGAKCmBgYHtyfQplMiA9IGVtcGxveWVkICU+JSAKICBmaWx0ZXIoeWVhcj09IjIwMjAiKSAlPiUgZmlsdGVyKHJhY2VfZ2VuZGVyPT0iV29tZW4ifHJhY2VfZ2VuZGVyPT0iTWVuIikgJT4lIAogIGZpbHRlcighaXMubmEoZW1wbG95X24pKSAlPiUKICBncm91cF9ieShpbmR1c3RyeSwgcmFjZV9nZW5kZXIpICU+JSAKICBzdW1tYXJpc2UoaW5kdXN0cnlfdG90YWw9bWF4KGluZHVzdHJ5X3RvdGFsLzEwMDApKSAKZTIKYGBgCgoKYGBge3IsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTN9CnAzID0gZTIgJT4lIAogIGdncGxvdChhZXMoeT1yZW9yZGVyKGluZHVzdHJ5LCBpbmR1c3RyeV90b3RhbCksIHg9aW5kdXN0cnlfdG90YWwpKSArIAogIGdlb21fbGluZShhZXMoZ3JvdXA9aW5kdXN0cnkpLCBjb2xvcj0iIzc3OGRhOSIpICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IHJhY2VfZ2VuZGVyKSkgKyAKICBzY2FsZV95X2Rpc2NyZXRlKGxhYmVscz1mdW5jdGlvbih4KSBzdHJfd3JhcCh4LDI1KSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiI0EyM0U0OCIsIiNGRjhDNDIiKSkgKyAKICB0aGVtZV9saWdodCgpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIiwKICAgICAgICBwbG90LnRpdGxlID0gZ2d0ZXh0OjplbGVtZW50X21hcmtkb3duKHNpemU9MTYsIGZhY2U9ImJvbGQiKSwKICAgICAgICBheGlzLnRpdGxlLnk9ZWxlbWVudF9tYXJrZG93bihzaXplPTEwKSwKICAgICAgICBheGlzLnRpdGxlLng9ZWxlbWVudF9tYXJrZG93bihzaXplPTEwKSwKICAgICAgICBwbG90LmNhcHRpb249ZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgICkgKyAKICBsYWJzKHg9Il9fRW1wbG95ZWQgTnVtYmVyX18gKGluIHRob3VzYW5kcykiLCB5PSJfX0luZHVzdHJ5X18iLCAKICAgICAgIGNhcHRpb249IlRpZHlUdWVzZGF5IFdlZWsgOSB8IERhdGEgZnJvbSBCTFMiLAogICAgICAgdGl0bGU9IkVtcGxveWVkIDxzcGFuIHN0eWxlID0gJ2NvbG9yOiNBMjNFNDgnPjxiPk1lbjwvYj48L3NwYW4+IGFuZCA8c3BhbiBzdHlsZSA9ICdjb2xvcjojRkY4QzQyJz48Yj5Xb21lbjwvYj48L3NwYW4+IGluIHRoZSBVLlMuLCBieSBJbmR1c3RyeSBpbiAyMDIwIikKcDMgIApgYGAKCgoKYGBge3IsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CiMgd29tZW4gaW4gbWFqb3Igb2NjdXBhdGlvbgpwNF9kYXRhID0gZW1wbG95ZWQgJT4lIAogIGZpbHRlcih5ZWFyPT0iMjAyMCIpICU+JSAKICBmaWx0ZXIocmFjZV9nZW5kZXI9PSJXb21lbiJ8cmFjZV9nZW5kZXI9PSJNZW4iKSAlPiUgCiAgZmlsdGVyKCFpcy5uYShlbXBsb3lfbikpJT4lCiAgZ3JvdXBfYnkobWFqb3Jfb2NjdXBhdGlvbiwgcmFjZV9nZW5kZXIpICU+JQogIHN1bW1hcmlzZShlbXBsb3lfbiA9IHN1bShlbXBsb3lfbikpCgpwNCA9IGdncGxvdChwNF9kYXRhLCBhZXMoeT1yZW9yZGVyKG1ham9yX29jY3VwYXRpb24sZW1wbG95X24pLCB4PWVtcGxveV9uLCBmaWxsPWZjdF9yZXYocmFjZV9nZW5kZXIpKSkgKwogIGdlb21fY29sKHBvc2l0aW9uPSJkb2RnZSIsIHNob3cubGVnZW5kID0gRikgKyAKICBnZW9tX3RleHQoYWVzKHg9ZW1wbG95X24rMjIwMDAwMCxsYWJlbD1zY2FsZXM6OmNvbW1hKGVtcGxveV9uKSksIGNvbG9yPSJibGFjayIsIHNpemU9Myxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgwLjkpKSArCiAgc2NhbGVfeV9kaXNjcmV0ZShsYWJlbHM9ZnVuY3Rpb24oeCkgc3RyX3dyYXAoeCwyMCkpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiIzZhNmI4MyIsIiM4NmJiYmQiKSkgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kPWMoMCwwKSwgbGFiZWxzPWNvbW1hLCBsaW1pdHM9YygwLDQyMDAwMDAwKSkgKyAKICB0aGVtZV9saWdodCgpICsgCiAgdGhlbWUocGxvdC50aXRsZT1lbGVtZW50X21hcmtkb3duKCkpICsgCiAgbGFicyh5PSJNYWpvciBPY2N1cGF0aW9uIiwgeD0gIkVtcGxveWVkIG51bWJlciIsCiAgICAgICB0aXRsZT0gIk1ham9yIE9jY3VwYXRpb24gb2YgPHNwYW4gc3R5bGUgPSAnY29sb3I6Izg2YmJiZCc+PGI+TWVuPC9iPjwvc3Bhbj4gYW5kIDxzcGFuIHN0eWxlID0gJ2NvbG9yOiM2YTZiODMnPjxiPldvbWVuPC9iPjwvc3Bhbj4gaW4gMjAyMC4iLAogICAgICAgc3VidGl0bGU9IlUuUy4gRW1wbG95ZWQgTnVtYmVycyIsCiAgICAgICBjYXB0aW9uPSAiVGlkeVR1ZXNkYXkgV2VlayA5IHwgRGF0YSBmcm9tIEJMUyIpCgpwNApgYGAKCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBmaWcuaGVpZ2h0PTIuNywgZmlnLndpZHRoPTR9CiMgTWlub3Igb2NjdXBhdGlvbnMKcDVfZGF0YSA9IGVtcGxveWVkICU+JSAKICBmaWx0ZXIoeWVhcj09IjIwMjAiKSAlPiUgCiAgZmlsdGVyKHJhY2VfZ2VuZGVyPT0iV29tZW4ifHJhY2VfZ2VuZGVyPT0iTWVuIikgJT4lIAogIGZpbHRlcighaXMubmEoZW1wbG95X24pKSU+JQogIGdyb3VwX2J5KG1pbm9yX29jY3VwYXRpb24sIHJhY2VfZ2VuZGVyKSAlPiUKICBzdW1tYXJpc2UoZW1wbG95X24gPSBzdW0oZW1wbG95X24pKSAlPiUKICBtdXRhdGUocGN0PSBlbXBsb3lfbi9zdW0oZW1wbG95X24pKSAlPiUKICBmaWx0ZXIocmFjZV9nZW5kZXIhPSJNZW4iKQoKcDUgPSBwNV9kYXRhICU+JSAKICBnZ3Bsb3QoYWVzKHk9cmVvcmRlcihtaW5vcl9vY2N1cGF0aW9uLHBjdCksIHg9cGN0KSkgKyAKICBnZW9tX2NvbChhZXMoZmlsbD1JKGlmZWxzZShwY3Q9PW1heChwY3QpLCIjNDI4MWE0IiwiIzljYWZiNyIpKSksIHdpZHRoPTAuODUpICsgCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1wZXJjZW50KHJvdW5kKHBjdCwzKSksIGNvbG9yPSBJKGlmZWxzZShwY3Q9PW1heChwY3QpLCJ3aGl0ZSIsImJsYWNrIikpKSwgc2l6ZT0yLjksIGhqdXN0PTEuMSkgKyAKICBzY2FsZV95X2Rpc2NyZXRlKGxhYmVscz1mdW5jdGlvbih4KSBzdHJfd3JhcCh4LDI4KSkgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzPXBlcmNlbnQsIGxpbWl0cz1jKDAsMC44MCksIGV4cGFuZD1jKDAsMCkpICsgCiAgdGhlbWVfbGlnaHQoKSArIAogIHRoZW1lKHBsb3QubWFyZ2luPWdncGxvdDI6Om1hcmdpbigwLDEwLDAsMCksCiAgICAgICAgcGxvdC50aXRsZT1lbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsIHNpemU9MTUpKSArCiAgdGhlbWUoYXhpcy50aWNrcy55PWVsZW1lbnRfYmxhbmsoKSkgKyAKICBsYWJzKHk9Ik1pbm9yIE9jY3VwYXRpb24iLCB4PSJQZXJjZW50IiwgCiAgICAgICB0aXRsZT0gIlBlcmNlbnRhZ2Ugb2YgV29tZW4gaW4gTWlub3IgT2NjdXBhdGlvbnMiLAogICAgICAgc3VidGl0bGU9IlUuUy4gRW1wbG95ZWQgTnVtYmVycyBpbiAyMDIwIiwgCiAgICAgICBjYXB0aW9uPSJUaWR5VHVlc2RheSBXZWVrIDkgfCBEYXRhIGZyb20gQkxTIikKCnA1CmBgYAoKCgo=