NHIỆM VỤ 3.1


1. TỔNG QUAN

Bộ dữ liệu population-and-demography.csv: là một bộ dữ liệu mô tả dân số của các quốc gia và khu vực trên thế giới trong những năm từ 1950 đến 2021 Bộ dữ liệu được lưu trữ dưới hình thức file csv, để đọc và mô tả chi tiết về bộ dữ liệu ta thực hiện các câu lệnh sau:

library(csv) #gọi package csv 
nth <- read.csv(file='C:/Users/Admin/Downloads/population-and-demography.csv') #đọc dữ liệu từ file csv 
library(skimr) #gọi package 
skim(nth) #mô tả thông tin chi tiết bộ dữ liệu
Data summary
Name nth
Number of rows 18288
Number of columns 24
_______________________
Column type frequency:
character 1
numeric 23
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Country.name 0 1 4 59 0 254 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Year 0 1 1985.50 20.78 1950 1967.75 1985.5 2003.25 2021 ▇▇▇▇▇
Population 0 1 126470436.62 588851230.77 1363 291591.50 3833997.5 16785463.50 7909295000 ▇▁▁▁▁
Population.of.children.under.the.age.of.1 0 1 3133496.86 14167006.03 25 6663.75 88352.0 463000.50 139783730 ▇▁▁▁▁
Population.of.children.under.the.age.of.5 0 1 14825709.57 67384368.62 136 31995.25 423784.5 2160046.50 690360700 ▇▁▁▁▁
Population.of.children.under.the.age.of.15 0 1 41095227.11 188416973.54 416 89541.50 1186121.5 5905944.75 2015023400 ▇▁▁▁▁
Population.under.the.age.of.25 0 1 63762600.31 294251869.66 623 139541.50 1843099.5 9025129.75 3239281000 ▇▁▁▁▁
Population.aged.15.to.64.years 0 1 77429505.08 367651914.71 748 170263.50 2246772.0 9641250.00 5132999000 ▇▁▁▁▁
Population.older.than.15.years 0 1 85372101.76 404866940.61 849 186716.00 2482104.0 10354345.50 5893678600 ▇▁▁▁▁
Population.older.than.18.years 0 1 78196242.04 372017010.49 752 166417.50 2238130.5 9239904.00 5516283000 ▇▁▁▁▁
Population.at.age.1 0 1 3011212.81 13661998.41 26 6473.75 85824.0 440787.50 138478740 ▇▁▁▁▁
Population.aged.1.to.4.years 0 1 11692212.72 53238243.89 101 25269.25 334454.0 1697850.75 550970400 ▇▁▁▁▁
Population.aged.5.to.9.years 0 1 13598575.21 62534310.11 138 29406.25 392220.5 1947260.75 683611800 ▇▁▁▁▁
Population.aged.10.to.14.years 0 1 12670942.28 58775457.46 73 27879.50 363895.5 1796754.00 659934300 ▇▁▁▁▁
Population.aged.15.to.19.years 0 1 11782258.92 55126036.18 110 26296.50 336969.5 1626210.75 623576060 ▇▁▁▁▁
Population.aged.20.to.29.years 0 1 20872880.04 98860990.50 158 45050.75 609723.5 2758738.50 1210493200 ▇▁▁▁▁
Population.aged.30.to.39.years 0 1 17158704.11 82404600.95 137 36608.25 486290.5 2113149.00 1165207300 ▇▁▁▁▁
Population.aged.40.to.49.years 0 1 13622138.99 66008221.21 119 27440.25 364712.5 1556334.00 976407200 ▇▁▁▁▁
Population.aged.50.to.59.years 0 1 10177069.11 49288480.77 95 19649.75 264781.5 1203386.00 851356900 ▇▁▁▁▁
Population.aged.60.to.69.years 0 1 6801756.84 32712918.99 64 12603.00 168417.5 845242.75 598067140 ▇▁▁▁▁
Population.aged.70.to.79.years 0 1 3618710.03 17491538.61 31 6221.00 81824.0 436710.00 330491170 ▇▁▁▁▁
Population.aged.80.to.89.years 0 1 1195799.30 6238308.33 6 1818.75 20269.5 133380.50 131835590 ▇▁▁▁▁
Population.aged.90.to.99.years 0 1 142784.38 853350.39 0 154.75 1468.5 12499.00 22223974 ▇▁▁▁▁
Population.older.than.100.years 0 1 3107.72 20951.57 0 0.00 13.0 163.00 593166 ▇▁▁▁▁

Các câu lệnh trên cho ta kết quả chi tiết về bộ dữ liệu trong đó:

  • Bộ dữ liệu gồm 18288 quan sát và 24 biến: chi tiết các biến
    • Country name: tên đất nước
    • Year: năm thống kê
    • Population: tổng dân số
    • Population of children under the age of 1: dân số có độ tuổi nhỏ hơn 1
    • Population of children under the age of 5: dân sô có độ tuổi dưới 5
    • Population of children under the age of 15: dân số có độ tuổi dưới 15
    • Population under the age of 25: dân số có độ tuổi dưới 15
    • Population aged 15 to 64 years: dân số có độ tuổi từ 15 đến 64
    • Population older than 15 years: dân số có độ tuổi trên 15
    • Population older than 18 years: dân số có độ tuổi trên 18
    • Population at age 1: dân số tại độ tuổi 1
    • Population aged 1 to 4 years: dân số có độ tuổi từ 1 đến 4
    • Population aged 5 to 9 years: dân số có độ tuổi từ 5 đến 99
    • Population aged 10 to 14 years: dân số có độ tuổi từ 10 đến 14
    • Population aged 15 to 19 years: dân số có độ tuổi từ 15 đến 19
    • Population aged 20 to 29 years: dân số có độ tuổi từ 20 đến 29
    • Population aged 30 to 39 years: dân số có độ tuổi từ 30 đến 39
    • Population aged 40 to 49 years: dân số có độ tuổi từ 40 đến 49
    • Population aged 50 to 59 years: dân số có độ tuổi từ 50 đến 59
    • Population aged 60 to 69 years: dân số có độ tuổi từ 60 đến 69
    • Population aged 70 to 79 years: dân số có độ tuổi từ 70 đến 79
    • Population aged 80 to 89 years: dân số có độ tuổi từ 80 đến 89
    • Population aged 90 to 99 years: dân số có độ tuổi từ 90 đến 99
    • Population older than 100 years: dân số có độ tuổi trên 100
  • Thông tin mô tả bộ dữ kiệu có các cột sau và ý nghĩa các cột là:
    • skim_variable: tên biến
    • n_missing: số dữ liệu trống
    • complete_rate: tỉ lệ biến có dữ liệu
    • mean: giá trị trung bình của biến
    • sd: độ lệch chuẩn cảu biến
    • p0: giá trị NN
    • p25: phân vị thứ nhất
    • p50: phân vị thứ hai(trung vị)
    • p75: phân vị thứ ba
    • p100: giá trị LN
    • his: biểu đồ histogram

2. CÁC THAO TÁC HỖ TRỢ PHÂN TÍCH DỮ LIỆU

population-and-demography.csv mang một dữu liệu lớn. Do đó khi phân tích thông tin về một vấn đề quan tâm, ta thực hiện các thao tác sau:

1. Đổi tên biến:

library(tidyverse) # gọi packsge tidyverse dùng để sử dụng toán tử pipe %>%
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
nth <- nth %>% rename( 'count'= Country.name, 'Y'= Year, 'pop'= Population, 'p10to14'= Population.aged.10.to.14.years,'p15to19'= Population.aged.15.to.19.years,'p20to29'= Population.aged.20.to.29.years, 'p30to39'=Population.aged.30.to.39.years, 'p40to49'=Population.aged.40.to.49.years, )

=> Câu lệnh trên trả cho ta kết quả về: đổi tên các biến

Country.name

Year

Population

Population.aged.10.to.14.years

Population.aged.15.to.19.years

Population.aged.20.to.29.years

Population.aged.30.to.39.years

Population.aged.40.to.49.years

thành các biến có tên lần lượt như sau:

count

Y

pop

p10to14

p15to19

p20to29

p30to39

p40to49

2. Rút trích dữ liệu:

library(tidyverse) # gọi packsge tidyverse dùng để sử dụng toán tử pipe %>%
nth1 <-nth %>% select(count, Y, pop, p10to14, p15to19, p20to29, p30to39, p40to49 ) #1 
nth1 <- nth1[nth1$Y==2000| nth1$Y==2004, ] #2 
nth2<- nth1[nth1$count=='Vietnam' | nth1$count=='China' | nth1$count=='India' | nth1$count=='South Korea'| nth1$count=='Afghanistan', ] #3 

=> Kết quả trả về:

  1. nth1= chọn ra các cột ‘count, Y, pop, p10to14, p15to19, p20to29, p30to39, p40to49’ trong data nth để phân tích

  2. nth1= chỉ lấy dữ liệu năm 2000 và năm 2004 thuộc biến ‘Y’ trong data nth1

  3. nth2= chỉ lấy các nước ‘Vietnam’, ‘China’, ‘India’, ‘South Korea’, ‘Afghanistan’ thuộc biến ‘count’ trong data nth1 để phân tích

=> Từ đó ta có bảng Data nth2 mới về thống kê dân số của các nước Việt Nam, Trung Quốc, Ấn Độ, Hàn, Afghanistan trong năm 2000 và 2004 về các độ tuổi từ 10 đến 40 tuổi

3. Mã hóa dữ liệu:

Để dễ dàng hơn trong việc phân tích các dữ liệu về dân số, chúng ta sử dụng các lệnh về mã hóa dữ liệu. Các thao tác mã hóa dữ liệu giúp chúng ta chuyển đổi từ dữ liệu dạng này sang một dạng mới.

(sử dụng bảng data nth2)

nth2$p10to14.cc <- ifelse(nth2$p10to14 > 0.1*nth2$pop, 'dân số trẻ', 'dân số già') #1
nth2$pop.sl <- ifelse(nth2$pop>50000000, 'đông đúc', 'thưa thớt' ) #2
nth2$pop.sl1 <- case_when(nth2$pop < 50000000 ~ 'thấp', nth2$pop >= 50000000 & nth2$pop < 100000000 ~ 'trung bình ', nth2$pop > 100000000 ~ 'cao' ) #3
nth2$pop.sl2 <- cut(nth2$pop, breaks = c(0, 50000000,100000000, 10000000000), labels= c('kv1', 'kv2', 'kv3')) #4

