Introduction
Nitrogen dioxide (NO2) emissions have widely been considered one of the major pollutants to our atmosphere. One of the major causes of high level gas emissions is attributed to human activity. The purpose of this analysis is to examine how much populations in the United States contribute to N02 emissions, since we are arguable one of the main reasons for such high green-house gas emissions in the United States.
library(sf)
library(tmap)
library(tigris)
library(spdep)
library(data.world)
library(dplyr)
library(tmaptools)
library(printr)
library(readr)
library(stargazer)
library(texreg)
library(ggplot2)
library(knitr)
Method
This analysis uses data from the U.S. Environmental Protection Agency to capture nitrogen dioxide emissions by state. In addition, population data from social explore to spatially map whether large populations have greater emissions of the greenhouse gas nitrogen dioxide.
library(sf)
us_map <- st_read('/Users/cruz/Desktop/tl_2017_us_state/tl_2017_us_state.shp', stringsAsFactors = FALSE)
Reading layer `tl_2017_us_state' from data source `/Users/cruz/Desktop/tl_2017_us_state/tl_2017_us_state.shp' using driver `ESRI Shapefile'
Simple feature collection with 56 features and 14 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -179.2311 ymin: -14.60181 xmax: 179.8597 ymax: 71.43979
epsg (SRID): 4269
proj4string: +proj=longlat +datum=NAD83 +no_defs
us_map<- us_map%>%
mutate(STATEFP=parse_integer(STATEFP))
names(us_map)
[1] "REGION" "DIVISION" "STATEFP" "STATENS" "GEOID" "STUSPS"
[7] "NAME" "LSAD" "MTFCC" "FUNCSTAT" "ALAND" "AWATER"
[13] "INTPTLAT" "INTPTLON" "geometry"
library(readr)
uspop1_data <- read_csv("/Users/cruz/Desktop/uspop.csv")
names(uspop1_data)
[1] "FIPS" "Geo_NAME" "Geo_QNAME" "NATION" "STATE"
[6] "COUNTY" "totalpop" "popdensity"
usp_data2 <- usp_data %>%
rename(nitrogenm = `NO2 Mean`,
statecode = `State Code`,
countycode = `County Code`,
comean = `CO Mean`)%>%
mutate(statecode=parse_integer(statecode))%>%
filter(nitrogenm>0)%>%
select(nitrogenm, statecode, countycode, comean)%>%
group_by(statecode)%>%
summarize(nitrogenm=mean(nitrogenm))
usp_data2
# A tibble: 47 x 2
statecode nitrogenm
<int> <dbl>
1 1 9.410693
2 2 11.313152
3 4 19.099151
4 5 9.753701
5 6 13.790194
6 8 19.710465
7 9 9.073335
8 10 11.584773
9 11 17.689366
10 12 7.365660
# ... with 37 more rows
us_combo <- append_data(us_map, usp_data2, key.shp = "STATEFP", key.data = "statecode")
uspop2_data <- uspop1_data %>%
mutate(FIPS=parse_integer(FIPS))%>%
filter(totalpop>0)%>%
select(FIPS, Geo_NAME, Geo_QNAME, totalpop, popdensity)%>%
group_by(FIPS)%>%
summarize(totalpop=mean(totalpop))
uspop2_data
# A tibble: 51 x 2
FIPS totalpop
<int> <dbl>
1 1 4863300
2 2 741894
3 4 6931071
4 5 2988248
5 6 39250017
6 8 5540545
7 9 3576452
8 10 952065
9 11 681170
10 12 20612439
# ... with 41 more rows
uspop_combo <- append_data(us_map, uspop2_data, key.shp = "STATEFP", key.data = "FIPS")
uspop_sub_combo <- uspop_combo%>%
filter(!STATEFP == 02) %>%
filter(!STATEFP == 15) %>%
filter(!STATEFP == 60) %>%
filter(!STATEFP == 66) %>%
filter(!STATEFP == 69) %>%
filter(!STATEFP == 72) %>%
filter(!STATEFP == 79)
us_sub_combo <- us_combo%>%
filter(!STATEFP == 02) %>%
filter(!STATEFP == 15) %>%
filter(!STATEFP == 60) %>%
filter(!STATEFP == 66) %>%
filter(!STATEFP == 69) %>%
filter(!STATEFP == 72) %>%
filter(!STATEFP == 79)
us_ni_pop <- merge.data.frame(usp_data2, uspop2_data)
us_ni_pop <- us_ni_pop%>%
mutate(totalpopcat = ifelse(totalpop>0 & totalpop <=10000000, 1,
ifelse(totalpop > 10000000 & totalpop <=20000000, 2,
ifelse(totalpop > 20000000 & totalpop <=30000000, 3,
ifelse(totalpop > 30000000 & totalpop <=40000000, 4,
ifelse(totalpop > 40000000, 5,NA))))))
us_ni_pop%>%
group_by(totalpopcat)%>%
summarize(n=n())
lm1 <- lm(nitrogenm ~ totalpopcat, data = us_ni_pop)
Distribution of the N02 & Total Population in United States
The mean distribution of nitrogen dioxide into the atmosphere is from 8- 12.5 parts per billion in the United States. In addition, the distribution of total population in the United States displays that it falls between 10-20 million people.
ggplot(us_ni_pop, aes(x = nitrogenm)) + geom_histogram(color = "light coral", fill = "light green")

