Yêu cầu và Hoạt động cho Tuần Thứ 3: Đào sâu Suy diễn Thống kê trong Bảng Ngẫu nhiên và Giới thiệu về Mối liên hệ Phức tạp.

A. Đọc và Chuẩn bị trước buổi học

1. Ôn lại kiến thức Tuần 2

  • Xem lại các bảng tần số chéo đã tạo.

  • Ý nghĩa của kiểm định Chi-bình phương về tính độc lập.

  • Cách tính và diễn giải Relative Risk.

2. Tìm hiểu về các nội dung sau của Chương 2

2.1 Cấu trúc xác suất của bảng ngẫu nhiên

Bảng ngẫu nhiên

  • Bảng ngẫu nhiên (contingency table) là một ma trận thể hiện sự phân phối tần số (số đếm) của các tổ hợp giữa hai hay nhiều biến phân loại.

  • Mỗi ô trong bảng chứa số quan sát rơi vào tổ hợp cụ thể giữa các biến.


Phân phối Poisson

  • Sẽ sử dụng khi:

    • Các số đếm là kết quả của các quá trình độc lập, số đếm từng ô không bị ràng buộc tổng hàng/cột.

    • Không cố định tổng số quan sát.

    • Thường dùng trong mô hình log-linear và dữ liệu đếm theo thời gian/không gian

  • Công thức:

\[ N_{ij} \sim \mathrm{Poisson}(\mu_{ij}) \]

  • Thành phần:
Ký hiệu Ý nghĩa
\(N_{ij}\) Số đếm ở ô hàng \(i\), cột \(j\), được sinh ra độc lập
\(\mu_{ij}\) Kỳ vọng của số đếm tại ô \((i,j)\) – trung bình lý thuyết của phân phối Poisson
  • Ý nghĩa

    • Mỗi ô trong bảng là một biến Poisson độc lập.

    • Dữ liệu thường đến từ quá trình đếm tự nhiên: tai nạn, ca bệnh, sự kiện,…

    • Không cần tổng số đếm phải cố định → các ô độc lập với nhau.

  • Hàm xác suất (PMF)

\[ P(N_{ij} = n_{ij}) = \frac{e^{-\mu_{ij}} \mu_{ij}^{n_{ij}}}{n_{ij}!} \]

  • Tổng xác suất liên hợp cho toàn bảng

\[ P(\{n_{ij}\}) = \prod_{i,j} \frac{e^{-\mu_{ij}} \mu_{ij}^{n_{ij}}}{n_{ij}!} \]


Phân phối Multinomial

  • Công thức

\[ (N_{11}, N_{12}, \ldots, N_{rc}) \sim \mathrm{Multinomial}\left(n, \{p_{ij}\}\right) \]

  • Thành phần
Ký hiệu Ý nghĩa
\(N_{ij}\) Số quan sát ở ô hàng \(i\), cột \(j\) của bảng ngẫu nhiên
\(n\) Tổng số mẫu: \(n = \sum_{i=1}^{r} \sum_{j=1}^{c} N_{ij}\)
\(p_{ij}\) Xác suất một quan sát rơi vào ô \((i,j)\), với \(\sum_{i,j} p_{ij} = 1\)
  • Ý nghĩa

    • Phù hợp với dữ liệu dạng lựa chọn phân loại, rút mẫu có tổng cố định.

    • Các ô trong bảng có phụ thuộc lẫn nhau, vì tổng \(n\) là cố định.

    • Mỗi mẫu quan sát rơi vào một trong các ô, với xác suất \(p_{ij}\).

  • Hàm xác suất (PMF)

\[ P(n_{ij}) = \frac{n!}{\prod_{i,j} n_{ij}!} \prod_{i,j} p_{ij}^{n_{ij}} \]


Mối liên hệ giữa Poisson và Multinomial

Nếu:

  • Mỗi ô \(N_{ij} \sim \mathrm{Poisson}(\mu_{ij})\)

  • Và tổng \(N = \sum_{i,j} N_{ij} = n\) được cố định

Thì:

\[ (N_{ij} \mid N = n) \sim \mathrm{Multinomial}\left(n, p_{ij} = \frac{\mu_{ij}}{\sum \mu_{ij}}\right) \]

  • Diễn giải

    • Nếu bạn lấy các đếm Poisson rồi điều kiện hóa theo tổng số đếm cố định, bạn thu được một phân phối Multinomial.

    • Tức là: Multinomial là trường hợp đặc biệt của Poisson khi tổng được ràng buộc.


Mô hình log-linear từ phân phối Poisson

Dùng để mô hình hóa mối liên hệ giữa các biến phân loại:

  • Mô hình log tuyến tính

\[ \log(\mu_{ij}) = \lambda + \lambda^{(R)}_i + \lambda^{(C)}_j + \lambda^{(RC)}_{ij} \]

  • Thành phần:
Ký hiệu Ý nghĩa
\(\lambda\) Hằng số tổng quát (intercept)
\(\lambda^{(R)}_i\) Hiệu ứng biến hàng (ví dụ: giới tính)
\(\lambda^{(C)}_j\) Hiệu ứng biến cột (ví dụ: tình trạng bệnh)
\(\lambda^{(RC)}_{ij}\) Tương tác giữa hàng và cột (mức độ phụ thuộc giữa 2 biến)
  • Ý nghĩa

    • Cho phép kiểm định độc lập (khi bỏ \(\lambda^{(RC)}_{ij}\)).

    • Có thể mở rộng cho bảng 3 chiều, 4 chiều,…

    • Thường được ước lượng bằng mô hình GLM với link log.


Tổng kết bảng so sánh

Đặc điểm Multinomial Poisson
Tổng số đếm Cố định \(n\) Không cố định
Quan hệ giữa các ô Phụ thuộc Độc lập
Dữ liệu phù hợp Rút mẫu, khảo sát Dữ liệu đếm tự nhiên
Phân tích tương tác Giới hạn Linh hoạt với log-linear
Công thức mô hình \(\text{Multinomial}(n, \{p_{ij}\})\) \(\text{Poisson}(\mu_{ij})\)
Khi điều kiện hóa tổng Cho ra phân phối Multinomial

2.2 So sánh 2 tỷ lệ trong bảng ngẫu nhiên 2x2

Giả sử một bảng 2x2 được trình bày như sau:

Kết quả (+) Kết quả (–) Tổng
Nhóm 1 \(a\) \(b\) \(a+b\)
Nhóm 2 \(c\) \(d\) \(c+d\)
Tổng \(a+c\) \(b+d\) \(n\)

Đây là dạng bảng thường dùng để so sánh xác suất thành công, rủi ro, hoặc phản hồi tích cực giữa hai nhóm.


Hiệu hai tỷ lệ

  • Công thức:

\[ \Delta p = \frac{a}{a+b} - \frac{c}{c+d} \]

  • Ý nghĩa:

    • mức chênh lệch tuyệt đối giữa hai tỷ lệ thành công ở hai nhóm.

    • Nếu \(\Delta p > 0\), nhóm 1 có tỷ lệ thành công cao hơn nhóm 2.

    • Đơn giản và dễ diễn giải, thích hợp khi tập trung vào sự khác biệt thực tế (absolute difference), thay vì tỷ lệ tương đối.


Tỷ số nguy cơ - Relative Risk

  • Công thức:

\[ RR = \frac{a / (a+b)}{c / (c+d)} \]

  • Ý nghĩa:

    • Đo mức tăng (hoặc giảm) nguy cơ của nhóm 1 so với nhóm 2.

    • \(RR = 1\): Không có khác biệt nguy cơ.

    • \(RR > 1\): Nhóm 1 có nguy cơ cao hơn.

    • \(RR < 1\): Nhóm 1 có nguy cơ thấp hơn.


Tỷ số chênh - Odds Ratio

  • Công thức:

\[ OR = \frac{a/b}{c/d} = \frac{ad}{bc} \]

  • Ý nghĩa:

    • So sánh cơ hội xảy ra sự kiện giữa hai nhóm.

    • \(OR = 1\): Không có liên hệ.

    • \(OR > 1\): Nhóm 1 có cơ hội cao hơn.

    • \(OR < 1\): Nhóm 1 có cơ hội thấp hơn.

  • Lưu ý:

    • OR gần giống RR khi xác suất sự kiện thấp.

    • OR thường được sử dụng trong hồi quy logistic.


2.3 Khoảng tin cậy cho các tham số đo mối liên hệ

Công thức:

Tính trên log(OR):

\[ \log(OR) \pm Z_{\alpha/2} \cdot \sqrt{ \frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d} } \]

Sau đó lấy mũ để trở lại OR:

\[ CI_{OR} = \left( e^{L},\ e^{U} \right) \]

Trong đó:

  • \(L = \log(OR) - Z_{\alpha/2} \cdot SE\)

  • \(U = \log(OR) + Z_{\alpha/2} \cdot SE\)

  • \(SE = \sqrt{ \frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d} }\)

  • Với mức tin cậy 95%, \(Z_{\alpha/2} = 1.96\)


2.4 Ví dụ

Một công ty triển khai chiến dịch email quảng cáo. Kết quả:

Mua hàng Không mua Tổng
Nhận email (Nhóm 1) 40 60 100
Không nhận (Nhóm 2) 20 80 100
  • Tính toán:

    • \(RR = \frac{40/100}{20/100} = 2.0\) → Nhận email giúp tăng gấp đôi xác suất mua hàng.

    • \(OR = \frac{40 \cdot 80}{60 \cdot 20} = \frac{3200}{1200} = 2.67\) → Cơ hội mua hàng cao hơn 2.67 lần.

  • Khoảng tin cậy OR:

    • \(SE = \sqrt{1/40 + 1/60 + 1/20 + 1/80} \approx 0.329\)

    • \(\log(OR) \approx \log(2.67) = 0.981\)

    • \(CI_{log(OR)} = 0.981 \pm 1.96 \cdot 0.329 = (0.336,\ 1.626)\)

    • \(CI_{OR} = (e^{0.336},\ e^{1.626}) = (1.40,\ 5.08)\)

    OR có ý nghĩa thống kê, vì khoảng tin cậy không chứa 1.


2.5 Tổng kết

Chỉ số Công thức Ý nghĩa chính Ưu điểm Ứng dụng phổ biến
Hiệu tỷ lệ \(p_1 - p_2\) So sánh tuyệt đối giữa hai tỷ lệ Trực quan, dễ hiểu So sánh đơn giản
RR \(\frac{p_1}{p_2}\) So sánh xác suất giữa hai nhóm Diễn giải tự nhiên Nghiên cứu y học, marketing
OR \(\frac{ad}{bc}\) So sánh odds giữa hai nhóm Áp dụng linh hoạt trong hồi quy Hồi quy logistic, phân tích rủi ro

3. Suy nghĩ về bộ dữ liệu “Supermarket Transactions”

3.1 Đọc bộ dữ liệu

library(csv)
data <- read.csv("D:/UFM/2025- Kì 2/Phân tích dữ liệu định tính - Trần Mạnh Tường/Supermarket Transactions.csv", header = T)

3.2 Các bước thực hiện

B1: Tạo bảng chéo giữa Gender và Homeowner

table_gender_home <- table(data$Gender, data$Homeowner)
table_gender_home
##    
##        N    Y
##   F 2826 4344
##   M 2789 4100

B2: Tính Odds Ratio (tỷ số chênh)

a <- table_gender_home["F", "Y"]
b <- table_gender_home["F", "N"]
c <- table_gender_home["M", "Y"]
d <- table_gender_home["M", "N"]

OR <- (a * d) / (b * c)
OR
## [1] 1.04564

B3: Tính khoảng tin cậy cho OR

log_OR <- log(OR)
SE <- sqrt(1/a + 1/b + 1/c + 1/d)

# 95% CI
z <- 1.96
CI_lower <- exp(log_OR - z * SE)
CI_upper <- exp(log_OR + z * SE)

c(CI_lower, CI_upper)
## [1] 0.9773755 1.1186731

