# Home-runs so far
HR_before <- c(11, 13, 12)
# Average Number of Home-runs per season wanted
wanted_HR <- 20
# Number of seasons
n_seasons <- 4
# Needed Home-runs on season 4
x_4 <- n_seasons*wanted_HR - sum(HR_before)
# Minimum number of Home-runs needed by Robert
x_4
[1] 44
# Robert's performance
Robert_HRs <- c(11, 13, 12,44)
# Find mean
mean(Robert_HRs)
[1] 20
# Find standard deviation
sd(Robert_HRs)
[1] 16.02082
# Find the maximum number of home-runs during the four seasons period
max(Robert_HRs)
[1] 44
summary(Robert_HRs)
Min. 1st Qu. Median Mean 3rd Qu. Max.
11.00 11.75 12.50 20.00 20.75 44.00
##Question 1
Now, you must complete the problem below which represents a similar
case scenario. You may use the steps that we executed in Case-scenario 1
as a template for your solution.
This is the sixth season of outfielder Juan Soto in the majors. If
during the first five seasons he received 79, 108,41,145, and 135 walks,
how many does he need on this season for his overall number of walks per
season to be at least 100?
# Home-runs so far
HR_before_Juan <- c(79, 108, 41, 145, 135)
# Average Number of Home-runs per season wanted
wanted_HR_Juan <- 100
# Number of seasons
n_seasons_Juan <- 6
# Needed Home-runs on season 6
x_6 <- n_seasons_Juan*wanted_HR_Juan - sum(HR_before_Juan)
# Minimum number of Home-runs needed by Robert
x_6
[1] 92
#Case-scenario 2
The average salary of 10 baseball players is 72,000 dollars a week
and the average salary of 4 soccer players is 84,000. Find the mean
salary of all 14 professional players.
##Solution
We can easily find the joined mean by adding both mean and dividing
by the total number of people.
Let n1=10 denote the number of baseball players, and y1=72000 their
mean salary. Let n2=4 the number of soccer players and y2=84000 their
mean salary. Then the mean salary of all 16 individuals is:
n1x1+n2x2n1+n2
We can compute this in R as follows:
n_1 <- 10
n_2 <- 4
y_1 <- 72000
y_2 <- 84000
# Mean salary overall
salary_ave <- (n_1*y_1 + n_2*y_2)/(n_1+n_2)
salary_ave
[1] 75428.57
##Question 2
The average salary of 7 basketball players is 102,000 dollars a week
and the average salary of 9 NFL players is 91,000. Find the mean salary
of all 16 professional players.
n_1_bb <- 7
n_2_nfl <- 9
y_1_bb <- 102000
y_2_nfl <- 91000
# Mean salary overall
salary_ave_2 <- (n_1_bb*y_1_bb + n_2_nfl*y_2_nfl)/(n_1_bb+n_2_nfl)
salary_ave_2
[1] 95812.5
#Case-scenario 3
Find the mean,the median and the standard deviation.
What percentage of the data lies within one standard deviation of the
mean?
What percentage of the data lies within two standard deviations of
the mean?
What percent of the data lies within three standard deviations of the
mean?
Draw a histogram to illustrate the data.
getwd()
[1] "/cloud/project/Sports Analytics"
#No directory error. I added the path native to my computer
#path_contract <- "C:\Users\17866\OneDrive\Desktop\Sports Analytics\Datasets\allcontracts.csv"
#contract_df <- read.csv(path_contract)
# Phased out the top and added allcontracts.csv to working directory
contract_length <- read.table("allcontracts.csv", header = TRUE, sep = ",")
contract_years <- contract_length$years
To find the mean and the standard deviation
# Mean
contracts_mean <- mean(contract_years)
contracts_mean
[1] 3.458918
# Median
contracts_median <- median(contract_years)
contracts_median
[1] 3
# Find number of observations
contracts_n <- length(contract_years)
# Find standard deviation
contracts_sd <- sd(contract_years)
contracts_sd
[1] 1.69686
What percentage of the data lies within one standard deviation of the
mean?
contracts_w1sd <- sum((contract_years - contracts_mean)/contracts_sd < 1)/ contracts_n
# Percentage of observation within one standard deviation of the mean
contracts_w1sd
[1] 0.8416834
## Difference from empirical
contracts_w1sd - 0.68
[1] 0.1616834
What percentage of the data lies within two standard deviations of
the mean?
## Within 2 sd
contracts_w2sd <- sum((contract_years - contracts_mean)/ contracts_sd < 2)/contracts_n
contracts_w2sd
[1] 1
## Difference from empirical
contracts_w2sd - 0.95
[1] 0.05
What percent of the data lies within three standard deviations of the
mean?
## Within 3 sd
contracts_w3sd <- sum((contract_years - contracts_mean)/ contracts_sd < 3)/contracts_n
contracts_w3sd
[1] 1
## Difference from empirical
contracts_w3sd - 0.9973
[1] 0.0027
Draw a histogram
# Create histogram
hist(contract_years,xlab = "Years Left in Contract",col = "green",border = "red", xlim = c(0,8), ylim = c(0,225),
breaks = 5)

