#No me cargan los gifs, soy la alumna que ya le habia comentado del problema #

Instalar librerías

#install.packages("WDI")
library(WDI)
#install.packages("wbstats")
library(wbstats)
#install.packages("tidyverse")
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.4.4     ✔ 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

Obtener información de 1 país

gdp_data <- wb_data(country=c("MX", "EC", "CA"), indicator= "NY.GDP.PCAP.CD", start_date=2013, end_date=2023)
gdp_data
## # A tibble: 30 × 9
##    iso2c iso3c country  date NY.GDP.PCAP.CD unit  obs_status footnote
##    <chr> <chr> <chr>   <dbl>          <dbl> <chr> <chr>      <chr>   
##  1 CA    CAN   Canada   2013         52635. <NA>  <NA>       <NA>    
##  2 CA    CAN   Canada   2014         50956. <NA>  <NA>       <NA>    
##  3 CA    CAN   Canada   2015         43596. <NA>  <NA>       <NA>    
##  4 CA    CAN   Canada   2016         42316. <NA>  <NA>       <NA>    
##  5 CA    CAN   Canada   2017         45129. <NA>  <NA>       <NA>    
##  6 CA    CAN   Canada   2018         46549. <NA>  <NA>       <NA>    
##  7 CA    CAN   Canada   2019         46374. <NA>  <NA>       <NA>    
##  8 CA    CAN   Canada   2020         43562. <NA>  <NA>       <NA>    
##  9 CA    CAN   Canada   2021         52515. <NA>  <NA>       <NA>    
## 10 CA    CAN   Canada   2022         55522. <NA>  <NA>       <NA>    
## # ℹ 20 more rows
## # ℹ 1 more variable: last_updated <date>

Generar un conjunto de datos de panel

panel <- select(gdp_data,country,date,NY.GDP.PCAP.CD)
gdp_data
## # A tibble: 30 × 9
##    iso2c iso3c country  date NY.GDP.PCAP.CD unit  obs_status footnote
##    <chr> <chr> <chr>   <dbl>          <dbl> <chr> <chr>      <chr>   
##  1 CA    CAN   Canada   2013         52635. <NA>  <NA>       <NA>    
##  2 CA    CAN   Canada   2014         50956. <NA>  <NA>       <NA>    
##  3 CA    CAN   Canada   2015         43596. <NA>  <NA>       <NA>    
##  4 CA    CAN   Canada   2016         42316. <NA>  <NA>       <NA>    
##  5 CA    CAN   Canada   2017         45129. <NA>  <NA>       <NA>    
##  6 CA    CAN   Canada   2018         46549. <NA>  <NA>       <NA>    
##  7 CA    CAN   Canada   2019         46374. <NA>  <NA>       <NA>    
##  8 CA    CAN   Canada   2020         43562. <NA>  <NA>       <NA>    
##  9 CA    CAN   Canada   2021         52515. <NA>  <NA>       <NA>    
## 10 CA    CAN   Canada   2022         55522. <NA>  <NA>       <NA>    
## # ℹ 20 more rows
## # ℹ 1 more variable: last_updated <date>

Ejercicio 2

Instalar librería GGPLOTS

#install.packages("gplots")
library(gplots)
## 
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
## 
##     lowess

Selección de países y variables

prueba <- wb_data(country=c("FR", "MX", "JP", "US"), indicator =c("EG.ELC.HYRO.ZS", "EG.FEC.RNEW.ZS", "EG.ELC.RNEW.ZS", "GB.XPD.RSDV.GD.ZS"), start_date = 2000, end_date = 2015)
prueba
## # A tibble: 64 × 8
##    iso2c iso3c country  date EG.ELC.HYRO.ZS EG.ELC.RNEW.ZS EG.FEC.RNEW.ZS
##    <chr> <chr> <chr>   <dbl>          <dbl>          <dbl>          <dbl>
##  1 FR    FRA   France   2000          12.4           13.0            9.32
##  2 FR    FRA   France   2001          13.6           14.3            9.46
##  3 FR    FRA   France   2002          10.9           11.6            8.73
##  4 FR    FRA   France   2003          10.5           11.2            8.91
##  5 FR    FRA   France   2004          10.5           11.2            8.95
##  6 FR    FRA   France   2005           9.01           9.86           8.66
##  7 FR    FRA   France   2006           9.89          10.9            8.52
##  8 FR    FRA   France   2007          10.2           11.7            9.46
##  9 FR    FRA   France   2008          11.2           13.0           10.6 
## 10 FR    FRA   France   2009          10.7           13.1           11.3 
## # ℹ 54 more rows
## # ℹ 1 more variable: GB.XPD.RSDV.GD.ZS <dbl>
####EG.ELC.HYRO.ZS es Producción de electricidad a partir de fuentes hidroeléctricas (% del total)
####EG.ELC.RNEW.ZS es Producción de electricidad renovable (% de la producción eléctrica total)
####EG.FEC.RNEW.ZS es Consumo de energía renovable (% del consumo total de energía final)
####GB.XPD.RSDV.GD.ZS es Gasto en investigación y desarrollo (% del PIB)

