require(ggplot2)
require(ggthemes)
require(dplyr)
require(magrittr)
source("InformationTheory.R")
source("Bandt-Pompe.R")
Blue Chips
Nosso objetivo neste primeiro experimento foi avaliar sequências que venham de um mesmo processo subjacente. Para isso, analisamos duas diferentes configurações de dados: 1. Ações provenientes do mesmo setor financeiro e 2. Diferentes ações da mesma empresa. Outro ponto considerado também foi a fonte destas ações. Foram consideradas apenas sequências históricas de empresas de Blue Chips.
As ações Blue Chips são consideradas as mais importantes da Bolsa de Valores, são responsáveis por movimentar grandes volumes na Bolsa. No entanto, é claramente possível que essas ações por terem uma grande oferta e demanda, tenham preços mais elevados. Para os especialistas em investimentos, essa classificação indica que essas ações são consideradas aplicações de primeira linha. Resumidamente, são muito procuradas e, por isso, têm bastante liquidez, ou seja, existe um forte interesse dos investidores em negociar essas ações. A classificação de Blue Chips é especulativa e surge a partir de um consenso do mercado.
Análise de ações da Usiminas
Usiminas é uma empresa do setor siderúrgico e na B3, a companhia está listada com ações ordinárias (USIM3) e preferenciais de classe A (USIM5) e B (USIM6).
Enquanto as ações USIM3 têm direito a voto, as ações USIM5 e USIM6 recebem dividendos 10% maiores do que as ordinárias. Além disso, USIM6 tem prioridade no reembolso do capital, sem direito a prêmio no caso de liquidação da companhia. Por outro lado, USIM5 só tem essa prioridade depois que as ações classe B forem atendidas.
Fonte: https://investnews.com.br/cotacao/usim3-usiminas/.
usim3 = read.csv("../../Data/R/stock markets/USIM3.SA.csv")
usim5 = read.csv("../../Data/R/stock markets/USIM5.SA.csv")
usim6 = read.csv("../../Data/R/stock markets/USIM6.SA.csv")
usim3 %<>%
mutate(Date= as.Date(Date, format= "%Y-%m-%d"))
usim5 %<>%
mutate(Date= as.Date(Date, format= "%Y-%m-%d"))
usim6 %<>%
mutate(Date= as.Date(Date, format= "%Y-%m-%d"))
Visualização das sequências
ggplot(data = usim3, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Usinas Siderúrgicas de Minas Gerais S.A. (USIM3.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

ggplot(data = usim5, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Usinas Siderúrgicas de Minas Gerais S.A. (USIM5.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

ggplot(data = usim6, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Usinas Siderúrgicas de Minas Gerais S.A. (USIM6.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

Plano Entropia-Complexidade
p_usim3 <- bandt.pompe(unlist(usim3["Close"]), dimension = 3, delay = 1)
H_usim3 <- shannon.entropy.normalized(p_usim3)
C_usim3 <- Ccomplexity(p_usim3)
p_usim5 <- bandt.pompe(unlist(usim5["Close"]), dimension = 3, delay = 1)
H_usim5 <- shannon.entropy.normalized(p_usim5)
C_usim5 <- Ccomplexity(p_usim5)
p_usim6 <- bandt.pompe(unlist(usim6["Close"]), dimension = 3, delay = 1)
H_usim6 <- shannon.entropy.normalized(p_usim6)
C_usim6 <- Ccomplexity(p_usim6)
HC_usim = data.frame(
H = c(H_usim3, H_usim5, H_usim6),
C = c(C_usim3, C_usim5, C_usim6),
Stock_market = c("USIM3.SA", "USIM5.SA", "USIM6.SA")
)
ggplot(data = HC_usim, aes(x=H, y=C, color=Stock_market)) +
geom_point(size = 2) +
xlab(expression(italic(H))) +
ylab(expression(italic(C))) +
theme_few(base_size = 15, base_family = "serif") +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5), legend.position="bottom", legend.title = element_blank())

Análise de ações da Gerdau
A Gerdau é uma das maiores empresas brasileiras produtoras de aço e uma das principais fornecedoras de aços longos nas Américas e de aços especiais no mundo. As ações ordinárias (GGBR3) e as preferenciais (GGBR4) da Gerdau estão listadas na B3.
Fonte: https://www.infomoney.com.br/cotacoes/b3/acao/gerdau-ggbr4//.
ggbr3 = read.csv("../../Data/R/stock markets/GGBR3.SA.csv")
ggbr4 = read.csv("../../Data/R/stock markets/GGBR4.SA.csv")
ggbr3 %<>%
mutate(Date= as.Date(Date, format= "%Y-%m-%d"))
ggbr4 %<>%
mutate(Date= as.Date(Date, format= "%Y-%m-%d"))
Visualização das sequências
ggplot(data = ggbr3, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Gerdau S.A. (GGBR3.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

ggplot(data = ggbr4, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Gerdau S.A. (GGBR4.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

Plano Entropia-Complexidade
p_ggbr3 <- bandt.pompe(unlist(ggbr3["Close"]), dimension = 3, delay = 1)
H_ggbr3 <- shannon.entropy.normalized(p_ggbr3)
C_ggbr3 <- Ccomplexity(p_ggbr3)
p_ggbr4 <- bandt.pompe(unlist(ggbr4["Close"]), dimension = 3, delay = 1)
H_ggbr4 <- shannon.entropy.normalized(p_ggbr4)
C_ggbr4 <- Ccomplexity(p_ggbr4)
HC_ggbr = data.frame(
H = c(H_ggbr3, H_ggbr4),
C = c(C_ggbr3, C_ggbr4),
Stock_market = c("GGBR3.SA", "GGBR4.SA")
)
ggplot(data = HC_ggbr, aes(x=H, y=C, color=Stock_market)) +
geom_point(size = 2) +
xlab(expression(italic(H))) +
ylab(expression(italic(C))) +
theme_few(base_size = 15, base_family = "serif") +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5), legend.position="bottom", legend.title = element_blank())

Análise de sequências do mesmo setor financeiro
bbas3 = read.csv("../../Data/R/stock markets/BBAS3.SA.csv")
bbdc4 = read.csv("../../Data/R/stock markets/BBDC4.SA.csv")
itub4 = read.csv("../../Data/R/stock markets/ITUB4.SA.csv")
Visualização das sequências
ggplot(data = bbas3, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Banco do Brasil S.A. (BBAS3.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

ggplot(data = bbdc4, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Banco Bradesco S.A. (BBDC4.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

ggplot(data = itub4, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Itaú Unibanco Holding S.A. (ITUB4.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

Plano Entropia-Complexidade
p_bbas3 <- bandt.pompe(unlist(bbas3["Close"]), dimension = 3, delay = 1)
H_bbas3 <- shannon.entropy.normalized(p_bbas3)
C_bbas3 <- Ccomplexity(p_bbas3)
p_bbdc4 <- bandt.pompe(unlist(bbdc4["Close"]), dimension = 3, delay = 1)
H_bbdc4 <- shannon.entropy.normalized(p_bbdc4)
C_bbdc4 <- Ccomplexity(p_bbdc4)
p_itub4 <- bandt.pompe(unlist(itub4["Close"]), dimension = 3, delay = 1)
H_itub4 <- shannon.entropy.normalized(p_itub4)
C_itub4 <- Ccomplexity(p_itub4)
HC_bancos = data.frame(
H = c(H_bbas3, H_bbdc4, H_itub4),
C = c(C_bbas3, C_bbdc4, C_itub4),
Stock_market = c("BBAS3.SA", "BBDC4.SA", "ITUB4.SA")
)
ggplot(data = HC_bancos, aes(x=H, y=C, color=Stock_market)) +
geom_point(size = 2) +
xlab(expression(italic(H))) +
ylab(expression(italic(C))) +
theme_few(base_size = 15, base_family = "serif") +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5), legend.position="bottom", legend.title = element_blank())

Small Caps
O segundo experimento realizado foi relacionado a análise de sequências advindas de processos totalmente distintos. Para isso, obtemos sequências históricas de duas empresas Small Caps, que geralmente apresentam uma alta volatilidade no mercado financeiro.
As ações Small Caps são aquelas ligadas às corporações de pequeno porte. São mais baratas, menos procuradas e não têm tanta liquidez quanto uma Blue Chip, por exemplo. Elas também costumam ser chamadas de ações de segunda ou terceira linha.
Análise de sequências do setor financeiro
bmgb4 = read.csv("../../Data/R/stock markets/BMGB4.SA.csv")
brsr6 = read.csv("../../Data/R/stock markets/BRSR6.SA.csv")
bmgb4 = bmgb4 %<>%
mutate(Date= as.Date(Date, format= "%Y-%m-%d"))
brsr6 = brsr6 %<>%
mutate(Date= as.Date(Date, format= "%Y-%m-%d"))
Visualização das sequências
ggplot(data = bmgb4, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Banco BMG S.A. (BMGB4.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

ggplot(data = brsr6, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Banco do Estado do Rio Grande do Sul S.A. (BRSR6.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

Plano Entropia-Complexidade
p_bmgb4 <- bandt.pompe(unlist(bmgb4["Close"]), dimension = 3, delay = 1)
H_bmgb4 <- shannon.entropy.normalized(p_bmgb4)
C_bmgb4 <- Ccomplexity(p_bmgb4)
p_brsr6 <- bandt.pompe(unlist(brsr6["Close"]), dimension = 3, delay = 1)
H_brsr6 <- shannon.entropy.normalized(p_brsr6)
C_brsr6 <- Ccomplexity(p_brsr6)
HC_bancos_sc = data.frame(
H = c(H_bmgb4, H_brsr6),
C = c(C_bmgb4, C_brsr6),
Stock_market = c("BMGB4.SA", "BRSR6.SA")
)
ggplot(data = HC_bancos_sc, aes(x=H, y=C, color=Stock_market)) +
geom_point(size = 2) +
xlab(expression(italic(H))) +
ylab(expression(italic(C))) +
theme_few(base_size = 15, base_family = "serif") +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5), legend.position="bottom", legend.title = element_blank())


Análise de sequências do setor de companhia áerea
goll4 = read.csv("../../Data/R/stock markets/GOLL4.SA.csv")
azul4 = read.csv("../../Data/R/stock markets/AZUL4.SA.csv")
goll4 %<>%
mutate(Date= as.Date(Date, format= "%Y-%m-%d"))
azul4 %<>%
mutate(Date= as.Date(Date, format= "%Y-%m-%d"))
goll4 = goll4 %>%
filter(Date >= (azul4$Date[1]))
Visualização das sequências
ggplot(data = goll4, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Gol Linhas Aéreas Inteligentes S.A. (GOLL4.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

ggplot(data = azul4, aes(x=Date, y=Close, group=1)) +
geom_line() +
xlab("") +
ggtitle("Azul S.A. (AZUL4.SA)") +
scale_x_date(date_labels = "%Y") +
theme_few() +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5))

Plano Entropia-Complexidade
p_goll4 <- bandt.pompe(unlist(goll4["Close"]), dimension = 3, delay = 1)
H_goll4 <- shannon.entropy.normalized(p_goll4)
C_goll4 <- Ccomplexity(p_goll4)
p_azul4 <- bandt.pompe(unlist(azul4["Close"]), dimension = 3, delay = 1)
H_azul4 <- shannon.entropy.normalized(p_azul4)
C_azul4 <- Ccomplexity(p_azul4)
HC_cias = data.frame(
H = c(H_goll4, H_azul4),
C = c(C_goll4, C_azul4),
Stock_market = c("GOLL4.SA", "AZUL4.SA")
)
ggplot(data = HC_cias, aes(x=H, y=C, color=Stock_market)) +
geom_point(size = 2) +
xlab(expression(italic(H))) +
ylab(expression(italic(C))) +
theme_few(base_size = 15, base_family = "serif") +
scale_colour_few() +
theme(plot.title = element_text(hjust = 0.5), legend.position="bottom", legend.title = element_blank())

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLSAKCmBgYHtyfQpyZXF1aXJlKGdncGxvdDIpCnJlcXVpcmUoZ2d0aGVtZXMpCnJlcXVpcmUoZHBseXIpCnJlcXVpcmUobWFncml0dHIpCgpzb3VyY2UoIkluZm9ybWF0aW9uVGhlb3J5LlIiKQpzb3VyY2UoIkJhbmR0LVBvbXBlLlIiKQpgYGAKCiMjIEJsdWUgQ2hpcHMKCk5vc3NvIG9iamV0aXZvIG5lc3RlIHByaW1laXJvIGV4cGVyaW1lbnRvIGZvaSBhdmFsaWFyIHNlcXXDqm5jaWFzIHF1ZSB2ZW5oYW0gZGUgdW0gbWVzbW8gcHJvY2Vzc28gc3ViamFjZW50ZS4KUGFyYSBpc3NvLCBhbmFsaXNhbW9zIGR1YXMgZGlmZXJlbnRlcyBjb25maWd1cmHDp8O1ZXMgZGUgZGFkb3M6IAoxLiBBw6fDtWVzIHByb3ZlbmllbnRlcyBkbyBtZXNtbyBzZXRvciBmaW5hbmNlaXJvIGUgCjIuIERpZmVyZW50ZXMgYcOnw7VlcyBkYSBtZXNtYSBlbXByZXNhLgpPdXRybyBwb250byBjb25zaWRlcmFkbyB0YW1iw6ltIGZvaSBhIGZvbnRlIGRlc3RhcyBhw6fDtWVzLiBGb3JhbSBjb25zaWRlcmFkYXMgYXBlbmFzIHNlcXXDqm5jaWFzIGhpc3TDs3JpY2FzIGRlIGVtcHJlc2FzIGRlIEJsdWUgQ2hpcHMuIAoKQXMgYcOnw7VlcyBCbHVlIENoaXBzIHPDo28gY29uc2lkZXJhZGFzIGFzIG1haXMgaW1wb3J0YW50ZXMgZGEgQm9sc2EgZGUgVmFsb3Jlcywgc8OjbyByZXNwb25zw6F2ZWlzIHBvciBtb3ZpbWVudGFyIGdyYW5kZXMgdm9sdW1lcyBuYSBCb2xzYS4KTm8gZW50YW50bywgw6kgY2xhcmFtZW50ZSBwb3Nzw612ZWwgcXVlIGVzc2FzIGHDp8O1ZXMgcG9yIHRlcmVtIHVtYSBncmFuZGUgb2ZlcnRhIGUgZGVtYW5kYSwgdGVuaGFtIHByZcOnb3MgbWFpcyBlbGV2YWRvcy4KUGFyYSBvcyBlc3BlY2lhbGlzdGFzIGVtIGludmVzdGltZW50b3MsIGVzc2EgY2xhc3NpZmljYcOnw6NvIGluZGljYSBxdWUgZXNzYXMgYcOnw7VlcyBzw6NvIGNvbnNpZGVyYWRhcyBhcGxpY2HDp8O1ZXMgZGUgcHJpbWVpcmEgbGluaGEuIApSZXN1bWlkYW1lbnRlLCBzw6NvIG11aXRvIHByb2N1cmFkYXMgZSwgcG9yIGlzc28sIHTDqm0gYmFzdGFudGUgbGlxdWlkZXosIG91IHNlamEsIGV4aXN0ZSB1bSBmb3J0ZSBpbnRlcmVzc2UgZG9zIGludmVzdGlkb3JlcyBlbSBuZWdvY2lhciBlc3NhcyBhw6fDtWVzLiAKQSBjbGFzc2lmaWNhw6fDo28gZGUgQmx1ZSBDaGlwcyDDqSBlc3BlY3VsYXRpdmEgZSBzdXJnZSBhIHBhcnRpciBkZSB1bSBjb25zZW5zbyBkbyBtZXJjYWRvLgoKIyMjIEFuw6FsaXNlIGRlIGHDp8O1ZXMgZGEgVXNpbWluYXMKClVzaW1pbmFzIMOpIHVtYSBlbXByZXNhIGRvIHNldG9yIHNpZGVyw7pyZ2ljbyBlIG5hIEIzLCBhIGNvbXBhbmhpYSBlc3TDoSBsaXN0YWRhIGNvbSBhw6fDtWVzIG9yZGluw6FyaWFzIChVU0lNMykgZSBwcmVmZXJlbmNpYWlzIGRlIGNsYXNzZSBBIChVU0lNNSkgZSBCIChVU0lNNikuCgpFbnF1YW50byBhcyBhw6fDtWVzIFVTSU0zIHTDqm0gZGlyZWl0byBhIHZvdG8sIGFzIGHDp8O1ZXMgVVNJTTUgZSBVU0lNNiByZWNlYmVtIGRpdmlkZW5kb3MgMTAlIG1haW9yZXMgZG8gcXVlIGFzIG9yZGluw6FyaWFzLiBBbMOpbSBkaXNzbywgVVNJTTYgdGVtIHByaW9yaWRhZGUgbm8gcmVlbWJvbHNvIGRvIGNhcGl0YWwsIHNlbSBkaXJlaXRvIGEgcHLDqm1pbyBubyBjYXNvIGRlIGxpcXVpZGHDp8OjbyBkYSBjb21wYW5oaWEuIApQb3Igb3V0cm8gbGFkbywgVVNJTTUgc8OzIHRlbSBlc3NhIHByaW9yaWRhZGUgZGVwb2lzIHF1ZSBhcyBhw6fDtWVzIGNsYXNzZSBCIGZvcmVtIGF0ZW5kaWRhcy4KCkZvbnRlOiBodHRwczovL2ludmVzdG5ld3MuY29tLmJyL2NvdGFjYW8vdXNpbTMtdXNpbWluYXMvLgoKYGBge3J9CnVzaW0zID0gcmVhZC5jc3YoIi4uLy4uL0RhdGEvUi9zdG9jayBtYXJrZXRzL1VTSU0zLlNBLmNzdiIpCnVzaW01ID0gcmVhZC5jc3YoIi4uLy4uL0RhdGEvUi9zdG9jayBtYXJrZXRzL1VTSU01LlNBLmNzdiIpCnVzaW02ID0gcmVhZC5jc3YoIi4uLy4uL0RhdGEvUi9zdG9jayBtYXJrZXRzL1VTSU02LlNBLmNzdiIpCgp1c2ltMyAlPD4lCiAgbXV0YXRlKERhdGU9IGFzLkRhdGUoRGF0ZSwgZm9ybWF0PSAiJVktJW0tJWQiKSkKCnVzaW01ICU8PiUKICBtdXRhdGUoRGF0ZT0gYXMuRGF0ZShEYXRlLCBmb3JtYXQ9ICIlWS0lbS0lZCIpKQoKdXNpbTYgJTw+JQogIG11dGF0ZShEYXRlPSBhcy5EYXRlKERhdGUsIGZvcm1hdD0gIiVZLSVtLSVkIikpCmBgYAoKIyMjIyBWaXN1YWxpemHDp8OjbyBkYXMgc2VxdcOqbmNpYXMKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IHVzaW0zLCBhZXMoeD1EYXRlLCB5PUNsb3NlLCBncm91cD0xKSkgKyAKICBnZW9tX2xpbmUoKSArCiAgeGxhYigiIikgICsKICBnZ3RpdGxlKCJVc2luYXMgU2lkZXLDunJnaWNhcyBkZSBNaW5hcyBHZXJhaXMgUy5BLiAoVVNJTTMuU0EpIikgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlWSIpICsgCiAgdGhlbWVfZmV3KCkgKyAKICBzY2FsZV9jb2xvdXJfZmV3KCkgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IHVzaW01LCBhZXMoeD1EYXRlLCB5PUNsb3NlLCBncm91cD0xKSkgKyAKICBnZW9tX2xpbmUoKSArCiAgeGxhYigiIikgICsKICBnZ3RpdGxlKCJVc2luYXMgU2lkZXLDunJnaWNhcyBkZSBNaW5hcyBHZXJhaXMgUy5BLiAoVVNJTTUuU0EpIikgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlWSIpICsgCiAgdGhlbWVfZmV3KCkgKyAKICBzY2FsZV9jb2xvdXJfZmV3KCkgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpgYGAKYGBge3J9CmdncGxvdChkYXRhID0gdXNpbTYsIGFlcyh4PURhdGUsIHk9Q2xvc2UsIGdyb3VwPTEpKSArIAogIGdlb21fbGluZSgpICsKICB4bGFiKCIiKSAgKwogIGdndGl0bGUoIlVzaW5hcyBTaWRlcsO6cmdpY2FzIGRlIE1pbmFzIEdlcmFpcyBTLkEuIChVU0lNNi5TQSkiKSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiVZIikgKyAKICB0aGVtZV9mZXcoKSArIAogIHNjYWxlX2NvbG91cl9mZXcoKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCmBgYAoKIyMjIyBQbGFubyBFbnRyb3BpYS1Db21wbGV4aWRhZGUKCmBgYHtyfQpwX3VzaW0zIDwtIGJhbmR0LnBvbXBlKHVubGlzdCh1c2ltM1siQ2xvc2UiXSksIGRpbWVuc2lvbiA9IDMsIGRlbGF5ID0gMSkKSF91c2ltMyA8LSBzaGFubm9uLmVudHJvcHkubm9ybWFsaXplZChwX3VzaW0zKQpDX3VzaW0zIDwtIENjb21wbGV4aXR5KHBfdXNpbTMpCgpwX3VzaW01IDwtIGJhbmR0LnBvbXBlKHVubGlzdCh1c2ltNVsiQ2xvc2UiXSksIGRpbWVuc2lvbiA9IDMsIGRlbGF5ID0gMSkKSF91c2ltNSA8LSBzaGFubm9uLmVudHJvcHkubm9ybWFsaXplZChwX3VzaW01KQpDX3VzaW01IDwtIENjb21wbGV4aXR5KHBfdXNpbTUpCgpwX3VzaW02IDwtIGJhbmR0LnBvbXBlKHVubGlzdCh1c2ltNlsiQ2xvc2UiXSksIGRpbWVuc2lvbiA9IDMsIGRlbGF5ID0gMSkKSF91c2ltNiA8LSBzaGFubm9uLmVudHJvcHkubm9ybWFsaXplZChwX3VzaW02KQpDX3VzaW02IDwtIENjb21wbGV4aXR5KHBfdXNpbTYpCgpIQ191c2ltID0gZGF0YS5mcmFtZSgKICBIID0gYyhIX3VzaW0zLCBIX3VzaW01LCBIX3VzaW02KSwgCiAgQyA9IGMoQ191c2ltMywgQ191c2ltNSwgQ191c2ltNiksIAogIFN0b2NrX21hcmtldCA9IGMoIlVTSU0zLlNBIiwgIlVTSU01LlNBIiwgIlVTSU02LlNBIikKKQoKZ2dwbG90KGRhdGEgPSBIQ191c2ltLCBhZXMoeD1ILCB5PUMsIGNvbG9yPVN0b2NrX21hcmtldCkpICsgCiAgZ2VvbV9wb2ludChzaXplID0gMikgKwogIHhsYWIoZXhwcmVzc2lvbihpdGFsaWMoSCkpKSArCiAgeWxhYihleHByZXNzaW9uKGl0YWxpYyhDKSkpICsKICB0aGVtZV9mZXcoYmFzZV9zaXplID0gMTUsIGJhc2VfZmFtaWx5ID0gInNlcmlmIikgICsgCiAgc2NhbGVfY29sb3VyX2ZldygpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgbGVnZW5kLnBvc2l0aW9uPSJib3R0b20iLCBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpCmBgYAoKIyMjIEFuw6FsaXNlIGRlIGHDp8O1ZXMgZGEgR2VyZGF1CgpBIEdlcmRhdSDDqSB1bWEgZGFzIG1haW9yZXMgZW1wcmVzYXMgYnJhc2lsZWlyYXMgcHJvZHV0b3JhcyBkZSBhw6dvIGUgdW1hIGRhcyBwcmluY2lwYWlzIGZvcm5lY2Vkb3JhcyBkZSBhw6dvcyBsb25nb3MgbmFzIEFtw6lyaWNhcyBlIGRlIGHDp29zIGVzcGVjaWFpcyBubyBtdW5kby4KQXMgYcOnw7VlcyBvcmRpbsOhcmlhcyAoR0dCUjMpIGUgYXMgcHJlZmVyZW5jaWFpcyAoR0dCUjQpIGRhIEdlcmRhdSBlc3TDo28gbGlzdGFkYXMgbmEgQjMuIAoKRm9udGU6IGh0dHBzOi8vd3d3LmluZm9tb25leS5jb20uYnIvY290YWNvZXMvYjMvYWNhby9nZXJkYXUtZ2dicjQvLy4KCgpgYGB7cn0KZ2dicjMgPSByZWFkLmNzdigiLi4vLi4vRGF0YS9SL3N0b2NrIG1hcmtldHMvR0dCUjMuU0EuY3N2IikKZ2dicjQgPSByZWFkLmNzdigiLi4vLi4vRGF0YS9SL3N0b2NrIG1hcmtldHMvR0dCUjQuU0EuY3N2IikKCmdnYnIzICU8PiUKICBtdXRhdGUoRGF0ZT0gYXMuRGF0ZShEYXRlLCBmb3JtYXQ9ICIlWS0lbS0lZCIpKQoKZ2dicjQgJTw+JQogIG11dGF0ZShEYXRlPSBhcy5EYXRlKERhdGUsIGZvcm1hdD0gIiVZLSVtLSVkIikpCmBgYAoKIyMjIyBWaXN1YWxpemHDp8OjbyBkYXMgc2VxdcOqbmNpYXMKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IGdnYnIzLCBhZXMoeD1EYXRlLCB5PUNsb3NlLCBncm91cD0xKSkgKyAKICBnZW9tX2xpbmUoKSArCiAgeGxhYigiIikgICsKICBnZ3RpdGxlKCJHZXJkYXUgUy5BLiAoR0dCUjMuU0EpIikgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlWSIpICsgCiAgdGhlbWVfZmV3KCkgKyAKICBzY2FsZV9jb2xvdXJfZmV3KCkgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IGdnYnI0LCBhZXMoeD1EYXRlLCB5PUNsb3NlLCBncm91cD0xKSkgKyAKICBnZW9tX2xpbmUoKSArCiAgeGxhYigiIikgICsKICBnZ3RpdGxlKCJHZXJkYXUgUy5BLiAoR0dCUjQuU0EpIikgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlWSIpICsgCiAgdGhlbWVfZmV3KCkgKyAKICBzY2FsZV9jb2xvdXJfZmV3KCkgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpgYGAKCiMjIyMgUGxhbm8gRW50cm9waWEtQ29tcGxleGlkYWRlCgpgYGB7cn0KcF9nZ2JyMyA8LSBiYW5kdC5wb21wZSh1bmxpc3QoZ2dicjNbIkNsb3NlIl0pLCBkaW1lbnNpb24gPSAzLCBkZWxheSA9IDEpCkhfZ2dicjMgPC0gc2hhbm5vbi5lbnRyb3B5Lm5vcm1hbGl6ZWQocF9nZ2JyMykKQ19nZ2JyMyA8LSBDY29tcGxleGl0eShwX2dnYnIzKQoKcF9nZ2JyNCA8LSBiYW5kdC5wb21wZSh1bmxpc3QoZ2dicjRbIkNsb3NlIl0pLCBkaW1lbnNpb24gPSAzLCBkZWxheSA9IDEpCkhfZ2dicjQgPC0gc2hhbm5vbi5lbnRyb3B5Lm5vcm1hbGl6ZWQocF9nZ2JyNCkKQ19nZ2JyNCA8LSBDY29tcGxleGl0eShwX2dnYnI0KQoKSENfZ2diciA9IGRhdGEuZnJhbWUoCiAgSCA9IGMoSF9nZ2JyMywgSF9nZ2JyNCksIAogIEMgPSBjKENfZ2dicjMsIENfZ2dicjQpLCAKICBTdG9ja19tYXJrZXQgPSBjKCJHR0JSMy5TQSIsICJHR0JSNC5TQSIpCikKCmdncGxvdChkYXRhID0gSENfZ2diciwgYWVzKHg9SCwgeT1DLCBjb2xvcj1TdG9ja19tYXJrZXQpKSArIAogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsKICB4bGFiKGV4cHJlc3Npb24oaXRhbGljKEgpKSkgKwogIHlsYWIoZXhwcmVzc2lvbihpdGFsaWMoQykpKSArCiAgdGhlbWVfZmV3KGJhc2Vfc2l6ZSA9IDE1LCBiYXNlX2ZhbWlseSA9ICJzZXJpZiIpICArIAogIHNjYWxlX2NvbG91cl9mZXcoKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksIGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIiwgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKQpgYGAKCiMjIyBBbsOhbGlzZSBkZSBzZXF1w6puY2lhcyBkbyBtZXNtbyBzZXRvciBmaW5hbmNlaXJvCgpgYGB7cn0KYmJhczMgPSByZWFkLmNzdigiLi4vLi4vRGF0YS9SL3N0b2NrIG1hcmtldHMvQkJBUzMuU0EuY3N2IikKYmJkYzQgPSByZWFkLmNzdigiLi4vLi4vRGF0YS9SL3N0b2NrIG1hcmtldHMvQkJEQzQuU0EuY3N2IikKaXR1YjQgPSByZWFkLmNzdigiLi4vLi4vRGF0YS9SL3N0b2NrIG1hcmtldHMvSVRVQjQuU0EuY3N2IikKCmJiYXMzICU8PiUKICBtdXRhdGUoRGF0ZT0gYXMuRGF0ZShEYXRlLCBmb3JtYXQ9ICIlWS0lbS0lZCIpKQoKYmJkYzQgJTw+JQogIG11dGF0ZShEYXRlPSBhcy5EYXRlKERhdGUsIGZvcm1hdD0gIiVZLSVtLSVkIikpCgppdHViNCAlPD4lCiAgbXV0YXRlKERhdGU9IGFzLkRhdGUoRGF0ZSwgZm9ybWF0PSAiJVktJW0tJWQiKSkKYGBgCgojIyMjIFZpc3VhbGl6YcOnw6NvIGRhcyBzZXF1w6puY2lhcwoKYGBge3J9CmdncGxvdChkYXRhID0gYmJhczMsIGFlcyh4PURhdGUsIHk9Q2xvc2UsIGdyb3VwPTEpKSArIAogIGdlb21fbGluZSgpICsKICB4bGFiKCIiKSAgKwogIGdndGl0bGUoIkJhbmNvIGRvIEJyYXNpbCBTLkEuIChCQkFTMy5TQSkiKSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiVZIikgKyAKICB0aGVtZV9mZXcoKSArIAogIHNjYWxlX2NvbG91cl9mZXcoKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gYmJkYzQsIGFlcyh4PURhdGUsIHk9Q2xvc2UsIGdyb3VwPTEpKSArIAogIGdlb21fbGluZSgpICsKICB4bGFiKCIiKSAgKwogIGdndGl0bGUoIkJhbmNvIEJyYWRlc2NvIFMuQS4gKEJCREM0LlNBKSIpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJVkiKSArIAogIHRoZW1lX2ZldygpICsgCiAgc2NhbGVfY29sb3VyX2ZldygpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBpdHViNCwgYWVzKHg9RGF0ZSwgeT1DbG9zZSwgZ3JvdXA9MSkpICsgCiAgZ2VvbV9saW5lKCkgKwogIHhsYWIoIiIpICArCiAgZ2d0aXRsZSgiSXRhw7ogVW5pYmFuY28gSG9sZGluZyBTLkEuIChJVFVCNC5TQSkiKSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiVZIikgKyAKICB0aGVtZV9mZXcoKSArIAogIHNjYWxlX2NvbG91cl9mZXcoKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCmBgYAoKIyMjIyBQbGFubyBFbnRyb3BpYS1Db21wbGV4aWRhZGUKCmBgYHtyfQpwX2JiYXMzIDwtIGJhbmR0LnBvbXBlKHVubGlzdChiYmFzM1siQ2xvc2UiXSksIGRpbWVuc2lvbiA9IDMsIGRlbGF5ID0gMSkKSF9iYmFzMyA8LSBzaGFubm9uLmVudHJvcHkubm9ybWFsaXplZChwX2JiYXMzKQpDX2JiYXMzIDwtIENjb21wbGV4aXR5KHBfYmJhczMpCgpwX2JiZGM0IDwtIGJhbmR0LnBvbXBlKHVubGlzdChiYmRjNFsiQ2xvc2UiXSksIGRpbWVuc2lvbiA9IDMsIGRlbGF5ID0gMSkKSF9iYmRjNCA8LSBzaGFubm9uLmVudHJvcHkubm9ybWFsaXplZChwX2JiZGM0KQpDX2JiZGM0IDwtIENjb21wbGV4aXR5KHBfYmJkYzQpCgpwX2l0dWI0IDwtIGJhbmR0LnBvbXBlKHVubGlzdChpdHViNFsiQ2xvc2UiXSksIGRpbWVuc2lvbiA9IDMsIGRlbGF5ID0gMSkKSF9pdHViNCA8LSBzaGFubm9uLmVudHJvcHkubm9ybWFsaXplZChwX2l0dWI0KQpDX2l0dWI0IDwtIENjb21wbGV4aXR5KHBfaXR1YjQpCgpIQ19iYW5jb3MgPSBkYXRhLmZyYW1lKAogIEggPSBjKEhfYmJhczMsIEhfYmJkYzQsIEhfaXR1YjQpLCAKICBDID0gYyhDX2JiYXMzLCBDX2JiZGM0LCBDX2l0dWI0KSwgCiAgU3RvY2tfbWFya2V0ID0gYygiQkJBUzMuU0EiLCAiQkJEQzQuU0EiLCAiSVRVQjQuU0EiKQopCgpnZ3Bsb3QoZGF0YSA9IEhDX2JhbmNvcywgYWVzKHg9SCwgeT1DLCBjb2xvcj1TdG9ja19tYXJrZXQpKSArIAogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsKICB4bGFiKGV4cHJlc3Npb24oaXRhbGljKEgpKSkgKwogIHlsYWIoZXhwcmVzc2lvbihpdGFsaWMoQykpKSArCiAgdGhlbWVfZmV3KGJhc2Vfc2l6ZSA9IDE1LCBiYXNlX2ZhbWlseSA9ICJzZXJpZiIpICArIAogIHNjYWxlX2NvbG91cl9mZXcoKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksIGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIiwgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKQpgYGAKIyMgU21hbGwgQ2FwcwoKTyBzZWd1bmRvIGV4cGVyaW1lbnRvIHJlYWxpemFkbyBmb2kgcmVsYWNpb25hZG8gYSBhbsOhbGlzZSBkZSBzZXF1w6puY2lhcyBhZHZpbmRhcyBkZSBwcm9jZXNzb3MgdG90YWxtZW50ZSBkaXN0aW50b3MuClBhcmEgaXNzbywgb2J0ZW1vcyBzZXF1w6puY2lhcyBoaXN0w7NyaWNhcyBkZSBkdWFzIGVtcHJlc2FzIFNtYWxsIENhcHMsIHF1ZSBnZXJhbG1lbnRlIGFwcmVzZW50YW0gdW1hIGFsdGEgdm9sYXRpbGlkYWRlIG5vIG1lcmNhZG8gZmluYW5jZWlyby4KCkFzIGHDp8O1ZXMgU21hbGwgQ2FwcyBzw6NvIGFxdWVsYXMgbGlnYWRhcyDDoHMgY29ycG9yYcOnw7VlcyBkZSBwZXF1ZW5vIHBvcnRlLiAKU8OjbyBtYWlzIGJhcmF0YXMsIG1lbm9zIHByb2N1cmFkYXMgZSBuw6NvIHTDqm0gdGFudGEgbGlxdWlkZXogcXVhbnRvIHVtYSBCbHVlIENoaXAsIHBvciBleGVtcGxvLiAKRWxhcyB0YW1iw6ltIGNvc3R1bWFtIHNlciBjaGFtYWRhcyBkZSBhw6fDtWVzIGRlIHNlZ3VuZGEgb3UgdGVyY2VpcmEgbGluaGEuCgojIyMgQW7DoWxpc2UgZGUgc2VxdcOqbmNpYXMgZG8gc2V0b3IgZmluYW5jZWlybwoKYGBge3J9CmJtZ2I0ID0gcmVhZC5jc3YoIi4uLy4uL0RhdGEvUi9zdG9jayBtYXJrZXRzL0JNR0I0LlNBLmNzdiIpCmJyc3I2ID0gcmVhZC5jc3YoIi4uLy4uL0RhdGEvUi9zdG9jayBtYXJrZXRzL0JSU1I2LlNBLmNzdiIpCgpibWdiNCA9IGJtZ2I0ICU8PiUKICBtdXRhdGUoRGF0ZT0gYXMuRGF0ZShEYXRlLCBmb3JtYXQ9ICIlWS0lbS0lZCIpKQoKYnJzcjYgPSBicnNyNiAlPD4lCiAgbXV0YXRlKERhdGU9IGFzLkRhdGUoRGF0ZSwgZm9ybWF0PSAiJVktJW0tJWQiKSkKCmJyc3I2ID0gYnJzcjYgJT4lCiAgZmlsdGVyKERhdGUgPj0gKGJtZ2I0JERhdGVbMV0pKQpgYGAKCiMjIyMgVmlzdWFsaXphw6fDo28gZGFzIHNlcXXDqm5jaWFzCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBibWdiNCwgYWVzKHg9RGF0ZSwgeT1DbG9zZSwgZ3JvdXA9MSkpICsgCiAgZ2VvbV9saW5lKCkgKwogIHhsYWIoIiIpICArCiAgZ2d0aXRsZSgiQmFuY28gQk1HIFMuQS4gKEJNR0I0LlNBKSIpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJVkiKSArIAogIHRoZW1lX2ZldygpICsgCiAgc2NhbGVfY29sb3VyX2ZldygpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBicnNyNiwgYWVzKHg9RGF0ZSwgeT1DbG9zZSwgZ3JvdXA9MSkpICsgCiAgZ2VvbV9saW5lKCkgKwogIHhsYWIoIiIpICArCiAgZ2d0aXRsZSgiQmFuY28gZG8gRXN0YWRvIGRvIFJpbyBHcmFuZGUgZG8gU3VsIFMuQS4gKEJSU1I2LlNBKSIpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJVkiKSArIAogIHRoZW1lX2ZldygpICsgCiAgc2NhbGVfY29sb3VyX2ZldygpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKYGBgCgojIyMjIFBsYW5vIEVudHJvcGlhLUNvbXBsZXhpZGFkZQoKYGBge3J9CnBfYm1nYjQgPC0gYmFuZHQucG9tcGUodW5saXN0KGJtZ2I0WyJDbG9zZSJdKSwgZGltZW5zaW9uID0gMywgZGVsYXkgPSAxKQpIX2JtZ2I0IDwtIHNoYW5ub24uZW50cm9weS5ub3JtYWxpemVkKHBfYm1nYjQpCkNfYm1nYjQgPC0gQ2NvbXBsZXhpdHkocF9ibWdiNCkKCnBfYnJzcjYgPC0gYmFuZHQucG9tcGUodW5saXN0KGJyc3I2WyJDbG9zZSJdKSwgZGltZW5zaW9uID0gMywgZGVsYXkgPSAxKQpIX2Jyc3I2IDwtIHNoYW5ub24uZW50cm9weS5ub3JtYWxpemVkKHBfYnJzcjYpCkNfYnJzcjYgPC0gQ2NvbXBsZXhpdHkocF9icnNyNikKCkhDX2JhbmNvc19zYyA9IGRhdGEuZnJhbWUoCiAgSCA9IGMoSF9ibWdiNCwgSF9icnNyNiksIAogIEMgPSBjKENfYm1nYjQsIENfYnJzcjYpLCAKICBTdG9ja19tYXJrZXQgPSBjKCJCTUdCNC5TQSIsICJCUlNSNi5TQSIpCikKCmdncGxvdChkYXRhID0gSENfYmFuY29zX3NjLCBhZXMoeD1ILCB5PUMsIGNvbG9yPVN0b2NrX21hcmtldCkpICsgCiAgZ2VvbV9wb2ludChzaXplID0gMikgKwogIHhsYWIoZXhwcmVzc2lvbihpdGFsaWMoSCkpKSArCiAgeWxhYihleHByZXNzaW9uKGl0YWxpYyhDKSkpICsKICB0aGVtZV9mZXcoYmFzZV9zaXplID0gMTUsIGJhc2VfZmFtaWx5ID0gInNlcmlmIikgICsgCiAgc2NhbGVfY29sb3VyX2ZldygpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgbGVnZW5kLnBvc2l0aW9uPSJib3R0b20iLCBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpCmBgYAoKCiMjIyBBbsOhbGlzZSBkZSBzZXF1w6puY2lhcyBkbyBzZXRvciBkZSBjb21wYW5oaWEgw6FlcmVhCgpgYGB7cn0KZ29sbDQgPSByZWFkLmNzdigiLi4vLi4vRGF0YS9SL3N0b2NrIG1hcmtldHMvR09MTDQuU0EuY3N2IikKYXp1bDQgPSByZWFkLmNzdigiLi4vLi4vRGF0YS9SL3N0b2NrIG1hcmtldHMvQVpVTDQuU0EuY3N2IikKCmdvbGw0ICU8PiUKICBtdXRhdGUoRGF0ZT0gYXMuRGF0ZShEYXRlLCBmb3JtYXQ9ICIlWS0lbS0lZCIpKQoKYXp1bDQgJTw+JQogIG11dGF0ZShEYXRlPSBhcy5EYXRlKERhdGUsIGZvcm1hdD0gIiVZLSVtLSVkIikpCgpnb2xsNCA9IGdvbGw0ICU+JQogIGZpbHRlcihEYXRlID49IChhenVsNCREYXRlWzFdKSkKYGBgCgojIyMjIFZpc3VhbGl6YcOnw6NvIGRhcyBzZXF1w6puY2lhcwoKYGBge3J9CmdncGxvdChkYXRhID0gZ29sbDQsIGFlcyh4PURhdGUsIHk9Q2xvc2UsIGdyb3VwPTEpKSArIAogIGdlb21fbGluZSgpICsKICB4bGFiKCIiKSAgKwogIGdndGl0bGUoIkdvbCBMaW5oYXMgQcOpcmVhcyBJbnRlbGlnZW50ZXMgUy5BLiAoR09MTDQuU0EpIikgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlWSIpICsgCiAgdGhlbWVfZmV3KCkgKyAKICBzY2FsZV9jb2xvdXJfZmV3KCkgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IGF6dWw0LCBhZXMoeD1EYXRlLCB5PUNsb3NlLCBncm91cD0xKSkgKyAKICBnZW9tX2xpbmUoKSArCiAgeGxhYigiIikgICsKICBnZ3RpdGxlKCJBenVsIFMuQS4gKEFaVUw0LlNBKSIpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJVkiKSArIAogIHRoZW1lX2ZldygpICsgCiAgc2NhbGVfY29sb3VyX2ZldygpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKYGBgCgojIyMjIFBsYW5vIEVudHJvcGlhLUNvbXBsZXhpZGFkZQoKYGBge3J9CnBfZ29sbDQgPC0gYmFuZHQucG9tcGUodW5saXN0KGdvbGw0WyJDbG9zZSJdKSwgZGltZW5zaW9uID0gMywgZGVsYXkgPSAxKQpIX2dvbGw0IDwtIHNoYW5ub24uZW50cm9weS5ub3JtYWxpemVkKHBfZ29sbDQpCkNfZ29sbDQgPC0gQ2NvbXBsZXhpdHkocF9nb2xsNCkKCnBfYXp1bDQgPC0gYmFuZHQucG9tcGUodW5saXN0KGF6dWw0WyJDbG9zZSJdKSwgZGltZW5zaW9uID0gMywgZGVsYXkgPSAxKQpIX2F6dWw0IDwtIHNoYW5ub24uZW50cm9weS5ub3JtYWxpemVkKHBfYXp1bDQpCkNfYXp1bDQgPC0gQ2NvbXBsZXhpdHkocF9henVsNCkKCkhDX2NpYXMgPSBkYXRhLmZyYW1lKAogIEggPSBjKEhfZ29sbDQsIEhfYXp1bDQpLCAKICBDID0gYyhDX2dvbGw0LCBDX2F6dWw0KSwgCiAgU3RvY2tfbWFya2V0ID0gYygiR09MTDQuU0EiLCAiQVpVTDQuU0EiKQopCgpnZ3Bsb3QoZGF0YSA9IEhDX2NpYXMsIGFlcyh4PUgsIHk9QywgY29sb3I9U3RvY2tfbWFya2V0KSkgKyAKICBnZW9tX3BvaW50KHNpemUgPSAyKSArCiAgeGxhYihleHByZXNzaW9uKGl0YWxpYyhIKSkpICsKICB5bGFiKGV4cHJlc3Npb24oaXRhbGljKEMpKSkgKwogIHRoZW1lX2ZldyhiYXNlX3NpemUgPSAxNSwgYmFzZV9mYW1pbHkgPSAic2VyaWYiKSAgKyAKICBzY2FsZV9jb2xvdXJfZmV3KCkgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCBsZWdlbmQucG9zaXRpb249ImJvdHRvbSIsIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkKYGBg