sis <- read.dta13("/Users/christineslaughter/Library/CloudStorage/Dropbox/Boston U (2023-2024)/SistersInPolitics/Sisters in Politics Survey Data (April 2022)/2022-04-18 - Qualtrics - Black Women Politics Clean Data.dta", convert.factors = F, generate.factors = F,encoding = "UTF-8", fromEncoding = NULL, convert.underscore = FALSE,missing.type = FALSE, convert.dates = F, replace.strl = TRUE,add.rownames = FALSE, nonint.factors = TRUE)
sis <- read.dta13("/Users/christineslaughter/Library/CloudStorage/Dropbox/Boston U (2023-2024)/SistersInPolitics/Sisters in Politics Survey Data (April 2022)/2022-04-18 - Qualtrics - Black Women Politics Clean Data.dta", convert.factors = F, generate.factors = F,encoding = "UTF-8", fromEncoding = NULL, convert.underscore = FALSE,missing.type = FALSE, convert.dates = F, replace.strl = TRUE,add.rownames = FALSE, nonint.factors = TRUE)
#set all names to lowercase 
sis <- setNames(sis, tolower(names(sis[1:287])))
#setwd
setwd("~/Dropbox/Boston U (2023-2024)/SistersInPolitics")
Warning: The working directory was changed to /Users/christineslaughter/Library/CloudStorage/Dropbox/Boston U (2023-2024)/SistersInPolitics inside a notebook chunk. The working directory will be reset when the chunk is finished running. Use the knitr root.dir option in the setup chunk to change the working directory for notebook chunks.
table(sis$q33)

   1    2    3    4    5 
1241   74  255  594  120 
sis$news[sis$q33 == 1] <- "Television News"
sis$news[sis$q33 == 2] <- "Newspapers" 
sis$news[sis$q33 == 3] <- "Television Talk Shows"
sis$news[sis$q33 == 4] <- "Internet"
sis$news[sis$q33 == 5] <- "Radio"


table(sis$news)

             Internet            Newspapers                 Radio       Television News 
                  594                    74                   120                  1241 
Television Talk Shows 
                  255 
library(ggthemes)
library(hrbrthemes)
sis_news <- sis %>%
  dplyr::select(news) %>%
  count(news) %>%
mutate(per = round(n/sum(n), digits=2))
  

#plot
sis_news_plot <- ggplot(data= sis_news, aes(x=reorder(news,per),y=per)) +
  geom_bar(stat= "identity") +
  labs(x = "", y = "%", title = "Black Women's News Source By Media Type", caption = "Black Women in Politics Survey (N= 2,284)\n April 2022")  + theme(legend.position = "bottom") + 
   scale_y_continuous(labels = scales::percent) + 
 theme_ipsum() + 
   geom_text(aes(x = news, y =per, label =sprintf("%0.0f%%", per*100), vjust =0),position=position_stack(vjust=0.5), colour= "White")

sis_news_plot

ggsave(sis_news_plot, width =7, height = 5, filename = "sis_news_plot.jpeg")   

NA
NA

table(sis$q81)

  1   2   3   4   5   6   7 
 14  83 561 750 318 370 188 
table(sis$education)
< table of extent 0 >
sis$education <- NULL

sis$education[sis$q81 == 1] <- "Less Than High School"
sis$education[sis$q81 == 2] <- "Less Than High School"
sis$education[sis$q81 == 3] <- "High School Diploma"
sis$education[sis$q81 == 4] <- "Some College/Associates"
sis$education[sis$q81 == 5] <- "Some College/Associates"
sis$education[sis$q81 == 6] <- "College Degree"
sis$education[sis$q81 == 7] <- "Professional Degree"


sis$education <- as.factor(sis$education)

sis$education <- ordered(sis$education, levels = c("Less Than High School", "High School Diploma", "Some College/Associates", "College Degree", "Professional Degree"))

top_edu_news <- sis %>%
  dplyr::select(news, education, q81)%>%
  group_by(education) %>% count(news) %>%
  mutate(per = round(n/sum(n), digits=2)) 

top_edu_news
# position=position_dodge() 

top_edu_news_plot <- top_edu_news %>%
  ggplot(aes(fill = education, x=reorder(news,per),per)) + 
  geom_bar(stat='identity',position=position_dodge(width =0.89)) +
  scale_y_continuous(labels = scales::percent) +
  theme(legend.position="bottom") +  
 # coord_flip() + 
 theme_ipsum() + 
   theme(legend.position = "bottom") + guides(fill = guide_legend(nrow = 2)) + 
  labs(x= "  ", y = "   ", title = "Black Womens News Consumption by Education Levels", caption = "Black Women in Politics Survey (N= 2,284)\n April 2022", fill = "")  + geom_text(aes(x = news, y = per, label =sprintf("%0.0f%%", per*100)), size = 2.5,  position=position_dodge(width =0.89), colour = "White", vjust = 2)

