Teoría

La información del clima se obtiene del ASOS (Automated Surface Observing System) ubicados en los aeropuertos de todas las ciudades del mundo.

Instalar paquetes y llamar librerías

#install.packages("riem") # Accesar al ASOS para obtener datos climáticos
library(riem)
#install.packages("tidyverse") # Manipulación de datos
library(tidyverse)
## ── 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.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ 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
#install.packages("ggplot2") # Gráficas con mejor diseño que plot
library(ggplot2)
#install.packages("plotly") #Gráficas con mejor calidad
library(plotly)
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout

Paso 1. Buscar la red del país y copiar CODE

#view(riem_networks())
#MX__ASOS

Paso 2. Buscar la estación o ciudad (Monterrey) y copiar ID

#view(riem_stations("MX__ASOS"))
#MMMY

Paso 3. Obtener datos del clima

clima_mty <- riem_measures("MMMY")
#view(riem_measures("MMMY""))

Ejericio 1. Obtener datos del clima de Monterrey de Febrero 2024

clima_mty_feb <- subset(clima_mty, valid >= as.POSIXct("2024-02-01 00:00") & valid <= as.POSIXct("2024-02-29 23:59"))

Ejericio 2. Graficar la humedad relativa en Monterrey durante febrero 2024

plot(clima_mty_feb$valid,clima_mty_feb$relh,type="l",main ="Humedad Relativa en Monterrey (%) Durante Febrero 2024",xlab="Dias del mes", ylab="Porcentaje de humedad relativa")

#promediar humedad relativa diaria
clima_mty_feb$date <- as.Date(clima_mty_feb$valid)
cmfd <- aggregate(clima_mty_feb, by=list(date = clima_mty_feb$date), FUN=mean)
## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA
#cmpd <- clima_mty_feb%>%
  #mutate(date=ymd_hm(valid), date=as.Date(date)) %>%
  #group_by(date) %>%
  #summarize_if(is.numeric, ~mean(.,na.rm=TRUE))
#El punto adentro del parenthesis en la 63 indica que va a promediar toda la base de datos, y na.rm es "NA, remove =TRUE, osea borra los nulos.

# Graficar humedad relativa promedio por día
plot(cmfd$date,cmfd$relh,type="l",main ="Promedio Diario de Humedad Relativa en Monterrey Durante Febrero 2024",xlab="Dias del mes", ylab="Porcentaje de humedad relativa")

Ejericio 3. Graficar la temperatura (ºC) promedio en Febrero 2024 de una ciudad que no sea Monterrey

