I read the Medium post Introducing geniusR a while ago and gave it a try. Since then this package has become the genius package, without the R. This package give access to the genius website so we can load song lyrics into R. This package does not require an API key.

Alternatively: There are other packages that could be used to download song lyrics and other packages to download other information about songs. But they all seem to require registering to obtain an API keys.

  1. The geniusr package is an alternative to the genius package. Notice this is a different package then the package with a captial R, that became the genius package.
  2. The discogger package can be installed from github. It can be used to download songs from the discogs website.
  3. The spotifyr can be used to connect to the Spotify API.
library(pacman)
p_load(genius, tidyverse, tidytext, tm, wordcloud)
Jimi_Are_You_Experienced <- genius_album(artist = "The Jimi Hendrix Experience", 
                                         album = "Are You Experienced [US Version]")
Joining, by = c("track_title", "track_n", "track_url")
Jimi_Are_You_Experienced
Jimi_songs <- Jimi_Are_You_Experienced %>% select(track_title) %>%
  group_by(track_title) %>%
  summarise(lines = n())
Jimi_songs2 <- Jimi_songs %>% 
  select(track_title)
Jimi_songs2
par(mfrow=c(3,4))
Jimi_lyric <- Jimi_Are_You_Experienced %>% filter(track_title=="Are You Experienced?") %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% filter(track_title=="Fire") %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% filter(track_title=="Foxy Lady") %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% filter(track_title=="Hey Joe") %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% filter(track_title=="I Don't Live Today") %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% filter(track_title=="Love or Confusion") %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% filter(track_title=="Manic Depression") %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% filter(track_title=="May This Be Love") %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% filter(track_title=="Purple Haze") %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% filter(track_title=="The Wind Cries Mary") %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% filter(track_title=="Third Stone from the Sun") %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))
Jimi_lyric <- Jimi_Are_You_Experienced %>% 
  select(lyric) %>%
  unnest_tokens(word, lyric) %>%
  count(word, sort = TRUE) %>%
  with(wordcloud(word, n))

third_stone <- genius_lyrics(artist = "The Jimi Hendrix Experience", song = "Third Stone From The Sun")
third_stone
The_Beatles_td <- genius_album(artist = "The Beatles", album = "Let It Be")
Joining, by = c("track_title", "track_n", "track_url")
The_Beatles_td
The_Beatles_td %>% filter(track_n == 6)
The_Beatles_Let_It_be <- genius_lyrics(artist = "The Beatles", song = "Let It Be")
The_Beatles_Let_It_be
The_Beatles_Let_It_be_td <- The_Beatles_Let_It_be %>% 
                                    select(lyric, track_title) %>% 
                                    unnest_tokens(word, lyric)
The_Beatles_Let_It_be_td
The_Beatles_Let_It_be_sentiments <- The_Beatles_Let_It_be_td %>%
     inner_join(get_sentiments("bing"), by = c(word = "word"))
The_Beatles_Let_It_be_sentiments
The_Beatles_Let_It_be_sentiments %>%
  count(sentiment, word) %>%
  ungroup() %>%
  mutate(n = ifelse(sentiment == "negative", -n, n)) %>%
  mutate(word = reorder(word, n)) %>%
  ggplot(aes(word, n, fill = sentiment)) +
  geom_bar(stat = "identity") +
  ylab("Contribution to sentiment") +
  coord_flip()

The_Beatles_Let_It_be_dtm <- The_Beatles_Let_It_be_td %>%
  count(track_title, word) %>%
  cast_dtm(track_title, word, n)
The_Beatles_Let_It_be_dtm
<<DocumentTermMatrix (documents: 1, terms: 63)>>
Non-/sparse entries: 63/0
Sparsity           : 0%
Maximal term length: NA
Weighting          : term frequency (tf)
Terms(The_Beatles_Let_It_be_dtm)
 [1] "a"             "agree"         "an"            "and"           "answer"        "be"            "brokenhearted"
 [8] "chance"        "cloudy"        "comes"         "darkness"      "find"          "for"           "front"        
[15] "hour"          "i"             "in"            "is"            "it"            "let"           "light"        
[22] "living"        "mary"          "may"           "me"            "mother"        "music"         "my"           
[29] "myself"        "night"         "of"            "on"            "parted"        "people"        "right"        
[36] "see"           "she"           "shine"         "shines"        "sound"         "speaking"      "standing"     
[43] "still"         "that"          "the"           "there"         "they"          "though"        "til"          
[50] "times"         "to"            "tomorrow"      "trouble"       "up"            "wake"          "when"         
[57] "whisper"       "will"          "wisdom"        "words"         "world"         "yeah"          NA             
tidy(The_Beatles_Let_It_be_dtm)
# Example with 2 different artists and albums
artist_albums <- tribble(
 ~artist, ~album,
 "The Beatles", "Let It Be",
 "The Jimi Hendrix Experience", "Are You Experienced [US Version]"
)
artist_albums
albums_td <- artist_albums %>%
 add_genius(artist, album)