Question 3
Use the skills learned in case scenario number 3 on one the following
data sets. You may choose only one dataset. They are both available in
Canvas.
triples_hit <- read.table("triples_hit.csv", header = TRUE, sep = ",")
triples_hit_total <- triples_hit$triples_hit
To find the mean and the standard deviation
# Mean
triples_mean <- mean(triples_hit_total)
triples_mean
[1] 4.96
# Median
triples_median <- median(triples_hit_total)
triples_median
[1] 5
# Find number of observations
triples_n <- length(triples_hit_total)
# Find standard deviation
triples_sd <- sd(triples_hit_total)
triples_sd
[1] 2.884721
What percentage of the data lies within one standard deviation of the
mean?
triples_w1sd <- sum((triples_hit_total - triples_mean)/triples_sd < 1)/ triples_n
# Percentage of observation within one standard deviation of the mean
triples_w1sd
[1] 0.88
## Difference from empirical
triples_w1sd - 0.68
[1] 0.2
What percentage of the data lies within two standard deviations of
the mean?
## Within 2 sd
triples_w2sd <- sum((triples_hit_total - triples_mean)/ triples_sd < 2)/triples_n
triples_w2sd
[1] 0.93
## Difference from empirical
triples_w2sd - 0.95
[1] -0.02
What percent of the data lies within three standard deviations of the
mean?
## Within 3 sd
triples_w3sd <- sum((triples_hit_total - triples_mean)/ triples_sd < 3)/triples_n
triples_w3sd
[1] 0.98
## Difference from empirical
triples_w3sd - 0.9973
[1] -0.0173
Draw a histogram
# Create histogram
hist(triples_hit_total,xlab = "Total Number of Triples",col = "blue",border = "red", xlim = c(0,8), ylim = c(0,225),
breaks = 5)

