library(tidyverse)
library(tidyverse)
library(igraph)                    # This is the package to analyze the network
library(visNetwork)                # Creates visualizations of the network
library(DT)
library(plotly)

Steps to creating a survey and importing data to R

  1. Create survey with google forms
  2. Get survey link with “Send” button, and distribute link to survey respondents
  3. Go to “Reponses” tab and click google sheets icon to create spreadsheet for data
  4. Click “Share” button and copy shareable link
  5. In R Studio, use read_csv on the url and replace everything after final slash with: export?format=csv
my_survey <- read_csv("https://docs.google.com/spreadsheets/d/16Pg4U6jrjGN1rPcrzeAnLLYCQWwkZMgVYbPvoP-_sDw/export?format=csv")
Parsed with column specification:
cols(
  Timestamp = col_character(),
  `How proud are you to live in your neighborhood?` = col_character(),
  `How many of your neighbors do you know?` = col_character(),
  `How strong is the sense of community in your neighborhood?` = col_character(),
  `How often do you visit public parks in your neighborhood?` = col_character(),
  `Overall, how clean is your neighborhood?` = col_character(),
  `Overall, how safe do you feel in your neighborhood?` = col_character(),
  `How promising is the future of your neighborhood?` = col_character(),
  `How often do you participate in activities in your neighborhood?` = col_character(),
  `Have you ever witnessed a crime in your neighborhood?` = col_character(),
  `Do you think police do a good job with controlling crimes in your neighborhood` = col_character(),
  `How much confidence do you have in the capability of the police to protect you from crime?` = col_character(),
  `Do you consider your area a high, medium or low crime area?` = col_character(),
  `How frequently do you see police patrols in your area?` = col_character(),
  `Are you male or female` = col_character(),
  `What is the highest level of education you have completed` = col_character()
)
glimpse(my_survey)
Observations: 37
Variables: 16
$ Timestamp                                                                                    <chr> …
$ `How proud are you to live in your neighborhood?`                                            <chr> …
$ `How many of your neighbors do you know?`                                                    <chr> …
$ `How strong is the sense of community in your neighborhood?`                                 <chr> …
$ `How often do you visit public parks in your neighborhood?`                                  <chr> …
$ `Overall, how clean is your neighborhood?`                                                   <chr> …
$ `Overall, how safe do you feel in your neighborhood?`                                        <chr> …
$ `How promising is the future of your neighborhood?`                                          <chr> …
$ `How often do you participate in activities in your neighborhood?`                           <chr> …
$ `Have you ever witnessed a crime in your neighborhood?`                                      <chr> …
$ `Do you think police do a good job with controlling crimes in your neighborhood`             <chr> …
$ `How much confidence do you have in the capability of the police to protect you from crime?` <chr> …
$ `Do you consider your area a high, medium or low crime area?`                                <chr> …
$ `How frequently do you see police patrols in your area?`                                     <chr> …
$ `Are you male or female`                                                                     <chr> …
$ `What is the highest level of education you have completed`                                  <chr> …

You can rename the columns like this:

my_survey <- my_survey %>% 
  rename(gender = `Are you male or female`) %>%
  rename(education = `What is the highest level of education you have completed`) %>%
  rename(safe = `Overall, how safe do you feel in your neighborhood?`) %>%
  rename(clean = `Overall, how clean is your neighborhood?`) %>%
  rename(proud = `How proud are you to live in your neighborhood?`) %>%
  rename(police = `How frequently do you see police patrols in your area?`) %>%
  rename(witnessedcrime = `Have you ever witnessed a crime in your neighborhood?`) %>%
  rename(neighborsknown = `How many of your neighbors do you know?`) %>%
  rename(levels = `Do you consider your area a high, medium or low crime area?`) %>%
  rename(police2 = `How much confidence do you have in the capability of the police to protect you from crime?`)
glimpse(my_survey)
Observations: 37
Variables: 16
$ Timestamp                                                                        <chr> …
$ proud                                                                            <chr> …
$ neighborsknown                                                                   <chr> …
$ `How strong is the sense of community in your neighborhood?`                     <chr> …
$ `How often do you visit public parks in your neighborhood?`                      <chr> …
$ clean                                                                            <chr> …
$ safe                                                                             <chr> …
$ `How promising is the future of your neighborhood?`                              <chr> …
$ `How often do you participate in activities in your neighborhood?`               <chr> …
$ witnessedcrime                                                                   <chr> …
$ `Do you think police do a good job with controlling crimes in your neighborhood` <chr> …
$ police2                                                                          <chr> …
$ levels                                                                           <chr> …
$ police                                                                           <chr> …
$ gender                                                                           <chr> …
$ education                                                                        <chr> …

