Schopnosti ryb překonávat rychlosti proudů

Úvod

Schopnosti ryb překonávat rychlosti proudu jsou klíčovým faktorem při navrhování rybích přechodů. Tyto schopnosti se mění napříč druhy, ale i s velikostí ryby, nebo schopností individua. KRP - odborná skupina AOPK, zřízená k řešení problematiky migrační prostupnosti vodních toků. Součástí zasedání této komise jsou i hodnocení připravovaných projektů, kde se členové vyjadřují k jednotlivým parametrům plánované stavby. Rychlost proudu je jedním z nich.

Data

#### --------  VSTUPNÍ DATA --------- #####

druh=c("pstruh_o","strevle_p","vranka_o","vranka_p","jelec_t","ostroretka_s",
       "parma_o","cejn_v","mnik_j","mihule_p","uhor_o","jelec_p","plotice_o",
       "lipan_p","hrouzek_o","mrenka_m")

velikost=c(30,7,8,8,30,30,35,25,50,18,20,20,20,20,12.3,7.2)

s_rychlost=c(3.1,1.1,0.6,0.6,1.5,1.6,1.8,0.6,1.3,0.5,1.15,
             1.51,1.47,1.66,1.18,0.84)

#m_rychlost_norma = c(0.75,0.55,0,0,0.8,0.85,0.9,0.5,0.8,
#                     0.5)

intervals=seq(from=min(s_rychlost)-0.001,to = max(s_rychlost)+0.001,
              length.out = length(druh)) # Je vhodnější dělit na intervaly rychlost ryb nebo 0-4? ... viz řádek níž

#intervals=seq(from= 0 ,to = 4 ,length.out = length(druh))


#### -------- ÚPRAVY DAT --------- ###

# Data pro graf na základě dat z normy
intervals_norma=seq(from=min(s_rychlost)-0.001,to = max(s_rychlost)+0.001,
                    length.out = 10)

pc_druhu_norma=NULL
for (i in 1:10){
  pc_druhu_norma[i]=sum(s_rychlost[1:10]>intervals_norma[i])
  #print(i)
}


# Data pro Graf procentuálního zastoupení všech druhů v datasetu

pc_druhu=NULL
for (i in 1:length(druh)){
  pc_druhu[i]=sum(s_rychlost>intervals[i])
  #print(i)
}

# procentuální zastoupení množství druhů
prc_druhu=(pc_druhu/length(druh))*100  

Prvních 10 ryb je z normy pro stavění rybích přechodů, zbytek je z literatury (skoková rychlost 11. - 16. druhu je zzískána z publikace: MIGRACE RYB, RYBÍ PŘECHODY A ZPŮSOB JEJICH TESTOVÁNÍ (Slavík O. Vančura Z. a kol. 2012), která cituje další autory) . Pokud je v normě uveden interval je vždy počítáno s nejnižší uvedenou rychlostí. Ze skokové rychlosti je počítáno kolik rybích druhů je ještě schopno překonat danou rychlost proudu rozdělenou do 16 intervalů mezi minimální a maximální skokovou rychlostí.

(Měl bych popřemýšlet jestli vyrovnat se rychlosti proudu znamená ji překonat)

ryby=data.frame(
  druh,
  s_rychlost,
  velikost
  )

ryby

Grafy

plot(pc_druhu_norma~intervals_norma,
     main = c("Závislost počtu druhů ryb Z NORMY na rychlosti proudu,","kterou jsou ještě schopny překonat"),
     ylab = "Počet druhů",
     xlab = "Rychlost proudu v m/s",
     type = "b"
       )
abline(v=c(1,1.2), col=c("green","red"))
GRAF

GRAF

plot(prc_druhu~intervals,
     main = c("Závislost počtu druhů ryb na rychlosti proudu,","kterou jsou ještě schopny překonat"),
     ylab = "Počet druhů [%]",
     xlab = "Rychlost proudu v m/s",
     type = "l"
       )
abline(v=c(1,1.2), col=c("green","red"))
GRAF

GRAF

Hodnocení fragmentace na základě DCI

Úvod

Index DCI (Dendric conectivity index) hodnotí míru fragmentace formou pravděpodobnosti s jakou je organismus schopen se dostat z jednoho náhodného místa na toku do místa druhého. Je schopný hodnotit říční sítě, průchodnost překážek nebo rozdíly mezi potamodromní a anadromní migrací. Podrobně jej popisuje následující článek: A new measure of longitudinal connectivity for stream networks.

Tento index je založen na jednoduchém vzorci: Vzorec

K jeho výpočtu je možné použít nástroj FIPEX, nebo R package s názvem “dci”.

Popis balíčku dci

Ukázka funkce

Databáze profilu, které šly na KRP a monitoringů na RP

Úvod

