Considere um processo AR(1):
\[
y_t = C + \phi y_{t-1} + e_t \quad , \ e_t \sim RB(0,\sigma^2) \quad , \
t = 1,2,...T
\]
Esperança
É dada por:
\[
E[y_t] = E[C] + E[\phi y_{t-1}] + E[e_t]\\
E[y_t] = C + E[\phi y_{t-1}] + 0\\
\]
Sabemos que: \(E[y_{t-1}] =
E[y_t]\)
Então fazendo uma simples manipulação temos que:
\[
E[y_t] - \phi E[y_t] = C \\
E[y_t][1 - \phi] = C \\
E[y_t] = \frac{C}{1 - \phi} = M \\
\]
Variância
É dada por:
\[
Var(y_t) = Var(c) + Var(\phi y_{t-1}) + Var(e_t) + 2cov(y_{t-1}, e_t) \\
Var(y_t) = 0 + \phi ^2 var(y_{t-1}) + \sigma ^2 + 2cov(y_{t-1}, e_t) \\
\] Sabemos que: \(Var(y_{t-1}) =
Var(y_t)\)
E que: \(cov(y_{t-1}, e_t) = 0\)
Assim, realizando a mesma manobra algébrica anteriormente seguimos
com:
\[
Var(y_t) = \phi ^2 var(y_t) + \sigma ^2 \\
Var(y_t)(1 - \phi ^2 ) = \sigma ^2 \\
Var(y_t) = \frac{\sigma ^2}{1 - \phi ^2 } , \quad |\phi| < 1
\]
Covariância
Primeiro encontraremos \(\gamma_1 = cov(y_t
, y_{t-1})\)
\[
\gamma_1 = cov(y_t, y_{t-1}) = E[(\phi y_{t-1} + e_t) *(y_{t-1})] \\
\gamma_1 = E[\phi (y_{t-1})(y_{t-1})] + E[e_t (y_{t-1})] \\
\gamma_1 = \phi E[(y_{t-1})(y_{t-1})] + 0 \\
\gamma_1 = \phi Var(y_{t-1}) = \phi (\frac{\sigma ^2}{1 - \phi ^2 }) \\
\]
Para \(\gamma_2\):
\[
\gamma_2 = cov(y_t, y_{t-2}) = E[(\phi y_{t-2} + e_{t-1}) *(y_{t-2})] \\
\gamma_2 = E[\phi (y_{t-2})(y_{t-2})] + E[e_{t-1} (y_{t-2})] \\
\gamma_2 = \phi^2 E[(y_{t-2})(y_{t-2})] + 0 \\
\gamma_2 = \phi^2 Var(y_{t-2}) = \phi^2 (\frac{\sigma ^2}{1 - \phi ^2 })
\\
\]
Se continuarmos o processo n vezes teremos que: \[ \gamma_n = \phi ^n (\frac{\sigma ^2}{1 - \phi
^2}) \]
Correlação
A correlação, \(\rho\), é dada pela
divisão da covariância pela variância. Assim temos que:
\[ \rho_n = \phi^n\]
Com isso agora podemos comparar as correlações obtidas de maneira
teórica com as correlações estimadas de forma computacional. Para isto,
geramos uma série temporal de forma pseudo aleatória considerando o
modelo AR com 1 parâmetro:
set.seed(2023)
y_ar1= arima.sim(n = 100, list(ar = c(-0.6)))
ajuste.y_ar1 = arima(y_ar1, order = c(1, 0, 0))
ajuste.y_ar1$coef
ar1 intercept
-0.53893041 0.08134307
plot(y_ar1, ylab="Série temporal", xlab="Tempo")

acfar1 <- acf(y_ar1, lag.max=7, plot=FALSE)
acfar1 <- round(acfar1[["acf"]],3)
teoric <- round((ajuste.y_ar1$coef[1])^(0:7),3)
Tabela 1 - Valores Teóricos e Estimados Computacionalmente para o
modelo AR(1), \(\widehat{\phi}\) =
-0.539.
\(\rho_n\) |
-0.539 |
0.29 |
-0.157 |
0.084 |
-0.045 |
0.025 |
-0.013 |
r\(_n\) |
-0.544 |
0.38 |
-0.291 |
-0.02 |
0.084 |
-0.134 |
0.191 |
\(|\rho_n -
r_n|\) |
0.005 |
0.09 |
0.134 |
0.104 |
0.129 |
0.159 |
0.204 |
Onde \(\rho_{j}\) são os valores
reais das auto correlações da série e \(r_{j}\) são os valores estimados.
acf(y_ar1)$ac

pacf(y_ar1)$acf

