データサイエンスは、コード(プログラム)を書くことではなく、データを可視化してみることによって、考え、疑問を持ち、新しい発見をしていくことだ

考察・疑問をたいせつにし、書き残してください。

library(tidyverse)
library(WDI)
#library(showtext)

データの読み込み(2)

総人口 Population, total:SP.POP.TOTL

出生率(千人)Birth rate, crude (per 1,000 people):SP.DYN.CBRT.IN

死亡率(千人)Death rate, crude (per 1,000 people):SP.DYN.CDRT.IN

若年労働人口率 Age dependency ratio, young (% of working-age population):SP.POP.DPND.YG

高齢者労働人口率 Age dependency ratio, old (% of working-age population):SP.POP.DPND.OL

df_pop_related <- WDI(indicator = c(pop = "SP.POP.TOTL",
                            birth_rate = "SP.DYN.CBRT.IN",
                            death_rate = "SP.DYN.CDRT.IN",
                            young = "SP.POP.DPND.YG",
                            old = "SP.POP.DPND.OL"))

保存と読み込み

write_csv(df_pop_related, "data/pop_related.csv")
df_pop_related <- read_csv("data/pop_related.csv")
Rows: 16758 Columns: 9── Column specification ─────────────────────────────────────────────────────────────────
Delimiter: ","
chr (3): country, iso2c, iso3c
dbl (6): year, pop, birth_rate, death_rate, young, old
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

データの確認

head(df_pop_related)

データの構造(Structure)

str(df_pop_related[])
spc_tbl_ [16,758 × 9] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ country   : chr [1:16758] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
 $ iso2c     : chr [1:16758] "AF" "AF" "AF" "AF" ...
 $ iso3c     : chr [1:16758] "AFG" "AFG" "AFG" "AFG" ...
 $ year      : num [1:16758] 1960 1961 1962 1963 1964 ...
 $ pop       : num [1:16758] 8622466 8790140 8969047 9157465 9355514 ...
 $ birth_rate: num [1:16758] 50.3 50.4 50.6 50.7 50.8 ...
 $ death_rate: num [1:16758] 31.9 31.3 30.8 30.4 29.9 ...
 $ young     : num [1:16758] 75 75.1 75.4 75.7 76.2 ...
 $ old       : num [1:16758] 5.1 5.08 5.05 5.02 5 ...
 - attr(*, "spec")=
  .. cols(
  ..   country = col_character(),
  ..   iso2c = col_character(),
  ..   iso3c = col_character(),
  ..   year = col_double(),
  ..   pop = col_double(),
  ..   birth_rate = col_double(),
  ..   death_rate = col_double(),
  ..   young = col_double(),
  ..   old = col_double()
  .. )
 - attr(*, "problems")=<externalptr> 

{glimpse(df_pop_related)}

glimpse(df_pop_related)
Rows: 16,758
Columns: 9
$ country    <chr> "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghani…
$ iso2c      <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "A…
$ iso3c      <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "AFG"…
$ year       <dbl> 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 19…
$ pop        <dbl> 8622466, 8790140, 8969047, 9157465, 9355514, 9565147, 9783147, 10010…
$ birth_rate <dbl> 50.340, 50.443, 50.570, 50.703, 50.831, 50.872, 50.986, 51.081, 51.1…
$ death_rate <dbl> 31.921, 31.349, 30.845, 30.359, 29.867, 29.389, 28.872, 28.396, 27.8…
$ young      <dbl> 74.95021, 75.14425, 75.35238, 75.69330, 76.21984, 77.00953, 77.97556…
$ old        <dbl> 5.100901, 5.078088, 5.049558, 5.022020, 4.999719, 4.985287, 4.979162…

変形

wide データを long データに変形します。いずれ説明します。

df_pop_long <- df_pop_related |> 
  pivot_longer(pop:old, names_to = "name", values_to = "value")

出生率と死亡率

出生率(千人)Birth rate, crude (per 1,000 people):SP.DYN.CBRT.IN [Link]

死亡率(千人)Death rate, crude (per 1,000 people):SP.DYN.CDRT.IN [Link]


df_pop_long |> filter(name %in% c("birth_rate", "death_rate")) |>
  filter(country == "World") |> drop_na(value) |> # NA value を削除
  ggplot(aes(year, value, col = name)) + geom_line() + 
  labs(title = "出生率、死亡率(1000人当たり)")


練習5 国を選択して、出生率、死亡率のグラフを描いてください。

df_pop_long |> filter(name %in% c("birth_rate", "death_rate")) |>
  filter(country == "Japan") |> drop_na(value) |> # NA value を削除
  ggplot(aes(year, value, col = name)) + geom_line() + 
  labs(title = "日本の出生率、死亡率(1000人当たり)")

考察:1968年ごろの落ち込みは何だろうか。丙午(丙午)?

df_pop_long |> filter(name %in% c("birth_rate", "death_rate")) |>
  filter(country == "Afghanistan") |> drop_na(value) |> # NA value を削除
  ggplot(aes(year, value, col = name)) + geom_line() + 
  labs(title = "アフガニスタンの出生率、死亡率(1000人当たり)")

考察:


df_pop_long |> filter(name %in% c("birth_rate", "death_rate")) |>
  filter(iso2c %in% c("BD", "BR", "CN", "ID", "NG", "JP")) |> drop_na(value) |>
  ggplot(aes(year, value, col = country, linetype = name)) + 
  geom_line() + labs(title = "国々の、出生率、死亡率(1000人当たり)")

考察


df_pop_long |> filter(name %in% c("birth_rate", "death_rate")) |>
  filter(iso2c %in% c("Z4", "Z7", "ZJ", "ZQ", "XU", "8S", "ZG")) |> drop_na() |>
  ggplot(aes(year, value, col = country, linetype = name)) + 
  geom_line() + labs(title = "地域ごとの出生率・死亡率(1000人あたり)")

考察・疑問


df_pop_long |> filter(name %in% c("birth_rate", "death_rate")) |>
  filter(iso2c %in% c("BD", "BR", "CN", "ID", "NG", "JP")) |> drop_na(value) |>
  ggplot(aes(year, value, col = country, linetype = name)) + 
  geom_line() + labs(title = "国々の、出生率、死亡率(1000人当たり)")


