Presidential votes by religiouness

Are Trump’s voters more religious people?

It is a common knowledge that more conservative states have voted for Donald Trump in 2016 election. But majority of Trump’s voters were also the more religious people. Catholic voters played an important role for Donald Trump’s victory in 2016. Although in previous modern elections going back to the 1980s, the Catholic vote tracked closely with the overall popular vote in the nation, Trump won 52% of Catholics while only 46% of the national vote. (Kmiec 2018)

Are the people who supported Trump, also more religious? Many would argue that faith and political views does not have much in common but the surprisingly big number of Catholic voters in last election is worth consideration.

Data

Two data sets were used to discover the relationship between Trump’s voters and they religion affiliation. The data used to show the intensity of major religions in the USA are from the Social Explorer website. The data contains information about all religions - total number of Congregations, in 2010 in every state and county in the United States. These data are based on the Religious Congregations and Membership Study, and delivered in partnership with The ARDA organization. The data used to show the number of voters for Hillary and Trump are the county results of the 2016 election.

library(sf)
library(tmap)
library(tigris)
library(spdep)
library(readr)
library(dplyr)
library(tmaptools)
library(tmap)
library(stringr)
#combine map data with the religiuos data
religion2 <- religion %>% 
  mutate(fips = Geo_FIPS)
ct_map <- ct_map %>% 
  mutate(fips = parse_integer(GEOID)) 
comb_data <- ct_map %>% 
  left_join(religion2, by = "fips")
#Exclude Alaska and Hawaii
comb_data_sub <- comb_data %>% 
  filter(STATEFP != "02") %>% 
  filter(STATEFP != "15") %>% 
  filter(STATEFP != "60") %>% 
  filter(STATEFP != "66") %>% 
  filter(STATEFP != "69") %>% 
  filter(STATEFP != "72") %>% 
  filter(STATEFP != "79")

Major religions by States and Counties

The map presents the total number of religious Congregations in every state and county in the United States. Darker color indicates bigger number of congregations. The map shows the amount of congregations very precisely for each region.

When we look at the major religions by states (green color indicates the high religious population), we can notice that most of the religion congregations are in the middle and east part of the country. The states with the larger religion congregations are: Utah, Idaho, Montana, North Dakota, South Dakota, Nebraska, Kansas, Oklahoma, New Mexico, Texas, Minnesota, Iowa, Missouri, Arkansas, Louisiana, Wisconsin, Illinois, Kentucky, Tennessee, Mississippi, Alabama, Georgia, South Carolina, North Carolina, Ohio, Pennsylvania, New Jersey, Connecticut, Rhode Island and Massachusetts

#changing the color
comb_data_sub <- comb_data_sub %>% 
  mutate(green = major_religion_pop - 50)
#adding state borders
us_states <- comb_data_sub %>% 
  aggregate_map(by = "STATEFP")
#map with major religious by states
tm_shape(comb_data_sub, projection = 2163) + tm_polygons("major_religion_pop", palette = "PiYG", border.col = "grey", border.alpha = .4) + 
  tm_shape(us_states) + tm_borders(lwd = .36, col = "black", alpha = 1)

Presidential votes by states - Red and Blue

This map presents votes by states from 2016 presidential election. Hillary’s supporters are marked as a blue color while Trump’s supporters are marked as a red color. When we compare two maps - the major religions and voting results - we can notice that most of the Trump’s supporters are from the states with the highest number of religion congregations.

#Combining data - including votes and 11 nations borders
nations11 <- nations11 %>%
  mutate(fips = fips_code)
comb_data3 <- comb_data_sub %>%
  left_join(nations11, by = "fips")
#Map with presidential votes by states
comb_data3 <- comb_data3 %>% 
  mutate(votes = gop16pct - 50)
tm_shape(comb_data3, projection = 2163) + tm_polygons("votes", palette = "-RdBu", border.col = "grey", border.alpha = .4) + 
  tm_shape(us_states) + tm_borders(lwd = .36, col = "black", alpha = 1)

The theory of 11 American Nations

