library(tidyverse)
library(openintro)
data("fastfood", package='openintro')

Exercise 1

McDonald’s plot is right skewed curve. McDonald’s products’ calories from fat centers the around 200-300 calories as six of their products have ~250 calories. There are few products that are outliers from the distribution; there are +800 calories from fat. (Note:use xlim(0,500) for estimates)

Dairy queen’s plot is a less right skewed curve in its calories from fat. Dairy queen has a higher center as calories from; its products center around 300 calories. This is not surprise as DQ have more dairy products compared to MCd’s. However,DQ’s 90th quantile stops around 400 and its outliers is under 700. (Note:use xlim(0,700) for estimates)

library(ggplot2)
mcdonalds <- fastfood %>%
  filter(restaurant == "Mcdonalds")
dairy_queen <- fastfood %>%
  filter(restaurant == "Dairy Queen")
ggplot(mcdonalds, aes(x = cal_fat)) + geom_histogram(fill = "#C0392B") + theme_classic()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(dairy_queen, aes(x = cal_fat)) + geom_histogram(fill = "#E59866") + theme_classic()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Exercise 2

Yes, it does appear to be nearly normal distribution. I am more inclined to stay with right skewed as the density of the products have a large spread.

dqmean <- mean(dairy_queen$cal_fat)
dqsd   <- sd(dairy_queen$cal_fat)
ggplot(data = dairy_queen, aes(x = cal_fat)) +
  geom_blank() +
  geom_histogram(aes(y = ..density..)) +
  stat_function(fun = dnorm,
                args = c(mean = dqmean, sd = dqsd),
                col = "tomato")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Exercise 3

The simulated DQ’s points fall closely to the line. There is a increased deviation from the mean, as points further away from the line. DQ’s real data has more deviations from its median but very similar.

sim_norm <- rnorm(n = nrow(dairy_queen),mean = dqmean,sd = dqsd)
ggplot(mapping = aes(sample = sim_norm)) + stat_qq(size = 2, color = "pink") + stat_qq_line(color = "red")

ggplot(data = dairy_queen, aes(sample = cal_fat)) +stat_qq(size = 2, color ="red") + stat_qq_line(color = "white")

Exercise 4

The simulated normal probability plots are very similar to the real data plot. Its difference is in the shape of the sim Data as it appears to correct the deviations around the tail. Also, there appears to be more products of the same cal_fat in the sim plots compared to the real data.

qqnormsim(sample = cal_fat, data = dairy_queen)

Exercise 5

I don’t believe McDonald’s menu has a normal distribution. There is a more apparent difference in the McDonald’ real data compared to the simulated data. There is steeper deviations at the tail of the real data. The sim plot tried to balance out the tails with an increment in the samples. The sim plots appeared to have shifted the quarantines of the original data and a right shift for the mean of the theorized data.

qqnormsim(sample = cal_fat, data = mcdonalds)

Exercise 6

What is the probability that a randomly chosen Subway product is considered low sodium? What is the probability that a randomly chosen taco bell product has more sugar than the daily amount?

In the calculations of their probabilities under theoretical/empirical normal distribution, we saw a closer agrrement in both methods with the subway question.

subway<- fastfood %>% filter(restaurant == "Subway")
sbmean <- mean(subway$sodium)
sbsd   <- sd(subway$sodium)
pnorm(140,sbmean,sbsd)
## [1] 0.06380986
subway %>% filter(sodium<140) %>%summarise(percent = n() / nrow(subway))
## # A tibble: 1 x 1
##   percent
##     <dbl>
## 1  0.0104
Mcmean <- mean(mcdonalds$sugar)
Mcsd   <- sd(mcdonalds$sugar)
pnorm(36,Mcmean,Mcsd)
## [1] 0.9691213
mcdonalds %>% filter(sugar>36) %>%summarise(percent = n() / nrow(mcdonalds))
## # A tibble: 1 x 1
##   percent
##     <dbl>
## 1  0.0351

Exercise 7

Out of all the restaurants, Burger King had the closest distribution to the normal. Burger king has the most tightest line in the QQ plot with its few deviations close to the diagonal line.

