Given that x1=11,x2=13,x3=12
we want to find x4 such that the mean (average) number of home-runs
is x¯>=20
Notice that in this case n=4 .
According to the information above: 20×4=11+13+12+x4
so when x4=61, the home-runs average will be 20.
# 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
According to the calculations above, Robert must hit 44 home-runs or
better on this season to get an average number of home-runs per season
of at least 20.
We could confirm this, by using the function mean() in R
# 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
# Find the minimum number of home-runs during the four seasons period
min(Robert_HRs)
[1] 11
We can also use the summary() function to find basic statistics,
including the median!
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?
# Walks during first five seasons
walks_before <- c(79, 108, 41, 145, 135)
# Desired average
wanted_walks <- 100
# Total seasons
n_seasons <- 6
# Walks needed in season 6
x_6 <- n_seasons * wanted_walks - sum(walks_before)
x_6
[1] 92
# Verify
Soto_walks <- c(79, 108, 41, 145, 135, x_6)
mean(Soto_walks)
[1] 100
sd(Soto_walks)
[1] 38.20995
max(Soto_walks)
[1] 145
min(Soto_walks)
[1] 41
summary(Soto_walks)
Min. 1st Qu. Median Mean 3rd Qu. Max.
41.00 82.25 100.00 100.00 128.25 145.00
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 <- 7
n_2 <- 9
y_1 <- 102000
y_2 <- 91000
salary_ave <- (n_1 * y_1 + n_2 * y_2) / (n_1 + n_2)
salary_ave
[1] 95812.5
Question 3
Choose either doubles_hit.csv or triples_hit.csv.
# Read the data
doubles <- read.csv("doubles_hit.csv")
# Store the doubles_hit column
doubles_data <- doubles$doubles_hit
# Mean
mean(doubles_data)
[1] 23.55
# Median
median(doubles_data)
[1] 23.5
# Standard deviation
sd(doubles_data)
[1] 13.37371
# Number of observations
n <- length(doubles_data)
# Store mean and standard deviation
mean_value <- mean(doubles_data)
sd_value <- sd(doubles_data)
# Percentage within one standard deviation
within1 <- sum(abs(doubles_data - mean_value) <= sd_value) / n
within1
[1] 0.58
# Percentage within two standard deviations
within2 <- sum(abs(doubles_data - mean_value) <= 2 * sd_value) / n
within2
[1] 1
# Percentage within three standard deviations
within3 <- sum(abs(doubles_data - mean_value) <= 3 * sd_value) / n
within3
[1] 1
# Histogram
hist(
doubles_data,
xlab = "Doubles Hit",
main = "Histogram of Doubles Hit",
col = "green",
border = "red"
)

# 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
According to the calculations above, Robert must hit 44 home-runs or
better on this season to get an average number of home-runs per season
of at least 20.
# Robert's performance
Robert_HRs <- c(11, 13, 12,44)
# Find mean
mean(Robert_HRs)
[1] 20
#Robert's actual performance
Robert_HR <- c(11, 13, 12,38)
mean(Robert_HR)
[1] 18.5
sd(Robert_HR)
[1] 13.02562
# Find the maximum number of home-runs during the four seasons period
max(Robert_HR)
[1] 38
# Find the minimum number of home-runs during the four seasons period
min(Robert_HR)
[1] 11
summary(Robert_HR)
Min. 1st Qu. Median Mean 3rd Qu. Max.
11.00 11.75 12.50 18.50 19.25 38.00
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
getwd()
[1] "/cloud/project"
contract_length <- read.table("allcontracts.csv", header = TRUE, sep = ",")
contract_years <- contract_length$years
# 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_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
## 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
## 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
# Create histogram
hist(contract_years,xlab = "Years Left in Contract",col = "green",border = "red", xlim = c(0,6), ylim = c(0,250),
breaks = 3)