Joining, by = c("track_title", "track_n", "track_url")
LS0tCnRpdGxlOiAiZ2VuaXVzIEV4YW1wbGUgd2l0aCBKaW1pIEhlbmRyaXggYW5kIHRoZSBCZWF0bGVzIgpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHdvcmRfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgpJIHJlYWQgdGhlIE1lZGl1bSBwb3N0IFtJbnRyb2R1Y2luZyBnZW5pdXNSXShodHRwczovL21lZGl1bS5jb20vQEpvc2lhaFBhcnJ5L2ludHJvZHVjaW5nLWdlbml1c3ItYjAxNzdjZTdiNGQ3KSBhIHdoaWxlIGFnbyBhbmQgZ2F2ZSBpdCBhIHRyeS4gIFNpbmNlIHRoZW4gdGhpcyBwYWNrYWdlIGhhcyBiZWNvbWUgdGhlIFtnZW5pdXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9Kb3NpYWhQYXJyeS9nZW5pdXMpIHBhY2thZ2UsIHdpdGhvdXQgdGhlIFIuICBUaGlzIHBhY2thZ2UgZ2l2ZSBhY2Nlc3MgdG8gdGhlIFtnZW5pdXNdKGh0dHBzOi8vZ2VuaXVzLmNvbS8pIHdlYnNpdGUgc28gd2UgY2FuIGxvYWQgc29uZyBseXJpY3MgaW50byBSLiAgVGhpcyBwYWNrYWdlIGRvZXMgbm90IHJlcXVpcmUgYW4gQVBJIGtleS4KCioqQWx0ZXJuYXRpdmVseToqKiAgVGhlcmUgYXJlIG90aGVyIHBhY2thZ2VzIHRoYXQgY291bGQgYmUgdXNlZCB0byBkb3dubG9hZCBzb25nIGx5cmljcyBhbmQgb3RoZXIgcGFja2FnZXMgdG8gZG93bmxvYWQgb3RoZXIgaW5mb3JtYXRpb24gYWJvdXQgc29uZ3MuICBCdXQgdGhleSBhbGwgc2VlbSB0byByZXF1aXJlIHJlZ2lzdGVyaW5nIHRvIG9idGFpbiBhbiBBUEkga2V5cy4KCjEuIFRoZSBbZ2VuaXVzcl0oKSBwYWNrYWdlIGlzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBbZ2VuaXVzXShodHRwczovL2dpdGh1Yi5jb20vSm9zaWFoUGFycnkvZ2VuaXVzKSBwYWNrYWdlLiAgTm90aWNlIHRoaXMgaXMgYSBkaWZmZXJlbnQgcGFja2FnZSB0aGVuIHRoZSBwYWNrYWdlIHdpdGggYSBjYXB0aWFsIFIsIHRoYXQgYmVjYW1lIHRoZSBnZW5pdXMgcGFja2FnZS4KMi4gVGhlIFtkaXNjb2dnZXJdKGh0dHBzOi8vZXdlbm1lLmdpdGh1Yi5pby9kaXNjb2dnZXIvKSBwYWNrYWdlIGNhbiBiZSBpbnN0YWxsZWQgZnJvbSBnaXRodWIuICBJdCBjYW4gYmUgdXNlZCB0byBkb3dubG9hZCBzb25ncyBmcm9tIHRoZSBbZGlzY29nc10oaHR0cHM6Ly93d3cuZGlzY29ncy5jb20vKSB3ZWJzaXRlLgozLiBUaGUgW3Nwb3RpZnlyXShodHRwczovL3d3dy5yY2hhcmxpZS5jb20vc3BvdGlmeXIvKSBjYW4gYmUgdXNlZCB0byBjb25uZWN0IHRvIHRoZSBbU3BvdGlmeV0oaHR0cHM6Ly93d3cuc3BvdGlmeS5jb20vdXMvKSBBUEkuCgpgYGB7cn0KbGlicmFyeShwYWNtYW4pCgpwX2xvYWQoZ2VuaXVzLCB0aWR5dmVyc2UsIHRpZHl0ZXh0LCB0bSwgd29yZGNsb3VkKQpgYGAKCgpgYGB7cn0KSmltaV9BcmVfWW91X0V4cGVyaWVuY2VkIDwtIGdlbml1c19hbGJ1bShhcnRpc3QgPSAiVGhlIEppbWkgSGVuZHJpeCBFeHBlcmllbmNlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxidW0gPSAiQXJlIFlvdSBFeHBlcmllbmNlZCBbVVMgVmVyc2lvbl0iKQpKaW1pX0FyZV9Zb3VfRXhwZXJpZW5jZWQKYGBgCgpgYGB7cn0KSmltaV9zb25ncyA8LSBKaW1pX0FyZV9Zb3VfRXhwZXJpZW5jZWQgJT4lIHNlbGVjdCh0cmFja190aXRsZSkgJT4lCiAgZ3JvdXBfYnkodHJhY2tfdGl0bGUpICU+JQogIHN1bW1hcmlzZShsaW5lcyA9IG4oKSkKYGBgCgpgYGB7cn0KSmltaV9zb25nczIgPC0gSmltaV9zb25ncyAlPiUgCiAgc2VsZWN0KHRyYWNrX3RpdGxlKQpKaW1pX3NvbmdzMgpgYGAKCmBgYHtyLCB3YXJuaW5nPUZBTFNFfQpwYXIobWZyb3c9YygzLDQpKQoKSmltaV9seXJpYyA8LSBKaW1pX0FyZV9Zb3VfRXhwZXJpZW5jZWQgJT4lIGZpbHRlcih0cmFja190aXRsZT09IkFyZSBZb3UgRXhwZXJpZW5jZWQ/IikgJT4lIAogIHNlbGVjdChseXJpYykgJT4lCiAgdW5uZXN0X3Rva2Vucyh3b3JkLCBseXJpYykgJT4lCiAgY291bnQod29yZCwgc29ydCA9IFRSVUUpICU+JQogIHdpdGgod29yZGNsb3VkKHdvcmQsIG4pKQpKaW1pX2x5cmljIDwtIEppbWlfQXJlX1lvdV9FeHBlcmllbmNlZCAlPiUgZmlsdGVyKHRyYWNrX3RpdGxlPT0iRmlyZSIpICU+JSAKICBzZWxlY3QobHlyaWMpICU+JQogIHVubmVzdF90b2tlbnMod29yZCwgbHlyaWMpICU+JQogIGNvdW50KHdvcmQsIHNvcnQgPSBUUlVFKSAlPiUKICB3aXRoKHdvcmRjbG91ZCh3b3JkLCBuKSkKSmltaV9seXJpYyA8LSBKaW1pX0FyZV9Zb3VfRXhwZXJpZW5jZWQgJT4lIGZpbHRlcih0cmFja190aXRsZT09IkZveHkgTGFkeSIpICU+JSAKICBzZWxlY3QobHlyaWMpICU+JQogIHVubmVzdF90b2tlbnMod29yZCwgbHlyaWMpICU+JQogIGNvdW50KHdvcmQsIHNvcnQgPSBUUlVFKSAlPiUKICB3aXRoKHdvcmRjbG91ZCh3b3JkLCBuKSkKSmltaV9seXJpYyA8LSBKaW1pX0FyZV9Zb3VfRXhwZXJpZW5jZWQgJT4lIGZpbHRlcih0cmFja190aXRsZT09IkhleSBKb2UiKSAlPiUgCiAgc2VsZWN0KGx5cmljKSAlPiUKICB1bm5lc3RfdG9rZW5zKHdvcmQsIGx5cmljKSAlPiUKICBjb3VudCh3b3JkLCBzb3J0ID0gVFJVRSkgJT4lCiAgd2l0aCh3b3JkY2xvdWQod29yZCwgbikpCgoKSmltaV9seXJpYyA8LSBKaW1pX0FyZV9Zb3VfRXhwZXJpZW5jZWQgJT4lIGZpbHRlcih0cmFja190aXRsZT09IkkgRG9uJ3QgTGl2ZSBUb2RheSIpICU+JSAKICBzZWxlY3QobHlyaWMpICU+JQogIHVubmVzdF90b2tlbnMod29yZCwgbHlyaWMpICU+JQogIGNvdW50KHdvcmQsIHNvcnQgPSBUUlVFKSAlPiUKICB3aXRoKHdvcmRjbG91ZCh3b3JkLCBuKSkKSmltaV9seXJpYyA8LSBKaW1pX0FyZV9Zb3VfRXhwZXJpZW5jZWQgJT4lIGZpbHRlcih0cmFja190aXRsZT09IkxvdmUgb3IgQ29uZnVzaW9uIikgJT4lIAogIHNlbGVjdChseXJpYykgJT4lCiAgdW5uZXN0X3Rva2Vucyh3b3JkLCBseXJpYykgJT4lCiAgY291bnQod29yZCwgc29ydCA9IFRSVUUpICU+JQogIHdpdGgod29yZGNsb3VkKHdvcmQsIG4pKQpKaW1pX2x5cmljIDwtIEppbWlfQXJlX1lvdV9FeHBlcmllbmNlZCAlPiUgZmlsdGVyKHRyYWNrX3RpdGxlPT0iTWFuaWMgRGVwcmVzc2lvbiIpICU+JSAKICBzZWxlY3QobHlyaWMpICU+JQogIHVubmVzdF90b2tlbnMod29yZCwgbHlyaWMpICU+JQogIGNvdW50KHdvcmQsIHNvcnQgPSBUUlVFKSAlPiUKICB3aXRoKHdvcmRjbG91ZCh3b3JkLCBuKSkKSmltaV9seXJpYyA8LSBKaW1pX0FyZV9Zb3VfRXhwZXJpZW5jZWQgJT4lIGZpbHRlcih0cmFja190aXRsZT09Ik1heSBUaGlzIEJlIExvdmUiKSAlPiUgCiAgc2VsZWN0KGx5cmljKSAlPiUKICB1bm5lc3RfdG9rZW5zKHdvcmQsIGx5cmljKSAlPiUKICBjb3VudCh3b3JkLCBzb3J0ID0gVFJVRSkgJT4lCiAgd2l0aCh3b3JkY2xvdWQod29yZCwgbikpCgpKaW1pX2x5cmljIDwtIEppbWlfQXJlX1lvdV9FeHBlcmllbmNlZCAlPiUgZmlsdGVyKHRyYWNrX3RpdGxlPT0iUHVycGxlIEhhemUiKSAlPiUgCiAgc2VsZWN0KGx5cmljKSAlPiUKICB1bm5lc3RfdG9rZW5zKHdvcmQsIGx5cmljKSAlPiUKICBjb3VudCh3b3JkLCBzb3J0ID0gVFJVRSkgJT4lCiAgd2l0aCh3b3JkY2xvdWQod29yZCwgbikpCkppbWlfbHlyaWMgPC0gSmltaV9BcmVfWW91X0V4cGVyaWVuY2VkICU+JSBmaWx0ZXIodHJhY2tfdGl0bGU9PSJUaGUgV2luZCBDcmllcyBNYXJ5IikgJT4lIAogIHNlbGVjdChseXJpYykgJT4lCiAgdW5uZXN0X3Rva2Vucyh3b3JkLCBseXJpYykgJT4lCiAgY291bnQod29yZCwgc29ydCA9IFRSVUUpICU+JQogIHdpdGgod29yZGNsb3VkKHdvcmQsIG4pKQpKaW1pX2x5cmljIDwtIEppbWlfQXJlX1lvdV9FeHBlcmllbmNlZCAlPiUgZmlsdGVyKHRyYWNrX3RpdGxlPT0iVGhpcmQgU3RvbmUgZnJvbSB0aGUgU3VuIikgJT4lIAogIHNlbGVjdChseXJpYykgJT4lCiAgdW5uZXN0X3Rva2Vucyh3b3JkLCBseXJpYykgJT4lCiAgY291bnQod29yZCwgc29ydCA9IFRSVUUpICU+JQogIHdpdGgod29yZGNsb3VkKHdvcmQsIG4pKQoKSmltaV9seXJpYyA8LSBKaW1pX0FyZV9Zb3VfRXhwZXJpZW5jZWQgJT4lIAogIHNlbGVjdChseXJpYykgJT4lCiAgdW5uZXN0X3Rva2Vucyh3b3JkLCBseXJpYykgJT4lCiAgY291bnQod29yZCwgc29ydCA9IFRSVUUpICU+JQogIHdpdGgod29yZGNsb3VkKHdvcmQsIG4pKQpgYGAKCmBgYHtyfQpKaW1pX2x5cmljIDwtIEppbWlfQXJlX1lvdV9FeHBlcmllbmNlZCAlPiUgCiAgc2VsZWN0KGx5cmljKSAlPiUKICB1bm5lc3RfdG9rZW5zKHdvcmQsIGx5cmljKSAlPiUKICBjb3VudCh3b3JkLCBzb3J0ID0gVFJVRSkgJT4lCiAgd2l0aCh3b3JkY2xvdWQod29yZCwgbikpCmBgYAoKYGBge3J9CnRoaXJkX3N0b25lIDwtIGdlbml1c19seXJpY3MoYXJ0aXN0ID0gIlRoZSBKaW1pIEhlbmRyaXggRXhwZXJpZW5jZSIsIHNvbmcgPSAiVGhpcmQgU3RvbmUgRnJvbSBUaGUgU3VuIikKCnRoaXJkX3N0b25lCmBgYAoKCgoKYGBge3J9ClRoZV9CZWF0bGVzX3RkIDwtIGdlbml1c19hbGJ1bShhcnRpc3QgPSAiVGhlIEJlYXRsZXMiLCBhbGJ1bSA9ICJMZXQgSXQgQmUiKQpUaGVfQmVhdGxlc190ZAoKVGhlX0JlYXRsZXNfdGQgJT4lIGZpbHRlcih0cmFja19uID09IDYpCgpUaGVfQmVhdGxlc19MZXRfSXRfYmUgPC0gZ2VuaXVzX2x5cmljcyhhcnRpc3QgPSAiVGhlIEJlYXRsZXMiLCBzb25nID0gIkxldCBJdCBCZSIpClRoZV9CZWF0bGVzX0xldF9JdF9iZQoKVGhlX0JlYXRsZXNfTGV0X0l0X2JlX3RkIDwtIFRoZV9CZWF0bGVzX0xldF9JdF9iZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChseXJpYywgdHJhY2tfdGl0bGUpICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5uZXN0X3Rva2Vucyh3b3JkLCBseXJpYykKVGhlX0JlYXRsZXNfTGV0X0l0X2JlX3RkCgpUaGVfQmVhdGxlc19MZXRfSXRfYmVfc2VudGltZW50cyA8LSBUaGVfQmVhdGxlc19MZXRfSXRfYmVfdGQgJT4lCiAgICAgaW5uZXJfam9pbihnZXRfc2VudGltZW50cygiYmluZyIpLCBieSA9IGMod29yZCA9ICJ3b3JkIikpClRoZV9CZWF0bGVzX0xldF9JdF9iZV9zZW50aW1lbnRzCgpUaGVfQmVhdGxlc19MZXRfSXRfYmVfc2VudGltZW50cyAlPiUKICBjb3VudChzZW50aW1lbnQsIHdvcmQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUobiA9IGlmZWxzZShzZW50aW1lbnQgPT0gIm5lZ2F0aXZlIiwgLW4sIG4pKSAlPiUKICBtdXRhdGUod29yZCA9IHJlb3JkZXIod29yZCwgbikpICU+JQogIGdncGxvdChhZXMod29yZCwgbiwgZmlsbCA9IHNlbnRpbWVudCkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIHlsYWIoIkNvbnRyaWJ1dGlvbiB0byBzZW50aW1lbnQiKSArCiAgY29vcmRfZmxpcCgpCgoKVGhlX0JlYXRsZXNfTGV0X0l0X2JlX2R0bSA8LSBUaGVfQmVhdGxlc19MZXRfSXRfYmVfdGQgJT4lCiAgY291bnQodHJhY2tfdGl0bGUsIHdvcmQpICU+JQogIGNhc3RfZHRtKHRyYWNrX3RpdGxlLCB3b3JkLCBuKQoKVGhlX0JlYXRsZXNfTGV0X0l0X2JlX2R0bQoKVGVybXMoVGhlX0JlYXRsZXNfTGV0X0l0X2JlX2R0bSkKCnRpZHkoVGhlX0JlYXRsZXNfTGV0X0l0X2JlX2R0bSkKCmBgYAoKYGBge3J9CiMgRXhhbXBsZSB3aXRoIDIgZGlmZmVyZW50IGFydGlzdHMgYW5kIGFsYnVtcwphcnRpc3RfYWxidW1zIDwtIHRyaWJibGUoCiB+YXJ0aXN0LCB+YWxidW0sCiAiVGhlIEJlYXRsZXMiLCAiTGV0IEl0IEJlIiwKICJUaGUgSmltaSBIZW5kcml4IEV4cGVyaWVuY2UiLCAiQXJlIFlvdSBFeHBlcmllbmNlZCBbVVMgVmVyc2lvbl0iCikKYXJ0aXN0X2FsYnVtcwoKCmFsYnVtc190ZCA8LSBhcnRpc3RfYWxidW1zICU+JQogYWRkX2dlbml1cyhhcnRpc3QsIGFsYnVtKQphbGJ1bXNfdGQKYGBgCgoKCgoKCgo=