taco_bell <- fastfood %>%filter(restaurant == "Taco Bell")
arbys <- fastfood %>%filter(restaurant == "Arbys")
burger_king <- fastfood %>%filter(restaurant == "Burger King")
sonic <- fastfood %>%filter(restaurant == "Sonic")
chick_fla<-fastfood %>%filter(restaurant=="Chick Fil-A")
ggplot(data = dairy_queen, aes(sample = sodium)) +stat_qq(size = 2, color ="red") + stat_qq_line(color = "white")

ggplot(data = mcdonalds, aes(sample = sodium)) +stat_qq(size = 2, color ="red") + stat_qq_line(color = "white")

ggplot(data = taco_bell, aes(sample = sodium)) +stat_qq(size = 2, color ="red") + stat_qq_line(color = "white")

ggplot(data = subway, aes(sample = sodium)) +stat_qq(size = 2, color ="red") + stat_qq_line(color = "white")

ggplot(data = arbys, aes(sample = sodium)) +stat_qq(size = 2, color ="red") + stat_qq_line(color = "white")

ggplot(data = burger_king, aes(sample = sodium)) +stat_qq(size = 2, color ="red") + stat_qq_line(color = "white")

ggplot(data = sonic, aes(sample = sodium)) +stat_qq(size = 2, color ="red") + stat_qq_line(color = "white")

ggplot(data = chick_fla, aes(sample = sodium)) +stat_qq(size = 2, color ="red") + stat_qq_line(color = "white")

Exercise 8

I am assuming it is the amount of products that each restaurant carry with that sodium level. For example, there was 27 chickfla products in the chickfla table. In its normal probability plot, there appears an linear increase in the sodium of the food items. In a stepwise pattern plot, the food items may have large difference in their sodium levels.

Exercise 9

There is a a lot of deviations on the right tail on the taco bell plot. From the observation, the variable is right skewed.

ggplot(data = taco_bell, aes(sample = total_carb)) +stat_qq(size = 2, color ="#8E44AD") + stat_qq_line(color = "#FBFCFC")+labs(x="total_carbs",y="density")

Looking at the histogram, it appears that the majority of taco bell’s food items are below 80g. The peak of the histogram leans to the right instead of the center of the plot like a normal distributed curve would be placed.

ggplot(taco_bell, aes(x = total_carb)) + geom_histogram(fill = "#C0392B") + theme_classic()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

