bibliotecas

Preparação dos dados

Abrir bases originais:

# abrir base e criar amostras
#dados_finais_2000_2010 <- readRDS("~/RStudio/ENEM/2_Dado tratado/dados_finais_2000_2010.rds")
#df<-slice_sample(dados_finais_2000_2010,prop = 0.01) 
#saveRDS(df, file = "sample_00_10.rds")
#table(dados_finais_2000_2010$NU_ANO)
#table(df$NU_ANO)
#dados_finais_2000_2010 <- readRDS("~/RStudio/ENEM/2_Dado tratado/dados_finais_2012_2014.rds")

#df2<-slice_sample(dados_finais_2000_2010,prop = 0.01) 
#saveRDS(df2, file = "sample_12_14.rds")


#dados_finais_2015_2020 <- readRDS("~/RStudio/ENEM/2_Dado tratado/dados_finais_2015_2020.rds")
#df3<-slice_sample(dados_finais_2015_2020,prop = 0.01) 
#saveRDS(df3, file = "sample_15_20.rds")
#Base de 2000-2010
sample_00_10 <- readRDS("~/RStudio/ENEM/sample_00_10.rds")
#Base de 2011-2015
sample_12_14 <- readRDS("~/RStudio/ENEM/sample_12_14.rds")
#Base de 2015-2016
sample_15_20 <- readRDS("~/RStudio/ENEM/sample_15_20.rds")
#base de Variaveis Ambientais
# unificar base de dados ambiental
Centro <- readRDS("~/RStudio/ENEM/Data-20220615T014950Z-001/Data/Centro.rds")
NE <- readRDS("~/RStudio/ENEM/Data-20220615T014950Z-001/Data/NE.rds")
NO <- readRDS("~/RStudio/ENEM/Data-20220615T014950Z-001/Data/NO.rds")
SE <- readRDS("~/RStudio/ENEM/Data-20220615T014950Z-001/Data/SE.rds")
SUL <- readRDS("~/RStudio/ENEM/Data-20220615T014950Z-001/Data/Sul.rds")
df_Am<-bind_rows(NE, NO, SE,SUL)
rm(NE,NO,SE,SUL,Centro)
head(df_Am)

Preparar Bases:

Selecionar Variaveis de Interesse


sample_00_10$TP_SEXO[sample_00_10$Q1=="A"]<-"M"
sample_00_10$TP_SEXO[sample_00_10$Q1=="B"]<-"F"

sample_12_14$TP_SEXO[sample_12_14$TP_SEXO=="0"]<-"M"
sample_12_14$TP_SEXO[sample_12_14$TP_SEXO=="1"]<-"F"

#Base de 2000-2010
sample_00_10%>% select(NU_INSCRICAO,#número de inscrição
  TP_SEXO,
  NU_ANO,#ano
  SG_UF_RESIDENCIA,#Estado
  NO_MUNICIPIO_RESIDENCIA,#municipio
  CO_MUNICIPIO_RESIDENCIA,#codigo do municipio
  NU_NOTA_REDACAO,#nota Redação
  NU_NOTA_COMP1,#nota componente X
  NU_NOTA_COMP2,#nota componente X
  NU_NOTA_COMP3,#nota componente X
  NU_NOTA_COMP4,
  NU_NOTA_COMP5,
  Q9,# escolaridade do Pai
  Q10,
  TP_DEPENDENCIA_ADM_ESC,# Dependência administrativa   (1  Federal 2   Estadual    3   Municipal, 4    Privada
  TP_LOCALIZACAO_ESC, #Localização/Zona da escola   1   Urbana 2    Rural
  Q15#renda A-Q
)->sample_00_10



#Base de 2011-2015
sample_12_14%>% select(NU_INSCRICAO,#número de inscrição
  TP_SEXO,
  NU_ANO,#ano
  UF_RESIDENCIA,#Estado
  NO_MUNICIPIO_RESIDENCIA,#municipio
  CO_MUNICIPIO_RESIDENCIA,#codigo do municipio
  NU_NOTA_REDACAO,#nota Redação
  NU_NOTA_COMP1,#nota componente X
  NU_NOTA_COMP2,#nota componente X
  NU_NOTA_COMP3,#nota componente X
  NU_NOTA_COMP4,
  NU_NOTA_COMP5,
  Q9,# escolaridade do Pai
  Q10,
  TP_DEPENDENCIA_ADM_ESC,# Dependência administrativa   (1  Federal 2   Estadual    3   Municipal, 4    Privada
  TP_LOCALIZACAO_ESC, #Localização/Zona da escola   1   Urbana 2    Rural
  Q15#renda A-Q#nota componente X
  #Questão renda
#  ,#Questão
#  ,#Questão
#  ,#Questão
)->sample_12_14
#Base de 2015-2016

sample_15_20%>% select(NU_INSCRICAO,#número de inscrição
  TP_SEXO,
  NU_ANO,#ano
  SG_UF_RESIDENCIA,#Estado
  NO_MUNICIPIO_RESIDENCIA,#municipio
  CO_MUNICIPIO_RESIDENCIA,#codigo do municipio
  NU_NOTA_REDACAO,#nota Redação
  NU_NOTA_COMP1,#nota componente X
  NU_NOTA_COMP2,#nota componente X
  NU_NOTA_COMP3,#nota componente X
  NU_NOTA_COMP4,
  NU_NOTA_COMP5,#nota componente X
  Q9,# escolaridade do Pai
  Q10,
  TP_DEPENDENCIA_ADM_ESC,# Dependência administrativa   (1  Federal 2   Estadual    3   Municipal, 4    Privada
  TP_LOCALIZACAO_ESC, #Localização/Zona da escola   1   Urbana 2    Rural
  Q15#renda A-Q
#  ,#Questão renda
#  ,#Questão
#  ,#Questão
#  ,#Questão
)->sample_15_20
#base de Variaveis Ambientais

Fundir Bases:

unique(df_enem$NU_ANO)
 [1] "2007" "2008" "2010" "2003" "2004" "2001" "2009" "2005" "2000" "2002" "2006" "2014" "2013" "2012" "2020" "2017" "2018"
[18] "2016" "2015" "2019"

Analise Exploratória

Sumário dos Dados

Resumo dos Dados

#ajustando variaveis
df[,2] <- lapply(df[,2], as.factor)
df[,4:6] <- lapply(df[,4:6], as.factor)
df[,7:12] <- lapply(df[,7:12], as.numeric)
Warning in lapply(df[, 7:12], as.numeric) : NAs introduced by coercion
Warning in lapply(df[, 7:12], as.numeric) : NAs introduced by coercion
Warning in lapply(df[, 7:12], as.numeric) : NAs introduced by coercion
Warning in lapply(df[, 7:12], as.numeric) : NAs introduced by coercion
Warning in lapply(df[, 7:12], as.numeric) : NAs introduced by coercion
Warning in lapply(df[, 7:12], as.numeric) : NAs introduced by coercion
df[,13:20] <- lapply(df[,13:20], as.factor)

Analise das uni

#variaveis numéricas
  plot_num(df)
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.


#variaveis Categoricas
freq(df)
Warning in freq_logic(data = data, input = input[i], plot, na.rm, path_out = path_out) :
  Skipping plot for variable 'NU_INSCRICAO' (more than 100 categories)
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
Warning in freq_logic(data = data, input = input[i], plot, na.rm, path_out = path_out) :
  Skipping plot for variable 'NO_MUNICIPIO_RESIDENCIA' (more than 100 categories)
Warning in freq_logic(data = data, input = input[i], plot, na.rm, path_out = path_out) :
  Skipping plot for variable 'CO_MUNICIPIO_RESIDENCIA' (more than 100 categories)
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.

[1] "Variables processed: NU_INSCRICAO, TP_SEXO, SG_UF_RESIDENCIA, NO_MUNICIPIO_RESIDENCIA, CO_MUNICIPIO_RESIDENCIA, Q9, Q10, TP_DEPENDENCIA_ADM_ESC, TP_LOCALIZACAO_ESC, Q15, UF_RESIDENCIA, name_state, name_region"

Analise de Correlações

for (i in 7:12) {
  print(i)
  print(ggplot(df1, aes(x = df1$NU_ANO, y =  df1[[i]]))  +facet_wrap(~name_state)+
          geom_point(alpha=0.1)+geom_smooth()+
    ylab(A[i]))
    Sys.sleep(1)

  }
[1] 7
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
[1] 8
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
[1] 9
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
[1] 10
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
[1] 11
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
[1] 12
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)
Warning: Computation failed in `stat_smooth()`:
NA/NaN/Inf in foreign function call (arg 3)

Pelos gráficos parece que a escala de notas são realmente diferentes sendo o ano um efeito fixo

for (i in 7:12) {
  print(i)
  print(ggplot(df1, aes(x = df1$pm25_ugm3, y =  df1[[i]])) +  facet_wrap(~name_state)+
          geom_point(alpha=0.1)+geom_smooth()+
    ylab(A[i]))
    Sys.sleep(1)

  }
[1] 7
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 2927 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 2927 rows containing missing values (geom_point).
[1] 8
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3001 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 3001 rows containing missing values (geom_point).
[1] 9
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3001 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 3001 rows containing missing values (geom_point).
[1] 10
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3001 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 3001 rows containing missing values (geom_point).
[1] 11
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3001 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 3001 rows containing missing values (geom_point).
[1] 12
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3001 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 3001 rows containing missing values (geom_point).


for (i in 7:12) {
  print(i)
  print(ggplot(df1, aes(x = df1$no2_ppb, y =  df1[[i]])) + facet_wrap(~name_state)+
          geom_point(alpha=0.1)+geom_smooth()+
    ylab(A[i]))
    Sys.sleep(1)

  }
[1] 7
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3088 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 3088 rows containing missing values (geom_point).
[1] 8
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3162 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 3162 rows containing missing values (geom_point).
[1] 9
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3162 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 3162 rows containing missing values (geom_point).
[1] 10
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3162 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 3162 rows containing missing values (geom_point).
[1] 11
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3162 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 3162 rows containing missing values (geom_point).
[1] 12
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3162 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 3162 rows containing missing values (geom_point).


for (i in 7:12) {
  print(i)
  print(ggplot(df1, aes(x = df1$o3_ppb, y =  df1[[i]])) +facet_wrap(~name_state)+
          geom_point(alpha=0.1)+geom_smooth()+
    ylab(A[i]))
    Sys.sleep(1)

  }