Diễn giải

  • Nếu OR > 1: nữ có tỷ số chênh cao hơn → khả năng sở hữu nhà cao hơn nam.

  • Nếu OR < 1: nữ có odds sở hữu nhà thấp hơn.

  • Nếu khoảng tin cậy không chứa 1 → kết luận có ý nghĩa thống kê ở mức 95%.

Nhận xét

  • khoảng tin cậy của OR bao gồm 1, ta không thể kết luận có sự khác biệt có ý nghĩa thống kê trong odds sở hữu nhà giữa Nữ và Nam.

  • Nói cách khác, việc là Nữ so với Nam không làm tăng hoặc giảm đáng kể khả năng sở hữu nhà dựa trên dữ liệu và mô hình hiện tại.

  • OR khoảng 1 cũng cho thấy tỷ số odds của việc sở hữu nhà gần như tương đương giữa Nữ và Nam.


B. Hoạt động trên lớp

1. Ôn tập và Thảo luận về Phân tích Chéo & RR

1.1 Nhận định ban đầu từ bảng chéo và RR

  • Bảng chéo giúp chúng ta quan sát trực quan mối liên hệ giữa hai biến nhị phân, ví dụ như Gender và Homeowner.

  • Relative Risk cho biết tỷ lệ xác suất xảy ra một sự kiện (ví dụ: sở hữu nhà) ở nhóm đối tượng quan tâm (Nữ) so với nhóm đối chứng (Nam).

  • Từ RR, ta có thể đánh giá xem nhóm nào có khả năng cao hơn hoặc thấp hơn trong việc xảy ra sự kiện.

  • Qua ví dụ:

    • Nếu RR > 1, có thể nói việc là Nữ làm tăng nguy cơ/khả năng sở hữu nhà so với Nam

    • Nếu RR < 1 thì ngược lại.


1.2 Hạn chế của bảng chéo và RR

  • Bảng chéo không điều chỉnh được các yếu tố nhiễu, nên có thể đưa ra kết luận chưa chính xác về mối quan hệ.

  • RR chỉ áp dụng cho xác suất và có thể gây nhầm lẫn khi biến đầu ra không phải là một sự kiện “hiếm”.

  • RR không dễ dàng mở rộng cho các phân tích phức tạp như đa biến.

  • Khi mẫu nhỏ hoặc tỷ lệ sự kiện cao, RR có thể không phản ánh chính xác mức độ ảnh hưởng.

  • Bảng chéo chỉ thể hiện mối quan hệ đơn giản giữa 2 biến, không cho biết nguyên nhân hoặc mối liên hệ phi tuyến.


1.3 Thảo luận về Odds

  • Oddstỷ số giữa xác suất sự kiện xảy ra và xác suất sự kiện không xảy ra (ví dụ, odds sở hữu nhà = P(sở hữu nhà) / P(không sở hữu nhà)).

  • So sánh Odds và Relative Risk:

    • Odds khác với xác suất và RR; Odds thường được sử dụng trong các mô hình hồi quy logistic.

    • Odds thể hiện tỷ số odds giữa hai nhóm (ví dụ: odds sở hữu nhà của nữ chia cho odds sở hữu nhà của nam).

  • Ý nghĩa của Odds Ratio:

    • OR > 1: odds của sự kiện lớn hơn ở nhóm nghiên cứu.

    • OR < 1: odds nhỏ hơn ở nhóm nghiên cứu.

    • OR = 1: không có sự khác biệt về odds giữa hai nhóm.

  • Lưu ý khi diễn giải Odds Ratio:

    • OR dễ bị hiểu nhầm là RR, nhưng thực chất là 2 thước đo khác nhau.

    • OR thường được dùng khi phân tích logistic regression vì tính toán và mô hình hóa odds thuận tiện hơn.

    • Khi sự kiện không phổ biến, OR gần bằng RR; nhưng khi sự kiện phổ biến, OR có thể phóng đại sự khác biệt so với RR.


1.4 So sánh RR và Odds

Từ bảng tần suất và tỷ lệ phần trăm

  • Nữ: 60.59% sở hữu nhà, 39.41% không sở hữu.

  • Nam: 59.52% sở hữu nhà, 40.48% không sở hữu.

  • Tỷ lệ sở hữu nhà giữa hai giới khá tương đồng, nhưng nữ có tỷ lệ cao hơn một chút (60.59% so với 59.52%).

  • Sự chênh lệch này tuy nhỏ (~1%), nhưng vẫn cho thấy một xu hướng nhẹ là nữ có khả năng sở hữu nhà cao hơn nam.


Từ Odds Ratio và khoảng tin cậy

  • OR = 1.04564 → odds sở hữu nhà của nữ cao hơn ~4.6% so với nam.

  • Khoảng tin cậy 95%: [0.9774, 1.1187] → bao gồm 1, tức là:

    • Không có bằng chứng thống kê rõ ràng rằng odds sở hữu nhà giữa nữ và nam là khác nhau.

    • Sự chênh lệch là không có ý nghĩa thống kê.


kết luận

  • Về mặt mô tả (tần suất và tỷ lệ phần trăm): Nữ giới có tỷ lệ sở hữu nhà nhỉnh hơn một chút so với nam.

  • Về mặt thống kê (OR và khoảng tin cậy): Sự khác biệt nhỏ này không đủ để kết luận rằng có sự khác biệt có ý nghĩa thống kê giữa hai giới về khả năng sở hữu nhà.

Mặc dù dữ liệu mô tả cho thấy nữ có xu hướng sở hữu nhà cao hơn một chút, nhưng khi phân tích sâu hơn bằng Odds Ratio và kiểm định độ tin cậy, không có bằng chứng rõ ràng để khẳng định sự khác biệt thực sự giữa nam và nữ trong việc sở hữu nhà.


2. Đào sâu về Suy diễn trong Bảng Ngẫu nhiên 2x2

2.1 Hiệu hai tỷ lệ (Difference in Proportions)

Nhập dữ liệu từ bảng 2x2 và Tính tỷ lệ sở hữu nhà và Hiệu hai tỷ lệ

# Dữ liệu từ bảng 2x2
female_homeowner <- 4344
female_nonhomeowner <- 2826
male_homeowner <- 4100
male_nonhomeowner <- 2789

# Tổng theo giới tính
total_female <- female_homeowner + female_nonhomeowner  # 7170
total_male <- male_homeowner + male_nonhomeowner        # 6889

# Tỷ lệ sở hữu nhà
p_female <- female_homeowner / total_female
p_male <- male_homeowner / total_male

# Hiệu hai tỷ lệ
diff_prop <- p_female - p_male
diff_prop
## [1] 0.01070605
  • Diễn giải

    • Nữ có tỷ lệ sở hữu nhà cao hơn nam khoảng 1.07%.

    • Sự khác biệt này là rất nhỏ.

Khoảng tin cậy cho hiệu hai tỷ lệ (CI)

# Sai số chuẩn
se_diff <- sqrt(
  (p_female * (1 - p_female)) / total_female +
  (p_male * (1 - p_male)) / total_male)

# Khoảng tin cậy 95%
z <- 1.96
lower_ci <- diff_prop - z * se_diff
upper_ci <- diff_prop + z * se_diff

c(lower_ci, upper_ci)
## [1] -0.00548978  0.02690188
  • Kết luận: Vì khoảng tin cậy chứa giá trị 0 → không có sự khác biệt có ý nghĩa thống kê giữa tỷ lệ sở hữu nhà của nữ và nam.

2.2 Tỷ số Nguy cơ (Relative Risk - RR)

Ta tính với công thức như sau:

rr <- p_female / p_male
rr
## [1] 1.017989
  • Diễn giải

    • RR = 1.018 → Nữ có khả năng sở hữu nhà cao hơn nam khoảng 1.8%.

    • Tuy nhiên, mức chênh lệch là rất nhỏ, và như đã thấy ở phần trên, không có ý nghĩa thống kê rõ ràng.

2.3 Tỷ số Chênh (Odds Ratio - OR)

Tính Odds và Odds Ratio (OR)

# Tính odds
odds_female <- p_female / (1 - p_female)
odds_male <- p_male / (1 - p_male)

# OR
or <- odds_female / odds_male
or
## [1] 1.04564
  • Diễn giải

    • OR = 1.0456 → Odds sở hữu nhà của nữ cao hơn nam khoảng 4.6%.

    • Tuy nhiên, mức chênh lệch là rất nhỏ, và như đã thấy ở phần trên, không có ý nghĩa thống kê rõ ràng.

Tính OR trực tiếp từ bảng 2x2 (công thức ad/bc)

or2 <- (female_homeowner * male_nonhomeowner) / (female_nonhomeowner * male_homeowner)
or2  # Kết quả này sẽ khớp với or ở trên
## [1] 1.04564

Cách tính nhanh chóng

Ta có thể dùng hàm epi.2by2() từ package epiR để tính OR và CI nhanh chóng:

library(epiR)
## Loading required package: survival
## Package epiR 2.0.84 is loaded
## Type help(epi.about) for summary information
## Type browseVignettes(package = 'epiR') to learn how to use epiR for applied epidemiological analyses
## 
# Tạo bảng 2x2: hàng = Female / Male; cột = Homeowner / Not
tab <- matrix(c(female_homeowner, female_nonhomeowner,
                male_homeowner, male_nonhomeowner),
              nrow = 2, byrow = TRUE)

# Phân tích
result <- epi.2by2(tab, method = "cohort.count", conf.level = 0.95)
result
##              Outcome+    Outcome-      Total                 Inc risk *
## Exposure+        4344        2826       7170     60.59 (59.44 to 61.72)
## Exposure-        4100        2789       6889     59.52 (58.34 to 60.68)
## Total            8444        5615      14059     60.06 (59.25 to 60.87)
## 
## Point estimates and 95% CIs:
## -------------------------------------------------------------------
## Inc risk ratio                                 1.02 (0.99, 1.05)
## Inc odds ratio                                 1.05 (0.98, 1.12)
## Attrib risk in the exposed *                   1.07 (-0.55, 2.69)
## Attrib fraction in the exposed (%)            1.77 (-0.92, 4.38)
## Attrib risk in the population *                0.55 (-0.87, 1.96)
## Attrib fraction in the population (%)         0.91 (0.32, 1.52)
## -------------------------------------------------------------------
## Uncorrected chi2 test that OR = 1: chi2(1) = 1.679 Pr>chi2 = 0.195
## Fisher exact test that OR = 1: Pr>chi2 = 0.196
##  Wald confidence limits
##  CI: confidence interval
##  * Outcomes per 100 population units

2.4 Tổng kết và so sánh

Định nghĩa cơ bản

Thuật ngữ Công thức Ý nghĩa
Relative Risk (RR) RR = \(\frac{p_1}{p_2}\) So sánh nguy cơ xảy ra sự kiện giữa hai nhóm.
Odds Ratio (OR) OR = \(\frac{p_1 / (1 - p_1)}{p_2 / (1 - p_2)}\) hoặc \(\frac{ad}{bc}\) So sánh tỷ lệ xảy ra / không xảy ra (odds) giữa hai nhóm.

Kết quả

Thước đo Giá trị Diễn giải
RR 1.018 Nữ có nguy cơ sở hữu nhà cao hơn nam 1.8%.
OR 1.0456 Odds sở hữu nhà của nữ cao hơn nam 4.6%.
CI 95% RR: không tính trực tiếp; OR: [0.977, 1.119] Không có ý nghĩa thống kê vì khoảng tin cậy chứa 1.

So sánh

  • Cả RR và OR đều > 1 → cùng chỉ ra rằng nữ có khả năng sở hữu nhà cao hơn nam.

  • OR lớn hơn RR (1.0456 vs 1.018) → điều này luôn xảy ra trừ khi tỷ lệ sự kiện rất thấp.

  • RR = 1.018 nghĩa là: “Trong nhóm nữ, xác suất sở hữu nhà cao hơn nhóm nam 1.8%”.

  • OR = 1.0456 nghĩa là: “Odds (tỷ lệ xảy ra / không xảy ra) của việc sở hữu nhà ở nữ cao hơn nam 4.6%”.