LS0tDQp0aXRsZTogIkxhYiA0IE5vcm1hbCBEaXN0cmlidXRpb24iDQphdXRob3I6ICJWeWFubmEgSGlsbCINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0DQotLS0NCg0KYGBge3IgbG9hZC1wYWNrYWdlcywgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShvcGVuaW50cm8pDQpkYXRhKCJmYXN0Zm9vZCIsIHBhY2thZ2U9J29wZW5pbnRybycpDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDENCg0KTWNEb25hbGQncyBwbG90IGlzIHJpZ2h0IHNrZXdlZCBjdXJ2ZS4gTWNEb25hbGQncyBwcm9kdWN0cycgY2Fsb3JpZXMgZnJvbSBmYXQgY2VudGVycyB0aGUgYXJvdW5kIDIwMC0zMDAgY2Fsb3JpZXMgYXMgc2l4IG9mIHRoZWlyIHByb2R1Y3RzIGhhdmUgfjI1MCBjYWxvcmllcy4gVGhlcmUgYXJlIGZldyBwcm9kdWN0cyB0aGF0IGFyZSBvdXRsaWVycyBmcm9tIHRoZSBkaXN0cmlidXRpb247IHRoZXJlIGFyZSArODAwIGNhbG9yaWVzIGZyb20gZmF0LiAoTm90ZTp1c2UgeGxpbSgwLDUwMCkgZm9yIGVzdGltYXRlcykgDQoNCkRhaXJ5IHF1ZWVuJ3MgcGxvdCBpcyBhIGxlc3MgcmlnaHQgc2tld2VkIGN1cnZlIGluIGl0cyBjYWxvcmllcyBmcm9tIGZhdC4gRGFpcnkgcXVlZW4gaGFzIGEgaGlnaGVyIGNlbnRlciBhcyBjYWxvcmllcyBmcm9tOyBpdHMgcHJvZHVjdHMgY2VudGVyIGFyb3VuZCAzMDAgY2Fsb3JpZXMuIFRoaXMgaXMgbm90IHN1cnByaXNlIGFzIERRIGhhdmUgbW9yZSBkYWlyeSBwcm9kdWN0cyBjb21wYXJlZCB0byBNQ2Qncy4gSG93ZXZlcixEUSdzIDkwdGggcXVhbnRpbGUgc3RvcHMgYXJvdW5kIDQwMCBhbmQgaXRzIG91dGxpZXJzIGlzIHVuZGVyIDcwMC4gKE5vdGU6dXNlIHhsaW0oMCw3MDApIGZvciBlc3RpbWF0ZXMpDQoNCmBgYHtyIGNvZGUtY2h1bmstbGFiZWx9DQpsaWJyYXJ5KGdncGxvdDIpDQptY2RvbmFsZHMgPC0gZmFzdGZvb2QgJT4lDQogIGZpbHRlcihyZXN0YXVyYW50ID09ICJNY2RvbmFsZHMiKQ0KZGFpcnlfcXVlZW4gPC0gZmFzdGZvb2QgJT4lDQogIGZpbHRlcihyZXN0YXVyYW50ID09ICJEYWlyeSBRdWVlbiIpDQpnZ3Bsb3QobWNkb25hbGRzLCBhZXMoeCA9IGNhbF9mYXQpKSArIGdlb21faGlzdG9ncmFtKGZpbGwgPSAiI0MwMzkyQiIpICsgdGhlbWVfY2xhc3NpYygpDQpnZ3Bsb3QoZGFpcnlfcXVlZW4sIGFlcyh4ID0gY2FsX2ZhdCkpICsgZ2VvbV9oaXN0b2dyYW0oZmlsbCA9ICIjRTU5ODY2IikgKyB0aGVtZV9jbGFzc2ljKCkNCg0KYGBgDQoNCiMjIyBFeGVyY2lzZSAyDQoNClllcywgaXQgZG9lcyBhcHBlYXIgdG8gYmUgbmVhcmx5IG5vcm1hbCBkaXN0cmlidXRpb24uIEkgYW0gbW9yZSBpbmNsaW5lZCB0byBzdGF5IHdpdGggcmlnaHQgc2tld2VkIGFzIHRoZSBkZW5zaXR5IG9mIHRoZSBwcm9kdWN0cyBoYXZlIGEgbGFyZ2Ugc3ByZWFkLiANCg0KYGBge3J9DQpkcW1lYW4gPC0gbWVhbihkYWlyeV9xdWVlbiRjYWxfZmF0KQ0KZHFzZCAgIDwtIHNkKGRhaXJ5X3F1ZWVuJGNhbF9mYXQpDQpnZ3Bsb3QoZGF0YSA9IGRhaXJ5X3F1ZWVuLCBhZXMoeCA9IGNhbF9mYXQpKSArDQogIGdlb21fYmxhbmsoKSArDQogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gLi5kZW5zaXR5Li4pKSArDQogIHN0YXRfZnVuY3Rpb24oZnVuID0gZG5vcm0sDQogICAgICAgICAgICAgICAgYXJncyA9IGMobWVhbiA9IGRxbWVhbiwgc2QgPSBkcXNkKSwNCiAgICAgICAgICAgICAgICBjb2wgPSAidG9tYXRvIikNCg0KDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDMNCg0KVGhlIHNpbXVsYXRlZCBEUSdzIHBvaW50cyBmYWxsIGNsb3NlbHkgdG8gdGhlIGxpbmUuIFRoZXJlIGlzIGEgaW5jcmVhc2VkIGRldmlhdGlvbiBmcm9tIHRoZSBtZWFuLCBhcyBwb2ludHMgZnVydGhlciBhd2F5IGZyb20gdGhlIGxpbmUuIERRJ3MgcmVhbCBkYXRhIGhhcyBtb3JlIGRldmlhdGlvbnMgZnJvbSBpdHMgbWVkaWFuIGJ1dCB2ZXJ5IHNpbWlsYXIuDQoNCmBgYHtyfQ0Kc2ltX25vcm0gPC0gcm5vcm0obiA9IG5yb3coZGFpcnlfcXVlZW4pLG1lYW4gPSBkcW1lYW4sc2QgPSBkcXNkKQ0KZ2dwbG90KG1hcHBpbmcgPSBhZXMoc2FtcGxlID0gc2ltX25vcm0pKSArIHN0YXRfcXEoc2l6ZSA9IDIsIGNvbG9yID0gInBpbmsiKSArIHN0YXRfcXFfbGluZShjb2xvciA9ICJyZWQiKQ0KZ2dwbG90KGRhdGEgPSBkYWlyeV9xdWVlbiwgYWVzKHNhbXBsZSA9IGNhbF9mYXQpKSArc3RhdF9xcShzaXplID0gMiwgY29sb3IgPSJyZWQiKSArIHN0YXRfcXFfbGluZShjb2xvciA9ICJ3aGl0ZSIpDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDQNCg0KVGhlIHNpbXVsYXRlZCBub3JtYWwgcHJvYmFiaWxpdHkgcGxvdHMgYXJlIHZlcnkgc2ltaWxhciB0byB0aGUgcmVhbCBkYXRhIHBsb3QuIEl0cyBkaWZmZXJlbmNlIGlzIGluIHRoZSBzaGFwZSBvZiB0aGUgc2ltIERhdGEgYXMgaXQgYXBwZWFycyB0byBjb3JyZWN0IHRoZSBkZXZpYXRpb25zIGFyb3VuZCB0aGUgdGFpbC4gQWxzbywgdGhlcmUgYXBwZWFycyB0byBiZSBtb3JlIHByb2R1Y3RzIG9mIHRoZSBzYW1lIGNhbF9mYXQgaW4gdGhlIHNpbSBwbG90cyBjb21wYXJlZCB0byB0aGUgcmVhbCBkYXRhLg0KDQpgYGB7cn0NCnFxbm9ybXNpbShzYW1wbGUgPSBjYWxfZmF0LCBkYXRhID0gZGFpcnlfcXVlZW4pDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDUNCg0KSSBkb24ndCBiZWxpZXZlIE1jRG9uYWxkJ3MgbWVudSBoYXMgYSAgbm9ybWFsIGRpc3RyaWJ1dGlvbi4gVGhlcmUgaXMgYSBtb3JlIGFwcGFyZW50IGRpZmZlcmVuY2UgaW4gdGhlIE1jRG9uYWxkJyByZWFsIGRhdGEgY29tcGFyZWQgdG8gdGhlIHNpbXVsYXRlZCBkYXRhLiBUaGVyZSBpcyBzdGVlcGVyIGRldmlhdGlvbnMgYXQgdGhlIHRhaWwgb2YgdGhlIHJlYWwgZGF0YS4gVGhlIHNpbSBwbG90IHRyaWVkIHRvIGJhbGFuY2Ugb3V0IHRoZSB0YWlscyB3aXRoIGFuIGluY3JlbWVudCBpbiB0aGUgc2FtcGxlcy4gVGhlIHNpbSBwbG90cyBhcHBlYXJlZCB0byBoYXZlIHNoaWZ0ZWQgdGhlIHF1YXJhbnRpbmVzIG9mIHRoZSBvcmlnaW5hbCBkYXRhIGFuZCBhIHJpZ2h0IHNoaWZ0IGZvciB0aGUgbWVhbiBvZiB0aGUgdGhlb3JpemVkIGRhdGEuDQoNCmBgYHtyfQ0KcXFub3Jtc2ltKHNhbXBsZSA9IGNhbF9mYXQsIGRhdGEgPSBtY2RvbmFsZHMpDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDYNCg0KV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgdGhhdCBhIHJhbmRvbWx5IGNob3NlbiBTdWJ3YXkgcHJvZHVjdCBpcyBjb25zaWRlcmVkIGxvdyBzb2RpdW0/DQpXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IGEgcmFuZG9tbHkgY2hvc2VuIHRhY28gYmVsbCBwcm9kdWN0IGhhcyBtb3JlIHN1Z2FyIHRoYW4gdGhlIGRhaWx5IGFtb3VudD8NCg0KSW4gdGhlIGNhbGN1bGF0aW9ucyBvZiB0aGVpciBwcm9iYWJpbGl0aWVzIHVuZGVyIHRoZW9yZXRpY2FsL2VtcGlyaWNhbCBub3JtYWwgZGlzdHJpYnV0aW9uLCB3ZSBzYXcgYSBjbG9zZXIgYWdycmVtZW50IGluIGJvdGggbWV0aG9kcyB3aXRoIHRoZSBzdWJ3YXkgcXVlc3Rpb24uDQoNCmBgYHtyfQ0Kc3Vid2F5PC0gZmFzdGZvb2QgJT4lIGZpbHRlcihyZXN0YXVyYW50ID09ICJTdWJ3YXkiKQ0Kc2JtZWFuIDwtIG1lYW4oc3Vid2F5JHNvZGl1bSkNCnNic2QgICA8LSBzZChzdWJ3YXkkc29kaXVtKQ0KcG5vcm0oMTQwLHNibWVhbixzYnNkKQ0Kc3Vid2F5ICU+JSBmaWx0ZXIoc29kaXVtPDE0MCkgJT4lc3VtbWFyaXNlKHBlcmNlbnQgPSBuKCkgLyBucm93KHN1YndheSkpDQoNCg0KTWNtZWFuIDwtIG1lYW4obWNkb25hbGRzJHN1Z2FyKQ0KTWNzZCAgIDwtIHNkKG1jZG9uYWxkcyRzdWdhcikNCnBub3JtKDM2LE1jbWVhbixNY3NkKQ0KbWNkb25hbGRzICU+JSBmaWx0ZXIoc3VnYXI+MzYpICU+JXN1bW1hcmlzZShwZXJjZW50ID0gbigpIC8gbnJvdyhtY2RvbmFsZHMpKQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSA3DQoNCk91dCBvZiBhbGwgdGhlIHJlc3RhdXJhbnRzLCBCdXJnZXIgS2luZyBoYWQgdGhlIGNsb3Nlc3QgZGlzdHJpYnV0aW9uIHRvIHRoZSBub3JtYWwuIEJ1cmdlciBraW5nIGhhcyB0aGUgbW9zdCB0aWdodGVzdCBsaW5lIGluIHRoZSBRUSBwbG90IHdpdGggaXRzIGZldyBkZXZpYXRpb25zIGNsb3NlIHRvIHRoZSBkaWFnb25hbCBsaW5lLg0KDQpgYGB7cn0NCnRhY29fYmVsbCA8LSBmYXN0Zm9vZCAlPiVmaWx0ZXIocmVzdGF1cmFudCA9PSAiVGFjbyBCZWxsIikNCmFyYnlzIDwtIGZhc3Rmb29kICU+JWZpbHRlcihyZXN0YXVyYW50ID09ICJBcmJ5cyIpDQpidXJnZXJfa2luZyA8LSBmYXN0Zm9vZCAlPiVmaWx0ZXIocmVzdGF1cmFudCA9PSAiQnVyZ2VyIEtpbmciKQ0Kc29uaWMgPC0gZmFzdGZvb2QgJT4lZmlsdGVyKHJlc3RhdXJhbnQgPT0gIlNvbmljIikNCmNoaWNrX2ZsYTwtZmFzdGZvb2QgJT4lZmlsdGVyKHJlc3RhdXJhbnQ9PSJDaGljayBGaWwtQSIpDQpnZ3Bsb3QoZGF0YSA9IGRhaXJ5X3F1ZWVuLCBhZXMoc2FtcGxlID0gc29kaXVtKSkgK3N0YXRfcXEoc2l6ZSA9IDIsIGNvbG9yID0icmVkIikgKyBzdGF0X3FxX2xpbmUoY29sb3IgPSAid2hpdGUiKQ0KZ2dwbG90KGRhdGEgPSBtY2RvbmFsZHMsIGFlcyhzYW1wbGUgPSBzb2RpdW0pKSArc3RhdF9xcShzaXplID0gMiwgY29sb3IgPSJyZWQiKSArIHN0YXRfcXFfbGluZShjb2xvciA9ICJ3aGl0ZSIpDQpnZ3Bsb3QoZGF0YSA9IHRhY29fYmVsbCwgYWVzKHNhbXBsZSA9IHNvZGl1bSkpICtzdGF0X3FxKHNpemUgPSAyLCBjb2xvciA9InJlZCIpICsgc3RhdF9xcV9saW5lKGNvbG9yID0gIndoaXRlIikNCmdncGxvdChkYXRhID0gc3Vid2F5LCBhZXMoc2FtcGxlID0gc29kaXVtKSkgK3N0YXRfcXEoc2l6ZSA9IDIsIGNvbG9yID0icmVkIikgKyBzdGF0X3FxX2xpbmUoY29sb3IgPSAid2hpdGUiKQ0KZ2dwbG90KGRhdGEgPSBhcmJ5cywgYWVzKHNhbXBsZSA9IHNvZGl1bSkpICtzdGF0X3FxKHNpemUgPSAyLCBjb2xvciA9InJlZCIpICsgc3RhdF9xcV9saW5lKGNvbG9yID0gIndoaXRlIikNCmdncGxvdChkYXRhID0gYnVyZ2VyX2tpbmcsIGFlcyhzYW1wbGUgPSBzb2RpdW0pKSArc3RhdF9xcShzaXplID0gMiwgY29sb3IgPSJyZWQiKSArIHN0YXRfcXFfbGluZShjb2xvciA9ICJ3aGl0ZSIpDQpnZ3Bsb3QoZGF0YSA9IHNvbmljLCBhZXMoc2FtcGxlID0gc29kaXVtKSkgK3N0YXRfcXEoc2l6ZSA9IDIsIGNvbG9yID0icmVkIikgKyBzdGF0X3FxX2xpbmUoY29sb3IgPSAid2hpdGUiKQ0KZ2dwbG90KGRhdGEgPSBjaGlja19mbGEsIGFlcyhzYW1wbGUgPSBzb2RpdW0pKSArc3RhdF9xcShzaXplID0gMiwgY29sb3IgPSJyZWQiKSArIHN0YXRfcXFfbGluZShjb2xvciA9ICJ3aGl0ZSIpDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDgNCg0KSSBhbSBhc3N1bWluZyBpdCBpcyB0aGUgYW1vdW50IG9mIHByb2R1Y3RzIHRoYXQgZWFjaCByZXN0YXVyYW50IGNhcnJ5IHdpdGggdGhhdCBzb2RpdW0gbGV2ZWwuIEZvciBleGFtcGxlLCB0aGVyZSB3YXMgMjcgY2hpY2tmbGEgcHJvZHVjdHMgaW4gdGhlIGNoaWNrZmxhIHRhYmxlLiBJbiBpdHMgbm9ybWFsIHByb2JhYmlsaXR5IHBsb3QsIHRoZXJlIGFwcGVhcnMgYW4gbGluZWFyIGluY3JlYXNlIGluIHRoZSBzb2RpdW0gb2YgdGhlIGZvb2QgaXRlbXMuIEluIGEgc3RlcHdpc2UgcGF0dGVybiBwbG90LCB0aGUgZm9vZCBpdGVtcyBtYXkgaGF2ZSBsYXJnZSBkaWZmZXJlbmNlIGluIHRoZWlyIHNvZGl1bSBsZXZlbHMuDQoNCiMjIyBFeGVyY2lzZSA5DQoNClRoZXJlIGlzIGEgYSBsb3Qgb2YgZGV2aWF0aW9ucyBvbiB0aGUgcmlnaHQgdGFpbCBvbiB0aGUgdGFjbyBiZWxsIHBsb3QuIEZyb20gdGhlIG9ic2VydmF0aW9uLCB0aGUgdmFyaWFibGUgaXMgcmlnaHQgc2tld2VkLg0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gdGFjb19iZWxsLCBhZXMoc2FtcGxlID0gdG90YWxfY2FyYikpICtzdGF0X3FxKHNpemUgPSAyLCBjb2xvciA9IiM4RTQ0QUQiKSArIHN0YXRfcXFfbGluZShjb2xvciA9ICIjRkJGQ0ZDIikrbGFicyh4PSJ0b3RhbF9jYXJicyIseT0iZGVuc2l0eSIpDQpgYGANCg0KTG9va2luZyBhdCB0aGUgaGlzdG9ncmFtLCBpdCBhcHBlYXJzIHRoYXQgdGhlIG1ham9yaXR5IG9mIHRhY28gYmVsbCdzIGZvb2QgaXRlbXMgYXJlIGJlbG93IDgwZy4gVGhlIHBlYWsgb2YgdGhlIGhpc3RvZ3JhbSBsZWFucyB0byB0aGUgcmlnaHQgaW5zdGVhZCBvZiB0aGUgY2VudGVyIG9mIHRoZSBwbG90IGxpa2UgYSBub3JtYWwgZGlzdHJpYnV0ZWQgY3VydmUgd291bGQgYmUgcGxhY2VkLiANCg0KYGBge3J9DQpnZ3Bsb3QodGFjb19iZWxsLCBhZXMoeCA9IHRvdGFsX2NhcmIpKSArIGdlb21faGlzdG9ncmFtKGZpbGwgPSAiI0MwMzkyQiIpICsgdGhlbWVfY2xhc3NpYygpDQpgYGA=