1. Giới thiệu
Trong bối cảnh thị trường tài chính Việt Nam ngày càng phát triển,
ngành bất động sản tiếp tục giữ vai trò chủ lực với nhiều mã cổ phiếu
lớn. Nghiên cứu này tập trung đánh giá hiệu quả đầu tư của một số cổ
phiếu tiêu biểu trong ngành bất động sản, bao gồm VIC, BCM, KDH, VHM và
HDG. Phân tích được thực hiện thông qua việc kiểm định tính dừng chuỗi
lợi suất, tính toán lợi suất hàng năm, đánh giá rủi ro, cũng như đo
lường sự tương quan giữa các cổ phiếu nhằm hỗ trợ nhà đầu tư đưa ra
quyết định hiệu quả hơn.
2. Dữ liệu nghiên cứu
# 1. Cài đặt và nạp gói
library(readxl)
library(urca)
library(PerformanceAnalytics)
library(DT)
library(ggplot2)
data <- read_xlsx("C:/Users/Admin/Downloads/datamh.xlsx", sheet = 1)
colnames(data) <- c("Date", "VIC", "BCM", "KDH", "VHM", "HDG") # đặt lại tên cột
data <- na.omit(data)
datatable(data, options = list(scrollX = TRUE))
3. Tính log return
returns <- as.data.frame(lapply(data[-1], function(x) diff(log(x))))
colnames(returns) <- colnames(data)[-1]
returns <- na.omit(returns)
KẾT QUẢ NGHIÊN CỨU VÀ PHÂN TÍCH 2.1. Kiểm định tính
dừng chuỗi lợi suất Trước khi tiến hành phân tích mô hình CAPM, cần kiểm
tra tính dừng của các chuỗi lợi suất logarit cho các cổ phiếu đại diện
ngành BĐS: VIC, BCM, KDH, VHM, HDG.
4. Kiểm định tính dừng ADF
adf_results <- lapply(returns, function(x) {
x_clean <- x[is.finite(x)]
if (length(x_clean) > 10) {
return(summary(ur.df(x_clean, type = "drift", selectlags = "AIC")))
} else {
return(NA)
}
})
print(adf_results$VIC)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression drift
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.34192 -0.02093 -0.00080 0.01471 0.41683
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.0004134 0.0031901 -0.13 0.897
## z.lag.1 -1.6882392 0.0631060 -26.75 <2e-16 ***
## z.diff.lag 0.3701917 0.0403695 9.17 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0742 on 538 degrees of freedom
## Multiple R-squared: 0.6669, Adjusted R-squared: 0.6657
## F-statistic: 538.6 on 2 and 538 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -26.7524 357.8496
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau2 -3.43 -2.86 -2.57
## phi1 6.43 4.59 3.78
Kết luận: Tất cả các chuỗi lợi suất đều là chuỗi dừng, hoàn toàn phù
hợp cho mô hình hồi quy như CAPM.
Ước lượng mô hình CAPM Áp dụng mô hình định giá tài
sản vốn (CAPM) với giả định lãi suất phi rủi ro là 3%/năm, tương đương
0.03/252 mỗi ngày.
5. Ước lượng mô hình CAPM
rf <- 0.03 / 252
stocks <- colnames(returns)
# (Giả sử VHM là đại diện thị trường)
Rm <- returns$VHM
CAPM_models <- lapply(stocks, function(stock) {
Ri_excess <- returns[[stock]] - rf
Rm_excess <- Rm - rf
df <- na.omit(data.frame(Ri_excess, Rm_excess))
if (nrow(df) == 0) {
return(NA)
} else {
return(summary(lm(Ri_excess ~ Rm_excess, data = df)))
}
})
names(CAPM_models) <- stocks
6. Tóm tắt kết quả
valid_CAPM <- CAPM_models[!sapply(CAPM_models, function(x) any(is.na(x)))]
beta_vals <- sapply(valid_CAPM, function(x) coef(x)[2])
alpha_vals <- sapply(valid_CAPM, function(x) coef(x)[1])
rsq_vals <- sapply(valid_CAPM, function(x) x$r.squared)
mean_returns <- colMeans(returns[names(valid_CAPM)], na.rm = TRUE) * 252 * 100
market_return <- mean(Rm, na.rm = TRUE) * 252
expected_returns <- (rf * 252 + beta_vals * (market_return - rf * 252)) * 100
CAPM_results <- data.frame(
Stock = names(valid_CAPM),
Alpha = round(alpha_vals * 252 * 100, 4),
Beta = round(beta_vals, 4),
R_Squared = round(rsq_vals, 4),
Return_Actual = round(mean_returns, 2),
Return_CAPM = round(expected_returns, 2)
)
print(CAPM_results)
## Stock Alpha Beta R_Squared Return_Actual Return_CAPM
## VIC VIC -6.4054 0.7411 0.5773 -6.39 0.02
## BCM BCM -2.2399 0.3343 0.1714 -0.59 1.65
## KDH KDH 15.8772 0.1743 0.0490 18.18 2.30
## VHM VHM 0.0000 1.0000 1.0000 -1.03 -1.03
## HDG HDG 6.1773 0.2746 0.1115 8.07 1.89
Nhận xét Beta: Hầu hết các cổ phiếu có beta > 1, cho thấy mức độ
biến động cao hơn thị trường. Ví dụ: nếu VIC có beta 1.3 → kỳ vọng biến
động mạnh khi thị trường biến động.
Alpha: Nếu alpha dương → cổ phiếu có hiệu suất vượt kỳ vọng
(underpriced); alpha âm → underperform hoặc bị định giá cao.
R²: Đo lường mức độ giải thích của biến thị trường với biến động cổ
phiếu. R² cao (>0.5) cho thấy mô hình CAPM giải thích tốt.
Lợi suất thực tế vs kỳ vọng: So sánh giúp nhận diện cổ phiếu có hiệu
suất vượt trội (ví dụ: nếu HDG có Return_Actual cao hơn Return_CAPM) →
tín hiệu tích cực cho nhà đầu tư.
Đường thị trường chứng khoán (SML)
# 8. Tính VaR danh mục đều
cov_matrix <- cov(returns[names(beta_vals)]) * 252
w <- rep(1 / length(beta_vals), length(beta_vals))
var_p <- as.numeric(t(w) %*% cov_matrix %*% w)
sd_p <- sqrt(var_p)
VaR_95 <- qnorm(0.95) * sd_p
list(Variance = var_p, SD = sd_p, VaR_95 = VaR_95)
## $Variance
## [1] 0.6503841
##
## $SD
## [1] 0.806464
##
## $VaR_95
## [1] 1.326515
Kết luận Các cổ phiếu BĐS trong mẫu đều có chuỗi lợi
suất log dừng, phù hợp với các mô hình định lượng như CAPM.
Một số cổ phiếu như MBB/CTG trong ngành ngân hàng, thì trong ngành
BĐS có thể là HDG/KDH (tuỳ dữ liệu) có alpha dương và beta cao, phù hợp
với nhà đầu tư ưa thích rủi ro và kỳ vọng sinh lời cao.
Danh mục phân bổ đều giữa các cổ phiếu giúp giảm thiểu rủi ro phi hệ
thống, tuy nhiên vẫn chịu ảnh hưởng đáng kể từ thị trường chung.
Mô hình CAPM giúp cung cấp đánh giá định lượng rõ ràng về kỳ vọng lợi
suất và mức độ rủi ro tương ứng, hỗ trợ hiệu quả trong quyết định đầu
tư.
LS0tDQp0aXRsZTogIlBow6JuIFTDrWNoIEhp4buHdSBRdeG6oyDEkOG6p3UgVMawIEPhu5UgUGhp4bq/dSBOZ8OgbmggQuG6pXQgxJDhu5luZyBT4bqjbiINCmF1dGhvcjogIlRoacOqbiBLaW0iDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UgIA0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNQ0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogdHJ1ZQ0KICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQ0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkNCmBgYA0KDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KaDEsIGgyLCBoMywgaDQgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQpoMSB7IGZvbnQtc2l6ZTogMzJweDsgfQ0KaDIgeyBmb250LXNpemU6IDI4cHg7IH0NCmgzIHsgZm9udC1zaXplOiAyNHB4OyBmb250LXN0eWxlOiBpdGFsaWM7IH0NCmg0IHsgZm9udC1zaXplOiAyMHB4OyBmb250LXN0eWxlOiBpdGFsaWM7IH0NCg0KYm9keSB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDE4cHg7DQp9DQpwOm5vdChoMSk6bm90KGgyKTpub3QoaDMpOm5vdChoNCk6bm90KGg1KSB7DQogIHRleHQtaW5kZW50OiAyZW07DQp9DQpwIHsNCiAgdGV4dC1hbGlnbjoganVzdGlmeTsNCn0NCi50b2NpZnktaGVhZGVyIHsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQpgYGANCg0KIyAxLiBHaeG7m2kgdGhp4buHdQ0KDQpUcm9uZyBi4buRaSBj4bqjbmggdGjhu4sgdHLGsOG7nW5nIHTDoGkgY2jDrW5oIFZp4buHdCBOYW0gbmfDoHkgY8OgbmcgcGjDoXQgdHJp4buDbiwgbmfDoG5oIGLhuqV0IMSR4buZbmcgc+G6o24gdGnhur9wIHThu6VjIGdp4buvIHZhaSB0csOyIGNo4bunIGzhu7FjIHbhu5tpIG5oaeG7gXUgbcOjIGPhu5UgcGhp4bq/dSBs4bubbi4gTmdoacOqbiBj4bupdSBuw6B5IHThuq1wIHRydW5nIMSRw6FuaCBnacOhIGhp4buHdSBxdeG6oyDEkeG6p3UgdMawIGPhu6dhIG3hu5l0IHPhu5EgY+G7lSBwaGnhur91IHRpw6p1IGJp4buDdSB0cm9uZyBuZ8OgbmggYuG6pXQgxJHhu5luZyBz4bqjbiwgYmFvIGfhu5NtIFZJQywgQkNNLCBLREgsIFZITSB2w6AgSERHLiBQaMOibiB0w61jaCDEkcaw4bujYyB0aOG7sWMgaGnhu4duIHRow7RuZyBxdWEgdmnhu4djIGtp4buDbSDEkeG7i25oIHTDrW5oIGThu6tuZyBjaHXhu5dpIGzhu6NpIHN14bqldCwgdMOtbmggdG/DoW4gbOG7o2kgc3XhuqV0IGjDoG5nIG7Eg20sIMSRw6FuaCBnacOhIHLhu6dpIHJvLCBjxaluZyBuaMawIMSRbyBsxrDhu51uZyBz4buxIHTGsMahbmcgcXVhbiBnaeG7r2EgY8OhYyBj4buVIHBoaeG6v3UgbmjhurFtIGjhu5cgdHLhu6MgbmjDoCDEkeG6p3UgdMawIMSRxrBhIHJhIHF1eeG6v3QgxJHhu4tuaCBoaeG7h3UgcXXhuqMgaMahbi4NCg0KIyAyLiBE4buvIGxp4buHdSBuZ2hpw6puIGPhu6l1DQpgYGB7cn0NCiMgMS4gQ8OgaSDEkeG6t3QgdsOgIG7huqFwIGfDs2kNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeSh1cmNhKQ0KbGlicmFyeShQZXJmb3JtYW5jZUFuYWx5dGljcykNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KGdncGxvdDIpDQpkYXRhIDwtIHJlYWRfeGxzeCgiQzovVXNlcnMvQWRtaW4vRG93bmxvYWRzL2RhdGFtaC54bHN4Iiwgc2hlZXQgPSAxKQ0KY29sbmFtZXMoZGF0YSkgPC0gYygiRGF0ZSIsICJWSUMiLCAiQkNNIiwgIktESCIsICJWSE0iLCAiSERHIikgICMgxJHhurd0IGzhuqFpIHTDqm4gY+G7mXQNCmRhdGEgPC0gbmEub21pdChkYXRhKQ0KZGF0YXRhYmxlKGRhdGEsIG9wdGlvbnMgPSBsaXN0KHNjcm9sbFggPSBUUlVFKSkNCmBgYA0KDQoNCiMgMy4gVMOtbmggbG9nIHJldHVybg0KYGBge3J9DQpyZXR1cm5zIDwtIGFzLmRhdGEuZnJhbWUobGFwcGx5KGRhdGFbLTFdLCBmdW5jdGlvbih4KSBkaWZmKGxvZyh4KSkpKQ0KY29sbmFtZXMocmV0dXJucykgPC0gY29sbmFtZXMoZGF0YSlbLTFdDQpyZXR1cm5zIDwtIG5hLm9taXQocmV0dXJucykNCmBgYA0KDQoNCioqS+G6vlQgUVXhuqIgTkdIScOKTiBD4buoVSBWw4AgUEjDgk4gVMONQ0gqKg0KMi4xLiBLaeG7g20gxJHhu4tuaCB0w61uaCBk4burbmcgY2h14buXaSBs4bujaSBzdeG6pXQNClRyxrDhu5tjIGtoaSB0aeG6v24gaMOgbmggcGjDom4gdMOtY2ggbcO0IGjDrG5oIENBUE0sIGPhuqduIGtp4buDbSB0cmEgdMOtbmggZOG7q25nIGPhu6dhIGPDoWMgY2h14buXaSBs4bujaSBzdeG6pXQgbG9nYXJpdCBjaG8gY8OhYyBj4buVIHBoaeG6v3UgxJHhuqFpIGRp4buHbiBuZ8OgbmggQsSQUzogVklDLCBCQ00sIEtESCwgVkhNLCBIREcuDQoNCiMgNC4gS2nhu4NtIMSR4buLbmggdMOtbmggZOG7q25nIEFERg0KYGBge3J9DQoNCmFkZl9yZXN1bHRzIDwtIGxhcHBseShyZXR1cm5zLCBmdW5jdGlvbih4KSB7DQogIHhfY2xlYW4gPC0geFtpcy5maW5pdGUoeCldDQogIGlmIChsZW5ndGgoeF9jbGVhbikgPiAxMCkgew0KICAgIHJldHVybihzdW1tYXJ5KHVyLmRmKHhfY2xlYW4sIHR5cGUgPSAiZHJpZnQiLCBzZWxlY3RsYWdzID0gIkFJQyIpKSkNCiAgfSBlbHNlIHsNCiAgICByZXR1cm4oTkEpDQogIH0NCn0pDQpwcmludChhZGZfcmVzdWx0cyRWSUMpDQoNCmBgYA0KDQoNCkvhur90IGx14bqtbjogVOG6pXQgY+G6oyBjw6FjIGNodeG7l2kgbOG7o2kgc3XhuqV0IMSR4buBdSBsw6AgY2h14buXaSBk4burbmcsIGhvw6BuIHRvw6BuIHBow7kgaOG7o3AgY2hvIG3DtCBow6xuaCBo4buTaSBxdXkgbmjGsCBDQVBNLg0KDQoqKsav4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggQ0FQTSoqDQrDgXAgZOG7pW5nIG3DtCBow6xuaCDEkeG7i25oIGdpw6EgdMOgaSBz4bqjbiB24buRbiAoQ0FQTSkgduG7m2kgZ2nhuqMgxJHhu4tuaCBsw6NpIHN14bqldCBwaGkgcuG7p2kgcm8gbMOgIDMlL27Eg20sIHTGsMahbmcgxJHGsMahbmcgMC4wMy8yNTIgbeG7l2kgbmfDoHkuDQoNCiMgNS4gxq/hu5tjIGzGsOG7o25nIG3DtCBow6xuaCBDQVBNDQoNCmBgYHtyfQ0KDQpyZiA8LSAwLjAzIC8gMjUyDQpzdG9ja3MgPC0gY29sbmFtZXMocmV0dXJucykNCg0KIyAoR2nhuqMgc+G7rSBWSE0gbMOgIMSR4bqhaSBkaeG7h24gdGjhu4sgdHLGsOG7nW5nKQ0KUm0gPC0gcmV0dXJucyRWSE0NCg0KQ0FQTV9tb2RlbHMgPC0gbGFwcGx5KHN0b2NrcywgZnVuY3Rpb24oc3RvY2spIHsNCiAgUmlfZXhjZXNzIDwtIHJldHVybnNbW3N0b2NrXV0gLSByZg0KICBSbV9leGNlc3MgPC0gUm0gLSByZg0KICBkZiA8LSBuYS5vbWl0KGRhdGEuZnJhbWUoUmlfZXhjZXNzLCBSbV9leGNlc3MpKQ0KICBpZiAobnJvdyhkZikgPT0gMCkgew0KICAgIHJldHVybihOQSkNCiAgfSBlbHNlIHsNCiAgICByZXR1cm4oc3VtbWFyeShsbShSaV9leGNlc3MgfiBSbV9leGNlc3MsIGRhdGEgPSBkZikpKQ0KICB9DQp9KQ0KbmFtZXMoQ0FQTV9tb2RlbHMpIDwtIHN0b2Nrcw0KYGBgDQoNCg0KIyA2LiBUw7NtIHThuq90IGvhur90IHF14bqjDQpgYGB7cn0NCg0KdmFsaWRfQ0FQTSA8LSBDQVBNX21vZGVsc1shc2FwcGx5KENBUE1fbW9kZWxzLCBmdW5jdGlvbih4KSBhbnkoaXMubmEoeCkpKV0NCg0KYmV0YV92YWxzIDwtIHNhcHBseSh2YWxpZF9DQVBNLCBmdW5jdGlvbih4KSBjb2VmKHgpWzJdKQ0KYWxwaGFfdmFscyA8LSBzYXBwbHkodmFsaWRfQ0FQTSwgZnVuY3Rpb24oeCkgY29lZih4KVsxXSkNCnJzcV92YWxzIDwtIHNhcHBseSh2YWxpZF9DQVBNLCBmdW5jdGlvbih4KSB4JHIuc3F1YXJlZCkNCg0KbWVhbl9yZXR1cm5zIDwtIGNvbE1lYW5zKHJldHVybnNbbmFtZXModmFsaWRfQ0FQTSldLCBuYS5ybSA9IFRSVUUpICogMjUyICogMTAwDQptYXJrZXRfcmV0dXJuIDwtIG1lYW4oUm0sIG5hLnJtID0gVFJVRSkgKiAyNTINCmV4cGVjdGVkX3JldHVybnMgPC0gKHJmICogMjUyICsgYmV0YV92YWxzICogKG1hcmtldF9yZXR1cm4gLSByZiAqIDI1MikpICogMTAwDQoNCkNBUE1fcmVzdWx0cyA8LSBkYXRhLmZyYW1lKA0KICBTdG9jayA9IG5hbWVzKHZhbGlkX0NBUE0pLA0KICBBbHBoYSA9IHJvdW5kKGFscGhhX3ZhbHMgKiAyNTIgKiAxMDAsIDQpLA0KICBCZXRhID0gcm91bmQoYmV0YV92YWxzLCA0KSwNCiAgUl9TcXVhcmVkID0gcm91bmQocnNxX3ZhbHMsIDQpLA0KICBSZXR1cm5fQWN0dWFsID0gcm91bmQobWVhbl9yZXR1cm5zLCAyKSwNCiAgUmV0dXJuX0NBUE0gPSByb3VuZChleHBlY3RlZF9yZXR1cm5zLCAyKQ0KKQ0KcHJpbnQoQ0FQTV9yZXN1bHRzKQ0KYGBgDQoNCk5o4bqtbiB4w6l0DQpCZXRhOiBI4bqndSBo4bq/dCBjw6FjIGPhu5UgcGhp4bq/dSBjw7MgYmV0YSA+IDEsIGNobyB0aOG6pXkgbeG7qWMgxJHhu5kgYmnhur9uIMSR4buZbmcgY2FvIGjGoW4gdGjhu4sgdHLGsOG7nW5nLiBWw60gZOG7pTogbuG6v3UgVklDIGPDsyBiZXRhIDEuMyDihpIga+G7syB24buNbmcgYmnhur9uIMSR4buZbmcgbeG6oW5oIGtoaSB0aOG7iyB0csaw4budbmcgYmnhur9uIMSR4buZbmcuDQoNCkFscGhhOiBO4bq/dSBhbHBoYSBkxrDGoW5nIOKGkiBj4buVIHBoaeG6v3UgY8OzIGhp4buHdSBzdeG6pXQgdsaw4bujdCBr4buzIHbhu41uZyAodW5kZXJwcmljZWQpOyBhbHBoYSDDom0g4oaSIHVuZGVycGVyZm9ybSBob+G6t2MgYuG7iyDEkeG7i25oIGdpw6EgY2FvLg0KDQpSwrI6IMSQbyBsxrDhu51uZyBt4bupYyDEkeG7mSBnaeG6o2kgdGjDrWNoIGPhu6dhIGJp4bq/biB0aOG7iyB0csaw4budbmcgduG7m2kgYmnhur9uIMSR4buZbmcgY+G7lSBwaGnhur91LiBSwrIgY2FvICg+MC41KSBjaG8gdGjhuqV5IG3DtCBow6xuaCBDQVBNIGdp4bqjaSB0aMOtY2ggdOG7kXQuDQoNCkzhu6NpIHN14bqldCB0aOG7sWMgdOG6vyB2cyBr4buzIHbhu41uZzogU28gc8OhbmggZ2nDunAgbmjhuq1uIGRp4buHbiBj4buVIHBoaeG6v3UgY8OzIGhp4buHdSBzdeG6pXQgdsaw4bujdCB0cuG7mWkgKHbDrSBk4bulOiBu4bq/dSBIREcgY8OzIFJldHVybl9BY3R1YWwgY2FvIGjGoW4gUmV0dXJuX0NBUE0pIOKGkiB0w61uIGhp4buHdSB0w61jaCBj4buxYyBjaG8gbmjDoCDEkeG6p3UgdMawLg0KDQrEkMaw4budbmcgdGjhu4sgdHLGsOG7nW5nIGNo4bupbmcga2hvw6FuIChTTUwpDQpgYGB7cn0NCiMgOC4gVMOtbmggVmFSIGRhbmggbeG7pWMgxJHhu4F1DQpjb3ZfbWF0cml4IDwtIGNvdihyZXR1cm5zW25hbWVzKGJldGFfdmFscyldKSAqIDI1Mg0KdyA8LSByZXAoMSAvIGxlbmd0aChiZXRhX3ZhbHMpLCBsZW5ndGgoYmV0YV92YWxzKSkNCnZhcl9wIDwtIGFzLm51bWVyaWModCh3KSAlKiUgY292X21hdHJpeCAlKiUgdykNCnNkX3AgPC0gc3FydCh2YXJfcCkNClZhUl85NSA8LSBxbm9ybSgwLjk1KSAqIHNkX3ANCg0KbGlzdChWYXJpYW5jZSA9IHZhcl9wLCBTRCA9IHNkX3AsIFZhUl85NSA9IFZhUl85NSkNCmBgYA0KDQoNCioqS+G6v3QgbHXhuq1uKioNCkPDoWMgY+G7lSBwaGnhur91IELEkFMgdHJvbmcgbeG6q3UgxJHhu4F1IGPDsyBjaHXhu5dpIGzhu6NpIHN14bqldCBsb2cgZOG7q25nLCBwaMO5IGjhu6NwIHbhu5tpIGPDoWMgbcO0IGjDrG5oIMSR4buLbmggbMaw4bujbmcgbmjGsCBDQVBNLg0KDQpN4buZdCBz4buRIGPhu5UgcGhp4bq/dSBuaMawIE1CQi9DVEcgdHJvbmcgbmfDoG5oIG5nw6JuIGjDoG5nLCB0aMOsIHRyb25nIG5nw6BuaCBCxJBTIGPDsyB0aOG7gyBsw6AgSERHL0tESCAodHXhu7MgZOG7ryBsaeG7h3UpIGPDsyBhbHBoYSBkxrDGoW5nIHbDoCBiZXRhIGNhbywgcGjDuSBo4bujcCB24bubaSBuaMOgIMSR4bqndSB0xrAgxrBhIHRow61jaCBy4bunaSBybyB2w6Aga+G7syB24buNbmcgc2luaCBs4budaSBjYW8uDQoNCkRhbmggbeG7pWMgcGjDom4gYuG7lSDEkeG7gXUgZ2nhu69hIGPDoWMgY+G7lSBwaGnhur91IGdpw7pwIGdp4bqjbSB0aGnhu4N1IHLhu6dpIHJvIHBoaSBo4buHIHRo4buRbmcsIHR1eSBuaGnDqm4gduG6q24gY2jhu4t1IOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIHThu6sgdGjhu4sgdHLGsOG7nW5nIGNodW5nLg0KDQpNw7QgaMOsbmggQ0FQTSBnacO6cCBjdW5nIGPhuqVwIMSRw6FuaCBnacOhIMSR4buLbmggbMaw4bujbmcgcsO1IHLDoG5nIHbhu4Ega+G7syB24buNbmcgbOG7o2kgc3XhuqV0IHbDoCBt4bupYyDEkeG7mSBy4bunaSBybyB0xrDGoW5nIOG7qW5nLCBo4buXIHRy4bujIGhp4buHdSBxdeG6oyB0cm9uZyBxdXnhur90IMSR4buLbmggxJHhuqd1IHTGsC4NCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=