Ưu nhược điểm của RR và OR

  • Trong ví dụ sở hữu nhà là sự kiện phổ biến (~60%), nên OR thổi phồng mức độ khác biệt hơn RR.

  • RR phù hợp hơn khi mục tiêu là giải thích theo xác suất (risk).

  • OR có lợi thế về toán học, đối xứng và ứng dụng trong hồi quy logistic, nhưng khó diễn giải trực giác hơn.

3. Thực hành trên R

3.1 Tạo bảng 2x2

Ta tạo bảng tần số của Tình trạng hôn nhân MaritalStatus và Khả năng sở hữu nhà Homeowner

# Tạo bảng 2x2
table_ms_hw <- table(data$MaritalStatus, data$Homeowner)
table_ms_hw
##    
##        N    Y
##   M 1719 5147
##   S 3896 3297

Sau đó ta gán giá trị kết quả vào:

# Gán giá trị từ bảng
aa <- table_ms_hw["M", "Y"]  # Married + Homeowner
bb <- table_ms_hw["M", "N"]  # Married + Not Homeowner
cc <- table_ms_hw["S", "Y"]  # Single + Homeowner
dd <- table_ms_hw["S", "N"]  # Single + Not Homeowner

3.2 Tính toán và diễn giải: Hiệu hai tỷ lệ, Relative Risk, Odds Ratio

Hiệu 2 tỷ lệ

# Tỷ lệ
pp1 <- aa / (aa + bb)
pp2 <- cc / (cc + dd)
diff <- pp1 - pp2
diff
## [1] 0.2912736
  • Kết luận: Người đã kết hôn có khả năng sở hữu nhà cao hơn người độc thân khoảng 29.1%.

Relative Risk

rrr <- pp1 / pp2                # Relative Risk
rrr
## [1] 1.635466
  • Kết luận: Người đã kết hôn có khả năng sở hữu nhà gấp 1.64 lần người độc thân.

Odds Ratio

# Odds Ratio
odds1 <- aa / bb
odds2 <- cc / dd
orr <- odds1 / odds2
orr
## [1] 3.538167
  • Kết luận: Tỷ lệ cược để người đã kết hôn có nhà cao hơn 3.54 lần so với người độc thân.

  • Ý nghĩa thống kê: OR > 1 và khoảng tin cậy không chứa 1 → mối liên hệ này là có ý nghĩa thống kê.

3.3 Tính và diễn giải khoảng tin cậy 95% cho Odds Ratio

# Hàm log OR và SE
log_orr <- log(orr)
se_log_or <- sqrt(1/aa + 1/bb + 1/cc + 1/dd)

# Tính khoảng tin cậy
z <- qnorm(0.975)
ci_lowerr <- exp(log_orr - z * se_log_or)
ci_upperr <- exp(log_orr + z * se_log_or)
c(ci_lowerr, ci_upperr)
## [1] 3.293561 3.800939
  • Diễn giải: Với độ tin cậy 95%, Odds Ratio thật sự nằm trong khoảng này → càng củng cố rằng mối liên hệ là đáng tin cậy.

3.4 Ưu nhược điểm