You won’t be able to get the mean of shy until you recode the responses as numbers.

mean(my_survey$`clean`)
[1] NA

You can recode the verbal labels to numbers, and tell R to treat them as numbers, with this code:

my_survey <- my_survey %>% 
  mutate(proud = as.numeric(recode(proud,
                      "Extreemly proud" = "5",
                      "Very proud" = "4",
                      "Somewhat proud" = "3",
                      "Not so proud" = "2",
                      "Not proud at all" = "1")))
my_survey <- my_survey %>% 
  mutate(neighborsknown = as.numeric(recode(neighborsknown,
                      "All of them" = "5",
                      "Most of them" = "4",
                      "About half of them" = "3",
                      "A few of them" = "2",
                      "None of them" = "1")))
my_survey <- my_survey %>% 
  mutate(clean = as.numeric(recode(clean,
                      "Extreemly clean" = "5",
                      "Very clean" = "4",
                      "Somewhat clean" = "3",
                      "Not so clean" = "2",
                      "Not clean at all" = "1")))
NAs introduced by coercion
my_survey <- my_survey %>% 
  mutate(police = as.numeric(recode(police,
                      "I am extremely confident about the police protecting me from a crime" = "5",
                      "I am vey confident about the police protecting me from a crime" = "4",
                      "I am somewhat confident about the police protecting me from a crime" = "3",
                      "I am not confident about the police protecting me from a crime" = "2",
                      "I dont know" = "1")))
NAs introduced by coercion
my_survey <- my_survey %>% 
  mutate(education = as.numeric(recode(education,
                      "College and above" = "5",
                      "Highschool" = "4",
                      "Middle school" = "3",
                      "Elementary school" = "2",
                      "No formal schooling" = "1")))
my_survey %>% 
  plot_ly(x = ~gender) %>% 
  add_histogram()
my_survey %>% 
  plot_ly(x = ~proud) %>% 
  add_histogram()
my_survey %>% 
  plot_ly(x = ~clean) %>% 
  add_histogram()
Ignoring 8 observationsIgnoring 8 observations
my_survey %>% 
  count(clean)
my_survey %>% 
  count(safe)
my_survey %>% 
  count(police)
my_survey %>% 
  drop_na(clean) %>% 
  ggplot(aes(x = safe, fill = clean)) +
  geom_bar( position = "fill" ) + scale_fill_viridis_d() + coord_flip()

my_survey %>% 
  drop_na(safe) %>% 
  ggplot(aes(x = safe)) +
  geom_bar()

my_survey %>% 
  drop_na(clean) %>% 
  ggplot(aes(x = clean)) +
  geom_bar() +
  facet_wrap(vars(safe)) +
  coord_flip() +
  theme_minimal() +
  labs(y = "How safe you feel in your neighborhood", 
       x = "How clean is your neighborhood", 
       title = "Safe Vs Clean")

my_survey %>% 
  drop_na(proud) %>% 
  ggplot(aes(x = proud)) +
  geom_bar() +
  facet_wrap(vars(safe)) +
  coord_flip() +
  theme_minimal() +
  labs(y = "How safe you feel", 
       x = "How proud you are", 
       title = "Safe Vs proud")

my_survey %>% 
  drop_na(police) %>% 
  ggplot(aes(x = police)) +
  geom_bar() +
  facet_wrap(vars(safe)) +
  coord_flip() +
  theme_minimal() +
  labs(y = "How offten do you see poice ", 
       x = "How safe you feel in your neighborhood", 
       title = "Safe Vs police")

my_survey %>% 
  drop_na(police) %>% 
  ggplot(aes(x = safe, fill = clean)) +
  geom_bar( position = "fill" ) + scale_fill_viridis_d() + coord_flip()

my_survey %>% 
  drop_na(safe) %>% 
  ggplot(aes(x = safe)) +
  geom_bar() +
  facet_wrap(vars(police2)) +
  coord_flip() +
  theme_minimal() +
  labs(y = "How offten do you see police ", 
       x = "How safe you feel in your neighborhood", 
       title = "Safe Vs confidence in police")

my_survey %>% 
  count(education, proud)
my_survey %>% 
  drop_na(education) %>% 
  ggplot(aes(x = education)) +
  geom_bar()