Generación de un conjunto datos de panel

panel <- select(prueba, country, date ,EG.ELC.HYRO.ZS, EG.FEC.RNEW.ZS, EG.ELC.RNEW.ZS,GB.XPD.RSDV.GD.ZS)
panel <- subset(panel, date == 2000 | date == 2005 | date == 2010 | date == 2015)

Generación de gráficos

plotmeans(EG.ELC.HYRO.ZS ~ country, main= "Heterogenidad entre países", data= panel)
## Warning in arrows(x, li, x, pmax(y - gap, li), col = barcol, lwd = lwd, :
## zero-length arrow is of indeterminate angle and so skipped
## Warning in arrows(x, ui, x, pmin(y + gap, ui), col = barcol, lwd = lwd, :
## zero-length arrow is of indeterminate angle and so skipped

plotmeans(EG.ELC.HYRO.ZS ~ date, main= "Heterogenidad entre años", data=panel)

#La heterogeneidad en los datos significa que existe variabilidad en los datos, es decir, existe diferencia entre ellos. Las gráfica mostradas anteriormente muestran heterogeinedad en ambas. Existe un diferente nivel de producción de electricidad a partir de fuentes hidroeléctricas entre los cuatro países presentados, también la grafica de la heterogeneidad entre años no es línea ya que también hay diferencias entre los años. 

Modelos de Panel

Instalar la librería PLM

#install.packages("plm")
library(plm)
## 
## Attaching package: 'plm'
## The following objects are masked from 'package:dplyr':
## 
##     between, lag, lead

Modelo 1.Regresión agrupada (pooled)

pooled <- plm(EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + GB.XPD.RSDV.GD.ZS, data = panel, model = "pooling")
summary(pooled)
## Pooling Model
## 
## Call:
## plm(formula = EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + 
##     GB.XPD.RSDV.GD.ZS, data = panel, model = "pooling")
## 
## Balanced Panel: n = 4, T = 4, N = 16
## 
## Residuals:
##      Min.   1st Qu.    Median   3rd Qu.      Max. 
## -2.699061 -0.962000 -0.019214  0.904829  3.054436 
## 
## Coefficients:
##                    Estimate Std. Error t-value Pr(>|t|)  
## (Intercept)        6.655884   3.202225  2.0785  0.05978 .
## EG.FEC.RNEW.ZS     0.071014   0.234900  0.3023  0.76759  
## EG.ELC.RNEW.ZS     0.360835   0.209888  1.7192  0.11125  
## GB.XPD.RSDV.GD.ZS -1.266517   0.590894 -2.1434  0.05327 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    134.54
## Residual Sum of Squares: 36.314
## R-Squared:      0.73008
## Adj. R-Squared: 0.66261
## F-statistic: 10.8194 on 3 and 12 DF, p-value: 0.00099401
#r cuadrada más cercano al 1

Modelo 2. Efectos fijos (within)

within <- plm(EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + GB.XPD.RSDV.GD.ZS, data = panel, model = "within")
summary(within)
## Oneway (individual) effect Within Model
## 
## Call:
## plm(formula = EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + 
##     GB.XPD.RSDV.GD.ZS, data = panel, model = "within")
## 
## Balanced Panel: n = 4, T = 4, N = 16
## 
## Residuals:
##     Min.  1st Qu.   Median  3rd Qu.     Max. 
## -2.05541 -0.65881 -0.12288  0.91259  1.32117 
## 
## Coefficients:
##                   Estimate Std. Error t-value Pr(>|t|)  
## EG.FEC.RNEW.ZS    -0.42970    0.45156 -0.9516  0.36616  
## EG.ELC.RNEW.ZS     0.70179    0.28605  2.4534  0.03655 *
## GB.XPD.RSDV.GD.ZS -8.22797    3.86536 -2.1286  0.06216 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    31.086
## Residual Sum of Squares: 14.961
## R-Squared:      0.5187
## Adj. R-Squared: 0.19784
## F-statistic: 3.23315 on 3 and 9 DF, p-value: 0.074853