doubles<-read.table("doubles_hit.csv", header = TRUE, sep = ",")
doublesnumber<- doubles$doubles_hit
# Mean
doublesnumber_mean<-mean(doublesnumber)
doublesnumber_mean
[1] 23.55
# Median
contracts_median <- median(doublesnumber)
contracts_median
[1] 23.5
# Find number of observations
players_n <- length(doublesnumber)
# Find standard deviation
players_sd <- sd(doublesnumber)
doublesnumber_w1sd <- sum((doublesnumber - doublesnumber_mean)/players_sd < 1)/ players_n
# Percentage of observation within one standard deviation of the mean
doublesnumber_w1sd
[1] 0.79
## Difference from empirical
doublesnumber_w1sd - 0.68
[1] 0.11
doublesnumber_w2sd <- sum((doublesnumber - doublesnumber_mean)/players_sd < 2)/ players_n
# Percentage of observation within one standard deviation of the mean
doublesnumber_w2sd
[1] 1
## Difference from empirical
doublesnumber_w2sd - 0.95
[1] 0.05
doublesnumber_w3sd <- sum((doublesnumber - doublesnumber_mean)/players_sd < 3)/ players_n
# Percentage of observation within one standard deviation of the mean
doublesnumber_w3sd
[1] 1
## Difference from empirical
doublesnumber_w3sd - 0.9973
[1] 0.0027
# Create histogram
hist(doublesnumber,xlab = "Number of Doubles",col = "green",border = "red", xlim = c(0,4), ylim = c(0,100),breaks = 5)

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKR2l2ZW4gdGhhdCB4MT0xMSx4Mj0xMyx4Mz0xMgoKd2Ugd2FudCB0byBmaW5kIHg0CiBzdWNoIHRoYXQgdGhlIG1lYW4gKGF2ZXJhZ2UpIG51bWJlciBvZiBob21lLXJ1bnMgaXMgeMKvPj0yMAoKTm90aWNlIHRoYXQgaW4gdGhpcyBjYXNlIG49NCAuCgpBY2NvcmRpbmcgdG8gdGhlIGluZm9ybWF0aW9uIGFib3ZlOiAyMMOXND0xMSsxMysxMit4NAoKc28gd2hlbiB4ND02MSwgdGhlIGhvbWUtcnVucyBhdmVyYWdlIHdpbGwgYmUgMjAuCgpgYGB7cn0KIyBIb21lLXJ1bnMgc28gZmFyCkhSX2JlZm9yZSA8LSBjKDExLCAxMywgMTIpCiMgQXZlcmFnZSBOdW1iZXIgb2YgSG9tZS1ydW5zIHBlciBzZWFzb24gd2FudGVkCndhbnRlZF9IUiA8LSAyMAojIE51bWJlciBvZiBzZWFzb25zCm5fc2Vhc29ucyA8LSA0CiMgTmVlZGVkIEhvbWUtcnVucyBvbiBzZWFzb24gNAp4XzQgPC0gbl9zZWFzb25zKndhbnRlZF9IUiAtIHN1bShIUl9iZWZvcmUpCiMgTWluaW11bSBudW1iZXIgb2YgSG9tZS1ydW5zIG5lZWRlZCBieSBSb2JlcnQKeF80CmBgYApBY2NvcmRpbmcgdG8gdGhlIGNhbGN1bGF0aW9ucyBhYm92ZSwgUm9iZXJ0IG11c3QgaGl0IDQ0IGhvbWUtcnVucyBvciBiZXR0ZXIgb24gdGhpcyBzZWFzb24gdG8gZ2V0IGFuIGF2ZXJhZ2UgbnVtYmVyIG9mIGhvbWUtcnVucyBwZXIgc2Vhc29uIG9mIGF0IGxlYXN0IDIwLgoKV2UgY291bGQgY29uZmlybSB0aGlzLCBieSB1c2luZyB0aGUgZnVuY3Rpb24gbWVhbigpIGluIFIKCmBgYHtyfQojIFJvYmVydCdzIHBlcmZvcm1hbmNlClJvYmVydF9IUnMgPC0gYygxMSwgMTMsIDEyLDQ0KQojIEZpbmQgbWVhbgptZWFuKFJvYmVydF9IUnMpCmBgYAoKYGBge3J9CiMgRmluZCBzdGFuZGFyZCBkZXZpYXRpb24Kc2QoUm9iZXJ0X0hScykKYGBgCgoKYGBge3J9CiMgRmluZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaG9tZS1ydW5zIGR1cmluZyB0aGUgZm91ciBzZWFzb25zIHBlcmlvZAptYXgoUm9iZXJ0X0hScykKYGBgCgoKYGBge3J9CiMgRmluZCB0aGUgbWluaW11bSBudW1iZXIgb2YgaG9tZS1ydW5zIGR1cmluZyB0aGUgZm91ciBzZWFzb25zIHBlcmlvZAptaW4oUm9iZXJ0X0hScykKYGBgCgpXZSBjYW4gYWxzbyB1c2UgdGhlIHN1bW1hcnkoKSBmdW5jdGlvbiB0byBmaW5kIGJhc2ljIHN0YXRpc3RpY3MsIGluY2x1ZGluZyB0aGUgbWVkaWFuIQoKYGBge3J9CnN1bW1hcnkoUm9iZXJ0X0hScykKYGBgCgpRdWVzdGlvbiAxCgpOb3csIHlvdSBtdXN0IGNvbXBsZXRlIHRoZSBwcm9ibGVtIGJlbG93IHdoaWNoIHJlcHJlc2VudHMgYSBzaW1pbGFyIGNhc2Ugc2NlbmFyaW8uIFlvdSBtYXkgdXNlIHRoZSBzdGVwcyB0aGF0IHdlIGV4ZWN1dGVkIGluIENhc2Utc2NlbmFyaW8gMSBhcyBhIHRlbXBsYXRlIGZvciB5b3VyIHNvbHV0aW9uLgoKVGhpcyBpcyB0aGUgc2l4dGggc2Vhc29uIG9mIG91dGZpZWxkZXIgSnVhbiBTb3RvIGluIHRoZSBtYWpvcnMuIElmIGR1cmluZyB0aGUgZmlyc3QgZml2ZSBzZWFzb25zIGhlIHJlY2VpdmVkIDc5LCAxMDgsNDEsMTQ1LCBhbmQgMTM1IHdhbGtzLCBob3cgbWFueSBkb2VzIGhlIG5lZWQgb24gdGhpcyBzZWFzb24gZm9yIGhpcyBvdmVyYWxsIG51bWJlciBvZiB3YWxrcyBwZXIgc2Vhc29uIHRvIGJlIGF0IGxlYXN0IDEwMD8KCmBgYHtyfQojIFdhbGtzIGR1cmluZyBmaXJzdCBmaXZlIHNlYXNvbnMKd2Fsa3NfYmVmb3JlIDwtIGMoNzksIDEwOCwgNDEsIDE0NSwgMTM1KQoKIyBEZXNpcmVkIGF2ZXJhZ2UKd2FudGVkX3dhbGtzIDwtIDEwMAoKIyBUb3RhbCBzZWFzb25zCm5fc2Vhc29ucyA8LSA2CgojIFdhbGtzIG5lZWRlZCBpbiBzZWFzb24gNgp4XzYgPC0gbl9zZWFzb25zICogd2FudGVkX3dhbGtzIC0gc3VtKHdhbGtzX2JlZm9yZSkKCnhfNgoKIyBWZXJpZnkKU290b193YWxrcyA8LSBjKDc5LCAxMDgsIDQxLCAxNDUsIDEzNSwgeF82KQoKbWVhbihTb3RvX3dhbGtzKQpzZChTb3RvX3dhbGtzKQptYXgoU290b193YWxrcykKbWluKFNvdG9fd2Fsa3MpCnN1bW1hcnkoU290b193YWxrcykKCmBgYAoKCkNhc2Utc2NlbmFyaW8gMgpUaGUgYXZlcmFnZSBzYWxhcnkgb2YgMTAgYmFzZWJhbGwgcGxheWVycyBpcyA3MiwwMDAgZG9sbGFycyBhIHdlZWsgYW5kIHRoZSBhdmVyYWdlIHNhbGFyeSBvZiA0IHNvY2NlciBwbGF5ZXJzIGlzIDg0LDAwMC4gRmluZCB0aGUgbWVhbiBzYWxhcnkgb2YgYWxsIDE0IHByb2Zlc3Npb25hbCBwbGF5ZXJzLgoKU29sdXRpb24KV2UgY2FuIGVhc2lseSBmaW5kIHRoZSBqb2luZWQgbWVhbiBieSBhZGRpbmcgYm90aCBtZWFuIGFuZCBkaXZpZGluZyBieSB0aGUgdG90YWwgbnVtYmVyIG9mIHBlb3BsZS4KCkxldCBuMT0xMAogZGVub3RlIHRoZSBudW1iZXIgb2YgYmFzZWJhbGwgcGxheWVycywgYW5kIHkxPTcyMDAwCiB0aGVpciBtZWFuIHNhbGFyeS4gTGV0IG4yPTQKIHRoZSBudW1iZXIgb2Ygc29jY2VyIHBsYXllcnMgYW5kIHkyPTg0MDAwCiB0aGVpciBtZWFuIHNhbGFyeS4gVGhlbiB0aGUgbWVhbiBzYWxhcnkgb2YgYWxsIDE2IGluZGl2aWR1YWxzIGlzOiBuMXgxK24yeDJuMStuMgoKV2UgY2FuIGNvbXB1dGUgdGhpcyBpbiBSIGFzIGZvbGxvd3M6CgpgYGB7cn0Kbl8xIDwtIDEwCm5fMiA8LSA0CnlfMSA8LSA3MjAwMAp5XzIgPC0gODQwMDAKIyBNZWFuIHNhbGFyeSBvdmVyYWxsCnNhbGFyeV9hdmUgPC0gIChuXzEqeV8xICsgbl8yKnlfMikvKG5fMStuXzIpCnNhbGFyeV9hdmUKYGBgCgoKUXVlc3Rpb24gMgpUaGUgYXZlcmFnZSBzYWxhcnkgb2YgNyBiYXNrZXRiYWxsIHBsYXllcnMgaXMgMTAyLDAwMCBkb2xsYXJzIGEgd2VlayBhbmQgdGhlIGF2ZXJhZ2Ugc2FsYXJ5IG9mIDkgTkZMIHBsYXllcnMgaXMgOTEsMDAwLiBGaW5kIHRoZSBtZWFuIHNhbGFyeSBvZiBhbGwgMTYgcHJvZmVzc2lvbmFsIHBsYXllcnMuCgoKYGBge3J9Cm5fMSA8LSA3Cm5fMiA8LSA5Cgp5XzEgPC0gMTAyMDAwCnlfMiA8LSA5MTAwMAoKc2FsYXJ5X2F2ZSA8LSAobl8xICogeV8xICsgbl8yICogeV8yKSAvIChuXzEgKyBuXzIpCgpzYWxhcnlfYXZlCmBgYAoKClF1ZXN0aW9uIDMKCkNob29zZSBlaXRoZXIgZG91Ymxlc19oaXQuY3N2IG9yIHRyaXBsZXNfaGl0LmNzdi4KCmBgYHtyfQojIFJlYWQgdGhlIGRhdGEKZG91YmxlcyA8LSByZWFkLmNzdigiZG91Ymxlc19oaXQuY3N2IikKCiMgU3RvcmUgdGhlIGRvdWJsZXNfaGl0IGNvbHVtbgpkb3VibGVzX2RhdGEgPC0gZG91YmxlcyRkb3VibGVzX2hpdAoKIyBNZWFuCm1lYW4oZG91Ymxlc19kYXRhKQoKIyBNZWRpYW4KbWVkaWFuKGRvdWJsZXNfZGF0YSkKCiMgU3RhbmRhcmQgZGV2aWF0aW9uCnNkKGRvdWJsZXNfZGF0YSkKCiMgTnVtYmVyIG9mIG9ic2VydmF0aW9ucwpuIDwtIGxlbmd0aChkb3VibGVzX2RhdGEpCgojIFN0b3JlIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbgptZWFuX3ZhbHVlIDwtIG1lYW4oZG91Ymxlc19kYXRhKQpzZF92YWx1ZSA8LSBzZChkb3VibGVzX2RhdGEpCgojIFBlcmNlbnRhZ2Ugd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24Kd2l0aGluMSA8LSBzdW0oYWJzKGRvdWJsZXNfZGF0YSAtIG1lYW5fdmFsdWUpIDw9IHNkX3ZhbHVlKSAvIG4Kd2l0aGluMQoKIyBQZXJjZW50YWdlIHdpdGhpbiB0d28gc3RhbmRhcmQgZGV2aWF0aW9ucwp3aXRoaW4yIDwtIHN1bShhYnMoZG91Ymxlc19kYXRhIC0gbWVhbl92YWx1ZSkgPD0gMiAqIHNkX3ZhbHVlKSAvIG4Kd2l0aGluMgoKIyBQZXJjZW50YWdlIHdpdGhpbiB0aHJlZSBzdGFuZGFyZCBkZXZpYXRpb25zCndpdGhpbjMgPC0gc3VtKGFicyhkb3VibGVzX2RhdGEgLSBtZWFuX3ZhbHVlKSA8PSAzICogc2RfdmFsdWUpIC8gbgp3aXRoaW4zCgojIEhpc3RvZ3JhbQpoaXN0KAogIGRvdWJsZXNfZGF0YSwKICB4bGFiID0gIkRvdWJsZXMgSGl0IiwKICBtYWluID0gIkhpc3RvZ3JhbSBvZiBEb3VibGVzIEhpdCIsCiAgY29sID0gImdyZWVuIiwKICBib3JkZXIgPSAicmVkIgopCmBgYAoKCmBgYHtyfQojIEhvbWUtcnVucyBzbyBmYXIKSFJfYmVmb3JlIDwtIGMoMTEsIDEzLCAxMikKIyBBdmVyYWdlIE51bWJlciBvZiBIb21lLXJ1bnMgcGVyIHNlYXNvbiB3YW50ZWQKd2FudGVkX0hSIDwtIDIwCiMgTnVtYmVyIG9mIHNlYXNvbnMKbl9zZWFzb25zIDwtIDQKIyBOZWVkZWQgSG9tZS1ydW5zIG9uIHNlYXNvbiA0CnhfNCA8LSBuX3NlYXNvbnMqd2FudGVkX0hSIC0gc3VtKEhSX2JlZm9yZSkKIyBNaW5pbXVtIG51bWJlciBvZiBIb21lLXJ1bnMgbmVlZGVkIGJ5IFJvYmVydAp4XzQKYGBgCgpBY2NvcmRpbmcgdG8gdGhlIGNhbGN1bGF0aW9ucyBhYm92ZSwgUm9iZXJ0IG11c3QgaGl0IDQ0IGhvbWUtcnVucyBvciBiZXR0ZXIgb24gdGhpcyBzZWFzb24gdG8gZ2V0IGFuIGF2ZXJhZ2UgbnVtYmVyIG9mIGhvbWUtcnVucyBwZXIgc2Vhc29uIG9mIGF0IGxlYXN0IDIwLgoKYGBge3J9CiMgUm9iZXJ0J3MgcGVyZm9ybWFuY2UKUm9iZXJ0X0hScyA8LSBjKDExLCAxMywgMTIsNDQpCiMgRmluZCBtZWFuCm1lYW4oUm9iZXJ0X0hScykKCmBgYAoKCmBgYHtyfQojUm9iZXJ0J3MgYWN0dWFsIHBlcmZvcm1hbmNlClJvYmVydF9IUiA8LSBjKDExLCAxMywgMTIsMzgpCm1lYW4oUm9iZXJ0X0hSKQpgYGAKCgpgYGB7cn0Kc2QoUm9iZXJ0X0hSKQoKYGBgCgoKYGBge3J9CiMgRmluZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaG9tZS1ydW5zIGR1cmluZyB0aGUgZm91ciBzZWFzb25zIHBlcmlvZAptYXgoUm9iZXJ0X0hSKQoKYGBgCgoKYGBge3J9CiMgRmluZCB0aGUgbWluaW11bSBudW1iZXIgb2YgaG9tZS1ydW5zIGR1cmluZyB0aGUgZm91ciBzZWFzb25zIHBlcmlvZAptaW4oUm9iZXJ0X0hSKQpgYGAKCgpgYGB7cn0Kc3VtbWFyeShSb2JlcnRfSFIpCgpgYGAKCgpgYGB7cn0Kbl8xIDwtIDEwCm5fMiA8LSA0CnlfMSA8LSA3MjAwMAp5XzIgPC0gODQwMDAKIyBNZWFuIHNhbGFyeSBvdmVyYWxsCnNhbGFyeV9hdmUgPC0gIChuXzEqeV8xICsgbl8yKnlfMikvKG5fMStuXzIpCnNhbGFyeV9hdmUKCmBgYAoKCmBgYHtyfQpnZXR3ZCgpCgpgYGAKCgpgYGB7cn0KY29udHJhY3RfbGVuZ3RoIDwtIHJlYWQudGFibGUoImFsbGNvbnRyYWN0cy5jc3YiLCBoZWFkZXIgPSBUUlVFLCBzZXAgPSAiLCIpCmNvbnRyYWN0X3llYXJzIDwtIGNvbnRyYWN0X2xlbmd0aCR5ZWFycwpgYGAKCgpgYGB7cn0KIyBNZWFuIApjb250cmFjdHNfbWVhbiAgPC0gbWVhbihjb250cmFjdF95ZWFycykKY29udHJhY3RzX21lYW4KYGBgCgoKYGBge3J9CiMgTWVkaWFuCmNvbnRyYWN0c19tZWRpYW4gPC0gbWVkaWFuKGNvbnRyYWN0X3llYXJzKQpjb250cmFjdHNfbWVkaWFuCmBgYAoKCmBgYHtyfQojIEZpbmQgbnVtYmVyIG9mIG9ic2VydmF0aW9ucwpjb250cmFjdHNfbiA8LSBsZW5ndGgoY29udHJhY3RfeWVhcnMpCiMgRmluZCBzdGFuZGFyZCBkZXZpYXRpb24KY29udHJhY3RzX3NkIDwtIHNkKGNvbnRyYWN0X3llYXJzKQpgYGAKCgpgYGB7cn0KY29udHJhY3RzX3cxc2QgPC0gc3VtKChjb250cmFjdF95ZWFycyAtIGNvbnRyYWN0c19tZWFuKS9jb250cmFjdHNfc2QgPCAxKS8gY29udHJhY3RzX24KIyBQZXJjZW50YWdlIG9mIG9ic2VydmF0aW9uIHdpdGhpbiBvbmUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBtZWFuCmNvbnRyYWN0c193MXNkCgpgYGAKCgpgYGB7cn0KIyMgRGlmZmVyZW5jZSBmcm9tIGVtcGlyaWNhbCAKY29udHJhY3RzX3cxc2QgLSAwLjY4CmBgYAoKCmBgYHtyfQojIyBXaXRoaW4gMiBzZApjb250cmFjdHNfdzJzZCA8LSBzdW0oKGNvbnRyYWN0X3llYXJzIC0gY29udHJhY3RzX21lYW4pLyBjb250cmFjdHNfc2QgPCAyKS9jb250cmFjdHNfbgpjb250cmFjdHNfdzJzZAoKYGBgCgoKYGBge3J9CiMjIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwgCmNvbnRyYWN0c193MnNkIC0gMC45NQoKYGBgCgoKYGBge3J9CiMjIFdpdGhpbiAzIHNkIApjb250cmFjdHNfdzNzZCA8LSBzdW0oKGNvbnRyYWN0X3llYXJzIC0gY29udHJhY3RzX21lYW4pLyBjb250cmFjdHNfc2QgPCAzKS9jb250cmFjdHNfbgpjb250cmFjdHNfdzNzZAoKYGBgCgoKYGBge3J9CiMjIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwgCmNvbnRyYWN0c193M3NkIC0gMC45OTczCgpgYGAKCgpgYGB7cn0KIyBDcmVhdGUgaGlzdG9ncmFtCmhpc3QoY29udHJhY3RfeWVhcnMseGxhYiA9ICJZZWFycyBMZWZ0IGluIENvbnRyYWN0Iixjb2wgPSAiZ3JlZW4iLGJvcmRlciA9ICJyZWQiLCB4bGltID0gYygwLDYpLCB5bGltID0gYygwLDI1MCksCiAgIGJyZWFrcyA9IDMpCgpgYGAKCgpgYGB7cn0KZG91YmxlczwtcmVhZC50YWJsZSgiZG91Ymxlc19oaXQuY3N2IiwgaGVhZGVyID0gVFJVRSwgc2VwID0gIiwiKQpkb3VibGVzbnVtYmVyPC0gZG91YmxlcyRkb3VibGVzX2hpdApgYGAKCgpgYGB7cn0KIyBNZWFuIApkb3VibGVzbnVtYmVyX21lYW48LW1lYW4oZG91Ymxlc251bWJlcikKZG91Ymxlc251bWJlcl9tZWFuCmBgYAoKCmBgYHtyfQojIE1lZGlhbgpjb250cmFjdHNfbWVkaWFuIDwtIG1lZGlhbihkb3VibGVzbnVtYmVyKQpjb250cmFjdHNfbWVkaWFuCmBgYAoKCmBgYHtyfQojIEZpbmQgbnVtYmVyIG9mIG9ic2VydmF0aW9ucwpwbGF5ZXJzX24gPC0gbGVuZ3RoKGRvdWJsZXNudW1iZXIpCiMgRmluZCBzdGFuZGFyZCBkZXZpYXRpb24KcGxheWVyc19zZCA8LSBzZChkb3VibGVzbnVtYmVyKQpgYGAKCgpgYGB7cn0KZG91Ymxlc251bWJlcl93MXNkIDwtIHN1bSgoZG91Ymxlc251bWJlciAtIGRvdWJsZXNudW1iZXJfbWVhbikvcGxheWVyc19zZCA8IDEpLyBwbGF5ZXJzX24KIyBQZXJjZW50YWdlIG9mIG9ic2VydmF0aW9uIHdpdGhpbiBvbmUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBtZWFuCmRvdWJsZXNudW1iZXJfdzFzZAoKYGBgCgoKYGBge3J9CiMjIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwgCmRvdWJsZXNudW1iZXJfdzFzZCAtIDAuNjgKYGBgCgoKYGBge3J9CmRvdWJsZXNudW1iZXJfdzJzZCA8LSBzdW0oKGRvdWJsZXNudW1iZXIgLSBkb3VibGVzbnVtYmVyX21lYW4pL3BsYXllcnNfc2QgPCAyKS8gcGxheWVyc19uCiMgUGVyY2VudGFnZSBvZiBvYnNlcnZhdGlvbiB3aXRoaW4gb25lIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgbWVhbgpkb3VibGVzbnVtYmVyX3cyc2QKYGBgCgoKYGBge3J9CiMjIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwgCmRvdWJsZXNudW1iZXJfdzJzZCAtIDAuOTUKYGBgCgoKYGBge3J9CmRvdWJsZXNudW1iZXJfdzNzZCA8LSBzdW0oKGRvdWJsZXNudW1iZXIgLSBkb3VibGVzbnVtYmVyX21lYW4pL3BsYXllcnNfc2QgPCAzKS8gcGxheWVyc19uCiMgUGVyY2VudGFnZSBvZiBvYnNlcnZhdGlvbiB3aXRoaW4gb25lIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgbWVhbgpkb3VibGVzbnVtYmVyX3czc2QKCmBgYAoKCmBgYHtyfQojIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsIApkb3VibGVzbnVtYmVyX3czc2QgLSAwLjk5NzMKYGBgCgoKYGBge3J9CiMgQ3JlYXRlIGhpc3RvZ3JhbQpoaXN0KGRvdWJsZXNudW1iZXIseGxhYiA9ICJOdW1iZXIgb2YgRG91YmxlcyIsY29sID0gImdyZWVuIixib3JkZXIgPSAicmVkIiwgeGxpbSA9IGMoMCw0KSwgeWxpbSA9IGMoMCwxMDApLGJyZWFrcyA9IDUpCmBgYAoK