# 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 44 home runs in the fourth season results in an overall average of 20 home runs per season.

# Robert's actual performance
Robert_HR <-c(11, 13, 12, 38)
mean(Roberts_HR)
[1] 18.5

Robert average 18.5 per season.

sd(Robert_HR)
[1] 13.02562

Robert’s home runs have a standard deviation of approximately 13.35 home runs.

max(Robert_HR)
[1] 38

Robert’s highest number of home runs in a single season was 38.

# Find the minimum number of home-runs during the four seasons period
min(Robert_HR)
[1] 11

This means Robert’s lowest number of home runs in a single season was 11.

summary(Robert_HR)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  11.00   11.75   12.50   18.50   19.25   38.00 

Robert’s actual four-season performance ranges from 11 to 38 home runs, with an average of 18.5 home runs per season.

# Walks so far
Walks_before <- c(79, 108, 41, 145, 135)

# Average Number of Walks per season wanted
wanted_Walks <- 100

# Number of seasons
n_seasons <- 6

# Needed Walks on season 6
x_6 <- n_seasons*wanted_Walks - sum(Walks_before)

# Minimum number of Walks needed by Soto
x_6
[1] 92

Question 1 Juan Soto needs 92 walks in his sixth season to have an overall average of 100 walks per season.

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

The overall average salary is approximately $75,428.57.

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 2 The mean salary of all 16 professional players is $95,812.50 per week.

contract_length <- read.table("allcontracts.csv", header = TRUE, sep = ",")
contract_years <- contract_length$years

Importing the contract data and extracting the years column.

# Mean 
contracts_mean  <- mean(contract_years)
contracts_mean
[1] 3.458918

The mean average contract length from the contract_years.

# Median
contracts_median <- median(contract_years)
contracts_median
[1] 3

The median contract length from the contract_years data.

# Find number of observations
contracts_n <- length(contract_years)
# Find standard deviation
contracts_sd <- sd(contract_years)

Finds two important descriptive statistics for the contract data

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

Calculates the percentage of contract observations within one standard deviation below the mean.

## Within 2 sd
contracts_w2sd <- sum((contract_years - contracts_mean)/ contracts_sd < 2)/contracts_n
contracts_w2sd
[1] 1

This follows the empirical rule, where about 95% of observations in a normal distribution fall within 2 standard deviations of the mean.

## Difference from empirical 
contracts_w2sd - 0.95
[1] 0.05

Calculates the difference between your actual percentage within 2 standard deviations and the Empirical Rule expectation.

## Within 3 sd 
contracts_w3sd <- sum((contract_years - contracts_mean)/ contracts_sd < 3)/contracts_n
contracts_w3sd
[1] 1

Code calculates the proportion of contract observations within 3 standard deviations below the mean. The data is 5 percentage points below the empirical rule expectation.

## Difference from empirical 
contracts_w3sd - 0.9973
[1] 0.0027

The data is 1.73 percentage points below the empirical rule expectation.

# Create histogram
hist(contract_years,xlab = "Years Left in Contract",col = "green",border = "red", xlim = c(0,8), ylim = c(0,225),
   breaks = 3)

The histogram shows contract years are distributed fairly evenly from 0 to 6 years: 0-2 years: about 165 observations 2-4 years: about 175 observations, the most common range 4-6 years: about 155 observations, the least common range There is no strong skew or dominant peak. However, with only three wide bins, the chart hides finer patterns. Using narrower bins, such as one-year intervals, would provide a more informative view of the distribution.

Answers to question 3

doubles <- read.table("doubles_hit.csv", header = TRUE, sep = ",")
doublesnumber <- doubles$doubles_hit

Imports the data set and extracts the doubles number column.

# Mean 
doublesnumber_mean  <- mean(doublesnumber)
doublesnumber_mean
[1] 23.55

Calculates the mean (average) number of doubles hit.

# Median
contracts_median <- median(doublesnumber)
contracts_median
[1] 23.5

Calculates the median (middle value) of the doublesnumber data.

# Find number of observations
doubles_n <- length(doublesnumber)
# Find standard deviation
players_sd <- sd(doublesnumber)

Finds the number of observations and the standard deviation for the doublesnumber data.

doublesnumber_w1sd <- sum((doublesnumber - doublesnumber_mean) / players_sd < 1) / doubles_n

# Percentage of observation within one standard deviation of the mean
doublesnumber_w1sd
[1] 0.79

Calculates the proportion (or percentage) of observations whose z-score is less than 1.

## Difference from empirical 
doublesnumber_w1sd - 0.68
[1] 0.11

Calculates how far your dataset is from the Empirical Rule for 1 standard deviation.

doublesnumber_w1sd <- sum((doublesnumber - doublesnumber_mean) / players_sd < 2) / doubles_n
# Percentage of observation within one standard deviation of the mean
doublesnumber_w1sd
[1] 1

Calculates the percentage (proportion) of players whose doubles hit values are less than 2 standard deviations above the mean.

## Within 2 sd
doublesnumber_w2sd <- sum((doublesnumber - doublesnumber_mean) / players_sd < 2) / doubles_n
# Percentage of observation within one standard deviation of the mea
doublesnumber_w2sd
[1] 1

Calculates the proportion (percentage) of players whose doubles hit values are less than 2 standard deviations above the mean.

## Difference from empirical
doublesnumber_w2sd - 0.95
[1] 0.05

Calculates the difference between your actual data result and the Empirical Rule expectation for 2 standard deviations.

doublesnumber_w3sd <- sum((doublesnumber - doublesnumber_mean) / players_sd < 3) / doubles_n
# Percentage of observation within one standard deviation of the mean
doublesnumber_w3sd
[1] 1

` Calculates the proportion (percentage) of observations that are less than 3 standard deviations above the mean.

## Difference from empirical 
contracts_w3sd - 0.9973
[1] 0.0027

Calculates the difference between your actual percentage within 3 standard deviations and the Empirical Rule expectation. Doubles dataset, revise the code by replacing contracts_w3sd with doublesnumber_w3sd.

# Create histogram
hist(doublesnumber,xlab = "Number of Doubles",col = "green",border = "red", xlim = c(0,4), ylim = c(0,100),
   breaks = 5)

The histogram shows the distribution of the number of doubles hit by players. The values range approximately from 1 to 4 doubles. The highest frequency occurs between 1 and 2 doubles, indicating that this range contains the largest number of observations. The remaining groups (2–3 and 3–4 doubles) also have relatively high frequencies, showing that the data is fairly evenly distributed across the range. The distribution appears to be approximately symmetric, with no major outliers visible. Overall, the histogram suggests that players’ doubles hit values have moderate variation, with most players falling between 1 and 4 doubles.

LS0tCnRpdGxlOiAiSW50cm8gdG8gUiBQYXJ0IDIiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCgpgYGB7cn0KIyBIb21lLXJ1bnMgc28gZmFyCkhSX2JlZm9yZSA8LSBjKDExLCAxMywgMTIpCiMgQXZlcmFnZSBOdW1iZXIgb2YgSG9tZS1ydW5zIHBlciBzZWFzb24gd2FudGVkCndhbnRlZF9IUiA8LSAyMAojIE51bWJlciBvZiBzZWFzb25zCm5fc2Vhc29ucyA8LSA0CiMgTmVlZGVkIEhvbWUtcnVucyBvbiBzZWFzb24gNAp4XzQgPC0gbl9zZWFzb25zKndhbnRlZF9IUiAtIHN1bShIUl9iZWZvcmUpCiMgTWluaW11bSBudW1iZXIgb2YgSG9tZS1ydW5zIG5lZWRlZCBieSBSb2JlcnQKeF80CmBgYAoKCkFjY29yZGluZyB0byB0aGUgY2FsY3VsYXRpb25zIGFib3ZlLCBSb2JlcnQgbXVzdCBoaXQgNDQgaG9tZS1ydW5zIG9yIGJldHRlciBvbiB0aGlzIHNlYXNvbiB0byBnZXQgYW4gYXZlcmFnZSBudW1iZXIgb2YgaG9tZS1ydW5zIHBlciBzZWFzb24gb2YgYXQgbGVhc3QgMjAuCgoKCmBgYHtyfQojIFJvYmVydCdzIHBlcmZvcm1hbmNlClJvYmVydF9IUnMgPC0gYygxMSwgMTMsIDEyLDQ0KQojIEZpbmQgbWVhbgptZWFuKFJvYmVydF9IUnMpCmBgYAoKUm9iZXJ0IDQ0IGhvbWUgcnVucyBpbiB0aGUgZm91cnRoIHNlYXNvbiByZXN1bHRzIGluIGFuIG92ZXJhbGwgYXZlcmFnZSBvZiAyMCBob21lIHJ1bnMgcGVyIHNlYXNvbi4KCgpgYGB7cn0KIyBSb2JlcnQncyBhY3R1YWwgcGVyZm9ybWFuY2UKUm9iZXJ0X0hSIDwtYygxMSwgMTMsIDEyLCAzOCkKbWVhbihSb2JlcnRzX0hSKQpgYGAKCgpSb2JlcnQgYXZlcmFnZSAxOC41IHBlciBzZWFzb24uCgoKYGBge3J9CnNkKFJvYmVydF9IUikKYGBgCgoKUm9iZXJ0J3MgaG9tZSBydW5zIGhhdmUgYSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgYXBwcm94aW1hdGVseSAxMy4zNSBob21lIHJ1bnMuCgoKYGBge3J9Cm1heChSb2JlcnRfSFIpCmBgYAoKClJvYmVydCdzIGhpZ2hlc3QgbnVtYmVyIG9mIGhvbWUgcnVucyBpbiBhIHNpbmdsZSBzZWFzb24gd2FzIDM4LgoKCmBgYHtyfQojIEZpbmQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGhvbWUtcnVucyBkdXJpbmcgdGhlIGZvdXIgc2Vhc29ucyBwZXJpb2QKbWluKFJvYmVydF9IUikKYGBgCgoKVGhpcyBtZWFucyBSb2JlcnQncyBsb3dlc3QgbnVtYmVyIG9mIGhvbWUgcnVucyBpbiBhIHNpbmdsZSBzZWFzb24gd2FzIDExLgoKCgpgYGB7cn0Kc3VtbWFyeShSb2JlcnRfSFIpCmBgYAoKClJvYmVydCdzIGFjdHVhbCBmb3VyLXNlYXNvbiBwZXJmb3JtYW5jZSByYW5nZXMgZnJvbSAxMSB0byAzOCBob21lIHJ1bnMsIHdpdGggYW4gYXZlcmFnZSBvZiAxOC41IGhvbWUgcnVucyBwZXIgc2Vhc29uLgoKCmBgYHtyfQojIFdhbGtzIHNvIGZhcgpXYWxrc19iZWZvcmUgPC0gYyg3OSwgMTA4LCA0MSwgMTQ1LCAxMzUpCgojIEF2ZXJhZ2UgTnVtYmVyIG9mIFdhbGtzIHBlciBzZWFzb24gd2FudGVkCndhbnRlZF9XYWxrcyA8LSAxMDAKCiMgTnVtYmVyIG9mIHNlYXNvbnMKbl9zZWFzb25zIDwtIDYKCiMgTmVlZGVkIFdhbGtzIG9uIHNlYXNvbiA2CnhfNiA8LSBuX3NlYXNvbnMqd2FudGVkX1dhbGtzIC0gc3VtKFdhbGtzX2JlZm9yZSkKCiMgTWluaW11bSBudW1iZXIgb2YgV2Fsa3MgbmVlZGVkIGJ5IFNvdG8KeF82CmBgYAoKUXVlc3Rpb24gMQpKdWFuIFNvdG8gbmVlZHMgOTIgd2Fsa3MgaW4gaGlzIHNpeHRoIHNlYXNvbiB0byBoYXZlIGFuIG92ZXJhbGwgYXZlcmFnZSBvZiAxMDAgd2Fsa3MgcGVyIHNlYXNvbi4KCgpgYGB7cn0Kbl8xIDwtIDEwCm5fMiA8LSA0CnlfMSA8LSA3MjAwMAp5XzIgPC0gODQwMDAKIyBNZWFuIHNhbGFyeSBvdmVyYWxsCnNhbGFyeV9hdmUgPC0gIChuXzEqeV8xICsgbl8yKnlfMikvKG5fMStuXzIpCnNhbGFyeV9hdmUKYGBgCgpUaGUgb3ZlcmFsbCBhdmVyYWdlIHNhbGFyeSBpcyBhcHByb3hpbWF0ZWx5ICQ3NSw0MjguNTcuCgoKCmBgYHtyfQpuXzEgPC0gNwpuXzIgPC0gOQoKeV8xIDwtIDEwMjAwMAp5XzIgPC0gOTEwMDAKCnNhbGFyeV9hdmUgPC0gKG5fMSp5XzEgKyBuXzIqeV8yKS8obl8xK25fMikKCnNhbGFyeV9hdmUKYGBgCgpRdWVzdGlvbiAyClRoZSBtZWFuIHNhbGFyeSBvZiBhbGwgMTYgcHJvZmVzc2lvbmFsIHBsYXllcnMgaXMgJDk1LDgxMi41MCBwZXIgd2Vlay4KCgpgYGB7cn0KY29udHJhY3RfbGVuZ3RoIDwtIHJlYWQudGFibGUoImFsbGNvbnRyYWN0cy5jc3YiLCBoZWFkZXIgPSBUUlVFLCBzZXAgPSAiLCIpCmNvbnRyYWN0X3llYXJzIDwtIGNvbnRyYWN0X2xlbmd0aCR5ZWFycwpgYGAKCkltcG9ydGluZyB0aGUgY29udHJhY3QgZGF0YSBhbmQgZXh0cmFjdGluZyB0aGUgeWVhcnMgY29sdW1uLgoKCgpgYGB7cn0KIyBNZWFuIApjb250cmFjdHNfbWVhbiAgPC0gbWVhbihjb250cmFjdF95ZWFycykKY29udHJhY3RzX21lYW4KYGBgCgpUaGUgbWVhbiBhdmVyYWdlIGNvbnRyYWN0IGxlbmd0aCBmcm9tIHRoZSBjb250cmFjdF95ZWFycy4KCgoKYGBge3J9CiMgTWVkaWFuCmNvbnRyYWN0c19tZWRpYW4gPC0gbWVkaWFuKGNvbnRyYWN0X3llYXJzKQpjb250cmFjdHNfbWVkaWFuCmBgYAoKVGhlIG1lZGlhbiBjb250cmFjdCBsZW5ndGggZnJvbSB0aGUgY29udHJhY3RfeWVhcnMgZGF0YS4KCgpgYGB7cn0KIyBGaW5kIG51bWJlciBvZiBvYnNlcnZhdGlvbnMKY29udHJhY3RzX24gPC0gbGVuZ3RoKGNvbnRyYWN0X3llYXJzKQojIEZpbmQgc3RhbmRhcmQgZGV2aWF0aW9uCmNvbnRyYWN0c19zZCA8LSBzZChjb250cmFjdF95ZWFycykKYGBgCgpGaW5kcyB0d28gaW1wb3J0YW50IGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgZm9yIHRoZSBjb250cmFjdCBkYXRhCgoKCmBgYHtyfQpjb250cmFjdHNfdzFzZCA8LSBzdW0oKGNvbnRyYWN0X3llYXJzIC0gY29udHJhY3RzX21lYW4pL2NvbnRyYWN0c19zZCA8IDEpLyBjb250cmFjdHNfbgojIFBlcmNlbnRhZ2Ugb2Ygb2JzZXJ2YXRpb24gd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4KY29udHJhY3RzX3cxc2QKYGBgCgpDYWxjdWxhdGVzIHRoZSBwZXJjZW50YWdlIG9mIGNvbnRyYWN0IG9ic2VydmF0aW9ucyB3aXRoaW4gb25lIHN0YW5kYXJkIGRldmlhdGlvbiBiZWxvdyB0aGUgbWVhbi4KCgpgYGB7cn0KIyMgV2l0aGluIDIgc2QKY29udHJhY3RzX3cyc2QgPC0gc3VtKChjb250cmFjdF95ZWFycyAtIGNvbnRyYWN0c19tZWFuKS8gY29udHJhY3RzX3NkIDwgMikvY29udHJhY3RzX24KY29udHJhY3RzX3cyc2QKYGBgCgpUaGlzIGZvbGxvd3MgdGhlIGVtcGlyaWNhbCBydWxlLCB3aGVyZSBhYm91dCA5NSUgb2Ygb2JzZXJ2YXRpb25zIGluIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBmYWxsIHdpdGhpbiAyIHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdGhlIG1lYW4uCgoKYGBge3J9CiMjIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwgCmNvbnRyYWN0c193MnNkIC0gMC45NQpgYGAKCgpDYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4geW91ciBhY3R1YWwgcGVyY2VudGFnZSB3aXRoaW4gMiBzdGFuZGFyZCBkZXZpYXRpb25zIGFuZCB0aGUgRW1waXJpY2FsIFJ1bGUgZXhwZWN0YXRpb24uCgoKCmBgYHtyfQojIyBXaXRoaW4gMyBzZCAKY29udHJhY3RzX3czc2QgPC0gc3VtKChjb250cmFjdF95ZWFycyAtIGNvbnRyYWN0c19tZWFuKS8gY29udHJhY3RzX3NkIDwgMykvY29udHJhY3RzX24KY29udHJhY3RzX3czc2QKYGBgCgoKQ29kZSBjYWxjdWxhdGVzIHRoZSBwcm9wb3J0aW9uIG9mIGNvbnRyYWN0IG9ic2VydmF0aW9ucyB3aXRoaW4gMyBzdGFuZGFyZCBkZXZpYXRpb25zIGJlbG93IHRoZSBtZWFuLgpUaGUgZGF0YSBpcyA1IHBlcmNlbnRhZ2UgcG9pbnRzIGJlbG93IHRoZSBlbXBpcmljYWwgcnVsZSBleHBlY3RhdGlvbi4KCgoKCmBgYHtyfQojIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsIApjb250cmFjdHNfdzNzZCAtIDAuOTk3MwpgYGAKClRoZSBkYXRhIGlzIDEuNzMgcGVyY2VudGFnZSBwb2ludHMgYmVsb3cgdGhlIGVtcGlyaWNhbCBydWxlIGV4cGVjdGF0aW9uLgoKCgpgYGB7cn0KIyBDcmVhdGUgaGlzdG9ncmFtCmhpc3QoY29udHJhY3RfeWVhcnMseGxhYiA9ICJZZWFycyBMZWZ0IGluIENvbnRyYWN0Iixjb2wgPSAiZ3JlZW4iLGJvcmRlciA9ICJyZWQiLCB4bGltID0gYygwLDgpLCB5bGltID0gYygwLDIyNSksCiAgIGJyZWFrcyA9IDMpCmBgYAogCgpUaGUgaGlzdG9ncmFtIHNob3dzIGNvbnRyYWN0IHllYXJzIGFyZSBkaXN0cmlidXRlZCBmYWlybHkgZXZlbmx5IGZyb20gMCB0byA2IHllYXJzOgowLTIgeWVhcnM6IGFib3V0IDE2NSBvYnNlcnZhdGlvbnMKMi00IHllYXJzOiBhYm91dCAxNzUgb2JzZXJ2YXRpb25zLCB0aGUgbW9zdCBjb21tb24gcmFuZ2UKNC02IHllYXJzOiBhYm91dCAxNTUgb2JzZXJ2YXRpb25zLCB0aGUgbGVhc3QgY29tbW9uIHJhbmdlClRoZXJlIGlzIG5vIHN0cm9uZyBza2V3IG9yIGRvbWluYW50IHBlYWsuIEhvd2V2ZXIsIHdpdGggb25seSB0aHJlZSB3aWRlIGJpbnMsIHRoZSBjaGFydCBoaWRlcyBmaW5lciBwYXR0ZXJucy4gVXNpbmcgbmFycm93ZXIgYmlucywgc3VjaCBhcyBvbmUteWVhciBpbnRlcnZhbHMsIHdvdWxkIHByb3ZpZGUgYSBtb3JlIGluZm9ybWF0aXZlIHZpZXcgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KCgoKKipBbnN3ZXJzIHRvIHF1ZXN0aW9uIDMqKgoKCmBgYHtyfQpkb3VibGVzIDwtIHJlYWQudGFibGUoImRvdWJsZXNfaGl0LmNzdiIsIGhlYWRlciA9IFRSVUUsIHNlcCA9ICIsIikKZG91Ymxlc251bWJlciA8LSBkb3VibGVzJGRvdWJsZXNfaGl0CmBgYAoKCkltcG9ydHMgdGhlIGRhdGEgc2V0IGFuZCBleHRyYWN0cyB0aGUgZG91YmxlcyBudW1iZXIgY29sdW1uLgoKCgpgYGB7cn0KIyBNZWFuIApkb3VibGVzbnVtYmVyX21lYW4gIDwtIG1lYW4oZG91Ymxlc251bWJlcikKZG91Ymxlc251bWJlcl9tZWFuCmBgYAoKCkNhbGN1bGF0ZXMgdGhlIG1lYW4gKGF2ZXJhZ2UpIG51bWJlciBvZiBkb3VibGVzIGhpdC4KCgpgYGB7cn0KIyBNZWRpYW4KY29udHJhY3RzX21lZGlhbiA8LSBtZWRpYW4oZG91Ymxlc251bWJlcikKY29udHJhY3RzX21lZGlhbgpgYGAKCgpDYWxjdWxhdGVzIHRoZSBtZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgdGhlIGRvdWJsZXNudW1iZXIgZGF0YS4KCgpgYGB7cn0KIyBGaW5kIG51bWJlciBvZiBvYnNlcnZhdGlvbnMKZG91Ymxlc19uIDwtIGxlbmd0aChkb3VibGVzbnVtYmVyKQojIEZpbmQgc3RhbmRhcmQgZGV2aWF0aW9uCnBsYXllcnNfc2QgPC0gc2QoZG91Ymxlc251bWJlcikKYGBgCgoKRmluZHMgdGhlIG51bWJlciBvZiBvYnNlcnZhdGlvbnMgYW5kIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gZm9yIHRoZSBkb3VibGVzbnVtYmVyIGRhdGEuCgoKCmBgYHtyfQpkb3VibGVzbnVtYmVyX3cxc2QgPC0gc3VtKChkb3VibGVzbnVtYmVyIC0gZG91Ymxlc251bWJlcl9tZWFuKSAvIHBsYXllcnNfc2QgPCAxKSAvIGRvdWJsZXNfbgojIFBlcmNlbnRhZ2Ugb2Ygb2JzZXJ2YXRpb24gd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4KZG91Ymxlc251bWJlcl93MXNkCmBgYAoKCkNhbGN1bGF0ZXMgdGhlIHByb3BvcnRpb24gKG9yIHBlcmNlbnRhZ2UpIG9mIG9ic2VydmF0aW9ucyB3aG9zZSB6LXNjb3JlIGlzIGxlc3MgdGhhbiAxLgoKCmBgYHtyfQojIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsIApkb3VibGVzbnVtYmVyX3cxc2QgLSAwLjY4CmBgYAoKCkNhbGN1bGF0ZXMgaG93IGZhciB5b3VyIGRhdGFzZXQgaXMgZnJvbSB0aGUgRW1waXJpY2FsIFJ1bGUgZm9yIDEgc3RhbmRhcmQgZGV2aWF0aW9uLgoKCmBgYHtyfQpkb3VibGVzbnVtYmVyX3cxc2QgPC0gc3VtKChkb3VibGVzbnVtYmVyIC0gZG91Ymxlc251bWJlcl9tZWFuKSAvIHBsYXllcnNfc2QgPCAyKSAvIGRvdWJsZXNfbgojIFBlcmNlbnRhZ2Ugb2Ygb2JzZXJ2YXRpb24gd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4KZG91Ymxlc251bWJlcl93MXNkCmBgYAoKCkNhbGN1bGF0ZXMgdGhlIHBlcmNlbnRhZ2UgKHByb3BvcnRpb24pIG9mIHBsYXllcnMgd2hvc2UgZG91YmxlcyBoaXQgdmFsdWVzIGFyZSBsZXNzIHRoYW4gMiBzdGFuZGFyZCBkZXZpYXRpb25zIGFib3ZlIHRoZSBtZWFuLgoKCgpgYGB7cn0KIyMgV2l0aGluIDIgc2QKZG91Ymxlc251bWJlcl93MnNkIDwtIHN1bSgoZG91Ymxlc251bWJlciAtIGRvdWJsZXNudW1iZXJfbWVhbikgLyBwbGF5ZXJzX3NkIDwgMikgLyBkb3VibGVzX24KIyBQZXJjZW50YWdlIG9mIG9ic2VydmF0aW9uIHdpdGhpbiBvbmUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBtZWEKZG91Ymxlc251bWJlcl93MnNkCmBgYAoKCkNhbGN1bGF0ZXMgdGhlIHByb3BvcnRpb24gKHBlcmNlbnRhZ2UpIG9mIHBsYXllcnMgd2hvc2UgZG91YmxlcyBoaXQgdmFsdWVzIGFyZSBsZXNzIHRoYW4gMiBzdGFuZGFyZCBkZXZpYXRpb25zIGFib3ZlIHRoZSBtZWFuLgoKCmBgYHtyfQojIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsCmRvdWJsZXNudW1iZXJfdzJzZCAtIDAuOTUKYGBgCgoKCkNhbGN1bGF0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB5b3VyIGFjdHVhbCBkYXRhIHJlc3VsdCBhbmQgdGhlIEVtcGlyaWNhbCBSdWxlIGV4cGVjdGF0aW9uIGZvciAyIHN0YW5kYXJkIGRldmlhdGlvbnMuCgpgYGB7cn0KZG91Ymxlc251bWJlcl93M3NkIDwtIHN1bSgoZG91Ymxlc251bWJlciAtIGRvdWJsZXNudW1iZXJfbWVhbikgLyBwbGF5ZXJzX3NkIDwgMykgLyBkb3VibGVzX24KIyBQZXJjZW50YWdlIG9mIG9ic2VydmF0aW9uIHdpdGhpbiBvbmUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBtZWFuCmRvdWJsZXNudW1iZXJfdzNzZApgYGAKCmAKQ2FsY3VsYXRlcyB0aGUgcHJvcG9ydGlvbiAocGVyY2VudGFnZSkgb2Ygb2JzZXJ2YXRpb25zIHRoYXQgYXJlIGxlc3MgdGhhbiAzIHN0YW5kYXJkIGRldmlhdGlvbnMgYWJvdmUgdGhlIG1lYW4uCgoKYGBge3J9CiMjIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwgCmNvbnRyYWN0c193M3NkIC0gMC45OTczCmBgYAoKCkNhbGN1bGF0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB5b3VyIGFjdHVhbCBwZXJjZW50YWdlIHdpdGhpbiAzIHN0YW5kYXJkIGRldmlhdGlvbnMgYW5kIHRoZSBFbXBpcmljYWwgUnVsZSBleHBlY3RhdGlvbi4KRG91YmxlcyBkYXRhc2V0LCByZXZpc2UgdGhlIGNvZGUgYnkgcmVwbGFjaW5nIGNvbnRyYWN0c193M3NkIHdpdGggZG91Ymxlc251bWJlcl93M3NkLgoKYGBge3J9CiMgQ3JlYXRlIGhpc3RvZ3JhbQpoaXN0KGRvdWJsZXNudW1iZXIseGxhYiA9ICJOdW1iZXIgb2YgRG91YmxlcyIsY29sID0gImdyZWVuIixib3JkZXIgPSAicmVkIiwgeGxpbSA9IGMoMCw0KSwgeWxpbSA9IGMoMCwxMDApLAogICBicmVha3MgPSA1KQoKYGBgCgoKClRoZSBoaXN0b2dyYW0gc2hvd3MgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbnVtYmVyIG9mIGRvdWJsZXMgaGl0IGJ5IHBsYXllcnMuIFRoZSB2YWx1ZXMgcmFuZ2UgYXBwcm94aW1hdGVseSBmcm9tIDEgdG8gNCBkb3VibGVzLiBUaGUgaGlnaGVzdCBmcmVxdWVuY3kgb2NjdXJzIGJldHdlZW4gMSBhbmQgMiBkb3VibGVzLCBpbmRpY2F0aW5nIHRoYXQgdGhpcyByYW5nZSBjb250YWlucyB0aGUgbGFyZ2VzdCBudW1iZXIgb2Ygb2JzZXJ2YXRpb25zLiBUaGUgcmVtYWluaW5nIGdyb3VwcyAoMuKAkzMgYW5kIDPigJM0IGRvdWJsZXMpIGFsc28gaGF2ZSByZWxhdGl2ZWx5IGhpZ2ggZnJlcXVlbmNpZXMsIHNob3dpbmcgdGhhdCB0aGUgZGF0YSBpcyBmYWlybHkgZXZlbmx5IGRpc3RyaWJ1dGVkIGFjcm9zcyB0aGUgcmFuZ2UuIFRoZSBkaXN0cmlidXRpb24gYXBwZWFycyB0byBiZSBhcHByb3hpbWF0ZWx5IHN5bW1ldHJpYywgd2l0aCBubyBtYWpvciBvdXRsaWVycyB2aXNpYmxlLiBPdmVyYWxsLCB0aGUgaGlzdG9ncmFtIHN1Z2dlc3RzIHRoYXQgcGxheWVycycgZG91YmxlcyBoaXQgdmFsdWVzIGhhdmUgbW9kZXJhdGUgdmFyaWF0aW9uLCB3aXRoIG1vc3QgcGxheWVycyBmYWxsaW5nIGJldHdlZW4gMSBhbmQgNCBkb3VibGVzLgo=