Popis databáze Struktura, kterou mám aktuálně v hlavě je popsána následujícím rozpracovaným ER diagramem. Jsou tam uvedeny názvy tabulek, které by dle mého měly obsáhnout celou šíři požadovaných dat. Názvy sloupců jsou spíše orientační (aktuálně v řešení).

Konzultoval jsem, kde by se tyto data daly uchovat, aby byly dostupné a k budoucímu užití. Došel jsem k názoru, že ideální by bylo spojit tuto databázi s databízí migračních bariér, což by mohlo zároveň proběhnout s její plánovanou aktualizací.

Přínosy - Elektronizace záznamů jednání KRP. - Rozšíření databáze migračních bariér o zajímavé a již nasbíraná ale i v budoucnu získaná data - k zobrazení, či analýzám.

Výstupy - zobrazení některých informací v databázi migračních bariér - možnost zobrazení a stažení dat pro pracovníky AOPK - Transfer monitoringů do NDOP

Vstupy - Import shromážděných dat při založení - Formulář z jednání KRP

Fyzická Data

V této kapitole jsou vytvořeny vektory s názvy tabulek a sloupců

Pritomni_clenove <- c("Id_jednani","cl1_ZdenekMyslik","cl2_Zdenek_Vogl","cl3_NikolaKofentova","cl4_PavelMarek","cl5_MilosHolub","cl6_PavelVrana","cl7_JiriMusil","cl8_KamilFarsky","cl9_PetrHartich","cl10_KarelVrana","cl11_RadkaJakoubkova","cl12_JanKoutny","cl13_RomanZajicek","cl14_JiriNeudert","cl15_TomasBartusek","cl16_MartinCapek","cl17_PavelMoravec")
Jednani_komise <- c("Id_jednani","Id_prekazky","Id_RP","Datum","Pocet_clenu")
Pricna_prekazka <- c("Id_prekazky","Typ_prekazky","Tok","Ricni_km","Pritomnost_RP","GPS_Prekazky","Povodi","Majitel_stavby")
Rybi_prechod <- c("Id_PR","Id_prekazky","Typ_RP","Delka_RP","Sklon_RP","GPS_RP___?___","Provozovatel","Zrizovatel","Projektant")
Monitoring_RP <- c("Id_PR","Zprava_odkaz","Pocet_druhu","Zhotovitel","Zpusob_monitoringu","Pritomnost_chranenych_druhu")
Druhy <- c("!__Zjištěné druhy a jejich počty__!")
Vlastnosti_druhu <- c("Rybi_pasmo","Skokova_rychlost","Maximalni_rychlost","Typ_migrace","Stupen_ohrozeni_v_CR")

Tabulky_databaze <- list(Pritomni_clenove,Jednani_komise,Pricna_prekazka,Rybi_prechod,Monitoring_RP,Druhy,Vlastnosti_druhu)
Tabulky_databaze
## [[1]]
##  [1] "Id_jednani"           "cl1_ZdenekMyslik"     "cl2_Zdenek_Vogl"     
##  [4] "cl3_NikolaKofentova"  "cl4_PavelMarek"       "cl5_MilosHolub"      
##  [7] "cl6_PavelVrana"       "cl7_JiriMusil"        "cl8_KamilFarsky"     
## [10] "cl9_PetrHartich"      "cl10_KarelVrana"      "cl11_RadkaJakoubkova"
## [13] "cl12_JanKoutny"       "cl13_RomanZajicek"    "cl14_JiriNeudert"    
## [16] "cl15_TomasBartusek"   "cl16_MartinCapek"     "cl17_PavelMoravec"   
## 
## [[2]]
## [1] "Id_jednani"  "Id_prekazky" "Id_RP"       "Datum"       "Pocet_clenu"
## 
## [[3]]
## [1] "Id_prekazky"    "Typ_prekazky"   "Tok"            "Ricni_km"      
## [5] "Pritomnost_RP"  "GPS_Prekazky"   "Povodi"         "Majitel_stavby"
## 
## [[4]]
## [1] "Id_PR"         "Id_prekazky"   "Typ_RP"        "Delka_RP"     
## [5] "Sklon_RP"      "GPS_RP___?___" "Provozovatel"  "Zrizovatel"   
## [9] "Projektant"   
## 
## [[5]]
## [1] "Id_PR"                       "Zprava_odkaz"               
## [3] "Pocet_druhu"                 "Zhotovitel"                 
## [5] "Zpusob_monitoringu"          "Pritomnost_chranenych_druhu"
## 
## [[6]]
## [1] "!__Zjištěné druhy a jejich počty__!"
## 
## [[7]]
## [1] "Rybi_pasmo"           "Skokova_rychlost"     "Maximalni_rychlost"  
## [4] "Typ_migrace"          "Stupen_ohrozeni_v_CR"

Data - papír

Data uložená ve složkách v papírové podobě

  • Kde:
  • Styčná osoba: Pavel Marek, Andrea Šikýřová
  • Od kdy do kdy: do 2008
  • Typy dokumentů: Přihlášky KRP; Pozvánky; Mailu; Stanoviska; Projektových dokumentací

Data - Pavel M / …

Data na hard-disku PC Pavla Marka - doplněno archivem mailu a papírovýma složkama

  • Kde: PC Pavel Marek
  • Styčná osoba: Pavel Marek, Jirka Petřivalský
  • Od kdy do kdy: 2008 - 2016
  • Typy dokumentů:

Data - PRŘS a OPŽP

Data samostatně evidované (cca 20-30 RP v PRŘS) - OPŽP a PRŘS se můžou duplikovat

  • Kde:
  • Styčná osoba:
  • Od kdy do kdy: od 1996 a od 2008
  • Typy dokumentů:

Data - excel

Data ve dvou excelových tabulkách před 2008 a od?

  • Kde: Někde u Zdeňka a Pavla
  • Styčná osoba: Pavel Marek, Zdeněk Vogl
  • Od kdy do kdy:
  • Typy dokumentů: Excelová tabulka

Data - S

Data ve složkách na S/ob/odd/KRP

  • Kde: společný disk S
  • Styčná osoba: Pavel Marek, Zdeněk Vogl
  • Od kdy do kdy: 2016 - 2023
  • Typy dokumentů:

Data - DMB

Data v databázi migračních bariér - třízené podle ř. km - který km ví Zdeněk K.

  • Kde:
  • Styčná osoba: Zdeněk Kučera, Nikola Kofentová
  • Od kdy do kdy:
  • Typy dokumentů: databáze
LS0tDQp0aXRsZTogIlbDvXBvxI10eSB2b2RhxZlpIg0KYXV0aG9yOiAiQm9yaXMgUHJ1ZMOtayINCmRhdGU6ICJVcGRhdGU6IGByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBkZl9wcmludDogcGFnZWQNCiAgICBjb2RlX2ZvbGRpbmc6ICJoaWRlIg0KICAgIHRvYzogdHJ1ZQ0KICAgIG51bWJlciBzZWN0aW9uOiB0cnVlDQogICAgaGlnaGxpdGU6IHRhbmdvDQogICAgdG9jX2Zsb2F0Og0KICAgICAgY29sbGFwc2VkOiBmYWxzZQ0KICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCndkIDwtIGdldHdkKCkNCmBgYA0KDQojIyBTY2hvcG5vc3RpIHJ5YiBwxZlla29uw6F2YXQgcnljaGxvc3RpIHByb3Vkxa8gey50YWJzZXR9DQoNCiMjIyDDmnZvZA0KDQpTY2hvcG5vc3RpIHJ5YiBwxZlla29uw6F2YXQgcnljaGxvc3RpIHByb3VkdSBqc291IGtsw63EjW92w71tIGZha3RvcmVtIHDFmWkgbmF2cmhvdsOhbsOtIHJ5YsOtY2ggcMWZZWNob2TFry4gVHl0byBzY2hvcG5vc3RpIHNlIG3Em27DrSBuYXDFmcOtxI0gZHJ1aHksIGFsZSBpIHMgdmVsaWtvc3TDrSByeWJ5LCBuZWJvIHNjaG9wbm9zdMOtIGluZGl2aWR1YS4gW0tSUF0oaHR0cHM6Ly9kb3RhY2UubmF0dXJlLmN6L3dlYi9jei9vZGJvcm5hLXNrdXBpbmEta29taXNlLXByby1yeWJpLXByZWNob2R5KSAtIG9kYm9ybsOhIHNrdXBpbmEgQU9QSywgesWZw616ZW7DoSBrIMWZZcWhZW7DrSBwcm9ibGVtYXRpa3kgbWlncmHEjW7DrSBwcm9zdHVwbm9zdGkgdm9kbsOtY2ggdG9rxa8uIFNvdcSNw6FzdMOtIHphc2Vkw6Fuw60gdMOpdG8ga29taXNlIGpzb3UgaSBob2Rub2NlbsOtIHDFmWlwcmF2b3ZhbsO9Y2ggcHJvamVrdMWvLCBrZGUgc2UgxI1sZW5vdsOpIHZ5amFkxZl1asOtIGsgamVkbm90bGl2w71tIHBhcmFtZXRyxa9tIHBsw6Fub3ZhbsOpIHN0YXZieS4gUnljaGxvc3QgcHJvdWR1IGplIGplZG7DrW0geiBuaWNoLg0KDQojIyMgRGF0YQ0KDQpgYGB7ciB2ZWt0b3J5fQ0KDQojIyMjIC0tLS0tLS0tICBWU1RVUE7DjSBEQVRBIC0tLS0tLS0tLSAjIyMjIw0KDQpkcnVoPWMoInBzdHJ1aF9vIiwic3RyZXZsZV9wIiwidnJhbmthX28iLCJ2cmFua2FfcCIsImplbGVjX3QiLCJvc3Ryb3JldGthX3MiLA0KICAgICAgICJwYXJtYV9vIiwiY2Vqbl92IiwibW5pa19qIiwibWlodWxlX3AiLCJ1aG9yX28iLCJqZWxlY19wIiwicGxvdGljZV9vIiwNCiAgICAgICAibGlwYW5fcCIsImhyb3V6ZWtfbyIsIm1yZW5rYV9tIikNCg0KdmVsaWtvc3Q9YygzMCw3LDgsOCwzMCwzMCwzNSwyNSw1MCwxOCwyMCwyMCwyMCwyMCwxMi4zLDcuMikNCg0Kc19yeWNobG9zdD1jKDMuMSwxLjEsMC42LDAuNiwxLjUsMS42LDEuOCwwLjYsMS4zLDAuNSwxLjE1LA0KICAgICAgICAgICAgIDEuNTEsMS40NywxLjY2LDEuMTgsMC44NCkNCg0KI21fcnljaGxvc3Rfbm9ybWEgPSBjKDAuNzUsMC41NSwwLDAsMC44LDAuODUsMC45LDAuNSwwLjgsDQojICAgICAgICAgICAgICAgICAgICAgMC41KQ0KDQppbnRlcnZhbHM9c2VxKGZyb209bWluKHNfcnljaGxvc3QpLTAuMDAxLHRvID0gbWF4KHNfcnljaGxvc3QpKzAuMDAxLA0KICAgICAgICAgICAgICBsZW5ndGgub3V0ID0gbGVuZ3RoKGRydWgpKSAjIEplIHZob2RuxJtqxaHDrSBkxJtsaXQgbmEgaW50ZXJ2YWx5IHJ5Y2hsb3N0IHJ5YiBuZWJvIDAtND8gLi4uIHZpeiDFmcOhZGVrIG7DrcW+DQoNCiNpbnRlcnZhbHM9c2VxKGZyb209IDAgLHRvID0gNCAsbGVuZ3RoLm91dCA9IGxlbmd0aChkcnVoKSkNCg0KDQojIyMjIC0tLS0tLS0tIMOaUFJBVlkgREFUIC0tLS0tLS0tLSAjIyMNCg0KIyBEYXRhIHBybyBncmFmIG5hIHrDoWtsYWTEmyBkYXQgeiBub3JteQ0KaW50ZXJ2YWxzX25vcm1hPXNlcShmcm9tPW1pbihzX3J5Y2hsb3N0KS0wLjAwMSx0byA9IG1heChzX3J5Y2hsb3N0KSswLjAwMSwNCiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLm91dCA9IDEwKQ0KDQpwY19kcnVodV9ub3JtYT1OVUxMDQpmb3IgKGkgaW4gMToxMCl7DQogIHBjX2RydWh1X25vcm1hW2ldPXN1bShzX3J5Y2hsb3N0WzE6MTBdPmludGVydmFsc19ub3JtYVtpXSkNCiAgI3ByaW50KGkpDQp9DQoNCg0KIyBEYXRhIHBybyBHcmFmIHByb2NlbnR1w6FsbsOtaG8gemFzdG91cGVuw60gdsWhZWNoIGRydWjFryB2IGRhdGFzZXR1DQoNCnBjX2RydWh1PU5VTEwNCmZvciAoaSBpbiAxOmxlbmd0aChkcnVoKSl7DQogIHBjX2RydWh1W2ldPXN1bShzX3J5Y2hsb3N0PmludGVydmFsc1tpXSkNCiAgI3ByaW50KGkpDQp9DQoNCiMgcHJvY2VudHXDoWxuw60gemFzdG91cGVuw60gbW5vxb5zdHbDrSBkcnVoxa8NCnByY19kcnVodT0ocGNfZHJ1aHUvbGVuZ3RoKGRydWgpKSoxMDAgIA0KDQoNCmBgYA0KDQpQcnZuw61jaCAxMCByeWIgamUgeiBub3JteSBwcm8gc3RhdsSbbsOtIHJ5YsOtY2ggcMWZZWNob2TFrywgemJ5dGVrIGplIHogbGl0ZXJhdHVyeSAoc2tva292w6EgcnljaGxvc3QgMTEuIC0gMTYuIGRydWh1IGplIHp6w61za8OhbmEgeiBwdWJsaWthY2U6IE1JR1JBQ0UgUllCLCBSWULDjSBQxZhFQ0hPRFkgQSBaUMWuU09CIEpFSklDSCBURVNUT1bDgU7DjSAoU2xhdsOtayBPLiBWYW7EjXVyYSBaLiBhIGtvbC4gMjAxMiksIGt0ZXLDoSBjaXR1amUgZGFsxaHDrSBhdXRvcnkpIC4gUG9rdWQgamUgdiBub3JtxJsgdXZlZGVuIGludGVydmFsIGplIHbFvmR5IHBvxI3DrXTDoW5vIHMgbmVqbmnFvsWhw60gdXZlZGVub3UgcnljaGxvc3TDrS4gWmUgc2tva292w6kgcnljaGxvc3RpIGplIHBvxI3DrXTDoW5vIGtvbGlrIHJ5YsOtY2ggZHJ1aMWvIGplIGplxaF0xJsgc2Nob3BubyBwxZlla29uYXQgZGFub3UgcnljaGxvc3QgcHJvdWR1IHJvemTEm2xlbm91IGRvIGByIGxlbmd0aChpbnRlcnZhbHMpYCBpbnRlcnZhbMWvIG1lemkgbWluaW3DoWxuw60gYSBtYXhpbcOhbG7DrSBza29rb3ZvdSByeWNobG9zdMOtLg0KDQooTcSbbCBieWNoIHBvcMWZZW3DvcWhbGV0IGplc3RsaSB2eXJvdm5hdCBzZSByeWNobG9zdGkgcHJvdWR1IHpuYW1lbsOhIGppIHDFmWVrb25hdCkNCg0KDQpgYGB7ciBkYXRhZnJhbWV9DQpyeWJ5PWRhdGEuZnJhbWUoDQogIGRydWgsDQogIHNfcnljaGxvc3QsDQogIHZlbGlrb3N0DQogICkNCg0KcnlieQ0KYGBgDQoNCiMjIyBHcmFmeQ0KYGBge3IgZ3JhZnksIGZpZy5jYXA9ICJHUkFGIn0NCg0KcGxvdChwY19kcnVodV9ub3JtYX5pbnRlcnZhbHNfbm9ybWEsDQogICAgIG1haW4gPSBjKCJaw6F2aXNsb3N0IHBvxI10dSBkcnVoxa8gcnliIFogTk9STVkgbmEgcnljaGxvc3RpIHByb3VkdSwiLCJrdGVyb3UganNvdSBqZcWhdMSbIHNjaG9wbnkgcMWZZWtvbmF0IiksDQogICAgIHlsYWIgPSAiUG/EjWV0IGRydWjFryIsDQogICAgIHhsYWIgPSAiUnljaGxvc3QgcHJvdWR1IHYgbS9zIiwNCiAgICAgdHlwZSA9ICJiIg0KICAgICAgICkNCmFibGluZSh2PWMoMSwxLjIpLCBjb2w9YygiZ3JlZW4iLCJyZWQiKSkNCg0KcGxvdChwcmNfZHJ1aHV+aW50ZXJ2YWxzLA0KICAgICBtYWluID0gYygiWsOhdmlzbG9zdCBwb8SNdHUgZHJ1aMWvIHJ5YiBuYSByeWNobG9zdGkgcHJvdWR1LCIsImt0ZXJvdSBqc291IGplxaF0xJsgc2Nob3BueSBwxZlla29uYXQiKSwNCiAgICAgeWxhYiA9ICJQb8SNZXQgZHJ1aMWvIFslXSIsDQogICAgIHhsYWIgPSAiUnljaGxvc3QgcHJvdWR1IHYgbS9zIiwNCiAgICAgdHlwZSA9ICJsIg0KICAgICAgICkNCmFibGluZSh2PWMoMSwxLjIpLCBjb2w9YygiZ3JlZW4iLCJyZWQiKSkNCg0KYGBgDQoNCg0KIyMgSG9kbm9jZW7DrSBmcmFnbWVudGFjZSBuYSB6w6FrbGFkxJsgRENJIHsudGFic2V0fQ0KDQojIyMgw5p2b2QNCg0KSW5kZXggRENJIChEZW5kcmljIGNvbmVjdGl2aXR5IGluZGV4KSBob2Rub3TDrSBtw61ydSBmcmFnbWVudGFjZSBmb3Jtb3UgcHJhdmTEm3BvZG9ibm9zdGkgcyBqYWtvdSBqZSBvcmdhbmlzbXVzIHNjaG9wZW4gc2UgZG9zdGF0IHogamVkbm9obyBuw6Fob2Ruw6lobyBtw61zdGEgbmEgdG9rdSBkbyBtw61zdGEgZHJ1aMOpaG8uIEplIHNjaG9wbsO9IGhvZG5vdGl0IMWZw63EjW7DrSBzw610xJssIHByxa9jaG9kbm9zdCBwxZlla8Ohxb5layBuZWJvIHJvemTDrWx5IG1lemkgcG90YW1vZHJvbW7DrSBhIGFuYWRyb21uw60gbWlncmFjw60uIFBvZHJvYm7EmyBqZWogcG9waXN1amUgbsOhc2xlZHVqw61jw60gxI1sw6FuZWs6IFtBIG5ldyBtZWFzdXJlIG9mIGxvbmdpdHVkaW5hbCBjb25uZWN0aXZpdHkgZm9yIHN0cmVhbSBuZXR3b3Jrc10oaHR0cHM6Ly9saW5rLnNwcmluZ2VyLmNvbS9hcnRpY2xlLzEwLjEwMDcvczEwOTgwLTAwOC05MjgzLXkpLg0KDQpUZW50byBpbmRleCBqZSB6YWxvxb5lbiBuYSBqZWRub2R1Y2jDqW0gdnpvcmNpOg0KIVtWem9yZWNdKGByIHBhc3RlMCh3ZCwiL1Z6b3JlY19EQ0kuSlBHIilgKQ0KDQpLIGplaG8gdsO9cG/EjXR1IGplIG1vxb5uw6kgcG91xb7DrXQgbsOhc3Ryb2ogW0ZJUEVYXShodHRwczovL2dvbGRmb3JkLmdpdGh1Yi5pby9GSVBFWF93aXRoX0RDSV9XZWJzaXRlLyksIG5lYm8gUiBwYWNrYWdlIHMgbsOhenZlbSAiW2RjaV0oaHR0cHM6Ly9naXRodWIuY29tL2FhcmtpbGFuaWFuL2RjaSkiLiANCg0KIyMjIFBvcGlzIGJhbMOtxI1rdSBkY2kNCg0KDQoNCiMjIyBVa8OhemthIGZ1bmtjZQ0KDQoNCiMjIERhdGFiw6F6ZSBwcm9maWx1LCBrdGVyw6kgxaFseSBuYSBLUlAgYSBtb25pdG9yaW5nxa8gbmEgUlAgey50YWJzZXR9DQoNCiMjIyDDmnZvZA0KDQoqKlBvcGlzIGRhdGFiw6F6ZSoqDQpTdHJ1a3R1cmEsIGt0ZXJvdSBtw6FtIGFrdHXDoWxuxJsgdiBobGF2xJsgamUgcG9wc8OhbmEgbsOhc2xlZHVqw61jw61tIHJvenByYWNvdmFuw71tIFtFUiBkaWFncmFtZW1dKGh0dHBzOi8vY29sbGJvYXJkLmNvbS9tenNteHZrb2U0c2FmdG1kM3ltbikuIEpzb3UgdGFtIHV2ZWRlbnkgbsOhenZ5IHRhYnVsZWssIGt0ZXLDqSBieSBkbGUgbcOpaG8gbcSbbHkgb2Jzw6Fobm91dCBjZWxvdSDFocOtxZlpIHBvxb5hZG92YW7DvWNoIGRhdC4gTsOhenZ5IHNsb3VwY8WvIGpzb3Ugc3DDrcWhZSBvcmllbnRhxI1uw60gKGFrdHXDoWxuxJsgdiDFmWXFoWVuw60pLg0KDQpLb256dWx0b3ZhbCBqc2VtLCBrZGUgYnkgc2UgdHl0byBkYXRhIGRhbHkgdWNob3ZhdCwgYWJ5IGJ5bHkgZG9zdHVwbsOpIGEgayBidWRvdWPDrW11IHXFvml0w60uIERvxaFlbCBqc2VtIGsgbsOhem9ydSwgxb5lIGlkZcOhbG7DrSBieSBieWxvIHNwb2ppdCB0dXRvIGRhdGFiw6F6aSBzIGRhdGFiw616w60gbWlncmHEjW7DrWNoIGJhcmnDqXIsIGNvxb4gYnkgbW9obG8gesOhcm92ZcWIIHByb2LEm2hub3V0IHMgamVqw60gcGzDoW5vdmFub3UgYWt0dWFsaXphY8OtLg0KDQoqKlDFmcOtbm9zeSoqDQotIEVsZWt0cm9uaXphY2UgesOhem5hbcWvIGplZG7DoW7DrSBLUlAuDQotIFJvesWhw63FmWVuw60gZGF0YWLDoXplIG1pZ3JhxI1uw61jaCBiYXJpw6lyIG8gemFqw61tYXbDqSBhIGppxb4gbmFzYsOtcmFuw6EgYWxlIGkgdiBidWRvdWNudSB6w61za2Fuw6EgZGF0YSAtIGsgem9icmF6ZW7DrSwgxI1pIGFuYWzDvXrDoW0uDQoNCioqVsO9c3R1cHkqKg0KLSB6b2JyYXplbsOtIG7Em2t0ZXLDvWNoIGluZm9ybWFjw60gdiBkYXRhYsOhemkgbWlncmHEjW7DrWNoIGJhcmnDqXINCi0gbW/Fvm5vc3Qgem9icmF6ZW7DrSBhIHN0YcW+ZW7DrSBkYXQgcHJvIHByYWNvdm7DrWt5IEFPUEsNCi0gVHJhbnNmZXIgbW9uaXRvcmluZ8WvIGRvIE5ET1ANCg0KKipWc3R1cHkqKg0KLSBJbXBvcnQgc2hyb23DocW+ZMSbbsO9Y2ggZGF0IHDFmWkgemFsb8W+ZW7DrQ0KLSBGb3JtdWzDocWZIHogamVkbsOhbsOtIEtSUA0KDQojIyMgRnl6aWNrw6EgRGF0YQ0KDQpWIHTDqXRvIGthcGl0b2xlIGpzb3Ugdnl0dm/FmWVueSB2ZWt0b3J5IHMgbsOhenZ5IHRhYnVsZWsgYSBzbG91cGPFrw0KDQpgYGB7ciBsaXN0IG9mIGNvbHVtbiBuYW1lc30NClByaXRvbW5pX2NsZW5vdmUgPC0gYygiSWRfamVkbmFuaSIsImNsMV9aZGVuZWtNeXNsaWsiLCJjbDJfWmRlbmVrX1ZvZ2wiLCJjbDNfTmlrb2xhS29mZW50b3ZhIiwiY2w0X1BhdmVsTWFyZWsiLCJjbDVfTWlsb3NIb2x1YiIsImNsNl9QYXZlbFZyYW5hIiwiY2w3X0ppcmlNdXNpbCIsImNsOF9LYW1pbEZhcnNreSIsImNsOV9QZXRySGFydGljaCIsImNsMTBfS2FyZWxWcmFuYSIsImNsMTFfUmFka2FKYWtvdWJrb3ZhIiwiY2wxMl9KYW5Lb3V0bnkiLCJjbDEzX1JvbWFuWmFqaWNlayIsImNsMTRfSmlyaU5ldWRlcnQiLCJjbDE1X1RvbWFzQmFydHVzZWsiLCJjbDE2X01hcnRpbkNhcGVrIiwiY2wxN19QYXZlbE1vcmF2ZWMiKQ0KSmVkbmFuaV9rb21pc2UgPC0gYygiSWRfamVkbmFuaSIsIklkX3ByZWthemt5IiwiSWRfUlAiLCJEYXR1bSIsIlBvY2V0X2NsZW51IikNClByaWNuYV9wcmVrYXprYSA8LSBjKCJJZF9wcmVrYXpreSIsIlR5cF9wcmVrYXpreSIsIlRvayIsIlJpY25pX2ttIiwiUHJpdG9tbm9zdF9SUCIsIkdQU19QcmVrYXpreSIsIlBvdm9kaSIsIk1haml0ZWxfc3RhdmJ5IikNClJ5YmlfcHJlY2hvZCA8LSBjKCJJZF9QUiIsIklkX3ByZWthemt5IiwiVHlwX1JQIiwiRGVsa2FfUlAiLCJTa2xvbl9SUCIsIkdQU19SUF9fXz9fX18iLCJQcm92b3pvdmF0ZWwiLCJacml6b3ZhdGVsIiwiUHJvamVrdGFudCIpDQpNb25pdG9yaW5nX1JQIDwtIGMoIklkX1BSIiwiWnByYXZhX29ka2F6IiwiUG9jZXRfZHJ1aHUiLCJaaG90b3ZpdGVsIiwiWnB1c29iX21vbml0b3Jpbmd1IiwiUHJpdG9tbm9zdF9jaHJhbmVueWNoX2RydWh1IikNCkRydWh5IDwtIGMoIiFfX1pqacWhdMSbbsOpIGRydWh5IGEgamVqaWNoIHBvxI10eV9fISIpDQpWbGFzdG5vc3RpX2RydWh1IDwtIGMoIlJ5YmlfcGFzbW8iLCJTa29rb3ZhX3J5Y2hsb3N0IiwiTWF4aW1hbG5pX3J5Y2hsb3N0IiwiVHlwX21pZ3JhY2UiLCJTdHVwZW5fb2hyb3plbmlfdl9DUiIpDQoNClRhYnVsa3lfZGF0YWJhemUgPC0gbGlzdChQcml0b21uaV9jbGVub3ZlLEplZG5hbmlfa29taXNlLFByaWNuYV9wcmVrYXprYSxSeWJpX3ByZWNob2QsTW9uaXRvcmluZ19SUCxEcnVoeSxWbGFzdG5vc3RpX2RydWh1KQ0KVGFidWxreV9kYXRhYmF6ZQ0KDQpgYGANCiANCg0KIyMjIERhdGEgLSBwYXDDrXINCkRhdGEgdWxvxb5lbsOhIHZlIHNsb8W+a8OhY2ggdiBwYXDDrXJvdsOpIHBvZG9ixJsNCg0KKiBLZGU6ICoqLi4uKioNCiogU3R5xI1uw6Egb3NvYmE6IFBhdmVsIE1hcmVrLCBBbmRyZWEgxaBpa8O9xZlvdsOhDQoqIE9kIGtkeSBkbyBrZHk6ICoqZG8gMjAwOCoqDQoqIFR5cHkgZG9rdW1lbnTFrzogUMWZaWhsw6HFoWt5IEtSUDsgUG96dsOhbmt5OyBNYWlsdTsgU3Rhbm92aXNrYTsgUHJvamVrdG92w71jaCBkb2t1bWVudGFjw60NCg0KIyMjIERhdGEgLSBQYXZlbCBNIC8gLi4uDQpEYXRhIG5hIGhhcmQtZGlza3UgUEMgUGF2bGEgTWFya2EgLSBkb3BsbsSbbm8gYXJjaGl2ZW0gbWFpbHUgYSBwYXDDrXJvdsO9bWEgc2xvxb5rYW1hDQoNCiogS2RlOiAqKlBDIFBhdmVsIE1hcmVrKioNCiogU3R5xI1uw6Egb3NvYmE6ICoqUGF2ZWwgTWFyZWsqKiwgKipKaXJrYSBQZXTFmWl2YWxza8O9KioNCiogT2Qga2R5IGRvIGtkeTogKioyMDA4IC0gMjAxNioqDQoqIFR5cHkgZG9rdW1lbnTFrzogKiouLi4qKg0KDQojIyMgRGF0YSAtIFBSxZhTIGEgT1DFvVAgDQpEYXRhIHNhbW9zdGF0bsSbIGV2aWRvdmFuw6kgKGNjYSAyMC0zMCBSUCB2IFBSxZhTKSAtIE9Qxb1QIGEgUFLFmFMgc2UgbcWvxb5vdSBkdXBsaWtvdmF0DQoNCiogS2RlOiAqKi4uLioqDQoqIFN0ecSNbsOhIG9zb2JhOiAqKi4uLioqDQoqIE9kIGtkeSBkbyBrZHk6ICoqb2QgMTk5NiBhIG9kIDIwMDgqKg0KKiBUeXB5IGRva3VtZW50xa86ICoqLi4uKioNCg0KIyMjIERhdGEgLSBleGNlbA0KRGF0YSB2ZSBkdm91IGV4Y2Vsb3bDvWNoIHRhYnVsa8OhY2ggKipwxZllZCAyMDA4KiogYSAqKm9kPyoqDQoNCiogS2RlOiAqKk7Em2tkZSB1IFpkZcWIa2EgYSBQYXZsYSoqDQoqIFN0ecSNbsOhIG9zb2JhOiAqKlBhdmVsIE1hcmVrKiosIFpkZW7Em2sgVm9nbA0KKiBPZCBrZHkgZG8ga2R5OiAqKi4uLioqDQoqIFR5cHkgZG9rdW1lbnTFrzogRXhjZWxvdsOhIHRhYnVsa2ENCg0KDQojIyMgRGF0YSAtIFMNCkRhdGEgdmUgc2xvxb5rw6FjaCBuYSBTL29iL29kZC9LUlANCg0KKiBLZGU6IHNwb2xlxI1uw70gZGlzayBTDQoqIFN0ecSNbsOhIG9zb2JhOiBQYXZlbCBNYXJlaywgWmRlbsSbayBWb2dsDQoqIE9kIGtkeSBkbyBrZHk6IDIwMTYgLSAyMDIzDQoqIFR5cHkgZG9rdW1lbnTFrzogKiouLi4qKg0KDQojIyMgRGF0YSAtIERNQg0KRGF0YSB2IGRhdGFiw6F6aSBtaWdyYcSNbsOtY2ggYmFyacOpciAtIHTFmcOtemVuw6kgcG9kbGUgxZkuIGttIC0ga3RlcsO9IGttIHbDrSBaZGVuxJtrIEsuDQoNCiogS2RlOiAqKi4uLioqDQoqIFN0ecSNbsOhIG9zb2JhOiBaZGVuxJtrIEt1xI1lcmEsIE5pa29sYSBLb2ZlbnRvdsOhDQoqIE9kIGtkeSBkbyBrZHk6ICoqLi4uKioNCiogVHlweSBkb2t1bWVudMWvOiBkYXRhYsOhemUNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==