練習6. いくつかの国または地域の、出生率、死亡率のグラフを描いてください。

df_pop_long |> filter(name %in% c("birth_rate", "death_rate")) |>
  filter(iso2c %in% c("BR", "RU", "IN", "CN", "ZA")) |> drop_na(value) |>
  ggplot(aes(year, value, col = country, linetype = name)) + 
  geom_line() + labs(title = "BRICSの出生率、死亡率(1000人当たり)")

考察

扶養家族の労働人口に対する割合

若年労働人口率 Age dependency ratio, young (% of working-age population):SP.POP.DPND.YG [Link]

年齢別扶養比率(若年)は、15歳未満の扶養家族の、15歳から64歳までの生産年齢人口に対する比率である。データは、生産年齢人口100人当たりの扶養家族の割合で示されている。

高齢者労働人口率 Age dependency ratio, old (% of working-age population):SP.POP.DPND.OL [Link to Metadata]

年齢別扶養比率(高齢)は、生産年齢人口(15~64歳)に対する高齢扶養家族(65歳以上)の比率。データは、生産年齢人口100人当たりの扶養家族の割合で示されている。


df_pop_long |> filter(name %in% c("young", "old")) |>
  filter(country == "World") |> 
  ggplot(aes(year, value, col = name)) + geom_line() + 
  labs(title = "世界の高齢者・若年者扶養率")

練習7. 国を選択して、高齢者・若年者の扶養率のグラフを描いてください。

df_pop_long |> filter(name %in% c("young", "old")) |>
  filter(country == "Japan") |> 
  ggplot(aes(year, value, col = name)) + geom_line() + 
  labs(title = "日本の高齢者・若年者扶養率")

考察

df_pop_long |> filter(name %in% c("young", "old")) |>
  filter(country == "France") |> 
  ggplot(aes(year, value, col = name)) + geom_line() + 
  labs(title = "フランスの高齢者・若年者扶養率")

考察


df_pop_long |> filter(name %in% c("young", "old")) |>
  filter(iso2c %in% c("BD", "BR", "CN", "ID", "NG", "JP")) |> 
  ggplot(aes(year, value, col = country, linetype = name)) + 
  geom_line() + labs(title = "国々の高齢者・若年者扶養率")

考察


df_pop_long |> filter(name %in% c("young", "old")) |>
  filter(iso2c %in% c("US", "GB", "CN", "DE", "FR", "JP", "IN")) |> 
  ggplot(aes(year, value, col = country, linetype = name)) + 
  geom_line() + labs(title = "国々の高齢者・若年者扶養率")

考察


df_pop_long |> filter(name %in% c("young", "old")) |>
  filter(country %in% c("South Asia", "Europe & Central Asia", "Middle East & North Africa", 
"East Asia & Pacific", "Sub-Saharan Africa", "Latin America & Caribbean", "North America")) |> 
  ggplot(aes(year, value, col = country, linetype = name)) + 
  geom_line() + labs(title = "地域別の労働人口に対する高齢・若年扶養率(%)", 
       subtitle = "実線:高齢者、点線:若年者", x = "", col = "", linetype = "")

練習8. いくつかの国または地域の、高齢者・若年者の扶養率のグラフを描いてください。

df_pop_long |> filter(name %in% c("young", "old")) |>
  filter(iso2c %in% c("BR", "RU", "IN", "CN", "ZA", "JP", "IN")) |> 
  ggplot(aes(year, value, col = country, linetype = name)) + 
  geom_line() + labs(title = "国々の高齢者・若年者扶養率")

考察


df_pop_long |> filter(name %in% c("birth_rate", "death_rate", "young", "old")) |>
  filter(country == "Japan") |> drop_na(value) |>
  ggplot(aes(year, value, col = name)) + geom_line() +
  labs(title = "日本の出生率・死亡率・労働人口に対する高齢・若年扶養率(%)")


練習7. 国を選択し(ドイツを変更し)て、高齢者・若年者の扶養率のグラフを描いてください。

df_pop_long |> filter(name %in% c("birth_rate", "death_rate", "young", "old")) |>
  filter(country == "Germany") |> drop_na(value) |>
  ggplot(aes(year, value, col = name)) + geom_line() +
  labs(title = "ドイツの出生率・死亡率・労働人口に対する高齢・若年扶養率(%)")


df_pop_long |> filter(name %in% c("birth_rate", "death_rate", "young", "old")) |>
  filter(country  %in%  c("Germany", "Japan")) |> drop_na(value) |>
  ggplot(aes(year, value, col = country, linetype = name)) + geom_line() +
  labs(title = "ドイツと日本の出生率・死亡率・労働人口に対する高齢・若年扶養率(%)")


df_pop_long |> filter(name == "pop") |>
  filter(country  %in%  c("Germany", "Japan")) |> drop_na(value) |>
  ggplot(aes(year, value, col = country)) + geom_line() +
  labs(title = "ドイツと日本の人口")

問い:どんなことがわかりますか。


練習8. (ドイツと日本を変更し)いくつかの国または地域の、高齢者・若年者の扶養率のグラフを描いてください。

df_pop_long |> filter(name %in% c("birth_rate", "death_rate", "young", "old")) |>
  filter(country  %in%  c("Korea, Rep.", "Japan")) |> drop_na(value) |>
  ggplot(aes(year, value, col = country, linetype = name)) + geom_line() +
  labs(title = "韓国と日本の出生率・死亡率・労働人口に対する\n高齢・若年扶養率(%)")

考察

復習

課題・練習