A reporter from the Portland Press Herald and author of several books - Colin Woodard says North America can be broken into 11 separate nation-states, where dominant cultures explain the voting behaviors, prevalence of different religions and attitudes toward everything from social issues to the role of government. Woodard believes that the differences in cultural and social behaviors and distinct opinions of Americans can be grouped to 11 “separate nations”. The distinct opinions come from the first settlers of the lands and are influenced by many factors like the environment, tradition or education. That’s why the views about social, cultural and political issues are more homogeneous across 11 nations than across 50 states in Colin’s opinion.

Maps of 11 American Nations

The maps below were divided into 11 separate nations to test Woodard’s theory. In this case the maps reveal cultural (religion) and political (votes) beliefs.

The map of major religions in the United States show that each separate nation have consistent results when it comes to the number of religion congregations. There are some nations that almost doesn’t have any religious affiliations and some with big intensity of religion congregations. The Western part of California called by Colin “The Left Coast” seems to have a small amount of religion congregations while the middle part of the country - “The Midlands”, Greater Appalachia" as well as north part of Florida and neighboring states called by Collins “Deep South” have a high intensity of religion congregations. In contrast, the south Florida, which is a separate nation according to Woodard’s theory, has small religious population.

#map by major religious in 11 nations
am_nations <- comb_data3 %>% 
  aggregate_map(by = "AN_KEY")
tm_shape(comb_data3, projection = 2163) + tm_polygons("major_religion_pop", palette = "PiYG", border.col = "grey", border.alpha = .4) + 
  tm_shape(am_nations) + tm_borders(lwd = .50, col = "black", alpha = 1)

The map of presidential votes from 2016 election in the United States by 11 nations also show coherent results for each nation. The difference is mainly visible between by the nation which has a border with mexico and the Western part of California called by Colin “El Norte” and “The Left Coast”. These nations are Hillary’s supporters while the neighboring nations are a Trump supporters.

When we compare two maps - the major religions and presidential votes across 11 nations - there are similarities especially across “The Left Coast” with small religious population and big number of votes for Hilary Clinton and “The Great Appalachia” where the religious population is large and same the votes for Donald Trump.

#map by presidential votes in 11 nations
tm_shape(comb_data3, projection = 2163) + tm_polygons("votes", palette = "-RdBu", border.col = "grey", border.alpha = .4) + 
  tm_shape(am_nations) + tm_borders(lwd = .50, col = "black", alpha = 1)

Conclusion

The visual analysis of Trump’s voters and religiousness indicates assotiaiton between these two factors. The maps allow to clearly depict the intensity and region of each factor. We can see high religious populations and high support for Trump in the same regions. The analyzis confirmes that Catholic voters played an important role for Donald Trump’s victory in 2016, and confirmes Colin Woodard’s theory. After dividing the United States into 11 nations, social and political views seem to align much nicer in these new states showing a strong cultural divide in the current United States of America.

Kmiec, Douglas W. 2018. “The Catholic Vote in the Election of Donald J. Trump.” In Catholics and Us Politics After the 2016 Elections, 129–59. Springer.