ggplot(us_ni_pop, aes(x = totalpopcat)) + geom_histogram(color = "light coral", fill = "light green")

Linear regression analysis
Surprisingly, the regression output displays that total population has a very small impact on nitrogen dioxide emissions in the Unites States and was not statistically significant. Going into this analysis I assumed that the impact of population size would have on the greenhouse gas nitrogen dioxide would be immense. However, both the spatial mapping and regression display otherwise. Of course, I must mention that there were certainly limitations. Many factors contribute to the emissions of nitrogen dioxide emission into the atmosphere, although populations may certainly have something to do with the emissions of this particular gas. Limitations occur when measuring exactly how much every person in the U.S contributes to air pollution because a spurious relationship occurs and it is difficult to control for everything. In the article examining air quality in California and population growth (Cramer 1998) researchers indicated that they had a hard time improving their model, even after accounting, even with all of the additional variables that they accounted for. Overall, it seems that getting exact results on how much nitrogen dioxide populations emit into the atmosphere is not as intuitive as it may look, rather air pollution has been mediated by regulatory efforts.
stargazer(lm1,digits = 17, type = "html")
|
|
Dependent variable:
|
|
|
|
nitrogenm
|
|
totalpopcat
|
0.00000000000000382
|
|
(0.15676250000000000)
|
|
|
Constant
|
11.10783000000000000***
|
|
(0.21951140000000000)
|
|
|
|
Observations
|
2,397
|
R2
|
0.00000000000000000
|
Adjusted R2
|
-0.00041753650000000
|
Residual Std. Error
|
4.76840100000000000 (df = 2395)
|
F Statistic
|
0.00000000000000000 (df = 1; 2395)
|
|
Note:
|
p<0.1; p<0.05; p<0.01
|
Nitrogen Dioxide map emissions of the United States Vs Population in The United States
The Environmental Protection agency data on NO2 emissions and population display quite inconsistent results. We see that some states with high population do have high emissions of N02, for example California has an extremely high population and relatively high NO2 emissions. However, this is not enough to argue that large population creates high N02 emissions.
tm_shape(us_sub_combo, projection = 2163) + tm_polygons("nitrogenm", palette = "BuGn") + tm_shape(us_map) + tm_borders(lwd = .36, col = "black", alpha = 1)

