rm(list = ls())

Hypothesis Testing

Using the getSymbols command, download MONTHLY prices (from Yahoo) for Wal Mart, Inc (WMT) from Jan 2019 to Ago 2021.

library(quantmod)
getSymbols(c("WMT"), from="2019-01-01", to= "2021-08-30", periodicity="monthly", src="yahoo")

1.-Calculate simple and continuously compounded (cc) returns of WMTstock (you can create new R objects or new columns in the price objects)

returns.zoo <-diff(log(Ad(WMT))) 
returns.df <- as.data.frame(diff(log(Ad(WMT))))
colnames(returns.df) <- "r_WMT"

Summary

summary(returns.df)
summary(returns.zoo)
library(PerformanceAnalytics)
table.Stats(returns.df$r_WMT)
mean_r_WMT <- mean(returns.df$r_WMT, na.rm=TRUE) 
sd_r_WMT <- sd(returns.df$r_WMT, na.rm=TRUE) 
var_r_WMT <- var(returns.df$r_WMT, na.rm=TRUE) 
cat("Mean =", mean_r_WMT)
cat("Standard deviation = ", sd_r_WMT)
cat("Variance = ", var_r_WMT)
returns.df$R_WMT <- WMT$WMT.Adjusted / lag(WMT$WMT.Adjusted, n=1) - 1
table.Stats(returns.df$R_WMT)
mean(returns.df$R_WMT, na.rm=TRUE)
sd(returns.df$R_WMT, na.rm=TRUE)
var(returns.df$R_WMT, na.rm=TRUE)
mean_R_WMT = mean(returns.df$R_WMT, na.rm=TRUE)
cat("Mean of simple returns: ", mean_R_WMT,"\n")
mean_r_WMT = mean(returns.df$r_WMT, na.rm=TRUE) 
cat("Mean cc return: ", mean_r_WMT)

WE CAN SEE THAT THE MEAN OF SIMPLE MONTHLY RETURNS IS HIGHER THAN THE MEAN OF CC RETURNS (1.65648% VS 1.548398%). OUTSIDE THE RANGES OF -5 TO +5% THESE RANGES BECOME EVER MORE SIGNIFICANT.

2.- Do a histogram for the simple returns of WMT. INTERPRET this histogram

hist(returns.df$r_WMT, main="Histogram of WMT monthly returns", xlab="Continuously Compounded returns", col="dark blue")

ONE CAN TELL THAT THE MOST FREQUENT RETURNS OF STARBUCKS ARE BETWEEN -5% TO +5%. AROUND 10+ MONTHS THROUGHOUT IT’S HISTORY, WALMART HAS OFFERED MONTHLY RETURNS FROM 0 TO 10%. FOR AROUND 10 MONTHS WALMART HAS BEEN OFFERING NEGATIVE RETURNS BETWEEN -5% AND 0%. THE HISTOGRAM IN QUESTION IS A SYMMETRIC UNIMODAL HISTOGRAM, WITH A SKEW TO THE RIGHT HAND SIDE.

3.- Is the average of WMT cc returns significantly higher than 1%? NO, WMT DOESN’T INDICATE THAT ITS RETURNS ARE SIGNIFICANTYL HIGHER THAN ONE PERCENT ON AVERAGE, YIELDING ME WITH THE RESULT OF 0.8%.

  1. Which is the hypothesis test you need for this (Null and alternative hypothesis)? H0: mean(r_WMT) = 0 Ha: mean(r_WMT) > 0 H0: mean(r_WMT) = 0 Ha: mean(r_WMT) > 0
ttest_WMT <- t.test(as.numeric(WMT), alternative = "greater")
class(ttest_WMT)
names(ttest_WMT)
  1. Manually calculate the corresponding t-tests and show your calculation (without using the t.test function). Also do the hypothesis test using the t.test function. INTERPRET YOUR RESULTS