LS0tCnRpdGxlOiAiSW4gQ2xhc3MgQWN0aXZpdHkgNSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyfQoKIyBIb21lLXJ1bnMgc28gZmFyCkhSX2JlZm9yZSA8LSBjKDExLCAxMywgMTIpCgojIEF2ZXJhZ2UgTnVtYmVyIG9mIEhvbWUtcnVucyBwZXIgc2Vhc29uIHdhbnRlZAp3YW50ZWRfSFIgPC0gMjAKCiMgTnVtYmVyIG9mIHNlYXNvbnMKbl9zZWFzb25zIDwtIDQKCiMgTmVlZGVkIEhvbWUtcnVucyBvbiBzZWFzb24gNAp4XzQgPC0gbl9zZWFzb25zKndhbnRlZF9IUiAtIHN1bShIUl9iZWZvcmUpCgojIE1pbmltdW0gbnVtYmVyIG9mIEhvbWUtcnVucyBuZWVkZWQgYnkgUm9iZXJ0CnhfNAoKYGBgCgoKYGBge3J9CiMgUm9iZXJ0J3MgcGVyZm9ybWFuY2UKUm9iZXJ0X0hScyA8LSBjKDExLCAxMywgMTIsNDQpCgojIEZpbmQgbWVhbgptZWFuKFJvYmVydF9IUnMpCgpgYGAKCgpgYGB7cn0KCiMgRmluZCBzdGFuZGFyZCBkZXZpYXRpb24Kc2QoUm9iZXJ0X0hScykKCmBgYAoKCmBgYHtyfQoKIyBGaW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiBob21lLXJ1bnMgZHVyaW5nIHRoZSBmb3VyIHNlYXNvbnMgcGVyaW9kCm1heChSb2JlcnRfSFJzKQoKYGBgCgpgYGB7cn0KCnN1bW1hcnkoUm9iZXJ0X0hScykKCmBgYAoKIyNRdWVzdGlvbiAxCgpOb3csIHlvdSBtdXN0IGNvbXBsZXRlIHRoZSBwcm9ibGVtIGJlbG93IHdoaWNoIHJlcHJlc2VudHMgYSBzaW1pbGFyIGNhc2Ugc2NlbmFyaW8uIFlvdSBtYXkgdXNlIHRoZSBzdGVwcyB0aGF0IHdlIGV4ZWN1dGVkIGluIENhc2Utc2NlbmFyaW8gMSBhcyBhIHRlbXBsYXRlIGZvciB5b3VyIHNvbHV0aW9uLgoKVGhpcyBpcyB0aGUgc2l4dGggc2Vhc29uIG9mIG91dGZpZWxkZXIgSnVhbiBTb3RvIGluIHRoZSBtYWpvcnMuIElmIGR1cmluZyB0aGUgZmlyc3QgZml2ZSBzZWFzb25zIGhlIHJlY2VpdmVkIDc5LCAxMDgsNDEsMTQ1LCBhbmQgMTM1IHdhbGtzLCBob3cgbWFueSBkb2VzIGhlIG5lZWQgb24gdGhpcyBzZWFzb24gZm9yIGhpcyBvdmVyYWxsIG51bWJlciBvZiB3YWxrcyBwZXIgc2Vhc29uIHRvIGJlIGF0IGxlYXN0IDEwMD8KCmBgYHtyfQoKIyBIb21lLXJ1bnMgc28gZmFyCkhSX2JlZm9yZV9KdWFuIDwtIGMoNzksIDEwOCwgNDEsIDE0NSwgMTM1KQoKIyBBdmVyYWdlIE51bWJlciBvZiBIb21lLXJ1bnMgcGVyIHNlYXNvbiB3YW50ZWQKd2FudGVkX0hSX0p1YW4gPC0gMTAwCgojIE51bWJlciBvZiBzZWFzb25zCm5fc2Vhc29uc19KdWFuIDwtIDYKCiMgTmVlZGVkIEhvbWUtcnVucyBvbiBzZWFzb24gNgp4XzYgPC0gbl9zZWFzb25zX0p1YW4qd2FudGVkX0hSX0p1YW4gLSBzdW0oSFJfYmVmb3JlX0p1YW4pCgojIE1pbmltdW0gbnVtYmVyIG9mIEhvbWUtcnVucyBuZWVkZWQgYnkgUm9iZXJ0CnhfNgoKYGBgCgoKI0Nhc2Utc2NlbmFyaW8gMgoKVGhlIGF2ZXJhZ2Ugc2FsYXJ5IG9mIDEwIGJhc2ViYWxsIHBsYXllcnMgaXMgNzIsMDAwIGRvbGxhcnMgYSB3ZWVrIGFuZCB0aGUgYXZlcmFnZSBzYWxhcnkgb2YgNCBzb2NjZXIgcGxheWVycyBpcyA4NCwwMDAuIEZpbmQgdGhlIG1lYW4gc2FsYXJ5IG9mIGFsbCAxNCBwcm9mZXNzaW9uYWwgcGxheWVycy4KCiMjU29sdXRpb24KCldlIGNhbiBlYXNpbHkgZmluZCB0aGUgam9pbmVkIG1lYW4gYnkgYWRkaW5nIGJvdGggbWVhbiBhbmQgZGl2aWRpbmcgYnkgdGhlIHRvdGFsIG51bWJlciBvZiBwZW9wbGUuCgpMZXQgbjE9MTAgZGVub3RlIHRoZSBudW1iZXIgb2YgYmFzZWJhbGwgcGxheWVycywgYW5kIHkxPTcyMDAwIHRoZWlyIG1lYW4gc2FsYXJ5LgpMZXQgbjI9NCB0aGUgbnVtYmVyIG9mIHNvY2NlciBwbGF5ZXJzIGFuZCB5Mj04NDAwMCB0aGVpciBtZWFuIHNhbGFyeS4KVGhlbiB0aGUgbWVhbiBzYWxhcnkgb2YgYWxsIDE2IGluZGl2aWR1YWxzIGlzOiBuMXgxK24yeDJuMStuMgoKV2UgY2FuIGNvbXB1dGUgdGhpcyBpbiBSIGFzIGZvbGxvd3M6CmBgYHtyfQoKbl8xIDwtIDEwCm5fMiA8LSA0CnlfMSA8LSA3MjAwMAp5XzIgPC0gODQwMDAKCiMgTWVhbiBzYWxhcnkgb3ZlcmFsbApzYWxhcnlfYXZlIDwtICAobl8xKnlfMSArIG5fMip5XzIpLyhuXzErbl8yKQpzYWxhcnlfYXZlCgpgYGAKCiMjUXVlc3Rpb24gMgoKVGhlIGF2ZXJhZ2Ugc2FsYXJ5IG9mIDcgYmFza2V0YmFsbCBwbGF5ZXJzIGlzIDEwMiwwMDAgZG9sbGFycyBhIHdlZWsgYW5kIHRoZSBhdmVyYWdlIHNhbGFyeSBvZiA5IE5GTCBwbGF5ZXJzIGlzIDkxLDAwMC4gRmluZCB0aGUgbWVhbiBzYWxhcnkgb2YgYWxsIDE2IHByb2Zlc3Npb25hbCBwbGF5ZXJzLgoKYGBge3J9CgpuXzFfYmIgPC0gNwpuXzJfbmZsIDwtIDkKCnlfMV9iYiA8LSAxMDIwMDAgCnlfMl9uZmwgPC0gOTEwMDAKCiMgTWVhbiBzYWxhcnkgb3ZlcmFsbApzYWxhcnlfYXZlXzIgPC0gIChuXzFfYmIqeV8xX2JiICsgbl8yX25mbCp5XzJfbmZsKS8obl8xX2JiK25fMl9uZmwpCnNhbGFyeV9hdmVfMgoKYGBgCiNDYXNlLXNjZW5hcmlvIDMKCkZpbmQgdGhlIG1lYW4sdGhlIG1lZGlhbiBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbi4KCldoYXQgcGVyY2VudGFnZSBvZiB0aGUgZGF0YSBsaWVzIHdpdGhpbiBvbmUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBtZWFuPwoKV2hhdCBwZXJjZW50YWdlIG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIHR3byBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRoZSBtZWFuPwoKV2hhdCBwZXJjZW50IG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIHRocmVlIHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdGhlIG1lYW4/CgpEcmF3IGEgaGlzdG9ncmFtIHRvIGlsbHVzdHJhdGUgdGhlIGRhdGEuCgoKYGBge3J9CmdldHdkKCkKYGBgCgpgYGB7cn0KI05vIGRpcmVjdG9yeSBlcnJvci4gSSBhZGRlZCB0aGUgcGF0aCBuYXRpdmUgdG8gbXkgY29tcHV0ZXIKI3BhdGhfY29udHJhY3QgPC0gIkM6XFVzZXJzXDE3ODY2XE9uZURyaXZlXERlc2t0b3BcU3BvcnRzIEFuYWx5dGljc1xEYXRhc2V0c1xhbGxjb250cmFjdHMuY3N2IgojY29udHJhY3RfZGYgPC0gcmVhZC5jc3YocGF0aF9jb250cmFjdCkKCiMgUGhhc2VkIG91dCB0aGUgdG9wIGFuZCBhZGRlZCBhbGxjb250cmFjdHMuY3N2IHRvIHdvcmtpbmcgZGlyZWN0b3J5CmNvbnRyYWN0X2xlbmd0aCA8LSByZWFkLnRhYmxlKCJhbGxjb250cmFjdHMuY3N2IiwgaGVhZGVyID0gVFJVRSwgc2VwID0gIiwiKQpjb250cmFjdF95ZWFycyA8LSBjb250cmFjdF9sZW5ndGgkeWVhcnMKCmBgYAoKVG8gZmluZCB0aGUgbWVhbiBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbgoKYGBge3J9CgojIE1lYW4gCmNvbnRyYWN0c19tZWFuICA8LSBtZWFuKGNvbnRyYWN0X3llYXJzKQpjb250cmFjdHNfbWVhbgoKIyBNZWRpYW4KY29udHJhY3RzX21lZGlhbiA8LSBtZWRpYW4oY29udHJhY3RfeWVhcnMpCmNvbnRyYWN0c19tZWRpYW4KCiMgRmluZCBudW1iZXIgb2Ygb2JzZXJ2YXRpb25zCmNvbnRyYWN0c19uIDwtIGxlbmd0aChjb250cmFjdF95ZWFycykKCiMgRmluZCBzdGFuZGFyZCBkZXZpYXRpb24KY29udHJhY3RzX3NkIDwtIHNkKGNvbnRyYWN0X3llYXJzKQoKY29udHJhY3RzX3NkCmBgYAoKV2hhdCBwZXJjZW50YWdlIG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4/CgpgYGB7cn0KCmNvbnRyYWN0c193MXNkIDwtIHN1bSgoY29udHJhY3RfeWVhcnMgLSBjb250cmFjdHNfbWVhbikvY29udHJhY3RzX3NkIDwgMSkvIGNvbnRyYWN0c19uCgojIFBlcmNlbnRhZ2Ugb2Ygb2JzZXJ2YXRpb24gd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4KY29udHJhY3RzX3cxc2QKCmBgYAoKCmBgYHtyfQoKIyMgRGlmZmVyZW5jZSBmcm9tIGVtcGlyaWNhbCAKY29udHJhY3RzX3cxc2QgLSAwLjY4CgpgYGAKCldoYXQgcGVyY2VudGFnZSBvZiB0aGUgZGF0YSBsaWVzIHdpdGhpbiB0d28gc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0aGUgbWVhbj8KCmBgYHtyfQoKIyMgV2l0aGluIDIgc2QKY29udHJhY3RzX3cyc2QgPC0gc3VtKChjb250cmFjdF95ZWFycyAtIGNvbnRyYWN0c19tZWFuKS8gY29udHJhY3RzX3NkIDwgMikvY29udHJhY3RzX24KCmNvbnRyYWN0c193MnNkCmBgYAoKCmBgYHtyfQoKIyMgRGlmZmVyZW5jZSBmcm9tIGVtcGlyaWNhbCAKY29udHJhY3RzX3cyc2QgLSAwLjk1CgpgYGAKCldoYXQgcGVyY2VudCBvZiB0aGUgZGF0YSBsaWVzIHdpdGhpbiB0aHJlZSBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRoZSBtZWFuPwpgYGB7cn0KCiMjIFdpdGhpbiAzIHNkIApjb250cmFjdHNfdzNzZCA8LSBzdW0oKGNvbnRyYWN0X3llYXJzIC0gY29udHJhY3RzX21lYW4pLyBjb250cmFjdHNfc2QgPCAzKS9jb250cmFjdHNfbgoKY29udHJhY3RzX3czc2QKCmBgYAoKCmBgYHtyfQojIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsIApjb250cmFjdHNfdzNzZCAtIDAuOTk3MwpgYGAKCkRyYXcgYSBoaXN0b2dyYW0KCmBgYHtyfQojIENyZWF0ZSBoaXN0b2dyYW0KaGlzdChjb250cmFjdF95ZWFycyx4bGFiID0gIlllYXJzIExlZnQgaW4gQ29udHJhY3QiLGNvbCA9ICJncmVlbiIsYm9yZGVyID0gInJlZCIsIHhsaW0gPSBjKDAsOCksIHlsaW0gPSBjKDAsMjI1KSwKICAgYnJlYWtzID0gNSkKYGBgClF1ZXN0aW9uIDMKClVzZSB0aGUgc2tpbGxzIGxlYXJuZWQgaW4gY2FzZSBzY2VuYXJpbyBudW1iZXIgMyBvbiBvbmUgdGhlIGZvbGxvd2luZyBkYXRhIHNldHMuIFlvdSBtYXkgY2hvb3NlIG9ubHkgb25lIGRhdGFzZXQuIFRoZXkgYXJlIGJvdGggYXZhaWxhYmxlIGluIENhbnZhcy4KCmBgYHtyfQp0cmlwbGVzX2hpdCA8LSByZWFkLnRhYmxlKCJ0cmlwbGVzX2hpdC5jc3YiLCBoZWFkZXIgPSBUUlVFLCBzZXAgPSAiLCIpCnRyaXBsZXNfaGl0X3RvdGFsIDwtIHRyaXBsZXNfaGl0JHRyaXBsZXNfaGl0CmBgYAoKClRvIGZpbmQgdGhlIG1lYW4gYW5kIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24KCmBgYHtyfQoKIyBNZWFuIAp0cmlwbGVzX21lYW4gIDwtIG1lYW4odHJpcGxlc19oaXRfdG90YWwpCnRyaXBsZXNfbWVhbgoKIyBNZWRpYW4KdHJpcGxlc19tZWRpYW4gPC0gbWVkaWFuKHRyaXBsZXNfaGl0X3RvdGFsKQp0cmlwbGVzX21lZGlhbgoKIyBGaW5kIG51bWJlciBvZiBvYnNlcnZhdGlvbnMKdHJpcGxlc19uIDwtIGxlbmd0aCh0cmlwbGVzX2hpdF90b3RhbCkKCiMgRmluZCBzdGFuZGFyZCBkZXZpYXRpb24KdHJpcGxlc19zZCA8LSBzZCh0cmlwbGVzX2hpdF90b3RhbCkKCnRyaXBsZXNfc2QKYGBgCgpXaGF0IHBlcmNlbnRhZ2Ugb2YgdGhlIGRhdGEgbGllcyB3aXRoaW4gb25lIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgbWVhbj8KCmBgYHtyfQoKdHJpcGxlc193MXNkIDwtIHN1bSgodHJpcGxlc19oaXRfdG90YWwgLSB0cmlwbGVzX21lYW4pL3RyaXBsZXNfc2QgPCAxKS8gdHJpcGxlc19uCgojIFBlcmNlbnRhZ2Ugb2Ygb2JzZXJ2YXRpb24gd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4KdHJpcGxlc193MXNkCgpgYGAKCgpgYGB7cn0KCiMjIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwgCnRyaXBsZXNfdzFzZCAtIDAuNjgKCmBgYAoKV2hhdCBwZXJjZW50YWdlIG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIHR3byBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRoZSBtZWFuPwoKYGBge3J9CgojIyBXaXRoaW4gMiBzZAp0cmlwbGVzX3cyc2QgPC0gc3VtKCh0cmlwbGVzX2hpdF90b3RhbCAtIHRyaXBsZXNfbWVhbikvIHRyaXBsZXNfc2QgPCAyKS90cmlwbGVzX24KCnRyaXBsZXNfdzJzZApgYGAKCgpgYGB7cn0KCiMjIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwgCnRyaXBsZXNfdzJzZCAtIDAuOTUgIAoKYGBgCgpXaGF0IHBlcmNlbnQgb2YgdGhlIGRhdGEgbGllcyB3aXRoaW4gdGhyZWUgc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0aGUgbWVhbj8KYGBge3J9CgojIyBXaXRoaW4gMyBzZCAKdHJpcGxlc193M3NkIDwtIHN1bSgodHJpcGxlc19oaXRfdG90YWwgLSB0cmlwbGVzX21lYW4pLyB0cmlwbGVzX3NkIDwgMykvdHJpcGxlc19uCgp0cmlwbGVzX3czc2QKCmBgYAoKCmBgYHtyfQojIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsIAp0cmlwbGVzX3czc2QgLSAwLjk5NzMKYGBgCgpEcmF3IGEgaGlzdG9ncmFtCgpgYGB7cn0KIyBDcmVhdGUgaGlzdG9ncmFtCmhpc3QodHJpcGxlc19oaXRfdG90YWwseGxhYiA9ICJUb3RhbCBOdW1iZXIgb2YgVHJpcGxlcyIsY29sID0gImJsdWUiLGJvcmRlciA9ICJyZWQiLCB4bGltID0gYygwLDgpLCB5bGltID0gYygwLDIyNSksCiAgIGJyZWFrcyA9IDUpCmBgYAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo=