pacotes <- c("dplyr", "magrittr", "RNetCDF", "raster", "ggplot2",
             "plotly")
sapply(pacotes,require,character.only = TRUE)
   dplyr magrittr  RNetCDF   raster  ggplot2   plotly 
    TRUE     TRUE     TRUE     TRUE     TRUE     TRUE 
options(max.print = 100)
setwd("/home/wrf/TOPICOS_II/Analises")
source("./R/aux.funs.R")
wrf.list.files <- 
list.files(path = "~/Build_WRF/WRFV3/topicosII/",pattern = "wrfout", full.names = TRUE)
basename(wrf.list.files)
 [1] "wrfout_d01_2016-04-29_00:00:00" "wrfout_d01_2016-04-29_03:00:00" "wrfout_d01_2016-04-29_06:00:00"
 [4] "wrfout_d01_2016-04-29_09:00:00" "wrfout_d01_2016-04-29_12:00:00" "wrfout_d01_2016-04-29_15:00:00"
 [7] "wrfout_d01_2016-04-29_18:00:00" "wrfout_d01_2016-04-29_21:00:00" "wrfout_d01_2016-04-30_00:00:00"
[10] "wrfout_d01_2016-04-30_03:00:00" "wrfout_d01_2016-04-30_06:00:00" "wrfout_d01_2016-04-30_09:00:00"
[13] "wrfout_d01_2016-04-30_12:00:00" "wrfout_d01_2016-04-30_15:00:00" "wrfout_d01_2016-04-30_18:00:00"
[16] "wrfout_d01_2016-04-30_21:00:00" "wrfout_d01_2016-05-01_00:00:00"

Variáveis na saída do WRF

Segundo a lista de variavéis e atributos no mesmo arquivo NetCDF.

# Reading first file
run.nc <- 
  open.nc(wrf.list.files[1],write = TRUE)
  file.info <- file.inq.nc(run.nc)
  vars.info <- 
  sapply(1:(file.info$nvars-1), function(i){
    var <- 
        var.inq.nc(ncfile = run.nc,variable =  i) 
    var$longname <- 
      att.get.nc(ncfile = run.nc,variable = i,attribute = 2 ) 
    var$units <- 
      att.get.nc(ncfile = run.nc,variable = i,attribute = 3 ) 
    
    c(var$id, var$name ,var$ndims, toupper(var$longname), var$units) %>% t
  
    }) %>% t %>% as.data.frame() %>% 
    setNames(c("ID","NAME","DIMS","LONGNAME","UNITS")) %>%
    mutate(DIMS = as.integer(DIMS))
 
    vars.info
NA

FILTRANDO VARIAVEIS ESPACIAIS:

 
    vars.info %>%
      filter(DIMS > 1) %>%
      arrange(DIMS) %>%
  dplyr::select(ID,NAME,LONGNAME,UNITS)
NA

Leitura do arquivo

  
D2ou3 <- ifelse(vars.info$DIMS > 1,TRUE,FALSE) 
  run.000 <- read.nc(ncfile = run.nc)
  run.000 <- run.000[D2ou3]  
   
  wrf.vars <- run.000 %>% names
  

CLASSIFICAÇÃO DO TIPO DE COBERTURA DO SOLO

Na configuração atual WRF utiliza a classificação do USGS, com 24 tipos de cobertura do solo. No arquivo LANDUSE.TBL se definem as classificações e diferencia entre INVERNO e VERÃO. No caso não teve diferença.

veg_class_verao <- 
read.csv("~/Build_WRF/WRFV3/topicosII/LANDUSE.TBL",
         header = FALSE,sep = ",",
         skip = 33,nrows = 33) %>% 
  select(V1,V9) %>%
  setNames(c("ID","VERAO"))
veg_class_inverno <- 
read.csv("~/Build_WRF/WRFV3/topicosII/LANDUSE.TBL",
         header = FALSE,sep = ",",
         skip = 67,nrows = 33) %>% 
  select(V1,V9) %>%
  setNames(c("ID","INVERNO"))
veg_class <- left_join(veg_class_verao,veg_class_inverno,by = "ID")
veg_class %<>% 
  mutate(CHANGE = ifelse(VERAO == INVERNO, "-","X"))
  veg_type <- 
  wrf2raster(file = wrf.list.files[6],  ## Função criada para ler o arquivo
             vars = "IVGTYP",
             level = 1)
wrfout_d01_2016-04-29_15:00:00 

  wrf2raster(file = wrf.list.files[19],
             vars = "LU_INDEX",
             level = 3)
NA 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 1, 21  (min, max)

  wrf2raster(file = wrf.list.files[9],
             vars = "LAI",
             level = 1)
wrfout_d01_2016-04-30_00:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 5.756851  (min, max)

Frequência de ocorrência de cada tipo de vegetação.

freq(veg_type) %>% 
  as.data.frame() %>% 
  arrange(desc(count)) %>%
  setNames(c("ID","NCELL")) %>%
  left_join(veg_class, by = "ID")

Tipo de solo

  soil_type <- 
  wrf2raster(file = wrf.list.files[6],
             vars = "ISLTYP",
             level = 1)
wrfout_d01_2016-04-29_15:00:00 

freq(soil_type) %>% 
  as.data.frame() %>% 
  arrange(desc(count)) %>%
  setNames(c("ID","NCELL"))
# Eliminando áreas de ocêano
soil_type[soil_type == 14] <- NA
veg_type[veg_type == 16] <- NA
# 
# spplot(soil_type)
# spplot(veg_type)
  wrf2raster(file = wrf.list.files[7],
             vars = "SLWDN",
             level = 3)
wrfout_d01_2016-04-29_18:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 0  (min, max)

  wrf2raster(file = wrf.list.files[7],
             vars = "EMISS",
             level = 3)
wrfout_d01_2016-04-29_18:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0.88, 0.95  (min, max)

  wrf2raster(file = wrf.list.files[19],
             vars = "ALBEDO",
             level = 3)
NA 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0.12, 0.6  (min, max)

  wrf2raster(file = wrf.list.files[19],
             vars = "HFX",
             level = 1)
NA 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 0  (min, max)

  wrf2raster(file = wrf.list.files[9],
             vars = "GRDFLX",
             level = 3)
wrfout_d01_2016-04-30_00:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 0  (min, max)

  wrf2raster(file = wrf.list.files[9],
             vars = "GLW",
             level = 1)
wrfout_d01_2016-04-30_00:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 0  (min, max)

  wrf2raster(file = wrf.list.files[5],
             vars = "LH",
             level = 1)
wrfout_d01_2016-04-29_12:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 0  (min, max)

  wrf2raster(file = wrf.list.files[5],
             vars = "PBLH",
             level = 1)
wrfout_d01_2016-04-29_12:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 0  (min, max)

  wrf2raster(file = wrf.list.files[5],
             vars = "UST",
             level = 1)
wrfout_d01_2016-04-29_12:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 1e-04, 1e-04  (min, max)

  wrf2raster(file = wrf.list.files[5],
             vars = "ACHFX",
             level = 1)
wrfout_d01_2016-04-29_12:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 0  (min, max)

  wrf2raster(file = wrf.list.files[9],
             vars = "RAINNC",
             level = 1)
wrfout_d01_2016-04-30_00:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 0, 0  (min, max)

  wrf2raster(file = wrf.list.files[9],
             vars = "TSK",
             level = 1)
wrfout_d01_2016-04-30_00:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 260.2537, 297.0699  (min, max)

  wrf2raster(file = wrf.list.files[9],
             vars = "U10",
             level = 1)
wrfout_d01_2016-04-30_00:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : -9.413965, 9.036017  (min, max)

  wrf2raster(file = wrf.list.files[9],
             vars = "V10",
             level = 1)
wrfout_d01_2016-04-30_00:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : -6.914836, 10.54784  (min, max)

  wrf2raster(file = wrf.list.files[9],
             vars = "T2",
             level = 1)
wrfout_d01_2016-04-30_00:00:00 
class       : RasterLayer 
dimensions  : 205, 333, 68265  (nrow, ncol, ncell)
resolution  : 0.1388586, 0.1137923  (x, y)
extent      : -76.61996, -30.38004, -41.44027, -18.11285  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : layer 
values      : 263.1057, 297.6781  (min, max)

LS0tCnRpdGxlOiAiQW5hbGlzZSBkYSBzYWlkYSBkbyBXUkYiCnN1YnRpdGxlOiBUw7NwaWNvcyBJSQpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCi0tLQoKYGBge3J9CnBhY290ZXMgPC0gYygiZHBseXIiLCAibWFncml0dHIiLCAiUk5ldENERiIsICJyYXN0ZXIiLCAiZ2dwbG90MiIsCiAgICAgICAgICAgICAicGxvdGx5IikKc2FwcGx5KHBhY290ZXMscmVxdWlyZSxjaGFyYWN0ZXIub25seSA9IFRSVUUpCm9wdGlvbnMobWF4LnByaW50ID0gMTAwKQpzZXR3ZCgiL2hvbWUvd3JmL1RPUElDT1NfSUkvQW5hbGlzZXMiKQpzb3VyY2UoIi4vUi9hdXguZnVucy5SIikKCmBgYAoKCmBgYHtyfQoKd3JmLmxpc3QuZmlsZXMgPC0gCmxpc3QuZmlsZXMocGF0aCA9ICJ+L0J1aWxkX1dSRi9XUkZWMy90b3BpY29zSUkvIixwYXR0ZXJuID0gIndyZm91dCIsIGZ1bGwubmFtZXMgPSBUUlVFKQoKYmFzZW5hbWUod3JmLmxpc3QuZmlsZXMpCmBgYAoKLS0tIAoKIyBWYXJpw6F2ZWlzIG5hIHNhw61kYSBkbyBXUkYKClNlZ3VuZG8gYSBsaXN0YSBkZSB2YXJpYXbDqWlzIGUgYXRyaWJ1dG9zIG5vIG1lc21vIGFycXVpdm8gTmV0Q0RGLgoKYGBge3J9CiMgUmVhZGluZyBmaXJzdCBmaWxlCgpydW4ubmMgPC0gCiAgb3Blbi5uYyh3cmYubGlzdC5maWxlc1sxXSx3cml0ZSA9IFRSVUUpCgogIGZpbGUuaW5mbyA8LSBmaWxlLmlucS5uYyhydW4ubmMpCgogIHZhcnMuaW5mbyA8LSAKICBzYXBwbHkoMTooZmlsZS5pbmZvJG52YXJzLTEpLCBmdW5jdGlvbihpKXsKICAgIHZhciA8LSAKICAgICAgICB2YXIuaW5xLm5jKG5jZmlsZSA9IHJ1bi5uYyx2YXJpYWJsZSA9ICBpKSAKICAgIHZhciRsb25nbmFtZSA8LSAKICAgICAgYXR0LmdldC5uYyhuY2ZpbGUgPSBydW4ubmMsdmFyaWFibGUgPSBpLGF0dHJpYnV0ZSA9IDIgKSAKICAgIHZhciR1bml0cyA8LSAKICAgICAgYXR0LmdldC5uYyhuY2ZpbGUgPSBydW4ubmMsdmFyaWFibGUgPSBpLGF0dHJpYnV0ZSA9IDMgKSAKICAgIAogICAgYyh2YXIkaWQsIHZhciRuYW1lICx2YXIkbmRpbXMsIHRvdXBwZXIodmFyJGxvbmduYW1lKSwgdmFyJHVuaXRzKSAlPiUgdAogIAogICAgfSkgJT4lIHQgJT4lIGFzLmRhdGEuZnJhbWUoKSAlPiUgCiAgICBzZXROYW1lcyhjKCJJRCIsIk5BTUUiLCJESU1TIiwiTE9OR05BTUUiLCJVTklUUyIpKSAlPiUKICAgIG11dGF0ZShESU1TID0gYXMuaW50ZWdlcihESU1TKSkKIAogICAgdmFycy5pbmZvCiAgICAKYGBgCgoKIyMgRklMVFJBTkRPIFZBUklBVkVJUyBFU1BBQ0lBSVM6CgpgYGB7cn0KIAogICAgdmFycy5pbmZvICU+JQogICAgICBmaWx0ZXIoRElNUyA+IDEpICU+JQogICAgICBhcnJhbmdlKERJTVMpICU+JQogIGRwbHlyOjpzZWxlY3QoSUQsTkFNRSxMT05HTkFNRSxVTklUUykKIApgYGAKCiMgTGVpdHVyYSBkbyBhcnF1aXZvCgpgYGB7cn0gICAgCiAgCkQyb3UzIDwtIGlmZWxzZSh2YXJzLmluZm8kRElNUyA+IDEsVFJVRSxGQUxTRSkgCgogIHJ1bi4wMDAgPC0gcmVhZC5uYyhuY2ZpbGUgPSBydW4ubmMpCiAgcnVuLjAwMCA8LSBydW4uMDAwW0Qyb3UzXSAgCiAgIAogIHdyZi52YXJzIDwtIHJ1bi4wMDAgJT4lIG5hbWVzCiAgCmBgYAoKCgojIyBDTEFTU0lGSUNBw4fDg08gRE8gVElQTyBERSBDT0JFUlRVUkEgRE8gU09MTwoKTmEgY29uZmlndXJhw6fDo28gYXR1YWwgV1JGIHV0aWxpemEgYSBjbGFzc2lmaWNhw6fDo28gZG8gVVNHUywgY29tIDI0IHRpcG9zIGRlIGNvYmVydHVyYSBkbyBzb2xvLiBObyBhcnF1aXZvIExBTkRVU0UuVEJMIHNlIGRlZmluZW0gYXMgY2xhc3NpZmljYcOnw7VlcyBlIGRpZmVyZW5jaWEgZW50cmUgSU5WRVJOTyBlIFZFUsODTy4gTm8gY2FzbyBuw6NvIHRldmUgZGlmZXJlbsOnYS4gCgpgYGB7cn0KCnZlZ19jbGFzc192ZXJhbyA8LSAKcmVhZC5jc3YoIn4vQnVpbGRfV1JGL1dSRlYzL3RvcGljb3NJSS9MQU5EVVNFLlRCTCIsCiAgICAgICAgIGhlYWRlciA9IEZBTFNFLHNlcCA9ICIsIiwKICAgICAgICAgc2tpcCA9IDMzLG5yb3dzID0gMzMpICU+JSAKICBzZWxlY3QoVjEsVjkpICU+JQogIHNldE5hbWVzKGMoIklEIiwiVkVSQU8iKSkKCnZlZ19jbGFzc19pbnZlcm5vIDwtIApyZWFkLmNzdigifi9CdWlsZF9XUkYvV1JGVjMvdG9waWNvc0lJL0xBTkRVU0UuVEJMIiwKICAgICAgICAgaGVhZGVyID0gRkFMU0Usc2VwID0gIiwiLAogICAgICAgICBza2lwID0gNjcsbnJvd3MgPSAzMykgJT4lIAogIHNlbGVjdChWMSxWOSkgJT4lCiAgc2V0TmFtZXMoYygiSUQiLCJJTlZFUk5PIikpCgoKdmVnX2NsYXNzIDwtIGxlZnRfam9pbih2ZWdfY2xhc3NfdmVyYW8sdmVnX2NsYXNzX2ludmVybm8sYnkgPSAiSUQiKQoKdmVnX2NsYXNzICU8PiUgCiAgbXV0YXRlKENIQU5HRSA9IGlmZWxzZShWRVJBTyA9PSBJTlZFUk5PLCAiLSIsIlgiKSkKCmBgYAoKCgpgYGB7ciAsIGZpZy5oZWlnaHQ9IDQsIGZpZy53aWR0aD02IH0KCiAgdmVnX3R5cGUgPC0gCiAgd3JmMnJhc3RlcihmaWxlID0gd3JmLmxpc3QuZmlsZXNbNl0sICAjIyBGdW7Dp8OjbyBjcmlhZGEgcGFyYSBsZXIgbyBhcnF1aXZvCiAgICAgICAgICAgICB2YXJzID0gIklWR1RZUCIsCiAgICAgICAgICAgICBsZXZlbCA9IDEpCgpgYGAKCgpgYGB7cn0KCgogIHdyZjJyYXN0ZXIoZmlsZSA9IHdyZi5saXN0LmZpbGVzWzE5XSwKICAgICAgICAgICAgIHZhcnMgPSAiTFVfSU5ERVgiLAogICAgICAgICAgICAgbGV2ZWwgPSAzKQoKYGBgCgpgYGB7cn0KCgogIHdyZjJyYXN0ZXIoZmlsZSA9IHdyZi5saXN0LmZpbGVzWzldLAogICAgICAgICAgICAgdmFycyA9ICJMQUkiLAogICAgICAgICAgICAgbGV2ZWwgPSAxKQoKYGBgCgoKIyMgRnJlcXXDqm5jaWEgZGUgb2NvcnLDqm5jaWEgZGUgY2FkYSB0aXBvIGRlIHZlZ2V0YcOnw6NvLgoKYGBge3J9CgpmcmVxKHZlZ190eXBlKSAlPiUgCiAgYXMuZGF0YS5mcmFtZSgpICU+JSAKICBhcnJhbmdlKGRlc2MoY291bnQpKSAlPiUKICBzZXROYW1lcyhjKCJJRCIsIk5DRUxMIikpICU+JQogIGxlZnRfam9pbih2ZWdfY2xhc3MsIGJ5ID0gIklEIikKCmBgYAoKIyBUaXBvIGRlIHNvbG8KICAKICAKYGBge3J9CgogIHNvaWxfdHlwZSA8LSAKICB3cmYycmFzdGVyKGZpbGUgPSB3cmYubGlzdC5maWxlc1s2XSwKICAgICAgICAgICAgIHZhcnMgPSAiSVNMVFlQIiwKICAgICAgICAgICAgIGxldmVsID0gMSkKCmBgYAoKCmBgYHtyfQoKZnJlcShzb2lsX3R5cGUpICU+JSAKICBhcy5kYXRhLmZyYW1lKCkgJT4lIAogIGFycmFuZ2UoZGVzYyhjb3VudCkpICU+JQogIHNldE5hbWVzKGMoIklEIiwiTkNFTEwiKSkKCmBgYAoKCmBgYHtyfQojIEVsaW1pbmFuZG8gw6FyZWFzIGRlIG9jw6phbm8KCnNvaWxfdHlwZVtzb2lsX3R5cGUgPT0gMTRdIDwtIE5BCnZlZ190eXBlW3ZlZ190eXBlID09IDE2XSA8LSBOQQojIAojIHNwcGxvdChzb2lsX3R5cGUpCiMgc3BwbG90KHZlZ190eXBlKQoKYGBgCgoKCmBgYHtyfQoKICB3cmYycmFzdGVyKGZpbGUgPSB3cmYubGlzdC5maWxlc1s3XSwKICAgICAgICAgICAgIHZhcnMgPSAiU0xXRE4iLAogICAgICAgICAgICAgbGV2ZWwgPSAzKQoKYGBgCgoKYGBge3J9CgoKICB3cmYycmFzdGVyKGZpbGUgPSB3cmYubGlzdC5maWxlc1s3XSwKICAgICAgICAgICAgIHZhcnMgPSAiRU1JU1MiLAogICAgICAgICAgICAgbGV2ZWwgPSAzKQoKYGBgCgoKCmBgYHtyfQoKCiAgd3JmMnJhc3RlcihmaWxlID0gd3JmLmxpc3QuZmlsZXNbMTldLAogICAgICAgICAgICAgdmFycyA9ICJBTEJFRE8iLAogICAgICAgICAgICAgbGV2ZWwgPSAzKQoKYGBgCgoKYGBge3J9CgoKICB3cmYycmFzdGVyKGZpbGUgPSB3cmYubGlzdC5maWxlc1sxOV0sCiAgICAgICAgICAgICB2YXJzID0gIkhGWCIsCiAgICAgICAgICAgICBsZXZlbCA9IDEpCgpgYGAKCgoKYGBge3J9CgoKICB3cmYycmFzdGVyKGZpbGUgPSB3cmYubGlzdC5maWxlc1s5XSwKICAgICAgICAgICAgIHZhcnMgPSAiR1JERkxYIiwKICAgICAgICAgICAgIGxldmVsID0gMykKCmBgYAoKCgpgYGB7cn0KCgogIHdyZjJyYXN0ZXIoZmlsZSA9IHdyZi5saXN0LmZpbGVzWzldLAogICAgICAgICAgICAgdmFycyA9ICJHTFciLAogICAgICAgICAgICAgbGV2ZWwgPSAxKQoKYGBgCgoKCmBgYHtyfQoKCiAgd3JmMnJhc3RlcihmaWxlID0gd3JmLmxpc3QuZmlsZXNbNV0sCiAgICAgICAgICAgICB2YXJzID0gIkxIIiwKICAgICAgICAgICAgIGxldmVsID0gMSkKCmBgYAoKYGBge3J9CgoKICB3cmYycmFzdGVyKGZpbGUgPSB3cmYubGlzdC5maWxlc1s1XSwKICAgICAgICAgICAgIHZhcnMgPSAiUEJMSCIsCiAgICAgICAgICAgICBsZXZlbCA9IDEpCgpgYGAKCgpgYGB7cn0KCgogIHdyZjJyYXN0ZXIoZmlsZSA9IHdyZi5saXN0LmZpbGVzWzVdLAogICAgICAgICAgICAgdmFycyA9ICJVU1QiLAogICAgICAgICAgICAgbGV2ZWwgPSAxKQoKYGBgCgoKYGBge3J9CgoKICB3cmYycmFzdGVyKGZpbGUgPSB3cmYubGlzdC5maWxlc1s1XSwKICAgICAgICAgICAgIHZhcnMgPSAiQUNIRlgiLAogICAgICAgICAgICAgbGV2ZWwgPSAxKQoKYGBgCgoKYGBge3J9CgoKICB3cmYycmFzdGVyKGZpbGUgPSB3cmYubGlzdC5maWxlc1s5XSwKICAgICAgICAgICAgIHZhcnMgPSAiUkFJTk5DIiwKICAgICAgICAgICAgIGxldmVsID0gMSkKCmBgYAoKCgpgYGB7cn0KCgogIHdyZjJyYXN0ZXIoZmlsZSA9IHdyZi5saXN0LmZpbGVzWzldLAogICAgICAgICAgICAgdmFycyA9ICJUU0siLAogICAgICAgICAgICAgbGV2ZWwgPSAxKQoKYGBgCgoKYGBge3J9CgoKICB3cmYycmFzdGVyKGZpbGUgPSB3cmYubGlzdC5maWxlc1s5XSwKICAgICAgICAgICAgIHZhcnMgPSAiVTEwIiwKICAgICAgICAgICAgIGxldmVsID0gMSkKCmBgYAoKCgpgYGB7cn0KCgogIHdyZjJyYXN0ZXIoZmlsZSA9IHdyZi5saXN0LmZpbGVzWzldLAogICAgICAgICAgICAgdmFycyA9ICJWMTAiLAogICAgICAgICAgICAgbGV2ZWwgPSAxKQoKYGBgCgpgYGB7cn0KCgogIHdyZjJyYXN0ZXIoZmlsZSA9IHdyZi5saXN0LmZpbGVzWzldLAogICAgICAgICAgICAgdmFycyA9ICJUMiIsCiAgICAgICAgICAgICBsZXZlbCA9IDEpCgpgYGAKCgoKCgo=