top_edu_news_plot

ggsave(top_edu_news_plot, width =9, height = 7, filename = "top_edu_news_plot.jpeg")   

table(sis$q26)

   1    2 
 613 1671 
sis$post_sm[sis$q26 == 2] <- "Do Not Post"
sis$post_sm[sis$q27 == 1] <- "All the time"
sis$post_sm[sis$q27 == 2] <- "Often"
sis$post_sm[sis$q27 == 3] <- "Sometimes"


sis$post_sm <- as.factor(sis$post_sm)

sis$post_sm <- ordered(sis$post_sm, levels = c("All the time", "Often", "Sometimes", "Do Not Post"))

table(sis$post_sm)

All the time        Often    Sometimes  Do Not Post 
          86          180          347         1671 
sis_sm <- sis %>%
  dplyr::select(post_sm) %>%
  count(post_sm) %>%
mutate(per = round(n/sum(n), digits=2))
  

#plot
sis_sm_plot <- ggplot(data= sis_sm, aes(x=reorder(post_sm,per),y=per)) +
  geom_bar(stat= "identity") +
  labs(x = "", y = "%", title = "Black Women's Social Media Post Frequency", caption = "Black Women in Politics Survey (N= 2,284)\n April 2022")  + theme(legend.position = "bottom") + 
   scale_y_continuous(labels = scales::percent) + 
 theme_ipsum() + 
   geom_text(aes(x = post_sm, y =per, label =sprintf("%0.0f%%", per*100), vjust =0),position=position_stack(vjust=0.5), colour= "White")

sis_sm_plot

ggsave(sis_sm_plot, width =7, height = 5, filename = "sis_sm_plot.jpeg")   



table(sis$q82)

  1   2   3   4   5   6   7   8   9  10  11  12 
310 255 335 251 198 242 157 186  62  79 145  64 
sis$income <- NULL

sis$income[sis$q82 == 1] <- "Less than $10k"
sis$income[sis$q82 == 2] <- "$10k - $30k"
sis$income[sis$q82 == 3] <- "$10k - $30k"
sis$income[sis$q82 == 4 | sis$q82 == 5] <- "$30k - $50k"
sis$income[sis$q82 == 6 | sis$q82 == 7] <- "$50k - $70k"
sis$income[sis$q82 == 8 | sis$q82 == 9 | sis$q82 == 10] <- "$70k - $100k"
sis$income[sis$q82 >= 11] <- "More than $100k"

table(sis$income)

    $10k - $30k     $30k - $50k     $50k - $70k    $70k - $100k  Less than $10k More than $100k 
            590             449             399             327             310             209 
sis$income <- as.factor(sis$income)

sis$income <- ordered(sis$income, levels = c("Less than $10k",  "$10k - $30k", "$30k - $50k", "$50k - $70k", "$70k - $100k", "More than $100k"))

top_inc_post <- sis %>%
  dplyr::select(post_sm, income, q81)%>%
  group_by(income) %>% count(post_sm) %>%
  mutate(per = round(n/sum(n), digits=2)) %>% 
  print(n=24)

top_inc_post
# position=position_dodge() 

top_inc_post_plot <- top_inc_post %>%
  ggplot(aes(fill = income, x=reorder(post_sm,per),per)) + 
  geom_bar(stat='identity',position=position_dodge(width =0.89)) +
  scale_y_continuous(labels = scales::percent) +
  theme(legend.position="bottom") +  
 # coord_flip() + 
 theme_ipsum() + 
   theme(legend.position = "bottom") + guides(fill = guide_legend(nrow = 2)) + 
  labs(x= "  ", y = "   ", title = "Black Women's Social Media Engagement by Income Levels", caption = "Black Women in Politics Survey (N= 2,284)\n April 2022", fill = "")  + geom_text(aes(x = post_sm, y = per, label =sprintf("%0.0f%%", per*100)), size = 2.5,  position=position_dodge(width =0.89), colour = "White", vjust = 2)

top_inc_post_plot

ggsave(top_inc_post_plot, width =9, height = 7, filename = "top_inc_post_plot.jpeg")   

