Getting Started
Loading packages
library(tidyverse)
library(openintro)
library(infer)
set.seed(99)
Creating the data
We will assume a total population size of 100,000 even though that’s
much smaller than the population of all US adults to keep our
computations simple. The proportion of interest is: Roughly six-in-ten
U.S adults (62%) say climate change in currently affecting their local
community either a great deal or some, according to a new Pew Research
Center survey.
us_adults <- tibble(
climate_change_affects = c(rep("Yes", 62000), rep("No", 38000))
)
Visualization of distribution of responses:
ggplot(us_adults, aes(x = climate_change_affects)) +
geom_bar() +
labs(
x = "", y ="",
title = "Do you think climate change is affecting your local community?"
) +
coord_flip()

Obtaining summary statistics:
us_adults %>% count(climate_change_affects) %>% mutate (p = n/sum(n))
## # A tibble: 2 × 3
## climate_change_affects n p
## <chr> <int> <dbl>
## 1 No 38000 0.38
## 2 Yes 62000 0.62
Starting with sample size of 60
n <- 60
samp <- us_adults %>%
sample_n(size = n)
2. Would you expect another student’s sample proportion to be
identical to yours? Would you expect it to be similar? Why or why
not?
I would expect it to be similar, but not identical. We are pulling
data from the same source but through the repeated sampling process, our
samples should be around the population proportion of 62%.
Confidence Intervals
Finding the 95% confidence interval for proportion of US adults who
think climate change affects their local community
samp %>%
specify(response = climate_change_affects, success = "Yes") %>%
generate(reps = 1000, type = "bootstrap") %>%
calculate(stat = "prop") %>%
get_ci(level = 0.95)
## # A tibble: 1 × 2
## lower_ci upper_ci
## <dbl> <dbl>
## 1 0.533 0.767
Confidence levels
1. In the interpretation above, we used the phrase “95% confident”.
What does “95% confidence” mean?
We are 95% confident that the true proportion of U.S. adults that
think that climate change is affecting their local community is between
0.417 and 0.667. 95% confidence means that 95% of the times we gather
samples and plot their means, it will fall between these parameters.
3. Each student should have gotten a slightly different confidence
interval. What proportion of those intervals would you expect to capture
the true population mean? Why?
I would expect 95% of these intervals to capture the true population
proportion since that is what we were aiming for from the beginning and
was integrated in our calculations.
Given a sample size of 60, 1000 bootstrap samples for each interval,
and 50 confidence intervals constructed (the default values for the
above app), what proportion of your confidence intervals include the
true population proportion? Is this proportion exactly equal to the
confidence level? If not, explain why. Make sure to include your plot in
your answer.