[1] 7
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 2719 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 2719 rows containing missing values (geom_point).
[1] 8
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 2793 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 2793 rows containing missing values (geom_point).
[1] 9
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 2793 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 2793 rows containing missing values (geom_point).
[1] 10
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 2793 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 2793 rows containing missing values (geom_point).
[1] 11
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 2793 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 2793 rows containing missing values (geom_point).
[1] 12
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 2793 rows containing non-finite values (stat_smooth).
Warning: Computation failed in `stat_smooth()`:
x has insufficient unique values to support 10 knots: reduce k.
Warning: Removed 2793 rows containing missing values (geom_point).

Regressões

Modelo basico de referencia

#modelo Linear
mainlm<-lm(NU_NOTA_REDACAO~ no2_ppb,data = df1)
#Efeitos Mistos
mainlmer<-lmer(NU_NOTA_REDACAO~ no2_ppb + (1+no2_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0369633 (tol = 0.002, component 1)
summary(mainlm)

Call:
lm(formula = NU_NOTA_REDACAO ~ no2_ppb, data = df1)

Residuals:
    Min      1Q  Median      3Q     Max 
-337.92 -281.06   46.86  237.44  669.20 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 338.5043     4.7211  71.701  < 2e-16 ***
no2_ppb      -5.1953     0.9078  -5.723  1.1e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 277.3 on 6068 degrees of freedom
  (3088 observations deleted due to missingness)
Multiple R-squared:  0.005368,  Adjusted R-squared:  0.005205 
F-statistic: 32.75 on 1 and 6068 DF,  p-value: 1.097e-08
summary(mainlmer)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: NU_NOTA_REDACAO ~ no2_ppb + (1 + no2_ppb | SG_UF_RESIDENCIA)
   Data: df1

REML criterion at convergence: 60691.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.3536 -0.8972 -0.5688  0.9095  2.5544 

Random effects:
 Groups           Name        Variance Std.Dev. Corr 
 SG_UF_RESIDENCIA (Intercept)  3617.0   60.14        
                  no2_ppb       131.7   11.48   -0.99
 Residual                     76992.9  277.48        
Number of obs: 4306, groups:  SG_UF_RESIDENCIA, 25

Fixed effects:
            Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)  311.604     15.122  15.247  20.606 1.51e-12 ***
no2_ppb       -8.025      3.414   7.868  -2.351   0.0472 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
        (Intr)
no2_ppb -0.868
optimizer (nloptwrap) convergence code: 0 (OK)
Model failed to converge with max|grad| = 0.0369633 (tol = 0.002, component 1)

extração de Coeficientes

coef_int= function (modelo) {
  coef(modelo)[[1]][1]
  coef<-coef(modelo)[[1]]
  SE<-(standard_error(modelo, effects = "random")[[1]])
  RES<-cbind(coef,SE,rownames(coef))
  colnames(RES)<- c(colnames(RES)[1],"SLOPE",paste("SE_",colnames(RES)[3]),paste("SE_","SLOPE"),"fator")
  return(RES)

}
G<-coef_int(mainlmer) 
#grafico Intercept
G %>%
  ggplot(aes(G[,1],G[,5]))+geom_point()+
  geom_errorbar(aes(xmin=(G[,1]+1.645*G[,3]),xmax=(G[,1]-1.645*G[,3])),size=0.1)+
  geom_pointrange(aes(xmin=(G[,1]+1.645*G[,3]),xmax=(G[,1]-1.645*G[,3])),size=0.1)+
  geom_vline(xintercept = 0, color = "red", size=1.0)+
  labs(title = "Modelo mistos",
       subtitle = "Coeficientes(IC90%)",
       caption = "EPPG FGV")+xlab("Intercept")+ylab("Estado")



#grafico Slope
G %>%
  ggplot(aes(G[,2],G[,5]))+geom_point()+
  geom_errorbar(aes(xmin=(G[,2]+1.645*G[,4]),xmax=(G[,2]-1.645*G[,4])),size=0.1)+
  geom_pointrange(aes(xmin=(G[,2]+1.645*G[,4]),xmax=(G[,2]-1.645*G[,4])),size=0.1)+
  geom_vline(xintercept = 0, color = "red", size=1.0)+
  labs(title = "Modelo mistos",
       subtitle = "Coeficientes(IC90%)",
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")

NA
NA

todos os Modelos

df1$NU_NOTA_COMP5<-as.numeric(df1$NU_NOTA_COMP5)
  #Variação de Poluente
mod_Red_NO2<-lmer(NU_NOTA_REDACAO~ no2_ppb + (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_Red_O3<-lmer(NU_NOTA_REDACAO~ o3_ppb + (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0104493 (tol = 0.002, component 1)
mod_Red_PM25<-lmer(NU_NOTA_REDACAO~ pm25_ugm3 + (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )

mod_COMP1_NO2<-lmer(NU_NOTA_COMP1~ no2_ppb + (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP1_O3<-lmer(NU_NOTA_COMP1~ o3_ppb + (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 7.76049 (tol = 0.002, component 1)
mod_COMP1_PM25<-lmer(NU_NOTA_COMP1~ pm25_ugm3 + (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.137549 (tol = 0.002, component 1)
mod_COMP2_NO2<-lmer(NU_NOTA_COMP2~ no2_ppb + (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP2_O3<-lmer(NU_NOTA_COMP2~ o3_ppb + (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.682631 (tol = 0.002, component 1)
mod_COMP2_PM25<-lmer(NU_NOTA_COMP2~ pm25_ugm3 + (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )

mod_COMP3_NO2<-lmer(NU_NOTA_COMP3~ no2_ppb + (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP3_O3<-lmer(NU_NOTA_COMP3~ o3_ppb + (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 13.4513 (tol = 0.002, component 1)
mod_COMP3_PM25<-lmer(NU_NOTA_COMP3~ pm25_ugm3 + (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0600179 (tol = 0.002, component 1)
mod_COMP4_NO2<-lmer(NU_NOTA_COMP4~ no2_ppb + (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP4_O3<-lmer(NU_NOTA_COMP4~ o3_ppb + (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 6.97955 (tol = 0.002, component 1)
mod_COMP4_PM25<-lmer(NU_NOTA_COMP4~ pm25_ugm3 + (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0100228 (tol = 0.002, component 1)
mod_COMP5_NO2<-lmer(NU_NOTA_COMP5~ no2_ppb + (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP5_O3<-lmer(NU_NOTA_COMP5~ o3_ppb + (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  unable to evaluate scaled gradient
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge: degenerate  Hessian with 1 negative eigenvalues
Warning: Model failed to converge with 1 negative eigenvalue: -8.4e+00
mod_COMP5_PM25<-lmer(NU_NOTA_COMP5~ pm25_ugm3 + (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.00332599 (tol = 0.002, component 1)
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model is nearly unidentifiable: very large eigenvalue
 - Rescale variables?
Juntando resultados
A<-coef_int(mod_Red_NO2)
A$Poluente<-"NO2"
A$Nota<- "redação"

aB<-coef_int(mod_Red_O3)
aB$Poluente<-"O3"
aB$Nota<- "redação"

aC<-coef_int(mod_Red_PM25)
aC$Poluente<-"PM25"
aC$Nota<- "redação"


aD<-coef_int(mod_COMP1_NO2)
aD$Poluente <-"NO2"
aD$Nota<-"COMP1"

aE<-coef_int(mod_COMP1_O3)
aE$Poluente<-"O3"
aE$Nota<-"COMP1"

aF<-coef_int(mod_COMP1_PM25)
aF$Poluente<-"PM25"
aF$Nota <-"COMP1"

aG<-coef_int(mod_COMP2_NO2)
aG$Poluente<-"NO2"
aG$Nota<-"COMP2"

aH<-coef_int(mod_COMP2_O3)
aH$Poluente<-"O3"
aH$Nota<-"COMP2"

aI<-coef_int(mod_COMP2_PM25)
aI$Poluente<-"PM25"
aI$Nota<-"COMP2"

aJ<-coef_int(mod_COMP3_NO2)
aJ$Poluente<-"NO2"
aJ$Nota<-"COMP3"

aL<-coef_int(mod_COMP3_O3)
aL$Poluente<-"O3"
aL$Nota<-"COMP3"

aM<-coef_int(mod_COMP3_PM25)
aM$Poluente<-"PM25"
aM$Nota<-"COMP3"

aN<-coef_int(mod_COMP4_NO2)
aN$Poluente<-"NO2"
aN$Nota<-"COMP4"

aO<-coef_int(mod_COMP4_O3)
aO$Poluente<-"O3"
aO$Nota<-"COMP4"

aP<-coef_int(mod_COMP4_PM25)
aP$Poluente<-"PM25"
aP$Nota<-"COMP4"

aQ<-coef_int(mod_COMP5_NO2)
aQ$Poluente<-"NO2"
aQ$Nota<-"COMP5"

aR<-coef_int(mod_COMP5_O3)
aR$Poluente<-"O3"
aR$Nota<-"COMP5"

aT<-coef_int(mod_COMP5_PM25)
aT$Poluente <-"PM25"
aT$Nota<-"COMP5"

rbind(A[],aB[])

coef<-bind_rows(A,aB,aC,aD,aE,aF,aG,aH,aI,aJ,aL,aM,aN,aO,aP,aQ,aR,aT)
rm(A,aB,aC,aD,aE,aF,aG,aH,aI,aJ,aL,aM,aN,aO,aP,aQ,aR,aT)
#grafico Slope
G %>% 
  ggplot(aes(G$SLOPE,G$fator))+geom_point()+facet_grid(Nota~Poluente,scales = "free")+
  geom_errorbar(aes(xmin=(G[,2]+1.645*G[,4]),xmax=(G[,2]-1.645*G[,4])),size=0.1)+
  geom_pointrange(aes(xmin=(G[,2]+1.645*G[,4]),xmax=(G[,2]-1.645*G[,4])),size=0.1)+
  geom_vline(xintercept = 0, color = "red", size=1.0)+
  labs(title = "Modelo mistos",
       subtitle = "Coeficientes(IC90%)",
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")
Warning: Use of `G$SLOPE` is discouraged. Use `SLOPE` instead.
Warning: Use of `G$fator` is discouraged. Use `fator` instead.
Warning: Use of `G$SLOPE` is discouraged. Use `SLOPE` instead.
Warning: Use of `G$fator` is discouraged. Use `fator` instead.
Warning: Use of `G$SLOPE` is discouraged. Use `SLOPE` instead.
Warning: Use of `G$fator` is discouraged. Use `fator` instead.

incluir outras variaveis

ANO

  #Variação de Poluente
mod_Red_NO2<-lmer(NU_NOTA_REDACAO~ no2_ppb +bs(NU_ANO)+ (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0238592 (tol = 0.002, component 1)
mod_Red_O3<-lmer(NU_NOTA_REDACAO~ o3_ppb +bs(NU_ANO)+ (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 1.28009 (tol = 0.002, component 1)
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model is nearly unidentifiable: very large eigenvalue
 - Rescale variables?
mod_Red_PM25<-lmer(NU_NOTA_REDACAO~ pm25_ugm3 +bs(NU_ANO)+ (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 22.717 (tol = 0.002, component 1)
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model is nearly unidentifiable: very large eigenvalue
 - Rescale variables?
mod_COMP1_NO2<-lmer(NU_NOTA_COMP1~ no2_ppb +bs(NU_ANO)+ (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP1_O3<-lmer(NU_NOTA_COMP1~ o3_ppb +bs(NU_ANO)+ (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.498451 (tol = 0.002, component 1)
mod_COMP1_PM25<-lmer(NU_NOTA_COMP1~ pm25_ugm3 +bs(NU_ANO)+ (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0350266 (tol = 0.002, component 1)
mod_COMP2_NO2<-lmer(NU_NOTA_COMP2~ no2_ppb +bs(NU_ANO)+ (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP2_O3<-lmer(NU_NOTA_COMP2~ o3_ppb +bs(NU_ANO)+ (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0253796 (tol = 0.002, component 1)
mod_COMP2_PM25<-lmer(NU_NOTA_COMP2~ pm25_ugm3 +bs(NU_ANO)+ (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.149335 (tol = 0.002, component 1)
mod_COMP3_NO2<-lmer(NU_NOTA_COMP3~ no2_ppb + bs(NU_ANO)+ (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP3_O3<-lmer(NU_NOTA_COMP3~ o3_ppb + bs(NU_ANO)+(1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.700352 (tol = 0.002, component 1)
mod_COMP3_PM25<-lmer(NU_NOTA_COMP3~ pm25_ugm3 +bs(NU_ANO)+ (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0114945 (tol = 0.002, component 1)
mod_COMP4_NO2<-lmer(NU_NOTA_COMP4~ no2_ppb + bs(NU_ANO)+(1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP4_O3<-lmer(NU_NOTA_COMP4~ o3_ppb + bs(NU_ANO)+(1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0238664 (tol = 0.002, component 1)
mod_COMP4_PM25<-lmer(NU_NOTA_COMP4~ pm25_ugm3 + bs(NU_ANO)+(1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.00434433 (tol = 0.002, component 1)
mod_COMP5_NO2<-lmer(NU_NOTA_COMP5~ no2_ppb +bs(NU_ANO)+ (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
boundary (singular) fit: see help('isSingular')
Warning: Model failed to converge with 1 negative eigenvalue: -4.2e+02
mod_COMP5_O3<-lmer(NU_NOTA_COMP5~ o3_ppb + bs(NU_ANO)+(1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 19.0571 (tol = 0.002, component 1)
mod_COMP5_PM25<-lmer(NU_NOTA_COMP5~ pm25_ugm3 + bs(NU_ANO)+(1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.00254503 (tol = 0.002, component 1)
#extração de coeficiente
coef_int= function (modelo) {
  coef<-coef(modelo)[[1]][1:2]
  SE<-(standard_error(modelo, effects = "random")[[1]])
  RES<-cbind(coef,SE,rownames(coef))
  colnames(RES)<- c(colnames(RES)[1],"SLOPE",paste("SE_",colnames(RES)[3]),paste("SE_","SLOPE"),"fator")
  return(RES)

}
#grafico Slope
G1 %>% 
  ggplot(aes(G1$SLOPE,G1$fator))+geom_point()+facet_grid(Nota~Poluente,scales = "free")+
  geom_errorbar(aes(xmin=(G1[,2]+1.645*G1[,4]),xmax=(G1[,2]-1.645*G1[,4])),size=0.1)+
  geom_pointrange(aes(xmin=(G1[,2]+1.645*G1[,4]),xmax=(G1[,2]-1.645*G1[,4])),size=0.1)+
  geom_vline(xintercept = 0, color = "red", size=1.0)+
  labs(title = "Modelo mistos",
       subtitle = "Coeficientes(IC90%)",
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")
Warning: Use of `G1$SLOPE` is discouraged. Use `SLOPE` instead.
Warning: Use of `G1$fator` is discouraged. Use `fator` instead.
Warning: Use of `G1$SLOPE` is discouraged. Use `SLOPE` instead.
Warning: Use of `G1$fator` is discouraged. Use `fator` instead.
Warning: Use of `G1$SLOPE` is discouraged. Use `SLOPE` instead.
Warning: Use of `G1$fator` is discouraged. Use `fator` instead.

Renda

#Variação de Poluente
mod_Red_NO2<-lmer(NU_NOTA_REDACAO~ no2_ppb +bs(NU_ANO)+Q15 + (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_Red_O3<-lmer(NU_NOTA_REDACAO~ o3_ppb +bs(NU_ANO)+Q15 + (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 1.36747 (tol = 0.002, component 1)
mod_Red_PM25<-lmer(NU_NOTA_REDACAO~ pm25_ugm3 +bs(NU_ANO)+Q15 + (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
boundary (singular) fit: see help('isSingular')
mod_COMP1_NO2<-lmer(NU_NOTA_COMP1~ no2_ppb +bs(NU_ANO)+Q15 + (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP1_O3<-lmer(NU_NOTA_COMP1~ o3_ppb +bs(NU_ANO)+Q15 + (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.235558 (tol = 0.002, component 1)
mod_COMP1_PM25<-lmer(NU_NOTA_COMP1~ pm25_ugm3 +bs(NU_ANO)+Q15 + (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 1.53425 (tol = 0.002, component 1)
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model is nearly unidentifiable: very large eigenvalue
 - Rescale variables?
mod_COMP2_NO2<-lmer(NU_NOTA_COMP2~ no2_ppb +bs(NU_ANO)+Q15 + (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP2_O3<-lmer(NU_NOTA_COMP2~ o3_ppb +bs(NU_ANO)+Q15 + (1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0331485 (tol = 0.002, component 1)
mod_COMP2_PM25<-lmer(NU_NOTA_COMP2~ pm25_ugm3 +bs(NU_ANO)+Q15 + (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.897507 (tol = 0.002, component 1)
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model is nearly unidentifiable: very large eigenvalue
 - Rescale variables?
mod_COMP3_NO2<-lmer(NU_NOTA_COMP3~ no2_ppb + bs(NU_ANO)+ (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP3_O3<-lmer(NU_NOTA_COMP3~ o3_ppb + bs(NU_ANO)+(1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.700352 (tol = 0.002, component 1)
mod_COMP3_PM25<-lmer(NU_NOTA_COMP3~ pm25_ugm3 +bs(NU_ANO)+Q15 + (1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.480208 (tol = 0.002, component 1)
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model is nearly unidentifiable: very large eigenvalue
 - Rescale variables?
mod_COMP4_NO2<-lmer(NU_NOTA_COMP4~ no2_ppb + bs(NU_ANO)+(1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP4_O3<-lmer(NU_NOTA_COMP4~ o3_ppb + bs(NU_ANO)+(1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0238664 (tol = 0.002, component 1)
mod_COMP4_PM25<-lmer(NU_NOTA_COMP4~ pm25_ugm3 + bs(NU_ANO)+(1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.00434433 (tol = 0.002, component 1)
mod_COMP5_NO2<-lmer(NU_NOTA_COMP5~ no2_ppb +bs(NU_ANO)+Q15 + (1+no2_ppb|SG_UF_RESIDENCIA),data =df1)
mod_COMP5_O3<-lmer(NU_NOTA_COMP5~ o3_ppb + bs(NU_ANO)+(1+o3_ppb|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 19.0571 (tol = 0.002, component 1)
mod_COMP5_PM25<-lmer(NU_NOTA_COMP5~ pm25_ugm3 + bs(NU_ANO)+(1+pm25_ugm3|SG_UF_RESIDENCIA),data =df1 )
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.00254503 (tol = 0.002, component 1)
G3<-coef 
#grafico Intercept
G3 %>%
  ggplot(aes(`(Intercept)`,fator,col=Poluente))+geom_point()+facet_grid(Nota~Poluente)+
  geom_errorbar(aes(xmin=(G3[,1]+1.645*G3[,3]),xmax=(G3[,1]-1.645*G3[,3])),size=0.1)+
  geom_pointrange(aes(xmin=(G3[,1]+1.645*G3[,3]),xmax=(G3[,1]-1.645*G3[,3])),size=0.1)+
  geom_vline(xintercept = 0, color = "red", size=1.0)+
  labs(title = "Modelo mistos",
       subtitle = "Coeficientes(IC90%)",
       caption = "EPPG FGV")+xlab("Intercept")+ylab("Estado")


#grafico Slope
G3 %>% 
  ggplot(aes(G3$SLOPE,G3$fator))+geom_point()+facet_grid(Nota~Poluente,scales = "free")+
  geom_errorbar(aes(xmin=(G3[,2]+1.645*G3[,4]),xmax=(G3[,2]-1.645*G3[,4])),size=0.1)+
  geom_pointrange(aes(xmin=(G3[,2]+1.645*G3[,4]),xmax=(G3[,2]-1.645*G3[,4])),size=0.1)+
  geom_vline(xintercept = 0, color = "red", size=1.0)+
  labs(title = "Modelo mistos",
       subtitle = "Coeficientes(IC90%)",
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")
Warning: Use of `G3$SLOPE` is discouraged. Use `SLOPE` instead.
Warning: Use of `G3$fator` is discouraged. Use `fator` instead.
Warning: Use of `G3$SLOPE` is discouraged. Use `SLOPE` instead.
Warning: Use of `G3$fator` is discouraged. Use `fator` instead.
Warning: Use of `G3$SLOPE` is discouraged. Use `SLOPE` instead.
Warning: Use of `G3$fator` is discouraged. Use `fator` instead.

Modelo com controles variando por modalidade educacional

Modelo com controles variando por modalidade educacional

LS0tDQp0aXRsZTogIlNjcmlwdCBwYXJhIE51dmVtMiINCmF1dGhvcjoNCi0gbmFtZTogVGhpYWdvIE5vcm9uaGEgR2FyZGluDQogIGFmZmlsaWF0aW9uOiBGdW5kYcOnw6NvIEdldHVsaW8gVmFyZ2FzDQotIG5hbWU6IFdlZWJlcmIgSi4gUsOpcXVpYSBKci4NCiAgYWZmaWxpYXRpb246IEZ1bmRhw6fDo28gR2V0dWxpbyBWYXJnYXMNCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVCICVkLCAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgZmlnX3dpZHRoOiAyMA0KICAgIGZpZ19oZWlnaHQ6IDEwDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogIHBkZl9kb2N1bWVudDogZGVmYXVsdA0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCmJpYmxpb3RlY2FzDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQojbWFuaXB1bGHDp8OjbyBkZSBkYWRvcw0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHBsb3RseSkNCiNBbmFsaXNlIGV4cGxvcmF0w7NyaWENCmxpYnJhcnkoc2tpbXIpDQpsaWJyYXJ5KGZ1bk1vZGVsaW5nKQ0KbGlicmFyeShjb3JycGxvdCkNCg0KDQojcmVncmVzc8Ojbw0KbGlicmFyeShsbWVyVGVzdCkNCmxpYnJhcnkobG1lNCkNCmxpYnJhcnkocGFyYW1ldGVycykNCmxpYnJhcnkoc3BsaW5lcykNCg0KDQpgYGANCg0KIyBQcmVwYXJhw6fDo28gZG9zIGRhZG9zDQoNCiMjIEFicmlyIGJhc2VzIG9yaWdpbmFpczoNCg0KYGBge3J9DQojIGFicmlyIGJhc2UgZSBjcmlhciBhbW9zdHJhcw0KI2RhZG9zX2ZpbmFpc18yMDAwXzIwMTAgPC0gcmVhZFJEUygifi9SU3R1ZGlvL0VORU0vMl9EYWRvIHRyYXRhZG8vZGFkb3NfZmluYWlzXzIwMDBfMjAxMC5yZHMiKQ0KI2RmPC1zbGljZV9zYW1wbGUoZGFkb3NfZmluYWlzXzIwMDBfMjAxMCxwcm9wID0gMC4wMSkgDQojc2F2ZVJEUyhkZiwgZmlsZSA9ICJzYW1wbGVfMDBfMTAucmRzIikNCiN0YWJsZShkYWRvc19maW5haXNfMjAwMF8yMDEwJE5VX0FOTykNCiN0YWJsZShkZiROVV9BTk8pDQojZGFkb3NfZmluYWlzXzIwMDBfMjAxMCA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS8yX0RhZG8gdHJhdGFkby9kYWRvc19maW5haXNfMjAxMl8yMDE0LnJkcyIpDQoNCiNkZjI8LXNsaWNlX3NhbXBsZShkYWRvc19maW5haXNfMjAwMF8yMDEwLHByb3AgPSAwLjAxKSANCiNzYXZlUkRTKGRmMiwgZmlsZSA9ICJzYW1wbGVfMTJfMTQucmRzIikNCg0KDQojZGFkb3NfZmluYWlzXzIwMTVfMjAyMCA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS8yX0RhZG8gdHJhdGFkby9kYWRvc19maW5haXNfMjAxNV8yMDIwLnJkcyIpDQojZGYzPC1zbGljZV9zYW1wbGUoZGFkb3NfZmluYWlzXzIwMTVfMjAyMCxwcm9wID0gMC4wMSkgDQojc2F2ZVJEUyhkZjMsIGZpbGUgPSAic2FtcGxlXzE1XzIwLnJkcyIpDQpgYGANCg0KYGBge3J9DQojQmFzZSBkZSAyMDAwLTIwMTANCnNhbXBsZV8wMF8xMCA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS9zYW1wbGVfMDBfMTAucmRzIikNCiNCYXNlIGRlIDIwMTEtMjAxNQ0Kc2FtcGxlXzEyXzE0IDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNL3NhbXBsZV8xMl8xNC5yZHMiKQ0KI0Jhc2UgZGUgMjAxNS0yMDE2DQpzYW1wbGVfMTVfMjAgPC0gcmVhZFJEUygifi9SU3R1ZGlvL0VORU0vc2FtcGxlXzE1XzIwLnJkcyIpDQojYmFzZSBkZSBWYXJpYXZlaXMgQW1iaWVudGFpcw0KDQoNCmBgYA0KDQpgYGB7cn0NCiMgdW5pZmljYXIgYmFzZSBkZSBkYWRvcyBhbWJpZW50YWwNCkNlbnRybyA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS9EYXRhLTIwMjIwNjE1VDAxNDk1MFotMDAxL0RhdGEvQ2VudHJvLnJkcyIpDQpORSA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS9EYXRhLTIwMjIwNjE1VDAxNDk1MFotMDAxL0RhdGEvTkUucmRzIikNCk5PIDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNL0RhdGEtMjAyMjA2MTVUMDE0OTUwWi0wMDEvRGF0YS9OTy5yZHMiKQ0KU0UgPC0gcmVhZFJEUygifi9SU3R1ZGlvL0VORU0vRGF0YS0yMDIyMDYxNVQwMTQ5NTBaLTAwMS9EYXRhL1NFLnJkcyIpDQpTVUwgPC0gcmVhZFJEUygifi9SU3R1ZGlvL0VORU0vRGF0YS0yMDIyMDYxNVQwMTQ5NTBaLTAwMS9EYXRhL1N1bC5yZHMiKQ0KZGZfQW08LWJpbmRfcm93cyhORSwgTk8sIFNFLFNVTCkNCnJtKE5FLE5PLFNFLFNVTCxDZW50cm8pDQpoZWFkKGRmX0FtKQ0KYGBgDQoNCiMjIFByZXBhcmFyIEJhc2VzOg0KDQpTZWxlY2lvbmFyIFZhcmlhdmVpcyBkZSBJbnRlcmVzc2UNCg0KYGBge3J9DQoNCnNhbXBsZV8wMF8xMCRUUF9TRVhPW3NhbXBsZV8wMF8xMCRRMT09IkEiXTwtIk0iDQpzYW1wbGVfMDBfMTAkVFBfU0VYT1tzYW1wbGVfMDBfMTAkUTE9PSJCIl08LSJGIg0KDQpzYW1wbGVfMTJfMTQkVFBfU0VYT1tzYW1wbGVfMTJfMTQkVFBfU0VYTz09IjAiXTwtIk0iDQpzYW1wbGVfMTJfMTQkVFBfU0VYT1tzYW1wbGVfMTJfMTQkVFBfU0VYTz09IjEiXTwtIkYiDQoNCiNCYXNlIGRlIDIwMDAtMjAxMA0Kc2FtcGxlXzAwXzEwJT4lIHNlbGVjdChOVV9JTlNDUklDQU8sI27Dum1lcm8gZGUgaW5zY3Jpw6fDo28NCiAgVFBfU0VYTywNCiAgTlVfQU5PLCNhbm8NCiAgU0dfVUZfUkVTSURFTkNJQSwjRXN0YWRvDQogIE5PX01VTklDSVBJT19SRVNJREVOQ0lBLCNtdW5pY2lwaW8NCiAgQ09fTVVOSUNJUElPX1JFU0lERU5DSUEsI2NvZGlnbyBkbyBtdW5pY2lwaW8NCiAgTlVfTk9UQV9SRURBQ0FPLCNub3RhIFJlZGHDp8Ojbw0KICBOVV9OT1RBX0NPTVAxLCNub3RhIGNvbXBvbmVudGUgWA0KICBOVV9OT1RBX0NPTVAyLCNub3RhIGNvbXBvbmVudGUgWA0KICBOVV9OT1RBX0NPTVAzLCNub3RhIGNvbXBvbmVudGUgWA0KICBOVV9OT1RBX0NPTVA0LA0KICBOVV9OT1RBX0NPTVA1LA0KICBROSwjIGVzY29sYXJpZGFkZSBkbyBQYWkNCiAgUTEwLA0KICBUUF9ERVBFTkRFTkNJQV9BRE1fRVNDLCMgRGVwZW5kw6puY2lhIGFkbWluaXN0cmF0aXZhCSgxCUZlZGVyYWwJMglFc3RhZHVhbAkzCU11bmljaXBhbCwgNAlQcml2YWRhDQogIFRQX0xPQ0FMSVpBQ0FPX0VTQywgI0xvY2FsaXphw6fDo28vWm9uYSBkYSBlc2NvbGEJMQlVcmJhbmEgMglSdXJhbA0KICBRMTUjcmVuZGEgQS1RDQopLT5zYW1wbGVfMDBfMTANCg0KDQoNCiNCYXNlIGRlIDIwMTEtMjAxNQ0Kc2FtcGxlXzEyXzE0JT4lIHNlbGVjdChOVV9JTlNDUklDQU8sI27Dum1lcm8gZGUgaW5zY3Jpw6fDo28NCiAgVFBfU0VYTywNCiAgTlVfQU5PLCNhbm8NCiAgVUZfUkVTSURFTkNJQSwjRXN0YWRvDQogIE5PX01VTklDSVBJT19SRVNJREVOQ0lBLCNtdW5pY2lwaW8NCiAgQ09fTVVOSUNJUElPX1JFU0lERU5DSUEsI2NvZGlnbyBkbyBtdW5pY2lwaW8NCiAgTlVfTk9UQV9SRURBQ0FPLCNub3RhIFJlZGHDp8Ojbw0KICBOVV9OT1RBX0NPTVAxLCNub3RhIGNvbXBvbmVudGUgWA0KICBOVV9OT1RBX0NPTVAyLCNub3RhIGNvbXBvbmVudGUgWA0KICBOVV9OT1RBX0NPTVAzLCNub3RhIGNvbXBvbmVudGUgWA0KICBOVV9OT1RBX0NPTVA0LA0KICBOVV9OT1RBX0NPTVA1LA0KICBROSwjIGVzY29sYXJpZGFkZSBkbyBQYWkNCiAgUTEwLA0KICBUUF9ERVBFTkRFTkNJQV9BRE1fRVNDLCMgRGVwZW5kw6puY2lhIGFkbWluaXN0cmF0aXZhCSgxCUZlZGVyYWwJMglFc3RhZHVhbAkzCU11bmljaXBhbCwgNAlQcml2YWRhDQogIFRQX0xPQ0FMSVpBQ0FPX0VTQywgI0xvY2FsaXphw6fDo28vWm9uYSBkYSBlc2NvbGEJMQlVcmJhbmEgMglSdXJhbA0KICBRMTUjcmVuZGEgQS1RI25vdGEgY29tcG9uZW50ZSBYDQogICNRdWVzdMOjbyByZW5kYQ0KIyAgLCNRdWVzdMOjbw0KIyAgLCNRdWVzdMOjbw0KIyAgLCNRdWVzdMOjbw0KKS0+c2FtcGxlXzEyXzE0DQojQmFzZSBkZSAyMDE1LTIwMTYNCg0Kc2FtcGxlXzE1XzIwJT4lIHNlbGVjdChOVV9JTlNDUklDQU8sI27Dum1lcm8gZGUgaW5zY3Jpw6fDo28NCiAgVFBfU0VYTywNCiAgTlVfQU5PLCNhbm8NCiAgU0dfVUZfUkVTSURFTkNJQSwjRXN0YWRvDQogIE5PX01VTklDSVBJT19SRVNJREVOQ0lBLCNtdW5pY2lwaW8NCiAgQ09fTVVOSUNJUElPX1JFU0lERU5DSUEsI2NvZGlnbyBkbyBtdW5pY2lwaW8NCiAgTlVfTk9UQV9SRURBQ0FPLCNub3RhIFJlZGHDp8Ojbw0KICBOVV9OT1RBX0NPTVAxLCNub3RhIGNvbXBvbmVudGUgWA0KICBOVV9OT1RBX0NPTVAyLCNub3RhIGNvbXBvbmVudGUgWA0KICBOVV9OT1RBX0NPTVAzLCNub3RhIGNvbXBvbmVudGUgWA0KICBOVV9OT1RBX0NPTVA0LA0KICBOVV9OT1RBX0NPTVA1LCNub3RhIGNvbXBvbmVudGUgWA0KICBROSwjIGVzY29sYXJpZGFkZSBkbyBQYWkNCiAgUTEwLA0KICBUUF9ERVBFTkRFTkNJQV9BRE1fRVNDLCMgRGVwZW5kw6puY2lhIGFkbWluaXN0cmF0aXZhCSgxCUZlZGVyYWwJMglFc3RhZHVhbAkzCU11bmljaXBhbCwgNAlQcml2YWRhDQogIFRQX0xPQ0FMSVpBQ0FPX0VTQywgI0xvY2FsaXphw6fDo28vWm9uYSBkYSBlc2NvbGEJMQlVcmJhbmEgMglSdXJhbA0KICBRMTUjcmVuZGEgQS1RDQojICAsI1F1ZXN0w6NvIHJlbmRhDQojICAsI1F1ZXN0w6NvDQojICAsI1F1ZXN0w6NvDQojICAsI1F1ZXN0w6NvDQopLT5zYW1wbGVfMTVfMjANCiNiYXNlIGRlIFZhcmlhdmVpcyBBbWJpZW50YWlzDQoNCg0KYGBgDQoNCmBgYHtyfQ0KZGZfQW08LWRmX0FtICU+JSBtdXRhdGUoQ09fTVVOSUNJUElPX1JFU0lERU5DSUE9Y29kZV9tdW5pKSAlPiUgIyBjcml0ZXJpbyB1bmlmaWNhZG9yDQogIGdyb3VwX2J5KENPX01VTklDSVBJT19SRVNJREVOQ0lBLFllYXIsbmFtZV9zdGF0ZSxuYW1lX3JlZ2lvbikgJT4lICMgZmF0b3JlcyBhIHNlIG1hbnRlcg0KICBzdW1tYXJpc2UoY29fcHBiPW1lYW4oY29fcHBiKSwjIG1lZGlhIGRhcyB2YXJpYXZlaXMgYW1iaWVudGFyaXMgcG9yIGRpYS9tZXMNCiAgICAgICAgICAgIG5vMl9wcGI9bWVhbihubzJfcHBiKSwNCiAgICAgICAgICAgIG8zX3BwYj1tZWFuKG8zX3BwYiksDQogICAgICAgICAgICBwbTI1X3VnbTM9bWVhbihwbTI1X3VnbTMpLA0KICAgICAgICAgICAgc28yX3VnbTM9bWVhbihzbzJfdWdtMyksDQogICAgICAgICAgICBwcmVjaXB0YXRpb249bWVhbihwcmVjaXB0YXRpb24pLA0KICAgICAgICAgICAgdGVtcGVyYXR1cmU9bWVhbih0ZW1wZXJhdHVyZSksDQogICAgICAgICAgICBodW1pZGl0eT1tZWFuKGh1bWlkaXR5KSwNCiAgICAgICAgICAgIHdpbmRfZGlyZWN0aW9uPW1lYW4od2luZF9kaXJlY3Rpb24pLA0KICAgICAgICAgICAgd2luZF9zcGVlZD1tZWFuKHdpbmRfc3BlZWQpLA0KICAgICAgICAgICAgd2lsZGZpcmU9bWVhbih3aWxkZmlyZSkpJT4lIGRpc3RpbmN0KCkNCnNhdmVSRFMoZGZfQW0sImJhc2VhbWJpZW50YWwucmRzIikNCmRmX0FtIDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNL2Jhc2VhbWJpZW50YWwucmRzIikNCg0KYGBgDQoNCiMjIEZ1bmRpciBCYXNlczoNCg0KYGBge3J9DQoNCiNCYXNlIGRvIGVuZW0NCiN1bHRpbW9zIGFqdXN0ZXMNCnNhbXBsZV8xMl8xNCAlPiUgbXV0YXRlKFNHX1VGX1JFU0lERU5DSUE9VUZfUkVTSURFTkNJQSkgJT4lIA0KICBzZWxlY3QoLVVGX1JFU0lERU5DSUEpLT5zYW1wbGVfMTJfMTQNCg0KDQpzYW1wbGVfMTVfMjAkTlVfQU5PPC1hcy5jaGFyYWN0ZXIoc2FtcGxlXzE1XzIwJE5VX0FOTykNCiNmdXPDo286DQpkZl9lbmVtPC1iaW5kX3Jvd3Moc2FtcGxlXzAwXzEwLHNhbXBsZV8xMl8xNCxzYW1wbGVfMTVfMjApDQpzYXZlUkRTKGRmX2VuZW0sIkVuZW1mdW5kaWRvLnJkcyIpDQpybShzYW1wbGVfMDBfMTAsc2FtcGxlXzEyXzE0LHNhbXBsZV8xNV8yMCkNCg0KI2Jhc2UgZGUgVmFyaWF2ZWlzIEFtYmllbnRhaXMNCnVuaXF1ZShkZl9BbSRZZWFyKQ0KdW5pcXVlKGRmX2VuZW0kTlVfQU5PKQ0KZGZfZW5lbSROVV9BTk88LWFzLm51bWVyaWMoZGZfZW5lbSROVV9BTk8pDQpkZjwtbGVmdF9qb2luKGRmX2VuZW0sZGZfQW0sYnk9YygiQ09fTVVOSUNJUElPX1JFU0lERU5DSUEiLCJOVV9BTk8iPSJZZWFyIikpDQpzYXZlUkRTKGRmLCJiYXNlIGRlIHJlZmVyZW5jaWEucmRzIikNCnJtKGRmX2VuZW0sZGZfQW0pDQpkZiA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS9iYXNlIGRlIHJlZmVyZW5jaWEucmRzIikNCmBgYA0KDQojIEFuYWxpc2UgRXhwbG9yYXTDs3JpYQ0KDQojIyBTdW3DoXJpbyBkb3MgRGFkb3MNCg0KUmVzdW1vIGRvcyBEYWRvcw0KDQpgYGB7cn0NCg0KZGYgJT4lIHNlbGVjdCgtd2lsZGZpcmUpLT5kZg0Kc2tpbShkZikNCmBgYA0KDQpgYGB7cn0NCiNhanVzdGFuZG8gdmFyaWF2ZWlzDQpkZlssMl0gPC0gbGFwcGx5KGRmWywyXSwgYXMuZmFjdG9yKQ0KZGZbLDQ6Nl0gPC0gbGFwcGx5KGRmWyw0OjZdLCBhcy5mYWN0b3IpDQpkZlssNzoxMl0gPC0gbGFwcGx5KGRmWyw3OjEyXSwgYXMubnVtZXJpYykNCmRmWywxMzoyMF0gPC0gbGFwcGx5KGRmWywxMzoyMF0sIGFzLmZhY3RvcikNCg0KYGBgDQoNCkFuYWxpc2UgZGFzIHVuaQ0KDQpgYGB7cn0NCiN2YXJpYXZlaXMgbnVtw6lyaWNhcw0KICBwbG90X251bShkZikNCg0KYGBgDQoNClwNCg0KYGBge3J9DQoNCg0KYGBgDQoNCmBgYHtyfQ0KI3ZhcmlhdmVpcyBDYXRlZ29yaWNhcw0KZnJlcShkZikNCg0KYGBgDQoNCkFuYWxpc2UgZGUgQ29ycmVsYcOnw7Vlcw0KDQpgYGB7cn0NCkE8LWRmICU+JSBzZWxlY3Qod2hlcmUoaXMubnVtZXJpYykpICU+JSBkcm9wX25hKCkNCmNvcihBKQ0KY29ycnBsb3QoY29yKEEpLCBtZXRob2QgPSAnc3F1YXJlJyx0eXBlID0gJ2xvd2VyJywgdGwuY29sID0gJ2JsYWNrJywNCiAgICAgICAgIGNsLnJhdGlvID0gMC4yLCB0bC5zcnQgPSA0NSwgY29sID0gQ09MMignUHVPcicsIDEwKSApDQoNCmBgYA0KDQpgYGB7cn0NCnNraW0oZGYpDQpkZiAlPiUgc2xpY2Vfc2FtcGxlKHByb3AgPSAwLjEpIC0+ZGYxDQpBPC1jb2xuYW1lcyhkZjEpDQpmb3IgKGkgaW4gNzoxMikgew0KICBwcmludChpKQ0KICBwcmludChnZ3Bsb3QoZGYxLCBhZXMoeCA9IGRmMSROVV9BTk8sIHkgPSAgZGYxW1tpXV0pKSAgK2ZhY2V0X3dyYXAofm5hbWVfc3RhdGUpKw0KICAgICAgICAgIGdlb21fcG9pbnQoYWxwaGE9MC4xKStnZW9tX3Ntb290aCgpKw0KICAgIHlsYWIoQVtpXSkpDQogICAgU3lzLnNsZWVwKDEpDQoNCiAgfQ0KDQpgYGANCg0KUGVsb3MgZ3LDoWZpY29zIHBhcmVjZSBxdWUgYSBlc2NhbGEgZGUgbm90YXMgc8OjbyByZWFsbWVudGUgZGlmZXJlbnRlcyBzZW5kbyBvIGFubyB1bSBlZmVpdG8gZml4bw0KDQpgYGB7cn0NCg0KDQpmb3IgKGkgaW4gNzoxMikgew0KICBwcmludChpKQ0KICBwcmludChnZ3Bsb3QoZGYxLCBhZXMoeCA9IGRmMSRwbTI1X3VnbTMsIHkgPSAgZGYxW1tpXV0pKSArICBmYWNldF93cmFwKH5uYW1lX3N0YXRlKSsNCiAgICAgICAgICBnZW9tX3BvaW50KGFscGhhPTAuMSkrZ2VvbV9zbW9vdGgoKSsNCiAgICB5bGFiKEFbaV0pKQ0KICAgIFN5cy5zbGVlcCgxKQ0KDQogIH0NCg0KI2RmMSAlPiUgZ2dwbG90KGFlcyhwbTI1X3VnbTMsTlVfTk9UQV9SRURBQ0FPLGNvbD1uYW1lX3N0YXRlKSkrDQojICBnZW9tX3BvaW50KCkNCiAgDQpgYGANCg0KYGBge3J9DQoNCmZvciAoaSBpbiA3OjEyKSB7DQogIHByaW50KGkpDQogIHByaW50KGdncGxvdChkZjEsIGFlcyh4ID0gZGYxJG5vMl9wcGIsIHkgPSAgZGYxW1tpXV0pKSArIGZhY2V0X3dyYXAofm5hbWVfc3RhdGUpKw0KICAgICAgICAgIGdlb21fcG9pbnQoYWxwaGE9MC4xKStnZW9tX3Ntb290aCgpKw0KICAgIHlsYWIoQVtpXSkpDQogICAgU3lzLnNsZWVwKDEpDQoNCiAgfQ0KYGBgDQoNCmBgYHtyfQ0KDQpmb3IgKGkgaW4gNzoxMikgew0KICBwcmludChpKQ0KICBwcmludChnZ3Bsb3QoZGYxLCBhZXMoeCA9IGRmMSRvM19wcGIsIHkgPSAgZGYxW1tpXV0pKSArZmFjZXRfd3JhcCh+bmFtZV9zdGF0ZSkrDQogICAgICAgICAgZ2VvbV9wb2ludChhbHBoYT0wLjEpK2dlb21fc21vb3RoKCkrDQogICAgeWxhYihBW2ldKSkNCiAgICBTeXMuc2xlZXAoMSkNCg0KICB9DQpgYGANCg0KIyBSZWdyZXNzw7Vlcw0KDQojIyBNb2RlbG8gYmFzaWNvIGRlIHJlZmVyZW5jaWENCg0KYGBge3J9DQojbW9kZWxvIExpbmVhcg0KbWFpbmxtPC1sbShOVV9OT1RBX1JFREFDQU9+IG5vMl9wcGIsZGF0YSA9IGRmMSkNCiNFZmVpdG9zIE1pc3Rvcw0KbWFpbmxtZXI8LWxtZXIoTlVfTk9UQV9SRURBQ0FPfiBubzJfcHBiICsgKDErbm8yX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0Kc3VtbWFyeShtYWlubG0pDQpzdW1tYXJ5KG1haW5sbWVyKQ0KDQpgYGANCg0KZXh0cmHDp8OjbyBkZSBDb2VmaWNpZW50ZXMNCg0KYGBge3J9DQpjb2VmX2ludD0gZnVuY3Rpb24gKG1vZGVsbykgew0KICBjb2VmKG1vZGVsbylbWzFdXVsxXQ0KICBjb2VmPC1jb2VmKG1vZGVsbylbWzFdXQ0KICBTRTwtKHN0YW5kYXJkX2Vycm9yKG1vZGVsbywgZWZmZWN0cyA9ICJyYW5kb20iKVtbMV1dKQ0KICBSRVM8LWNiaW5kKGNvZWYsU0Uscm93bmFtZXMoY29lZikpDQogIGNvbG5hbWVzKFJFUyk8LSBjKGNvbG5hbWVzKFJFUylbMV0sIlNMT1BFIixwYXN0ZSgiU0VfIixjb2xuYW1lcyhSRVMpWzNdKSxwYXN0ZSgiU0VfIiwiU0xPUEUiKSwiZmF0b3IiKQ0KICByZXR1cm4oUkVTKQ0KDQp9DQpHPC1jb2VmX2ludChtYWlubG1lcikgDQojZ3JhZmljbyBJbnRlcmNlcHQNCkcgJT4lDQogIGdncGxvdChhZXMoR1ssMV0sR1ssNV0pKStnZW9tX3BvaW50KCkrDQogIGdlb21fZXJyb3JiYXIoYWVzKHhtaW49KEdbLDFdKzEuNjQ1KkdbLDNdKSx4bWF4PShHWywxXS0xLjY0NSpHWywzXSkpLHNpemU9MC4xKSsNCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh4bWluPShHWywxXSsxLjY0NSpHWywzXSkseG1heD0oR1ssMV0tMS42NDUqR1ssM10pKSxzaXplPTAuMSkrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIHNpemU9MS4wKSsNCiAgbGFicyh0aXRsZSA9ICJNb2RlbG8gbWlzdG9zIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJDb2VmaWNpZW50ZXMoSUM5MCUpIiwNCiAgICAgICBjYXB0aW9uID0gIkVQUEcgRkdWIikreGxhYigiSW50ZXJjZXB0IikreWxhYigiRXN0YWRvIikNCg0KDQojZ3JhZmljbyBTbG9wZQ0KRyAlPiUNCiAgZ2dwbG90KGFlcyhHWywyXSxHWyw1XSkpK2dlb21fcG9pbnQoKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeG1pbj0oR1ssMl0rMS42NDUqR1ssNF0pLHhtYXg9KEdbLDJdLTEuNjQ1KkdbLDRdKSksc2l6ZT0wLjEpKw0KICBnZW9tX3BvaW50cmFuZ2UoYWVzKHhtaW49KEdbLDJdKzEuNjQ1KkdbLDRdKSx4bWF4PShHWywyXS0xLjY0NSpHWyw0XSkpLHNpemU9MC4xKSsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgc2l6ZT0xLjApKw0KICBsYWJzKHRpdGxlID0gIk1vZGVsbyBtaXN0b3MiLA0KICAgICAgIHN1YnRpdGxlID0gIkNvZWZpY2llbnRlcyhJQzkwJSkiLA0KICAgICAgIGNhcHRpb24gPSAiRVBQRyBGR1YiKSt4bGFiKCJTbG9wZSIpK3lsYWIoIkVzdGFkbyIpDQoNCg0KYGBgDQoNCiMjIHRvZG9zIG9zIE1vZGVsb3MNCg0KYGBge3J9DQpkZjEkTlVfTk9UQV9DT01QNTwtYXMubnVtZXJpYyhkZjEkTlVfTk9UQV9DT01QNSkNCiAgI1Zhcmlhw6fDo28gZGUgUG9sdWVudGUNCm1vZF9SZWRfTk8yPC1sbWVyKE5VX05PVEFfUkVEQUNBT34gbm8yX3BwYiArICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX1JlZF9PMzwtbG1lcihOVV9OT1RBX1JFREFDQU9+IG8zX3BwYiArICgxK28zX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KbW9kX1JlZF9QTTI1PC1sbWVyKE5VX05PVEFfUkVEQUNBT34gcG0yNV91Z20zICsgKDErcG0yNV91Z20zfFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSApDQoNCm1vZF9DT01QMV9OTzI8LWxtZXIoTlVfTk9UQV9DT01QMX4gbm8yX3BwYiArICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX0NPTVAxX08zPC1sbWVyKE5VX05PVEFfQ09NUDF+IG8zX3BwYiArICgxK28zX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KbW9kX0NPTVAxX1BNMjU8LWxtZXIoTlVfTk9UQV9DT01QMX4gcG0yNV91Z20zICsgKDErcG0yNV91Z20zfFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSApDQoNCm1vZF9DT01QMl9OTzI8LWxtZXIoTlVfTk9UQV9DT01QMn4gbm8yX3BwYiArICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX0NPTVAyX08zPC1sbWVyKE5VX05PVEFfQ09NUDJ+IG8zX3BwYiArICgxK28zX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KbW9kX0NPTVAyX1BNMjU8LWxtZXIoTlVfTk9UQV9DT01QMn4gcG0yNV91Z20zICsgKDErcG0yNV91Z20zfFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSApDQoNCm1vZF9DT01QM19OTzI8LWxtZXIoTlVfTk9UQV9DT01QM34gbm8yX3BwYiArICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX0NPTVAzX08zPC1sbWVyKE5VX05PVEFfQ09NUDN+IG8zX3BwYiArICgxK28zX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KbW9kX0NPTVAzX1BNMjU8LWxtZXIoTlVfTk9UQV9DT01QM34gcG0yNV91Z20zICsgKDErcG0yNV91Z20zfFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSApDQoNCm1vZF9DT01QNF9OTzI8LWxtZXIoTlVfTk9UQV9DT01QNH4gbm8yX3BwYiArICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX0NPTVA0X08zPC1sbWVyKE5VX05PVEFfQ09NUDR+IG8zX3BwYiArICgxK28zX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KbW9kX0NPTVA0X1BNMjU8LWxtZXIoTlVfTk9UQV9DT01QNH4gcG0yNV91Z20zICsgKDErcG0yNV91Z20zfFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSApDQoNCm1vZF9DT01QNV9OTzI8LWxtZXIoTlVfTk9UQV9DT01QNX4gbm8yX3BwYiArICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX0NPTVA1X08zPC1sbWVyKE5VX05PVEFfQ09NUDV+IG8zX3BwYiArICgxK28zX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KbW9kX0NPTVA1X1BNMjU8LWxtZXIoTlVfTk9UQV9DT01QNX4gcG0yNV91Z20zICsgKDErcG0yNV91Z20zfFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSApDQoNCmBgYA0KDQojIyMjIyBKdW50YW5kbyByZXN1bHRhZG9zDQoNCmBgYHtyfQ0KQTwtY29lZl9pbnQobW9kX1JlZF9OTzIpDQpBJFBvbHVlbnRlPC0iTk8yIg0KQSROb3RhPC0gInJlZGHDp8OjbyINCg0KYUI8LWNvZWZfaW50KG1vZF9SZWRfTzMpDQphQiRQb2x1ZW50ZTwtIk8zIg0KYUIkTm90YTwtICJyZWRhw6fDo28iDQoNCmFDPC1jb2VmX2ludChtb2RfUmVkX1BNMjUpDQphQyRQb2x1ZW50ZTwtIlBNMjUiDQphQyROb3RhPC0gInJlZGHDp8OjbyINCg0KDQphRDwtY29lZl9pbnQobW9kX0NPTVAxX05PMikNCmFEJFBvbHVlbnRlIDwtIk5PMiINCmFEJE5vdGE8LSJDT01QMSINCg0KYUU8LWNvZWZfaW50KG1vZF9DT01QMV9PMykNCmFFJFBvbHVlbnRlPC0iTzMiDQphRSROb3RhPC0iQ09NUDEiDQoNCmFGPC1jb2VmX2ludChtb2RfQ09NUDFfUE0yNSkNCmFGJFBvbHVlbnRlPC0iUE0yNSINCmFGJE5vdGEgPC0iQ09NUDEiDQoNCmFHPC1jb2VmX2ludChtb2RfQ09NUDJfTk8yKQ0KYUckUG9sdWVudGU8LSJOTzIiDQphRyROb3RhPC0iQ09NUDIiDQoNCmFIPC1jb2VmX2ludChtb2RfQ09NUDJfTzMpDQphSCRQb2x1ZW50ZTwtIk8zIg0KYUgkTm90YTwtIkNPTVAyIg0KDQphSTwtY29lZl9pbnQobW9kX0NPTVAyX1BNMjUpDQphSSRQb2x1ZW50ZTwtIlBNMjUiDQphSSROb3RhPC0iQ09NUDIiDQoNCmFKPC1jb2VmX2ludChtb2RfQ09NUDNfTk8yKQ0KYUokUG9sdWVudGU8LSJOTzIiDQphSiROb3RhPC0iQ09NUDMiDQoNCmFMPC1jb2VmX2ludChtb2RfQ09NUDNfTzMpDQphTCRQb2x1ZW50ZTwtIk8zIg0KYUwkTm90YTwtIkNPTVAzIg0KDQphTTwtY29lZl9pbnQobW9kX0NPTVAzX1BNMjUpDQphTSRQb2x1ZW50ZTwtIlBNMjUiDQphTSROb3RhPC0iQ09NUDMiDQoNCmFOPC1jb2VmX2ludChtb2RfQ09NUDRfTk8yKQ0KYU4kUG9sdWVudGU8LSJOTzIiDQphTiROb3RhPC0iQ09NUDQiDQoNCmFPPC1jb2VmX2ludChtb2RfQ09NUDRfTzMpDQphTyRQb2x1ZW50ZTwtIk8zIg0KYU8kTm90YTwtIkNPTVA0Ig0KDQphUDwtY29lZl9pbnQobW9kX0NPTVA0X1BNMjUpDQphUCRQb2x1ZW50ZTwtIlBNMjUiDQphUCROb3RhPC0iQ09NUDQiDQoNCmFRPC1jb2VmX2ludChtb2RfQ09NUDVfTk8yKQ0KYVEkUG9sdWVudGU8LSJOTzIiDQphUSROb3RhPC0iQ09NUDUiDQoNCmFSPC1jb2VmX2ludChtb2RfQ09NUDVfTzMpDQphUiRQb2x1ZW50ZTwtIk8zIg0KYVIkTm90YTwtIkNPTVA1Ig0KDQphVDwtY29lZl9pbnQobW9kX0NPTVA1X1BNMjUpDQphVCRQb2x1ZW50ZSA8LSJQTTI1Ig0KYVQkTm90YTwtIkNPTVA1Ig0KDQpyYmluZChBW10sYUJbXSkNCg0KY29lZjwtYmluZF9yb3dzKEEsYUIsYUMsYUQsYUUsYUYsYUcsYUgsYUksYUosYUwsYU0sYU4sYU8sYVAsYVEsYVIsYVQpDQpybShBLGFCLGFDLGFELGFFLGFGLGFHLGFILGFJLGFKLGFMLGFNLGFOLGFPLGFQLGFRLGFSLGFUKQ0KDQpgYGANCg0KYGBge3J9DQpjb2VmDQpHPC1jb2VmIA0KI2dyYWZpY28gSW50ZXJjZXB0DQpHJFBvbHVlbnRlDQpHICU+JQ0KICBnZ3Bsb3QoYWVzKGAoSW50ZXJjZXB0KWAsZmF0b3IsY29sPVBvbHVlbnRlKSkrZ2VvbV9wb2ludCgpK2ZhY2V0X2dyaWQoTm90YX5Qb2x1ZW50ZSkrDQogIGdlb21fZXJyb3JiYXIoYWVzKHhtaW49KEdbLDFdKzEuNjQ1KkdbLDNdKSx4bWF4PShHWywxXS0xLjY0NSpHWywzXSkpLHNpemU9MC4xKSsNCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh4bWluPShHWywxXSsxLjY0NSpHWywzXSkseG1heD0oR1ssMV0tMS42NDUqR1ssM10pKSxzaXplPTAuMSkrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIHNpemU9MS4wKSsNCiAgbGFicyh0aXRsZSA9ICJNb2RlbG8gbWlzdG9zIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJDb2VmaWNpZW50ZXMoSUM5MCUpIiwNCiAgICAgICBjYXB0aW9uID0gIkVQUEcgRkdWIikreGxhYigiSW50ZXJjZXB0IikreWxhYigiRXN0YWRvIikNCg0KI2dyYWZpY28gU2xvcGUNCkcgJT4lIA0KICBnZ3Bsb3QoYWVzKEckU0xPUEUsRyRmYXRvcikpK2dlb21fcG9pbnQoKStmYWNldF9ncmlkKE5vdGF+UG9sdWVudGUsc2NhbGVzID0gImZyZWUiKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeG1pbj0oR1ssMl0rMS42NDUqR1ssNF0pLHhtYXg9KEdbLDJdLTEuNjQ1KkdbLDRdKSksc2l6ZT0wLjEpKw0KICBnZW9tX3BvaW50cmFuZ2UoYWVzKHhtaW49KEdbLDJdKzEuNjQ1KkdbLDRdKSx4bWF4PShHWywyXS0xLjY0NSpHWyw0XSkpLHNpemU9MC4xKSsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgc2l6ZT0xLjApKw0KICBsYWJzKHRpdGxlID0gIk1vZGVsbyBtaXN0b3MiLA0KICAgICAgIHN1YnRpdGxlID0gIkNvZWZpY2llbnRlcyhJQzkwJSkiLA0KICAgICAgIGNhcHRpb24gPSAiRVBQRyBGR1YiKSt4bGFiKCJTbG9wZSIpK3lsYWIoIkVzdGFkbyIpDQoNCmBgYA0KDQojIyBpbmNsdWlyIG91dHJhcyB2YXJpYXZlaXMNCg0KIyMjIyBBTk8NCg0KYGBge3J9DQogICNWYXJpYcOnw6NvIGRlIFBvbHVlbnRlDQptb2RfUmVkX05PMjwtbG1lcihOVV9OT1RBX1JFREFDQU9+IG5vMl9wcGIgK2JzKE5VX0FOTykrICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX1JlZF9PMzwtbG1lcihOVV9OT1RBX1JFREFDQU9+IG8zX3BwYiArYnMoTlVfQU5PKSsgKDErbzNfcHBifFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSApDQptb2RfUmVkX1BNMjU8LWxtZXIoTlVfTk9UQV9SRURBQ0FPfiBwbTI1X3VnbTMgK2JzKE5VX0FOTykrICgxK3BtMjVfdWdtM3xTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KDQptb2RfQ09NUDFfTk8yPC1sbWVyKE5VX05PVEFfQ09NUDF+IG5vMl9wcGIgK2JzKE5VX0FOTykrICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX0NPTVAxX08zPC1sbWVyKE5VX05PVEFfQ09NUDF+IG8zX3BwYiArYnMoTlVfQU5PKSsgKDErbzNfcHBifFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSApDQptb2RfQ09NUDFfUE0yNTwtbG1lcihOVV9OT1RBX0NPTVAxfiBwbTI1X3VnbTMgK2JzKE5VX0FOTykrICgxK3BtMjVfdWdtM3xTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KDQptb2RfQ09NUDJfTk8yPC1sbWVyKE5VX05PVEFfQ09NUDJ+IG5vMl9wcGIgK2JzKE5VX0FOTykrICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX0NPTVAyX08zPC1sbWVyKE5VX05PVEFfQ09NUDJ+IG8zX3BwYiArYnMoTlVfQU5PKSsgKDErbzNfcHBifFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSApDQptb2RfQ09NUDJfUE0yNTwtbG1lcihOVV9OT1RBX0NPTVAyfiBwbTI1X3VnbTMgK2JzKE5VX0FOTykrICgxK3BtMjVfdWdtM3xTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KDQptb2RfQ09NUDNfTk8yPC1sbWVyKE5VX05PVEFfQ09NUDN+IG5vMl9wcGIgKyBicyhOVV9BTk8pKyAoMStubzJfcHBifFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSkNCm1vZF9DT01QM19PMzwtbG1lcihOVV9OT1RBX0NPTVAzfiBvM19wcGIgKyBicyhOVV9BTk8pKygxK28zX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KbW9kX0NPTVAzX1BNMjU8LWxtZXIoTlVfTk9UQV9DT01QM34gcG0yNV91Z20zICticyhOVV9BTk8pKyAoMStwbTI1X3VnbTN8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCg0KbW9kX0NPTVA0X05PMjwtbG1lcihOVV9OT1RBX0NPTVA0fiBubzJfcHBiICsgYnMoTlVfQU5PKSsoMStubzJfcHBifFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSkNCm1vZF9DT01QNF9PMzwtbG1lcihOVV9OT1RBX0NPTVA0fiBvM19wcGIgKyBicyhOVV9BTk8pKygxK28zX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KbW9kX0NPTVA0X1BNMjU8LWxtZXIoTlVfTk9UQV9DT01QNH4gcG0yNV91Z20zICsgYnMoTlVfQU5PKSsoMStwbTI1X3VnbTN8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCg0KbW9kX0NPTVA1X05PMjwtbG1lcihOVV9OT1RBX0NPTVA1fiBubzJfcHBiICticyhOVV9BTk8pKyAoMStubzJfcHBifFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSkNCm1vZF9DT01QNV9PMzwtbG1lcihOVV9OT1RBX0NPTVA1fiBvM19wcGIgKyBicyhOVV9BTk8pKygxK28zX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KbW9kX0NPTVA1X1BNMjU8LWxtZXIoTlVfTk9UQV9DT01QNX4gcG0yNV91Z20zICsgYnMoTlVfQU5PKSsoMStwbTI1X3VnbTN8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCg0KYGBgDQoNCmBgYHtyfQ0KI2V4dHJhw6fDo28gZGUgY29lZmljaWVudGUNCmNvZWZfaW50PSBmdW5jdGlvbiAobW9kZWxvKSB7DQogIGNvZWY8LWNvZWYobW9kZWxvKVtbMV1dWzE6Ml0NCiAgU0U8LShzdGFuZGFyZF9lcnJvcihtb2RlbG8sIGVmZmVjdHMgPSAicmFuZG9tIilbWzFdXSkNCiAgUkVTPC1jYmluZChjb2VmLFNFLHJvd25hbWVzKGNvZWYpKQ0KICBjb2xuYW1lcyhSRVMpPC0gYyhjb2xuYW1lcyhSRVMpWzFdLCJTTE9QRSIscGFzdGUoIlNFXyIsY29sbmFtZXMoUkVTKVszXSkscGFzdGUoIlNFXyIsIlNMT1BFIiksImZhdG9yIikNCiAgcmV0dXJuKFJFUykNCg0KfQ0KDQpgYGANCg0KYGBge3J9DQpHMTwtY29lZiANCiNncmFmaWNvIEludGVyY2VwdA0KRzEgJT4lDQogIGdncGxvdChhZXMoYChJbnRlcmNlcHQpYCxmYXRvcixjb2w9UG9sdWVudGUpKStnZW9tX3BvaW50KCkrZmFjZXRfZ3JpZChOb3RhflBvbHVlbnRlKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeG1pbj0oRzFbLDFdKzEuNjQ1KkdbLDNdKSx4bWF4PShHMVssMV0tMS42NDUqRzFbLDNdKSksc2l6ZT0wLjEpKw0KICBnZW9tX3BvaW50cmFuZ2UoYWVzKHhtaW49KEcxWywxXSsxLjY0NSpHWywzXSkseG1heD0oRzFbLDFdLTEuNjQ1KkcxWywzXSkpLHNpemU9MC4xKSsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgc2l6ZT0xLjApKw0KICBsYWJzKHRpdGxlID0gIk1vZGVsbyBtaXN0b3MiLA0KICAgICAgIHN1YnRpdGxlID0gIkNvZWZpY2llbnRlcyhJQzkwJSkiLA0KICAgICAgIGNhcHRpb24gPSAiRVBQRyBGR1YiKSt4bGFiKCJJbnRlcmNlcHQiKSt5bGFiKCJFc3RhZG8iKQ0KDQojZ3JhZmljbyBTbG9wZQ0KRzEgJT4lIA0KICBnZ3Bsb3QoYWVzKEcxJFNMT1BFLEcxJGZhdG9yKSkrZ2VvbV9wb2ludCgpK2ZhY2V0X2dyaWQoTm90YX5Qb2x1ZW50ZSxzY2FsZXMgPSAiZnJlZSIpKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh4bWluPShHMVssMl0rMS42NDUqRzFbLDRdKSx4bWF4PShHMVssMl0tMS42NDUqRzFbLDRdKSksc2l6ZT0wLjEpKw0KICBnZW9tX3BvaW50cmFuZ2UoYWVzKHhtaW49KEcxWywyXSsxLjY0NSpHMVssNF0pLHhtYXg9KEcxWywyXS0xLjY0NSpHMVssNF0pKSxzaXplPTAuMSkrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIHNpemU9MS4wKSsNCiAgbGFicyh0aXRsZSA9ICJNb2RlbG8gbWlzdG9zIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJDb2VmaWNpZW50ZXMoSUM5MCUpIiwNCiAgICAgICBjYXB0aW9uID0gIkVQUEcgRkdWIikreGxhYigiU2xvcGUiKSt5bGFiKCJFc3RhZG8iKQ0KYGBgDQoNCiMjIyMgUmVuZGENCg0KYGBge3J9DQojVmFyaWHDp8OjbyBkZSBQb2x1ZW50ZQ0KbW9kX1JlZF9OTzI8LWxtZXIoTlVfTk9UQV9SRURBQ0FPfiBubzJfcHBiICticyhOVV9BTk8pK1ExNSArICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX1JlZF9PMzwtbG1lcihOVV9OT1RBX1JFREFDQU9+IG8zX3BwYiArYnMoTlVfQU5PKStRMTUgKyAoMStvM19wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCm1vZF9SZWRfUE0yNTwtbG1lcihOVV9OT1RBX1JFREFDQU9+IHBtMjVfdWdtMyArYnMoTlVfQU5PKStRMTUgKyAoMStwbTI1X3VnbTN8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCg0KbW9kX0NPTVAxX05PMjwtbG1lcihOVV9OT1RBX0NPTVAxfiBubzJfcHBiICticyhOVV9BTk8pK1ExNSArICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX0NPTVAxX08zPC1sbWVyKE5VX05PVEFfQ09NUDF+IG8zX3BwYiArYnMoTlVfQU5PKStRMTUgKyAoMStvM19wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCm1vZF9DT01QMV9QTTI1PC1sbWVyKE5VX05PVEFfQ09NUDF+IHBtMjVfdWdtMyArYnMoTlVfQU5PKStRMTUgKyAoMStwbTI1X3VnbTN8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCg0KbW9kX0NPTVAyX05PMjwtbG1lcihOVV9OT1RBX0NPTVAyfiBubzJfcHBiICticyhOVV9BTk8pK1ExNSArICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX0NPTVAyX08zPC1sbWVyKE5VX05PVEFfQ09NUDJ+IG8zX3BwYiArYnMoTlVfQU5PKStRMTUgKyAoMStvM19wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCm1vZF9DT01QMl9QTTI1PC1sbWVyKE5VX05PVEFfQ09NUDJ+IHBtMjVfdWdtMyArYnMoTlVfQU5PKStRMTUgKyAoMStwbTI1X3VnbTN8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCg0KbW9kX0NPTVAzX05PMjwtbG1lcihOVV9OT1RBX0NPTVAzfiBubzJfcHBiICsgYnMoTlVfQU5PKSsgKDErbm8yX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEpDQptb2RfQ09NUDNfTzM8LWxtZXIoTlVfTk9UQV9DT01QM34gbzNfcHBiICsgYnMoTlVfQU5PKSsoMStvM19wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCm1vZF9DT01QM19QTTI1PC1sbWVyKE5VX05PVEFfQ09NUDN+IHBtMjVfdWdtMyArYnMoTlVfQU5PKStRMTUgKyAoMStwbTI1X3VnbTN8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCg0KbW9kX0NPTVA0X05PMjwtbG1lcihOVV9OT1RBX0NPTVA0fiBubzJfcHBiICsgYnMoTlVfQU5PKSsoMStubzJfcHBifFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSkNCm1vZF9DT01QNF9PMzwtbG1lcihOVV9OT1RBX0NPTVA0fiBvM19wcGIgKyBicyhOVV9BTk8pKygxK28zX3BwYnxTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KbW9kX0NPTVA0X1BNMjU8LWxtZXIoTlVfTk9UQV9DT01QNH4gcG0yNV91Z20zICsgYnMoTlVfQU5PKSsoMStwbTI1X3VnbTN8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxICkNCg0KbW9kX0NPTVA1X05PMjwtbG1lcihOVV9OT1RBX0NPTVA1fiBubzJfcHBiICticyhOVV9BTk8pK1ExNSArICgxK25vMl9wcGJ8U0dfVUZfUkVTSURFTkNJQSksZGF0YSA9ZGYxKQ0KbW9kX0NPTVA1X08zPC1sbWVyKE5VX05PVEFfQ09NUDV+IG8zX3BwYiArIGJzKE5VX0FOTykrKDErbzNfcHBifFNHX1VGX1JFU0lERU5DSUEpLGRhdGEgPWRmMSApDQptb2RfQ09NUDVfUE0yNTwtbG1lcihOVV9OT1RBX0NPTVA1fiBwbTI1X3VnbTMgKyBicyhOVV9BTk8pKygxK3BtMjVfdWdtM3xTR19VRl9SRVNJREVOQ0lBKSxkYXRhID1kZjEgKQ0KYGBgDQoNCmBgYHtyfQ0KRzM8LWNvZWYgDQojZ3JhZmljbyBJbnRlcmNlcHQNCkczICU+JQ0KICBnZ3Bsb3QoYWVzKGAoSW50ZXJjZXB0KWAsZmF0b3IsY29sPVBvbHVlbnRlKSkrZ2VvbV9wb2ludCgpK2ZhY2V0X2dyaWQoTm90YX5Qb2x1ZW50ZSkrDQogIGdlb21fZXJyb3JiYXIoYWVzKHhtaW49KEczWywxXSsxLjY0NSpHM1ssM10pLHhtYXg9KEczWywxXS0xLjY0NSpHM1ssM10pKSxzaXplPTAuMSkrDQogIGdlb21fcG9pbnRyYW5nZShhZXMoeG1pbj0oRzNbLDFdKzEuNjQ1KkczWywzXSkseG1heD0oRzNbLDFdLTEuNjQ1KkczWywzXSkpLHNpemU9MC4xKSsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgc2l6ZT0xLjApKw0KICBsYWJzKHRpdGxlID0gIk1vZGVsbyBtaXN0b3MiLA0KICAgICAgIHN1YnRpdGxlID0gIkNvZWZpY2llbnRlcyhJQzkwJSkiLA0KICAgICAgIGNhcHRpb24gPSAiRVBQRyBGR1YiKSt4bGFiKCJJbnRlcmNlcHQiKSt5bGFiKCJFc3RhZG8iKQ0KDQojZ3JhZmljbyBTbG9wZQ0KRzMgJT4lIA0KICBnZ3Bsb3QoYWVzKEczJFNMT1BFLEczJGZhdG9yKSkrZ2VvbV9wb2ludCgpK2ZhY2V0X2dyaWQoTm90YX5Qb2x1ZW50ZSxzY2FsZXMgPSAiZnJlZSIpKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh4bWluPShHM1ssMl0rMS42NDUqRzNbLDRdKSx4bWF4PShHM1ssMl0tMS42NDUqRzNbLDRdKSksc2l6ZT0wLjEpKw0KICBnZW9tX3BvaW50cmFuZ2UoYWVzKHhtaW49KEczWywyXSsxLjY0NSpHM1ssNF0pLHhtYXg9KEczWywyXS0xLjY0NSpHM1ssNF0pKSxzaXplPTAuMSkrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIHNpemU9MS4wKSsNCiAgbGFicyh0aXRsZSA9ICJNb2RlbG8gbWlzdG9zIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJDb2VmaWNpZW50ZXMoSUM5MCUpIiwNCiAgICAgICBjYXB0aW9uID0gIkVQUEcgRkdWIikreGxhYigiU2xvcGUiKSt5bGFiKCJFc3RhZG8iKQ0KYGBgDQoNCiMjIE1vZGVsbyBjb20gY29udHJvbGVzIHZhcmlhbmRvIHBvciBtb2RhbGlkYWRlIGVkdWNhY2lvbmFsDQoNCiMjIE1vZGVsbyBjb20gY29udHJvbGVzIHZhcmlhbmRvIHBvciBtb2RhbGlkYWRlIGVkdWNhY2lvbmFsDQo=