Prueba pF

pFtest(within,pooled)
## 
##  F test for individual effects
## 
## data:  EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + GB.XPD.RSDV.GD.ZS
## F = 4.2815, df1 = 3, df2 = 9, p-value = 0.03891
## alternative hypothesis: significant effects

Modelo 3. Efectos aleatorios (random) - Metodo walhus

walhus <- plm(EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + GB.XPD.RSDV.GD.ZS, data = panel, model = "random", random.method =  "walhus")
summary(walhus)
## Oneway (individual) effect Random Effect Model 
##    (Wallace-Hussain's transformation)
## 
## Call:
## plm(formula = EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + 
##     GB.XPD.RSDV.GD.ZS, data = panel, model = "random", random.method = "walhus")
## 
## Balanced Panel: n = 4, T = 4, N = 16
## 
## Effects:
##                  var std.dev share
## idiosyncratic 1.9959  1.4128 0.879
## individual    0.2737  0.5232 0.121
## theta: 0.1964
## 
## Residuals:
##      Min.   1st Qu.    Median   3rd Qu.      Max. 
## -2.495559 -0.855550 -0.011516  0.809331  2.875031 
## 
## Coefficients:
##                    Estimate Std. Error z-value Pr(>|z|)  
## (Intercept)        7.472145   3.103934  2.4073  0.01607 *
## EG.FEC.RNEW.ZS     0.020781   0.262250  0.0792  0.93684  
## EG.ELC.RNEW.ZS     0.351567   0.213732  1.6449  0.09999 .
## GB.XPD.RSDV.GD.ZS -1.405672   0.624771 -2.2499  0.02446 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    97.893
## Residual Sum of Squares: 31.697
## R-Squared:      0.6762
## Adj. R-Squared: 0.59525
## Chisq: 25.0602 on 3 DF, p-value: 1.4999e-05

Modelo 4. Efectos aleatorios (random) - Metodo amemiya

amemiya <- plm(EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + GB.XPD.RSDV.GD.ZS, data = panel, model = "random", random.method =  "amemiya")
summary(amemiya)
## Oneway (individual) effect Random Effect Model 
##    (Amemiya's transformation)
## 
## Call:
## plm(formula = EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + 
##     GB.XPD.RSDV.GD.ZS, data = panel, model = "random", random.method = "amemiya")
## 
## Balanced Panel: n = 4, T = 4, N = 16
## 
## Effects:
##                  var std.dev share
## idiosyncratic  1.247   1.117 0.024
## individual    51.098   7.148 0.976
## theta: 0.9221
## 
## Residuals:
##     Min.  1st Qu.   Median  3rd Qu.     Max. 
## -2.76016 -0.70267  0.26041  0.64529  1.43364 
## 
## Coefficients:
##                   Estimate Std. Error z-value Pr(>|z|)  
## (Intercept)       15.24244    6.26123  2.4344  0.01492 *
## EG.FEC.RNEW.ZS    -0.47134    0.41329 -1.1404  0.25410  
## EG.ELC.RNEW.ZS     0.63584    0.26142  2.4323  0.01500 *
## GB.XPD.RSDV.GD.ZS -4.96534    2.55346 -1.9446  0.05183 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    31.713
## Residual Sum of Squares: 17.527
## R-Squared:      0.44731
## Adj. R-Squared: 0.30913
## Chisq: 9.71184 on 3 DF, p-value: 0.021181

Modelo 5. Efectos aleatorios (random) - Método nerlove

nerlove <- plm(EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + GB.XPD.RSDV.GD.ZS, data= panel, model = "random", random.method="nerlove")
summary(nerlove)
## Oneway (individual) effect Random Effect Model 
##    (Nerlove's transformation)
## 
## Call:
## plm(formula = EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + 
##     GB.XPD.RSDV.GD.ZS, data = panel, model = "random", random.method = "nerlove")
## 
## Balanced Panel: n = 4, T = 4, N = 16
## 
## Effects:
##                   var std.dev share
## idiosyncratic  0.9351  0.9670 0.013
## individual    68.5463  8.2793 0.987
## theta: 0.9417
## 
## Residuals:
##     Min.  1st Qu.   Median  3rd Qu.     Max. 
## -2.67273 -0.70790  0.19847  0.68447  1.29606 
## 
## Coefficients:
##                   Estimate Std. Error z-value Pr(>|z|)  
## (Intercept)       16.80312    7.34153  2.2888  0.02209 *
## EG.FEC.RNEW.ZS    -0.46343    0.40811 -1.1355  0.25615  
## EG.ELC.RNEW.ZS     0.65609    0.25811  2.5419  0.01102 *
## GB.XPD.RSDV.GD.ZS -5.87459    2.82837 -2.0770  0.03780 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    31.437
## Residual Sum of Squares: 16.778
## R-Squared:      0.46631
## Adj. R-Squared: 0.33289
## Chisq: 10.4851 on 3 DF, p-value: 0.014863