Thước đo Ưu điểm Nhược điểm
Hiệu tỷ lệ Dễ hiểu, rõ ràng Không phản ánh tỷ lệ tương đối
RR Trực quan với nguy cơ Không dùng được với nghiên cứu hồi cứu
OR Dùng phổ biến trong thống kê và logistic regression Ít trực quan, dễ gây nhầm lẫn nếu không quen thuộc
LS0tDQp0aXRsZTogIkJUIFR14bqnbiAzIg0KYXV0aG9yOiAiVsWpIFF14buzbmggVHLDumMgVnkiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclSDolTTolUywgJWQgLSAlbSAtICVZJylgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0b2M6IHRydWUNCiAgICBkZl9wcmludDoga2FibGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQoNCioqWcOqdSBj4bqndSB2w6AgSG/huqF0IMSR4buZbmcgY2hvIFR14bqnbiBUaOG7qSAzOioqIMSQw6BvIHPDonUgU3V5IGRp4buFbiBUaOG7kW5nIGvDqiB0cm9uZyBC4bqjbmcgTmfhuqt1IG5oacOqbiB2w6AgR2nhu5tpIHRoaeG7h3UgduG7gSBN4buRaSBsacOqbiBo4buHIFBo4bupYyB04bqhcC4NCg0KDQojICoqQS4gxJDhu41jIHbDoCBDaHXhuqluIGLhu4sgdHLGsOG7m2MgYnXhu5VpIGjhu41jKioNCg0KIyMgKioxLiDDlG4gbOG6oWkga2nhur9uIHRo4bupYyBUdeG6p24gMioqDQoNCi0gWGVtIGzhuqFpIGPDoWMgYuG6o25nIHThuqduIHPhu5EgY2jDqW8gxJHDoyB04bqhby4NCg0KLSDDnSBuZ2jEqWEgY+G7p2Ega2nhu4NtIMSR4buLbmggQ2hpLWLDrG5oIHBoxrDGoW5nIHbhu4EgdMOtbmggxJHhu5ljIGzhuq1wLg0KDQotIEPDoWNoIHTDrW5oIHbDoCBkaeG7hW4gZ2nhuqNpIFJlbGF0aXZlIFJpc2suDQoNCiMjICoqMi4gVMOsbSBoaeG7g3UgduG7gSBjw6FjIG7hu5lpIGR1bmcgc2F1IGPhu6dhIENoxrDGoW5nIDIqKg0KDQojIyMgKioyLjEgQ+G6pXUgdHLDumMgeMOhYyBzdeG6pXQgY+G7p2EgYuG6o25nIG5n4bqrdSBuaGnDqm4qKg0KDQojIyMjICoqQuG6o25nIG5n4bqrdSBuaGnDqm4qKg0KDQotICoqQuG6o25nIG5n4bqrdSBuaGnDqm4gKGNvbnRpbmdlbmN5IHRhYmxlKSoqIGzDoCBt4buZdCBtYSB0cuG6rW4gdGjhu4MgaGnhu4duIHPhu7EgcGjDom4gcGjhu5FpIHThuqduIHPhu5EgKHPhu5EgxJHhur9tKSBj4bunYSBjw6FjIHThu5UgaOG7o3AgZ2nhu69hIGhhaSBoYXkgbmhp4buBdSBiaeG6v24gcGjDom4gbG/huqFpLg0KDQotIE3hu5dpIMO0IHRyb25nIGLhuqNuZyBjaOG7qWEgc+G7kSBxdWFuIHPDoXQgcsahaSB2w6BvIHThu5UgaOG7o3AgY+G7pSB0aOG7gyBnaeG7r2EgY8OhYyBiaeG6v24uDQoNCi0tLQ0KDQojIyMjICoqUGjDom4gcGjhu5FpIFBvaXNzb24qKg0KDQotICoqU+G6vSBz4butIGThu6VuZyBraGk6KioNCg0KICAgLSBDw6FjIHPhu5EgxJHhur9tIGzDoCBr4bq/dCBxdeG6oyBj4bunYSBjw6FjIHF1w6EgdHLDrG5oIMSR4buZYyBs4bqtcCwgc+G7kSDEkeG6v20gdOG7q25nIMO0IGtow7RuZyBi4buLIHLDoG5nIGJ14buZYyB04buVbmcgaMOgbmcvY+G7mXQuDQoNCiAgIC0gS2jDtG5nIGPhu5EgxJHhu4tuaCB04buVbmcgc+G7kSBxdWFuIHPDoXQuDQoNCiAgIC0gVGjGsOG7nW5nIGTDuW5nIHRyb25nIG3DtCBow6xuaCBsb2ctbGluZWFyIHbDoCBk4buvIGxp4buHdSDEkeG6v20gdGhlbyB0aOG7nWkgZ2lhbi9raMO0bmcgZ2lhbg0KDQotICoqQ8O0bmcgdGjhu6ljOioqDQoNCiQkDQpOX3tpan0gXHNpbSBcbWF0aHJte1BvaXNzb259KFxtdV97aWp9KQ0KJCQNCg0KLSAqKlRow6BuaCBwaOG6p246KioNCg0KfCBLw70gaGnhu4d1IHwgw50gbmdoxKlhIHwNCnwtLS0tLS0tLXwtLS0tLS0tLXwNCnwgXChOX3tpan1cKSB8IFPhu5EgxJHhur9tIOG7nyDDtCBow6BuZyBcKGlcKSwgY+G7mXQgXChqXCksIMSRxrDhu6NjIHNpbmggcmEgxJHhu5ljIGzhuq1wIHwNCnwgXChcbXVfe2lqfVwpIHwgS+G7syB24buNbmcgY+G7p2Egc+G7kSDEkeG6v20gdOG6oWkgw7QgXCggKGksaikgXCkg4oCTIHRydW5nIGLDrG5oIGzDvSB0aHV54bq/dCBj4bunYSBwaMOibiBwaOG7kWkgUG9pc3NvbiB8DQoNCi0gKirDnSBuZ2jEqWEqKg0KDQogICAtIE3hu5dpIMO0IHRyb25nIGLhuqNuZyBsw6AgbeG7mXQgKipiaeG6v24gUG9pc3NvbiDEkeG7mWMgbOG6rXAqKi4NCiAgIA0KICAgLSBE4buvIGxp4buHdSB0aMaw4budbmcgxJHhur9uIHThu6sgKipxdcOhIHRyw6xuaCDEkeG6v20gdOG7sSBuaGnDqm4qKjogdGFpIG7huqFuLCBjYSBi4buHbmgsIHPhu7Ega2nhu4duLC4uLg0KICAgDQogICAtIEtow7RuZyBj4bqnbiB04buVbmcgc+G7kSDEkeG6v20gcGjhuqNpIGPhu5EgxJHhu4tuaCDihpIgKipjw6FjIMO0IMSR4buZYyBs4bqtcCB24bubaSBuaGF1KiouDQoNCi0gKipIw6BtIHjDoWMgc3XhuqV0IChQTUYpKioNCg0KJCQNClAoTl97aWp9ID0gbl97aWp9KSA9IFxmcmFje2Veey1cbXVfe2lqfX0gXG11X3tpan1ee25fe2lqfX19e25fe2lqfSF9DQokJA0KDQotICoqVOG7lW5nIHjDoWMgc3XhuqV0IGxpw6puIGjhu6NwIGNobyB0b8OgbiBi4bqjbmcqKg0KDQokJA0KUChce25fe2lqfVx9KSA9IFxwcm9kX3tpLGp9IFxmcmFje2Veey1cbXVfe2lqfX0gXG11X3tpan1ee25fe2lqfX19e25fe2lqfSF9DQokJA0KDQotLS0NCg0KIyMjIyAqKlBow6JuIHBo4buRaSBNdWx0aW5vbWlhbCoqDQoNCi0gKipDw7RuZyB0aOG7qWMqKg0KDQokJA0KKE5fezExfSwgTl97MTJ9LCBcbGRvdHMsIE5fe3JjfSkgXHNpbSBcbWF0aHJte011bHRpbm9taWFsfVxsZWZ0KG4sIFx7cF97aWp9XH1ccmlnaHQpDQokJA0KDQotICoqVGjDoG5oIHBo4bqnbioqDQoNCnwgS8O9IGhp4buHdSB8IMOdIG5naMSpYSB8DQp8LS0tLS0tLS18LS0tLS0tLS18DQp8IFwoTl97aWp9XCkgfCBT4buRIHF1YW4gc8OhdCDhu58gw7QgaMOgbmcgXChpXCksIGPhu5l0IFwoalwpIGPhu6dhIGLhuqNuZyBuZ+G6q3Ugbmhpw6puIHwNCnwgXChuXCkgfCBU4buVbmcgc+G7kSBt4bqrdTogXChuID0gXHN1bV97aT0xfV57cn0gXHN1bV97aj0xfV57Y30gTl97aWp9XCkgfA0KfCBcKHBfe2lqfVwpIHwgWMOhYyBzdeG6pXQgbeG7mXQgcXVhbiBzw6F0IHLGoWkgdsOgbyDDtCBcKCAoaSxqKSBcKSwgduG7m2kgXCggXHN1bV97aSxqfSBwX3tpan0gPSAxIFwpIHwNCg0KLSAqKsOdIG5naMSpYSoqDQoNCiAgIC0gUGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdSBk4bqhbmcgbOG7sWEgY2jhu41uIHBow6JuIGxv4bqhaSwgcsO6dCBt4bqrdSBjw7MgdOG7lW5nIGPhu5EgxJHhu4tuaC4NCg0KICAgLSBDw6FjIMO0IHRyb25nIGLhuqNuZyBjw7MgKipwaOG7pSB0aHXhu5ljIGzhuqtuIG5oYXUqKiwgdsOsIHThu5VuZyBcKG5cKSBsw6AgY+G7kSDEkeG7i25oLg0KDQogICAtIE3hu5dpIG3huqt1IHF1YW4gc8OhdCByxqFpIHbDoG8gbeG7mXQgdHJvbmcgY8OhYyDDtCwgduG7m2kgeMOhYyBzdeG6pXQgXChwX3tpan1cKS4NCg0KLSAqKkjDoG0geMOhYyBzdeG6pXQgKFBNRikqKg0KDQokJA0KUChuX3tpan0pID0gXGZyYWN7biF9e1xwcm9kX3tpLGp9IG5fe2lqfSF9IFxwcm9kX3tpLGp9IHBfe2lqfV57bl97aWp9fQ0KJCQNCg0KLS0tDQoNCiMjIyMgKipN4buRaSBsacOqbiBo4buHIGdp4buvYSBQb2lzc29uIHbDoCBNdWx0aW5vbWlhbCoqDQoNCioqTuG6v3U6KioNCg0KLSBN4buXaSDDtCBcKCBOX3tpan0gXHNpbSBcbWF0aHJte1BvaXNzb259KFxtdV97aWp9KSBcKQ0KDQotIFbDoCB04buVbmcgXCggTiA9IFxzdW1fe2ksan0gTl97aWp9ID0gbiBcKSDEkcaw4bujYyBj4buRIMSR4buLbmgNCg0KKipUaMOsOioqDQoNCiQkDQooTl97aWp9IFxtaWQgTiA9IG4pIFxzaW0gXG1hdGhybXtNdWx0aW5vbWlhbH1cbGVmdChuLCBwX3tpan0gPSBcZnJhY3tcbXVfe2lqfX17XHN1bSBcbXVfe2lqfX1ccmlnaHQpDQokJA0KDQotICoqRGnhu4VuIGdp4bqjaSoqDQoNCiAgIC0gTuG6v3UgYuG6oW4gbOG6pXkgY8OhYyDEkeG6v20gUG9pc3NvbiBy4buTaSAqKsSRaeG7gXUga2nhu4duIGjDs2EqKiB0aGVvIHThu5VuZyBz4buRIMSR4bq/bSBj4buRIMSR4buLbmgsIGLhuqFuIHRodSDEkcaw4bujYyBt4buZdCBwaMOibiBwaOG7kWkgTXVsdGlub21pYWwuDQogICANCiAgIC0gVOG7qWMgbMOgOiAqKk11bHRpbm9taWFsIGzDoCB0csaw4budbmcgaOG7o3AgxJHhurdjIGJp4buHdCBj4bunYSBQb2lzc29uIGtoaSB04buVbmcgxJHGsOG7o2MgcsOgbmcgYnXhu5ljKiouDQoNCi0tLQ0KDQojIyMjICoqTcO0IGjDrG5oIGxvZy1saW5lYXIgdOG7qyBwaMOibiBwaOG7kWkgUG9pc3NvbioqDQoNCkTDuW5nIMSR4buDICoqbcO0IGjDrG5oIGjDs2EgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgY8OhYyBiaeG6v24gcGjDom4gbG/huqFpKio6DQoNCi0gKipNw7QgaMOsbmggbG9nIHR1eeG6v24gdMOtbmgqKg0KDQokJA0KXGxvZyhcbXVfe2lqfSkgPSBcbGFtYmRhICsgXGxhbWJkYV57KFIpfV9pICsgXGxhbWJkYV57KEMpfV9qICsgXGxhbWJkYV57KFJDKX1fe2lqfQ0KJCQNCg0KLSAqKlRow6BuaCBwaOG6p246KioNCg0KfCBLw70gaGnhu4d1IHwgw50gbmdoxKlhIHwNCnwtLS0tLS0tLXwtLS0tLS0tLXwNCnwgXChcbGFtYmRhXCkgfCBI4bqxbmcgc+G7kSB04buVbmcgcXXDoXQgKGludGVyY2VwdCkgfA0KfCBcKFxsYW1iZGFeeyhSKX1faVwpIHwgSGnhu4d1IOG7qW5nIGJp4bq/biBow6BuZyAodsOtIGThu6U6IGdp4bubaSB0w61uaCkgfA0KfCBcKFxsYW1iZGFeeyhDKX1falwpIHwgSGnhu4d1IOG7qW5nIGJp4bq/biBj4buZdCAodsOtIGThu6U6IHTDrG5oIHRy4bqhbmcgYuG7h25oKSB8DQp8IFwoXGxhbWJkYV57KFJDKX1fe2lqfVwpIHwgVMawxqFuZyB0w6FjIGdp4buvYSBow6BuZyB2w6AgY+G7mXQgKG3hu6ljIMSR4buZIHBo4bulIHRodeG7mWMgZ2nhu69hIDIgYmnhur9uKSB8DQoNCi0gKirDnSBuZ2jEqWEqKg0KDQogICAtIENobyBwaMOpcCBraeG7g20gxJHhu4tuaCDEkeG7mWMgbOG6rXAgKGtoaSBi4buPIFwoIFxsYW1iZGFeeyhSQyl9X3tpan0gXCkpLg0KDQogICAtIEPDsyB0aOG7gyBt4bufIHLhu5luZyBjaG8gYuG6o25nIDMgY2hp4buBdSwgNCBjaGnhu4F1LC4uLg0KDQogICAtIFRoxrDhu51uZyDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgYuG6sW5nIG3DtCBow6xuaCBHTE0gduG7m2kgbGluayBsb2cuDQoNCi0tLQ0KDQojIyMjICoqVOG7lW5nIGvhur90IGLhuqNuZyBzbyBzw6FuaCoqDQoNCnwgxJDhurdjIMSRaeG7g20gfCBNdWx0aW5vbWlhbCB8IFBvaXNzb24gfA0KfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18DQp8IFThu5VuZyBz4buRIMSR4bq/bSB8IEPhu5EgxJHhu4tuaCBcKG5cKSB8IEtow7RuZyBj4buRIMSR4buLbmggfA0KfCBRdWFuIGjhu4cgZ2nhu69hIGPDoWMgw7QgfCBQaOG7pSB0aHXhu5ljIHwgxJDhu5ljIGzhuq1wIHwNCnwgROG7ryBsaeG7h3UgcGjDuSBo4bujcCB8IFLDunQgbeG6q3UsIGto4bqjbyBzw6F0IHwgROG7ryBsaeG7h3UgxJHhur9tIHThu7Egbmhpw6puIHwNCnwgUGjDom4gdMOtY2ggdMawxqFuZyB0w6FjIHwgR2nhu5tpIGjhuqFuIHwgTGluaCBob+G6oXQgduG7m2kgbG9nLWxpbmVhciB8DQp8IEPDtG5nIHRo4bupYyBtw7QgaMOsbmggfCBcKFx0ZXh0e011bHRpbm9taWFsfShuLCBce3Bfe2lqfVx9KVwpIHwgXChcdGV4dHtQb2lzc29ufShcbXVfe2lqfSlcKSB8DQp8IEtoaSDEkWnhu4F1IGtp4buHbiBow7NhIHThu5VuZyB8IOKAlCB8IENobyByYSBwaMOibiBwaOG7kWkgTXVsdGlub21pYWwgfA0KDQotLS0NCg0KIyMjICoqMi4yIFNvIHPDoW5oIDIgdOG7tyBs4buHIHRyb25nIGLhuqNuZyBuZ+G6q3Ugbmhpw6puIDJ4MioqDQoNCkdp4bqjIHPhu60gbeG7mXQgYuG6o25nIDJ4MiDEkcaw4bujYyB0csOsbmggYsOgeSBuaMawIHNhdToNCg0KfCAgICAgICAgICAgICAgIHwgS+G6v3QgcXXhuqMgKCspIHwgS+G6v3QgcXXhuqMgKOKAkykgfCBU4buVbmcgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS18DQp8IE5ow7NtIDEgICAgICAgIHwgXChhXCkgICAgICAgfCBcKGJcKSAgICAgICB8IFwoYStiXCkgIHwNCnwgTmjDs20gMiAgICAgICAgfCBcKGNcKSAgICAgICB8IFwoZFwpICAgICAgIHwgXChjK2RcKSAgfA0KfCAqKlThu5VuZyoqICAgICAgfCBcKGErY1wpICAgICB8IFwoYitkXCkgICAgIHwgXChuXCkgICAgfA0KDQrEkMOieSBsw6AgZOG6oW5nIGLhuqNuZyB0aMaw4budbmcgZMO5bmcgxJHhu4Mgc28gc8OhbmggeMOhYyBzdeG6pXQgdGjDoG5oIGPDtG5nLCBy4bunaSBybywgaG/hurdjIHBo4bqjbiBo4buTaSB0w61jaCBj4buxYyBnaeG7r2EgaGFpIG5ow7NtLg0KDQotLS0NCg0KIyMjIyAqKkhp4buHdSBoYWkgdOG7tyBs4buHKioNCg0KLSAqKkPDtG5nIHRo4bupYzoqKg0KDQpcWw0KXERlbHRhIHAgPSBcZnJhY3thfXthK2J9IC0gXGZyYWN7Y317YytkfQ0KXF0NCg0KLSAqKsOdIG5naMSpYToqKg0KDQogICAtIEzDoCAqKm3hu6ljIGNow6puaCBs4buHY2ggdHV54buHdCDEkeG7kWkqKiBnaeG7r2EgaGFpIHThu7cgbOG7hyB0aMOgbmggY8O0bmcg4bufIGhhaSBuaMOzbS4NCg0KICAgLSBO4bq/dSBcKFxEZWx0YSBwID4gMFwpLCBuaMOzbSAxIGPDsyB04bu3IGzhu4cgdGjDoG5oIGPDtG5nIGNhbyBoxqFuIG5ow7NtIDIuDQoNCiAgIC0gxJDGoW4gZ2nhuqNuIHbDoCBk4buFIGRp4buFbiBnaeG6o2ksIHRow61jaCBo4bujcCBraGkgdOG6rXAgdHJ1bmcgdsOgbyBz4buxICoqa2jDoWMgYmnhu4d0IHRo4buxYyB04bq/KiogKGFic29sdXRlIGRpZmZlcmVuY2UpLCB0aGF5IHbDrCB04bu3IGzhu4cgdMawxqFuZyDEkeG7kWkuDQogICANCi0tLQ0KDQojIyMjICoqVOG7tyBz4buRIG5ndXkgY8ahIC0gUmVsYXRpdmUgUmlzayoqDQoNCi0gKipDw7RuZyB0aOG7qWM6KioNCg0KXFsNClJSID0gXGZyYWN7YSAvIChhK2IpfXtjIC8gKGMrZCl9DQpcXQ0KDQotICoqw50gbmdoxKlhOioqDQoNCiAgIC0gxJBvIG3hu6ljIHTEg25nIChob+G6t2MgZ2nhuqNtKSAqKm5ndXkgY8ahKiogY+G7p2EgbmjDs20gMSBzbyB24bubaSBuaMOzbSAyLg0KDQogICAtIFwoUlIgPSAxXCk6IEtow7RuZyBjw7Mga2jDoWMgYmnhu4d0IG5ndXkgY8ahLg0KICANCiAgIC0gXChSUiA+IDFcKTogTmjDs20gMSBjw7Mgbmd1eSBjxqEgY2FvIGjGoW4uDQogIA0KICAgLSBcKFJSIDwgMVwpOiBOaMOzbSAxIGPDsyBuZ3V5IGPGoSB0aOG6pXAgaMahbi4NCiAgIA0KLS0tDQoNCiMjIyMgKipU4bu3IHPhu5EgY2jDqm5oIC0gT2RkcyBSYXRpbyoqDQoNCi0gKipDw7RuZyB0aOG7qWM6KioNCg0KXFsNCk9SID0gXGZyYWN7YS9ifXtjL2R9ID0gXGZyYWN7YWR9e2JjfQ0KXF0NCg0KLSAqKsOdIG5naMSpYToqKg0KDQogICAtIFNvIHPDoW5oICoqY8ahIGjhu5lpIHjhuqN5IHJhIHPhu7Ega2nhu4duKiogZ2nhu69hIGhhaSBuaMOzbS4NCg0KICAgLSBcKE9SID0gMVwpOiBLaMO0bmcgY8OzIGxpw6puIGjhu4cuDQogIA0KICAgLSBcKE9SID4gMVwpOiBOaMOzbSAxIGPDsyBjxqEgaOG7mWkgY2FvIGjGoW4uDQogIA0KICAgLSBcKE9SIDwgMVwpOiBOaMOzbSAxIGPDsyBjxqEgaOG7mWkgdGjhuqVwIGjGoW4uDQoNCi0gKipMxrB1IMO9OioqDQoNCiAgIC0gT1IgZ+G6p24gZ2nhu5FuZyBSUiBraGkgeMOhYyBzdeG6pXQgc+G7sSBraeG7h24gdGjhuqVwLg0KDQogICAtIE9SIHRoxrDhu51uZyDEkcaw4bujYyBz4butIGThu6VuZyB0cm9uZyAqKmjhu5NpIHF1eSBsb2dpc3RpYyoqLg0KICAgDQotLS0NCg0KIyMjICoqMi4zIEtob+G6o25nIHRpbiBj4bqteSBjaG8gY8OhYyB0aGFtIHPhu5EgxJFvIG3hu5FpIGxpw6puIGjhu4cqKg0KDQojIyMjICoqQ8O0bmcgdGjhu6ljOioqDQoNCioqVMOtbmggdHLDqm4gbG9nKE9SKToqKg0KDQpcWw0KXGxvZyhPUikgXHBtIFpfe1xhbHBoYS8yfSBcY2RvdCBcc3FydHsgXGZyYWN7MX17YX0gKyBcZnJhY3sxfXtifSArIFxmcmFjezF9e2N9ICsgXGZyYWN7MX17ZH0gfQ0KXF0NCg0KKipTYXUgxJHDsyBs4bqleSBtxakgxJHhu4MgdHLhu58gbOG6oWkgT1I6KioNCg0KXFsNCkNJX3tPUn0gPSBcbGVmdCggZV57TH0sXCBlXntVfSBccmlnaHQpDQpcXQ0KDQoqKlRyb25nIMSRw7M6KioNCg0KLSBcKEwgPSBcbG9nKE9SKSAtIFpfe1xhbHBoYS8yfSBcY2RvdCBTRVwpDQoNCi0gXChVID0gXGxvZyhPUikgKyBaX3tcYWxwaGEvMn0gXGNkb3QgU0VcKQ0KDQotIFwoU0UgPSBcc3FydHsgXGZyYWN7MX17YX0gKyBcZnJhY3sxfXtifSArIFxmcmFjezF9e2N9ICsgXGZyYWN7MX17ZH0gfVwpDQoNCi0gVuG7m2kgbeG7qWMgdGluIGPhuq15IDk1JSwgXChaX3tcYWxwaGEvMn0gPSAxLjk2XCkNCg0KLS0tDQoNCiMjIyAqKjIuNCBWw60gZOG7pSoqDQoNCk3hu5l0IGPDtG5nIHR5IHRyaeG7g24ga2hhaSBjaGnhur9uIGThu4tjaCBlbWFpbCBxdeG6o25nIGPDoW8uIEvhur90IHF14bqjOg0KDQp8ICAgICAgICAgICAgICAgICAgICAgIHwgTXVhIGjDoG5nIHwgS2jDtG5nIG11YSB8IFThu5VuZyB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS18DQp8IE5o4bqtbiBlbWFpbCAoTmjDs20gMSkgIHwgNDAgICAgICAgfCA2MCAgICAgICAgfCAxMDAgICB8DQp8IEtow7RuZyBuaOG6rW4gKE5ow7NtIDIpICB8IDIwICAgICAgIHwgODAgICAgICAgIHwgMTAwICAgfA0KDQotICoqVMOtbmggdG/DoW46KioNCg0KICAgLSBcKFJSID0gXGZyYWN7NDAvMTAwfXsyMC8xMDB9ID0gMi4wXCkg4oaSIE5o4bqtbiBlbWFpbCBnacO6cCAqKnTEg25nIGfhuqVwIMSRw7RpKiogeMOhYyBzdeG6pXQgbXVhIGjDoG5nLg0KDQogICAtIFwoT1IgPSBcZnJhY3s0MCBcY2RvdCA4MH17NjAgXGNkb3QgMjB9ID0gXGZyYWN7MzIwMH17MTIwMH0gPSAyLjY3XCkg4oaSIEPGoSBo4buZaSBtdWEgaMOgbmcgY2FvIGjGoW4gKioyLjY3IGzhuqduKiouDQoNCi0gKipLaG/huqNuZyB0aW4gY+G6rXkgT1I6KioNCg0KICAgLSBcKFNFID0gXHNxcnR7MS80MCArIDEvNjAgKyAxLzIwICsgMS84MH0gXGFwcHJveCAwLjMyOVwpDQoNCiAgIC0gXChcbG9nKE9SKSBcYXBwcm94IFxsb2coMi42NykgPSAwLjk4MVwpDQoNCiAgIC0gXChDSV97bG9nKE9SKX0gPSAwLjk4MSBccG0gMS45NiBcY2RvdCAwLjMyOSA9ICgwLjMzNixcIDEuNjI2KVwpDQoNCiAgIC0gXChDSV97T1J9ID0gKGVeezAuMzM2fSxcIGVeezEuNjI2fSkgPSAoMS40MCxcIDUuMDgpXCkNCg0KICAg4oaSICoqT1IgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqLCB2w6wga2hv4bqjbmcgdGluIGPhuq15IGtow7RuZyBjaOG7qWEgMS4NCg0KLS0tDQoNCiMjIyAqKjIuNSBU4buVbmcga+G6v3QqKg0KDQp8IENo4buJIHPhu5EgICAgICB8IEPDtG5nIHRo4bupYyAgICAgICAgICAgICAgICAgICAgIHwgw50gbmdoxKlhIGNow61uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IMavdSDEkWnhu4NtICAgICAgICAgICAgICAgICAgICAgICAgIHwg4buobmcgZOG7pW5nIHBo4buVIGJp4bq/biAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IEhp4buHdSB04bu3IGzhu4cgIHwgXChwXzEgLSBwXzJcKSAgICAgICAgICAgICAgICB8IFNvIHPDoW5oIHR1eeG7h3QgxJHhu5FpIGdp4buvYSBoYWkgdOG7tyBs4buHICAgICAgICAgICAgIHwgVHLhu7FjIHF1YW4sIGThu4UgaGnhu4N1ICAgICAgICAgICAgICB8IFNvIHPDoW5oIMSRxqFuIGdp4bqjbiAgICAgICAgICAgICAgIHwNCnwgUlIgICAgICAgICAgfCBcKFxmcmFje3BfMX17cF8yfVwpICAgICAgICAgIHwgU28gc8OhbmggeMOhYyBzdeG6pXQgZ2nhu69hIGhhaSBuaMOzbSAgICAgICAgICAgICAgIHwgRGnhu4VuIGdp4bqjaSB04buxIG5oacOqbiAgICAgICAgICAgICAgfCBOZ2hpw6puIGPhu6l1IHkgaOG7jWMsIG1hcmtldGluZyAgICB8DQp8IE9SICAgICAgICAgIHwgXChcZnJhY3thZH17YmN9XCkgICAgICAgICAgICB8IFNvIHPDoW5oIG9kZHMgZ2nhu69hIGhhaSBuaMOzbSAgICAgICAgICAgICAgICAgICB8IMOBcCBk4bulbmcgbGluaCBob+G6oXQgdHJvbmcgaOG7k2kgcXV5IHwgSOG7k2kgcXV5IGxvZ2lzdGljLCBwaMOibiB0w61jaCBy4bunaSBybyB8DQoNCi0tLQ0KDQojIyAqKjMuIFN1eSBuZ2jEqSB24buBIGLhu5kgZOG7ryBsaeG7h3Ug4oCcU3VwZXJtYXJrZXQgVHJhbnNhY3Rpb25z4oCdKioNCg0KIyMjICoqMy4xIMSQ4buNYyBi4buZIGThu68gbGnhu4d1KioNCg0KYGBge3J9DQpsaWJyYXJ5KGNzdikNCmRhdGEgPC0gcmVhZC5jc3YoIkQ6L1VGTS8yMDI1LSBLw6wgMi9QaMOibiB0w61jaCBk4buvIGxp4buHdSDEkeG7i25oIHTDrW5oIC0gVHLhuqduIE3huqFuaCBUxrDhu51uZy9TdXBlcm1hcmtldCBUcmFuc2FjdGlvbnMuY3N2IiwgaGVhZGVyID0gVCkNCmBgYA0KDQojIyMgKiozLjIgQ8OhYyBixrDhu5tjIHRo4buxYyBoaeG7h24qKg0KDQojIyMjICoqQjE6IFThuqFvIGLhuqNuZyBjaMOpbyBnaeG7r2EgR2VuZGVyIHbDoCBIb21lb3duZXIqKg0KDQpgYGB7cn0NCnRhYmxlX2dlbmRlcl9ob21lIDwtIHRhYmxlKGRhdGEkR2VuZGVyLCBkYXRhJEhvbWVvd25lcikNCnRhYmxlX2dlbmRlcl9ob21lDQpgYGANCiMjIyMgKipCMjogVMOtbmggT2RkcyBSYXRpbyAodOG7tyBz4buRIGNow6puaCkqKg0KDQpgYGB7cn0NCmEgPC0gdGFibGVfZ2VuZGVyX2hvbWVbIkYiLCAiWSJdDQpiIDwtIHRhYmxlX2dlbmRlcl9ob21lWyJGIiwgIk4iXQ0KYyA8LSB0YWJsZV9nZW5kZXJfaG9tZVsiTSIsICJZIl0NCmQgPC0gdGFibGVfZ2VuZGVyX2hvbWVbIk0iLCAiTiJdDQoNCk9SIDwtIChhICogZCkgLyAoYiAqIGMpDQpPUg0KYGBgDQoNCiMjIyMgKipCMzogVMOtbmgga2hv4bqjbmcgdGluIGPhuq15IGNobyBPUioqDQoNCmBgYHtyfQ0KbG9nX09SIDwtIGxvZyhPUikNClNFIDwtIHNxcnQoMS9hICsgMS9iICsgMS9jICsgMS9kKQ0KDQojIDk1JSBDSQ0KeiA8LSAxLjk2DQpDSV9sb3dlciA8LSBleHAobG9nX09SIC0geiAqIFNFKQ0KQ0lfdXBwZXIgPC0gZXhwKGxvZ19PUiArIHogKiBTRSkNCg0KYyhDSV9sb3dlciwgQ0lfdXBwZXIpDQpgYGANCg0KIyMjIyAqKkRp4buFbiBnaeG6o2kqKg0KDQotICoqTuG6v3UgT1IgPiAxOioqIG7hu68gY8OzIHThu7cgc+G7kSBjaMOqbmggY2FvIGjGoW4g4oaSIGto4bqjIG7Eg25nIHPhu58gaOG7r3UgbmjDoCBjYW8gaMahbiBuYW0uDQoNCi0gKipO4bq/dSBPUiA8IDE6KiogbuG7ryBjw7Mgb2RkcyBz4bufIGjhu691IG5ow6AgdGjhuqVwIGjGoW4uDQoNCi0gKipO4bq/dSBraG/huqNuZyB0aW4gY+G6rXkga2jDtG5nIGNo4bupYSAxKiog4oaSIGvhur90IGx14bqtbiBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIOG7nyBt4bupYyA5NSUuDQoNCiMjIyMgKipOaOG6rW4geMOpdCoqDQoNCi0gVsOsICoqa2hv4bqjbmcgdGluIGPhuq15IGPhu6dhIE9SIGJhbyBn4buTbSAxKiosIHRhICoqa2jDtG5nIHRo4buDKioga+G6v3QgbHXhuq1uIGPDsyBz4buxIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHRyb25nIG9kZHMgc+G7nyBo4buvdSBuaMOgIGdp4buvYSBO4buvIHbDoCBOYW0uDQoNCi0gTsOzaSBjw6FjaCBraMOhYywgdmnhu4djIGzDoCBO4buvIHNvIHbhu5tpIE5hbSAqKmtow7RuZyBsw6BtIHTEg25nIGhv4bq3YyBnaeG6o20gxJHDoW5nIGvhu4MqKiBraOG6oyBuxINuZyBz4bufIGjhu691IG5ow6AgZOG7sWEgdHLDqm4gZOG7ryBsaeG7h3UgdsOgIG3DtCBow6xuaCBoaeG7h24gdOG6oWkuDQoNCi0gT1Iga2hv4bqjbmcgMSBjxaluZyBjaG8gdGjhuqV5IHThu7cgc+G7kSBvZGRzIGPhu6dhIHZp4buHYyBz4bufIGjhu691IG5ow6AgZ+G6p24gbmjGsCB0xrDGoW5nIMSRxrDGoW5nIGdp4buvYSBO4buvIHbDoCBOYW0uDQoNCi0tLQ0KDQojICoqQi4gSG/huqF0IMSR4buZbmcgdHLDqm4gbOG7m3AqKg0KDQojIyAqKjEuIMOUbiB04bqtcCB2w6AgVGjhuqNvIGx14bqtbiB24buBIFBow6JuIHTDrWNoIENow6lvICYgUlIqKg0KDQojIyMgKioxLjEgTmjhuq1uIMSR4buLbmggYmFuIMSR4bqndSB04burIGLhuqNuZyBjaMOpbyB2w6AgUlIqKg0KDQotIELhuqNuZyBjaMOpbyBnacO6cCBjaMO6bmcgdGEgKipxdWFuIHPDoXQgdHLhu7FjIHF1YW4gbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgaGFpIGJp4bq/biBuaOG7iyBwaMOibioqLCB2w60gZOG7pSBuaMawIEdlbmRlciB2w6AgSG9tZW93bmVyLg0KDQotIFJlbGF0aXZlIFJpc2sgY2hvIGJp4bq/dCAqKnThu7cgbOG7hyB4w6FjIHN14bqldCB44bqjeSByYSBt4buZdCBz4buxIGtp4buHbioqICh2w60gZOG7pTogc+G7nyBo4buvdSBuaMOgKSDhu58gbmjDs20gxJHhu5FpIHTGsOG7o25nIHF1YW4gdMOibSAoTuG7rykgc28gduG7m2kgbmjDs20gxJHhu5FpIGNo4bupbmcgKE5hbSkuDQoNCi0gVOG7qyBSUiwgdGEgY8OzIHRo4buDICoqxJHDoW5oIGdpw6EgeGVtIG5ow7NtIG7DoG8gY8OzIGto4bqjIG7Eg25nIGNhbyBoxqFuIGhv4bq3YyB0aOG6pXAgaMahbioqIHRyb25nIHZp4buHYyB44bqjeSByYSBz4buxIGtp4buHbi4NCg0KLSBRdWEgdsOtIGThu6U6IA0KDQogICAtIE7hur91ICoqUlIgPiAxKiosIGPDsyB0aOG7gyBuw7NpIHZp4buHYyBsw6AgTuG7ryBsw6BtIHTEg25nIG5ndXkgY8ahL2to4bqjIG7Eg25nIHPhu58gaOG7r3UgbmjDoCBzbyB24bubaSBOYW0NCiAgIA0KICAgLSBO4bq/dSAqKlJSIDwgMSoqIHRow6wgbmfGsOG7o2MgbOG6oWkuDQoNCi0tLQ0KDQojIyMgKioxLjIgSOG6oW4gY2jhur8gY+G7p2EgYuG6o25nIGNow6lvIHbDoCBSUioqDQoNCi0gQuG6o25nIGNow6lvICoqa2jDtG5nIMSRaeG7gXUgY2jhu4luaCDEkcaw4bujYyBjw6FjIHnhur91IHThu5Egbmhp4buFdSoqLCBuw6puIGPDsyB0aOG7gyDEkcawYSByYSBr4bq/dCBsdeG6rW4gY2jGsGEgY2jDrW5oIHjDoWMgduG7gSBt4buRaSBxdWFuIGjhu4cuDQoNCi0gUlIgKipjaOG7iSDDoXAgZOG7pW5nIGNobyB4w6FjIHN14bqldCoqIHbDoCBjw7MgdGjhu4MgZ8OieSBuaOG6p20gbOG6q24ga2hpIGJp4bq/biDEkeG6p3UgcmEga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgc+G7sSBraeG7h24g4oCcaGnhur9t4oCdLg0KDQotIFJSICoqa2jDtG5nIGThu4UgZMOgbmcgbeG7nyBy4buZbmcqKiBjaG8gY8OhYyBwaMOibiB0w61jaCBwaOG7qWMgdOG6oXAgbmjGsCDEkWEgYmnhur9uLg0KDQotIEtoaSAqKm3huqt1IG5o4buPIGhv4bq3YyB04bu3IGzhu4cgc+G7sSBraeG7h24gY2FvKiosIFJSIGPDsyB0aOG7gyAqKmtow7RuZyBwaOG6o24gw6FuaCBjaMOtbmggeMOhYyBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZy4qKg0KDQotIELhuqNuZyBjaMOpbyBjaOG7iSB0aOG7gyBoaeG7h24gbeG7kWkgcXVhbiBo4buHIMSRxqFuIGdp4bqjbiBnaeG7r2EgMiBiaeG6v24sICoqa2jDtG5nIGNobyBiaeG6v3Qgbmd1ecOqbiBuaMOibiBob+G6t2MgbeG7kWkgbGnDqm4gaOG7hyBwaGkgdHV54bq/bi4qKg0KDQotLS0NCg0KIyMjICoqMS4zIFRo4bqjbyBsdeG6rW4gduG7gSBPZGRzKioNCg0KLSAqKk9kZHMqKiBsw6AgKip04bu3IHPhu5EgZ2nhu69hIHjDoWMgc3XhuqV0IHPhu7Ega2nhu4duIHjhuqN5IHJhIHbDoCB4w6FjIHN14bqldCBz4buxIGtp4buHbiBraMO0bmcgeOG6o3kgcmEqKiAodsOtIGThu6UsIG9kZHMgc+G7nyBo4buvdSBuaMOgID0gUChz4bufIGjhu691IG5ow6ApIC8gUChraMO0bmcgc+G7nyBo4buvdSBuaMOgKSkuDQoNCi0gKipTbyBzw6FuaCoqIE9kZHMgdsOgIFJlbGF0aXZlIFJpc2s6DQoNCiAgIC0gT2RkcyBraMOhYyB24bubaSB4w6FjIHN14bqldCB2w6AgUlI7IE9kZHMgdGjGsOG7nW5nIMSRxrDhu6NjIHPhu60gZOG7pW5nIHRyb25nIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYy4NCg0KICAgLSBPZGRzIHRo4buDIGhp4buHbiB04bu3IHPhu5Egb2RkcyBnaeG7r2EgaGFpIG5ow7NtICh2w60gZOG7pTogb2RkcyBz4bufIGjhu691IG5ow6AgY+G7p2EgbuG7ryBjaGlhIGNobyBvZGRzIHPhu58gaOG7r3UgbmjDoCBj4bunYSBuYW0pLg0KDQotICoqw50gbmdoxKlhKiogY+G7p2EgT2RkcyBSYXRpbzoNCg0KICAgLSAqKk9SID4gMToqKiBvZGRzIGPhu6dhIHPhu7Ega2nhu4duIGzhu5tuIGjGoW4g4bufIG5ow7NtIG5naGnDqm4gY+G7qXUuDQoNCiAgIC0gKipPUiA8IDE6Kiogb2RkcyBuaOG7jyBoxqFuIOG7nyBuaMOzbSBuZ2hpw6puIGPhu6l1Lg0KDQogICAtICoqT1IgPSAxOioqIGtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgduG7gSBvZGRzIGdp4buvYSBoYWkgbmjDs20uDQoNCi0gKipMxrB1IMO9Kioga2hpIGRp4buFbiBnaeG6o2kgT2RkcyBSYXRpbzoNCg0KICAgLSBPUiAqKmThu4UgYuG7iyBoaeG7g3UgbmjhuqdtIGzDoCBSUioqLCBuaMawbmcgdGjhu7FjIGNo4bqldCBsw6AgMiB0aMaw4bubYyDEkW8ga2jDoWMgbmhhdS4NCg0KICAgLSBPUiB0aMaw4budbmcgxJHGsOG7o2MgZMO5bmcgKipraGkgcGjDom4gdMOtY2ggbG9naXN0aWMgcmVncmVzc2lvbioqIHbDrCB0w61uaCB0b8OhbiB2w6AgbcO0IGjDrG5oIGjDs2Egb2RkcyB0aHXhuq1uIHRp4buHbiBoxqFuLg0KDQogICAtIEtoaSBz4buxIGtp4buHbiBraMO0bmcgcGjhu5UgYmnhur9uLCBPUiBn4bqnbiBi4bqxbmcgUlI7IG5oxrBuZyBraGkgc+G7sSBraeG7h24gcGjhu5UgYmnhur9uLCBPUiBjw7MgdGjhu4MgcGjDs25nIMSR4bqhaSBz4buxIGtow6FjIGJp4buHdCBzbyB24bubaSBSUi4NCiAgIA0KLS0tDQoNCiMjIyAqKjEuNCBTbyBzw6FuaCBSUiB2w6AgT2RkcyoqDQoNCiMjIyMgKipU4burIGLhuqNuZyB04bqnbiBzdeG6pXQgdsOgIHThu7cgbOG7hyBwaOG6p24gdHLEg20qKg0KDQotICoqTuG7rzoqKiA2MC41OSUgc+G7nyBo4buvdSBuaMOgLCAzOS40MSUga2jDtG5nIHPhu58gaOG7r3UuDQoNCi0gKipOYW06KiogNTkuNTIlIHPhu58gaOG7r3UgbmjDoCwgNDAuNDglIGtow7RuZyBz4bufIGjhu691Lg0KDQotICoqVOG7tyBs4buHIHPhu58gaOG7r3UgbmjDoCBnaeG7r2EgaGFpIGdp4bubaSBraMOhIHTGsMahbmcgxJHhu5NuZyoqLCBuaMawbmcgbuG7ryBjw7MgdOG7tyBs4buHIGNhbyBoxqFuIG3hu5l0IGNow7p0ICg2MC41OSUgc28gduG7m2kgNTkuNTIlKS4NCg0KLSBT4buxIGNow6puaCBs4buHY2ggbsOgeSB0dXkgbmjhu48gKH4xJSksIG5oxrBuZyB24bqrbiBjaG8gdGjhuqV5IG3hu5l0IHh1IGjGsOG7m25nIG5o4bq5IGzDoCBu4buvIGPDsyBraOG6oyBuxINuZyBz4bufIGjhu691IG5ow6AgY2FvIGjGoW4gbmFtLg0KDQotLS0NCg0KIyMjIyAqKlThu6sgT2RkcyBSYXRpbyB2w6Aga2hv4bqjbmcgdGluIGPhuq15KioNCg0KLSAqKk9SID0gMS4wNDU2NCoqIOKGkiBvZGRzIHPhu58gaOG7r3UgbmjDoCBj4bunYSAqKm7hu68gY2FvIGjGoW4gfjQuNiUgc28gduG7m2kgbmFtLioqDQoNCi0gKipLaG/huqNuZyB0aW4gY+G6rXkgOTUlOioqICoqWzAuOTc3NCwgMS4xMTg3XSoqIOKGkiBiYW8gZ+G7k20gMSwgdOG7qWMgbMOgOg0KDQogICAtIEtow7RuZyBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogcsO1IHLDoG5nIHLhurFuZyBvZGRzIHPhu58gaOG7r3UgbmjDoCBnaeG7r2EgbuG7ryB2w6AgbmFtIGzDoCBraMOhYyBuaGF1Lg0KDQogICAtIFPhu7EgY2jDqm5oIGzhu4djaCBsw6Aga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouDQoNCi0tLQ0KDQojIyMjICoqa+G6v3QgbHXhuq1uKioNCg0KLSAqKlbhu4EgbeG6t3QgbcO0IHThuqMgKHThuqduIHN14bqldCB2w6AgdOG7tyBs4buHIHBo4bqnbiB0csSDbSkqKjogTuG7ryBnaeG7m2kgY8OzIHThu7cgbOG7hyBz4bufIGjhu691IG5ow6Agbmjhu4luaCBoxqFuIG3hu5l0IGNow7p0IHNvIHbhu5tpIG5hbS4NCg0KLSAqKlbhu4EgbeG6t3QgdGjhu5FuZyBrw6ogKE9SIHbDoCBraG/huqNuZyB0aW4gY+G6rXkpKio6IFPhu7Ega2jDoWMgYmnhu4d0IG5o4buPIG7DoHkga2jDtG5nIMSR4bunIMSR4buDIGvhur90IGx14bqtbiBy4bqxbmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogZ2nhu69hIGhhaSBnaeG7m2kgduG7gSBraOG6oyBuxINuZyBz4bufIGjhu691IG5ow6AuDQoNCk3hurdjIGTDuSBk4buvIGxp4buHdSBtw7QgdOG6oyBjaG8gdGjhuqV5ICoqbuG7ryBjw7MgeHUgaMaw4bubbmcgc+G7nyBo4buvdSBuaMOgIGNhbyBoxqFuIG3hu5l0IGNow7p0KiosIG5oxrBuZyBraGkgcGjDom4gdMOtY2ggc8OidSBoxqFuIGLhurFuZyBPZGRzIFJhdGlvIHbDoCBraeG7g20gxJHhu4tuaCDEkeG7mSB0aW4gY+G6rXksICoqa2jDtG5nIGPDsyBi4bqxbmcgY2jhu6luZyByw7UgcsOgbmcqKiDEkeG7gyBraOG6s25nIMSR4buLbmggc+G7sSBraMOhYyBiaeG7h3QgdGjhu7FjIHPhu7EgZ2nhu69hIG5hbSB2w6AgbuG7ryB0cm9uZyB2aeG7h2Mgc+G7nyBo4buvdSBuaMOgLg0KDQotLS0NCg0KIyMgKioyLiDEkMOgbyBzw6J1IHbhu4EgU3V5IGRp4buFbiB0cm9uZyBC4bqjbmcgTmfhuqt1IG5oacOqbiAyeDIqKg0KDQojIyMgKioyLjEgSGnhu4d1IGhhaSB04bu3IGzhu4cgKERpZmZlcmVuY2UgaW4gUHJvcG9ydGlvbnMpKioNCg0KIyMjIyAqKk5o4bqtcCBk4buvIGxp4buHdSB04burIGLhuqNuZyAyeDIgdsOgIFTDrW5oIHThu7cgbOG7hyBz4bufIGjhu691IG5ow6AgdsOgIEhp4buHdSBoYWkgdOG7tyBs4buHKioNCg0KYGBge3J9DQojIEThu68gbGnhu4d1IHThu6sgYuG6o25nIDJ4Mg0KZmVtYWxlX2hvbWVvd25lciA8LSA0MzQ0DQpmZW1hbGVfbm9uaG9tZW93bmVyIDwtIDI4MjYNCm1hbGVfaG9tZW93bmVyIDwtIDQxMDANCm1hbGVfbm9uaG9tZW93bmVyIDwtIDI3ODkNCg0KIyBU4buVbmcgdGhlbyBnaeG7m2kgdMOtbmgNCnRvdGFsX2ZlbWFsZSA8LSBmZW1hbGVfaG9tZW93bmVyICsgZmVtYWxlX25vbmhvbWVvd25lciAgIyA3MTcwDQp0b3RhbF9tYWxlIDwtIG1hbGVfaG9tZW93bmVyICsgbWFsZV9ub25ob21lb3duZXIgICAgICAgICMgNjg4OQ0KDQojIFThu7cgbOG7hyBz4bufIGjhu691IG5ow6ANCnBfZmVtYWxlIDwtIGZlbWFsZV9ob21lb3duZXIgLyB0b3RhbF9mZW1hbGUNCnBfbWFsZSA8LSBtYWxlX2hvbWVvd25lciAvIHRvdGFsX21hbGUNCg0KIyBIaeG7h3UgaGFpIHThu7cgbOG7hw0KZGlmZl9wcm9wIDwtIHBfZmVtYWxlIC0gcF9tYWxlDQpkaWZmX3Byb3ANCmBgYA0KDQotICoqRGnhu4VuIGdp4bqjaSoqDQoNCiAgIC0gTuG7ryBjw7MgdOG7tyBs4buHIHPhu58gaOG7r3UgbmjDoCBjYW8gaMahbiBuYW0ga2hv4bqjbmcgMS4wNyUuDQoNCiAgIC0gU+G7sSBraMOhYyBiaeG7h3QgbsOgeSBsw6AgcuG6pXQgbmjhu48uDQoNCg0KIyMjIyAqKktob+G6o25nIHRpbiBj4bqteSBjaG8gaGnhu4d1IGhhaSB04bu3IGzhu4cgKENJKSoqDQoNCmBgYHtyfQ0KIyBTYWkgc+G7kSBjaHXhuqluDQpzZV9kaWZmIDwtIHNxcnQoDQogIChwX2ZlbWFsZSAqICgxIC0gcF9mZW1hbGUpKSAvIHRvdGFsX2ZlbWFsZSArDQogIChwX21hbGUgKiAoMSAtIHBfbWFsZSkpIC8gdG90YWxfbWFsZSkNCg0KIyBLaG/huqNuZyB0aW4gY+G6rXkgOTUlDQp6IDwtIDEuOTYNCmxvd2VyX2NpIDwtIGRpZmZfcHJvcCAtIHogKiBzZV9kaWZmDQp1cHBlcl9jaSA8LSBkaWZmX3Byb3AgKyB6ICogc2VfZGlmZg0KDQpjKGxvd2VyX2NpLCB1cHBlcl9jaSkNCg0KYGBgDQoNCi0gKipL4bq/dCBsdeG6rW4qKjogVsOsIGtob+G6o25nIHRpbiBj4bqteSBjaOG7qWEgZ2nDoSB0cuG7iyAwIOKGkiBraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogZ2nhu69hIHThu7cgbOG7hyBz4bufIGjhu691IG5ow6AgY+G7p2EgbuG7ryB2w6AgbmFtLg0KDQoNCiMjIyAqKjIuMiBU4bu3IHPhu5EgTmd1eSBjxqEgKFJlbGF0aXZlIFJpc2sgLSBSUikqKg0KDQpUYSB0w61uaCB24bubaSBjw7RuZyB0aOG7qWMgbmjGsCBzYXU6DQoNCmBgYHtyfQ0KcnIgPC0gcF9mZW1hbGUgLyBwX21hbGUNCnJyDQpgYGANCg0KLSAqKkRp4buFbiBnaeG6o2kqKg0KDQogICAtICoqUlIgPSAxLjAxOCoqIOKGkiBO4buvIGPDsyBraOG6oyBuxINuZyBz4bufIGjhu691IG5ow6AgY2FvIGjGoW4gbmFtIGtob+G6o25nIDEuOCUuDQoNCiAgIC0gVHV5IG5oacOqbiwgbeG7qWMgY2jDqm5oIGzhu4djaCBsw6AgcuG6pXQgbmjhu48sIHbDoCBuaMawIMSRw6MgdGjhuqV5IOG7nyBwaOG6p24gdHLDqm4sIGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLDtSByw6BuZy4NCg0KDQojIyMgKioyLjMgVOG7tyBz4buRIENow6puaCAoT2RkcyBSYXRpbyAtIE9SKSoqDQoNCiMjIyMgKipUw61uaCBPZGRzIHbDoCBPZGRzIFJhdGlvIChPUikqKg0KDQpgYGB7cn0NCiMgVMOtbmggb2Rkcw0Kb2Rkc19mZW1hbGUgPC0gcF9mZW1hbGUgLyAoMSAtIHBfZmVtYWxlKQ0Kb2Rkc19tYWxlIDwtIHBfbWFsZSAvICgxIC0gcF9tYWxlKQ0KDQojIE9SDQpvciA8LSBvZGRzX2ZlbWFsZSAvIG9kZHNfbWFsZQ0Kb3INCmBgYA0KDQotICoqRGnhu4VuIGdp4bqjaSoqDQoNCiAgIC0gKipPUiA9IDEuMDQ1NioqIOKGkiBPZGRzIHPhu58gaOG7r3UgbmjDoCBj4bunYSBu4buvIGNhbyBoxqFuIG5hbSBraG/huqNuZyA0LjYlLg0KDQogICAtIFR1eSBuaGnDqm4sIG3hu6ljIGNow6puaCBs4buHY2ggbMOgIHLhuqV0IG5o4buPLCB2w6AgbmjGsCDEkcOjIHRo4bqleSDhu58gcGjhuqduIHRyw6puLCBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiByw7UgcsOgbmcuDQoNCg0KIyMjIyAqKlTDrW5oIE9SIHRy4buxYyB0aeG6v3AgdOG7qyBi4bqjbmcgMngyIChjw7RuZyB0aOG7qWMgYWQvYmMpKioNCg0KYGBge3J9DQpvcjIgPC0gKGZlbWFsZV9ob21lb3duZXIgKiBtYWxlX25vbmhvbWVvd25lcikgLyAoZmVtYWxlX25vbmhvbWVvd25lciAqIG1hbGVfaG9tZW93bmVyKQ0Kb3IyICAjIEvhur90IHF14bqjIG7DoHkgc+G6vSBraOG7m3AgduG7m2kgb3Ig4bufIHRyw6puDQpgYGANCg0KIyMjIyAqKkPDoWNoIHTDrW5oIG5oYW5oIGNow7NuZyoqDQoNClRhIGPDsyB0aOG7gyBkw7luZyBgaMOgbSBlcGkuMmJ5MigpYCB04burIHBhY2thZ2UgZXBpUiDEkeG7gyB0w61uaCBPUiB2w6AgQ0kgbmhhbmggY2jDs25nOg0KDQoNCmBgYHtyfQ0KDQpsaWJyYXJ5KGVwaVIpDQoNCiMgVOG6oW8gYuG6o25nIDJ4MjogaMOgbmcgPSBGZW1hbGUgLyBNYWxlOyBj4buZdCA9IEhvbWVvd25lciAvIE5vdA0KdGFiIDwtIG1hdHJpeChjKGZlbWFsZV9ob21lb3duZXIsIGZlbWFsZV9ub25ob21lb3duZXIsDQogICAgICAgICAgICAgICAgbWFsZV9ob21lb3duZXIsIG1hbGVfbm9uaG9tZW93bmVyKSwNCiAgICAgICAgICAgICAgbnJvdyA9IDIsIGJ5cm93ID0gVFJVRSkNCg0KIyBQaMOibiB0w61jaA0KcmVzdWx0IDwtIGVwaS4yYnkyKHRhYiwgbWV0aG9kID0gImNvaG9ydC5jb3VudCIsIGNvbmYubGV2ZWwgPSAwLjk1KQ0KcmVzdWx0DQoNCmBgYA0KDQoNCiMjIyAqKjIuNCBU4buVbmcga+G6v3QgdsOgIHNvIHPDoW5oKioNCg0KIyMjIyAqKsSQ4buLbmggbmdoxKlhIGPGoSBi4bqjbioqDQoNCnwgVGh14bqtdCBuZ+G7ryAgICAgICAgICAgICAgfCBDw7RuZyB0aOG7qWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgw50gbmdoxKlhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgKipSZWxhdGl2ZSBSaXNrIChSUikqKiB8IFJSID0gJFxmcmFje3BfMX17cF8yfSQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTbyBzw6FuaCAqKm5ndXkgY8ahIHjhuqN5IHJhIHPhu7Ega2nhu4duKiogZ2nhu69hIGhhaSBuaMOzbS4gICAgICAgICAgICAgfA0KfCAqKk9kZHMgUmF0aW8gKE9SKSoqICAgIHwgT1IgPSAkXGZyYWN7cF8xIC8gKDEgLSBwXzEpfXtwXzIgLyAoMSAtIHBfMil9JCBob+G6t2MgJFxmcmFje2FkfXtiY30kIHwgU28gc8OhbmggKip04bu3IGzhu4cgeOG6o3kgcmEgLyBraMO0bmcgeOG6o3kgcmEgKG9kZHMpKiogZ2nhu69hIGhhaSBuaMOzbS4gfA0KDQojIyMjICoqS+G6v3QgcXXhuqMqKg0KDQp8IFRoxrDhu5tjIMSRbyB8IEdpw6EgdHLhu4sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERp4buFbiBnaeG6o2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8ICoqUlIqKiAgIHwgMS4wMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTuG7ryBjw7MgKipuZ3V5IGPGoSBz4bufIGjhu691IG5ow6AqKiBjYW8gaMahbiBuYW0gKioxLjglKiouICB8DQp8ICoqT1IqKiAgIHwgMS4wNDU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipPZGRzIHPhu58gaOG7r3UgbmjDoCoqIGPhu6dhIG7hu68gY2FvIGjGoW4gbmFtICoqNC42JSoqLiAgICB8DQp8IENJIDk1JSAgIHwgUlI6IGtow7RuZyB0w61uaCB0cuG7sWMgdGnhur9wOyBPUjogWzAuOTc3LCAxLjExOV0gfCBLaMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB2w6wga2hv4bqjbmcgdGluIGPhuq15IGNo4bupYSAxLiB8DQoNCg0KIyMjIyAqKlNvIHPDoW5oKioNCg0KLSBD4bqjIFJSIHbDoCBPUiDEkeG7gXUgPiAxIOKGkiBjw7luZyBjaOG7iSByYSBy4bqxbmcgbuG7ryBjw7Mga2jhuqMgbsSDbmcgc+G7nyBo4buvdSBuaMOgIGNhbyBoxqFuIG5hbS4NCg0KLSBPUiBs4bubbiBoxqFuIFJSICgxLjA0NTYgdnMgMS4wMTgpIOKGkiDEkWnhu4F1IG7DoHkgbHXDtG4geOG6o3kgcmEgdHLhu6sga2hpIHThu7cgbOG7hyBz4buxIGtp4buHbiBy4bqldCB0aOG6pXAuDQoNCi0gUlIgPSAxLjAxOCBuZ2jEqWEgbMOgOiDigJxUcm9uZyBuaMOzbSBu4buvLCB4w6FjIHN14bqldCBz4bufIGjhu691IG5ow6AgY2FvIGjGoW4gbmjDs20gbmFtIDEuOCXigJ0uDQoNCi0gT1IgPSAxLjA0NTYgbmdoxKlhIGzDoDog4oCcT2RkcyAodOG7tyBs4buHIHjhuqN5IHJhIC8ga2jDtG5nIHjhuqN5IHJhKSBj4bunYSB2aeG7h2Mgc+G7nyBo4buvdSBuaMOgIOG7nyBu4buvIGNhbyBoxqFuIG5hbSA0LjYl4oCdLg0KDQoNCiMjIyMgKirGr3UgbmjGsOG7o2MgxJFp4buDbSBj4bunYSBSUiB2w6AgT1IqKg0KDQotIFRyb25nIHbDrSBk4bulIHPhu58gaOG7r3UgbmjDoCBsw6Agc+G7sSBraeG7h24gcGjhu5UgYmnhur9uICh+NjAlKSwgbsOqbiBPUiB0aOG7lWkgcGjhu5NuZyBt4bupYyDEkeG7mSBraMOhYyBiaeG7h3QgaMahbiBSUi4NCg0KLSBSUiBwaMO5IGjhu6NwIGjGoW4ga2hpIG3hu6VjIHRpw6p1IGzDoCBnaeG6o2kgdGjDrWNoIHRoZW8geMOhYyBzdeG6pXQgKHJpc2spLg0KDQotIE9SIGPDsyBs4bujaSB0aOG6vyB24buBIHRvw6FuIGjhu41jLCDEkeG7kWkgeOG7qW5nIHbDoCDhu6luZyBk4bulbmcgdHJvbmcgaOG7k2kgcXV5IGxvZ2lzdGljLCBuaMawbmcga2jDsyBkaeG7hW4gZ2nhuqNpIHRy4buxYyBnacOhYyBoxqFuLg0KDQoNCiMjICoqMy4gVGjhu7FjIGjDoG5oIHRyw6puIFIqKg0KDQojIyMgKiozLjEgVOG6oW8gYuG6o25nIDJ4MioqDQoNClRhIHThuqFvIGLhuqNuZyB04bqnbiBz4buRIGPhu6dhIFTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBNYXJpdGFsU3RhdHVzIHbDoCBLaOG6oyBuxINuZyBz4bufIGjhu691IG5ow6AgSG9tZW93bmVyDQoNCmBgYHtyfQ0KIyBU4bqhbyBi4bqjbmcgMngyDQp0YWJsZV9tc19odyA8LSB0YWJsZShkYXRhJE1hcml0YWxTdGF0dXMsIGRhdGEkSG9tZW93bmVyKQ0KdGFibGVfbXNfaHcNCmBgYA0KU2F1IMSRw7MgdGEgZ8OhbiBnacOhIHRy4buLIGvhur90IHF14bqjIHbDoG86DQoNCmBgYHtyfQ0KIyBHw6FuIGdpw6EgdHLhu4sgdOG7qyBi4bqjbmcNCmFhIDwtIHRhYmxlX21zX2h3WyJNIiwgIlkiXSAgIyBNYXJyaWVkICsgSG9tZW93bmVyDQpiYiA8LSB0YWJsZV9tc19od1siTSIsICJOIl0gICMgTWFycmllZCArIE5vdCBIb21lb3duZXINCmNjIDwtIHRhYmxlX21zX2h3WyJTIiwgIlkiXSAgIyBTaW5nbGUgKyBIb21lb3duZXINCmRkIDwtIHRhYmxlX21zX2h3WyJTIiwgIk4iXSAgIyBTaW5nbGUgKyBOb3QgSG9tZW93bmVyDQpgYGANCg0KDQojIyMgKiozLjIgVMOtbmggdG/DoW4gdsOgIGRp4buFbiBnaeG6o2k6IEhp4buHdSBoYWkgdOG7tyBs4buHLCBSZWxhdGl2ZSBSaXNrLCBPZGRzIFJhdGlvKioNCg0KIyMjIyAqKkhp4buHdSAyIHThu7cgbOG7hyoqDQoNCmBgYHtyfQ0KIyBU4bu3IGzhu4cNCnBwMSA8LSBhYSAvIChhYSArIGJiKQ0KcHAyIDwtIGNjIC8gKGNjICsgZGQpDQpkaWZmIDwtIHBwMSAtIHBwMg0KZGlmZg0KYGBgDQoNCi0gKipL4bq/dCBsdeG6rW46KiogTmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuIGPDsyBraOG6oyBuxINuZyBz4bufIGjhu691IG5ow6AgY2FvIGjGoW4gbmfGsOG7nWkgxJHhu5ljIHRow6JuIGtob+G6o25nIDI5LjElLg0KDQoNCiMjIyMgKipSZWxhdGl2ZSBSaXNrKioNCg0KYGBge3J9DQpycnIgPC0gcHAxIC8gcHAyICAgICAgICAgICAgICAgICMgUmVsYXRpdmUgUmlzaw0KcnJyDQpgYGANCg0KLSAqKkvhur90IGx14bqtbjoqKiBOZ8aw4budaSDEkcOjIGvhur90IGjDtG4gY8OzIGto4bqjIG7Eg25nIHPhu58gaOG7r3UgbmjDoCBn4bqlcCAxLjY0IGzhuqduIG5nxrDhu51pIMSR4buZYyB0aMOibi4NCg0KIyMjIyAqKk9kZHMgUmF0aW8qKg0KDQpgYGB7cn0NCiMgT2RkcyBSYXRpbw0Kb2RkczEgPC0gYWEgLyBiYg0Kb2RkczIgPC0gY2MgLyBkZA0Kb3JyIDwtIG9kZHMxIC8gb2RkczINCm9ycg0KYGBgDQoNCi0gKipL4bq/dCBsdeG6rW46KiogVOG7tyBs4buHIGPGsOG7o2MgxJHhu4MgbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuIGPDsyBuaMOgIGNhbyBoxqFuIDMuNTQgbOG6p24gc28gduG7m2kgbmfGsOG7nWkgxJHhu5ljIHRow6JuLg0KDQotICoqw50gbmdoxKlhIHRo4buRbmcga8OqOiBPUiA+IDEqKiB2w6Aga2hv4bqjbmcgdGluIGPhuq15IGtow7RuZyBjaOG7qWEgMSDihpIgbeG7kWkgbGnDqm4gaOG7hyBuw6B5IGzDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KDQoNCiMjIyAqKjMuMyBUw61uaCB2w6AgZGnhu4VuIGdp4bqjaSBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyBPZGRzIFJhdGlvKioNCg0KYGBge3J9DQojIEjDoG0gbG9nIE9SIHbDoCBTRQ0KbG9nX29yciA8LSBsb2cob3JyKQ0Kc2VfbG9nX29yIDwtIHNxcnQoMS9hYSArIDEvYmIgKyAxL2NjICsgMS9kZCkNCg0KIyBUw61uaCBraG/huqNuZyB0aW4gY+G6rXkNCnogPC0gcW5vcm0oMC45NzUpDQpjaV9sb3dlcnIgPC0gZXhwKGxvZ19vcnIgLSB6ICogc2VfbG9nX29yKQ0KY2lfdXBwZXJyIDwtIGV4cChsb2dfb3JyICsgeiAqIHNlX2xvZ19vcikNCmMoY2lfbG93ZXJyLCBjaV91cHBlcnIpDQpgYGANCg0KLSAgKipEaeG7hW4gZ2nhuqNpKio6IFbhu5tpIMSR4buZIHRpbiBj4bqteSA5NSUsIE9kZHMgUmF0aW8gdGjhuq10IHPhu7EgbuG6sW0gdHJvbmcga2hv4bqjbmcgbsOgeSDihpIgY8OgbmcgY+G7p25nIGPhu5EgcuG6sW5nIG3hu5FpIGxpw6puIGjhu4cgbMOgIMSRw6FuZyB0aW4gY+G6rXkuDQoNCg0KIyMjICoqMy40IMavdSBuaMaw4bujYyDEkWnhu4NtKioNCg0KfCBUaMaw4bubYyDEkW8gICAgICAgfCDGr3UgxJFp4buDbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTmjGsOG7o2MgxJFp4buDbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgKipIaeG7h3UgdOG7tyBs4buHKiogfCBE4buFIGhp4buDdSwgcsO1IHLDoG5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLaMO0bmcgcGjhuqNuIMOhbmggdOG7tyBs4buHIHTGsMahbmcgxJHhu5FpICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKlJSKiogICAgICAgICB8IFRy4buxYyBxdWFuIHbhu5tpIG5ndXkgY8ahICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS2jDtG5nIGTDuW5nIMSRxrDhu6NjIHbhu5tpIG5naGnDqm4gY+G7qXUgaOG7k2kgY+G7qXUgICAgICAgICAgICAgfA0KfCAqKk9SKiogICAgICAgICB8IETDuW5nIHBo4buVIGJp4bq/biB0cm9uZyB0aOG7kW5nIGvDqiB2w6AgbG9naXN0aWMgcmVncmVzc2lvbiB8IMONdCB0cuG7sWMgcXVhbiwgZOG7hSBnw6J5IG5o4bqnbSBs4bqrbiBu4bq/dSBraMO0bmcgcXVlbiB0aHXhu5ljIHwNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==