#giới thiệu về dữ liệu
Dữ liệu PharmacoSmoking chứa thông tin về một nghiên cứu về hiệu quả
của các phương pháp điều trị cai thuốc lá. Dưới đây là mô tả về các cột
trong dữ liệu:
rownames: Số thứ tự của từng dòng dữ liệu.
id: Mã định danh của người tham gia nghiên cứu.
ttr: Thời gian đến khi tái phát (tính bằng ngày).
relapse: Biến nhị phân (0 hoặc 1) cho biết liệu người tham gia có tái
phát hay không.
grp: Nhóm điều trị, gồm các giá trị: patchOnly (chỉ dùng miếng dán)
và combination (kết hợp các phương pháp).
age: Tuổi của người tham gia.
gender: Giới tính của người tham gia (Male hoặc Female).
race: Chủng tộc của người tham gia (white hoặc nonwhite).
employment: Tình trạng công việc của người tham gia (ft - làm việc
toàn thời gian, pt - làm việc bán thời gian, other - khác).
yearsSmoking: Số năm hút thuốc.
levelSmoking: Mức độ hút thuốc (heavy - nặng, light - nhẹ).
ageGroup2: Nhóm tuổi chia thành hai nhóm (21-49 và 50+).
ageGroup4: Nhóm tuổi chia thành bốn nhóm (21-34, 35-49, 50-64, và
65+).
priorAttempts: Số lần cố gắng cai thuốc trước đây.
longestNoSmoke: Khoảng thời gian dài nhất không hút thuốc (tính bằng
ngày).
Ở đây chúng ta chỉ lấy 3 biến để phân tích dữ liệu định tính là
relapse, gender, grp
library("ggplot2")
library("data.table")
data <- read.csv("Downloads/pharmacoSmoking.csv")
data01 <- data.frame(data$relapse,data$gender,data$grp)
data.table(data01)
bảng tần suất
library(data.table)
data <- fread("Downloads/pharmacoSmoking.csv")
# Lập bảng tần số cho từng biến
relapse_table <- data[, .N, by = relapse]
print("Bảng tần số của biến relapse:")
## [1] "Bảng tần số của biến relapse:"
print(relapse_table)
## relapse N
## 1: 0 36
## 2: 1 89
print("Trong đây 0 là số người không tái phát nghiện thuốc và 1 là tái nghiện. Phần lớn người tham gia nghiên cứu đã tái phát sau khi cố gắng cai thuốc lá, chỉ có số ít người không tái phát.")
## [1] "Trong đây 0 là số người không tái phát nghiện thuốc và 1 là tái nghiện. Phần lớn người tham gia nghiên cứu đã tái phát sau khi cố gắng cai thuốc lá, chỉ có số ít người không tái phát."
gender_table <- data[, .N, by = gender]
print("Bảng tần số của biến gender:")
## [1] "Bảng tần số của biến gender:"
print(gender_table)
## gender N
## 1: Male 44
## 2: Female 81
print("Nhiều ngươi nữ tham gia nghiên cứu hơn là lượng người nam ")
## [1] "Nhiều ngươi nữ tham gia nghiên cứu hơn là lượng người nam "
grp_table <- data[, .N, by = grp]
print("Bảng tần số của biến grp:")
## [1] "Bảng tần số của biến grp:"
print(grp_table)
## grp N
## 1: patchOnly 64
## 2: combination 61
print("Số người tham gia sử dụng phương pháp patchOnly chiếm tỷ lệ nhỉnh hơn một chút so với nhóm sử dụng phương pháp kết hợp")
## [1] "Số người tham gia sử dụng phương pháp patchOnly chiếm tỷ lệ nhỉnh hơn một chút so với nhóm sử dụng phương pháp kết hợp"
vẽ đồ thị
biến relapse
# Vẽ đồ thị thanh cho biến relapse
ggplot(data, aes(x=factor(relapse)),) +
geom_bar(color ="red") +
labs(title="đồ thị biến relapse ", x="Relapse", y="Count")

biến gender
ggplot(data, aes(x=gender)) +
geom_bar(fill = "red") +
labs(title="Đồ thị biến gender ", x="Gender", y="Count")