Considere um processo MA(1):
\[y_t = C + e_t + \theta e_{t-1} \quad , \
t = 1,2,...T \quad , \ e_t \sim RB(0,\sigma^2)\]
Esperança
É dada por:
\[
E[y_t] = E[C] + E[e_t] + E[\theta e_{t-1}]\\
E[y_t] = C + 0 + 0\\
E[y_t] = C
\]
Variância
É dada por:
\[
Var(y_t) = E[(y_t - c)^2] = E[(e_t + \theta e_{t-1})^2] \\
Var(y_t) = E[e_t ^2] + 2\theta E[e_t e_{t-1}] + \theta^2 E[e_{t-1} ^2]
\\
Var(y_t) = \sigma^2 + 0 + \sigma^2 \theta^2 \\
Var(y_t) = \sigma^2(1+\theta^2)
\]
Covariância
Primeiro encontraremos \(\gamma_1 = cov(y_t
, y_{t-1})\)
\[
\gamma_1 = cov(y_t, y_{t-1}) = E[(e_t + \theta e_{t-1}) *(e_{t-1} +
\theta e_{t-2})] \\
\gamma_1 = E[e_t e_{t-1}] + \theta E[e_t e_{t-2}] + \theta E[e_{t-1} ^2]
+ \theta^2 E[e_{t-1} e_{t-2}] \\
\gamma_1 = 0 + 0 + \theta \sigma^2 + 0 \\
\gamma_1 = \theta \sigma^2 \\
\]
Para \(\gamma_2\):
\[
\gamma_2 = cov(y_t, y_{t-1}) = E[(e_t + \theta e_{t-1}) *(e_{t-2} +
\theta e_{t-3})] \\
\gamma_2 = E[e_t e_{t-2}] + \theta E[e_t e_{t-3}] + \theta E[e_{t-1}
e_{t-2}] + \theta^2 E[e_{t-1} e_{t-3}] \\
\gamma_2 = 0 + 0 + 0 + 0 \\
\gamma_2 = 0 \\
\]
Para \(\gamma_3\):
\[
\gamma_3 = cov(y_t, y_{t-1}) = E[(e_t + \theta e_{t-1}) *(e_{t-3} +
\theta e_{t-4})] \\
\gamma_3 = E[e_t e_{t-3}] + \theta E[e_t e_{t-4}] + \theta E[e_{t-1}
e_{t-4}] + \theta^2 E[e_{t-1} e_{t-4}] \\
\gamma_3 = 0 + 0 + 0 + 0 \\
\gamma_3 = 0 \\
\]
Se continuarmos o processo n vezes teremos que:
\[
\gamma_n =\begin{cases}
& \theta \sigma^2 \ , \forall \ n = 1\\
& 0 \ , \ \forall \ n > 1
\end{cases}
\]
Correlação
A correlação, \(\rho\), é dada pela
divisão da covariância pela variância. Assim temos que:
\[
\gamma_n =\begin{cases}
& \frac{\theta}{1+\theta ^2} \ , \forall \ n = 1\\
& 0 \ , \ \forall \ n > 1
\end{cases}
\]
Com isso agora podemos comparar as correlações obtidas de maneira
teórica com as correlações estimadas de forma computacional. Para isto,
geramos uma série temporal de forma pseudo aleatória considerando o
modelo MA com 1 parâmetro:
set.seed(2023)
y_ma1= arima.sim(n = 100, list(ar = c(0.5)))
ajuste.y_ma1 = arima(y_ma1, order = c(0, 0, 1))
ajuste.y_ma1$coef
ma1 intercept
0.4654431 0.2522353
plot(y_ma1, ylab="Série temporal", xlab="Tempo")

acfma1 <- acf(y_ma1, lag.max=7, plot=FALSE)
acfma1 <- round(acfma1[["acf"]],3)
teoric1 <- c(round(ajuste.y_ma1$coef[1] / 1 + ajuste.y_ma1$coef[1]^2, 3), rep(0,6))
Tabela 2 - Valores Teóricos e Estimados Computacionalmente para o
modelo MA(1), \(\theta\) = 0.465.
\(\rho_n\) |
0.682 |
0 |
0 |
0 |
0 |
0 |
0 |
r\(_n\) |
0.529 |
0.165 |
-0.158 |
-0.203 |
-0.061 |
0.004 |
0.11 |
\(|\rho_n -
r_n|\) |
0.153 |
0.165 |
0.158 |
0.203 |
0.061 |
0.004 |
0.11 |
Onde \(\rho_{j}\) são os valores
reais das auto correlações da série e \(r_{j}\) são os valores estimados.
acf(y_ma1)$ac

pacf(y_ma1)$acf

Agora para tornarmos nosso \(\theta\) negativo fazemos:
set.seed(2023)
y_ma2 = arima.sim(n = 100, list(ar = c(-0.5)))
ajuste.y_ma2 = arima(y_ma2, order = c(0, 0, 1))
ajuste.y_ma2$coef
ma1 intercept
-0.39459175 0.08722491
plot(y_ma2, ylab="Série temporal", xlab="Tempo")