=> Các câu lệnh trên hiện kết quả về dữ liệu dân số như sau: sử dụng data nth2 đã được rút trích

  1. cột biến mới mang tên p10to14.cc: sử dụng lệnh ifelse-> cho kết quả dân số trẻ nếu giá trị biến p10to14 lớn hơn 0.1 lần biến pop, các trường hợp còn lại cho ra kết quả dân số già.

  2. cột biến mới mang tên pop.sl: là cột biến chỉ mật độ dân số đông đúc hoặc thưa thớt. Sử dụng lệnh ifelse->cho kết quả đông đúc nếu tổng dân số (biến pop) lớn hơn 50000000, còn lại cho ra kq thưa thớt.

  3. cột biến mới pop.sl1 sử dụng hàm case_when hỗ trợ mã hóa dữ liệu nhiều hơnn 2: nếu giá trị biến pop bé hơn 50000000 thì cho ra kq thấp, nếu giá trị biến pop lớn hơn hoặc bằng 50000000 và nhỏ hơn 100000000 thì cho kq là trung bình, còn nếu giá trị biến pop lớn hơn 100000000 thì cho ra kq cao.

  4. pop.sl2 là cột biến mới dử dụng hàm cut dùng để chia dữ liệu theo biến pop thành 3 tổ theo từng khoảng giá trị sau: từ 0 đến 50.000.000 là kv1, từ 50.000.000 đến 100.000.000 là kv2, từ 100.000.000 đến 1.000.000.000 là kv3.

4. Lập bảng tần số

  1. Bảng tần số một biến với câu lệnh table() cho ta biết tần suất xuất hiện một biến nào đó trong data, giúp cho quá trình phân tích dễ dàng thống kê đc một lượng dữ liệu khổng lồ thành bảng dữ liệu ngắn gọn.

(sử dụng bảng data nth)

cut(nth$pop,3)
table(cut(nth$pop,3))
## 
## (-7.91e+06,2.64e+09]  (2.64e+09,5.27e+09]  (5.27e+09,7.92e+09] 
##                18024                  209                   55

=> Giải thích kết quả:

  • Sử dụng hàm cut() để chia dữ liệu trong biến tổng dân số pop thuộc data nth thành 3 nhóm theo số dân là: (-7.91e+06,2.64e+09], (2.64e+09,5.27e+09], (5.27e+09,7.92e+09]

  • sử dụng table() để thống kê tần suất xuất hiện của các nhóm dân số trên: (-7.91e+06,2.64e+09] xuất hiện với 18024 quan sát, (2.64e+09,5.27e+09] xuất hiện với 209 quan sát, (5.27e+09,7.92e+09] xuất hiện với 55 quan sát.

  1. Bảng tần số nhiều biến với câu lệnh group_by cho phép lập bảng với nhiều biến cùng lúc.(sử dụng bảng data nth2)
ntht <- nth2 %>% group_by(Y, count, pop.sl2) %>% summarise(n= n(), .groups = 'drop')
ntht
## # A tibble: 10 × 4
##        Y count       pop.sl2     n
##    <int> <chr>       <fct>   <int>
##  1  2000 Afghanistan kv1         1
##  2  2000 China       kv3         1
##  3  2000 India       kv3         1
##  4  2000 South Korea kv1         1
##  5  2000 Vietnam     kv2         1
##  6  2004 Afghanistan kv1         1
##  7  2004 China       kv3         1
##  8  2004 India       kv3         1
##  9  2004 South Korea kv1         1
## 10  2004 Vietnam     kv2         1