xa = Value of the variable of study you got from the data x0 = Value of the variable of study according to the Null Hypothesis (Ho) t = (xa - x0) / standard error(xa) In this case, the variable of study is the mean of returns, so xa= mean(returns): t = (mean(returns) - 0) / se The numerator is the difference between the mean returns of your data minus the mean return of the NULL HYPOTHESIS, which is zero. The denominator is the standard error of the variable of study (se), which is the individual standard deviation divided by the squared root of N. Then, the t value is actually the distance between the actual value of the mean return minus the hypothetical value, which is zero. This distance is measured in # of standard deviations of the mean returns. Then, se = sd(returns) / sqrt(N) t = (mean(sample)) - 0) / (sd(returns) / sqrt(N)) T VALUE WMT = 5.851

N <- nrow(WMT) 
se_WMT <- sd(WMT) / sqrt(N)
se_WMT
mean_WMT <- mean(WMT)
t_value_WMT <- (mean_WMT - 0) / se_WMT 
t_value_WMT

SINCE THE T VALUE FOR WMT TEST IS BIGGER THAN 2 THEN THERE IS ENOUGH STATITSTICAL EVIDENCE THAT POINTS TOWARDS THE FACT THAT THE MEAN OF RETURNS IS LARGER THAN 0

IN THIS CASE WE COULD REJECT THE NULL HYPOTHESIS, SO WE HAVE EVIDENCE TO SUPPORT OUR HYPOTHESIS(ALTERNATIVE) THAT STATES THAT THE MEAN RETURN OF BOTH STOCKS ARE LARGER THAN 0.

Regression model

library(quantmod)
getSymbols(c("CEMEXCPO.MX", "^MXX"), from="2018-01-01", to="2020-08-30", periodicity="daily", src="yahoo")
head(CEMEXCPO.MX)
tail(CEMEXCPO.MX)
head(MXX)
tail(MXX)

1.- Run a market regression model for CEMEX. Write the code you need (in R chunks) and show the output of the regression.

CEMEXCPO.MX <- na.omit(diff(log(CEMEXCPO.MX$CEMEXCPO.MXAdjusted)))
r_MXX <- na.omit(diff(log(MXX$MXX.Adjusted)))
all_rets <- merge(CEMEXCPO.MX, MXX)
colnames(all_rets) <- c("CEMEXCPO.MX", "MXX")
plot.default(x=all_rets$MXX,y=all_rets$CEMEXCPO.MX.Adjusted)
sumsquares <- anova(CEMEXCPO.MX)
sumsquares
t_value_WMT
VaR(CEMEXCPO.MX)
var_r_WMT

2.- QUESTIONS REGRESSION MODEL a- WHAT IS THE REGRESSION EQUATION OF THIS MODEL THE REGRESSION IS GIVEN BY THE Y=MB+X FORMULA WHERE Y IS THE DEPENDENT VARIABLE, X IS THE INDEPENDENT VARIABLE AND B IS THE SLOPE OF THE LINE WHILE A IS THE Y INTERCEPT. b- WHAT CAN YOU SAY ABOUT THE MARKET RISK OF THE STOCK? I THINK THAT THE STOCK IS SIGNIFICANTLY MORE RISKY THAN THE MARKET, IT ONLY TAKES TO SEE THE HISTORICAL DATA CONCERNING THE STOCK’S PRICE TO TELL CEMEX HAS SEEN BETTER DAYS. C.- CEMEX OVERFORMS THE MARKET, THERE IS A PROBABILITY OF 4% OF BEING WRONG WHEN REJECTING HYPOTHESIS 0. WITH THE T VALUE of 2.388 I CAN SAY THAT CEMEX OFFERS RETURNS OVER THE MARIKET. ALSO I CAN VERIFY THIS INFORMATION LOOKING AT THE CONFIDENCE INTERVAL. D.- HOW MUCH THE VARIANCE OF THE STOCK RETURNS CANNOT BE EXPLAINED BY THE VARIANCE OF MARKET RETURNS? 98.01% SINCE THE R SQUARED IS EQUAL TO .01956.