tm_shape(uspop_sub_combo, projection = 2163) + tm_polygons("totalpop", palette = "BuGn") + tm_shape(us_map) + tm_borders(lwd = .36, col = "black", alpha = 1)

Bibliography
(Cramer 1998) (Cramer 2002) (Dunlap and Jorgenson 2012)
Cramer, James C. 1998. “Population Growth and Air Quality in California.” Demography 35 (1). Springer: 45–56.
———. 2002. “Population Growth and Local Air Pollution: Methods, Models, and Results.” Population and Development Review 28. JSTOR: 22–52.
Dunlap, Riley E, and Andrew K Jorgenson. 2012. “Environmental Problems.” The Wiley-Blackwell Encyclopedia of Globalization. Wiley Online Library.
LS0tCnRpdGxlOiAiQW4gRXhhbWluYXRpb24gT2YgQWlyIFBvbGx1dGlvbiBPbiBQb3B1bGF0aW9ucyBJbiBUaGUgVW5pdGVkIFN0YXRlcyIKb3V0cHV0OiBodG1sX25vdGVib29rCmJpYmxpb2dyYXBoeSA6IFBvbGx1dGlvbi5iaWIKLS0tCgoKIVtdKEFpclBvbGx1dGlvbi5qcGcpCgoKI0ludHJvZHVjdGlvbiAKCk5pdHJvZ2VuIGRpb3hpZGUgKE5PMikgZW1pc3Npb25zIGhhdmUgd2lkZWx5IGJlZW4gY29uc2lkZXJlZCBvbmUgb2YgdGhlIG1ham9yIHBvbGx1dGFudHMgdG8gb3VyIGF0bW9zcGhlcmUuIE9uZSBvZiB0aGUgbWFqb3IgY2F1c2VzIG9mIGhpZ2ggbGV2ZWwgZ2FzIGVtaXNzaW9ucyBpcyBhdHRyaWJ1dGVkIHRvIGh1bWFuIGFjdGl2aXR5LiBUaGUgcHVycG9zZSBvZiB0aGlzIGFuYWx5c2lzIGlzIHRvIGV4YW1pbmUgaG93IG11Y2ggcG9wdWxhdGlvbnMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgY29udHJpYnV0ZSB0byBOMDIgZW1pc3Npb25zLCBzaW5jZSB3ZSBhcmUgYXJndWFibGUgb25lIG9mIHRoZSBtYWluIHJlYXNvbnMgZm9yIHN1Y2ggaGlnaCBncmVlbi1ob3VzZSBnYXMgZW1pc3Npb25zIGluIHRoZSBVbml0ZWQgU3RhdGVzLgoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsaWJyYXJ5KHNmKQpsaWJyYXJ5KHRtYXApCmxpYnJhcnkodGlncmlzKQpsaWJyYXJ5KHNwZGVwKQpsaWJyYXJ5KGRhdGEud29ybGQpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkodG1hcHRvb2xzKQpsaWJyYXJ5KHByaW50cikKbGlicmFyeShyZWFkcikKbGlicmFyeShzdGFyZ2F6ZXIpCmxpYnJhcnkodGV4cmVnKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoa25pdHIpCmBgYAoKI01ldGhvZAoKVGhpcyBhbmFseXNpcyB1c2VzIGRhdGEgZnJvbSB0aGUgVS5TLiBFbnZpcm9ubWVudGFsIFByb3RlY3Rpb24gQWdlbmN5IHRvIGNhcHR1cmUgbml0cm9nZW4gZGlveGlkZSBlbWlzc2lvbnMgYnkgc3RhdGUuIEluIGFkZGl0aW9uLCBwb3B1bGF0aW9uIGRhdGEgZnJvbSBzb2NpYWwgZXhwbG9yZSB0byBzcGF0aWFsbHkgbWFwIHdoZXRoZXIgbGFyZ2UgcG9wdWxhdGlvbnMgaGF2ZSBncmVhdGVyIGVtaXNzaW9ucyBvZiB0aGUgZ3JlZW5ob3VzZSBnYXMgbml0cm9nZW4gZGlveGlkZS4gCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KbGlicmFyeShzZikKdXNfbWFwIDwtIHN0X3JlYWQoJy9Vc2Vycy9jcnV6L0Rlc2t0b3AvdGxfMjAxN191c19zdGF0ZS90bF8yMDE3X3VzX3N0YXRlLnNocCcsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKCnVzX21hcDwtIHVzX21hcCU+JQogIG11dGF0ZShTVEFURUZQPXBhcnNlX2ludGVnZXIoU1RBVEVGUCkpCgoKYGBgCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpuYW1lcyh1c19tYXApCmBgYAoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsaWJyYXJ5KHJlYWRyKQp1c3BfZGF0YSA8LSByZWFkX2NzdigiL1VzZXJzL2NydXovRGVza3RvcC91c3BvbHUuY3N2IikKbmFtZXModXNwX2RhdGEpCgpgYGAKCgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmxpYnJhcnkocmVhZHIpCnVzcG9wMV9kYXRhIDwtIHJlYWRfY3N2KCIvVXNlcnMvY3J1ei9EZXNrdG9wL3VzcG9wLmNzdiIpCm5hbWVzKHVzcG9wMV9kYXRhKQpgYGAKCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KdXNwX2RhdGEyIDwtIHVzcF9kYXRhICU+JSAKICByZW5hbWUobml0cm9nZW5tID0gYE5PMiBNZWFuYCwgCiAgICAgICAgIHN0YXRlY29kZSA9IGBTdGF0ZSBDb2RlYCwgCiAgICAgICAgIGNvdW50eWNvZGUgPSBgQ291bnR5IENvZGVgLAogICAgICAgICBjb21lYW4gPSBgQ08gTWVhbmApJT4lIAogIG11dGF0ZShzdGF0ZWNvZGU9cGFyc2VfaW50ZWdlcihzdGF0ZWNvZGUpKSU+JQogIGZpbHRlcihuaXRyb2dlbm0+MCklPiUKICBzZWxlY3Qobml0cm9nZW5tLCBzdGF0ZWNvZGUsIGNvdW50eWNvZGUsIGNvbWVhbiklPiUKICBncm91cF9ieShzdGF0ZWNvZGUpJT4lCiAgc3VtbWFyaXplKG5pdHJvZ2VubT1tZWFuKG5pdHJvZ2VubSkpCiAgCgoKdXNwX2RhdGEyCgpgYGAKCgoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQp1c19jb21ibyA8LSBhcHBlbmRfZGF0YSh1c19tYXAsIHVzcF9kYXRhMiwga2V5LnNocCA9ICJTVEFURUZQIiwga2V5LmRhdGEgPSAic3RhdGVjb2RlIikgCgpgYGAKCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KdXNwb3AyX2RhdGEgPC0gdXNwb3AxX2RhdGEgJT4lCiAgbXV0YXRlKEZJUFM9cGFyc2VfaW50ZWdlcihGSVBTKSklPiUKICBmaWx0ZXIodG90YWxwb3A+MCklPiUKICBzZWxlY3QoRklQUywgR2VvX05BTUUsIEdlb19RTkFNRSwgdG90YWxwb3AsIHBvcGRlbnNpdHkpJT4lCiAgZ3JvdXBfYnkoRklQUyklPiUKICBzdW1tYXJpemUodG90YWxwb3A9bWVhbih0b3RhbHBvcCkpIAoKdXNwb3AyX2RhdGEKYGBgCgoKCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KCnVzcG9wX2NvbWJvIDwtIGFwcGVuZF9kYXRhKHVzX21hcCwgdXNwb3AyX2RhdGEsIGtleS5zaHAgPSAiU1RBVEVGUCIsIGtleS5kYXRhID0gIkZJUFMiKSAKCmBgYAoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQp1c3BvcF9zdWJfY29tYm8gPC0gdXNwb3BfY29tYm8lPiUKICBmaWx0ZXIoIVNUQVRFRlAgPT0gMDIpICU+JSAKICBmaWx0ZXIoIVNUQVRFRlAgPT0gMTUpICU+JSAKICBmaWx0ZXIoIVNUQVRFRlAgPT0gNjApICU+JSAKICBmaWx0ZXIoIVNUQVRFRlAgPT0gNjYpICU+JSAKICBmaWx0ZXIoIVNUQVRFRlAgPT0gNjkpICU+JSAKICBmaWx0ZXIoIVNUQVRFRlAgPT0gNzIpICU+JSAKICBmaWx0ZXIoIVNUQVRFRlAgPT0gNzkpCmBgYAoKCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KdXNfc3ViX2NvbWJvIDwtIHVzX2NvbWJvJT4lCiAgZmlsdGVyKCFTVEFURUZQID09IDAyKSAlPiUgCiAgZmlsdGVyKCFTVEFURUZQID09IDE1KSAlPiUgCiAgZmlsdGVyKCFTVEFURUZQID09IDYwKSAlPiUgCiAgZmlsdGVyKCFTVEFURUZQID09IDY2KSAlPiUgCiAgZmlsdGVyKCFTVEFURUZQID09IDY5KSAlPiUgCiAgZmlsdGVyKCFTVEFURUZQID09IDcyKSAlPiUgCiAgZmlsdGVyKCFTVEFURUZQID09IDc5KQoKCmBgYAoKCgpgYGB7cn0KdXNfbmlfcG9wIDwtIG1lcmdlLmRhdGEuZnJhbWUodXNwX2RhdGEyLCB1c3BvcDJfZGF0YSkKCnVzX25pX3BvcCA8LSB1c19uaV9wb3AlPiUKICBtdXRhdGUodG90YWxwb3BjYXQgPSBpZmVsc2UodG90YWxwb3A+MCAmIHRvdGFscG9wIDw9MTAwMDAwMDAsIDEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG90YWxwb3AgPiAxMDAwMDAwMCAmIHRvdGFscG9wIDw9MjAwMDAwMDAsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b3RhbHBvcCA+IDIwMDAwMDAwICYgdG90YWxwb3AgPD0zMDAwMDAwMCwgMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvdGFscG9wID4gMzAwMDAwMDAgJiB0b3RhbHBvcCA8PTQwMDAwMDAwLCA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG90YWxwb3AgPiA0MDAwMDAwMCwgNSxOQSkpKSkpKQoKdXNfbmlfcG9wJT4lCiAgZ3JvdXBfYnkodG90YWxwb3BjYXQpJT4lCiAgc3VtbWFyaXplKG49bigpKQpgYGAKCgoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsbTEgPC0gbG0obml0cm9nZW5tIH4gdG90YWxwb3BjYXQsIGRhdGEgPSB1c19uaV9wb3ApCmBgYAoKCiNEaXN0cmlidXRpb24gb2YgdGhlIE4wMiAmIFRvdGFsIFBvcHVsYXRpb24gaW4gVW5pdGVkIFN0YXRlcwoKVGhlIG1lYW4gZGlzdHJpYnV0aW9uIG9mIG5pdHJvZ2VuIGRpb3hpZGUgaW50byB0aGUgYXRtb3NwaGVyZSBpcyBmcm9tIDgtIDEyLjUgcGFydHMgcGVyIGJpbGxpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMuIEluIGFkZGl0aW9uLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRvdGFsIHBvcHVsYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMgZGlzcGxheXMgdGhhdCBpdCBmYWxscyBiZXR3ZWVuIDEwLTIwIG1pbGxpb24gcGVvcGxlLgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZ2dwbG90KHVzX25pX3BvcCwgYWVzKHggPSBuaXRyb2dlbm0pKSArIGdlb21faGlzdG9ncmFtKGNvbG9yID0gImxpZ2h0IGNvcmFsIiwgZmlsbCA9ICJsaWdodCBncmVlbiIpCgpnZ3Bsb3QodXNfbmlfcG9wLCBhZXMoeCA9IHRvdGFscG9wY2F0KSkgKyBnZW9tX2hpc3RvZ3JhbShjb2xvciA9ICJsaWdodCBjb3JhbCIsIGZpbGwgPSAibGlnaHQgZ3JlZW4iKQpgYGAKI0xpbmVhciByZWdyZXNzaW9uIGFuYWx5c2lzCgpTdXJwcmlzaW5nbHksIHRoZSByZWdyZXNzaW9uIG91dHB1dCBkaXNwbGF5cyB0aGF0IHRvdGFsIHBvcHVsYXRpb24gaGFzIGEgdmVyeSBzbWFsbCBpbXBhY3Qgb24gbml0cm9nZW4gZGlveGlkZSBlbWlzc2lvbnMgaW4gdGhlIFVuaXRlcyBTdGF0ZXMgYW5kIHdhcyBub3Qgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudC4gR29pbmcgaW50byB0aGlzIGFuYWx5c2lzIEkgYXNzdW1lZCB0aGF0IHRoZSBpbXBhY3Qgb2YgcG9wdWxhdGlvbiBzaXplIHdvdWxkIGhhdmUgb24gdGhlIGdyZWVuaG91c2UgZ2FzIG5pdHJvZ2VuIGRpb3hpZGUgd291bGQgYmUgaW1tZW5zZS4gSG93ZXZlciwgYm90aCB0aGUgc3BhdGlhbCBtYXBwaW5nIGFuZCByZWdyZXNzaW9uIGRpc3BsYXkgb3RoZXJ3aXNlLiBPZiBjb3Vyc2UsIEkgbXVzdCBtZW50aW9uIHRoYXQgdGhlcmUgd2VyZSBjZXJ0YWlubHkgbGltaXRhdGlvbnMuIE1hbnkgZmFjdG9ycyBjb250cmlidXRlIHRvIHRoZSBlbWlzc2lvbnMgb2Ygbml0cm9nZW4gZGlveGlkZSBlbWlzc2lvbiBpbnRvIHRoZSBhdG1vc3BoZXJlLCBhbHRob3VnaCBwb3B1bGF0aW9ucyBtYXkgY2VydGFpbmx5IGhhdmUgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGVtaXNzaW9ucyBvZiB0aGlzIHBhcnRpY3VsYXIgZ2FzLiBMaW1pdGF0aW9ucyBvY2N1ciB3aGVuIG1lYXN1cmluZyBleGFjdGx5IGhvdyBtdWNoIGV2ZXJ5IHBlcnNvbiBpbiB0aGUgVS5TIGNvbnRyaWJ1dGVzIHRvIGFpciBwb2xsdXRpb24gYmVjYXVzZSBhIHNwdXJpb3VzIHJlbGF0aW9uc2hpcCBvY2N1cnMgYW5kIGl0IGlzIGRpZmZpY3VsdCB0byBjb250cm9sIGZvciBldmVyeXRoaW5nLiBJbiB0aGUgYXJ0aWNsZSBleGFtaW5pbmcgYWlyIHF1YWxpdHkgaW4gQ2FsaWZvcm5pYSBhbmQgcG9wdWxhdGlvbiBncm93dGggKENyYW1lciAxOTk4KSByZXNlYXJjaGVycyBpbmRpY2F0ZWQgdGhhdCB0aGV5IGhhZCBhIGhhcmQgdGltZSBpbXByb3ZpbmcgdGhlaXIgbW9kZWwsIGV2ZW4gYWZ0ZXIgYWNjb3VudGluZywgZXZlbiB3aXRoIGFsbCBvZiB0aGUgYWRkaXRpb25hbCB2YXJpYWJsZXMgdGhhdCB0aGV5IGFjY291bnRlZCBmb3IuIE92ZXJhbGwsIGl0IHNlZW1zIHRoYXQgZ2V0dGluZyBleGFjdCByZXN1bHRzIG9uIGhvdyBtdWNoIG5pdHJvZ2VuIGRpb3hpZGUgcG9wdWxhdGlvbnMgZW1pdCBpbnRvIHRoZSBhdG1vc3BoZXJlIGlzIG5vdCBhcyBpbnR1aXRpdmUgYXMgaXQgbWF5IGxvb2ssIHJhdGhlciBhaXIgcG9sbHV0aW9uIGhhcyBiZWVuIG1lZGlhdGVkIGJ5IHJlZ3VsYXRvcnkgZWZmb3J0cy4KCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSJhc2lzIn0Kc3RhcmdhemVyKGxtMSxkaWdpdHMgPSAxNywgdHlwZSA9ICJodG1sIikKYGBgCgojTml0cm9nZW4gRGlveGlkZSBtYXAgZW1pc3Npb25zIG9mIHRoZSBVbml0ZWQgU3RhdGVzIFZzIFBvcHVsYXRpb24gaW4gVGhlIFVuaXRlZCBTdGF0ZXMKClRoZSBFbnZpcm9ubWVudGFsIFByb3RlY3Rpb24gYWdlbmN5IGRhdGEgb24gTk8yIGVtaXNzaW9ucyBhbmQgcG9wdWxhdGlvbiBkaXNwbGF5IHF1aXRlIGluY29uc2lzdGVudCByZXN1bHRzLiBXZSBzZWUgdGhhdCBzb21lIHN0YXRlcyB3aXRoIGhpZ2ggcG9wdWxhdGlvbiBkbyBoYXZlIGhpZ2ggZW1pc3Npb25zIG9mIE4wMiwgZm9yIGV4YW1wbGUgQ2FsaWZvcm5pYSBoYXMgYW4gZXh0cmVtZWx5IGhpZ2ggcG9wdWxhdGlvbiBhbmQgcmVsYXRpdmVseSBoaWdoIE5PMiBlbWlzc2lvbnMuIEhvd2V2ZXIsIHRoaXMgaXMgbm90IGVub3VnaCB0byBhcmd1ZSB0aGF0IGxhcmdlIHBvcHVsYXRpb24gY3JlYXRlcyBoaWdoIE4wMiBlbWlzc2lvbnMuIAoKCmBgYHtyfQp0bV9zaGFwZSh1c19zdWJfY29tYm8sIHByb2plY3Rpb24gPSAyMTYzKSArIHRtX3BvbHlnb25zKCJuaXRyb2dlbm0iLCBwYWxldHRlID0gIkJ1R24iKSArIHRtX3NoYXBlKHVzX21hcCkgKyB0bV9ib3JkZXJzKGx3ZCA9IC4zNiwgY29sID0gImJsYWNrIiwgYWxwaGEgPSAxKSAKCgp0bV9zaGFwZSh1c3BvcF9zdWJfY29tYm8sIHByb2plY3Rpb24gPSAyMTYzKSArIHRtX3BvbHlnb25zKCJ0b3RhbHBvcCIsIHBhbGV0dGUgPSAiQnVHbiIpICsgdG1fc2hhcGUodXNfbWFwKSArIHRtX2JvcmRlcnMobHdkID0gLjM2LCBjb2wgPSAiYmxhY2siLCBhbHBoYSA9IDEpIAoKYGBgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojQmlibGlvZ3JhcGh5CgpbQGNyYW1lcjE5OThwb3B1bGF0aW9uXSBbQGNyYW1lcjIwMDJwb3B1bGF0aW9uXSBbQGR1bmxhcDIwMTJlbnZpcm9ubWVudGFsXQoK