LS0tCnRpdGxlOiAiSG9tZXdvcmsgMTAiCmF1dGhvcjogIkpvYW5uYSBQb2xhbnNrYSIKZGF0ZTogIjExLzEwLzIwMTciCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdApiaWJsaW9ncmFwaHk6IHNvYzcxMi5iaWIKLS0tCgojUHJlc2lkZW50aWFsIHZvdGVzIGJ5IHJlbGlnaW91bmVzcwojI0FyZSBUcnVtcCdzIHZvdGVycyBtb3JlIHJlbGlnaW91cyBwZW9wbGU/Ckl0IGlzIGEgY29tbW9uIGtub3dsZWRnZSB0aGF0IG1vcmUgY29uc2VydmF0aXZlIHN0YXRlcyBoYXZlIHZvdGVkIGZvciBEb25hbGQgVHJ1bXAgaW4gMjAxNiBlbGVjdGlvbi4gQnV0IG1ham9yaXR5IG9mIFRydW1wJ3Mgdm90ZXJzIHdlcmUgYWxzbyB0aGUgbW9yZSByZWxpZ2lvdXMgcGVvcGxlLiBDYXRob2xpYyB2b3RlcnMgcGxheWVkIGFuIGltcG9ydGFudCByb2xlIGZvciBEb25hbGQgVHJ1bXAncyB2aWN0b3J5IGluIDIwMTYuIEFsdGhvdWdoIGluIHByZXZpb3VzIG1vZGVybiBlbGVjdGlvbnMgZ29pbmcgYmFjayB0byB0aGUgMTk4MHMsIHRoZSBDYXRob2xpYyB2b3RlIHRyYWNrZWQgY2xvc2VseSB3aXRoIHRoZSBvdmVyYWxsIHBvcHVsYXIgdm90ZSBpbiB0aGUgbmF0aW9uLCBUcnVtcCB3b24gNTIlIG9mIENhdGhvbGljcyB3aGlsZSBvbmx5IDQ2JSBvZiB0aGUgbmF0aW9uYWwgdm90ZS4gW0BrbWllYzIwMThjYXRob2xpY10KCkFyZSB0aGUgcGVvcGxlIHdobyBzdXBwb3J0ZWQgVHJ1bXAsIGFsc28gbW9yZSByZWxpZ2lvdXM/IE1hbnkgd291bGQgYXJndWUgdGhhdCBmYWl0aCBhbmQgcG9saXRpY2FsIHZpZXdzIGRvZXMgbm90IGhhdmUgbXVjaCBpbiBjb21tb24gYnV0IHRoZSBzdXJwcmlzaW5nbHkgYmlnIG51bWJlciBvZiBDYXRob2xpYyB2b3RlcnMgaW4gbGFzdCBlbGVjdGlvbiBpcyB3b3J0aCBjb25zaWRlcmF0aW9uLgoKIyNEYXRhClR3byBkYXRhIHNldHMgd2VyZSB1c2VkIHRvIGRpc2NvdmVyIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBUcnVtcCdzIHZvdGVycyBhbmQgdGhleSByZWxpZ2lvbiBhZmZpbGlhdGlvbi4gVGhlIGRhdGEgdXNlZCB0byBzaG93IHRoZSBpbnRlbnNpdHkgb2YgbWFqb3IgcmVsaWdpb25zIGluIHRoZSBVU0EgYXJlIGZyb20gdGhlIFNvY2lhbCBFeHBsb3JlciB3ZWJzaXRlLiBUaGUgZGF0YSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgcmVsaWdpb25zIC0gdG90YWwgbnVtYmVyIG9mIENvbmdyZWdhdGlvbnMsIGluIDIwMTAgaW4gZXZlcnkgc3RhdGUgYW5kIGNvdW50eSBpbiB0aGUgVW5pdGVkIFN0YXRlcy4gVGhlc2UgZGF0YSBhcmUgYmFzZWQgb24gdGhlIFJlbGlnaW91cyBDb25ncmVnYXRpb25zIGFuZCBNZW1iZXJzaGlwIFN0dWR5LCBhbmQgZGVsaXZlcmVkIGluIHBhcnRuZXJzaGlwIHdpdGggVGhlIEFSREEgb3JnYW5pemF0aW9uLiBUaGUgZGF0YSB1c2VkIHRvIHNob3cgdGhlIG51bWJlciBvZiB2b3RlcnMgZm9yIEhpbGxhcnkgYW5kIFRydW1wIGFyZSB0aGUgY291bnR5IHJlc3VsdHMgb2YgdGhlIDIwMTYgZWxlY3Rpb24uCgoKYGBge3IsIHdhcm5pbmc9RkFMU0UsIGVycm9yPUZBTFNFLCByZXN1bHRzPSdoaWRlJywgbWVzc2FnZT1GQUxTRX0KbGlicmFyeShzZikKbGlicmFyeSh0bWFwKQpsaWJyYXJ5KHRpZ3JpcykKbGlicmFyeShzcGRlcCkKbGlicmFyeShyZWFkcikKbGlicmFyeShkcGx5cikKbGlicmFyeSh0bWFwdG9vbHMpCmxpYnJhcnkodG1hcCkKbGlicmFyeShzdHJpbmdyKQpgYGAKCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1GQUxTRSwgcmVzdWx0cz0naGlkZScsIG1lc3NhZ2U9RkFMU0V9CmN0X21hcCA8LSBzdF9yZWFkKCIvVXNlcnMvbGFzaGEvRGVza3RvcC9RdWVlbnMgQ29sbGVnZS83MTIgQWR2YW5jZWQgQW5hbHl0aWNzL2RhdGEgc2V0cy90bF8yMDE2X3VzX2NvdW50eS90bF8yMDE2X3VzX2NvdW50eS5zaHAiLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKCnJlbGlnaW9uIDwtIHJlYWRfY3N2KCcvVXNlcnMvbGFzaGEvRGVza3RvcC9RdWVlbnMgQ29sbGVnZS83MTIgQWR2YW5jZWQgQW5hbHl0aWNzL2RhdGEgc2V0cy9yZWxpZ2lvbi5jc3YnKQoKbmF0aW9uczExIDwtIHJlYWQuY3N2KCcvVXNlcnMvbGFzaGEvRGVza3RvcC9RdWVlbnMgQ29sbGVnZS83MTIgQWR2YW5jZWQgQW5hbHl0aWNzL2RhdGEgc2V0cy9kYXRhZmlsZS5jc3YnKQpgYGAKCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1GQUxTRSwgcmVzdWx0cz0naGlkZScsIG1lc3NhZ2U9RkFMU0V9CiNjb21iaW5lIG1hcCBkYXRhIHdpdGggdGhlIHJlbGlnaXVvcyBkYXRhCnJlbGlnaW9uMiA8LSByZWxpZ2lvbiAlPiUgCiAgbXV0YXRlKGZpcHMgPSBHZW9fRklQUykKCmN0X21hcCA8LSBjdF9tYXAgJT4lIAogIG11dGF0ZShmaXBzID0gcGFyc2VfaW50ZWdlcihHRU9JRCkpIAoKY29tYl9kYXRhIDwtIGN0X21hcCAlPiUgCiAgbGVmdF9qb2luKHJlbGlnaW9uMiwgYnkgPSAiZmlwcyIpCgojRXhjbHVkZSBBbGFza2EgYW5kIEhhd2FpaQpjb21iX2RhdGFfc3ViIDwtIGNvbWJfZGF0YSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAgIT0gIjAyIikgJT4lIAogIGZpbHRlcihTVEFURUZQICE9ICIxNSIpICU+JSAKICBmaWx0ZXIoU1RBVEVGUCAhPSAiNjAiKSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAgIT0gIjY2IikgJT4lIAogIGZpbHRlcihTVEFURUZQICE9ICI2OSIpICU+JSAKICBmaWx0ZXIoU1RBVEVGUCAhPSAiNzIiKSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAgIT0gIjc5IikKYGBgCgoKIyNNYWpvciByZWxpZ2lvbnMgYnkgU3RhdGVzIGFuZCBDb3VudGllcwpUaGUgbWFwIHByZXNlbnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVsaWdpb3VzIENvbmdyZWdhdGlvbnMgaW4gZXZlcnkgc3RhdGUgYW5kIGNvdW50eSBpbiB0aGUgVW5pdGVkIFN0YXRlcy4gRGFya2VyIGNvbG9yIGluZGljYXRlcyBiaWdnZXIgbnVtYmVyIG9mIGNvbmdyZWdhdGlvbnMuIFRoZSBtYXAgc2hvd3MgdGhlIGFtb3VudCBvZiBjb25ncmVnYXRpb25zIHZlcnkgcHJlY2lzZWx5IGZvciBlYWNoIHJlZ2lvbi4KCldoZW4gd2UgbG9vayBhdCB0aGUgbWFqb3IgcmVsaWdpb25zIGJ5IHN0YXRlcyAoZ3JlZW4gY29sb3IgaW5kaWNhdGVzIHRoZSBoaWdoIHJlbGlnaW91cyBwb3B1bGF0aW9uKSwgd2UgY2FuIG5vdGljZSB0aGF0IG1vc3Qgb2YgdGhlIHJlbGlnaW9uIGNvbmdyZWdhdGlvbnMgYXJlIGluIHRoZSBtaWRkbGUgYW5kIGVhc3QgcGFydCBvZiB0aGUgY291bnRyeS4gVGhlIHN0YXRlcyB3aXRoIHRoZSBsYXJnZXIgcmVsaWdpb24gY29uZ3JlZ2F0aW9ucyBhcmU6IFV0YWgsIElkYWhvLCBNb250YW5hLCBOb3J0aCBEYWtvdGEsIFNvdXRoIERha290YSwgTmVicmFza2EsIEthbnNhcywgT2tsYWhvbWEsIE5ldyBNZXhpY28sIFRleGFzLCBNaW5uZXNvdGEsIElvd2EsIE1pc3NvdXJpLCBBcmthbnNhcywgTG91aXNpYW5hLCBXaXNjb25zaW4sIElsbGlub2lzLCBLZW50dWNreSwgVGVubmVzc2VlLCBNaXNzaXNzaXBwaSwgQWxhYmFtYSwgR2VvcmdpYSwgU291dGggQ2Fyb2xpbmEsIE5vcnRoIENhcm9saW5hLCBPaGlvLCBQZW5uc3lsdmFuaWEsIE5ldyBKZXJzZXksIENvbm5lY3RpY3V0LCBSaG9kZSBJc2xhbmQgYW5kIE1hc3NhY2h1c2V0dHMKYGBge3IsIHdhcm5pbmc9RkFMU0UsIGVycm9yPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQojY2hhbmdpbmcgdGhlIGNvbG9yCmNvbWJfZGF0YV9zdWIgPC0gY29tYl9kYXRhX3N1YiAlPiUgCiAgbXV0YXRlKGdyZWVuID0gbWFqb3JfcmVsaWdpb25fcG9wIC0gNTApCgojYWRkaW5nIHN0YXRlIGJvcmRlcnMKdXNfc3RhdGVzIDwtIGNvbWJfZGF0YV9zdWIgJT4lIAogIGFnZ3JlZ2F0ZV9tYXAoYnkgPSAiU1RBVEVGUCIpCgojbWFwIHdpdGggbWFqb3IgcmVsaWdpb3VzIGJ5IHN0YXRlcwp0bV9zaGFwZShjb21iX2RhdGFfc3ViLCBwcm9qZWN0aW9uID0gMjE2MykgKyB0bV9wb2x5Z29ucygibWFqb3JfcmVsaWdpb25fcG9wIiwgcGFsZXR0ZSA9ICJQaVlHIiwgYm9yZGVyLmNvbCA9ICJncmV5IiwgYm9yZGVyLmFscGhhID0gLjQpICsgCiAgdG1fc2hhcGUodXNfc3RhdGVzKSArIHRtX2JvcmRlcnMobHdkID0gLjM2LCBjb2wgPSAiYmxhY2siLCBhbHBoYSA9IDEpCmBgYAoKIyNQcmVzaWRlbnRpYWwgdm90ZXMgYnkgc3RhdGVzIC0gUmVkIGFuZCBCbHVlClRoaXMgbWFwIHByZXNlbnRzIHZvdGVzIGJ5IHN0YXRlcyBmcm9tIDIwMTYgcHJlc2lkZW50aWFsIGVsZWN0aW9uLiBIaWxsYXJ5J3Mgc3VwcG9ydGVycyBhcmUgbWFya2VkIGFzIGEgYmx1ZSBjb2xvciB3aGlsZSBUcnVtcCdzIHN1cHBvcnRlcnMgYXJlIG1hcmtlZCBhcyBhIHJlZCBjb2xvci4gV2hlbiB3ZSBjb21wYXJlIHR3byBtYXBzIC0gdGhlIG1ham9yIHJlbGlnaW9ucyBhbmQgdm90aW5nIHJlc3VsdHMgLSB3ZSBjYW4gbm90aWNlIHRoYXQgbW9zdCBvZiB0aGUgVHJ1bXAncyBzdXBwb3J0ZXJzIGFyZSBmcm9tIHRoZSBzdGF0ZXMgd2l0aCB0aGUgaGlnaGVzdCBudW1iZXIgb2YgcmVsaWdpb24gY29uZ3JlZ2F0aW9ucy4gCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KCiNDb21iaW5pbmcgZGF0YSAtIGluY2x1ZGluZyB2b3RlcyBhbmQgMTEgbmF0aW9ucyBib3JkZXJzCm5hdGlvbnMxMSA8LSBuYXRpb25zMTEgJT4lCiAgbXV0YXRlKGZpcHMgPSBmaXBzX2NvZGUpCgpjb21iX2RhdGEzIDwtIGNvbWJfZGF0YV9zdWIgJT4lCiAgbGVmdF9qb2luKG5hdGlvbnMxMSwgYnkgPSAiZmlwcyIpCgojTWFwIHdpdGggcHJlc2lkZW50aWFsIHZvdGVzIGJ5IHN0YXRlcwpjb21iX2RhdGEzIDwtIGNvbWJfZGF0YTMgJT4lIAogIG11dGF0ZSh2b3RlcyA9IGdvcDE2cGN0IC0gNTApCgp0bV9zaGFwZShjb21iX2RhdGEzLCBwcm9qZWN0aW9uID0gMjE2MykgKyB0bV9wb2x5Z29ucygidm90ZXMiLCBwYWxldHRlID0gIi1SZEJ1IiwgYm9yZGVyLmNvbCA9ICJncmV5IiwgYm9yZGVyLmFscGhhID0gLjQpICsgCiAgdG1fc2hhcGUodXNfc3RhdGVzKSArIHRtX2JvcmRlcnMobHdkID0gLjM2LCBjb2wgPSAiYmxhY2siLCBhbHBoYSA9IDEpCmBgYAoKCiNUaGUgdGhlb3J5IG9mIDExIEFtZXJpY2FuIE5hdGlvbnMKQSByZXBvcnRlciBmcm9tIHRoZSBQb3J0bGFuZCBQcmVzcyBIZXJhbGQgYW5kIGF1dGhvciBvZiBzZXZlcmFsIGJvb2tzIC0gQ29saW4gV29vZGFyZCBzYXlzIE5vcnRoIEFtZXJpY2EgY2FuIGJlIGJyb2tlbiBpbnRvIDExIHNlcGFyYXRlIG5hdGlvbi1zdGF0ZXMsIHdoZXJlIGRvbWluYW50IGN1bHR1cmVzIGV4cGxhaW4gdGhlIHZvdGluZyBiZWhhdmlvcnMsIHByZXZhbGVuY2Ugb2YgZGlmZmVyZW50IHJlbGlnaW9ucyBhbmQgYXR0aXR1ZGVzIHRvd2FyZCBldmVyeXRoaW5nIGZyb20gc29jaWFsIGlzc3VlcyB0byB0aGUgcm9sZSBvZiBnb3Zlcm5tZW50LiBXb29kYXJkIGJlbGlldmVzIHRoYXQgdGhlIGRpZmZlcmVuY2VzIGluIGN1bHR1cmFsIGFuZCBzb2NpYWwgYmVoYXZpb3JzIGFuZCBkaXN0aW5jdCBvcGluaW9ucyBvZiBBbWVyaWNhbnMgY2FuIGJlIGdyb3VwZWQgdG8gMTEgInNlcGFyYXRlIG5hdGlvbnMiLiBUaGUgZGlzdGluY3Qgb3BpbmlvbnMgY29tZSBmcm9tIHRoZSBmaXJzdCBzZXR0bGVycyBvZiB0aGUgbGFuZHMgYW5kIGFyZSBpbmZsdWVuY2VkIGJ5IG1hbnkgZmFjdG9ycyBsaWtlIHRoZSBlbnZpcm9ubWVudCwgdHJhZGl0aW9uIG9yIGVkdWNhdGlvbi4gVGhhdCdzIHdoeSB0aGUgdmlld3MgYWJvdXQgc29jaWFsLCBjdWx0dXJhbCBhbmQgcG9saXRpY2FsIGlzc3VlcyBhcmUgbW9yZSBob21vZ2VuZW91cyBhY3Jvc3MgMTEgbmF0aW9ucyB0aGFuIGFjcm9zcyA1MCBzdGF0ZXMgaW4gQ29saW4ncyBvcGluaW9uLgoKCiMjTWFwcyBvZiAxMSBBbWVyaWNhbiBOYXRpb25zClRoZSBtYXBzIGJlbG93IHdlcmUgZGl2aWRlZCBpbnRvIDExIHNlcGFyYXRlIG5hdGlvbnMgdG8gdGVzdCBXb29kYXJkJ3MgdGhlb3J5LiBJbiB0aGlzIGNhc2UgdGhlIG1hcHMgcmV2ZWFsIGN1bHR1cmFsIChyZWxpZ2lvbikgYW5kIHBvbGl0aWNhbCAodm90ZXMpIGJlbGllZnMuCgpUaGUgbWFwIG9mIG1ham9yIHJlbGlnaW9ucyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBzaG93IHRoYXQgZWFjaCBzZXBhcmF0ZSBuYXRpb24gaGF2ZSBjb25zaXN0ZW50IHJlc3VsdHMgd2hlbiBpdCBjb21lcyB0byB0aGUgbnVtYmVyIG9mIHJlbGlnaW9uIGNvbmdyZWdhdGlvbnMuIFRoZXJlIGFyZSBzb21lIG5hdGlvbnMgdGhhdCBhbG1vc3QgZG9lc24ndCBoYXZlIGFueSByZWxpZ2lvdXMgYWZmaWxpYXRpb25zIGFuZCBzb21lIHdpdGggYmlnIGludGVuc2l0eSBvZiByZWxpZ2lvbiBjb25ncmVnYXRpb25zLiBUaGUgV2VzdGVybiBwYXJ0IG9mIENhbGlmb3JuaWEgY2FsbGVkIGJ5IENvbGluICAiVGhlIExlZnQgQ29hc3QiIHNlZW1zIHRvIGhhdmUgYSBzbWFsbCBhbW91bnQgb2YgcmVsaWdpb24gY29uZ3JlZ2F0aW9ucyB3aGlsZSB0aGUgbWlkZGxlIHBhcnQgb2YgdGhlIGNvdW50cnkgLSAiVGhlIE1pZGxhbmRzIiwgR3JlYXRlciBBcHBhbGFjaGlhIiBhcyB3ZWxsIGFzIG5vcnRoIHBhcnQgb2YgRmxvcmlkYSBhbmQgbmVpZ2hib3Jpbmcgc3RhdGVzIGNhbGxlZCBieSBDb2xsaW5zICJEZWVwIFNvdXRoIiBoYXZlIGEgaGlnaCBpbnRlbnNpdHkgb2YgcmVsaWdpb24gY29uZ3JlZ2F0aW9ucy4gSW4gY29udHJhc3QsIHRoZSBzb3V0aCBGbG9yaWRhLCB3aGljaCBpcyBhIHNlcGFyYXRlIG5hdGlvbiBhY2NvcmRpbmcgdG8gV29vZGFyZCdzIHRoZW9yeSwgaGFzIHNtYWxsIHJlbGlnaW91cyBwb3B1bGF0aW9uLgoKCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KI21hcCBieSBtYWpvciByZWxpZ2lvdXMgaW4gMTEgbmF0aW9ucwphbV9uYXRpb25zIDwtIGNvbWJfZGF0YTMgJT4lIAogIGFnZ3JlZ2F0ZV9tYXAoYnkgPSAiQU5fS0VZIikKCnRtX3NoYXBlKGNvbWJfZGF0YTMsIHByb2plY3Rpb24gPSAyMTYzKSArIHRtX3BvbHlnb25zKCJtYWpvcl9yZWxpZ2lvbl9wb3AiLCBwYWxldHRlID0gIlBpWUciLCBib3JkZXIuY29sID0gImdyZXkiLCBib3JkZXIuYWxwaGEgPSAuNCkgKyAKICB0bV9zaGFwZShhbV9uYXRpb25zKSArIHRtX2JvcmRlcnMobHdkID0gLjUwLCBjb2wgPSAiYmxhY2siLCBhbHBoYSA9IDEpCmBgYAoKVGhlIG1hcCBvZiBwcmVzaWRlbnRpYWwgdm90ZXMgZnJvbSAyMDE2IGVsZWN0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzIGJ5IDExIG5hdGlvbnMgYWxzbyBzaG93IGNvaGVyZW50IHJlc3VsdHMgZm9yIGVhY2ggbmF0aW9uLiBUaGUgZGlmZmVyZW5jZSBpcyBtYWlubHkgdmlzaWJsZSBiZXR3ZWVuIGJ5IHRoZSBuYXRpb24gd2hpY2ggaGFzIGEgYm9yZGVyIHdpdGggbWV4aWNvIGFuZCB0aGUgV2VzdGVybiBwYXJ0IG9mIENhbGlmb3JuaWEgY2FsbGVkIGJ5IENvbGluICJFbCBOb3J0ZSIgYW5kICJUaGUgTGVmdCBDb2FzdCIuIFRoZXNlIG5hdGlvbnMgYXJlIEhpbGxhcnkncyBzdXBwb3J0ZXJzIHdoaWxlIHRoZSBuZWlnaGJvcmluZyBuYXRpb25zIGFyZSBhIFRydW1wIHN1cHBvcnRlcnMuCgpXaGVuIHdlIGNvbXBhcmUgdHdvIG1hcHMgLSB0aGUgbWFqb3IgcmVsaWdpb25zIGFuZCBwcmVzaWRlbnRpYWwgdm90ZXMgYWNyb3NzIDExIG5hdGlvbnMgLSB0aGVyZSBhcmUgc2ltaWxhcml0aWVzIGVzcGVjaWFsbHkgYWNyb3NzICJUaGUgTGVmdCBDb2FzdCIgd2l0aCBzbWFsbCByZWxpZ2lvdXMgcG9wdWxhdGlvbiBhbmQgYmlnIG51bWJlciBvZiB2b3RlcyBmb3IgSGlsYXJ5IENsaW50b24gYW5kICJUaGUgR3JlYXQgQXBwYWxhY2hpYSIgd2hlcmUgdGhlIHJlbGlnaW91cyBwb3B1bGF0aW9uIGlzIGxhcmdlIGFuZCBzYW1lIHRoZSB2b3RlcyBmb3IgRG9uYWxkIFRydW1wLgoKYGBge3Isd2FybmluZz1GQUxTRSwgZXJyb3I9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CiNtYXAgYnkgcHJlc2lkZW50aWFsIHZvdGVzIGluIDExIG5hdGlvbnMKCnRtX3NoYXBlKGNvbWJfZGF0YTMsIHByb2plY3Rpb24gPSAyMTYzKSArIHRtX3BvbHlnb25zKCJ2b3RlcyIsIHBhbGV0dGUgPSAiLVJkQnUiLCBib3JkZXIuY29sID0gImdyZXkiLCBib3JkZXIuYWxwaGEgPSAuNCkgKyAKICB0bV9zaGFwZShhbV9uYXRpb25zKSArIHRtX2JvcmRlcnMobHdkID0gLjUwLCBjb2wgPSAiYmxhY2siLCBhbHBoYSA9IDEpCmBgYAoKI0NvbmNsdXNpb24KVGhlIHZpc3VhbCBhbmFseXNpcyBvZiBUcnVtcCdzIHZvdGVycyBhbmQgcmVsaWdpb3VzbmVzcyBpbmRpY2F0ZXMgYXNzb3RpYWl0b24gYmV0d2VlbiB0aGVzZSB0d28gZmFjdG9ycy4gVGhlIG1hcHMgYWxsb3cgdG8gY2xlYXJseSBkZXBpY3QgdGhlIGludGVuc2l0eSBhbmQgcmVnaW9uIG9mIGVhY2ggZmFjdG9yLiBXZSBjYW4gc2VlIGhpZ2ggcmVsaWdpb3VzIHBvcHVsYXRpb25zIGFuZCBoaWdoIHN1cHBvcnQgZm9yIFRydW1wIGluIHRoZSBzYW1lIHJlZ2lvbnMuIFRoZSBhbmFseXppcyBjb25maXJtZXMgdGhhdCBDYXRob2xpYyB2b3RlcnMgcGxheWVkIGFuIGltcG9ydGFudCByb2xlIGZvciBEb25hbGQgVHJ1bXAncyB2aWN0b3J5IGluIDIwMTYsIGFuZCBjb25maXJtZXMgQ29saW4gV29vZGFyZCdzIHRoZW9yeS4gQWZ0ZXIgZGl2aWRpbmcgdGhlIFVuaXRlZCBTdGF0ZXMgaW50byAxMSBuYXRpb25zLCBzb2NpYWwgYW5kIHBvbGl0aWNhbCB2aWV3cyBzZWVtIHRvIGFsaWduIG11Y2ggbmljZXIgaW4gdGhlc2UgbmV3IHN0YXRlcyBzaG93aW5nIGEgc3Ryb25nIGN1bHR1cmFsIGRpdmlkZSBpbiB0aGUgY3VycmVudCBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIAo=