#Addition
2+3
[1] 5
5+10
[1] 15
7+7+7
[1] 21
#Subtraction
2-3
[1] -1
5-10
[1] -5
18-9-2
[1] 7
#Division
2/3
[1] 0.6666667
21/10
[1] 2.1
9/18
[1] 0.5
#Square root
sqrt(2)
[1] 1.414214
sqrt(5)
[1] 2.236068
sqrt(10)
[1] 3.162278
#Logarithms
log(2)
[1] 0.6931472
log10(5)
[1] 0.69897
log(6)
[1] 1.791759
#Question_1: Compute the log base 5 of 10 and the log of 10.
log(10, base = 5)
[1] 1.430677
log(10)
[1] 2.302585
#Batting Average=(No. of Hits)/(No. of At Bats)
#What is the batting average of a player that bats 29 hits in 112 at bats?
BA=(29)/(112)
BA
[1] 0.2589286
Batting_Average=round(BA,digits = 3)
Batting_Average
[1] 0.259
#Question_2:What is the batting average of a player that bats 42 hits in 212 at bats?
BA=42/212
BA
[1] 0.1981132
Batting_Average=round(BA,digits = 3)
Batting_Average
[1] 0.198
#On Base Percentage
#OBP=(H+BB+HBP)/(At Bats+BB+HBP+SF)
#Let us compute the OBP for a player with the following general stats
#AB=515,H=172,BB=84,HBP=5,SF=6
OBP=(172+84+5)/(515+84+5+6)
OBP
[1] 0.4278689
On_Base_Percentage=round(OBP,digits = 3)
On_Base_Percentage
[1] 0.428
#Question_3:Compute the OBP for a player with the following general stats:
#AB=565,H=156,BB=65,HBP=3,SF=7
OBP=(156+65+3)/(565+65+3+7)
OBP
[1] 0.35
3 == 8 #Does 3 equals 8?
[1] FALSE
4 == 6
[1] FALSE
4 == 4
[1] TRUE
3 != 8 #Is 3 different from 8?
[1] TRUE
3 != 9
[1] TRUE
3 != 3
[1] FALSE
3 <= 8 #Is 3 less than or equal to 8?
[1] TRUE
4 <= 9
[1] TRUE
4 <= 3
[1] FALSE
3>4
[1] FALSE
4>3
[1] TRUE
5>7
[1] FALSE
#Logical Disjunction (or)
FALSE | FALSE #False OR False
[1] FALSE
#Logical Conjunction (and)
TRUE & FALSE #True AND False
[1] FALSE
# Negation
! FALSE #Not False
[1] TRUE
#Combination of statements
2 < 3 | 1 == 5 #2<3 is True, 1==5 is False, True OR False is True
[1] TRUE
4 < 2 | 1 == 1
[1] TRUE
Total_Bases <- 6 + 5
Total_Bases*3
[1] 33
ls()
[1] "BA" "Batting_Average" "OBP" "On_Base_Percentage" "Total_Bases"
rm(Total_Bases)
pitches_by_innings <- c(12, 15, 10, 20, 10)
pitches_by_innings
[1] 12 15 10 20 10
strikes_by_innings <- c(9, 12, 6, 14, 9)
strikes_by_innings
[1] 9 12 6 14 9
#Question_4: Define two vectors,runs_per_9innings and hits_per_9innings, each with five elements.
runs_per_9innings <- c(3, 5, 1, 4, 2)
runs_per_9innings
[1] 3 5 1 4 2
hits_per_9innings <- c(5, 8, 2, 6, 2)
hits_per_9innings
[1] 5 8 2 6 2
# replicate function
rep(2, 5)
[1] 2 2 2 2 2
rep(3, 5)
[1] 3 3 3 3 3
rep(1, 4)
[1] 1 1 1 1
rep(5, 10)
[1] 5 5 5 5 5 5 5 5 5 5
# consecutive numbers
1:5
[1] 1 2 3 4 5
2:10
[1] 2 3 4 5 6 7 8 9 10
9:18
[1] 9 10 11 12 13 14 15 16 17 18
#sequence from 1 to 10 with a step of 2
seq(1, 10, by=2)
[1] 1 3 5 7 9
seq(500, 1500, by=250)
[1] 500 750 1000 1250 1500
#add vectors
pitches_by_innings+strikes_by_innings
[1] 21 27 16 34 19
#compare vectors
pitches_by_innings == strikes_by_innings
[1] FALSE FALSE FALSE FALSE FALSE
#find length of vector
length(pitches_by_innings)
[1] 5
length(strikes_by_innings)
[1] 5
#find minimum value in vector
min(pitches_by_innings)
[1] 10
min(runs_per_9innings)
[1] 1
min(strikes_by_innings)
[1] 6
# find average value in vector
mean(pitches_by_innings)
[1] 13.4
mean(strikes_by_innings)
[1] 10
mean(runs_per_9innings)
[1] 3
pitches_by_innings
[1] 12 15 10 20 10
#If you want to get the first element:
pitches_by_innings[1]
[1] 12
#Question_5: Get the first element of hits_per_9innings.
hits_per_9innings[1]
[1] 5
pitches_by_innings[length(pitches_by_innings)]
[1] 10
runs_per_9innings[length(runs_per_9innings)]
[1] 2
#Question_6: Get the last element of hits_per_9innings.
hits_per_9innings[5]
[1] 2
hits_per_9innings[length(hits_per_9innings)]
[1] 2
pitches_by_innings [c(2, 3, 4)]
[1] 15 10 20
runs_per_9innings[c(3, 4, 5)]
[1] 1 4 2
player_positions <- c("catcher", "pitcher", "infielders", "outfielders")
data.frame(bonus = c(2, 3, 1),#in millions
active_roster = c("yes", "no", "yes"),
salary = c(1.5, 2.5, 1))#in millions
sample(1:10, size=5)
[1] 7 8 9 1 10
sample(1:100, size = 10)
[1] 43 30 32 18 74 87 40 89 81 90
bar <- data.frame(var1 = LETTERS[1:10], var2 = 1:10)
#Check data frame
bar
n <- 5
samplerows <- sample(1:nrow(bar), size = n)
#print sample rows
samplerows
[1] 8 6 3 5 2
#extract rows
barsample <- bar[samplerows, ]
#print sample
print(barsample)
var1 var2
8 H 8
6 F 6
3 C 3
5 E 5
2 B 2
bar[sample(1:nrow(bar), n), ]
x <- c("Yes","No","No","Yes","Yes")
table(x)
x
No Yes
2 3
sals <- c(12, .4, 5, 2, 50, 8, 3, 1, 4, 0.25)
#the average
mean(sals)
[1] 8.565
#the variance
var(sals)
[1] 225.5145
#the standard deviation
sd(sals)
[1] 15.01714
#the median
median(sals)
[1] 3.5
#Tukey's five number summary, useful for box-plots
# five numbers: min, lower hinge, median, upper hinge, max
fivenum(sals)
[1] 0.25 1.00 3.50 8.00 50.00
#summary statistics
summary(sals)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.250 1.250 3.500 8.565 7.250 50.000
#Function to find the mode, i.e. most frequent value
getMode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
# Most frequent value in pitches_by_innings
getMode(pitches_by_innings)
[1] 10
getMode(hits_per_9innings)
[1] 2
#Question_7: Find the most frequent value of hits_per_9innings.
getMode(hits_per_9innings)
[1] 2
#Question_8: Summarize the following survey with the `table()` command:
#What is your favorite day of the week to watch baseball? A total of 10 fans submitted this survey.
#Saturday, Saturday, Sunday, Monday, Saturday,Tuesday, Sunday, Friday, Friday, Monday
game_day<-c("Saturday", "Saturday", "Sunday", "Monday", "Saturday","Tuesday", "Sunday", "Friday", "Friday", "Monday")
table(game_day)
game_day
Friday Monday Saturday Sunday Tuesday
2 2 3 2 1
#Question_9: What is the most frequent answer recorded in the survey? Use the getMode function to compute results.
getMode(game_day)
[1] "Saturday"
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCgpgYGB7cn0KI0FkZGl0aW9uCjIrMwo1KzEwCjcrNys3CmBgYAoKCgoKCmBgYHtyfQojU3VidHJhY3Rpb24KMi0zCjUtMTAKMTgtOS0yCmBgYAoKCgoKYGBge3J9CiNEaXZpc2lvbgoyLzMKMjEvMTAKOS8xOApgYGAKCgoKCgpgYGB7cn0KI1NxdWFyZSByb290CnNxcnQoMikKc3FydCg1KQpzcXJ0KDEwKQpgYGAKCgoKCmBgYHtyfQojTG9nYXJpdGhtcwpsb2coMikKbG9nMTAoNSkKbG9nKDYpCmBgYAoKCgoKYGBge3J9CiNRdWVzdGlvbl8xOiBDb21wdXRlIHRoZSBsb2cgYmFzZSA1IG9mIDEwIGFuZCB0aGUgbG9nIG9mIDEwLgoKbG9nKDEwLCBiYXNlID0gNSkKbG9nKDEwKQpgYGAKCgoKCmBgYHtyfQojQmF0dGluZyBBdmVyYWdlPShOby4gb2YgSGl0cykvKE5vLiBvZiBBdCBCYXRzKQojV2hhdCBpcyB0aGUgYmF0dGluZyBhdmVyYWdlIG9mIGEgcGxheWVyIHRoYXQgYmF0cyAyOSBoaXRzIGluIDExMiBhdCBiYXRzPwpCQT0oMjkpLygxMTIpCkJBCmBgYAoKCmBgYHtyfQpCYXR0aW5nX0F2ZXJhZ2U9cm91bmQoQkEsZGlnaXRzID0gMykKQmF0dGluZ19BdmVyYWdlCmBgYAoKCgpgYGB7cn0KI1F1ZXN0aW9uXzI6V2hhdCBpcyB0aGUgYmF0dGluZyBhdmVyYWdlIG9mIGEgcGxheWVyIHRoYXQgYmF0cyA0MiBoaXRzIGluIDIxMiBhdCBiYXRzPwpCQT00Mi8yMTIKQkEKQmF0dGluZ19BdmVyYWdlPXJvdW5kKEJBLGRpZ2l0cyA9IDMpCkJhdHRpbmdfQXZlcmFnZQpgYGAKCgoKYGBge3J9CiNPbiBCYXNlIFBlcmNlbnRhZ2UKI09CUD0oSCtCQitIQlApLyhBdCBCYXRzK0JCK0hCUCtTRikKI0xldCB1cyBjb21wdXRlIHRoZSBPQlAgZm9yIGEgcGxheWVyIHdpdGggdGhlIGZvbGxvd2luZyBnZW5lcmFsIHN0YXRzCiNBQj01MTUsSD0xNzIsQkI9ODQsSEJQPTUsU0Y9NgpPQlA9KDE3Mis4NCs1KS8oNTE1Kzg0KzUrNikKT0JQCmBgYAoKCgpgYGB7cn0KT25fQmFzZV9QZXJjZW50YWdlPXJvdW5kKE9CUCxkaWdpdHMgPSAzKQpPbl9CYXNlX1BlcmNlbnRhZ2UKYGBgCgoKCmBgYHtyfQojUXVlc3Rpb25fMzpDb21wdXRlIHRoZSBPQlAgZm9yIGEgcGxheWVyIHdpdGggdGhlIGZvbGxvd2luZyBnZW5lcmFsIHN0YXRzOgojQUI9NTY1LEg9MTU2LEJCPTY1LEhCUD0zLFNGPTcKCk9CUD0oMTU2KzY1KzMpLyg1NjUrNjUrMys3KQpPQlAKYGBgCgoKCmBgYHtyfQozID09IDggI0RvZXMgMyBlcXVhbHMgOD8KNCA9PSA2CjQgPT0gNApgYGAKCgpgYGB7cn0KMyAhPSA4ICNJcyAzIGRpZmZlcmVudCBmcm9tIDg/CjMgIT0gOQozICE9IDMKYGBgCgoKCmBgYHtyfQozIDw9IDggI0lzIDMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDg/CjQgPD0gOQo0IDw9IDMKYGBgCgoKCmBgYHtyfQozPjQKND4zCjU+NwpgYGAKCgpgYGB7cn0KI0xvZ2ljYWwgRGlzanVuY3Rpb24gKG9yKQpGQUxTRSB8IEZBTFNFICNGYWxzZSBPUiBGYWxzZQpgYGAKCgpgYGB7cn0KI0xvZ2ljYWwgQ29uanVuY3Rpb24gKGFuZCkKVFJVRSAmIEZBTFNFICNUcnVlIEFORCBGYWxzZQpgYGAKCgoKYGBge3J9CiMgTmVnYXRpb24KISBGQUxTRSAjTm90IEZhbHNlCmBgYAoKCmBgYHtyfQojQ29tYmluYXRpb24gb2Ygc3RhdGVtZW50cwoyIDwgMyB8IDEgPT0gNSAgIzI8MyBpcyBUcnVlLCAxPT01IGlzIEZhbHNlLCBUcnVlIE9SIEZhbHNlIGlzIFRydWUKNCA8IDIgfCAxID09IDEKYGBgCgoKYGBge3J9ClRvdGFsX0Jhc2VzIDwtIDYgKyA1ClRvdGFsX0Jhc2VzKjMKYGBgCgoKCmBgYHtyfQpscygpCmBgYAoKCgpgYGB7cn0Kcm0oVG90YWxfQmFzZXMpCmBgYAoKCgpgYGB7cn0KcGl0Y2hlc19ieV9pbm5pbmdzIDwtIGMoMTIsIDE1LCAxMCwgMjAsIDEwKSAKcGl0Y2hlc19ieV9pbm5pbmdzCmBgYAoKCgoKYGBge3J9CnN0cmlrZXNfYnlfaW5uaW5ncyA8LSBjKDksIDEyLCA2LCAxNCwgOSkKc3RyaWtlc19ieV9pbm5pbmdzCmBgYAoKCgpgYGB7cn0KI1F1ZXN0aW9uXzQ6IERlZmluZSB0d28gdmVjdG9ycyxydW5zX3Blcl85aW5uaW5ncyBhbmQgaGl0c19wZXJfOWlubmluZ3MsIGVhY2ggd2l0aCBmaXZlIGVsZW1lbnRzLiAKCnJ1bnNfcGVyXzlpbm5pbmdzIDwtIGMoMywgNSwgMSwgNCwgMikKcnVuc19wZXJfOWlubmluZ3MKCmhpdHNfcGVyXzlpbm5pbmdzIDwtIGMoNSwgOCwgMiwgNiwgMikKaGl0c19wZXJfOWlubmluZ3MKYGBgCgoKYGBge3J9CiMgcmVwbGljYXRlIGZ1bmN0aW9uCnJlcCgyLCA1KQpyZXAoMywgNSkKcmVwKDEsIDQpCnJlcCg1LCAxMCkKYGBgCgoKCmBgYHtyfQojIGNvbnNlY3V0aXZlIG51bWJlcnMKMTo1CjI6MTAKOToxOApgYGAKCgoKCmBgYHtyfQojc2VxdWVuY2UgZnJvbSAxIHRvIDEwIHdpdGggYSBzdGVwIG9mIDIKc2VxKDEsIDEwLCBieT0yKQpzZXEoNTAwLCAxNTAwLCBieT0yNTApCmBgYAoKCgpgYGB7cn0KI2FkZCB2ZWN0b3JzCnBpdGNoZXNfYnlfaW5uaW5ncytzdHJpa2VzX2J5X2lubmluZ3MKYGBgCgoKYGBge3J9CiNjb21wYXJlIHZlY3RvcnMKcGl0Y2hlc19ieV9pbm5pbmdzID09IHN0cmlrZXNfYnlfaW5uaW5ncwpgYGAKCgoKYGBge3J9CiNmaW5kIGxlbmd0aCBvZiB2ZWN0b3IKbGVuZ3RoKHBpdGNoZXNfYnlfaW5uaW5ncykKbGVuZ3RoKHN0cmlrZXNfYnlfaW5uaW5ncykKYGBgCgoKCmBgYHtyfQojZmluZCBtaW5pbXVtIHZhbHVlIGluIHZlY3RvcgptaW4ocGl0Y2hlc19ieV9pbm5pbmdzKQptaW4ocnVuc19wZXJfOWlubmluZ3MpCm1pbihzdHJpa2VzX2J5X2lubmluZ3MpCmBgYAoKCgpgYGB7cn0KIyBmaW5kIGF2ZXJhZ2UgdmFsdWUgaW4gdmVjdG9yCm1lYW4ocGl0Y2hlc19ieV9pbm5pbmdzKQptZWFuKHN0cmlrZXNfYnlfaW5uaW5ncykKbWVhbihydW5zX3Blcl85aW5uaW5ncykKYGBgCgoKCmBgYHtyfQpwaXRjaGVzX2J5X2lubmluZ3MKYGBgCgoKYGBge3J9CiNJZiB5b3Ugd2FudCB0byBnZXQgdGhlIGZpcnN0IGVsZW1lbnQ6CnBpdGNoZXNfYnlfaW5uaW5nc1sxXQpgYGAKCgoKYGBge3J9CiNRdWVzdGlvbl81OiBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgaGl0c19wZXJfOWlubmluZ3MuCmhpdHNfcGVyXzlpbm5pbmdzWzFdCmBgYAoKCmBgYHtyfQpwaXRjaGVzX2J5X2lubmluZ3NbbGVuZ3RoKHBpdGNoZXNfYnlfaW5uaW5ncyldCnJ1bnNfcGVyXzlpbm5pbmdzW2xlbmd0aChydW5zX3Blcl85aW5uaW5ncyldCmBgYAoKCmBgYHtyfQojUXVlc3Rpb25fNjogR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgaGl0c19wZXJfOWlubmluZ3MuCmhpdHNfcGVyXzlpbm5pbmdzWzVdCmhpdHNfcGVyXzlpbm5pbmdzW2xlbmd0aChoaXRzX3Blcl85aW5uaW5ncyldCmBgYAoKCmBgYHtyfQpwaXRjaGVzX2J5X2lubmluZ3MgW2MoMiwgMywgNCldCnJ1bnNfcGVyXzlpbm5pbmdzW2MoMywgNCwgNSldCmBgYAoKCgpgYGB7cn0KcGxheWVyX3Bvc2l0aW9ucyA8LSBjKCJjYXRjaGVyIiwgInBpdGNoZXIiLCAiaW5maWVsZGVycyIsICJvdXRmaWVsZGVycyIpCmBgYAoKCgpgYGB7cn0KZGF0YS5mcmFtZShib251cyA9IGMoMiwgMywgMSksI2luIG1pbGxpb25zIAogICAgICAgICAgIGFjdGl2ZV9yb3N0ZXIgPSBjKCJ5ZXMiLCAibm8iLCAieWVzIiksIAogICAgICAgICAgIHNhbGFyeSA9IGMoMS41LCAyLjUsIDEpKSNpbiBtaWxsaW9ucyAKYGBgCgoKCmBgYHtyfQpzYW1wbGUoMToxMCwgc2l6ZT01KQpzYW1wbGUoMToxMDAsIHNpemUgPSAxMCkKYGBgCgoKCmBgYHtyfQpiYXIgPC0gZGF0YS5mcmFtZSh2YXIxID0gTEVUVEVSU1sxOjEwXSwgdmFyMiA9IDE6MTApCiNDaGVjayBkYXRhIGZyYW1lCmJhcgpgYGAKCgoKYGBge3J9Cm4gPC0gNQpgYGAKCgpgYGB7cn0Kc2FtcGxlcm93cyA8LSBzYW1wbGUoMTpucm93KGJhciksIHNpemUgPSBuKQojcHJpbnQgc2FtcGxlIHJvd3MKc2FtcGxlcm93cwpgYGAKCgoKYGBge3J9CiNleHRyYWN0IHJvd3MKYmFyc2FtcGxlIDwtIGJhcltzYW1wbGVyb3dzLCBdCiNwcmludCBzYW1wbGUKcHJpbnQoYmFyc2FtcGxlKQpgYGAKCgoKCmBgYHtyfQpiYXJbc2FtcGxlKDE6bnJvdyhiYXIpLCBuKSwgXQpgYGAKCgoKYGBge3J9CnggPC0gYygiWWVzIiwiTm8iLCJObyIsIlllcyIsIlllcyIpIAp0YWJsZSh4KQpgYGAKCgoKYGBge3J9CnNhbHMgPC0gYygxMiwgLjQsIDUsIDIsIDUwLCA4LCAzLCAxLCA0LCAwLjI1KQojdGhlIGF2ZXJhZ2UKbWVhbihzYWxzKQpgYGAKCgoKYGBge3J9CiN0aGUgdmFyaWFuY2UKdmFyKHNhbHMpCmBgYAoKCgpgYGB7cn0KI3RoZSBzdGFuZGFyZCBkZXZpYXRpb24Kc2Qoc2FscykKYGBgCgoKCmBgYHtyfQojdGhlIG1lZGlhbgptZWRpYW4oc2FscykKYGBgCgoKCgpgYGB7cn0KI1R1a2V5J3MgZml2ZSBudW1iZXIgc3VtbWFyeSwgdXNlZnVsIGZvciBib3gtcGxvdHMKIyBmaXZlIG51bWJlcnM6IG1pbiwgbG93ZXIgaGluZ2UsIG1lZGlhbiwgdXBwZXIgaGluZ2UsIG1heApmaXZlbnVtKHNhbHMpCmBgYAoKCgoKYGBge3J9CiNzdW1tYXJ5IHN0YXRpc3RpY3MKc3VtbWFyeShzYWxzKQpgYGAKCgoKCmBgYHtyfQojRnVuY3Rpb24gdG8gZmluZCB0aGUgbW9kZSwgaS5lLiBtb3N0IGZyZXF1ZW50IHZhbHVlCmdldE1vZGUgPC0gZnVuY3Rpb24oeCkgewogICAgIHV4IDwtIHVuaXF1ZSh4KQogICAgIHV4W3doaWNoLm1heCh0YWJ1bGF0ZShtYXRjaCh4LCB1eCkpKV0KIH0KYGBgCgoKCgpgYGB7cn0KIyBNb3N0IGZyZXF1ZW50IHZhbHVlIGluIHBpdGNoZXNfYnlfaW5uaW5ncwpnZXRNb2RlKHBpdGNoZXNfYnlfaW5uaW5ncykKZ2V0TW9kZShoaXRzX3Blcl85aW5uaW5ncykKYGBgCgoKCmBgYHtyfQojUXVlc3Rpb25fNzogRmluZCB0aGUgbW9zdCBmcmVxdWVudCB2YWx1ZSBvZiBoaXRzX3Blcl85aW5uaW5ncy4KZ2V0TW9kZShoaXRzX3Blcl85aW5uaW5ncykKYGBgCgoKCmBgYHtyfQojUXVlc3Rpb25fODogU3VtbWFyaXplIHRoZSBmb2xsb3dpbmcgc3VydmV5IHdpdGggdGhlIGB0YWJsZSgpYCBjb21tYW5kOgojV2hhdCBpcyB5b3VyIGZhdm9yaXRlIGRheSBvZiB0aGUgd2VlayB0byB3YXRjaCBiYXNlYmFsbD8gQSB0b3RhbCBvZiAxMCBmYW5zIHN1Ym1pdHRlZCB0aGlzIHN1cnZleS4KI1NhdHVyZGF5LCBTYXR1cmRheSwgU3VuZGF5LCBNb25kYXksIFNhdHVyZGF5LFR1ZXNkYXksIFN1bmRheSwgRnJpZGF5LCBGcmlkYXksIE1vbmRheQpnYW1lX2RheTwtYygiU2F0dXJkYXkiLCAiU2F0dXJkYXkiLCAiU3VuZGF5IiwgIk1vbmRheSIsICJTYXR1cmRheSIsIlR1ZXNkYXkiLCAiU3VuZGF5IiwgIkZyaWRheSIsICJGcmlkYXkiLCAiTW9uZGF5IikKCnRhYmxlKGdhbWVfZGF5KQpgYGAKCgoKCmBgYHtyfQojUXVlc3Rpb25fOTogV2hhdCBpcyB0aGUgbW9zdCBmcmVxdWVudCBhbnN3ZXIgcmVjb3JkZWQgaW4gdGhlIHN1cnZleT8gVXNlIHRoZSBnZXRNb2RlIGZ1bmN0aW9uIHRvIGNvbXB1dGUgcmVzdWx0cy4gCmdldE1vZGUoZ2FtZV9kYXkpCmBgYAoKCg==