Intro

The survey presented some questions concerning the benefits of doing outreach, both to the researcher themself and to wider society. Here, we take a look at the ratings for these benefits in a bit of detail.

# NOTE: This dataset is still private and so this data frame is generated
# from within the storage environment of the file in question.
dat <- read.csv(file = "../../quant_analysis/final_dataset.csv", 
                header = TRUE)
library(dplyr, warn.conflicts = FALSE)
library(gridExtra, warn.conflicts = FALSE)
library(ggplot2, warn.conflicts = FALSE)
library(magrittr, warn.conflicts = FALSE)
# for long form conversion of data frame
library(reshape2)

The responses are split into two categories based on whether the respondents had NOT participated in outreach previously (“No”) or whether they had (“Yes”). Responses with “Not applicable” have been removed from the datasets plotted below.

Benefits to society

Below, we see responses to questions concerning one of the benefits to society: namely, “The public gets better knowledge/understanding of science.”

ggplot(dat, aes(x = factor(better_knowledge_science), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“The public gets better knowledge/understanding of science.”")

Similarly, we see the responses for the remaining eight questions concerning societal benefits.

ggplot(dat, aes(x = factor(judge_scientific_issues), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“It enables the public to judge scientific issues for themselves.”")

ggplot(dat, aes(x = factor(lives_informed_decisions), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“It enables the public to make informed decisions about their lives.”")

ggplot(dat, aes(x = factor(improves_understanding_scientists), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“It helps improve the understanding of what scientists do.”")

ggplot(dat, aes(x = factor(less_opposition), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“There is less opposition to scientific research.”")

ggplot(dat, aes(x = factor(more_study_science), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“More people enter science education/science careers as a result.”")

ggplot(dat, aes(x = factor(policy_making_equipped), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“Policy-makers are better equipped to make decisions.”")

ggplot(dat, aes(x = factor(non_specialists), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“Non-specialists can participate in scientific research.”")

ggplot(dat, aes(x = factor(informed_decisions), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“Society can make informed decisions about research funding.”")

Benefits to self

We now examine – breaking, as before, the responses down to those who have never participated in outreach before (“No”) and those who have (“Yes”) – the ratings provided for benefits to oneself from doing outreach.

ggplot(dat, aes(x = factor(experience_communications), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“It gives me experience in communicating my research.”")

ggplot(dat, aes(x = factor(name_known), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“It gets my name known.”")

ggplot(dat, aes(x = factor(attracts_funding), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“It attracts research funding.”")

ggplot(dat, aes(x = factor(advances_career), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“It advances my career.”")

ggplot(dat, aes(x = factor(feeling_enjoyment), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“I get a feeling of enjoyment.”")

ggplot(dat, aes(x = factor(job_satisfaction), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“It gives me job satisfaction.”")

ggplot(dat, aes(x = factor(collaboration_opportunities), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“It is an opportunity for others to contact me for collaborative purposes.”")

ggplot(dat, aes(x = factor(research_new_ways), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“It shapes the direction of my research or makes me think about it in new ways.”")

ggplot(dat, aes(x = factor(makes_better_scientist), y = ..count..)) + 
    geom_bar(stat = "count") + 
    geom_text(stat = "count", aes(label = ..count.., 
                                  y=..count..), 
              vjust=-0.5) + 
    facet_grid(. ~ previous_participation) + 
    scale_x_discrete(name = NULL, 
                     limits = c(1:5), 
                     drop = FALSE, 
                     labels = c("1" = "1\nStrongly\nDisagree",
                                "2" = "2", "3" = "3", "4" = "4", 
                                "5" = "5\nStrongly\nAgree")) + 
    ylab("Count") + 
    labs(title = "“It makes me a better scientist.”")

LS0tCnRpdGxlOiAiQmVuZWZpdHMgb2YgZG9pbmcgb3V0cmVhY2giCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazogCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIHRoZW1lOiB1bml0ZWQKICAgIHRvYzogeWVzCi0tLQoKIyMgSW50cm8KClRoZSBzdXJ2ZXkgcHJlc2VudGVkIHNvbWUgcXVlc3Rpb25zIGNvbmNlcm5pbmcgdGhlIGJlbmVmaXRzIG9mIGRvaW5nIG91dHJlYWNoLCBib3RoIHRvIHRoZSByZXNlYXJjaGVyIHRoZW1zZWxmIGFuZCB0byB3aWRlciBzb2NpZXR5LgpIZXJlLCB3ZSB0YWtlIGEgbG9vayBhdCB0aGUgcmF0aW5ncyBmb3IgdGhlc2UgYmVuZWZpdHMgaW4gYSBiaXQgb2YgZGV0YWlsLgoKYGBge3J9CiMgTk9URTogVGhpcyBkYXRhc2V0IGlzIHN0aWxsIHByaXZhdGUgYW5kIHNvIHRoaXMgZGF0YSBmcmFtZSBpcyBnZW5lcmF0ZWQKIyBmcm9tIHdpdGhpbiB0aGUgc3RvcmFnZSBlbnZpcm9ubWVudCBvZiB0aGUgZmlsZSBpbiBxdWVzdGlvbi4KZGF0IDwtIHJlYWQuY3N2KGZpbGUgPSAiLi4vLi4vcXVhbnRfYW5hbHlzaXMvZmluYWxfZGF0YXNldC5jc3YiLCAKICAgICAgICAgICAgICAgIGhlYWRlciA9IFRSVUUpCgpsaWJyYXJ5KGRwbHlyLCB3YXJuLmNvbmZsaWN0cyA9IEZBTFNFKQpsaWJyYXJ5KGdyaWRFeHRyYSwgd2Fybi5jb25mbGljdHMgPSBGQUxTRSkKbGlicmFyeShnZ3Bsb3QyLCB3YXJuLmNvbmZsaWN0cyA9IEZBTFNFKQpsaWJyYXJ5KG1hZ3JpdHRyLCB3YXJuLmNvbmZsaWN0cyA9IEZBTFNFKQoKIyBmb3IgbG9uZyBmb3JtIGNvbnZlcnNpb24gb2YgZGF0YSBmcmFtZQpsaWJyYXJ5KHJlc2hhcGUyKQpgYGAKClRoZSByZXNwb25zZXMgYXJlIHNwbGl0IGludG8gdHdvIGNhdGVnb3JpZXMgYmFzZWQgb24gd2hldGhlciB0aGUgcmVzcG9uZGVudHMgaGFkIE5PVCBwYXJ0aWNpcGF0ZWQgaW4gb3V0cmVhY2ggcHJldmlvdXNseSAoIk5vIikgb3Igd2hldGhlciB0aGV5IGhhZCAoIlllcyIpLgpSZXNwb25zZXMgd2l0aCAiTm90IGFwcGxpY2FibGUiIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRhdGFzZXRzIHBsb3R0ZWQgYmVsb3cuCgojIyBCZW5lZml0cyB0byBzb2NpZXR5CgpCZWxvdywgd2Ugc2VlIHJlc3BvbnNlcyB0byBxdWVzdGlvbnMgY29uY2VybmluZyBvbmUgb2YgdGhlIGJlbmVmaXRzIHRvIHNvY2lldHk6IG5hbWVseSwgIlRoZSBwdWJsaWMgZ2V0cyBiZXR0ZXIga25vd2xlZGdlL3VuZGVyc3RhbmRpbmcgb2Ygc2NpZW5jZS4iCgpgYGB7cn0KZ2dwbG90KGRhdCwgYWVzKHggPSBmYWN0b3IoYmV0dGVyX2tub3dsZWRnZV9zY2llbmNlKSwgeSA9IC4uY291bnQuLikpICsgCiAgICBnZW9tX2JhcihzdGF0ID0gImNvdW50IikgKyAKICAgIGdlb21fdGV4dChzdGF0ID0gImNvdW50IiwgYWVzKGxhYmVsID0gLi5jb3VudC4uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9Li5jb3VudC4uKSwgCiAgICAgICAgICAgICAgdmp1c3Q9LTAuNSkgKyAKICAgIGZhY2V0X2dyaWQoLiB+IHByZXZpb3VzX3BhcnRpY2lwYXRpb24pICsgCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygxOjUpLCAKICAgICAgICAgICAgICAgICAgICAgZHJvcCA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMSIgPSAiMVxuU3Ryb25nbHlcbkRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiMiIsICIzIiA9ICIzIiwgIjQiID0gIjQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAiNVxuU3Ryb25nbHlcbkFncmVlIikpICsgCiAgICB5bGFiKCJDb3VudCIpICsgCiAgICBsYWJzKHRpdGxlID0gIuKAnFRoZSBwdWJsaWMgZ2V0cyBiZXR0ZXIga25vd2xlZGdlL3VuZGVyc3RhbmRpbmcgb2Ygc2NpZW5jZS7igJ0iKQpgYGAKClNpbWlsYXJseSwgd2Ugc2VlIHRoZSByZXNwb25zZXMgZm9yIHRoZSByZW1haW5pbmcgZWlnaHQgcXVlc3Rpb25zIGNvbmNlcm5pbmcgc29jaWV0YWwgYmVuZWZpdHMuCgpgYGB7cn0KZ2dwbG90KGRhdCwgYWVzKHggPSBmYWN0b3IoanVkZ2Vfc2NpZW50aWZpY19pc3N1ZXMpLCB5ID0gLi5jb3VudC4uKSkgKyAKICAgIGdlb21fYmFyKHN0YXQgPSAiY291bnQiKSArIAogICAgZ2VvbV90ZXh0KHN0YXQgPSAiY291bnQiLCBhZXMobGFiZWwgPSAuLmNvdW50Li4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT0uLmNvdW50Li4pLCAKICAgICAgICAgICAgICB2anVzdD0tMC41KSArIAogICAgZmFjZXRfZ3JpZCguIH4gcHJldmlvdXNfcGFydGljaXBhdGlvbikgKyAKICAgIHNjYWxlX3hfZGlzY3JldGUobmFtZSA9IE5VTEwsIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDE6NSksIAogICAgICAgICAgICAgICAgICAgICBkcm9wID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIxIiA9ICIxXG5TdHJvbmdseVxuRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICIyIiwgIjMiID0gIjMiLCAiNCIgPSAiNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICI1XG5TdHJvbmdseVxuQWdyZWUiKSkgKyAKICAgIHlsYWIoIkNvdW50IikgKyAKICAgIGxhYnModGl0bGUgPSAi4oCcSXQgZW5hYmxlcyB0aGUgcHVibGljIHRvIGp1ZGdlIHNjaWVudGlmaWMgaXNzdWVzIGZvciB0aGVtc2VsdmVzLuKAnSIpCmBgYAoKYGBge3J9CmdncGxvdChkYXQsIGFlcyh4ID0gZmFjdG9yKGxpdmVzX2luZm9ybWVkX2RlY2lzaW9ucyksIHkgPSAuLmNvdW50Li4pKSArIAogICAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIpICsgCiAgICBnZW9tX3RleHQoc3RhdCA9ICJjb3VudCIsIGFlcyhsYWJlbCA9IC4uY291bnQuLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PS4uY291bnQuLiksIAogICAgICAgICAgICAgIHZqdXN0PS0wLjUpICsgCiAgICBmYWNldF9ncmlkKC4gfiBwcmV2aW91c19wYXJ0aWNpcGF0aW9uKSArIAogICAgc2NhbGVfeF9kaXNjcmV0ZShuYW1lID0gTlVMTCwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMTo1KSwgCiAgICAgICAgICAgICAgICAgICAgIGRyb3AgPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjEiID0gIjFcblN0cm9uZ2x5XG5EaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIjIiLCAiMyIgPSAiMyIsICI0IiA9ICI0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIjVcblN0cm9uZ2x5XG5BZ3JlZSIpKSArIAogICAgeWxhYigiQ291bnQiKSArIAogICAgbGFicyh0aXRsZSA9ICLigJxJdCBlbmFibGVzIHRoZSBwdWJsaWMgdG8gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMgYWJvdXQgdGhlaXIgbGl2ZXMu4oCdIikKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdCwgYWVzKHggPSBmYWN0b3IoaW1wcm92ZXNfdW5kZXJzdGFuZGluZ19zY2llbnRpc3RzKSwgeSA9IC4uY291bnQuLikpICsgCiAgICBnZW9tX2JhcihzdGF0ID0gImNvdW50IikgKyAKICAgIGdlb21fdGV4dChzdGF0ID0gImNvdW50IiwgYWVzKGxhYmVsID0gLi5jb3VudC4uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9Li5jb3VudC4uKSwgCiAgICAgICAgICAgICAgdmp1c3Q9LTAuNSkgKyAKICAgIGZhY2V0X2dyaWQoLiB+IHByZXZpb3VzX3BhcnRpY2lwYXRpb24pICsgCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygxOjUpLCAKICAgICAgICAgICAgICAgICAgICAgZHJvcCA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMSIgPSAiMVxuU3Ryb25nbHlcbkRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiMiIsICIzIiA9ICIzIiwgIjQiID0gIjQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAiNVxuU3Ryb25nbHlcbkFncmVlIikpICsgCiAgICB5bGFiKCJDb3VudCIpICsgCiAgICBsYWJzKHRpdGxlID0gIuKAnEl0IGhlbHBzIGltcHJvdmUgdGhlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBzY2llbnRpc3RzIGRvLuKAnSIpCmBgYAoKYGBge3J9CmdncGxvdChkYXQsIGFlcyh4ID0gZmFjdG9yKGxlc3Nfb3Bwb3NpdGlvbiksIHkgPSAuLmNvdW50Li4pKSArIAogICAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIpICsgCiAgICBnZW9tX3RleHQoc3RhdCA9ICJjb3VudCIsIGFlcyhsYWJlbCA9IC4uY291bnQuLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PS4uY291bnQuLiksIAogICAgICAgICAgICAgIHZqdXN0PS0wLjUpICsgCiAgICBmYWNldF9ncmlkKC4gfiBwcmV2aW91c19wYXJ0aWNpcGF0aW9uKSArIAogICAgc2NhbGVfeF9kaXNjcmV0ZShuYW1lID0gTlVMTCwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMTo1KSwgCiAgICAgICAgICAgICAgICAgICAgIGRyb3AgPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjEiID0gIjFcblN0cm9uZ2x5XG5EaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIjIiLCAiMyIgPSAiMyIsICI0IiA9ICI0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIjVcblN0cm9uZ2x5XG5BZ3JlZSIpKSArIAogICAgeWxhYigiQ291bnQiKSArIAogICAgbGFicyh0aXRsZSA9ICLigJxUaGVyZSBpcyBsZXNzIG9wcG9zaXRpb24gdG8gc2NpZW50aWZpYyByZXNlYXJjaC7igJ0iKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0LCBhZXMoeCA9IGZhY3Rvcihtb3JlX3N0dWR5X3NjaWVuY2UpLCB5ID0gLi5jb3VudC4uKSkgKyAKICAgIGdlb21fYmFyKHN0YXQgPSAiY291bnQiKSArIAogICAgZ2VvbV90ZXh0KHN0YXQgPSAiY291bnQiLCBhZXMobGFiZWwgPSAuLmNvdW50Li4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT0uLmNvdW50Li4pLCAKICAgICAgICAgICAgICB2anVzdD0tMC41KSArIAogICAgZmFjZXRfZ3JpZCguIH4gcHJldmlvdXNfcGFydGljaXBhdGlvbikgKyAKICAgIHNjYWxlX3hfZGlzY3JldGUobmFtZSA9IE5VTEwsIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDE6NSksIAogICAgICAgICAgICAgICAgICAgICBkcm9wID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIxIiA9ICIxXG5TdHJvbmdseVxuRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICIyIiwgIjMiID0gIjMiLCAiNCIgPSAiNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICI1XG5TdHJvbmdseVxuQWdyZWUiKSkgKyAKICAgIHlsYWIoIkNvdW50IikgKyAKICAgIGxhYnModGl0bGUgPSAi4oCcTW9yZSBwZW9wbGUgZW50ZXIgc2NpZW5jZSBlZHVjYXRpb24vc2NpZW5jZSBjYXJlZXJzIGFzIGEgcmVzdWx0LuKAnSIpCmBgYAoKYGBge3J9CmdncGxvdChkYXQsIGFlcyh4ID0gZmFjdG9yKHBvbGljeV9tYWtpbmdfZXF1aXBwZWQpLCB5ID0gLi5jb3VudC4uKSkgKyAKICAgIGdlb21fYmFyKHN0YXQgPSAiY291bnQiKSArIAogICAgZ2VvbV90ZXh0KHN0YXQgPSAiY291bnQiLCBhZXMobGFiZWwgPSAuLmNvdW50Li4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT0uLmNvdW50Li4pLCAKICAgICAgICAgICAgICB2anVzdD0tMC41KSArIAogICAgZmFjZXRfZ3JpZCguIH4gcHJldmlvdXNfcGFydGljaXBhdGlvbikgKyAKICAgIHNjYWxlX3hfZGlzY3JldGUobmFtZSA9IE5VTEwsIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDE6NSksIAogICAgICAgICAgICAgICAgICAgICBkcm9wID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIxIiA9ICIxXG5TdHJvbmdseVxuRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICIyIiwgIjMiID0gIjMiLCAiNCIgPSAiNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICI1XG5TdHJvbmdseVxuQWdyZWUiKSkgKyAKICAgIHlsYWIoIkNvdW50IikgKyAKICAgIGxhYnModGl0bGUgPSAi4oCcUG9saWN5LW1ha2VycyBhcmUgYmV0dGVyIGVxdWlwcGVkIHRvIG1ha2UgZGVjaXNpb25zLuKAnSIpCmBgYAoKYGBge3J9CmdncGxvdChkYXQsIGFlcyh4ID0gZmFjdG9yKG5vbl9zcGVjaWFsaXN0cyksIHkgPSAuLmNvdW50Li4pKSArIAogICAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIpICsgCiAgICBnZW9tX3RleHQoc3RhdCA9ICJjb3VudCIsIGFlcyhsYWJlbCA9IC4uY291bnQuLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PS4uY291bnQuLiksIAogICAgICAgICAgICAgIHZqdXN0PS0wLjUpICsgCiAgICBmYWNldF9ncmlkKC4gfiBwcmV2aW91c19wYXJ0aWNpcGF0aW9uKSArIAogICAgc2NhbGVfeF9kaXNjcmV0ZShuYW1lID0gTlVMTCwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMTo1KSwgCiAgICAgICAgICAgICAgICAgICAgIGRyb3AgPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjEiID0gIjFcblN0cm9uZ2x5XG5EaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIjIiLCAiMyIgPSAiMyIsICI0IiA9ICI0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIjVcblN0cm9uZ2x5XG5BZ3JlZSIpKSArIAogICAgeWxhYigiQ291bnQiKSArIAogICAgbGFicyh0aXRsZSA9ICLigJxOb24tc3BlY2lhbGlzdHMgY2FuIHBhcnRpY2lwYXRlIGluIHNjaWVudGlmaWMgcmVzZWFyY2gu4oCdIikKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdCwgYWVzKHggPSBmYWN0b3IoaW5mb3JtZWRfZGVjaXNpb25zKSwgeSA9IC4uY291bnQuLikpICsgCiAgICBnZW9tX2JhcihzdGF0ID0gImNvdW50IikgKyAKICAgIGdlb21fdGV4dChzdGF0ID0gImNvdW50IiwgYWVzKGxhYmVsID0gLi5jb3VudC4uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9Li5jb3VudC4uKSwgCiAgICAgICAgICAgICAgdmp1c3Q9LTAuNSkgKyAKICAgIGZhY2V0X2dyaWQoLiB+IHByZXZpb3VzX3BhcnRpY2lwYXRpb24pICsgCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygxOjUpLCAKICAgICAgICAgICAgICAgICAgICAgZHJvcCA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMSIgPSAiMVxuU3Ryb25nbHlcbkRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiMiIsICIzIiA9ICIzIiwgIjQiID0gIjQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAiNVxuU3Ryb25nbHlcbkFncmVlIikpICsgCiAgICB5bGFiKCJDb3VudCIpICsgCiAgICBsYWJzKHRpdGxlID0gIuKAnFNvY2lldHkgY2FuIG1ha2UgaW5mb3JtZWQgZGVjaXNpb25zIGFib3V0IHJlc2VhcmNoIGZ1bmRpbmcu4oCdIikKYGBgCgojIyBCZW5lZml0cyB0byBzZWxmCgpXZSBub3cgZXhhbWluZSAtLSBicmVha2luZywgYXMgYmVmb3JlLCB0aGUgcmVzcG9uc2VzIGRvd24gdG8gdGhvc2Ugd2hvIGhhdmUgbmV2ZXIgcGFydGljaXBhdGVkIGluIG91dHJlYWNoIGJlZm9yZSAoIk5vIikgYW5kIHRob3NlIHdobyBoYXZlICgiWWVzIikgLS0gdGhlIHJhdGluZ3MgcHJvdmlkZWQgZm9yIGJlbmVmaXRzIHRvIG9uZXNlbGYgZnJvbSBkb2luZyBvdXRyZWFjaC4KCmBgYHtyfQpnZ3Bsb3QoZGF0LCBhZXMoeCA9IGZhY3RvcihleHBlcmllbmNlX2NvbW11bmljYXRpb25zKSwgeSA9IC4uY291bnQuLikpICsgCiAgICBnZW9tX2JhcihzdGF0ID0gImNvdW50IikgKyAKICAgIGdlb21fdGV4dChzdGF0ID0gImNvdW50IiwgYWVzKGxhYmVsID0gLi5jb3VudC4uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9Li5jb3VudC4uKSwgCiAgICAgICAgICAgICAgdmp1c3Q9LTAuNSkgKyAKICAgIGZhY2V0X2dyaWQoLiB+IHByZXZpb3VzX3BhcnRpY2lwYXRpb24pICsgCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygxOjUpLCAKICAgICAgICAgICAgICAgICAgICAgZHJvcCA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMSIgPSAiMVxuU3Ryb25nbHlcbkRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiMiIsICIzIiA9ICIzIiwgIjQiID0gIjQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAiNVxuU3Ryb25nbHlcbkFncmVlIikpICsgCiAgICB5bGFiKCJDb3VudCIpICsgCiAgICBsYWJzKHRpdGxlID0gIuKAnEl0IGdpdmVzIG1lIGV4cGVyaWVuY2UgaW4gY29tbXVuaWNhdGluZyBteSByZXNlYXJjaC7igJ0iKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0LCBhZXMoeCA9IGZhY3RvcihuYW1lX2tub3duKSwgeSA9IC4uY291bnQuLikpICsgCiAgICBnZW9tX2JhcihzdGF0ID0gImNvdW50IikgKyAKICAgIGdlb21fdGV4dChzdGF0ID0gImNvdW50IiwgYWVzKGxhYmVsID0gLi5jb3VudC4uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9Li5jb3VudC4uKSwgCiAgICAgICAgICAgICAgdmp1c3Q9LTAuNSkgKyAKICAgIGZhY2V0X2dyaWQoLiB+IHByZXZpb3VzX3BhcnRpY2lwYXRpb24pICsgCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygxOjUpLCAKICAgICAgICAgICAgICAgICAgICAgZHJvcCA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMSIgPSAiMVxuU3Ryb25nbHlcbkRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiMiIsICIzIiA9ICIzIiwgIjQiID0gIjQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAiNVxuU3Ryb25nbHlcbkFncmVlIikpICsgCiAgICB5bGFiKCJDb3VudCIpICsgCiAgICBsYWJzKHRpdGxlID0gIuKAnEl0IGdldHMgbXkgbmFtZSBrbm93bi7igJ0iKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0LCBhZXMoeCA9IGZhY3RvcihhdHRyYWN0c19mdW5kaW5nKSwgeSA9IC4uY291bnQuLikpICsgCiAgICBnZW9tX2JhcihzdGF0ID0gImNvdW50IikgKyAKICAgIGdlb21fdGV4dChzdGF0ID0gImNvdW50IiwgYWVzKGxhYmVsID0gLi5jb3VudC4uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9Li5jb3VudC4uKSwgCiAgICAgICAgICAgICAgdmp1c3Q9LTAuNSkgKyAKICAgIGZhY2V0X2dyaWQoLiB+IHByZXZpb3VzX3BhcnRpY2lwYXRpb24pICsgCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygxOjUpLCAKICAgICAgICAgICAgICAgICAgICAgZHJvcCA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMSIgPSAiMVxuU3Ryb25nbHlcbkRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiMiIsICIzIiA9ICIzIiwgIjQiID0gIjQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAiNVxuU3Ryb25nbHlcbkFncmVlIikpICsgCiAgICB5bGFiKCJDb3VudCIpICsgCiAgICBsYWJzKHRpdGxlID0gIuKAnEl0IGF0dHJhY3RzIHJlc2VhcmNoIGZ1bmRpbmcu4oCdIikKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdCwgYWVzKHggPSBmYWN0b3IoYWR2YW5jZXNfY2FyZWVyKSwgeSA9IC4uY291bnQuLikpICsgCiAgICBnZW9tX2JhcihzdGF0ID0gImNvdW50IikgKyAKICAgIGdlb21fdGV4dChzdGF0ID0gImNvdW50IiwgYWVzKGxhYmVsID0gLi5jb3VudC4uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9Li5jb3VudC4uKSwgCiAgICAgICAgICAgICAgdmp1c3Q9LTAuNSkgKyAKICAgIGZhY2V0X2dyaWQoLiB+IHByZXZpb3VzX3BhcnRpY2lwYXRpb24pICsgCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygxOjUpLCAKICAgICAgICAgICAgICAgICAgICAgZHJvcCA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMSIgPSAiMVxuU3Ryb25nbHlcbkRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiMiIsICIzIiA9ICIzIiwgIjQiID0gIjQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAiNVxuU3Ryb25nbHlcbkFncmVlIikpICsgCiAgICB5bGFiKCJDb3VudCIpICsgCiAgICBsYWJzKHRpdGxlID0gIuKAnEl0IGFkdmFuY2VzIG15IGNhcmVlci7igJ0iKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0LCBhZXMoeCA9IGZhY3RvcihmZWVsaW5nX2Vuam95bWVudCksIHkgPSAuLmNvdW50Li4pKSArIAogICAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIpICsgCiAgICBnZW9tX3RleHQoc3RhdCA9ICJjb3VudCIsIGFlcyhsYWJlbCA9IC4uY291bnQuLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PS4uY291bnQuLiksIAogICAgICAgICAgICAgIHZqdXN0PS0wLjUpICsgCiAgICBmYWNldF9ncmlkKC4gfiBwcmV2aW91c19wYXJ0aWNpcGF0aW9uKSArIAogICAgc2NhbGVfeF9kaXNjcmV0ZShuYW1lID0gTlVMTCwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMTo1KSwgCiAgICAgICAgICAgICAgICAgICAgIGRyb3AgPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjEiID0gIjFcblN0cm9uZ2x5XG5EaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIjIiLCAiMyIgPSAiMyIsICI0IiA9ICI0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIjVcblN0cm9uZ2x5XG5BZ3JlZSIpKSArIAogICAgeWxhYigiQ291bnQiKSArIAogICAgbGFicyh0aXRsZSA9ICLigJxJIGdldCBhIGZlZWxpbmcgb2YgZW5qb3ltZW50LuKAnSIpCmBgYAoKYGBge3J9CmdncGxvdChkYXQsIGFlcyh4ID0gZmFjdG9yKGpvYl9zYXRpc2ZhY3Rpb24pLCB5ID0gLi5jb3VudC4uKSkgKyAKICAgIGdlb21fYmFyKHN0YXQgPSAiY291bnQiKSArIAogICAgZ2VvbV90ZXh0KHN0YXQgPSAiY291bnQiLCBhZXMobGFiZWwgPSAuLmNvdW50Li4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT0uLmNvdW50Li4pLCAKICAgICAgICAgICAgICB2anVzdD0tMC41KSArIAogICAgZmFjZXRfZ3JpZCguIH4gcHJldmlvdXNfcGFydGljaXBhdGlvbikgKyAKICAgIHNjYWxlX3hfZGlzY3JldGUobmFtZSA9IE5VTEwsIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDE6NSksIAogICAgICAgICAgICAgICAgICAgICBkcm9wID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIxIiA9ICIxXG5TdHJvbmdseVxuRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICIyIiwgIjMiID0gIjMiLCAiNCIgPSAiNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICI1XG5TdHJvbmdseVxuQWdyZWUiKSkgKyAKICAgIHlsYWIoIkNvdW50IikgKyAKICAgIGxhYnModGl0bGUgPSAi4oCcSXQgZ2l2ZXMgbWUgam9iIHNhdGlzZmFjdGlvbi7igJ0iKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0LCBhZXMoeCA9IGZhY3Rvcihjb2xsYWJvcmF0aW9uX29wcG9ydHVuaXRpZXMpLCB5ID0gLi5jb3VudC4uKSkgKyAKICAgIGdlb21fYmFyKHN0YXQgPSAiY291bnQiKSArIAogICAgZ2VvbV90ZXh0KHN0YXQgPSAiY291bnQiLCBhZXMobGFiZWwgPSAuLmNvdW50Li4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT0uLmNvdW50Li4pLCAKICAgICAgICAgICAgICB2anVzdD0tMC41KSArIAogICAgZmFjZXRfZ3JpZCguIH4gcHJldmlvdXNfcGFydGljaXBhdGlvbikgKyAKICAgIHNjYWxlX3hfZGlzY3JldGUobmFtZSA9IE5VTEwsIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDE6NSksIAogICAgICAgICAgICAgICAgICAgICBkcm9wID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIxIiA9ICIxXG5TdHJvbmdseVxuRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICIyIiwgIjMiID0gIjMiLCAiNCIgPSAiNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICI1XG5TdHJvbmdseVxuQWdyZWUiKSkgKyAKICAgIHlsYWIoIkNvdW50IikgKyAKICAgIGxhYnModGl0bGUgPSAi4oCcSXQgaXMgYW4gb3Bwb3J0dW5pdHkgZm9yIG90aGVycyB0byBjb250YWN0IG1lIGZvciBjb2xsYWJvcmF0aXZlIHB1cnBvc2VzLuKAnSIpCmBgYAoKYGBge3J9CmdncGxvdChkYXQsIGFlcyh4ID0gZmFjdG9yKHJlc2VhcmNoX25ld193YXlzKSwgeSA9IC4uY291bnQuLikpICsgCiAgICBnZW9tX2JhcihzdGF0ID0gImNvdW50IikgKyAKICAgIGdlb21fdGV4dChzdGF0ID0gImNvdW50IiwgYWVzKGxhYmVsID0gLi5jb3VudC4uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9Li5jb3VudC4uKSwgCiAgICAgICAgICAgICAgdmp1c3Q9LTAuNSkgKyAKICAgIGZhY2V0X2dyaWQoLiB+IHByZXZpb3VzX3BhcnRpY2lwYXRpb24pICsgCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygxOjUpLCAKICAgICAgICAgICAgICAgICAgICAgZHJvcCA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMSIgPSAiMVxuU3Ryb25nbHlcbkRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiMiIsICIzIiA9ICIzIiwgIjQiID0gIjQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAiNVxuU3Ryb25nbHlcbkFncmVlIikpICsgCiAgICB5bGFiKCJDb3VudCIpICsgCiAgICBsYWJzKHRpdGxlID0gIuKAnEl0IHNoYXBlcyB0aGUgZGlyZWN0aW9uIG9mIG15IHJlc2VhcmNoIG9yIG1ha2VzIG1lIHRoaW5rIGFib3V0IGl0IGluIG5ldyB3YXlzLuKAnSIpCmBgYAoKYGBge3J9CmdncGxvdChkYXQsIGFlcyh4ID0gZmFjdG9yKG1ha2VzX2JldHRlcl9zY2llbnRpc3QpLCB5ID0gLi5jb3VudC4uKSkgKyAKICAgIGdlb21fYmFyKHN0YXQgPSAiY291bnQiKSArIAogICAgZ2VvbV90ZXh0KHN0YXQgPSAiY291bnQiLCBhZXMobGFiZWwgPSAuLmNvdW50Li4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT0uLmNvdW50Li4pLCAKICAgICAgICAgICAgICB2anVzdD0tMC41KSArIAogICAgZmFjZXRfZ3JpZCguIH4gcHJldmlvdXNfcGFydGljaXBhdGlvbikgKyAKICAgIHNjYWxlX3hfZGlzY3JldGUobmFtZSA9IE5VTEwsIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDE6NSksIAogICAgICAgICAgICAgICAgICAgICBkcm9wID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIxIiA9ICIxXG5TdHJvbmdseVxuRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICIyIiwgIjMiID0gIjMiLCAiNCIgPSAiNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICI1XG5TdHJvbmdseVxuQWdyZWUiKSkgKyAKICAgIHlsYWIoIkNvdW50IikgKyAKICAgIGxhYnModGl0bGUgPSAi4oCcSXQgbWFrZXMgbWUgYSBiZXR0ZXIgc2NpZW50aXN0LuKAnSIpCmBgYAoK