LS0tCnRpdGxlOiAiRXhhbSAxIFByYWN0aWNlIgphdXRob3I6IFN0ZWZhbiBTY2h3ZWl0emVyIEEwMTIwOTc1NQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCmBgYHtyfQpybShsaXN0ID0gbHMoKSkKYGBgCgoKIyMgSHlwb3RoZXNpcyBUZXN0aW5nCgpVc2luZyB0aGUgZ2V0U3ltYm9scyBjb21tYW5kLCBkb3dubG9hZCBNT05USExZIHByaWNlcyAoZnJvbSBZYWhvbykgZm9yIFdhbCBNYXJ0LCBJbmMgKFdNVCkgZnJvbSBKYW4gMjAxOSB0byBBZ28gMjAyMS4KCmBgYHtyfQpsaWJyYXJ5KHF1YW50bW9kKQpnZXRTeW1ib2xzKGMoIldNVCIpLCBmcm9tPSIyMDE5LTAxLTAxIiwgdG89ICIyMDIxLTA4LTMwIiwgcGVyaW9kaWNpdHk9Im1vbnRobHkiLCBzcmM9InlhaG9vIikKYGBgCjEuLUNhbGN1bGF0ZSBzaW1wbGUgYW5kIGNvbnRpbnVvdXNseSBjb21wb3VuZGVkIChjYykgcmV0dXJucyBvZiBXTVRzdG9jayAoeW91IGNhbiBjcmVhdGUgbmV3IFIgb2JqZWN0cyBvciBuZXcgY29sdW1ucyBpbiB0aGUgcHJpY2Ugb2JqZWN0cykKCmBgYHtyfQpyZXR1cm5zLnpvbyA8LWRpZmYobG9nKEFkKFdNVCkpKSAKcmV0dXJucy5kZiA8LSBhcy5kYXRhLmZyYW1lKGRpZmYobG9nKEFkKFdNVCkpKSkKY29sbmFtZXMocmV0dXJucy5kZikgPC0gInJfV01UIgpgYGAKClN1bW1hcnkKYGBge3J9CnN1bW1hcnkocmV0dXJucy5kZikKYGBgCmBgYHtyfQpzdW1tYXJ5KHJldHVybnMuem9vKQpgYGAKYGBge3J9CmxpYnJhcnkoUGVyZm9ybWFuY2VBbmFseXRpY3MpCmBgYAoKYGBge3J9CnRhYmxlLlN0YXRzKHJldHVybnMuZGYkcl9XTVQpCmBgYAoKYGBge3J9Cm1lYW5fcl9XTVQgPC0gbWVhbihyZXR1cm5zLmRmJHJfV01ULCBuYS5ybT1UUlVFKSAKc2Rfcl9XTVQgPC0gc2QocmV0dXJucy5kZiRyX1dNVCwgbmEucm09VFJVRSkgCnZhcl9yX1dNVCA8LSB2YXIocmV0dXJucy5kZiRyX1dNVCwgbmEucm09VFJVRSkgCmNhdCgiTWVhbiA9IiwgbWVhbl9yX1dNVCkKYGBgCmBgYHtyfQpjYXQoIlN0YW5kYXJkIGRldmlhdGlvbiA9ICIsIHNkX3JfV01UKQpgYGAKYGBge3J9CmNhdCgiVmFyaWFuY2UgPSAiLCB2YXJfcl9XTVQpCmBgYApgYGB7cn0KcmV0dXJucy5kZiRSX1dNVCA8LSBXTVQkV01ULkFkanVzdGVkIC8gbGFnKFdNVCRXTVQuQWRqdXN0ZWQsIG49MSkgLSAxCnRhYmxlLlN0YXRzKHJldHVybnMuZGYkUl9XTVQpCmBgYAoKYGBge3J9Cm1lYW4ocmV0dXJucy5kZiRSX1dNVCwgbmEucm09VFJVRSkKYGBgCmBgYHtyfQpzZChyZXR1cm5zLmRmJFJfV01ULCBuYS5ybT1UUlVFKQpgYGAKYGBge3J9CnZhcihyZXR1cm5zLmRmJFJfV01ULCBuYS5ybT1UUlVFKQpgYGAKYGBge3J9Cm1lYW5fUl9XTVQgPSBtZWFuKHJldHVybnMuZGYkUl9XTVQsIG5hLnJtPVRSVUUpCmNhdCgiTWVhbiBvZiBzaW1wbGUgcmV0dXJuczogIiwgbWVhbl9SX1dNVCwiXG4iKQpgYGAKYGBge3J9Cm1lYW5fcl9XTVQgPSBtZWFuKHJldHVybnMuZGYkcl9XTVQsIG5hLnJtPVRSVUUpIApjYXQoIk1lYW4gY2MgcmV0dXJuOiAiLCBtZWFuX3JfV01UKQpgYGAKIFdFIENBTiBTRUUgVEhBVCBUSEUgTUVBTiBPRiBTSU1QTEUgTU9OVEhMWSBSRVRVUk5TIElTIEhJR0hFUiBUSEFOIFRIRSBNRUFOIE9GIENDIFJFVFVSTlMgKDEuNjU2NDglIFZTIDEuNTQ4Mzk4JSkuIApPVVRTSURFIFRIRSBSQU5HRVMgT0YgLTUgVE8gKzUlIFRIRVNFIFJBTkdFUyBCRUNPTUUgRVZFUiBNT1JFIFNJR05JRklDQU5ULgoKCjIuLSBEbyBhIGhpc3RvZ3JhbSBmb3IgdGhlIHNpbXBsZSByZXR1cm5zIG9mIFdNVC4gSU5URVJQUkVUIHRoaXMgaGlzdG9ncmFtCmBgYHtyfQpoaXN0KHJldHVybnMuZGYkcl9XTVQsIG1haW49Ikhpc3RvZ3JhbSBvZiBXTVQgbW9udGhseSByZXR1cm5zIiwgeGxhYj0iQ29udGludW91c2x5IENvbXBvdW5kZWQgcmV0dXJucyIsIGNvbD0iZGFyayBibHVlIikKYGBgCk9ORSBDQU4gVEVMTCBUSEFUIFRIRSBNT1NUIEZSRVFVRU5UIFJFVFVSTlMgT0YgU1RBUkJVQ0tTIEFSRSBCRVRXRUVOIC01JSBUTyArNSUuIEFST1VORCAxMCsgTU9OVEhTIFRIUk9VR0hPVVQgSVQnUyBISVNUT1JZLCBXQUxNQVJUIEhBUyBPRkZFUkVEIE1PTlRITFkgUkVUVVJOUyBGUk9NIDAgVE8gMTAlLiBGT1IgQVJPVU5EIDEwIE1PTlRIUyBXQUxNQVJUIEhBUyBCRUVOIE9GRkVSSU5HIE5FR0FUSVZFIFJFVFVSTlMgQkVUV0VFTiAtNSUgQU5EIDAlLgpUSEUgSElTVE9HUkFNIElOIFFVRVNUSU9OIElTIEEgU1lNTUVUUklDIFVOSU1PREFMIEhJU1RPR1JBTSwgV0lUSCBBIFNLRVcgVE8gVEhFIFJJR0hUIEhBTkQgU0lERS4gCgoKMy4tIElzIHRoZSBhdmVyYWdlIG9mIFdNVCBjYyByZXR1cm5zIHNpZ25pZmljYW50bHkgaGlnaGVyIHRoYW4gMSU/IE5PLCBXTVQgRE9FU04nVCBJTkRJQ0FURSBUSEFUIElUUyBSRVRVUk5TIEFSRSBTSUdOSUZJQ0FOVFlMIEhJR0hFUiBUSEFOIE9ORSBQRVJDRU5UIE9OIEFWRVJBR0UsIFlJRUxESU5HIE1FIFdJVEggVEhFIFJFU1VMVCBPRiAwLjglLgoKQSkgV2hpY2ggaXMgdGhlIGh5cG90aGVzaXMgdGVzdCB5b3UgbmVlZCBmb3IgdGhpcyAoTnVsbCBhbmQgYWx0ZXJuYXRpdmUgaHlwb3RoZXNpcyk/CkgwOiBtZWFuKHJfV01UKSA9IDAgCkhhOiBtZWFuKHJfV01UKSA+IDAgCkgwOiBtZWFuKHJfV01UKSA9IDAgCkhhOiBtZWFuKHJfV01UKSA+IDAKCmBgYHtyfQp0dGVzdF9XTVQgPC0gdC50ZXN0KGFzLm51bWVyaWMoV01UKSwgYWx0ZXJuYXRpdmUgPSAiZ3JlYXRlciIpCmBgYAoKYGBge3J9CmNsYXNzKHR0ZXN0X1dNVCkKYGBgCmBgYHtyfQpuYW1lcyh0dGVzdF9XTVQpCmBgYAoKQikgTWFudWFsbHkgY2FsY3VsYXRlIHRoZSBjb3JyZXNwb25kaW5nIHQtdGVzdHMgYW5kIHNob3cgeW91ciBjYWxjdWxhdGlvbiAod2l0aG91dCB1c2luZyB0aGUgdC50ZXN0IGZ1bmN0aW9uKS4gQWxzbyBkbyB0aGUgaHlwb3RoZXNpcyB0ZXN0IHVzaW5nIHRoZSB0LnRlc3QgZnVuY3Rpb24uIElOVEVSUFJFVCBZT1VSIFJFU1VMVFMKCnhhID0gVmFsdWUgb2YgdGhlIHZhcmlhYmxlIG9mIHN0dWR5IHlvdSBnb3QgZnJvbSB0aGUgZGF0YQp4MCA9IFZhbHVlIG9mIHRoZSB2YXJpYWJsZSBvZiBzdHVkeSBhY2NvcmRpbmcgdG8gdGhlIE51bGwgSHlwb3RoZXNpcyAoSG8pCnQgPSAoeGEgLSB4MCkgLyBzdGFuZGFyZCBlcnJvcih4YSkKSW4gdGhpcyBjYXNlLCB0aGUgdmFyaWFibGUgb2Ygc3R1ZHkgaXMgdGhlIG1lYW4gb2YgcmV0dXJucywgc28geGE9IG1lYW4ocmV0dXJucyk6CnQgPSAobWVhbihyZXR1cm5zKSAtIDApIC8gc2UKVGhlIG51bWVyYXRvciBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtZWFuIHJldHVybnMgb2YgeW91ciBkYXRhIG1pbnVzIHRoZSBtZWFuIHJldHVybiBvZiB0aGUgTlVMTCBIWVBPVEhFU0lTLCB3aGljaCBpcyB6ZXJvLiBUaGUgZGVub21pbmF0b3IgaXMgdGhlIHN0YW5kYXJkIGVycm9yIG9mIHRoZSB2YXJpYWJsZSBvZiBzdHVkeSAoc2UpLCB3aGljaCBpcyB0aGUgaW5kaXZpZHVhbCBzdGFuZGFyZCBkZXZpYXRpb24gZGl2aWRlZCBieSB0aGUgc3F1YXJlZCByb290IG9mIE4uClRoZW4sIHRoZSB0IHZhbHVlIGlzIGFjdHVhbGx5IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG1lYW4gcmV0dXJuIG1pbnVzIHRoZSBoeXBvdGhldGljYWwgdmFsdWUsIHdoaWNoIGlzIHplcm8uIFRoaXMgZGlzdGFuY2UgaXMgbWVhc3VyZWQgaW4gIyBvZiBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRoZSBtZWFuIHJldHVybnMuClRoZW4sCnNlID0gc2QocmV0dXJucykgLyBzcXJ0KE4pCnQgPSAobWVhbihzYW1wbGUpKSAtIDApIC8gKHNkKHJldHVybnMpIC8gc3FydChOKSkKVCBWQUxVRSBXTVQgPSA1Ljg1MQoKYGBge3J9Ck4gPC0gbnJvdyhXTVQpIApzZV9XTVQgPC0gc2QoV01UKSAvIHNxcnQoTikKc2VfV01UCmBgYApgYGB7cn0KbWVhbl9XTVQgPC0gbWVhbihXTVQpCmBgYAoKYGBge3J9CnRfdmFsdWVfV01UIDwtIChtZWFuX1dNVCAtIDApIC8gc2VfV01UIAp0X3ZhbHVlX1dNVApgYGAKClNJTkNFIFRIRSBUIFZBTFVFIEZPUiBXTVQgVEVTVCBJUyBCSUdHRVIgVEhBTiAyIFRIRU4gVEhFUkUgSVMgRU5PVUdIIFNUQVRJVFNUSUNBTCBFVklERU5DRSBUSEFUIFBPSU5UUyBUT1dBUkRTIFRIRSBGQUNUIFRIQVQgVEhFIE1FQU4gT0YgUkVUVVJOUyBJUyBMQVJHRVIgVEhBTiAwCgpJTiBUSElTIENBU0UgV0UgQ09VTEQgUkVKRUNUIFRIRSBOVUxMIEhZUE9USEVTSVMsIFNPIFdFIEhBVkUgRVZJREVOQ0UgVE8gU1VQUE9SVCBPVVIgSFlQT1RIRVNJUyhBTFRFUk5BVElWRSkgVEhBVCBTVEFURVMgVEhBVCBUSEUgTUVBTiBSRVRVUk4gT0YgQk9USCBTVE9DS1MgQVJFIExBUkdFUiBUSEFOIDAuCgoKIyMgUmVncmVzc2lvbiBtb2RlbAoKYGBge3J9CmxpYnJhcnkocXVhbnRtb2QpCmdldFN5bWJvbHMoYygiQ0VNRVhDUE8uTVgiLCAiXk1YWCIpLCBmcm9tPSIyMDE4LTAxLTAxIiwgdG89IjIwMjAtMDgtMzAiLCBwZXJpb2RpY2l0eT0iZGFpbHkiLCBzcmM9InlhaG9vIikKYGBgCmBgYHtyfQpoZWFkKENFTUVYQ1BPLk1YKQpgYGAKCmBgYHtyfQp0YWlsKENFTUVYQ1BPLk1YKQpgYGAKYGBge3J9CmhlYWQoTVhYKQpgYGAKYGBge3J9CnRhaWwoTVhYKQpgYGAKCgoxLi0gUnVuIGEgbWFya2V0IHJlZ3Jlc3Npb24gbW9kZWwgZm9yIENFTUVYLiBXcml0ZSB0aGUgY29kZSB5b3UgbmVlZCAoaW4gUiBjaHVua3MpIGFuZCBzaG93IHRoZSBvdXRwdXQgb2YgdGhlIHJlZ3Jlc3Npb24uCgpgYGB7cn0KQ0VNRVhDUE8uTVggPC0gbmEub21pdChkaWZmKGxvZyhDRU1FWENQTy5NWCRDRU1FWENQTy5NWEFkanVzdGVkKSkpCnJfTVhYIDwtIG5hLm9taXQoZGlmZihsb2coTVhYJE1YWC5BZGp1c3RlZCkpKQphbGxfcmV0cyA8LSBtZXJnZShDRU1FWENQTy5NWCwgTVhYKQpjb2xuYW1lcyhhbGxfcmV0cykgPC0gYygiQ0VNRVhDUE8uTVgiLCAiTVhYIikKYGBgCmBgYHtyfQpwbG90LmRlZmF1bHQoeD1hbGxfcmV0cyRNWFgseT1hbGxfcmV0cyRDRU1FWENQTy5NWC5BZGp1c3RlZCkKYGBgCgpgYGB7cn0Kc3Vtc3F1YXJlcyA8LSBhbm92YShDRU1FWENQTy5NWCkKc3Vtc3F1YXJlcwpgYGAKCmBgYHtyfQp0X3ZhbHVlX1dNVApgYGAKYGBge3J9ClZhUihDRU1FWENQTy5NWCkKYGBgCmBgYHtyfQp2YXJfcl9XTVQKYGBgCgoKMi4tIFFVRVNUSU9OUyBSRUdSRVNTSU9OIE1PREVMCmEtIFdIQVQgSVMgVEhFIFJFR1JFU1NJT04gRVFVQVRJT04gT0YgVEhJUyBNT0RFTApUSEUgUkVHUkVTU0lPTiBJUyBHSVZFTiBCWSBUSEUgWT1NQitYIEZPUk1VTEEgV0hFUkUgWSBJUyBUSEUgREVQRU5ERU5UIFZBUklBQkxFLCBYIElTIFRIRSBJTkRFUEVOREVOVCBWQVJJQUJMRSBBTkQgQiBJUyBUSEUgU0xPUEUgT0YgVEhFIExJTkUgV0hJTEUgQSBJUyBUSEUgWSBJTlRFUkNFUFQuIApiLSBXSEFUIENBTiBZT1UgU0FZIEFCT1VUIFRIRSBNQVJLRVQgUklTSyBPRiBUSEUgU1RPQ0s/CkkgVEhJTksgVEhBVCBUSEUgU1RPQ0sgSVMgU0lHTklGSUNBTlRMWSBNT1JFIFJJU0tZIFRIQU4gVEhFIE1BUktFVCwgSVQgT05MWSBUQUtFUyBUTyBTRUUgVEhFIEhJU1RPUklDQUwgREFUQSBDT05DRVJOSU5HIFRIRSBTVE9DSydTIFBSSUNFIFRPIFRFTEwgQ0VNRVggSEFTIFNFRU4gQkVUVEVSIERBWVMuCkMuLSBDRU1FWCBPVkVSRk9STVMgVEhFIE1BUktFVCwgVEhFUkUgSVMgQSBQUk9CQUJJTElUWSBPRiA0JSBPRiBCRUlORyBXUk9ORyBXSEVOIFJFSkVDVElORyBIWVBPVEhFU0lTIDAuIFdJVEggVEhFIFQgVkFMVUUgb2YgMi4zODggSSBDQU4gU0FZIFRIQVQgQ0VNRVggT0ZGRVJTIFJFVFVSTlMgT1ZFUiBUSEUgTUFSSUtFVC4gQUxTTyBJIENBTiBWRVJJRlkgVEhJUyBJTkZPUk1BVElPTiBMT09LSU5HIEFUIFRIRSBDT05GSURFTkNFIElOVEVSVkFMLgpELi0gSE9XIE1VQ0ggVEhFIFZBUklBTkNFIE9GIFRIRSBTVE9DSyBSRVRVUk5TIENBTk5PVCBCRSBFWFBMQUlORUQgQlkgVEhFIFZBUklBTkNFIE9GIE1BUktFVCBSRVRVUk5TPwo5OC4wMSUgU0lOQ0UgVEhFIFIgU1FVQVJFRCBJUyBFUVVBTCBUTyAuMDE5NTYuCgo=