=> Bảng tấn số với lệnh trên cho ra tần suất dữ liệu của các biến ‘count’, ‘Y’, ‘pop.sl2’. Câu lệnh summarise(n= n() cho ra số n tần suất của dữ liệu và .groups = ‘drop’ giúp chia nhóm dữ liệu

5. Tính toán các đặc trưng đo lường

Sử dụng bảng data nth1 để thực hiện các thao tác đo lường dữ liệu

summary(nth1$pop)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 1.535e+03 4.285e+05 5.165e+06 1.609e+08 2.305e+07 6.476e+09

=>Hàm summary() cho ta được những dữ liệu sau:

  • min = 1.535e+03: giá trị bé nhất của biến pop
  • 1st Qu. = 4.285e+05: có 25% dữ liệu bé hơn giá trị 4.285e+05( hay có 75% dữ liệu lớn hơn giá trị 4.285e+05)
  • Median = 5.165e+06: trung vị của biến pop( hay có 50% giá trị nhỏ hơn và 50% giá trị lớn hơn 5.165e+06)
  • Mean = 1.609e+08: giá trị trung bình của biến pop
  • 3rd Qu. = 2.305e+07: có 25% dữ liệu lớn hơn giá trị 2.305e+07( hay có 75% dữ liệu bé hơn giá trị 2.305e+07)
  • Max = 6.476e+09: giá trị lướn nhất cảu biến pop
sum(nth1$pop) 
## [1] 81732823919

=> Hàm sum() chỉ tổng giá trị của biến pop

mean(nth1$pop,na.rm = T) 
## [1] 160891386

=> Hàm mean() trả kết quả là giá trị trung bình của biến với na.rm = T để bỏ đi những giá trị không phù hợp

length(nth1$pop)
## [1] 508

=> length() độ dài biến pop hay đếm số quan sát trong biến

var(nth1$pop)
## [1] 5.045458e+17

=> Hàm var() chỉ phương sai của biến (hay bình phương độ lệch chuẩn ~ độ biến động, thay đổi, chênh lệch,…)

sd(nth$pop)
## [1] 588851231

=> Hàm sd() là độ lệc chuẩn (căn của phương sai)

median(nth1$pop)
## [1] 5165499

=> Hàm median() trả kết quả là trung vị của biến (hay có 50% giá trị nhỏ hơn và 50% giá trị lớn hơn giá trị biến đó)

quantile(nth1$pop, probs = c(.3,.6,.9))
##         30%         60%         90% 
##    818994.3   8889042.8 124037545.2

=> Hàm phân vị: bộ dữ liệu biến pop có giá trị:

  • quantile_{30%}=818994.3 nghĩa là có 30% dữ liệu có giá trị bé hơn 818994.3

  • quantile_{60%}=8889042.8 nghĩa là có 60% dữ liệu có giá trị bé hơn 8889042.8

  • quantile_{90%}=124037545.2 nghĩa là có 90% dữ liệu có giá trị bé hơn 124037545.2

6. Tính toán các đặc trưng đo lường theo nhóm

=> Đây là các câu lệnh tính toán các đặc trưng đo lường theo hai hoặc nhiều biến( hay gọi là theo nhóm)

tn <- nth %>% group_by(Y) %>% summarise(meanofpop= mean(pop))
tn
## # A tibble: 72 × 2
##        Y meanofpop
##    <int>     <dbl>
##  1  1950 60829433.
##  2  1951 61935622.
##  3  1952 63125733.
##  4  1953 64387245.
##  5  1954 65692705.
##  6  1955 67059890.
##  7  1956 68452221.
##  8  1957 69895388.
##  9  1958 71372168.
## 10  1959 72758739.
## # ℹ 62 more rows

=> Giải thích các câu lệnh trên như sau:

  • tn = giá trị trung bình của tổng dân số (biến pop) theo năm (biến Y)
tn1 <- nth %>% group_by(Y) %>% summarise(n = n(),medofpop= median(pop))
tn1
## # A tibble: 72 × 3
##        Y     n medofpop
##    <int> <int>    <dbl>
##  1  1950   254 2077509 
##  2  1951   254 2151493 
##  3  1952   254 2221408 
##  4  1953   254 2279917 
##  5  1954   254 2317102.
##  6  1955   254 2334936 
##  7  1956   254 2352930.
##  8  1957   254 2371338.
##  9  1958   254 2390104 
## 10  1959   254 2410098.
## # ℹ 62 more rows

=> Giải thích các câu lệnh trên như sau:

  • tn1 = trung vị của tổng dân số (biến pop) theo năm (biến Y) trong đó n=n() cho biết số lần năm đó xuất hiện ( hay chính là tổng số quốc gia, khu vực )
tn2 <- nth %>% group_by(count) %>% summarise(meanofpop= mean(pop))
tn2
## # A tibble: 254 × 2
##    count                meanofpop
##    <chr>                    <dbl>
##  1 Afghanistan          16640671.
##  2 Africa (UN)         643444771.
##  3 Albania               2632759.
##  4 Algeria              23456439.
##  5 American Samoa          39194.
##  6 Andorra                 43576.
##  7 Angola               13175864.
##  8 Anguilla                 8906.
##  9 Antigua and Barbuda     68605.
## 10 Argentina            30799573.
## # ℹ 244 more rows
tn3 <- nth %>% group_by(Y,count) %>% summarise(meanofpop= mean(pop),.groups = 'drop')
tn3
## # A tibble: 18,288 × 3
##        Y count               meanofpop
##    <int> <chr>                   <dbl>
##  1  1950 Afghanistan           7480464
##  2  1950 Africa (UN)         227549260
##  3  1950 Albania               1252587
##  4  1950 Algeria               9019866
##  5  1950 American Samoa          19057
##  6  1950 Andorra                  6028
##  7  1950 Angola                4478186
##  8  1950 Anguilla                 5036
##  9  1950 Antigua and Barbuda     45456
## 10  1950 Argentina            17017748
## # ℹ 18,278 more rows

=> Giải thích các câu lệnh trên như sau:

  • tn = giá trị trung bình của tổng dân số (biến pop) theo năm (biến Y)

  • tn1 = trung vị của tổng dân số (biến pop) theo năm (biến Y)

  • tn2 = giá trị trung bình của tổng dân số (biến pop) theo từng quốc gia hay khu vực (biến Y)

  • tn3 = giá trị trung binh của tổng dân số (biến pop) theo từng năm của từng quốc (biến Y, count)


NHIỆM VỤ 3.2 BẢNG PHÂN TÍCH VỀ TÌNH HÌNH SẢN XUẤT NÔNG NGHIỆP CỦA ẤN ĐỘ


MỤC TIÊU PHÂN TÍCH

Phân tích tình hình sản xuất nông nghiệp ở Ấn Độ đòi hỏi sự chú ý đến một số mục tiêu quan trọng để hiểu rõ về thị trường nông nghiệp của quốc gia này. Dưới đây là một số mục tiêu quan trọng cần chú ý:

  • Đánh giá mức độ hiệu quả của sản xuất nông nghiệp

  • Nghiên cứu về sự ảnh hưởng của các yếu tố như thời tiết, chất dinh dưỡng đất, và kỹ thuật canh tác đối với năng suất. Nghiên cứu sự phân bố đất đai ở Ấn Độ, cũng như đánh giá hiệu quả sử dụng đất đai trong nông nghiệp.

  • Xem xét ảnh hưởng của nông nghiệp đối với môi trường và phát triển các biện pháp bảo vệ môi trường trong sản xuất nông nghiệp.

PHƯƠNG PHÁP NGHIÊN CỨU

Sử dụng các phương pháp thống kê mô tả dữ liệu:

  • Rút trích dữ liệu

  • Mã hóa dữ liệu

  • Lập bảng tần số

  • Tính toán các đặc trưng đo lường

  • Nhận xét kết quả

BỘ DỮ LIỆU

Bộ dữ liệu về tình hình nông nghiệp của Ấn Độ trong những năm cuối TK 19 đến nay. Dữ liệu được tải về từ Dataset Search

1. Tổng quan về nông nghiệp Ấn Độ

Nằm ở khu vực Tây Nam Á, Ấn Độ có diện tích tự nhiên gần 33 triệu km2, trong đó, diện tích đất nông nghiệp là 141,23 triệu ha với dân số trên 1 tỉ người, có truyền thống văn hóa, lịch sử lâu đời và thế mạnh về phát triển nông nghiệp. Lục địa này có những đồng bằng rộng lớn mà không một quốc gia nào trên thế giới có được. Chỉ riêng đồng bằng Ấn - Hằng, diện tích khoảng 775.000 km2 (gấp 2,3 lần diện tích Việt Nam) với điều kiện tự nhiên thuận lợi đã tạo nên vùng kinh tế trù phú.

Sau đây là dữ liệu về nền nông nghiệp của Ấn Độ đã được tải về

library(csv)
d <- read.csv(file= 'C:/Users/Admin/Downloads/India Agriculture Crop Production.csv')

Bảng dữ liệu cho ta biết các thông tin sau:

  • State: Bang ở Ấn Độ
  • DiDistrict: tên một thị xã, thị trấn hay thành phố… thuộc bang nào đó ở Ấn Độ
  • Crop: tên nông sản sản xuất
  • Year: năm phân tích
  • Season: mùa vụ
  • Area: diện tích trồng trọt, sản xuất
  • Area.Units: đơn vị diện tích trồng trọt sản xuất (hectare)
  • Production: sản lượng
  • Production.Units: đơn vị sản lượng (tấn)
  • Yiels: năng suất

2. Phân tích tổng quan về tình hình nông nghiệp

Ngành nông nghiệp là nguồn sinh kế chính của khoảng 58% dân số Ấn Độ. Mặc dù đóng góp của nó vào tổng sản phẩm quốc nội (GDP) đã giảm xuống dưới 20% và đóng góp của các ngành khác tăng với tốc độ nhanh hơn.

Bảng dữ liệu tổng quan trong năm 2020-2021 của nông sản ở Ấn Độ

library(flextable)
## 
## Attaching package: 'flextable'
## The following object is masked from 'package:purrr':
## 
##     compose
library(DT)
library(tidyverse)
d1 <- d[d$Year=='2020-21', ]
d1 <- d1 %>% select(-c('Area.Units', 'Production.Units'))
datatable(d1)

Sản lượng

Theo FAO (2020), Ấn Độ là nhà sản xuất gừng và đậu bắp lớn nhất trong số các loại rau và đứng thứ hai về sản xuất khoai tây, hành tây, súp lơ, brinjal và cải bắp. Và đây là bảng thống kê tổng sản lương theo từng loại nông sản năm 2020-2021 như sau:

library(tidyverse)
d1.s <- d1 %>% group_by(Crop) %>% summarise( tongSL = sum(Production))
datatable(d1.s)

Và cũng như Việt Nam, Ấn Độ cũng là một trong những nước sản xuất gạo lớn trên thế giới. Nhu cầu lớn về gạo trên thị trường toàn cầu đang tạo ra một môi trường tuyệt vời cho việc xuất khẩu các sản phẩm gạo của Ấn Độ.

Sản lượng gạo chiếm thị phần cao trong các loại nông sản của Ấn Độ với năng suất trung bình gần 2.4 tấn/ha trong năm 2020-2021.

d1.s1 <- d1[d1$Crop=='Rice', ]
mean(d1.s1$Yield)
## [1] 2.368601

Trong năm 2020-2021, do ảnh hưởng của đại dịch COVID trên toàn cầu tình hình năng suất gạo của Ấn Độ không cao so với các nước khác mặc dù là một nước có diện tích trồng lúa lớn nhất thế giới. Nếu năng suất đạt trên 2.4 tấn/ha được coi là Đạt, còn lại là Không Đạt so với năng suất trung bình.

d1.s1$Yield.NS <- ifelse(d1.s1$Yield > 2.4, 'ĐẠT', 'KHÔNG ĐẠT')
datatable(d1.s1)

So với các năm về trước năng suất gạo của Ấn Độ có phần biến động:

d1.s2 <- d[d$Crop=='Rice', ]
d1.s2 <- d1.s2 %>% group_by(Year) %>% summarise( NSTB= mean(Yield), .groups='drop')
datatable(d1.s2)

Các yếu tố ảnh hưởng đến sản lượng

Phân bố đất đai ở Ấn Độ rất đa dạng và phức tạp, đó là kết quả của sự đa dạng về khí hậu, địa hình và văn hóa trên khắp quốc gia.Từ đó hình thành nên nhiều mùa vụ khác nhau ở Ấn Độ, đồng thời cũng là lợi thế giúp nông nghiệp Ấn Độ đa dạng hóa các loại nông sản trên quốc gia này. Sản lượng nông sản theo từng mùa vụ ở Ấn ĐỘ phân bổ như sau:

d1.s3 <- d1 %>% group_by(Season) %>% summarise( tongSL= sum(Production), .groups = 'drop')
table(d1.s3)
##             tongSL
## Season       55563 1009727 1048137 8063799
##   Kharif         0       1       0       0
##   Rabi           0       0       1       0
##   Summer         1       0       0       0
##   Whole Year     0       0       0       1

Do ảnh hưởng về các vấn đề tự nhiên cũng như nhu cầu sử dụng của con người, diện tích đất trồng trọt cũng thay đổi theo năm tháng, năm 2020-2021 tổng diện tích đất nông nghiệp là: 917916 hec-ta

sum(d1$Area)
## [1] 917916

3. Nhận xét

Nông nghiệp ở Ấn Độ đóng một vai trò quan trọng trong kinh tế của quốc gia này và cung cấp nguồn sống cho một lượng lớn dân số. Ấn Độ rất đa dạng và phong phú với nhiều loại cây trồng, Đất đai phong phú và đa dạng về khí hậu hỗ trợ cho việc trồng trọt nhiều loại cây như lúa, hạt tiêu, cà phê, và rau củ quả.

Trải qua quá trình cải cách về nông nghiệp, Ấn Độ đang ngày càng phát triển hơn tận dụng mọi lợi thế về tự nhiên và nguồn lực lao động để xây dựng một nền nông nghiệp hoàn chỉnh riêng biệt.

LS0tDQp0aXRsZTogIk5ISeG7hk0gVuG7pCAzIg0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUg6JU06JVMsICVkIC0gJW0gLSAlWScpYCINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgbnVtYmVyIHNlY3Rpb246IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCi0tLQ0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KIyAqKk5ISeG7hk0gVuG7pCAzLjEqKiANCioqKg0KDQojIyAqKjEuIFThu5RORyBRVUFOKioNCg0KQuG7mSBk4buvIGxp4buHdSAqcG9wdWxhdGlvbi1hbmQtZGVtb2dyYXBoeS5jc3YqOiBsw6AgbeG7mXQgYuG7mSBk4buvIGxp4buHdSBtw7QgdOG6oyBkw6JuIHPhu5EgY+G7p2EgY8OhYyBxdeG7kWMgZ2lhIHbDoCBraHUgduG7sWMgdHLDqm4gdGjhur8gZ2nhu5tpIHRyb25nIG5o4buvbmcgbsSDbSB04burIDE5NTAgxJHhur9uIDIwMjENCkLhu5kgZOG7ryBsaeG7h3UgxJHGsOG7o2MgbMawdSB0cuG7ryBkxrDhu5tpIGjDrG5oIHRo4bupYyBmaWxlIGNzdiwgxJHhu4MgxJHhu41jIHbDoCBtw7QgdOG6oyBjaGkgdGnhur90IHbhu4EgYuG7mSBk4buvIGxp4buHdSB0YSB0aOG7sWMgaGnhu4duIGPDoWMgY8OidSBs4buHbmggc2F1OiANCg0KYGBge3J9DQpsaWJyYXJ5KGNzdikgI2fhu41pIHBhY2thZ2UgY3N2IA0KbnRoIDwtIHJlYWQuY3N2KGZpbGU9J0M6L1VzZXJzL0FkbWluL0Rvd25sb2Fkcy9wb3B1bGF0aW9uLWFuZC1kZW1vZ3JhcGh5LmNzdicpICPEkeG7jWMgZOG7ryBsaeG7h3UgdOG7qyBmaWxlIGNzdiANCmxpYnJhcnkoc2tpbXIpICNn4buNaSBwYWNrYWdlIA0Kc2tpbShudGgpICNtw7QgdOG6oyB0aMO0bmcgdGluIGNoaSB0aeG6v3QgYuG7mSBk4buvIGxp4buHdQ0KYGBgDQoqKkPDoWMgY8OidSBs4buHbmggdHLDqm4gY2hvIHRhIGvhur90IHF14bqjIGNoaSB0aeG6v3QgduG7gSBi4buZIGThu68gbGnhu4d1IHRyb25nIMSRw7M6KioNCg0KKiAqKkLhu5kgZOG7ryBsaeG7h3UgZ+G7k20gMTgyODggcXVhbiBzw6F0IHbDoCAyNCBiaeG6v246KiogY2hpIHRp4bq/dCBjw6FjIGJp4bq/biANCiAgKiBDb3VudHJ5IG5hbWU6IHTDqm4gxJHhuqV0IG7GsOG7m2MgDQogICogWWVhcjogbsSDbSB0aOG7kW5nIGvDqiANCiAgKiBQb3B1bGF0aW9uOiB04buVbmcgZMOibiBz4buRIA0KICAqIFBvcHVsYXRpb24gb2YgY2hpbGRyZW4gdW5kZXIgdGhlIGFnZSBvZiAxOiBkw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSBuaOG7jyBoxqFuIDEgDQogICogUG9wdWxhdGlvbiBvZiBjaGlsZHJlbiB1bmRlciB0aGUgYWdlIG9mIDU6IGTDom4gc8O0IGPDsyDEkeG7mSB0deG7lWkgZMaw4bubaSA1IA0KICAqIFBvcHVsYXRpb24gb2YgY2hpbGRyZW4gdW5kZXIgdGhlIGFnZSBvZiAxNTogZMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgZMaw4bubaSAxNSANCiAgKiBQb3B1bGF0aW9uIHVuZGVyIHRoZSBhZ2Ugb2YgMjU6IGTDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIGTGsOG7m2kgMTUNCiAgKiBQb3B1bGF0aW9uIGFnZWQgMTUgdG8gNjQgeWVhcnM6IGTDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgMTUgxJHhur9uIDY0IA0KICAqIFBvcHVsYXRpb24gb2xkZXIgdGhhbiAxNSB5ZWFyczogZMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdHLDqm4gMTUgDQogICogUG9wdWxhdGlvbiBvbGRlciB0aGFuIDE4IHllYXJzOiBkw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSB0csOqbiAxOCANCiAgKiBQb3B1bGF0aW9uIGF0IGFnZSAxOiBkw6JuIHPhu5EgdOG6oWkgxJHhu5kgdHXhu5VpIDEgDQogICogUG9wdWxhdGlvbiBhZ2VkIDEgdG8gNCB5ZWFyczogZMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyAxIMSR4bq/biA0DQogICogUG9wdWxhdGlvbiBhZ2VkIDUgdG8gOSB5ZWFyczogZMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyA1IMSR4bq/biA5OQ0KICAqIFBvcHVsYXRpb24gYWdlZCAxMCB0byAxNCB5ZWFyczogZMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyAxMCDEkeG6v24gMTQNCiAgKiBQb3B1bGF0aW9uIGFnZWQgMTUgdG8gMTkgeWVhcnM6IGTDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgMTUgxJHhur9uIDE5DQogICogUG9wdWxhdGlvbiBhZ2VkIDIwIHRvIDI5IHllYXJzOiBkw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSB04burIDIwIMSR4bq/biAyOQ0KICAqIFBvcHVsYXRpb24gYWdlZCAzMCB0byAzOSB5ZWFyczogZMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyAzMCDEkeG6v24gMzkNCiAgKiBQb3B1bGF0aW9uIGFnZWQgNDAgdG8gNDkgeWVhcnM6IGTDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgNDAgxJHhur9uIDQ5DQogICogUG9wdWxhdGlvbiBhZ2VkIDUwIHRvIDU5IHllYXJzOiBkw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSB04burIDUwIMSR4bq/biA1OQ0KICAqIFBvcHVsYXRpb24gYWdlZCA2MCB0byA2OSB5ZWFyczogZMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyA2MCDEkeG6v24gNjkNCiAgKiBQb3B1bGF0aW9uIGFnZWQgNzAgdG8gNzkgeWVhcnM6IGTDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgNzAgxJHhur9uIDc5DQogICogUG9wdWxhdGlvbiBhZ2VkIDgwIHRvIDg5IHllYXJzOiBkw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSB04burIDgwIMSR4bq/biA4OQ0KICAqIFBvcHVsYXRpb24gYWdlZCA5MCB0byA5OSB5ZWFyczogZMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyA5MCDEkeG6v24gOTkNCiAgKiBQb3B1bGF0aW9uIG9sZGVyIHRoYW4gMTAwIHllYXJzOiBkw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSB0csOqbiAxMDAgDQogIA0KKiAqKlRow7RuZyB0aW4gbcO0IHThuqMgYuG7mSBk4buvIGtp4buHdSBjw7MgY8OhYyBj4buZdCBzYXUgdsOgIMO9IG5naMSpYSBjw6FjIGPhu5l0IGzDoDoqKg0KICAqIHNraW1fdmFyaWFibGU6IHTDqm4gYmnhur9uIA0KICAqIG5fbWlzc2luZzogc+G7kSBk4buvIGxp4buHdSB0cuG7kW5nDQogICogY29tcGxldGVfcmF0ZTogdOG7iSBs4buHIGJp4bq/biBjw7MgZOG7ryBsaeG7h3UNCiAgKiBtZWFuOiBnacOhIHRy4buLIHRydW5nIGLDrG5oIGPhu6dhIGJp4bq/biANCiAgKiBzZDogxJHhu5kgbOG7h2NoIGNodeG6qW4gY+G6o3UgYmnhur9uIA0KICAqIHAwOiBnacOhIHRy4buLIE5OIA0KICAqIHAyNTogcGjDom4gduG7iyB0aOG7qSBuaOG6pXQgDQogICogcDUwOiBwaMOibiB24buLIHRo4bupIGhhaSh0cnVuZyB24buLKQ0KICAqIHA3NTogcGjDom4gduG7iyB0aOG7qSBiYSANCiAgKiBwMTAwOiBnacOhIHRy4buLIExOIA0KICAqIGhpczogYmnhu4N1IMSR4buTIGhpc3RvZ3JhbSANCg0KIyMgKioyLiBDw4FDIFRIQU8gVMOBQyBI4buWIFRS4buiIFBIw4JOIFTDjUNIIEThu64gTEnhu4ZVKiogDQoNCioqKnBvcHVsYXRpb24tYW5kLWRlbW9ncmFwaHkuY3N2KioqIG1hbmcgbeG7mXQgZOG7r3UgbGnhu4d1IGzhu5tuLiBEbyDEkcOzIGtoaSBwaMOibiB0w61jaCB0aMO0bmcgdGluIHbhu4EgbeG7mXQgduG6pW4gxJHhu4EgcXVhbiB0w6JtLCB0YSB0aOG7sWMgaGnhu4duIGPDoWMgdGhhbyB0w6FjIHNhdTogDQoNCiMjIyAqKjEuIMSQ4buVaSB0w6puIGJp4bq/bjoqKg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKSAjIGfhu41pIHBhY2tzZ2UgdGlkeXZlcnNlIGTDuW5nIMSR4buDIHPhu60gZOG7pW5nIHRvw6FuIHThu60gcGlwZSAlPiUNCm50aCA8LSBudGggJT4lIHJlbmFtZSggJ2NvdW50Jz0gQ291bnRyeS5uYW1lLCAnWSc9IFllYXIsICdwb3AnPSBQb3B1bGF0aW9uLCAncDEwdG8xNCc9IFBvcHVsYXRpb24uYWdlZC4xMC50by4xNC55ZWFycywncDE1dG8xOSc9IFBvcHVsYXRpb24uYWdlZC4xNS50by4xOS55ZWFycywncDIwdG8yOSc9IFBvcHVsYXRpb24uYWdlZC4yMC50by4yOS55ZWFycywgJ3AzMHRvMzknPVBvcHVsYXRpb24uYWdlZC4zMC50by4zOS55ZWFycywgJ3A0MHRvNDknPVBvcHVsYXRpb24uYWdlZC40MC50by40OS55ZWFycywgKQ0KYGBgDQoNCj0+IEPDonUgbOG7h25oIHRyw6puIHRy4bqjIGNobyB0YSBr4bq/dCBxdeG6oyB24buBOiAqKsSR4buVaSB0w6puIGPDoWMgYmnhur9uKioNCg0KQ291bnRyeS5uYW1lIA0KDQpZZWFyIA0KDQpQb3B1bGF0aW9uIA0KDQpQb3B1bGF0aW9uLmFnZWQuMTAudG8uMTQueWVhcnMNCg0KUG9wdWxhdGlvbi5hZ2VkLjE1LnRvLjE5LnllYXJzDQoNClBvcHVsYXRpb24uYWdlZC4yMC50by4yOS55ZWFycw0KDQpQb3B1bGF0aW9uLmFnZWQuMzAudG8uMzkueWVhcnMgDQoNClBvcHVsYXRpb24uYWdlZC40MC50by40OS55ZWFycw0KDQoqKnRow6BuaCBjw6FjIGJp4bq/biBjw7MgdMOqbiBs4bqnbiBsxrDhu6N0IG5oxrAgc2F1OioqIA0KDQpjb3VudA0KDQpZDQoNCnBvcA0KDQpwMTB0bzE0DQoNCnAxNXRvMTkNCg0KcDIwdG8yOQ0KDQpwMzB0bzM5DQoNCnA0MHRvNDkNCg0KIyMjICoqMi4gUsO6dCB0csOtY2ggZOG7ryBsaeG7h3U6KioNCg0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkgIyBn4buNaSBwYWNrc2dlIHRpZHl2ZXJzZSBkw7luZyDEkeG7gyBz4butIGThu6VuZyB0b8OhbiB04butIHBpcGUgJT4lDQpudGgxIDwtbnRoICU+JSBzZWxlY3QoY291bnQsIFksIHBvcCwgcDEwdG8xNCwgcDE1dG8xOSwgcDIwdG8yOSwgcDMwdG8zOSwgcDQwdG80OSApICMxIA0KbnRoMSA8LSBudGgxW250aDEkWT09MjAwMHwgbnRoMSRZPT0yMDA0LCBdICMyIA0KbnRoMjwtIG50aDFbbnRoMSRjb3VudD09J1ZpZXRuYW0nIHwgbnRoMSRjb3VudD09J0NoaW5hJyB8IG50aDEkY291bnQ9PSdJbmRpYScgfCBudGgxJGNvdW50PT0nU291dGggS29yZWEnfCBudGgxJGNvdW50PT0nQWZnaGFuaXN0YW4nLCBdICMzIA0KYGBgDQoNCj0+IEvhur90IHF14bqjIHRy4bqjIHbhu4E6DQoNCjEuIG50aDE9IGNo4buNbiByYSBjw6FjIGPhu5l0ICdjb3VudCwgWSwgcG9wLCBwMTB0bzE0LCBwMTV0bzE5LCBwMjB0bzI5LCBwMzB0bzM5LCBwNDB0bzQ5JyB0cm9uZyBkYXRhICpudGgqIMSR4buDIHBow6JuIHTDrWNoDQoNCjIuIG50aDE9IGNo4buJIGzhuqV5ICBk4buvIGxp4buHdSBuxINtIDIwMDAgdsOgIG7Eg20gMjAwNCB0aHXhu5ljIGJp4bq/biAnWScgdHJvbmcgZGF0YSAqbnRoMSogDQoNCjMuIG50aDI9IGNo4buJIGzhuqV5IGPDoWMgbsaw4bubYyAnVmlldG5hbScsICdDaGluYScsICdJbmRpYScsICdTb3V0aCBLb3JlYScsICdBZmdoYW5pc3RhbicgdGh14buZYyBiaeG6v24gJ2NvdW50JyB0cm9uZyBkYXRhICpudGgqMSDEkeG7gyBwaMOibiB0w61jaCANCg0KPT4gVOG7qyDEkcOzIHRhIGPDsyBi4bqjbmcgRGF0YSAqKm50aDIqKiBt4bubaSB24buBIHRo4buRbmcga8OqIGTDom4gc+G7kSBj4bunYSBjw6FjIG7GsOG7m2MgVmnhu4d0IE5hbSwgVHJ1bmcgUXXhu5FjLCDhuqRuIMSQ4buZLCBIw6BuLCBBZmdoYW5pc3RhbiB0cm9uZyBuxINtIDIwMDAgdsOgIDIwMDQgduG7gSBjw6FjIMSR4buZIHR14buVaSB04burIDEwIMSR4bq/biA0MCB0deG7lWkgDQoNCiMjIyAqKjMuIE3DoyBow7NhIGThu68gbGnhu4d1OioqDQrEkOG7gyBk4buFIGTDoG5nIGjGoW4gdHJvbmcgdmnhu4djIHBow6JuIHTDrWNoIGPDoWMgZOG7ryBsaeG7h3UgduG7gSBkw6JuIHPhu5EsIGNow7puZyB0YSBz4butIGThu6VuZyBjw6FjIGzhu4duaCB24buBIG3DoyBow7NhIGThu68gbGnhu4d1LiBDw6FjIHRoYW8gdMOhYyBtw6MgaMOzYSBk4buvIGxp4buHdSBnacO6cCBjaMO6bmcgdGEgY2h1eeG7g24gxJHhu5VpIHThu6sgZOG7ryBsaeG7h3UgZOG6oW5nIG7DoHkgc2FuZyBt4buZdCBk4bqhbmcgbeG7m2kuDQoNCihz4butIGThu6VuZyBi4bqjbmcgZGF0YSAqKm50aDIqKikNCg0KYGBge3J9DQpudGgyJHAxMHRvMTQuY2MgPC0gaWZlbHNlKG50aDIkcDEwdG8xNCA+IDAuMSpudGgyJHBvcCwgJ2TDom4gc+G7kSB0cuG6uycsICdkw6JuIHPhu5EgZ2nDoCcpICMxDQpudGgyJHBvcC5zbCA8LSBpZmVsc2UobnRoMiRwb3A+NTAwMDAwMDAsICfEkcO0bmcgxJHDumMnLCAndGjGsGEgdGjhu5t0JyApICMyDQpudGgyJHBvcC5zbDEgPC0gY2FzZV93aGVuKG50aDIkcG9wIDwgNTAwMDAwMDAgfiAndGjhuqVwJywgbnRoMiRwb3AgPj0gNTAwMDAwMDAgJiBudGgyJHBvcCA8IDEwMDAwMDAwMCB+ICd0cnVuZyBiw6xuaCAnLCBudGgyJHBvcCA+IDEwMDAwMDAwMCB+ICdjYW8nICkgIzMNCm50aDIkcG9wLnNsMiA8LSBjdXQobnRoMiRwb3AsIGJyZWFrcyA9IGMoMCwgNTAwMDAwMDAsMTAwMDAwMDAwLCAxMDAwMDAwMDAwMCksIGxhYmVscz0gYygna3YxJywgJ2t2MicsICdrdjMnKSkgIzQNCmBgYA0KDQo9PiBDw6FjIGPDonUgbOG7h25oIHRyw6puIGhp4buHbiBr4bq/dCBxdeG6oyB24buBIGThu68gbGnhu4d1IGTDom4gc+G7kSBuaMawIHNhdTogc+G7rSBk4bulbmcgZGF0YSAqbnRoMiogxJHDoyDEkcaw4bujYyByw7p0IHRyw61jaCANCg0KMS4gY+G7mXQgYmnhur9uIG3hu5tpIG1hbmcgdMOqbiAqKnAxMHRvMTQuY2MqKjogc+G7rSBk4bulbmcgbOG7h25oICoqaWZlbHNlKiotPiBjaG8ga+G6v3QgcXXhuqMgKipkw6JuIHPhu5EgdHLhursqKiBu4bq/dSBnacOhIHRy4buLIGJp4bq/biAqKnAxMHRvMTQqKiBs4bubbiBoxqFuIDAuMSBs4bqnbiBiaeG6v24gKipwb3AqKiwgIGPDoWMgdHLGsOG7nW5nIGjhu6NwIGPDsm4gbOG6oWkgY2hvIHJhIGvhur90IHF14bqjICoqZMOibiBz4buRIGdpw6AqKi4gDQoNCjIuIGPhu5l0IGJp4bq/biBt4bubaSBtYW5nIHTDqm4gKipwb3Auc2wqKjogbMOgIGPhu5l0IGJp4bq/biBjaOG7iSBt4bqtdCDEkeG7mSBkw6JuIHPhu5EgKirEkcO0bmcgxJHDumMqKiBob+G6t2MgKip0aMawYSB0aOG7m3QqKi4gU+G7rSBk4bulbmcgbOG7h25oICoqaWZlbHNlKiotPmNobyBr4bq/dCBxdeG6oyAqKsSRw7RuZyDEkcO6YyoqIG7hur91IHThu5VuZyBkw6JuIHPhu5EgKGJp4bq/biAqKnBvcCoqKSBs4bubbiBoxqFuIDUwMDAwMDAwLCBjw7JuIGzhuqFpIGNobyByYSBrcSAqKnRoxrBhIHRo4bubdCoqLg0KDQozLiBj4buZdCBiaeG6v24gbeG7m2kgKipwb3Auc2wxKiogc+G7rSBk4bulbmcgaMOgbSAqKmNhc2Vfd2hlbioqIGjhu5cgdHLhu6MgbcOjIGjDs2EgZOG7ryBsaeG7h3Ugbmhp4buBdSBoxqFubiAyOiBu4bq/dSBnacOhIHRy4buLIGJp4bq/biAqKnBvcCoqIGLDqSBoxqFuIDUwMDAwMDAwIHRow6wgY2hvIHJhIGtxICoqdGjhuqVwKiosIG7hur91IGdpw6EgdHLhu4sgYmnhur9uICoqcG9wKiogbOG7m24gaMahbiBob+G6t2MgYuG6sW5nIDUwMDAwMDAwIHbDoCBuaOG7jyBoxqFuIDEwMDAwMDAwMCB0aMOsIGNobyBrcSBsw6AgKip0cnVuZyBiw6xuaCoqLCBjw7JuIG7hur91IGdpw6EgdHLhu4sgYmnhur9uICoqcG9wKiogbOG7m24gaMahbiAxMDAwMDAwMDAgdGjDrCBjaG8gcmEga3EgKipjYW8qKi4NCg0KNC4gKipwb3Auc2wyKiogbMOgIGPhu5l0IGJp4bq/biBt4bubaSBk4butIGThu6VuZyBow6BtICoqY3V0KiogZMO5bmcgxJHhu4MgY2hpYSBk4buvIGxp4buHdSB0aGVvIGJp4bq/biAqKnBvcCoqIHRow6BuaCAzIHThu5UgdGhlbyB04burbmcga2hv4bqjbmcgZ2nDoSB0cuG7iyBzYXU6IHThu6sgMCDEkeG6v24gNTAuMDAwLjAwMCBsw6AgKiprdjEqKiwgdOG7qyA1MC4wMDAuMDAwIMSR4bq/biAxMDAuMDAwLjAwMCBsw6AgKiprdjIqKiwgdOG7qyAxMDAuMDAwLjAwMCDEkeG6v24gMS4wMDAuMDAwLjAwMCBsw6AgKiprdjMqKi4NCg0KIyMjICoqNC4gTOG6rXAgYuG6o25nIHThuqduIHPhu5EqKg0KDQoxLiAqKkLhuqNuZyB04bqnbiBz4buRIG3hu5l0IGJp4bq/bioqIHbhu5tpIGPDonUgbOG7h25oICoqdGFibGUoKSoqIGNobyB0YSBiaeG6v3QgdOG6p24gc3XhuqV0IHh14bqldCBoaeG7h24gbeG7mXQgYmnhur9uIG7DoG8gxJHDsyB0cm9uZyBkYXRhLCBnacO6cCBjaG8gcXXDoSB0csOsbmggcGjDom4gdMOtY2ggZOG7hSBkw6BuZyB0aOG7kW5nIGvDqiDEkWMgbeG7mXQgbMaw4bujbmcgZOG7ryBsaeG7h3Uga2jhu5VuZyBs4buTIHRow6BuaCBi4bqjbmcgZOG7ryBsaeG7h3Ugbmfhuq9uIGfhu41uLg0KDQooc+G7rSBk4bulbmcgYuG6o25nIGRhdGEgKipudGgqKikNCg0KYGBge3IsIGV2YWw9RkFMU0V9DQpjdXQobnRoJHBvcCwzKQ0KYGBgDQoNCmBgYHtyfQ0KdGFibGUoY3V0KG50aCRwb3AsMykpDQpgYGANCg0KPT4gR2nhuqNpIHRow61jaCBr4bq/dCBxdeG6ozogDQoNCiAgKiBT4butIGThu6VuZyBow6BtIGN1dCgpIMSR4buDIGNoaWEgZOG7ryBsaeG7h3UgdHJvbmcgYmnhur9uIHThu5VuZyBkw6JuIHPhu5EgKipwb3AqKiB0aHXhu5ljIGRhdGEgKipudGgqKiB0aMOgbmggMyBuaMOzbSB0aGVvIHPhu5EgZMOibiBsw6A6ICoqKC03LjkxZSswNiwyLjY0ZSswOV0qKiwgKiooMi42NGUrMDksNS4yN2UrMDldKiosICoqKDUuMjdlKzA5LDcuOTJlKzA5XSoqDQoNCiAgKiBz4butIGThu6VuZyAqKnRhYmxlKCkqKiDEkeG7gyB0aOG7kW5nIGvDqiB04bqnbiBzdeG6pXQgeHXhuqV0IGhp4buHbiBj4bunYSBjw6FjIG5ow7NtIGTDom4gc+G7kSB0csOqbjogKiooLTcuOTFlKzA2LDIuNjRlKzA5XSoqIHh14bqldCBoaeG7h24gduG7m2kgKioxODAyNCoqIHF1YW4gc8OhdCwgKiooMi42NGUrMDksNS4yN2UrMDldKiogeHXhuqV0IGhp4buHbiB24bubaSAqKjIwOSoqIHF1YW4gc8OhdCwgKiooNS4yN2UrMDksNy45MmUrMDldKiogeHXhuqV0IGhp4buHbiB24bubaSAqKjU1KiogcXVhbiBzw6F0Lg0KDQoyLiAqKkLhuqNuZyB04bqnbiBz4buRIG5oaeG7gXUgYmnhur9uKiogduG7m2kgY8OidSBs4buHbmggKipncm91cF9ieSoqIGNobyBwaMOpcCBs4bqtcCBi4bqjbmcgduG7m2kgbmhp4buBdSBiaeG6v24gY8O5bmcgbMO6Yy4oc+G7rSBk4bulbmcgYuG6o25nIGRhdGEgKipudGgyKiopDQoNCmBgYHtyfQ0KbnRodCA8LSBudGgyICU+JSBncm91cF9ieShZLCBjb3VudCwgcG9wLnNsMikgJT4lIHN1bW1hcmlzZShuPSBuKCksIC5ncm91cHMgPSAnZHJvcCcpDQpudGh0DQpgYGANCg0KPT4gQuG6o25nIHThuqVuIHPhu5EgduG7m2kgbOG7h25oIHRyw6puIGNobyByYSB04bqnbiBzdeG6pXQgZOG7ryBsaeG7h3UgY+G7p2EgY8OhYyBiaeG6v24gJ2NvdW50JywgJ1knLCAncG9wLnNsMicuIEPDonUgbOG7h25oICoqc3VtbWFyaXNlKG49IG4oKSoqIGNobyByYSBz4buRIG4gdOG6p24gc3XhuqV0IGPhu6dhIGThu68gbGnhu4d1IHbDoCAqKi5ncm91cHMgPSAnZHJvcCcqKiBnacO6cCBjaGlhIG5ow7NtIGThu68gbGnhu4d1IA0KDQojIyMgKio1LiBUw61uaCB0b8OhbiBjw6FjIMSR4bq3YyB0csawbmcgxJFvIGzGsOG7nW5nKiogDQoNCioqU+G7rSBk4bulbmcgYuG6o25nIGRhdGEgKm50aDEqIMSR4buDIHRo4buxYyBoaeG7h24gY8OhYyB0aGFvIHTDoWMgxJFvIGzGsOG7nW5nIGThu68gbGnhu4d1KioNCg0KYGBge3J9DQpzdW1tYXJ5KG50aDEkcG9wKQ0KYGBgDQoNCj0+SMOgbSAqKnN1bW1hcnkoKSoqIGNobyB0YSDEkcaw4bujYyBuaOG7r25nIGThu68gbGnhu4d1IHNhdToNCg0KKiBtaW4gPSAxLjUzNWUrMDM6IGdpw6EgdHLhu4sgYsOpIG5o4bqldCBj4bunYSBiaeG6v24gKipwb3AqKiANCiogMXN0IFF1LiA9IDQuMjg1ZSswNTogY8OzIDI1JSBk4buvIGxp4buHdSBiw6kgaMahbiBnacOhIHRy4buLIDQuMjg1ZSswNSggaGF5IGPDsyA3NSUgZOG7ryBsaeG7h3UgbOG7m24gaMahbiBnacOhIHRy4buLIDQuMjg1ZSswNSkNCiogTWVkaWFuID0gNS4xNjVlKzA2OiB0cnVuZyB24buLIGPhu6dhIGJp4bq/biAqKnBvcCoqKCBoYXkgY8OzIDUwJSBnacOhIHRy4buLIG5o4buPIGjGoW4gdsOgIDUwJSBnacOhIHRy4buLIGzhu5tuIGjGoW4gNS4xNjVlKzA2KQ0KKiBNZWFuID0gMS42MDllKzA4OiBnacOhIHRy4buLIHRydW5nIGLDrG5oIGPhu6dhIGJp4bq/biAqKnBvcCoqIA0KKiAzcmQgUXUuID0gMi4zMDVlKzA3OiBjw7MgMjUlIGThu68gbGnhu4d1IGzhu5tuIGjGoW4gZ2nDoSB0cuG7iyAyLjMwNWUrMDcoIGhheSBjw7MgNzUlIGThu68gbGnhu4d1IGLDqSBoxqFuIGdpw6EgdHLhu4sgMi4zMDVlKzA3KSANCiogTWF4ID0gNi40NzZlKzA5OiBnacOhIHRy4buLIGzGsOG7m24gbmjhuqV0IGPhuqN1IGJp4bq/biAqKnBvcCoqDQoNCmBgYHtyfQ0Kc3VtKG50aDEkcG9wKSANCmBgYA0KDQo9PiBIw6BtICoqc3VtKCkqKiBjaOG7iSB04buVbmcgZ2nDoSB0cuG7iyBj4bunYSBiaeG6v24gKipwb3AqKg0KDQpgYGB7cn0NCm1lYW4obnRoMSRwb3AsbmEucm0gPSBUKSANCmBgYCANCg0KPT4gSMOgbSAqKm1lYW4oKSoqIHRy4bqjIGvhur90IHF14bqjIGzDoCBnacOhIHRy4buLIHRydW5nIGLDrG5oIGPhu6dhIGJp4bq/biB24bubaSAqKm5hLnJtID0gVCoqIMSR4buDIGLhu48gxJFpIG5o4buvbmcgZ2nDoSB0cuG7iyBraMO0bmcgcGjDuSBo4bujcCANCmBgYHtyfQ0KbGVuZ3RoKG50aDEkcG9wKQ0KYGBgDQoNCj0+ICoqbGVuZ3RoKCkqKiDEkeG7mSBkw6BpIGJp4bq/biAqKnBvcCoqIGhheSDEkeG6v20gc+G7kSBxdWFuIHPDoXQgdHJvbmcgYmnhur9uIA0KDQpgYGB7cn0NCnZhcihudGgxJHBvcCkNCmBgYA0KDQo9PiBIw6BtICoqdmFyKCkqKiBjaOG7iSBwaMawxqFuZyBzYWkgY+G7p2EgYmnhur9uIChoYXkgYsOsbmggcGjGsMahbmcgxJHhu5kgbOG7h2NoIGNodeG6qW4gfiDEkeG7mSBiaeG6v24gxJHhu5luZywgdGhheSDEkeG7lWksIGNow6puaCBs4buHY2gsLi4uKQ0KDQpgYGB7cn0NCnNkKG50aCRwb3ApDQpgYGANCg0KPT4gSMOgbSAqKnNkKCkqKiBsw6AgxJHhu5kgbOG7h2MgY2h14bqpbiAoY8SDbiBj4bunYSBwaMawxqFuZyBzYWkpDQoNCmBgYHtyfQ0KbWVkaWFuKG50aDEkcG9wKQ0KYGBgDQoNCj0+IEjDoG0gKiptZWRpYW4oKSoqIHRy4bqjIGvhur90IHF14bqjIGzDoCB0cnVuZyB24buLIGPhu6dhIGJp4bq/biAoaGF5IGPDsyA1MCUgZ2nDoSB0cuG7iyBuaOG7jyBoxqFuIHbDoCA1MCUgZ2nDoSB0cuG7iyBs4bubbiBoxqFuIGdpw6EgdHLhu4sgYmnhur9uIMSRw7MpIA0KDQpgYGB7cn0NCnF1YW50aWxlKG50aDEkcG9wLCBwcm9icyA9IGMoLjMsLjYsLjkpKQ0KYGBgDQoNCj0+IEjDoG0gcGjDom4gduG7izogYuG7mSBk4buvIGxp4buHdSBiaeG6v24gKipwb3AqKiBjw7MgZ2nDoSB0cuG7izoNCg0KKiAqKnF1YW50aWxlX3szMCV9PTgxODk5NC4zKiogbmdoxKlhIGzDoCBjw7MgMzAlIGThu68gbGnhu4d1IGPDsyBnacOhIHRy4buLIGLDqSBoxqFuIDgxODk5NC4zDQoNCiogKipxdWFudGlsZV97NjAlfT04ODg5MDQyLjgqKiBuZ2jEqWEgbMOgIGPDsyA2MCUgZOG7ryBsaeG7h3UgY8OzIGdpw6EgdHLhu4sgYsOpIGjGoW4gODg4OTA0Mi44DQoNCiogKipxdWFudGlsZV97OTAlfT0xMjQwMzc1NDUuMioqIG5naMSpYSBsw6AgY8OzIDkwJSBk4buvIGxp4buHdSBjw7MgZ2nDoSB0cuG7iyBiw6kgaMahbiAxMjQwMzc1NDUuMg0KDQojIyMgKio2LiBUw61uaCB0b8OhbiBjw6FjIMSR4bq3YyB0csawbmcgxJFvIGzGsOG7nW5nIHRoZW8gbmjDs20qKiANCg0KPT4gxJDDonkgbMOgIGPDoWMgY8OidSBs4buHbmggdMOtbmggdG/DoW4gY8OhYyDEkeG6t2MgdHLGsG5nIMSRbyBsxrDhu51uZyB0aGVvIGhhaSBob+G6t2Mgbmhp4buBdSBiaeG6v24oIGhheSBn4buNaSBsw6AgdGhlbyBuaMOzbSkNCg0KYGBge3J9DQp0biA8LSBudGggJT4lIGdyb3VwX2J5KFkpICU+JSBzdW1tYXJpc2UobWVhbm9mcG9wPSBtZWFuKHBvcCkpDQp0bg0KYGBgDQoNCj0+IEdp4bqjaSB0aMOtY2ggY8OhYyBjw6J1IGzhu4duaCB0csOqbiBuaMawIHNhdToNCg0KKiB0biA9IGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggY+G7p2EgdOG7lW5nIGTDom4gc+G7kSAoYmnhur9uICoqcG9wKiopIHRoZW8gbsSDbSAoYmnhur9uICoqWSoqKQ0KDQpgYGB7cn0NCnRuMSA8LSBudGggJT4lIGdyb3VwX2J5KFkpICU+JSBzdW1tYXJpc2UobiA9IG4oKSxtZWRvZnBvcD0gbWVkaWFuKHBvcCkpDQp0bjENCmBgYA0KDQo9PiBHaeG6o2kgdGjDrWNoIGPDoWMgY8OidSBs4buHbmggdHLDqm4gbmjGsCBzYXU6DQoNCiogdG4xID0gdHJ1bmcgduG7iyBj4bunYSB04buVbmcgZMOibiBz4buRIChiaeG6v24gKipwb3AqKikgdGhlbyBuxINtIChiaeG6v24gKipZKiopIHRyb25nIMSRw7MgKipuPW4oKSoqIGNobyBiaeG6v3Qgc+G7kSBs4bqnbiBuxINtIMSRw7MgeHXhuqV0IGhp4buHbiAoIGhheSBjaMOtbmggbMOgIHThu5VuZyBz4buRIHF14buRYyBnaWEsIGtodSB24buxYyApIA0KDQpgYGB7cn0NCnRuMiA8LSBudGggJT4lIGdyb3VwX2J5KGNvdW50KSAlPiUgc3VtbWFyaXNlKG1lYW5vZnBvcD0gbWVhbihwb3ApKQ0KdG4yDQpgYGANCg0KYGBge3J9DQp0bjMgPC0gbnRoICU+JSBncm91cF9ieShZLGNvdW50KSAlPiUgc3VtbWFyaXNlKG1lYW5vZnBvcD0gbWVhbihwb3ApLC5ncm91cHMgPSAnZHJvcCcpDQp0bjMNCmBgYA0KDQo9PiBHaeG6o2kgdGjDrWNoIGPDoWMgY8OidSBs4buHbmggdHLDqm4gbmjGsCBzYXU6DQoNCiogdG4gPSBnacOhIHRy4buLIHRydW5nIGLDrG5oIGPhu6dhIHThu5VuZyBkw6JuIHPhu5EgKGJp4bq/biAqKnBvcCoqKSB0aGVvIG7Eg20gKGJp4bq/biAqKlkqKikgDQoNCiogdG4xID0gdHJ1bmcgduG7iyBj4bunYSB04buVbmcgZMOibiBz4buRIChiaeG6v24gKipwb3AqKikgdGhlbyBuxINtIChiaeG6v24gKipZKiopDQoNCiogdG4yID0gZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCBj4bunYSB04buVbmcgZMOibiBz4buRIChiaeG6v24gKipwb3AqKikgdGhlbyB04burbmcgcXXhu5FjIGdpYSBoYXkga2h1IHbhu7FjIChiaeG6v24gKipZKiopDQoNCiogdG4zID0gZ2nDoSB0cuG7iyB0cnVuZyBiaW5oIGPhu6dhIHThu5VuZyBkw6JuIHPhu5EgKGJp4bq/biAqKnBvcCoqKSB0aGVvIHThu6tuZyBuxINtIGPhu6dhIHThu6tuZyBxdeG7kWMgKGJp4bq/biAqKlkqKiwgKipjb3VudCoqKQ0KDQoNCioqKg0KIyAqKk5ISeG7hk0gVuG7pCAzLjIqKiBC4bqiTkcgUEjDgk4gVMONQ0ggVuG7gCBUw4xOSCBIw4xOSCBT4bqiTiBYVeG6pFQgTsOUTkcgTkdISeG7hlAgQ+G7pkEg4bqkTiDEkOG7mCANCioqKg0KDQojIyAqKk3hu6RDIFRJw4pVIFBIw4JOIFTDjUNIKioNCg0KICAgUGjDom4gdMOtY2ggdMOsbmggaMOsbmggc+G6o24geHXhuqV0IG7DtG5nIG5naGnhu4dwIOG7nyDhuqRuIMSQ4buZIMSRw7JpIGjhu49pIHPhu7EgY2jDuiDDvSDEkeG6v24gbeG7mXQgc+G7kSBt4bulYyB0acOqdSBxdWFuIHRy4buNbmcgxJHhu4MgaGnhu4N1IHLDtSB24buBIHRo4buLIHRyxrDhu51uZyBuw7RuZyBuZ2hp4buHcCBj4bunYSBxdeG7kWMgZ2lhIG7DoHkuIETGsOG7m2kgxJHDonkgbMOgIG3hu5l0IHPhu5EgbeG7pWMgdGnDqnUgcXVhbiB0cuG7jW5nIGPhuqduIGNow7ogw706DQoNCiogIMSQw6FuaCBnacOhIG3hu6ljIMSR4buZIGhp4buHdSBxdeG6oyBj4bunYSBz4bqjbiB4deG6pXQgbsO0bmcgbmdoaeG7h3AgDQoNCiogIE5naGnDqm4gY+G7qXUgduG7gSBz4buxIOG6o25oIGjGsOG7n25nIGPhu6dhIGPDoWMgeeG6v3UgdOG7kSBuaMawIHRo4budaSB0aeG6v3QsIGNo4bqldCBkaW5oIGTGsOG7oW5nIMSR4bqldCwgdsOgIGvhu7kgdGh14bqtdCBjYW5oIHTDoWMgxJHhu5FpIHbhu5tpIG7Eg25nIHN14bqldC4gTmdoacOqbiBj4bupdSBz4buxIHBow6JuIGLhu5EgxJHhuqV0IMSRYWkg4bufIOG6pG4gxJDhu5ksIGPFqW5nIG5oxrAgxJHDoW5oIGdpw6EgaGnhu4d1IHF14bqjIHPhu60gZOG7pW5nIMSR4bqldCDEkWFpIHRyb25nIG7DtG5nIG5naGnhu4dwLg0KDQoqICBYZW0geMOpdCDhuqNuaCBoxrDhu59uZyBj4bunYSBuw7RuZyBuZ2hp4buHcCDEkeG7kWkgduG7m2kgbcO0aSB0csaw4budbmcgdsOgIHBow6F0IHRyaeG7g24gY8OhYyBiaeG7h24gcGjDoXAgYuG6o28gduG7hyBtw7RpIHRyxrDhu51uZyB0cm9uZyBz4bqjbiB4deG6pXQgbsO0bmcgbmdoaeG7h3AuDQoNCiAgDQojIyAqKlBIxq/GoE5HIFBIw4FQIE5HSEnDik4gQ+G7qFUqKg0KDQogIFPhu60gZOG7pW5nIGPDoWMgcGjGsMahbmcgcGjDoXAgdGjhu5FuZyBrw6ogbcO0IHThuqMgZOG7ryBsaeG7h3U6DQogIA0KKiBSw7p0IHRyw61jaCBk4buvIGxp4buHdQ0KDQoqIE3DoyBow7NhIGThu68gbGnhu4d1IA0KDQoqIEzhuq1wIGLhuqNuZyB04bqnbiBz4buRIA0KDQoqIFTDrW5oIHRvw6FuIGPDoWMgxJHhurdjIHRyxrBuZyDEkW8gbMaw4budbmcNCg0KKiBOaOG6rW4geMOpdCBr4bq/dCBxdeG6oyANCg0KIyMgKipC4buYIEThu64gTEnhu4ZVICoqDQoNCiAgQuG7mSBk4buvIGxp4buHdSB24buBIHTDrG5oIGjDrG5oIG7DtG5nIG5naGnhu4dwIGPhu6dhIOG6pG4gxJDhu5kgdHJvbmcgbmjhu69uZyBuxINtIGN14buRaSBUSyAxOSDEkeG6v24gbmF5LiBE4buvIGxp4buHdSDEkcaw4bujYyB04bqjaSB24buBIHThu6sgW0RhdGFzZXQgU2VhcmNoXShodHRwczovL2RhdGFzZXRzZWFyY2gucmVzZWFyY2guZ29vZ2xlLmNvbS9zZWFyY2g/c3JjPTMmcXVlcnk9YWdyaWN1bHR1cmUmZG9jaWQ9TDJjdk1URnFlbk55WDNNek5nJTNEJTNEKQ0KDQojIyMgKioxLiBU4buVbmcgcXVhbiB24buBIG7DtG5nIG5naGnhu4dwIOG6pG4gxJDhu5kqKg0KDQogICBO4bqxbSDhu58ga2h1IHbhu7FjIFTDonkgTmFtIMOBLCDhuqRuIMSQ4buZIGPDsyBkaeG7h24gdMOtY2ggdOG7sSBuaGnDqm4gZ+G6p24gMzMgdHJp4buHdSBrbTIsIHRyb25nIMSRw7MsIGRp4buHbiB0w61jaCDEkeG6pXQgbsO0bmcgbmdoaeG7h3AgbMOgIDE0MSwyMyB0cmnhu4d1IGhhIHbhu5tpIGTDom4gc+G7kSB0csOqbiAxIHThu4kgbmfGsOG7nWksIGPDsyB0cnV54buBbiB0aOG7kW5nIHbEg24gaMOzYSwgbOG7i2NoIHPhu60gbMOidSDEkeG7nWkgdsOgIHRo4bq/IG3huqFuaCB24buBIHBow6F0IHRyaeG7g24gbsO0bmcgbmdoaeG7h3AuIEzhu6VjIMSR4buLYSBuw6B5IGPDsyBuaOG7r25nIMSR4buTbmcgYuG6sW5nIHLhu5luZyBs4bubbiBtw6Aga2jDtG5nIG3hu5l0IHF14buRYyBnaWEgbsOgbyB0csOqbiB0aOG6vyBnaeG7m2kgY8OzIMSRxrDhu6NjLiBDaOG7iSByacOqbmcgxJHhu5NuZyBi4bqxbmcg4bqkbiAtIEjhurFuZywgZGnhu4duIHTDrWNoIGtob+G6o25nIDc3NS4wMDAga20yIChn4bqlcCAyLDMgbOG6p24gZGnhu4duIHTDrWNoIFZp4buHdCBOYW0pIHbhu5tpIMSRaeG7gXUga2nhu4duIHThu7Egbmhpw6puIHRodeG6rW4gbOG7o2kgxJHDoyB04bqhbyBuw6puIHbDuW5nIGtpbmggdOG6vyB0csO5IHBow7ouIA0KICAgDQogICBTYXUgxJHDonkgbMOgIGThu68gbGnhu4d1IHbhu4EgbuG7gW4gbsO0bmcgbmdoaeG7h3AgY+G7p2Eg4bqkbiDEkOG7mSDEkcOjIMSRxrDhu6NjIHThuqNpIHbhu4EgDQogICANCmBgYHtyfQ0KbGlicmFyeShjc3YpDQpkIDwtIHJlYWQuY3N2KGZpbGU9ICdDOi9Vc2Vycy9BZG1pbi9Eb3dubG9hZHMvSW5kaWEgQWdyaWN1bHR1cmUgQ3JvcCBQcm9kdWN0aW9uLmNzdicpDQpgYGANCiAgIA0KQuG6o25nIGThu68gbGnhu4d1IGNobyB0YSBiaeG6v3QgY8OhYyB0aMO0bmcgdGluIHNhdTogDQogICANCiogU3RhdGU6IEJhbmcg4bufIOG6pG4gxJDhu5kNCiogRGlEaXN0cmljdDogdMOqbiBt4buZdCB0aOG7iyB4w6MsIHRo4buLIHRy4bqlbiBoYXkgdGjDoG5oIHBo4buRLi4uIHRodeG7mWMgYmFuZyBuw6BvIMSRw7Mg4bufIOG6pG4gxJDhu5kNCiogQ3JvcDogdMOqbiBuw7RuZyBz4bqjbiBz4bqjbiB4deG6pXQNCiogWWVhcjogbsSDbSBwaMOibiB0w61jaCANCiogU2Vhc29uOiBtw7lhIHbhu6UNCiogQXJlYTogZGnhu4duIHTDrWNoIHRy4buTbmcgdHLhu410LCBz4bqjbiB4deG6pXQNCiogQXJlYS5Vbml0czogxJHGoW4gduG7iyBkaeG7h24gdMOtY2ggdHLhu5NuZyB0cuG7jXQgc+G6o24geHXhuqV0ICgqaGVjdGFyZSopDQoqIFByb2R1Y3Rpb246IHPhuqNuIGzGsOG7o25nDQoqIFByb2R1Y3Rpb24uVW5pdHM6IMSRxqFuIHbhu4sgc+G6o24gbMaw4bujbmcgKCp04bqlbiopDQoqIFlpZWxzOiBuxINuZyBzdeG6pXQgDQoNCg0KIyMjICoqMi4gUGjDom4gdMOtY2ggdOG7lW5nIHF1YW4gduG7gSB0w6xuaCBow6xuaCBuw7RuZyBuZ2hp4buHcCoqDQoNCiAgIE5nw6BuaCBuw7RuZyBuZ2hp4buHcCBsw6Agbmd14buTbiBzaW5oIGvhur8gY2jDrW5oIGPhu6dhIGtob+G6o25nIDU4JSBkw6JuIHPhu5Eg4bqkbiDEkOG7mS4gTeG6t2MgZMO5IMSRw7NuZyBnw7NwIGPhu6dhIG7DsyB2w6BvIHThu5VuZyBz4bqjbiBwaOG6qW0gcXXhu5FjIG7hu5lpIChHRFApIMSRw6MgZ2nhuqNtIHh14buRbmcgZMaw4bubaSAyMCUgdsOgIMSRw7NuZyBnw7NwIGPhu6dhIGPDoWMgbmfDoG5oIGtow6FjIHTEg25nIHbhu5tpIHThu5FjIMSR4buZIG5oYW5oIGjGoW4uICAgDQogICANCiAgIELhuqNuZyBk4buvIGxp4buHdSB04buVbmcgcXVhbiB0cm9uZyBuxINtIDIwMjAtMjAyMSBj4bunYSBuw7RuZyBz4bqjbiDhu58g4bqkbiDEkOG7mSAgDQogICANCmBgYHtyfQ0KbGlicmFyeShmbGV4dGFibGUpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpkMSA8LSBkW2QkWWVhcj09JzIwMjAtMjEnLCBdDQpkMSA8LSBkMSAlPiUgc2VsZWN0KC1jKCdBcmVhLlVuaXRzJywgJ1Byb2R1Y3Rpb24uVW5pdHMnKSkNCmRhdGF0YWJsZShkMSkNCmBgYA0KDQojIyMjICoqU+G6o24gbMaw4bujbmcqKiAgICANCg0KICAgVGhlbyBGQU8gKDIwMjApLCDhuqRuIMSQ4buZIGzDoCBuaMOgIHPhuqNuIHh14bqldCBn4burbmcgdsOgIMSR4bqtdSBi4bqvcCBs4bubbiBuaOG6pXQgdHJvbmcgc+G7kSBjw6FjIGxv4bqhaSByYXUgdsOgIMSR4bupbmcgdGjhu6kgaGFpIHbhu4Egc+G6o24geHXhuqV0IGtob2FpIHTDonksIGjDoG5oIHTDonksIHPDunAgbMahLCBicmluamFsIHbDoCBj4bqjaSBi4bqvcC4gVsOgIMSRw6J5IGzDoCBi4bqjbmcgdGjhu5FuZyBrw6ogdOG7lW5nIHPhuqNuIGzGsMahbmcgdGhlbyB04burbmcgbG/huqFpIG7DtG5nIHPhuqNuIG7Eg20gMjAyMC0yMDIxIG5oxrAgc2F1Og0KICAgDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KZDEucyA8LSBkMSAlPiUgZ3JvdXBfYnkoQ3JvcCkgJT4lIHN1bW1hcmlzZSggdG9uZ1NMID0gc3VtKFByb2R1Y3Rpb24pKQ0KZGF0YXRhYmxlKGQxLnMpDQpgYGAgIA0KDQogICBWw6AgY8WpbmcgbmjGsCBWaeG7h3QgTmFtLCDhuqRuIMSQ4buZIGPFqW5nIGzDoCBt4buZdCB0cm9uZyBuaOG7r25nIG7GsOG7m2MgIHPhuqNuIHh14bqldCBn4bqhbyBs4bubbiB0csOqbiB0aOG6vyBnaeG7m2kuIE5odSBj4bqndSBs4bubbiB24buBIGfhuqFvIHRyw6puIHRo4buLIHRyxrDhu51uZyB0b8OgbiBj4bqndSDEkWFuZyB04bqhbyByYSBt4buZdCBtw7RpIHRyxrDhu51uZyB0dXnhu4d0IHbhu51pIGNobyB2aeG7h2MgeHXhuqV0IGto4bqpdSBjw6FjIHPhuqNuIHBo4bqpbSBn4bqhbyBj4bunYSDhuqRuIMSQ4buZLg0KICAgDQogICBT4bqjbiBsxrDhu6NuZyBn4bqhbyBjaGnhur9tIHRo4buLIHBo4bqnbiBjYW8gdHJvbmcgY8OhYyBsb+G6oWkgbsO0bmcgc+G6o24gY+G7p2Eg4bqkbiDEkOG7mSB24bubaSBuxINuZyBzdeG6pXQgdHJ1bmcgYsOsbmggZ+G6p24gMi40IHThuqVuL2hhIHRyb25nIG7Eg20gMjAyMC0yMDIxLg0KDQpgYGB7cn0NCmQxLnMxIDwtIGQxW2QxJENyb3A9PSdSaWNlJywgXQ0KbWVhbihkMS5zMSRZaWVsZCkNCmBgYA0KICAgVHJvbmcgbsSDbSAyMDIwLTIwMjEsIGRvIOG6o25oIGjGsOG7n25nIGPhu6dhIMSR4bqhaSBk4buLY2ggQ09WSUQgdHLDqm4gdG/DoG4gY+G6p3UgIHTDrG5oIGjDrG5oIG7Eg25nIHN14bqldCBn4bqhbyBj4bunYSDhuqRuIMSQ4buZIGtow7RuZyBjYW8gc28gduG7m2kgY8OhYyBuxrDhu5tjIGtow6FjIG3hurdjIGTDuSBsw6AgbeG7mXQgbsaw4bubYyBjw7MgZGnhu4duIHTDrWNoIHRy4buTbmcgbMO6YSBs4bubbiBuaOG6pXQgdGjhur8gZ2nhu5tpLiBO4bq/dSBuxINuZyBzdeG6pXQgxJHhuqF0IHRyw6puIDIuNCB04bqlbi9oYSDEkcaw4bujYyBjb2kgbMOgIMSQ4bqhdCwgY8OybiBs4bqhaSBsw6AgS2jDtG5nIMSQ4bqhdCBzbyB24bubaSBuxINuZyBzdeG6pXQgdHJ1bmcgYsOsbmguDQogICANCmBgYHtyfQ0KZDEuczEkWWllbGQuTlMgPC0gaWZlbHNlKGQxLnMxJFlpZWxkID4gMi40LCAnxJDhuqBUJywgJ0tIw5RORyDEkOG6oFQnKQ0KZGF0YXRhYmxlKGQxLnMxKQ0KYGBgDQoNClNvIHbhu5tpIGPDoWMgbsSDbSB24buBIHRyxrDhu5tjIG7Eg25nIHN14bqldCBn4bqhbyBj4bunYSDhuqRuIMSQ4buZIGPDsyBwaOG6p24gYmnhur9uIMSR4buZbmc6DQoNCmBgYHtyfQ0KZDEuczIgPC0gZFtkJENyb3A9PSdSaWNlJywgXQ0KZDEuczIgPC0gZDEuczIgJT4lIGdyb3VwX2J5KFllYXIpICU+JSBzdW1tYXJpc2UoIE5TVEI9IG1lYW4oWWllbGQpLCAuZ3JvdXBzPSdkcm9wJykNCmRhdGF0YWJsZShkMS5zMikNCmBgYA0KDQojIyMjICoqQ8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biBz4bqjbiBsxrDhu6NuZyoqDQoNClBow6JuIGLhu5EgxJHhuqV0IMSRYWkg4bufIOG6pG4gxJDhu5kgcuG6pXQgxJFhIGThuqFuZyB2w6AgcGjhu6ljIHThuqFwLCDEkcOzIGzDoCBr4bq/dCBxdeG6oyBj4bunYSBz4buxIMSRYSBk4bqhbmcgduG7gSBraMOtIGjhuq11LCDEkeG7i2EgaMOsbmggdsOgIHbEg24gaMOzYSB0csOqbiBraOG6r3AgcXXhu5FjIGdpYS5U4burIMSRw7MgaMOsbmggdGjDoG5oIG7Dqm4gbmhp4buBdSBtw7lhIHbhu6Uga2jDoWMgbmhhdSDhu58g4bqkbiDEkOG7mSwgxJHhu5NuZyB0aOG7nWkgY8WpbmcgbMOgIGzhu6NpIHRo4bq/IGdpw7pwIG7DtG5nIG5naGnhu4dwIOG6pG4gxJDhu5kgxJFhIGThuqFuZyBow7NhIGPDoWMgbG/huqFpIG7DtG5nIHPhuqNuIHRyw6puIHF14buRYyBnaWEgbsOgeS4gU+G6o24gbMaw4bujbmcgbsO0bmcgc+G6o24gdGhlbyB04burbmcgbcO5YSB24bulIOG7nyDhuqRuIMSQ4buYIHBow6JuIGLhu5UgbmjGsCBzYXU6DQogDQpgYGB7cn0NCmQxLnMzIDwtIGQxICU+JSBncm91cF9ieShTZWFzb24pICU+JSBzdW1tYXJpc2UoIHRvbmdTTD0gc3VtKFByb2R1Y3Rpb24pLCAuZ3JvdXBzID0gJ2Ryb3AnKQ0KdGFibGUoZDEuczMpDQpgYGANCg0KRG8g4bqjbmggaMaw4bufbmcgduG7gSBjw6FjIHbhuqVuIMSR4buBIHThu7Egbmhpw6puIGPFqW5nIG5oxrAgbmh1IGPhuqd1IHPhu60gZOG7pW5nIGPhu6dhIGNvbiBuZ8aw4budaSwgZGnhu4duIHTDrWNoIMSR4bqldCB0cuG7k25nIHRy4buNdCBjxaluZyB0aGF5IMSR4buVaSB0aGVvIG7Eg20gdGjDoW5nLCBuxINtIDIwMjAtMjAyMSB04buVbmcgZGnhu4duIHTDrWNoIMSR4bqldCBuw7RuZyBuZ2hp4buHcCBsw6A6IDkxNzkxNiBoZWMtdGEgDQoNCmBgYHtyfQ0Kc3VtKGQxJEFyZWEpDQpgYGANCg0KIyMjICoqMy4gTmjhuq1uIHjDqXQqKg0KDQpOw7RuZyBuZ2hp4buHcCDhu58g4bqkbiDEkOG7mSDEkcOzbmcgbeG7mXQgdmFpIHRyw7IgcXVhbiB0cuG7jW5nIHRyb25nIGtpbmggdOG6vyBj4bunYSBxdeG7kWMgZ2lhIG7DoHkgdsOgIGN1bmcgY+G6pXAgbmd14buTbiBz4buRbmcgY2hvIG3hu5l0IGzGsOG7o25nIGzhu5tuIGTDom4gc+G7kS4g4bqkbiDEkOG7mSBy4bqldCDEkWEgZOG6oW5nIHbDoCBwaG9uZyBwaMO6IHbhu5tpIG5oaeG7gXUgbG/huqFpIGPDonkgdHLhu5NuZywgxJDhuqV0IMSRYWkgcGhvbmcgcGjDuiB2w6AgxJFhIGThuqFuZyB24buBIGtow60gaOG6rXUgaOG7lyB0cuG7oyBjaG8gdmnhu4djIHRy4buTbmcgdHLhu410IG5oaeG7gXUgbG/huqFpIGPDonkgbmjGsCBsw7phLCBo4bqhdCB0acOqdSwgY8OgIHBow6osIHbDoCByYXUgY+G7pyBxdeG6oy4NCg0KVHLhuqNpIHF1YSBxdcOhIHRyw6xuaCBj4bqjaSBjw6FjaCB24buBIG7DtG5nIG5naGnhu4dwLCDhuqRuIMSQ4buZIMSRYW5nIG5nw6B5IGPDoG5nIHBow6F0IHRyaeG7g24gaMahbiB04bqtbiBk4bulbmcgbeG7jWkgbOG7o2kgdGjhur8gduG7gSB04buxIG5oacOqbiB2w6Agbmd14buTbiBs4buxYyBsYW8gxJHhu5luZyDEkeG7gyB4w6J5IGThu7FuZyBt4buZdCBu4buBbiBuw7RuZyBuZ2hp4buHcCBob8OgbiBjaOG7iW5oIHJpw6puZyBiaeG7h3QuIA0KIA0KIA0KIA0KDQoNCg0K