Prueba de hausman

phtest(nerlove, within)
## 
##  Hausman Test
## 
## data:  EG.ELC.HYRO.ZS ~ EG.FEC.RNEW.ZS + EG.ELC.RNEW.ZS + GB.XPD.RSDV.GD.ZS
## chisq = 0.80073, df = 3, p-value = 0.8493
## alternative hypothesis: one model is inconsistent
###se elige el mejor de los 3 modelos de aleatorio y después el mejor de los dos primeros modelos
###en este caso es mejor amemiya, porque tiene más asterísticos 
LS0tDQp0aXRsZTogIkFjdDEiDQphdXRob3I6ICJYaW1lbmEgRmR6IEEwMDgzMTcyNSINCmRhdGU6ICIyMDI0LTAyLTIyIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQotLS0NCg0KI05vIG1lIGNhcmdhbiBsb3MgZ2lmcywgc295IGxhIGFsdW1uYSBxdWUgeWEgbGUgaGFiaWEgY29tZW50YWRvIGRlbCBwcm9ibGVtYQ0KIyFbXShkYXRhLmdpZikgDQoNCiMgSW5zdGFsYXIgbGlicmVyw61hcw0KYGBge3IgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUV9DQojaW5zdGFsbC5wYWNrYWdlcygiV0RJIikNCmxpYnJhcnkoV0RJKQ0KI2luc3RhbGwucGFja2FnZXMoIndic3RhdHMiKQ0KbGlicmFyeSh3YnN0YXRzKQ0KI2luc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmBgYA0KDQoNCiMgT2J0ZW5lciBpbmZvcm1hY2nDs24gZGUgMSBwYcOtcw0KYGBge3J9DQpnZHBfZGF0YSA8LSB3Yl9kYXRhKGNvdW50cnk9YygiTVgiLCAiRUMiLCAiQ0EiKSwgaW5kaWNhdG9yPSAiTlkuR0RQLlBDQVAuQ0QiLCBzdGFydF9kYXRlPTIwMTMsIGVuZF9kYXRlPTIwMjMpDQpnZHBfZGF0YQ0KYGBgDQoNCg0KIyBHZW5lcmFyIHVuIGNvbmp1bnRvIGRlIGRhdG9zIGRlIHBhbmVsDQpgYGB7cn0NCnBhbmVsIDwtIHNlbGVjdChnZHBfZGF0YSxjb3VudHJ5LGRhdGUsTlkuR0RQLlBDQVAuQ0QpDQpnZHBfZGF0YQ0KYGBgDQoNCiMgRWplcmNpY2lvIDINCg0KIyBJbnN0YWxhciBsaWJyZXLDrWEgR0dQTE9UUw0KYGBge3IgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUV9DQojaW5zdGFsbC5wYWNrYWdlcygiZ3Bsb3RzIikNCmxpYnJhcnkoZ3Bsb3RzKQ0KYGBgDQoNCiMgU2VsZWNjacOzbiBkZSBwYcOtc2VzIHkgdmFyaWFibGVzDQpgYGB7cn0NCnBydWViYSA8LSB3Yl9kYXRhKGNvdW50cnk9YygiRlIiLCAiTVgiLCAiSlAiLCAiVVMiKSwgaW5kaWNhdG9yID1jKCJFRy5FTEMuSFlSTy5aUyIsICJFRy5GRUMuUk5FVy5aUyIsICJFRy5FTEMuUk5FVy5aUyIsICJHQi5YUEQuUlNEVi5HRC5aUyIpLCBzdGFydF9kYXRlID0gMjAwMCwgZW5kX2RhdGUgPSAyMDE1KQ0KcHJ1ZWJhDQojIyMjRUcuRUxDLkhZUk8uWlMgZXMgUHJvZHVjY2nDs24gZGUgZWxlY3RyaWNpZGFkIGEgcGFydGlyIGRlIGZ1ZW50ZXMgaGlkcm9lbMOpY3RyaWNhcyAoJSBkZWwgdG90YWwpDQojIyMjRUcuRUxDLlJORVcuWlMgZXMgUHJvZHVjY2nDs24gZGUgZWxlY3RyaWNpZGFkIHJlbm92YWJsZSAoJSBkZSBsYSBwcm9kdWNjacOzbiBlbMOpY3RyaWNhIHRvdGFsKQ0KIyMjI0VHLkZFQy5STkVXLlpTIGVzIENvbnN1bW8gZGUgZW5lcmfDrWEgcmVub3ZhYmxlICglIGRlbCBjb25zdW1vIHRvdGFsIGRlIGVuZXJnw61hIGZpbmFsKQ0KIyMjI0dCLlhQRC5SU0RWLkdELlpTIGVzIEdhc3RvIGVuIGludmVzdGlnYWNpw7NuIHkgZGVzYXJyb2xsbyAoJSBkZWwgUElCKQ0KYGBgDQoNCiMgR2VuZXJhY2nDs24gZGUgdW4gY29uanVudG8gZGF0b3MgZGUgcGFuZWwgDQpgYGB7cn0NCnBhbmVsIDwtIHNlbGVjdChwcnVlYmEsIGNvdW50cnksIGRhdGUgLEVHLkVMQy5IWVJPLlpTLCBFRy5GRUMuUk5FVy5aUywgRUcuRUxDLlJORVcuWlMsR0IuWFBELlJTRFYuR0QuWlMpDQpwYW5lbCA8LSBzdWJzZXQocGFuZWwsIGRhdGUgPT0gMjAwMCB8IGRhdGUgPT0gMjAwNSB8IGRhdGUgPT0gMjAxMCB8IGRhdGUgPT0gMjAxNSkNCmBgYA0KDQoNCiMgR2VuZXJhY2nDs24gZGUgZ3LDoWZpY29zDQpgYGB7cn0NCnBsb3RtZWFucyhFRy5FTEMuSFlSTy5aUyB+IGNvdW50cnksIG1haW49ICJIZXRlcm9nZW5pZGFkIGVudHJlIHBhw61zZXMiLCBkYXRhPSBwYW5lbCkNCnBsb3RtZWFucyhFRy5FTEMuSFlSTy5aUyB+IGRhdGUsIG1haW49ICJIZXRlcm9nZW5pZGFkIGVudHJlIGHDsW9zIiwgZGF0YT1wYW5lbCkNCmBgYA0KDQpgYGB7cn0NCiNMYSBoZXRlcm9nZW5laWRhZCBlbiBsb3MgZGF0b3Mgc2lnbmlmaWNhIHF1ZSBleGlzdGUgdmFyaWFiaWxpZGFkIGVuIGxvcyBkYXRvcywgZXMgZGVjaXIsIGV4aXN0ZSBkaWZlcmVuY2lhIGVudHJlIGVsbG9zLiBMYXMgZ3LDoWZpY2EgbW9zdHJhZGFzIGFudGVyaW9ybWVudGUgbXVlc3RyYW4gaGV0ZXJvZ2VpbmVkYWQgZW4gYW1iYXMuIEV4aXN0ZSB1biBkaWZlcmVudGUgbml2ZWwgZGUgcHJvZHVjY2nDs24gZGUgZWxlY3RyaWNpZGFkIGEgcGFydGlyIGRlIGZ1ZW50ZXMgaGlkcm9lbMOpY3RyaWNhcyBlbnRyZSBsb3MgY3VhdHJvIHBhw61zZXMgcHJlc2VudGFkb3MsIHRhbWJpw6luIGxhIGdyYWZpY2EgZGUgbGEgaGV0ZXJvZ2VuZWlkYWQgZW50cmUgYcOxb3Mgbm8gZXMgbMOtbmVhIHlhIHF1ZSB0YW1iacOpbiBoYXkgZGlmZXJlbmNpYXMgZW50cmUgbG9zIGHDsW9zLiANCmBgYA0KDQoNCiMgTW9kZWxvcyBkZSBQYW5lbA0KDQojIEluc3RhbGFyIGxhIGxpYnJlcsOtYSBQTE0NCmBgYHtyIG1lc3NhZ2U9VFJVRX0NCiNpbnN0YWxsLnBhY2thZ2VzKCJwbG0iKQ0KbGlicmFyeShwbG0pDQpgYGANCg0KIyBNb2RlbG8gMS5SZWdyZXNpw7NuIGFncnVwYWRhIChwb29sZWQpDQpgYGB7cn0NCnBvb2xlZCA8LSBwbG0oRUcuRUxDLkhZUk8uWlMgfiBFRy5GRUMuUk5FVy5aUyArIEVHLkVMQy5STkVXLlpTICsgR0IuWFBELlJTRFYuR0QuWlMsIGRhdGEgPSBwYW5lbCwgbW9kZWwgPSAicG9vbGluZyIpDQpzdW1tYXJ5KHBvb2xlZCkNCiNyIGN1YWRyYWRhIG3DoXMgY2VyY2FubyBhbCAxDQpgYGANCg0KIyBNb2RlbG8gMi4gRWZlY3RvcyBmaWpvcyAod2l0aGluKQ0KYGBge3J9DQp3aXRoaW4gPC0gcGxtKEVHLkVMQy5IWVJPLlpTIH4gRUcuRkVDLlJORVcuWlMgKyBFRy5FTEMuUk5FVy5aUyArIEdCLlhQRC5SU0RWLkdELlpTLCBkYXRhID0gcGFuZWwsIG1vZGVsID0gIndpdGhpbiIpDQpzdW1tYXJ5KHdpdGhpbikNCmBgYA0KDQojIFBydWViYSBwRg0KYGBge3J9DQpwRnRlc3Qod2l0aGluLHBvb2xlZCkNCmBgYA0KDQojIE1vZGVsbyAzLiBFZmVjdG9zIGFsZWF0b3Jpb3MgIChyYW5kb20pIC0gTWV0b2RvIHdhbGh1cw0KYGBge3J9DQp3YWxodXMgPC0gcGxtKEVHLkVMQy5IWVJPLlpTIH4gRUcuRkVDLlJORVcuWlMgKyBFRy5FTEMuUk5FVy5aUyArIEdCLlhQRC5SU0RWLkdELlpTLCBkYXRhID0gcGFuZWwsIG1vZGVsID0gInJhbmRvbSIsIHJhbmRvbS5tZXRob2QgPSAgIndhbGh1cyIpDQpzdW1tYXJ5KHdhbGh1cykNCmBgYA0KDQojIE1vZGVsbyA0LiBFZmVjdG9zIGFsZWF0b3Jpb3MgIChyYW5kb20pIC0gTWV0b2RvIGFtZW1peWENCmBgYHtyfQ0KYW1lbWl5YSA8LSBwbG0oRUcuRUxDLkhZUk8uWlMgfiBFRy5GRUMuUk5FVy5aUyArIEVHLkVMQy5STkVXLlpTICsgR0IuWFBELlJTRFYuR0QuWlMsIGRhdGEgPSBwYW5lbCwgbW9kZWwgPSAicmFuZG9tIiwgcmFuZG9tLm1ldGhvZCA9ICAiYW1lbWl5YSIpDQpzdW1tYXJ5KGFtZW1peWEpDQpgYGANCg0KIyBNb2RlbG8gNS4gRWZlY3RvcyBhbGVhdG9yaW9zIChyYW5kb20pIC0gTcOpdG9kbyBuZXJsb3ZlDQpgYGB7cn0NCm5lcmxvdmUgPC0gcGxtKEVHLkVMQy5IWVJPLlpTIH4gRUcuRkVDLlJORVcuWlMgKyBFRy5FTEMuUk5FVy5aUyArIEdCLlhQRC5SU0RWLkdELlpTLCBkYXRhPSBwYW5lbCwgbW9kZWwgPSAicmFuZG9tIiwgcmFuZG9tLm1ldGhvZD0ibmVybG92ZSIpDQpzdW1tYXJ5KG5lcmxvdmUpDQpgYGANCg0KIyBQcnVlYmEgZGUgaGF1c21hbg0KYGBge3J9DQpwaHRlc3QobmVybG92ZSwgd2l0aGluKQ0KIyMjc2UgZWxpZ2UgZWwgbWVqb3IgZGUgbG9zIDMgbW9kZWxvcyBkZSBhbGVhdG9yaW8geSBkZXNwdcOpcyBlbCBtZWpvciBkZSBsb3MgZG9zIHByaW1lcm9zIG1vZGVsb3MNCiMjI2VuIGVzdGUgY2FzbyBlcyBtZWpvciBhbWVtaXlhLCBwb3JxdWUgdGllbmUgbcOhcyBhc3RlcsOtc3RpY29zIA0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==