acfma2 <- acf(y_ma2, lag.max=7, plot=FALSE)
acfma2 <- round(acfma2[["acf"]],3)
teoric2 <- c(round(ajuste.y_ma2$coef[1] / 1 + ajuste.y_ma2$coef[1]^2, 3), rep(0,6))
Tabela 3 - Valores Teóricos e Estimados Computacionalmente para o
modelo MA(1), \(\theta\) = -0.395.
\(\rho_n\) |
-0.239 |
0 |
0 |
0 |
0 |
0 |
0 |
r\(_n\) |
-0.428 |
0.275 |
-0.234 |
-0.089 |
0.106 |
-0.123 |
0.178 |
\(|\rho_n -
r_n|\) |
0.189 |
0.275 |
0.234 |
0.089 |
0.106 |
0.123 |
0.178 |
Onde \(\rho_{j}\) são os valores
reais das auto correlações da série e \(r_{j}\) são os valores estimados.
acf(y_ma1)$ac

pacf(y_ma1)$acf

Desenvolvido por: Eraldo Rocha
LS0tDQp0aXRsZTogIlPDqXJpZXMgVGVtcG9yYWlzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQoNCi0tLQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnJtKGxpc3Q9bHMoYWxsPVQpKQ0KYGBgDQoNCg0KIyMjIyBDb25zaWRlcmUgdW0gcHJvY2Vzc28gQVIoMSk6IA0KDQokJA0KeV90ID0gQyArIFxwaGkgeV97dC0xfSArIGVfdCBccXVhZCAsIFwgZV90IFxzaW0gUkIoMCxcc2lnbWFeMikgXHF1YWQgLCBcIHQgPSAxLDIsLi4uVA0KJCQgDQoNCiMjIyMjICoqRXNwZXJhbsOnYSoqDQrDiSBkYWRhIHBvcjogDQoNCiQkDQpFW3lfdF0gPSBFW0NdICsgRVtccGhpIHlfe3QtMX1dICsgRVtlX3RdXFwNCkVbeV90XSA9IEMgKyBFW1xwaGkgeV97dC0xfV0gKyAwXFwNCiQkDQoNClNhYmVtb3MgcXVlOiAkRVt5X3t0LTF9XSA9IEVbeV90XSQgIA0KRW50w6NvIGZhemVuZG8gdW1hIHNpbXBsZXMgbWFuaXB1bGHDp8OjbyB0ZW1vcyBxdWU6ICANCg0KJCQNCkVbeV90XSAtIFxwaGkgRVt5X3RdID0gQyBcXA0KRVt5X3RdWzEgLSBccGhpXSA9IEMgXFwNCkVbeV90XSA9IFxmcmFje0N9ezEgLSBccGhpfSA9IE0gXFwNCiQkDQoNCg0KDQojIyMjIyAqKlZhcmnDom5jaWEqKiANCsOJIGRhZGEgcG9yOiAgDQoNCiQkDQpWYXIoeV90KSA9IFZhcihjKSArIFZhcihccGhpIHlfe3QtMX0pICsgVmFyKGVfdCkgKyAyY292KHlfe3QtMX0sIGVfdCkgXFwNClZhcih5X3QpID0gMCArIFxwaGkgXjIgdmFyKHlfe3QtMX0pICsgXHNpZ21hIF4yICsgMmNvdih5X3t0LTF9LCBlX3QpIFxcDQokJA0KU2FiZW1vcyBxdWU6ICRWYXIoeV97dC0xfSkgPSBWYXIoeV90KSQgIA0KRSBxdWU6ICRjb3YoeV97dC0xfSwgZV90KSA9IDAkICANCkFzc2ltLCByZWFsaXphbmRvIGEgbWVzbWEgbWFub2JyYSBhbGfDqWJyaWNhIGFudGVyaW9ybWVudGUgc2VndWltb3MgY29tOg0KDQokJA0KVmFyKHlfdCkgPSBccGhpIF4yIHZhcih5X3QpICsgXHNpZ21hIF4yIFxcDQpWYXIoeV90KSgxIC0gXHBoaSBeMiApID0gXHNpZ21hIF4yIFxcDQpWYXIoeV90KSA9IFxmcmFje1xzaWdtYSBeMn17MSAtIFxwaGkgXjIgfSAsIFxxdWFkIHxccGhpfCA8IDENCiQkDQoNCiMjIyMjICoqQ292YXJpw6JuY2lhKioNClByaW1laXJvIGVuY29udHJhcmVtb3MgJFxnYW1tYV8xID0gY292KHlfdCAsIHlfe3QtMX0pJCAgDQoNCiQkDQpcZ2FtbWFfMSA9IGNvdih5X3QsIHlfe3QtMX0pID0gRVsoXHBoaSB5X3t0LTF9ICsgZV90KSAqKHlfe3QtMX0pXSBcXA0KXGdhbW1hXzEgPSBFW1xwaGkgKHlfe3QtMX0pKHlfe3QtMX0pXSArIEVbZV90ICh5X3t0LTF9KV0gXFwNClxnYW1tYV8xID0gXHBoaSBFWyh5X3t0LTF9KSh5X3t0LTF9KV0gKyAwIFxcDQpcZ2FtbWFfMSA9IFxwaGkgVmFyKHlfe3QtMX0pID0gXHBoaSAoXGZyYWN7XHNpZ21hIF4yfXsxIC0gXHBoaSBeMiB9KSBcXA0KJCQNCg0KUGFyYSAkXGdhbW1hXzIkOiAgDQoNCiQkDQpcZ2FtbWFfMiA9IGNvdih5X3QsIHlfe3QtMn0pID0gRVsoXHBoaSB5X3t0LTJ9ICsgZV97dC0xfSkgKih5X3t0LTJ9KV0gXFwNClxnYW1tYV8yID0gRVtccGhpICh5X3t0LTJ9KSh5X3t0LTJ9KV0gKyBFW2Vfe3QtMX0gKHlfe3QtMn0pXSBcXA0KXGdhbW1hXzIgPSBccGhpXjIgRVsoeV97dC0yfSkoeV97dC0yfSldICsgMCBcXA0KXGdhbW1hXzIgPSBccGhpXjIgVmFyKHlfe3QtMn0pID0gXHBoaV4yIChcZnJhY3tcc2lnbWEgXjJ9ezEgLSBccGhpIF4yIH0pIFxcDQokJA0KDQpTZSBjb250aW51YXJtb3MgbyBwcm9jZXNzbyBuIHZlemVzIHRlcmVtb3MgcXVlOiANCiQkIFxnYW1tYV9uID0gXHBoaSBebiAoXGZyYWN7XHNpZ21hIF4yfXsxIC0gXHBoaSBeMn0pICQkDQoNCiMjIyMjICoqQ29ycmVsYcOnw6NvKioNCkEgY29ycmVsYcOnw6NvLCAkXHJobyQsIMOpIGRhZGEgcGVsYSBkaXZpc8OjbyBkYSBjb3ZhcmnDom5jaWEgcGVsYSB2YXJpw6JuY2lhLiBBc3NpbSB0ZW1vcyBxdWU6ICANCiQkIFxyaG9fbiA9IFxwaGlebiQkDQoNCkNvbSBpc3NvIGFnb3JhIHBvZGVtb3MgY29tcGFyYXIgYXMgY29ycmVsYcOnw7VlcyBvYnRpZGFzIGRlIG1hbmVpcmEgdGXDs3JpY2EgY29tIGFzIGNvcnJlbGHDp8O1ZXMgZXN0aW1hZGFzIGRlIGZvcm1hIGNvbXB1dGFjaW9uYWwuIFBhcmEgaXN0bywgZ2VyYW1vcyB1bWEgc8OpcmllIHRlbXBvcmFsIGRlIGZvcm1hIHBzZXVkbyBhbGVhdMOzcmlhIGNvbnNpZGVyYW5kbyBvIG1vZGVsbyBBUiBjb20gMSBwYXLDom1ldHJvOg0KDQpgYGB7cn0NCnNldC5zZWVkKDIwMjMpDQoNCnlfYXIxPSBhcmltYS5zaW0obiA9IDEwMCwgbGlzdChhciA9IGMoLTAuNikpKQ0KYWp1c3RlLnlfYXIxID0gYXJpbWEoeV9hcjEsICBvcmRlciA9IGMoMSwgMCwgMCkpDQphanVzdGUueV9hcjEkY29lZg0KcGxvdCh5X2FyMSwgeWxhYj0iU8OpcmllIHRlbXBvcmFsIiwgeGxhYj0iVGVtcG8iKQ0KYGBgDQoNCmBgYHtyfQ0KYWNmYXIxIDwtIGFjZih5X2FyMSwgbGFnLm1heD03LCBwbG90PUZBTFNFKQ0KYWNmYXIxIDwtIHJvdW5kKGFjZmFyMVtbImFjZiJdXSwzKQ0KdGVvcmljIDwtIHJvdW5kKChhanVzdGUueV9hcjEkY29lZlsxXSleKDA6NyksMykNCmBgYA0KIyMjIyMgVGFiZWxhIDEgLSBWYWxvcmVzIFRlw7NyaWNvcyBlIEVzdGltYWRvcyBDb21wdXRhY2lvbmFsbWVudGUgcGFyYSBvIG1vZGVsbyBBUigxKSwgJFx3aWRlaGF0e1xwaGl9JCA9IGByIHJvdW5kKGFqdXN0ZS55X2FyMSRjb2VmWzFdLCAzKWAuDQoNCnwgICAgbiAgICAgfCAgMSAgfCAgIDIgICAgfCAgIDMgICB8ICAgNCAgICB8ICAgNSAgICB8ICAgNiAgICB8ICAgNyAgICB8DQp8Oi0tLS0tLS0tOnw6LS0tOnw6LS0tLS0tOnw6LS0tLS06fDotLS0tLS06fDotLS0tLS06fDotLS0tLS06fDotLS0tLS06fA0KfCAkXHJob19uJCB8ICBgciB0ZW9yaWNbMl1gICB8IGByIHRlb3JpY1szXWAgIHwgYHIgdGVvcmljWzRdYCAgfCAgYHIgdGVvcmljWzVdYCB8ICBgciB0ZW9yaWNbNl1gICB8ICBgciB0ZW9yaWNbN11gIHwgIGByIHRlb3JpY1s4XWAgIHwNCnwgIHIkX24kICAgfCAgYHIgYWNmYXIxWzJdYCAgfCAgYHIgYWNmYXIxWzNdYCB8ICBgciBhY2ZhcjFbNF1gIHwgYHIgYWNmYXIxWzVdYCAgfCAgYHIgYWNmYXIxWzZdYCAgfCAgYHIgYWNmYXIxWzddYCB8ICBgciBhY2ZhcjFbOF1gICB8DQp8ICAkfFxyaG9fbiAtIHJfbnwkICAgfCAgYHIgYWJzKHRlb3JpY1syXSAtIGFjZmFyMVsyXSlgICB8ICBgciBhYnModGVvcmljWzNdIC0gYWNmYXIxWzNdKWAgfCAgYHIgYWJzKHRlb3JpY1s0XSAtIGFjZmFyMVs0XSlgIHwgYHIgYWJzKHRlb3JpY1s1XSAtIGFjZmFyMVs1XSlgICB8ICBgciBhYnModGVvcmljWzZdIC0gYWNmYXIxWzZdKWAgIHwgIGByIGFicyh0ZW9yaWNbN10gLSBhY2ZhcjFbN10pYCB8ICBgciBhYnModGVvcmljWzhdIC0gYWNmYXIxWzhdKWAgIHwNCg0KDQpPbmRlICRccmhvX3tqfSQgc8OjbyBvcyB2YWxvcmVzIHJlYWlzIGRhcyBhdXRvIGNvcnJlbGHDp8O1ZXMgZGEgc8OpcmllIGUgJHJfe2p9JCBzw6NvIG9zIHZhbG9yZXMgZXN0aW1hZG9zLg0KDQoNCmBgYHtyIHJlc3VsdHMgPSAiaGlkZSJ9DQphY2YoeV9hcjEpJGFjDQpwYWNmKHlfYXIxKSRhY2YNCmBgYA0KIyMjIyBDb25zaWRlcmUgdW0gcHJvY2Vzc28gTUEoMSk6DQokJHlfdCA9IEMgKyBlX3QgKyBcdGhldGEgZV97dC0xfSBccXVhZCAsIFwgdCA9IDEsMiwuLi5UIFxxdWFkICwgXCBlX3QgXHNpbSBSQigwLFxzaWdtYV4yKSQkIA0KDQojIyMjIyAqKkVzcGVyYW7Dp2EqKg0Kw4kgZGFkYSBwb3I6IA0KDQokJA0KRVt5X3RdID0gRVtDXSArIEVbZV90XSArIEVbXHRoZXRhIGVfe3QtMX1dXFwNCkVbeV90XSA9IEMgKyAwICsgMFxcDQpFW3lfdF0gPSBDDQokJA0KDQoNCiMjIyMjICoqVmFyacOibmNpYSoqIA0Kw4kgZGFkYSBwb3I6ICANCg0KJCQNClZhcih5X3QpID0gRVsoeV90IC0gYyleMl0gPSBFWyhlX3QgKyBcdGhldGEgZV97dC0xfSleMl0gXFwNClZhcih5X3QpID0gRVtlX3QgXjJdICsgMlx0aGV0YSBFW2VfdCBlX3t0LTF9XSArIFx0aGV0YV4yIEVbZV97dC0xfSBeMl0gXFwNClZhcih5X3QpID0gXHNpZ21hXjIgKyAwICsgXHNpZ21hXjIgXHRoZXRhXjIgXFwNClZhcih5X3QpID0gXHNpZ21hXjIoMStcdGhldGFeMikNCiQkDQoNCiMjIyMjICoqQ292YXJpw6JuY2lhKioNClByaW1laXJvIGVuY29udHJhcmVtb3MgJFxnYW1tYV8xID0gY292KHlfdCAsIHlfe3QtMX0pJCAgDQoNCiQkDQpcZ2FtbWFfMSA9IGNvdih5X3QsIHlfe3QtMX0pID0gRVsoZV90ICsgXHRoZXRhIGVfe3QtMX0pICooZV97dC0xfSArIFx0aGV0YSBlX3t0LTJ9KV0gXFwNClxnYW1tYV8xID0gRVtlX3QgZV97dC0xfV0gKyBcdGhldGEgRVtlX3QgZV97dC0yfV0gKyBcdGhldGEgRVtlX3t0LTF9IF4yXSArIFx0aGV0YV4yIEVbZV97dC0xfSBlX3t0LTJ9XSBcXA0KXGdhbW1hXzEgPSAwICsgMCArIFx0aGV0YSBcc2lnbWFeMiArIDAgXFwgDQpcZ2FtbWFfMSA9IFx0aGV0YSBcc2lnbWFeMiBcXCANCiQkDQoNClBhcmEgJFxnYW1tYV8yJDogIA0KDQokJA0KXGdhbW1hXzIgPSBjb3YoeV90LCB5X3t0LTF9KSA9IEVbKGVfdCArIFx0aGV0YSBlX3t0LTF9KSAqKGVfe3QtMn0gKyBcdGhldGEgZV97dC0zfSldIFxcDQpcZ2FtbWFfMiA9IEVbZV90IGVfe3QtMn1dICsgXHRoZXRhIEVbZV90IGVfe3QtM31dICsgXHRoZXRhIEVbZV97dC0xfSBlX3t0LTJ9XSArIFx0aGV0YV4yIEVbZV97dC0xfSBlX3t0LTN9XSBcXA0KXGdhbW1hXzIgPSAwICsgMCArICAwICsgMCBcXCANClxnYW1tYV8yID0gMCBcXCANCiQkDQoNClBhcmEgJFxnYW1tYV8zJDogIA0KDQokJA0KXGdhbW1hXzMgPSBjb3YoeV90LCB5X3t0LTF9KSA9IEVbKGVfdCArIFx0aGV0YSBlX3t0LTF9KSAqKGVfe3QtM30gKyBcdGhldGEgZV97dC00fSldIFxcDQpcZ2FtbWFfMyA9IEVbZV90IGVfe3QtM31dICsgXHRoZXRhIEVbZV90IGVfe3QtNH1dICsgXHRoZXRhIEVbZV97dC0xfSBlX3t0LTR9XSArIFx0aGV0YV4yIEVbZV97dC0xfSBlX3t0LTR9XSBcXA0KXGdhbW1hXzMgPSAwICsgMCArICAwICsgMCBcXCANClxnYW1tYV8zID0gMCBcXCANCiQkDQoNCg0KU2UgY29udGludWFybW9zIG8gcHJvY2Vzc28gbiB2ZXplcyB0ZXJlbW9zIHF1ZToNCg0KJCQNClxnYW1tYV9uID1cYmVnaW57Y2FzZXN9DQogJiBcdGhldGEgXHNpZ21hXjIgXCAsIFxmb3JhbGwgXCBuID0gMVxcIA0KICYgIDAgXCAsIFwgXGZvcmFsbCBcIG4gPiAxIA0KXGVuZHtjYXNlc30NCiQkDQoNCg0KIyMjIyMgKipDb3JyZWxhw6fDo28qKg0KQSBjb3JyZWxhw6fDo28sICRccmhvJCwgw6kgZGFkYSBwZWxhIGRpdmlzw6NvIGRhIGNvdmFyacOibmNpYSBwZWxhIHZhcmnDom5jaWEuIEFzc2ltIHRlbW9zIHF1ZTogIA0KJCQNClxnYW1tYV9uID1cYmVnaW57Y2FzZXN9DQogJiBcZnJhY3tcdGhldGF9ezErXHRoZXRhIF4yfSBcICwgXGZvcmFsbCBcIG4gPSAxXFwgDQogJiAgMCBcICwgXCBcZm9yYWxsIFwgbiA+IDEgDQpcZW5ke2Nhc2VzfQ0KJCQNCg0KQ29tIGlzc28gYWdvcmEgcG9kZW1vcyBjb21wYXJhciBhcyBjb3JyZWxhw6fDtWVzIG9idGlkYXMgZGUgbWFuZWlyYSB0ZcOzcmljYSBjb20gYXMgY29ycmVsYcOnw7VlcyBlc3RpbWFkYXMgZGUgZm9ybWEgY29tcHV0YWNpb25hbC4gUGFyYSBpc3RvLCBnZXJhbW9zIHVtYSBzw6lyaWUgdGVtcG9yYWwgZGUgZm9ybWEgcHNldWRvIGFsZWF0w7NyaWEgY29uc2lkZXJhbmRvIG8gbW9kZWxvIE1BIGNvbSAxIHBhcsOibWV0cm86DQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMjAyMykNCg0KeV9tYTE9IGFyaW1hLnNpbShuID0gMTAwLCBsaXN0KGFyID0gYygwLjUpKSkNCmFqdXN0ZS55X21hMSA9IGFyaW1hKHlfbWExLCAgb3JkZXIgPSBjKDAsIDAsIDEpKQ0KYWp1c3RlLnlfbWExJGNvZWYNCnBsb3QoeV9tYTEsIHlsYWI9IlPDqXJpZSB0ZW1wb3JhbCIsIHhsYWI9IlRlbXBvIikNCmBgYA0KDQoNCg0KDQoNCmBgYHtyfQ0KYWNmbWExIDwtIGFjZih5X21hMSwgbGFnLm1heD03LCBwbG90PUZBTFNFKQ0KYWNmbWExIDwtIHJvdW5kKGFjZm1hMVtbImFjZiJdXSwzKQ0KdGVvcmljMSA8LSBjKHJvdW5kKGFqdXN0ZS55X21hMSRjb2VmWzFdIC8gMSArIGFqdXN0ZS55X21hMSRjb2VmWzFdXjIsIDMpLCByZXAoMCw2KSkNCmBgYA0KDQojIyMjIyBUYWJlbGEgMiAtIFZhbG9yZXMgVGXDs3JpY29zIGUgRXN0aW1hZG9zIENvbXB1dGFjaW9uYWxtZW50ZSBwYXJhIG8gbW9kZWxvIE1BKDEpLCAkXHRoZXRhJCA9IGByIHJvdW5kKGFqdXN0ZS55X21hMSRjb2VmWzFdLCAzKWAuDQoNCnwgICAgbiAgICAgfCAgMSAgfCAgIDIgICAgfCAgIDMgICB8ICAgNCAgICB8ICAgNSAgICB8ICAgNiAgICB8ICAgNyAgICB8DQp8Oi0tLS0tLS0tOnw6LS0tOnw6LS0tLS0tOnw6LS0tLS06fDotLS0tLS06fDotLS0tLS06fDotLS0tLS06fDotLS0tLS06fA0KfCAkXHJob19uJCB8ICBgciB0ZW9yaWMxWzFdYCAgfCBgciB0ZW9yaWMxWzJdYCAgfCBgciB0ZW9yaWMxWzNdYCAgfCBgciB0ZW9yaWMxWzRdYCAgfCAgYHIgdGVvcmljMVs1XWAgIHwgIGByIHRlb3JpYzFbNl1gIHwgIGByIHRlb3JpYzFbN11gICB8DQp8ICByJF9uJCAgIHwgIGByIGFjZm1hMVsyXWAgIHwgYHIgYWNmbWExWzNdYCAgfCAgYHIgYWNmbWExWzRdYCB8IGByIGFjZm1hMVs1XWAgIHwgIGByIGFjZm1hMVs2XWAgIHwgIGByIGFjZm1hMVs3XWAgfCAgYHIgYWNmbWExWzhdYCAgfA0KfCAgJHxccmhvX24gLSByX258JCAgIHwgIGByIGFicyh0ZW9yaWMxWzFdIC0gYWNmbWExWzJdKWAgIHwgIGByIGFicyh0ZW9yaWMxWzJdIC0gYWNmbWExWzNdKWAgfCAgYHIgYWJzKHRlb3JpYzFbM10gLSBhY2ZtYTFbNF0pYCB8IGByIGFicyh0ZW9yaWMxWzRdIC0gYWNmbWExWzVdKWAgIHwgIGByIGFicyh0ZW9yaWMxWzVdIC0gYWNmbWExWzZdKWAgIHwgIGByIGFicyh0ZW9yaWMxWzZdIC0gYWNmbWExWzddKWAgfCAgYHIgYWJzKHRlb3JpYzFbN10gLSBhY2ZtYTFbOF0pYCAgfA0KDQoNCk9uZGUgJFxyaG9fe2p9JCBzw6NvIG9zIHZhbG9yZXMgcmVhaXMgZGFzIGF1dG8gY29ycmVsYcOnw7VlcyBkYSBzw6lyaWUgZSAkcl97an0kIHPDo28gb3MgdmFsb3JlcyBlc3RpbWFkb3MuDQoNCmBgYHtyIHJlc3VsdHMgPSAiaGlkZSJ9DQphY2YoeV9tYTEpJGFjDQpwYWNmKHlfbWExKSRhY2YNCmBgYA0KDQoNCiMjIyMgQWdvcmEgcGFyYSB0b3JuYXJtb3Mgbm9zc28gJFx0aGV0YSQgbmVnYXRpdm8gZmF6ZW1vczoNCg0KYGBge3J9DQpzZXQuc2VlZCgyMDIzKQ0KDQp5X21hMiA9IGFyaW1hLnNpbShuID0gMTAwLCBsaXN0KGFyID0gYygtMC41KSkpDQphanVzdGUueV9tYTIgPSBhcmltYSh5X21hMiwgIG9yZGVyID0gYygwLCAwLCAxKSkNCmFqdXN0ZS55X21hMiRjb2VmDQpwbG90KHlfbWEyLCB5bGFiPSJTw6lyaWUgdGVtcG9yYWwiLCB4bGFiPSJUZW1wbyIpDQpgYGANCg0KYGBge3J9DQphY2ZtYTIgPC0gYWNmKHlfbWEyLCBsYWcubWF4PTcsIHBsb3Q9RkFMU0UpDQphY2ZtYTIgPC0gcm91bmQoYWNmbWEyW1siYWNmIl1dLDMpDQp0ZW9yaWMyIDwtIGMocm91bmQoYWp1c3RlLnlfbWEyJGNvZWZbMV0gLyAxICsgYWp1c3RlLnlfbWEyJGNvZWZbMV1eMiwgMyksIHJlcCgwLDYpKQ0KYGBgDQoNCiMjIyMjIFRhYmVsYSAzIC0gVmFsb3JlcyBUZcOzcmljb3MgZSBFc3RpbWFkb3MgQ29tcHV0YWNpb25hbG1lbnRlIHBhcmEgbyBtb2RlbG8gTUEoMSksICRcdGhldGEkID0gYHIgcm91bmQoYWp1c3RlLnlfbWEyJGNvZWZbMV0sIDMpYC4NCg0KfCAgICBuICAgICB8ICAxICB8ICAgMiAgICB8ICAgMyAgIHwgICA0ICAgIHwgICA1ICAgIHwgICA2ICAgIHwgICA3ICAgIHwNCnw6LS0tLS0tLS06fDotLS06fDotLS0tLS06fDotLS0tLTp8Oi0tLS0tLTp8Oi0tLS0tLTp8Oi0tLS0tLTp8Oi0tLS0tLTp8DQp8ICRccmhvX24kIHwgIGByIHRlb3JpYzJbMV1gICB8IGByIHRlb3JpYzJbMl1gICB8IGByIHRlb3JpYzJbM11gICB8IGByIHRlb3JpYzJbNF1gICB8ICBgciB0ZW9yaWMyWzVdYCAgfCAgYHIgdGVvcmljMls2XWAgfCAgYHIgdGVvcmljMls3XWAgIHwNCnwgIHIkX24kICAgfCAgYHIgYWNmbWEyWzJdYCAgfCBgciBhY2ZtYTJbM11gICB8ICBgciBhY2ZtYTJbNF1gIHwgYHIgYWNmbWEyWzVdYCAgfCAgYHIgYWNmbWEyWzZdYCAgfCAgYHIgYWNmbWEyWzddYCB8ICBgciBhY2ZtYTJbOF1gICB8DQp8ICAkfFxyaG9fbiAtIHJfbnwkICAgfCAgYHIgYWJzKHRlb3JpYzJbMV0gLSBhY2ZtYTJbMl0pYCAgfCAgYHIgYWJzKHRlb3JpYzJbMl0gLSBhY2ZtYTJbM10pYCB8ICBgciBhYnModGVvcmljMlszXSAtIGFjZm1hMls0XSlgIHwgYHIgYWJzKHRlb3JpYzJbNF0gLSBhY2ZtYTJbNV0pYCAgfCAgYHIgYWJzKHRlb3JpYzJbNV0gLSBhY2ZtYTJbNl0pYCAgfCAgYHIgYWJzKHRlb3JpYzJbNl0gLSBhY2ZtYTJbN10pYCB8ICBgciBhYnModGVvcmljMls3XSAtIGFjZm1hMls4XSlgICB8DQoNCg0KT25kZSAkXHJob197an0kIHPDo28gb3MgdmFsb3JlcyByZWFpcyBkYXMgYXV0byBjb3JyZWxhw6fDtWVzIGRhIHPDqXJpZSBlICRyX3tqfSQgc8OjbyBvcyB2YWxvcmVzIGVzdGltYWRvcy4NCg0KDQpgYGB7ciByZXN1bHRzID0gImhpZGUifQ0KYWNmKHlfbWExKSRhYw0KcGFjZih5X21hMSkkYWNmDQpgYGANCg0KDQoNCg0KIyMjIyBEZXNlbnZvbHZpZG8gcG9yOiBFcmFsZG8gUm9jaGEg