NA
NA
NA
NA

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCgpgYGB7ciB3YXJuaW5nPVRSVUUsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGhhdmVuKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkobGFiZWxsZWQpCmxpYnJhcnkoc3RhcmdhemVyKSAKbGlicmFyeShza2ltcikKbGlicmFyeShyZWFkc3RhdGExMykKCiMgUmVzb2x2ZSBjb25mbGljdHMKCmNvbmZsaWN0ZWQ6OmNvbmZsaWN0X3ByZWZlcigic2VsZWN0IiwgImRwbHlyIikKY29uZmxpY3RlZDo6Y29uZmxpY3RfcHJlZmVyKCJmaWx0ZXIiLCAiZHBseXIiKQpjb25mbGljdGVkOjpjb25mbGljdF9wcmVmZXIoImNvdW50IiwgImRwbHlyIikKY29uZmxpY3RlZDo6Y29uZmxpY3RfcHJlZmVyKCJtdXRhdGUiLCAiZHBseXIiKQoKYWRkbGluZV9mb3JtYXQgPC0gZnVuY3Rpb24oeCwuLi4pewogICAgZ3N1YignXFxzJywnXG4nLHgpCn0KCnJlc2NhbGVfMDEgPC0gZnVuY3Rpb24oeCwgbWluLCBtYXgpewogICMgTm9ybWFsaXplcyBhIHZlY3RvciB0byBbMCwxXQogICh4IC0gbWluKSAvIChtYXggLSBtaW4pCn0KCmRhdGFfc3VtbWFyeSA8LSBmdW5jdGlvbih4KSB7ICMgc3VtbWFyeSBzdGF0cyBmdW5jdGlvbgogICBtIDwtIG1lYW4oeCkKICAgeW1pbiA8LSBtLXNkKHgpCiAgIHltYXggPC0gbStzZCh4KQogICByZXR1cm4oYyh5PW0seW1pbj15bWluLHltYXg9eW1heCkpCn0gCgoKYGBgIAoKCmBgYHtyIHVzaW5nIGJsYWNrIHdvbWVuIGluIHBvbGl0aWNzIGRhdGF9CgpzaXMgPC0gcmVhZC5kdGExMygiL1VzZXJzL2NocmlzdGluZXNsYXVnaHRlci9MaWJyYXJ5L0Nsb3VkU3RvcmFnZS9Ecm9wYm94L0Jvc3RvbiBVICgyMDIzLTIwMjQpL1Npc3RlcnNJblBvbGl0aWNzL1Npc3RlcnMgaW4gUG9saXRpY3MgU3VydmV5IERhdGEgKEFwcmlsIDIwMjIpLzIwMjItMDQtMTggLSBRdWFsdHJpY3MgLSBCbGFjayBXb21lbiBQb2xpdGljcyBDbGVhbiBEYXRhLmR0YSIsIGNvbnZlcnQuZmFjdG9ycyA9IEYsIGdlbmVyYXRlLmZhY3RvcnMgPSBGLGVuY29kaW5nID0gIlVURi04IiwgZnJvbUVuY29kaW5nID0gTlVMTCwgY29udmVydC51bmRlcnNjb3JlID0gRkFMU0UsbWlzc2luZy50eXBlID0gRkFMU0UsIGNvbnZlcnQuZGF0ZXMgPSBGLCByZXBsYWNlLnN0cmwgPSBUUlVFLGFkZC5yb3duYW1lcyA9IEZBTFNFLCBub25pbnQuZmFjdG9ycyA9IFRSVUUpCgojc2V0IGFsbCBuYW1lcyB0byBsb3dlcmNhc2UgCnNpcyA8LSBzZXROYW1lcyhzaXMsIHRvbG93ZXIobmFtZXMoc2lzWzE6Mjg3XSkpKQoKI3NldHdkCnNldHdkKCJ+L0Ryb3Bib3gvQm9zdG9uIFUgKDIwMjMtMjAyNCkvU2lzdGVyc0luUG9saXRpY3MiKQoKYGBgCgoKCmBgYHtyIHJlY29kZSB2YXJzIH0KdGFibGUoc2lzJHEzMykKc2lzJG5ld3Nbc2lzJHEzMyA9PSAxXSA8LSAiVGVsZXZpc2lvbiBOZXdzIgpzaXMkbmV3c1tzaXMkcTMzID09IDJdIDwtICJOZXdzcGFwZXJzIiAKc2lzJG5ld3Nbc2lzJHEzMyA9PSAzXSA8LSAiVGVsZXZpc2lvbiBUYWxrIFNob3dzIgpzaXMkbmV3c1tzaXMkcTMzID09IDRdIDwtICJJbnRlcm5ldCIKc2lzJG5ld3Nbc2lzJHEzMyA9PSA1XSA8LSAiUmFkaW8iCgoKdGFibGUoc2lzJG5ld3MpCmBgYAoKCmBgYHtyIHdoZXJlIGdldCBuZXdzfQpsaWJyYXJ5KGdndGhlbWVzKQpsaWJyYXJ5KGhyYnJ0aGVtZXMpCnNpc19uZXdzIDwtIHNpcyAlPiUKICBkcGx5cjo6c2VsZWN0KG5ld3MpICU+JQogIGNvdW50KG5ld3MpICU+JQptdXRhdGUocGVyID0gcm91bmQobi9zdW0obiksIGRpZ2l0cz0yKSkKICAKCiNwbG90CnNpc19uZXdzX3Bsb3QgPC0gZ2dwbG90KGRhdGE9IHNpc19uZXdzLCBhZXMoeD1yZW9yZGVyKG5ld3MscGVyKSx5PXBlcikpICsKICBnZW9tX2JhcihzdGF0PSAiaWRlbnRpdHkiKSArCiAgbGFicyh4ID0gIiIsIHkgPSAiJSIsIHRpdGxlID0gIkJsYWNrIFdvbWVuJ3MgTmV3cyBTb3VyY2UgQnkgTWVkaWEgVHlwZSIsIGNhcHRpb24gPSAiQmxhY2sgV29tZW4gaW4gUG9saXRpY3MgU3VydmV5IChOPSAyLDI4NClcbiBBcHJpbCAyMDIyIikgICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsgCiAgIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsgCiB0aGVtZV9pcHN1bSgpICsgCiAgIGdlb21fdGV4dChhZXMoeCA9IG5ld3MsIHkgPXBlciwgbGFiZWwgPXNwcmludGYoIiUwLjBmJSUiLCBwZXIqMTAwKSwgdmp1c3QgPTApLHBvc2l0aW9uPXBvc2l0aW9uX3N0YWNrKHZqdXN0PTAuNSksIGNvbG91cj0gIldoaXRlIikKCnNpc19uZXdzX3Bsb3QKCmdnc2F2ZShzaXNfbmV3c19wbG90LCB3aWR0aCA9NywgaGVpZ2h0ID0gNSwgZmlsZW5hbWUgPSAic2lzX25ld3NfcGxvdC5qcGVnIikgICAKCgpgYGAgCgoKCmBgYHtyIHRvcCBuZXdzIGJ5IGVkdWNhdGlvbn0KCnRhYmxlKHNpcyRxODEpCnRhYmxlKHNpcyRlZHVjYXRpb24pCnNpcyRlZHVjYXRpb24gPC0gTlVMTAoKc2lzJGVkdWNhdGlvbltzaXMkcTgxID09IDFdIDwtICJMZXNzIFRoYW4gSGlnaCBTY2hvb2wiCnNpcyRlZHVjYXRpb25bc2lzJHE4MSA9PSAyXSA8LSAiTGVzcyBUaGFuIEhpZ2ggU2Nob29sIgpzaXMkZWR1Y2F0aW9uW3NpcyRxODEgPT0gM10gPC0gIkhpZ2ggU2Nob29sIERpcGxvbWEiCnNpcyRlZHVjYXRpb25bc2lzJHE4MSA9PSA0XSA8LSAiU29tZSBDb2xsZWdlL0Fzc29jaWF0ZXMiCnNpcyRlZHVjYXRpb25bc2lzJHE4MSA9PSA1XSA8LSAiU29tZSBDb2xsZWdlL0Fzc29jaWF0ZXMiCnNpcyRlZHVjYXRpb25bc2lzJHE4MSA9PSA2XSA8LSAiQ29sbGVnZSBEZWdyZWUiCnNpcyRlZHVjYXRpb25bc2lzJHE4MSA9PSA3XSA8LSAiUHJvZmVzc2lvbmFsIERlZ3JlZSIKCgpzaXMkZWR1Y2F0aW9uIDwtIGFzLmZhY3RvcihzaXMkZWR1Y2F0aW9uKQoKc2lzJGVkdWNhdGlvbiA8LSBvcmRlcmVkKHNpcyRlZHVjYXRpb24sIGxldmVscyA9IGMoIkxlc3MgVGhhbiBIaWdoIFNjaG9vbCIsICJIaWdoIFNjaG9vbCBEaXBsb21hIiwgIlNvbWUgQ29sbGVnZS9Bc3NvY2lhdGVzIiwgIkNvbGxlZ2UgRGVncmVlIiwgIlByb2Zlc3Npb25hbCBEZWdyZWUiKSkKCnRvcF9lZHVfbmV3cyA8LSBzaXMgJT4lCiAgZHBseXI6OnNlbGVjdChuZXdzLCBlZHVjYXRpb24sIHE4MSklPiUKICBncm91cF9ieShlZHVjYXRpb24pICU+JSBjb3VudChuZXdzKSAlPiUKICBtdXRhdGUocGVyID0gcm91bmQobi9zdW0obiksIGRpZ2l0cz0yKSkgCgp0b3BfZWR1X25ld3MKIyBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpIAoKdG9wX2VkdV9uZXdzX3Bsb3QgPC0gdG9wX2VkdV9uZXdzICU+JQogIGdncGxvdChhZXMoZmlsbCA9IGVkdWNhdGlvbiwgeD1yZW9yZGVyKG5ld3MscGVyKSxwZXIpKSArIAogIGdlb21fYmFyKHN0YXQ9J2lkZW50aXR5Jyxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aCA9MC44OSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKSArICAKICMgY29vcmRfZmxpcCgpICsgCiB0aGVtZV9pcHN1bSgpICsgCiAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArIGd1aWRlcyhmaWxsID0gZ3VpZGVfbGVnZW5kKG5yb3cgPSAyKSkgKyAKICBsYWJzKHg9ICIgICIsIHkgPSAiICAgIiwgdGl0bGUgPSAiQmxhY2sgV29tZW5zIE5ld3MgQ29uc3VtcHRpb24gYnkgRWR1Y2F0aW9uIExldmVscyIsIGNhcHRpb24gPSAiQmxhY2sgV29tZW4gaW4gUG9saXRpY3MgU3VydmV5IChOPSAyLDI4NClcbiBBcHJpbCAyMDIyIiwgZmlsbCA9ICIiKSAgKyBnZW9tX3RleHQoYWVzKHggPSBuZXdzLCB5ID0gcGVyLCBsYWJlbCA9c3ByaW50ZigiJTAuMGYlJSIsIHBlcioxMDApKSwgc2l6ZSA9IDIuNSwgIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoID0wLjg5KSwgY29sb3VyID0gIldoaXRlIiwgdmp1c3QgPSAyKQoKdG9wX2VkdV9uZXdzX3Bsb3QKCmdnc2F2ZSh0b3BfZWR1X25ld3NfcGxvdCwgd2lkdGggPTksIGhlaWdodCA9IDcsIGZpbGVuYW1lID0gInRvcF9lZHVfbmV3c19wbG90LmpwZWciKSAgIAoKYGBgCgoKYGBge3IgaW5jb21lIHggcG9zdGluZyBvbiBzb2NpYWwgbWVkaWF9CnRhYmxlKHNpcyRxMjYpCgpzaXMkcG9zdF9zbVtzaXMkcTI2ID09IDJdIDwtICJEbyBOb3QgUG9zdCIKc2lzJHBvc3Rfc21bc2lzJHEyNyA9PSAxXSA8LSAiQWxsIHRoZSB0aW1lIgpzaXMkcG9zdF9zbVtzaXMkcTI3ID09IDJdIDwtICJPZnRlbiIKc2lzJHBvc3Rfc21bc2lzJHEyNyA9PSAzXSA8LSAiU29tZXRpbWVzIgoKCnNpcyRwb3N0X3NtIDwtIGFzLmZhY3RvcihzaXMkcG9zdF9zbSkKCnNpcyRwb3N0X3NtIDwtIG9yZGVyZWQoc2lzJHBvc3Rfc20sIGxldmVscyA9IGMoIkFsbCB0aGUgdGltZSIsICJPZnRlbiIsICJTb21ldGltZXMiLCAiRG8gTm90IFBvc3QiKSkKCnRhYmxlKHNpcyRwb3N0X3NtKQoKCnNpc19zbSA8LSBzaXMgJT4lCiAgZHBseXI6OnNlbGVjdChwb3N0X3NtKSAlPiUKICBjb3VudChwb3N0X3NtKSAlPiUKbXV0YXRlKHBlciA9IHJvdW5kKG4vc3VtKG4pLCBkaWdpdHM9MikpCiAgCgojcGxvdApzaXNfc21fcGxvdCA8LSBnZ3Bsb3QoZGF0YT0gc2lzX3NtLCBhZXMoeD1yZW9yZGVyKHBvc3Rfc20scGVyKSx5PXBlcikpICsKICBnZW9tX2JhcihzdGF0PSAiaWRlbnRpdHkiKSArCiAgbGFicyh4ID0gIiIsIHkgPSAiJSIsIHRpdGxlID0gIkJsYWNrIFdvbWVuJ3MgU29jaWFsIE1lZGlhIFBvc3QgRnJlcXVlbmN5IiwgY2FwdGlvbiA9ICJCbGFjayBXb21lbiBpbiBQb2xpdGljcyBTdXJ2ZXkgKE49IDIsMjg0KVxuIEFwcmlsIDIwMjIiKSAgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKyAKICAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKyAKIHRoZW1lX2lwc3VtKCkgKyAKICAgZ2VvbV90ZXh0KGFlcyh4ID0gcG9zdF9zbSwgeSA9cGVyLCBsYWJlbCA9c3ByaW50ZigiJTAuMGYlJSIsIHBlcioxMDApLCB2anVzdCA9MCkscG9zaXRpb249cG9zaXRpb25fc3RhY2sodmp1c3Q9MC41KSwgY29sb3VyPSAiV2hpdGUiKQoKc2lzX3NtX3Bsb3QKCmdnc2F2ZShzaXNfc21fcGxvdCwgd2lkdGggPTcsIGhlaWdodCA9IDUsIGZpbGVuYW1lID0gInNpc19zbV9wbG90LmpwZWciKSAgIAoKCnRhYmxlKHNpcyRxODIpCnNpcyRpbmNvbWUgPC0gTlVMTAoKc2lzJGluY29tZVtzaXMkcTgyID09IDFdIDwtICJMZXNzIHRoYW4gJDEwayIKc2lzJGluY29tZVtzaXMkcTgyID09IDJdIDwtICIkMTBrIC0gJDMwayIKc2lzJGluY29tZVtzaXMkcTgyID09IDNdIDwtICIkMTBrIC0gJDMwayIKc2lzJGluY29tZVtzaXMkcTgyID09IDQgfCBzaXMkcTgyID09IDVdIDwtICIkMzBrIC0gJDUwayIKc2lzJGluY29tZVtzaXMkcTgyID09IDYgfCBzaXMkcTgyID09IDddIDwtICIkNTBrIC0gJDcwayIKc2lzJGluY29tZVtzaXMkcTgyID09IDggfCBzaXMkcTgyID09IDkgfCBzaXMkcTgyID09IDEwXSA8LSAiJDcwayAtICQxMDBrIgpzaXMkaW5jb21lW3NpcyRxODIgPj0gMTFdIDwtICJNb3JlIHRoYW4gJDEwMGsiCgp0YWJsZShzaXMkaW5jb21lKQoKc2lzJGluY29tZSA8LSBhcy5mYWN0b3Ioc2lzJGluY29tZSkKCnNpcyRpbmNvbWUgPC0gb3JkZXJlZChzaXMkaW5jb21lLCBsZXZlbHMgPSBjKCJMZXNzIHRoYW4gJDEwayIsICAiJDEwayAtICQzMGsiLCAiJDMwayAtICQ1MGsiLCAiJDUwayAtICQ3MGsiLCAiJDcwayAtICQxMDBrIiwgIk1vcmUgdGhhbiAkMTAwayIpKQoKdG9wX2luY19wb3N0IDwtIHNpcyAlPiUKICBkcGx5cjo6c2VsZWN0KHBvc3Rfc20sIGluY29tZSwgcTgxKSU+JQogIGdyb3VwX2J5KGluY29tZSkgJT4lIGNvdW50KHBvc3Rfc20pICU+JQogIG11dGF0ZShwZXIgPSByb3VuZChuL3N1bShuKSwgZGlnaXRzPTIpKSAlPiUgCiAgcHJpbnQobj0yNCkKCnRvcF9pbmNfcG9zdAojIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkgCgp0b3BfaW5jX3Bvc3RfcGxvdCA8LSB0b3BfaW5jX3Bvc3QgJT4lCiAgZ2dwbG90KGFlcyhmaWxsID0gaW5jb21lLCB4PXJlb3JkZXIocG9zdF9zbSxwZXIpLHBlcikpICsgCiAgZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoID0wLjg5KSkgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgIAogIyBjb29yZF9mbGlwKCkgKyAKIHRoZW1lX2lwc3VtKCkgKyAKICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQobnJvdyA9IDIpKSArIAogIGxhYnMoeD0gIiAgIiwgeSA9ICIgICAiLCB0aXRsZSA9ICJCbGFjayBXb21lbidzIFNvY2lhbCBNZWRpYSBFbmdhZ2VtZW50IGJ5IEluY29tZSBMZXZlbHMiLCBjYXB0aW9uID0gIkJsYWNrIFdvbWVuIGluIFBvbGl0aWNzIFN1cnZleSAoTj0gMiwyODQpXG4gQXByaWwgMjAyMiIsIGZpbGwgPSAiIikgICsgZ2VvbV90ZXh0KGFlcyh4ID0gcG9zdF9zbSwgeSA9IHBlciwgbGFiZWwgPXNwcmludGYoIiUwLjBmJSUiLCBwZXIqMTAwKSksIHNpemUgPSAyLjUsICBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aCA9MC44OSksIGNvbG91ciA9ICJXaGl0ZSIsIHZqdXN0ID0gMikKCnRvcF9pbmNfcG9zdF9wbG90CgpnZ3NhdmUodG9wX2luY19wb3N0X3Bsb3QsIHdpZHRoID05LCBoZWlnaHQgPSA3LCBmaWxlbmFtZSA9ICJ0b3BfaW5jX3Bvc3RfcGxvdC5qcGVnIikgICAKCgoKCmBgYAoKYGBge3Igd2hhdCBwbGF0Zm9ybXMgYXJlIGJsYWNrIHdvbWVuIHBvc3Rpbmd9CiNvZiB0aGUgNjEzIEJsYWNrIHdvbWVuIHRoYXQgcG9zdCBwb2xpdGljYWwgbWVzc2FnZXMgb24gc29jaWEgbWVkaWEgCmNsYXNzKHNpcyRxMjhfMSkKdGFibGUoc2lzJHBvc3RfZmIpCgoKIyBSRU5BTUUgSVRFTVMgCnNpcyRwb3N0X2ZiIDwtIGlmZWxzZSghaXMubmEoc2lzJHEyOF8xKSwxLDApCgpzaXMkcG9zdF90d2l0dGVyIDwtaWZlbHNlKCFpcy5uYShzaXMkcTI4XzIpLDEsIDApCnNpcyRwb3N0X2lnIDwtIGlmZWxzZSghaXMubmEoc2lzJHEyOF8zKSwgMSwgMCkKc2lzJHBvc3RfdGlrdG9rIDwtaWZlbHNlKCFpcy5uYShzaXMkcTI4XzQgKSwxLCAwKQpzaXMkcG9zdF9zbmFwIDwtIGlmZWxzZSghaXMubmEoc2lzJHEyOF81KSwgMSwgMCkKc2lzJHBvc3RfbWVkaXVtIDwtaWZlbHNlKCFpcy5uYShzaXMkcTI4XzYgKSwxLCAwKQpzaXMkcG9zdF9vdGhlciA8LSBpZmVsc2UoIWlzLm5hKHNpcyRxMjhfNyksIDEsIDApCgp0YWJsZShzaXMkcG9zdF9vdGhlcikKCgoKcG9zdF9wbGF0Zm9ybTwtIHNpcyAlPiUKICBkcGx5cjo6c2VsZWN0KHN0YXJ0c193aXRoKCJwb3N0XyIpKSAlPiUKICBmaWx0ZXIocG9zdF9zbSAhPSAiRG8gTm90IFBvc3QiKSAlPiUKICBkcGx5cjo6c3VtbWFyaXNlKHBvc3RfZmIgPSBtZWFuKHBvc3RfZmIgPT0gMSwgbmEucm09VCksIAogICAgICAgICAgICAgICAgICAgcG9zdF90d2l0dGVyID0gbWVhbihwb3N0X3R3aXR0ZXIgPT0gMSwgbmEucm09VCksCiAgICAgICAgICAgICAgICAgICBwb3N0X2lnID0gbWVhbihwb3N0X2lnID09IDEsIG5hLnJtID1UKSwgCiAgICAgICAgICAgICAgICAgICBwb3N0X3Rpa3RvayA9IG1lYW4ocG9zdF90aWt0b2sgPT0gMSwgbmEucm09VCksCiAgICAgICAgICAgICAgICAgICBwb3N0X3NuYXAgPSBtZWFuKHBvc3Rfc25hcCA9PSAxLCBuYS5ybT1UKSwKICAgICAgICAgICAgICAgICAgIHBvc3RfbWVkaXVtID0gbWVhbihwb3N0X21lZGl1bSA9PSAxLCBuYS5ybT1UKSwKICAgICAgICAgICAgICAgICAgIHBvc3Rfb3RoZXIgPSBtZWFuKHBvc3Rfb3RoZXIgPT0gMSwgbmEucm09VCkpICU+JQogIGdhdGhlcihxLHIsMTo3KSAlPiUKICBtdXRhdGUociA9IHJvdW5kKHIsIGRpZ2l0cz0yKSkKCnBvc3RfcGxhdGZvcm0KcG9zdF9wbGF0Zm9ybV9wbG90IDwtIHBvc3RfcGxhdGZvcm0gJT4lCiAgZ2dwbG90KGFlcyh4PXJlb3JkZXIocSxyKSxyKSkgICsgCiAgZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoID0wLjg5KSkgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKIHRoZW1lX2lwc3VtKCkgKyAKICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQobnJvdyA9IDIpKSArIAogIGxhYnMoeD0gIiAgIiwgeSA9ICIgICAiLCB0aXRsZSA9ICJCbGFjayBXb21lbidzIFNvY2lhbCBNZWRpYSBFbmdhZ2VtZW50IGJ5IFBsYXRmb3JtIiwgY2FwdGlvbiA9ICJCbGFjayBXb21lbiBpbiBQb2xpdGljcyBTdXJ2ZXkgKE49IDIsMjg0KVxuIEFwcmlsIDIwMjIiLCBmaWxsID0gIiIpICArIGdlb21fdGV4dChhZXMoeCA9IHEsIHkgPSByLCBsYWJlbCA9c3ByaW50ZigiJTAuMGYlJSIsIHIqMTAwKSksIHNpemUgPSAyLjUsICBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aCA9MC44OSksIGNvbG91ciA9ICJXaGl0ZSIsIHZqdXN0ID0gMikKCgoKcG9zdF9wbGF0Zm9ybV9wbG90CgoKZ2dzYXZlKHBvc3RfcGxhdGZvcm1fcGxvdCwgd2lkdGggPTksIGhlaWdodCA9IDcsIGZpbGVuYW1lID0gInBvc3RfcGxhdGZvcm1fcGxvdC5qcGVnIikgICAKCgoKCmBgYAoKCgpgYGB7ciBwb3N0IHBsYXRmb3JtIGJ5IGluY29tZX0KCmluY19wb3N0X3BsYXRmb3JtPC0gc2lzICU+JQogIGRwbHlyOjpzZWxlY3Qoc3RhcnRzX3dpdGgoInBvc3RfIiksIGluY29tZSkgJT4lCiAgZmlsdGVyKHBvc3Rfc20gIT0gIkRvIE5vdCBQb3N0IikgJT4lCiAgZ3JvdXBfYnkoaW5jb21lKSAlPiUgCiAgZHBseXI6OnN1bW1hcmlzZShwb3N0X2ZiID0gbWVhbihwb3N0X2ZiID09IDEsIG5hLnJtPVQpLCAKICAgICAgICAgICAgICAgICAgIHBvc3RfdHdpdHRlciA9IG1lYW4ocG9zdF90d2l0dGVyID09IDEsIG5hLnJtPVQpLAogICAgICAgICAgICAgICAgICAgcG9zdF9pZyA9IG1lYW4ocG9zdF9pZyA9PSAxLCBuYS5ybSA9VCksIAogICAgICAgICAgICAgICAgICAgcG9zdF90aWt0b2sgPSBtZWFuKHBvc3RfdGlrdG9rID09IDEsIG5hLnJtPVQpLAogICAgICAgICAgICAgICAgICAgcG9zdF9zbmFwID0gbWVhbihwb3N0X3NuYXAgPT0gMSwgbmEucm09VCksCiAgICAgICAgICAgICAgICAgICBwb3N0X21lZGl1bSA9IG1lYW4ocG9zdF9tZWRpdW0gPT0gMSwgbmEucm09VCksCiAgICAgICAgICAgICAgICAgICBwb3N0X290aGVyID0gbWVhbihwb3N0X290aGVyID09IDEsIG5hLnJtPVQpKSAlPiUKICBnYXRoZXIocSxyLDE6NykgJT4lCiAgbXV0YXRlKHIgPSByb3VuZChyLCBkaWdpdHM9MikpCgoKdG9wX2luY19wb3N0CiMgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoKSAKCnRvcF9pbmNfcG9zdF9wbG90IDwtIHRvcF9pbmNfcG9zdCAlPiUKICBnZ3Bsb3QoYWVzKGZpbGwgPSBpbmNvbWUsIHg9cmVvcmRlcihwb3N0X3NtLHBlcikscGVyKSkgKyAKICBnZW9tX2JhcihzdGF0PSdpZGVudGl0eScscG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGggPTAuODkpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyAgCiAjIGNvb3JkX2ZsaXAoKSArIAogdGhlbWVfaXBzdW0oKSArIAogICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKyBndWlkZXMoZmlsbCA9IGd1aWRlX2xlZ2VuZChucm93ID0gMikpICsgCiAgbGFicyh4PSAiICAiLCB5ID0gIiAgICIsIHRpdGxlID0gIkJsYWNrIFdvbWVuJ3MgU29jaWFsIE1lZGlhIEVuZ2FnZW1lbnQgYnkgSW5jb21lIExldmVscyIsIGNhcHRpb24gPSAiQmxhY2sgV29tZW4gaW4gUG9saXRpY3MgU3VydmV5IChOPSAyLDI4NClcbiBBcHJpbCAyMDIyIiwgZmlsbCA9ICIiKSAgKyBnZW9tX3RleHQoYWVzKHggPSBwb3N0X3NtLCB5ID0gcGVyLCBsYWJlbCA9c3ByaW50ZigiJTAuMGYlJSIsIHBlcioxMDApKSwgc2l6ZSA9IDIuNSwgIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoID0wLjg5KSwgY29sb3VyID0gIldoaXRlIiwgdmp1c3QgPSAyKQoKdG9wX2luY19wb3N0X3Bsb3QKCmdnc2F2ZSh0b3BfaW5jX3Bvc3RfcGxvdCwgd2lkdGggPTksIGhlaWdodCA9IDcsIGZpbGVuYW1lID0gInRvcF9pbmNfcG9zdF9wbG90LmpwZWciKSAgIAoKCgoKYGBgCgo=