my_survey %>% 
  drop_na(education) %>% 
  ggplot(aes(x = education)) +
  geom_bar() +
  facet_wrap(vars(proud)) +
  coord_flip() +
  theme_minimal() +
  labs(y = "How Proud to live in your neighborhood ", 
       x = "Highschool/ College level", 
       title = "Facebook Users Vs Schooling")

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShpZ3JhcGgpICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdGhlIHBhY2thZ2UgdG8gYW5hbHl6ZSB0aGUgbmV0d29yawpsaWJyYXJ5KHZpc05ldHdvcmspICAgICAgICAgICAgICAgICMgQ3JlYXRlcyB2aXN1YWxpemF0aW9ucyBvZiB0aGUgbmV0d29yawpsaWJyYXJ5KERUKQpsaWJyYXJ5KHBsb3RseSkKYGBgCgpTdGVwcyB0byBjcmVhdGluZyBhIHN1cnZleSBhbmQgaW1wb3J0aW5nIGRhdGEgdG8gUgoKMS4gQ3JlYXRlIHN1cnZleSB3aXRoIGdvb2dsZSBmb3JtcwoyLiBHZXQgc3VydmV5IGxpbmsgd2l0aCAiU2VuZCIgYnV0dG9uLCBhbmQgZGlzdHJpYnV0ZSBsaW5rIHRvIHN1cnZleSByZXNwb25kZW50cyAKMi4gR28gdG8gIlJlcG9uc2VzIiB0YWIgYW5kIGNsaWNrIGdvb2dsZSBzaGVldHMgaWNvbiB0byBjcmVhdGUgc3ByZWFkc2hlZXQgZm9yIGRhdGEKMy4gQ2xpY2sgIlNoYXJlIiBidXR0b24gYW5kIGNvcHkgc2hhcmVhYmxlIGxpbmsKNC4gSW4gUiBTdHVkaW8sIHVzZSByZWFkX2NzdiBvbiB0aGUgdXJsIGFuZCByZXBsYWNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgZmluYWwgc2xhc2ggd2l0aDogZXhwb3J0P2Zvcm1hdD1jc3YKCmBgYHtyfQpteV9zdXJ2ZXkgPC0gcmVhZF9jc3YoImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzE2UGc0VTZqcmpHTjFyUGNyemVBbkxMWUNRV3drWk1nVlliUHZvUC1fc0R3L2V4cG9ydD9mb3JtYXQ9Y3N2IikKYGBgCgpgYGB7cn0KZ2xpbXBzZShteV9zdXJ2ZXkpCmBgYAoKCllvdSBjYW4gcmVuYW1lIHRoZSBjb2x1bW5zIGxpa2UgdGhpczoKYGBge3J9Cm15X3N1cnZleSA8LSBteV9zdXJ2ZXkgJT4lIAogIHJlbmFtZShnZW5kZXIgPSBgQXJlIHlvdSBtYWxlIG9yIGZlbWFsZWApICU+JQogIHJlbmFtZShlZHVjYXRpb24gPSBgV2hhdCBpcyB0aGUgaGlnaGVzdCBsZXZlbCBvZiBlZHVjYXRpb24geW91IGhhdmUgY29tcGxldGVkYCkgJT4lCiAgcmVuYW1lKHNhZmUgPSBgT3ZlcmFsbCwgaG93IHNhZmUgZG8geW91IGZlZWwgaW4geW91ciBuZWlnaGJvcmhvb2Q/YCkgJT4lCiAgcmVuYW1lKGNsZWFuID0gYE92ZXJhbGwsIGhvdyBjbGVhbiBpcyB5b3VyIG5laWdoYm9yaG9vZD9gKSAlPiUKICByZW5hbWUocHJvdWQgPSBgSG93IHByb3VkIGFyZSB5b3UgdG8gbGl2ZSBpbiB5b3VyIG5laWdoYm9yaG9vZD9gKSAlPiUKICByZW5hbWUocG9saWNlID0gYEhvdyBmcmVxdWVudGx5IGRvIHlvdSBzZWUgcG9saWNlIHBhdHJvbHMgaW4geW91ciBhcmVhP2ApICU+JQogIHJlbmFtZSh3aXRuZXNzZWRjcmltZSA9IGBIYXZlIHlvdSBldmVyIHdpdG5lc3NlZCBhIGNyaW1lIGluIHlvdXIgbmVpZ2hib3Job29kP2ApICU+JQogIHJlbmFtZShuZWlnaGJvcnNrbm93biA9IGBIb3cgbWFueSBvZiB5b3VyIG5laWdoYm9ycyBkbyB5b3Uga25vdz9gKSAlPiUKICByZW5hbWUobGV2ZWxzID0gYERvIHlvdSBjb25zaWRlciB5b3VyIGFyZWEgYSBoaWdoLCBtZWRpdW0gb3IgbG93IGNyaW1lIGFyZWE/YCkgJT4lCiAgcmVuYW1lKHBvbGljZTIgPSBgSG93IG11Y2ggY29uZmlkZW5jZSBkbyB5b3UgaGF2ZSBpbiB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgcG9saWNlIHRvIHByb3RlY3QgeW91IGZyb20gY3JpbWU/YCkKYGBgCgpgYGB7cn0KZ2xpbXBzZShteV9zdXJ2ZXkpCmBgYAoKCllvdSB3b24ndCBiZSBhYmxlIHRvIGdldCB0aGUgbWVhbiBvZiBzaHkgdW50aWwgeW91IHJlY29kZSB0aGUgcmVzcG9uc2VzIGFzIG51bWJlcnMuCmBgYHtyfQptZWFuKG15X3N1cnZleSRgY2xlYW5gKQpgYGAKCllvdSBjYW4gcmVjb2RlIHRoZSB2ZXJiYWwgbGFiZWxzIHRvIG51bWJlcnMsIGFuZCB0ZWxsIFIgdG8gdHJlYXQgdGhlbSBhcyBudW1iZXJzLCB3aXRoIHRoaXMgY29kZToKYGBge3J9Cm15X3N1cnZleSA8LSBteV9zdXJ2ZXkgJT4lIAogIG11dGF0ZShwcm91ZCA9IGFzLm51bWVyaWMocmVjb2RlKHByb3VkLAogICAgICAgICAgICAgICAgICAgICAgIkV4dHJlZW1seSBwcm91ZCIgPSAiNSIsCiAgICAgICAgICAgICAgICAgICAgICAiVmVyeSBwcm91ZCIgPSAiNCIsCiAgICAgICAgICAgICAgICAgICAgICAiU29tZXdoYXQgcHJvdWQiID0gIjMiLAogICAgICAgICAgICAgICAgICAgICAgIk5vdCBzbyBwcm91ZCIgPSAiMiIsCiAgICAgICAgICAgICAgICAgICAgICAiTm90IHByb3VkIGF0IGFsbCIgPSAiMSIpKSkKYGBgCgoKYGBge3J9Cm15X3N1cnZleSA8LSBteV9zdXJ2ZXkgJT4lIAogIG11dGF0ZShuZWlnaGJvcnNrbm93biA9IGFzLm51bWVyaWMocmVjb2RlKG5laWdoYm9yc2tub3duLAogICAgICAgICAgICAgICAgICAgICAgIkFsbCBvZiB0aGVtIiA9ICI1IiwKICAgICAgICAgICAgICAgICAgICAgICJNb3N0IG9mIHRoZW0iID0gIjQiLAogICAgICAgICAgICAgICAgICAgICAgIkFib3V0IGhhbGYgb2YgdGhlbSIgPSAiMyIsCiAgICAgICAgICAgICAgICAgICAgICAiQSBmZXcgb2YgdGhlbSIgPSAiMiIsCiAgICAgICAgICAgICAgICAgICAgICAiTm9uZSBvZiB0aGVtIiA9ICIxIikpKQpgYGAKCgoKYGBge3J9Cm15X3N1cnZleSA8LSBteV9zdXJ2ZXkgJT4lIAogIG11dGF0ZShjbGVhbiA9IGFzLm51bWVyaWMocmVjb2RlKGNsZWFuLAogICAgICAgICAgICAgICAgICAgICAgIkV4dHJlZW1seSBjbGVhbiIgPSAiNSIsCiAgICAgICAgICAgICAgICAgICAgICAiVmVyeSBjbGVhbiIgPSAiNCIsCiAgICAgICAgICAgICAgICAgICAgICAiU29tZXdoYXQgY2xlYW4iID0gIjMiLAogICAgICAgICAgICAgICAgICAgICAgIk5vdCBzbyBjbGVhbiIgPSAiMiIsCiAgICAgICAgICAgICAgICAgICAgICAiTm90IGNsZWFuIGF0IGFsbCIgPSAiMSIpKSkKYGBgCmBgYHtyfQpteV9zdXJ2ZXkgPC0gbXlfc3VydmV5ICU+JSAKICBtdXRhdGUocG9saWNlID0gYXMubnVtZXJpYyhyZWNvZGUocG9saWNlLAogICAgICAgICAgICAgICAgICAgICAgIkkgYW0gZXh0cmVtZWx5IGNvbmZpZGVudCBhYm91dCB0aGUgcG9saWNlIHByb3RlY3RpbmcgbWUgZnJvbSBhIGNyaW1lIiA9ICI1IiwKICAgICAgICAgICAgICAgICAgICAgICJJIGFtIHZleSBjb25maWRlbnQgYWJvdXQgdGhlIHBvbGljZSBwcm90ZWN0aW5nIG1lIGZyb20gYSBjcmltZSIgPSAiNCIsCiAgICAgICAgICAgICAgICAgICAgICAiSSBhbSBzb21ld2hhdCBjb25maWRlbnQgYWJvdXQgdGhlIHBvbGljZSBwcm90ZWN0aW5nIG1lIGZyb20gYSBjcmltZSIgPSAiMyIsCiAgICAgICAgICAgICAgICAgICAgICAiSSBhbSBub3QgY29uZmlkZW50IGFib3V0IHRoZSBwb2xpY2UgcHJvdGVjdGluZyBtZSBmcm9tIGEgY3JpbWUiID0gIjIiLAogICAgICAgICAgICAgICAgICAgICAgIkkgZG9udCBrbm93IiA9ICIxIikpKQpgYGAKCmBgYHtyfQpteV9zdXJ2ZXkgPC0gbXlfc3VydmV5ICU+JSAKICBtdXRhdGUoZWR1Y2F0aW9uID0gYXMubnVtZXJpYyhyZWNvZGUoZWR1Y2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgIkNvbGxlZ2UgYW5kIGFib3ZlIiA9ICI1IiwKICAgICAgICAgICAgICAgICAgICAgICJIaWdoc2Nob29sIiA9ICI0IiwKICAgICAgICAgICAgICAgICAgICAgICJNaWRkbGUgc2Nob29sIiA9ICIzIiwKICAgICAgICAgICAgICAgICAgICAgICJFbGVtZW50YXJ5IHNjaG9vbCIgPSAiMiIsCiAgICAgICAgICAgICAgICAgICAgICAiTm8gZm9ybWFsIHNjaG9vbGluZyIgPSAiMSIpKSkKYGBgCgoKCgpgYGB7cn0KbXlfc3VydmV5ICU+JSAKICBwbG90X2x5KHggPSB+Z2VuZGVyKSAlPiUgCiAgYWRkX2hpc3RvZ3JhbSgpCmBgYAoKYGBge3J9Cm15X3N1cnZleSAlPiUgCiAgcGxvdF9seSh4ID0gfnByb3VkKSAlPiUgCiAgYWRkX2hpc3RvZ3JhbSgpCmBgYAoKCmBgYHtyfQpteV9zdXJ2ZXkgJT4lIAogIHBsb3RfbHkoeCA9IH5jbGVhbikgJT4lIAogIGFkZF9oaXN0b2dyYW0oKQpgYGAKCgoKCmBgYHtyfQpteV9zdXJ2ZXkgJT4lIAogIGNvdW50KGNsZWFuKQpgYGAKCmBgYHtyfQpteV9zdXJ2ZXkgJT4lIAogIGNvdW50KHNhZmUpCmBgYAoKCgpgYGB7cn0KbXlfc3VydmV5ICU+JSAKICBjb3VudChwb2xpY2UpCmBgYAoKCgoKCgoKCmBgYHtyfQpteV9zdXJ2ZXkgJT4lIAogIGRyb3BfbmEoY2xlYW4pICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBzYWZlLCBmaWxsID0gY2xlYW4pKSArCiAgZ2VvbV9iYXIoIHBvc2l0aW9uID0gImZpbGwiICkgKyBzY2FsZV9maWxsX3ZpcmlkaXNfZCgpICsgY29vcmRfZmxpcCgpCmBgYAoKCgpgYGB7cn0KbXlfc3VydmV5ICU+JSAKICBkcm9wX25hKHNhZmUpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBzYWZlKSkgKwogIGdlb21fYmFyKCkKYGBgCgoKYGBge3J9Cm15X3N1cnZleSAlPiUgCiAgZHJvcF9uYShjbGVhbikgJT4lIAogIGdncGxvdChhZXMoeCA9IGNsZWFuKSkgKwogIGdlb21fYmFyKCkgKwogIGZhY2V0X3dyYXAodmFycyhzYWZlKSkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHkgPSAiSG93IHNhZmUgeW91IGZlZWwgaW4geW91ciBuZWlnaGJvcmhvb2QiLCAKICAgICAgIHggPSAiSG93IGNsZWFuIGlzIHlvdXIgbmVpZ2hib3Job29kIiwgCiAgICAgICB0aXRsZSA9ICJTYWZlIFZzIENsZWFuIikKYGBgCgoKYGBge3J9Cm15X3N1cnZleSAlPiUgCiAgZHJvcF9uYShwcm91ZCkgJT4lIAogIGdncGxvdChhZXMoeCA9IHByb3VkKSkgKwogIGdlb21fYmFyKCkgKwogIGZhY2V0X3dyYXAodmFycyhzYWZlKSkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHkgPSAiSG93IHNhZmUgeW91IGZlZWwiLCAKICAgICAgIHggPSAiSG93IHByb3VkIHlvdSBhcmUiLCAKICAgICAgIHRpdGxlID0gIlNhZmUgVnMgcHJvdWQiKQpgYGAKCgpgYGB7cn0KbXlfc3VydmV5ICU+JSAKICBkcm9wX25hKHBvbGljZSkgJT4lIAogIGdncGxvdChhZXMoeCA9IHBvbGljZSkpICsKICBnZW9tX2JhcigpICsKICBmYWNldF93cmFwKHZhcnMoc2FmZSkpICsKICBjb29yZF9mbGlwKCkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh5ID0gIkhvdyBvZmZ0ZW4gZG8geW91IHNlZSBwb2ljZSAiLCAKICAgICAgIHggPSAiSG93IHNhZmUgeW91IGZlZWwgaW4geW91ciBuZWlnaGJvcmhvb2QiLCAKICAgICAgIHRpdGxlID0gIlNhZmUgVnMgcG9saWNlIikKYGBgCgoKYGBge3J9Cm15X3N1cnZleSAlPiUgCiAgZHJvcF9uYShwb2xpY2UpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBzYWZlLCBmaWxsID0gY2xlYW4pKSArCiAgZ2VvbV9iYXIoIHBvc2l0aW9uID0gImZpbGwiICkgKyBzY2FsZV9maWxsX3ZpcmlkaXNfZCgpICsgY29vcmRfZmxpcCgpCmBgYAoKCgpgYGB7cn0KbXlfc3VydmV5ICU+JSAKICBkcm9wX25hKHNhZmUpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBzYWZlKSkgKwogIGdlb21fYmFyKCkgKwogIGZhY2V0X3dyYXAodmFycyhwb2xpY2UyKSkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHkgPSAiSG93IG9mZnRlbiBkbyB5b3Ugc2VlIHBvbGljZSAiLCAKICAgICAgIHggPSAiSG93IHNhZmUgeW91IGZlZWwgaW4geW91ciBuZWlnaGJvcmhvb2QiLCAKICAgICAgIHRpdGxlID0gIlNhZmUgVnMgY29uZmlkZW5jZSBpbiBwb2xpY2UiKQpgYGAKCgpgYGB7cn0KbXlfc3VydmV5ICU+JSAKICBjb3VudChlZHVjYXRpb24sIHByb3VkKQpgYGAKCgpgYGB7cn0KbXlfc3VydmV5ICU+JSAKICBkcm9wX25hKGVkdWNhdGlvbikgJT4lIAogIGdncGxvdChhZXMoeCA9IGVkdWNhdGlvbikpICsKICBnZW9tX2JhcigpCmBgYAoKCmBgYHtyfQpteV9zdXJ2ZXkgJT4lIAogIGRyb3BfbmEoZWR1Y2F0aW9uKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gZWR1Y2F0aW9uKSkgKwogIGdlb21fYmFyKCkgKwogIGZhY2V0X3dyYXAodmFycyhwcm91ZCkpICsKICBjb29yZF9mbGlwKCkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh5ID0gIkhvdyBQcm91ZCB0byBsaXZlIGluIHlvdXIgbmVpZ2hib3Job29kICIsIAogICAgICAgeCA9ICJIaWdoc2Nob29sLyBDb2xsZWdlIGxldmVsIiwgCiAgICAgICB0aXRsZSA9ICJGYWNlYm9vayBVc2VycyBWcyBTY2hvb2xpbmciKQpgYGAKCgoKCg==