LS0tCnRpdGxlOiAiQ2xpbWEiCmF1dGhvcjogIkZlZGVyaWNvIFpvcnJpbGxhIEEwMDgzNjYyOSIKZGF0ZTogIjIwMjQtMDItMjkiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFCiAgICB0aGVtZTogZGFyawotLS0KCiFbXSgvVXNlcnMvZmVkZXpvcnJpbGxhL0Rlc2t0b3AvUiBNYXJrZG93bi9wbmd0cmVlLXdlYXRoZXItdmVjdG9yLXBuZy1pbWFnZV85MTY3MDAwLnBuZykKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5UZW9yw61hPC9zcGFuPgpMYSBpbmZvcm1hY2nDs24gZGVsIGNsaW1hIHNlIG9idGllbmUgZGVsICoqQVNPUyoqICgqQXV0b21hdGVkIFN1cmZhY2UgT2JzZXJ2aW5nIFN5c3RlbSopIHViaWNhZG9zIGVuIGxvcyBhZXJvcHVlcnRvcyBkZSB0b2RhcyBsYXMgY2l1ZGFkZXMgZGVsIG11bmRvLiAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzPC9zcGFuPgpgYGB7cn0KI2luc3RhbGwucGFja2FnZXMoInJpZW0iKSAjIEFjY2VzYXIgYWwgQVNPUyBwYXJhIG9idGVuZXIgZGF0b3MgY2xpbcOhdGljb3MKbGlicmFyeShyaWVtKQojaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikgIyBNYW5pcHVsYWNpw7NuIGRlIGRhdG9zCmxpYnJhcnkodGlkeXZlcnNlKQojaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICMgR3LDoWZpY2FzIGNvbiBtZWpvciBkaXNlw7FvIHF1ZSBwbG90CmxpYnJhcnkoZ2dwbG90MikKI2luc3RhbGwucGFja2FnZXMoInBsb3RseSIpICNHcsOhZmljYXMgY29uIG1lam9yIGNhbGlkYWQKbGlicmFyeShwbG90bHkpCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IHllbGxvdzsiPlBhc28gMS4gQnVzY2FyIGxhIHJlZCBkZWwgcGHDrXMgeSBjb3BpYXIgQ09ERTwvc3Bhbj4KYGBge3J9CiN2aWV3KHJpZW1fbmV0d29ya3MoKSkKI01YX19BU09TCgpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5QYXNvIDIuIEJ1c2NhciBsYSBlc3RhY2nDs24gbyBjaXVkYWQgKE1vbnRlcnJleSkgeSBjb3BpYXIgSUQ8L3NwYW4+CmBgYHtyfQojdmlldyhyaWVtX3N0YXRpb25zKCJNWF9fQVNPUyIpKQojTU1NWQoKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogeWVsbG93OyI+UGFzbyAzLiBPYnRlbmVyIGRhdG9zIGRlbCBjbGltYTwvc3Bhbj4KYGBge3J9CmNsaW1hX210eSA8LSByaWVtX21lYXN1cmVzKCJNTU1ZIikKI3ZpZXcocmllbV9tZWFzdXJlcygiTU1NWSIiKSkKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogeWVsbG93OyI+RWplcmljaW8gMS4gT2J0ZW5lciBkYXRvcyBkZWwgY2xpbWEgZGUgTW9udGVycmV5IGRlIEZlYnJlcm8gMjAyNCA8L3NwYW4+CmBgYHtyfQpjbGltYV9tdHlfZmViIDwtIHN1YnNldChjbGltYV9tdHksIHZhbGlkID49IGFzLlBPU0lYY3QoIjIwMjQtMDItMDEgMDA6MDAiKSAmIHZhbGlkIDw9IGFzLlBPU0lYY3QoIjIwMjQtMDItMjkgMjM6NTkiKSkKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogeWVsbG93OyI+RWplcmljaW8gMi4gR3JhZmljYXIgbGEgaHVtZWRhZCByZWxhdGl2YSBlbiBNb250ZXJyZXkgZHVyYW50ZSBmZWJyZXJvIDIwMjQgPC9zcGFuPgpgYGB7cn0KcGxvdChjbGltYV9tdHlfZmViJHZhbGlkLGNsaW1hX210eV9mZWIkcmVsaCx0eXBlPSJsIixtYWluID0iSHVtZWRhZCBSZWxhdGl2YSBlbiBNb250ZXJyZXkgKCUpIER1cmFudGUgRmVicmVybyAyMDI0Iix4bGFiPSJEaWFzIGRlbCBtZXMiLCB5bGFiPSJQb3JjZW50YWplIGRlIGh1bWVkYWQgcmVsYXRpdmEiKQoKI3Byb21lZGlhciBodW1lZGFkIHJlbGF0aXZhIGRpYXJpYQpjbGltYV9tdHlfZmViJGRhdGUgPC0gYXMuRGF0ZShjbGltYV9tdHlfZmViJHZhbGlkKQpjbWZkIDwtIGFnZ3JlZ2F0ZShjbGltYV9tdHlfZmViLCBieT1saXN0KGRhdGUgPSBjbGltYV9tdHlfZmViJGRhdGUpLCBGVU49bWVhbikKI2NtcGQgPC0gY2xpbWFfbXR5X2ZlYiU+JQogICNtdXRhdGUoZGF0ZT15bWRfaG0odmFsaWQpLCBkYXRlPWFzLkRhdGUoZGF0ZSkpICU+JQogICNncm91cF9ieShkYXRlKSAlPiUKICAjc3VtbWFyaXplX2lmKGlzLm51bWVyaWMsIH5tZWFuKC4sbmEucm09VFJVRSkpCiNFbCBwdW50byBhZGVudHJvIGRlbCBwYXJlbnRoZXNpcyBlbiBsYSA2MyBpbmRpY2EgcXVlIHZhIGEgcHJvbWVkaWFyIHRvZGEgbGEgYmFzZSBkZSBkYXRvcywgeSBuYS5ybSBlcyAiTkEsIHJlbW92ZSA9VFJVRSwgb3NlYSBib3JyYSBsb3MgbnVsb3MuCgojIEdyYWZpY2FyIGh1bWVkYWQgcmVsYXRpdmEgcHJvbWVkaW8gcG9yIGTDrWEKcGxvdChjbWZkJGRhdGUsY21mZCRyZWxoLHR5cGU9ImwiLG1haW4gPSJQcm9tZWRpbyBEaWFyaW8gZGUgSHVtZWRhZCBSZWxhdGl2YSBlbiBNb250ZXJyZXkgRHVyYW50ZSBGZWJyZXJvIDIwMjQiLHhsYWI9IkRpYXMgZGVsIG1lcyIsIHlsYWI9IlBvcmNlbnRhamUgZGUgaHVtZWRhZCByZWxhdGl2YSIpCgpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij5FamVyaWNpbyAzLiBHcmFmaWNhciBsYSB0ZW1wZXJhdHVyYSAowrpDKSBwcm9tZWRpbyBlbiBGZWJyZXJvIDIwMjQgZGUgdW5hIGNpdWRhZCBxdWUgbm8gc2VhIE1vbnRlcnJleSA8L3NwYW4+CgoKCgoKCgoKCg==