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=