biểu đồ grp
ggplot(data, aes(x=grp)) +
geom_bar() +
labs(title="Frequency of grp", x="grp", y="Count")
# ước lượng tỷ lệ
ước lượng tỷ lệ relapse vs gender
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.3
##
## Attaching package: 'DescTools'
## The following object is masked from 'package:data.table':
##
## %like%
a <- table(data$relapse,data$gender)
addmargins(a)
##
## Female Male Sum
## 0 20 16 36
## 1 61 28 89
## Sum 81 44 125
ước lượng tỷ lệ relapse với grp
library(DescTools)
b <- table(data$relapse,data$grp)
addmargins(b)
##
## combination patchOnly Sum
## 0 24 12 36
## 1 37 52 89
## Sum 61 64 125
ước lượng tỷ lệ gender vs grp
library(DescTools)
c <- table(data$grp,data$gender)
addmargins(c)
##
## Female Male Sum
## combination 39 22 61
## patchOnly 42 22 64
## Sum 81 44 125
Ước lượng Relative Risk
RelRisk(a)
## [1] 0.8106
Tỷ lệ tái phát ở nam giới thấp hơn so với nữ giới (RR < 1).
Điều này cho thấy nam giới có khả năng tái phát thấp hơn nữ giới sau khi
cố gắng cai thuốc lá.
table(data$relapse,data$gender)
##
## Female Male
## 0 20 16
## 1 61 28
ước lượng relative
m <- matrix(c(20, 61, 16, 28), nrow = 2)
RelRisk(m, conf.level = .95)
## rel. risk lwr.ci upr.ci
## 0.8106 0.5643 1.0839
Relative Risk (RR) = 0.8106:
Tỷ lệ tái phát ở nam giới thấp hơn so với nữ giới. Cụ thể, nam giới
có khả năng tái phát sau khi cố gắng cai thuốc lá thấp hơn khoảng 19% so
với nữ giới. Khoảng tin cậy 95% (CI) = (0.5643, 1.0839):
Khoảng tin cậy cho thấy rằng với độ tin cậy 95%, tỷ lệ tái phát ở nam
giới so với nữ giới có thể dao động từ 56.43% đến 108.39% . Vì khoảng
tin cậy chứa giá trị 1 (tức là 1 nằm trong khoảng CI), không có đủ bằng
chứng để khẳng định rằng tỷ lệ tái phát ở nam và nữ có sự khác biệt đáng
kể về mặt thống kê.
table(data$relapse,data$grp)
##
## combination patchOnly
## 0 24 12
## 1 37 52
n <- matrix(c(24, 37,12,52), nrow = 2)
RelRisk(n, conf.level = .95)
## rel. risk lwr.ci upr.ci
## 1.604 1.122 2.231
Relative Risk (RR) = 1.604:
Tỷ lệ tái phát của nhóm patchOnly cao hơn nhóm combination.
Cụ thể, nhóm sử dụng phương pháp patchOnly có khả năng tái phát sau
khi cố gắng cai thuốc lá cao hơn khoảng 60.4% sovới nhóm sử dụng phương
pháp combination.
Khoảng tin cậy 95% (CI) = (1.122, 2.231):
Khoảng tin cậy cho thấy rằng với độ tin cậy 95%, tỷ lệ tái phát của
nhóm patchOnly so với nhóm combination dao động từ 1.122 (112.2%) đến
2.231 (223.1%).
Vì khoảng tin cậy không chứa giá trị 1 (tức là 1 không nằm trong
khoảng CI), có đủ bằng chứng để khẳng định rằng tỷ lệ tái phát ở hai
nhóm này có sự khác biệt đáng kể về mặt thống kê.
Ước lượng Odd ratio
Biến relapse với biến gender
OddsRatio(a, conf.level = .95)
## odds ratio lwr.ci upr.ci
## 0.5738 0.2591 1.2708
Giá trị OR < 1: Odds của tái phát ở nam giới thấp hơn so với nữ
giới.
Khoảng tin cậy 95% chứa giá trị 1: Không có sự khác biệt đáng kể về
mặt thống kê giữa odds của tái phát ở nam và nữ.
Kết luận: Mặc dù kết quả cho thấy odds của tái phát ở nam giới thấp
hơn so với nữ giới, sự khác biệt này không đủ lớn để kết luận rằng giới
tính có ảnh hưởng đáng kể đến odds của tái phát sau khi cố gắng cai
thuốc lá. Điều này tương tự như phân tích relative risk, cần thêm các
nghiên cứu với kích thước mẫu lớn hơn hoặc kiểm tra thêm các yếu tố khác
để có kết luận chính xác hơn.
##biến relapse với biến grp
OddsRatio(b, conf.level = .95)
## odds ratio lwr.ci upr.ci
## 2.811 1.249 6.325
Giá trị OR > 1: Odds của tái phát trong nhóm patchOnly cao hơn so
với nhóm combination.
Khoảng tin cậy 95% không chứa giá trị 1: Sự khác biệt về odds của tái
phát giữa hai nhóm là đáng kể về mặt thống kê.
Kết luận: Những người sử dụng phương pháp điều trị patchOnly có odds
của tái phát cao hơn rõ rệt so với những người sử dụng phương pháp
combination. Điều này chỉ ra rằng việc kết hợp nhiều phương pháp điều
trị có thể giúp giảm odds của tái phát khi cai thuốc lá. Phương pháp
điều trị combination có vẻ là hiệu quả hơn trong việc giảm tỷ lệ tái
phát.
LS0tDQp0aXRsZTogIkLDoGkgdOG6rXAgMDEvMDYvMjAyNCINCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVIOiVNOiVTLCAlZCAtICVtIC0gJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICBwZGZfZG9jdW1lbnQ6DQogICAgZXh0cmFfZGVwZW5kZW5jaWVzOg0KICAgICAgdmlldG5hbTogdXRmOA0KICAgIHRvYzogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQpnZW9tZXRyeToNCiAgICAgIC0gaW5uZXI9M2NtDQogICAgICAtIG91dGVyPTRjbQ0KICAgICAgLSB0b3A9M2NtDQogICAgICAtIGJvdHRvbT00Y20NCiAgICAgIC0gaGVhZHNlcD0yMnB0DQogICAgICAtIGhlYWRoZWlnaHQ9MTFwdA0KICAgICAgLSBmb290c2tpcD0zM3B0DQogICAgICAtIGlnbm9yZWhlYWQNCiAgICAgIC0gaWdub3JlZm9vdA0KICAgICAgLSBoZWlnaHRyb3VuZGVkDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIG9wdGlvbnMoZGlnaXRzID0gNCksICBhdHRyLnNvdXJjZT0nLm51bWJlckxpbmVzJykNCmBgYA0KIA0KDQojZ2nhu5tpIHRoaeG7h3UgduG7gSBk4buvIGxp4buHdSANCg0KROG7ryBsaeG7h3UgUGhhcm1hY29TbW9raW5nIGNo4bupYSB0aMO0bmcgdGluIHbhu4EgbeG7mXQgbmdoacOqbiBj4bupdSB24buBIGhp4buHdSBxdeG6oyBj4bunYSBjw6FjIHBoxrDGoW5nIHBow6FwIMSRaeG7gXUgdHLhu4sgY2FpIHRodeG7kWMgbMOhLiBExrDhu5tpIMSRw6J5IGzDoCBtw7QgdOG6oyB24buBIGPDoWMgY+G7mXQgdHJvbmcgZOG7ryBsaeG7h3U6DQoNCnJvd25hbWVzOiBT4buRIHRo4bupIHThu7EgY+G7p2EgdOG7q25nIGTDsm5nIGThu68gbGnhu4d1Lg0KDQppZDogTcOjIMSR4buLbmggZGFuaCBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSBuZ2hpw6puIGPhu6l1Lg0KDQp0dHI6IFRo4budaSBnaWFuIMSR4bq/biBraGkgdMOhaSBwaMOhdCAodMOtbmggYuG6sW5nIG5nw6B5KS4NCg0KcmVsYXBzZTogQmnhur9uIG5o4buLIHBow6JuICgwIGhv4bq3YyAxKSBjaG8gYmnhur90IGxp4buHdSBuZ8aw4budaSB0aGFtIGdpYSBjw7MgdMOhaSBwaMOhdCBoYXkga2jDtG5nLg0KDQpncnA6IE5ow7NtIMSRaeG7gXUgdHLhu4ssIGfhu5NtIGPDoWMgZ2nDoSB0cuG7izogcGF0Y2hPbmx5IChjaOG7iSBkw7luZyBtaeG6v25nIGTDoW4pIHbDoCBjb21iaW5hdGlvbiAoa+G6v3QgaOG7o3AgY8OhYyBwaMawxqFuZyBwaMOhcCkuDQoNCmFnZTogVHXhu5VpIGPhu6dhIG5nxrDhu51pIHRoYW0gZ2lhLg0KDQpnZW5kZXI6IEdp4bubaSB0w61uaCBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSAoTWFsZSBob+G6t2MgRmVtYWxlKS4NCg0KcmFjZTogQ2jhu6duZyB04buZYyBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSAod2hpdGUgaG/hurdjIG5vbndoaXRlKS4NCg0KZW1wbG95bWVudDogVMOsbmggdHLhuqFuZyBjw7RuZyB2aeG7h2MgY+G7p2EgbmfGsOG7nWkgdGhhbSBnaWEgKGZ0IC0gbMOgbSB2aeG7h2MgdG/DoG4gdGjhu51pIGdpYW4sIHB0IC0gbMOgbSB2aeG7h2MgYsOhbiB0aOG7nWkgZ2lhbiwgb3RoZXIgLSBraMOhYykuDQoNCnllYXJzU21va2luZzogU+G7kSBuxINtIGjDunQgdGh14buRYy4NCg0KbGV2ZWxTbW9raW5nOiBN4bupYyDEkeG7mSBow7p0IHRodeG7kWMgKGhlYXZ5IC0gbuG6t25nLCBsaWdodCAtIG5o4bq5KS4NCg0KYWdlR3JvdXAyOiBOaMOzbSB0deG7lWkgY2hpYSB0aMOgbmggaGFpIG5ow7NtICgyMS00OSB2w6AgNTArKS4NCg0KYWdlR3JvdXA0OiBOaMOzbSB0deG7lWkgY2hpYSB0aMOgbmggYuG7kW4gbmjDs20gKDIxLTM0LCAzNS00OSwgNTAtNjQsIHbDoCA2NSspLg0KDQpwcmlvckF0dGVtcHRzOiBT4buRIGzhuqduIGPhu5EgZ+G6r25nIGNhaSB0aHXhu5FjIHRyxrDhu5tjIMSRw6J5Lg0KDQpsb25nZXN0Tm9TbW9rZTogS2hv4bqjbmcgdGjhu51pIGdpYW4gZMOgaSBuaOG6pXQga2jDtG5nIGjDunQgdGh14buRYyAodMOtbmggYuG6sW5nIG5nw6B5KS4gDQoNCuG7niDEkcOieSBjaMO6bmcgdGEgY2jhu4kgbOG6pXkgMyBiaeG6v24gxJHhu4MgcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgxJHhu4tuaCB0w61uaCBsw6AgcmVsYXBzZSwgZ2VuZGVyLCBncnANCmBgYCB7cn0NCmxpYnJhcnkoImdncGxvdDIiKQ0KbGlicmFyeSgiZGF0YS50YWJsZSIpDQpkYXRhIDwtIHJlYWQuY3N2KCJEb3dubG9hZHMvcGhhcm1hY29TbW9raW5nLmNzdiIpDQpkYXRhMDEgPC0gZGF0YS5mcmFtZShkYXRhJHJlbGFwc2UsZGF0YSRnZW5kZXIsZGF0YSRncnApDQpkYXRhLnRhYmxlKGRhdGEwMSkNCmBgYA0KDQojIGLhuqNuZyB04bqnbiBzdeG6pXQNCg0KYGBge3J9DQpsaWJyYXJ5KGRhdGEudGFibGUpDQpkYXRhIDwtIGZyZWFkKCJEb3dubG9hZHMvcGhhcm1hY29TbW9raW5nLmNzdiIpDQoNCiMgTOG6rXAgYuG6o25nIHThuqduIHPhu5EgY2hvIHThu6tuZyBiaeG6v24NCnJlbGFwc2VfdGFibGUgPC0gZGF0YVssIC5OLCBieSA9IHJlbGFwc2VdDQpwcmludCgiQuG6o25nIHThuqduIHPhu5EgY+G7p2EgYmnhur9uIHJlbGFwc2U6IikNCnByaW50KHJlbGFwc2VfdGFibGUpDQpwcmludCgiVHJvbmcgxJHDonkgMCBsw6Agc+G7kSBuZ8aw4budaSBraMO0bmcgdMOhaSBwaMOhdCBuZ2hp4buHbiB0aHXhu5FjIHbDoCAxIGzDoCB0w6FpIG5naGnhu4duLiBQaOG6p24gbOG7m24gbmfGsOG7nWkgdGhhbSBnaWEgbmdoacOqbiBj4bupdSDEkcOjIHTDoWkgcGjDoXQgc2F1IGtoaSBj4buRIGfhuq9uZyBjYWkgdGh14buRYyBsw6EsIGNo4buJIGPDsyBz4buRIMOtdCBuZ8aw4budaSBraMO0bmcgdMOhaSBwaMOhdC4iKQ0KDQpnZW5kZXJfdGFibGUgPC0gZGF0YVssIC5OLCBieSA9IGdlbmRlcl0NCnByaW50KCJC4bqjbmcgdOG6p24gc+G7kSBj4bunYSBiaeG6v24gZ2VuZGVyOiIpDQpwcmludChnZW5kZXJfdGFibGUpDQpwcmludCgiTmhp4buBdSBuZ8awxqFpIG7hu68gdGhhbSBnaWEgbmdoacOqbiBj4bupdSBoxqFuIGzDoCBsxrDhu6NuZyBuZ8aw4budaSBuYW0gIikNCg0KZ3JwX3RhYmxlIDwtIGRhdGFbLCAuTiwgYnkgPSBncnBdDQpwcmludCgiQuG6o25nIHThuqduIHPhu5EgY+G7p2EgYmnhur9uIGdycDoiKQ0KcHJpbnQoZ3JwX3RhYmxlKQ0KcHJpbnQoIlPhu5EgbmfGsOG7nWkgdGhhbSBnaWEgc+G7rSBk4bulbmcgcGjGsMahbmcgcGjDoXAgcGF0Y2hPbmx5IGNoaeG6v20gdOG7tyBs4buHIG5o4buJbmggaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSBuaMOzbSBz4butIGThu6VuZyBwaMawxqFuZyBwaMOhcCBr4bq/dCBo4bujcCIpDQoNCmBgYA0KIyB24bq9IMSR4buTIHRo4buLIA0KIyMgYmnhur9uIHJlbGFwc2UgDQpgYGB7cn0NCiMgVuG6vSDEkeG7kyB0aOG7iyB0aGFuaCBjaG8gYmnhur9uIHJlbGFwc2UNCmdncGxvdChkYXRhLCBhZXMoeD1mYWN0b3IocmVsYXBzZSkpLCkgKyANCiAgZ2VvbV9iYXIoY29sb3IgPSJyZWQiKSArDQogIGxhYnModGl0bGU9IsSR4buTIHRo4buLIGJp4bq/biByZWxhcHNlICIsIHg9IlJlbGFwc2UiLCB5PSJDb3VudCIpDQoNCmBgYA0KDQojIyBiaeG6v24gZ2VuZGVyIA0KYGBge3J9DQpnZ3Bsb3QoZGF0YSwgYWVzKHg9Z2VuZGVyKSkgKyANCiAgZ2VvbV9iYXIoZmlsbCA9ICJyZWQiKSArDQogIGxhYnModGl0bGU9IsSQ4buTIHRo4buLIGJp4bq/biBnZW5kZXIgIiwgeD0iR2VuZGVyIiwgeT0iQ291bnQiKQ0KYGBgDQoNCiMjIGJp4buDdSDEkeG7kyBncnAgDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEsIGFlcyh4PWdycCkpICsgDQogIGdlb21fYmFyKCkgKw0KICBsYWJzKHRpdGxlPSJGcmVxdWVuY3kgb2YgZ3JwIiwgeD0iZ3JwIiwgeT0iQ291bnQiKQ0KDQpgYGANCiMgxrDhu5tjIGzGsOG7o25nIHThu7cgbOG7hyANCg0KxrDhu5tjIGzGsOG7o25nIHThu7cgbOG7hyByZWxhcHNlIHZzIGdlbmRlciANCg0KYGBge3J9DQpsaWJyYXJ5KERlc2NUb29scykNCmEgPC0gdGFibGUoZGF0YSRyZWxhcHNlLGRhdGEkZ2VuZGVyKQ0KYWRkbWFyZ2lucyhhKQ0KYGBgDQoNCsaw4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgcmVsYXBzZSB24bubaSBncnANCmBgYHtyfQ0KbGlicmFyeShEZXNjVG9vbHMpDQpiIDwtIHRhYmxlKGRhdGEkcmVsYXBzZSxkYXRhJGdycCkNCmFkZG1hcmdpbnMoYikNCmBgYA0KDQrGsOG7m2MgbMaw4bujbmcgdOG7tyBs4buHIGdlbmRlciB2cyBncnAgDQpgYGB7cn0NCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KYyA8LSB0YWJsZShkYXRhJGdycCxkYXRhJGdlbmRlcikNCmFkZG1hcmdpbnMoYykNCmBgYA0KIyDGr+G7m2MgbMaw4bujbmcgUmVsYXRpdmUgUmlzaw0KDQpgYGB7cn0NClJlbFJpc2soYSkNCmBgYA0KwqDCoMKgwqDCoFThu7cgbOG7hyB0w6FpIHBow6F0IOG7nyBuYW0gZ2nhu5tpIHRo4bqlcCBoxqFuIHNvIHbhu5tpIG7hu68gZ2nhu5tpIChSUiA8IDEpLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBuYW0gZ2nhu5tpIGPDsyBraOG6oyBuxINuZyB0w6FpIHBow6F0IHRo4bqlcCBoxqFuIG7hu68gZ2nhu5tpIHNhdSBraGkgY+G7kSBn4bqvbmcgY2FpIHRodeG7kWMgbMOhLg0KDQpgYGB7cn0NCnRhYmxlKGRhdGEkcmVsYXBzZSxkYXRhJGdlbmRlcikNCmBgYA0KwqDCoMKgwqDCoCDGsOG7m2MgbMaw4bujbmcgcmVsYXRpdmUNCmBgYHtyfQ0KbSA8LSBtYXRyaXgoYygyMCwgNjEsIDE2LCAyOCksIG5yb3cgPSAyKQ0KUmVsUmlzayhtLCBjb25mLmxldmVsID0gLjk1KQ0KYGBgDQpSZWxhdGl2ZSBSaXNrIChSUikgPSAwLjgxMDY6DQoNClThu7cgbOG7hyB0w6FpIHBow6F0IOG7nyBuYW0gZ2nhu5tpIHRo4bqlcCBoxqFuIHNvIHbhu5tpIG7hu68gZ2nhu5tpLg0KQ+G7pSB0aOG7gywgbmFtIGdp4bubaSBjw7Mga2jhuqMgbsSDbmcgdMOhaSBwaMOhdCBzYXUga2hpIGPhu5EgZ+G6r25nIGNhaSB0aHXhu5FjIGzDoSB0aOG6pXAgaMahbiBraG/huqNuZyAxOSUgc28gduG7m2kgbuG7ryBnaeG7m2kuDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIChDSSkgPSAoMC41NjQzLCAxLjA4MzkpOg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY2hvIHRo4bqleSBy4bqxbmcgduG7m2kgxJHhu5kgdGluIGPhuq15IDk1JSwgdOG7tyBs4buHIHTDoWkgcGjDoXQg4bufIG5hbSBnaeG7m2kgc28gduG7m2kgbuG7ryBnaeG7m2kgY8OzIHRo4buDIGRhbyDEkeG7mW5nIHThu6sgNTYuNDMlIMSR4bq/biAxMDguMzklDQouDQpWw6wga2hv4bqjbmcgdGluIGPhuq15IGNo4bupYSBnacOhIHRy4buLIDEgKHThu6ljIGzDoCAxIG7hurFtIHRyb25nIGtob+G6o25nIENJKSwga2jDtG5nIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBraOG6s25nIMSR4buLbmggcuG6sW5nIHThu7cgbOG7hyB0w6FpIHBow6F0IOG7nyBuYW0gdsOgIG7hu68gY8OzIHPhu7Ega2jDoWMgYmnhu4d0IMSRw6FuZyBr4buDIHbhu4EgbeG6t3QgdGjhu5FuZyBrw6ouDQoNCg0KYGBge3J9DQp0YWJsZShkYXRhJHJlbGFwc2UsZGF0YSRncnApDQpgYGANCg0KYGBge3J9DQpuIDwtIG1hdHJpeChjKDI0LCAzNywxMiw1MiksIG5yb3cgPSAyKQ0KUmVsUmlzayhuLCBjb25mLmxldmVsID0gLjk1KQ0KYGBgDQoNClJlbGF0aXZlIFJpc2sgKFJSKSA9IDEuNjA0Og0KDQpU4bu3IGzhu4cgdMOhaSBwaMOhdCBj4bunYSBuaMOzbSBwYXRjaE9ubHkgY2FvIGjGoW4gbmjDs20gY29tYmluYXRpb24uDQoNCkPhu6UgdGjhu4MsIG5ow7NtIHPhu60gZOG7pW5nIHBoxrDGoW5nIHBow6FwIHBhdGNoT25seSBjw7Mga2jhuqMgbsSDbmcgdMOhaSBwaMOhdCBzYXUga2hpIGPhu5EgZ+G6r25nIGNhaSB0aHXhu5FjIGzDoSBjYW8gaMahbiBraG/huqNuZyA2MC40JSBzb3bhu5tpIG5ow7NtIHPhu60gZOG7pW5nIHBoxrDGoW5nIHBow6FwIGNvbWJpbmF0aW9uLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIChDSSkgPSAoMS4xMjIsIDIuMjMxKToNCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyB0aOG6pXkgcuG6sW5nIHbhu5tpIMSR4buZIHRpbiBj4bqteSA5NSUsIHThu7cgbOG7hyB0w6FpIHBow6F0IGPhu6dhIG5ow7NtIHBhdGNoT25seSBzbyB24bubaSBuaMOzbSBjb21iaW5hdGlvbiBkYW8gxJHhu5luZyB04burIDEuMTIyICgxMTIuMiUpIMSR4bq/biAyLjIzMSAoMjIzLjElKS4NCg0KVsOsIGtob+G6o25nIHRpbiBj4bqteSBraMO0bmcgY2jhu6lhIGdpw6EgdHLhu4sgMSAodOG7qWMgbMOgIDEga2jDtG5nIG7hurFtIHRyb25nIGtob+G6o25nIENJKSwgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgdOG7tyBs4buHIHTDoWkgcGjDoXQg4bufIGhhaSBuaMOzbSBuw6B5IGPDsyBz4buxIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gyB24buBIG3hurd0IHRo4buRbmcga8OqLg0KDQojIMav4bubYyBsxrDhu6NuZyBPZGQgcmF0aW8gDQoNCkJp4bq/biByZWxhcHNlIHbhu5tpIGJp4bq/biBnZW5kZXIgDQpgYGB7cn0NCk9kZHNSYXRpbyhhLCBjb25mLmxldmVsID0gLjk1KQ0KYGBgDQpHacOhIHRy4buLIE9SIDwgMTogT2RkcyBj4bunYSB0w6FpIHBow6F0IOG7nyBuYW0gZ2nhu5tpIHRo4bqlcCBoxqFuIHNvIHbhu5tpIG7hu68gZ2nhu5tpLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNo4bupYSBnacOhIHRy4buLIDE6IEtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgduG7gSBt4bq3dCB0aOG7kW5nIGvDqiBnaeG7r2Egb2RkcyBj4bunYSB0w6FpIHBow6F0IOG7nyBuYW0gdsOgIG7hu68uDQoNCkvhur90IGx14bqtbjogTeG6t2MgZMO5IGvhur90IHF14bqjIGNobyB0aOG6pXkgb2RkcyBj4bunYSB0w6FpIHBow6F0IOG7nyBuYW0gZ2nhu5tpIHRo4bqlcCBoxqFuIHNvIHbhu5tpIG7hu68gZ2nhu5tpLCBz4buxIGtow6FjIGJp4buHdCBuw6B5IGtow7RuZyDEkeG7pyBs4bubbiDEkeG7gyBr4bq/dCBsdeG6rW4gcuG6sW5nIGdp4bubaSB0w61uaCBjw7Mg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIG9kZHMgY+G7p2EgdMOhaSBwaMOhdCBzYXUga2hpIGPhu5EgZ+G6r25nIGNhaSB0aHXhu5FjIGzDoS4gxJBp4buBdSBuw6B5IHTGsMahbmcgdOG7sSBuaMawIHBow6JuIHTDrWNoIHJlbGF0aXZlIHJpc2ssIGPhuqduIHRow6ptIGPDoWMgbmdoacOqbiBj4bupdSB24bubaSBrw61jaCB0aMaw4bubYyBt4bqrdSBs4bubbiBoxqFuIGhv4bq3YyBraeG7g20gdHJhIHRow6ptIGPDoWMgeeG6v3UgdOG7kSBraMOhYyDEkeG7gyBjw7Mga+G6v3QgbHXhuq1uIGNow61uaCB4w6FjIGjGoW4uDQoNCiMjYmnhur9uIHJlbGFwc2UgduG7m2kgYmnhur9uIGdycCANCg0KYGBge3J9DQpPZGRzUmF0aW8oYiwgY29uZi5sZXZlbCA9IC45NSkNCmBgYA0KR2nDoSB0cuG7iyBPUiA+IDE6IE9kZHMgY+G7p2EgdMOhaSBwaMOhdCB0cm9uZyBuaMOzbQ0KcGF0Y2hPbmx5IGNhbyBoxqFuIHNvIHbhu5tpIG5ow7NtIGNvbWJpbmF0aW9uLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGtow7RuZyBjaOG7qWEgZ2nDoSB0cuG7iyAxOiBT4buxIGtow6FjIGJp4buHdCB24buBIG9kZHMgY+G7p2EgdMOhaSBwaMOhdCBnaeG7r2EgaGFpIG5ow7NtIGzDoCDEkcOhbmcga+G7gyB24buBIG3hurd0IHRo4buRbmcga8OqLg0KDQpL4bq/dCBsdeG6rW46IE5o4buvbmcgbmfGsOG7nWkgc+G7rSBk4bulbmcgcGjGsMahbmcgcGjDoXAgxJFp4buBdSB0cuG7iyBwYXRjaE9ubHkgY8OzIG9kZHMgY+G7p2EgdMOhaSBwaMOhdCBjYW8gaMahbiByw7UgcuG7h3Qgc28gduG7m2kgbmjhu69uZyBuZ8aw4budaSBz4butIGThu6VuZyBwaMawxqFuZyBwaMOhcCBjb21iaW5hdGlvbi4gxJBp4buBdSBuw6B5IGNo4buJIHJhIHLhurFuZyB2aeG7h2Mga+G6v3QgaOG7o3Agbmhp4buBdSBwaMawxqFuZyBwaMOhcCDEkWnhu4F1IHRy4buLIGPDsyB0aOG7gyBnacO6cCBnaeG6o20gb2RkcyBj4bunYSB0w6FpIHBow6F0IGtoaSBjYWkgdGh14buRYyBsw6EuIFBoxrDGoW5nIHBow6FwIMSRaeG7gXUgdHLhu4sgY29tYmluYXRpb24gY8OzIHbhursgbMOgIGhp4buHdSBxdeG6oyBoxqFuIHRyb25nIHZp4buHYyBnaeG6o20gdOG7tyBs4buHIHTDoWkgcGjDoXQuDQoNCg0KDQoNCg0K