提出はしなくて良いですが、ぜひ実際に手を動かして実行してください。考えたこと、疑問があれば、記録しておいてください。

  1. WDI のサイトで、興味のある指標の、名前と、WDI コードを選んでください。できれば、選択した理由も記録してください。

  2. Germany と ドイツの部分を他の国名に変えてみてください。(図

  3. 1960年の総人口が多い順に五番目までリストしてみましょう。

  4. いくつかの国を選択して、総人口の推移のグラフを描いてください。

  5. 国を選択して、出生率、死亡率のグラフを描いてください。

  6. いくつかの国または地域の、出生率、死亡率のグラフを描いてください。

  7. 国を選択して、高齢者・若年者の扶養率のグラフを描いてください。

  8. いくつかの国または地域の、高齢者・若年者の扶養率のグラフを描いてください。

参考文献

  1. 「みんなのデータサイエンス - Data Science for All」[はじめてのデータサイエンス]

    • 導入として、GDP(国内総生産)のデータを使って説明しています。
  2. Posit Primers: The Basics 対話型の演習サイトの最初 [Link]

    1. Visualization Basics

    2. Programming Basics

  3. RStudio IDE Cheat Sheet. 早見表です。印刷して使うために、PDF も提供しています。[Site Link]

LS0tCnRpdGxlOiAiR0VTIDAwMSDmvJTnv5IyLCBQYXJ0IElJIgphdXRob3I6ICJJRCwgWW91ciBOYW1lIgpkYXRlOiAiMjAyM+W5tDEy5pyIMTnml6VgIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgo+IOODh+ODvOOCv+OCteOCpOOCqOODs+OCueOBr+OAgeOCs+ODvOODie+8iOODl+ODreOCsOODqeODoO+8ieOCkuabuOOBj+OBk+OBqOOBp+OBr+OBquOBj+OAgeODh+ODvOOCv+OCkuWPr+imluWMluOBl+OBpuOBv+OCi+OBk+OBqOOBq+OCiOOBo+OBpuOAgeiAg+OBiOOAgeeWkeWVj+OCkuaMgeOBoeOAgeaWsOOBl+OBhOeZuuimi+OCkuOBl+OBpuOBhOOBj+OBk+OBqOOBoAo+Cj4g6ICD5a+f44O755aR5ZWP44KS44Gf44GE44Gb44Gk44Gr44GX44CB5pu444GN5q6L44GX44Gm44GP44Gg44GV44GE44CCCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoV0RJKQojbGlicmFyeShzaG93dGV4dCkKYGBgCgojIyDjg4fjg7zjgr/jga7oqq3jgb/ovrzjgb/vvIgy77yJCgrnt4/kurrlj6PjgIBQb3B1bGF0aW9uLCB0b3RhbO+8mlNQLlBPUC5UT1RMCgrlh7rnlJ/njofvvIjljYPkurrvvIlCaXJ0aCByYXRlLCBjcnVkZSAocGVyIDEsMDAwIHBlb3BsZSnvvJpTUC5EWU4uQ0JSVC5JTgoK5q275Lqh546H77yI5Y2D5Lq677yJRGVhdGggcmF0ZSwgY3J1ZGUgKHBlciAxLDAwMCBwZW9wbGUp77yaU1AuRFlOLkNEUlQuSU4KCuiLpeW5tOWKtOWDjeS6uuWPo+eOh+OAgEFnZSBkZXBlbmRlbmN5IHJhdGlvLCB5b3VuZyAoJSBvZiB3b3JraW5nLWFnZSBwb3B1bGF0aW9uKe+8mlNQLlBPUC5EUE5ELllHCgrpq5jpvaLogIXlirTlg43kurrlj6PnjofjgIBBZ2UgZGVwZW5kZW5jeSByYXRpbywgb2xkICglIG9mIHdvcmtpbmctYWdlIHBvcHVsYXRpb24p77yaU1AuUE9QLkRQTkQuT0wKCmBgYHtyIGV2YWwgPSBGQUxTRX0KZGZfcG9wX3JlbGF0ZWQgPC0gV0RJKGluZGljYXRvciA9IGMocG9wID0gIlNQLlBPUC5UT1RMIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpcnRoX3JhdGUgPSAiU1AuRFlOLkNCUlQuSU4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhdGhfcmF0ZSA9ICJTUC5EWU4uQ0RSVC5JTiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VuZyA9ICJTUC5QT1AuRFBORC5ZRyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQgPSAiU1AuUE9QLkRQTkQuT0wiKSkKYGBgCgojIyDkv53lrZjjgajoqq3jgb/ovrzjgb8KCmBgYHtyIGV2YWwgPSBGQUxTRX0Kd3JpdGVfY3N2KGRmX3BvcF9yZWxhdGVkLCAiZGF0YS9wb3BfcmVsYXRlZC5jc3YiKQpgYGAKCmBgYHtyfQpkZl9wb3BfcmVsYXRlZCA8LSByZWFkX2NzdigiZGF0YS9wb3BfcmVsYXRlZC5jc3YiKQpgYGAKCiMjIOODh+ODvOOCv+OBrueiuuiqjQoKYGBge3J9CmhlYWQoZGZfcG9wX3JlbGF0ZWQpCmBgYAoKIyMg44OH44O844K/44Gu5qeL6YCg77yIU3RydWN0dXJl77yJCgpgYGB7ciBldmFsID0gRkFMU0V9CnN0cihkZl9wb3BfcmVsYXRlZFtdKQpgYGAKCmBgYHtyIGVjaG89RkFMU0V9CnN0cihkZl9wb3BfcmVsYXRlZCkKYGBgCgpge2dsaW1wc2UoZGZfcG9wX3JlbGF0ZWQpfWAKCmBgYHtyfQpnbGltcHNlKGRmX3BvcF9yZWxhdGVkKQpgYGAKCiMjIOWkieW9ogoKd2lkZSDjg4fjg7zjgr/jgpIgbG9uZyDjg4fjg7zjgr/jgavlpInlvaLjgZfjgb7jgZnjgILjgYTjgZrjgozoqqzmmI7jgZfjgb7jgZnjgIIKCmBgYHtyfQpkZl9wb3BfbG9uZyA8LSBkZl9wb3BfcmVsYXRlZCB8PiAKICBwaXZvdF9sb25nZXIocG9wOm9sZCwgbmFtZXNfdG8gPSAibmFtZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpCmBgYAoKIyMg5Ye655Sf546H44Go5q275Lqh546HCgrlh7rnlJ/njofvvIjljYPkurrvvIlCaXJ0aCByYXRlLCBjcnVkZSAocGVyIDEsMDAwIHBlb3BsZSnvvJpTUC5EWU4uQ0JSVC5JTiBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TUC5EWU4uQ0JSVC5JTildCgrmrbvkuqHnjofvvIjljYPkurrvvIlEZWF0aCByYXRlLCBjcnVkZSAocGVyIDEsMDAwIHBlb3BsZSnvvJpTUC5EWU4uQ0RSVC5JTiBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TUC5EWU4uQ0RSVC5JTildCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmBgYHtyfQpkZl9wb3BfbG9uZyB8PiBmaWx0ZXIobmFtZSAlaW4lIGMoImJpcnRoX3JhdGUiLCAiZGVhdGhfcmF0ZSIpKSB8PgogIGZpbHRlcihjb3VudHJ5ID09ICJXb3JsZCIpIHw+IGRyb3BfbmEodmFsdWUpIHw+ICMgTkEgdmFsdWUg44KS5YmK6ZmkCiAgZ2dwbG90KGFlcyh5ZWFyLCB2YWx1ZSwgY29sID0gbmFtZSkpICsgZ2VvbV9saW5lKCkgKyAKICBsYWJzKHRpdGxlID0gIuWHuueUn+eOh+OAgeatu+S6oeeOh++8iDEwMDDkurrlvZPjgZ/jgorvvIkiKQpgYGAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKirnt7Tnv5I1IOWbveOCkumBuOaKnuOBl+OBpuOAgeWHuueUn+eOh+OAgeatu+S6oeeOh+OBruOCsOODqeODleOCkuaPj+OBhOOBpuOBj+OBoOOBleOBhOOAgioqCgpgYGB7cn0KZGZfcG9wX2xvbmcgfD4gZmlsdGVyKG5hbWUgJWluJSBjKCJiaXJ0aF9yYXRlIiwgImRlYXRoX3JhdGUiKSkgfD4KICBmaWx0ZXIoY291bnRyeSA9PSAiSmFwYW4iKSB8PiBkcm9wX25hKHZhbHVlKSB8PiAjIE5BIHZhbHVlIOOCkuWJiumZpAogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IG5hbWUpKSArIGdlb21fbGluZSgpICsgCiAgbGFicyh0aXRsZSA9ICLml6XmnKzjga7lh7rnlJ/njofjgIHmrbvkuqHnjofvvIgxMDAw5Lq65b2T44Gf44KK77yJIikKYGBgCgrogIPlr5/vvJoxOTY45bm044GU44KN44Gu6JC944Gh6L6844G/44Gv5L2V44Gg44KN44GG44GL44CC5LiZ5Y2I77yI5LiZ5Y2I77yJ77yfCgpgYGB7cn0KZGZfcG9wX2xvbmcgfD4gZmlsdGVyKG5hbWUgJWluJSBjKCJiaXJ0aF9yYXRlIiwgImRlYXRoX3JhdGUiKSkgfD4KICBmaWx0ZXIoY291bnRyeSA9PSAiQWZnaGFuaXN0YW4iKSB8PiBkcm9wX25hKHZhbHVlKSB8PiAjIE5BIHZhbHVlIOOCkuWJiumZpAogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IG5hbWUpKSArIGdlb21fbGluZSgpICsgCiAgbGFicyh0aXRsZSA9ICLjgqLjg5Xjgqzjg4vjgrnjgr/jg7Pjga7lh7rnlJ/njofjgIHmrbvkuqHnjofvvIgxMDAw5Lq65b2T44Gf44KK77yJIikKYGBgCgrogIPlr5/vvJoKCi0gICDjgqLjg5Xjgqzjg4vjgrnjgr/jg7PjgafjgIExOTgw5bm05Luj44Gr5L2V44GM44GC44Gj44Gf44Gu44Gg44KN44GG44GL44CCCgotICAg5YWo5L2T44Go44GX44Gm44Gv44CB5Ye655Sf546H44KC44CB5q275Lqh546H44KC5LiL44GM44Gj44Gm44GE44KL44CCCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmBgYHtyfQpkZl9wb3BfbG9uZyB8PiBmaWx0ZXIobmFtZSAlaW4lIGMoImJpcnRoX3JhdGUiLCAiZGVhdGhfcmF0ZSIpKSB8PgogIGZpbHRlcihpc28yYyAlaW4lIGMoIkJEIiwgIkJSIiwgIkNOIiwgIklEIiwgIk5HIiwgIkpQIikpIHw+IGRyb3BfbmEodmFsdWUpIHw+CiAgZ2dwbG90KGFlcyh5ZWFyLCB2YWx1ZSwgY29sID0gY291bnRyeSwgbGluZXR5cGUgPSBuYW1lKSkgKyAKICBnZW9tX2xpbmUoKSArIGxhYnModGl0bGUgPSAi5Zu944CF44Gu44CB5Ye655Sf546H44CB5q275Lqh546H77yIMTAwMOS6uuW9k+OBn+OCiu+8iSIpCmBgYAoK6ICD5a+fCgotICAg44Gd44KM44Ge44KM44Gu5Zu944Gr44Gk44GE44Gm44Gp44Gu44KI44GG44Gq44GT44Go44GM44KP44GL44KK44G+44GZ44GL44CC55aR5ZWP54K544KS5oyZ44GS44Gm44G/44G+44GX44KH44GG44CCCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmBgYHtyfQpkZl9wb3BfbG9uZyB8PiBmaWx0ZXIobmFtZSAlaW4lIGMoImJpcnRoX3JhdGUiLCAiZGVhdGhfcmF0ZSIpKSB8PgogIGZpbHRlcihpc28yYyAlaW4lIGMoIlo0IiwgIlo3IiwgIlpKIiwgIlpRIiwgIlhVIiwgIjhTIiwgIlpHIikpIHw+IGRyb3BfbmEoKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IGNvdW50cnksIGxpbmV0eXBlID0gbmFtZSkpICsgCiAgZ2VvbV9saW5lKCkgKyBsYWJzKHRpdGxlID0gIuWcsOWfn+OBlOOBqOOBruWHuueUn+eOh+ODu+atu+S6oeeOh++8iDEwMDDkurrjgYLjgZ/jgorvvIkiKQpgYGAKCuiAg+Wvn+ODu+eWkeWVjwoKLSAgIOOBqeOBruOCiOOBhuOBqueJueW+tOOBjOOBguOCiuOBvuOBmeOBi+OAguawl+OBpeOBhOOBn+OBk+OBqOOCkuabuOOBhOOBpuOBiuOBjeOBvuOBl+OCh+OBhuOAggoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpgYGB7cn0KZGZfcG9wX2xvbmcgfD4gZmlsdGVyKG5hbWUgJWluJSBjKCJiaXJ0aF9yYXRlIiwgImRlYXRoX3JhdGUiKSkgfD4KICBmaWx0ZXIoaXNvMmMgJWluJSBjKCJCRCIsICJCUiIsICJDTiIsICJJRCIsICJORyIsICJKUCIpKSB8PiBkcm9wX25hKHZhbHVlKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IGNvdW50cnksIGxpbmV0eXBlID0gbmFtZSkpICsgCiAgZ2VvbV9saW5lKCkgKyBsYWJzKHRpdGxlID0gIuWbveOAheOBruOAgeWHuueUn+eOh+OAgeatu+S6oeeOh++8iDEwMDDkurrlvZPjgZ/jgorvvIkiKQpgYGAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKirnt7Tnv5I2LiDjgYTjgY/jgaTjgYvjga7lm73jgb7jgZ/jga/lnLDln5/jga7jgIHlh7rnlJ/njofjgIHmrbvkuqHnjofjga7jgrDjg6njg5XjgpLmj4/jgYTjgabjgY/jgaDjgZXjgYTjgIIqKgoKYGBge3J9CmRmX3BvcF9sb25nIHw+IGZpbHRlcihuYW1lICVpbiUgYygiYmlydGhfcmF0ZSIsICJkZWF0aF9yYXRlIikpIHw+CiAgZmlsdGVyKGlzbzJjICVpbiUgYygiQlIiLCAiUlUiLCAiSU4iLCAiQ04iLCAiWkEiKSkgfD4gZHJvcF9uYSh2YWx1ZSkgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIHZhbHVlLCBjb2wgPSBjb3VudHJ5LCBsaW5ldHlwZSA9IG5hbWUpKSArIAogIGdlb21fbGluZSgpICsgbGFicyh0aXRsZSA9ICJCUklDU+OBruWHuueUn+eOh+OAgeatu+S6oeeOh++8iDEwMDDkurrlvZPjgZ/jgorvvIkiKQpgYGAKCuiAg+WvnwoKLSAgIEJSSUNTIOOBruWbveOAheOBrueJueW+tOOBp+OAgeawl+OBpeOBhOOBn+OBk+OBqOOCkuabuOOBhOOBpuOBv+OBvuOBl+OCh+OBhuOAggoKIyMg5om26aSK5a625peP44Gu5Yq05YON5Lq65Y+j44Gr5a++44GZ44KL5Ymy5ZCICgroi6XlubTlirTlg43kurrlj6PnjofjgIBBZ2UgZGVwZW5kZW5jeSByYXRpbywgeW91bmcgKCUgb2Ygd29ya2luZy1hZ2UgcG9wdWxhdGlvbinvvJpTUC5QT1AuRFBORC5ZRyBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TUC5QT1AuRFBORC5ZRyldCgrlubTpvaLliKXmibbppIrmr5TnjofvvIjoi6XlubTvvInjga/jgIExNeats+acqua6gOOBruaJtumkiuWutuaXj+OBruOAgTE15q2z44GL44KJNjTmrbPjgb7jgafjga7nlJ/nlKPlubTpvaLkurrlj6Pjgavlr77jgZnjgovmr5TnjofjgafjgYLjgovjgILjg4fjg7zjgr/jga/jgIHnlJ/nlKPlubTpvaLkurrlj6MxMDDkurrlvZPjgZ/jgorjga7mibbppIrlrrbml4/jga7libLlkIjjgafnpLrjgZXjgozjgabjgYTjgovjgIIKCumrmOm9ouiAheWKtOWDjeS6uuWPo+eOh+OAgEFnZSBkZXBlbmRlbmN5IHJhdGlvLCBvbGQgKCUgb2Ygd29ya2luZy1hZ2UgcG9wdWxhdGlvbinvvJpTUC5QT1AuRFBORC5PTCBbW0xpbmsgdG8gTWV0YWRhdGFdKGh0dHBzOi8vZGF0YWJhbmsud29ybGRiYW5rLm9yZy9tZXRhZGF0YWdsb3NzYXJ5L2hlYWx0aC1udXRyaXRpb24tYW5kLXBvcHVsYXRpb24tc3RhdGlzdGljcy9zZXJpZXMvU1AuUE9QLkRQTkQuT0wpXQoK5bm06b2i5Yil5om26aSK5q+U546H77yI6auY6b2i77yJ44Gv44CB55Sf55Sj5bm06b2i5Lq65Y+j77yIMTXvvZ42NOats++8ieOBq+WvvuOBmeOCi+mrmOm9ouaJtumkiuWutuaXj++8iDY15q2z5Lul5LiK77yJ44Gu5q+U546H44CC44OH44O844K/44Gv44CB55Sf55Sj5bm06b2i5Lq65Y+jMTAw5Lq65b2T44Gf44KK44Gu5om26aSK5a625peP44Gu5Ymy5ZCI44Gn56S644GV44KM44Gm44GE44KL44CCCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmBgYHtyfQpkZl9wb3BfbG9uZyB8PiBmaWx0ZXIobmFtZSAlaW4lIGMoInlvdW5nIiwgIm9sZCIpKSB8PgogIGZpbHRlcihjb3VudHJ5ID09ICJXb3JsZCIpIHw+IAogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IG5hbWUpKSArIGdlb21fbGluZSgpICsgCiAgbGFicyh0aXRsZSA9ICLkuJbnlYzjga7pq5jpvaLogIXjg7voi6XlubTogIXmibbppIrnjociKQpgYGAKCioq57e057+SNy4g5Zu944KS6YG45oqe44GX44Gm44CB6auY6b2i6ICF44O76Iul5bm06ICF44Gu5om26aSK546H44Gu44Kw44Op44OV44KS5o+P44GE44Gm44GP44Gg44GV44GE44CCKioKCmBgYHtyfQpkZl9wb3BfbG9uZyB8PiBmaWx0ZXIobmFtZSAlaW4lIGMoInlvdW5nIiwgIm9sZCIpKSB8PgogIGZpbHRlcihjb3VudHJ5ID09ICJKYXBhbiIpIHw+IAogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IG5hbWUpKSArIGdlb21fbGluZSgpICsgCiAgbGFicyh0aXRsZSA9ICLml6XmnKzjga7pq5jpvaLogIXjg7voi6XlubTogIXmibbppIrnjociKQpgYGAKCuiAg+WvnwoKLSAgIOOBqeOCk+OBquOBk+OBqOOBjOOCj+OBi+OCiuOBvuOBmeOBi+OAggoKYGBge3J9CmRmX3BvcF9sb25nIHw+IGZpbHRlcihuYW1lICVpbiUgYygieW91bmciLCAib2xkIikpIHw+CiAgZmlsdGVyKGNvdW50cnkgPT0gIkZyYW5jZSIpIHw+IAogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IG5hbWUpKSArIGdlb21fbGluZSgpICsgCiAgbGFicyh0aXRsZSA9ICLjg5Xjg6njg7Pjgrnjga7pq5jpvaLogIXjg7voi6XlubTogIXmibbppIrnjociKQpgYGAKCuiAg+WvnwoKLSAgIOOBqeOCk+OBquOBk+OBqOOBjOOCj+OBi+OCiuOBvuOBmeOBi+OAguaXpeacrOOBruOCsOODqeODleOBqOavlOOBueOCi+OBqOOBqeOBhuOBp+OBl+OCh+OBhuOBi+OAggoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpgYGB7cn0KZGZfcG9wX2xvbmcgfD4gZmlsdGVyKG5hbWUgJWluJSBjKCJ5b3VuZyIsICJvbGQiKSkgfD4KICBmaWx0ZXIoaXNvMmMgJWluJSBjKCJCRCIsICJCUiIsICJDTiIsICJJRCIsICJORyIsICJKUCIpKSB8PiAKICBnZ3Bsb3QoYWVzKHllYXIsIHZhbHVlLCBjb2wgPSBjb3VudHJ5LCBsaW5ldHlwZSA9IG5hbWUpKSArIAogIGdlb21fbGluZSgpICsgbGFicyh0aXRsZSA9ICLlm73jgIXjga7pq5jpvaLogIXjg7voi6XlubTogIXmibbppIrnjociKQpgYGAKCuiAg+WvnwoKLSAgIOOBqeOCk+OBqueJueW+tOOBjOWIhuOBi+OCiuOBvuOBmeOBi+OAggoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpgYGB7cn0KZGZfcG9wX2xvbmcgfD4gZmlsdGVyKG5hbWUgJWluJSBjKCJ5b3VuZyIsICJvbGQiKSkgfD4KICBmaWx0ZXIoaXNvMmMgJWluJSBjKCJVUyIsICJHQiIsICJDTiIsICJERSIsICJGUiIsICJKUCIsICJJTiIpKSB8PiAKICBnZ3Bsb3QoYWVzKHllYXIsIHZhbHVlLCBjb2wgPSBjb3VudHJ5LCBsaW5ldHlwZSA9IG5hbWUpKSArIAogIGdlb21fbGluZSgpICsgbGFicyh0aXRsZSA9ICLlm73jgIXjga7pq5jpvaLogIXjg7voi6XlubTogIXmibbppIrnjociKQpgYGAKCuiAg+WvnwoKLSAgIOOBqeOCk+OBqueJueW+tOOBjOWIhuOBi+OCiuOBvuOBmeOBi+OAggoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpgYGB7cn0KZGZfcG9wX2xvbmcgfD4gZmlsdGVyKG5hbWUgJWluJSBjKCJ5b3VuZyIsICJvbGQiKSkgfD4KICBmaWx0ZXIoY291bnRyeSAlaW4lIGMoIlNvdXRoIEFzaWEiLCAiRXVyb3BlICYgQ2VudHJhbCBBc2lhIiwgIk1pZGRsZSBFYXN0ICYgTm9ydGggQWZyaWNhIiwgCiJFYXN0IEFzaWEgJiBQYWNpZmljIiwgIlN1Yi1TYWhhcmFuIEFmcmljYSIsICJMYXRpbiBBbWVyaWNhICYgQ2FyaWJiZWFuIiwgIk5vcnRoIEFtZXJpY2EiKSkgfD4gCiAgZ2dwbG90KGFlcyh5ZWFyLCB2YWx1ZSwgY29sID0gY291bnRyeSwgbGluZXR5cGUgPSBuYW1lKSkgKyAKICBnZW9tX2xpbmUoKSArIGxhYnModGl0bGUgPSAi5Zyw5Z+f5Yil44Gu5Yq05YON5Lq65Y+j44Gr5a++44GZ44KL6auY6b2i44O76Iul5bm05om26aSK546H77yI77yF77yJIiwgCiAgICAgICBzdWJ0aXRsZSA9ICLlrp/nt5rvvJrpq5jpvaLogIXjgIHngrnnt5rvvJroi6XlubTogIUiLCB4ID0gIiIsIGNvbCA9ICIiLCBsaW5ldHlwZSA9ICIiKQpgYGAKCioq57e057+SOC4g44GE44GP44Gk44GL44Gu5Zu944G+44Gf44Gv5Zyw5Z+f44Gu44CB6auY6b2i6ICF44O76Iul5bm06ICF44Gu5om26aSK546H44Gu44Kw44Op44OV44KS5o+P44GE44Gm44GP44Gg44GV44GE44CCKioKCmBgYHtyfQpkZl9wb3BfbG9uZyB8PiBmaWx0ZXIobmFtZSAlaW4lIGMoInlvdW5nIiwgIm9sZCIpKSB8PgogIGZpbHRlcihpc28yYyAlaW4lIGMoIkJSIiwgIlJVIiwgIklOIiwgIkNOIiwgIlpBIiwgIkpQIiwgIklOIikpIHw+IAogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IGNvdW50cnksIGxpbmV0eXBlID0gbmFtZSkpICsgCiAgZ2VvbV9saW5lKCkgKyBsYWJzKHRpdGxlID0gIuWbveOAheOBrumrmOm9ouiAheODu+iLpeW5tOiAheaJtumkiueOhyIpCmBgYAoK6ICD5a+fCgotICAg44Gp44KT44Gq44GT44Go44GM44KP44GL44KK44G+44GZ44GL44CCCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmBgYHtyfQpkZl9wb3BfbG9uZyB8PiBmaWx0ZXIobmFtZSAlaW4lIGMoImJpcnRoX3JhdGUiLCAiZGVhdGhfcmF0ZSIsICJ5b3VuZyIsICJvbGQiKSkgfD4KICBmaWx0ZXIoY291bnRyeSA9PSAiSmFwYW4iKSB8PiBkcm9wX25hKHZhbHVlKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IG5hbWUpKSArIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIuaXpeacrOOBruWHuueUn+eOh+ODu+atu+S6oeeOh+ODu+WKtOWDjeS6uuWPo+OBq+WvvuOBmeOCi+mrmOm9ouODu+iLpeW5tOaJtumkiueOh++8iO+8he+8iSIpCmBgYAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoqKue3tOe/kjcuIOWbveOCkumBuOaKnuOBl++8iOODieOCpOODhOOCkuWkieabtOOBl++8ieOBpuOAgemrmOm9ouiAheODu+iLpeW5tOiAheOBruaJtumkiueOh+OBruOCsOODqeODleOCkuaPj+OBhOOBpuOBj+OBoOOBleOBhOOAgioqCgpgYGB7cn0KZGZfcG9wX2xvbmcgfD4gZmlsdGVyKG5hbWUgJWluJSBjKCJiaXJ0aF9yYXRlIiwgImRlYXRoX3JhdGUiLCAieW91bmciLCAib2xkIikpIHw+CiAgZmlsdGVyKGNvdW50cnkgPT0gIkdlcm1hbnkiKSB8PiBkcm9wX25hKHZhbHVlKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IG5hbWUpKSArIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIuODieOCpOODhOOBruWHuueUn+eOh+ODu+atu+S6oeeOh+ODu+WKtOWDjeS6uuWPo+OBq+WvvuOBmeOCi+mrmOm9ouODu+iLpeW5tOaJtumkiueOh++8iO+8he+8iSIpCmBgYAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpgYGB7cn0KZGZfcG9wX2xvbmcgfD4gZmlsdGVyKG5hbWUgJWluJSBjKCJiaXJ0aF9yYXRlIiwgImRlYXRoX3JhdGUiLCAieW91bmciLCAib2xkIikpIHw+CiAgZmlsdGVyKGNvdW50cnkgICVpbiUgIGMoIkdlcm1hbnkiLCAiSmFwYW4iKSkgfD4gZHJvcF9uYSh2YWx1ZSkgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIHZhbHVlLCBjb2wgPSBjb3VudHJ5LCBsaW5ldHlwZSA9IG5hbWUpKSArIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIuODieOCpOODhOOBqOaXpeacrOOBruWHuueUn+eOh+ODu+atu+S6oeeOh+ODu+WKtOWDjeS6uuWPo+OBq+WvvuOBmeOCi+mrmOm9ouODu+iLpeW5tOaJtumkiueOh++8iO+8he+8iSIpCmBgYAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpgYGB7cn0KZGZfcG9wX2xvbmcgfD4gZmlsdGVyKG5hbWUgPT0gInBvcCIpIHw+CiAgZmlsdGVyKGNvdW50cnkgICVpbiUgIGMoIkdlcm1hbnkiLCAiSmFwYW4iKSkgfD4gZHJvcF9uYSh2YWx1ZSkgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIHZhbHVlLCBjb2wgPSBjb3VudHJ5KSkgKyBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICLjg4njgqTjg4Tjgajml6XmnKzjga7kurrlj6MiKQpgYGAKCioq5ZWP44GE77ya44Gp44KT44Gq44GT44Go44GM44KP44GL44KK44G+44GZ44GL44CCKioKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKirnt7Tnv5I4LiDvvIjjg4njgqTjg4Tjgajml6XmnKzjgpLlpInmm7TjgZfvvInjgYTjgY/jgaTjgYvjga7lm73jgb7jgZ/jga/lnLDln5/jga7jgIHpq5jpvaLogIXjg7voi6XlubTogIXjga7mibbppIrnjofjga7jgrDjg6njg5XjgpLmj4/jgYTjgabjgY/jgaDjgZXjgYTjgIIqKgoKYGBge3J9CmRmX3BvcF9sb25nIHw+IGZpbHRlcihuYW1lICVpbiUgYygiYmlydGhfcmF0ZSIsICJkZWF0aF9yYXRlIiwgInlvdW5nIiwgIm9sZCIpKSB8PgogIGZpbHRlcihjb3VudHJ5ICAlaW4lICBjKCJLb3JlYSwgUmVwLiIsICJKYXBhbiIpKSB8PiBkcm9wX25hKHZhbHVlKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IGNvdW50cnksIGxpbmV0eXBlID0gbmFtZSkpICsgZ2VvbV9saW5lKCkgKwogIGxhYnModGl0bGUgPSAi6Z+T5Zu944Go5pel5pys44Gu5Ye655Sf546H44O75q275Lqh546H44O75Yq05YON5Lq65Y+j44Gr5a++44GZ44KLXG7pq5jpvaLjg7voi6XlubTmibbppIrnjofvvIjvvIXvvIkiKQpgYGAKCuiAg+WvnwoKLSAgIOOBqeOCk+OBquOBk+OBqOOBjOOCj+OBi+OCiuOBvuOBmeOBi+OAggoKIyMg5b6p57+SCgotICAg44OR44OD44Kx44O844K477yIUGFja2FnZe+8ieOBruWIqeeUqO+8mgoKICAgIC0gICDjgqTjg7Pjgrnjg4jjg7zjg6vvvIhpbnN0YWxsYXRpb27vvInvvJpUb29scyBcPiBJbnN0YWxsIFBhY2thZ2VzCgogICAgLSAgIOODreODvOODie+8iGxvYWTvvIlgbGlicmFyeSh0aWR5dmVyc2UpOyBsaWJyYXJ5KFdESSk7IGxpYnJhcnkoc2hvd3RleHQpYAoKLSAgIOODh+ODvOOCv+OBruWPluW+l++8mmBXREkoaW5kaWNhdG9yID0gYyhwb3AgPSAiU1AuUE9QLlRPVEwiKSlgCgotICAg54m55a6a44Gu6KGM44Gu5Y+W5b6X77yaYGZpbHRlcigpLCBkcm9wX25hKCksIGRpc3RpbmN0KClgCgotICAg5oqY44KM57ea44Kw44Op44OVCgogICAgLSAgIGBnZ3Bsb3QoYWVzKHggPSB5ZWFyLCB5ID0gcG9wKSArIGdlb21fbGluZSgpYAoKICAgIC0gICBgZ2dwbG90KGFlcyh4ID0geWVhciwgeSA9IHBvcCwgY29sID0gY291bnRyeSkgKyBnZW9tX2xpbmUoKWAKCiMjIOiqsumhjOODu+e3tOe/kgoK5o+Q5Ye644Gv44GX44Gq44GP44Gm6Imv44GE44Gn44GZ44GM44CB44Gc44Gy5a6f6Zqb44Gr5omL44KS5YuV44GL44GX44Gm5a6f6KGM44GX44Gm44GP44Gg44GV44GE44CC6ICD44GI44Gf44GT44Go44CB55aR5ZWP44GM44GC44KM44Gw44CB6KiY6Yyy44GX44Gm44GK44GE44Gm44GP44Gg44GV44GE44CCCgoxLiAgV0RJIOOBruOCteOCpOODiOOBp+OAgeiIiOWRs+OBruOBguOCi+aMh+aomeOBruOAgeWQjeWJjeOBqOOAgVdESSDjgrPjg7zjg4njgpLpgbjjgpPjgafjgY/jgaDjgZXjgYTjgILjgafjgY3jgozjgbDjgIHpgbjmip7jgZfjgZ/nkIbnlLHjgoLoqJjpjLLjgZfjgabjgY/jgaDjgZXjgYTjgIIKCjIuICBHZXJtYW55IOOBqCDjg4njgqTjg4Tjga7pg6jliIbjgpLku5bjga7lm73lkI3jgavlpInjgYjjgabjgb/jgabjgY/jgaDjgZXjgYTjgIIo5ZuzCgozLiAgMTk2MOW5tOOBrue3j+S6uuWPo+OBjOWkmuOBhOmghuOBq+S6lOeVquebruOBvuOBp+ODquOCueODiOOBl+OBpuOBv+OBvuOBl+OCh+OBhuOAggoKNC4gIOOBhOOBj+OBpOOBi+OBruWbveOCkumBuOaKnuOBl+OBpuOAgee3j+S6uuWPo+OBruaOqOenu+OBruOCsOODqeODleOCkuaPj+OBhOOBpuOBj+OBoOOBleOBhOOAggoKNS4gIOWbveOCkumBuOaKnuOBl+OBpuOAgeWHuueUn+eOh+OAgeatu+S6oeeOh+OBruOCsOODqeODleOCkuaPj+OBhOOBpuOBj+OBoOOBleOBhOOAggoKNi4gIOOBhOOBj+OBpOOBi+OBruWbveOBvuOBn+OBr+WcsOWfn+OBruOAgeWHuueUn+eOh+OAgeatu+S6oeeOh+OBruOCsOODqeODleOCkuaPj+OBhOOBpuOBj+OBoOOBleOBhOOAggoKNy4gIOWbveOCkumBuOaKnuOBl+OBpuOAgemrmOm9ouiAheODu+iLpeW5tOiAheOBruaJtumkiueOh+OBruOCsOODqeODleOCkuaPj+OBhOOBpuOBj+OBoOOBleOBhOOAggoKOC4gIOOBhOOBj+OBpOOBi+OBruWbveOBvuOBn+OBr+WcsOWfn+OBruOAgemrmOm9ouiAheODu+iLpeW5tOiAheOBruaJtumkiueOh+OBruOCsOODqeODleOCkuaPj+OBhOOBpuOBj+OBoOOBleOBhOOAggoKIyMg5Y+C6ICD5paH54yuCgoxLiAg44CM44G/44KT44Gq44Gu44OH44O844K/44K144Kk44Ko44Oz44K5IC0gRGF0YSBTY2llbmNlIGZvciBBbGzjgI1bW+OBr+OBmOOCgeOBpuOBruODh+ODvOOCv+OCteOCpOOCqOODs+OCuV0oaHR0cHM6Ly9pY3UtaHN1enVraS5naXRodWIuaW8vZHM0YWovZmlyc3QtZXhhbXBsZS5odG1sI2ZpcnN0LWV4YW1wbGUpXQoKICAgIC0gICDlsI7lhaXjgajjgZfjgabjgIFHRFDvvIjlm73lhoXnt4/nlJ/nlKPvvInjga7jg4fjg7zjgr/jgpLkvb/jgaPjgaboqqzmmI7jgZfjgabjgYTjgb7jgZnjgIIKCjIuICBQb3NpdCBQcmltZXJzOiBUaGUgQmFzaWNzIOWvvuipseWei+OBrua8lOe/kuOCteOCpOODiOOBruacgOWInSBbW0xpbmtdKGh0dHBzOi8vcG9zaXQuY2xvdWQvbGVhcm4vcHJpbWVycy8xKV0KCiAgICAxLiAgW1Zpc3VhbGl6YXRpb24gQmFzaWNzXShodHRwczovL3Bvc2l0LmNsb3VkL2xlYXJuL3ByaW1lcnMvMS4xKQoKICAgIDIuICBbUHJvZ3JhbW1pbmcgQmFzaWNzXShodHRwczovL3Bvc2l0LmNsb3VkL2xlYXJuL3ByaW1lcnMvMS4yKQoKMy4gIFJTdHVkaW8gSURFIENoZWF0IFNoZWV0LiDml6nopovooajjgafjgZnjgILljbDliLfjgZfjgabkvb/jgYbjgZ/jgoHjgavjgIFQREYg44KC5o+Q5L6b44GX44Gm44GE44G+44GZ44CCW1tTaXRlIExpbmtdKGh0dHBzOi8vcnN0dWRpby5naXRodWIuaW8vY2hlYXRzaGVldHMvaHRtbC9yc3R1ZGlvLWlkZS5odG1sKV0K