In this simulation, 48 out of 50 of the confidence intervals
constructed included the true population proportion. This is consistent
with our 95% confidence level. While not exactly the same value, this is
expected due to the nature of this process.
More Practice
1. If we chose a confidence level lower than 95%, it would narrow
the interval. This is because there is more uncertainty as we go down in
confidence, and the true proportion will be captured at a lesser rate
than 95%.
2. Using code from the infer package and data from the one sample
you have (samp), find a confidence interval for the proportion of US
Adults who think climate change is affecting their local community with
a confidence level of your choosing (other than 95%) and interpret
it.
samp %>%
specify(response = climate_change_affects, success = "Yes") %>%
generate(reps = 1000, type = "bootstrap") %>%
calculate(stat = "prop") %>%
get_ci(level = 0.90)
## # A tibble: 1 × 2
## lower_ci upper_ci
## <dbl> <dbl>
## 1 0.533 0.75
We are 90% confident that the true proportion of US adults that think
that climate change is affecting their local communities is between
0.433 and 0.650
3. Using the app, calculate 50 confidence intervals at the
confidence level you chose in the previous question, and plot all
intervals on one plot, and calculate the proportion of intervals that
include the true population proportion. How does this percentage compare
to the confidence level selected for the intervals?
I utilized a 90% confidence level. The proportion of intervals that
that included the true proportion was 44/50 which 0.88, or 88%. This is
very close to our confidence level.
4. Lastly, try one more (different) confidence level. First, state
how you expect the width of this interval to compare to previous ones
you calculated. Then, calculate the bounds of the interval using the
infer package and data from samp and interpret it. Finally, use the app
to generate many intervals and calculate the proportion of intervals
that are capture the true population proportion.
samp %>%
specify(response = climate_change_affects, success = "Yes") %>%
generate(reps = 1000, type = "bootstrap") %>%
calculate(stat = "prop") %>%
get_ci(level = 0.80)
## # A tibble: 1 × 2
## lower_ci upper_ci
## <dbl> <dbl>
## 1 0.567 0.733
Our app is consistent with our bootstrapping simulation, in which 41
out of 50 confidence intervals captured the true population
proportion.
6. Finally, given a sample size (say, 60), how does the width of the
interval change as you increase the number of bootstrap samples.
Widths do not seem to change as adjust the number of bootstrap
samples.
LS0tCnRpdGxlOiAiTUFUSDIxNyBMYWIgSHciCmF1dGhvcjogIklicmFoaW0gUGluem9uIFBlcmV6IgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0Ci0tLQoKIyMgR2V0dGluZyBTdGFydGVkCgojIyMgTG9hZGluZyBwYWNrYWdlcwoKYGBge3IsIG1lc3NhZ2U9RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KG9wZW5pbnRybykKbGlicmFyeShpbmZlcikKc2V0LnNlZWQoOTkpCmBgYAoKIyMjIENyZWF0aW5nIHRoZSBkYXRhCgpXZSB3aWxsIGFzc3VtZSBhIHRvdGFsIHBvcHVsYXRpb24gc2l6ZSBvZiAxMDAsMDAwIGV2ZW4gdGhvdWdoIHRoYXQncyBtdWNoIHNtYWxsZXIgdGhhbiB0aGUgcG9wdWxhdGlvbiBvZiBhbGwgVVMgYWR1bHRzIHRvIGtlZXAgb3VyIGNvbXB1dGF0aW9ucyBzaW1wbGUuIFRoZSBwcm9wb3J0aW9uIG9mIGludGVyZXN0IGlzOiBSb3VnaGx5IHNpeC1pbi10ZW4gVS5TIGFkdWx0cyAoNjIlKSBzYXkgY2xpbWF0ZSBjaGFuZ2UgaW4gY3VycmVudGx5IGFmZmVjdGluZyB0aGVpciBsb2NhbCBjb21tdW5pdHkgZWl0aGVyIGEgZ3JlYXQgZGVhbCBvciBzb21lLCBhY2NvcmRpbmcgdG8gYSBuZXcgUGV3IFJlc2VhcmNoIENlbnRlciBzdXJ2ZXkuIAoKYGBge3J9CnVzX2FkdWx0cyA8LSB0aWJibGUoCiAgY2xpbWF0ZV9jaGFuZ2VfYWZmZWN0cyA9IGMocmVwKCJZZXMiLCA2MjAwMCksIHJlcCgiTm8iLCAzODAwMCkpCikKYGBgCgpWaXN1YWxpemF0aW9uIG9mIGRpc3RyaWJ1dGlvbiBvZiByZXNwb25zZXM6IAoKYGBge3J9CmdncGxvdCh1c19hZHVsdHMsIGFlcyh4ID0gY2xpbWF0ZV9jaGFuZ2VfYWZmZWN0cykpICsKICBnZW9tX2JhcigpICsKICBsYWJzKAogICAgeCA9ICIiLCB5ID0iIiwKICAgIHRpdGxlID0gIkRvIHlvdSB0aGluayBjbGltYXRlIGNoYW5nZSBpcyBhZmZlY3RpbmcgeW91ciBsb2NhbCBjb21tdW5pdHk/IgogICkgKwogIGNvb3JkX2ZsaXAoKQpgYGAKCk9idGFpbmluZyBzdW1tYXJ5IHN0YXRpc3RpY3M6IAoKYGBge3J9CnVzX2FkdWx0cyAlPiUgY291bnQoY2xpbWF0ZV9jaGFuZ2VfYWZmZWN0cykgJT4lIG11dGF0ZSAocCA9IG4vc3VtKG4pKQpgYGAKClN0YXJ0aW5nIHdpdGggc2FtcGxlIHNpemUgb2YgNjAKCmBgYHtyfQpuIDwtIDYwCnNhbXAgPC0gdXNfYWR1bHRzICU+JQogIHNhbXBsZV9uKHNpemUgPSBuKQpgYGAKCiMjIyMgMS4gV2hhdCBwZXJjZW50IG9mIHRoZSBhZHVsdHMgaW4geW91ciBzYW1wbGUgdGhpbmsgY2xpbWF0ZSBjaGFuZ2UgYWZmZWN0cyB0aGVpciBsb2NhbCBjb21tdW5pdHk/CgpgYGB7cn0Kc2FtcCAlPiUgY291bnQoY2xpbWF0ZV9jaGFuZ2VfYWZmZWN0cykgJT4lIG11dGF0ZShwID0gbi9zdW0obikpCmBgYAoKQWJvdXQgNTUlIG9mIGFkdWx0cyBpbiB0aGlzIHNhbXBsZSB0aGluayBjbGltYXRlIGNoYW5nZSBhZmZlY3RzIHRoZWlyIGxvY2FsIGNvbW11bml0eS4KCiMjIyMgMi4gV291bGQgeW91IGV4cGVjdCBhbm90aGVyIHN0dWRlbnTigJlzIHNhbXBsZSBwcm9wb3J0aW9uIHRvIGJlIGlkZW50aWNhbCB0byB5b3Vycz8gV291bGQgeW91IGV4cGVjdCBpdCB0byBiZSBzaW1pbGFyPyBXaHkgb3Igd2h5IG5vdD8KCkkgd291bGQgZXhwZWN0IGl0IHRvIGJlIHNpbWlsYXIsIGJ1dCBub3QgaWRlbnRpY2FsLiBXZSBhcmUgcHVsbGluZyBkYXRhIGZyb20gdGhlIHNhbWUgc291cmNlIGJ1dCB0aHJvdWdoIHRoZSByZXBlYXRlZCBzYW1wbGluZyBwcm9jZXNzLCBvdXIgc2FtcGxlcyBzaG91bGQgYmUgYXJvdW5kIHRoZSBwb3B1bGF0aW9uIHByb3BvcnRpb24gb2YgNjIlLiAKCiMjIENvbmZpZGVuY2UgSW50ZXJ2YWxzCgpGaW5kaW5nIHRoZSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgcHJvcG9ydGlvbiBvZiBVUyBhZHVsdHMgd2hvIHRoaW5rIGNsaW1hdGUgY2hhbmdlIGFmZmVjdHMgdGhlaXIgbG9jYWwgY29tbXVuaXR5CgpgYGB7cn0Kc2FtcCAlPiUKICBzcGVjaWZ5KHJlc3BvbnNlID0gY2xpbWF0ZV9jaGFuZ2VfYWZmZWN0cywgc3VjY2VzcyA9ICJZZXMiKSAlPiUgCiAgZ2VuZXJhdGUocmVwcyA9IDEwMDAsIHR5cGUgPSAiYm9vdHN0cmFwIikgJT4lIAogIGNhbGN1bGF0ZShzdGF0ID0gInByb3AiKSAlPiUKICBnZXRfY2kobGV2ZWwgPSAwLjk1KQpgYGAKCiMjIyBDb25maWRlbmNlIGxldmVscwoKIyMjIyAxLiBJbiB0aGUgaW50ZXJwcmV0YXRpb24gYWJvdmUsIHdlIHVzZWQgdGhlIHBocmFzZSDigJw5NSUgY29uZmlkZW504oCdLiBXaGF0IGRvZXMg4oCcOTUlIGNvbmZpZGVuY2XigJ0gbWVhbj8KCldlIGFyZSA5NSUgY29uZmlkZW50IHRoYXQgdGhlIHRydWUgcHJvcG9ydGlvbiBvZiBVLlMuIGFkdWx0cyB0aGF0IHRoaW5rIHRoYXQgY2xpbWF0ZSBjaGFuZ2UgaXMgYWZmZWN0aW5nIHRoZWlyIGxvY2FsIGNvbW11bml0eSBpcyBiZXR3ZWVuIDAuNDE3IGFuZCAwLjY2Ny4gOTUlIGNvbmZpZGVuY2UgbWVhbnMgdGhhdCA5NSUgb2YgdGhlIHRpbWVzIHdlIGdhdGhlciBzYW1wbGVzIGFuZCBwbG90IHRoZWlyIG1lYW5zLCBpdCB3aWxsIGZhbGwgYmV0d2VlbiB0aGVzZSBwYXJhbWV0ZXJzLiAgIAoKIyMjIyAyLiBEb2VzIHlvdXIgY29uZmlkZW5jZSBpbnRlcnZhbCBjYXB0dXJlIHRoZSB0cnVlIHBvcHVsYXRpb24gcHJvcG9ydGlvbiBvZiBVUyBhZHVsdHMgd2hvIHRoaW5rIGNsaW1hdGUgY2hhbmdlIGFmZmVjdHMgdGhlaXIgbG9jYWwgY29tbXVuaXR5PyBJZiB5b3UgYXJlIHdvcmtpbmcgb24gdGhpcyBsYWIgaW4gYSBjbGFzc3Jvb20sIGRvZXMgeW91ciBuZWlnaGJvcuKAmXMgaW50ZXJ2YWwgY2FwdHVyZSB0aGlzIHZhbHVlPwoKWWVzLCBpdCB3aWxsIGNhcHR1cmUgdGhlIHRydWUgcG9wdWxhdGlvbiBwcm9wb3J0aW9uIG9mIFVTIGFkdWx0cyB3aG8gdGhpbmsgY2xpbWF0ZSBjaGFuZ2UgYWZmZWN0cyB0aGVpciBsb2NhbCBjb21tdW5pdHkgOTUlIG9mIHRoZSB0aW1lLiBJZiB3ZSBhcmUgaW4gYSBjbGFzc3Jvb20sIHdlIGNhbiBleHBlY3Qgb3VyIG5laWdoYm9yJ3MgaW50ZXJ2YWwgdG8gY2FwdHVyZSB0aGlzIHZhbHVlLiAKCiMjIyMgMy4gRWFjaCBzdHVkZW50IHNob3VsZCBoYXZlIGdvdHRlbiBhIHNsaWdodGx5IGRpZmZlcmVudCBjb25maWRlbmNlIGludGVydmFsLiBXaGF0IHByb3BvcnRpb24gb2YgdGhvc2UgaW50ZXJ2YWxzIHdvdWxkIHlvdSBleHBlY3QgdG8gY2FwdHVyZSB0aGUgdHJ1ZSBwb3B1bGF0aW9uIG1lYW4/IFdoeT8KCkkgd291bGQgZXhwZWN0IDk1JSBvZiB0aGVzZSBpbnRlcnZhbHMgdG8gY2FwdHVyZSB0aGUgdHJ1ZSBwb3B1bGF0aW9uIHByb3BvcnRpb24gc2luY2UgdGhhdCBpcyB3aGF0IHdlIHdlcmUgYWltaW5nIGZvciBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIHdhcyBpbnRlZ3JhdGVkIGluIG91ciBjYWxjdWxhdGlvbnMuIAoKIyMjIyBHaXZlbiBhIHNhbXBsZSBzaXplIG9mIDYwLCAxMDAwIGJvb3RzdHJhcCBzYW1wbGVzIGZvciBlYWNoIGludGVydmFsLCBhbmQgNTAgY29uZmlkZW5jZSBpbnRlcnZhbHMgY29uc3RydWN0ZWQgKHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGFib3ZlIGFwcCksIHdoYXQgcHJvcG9ydGlvbiBvZiB5b3VyIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGluY2x1ZGUgdGhlIHRydWUgcG9wdWxhdGlvbiBwcm9wb3J0aW9uPyBJcyB0aGlzIHByb3BvcnRpb24gZXhhY3RseSBlcXVhbCB0byB0aGUgY29uZmlkZW5jZSBsZXZlbD8gSWYgbm90LCBleHBsYWluIHdoeS4gTWFrZSBzdXJlIHRvIGluY2x1ZGUgeW91ciBwbG90IGluIHlvdXIgYW5zd2VyLgoKYGBge3IsIGVjaG8gPSBGQUxTRX0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIi9Vc2Vycy9pYnJhaGltcGluem9uL0Rlc2t0b3AvQ0lfTWF0aDIxNy5wbmciKQpgYGAKCkluIHRoaXMgc2ltdWxhdGlvbiwgNDggb3V0IG9mIDUwIG9mIHRoZSBjb25maWRlbmNlIGludGVydmFscyBjb25zdHJ1Y3RlZCBpbmNsdWRlZCB0aGUgdHJ1ZSBwb3B1bGF0aW9uIHByb3BvcnRpb24uIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIG91ciA5NSUgY29uZmlkZW5jZSBsZXZlbC4gV2hpbGUgbm90IGV4YWN0bHkgdGhlIHNhbWUgdmFsdWUsIHRoaXMgaXMgZXhwZWN0ZWQgZHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhpcyBwcm9jZXNzLiAKCiMjIE1vcmUgUHJhY3RpY2UKCiMjIyMgMS4gSWYgd2UgY2hvc2UgYSBjb25maWRlbmNlIGxldmVsIGxvd2VyIHRoYW4gOTUlLCBpdCB3b3VsZCBuYXJyb3cgdGhlIGludGVydmFsLiBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbW9yZSB1bmNlcnRhaW50eSBhcyB3ZSBnbyBkb3duIGluIGNvbmZpZGVuY2UsIGFuZCB0aGUgdHJ1ZSBwcm9wb3J0aW9uIHdpbGwgYmUgY2FwdHVyZWQgYXQgYSBsZXNzZXIgcmF0ZSB0aGFuIDk1JS4gCgojIyMjIDIuIFVzaW5nIGNvZGUgZnJvbSB0aGUgaW5mZXIgcGFja2FnZSBhbmQgZGF0YSBmcm9tIHRoZSBvbmUgc2FtcGxlIHlvdSBoYXZlIChzYW1wKSwgZmluZCBhIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZm9yIHRoZSBwcm9wb3J0aW9uIG9mIFVTIEFkdWx0cyB3aG8gdGhpbmsgY2xpbWF0ZSBjaGFuZ2UgaXMgYWZmZWN0aW5nIHRoZWlyIGxvY2FsIGNvbW11bml0eSB3aXRoIGEgY29uZmlkZW5jZSBsZXZlbCBvZiB5b3VyIGNob29zaW5nIChvdGhlciB0aGFuIDk1JSkgYW5kIGludGVycHJldCBpdC4KCmBgYHtyfQpzYW1wICU+JQogIHNwZWNpZnkocmVzcG9uc2UgPSBjbGltYXRlX2NoYW5nZV9hZmZlY3RzLCBzdWNjZXNzID0gIlllcyIpICU+JSAKICBnZW5lcmF0ZShyZXBzID0gMTAwMCwgdHlwZSA9ICJib290c3RyYXAiKSAlPiUgCiAgY2FsY3VsYXRlKHN0YXQgPSAicHJvcCIpICU+JQogIGdldF9jaShsZXZlbCA9IDAuOTApCmBgYAoKV2UgYXJlIDkwJSBjb25maWRlbnQgdGhhdCB0aGUgdHJ1ZSBwcm9wb3J0aW9uIG9mIFVTIGFkdWx0cyB0aGF0IHRoaW5rIHRoYXQgY2xpbWF0ZSBjaGFuZ2UgaXMgYWZmZWN0aW5nIHRoZWlyIGxvY2FsIGNvbW11bml0aWVzIGlzIGJldHdlZW4gMC40MzMgYW5kIDAuNjUwCgojIyMjIDMuIFVzaW5nIHRoZSBhcHAsIGNhbGN1bGF0ZSA1MCBjb25maWRlbmNlIGludGVydmFscyBhdCB0aGUgY29uZmlkZW5jZSBsZXZlbCB5b3UgY2hvc2UgaW4gdGhlIHByZXZpb3VzIHF1ZXN0aW9uLCBhbmQgcGxvdCBhbGwgaW50ZXJ2YWxzIG9uIG9uZSBwbG90LCBhbmQgY2FsY3VsYXRlIHRoZSBwcm9wb3J0aW9uIG9mIGludGVydmFscyB0aGF0IGluY2x1ZGUgdGhlIHRydWUgcG9wdWxhdGlvbiBwcm9wb3J0aW9uLiBIb3cgZG9lcyB0aGlzIHBlcmNlbnRhZ2UgY29tcGFyZSB0byB0aGUgY29uZmlkZW5jZSBsZXZlbCBzZWxlY3RlZCBmb3IgdGhlIGludGVydmFscz8KCkkgdXRpbGl6ZWQgYSA5MCUgY29uZmlkZW5jZSBsZXZlbC4gVGhlIHByb3BvcnRpb24gb2YgaW50ZXJ2YWxzIHRoYXQgdGhhdCBpbmNsdWRlZCB0aGUgdHJ1ZSBwcm9wb3J0aW9uIHdhcyA0NC81MCB3aGljaCAwLjg4LCBvciA4OCUuIFRoaXMgaXMgdmVyeSBjbG9zZSB0byBvdXIgY29uZmlkZW5jZSBsZXZlbC4gCgojIyMjIDQuIExhc3RseSwgdHJ5IG9uZSBtb3JlIChkaWZmZXJlbnQpIGNvbmZpZGVuY2UgbGV2ZWwuIEZpcnN0LCBzdGF0ZSBob3cgeW91IGV4cGVjdCB0aGUgd2lkdGggb2YgdGhpcyBpbnRlcnZhbCB0byBjb21wYXJlIHRvIHByZXZpb3VzIG9uZXMgeW91IGNhbGN1bGF0ZWQuIFRoZW4sIGNhbGN1bGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBpbnRlcnZhbCB1c2luZyB0aGUgaW5mZXIgcGFja2FnZSBhbmQgZGF0YSBmcm9tIHNhbXAgYW5kIGludGVycHJldCBpdC4gRmluYWxseSwgdXNlIHRoZSBhcHAgdG8gZ2VuZXJhdGUgbWFueSBpbnRlcnZhbHMgYW5kIGNhbGN1bGF0ZSB0aGUgcHJvcG9ydGlvbiBvZiBpbnRlcnZhbHMgdGhhdCBhcmUgY2FwdHVyZSB0aGUgdHJ1ZSBwb3B1bGF0aW9uIHByb3BvcnRpb24uCgpgYGB7cn0Kc2FtcCAlPiUKICBzcGVjaWZ5KHJlc3BvbnNlID0gY2xpbWF0ZV9jaGFuZ2VfYWZmZWN0cywgc3VjY2VzcyA9ICJZZXMiKSAlPiUgCiAgZ2VuZXJhdGUocmVwcyA9IDEwMDAsIHR5cGUgPSAiYm9vdHN0cmFwIikgJT4lIAogIGNhbGN1bGF0ZShzdGF0ID0gInByb3AiKSAlPiUKICBnZXRfY2kobGV2ZWwgPSAwLjgwKQpgYGAKCk91ciBhcHAgaXMgY29uc2lzdGVudCB3aXRoIG91ciBib290c3RyYXBwaW5nIHNpbXVsYXRpb24sIGluIHdoaWNoIDQxIG91dCBvZiA1MCBjb25maWRlbmNlIGludGVydmFscyBjYXB0dXJlZCB0aGUgdHJ1ZSBwb3B1bGF0aW9uIHByb3BvcnRpb24uIAoKIyMjIyA1LiBVc2luZyB0aGUgYXBwLCBleHBlcmltZW50IHdpdGggZGlmZmVyZW50IHNhbXBsZSBzaXplcyBhbmQgY29tbWVudCBvbiBob3cgdGhlIHdpZHRocyBvZiBpbnRlcnZhbHMgY2hhbmdlIGFzIHNhbXBsZSBzaXplIGNoYW5nZXMgKGluY3JlYXNlcyBhbmQgZGVjcmVhc2VzKS4KCldlIG5vdGljZSB0aGF0IGFzIHdlIGluY3JlYXNlIHRoZSBzYW1wbGUgc2l6ZSwgdGhlIHdpZHRoIG9mIHRoZSBpbnRlcnZhbHMgZGVjcmVhc2VzLiBUaGUgY29udHJhcnkgb2NjdXJzIHdoZW4gd2UgZGVjcmVhc2Ugc2FtcGxlIHNpemUuIAoKIyMjIyA2LiBGaW5hbGx5LCBnaXZlbiBhIHNhbXBsZSBzaXplIChzYXksIDYwKSwgaG93IGRvZXMgdGhlIHdpZHRoIG9mIHRoZSBpbnRlcnZhbCBjaGFuZ2UgYXMgeW91IGluY3JlYXNlIHRoZSBudW1iZXIgb2YgYm9vdHN0cmFwIHNhbXBsZXMuCgpXaWR0aHMgZG8gbm90IHNlZW0gdG8gY2hhbmdlIGFzIGFkanVzdCB0aGUgbnVtYmVyIG9mIGJvb3RzdHJhcCBzYW1wbGVzLiA=