Proposta de
projeto
O objetivo desse projeto é demonstrar minhas habilidades com R em
manipulação e estruturação de dados, bem como uma análise dos dados
apresentados. Com isso em vista, vou deixar exposto boa parte dos
códigos, mas não todos para que não fique muito repetitivo. Devo
ressaltar que embora presente em algumas tabelas, a etnia “amarela ou
indígena” não será apresentada no relatório final, uma vez que hpá uma
quantidade grande de outliers e que acabam inviesando a análise.
Todos os arquivos utilizados nesse projetos podem ser encontrados no
link abaixo.
link
para os arquivos
Método de
Análises
No decorrer da análise vou fazer várias previsões de população, pois
nem todas as tabelas apresentam dados de 2019. Para previsão da
população, vou me basear no método aritmético presente no livro
de Marcos Von Sperling (Von Sperling
2014).
Método aritmético
Este método pressupõe uma taxa de crescimento constante para os anos
que se seguem, a partir de dados conhecidos, por exemplo, a população do
último censo. Matematicamente, pode ser representado da seguinte
forma:
\[\frac{dP}{dt} = k_a\] nos quais
dP/dt representa a variação da população (P) por unidade de tempo (t), e
ka éuma constante. Considerando que P1 é a população do penúltimo censo
(ano t1) e P2, a população do último censo (ano t2), tem-se:
\[\int_{P_2}^{P_1} =
k_a\int_{t_1}^{t_2}dt\]
Integrando entre os limites definidos, tem-se:
\[P_2-P_1 = k_a(t_2-t_1)\] \[k_a = \frac{P_2-P_1}{t_2-t_1}\]
Utilizando-se a equação, chega-se à expressão geral do método
aritmético:
\[P=P_2 + k_n(t-t_2)\]
onde t representa o ano da projeção.
Este método admite que a população varie linearmente com o tempo e
pode ser utilizado para a previsão populacional para um período pequeno,
de 1 a 5 anos. Para previsão por período muito longo, toma-se acentuada
a discrepância com a realidade histórica, uma vez que o crescimento é
pressuposto ilimitado.
Para aplicar essa fórmula do método aritmético, vou usar essa função
logo a baixo.
formula <- function(P2, t2, P0, t0, t) {
Ka <- (P2 - P0) / (t2 - t0)
Pt <- P2 + Ka * (t - t2)
return(Pt)
}
Preparação do
Ambiente R
Antes de mais nada, vou carregar os pacotes que vou usar para
manipular os dados, fazer análises e gerar esse relatório.
knitr::opts_chunk$set(cache= TRUE, warning=FALSE, message=FALSE)
library(foreign)
library(lmtest)
library(readxl)
library(writexl)
library(stringi)
library(stringr)
library(purrr)
library(tidyverse)
library(knitr)
library(markdown)
library(kableExtra)
library(htmltools)
library(rstatix)
library(emmeans)
O INFOPEN
“O Infopen é um sistema de informações estatísticas do sistema
penitenciário brasileiro. O sistema, atualizado pelos gestores dos
estabelecimentos desde 2004, sintetiza informações sobre os
estabelecimentos penais e a população prisional. Em 2014, o DEPEN
reformulou a metodologia utilizada, com vistas a modernizar o
instrumento de coleta e ampliar o leque de informações coletadas. O
tratamento dos dados permitiu amplo diagnóstico da realidade estudada,
mas que não esgotam, de forma alguma, todas as possibilidades de
análise.”
Carregamentos dos
Dados Iniciais Passo a Passo
Primeiro vou criar um dicionário de estados que vou usar. Fiz isso
afim de padroniazar os nomes dos estados, pois algumas tabelas
apresentam os nomes completos, outras apresentam apenas as siglas dos
estados.
head(uf_dict, 20)
## Acre Alagoas Amapá Amazonas
## "AC" "AL" "AP" "AM"
## Bahia Ceará Distrito Federal Espírito Santo
## "BA" "CE" "DF" "ES"
## Goiás Maranhão Mato Grosso Mato Grosso do Sul
## "GO" "MA" "MT" "MS"
## Minas Gerais Pará Paraíba Paraná
## "MG" "PA" "PB" "PR"
## Pernambuco Piauí Rio de Janeiro Rio Grande do Norte
## "PE" "PI" "RJ" "RN"
Aqui a lista de colunas que vou estrair das tabelas do INFOPEN. Criei
essa lista usando manipulação com Excel.
Fazer um loop nos arquivos das tabelas do INFOPEN e listar os nomes
deles
Combinar o diretorio ao nome do arquivo
arquivos_infopen <- str_c("INFOPEN/tabelas excel/",nome_dos_arquivos_infopen)
Dar nome a cada elemento do vetor
names(arquivos_infopen) <- gsub("\\.xlsx$", "", nome_dos_arquivos_infopen)
Aplicar a função read_excel para cada elemento do vetor importando
assim todos os arquivos de uma só vez
infopen_br<- map_df(.x = arquivos_infopen, .f = read_excel, .id = "data") %>%
select("UF",data, all_of(colunas))
Reconhecendo a
Tabela
As tabelas do INFOPEN apresentam dados em painel, onde cada individo
é representado mais de uma vez.
Cada tabela do INFOPEN contém mais de 1300 colunas e aproximadamente
1500 linhas.
jun_2017 <- read_excel("INFOPEN/tabelas excel/jun 2017.xlsx")
Numero de colunas: 1332
Número de linas: 1514
Após analisar cada tabela, decidi filtrar apenas as colunas mais
interessantes para a minha analise e o resultado foi uma tabela com 8932
linhas e 328 colunas.
Começando manipular o
dataframe
Após agrupar todas as tabelas e escolher apenas as colunas que vou
utiliar, o próximo passo será transformar de formato largo para longo. O
Formato longo facilita algumas manipulações,e o formato largo outras. No
decorrer dessa análise vou utilizar os dois formatos.
infopen_2_formato_longo <-infopen_br%>%
gather(variavel , quantidade, - c(UF,data)) %>%
drop_na()
Vou resumir os valores para que sejam removidas as linhas repetidas e
obtenha-se o total de cada variavel
infopen_3_resumido <- infopen_2_formato_longo %>%
group_by(UF, data, variavel) %>%
mutate(data = gsub("dez", "dec", data))%>% ## precisei usar "dec" para que o programa entendesse que se referia ao mes de dezembro
summarise(presos = sum(quantidade, na.rm = TRUE)) %>%
merge(uf_regiao, by = "UF", all.x = TRUE)
Criar as Variáveis
Que Vou Trabalhar
Após resumir os dados e remover os ‘NAs’, chegou o momento de separar
os dados em colunas que vou utilizar.
infopen_4_final <- infopen_3_resumido %>%
rowwise() %>% ## define o escopo das operacoes seguinte, para serem trabalhadas por linha e nao colunas
filter(!str_detect(variavel, "Não_Informado|Não_informado|Sem informação"))%>% ## remover as variáveis que nao serao necessarias
mutate( ## aqui comeco a definir as colunas que vou usar. Vou extrair as novas colunas da coluna variavel
genero = case_when(
str_detect(variavel, "(Feminino)") ~ "Feminino",
str_detect(variavel, "(Masculino)") ~ "Masculino",
TRUE ~ NA_character_),
variavel = gsub("_Masculino|_Feminino|", "", variavel), ## nesse ponto eu preciso remover a string de genero para evitar conflitos mais a frente no código
etnia = ifelse(grepl("etnia_", variavel),
sub("etnia_", "", variavel), NA),
etnia = if_else(etnia == "Branca", "Branca",
if_else(etnia %in% c("Preta", "Parda"), "Preta ou Parda",
if_else(etnia %in% c("Amarela", "Indigena"), "Amarela ou Indigena"
,NA))),
grau_de_instrucao = ifelse(grepl("grau_de_instrucao_", variavel),
sub("grau_de_instrucao_","", variavel), NA),
remuneracao = ifelse(grepl("remuneracao_",variavel),
sub("remuneracao_","",variavel),NA),
faixa_etaria = ifelse(grepl("faixa_etaria_", variavel),
sub("faixa_etaria_","",variavel),NA))%>%
mutate_at(vars(-presos), as.factor) %>%
ungroup() %>%
select("data","regiao","UF", "genero","etnia",
"grau_de_instrucao", "faixa_etaria", "remuneracao","presos") %>% ## usei select() apenas porque gostaria de vizualiar as colunas nessa ordem
filter(!is.na(genero))
Geração das
Tabelas
Em relação à quantidade de presos, essa é a tabela mais confiável
pois nem todos os presídios têm capacidade de recolher todos os dados.
Logo, com as outras tabelas vou trabalhar apenas a porcentagem de presos
em relacao ao total e extrair daqui o valor correspondente.
Tabela com a
população prisional total
populacao_prisional <-infopen_3_resumido %>%
filter(str_detect(variavel, "População_prisional"))%>%
rowwise() %>%
mutate(
genero = case_when(
str_detect(variavel, "(Feminino)") ~ "Feminino",
str_detect(variavel, "(Masculino)") ~ "Masculino",
TRUE ~ NA_character_)) %>%
select(regiao, UF,data,genero, presos) %>%
drop_na() %>%
ungroup()
populacao_prisional_2_resumido <- populacao_prisional %>%
filter(grepl("^dec", data) | data == "jun 2019") %>% ## após algumas análises decidí usar apenas 1 referência por ano, ao inves de uma média dos valores.
group_by(regiao, UF, data) %>%
mutate(ano = str_replace(data, "\\D*(\\d{4}).*", "\\1")) %>% ## removendo os 4 primerios characteres dos valores na coluna 'ano'
ungroup() %>%
group_by(ano, regiao, UF) %>%
summarise(total_presos = sum(presos)) %>%
ungroup() %>%
select(ano, regiao, UF, total_presos)
Vou deixar apenas mais esse exmplo de código, pois para a criação das
demais tabelas não há muita diferença em relação ao processo dessa. O
que pode mudar são alguns ajustes pontuais, mas nada que mereça
mensão.
infopen_faixa_de_idade <-infopen_4_final %>%
select(regiao,UF,data,genero, faixa_etaria, presos) %>% ## selecionar as colunas
mutate(faixa_etaria = gsub("_", " ", faixa_etaria)) %>% ## remover os "_" para facilitar leitura e exportacao para csv
mutate_at(vars(-presos), as.factor) %>% ## converter todas as colunas para factor - presos
drop_na() ## remover NA
infopen_faixa_de_idade_2_porcentagem <- infopen_faixa_de_idade %>%
filter(grepl("^dec", data) | data == "jun 2019") %>%
group_by(regiao, UF, data) %>%
mutate(ano = str_replace(data, "\\D*(\\d{4}).*", "\\1"),
total_presos_faixa = sum(presos, na.rm = TRUE), # soma total de presos por região, UF, gênero e ano
porcentagem_presos = round(((presos / total_presos_faixa) * 100),2),
UF = as.factor(UF),
ano = as.character(ano)) %>%
ungroup() %>%
select(ano, regiao, UF, genero, faixa_etaria, porcentagem_presos)
infopen_faixa_de_idade_3_final <- infopen_faixa_de_idade_2_porcentagem %>%
left_join(populacao_prisional_2_resumido, by = c("ano", "regiao", "UF")) %>%
mutate(presos = round(((porcentagem_presos / 100) * total_presos), 0)) %>%
select(ano, regiao, UF, genero, faixa_etaria, presos)
infopen_faixa_de_idade_4 <- infopen_faixa_de_idade_3_final %>%
group_by(ano,faixa_etaria) %>%
summarise(presos = sum(presos)) %>%
mutate(ano = as.numeric(ano))
Visualização dos Dados do
INFOPEN
Aqui estão as tabelas do INFOPEN que irei utilizar. Obseve que
combinei várias tabelas, rearanjei as colunas e extraí 5 tabelas
distintas, com dados em painel.
Populacao
prisional
|
regiao
|
UF
|
data
|
genero
|
presos
|
|
Sudeste
|
SP
|
jun 2019
|
Masculino
|
134002
|
|
Sudeste
|
SP
|
dec 2018
|
Masculino
|
129255
|
|
Sudeste
|
SP
|
jun 2018
|
Masculino
|
124912
|
|
Sudeste
|
SP
|
dec 2017
|
Masculino
|
121808
|
|
Sudeste
|
SP
|
jun 2017
|
Masculino
|
120332
|
|
Sudeste
|
SP
|
dec 2016
|
Masculino
|
119372
|
|
Sudeste
|
SP
|
dec 2016
|
Masculino
|
56185
|
|
Sudeste
|
SP
|
jun 2017
|
Masculino
|
54000
|
|
Sudeste
|
SP
|
dec 2017
|
Masculino
|
51915
|
|
Sudeste
|
SP
|
jun 2018
|
Masculino
|
51270
|
Etnia
|
ano
|
regiao
|
UF
|
etnia
|
presos
|
|
2019
|
Sudeste
|
SP
|
preta ou parda
|
136560
|
|
2018
|
Sudeste
|
SP
|
preta ou parda
|
132756
|
|
2016
|
Sudeste
|
SP
|
preta ou parda
|
129392
|
|
2017
|
Sudeste
|
SP
|
preta ou parda
|
128026
|
|
2016
|
Sudeste
|
SP
|
branca
|
100415
|
|
2019
|
Sudeste
|
SP
|
branca
|
96821
|
|
2017
|
Sudeste
|
SP
|
branca
|
95929
|
|
2018
|
Sudeste
|
SP
|
branca
|
94901
|
|
2018
|
Sudeste
|
MG
|
preta ou parda
|
57464
|
|
2019
|
Sudeste
|
MG
|
preta ou parda
|
56521
|
Grau de
instrução
|
ano
|
regiao
|
UF
|
genero
|
grau_de_instrucao
|
presos
|
|
2019
|
Sudeste
|
SP
|
Masculino
|
Ensino Fundamental Incompleto
|
99346
|
|
2017
|
Sudeste
|
SP
|
Masculino
|
Ensino Fundamental Incompleto
|
98797
|
|
2018
|
Sudeste
|
SP
|
Masculino
|
Ensino Fundamental Incompleto
|
97082
|
|
2016
|
Sudeste
|
SP
|
Masculino
|
Ensino Fundamental Incompleto
|
96434
|
|
2019
|
Sudeste
|
SP
|
Masculino
|
Ensino Médio Incompleto
|
47265
|
|
2018
|
Sudeste
|
SP
|
Masculino
|
Ensino Médio Incompleto
|
46693
|
|
2017
|
Sudeste
|
SP
|
Masculino
|
Ensino Médio Incompleto
|
43707
|
|
2016
|
Sudeste
|
SP
|
Masculino
|
Ensino Médio Incompleto
|
42049
|
|
2018
|
Sudeste
|
MG
|
Masculino
|
Ensino Fundamental Incompleto
|
41789
|
|
2019
|
Sudeste
|
MG
|
Masculino
|
Ensino Fundamental Incompleto
|
40967
|
Faixa etária
|
ano
|
faixa_etaria
|
presos
|
|
2016
|
18 a 24 anos
|
214624
|
|
2018
|
18 a 24 anos
|
206467
|
|
2019
|
18 a 24 anos
|
204917
|
|
2017
|
18 a 24 anos
|
202629
|
|
2019
|
25 a 29 anos
|
178737
|
|
2018
|
25 a 29 anos
|
173891
|
|
2016
|
25 a 29 anos
|
169540
|
|
2017
|
25 a 29 anos
|
168851
|
|
2019
|
35 a 45 anos
|
157032
|
|
2018
|
35 a 45 anos
|
145968
|
Faixa de
remuneração
|
ano
|
regiao
|
UF
|
remuneracao
|
presos
|
|
2016
|
Sudeste
|
SP
|
Entre 3/4 e 1 salário mínimo mensal
|
230152
|
|
2019
|
Sudeste
|
SP
|
Menos do que 3/4 do salário mínimo mensal
|
155026
|
|
2018
|
Sudeste
|
SP
|
Menos do que 3/4 do salário mínimo mensal
|
106953
|
|
2018
|
Sudeste
|
SP
|
Não recebe
|
94809
|
|
2017
|
Sudeste
|
RJ
|
Entre 3/4 e 1 salário mínimo mensal
|
51132
|
|
2019
|
Sudeste
|
RJ
|
Não recebe
|
49260
|
|
2019
|
Sudeste
|
SP
|
Entre 3/4 e 1 salário mínimo mensal
|
47639
|
|
2019
|
Sudeste
|
MG
|
Não recebe
|
46006
|
|
2016
|
Sudeste
|
RJ
|
Entre 3/4 e 1 salário mínimo mensal
|
38273
|
|
2016
|
Sudeste
|
MG
|
Não recebe
|
37727
|
Tabela IBGE Grau de
Instrução
A proposta dessa análise é comparar os dados da população carcerária
com os dados do IBGE, e fazer uma correlação entre eles. Os dados que
vou utilizar aqui fazem parte da Pesquina Nacional Por Amostra de
Domicílios Continua (PNADC) e podem ser encontradas na página de
estatísticas do IBGE.
Aqui começo trabalhar a segunda tabela que será usada. Essa tabela
única possui varias folhas que vou extrair e manipular os dados. A
tabela “PNAD_Continua_2018_Educacao.xls”, possui dados referentes à
educação da população. São várias informações, dentre as quais: nível
educacional por região, gereno e etnia. Essa tabela também apresenta
dados em painel.
Amarelos e Indigenas constam no Total
Vou pular a parte de importação da tabela e ir diretamente para o
dataframe.
Visualização da Tabela do PNAD
|
indicador
|
nivel_territorial
|
abertura_territorial
|
variavel_1
|
categoria_1
|
variavel_2
|
categoria_2
|
2016
|
2017
|
2018
|
|
População (mil pessoas)
|
País
|
Brasil
|
Sexo
|
Total
|
Grupos de idade
|
Total
|
204325.470
|
205999.691
|
207651.621
|
|
População (mil pessoas)
|
País
|
Brasil
|
Sexo
|
Total
|
Grupos de idade
|
0 a 3 anos
|
10223.229
|
10141.908
|
10171.730
|
|
População (mil pessoas)
|
País
|
Brasil
|
Sexo
|
Total
|
Grupos de idade
|
4 e 5 anos
|
5262.563
|
5268.945
|
5350.024
|
|
População (mil pessoas)
|
País
|
Brasil
|
Sexo
|
Total
|
Grupos de idade
|
6 a 9 anos
|
11100.370
|
10962.806
|
10947.352
|
|
População (mil pessoas)
|
País
|
Brasil
|
Sexo
|
Total
|
Grupos de idade
|
10 a 14 anos
|
15445.672
|
15363.810
|
15023.146
|
|
População (mil pessoas)
|
País
|
Brasil
|
Sexo
|
Total
|
Grupos de idade
|
15 a 17 anos
|
10617.588
|
10426.076
|
9752.471
|
|
População (mil pessoas)
|
País
|
Brasil
|
Sexo
|
Total
|
Grupos de idade
|
18 a 24 anos
|
22234.284
|
22727.774
|
22703.814
|
|
População (mil pessoas)
|
País
|
Brasil
|
Sexo
|
Total
|
Grupos de idade
|
25 a 29 anos
|
15306.030
|
15138.452
|
14890.647
|
|
População (mil pessoas)
|
País
|
Brasil
|
Sexo
|
Total
|
Grupos de idade
|
30 a 39 anos
|
32134.993
|
32462.937
|
32597.356
|
|
População (mil pessoas)
|
País
|
Brasil
|
Sexo
|
Total
|
Grupos de idade
|
40 a 59 anos
|
52417.780
|
53172.422
|
54100.608
|
Esse dataframe reune dados de todas as abas do arquivo
“PNAD_Continua_2018_Educacao.xls”, ainda há muita manipulação a ser
feita.
Manipulação dos
Dados
Primeiro, vou transpor os dados para que eu possa transformá-los em
formato longo, tal como no modelo anterior, com a tabela do INFOPEN.
pnad_2_formato_longo <- pivot_longer(pnad_br, 8:10,
names_to = "ano",
values_to = "valor",
values_drop_na = TRUE)
Vou multiplicar o valor na coluna ‘valor’ por 1000 se a coluna
‘indicador’ contiver a string ‘(mil pessoas)’ e, em seguida, removê-la.
Depois vou criar uma variável ‘regiao’ para armazenar a região de cada
estado.
pnad_3_com_regioes <- pnad_2_formato_longo %>%
mutate(valor = ifelse(grepl("(mil pessoas)", indicador), valor * 1000, valor),
indicador = gsub("\\s*\\(mil pessoas\\)", "", indicador),
regiao = case_when(abertura_territorial %in% c("Acre", "Amazonas", "Amapá", "Pará", "Rondônia", "Roraima", "Tocantins") ~ "Norte",
abertura_territorial %in% c("Maranhão", "Piauí", "Ceará", "Rio Grande do Norte", "Paraíba", "Pernambuco", "Alagoas", "Sergipe", "Bahia") ~ "Nordeste",
abertura_territorial %in% c("Minas Gerais", "Espírito Santo", "Rio de Janeiro", "São Paulo") ~ "Sudeste",
abertura_territorial %in% c("Paraná", "Santa Catarina", "Rio Grande do Sul") ~ "Sul",
abertura_territorial %in% c("Mato Grosso", "Mato Grosso do Sul", "Goiás", "Distrito Federal") ~ "Centro-Oeste",
TRUE ~ NA_character_))
Usando Método
Aritmético Para Estimar uma População
Vou começar transformando esses dados em formato largo (wide), logo
em seguida aplico a função com a fórmula e por fim volto com a tabela
para formato longo(long).
populacao_18_anos_ou_mais_3 <- pivot_wider(populacao_18_anos_ou_mais_2,
names_from = ano,
values_from = total)
populacao_18_anos_ou_mais_4 <- populacao_18_anos_ou_mais_3 %>%
mutate(
`2019` = round(formula(`2018`,2018,`2016`,2016,2019))
)
populacao_18_anos_ou_mais_5 <- pivot_longer(populacao_18_anos_ou_mais_4, cols = -c(UF,regiao),names_to = "ano",values_to = "populacao") %>%
mutate(across(-populacao, as.factor))
Vou agora combinar essa tabela com a população prisional do
INFOPEN.
|
ano
|
regiao
|
UF
|
presos
|
populacao
|
|
2016
|
Centro-Oeste
|
DF
|
14958
|
2141121
|
|
2016
|
Centro-Oeste
|
GO
|
18626
|
4946837
|
|
2016
|
Centro-Oeste
|
MS
|
18320
|
1915936
|
|
2016
|
Centro-Oeste
|
MT
|
11642
|
2389984
|
|
2016
|
Nordeste
|
AL
|
7111
|
2306187
|
|
2016
|
Nordeste
|
BA
|
13596
|
10517994
|
|
2016
|
Nordeste
|
CE
|
24682
|
6460288
|
|
2016
|
Nordeste
|
MA
|
8187
|
4577042
|
|
2016
|
Nordeste
|
PB
|
12241
|
2838058
|
|
2016
|
Nordeste
|
PE
|
45878
|
6858365
|
Tabela PNAD Dados
Sobre a Educação
Vou repetir basicamente o mesmo processo na tabela com dados sobre a
população. Essa tabela porém, consideda pessoas de 14 anos ou mais de
idade, como pode se notar pelo indicador.
alfabetizacao_populacao <- pnad_3_com_regioes %>%
filter(indicador == "Pessoas de 14 anos ou mais de idade",
nivel_territorial == "Unidade da Federação",
categoria_1 %in% c("Homem", "Mulher","Branca","Preta ou parda","Total¹"),
variavel_2 == "Nível de instrução",
!(categoria_2 %in% c("Total"))) %>%
mutate( ano = as.numeric(ano),
genero = ifelse(categoria_1 == "Homem", "Masculino",
ifelse(categoria_1 == "Mulher", "Feminino", NA)),
UF = uf_dict[as.character(abertura_territorial)]) %>%
select(regiao, UF, genero, grau_de_instrucao = categoria_2, ano, total = valor) %>%
drop_na()
Mesmo Processo para calcular a população no ano de 2019.
alfabetizacao_populacao_2 <- pivot_wider(alfabetizacao_populacao,
names_from = ano,
values_from = total)
alfabetizacao_populacao_3 <- alfabetizacao_populacao_2 %>%
mutate(
`2019` = round(formula(`2018`,2018,`2016`,2016,2019))
)
alfabetizacao_populacao_4 <- pivot_longer(alfabetizacao_populacao_3, cols = -c(regiao:grau_de_instrucao),names_to = "ano",values_to = "populacao") %>%
mutate(across(-populacao, as.factor))
## # A tibble: 6 × 6
## regiao UF genero grau_de_instrucao ano populacao
## <fct> <fct> <fct> <fct> <fct> <dbl>
## 1 Norte RO Masculino Sem instrução 2016 51545
## 2 Norte RO Masculino Sem instrução 2017 45943
## 3 Norte RO Masculino Sem instrução 2018 44963
## 4 Norte RO Masculino Sem instrução 2019 41672
## 5 Norte RO Masculino Fundamental incompleto (ou curso equiv… 2016 265952
## 6 Norte RO Masculino Fundamental incompleto (ou curso equiv… 2017 277958
Como pode se imaginar, as distribuições de grau de instrução não
estão padronizadas, vou usar uma função para criar esse padrão entre a
tabela do PNAD e a do INFOPEN.
padronizar_grau_de_instrucao <- function(grau) {
grau_simplificado <- gsub(" \\(ou curso equivalente\\)", "", grau)
recode(grau_simplificado,
"Sem instrução" = "Analfabeto",
"Fundamental incompleto" = "Ensino Fundamental Incompleto",
"Fundamental completo" = "Ensino Fundamental Completo",
"Médio incompleto" = "Ensino Médio Incompleto",
"Médio completo" = "Ensino Médio Completo",
"Superior incompleto" = "Ensino Superior Incompleto",
"Superior completo" = "Ensino Superior Completo",
"Alfabetizado sem cursos regulares" = "Ensino Fundamental Incompleto")
}
depois de rodar a função nas duas tabelas, eis o resultado:
Tabelas Padronizadas PNADC e
INFOPEN
Alfabetização da
população
|
ano
|
regiao
|
UF
|
genero
|
grau_de_instrucao
|
populacao
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Analfabeto
|
36913
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Fundamental Completo
|
115600
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Fundamental Incompleto
|
243841
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Médio Completo
|
361021
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Médio Incompleto
|
79367
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Superior Completo
|
326836
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Superior Incompleto
|
81125
|
|
2016
|
Centro-Oeste
|
DF
|
Masculino
|
Analfabeto
|
35713
|
|
2016
|
Centro-Oeste
|
DF
|
Masculino
|
Ensino Fundamental Completo
|
112742
|
|
2016
|
Centro-Oeste
|
DF
|
Masculino
|
Ensino Fundamental Incompleto
|
222558
|
Alfabetização dos
presos
|
ano
|
regiao
|
UF
|
genero
|
grau_de_instrucao
|
presos
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Analfabeto
|
12
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Fundamental Completo
|
34
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Fundamental Incompleto
|
317
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Médio Completo
|
127
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Médio Incompleto
|
118
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Superior Completo
|
10
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Superior Incompleto
|
39
|
|
2016
|
Centro-Oeste
|
DF
|
Masculino
|
Analfabeto
|
311
|
|
2016
|
Centro-Oeste
|
DF
|
Masculino
|
Ensino Fundamental Completo
|
1496
|
|
2016
|
Centro-Oeste
|
DF
|
Masculino
|
Ensino Fundamental Incompleto
|
8489
|
Dados Ausentes na
Tabela INFOPEN
Percebi que após todas as padronizações as tabelas voltaram com
quantidades diferentes de observações. A tabela
infopen_grau_de_instrucao_31_padrao possui 1509 observações, enquanto
alfabetizacao_populacao_5 possui 1512 observações. Resolvi investigar
usando anti_join e descobri que a tabela do infopen não tem as
observações da tabela criada abaixo.
## # A tibble: 3 × 6
## ano regiao UF genero grau_de_instrucao populacao
## <fct> <fct> <fct> <fct> <chr> <dbl>
## 1 2016 Norte RR Feminino Ensino Superior Completo 30467
## 2 2017 Nordeste MA Feminino Ensino Superior Completo 199776
## 3 2016 Nordeste SE Feminino Ensino Superior Completo 101357
Para não deixar esses valores em branco, decidi usar media simples do
número de presos nos outros anos para cada observação ausente, usar essa
média como valor e só então combinar as tabelas do PNADC com
INFOPEN.
Agora a tabela do INFOPEN contém 1512 colunas, tal como a tabela do
PNAD, logo posso combiná-las.
Tabela PNADC -
INFOPEN Grau de Instrução
|
ano
|
regiao
|
UF
|
genero
|
grau_de_instrucao
|
presos
|
populacao
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Analfabeto
|
12
|
36913
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Fundamental Completo
|
34
|
115600
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Fundamental Incompleto
|
317
|
243841
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Médio Completo
|
127
|
361021
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Médio Incompleto
|
118
|
79367
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Superior Completo
|
10
|
326836
|
|
2016
|
Centro-Oeste
|
DF
|
Feminino
|
Ensino Superior Incompleto
|
39
|
81125
|
|
2016
|
Centro-Oeste
|
DF
|
Masculino
|
Analfabeto
|
311
|
35713
|
|
2016
|
Centro-Oeste
|
DF
|
Masculino
|
Ensino Fundamental Completo
|
1496
|
112742
|
|
2016
|
Centro-Oeste
|
DF
|
Masculino
|
Ensino Fundamental Incompleto
|
8489
|
222558
|
Tabela IBGE Etnia
Essa Tabela possui a distribuição percentual etnica da população
brasileira por estado. O arquivo a ser trabalhado aqui chama-se “Tabela
1.1 DIST PERCET RACA.xls”, e pode ser encontrado no site do IBGE
Vou pular a parte de leitura dos dados pois não difere em nada das
tabelas anteriores.
|
|
ano
|
UF
|
Total
|
Branca
|
Preta
|
Parda
|
|
1
|
2018
|
RO
|
1747.154
|
29.47056
|
6.710325
|
62.40118
|
|
2
|
2018
|
AC
|
853.023
|
21.02601
|
5.346175
|
72.31678
|
|
3
|
2018
|
AM
|
3921.508
|
16.80872
|
2.989718
|
77.40833
|
|
4
|
2018
|
RR
|
513.466
|
23.69004
|
7.674129
|
60.86162
|
|
5
|
2018
|
PA
|
8472.029
|
17.83819
|
8.171171
|
72.69580
|
|
6
|
2018
|
AP
|
821.545
|
17.42855
|
6.996881
|
74.26081
|
|
7
|
2018
|
TO
|
1542.150
|
21.09303
|
12.447240
|
65.01775
|
|
9
|
2018
|
MA
|
7000.726
|
18.29311
|
11.947581
|
68.54424
|
|
10
|
2018
|
PI
|
3263.754
|
19.79728
|
9.072589
|
70.89077
|
|
11
|
2018
|
CE
|
9072.980
|
28.22352
|
5.288679
|
65.71442
|
Essa tabela possui dados de 2012 a 2018. Vou utilizar a fórmula que
discutimos no começo para estimar a população em 2019.
Vou começar transformando os dados da tabela, pois o numero presente na
coluna total ainda deve ser multiplicado por 1000, e os valores das
etnias estão em porcentagem em relação ao total.
distribuicao_populacao_por_etnia_e_regiao_3 <- distribuicao_populacao_por_etnia_e_regiao_2 %>%
mutate(
Total = round(Total*1000),
Branca = round(Branca*Total/100),
Preta = round(Preta*Total/100),
Parda = round(Parda*Total/100))
Por fim a tabela que iremos utilizar para combinar com a do
INFOPEN
Distribuição Étnica
da População Brasileira
|
ano
|
regiao
|
UF
|
etnia
|
populacao
|
|
2016
|
Norte
|
AC
|
branca
|
149493
|
|
2016
|
Norte
|
AC
|
preta ou parda
|
674372
|
|
2016
|
Nordeste
|
AL
|
branca
|
788828
|
|
2016
|
Nordeste
|
AL
|
preta ou parda
|
2470246
|
|
2016
|
Norte
|
AM
|
branca
|
679764
|
|
2016
|
Norte
|
AM
|
preta ou parda
|
3034052
|
|
2016
|
Norte
|
AP
|
branca
|
162565
|
|
2016
|
Norte
|
AP
|
preta ou parda
|
619211
|
|
2016
|
Nordeste
|
BA
|
branca
|
2608310
|
|
2016
|
Nordeste
|
BA
|
preta ou parda
|
11944048
|
Observações Ausentes
na Tabela do INFOPEN
Após manipulação dos dados dessa tabela do IBGE, vou combiná-la com a
tabela do INFOPEN, para ter como correlacionar o total de presos e a
população para cada variável. Porém, na hora de combinar os dataframes,
descobri que que há observações faltantes na tabela
infopen_etnia_3_final pois ela possui menos linhas que a tabela do PNAD.
Vou usar anti-join para descobrí-los e regressao linear para
calcular-los
São essas as observações ausentes na tabela do INFOPEN
head(diferenca_infopen_populacao_etnia)
## # A tibble: 2 × 4
## # Groups: ano, UF, regiao [1]
## ano regiao UF etnia
## <dbl> <chr> <chr> <chr>
## 1 2019 Nordeste SE branca
## 2 2019 Nordeste SE preta ou parda
Após alguns cálculos, cheguei nesse resultado de previão de presos e
cada observação:
head(previsoes_2019_infopen_etnia)
## # A tibble: 2 × 5
## # Groups: regiao, UF, etnia [2]
## regiao UF etnia presos ano
## <chr> <chr> <chr> <dbl> <dbl>
## 1 Nordeste SE branca 457 2019
## 2 Nordeste SE preta ou parda 5124 2019
Agora basta combinar as tabelas com dados sobre a etnia da população
brasileira total com a população carcerária e então chegaremos nessa
tabela:
Tabela PNADC -
INFOPEN Etnia
|
ano
|
regiao
|
UF
|
etnia
|
presos
|
populacao
|
|
2016
|
Centro-Oeste
|
DF
|
branca
|
2515
|
1113132
|
|
2016
|
Centro-Oeste
|
DF
|
preta ou parda
|
12364
|
1753738
|
|
2016
|
Centro-Oeste
|
GO
|
branca
|
4266
|
2426334
|
|
2016
|
Centro-Oeste
|
GO
|
preta ou parda
|
14288
|
4253442
|
|
2016
|
Centro-Oeste
|
MS
|
branca
|
5560
|
1130769
|
|
2016
|
Centro-Oeste
|
MS
|
preta ou parda
|
12737
|
1452699
|
|
2016
|
Centro-Oeste
|
MT
|
branca
|
2660
|
1076121
|
|
2016
|
Centro-Oeste
|
MT
|
preta ou parda
|
8916
|
2211143
|
|
2016
|
Nordeste
|
AL
|
branca
|
1377
|
788828
|
|
2016
|
Nordeste
|
AL
|
preta ou parda
|
5735
|
2470246
|
Tabela IBGE Faixa
Etária
O arquivo a ser trabalhado aqui chama-se “Tabela 1.2 DIST POP
ETARIA.xls”, e pode ser encontrado no site do IBGE
Essa tabela possui dados sobre a distribuição da faixa etária da
população por etnia. Indígenas, amarelos e pessoas sem declaração de
cor ou raça constam no total.
|
faixa_etaria
|
Total
|
cv_total
|
branca
|
cv_branca
|
Preta_ou_Parda
|
cv_preta_parda
|
proporcao_branca
|
cv_proporcao_branca
|
proporcao_preta_parda
|
cv_proporcao_preta_parda
|
ano
|
|
0 a 4 anos
|
13124.30
|
0.88427169197711608
|
6076.469
|
1.451866
|
6939.813
|
1.155815
|
46.29937
|
1.021138
|
52.87758
|
0.8912887
|
2018
|
|
5 a 9 anos
|
13645.48
|
0.85759498658148692
|
5629.184
|
1.409402
|
7899.687
|
1.121951
|
41.25310
|
1.074214
|
57.89233
|
0.7720677
|
2018
|
|
10 a 14 anos
|
14923.04
|
0.77302798278891072
|
5756.714
|
1.359373
|
9039.822
|
1.043748
|
38.57603
|
1.111292
|
60.57629
|
0.7071651
|
2018
|
|
15 a 19 anos
|
16442.07
|
0.75758111621423652
|
6010.282
|
1.296194
|
10293.966
|
1.031182
|
36.55429
|
1.105113
|
62.60748
|
0.6485969
|
2018
|
|
20 a 24 anos
|
16048.18
|
0.75135656586436339
|
6348.342
|
1.308184
|
9541.958
|
1.019381
|
39.55802
|
1.057401
|
59.45820
|
0.7094211
|
2018
|
|
25 a 29 anos
|
15006.06
|
0.83216738688741987
|
6160.098
|
1.441365
|
8686.275
|
1.068971
|
41.05073
|
1.082387
|
57.88510
|
0.7691143
|
2018
|
|
30 a 34 anos
|
16071.92
|
0.84090771846315848
|
6600.026
|
1.448793
|
9274.408
|
1.043940
|
41.06559
|
1.057334
|
57.70568
|
0.7619637
|
2018
|
|
35 a 39 anos
|
16905.90
|
0.82142719564900768
|
7026.611
|
1.517426
|
9688.656
|
1.026723
|
41.56308
|
1.113020
|
57.30932
|
0.8102016
|
2018
|
|
40 a 44 anos
|
15186.72
|
0.78765297599262696
|
6390.305
|
1.356850
|
8621.957
|
1.049632
|
42.07823
|
1.035301
|
56.77299
|
0.7678529
|
2018
|
|
45 a 49 anos
|
13519.07
|
0.83775955165508598
|
5857.937
|
1.412991
|
7506.854
|
1.127709
|
43.33091
|
1.061985
|
55.52788
|
0.8343097
|
2018
|
Assim como a tabela anterior, essa possui dados apenas de 2012 a
2018, logo vou utilizar a mesma fórmula para prever a população em
2019.
Padronização das
Faixas de Idade
Como é possivel ver logo a baixo, embora agora tenhamos os dados de 2016
a 2019, as faixas etárias não são exatamente iguais às do INFOPEN, mas
são bem proximas.
|
faixa_etaria
|
ano
|
populacao
|
|
25 a 29 anos
|
2018
|
15006064
|
|
25 a 29 anos
|
2017
|
15361348
|
|
25 a 29 anos
|
2016
|
15417271
|
|
25 a 29 anos
|
2019
|
14834679
|
|
30 a 34 anos
|
2018
|
16071915
|
|
30 a 34 anos
|
2017
|
16187827
|
|
30 a 34 anos
|
2016
|
16565123
|
|
30 a 34 anos
|
2019
|
16054589
|
|
35 a 39 anos
|
2018
|
16905898
|
|
35 a 39 anos
|
2017
|
16504662
|
O que vou fazer, é criar uma função que ajusta as faixas etárias para
estarem de acordo com as do INFOPEN
ajusta_faixa_etaria <- function(faixa) {
if (faixa %in% c("25 a 29 anos")) {
return("25 a 29 anos")
} else if (faixa %in% c("30 a 34 anos")) {
return("30 a 34 anos")
} else if (faixa %in% c("35 a 39 anos", "40 a 44 anos")) {
return("35 a 45 anos")
} else if (faixa %in% c("45 a 49 anos", "50 a 54 anos", "55 a 59 anos")) {
return("46 a 60 anos")
} else if (faixa %in% c("60 a 64 anos", "65 a 69 anos")) {
return("61 a 70 anos")
} else if (faixa %in% c("70 a 74 anos", "75 a 79 anos", "80 anos e mais")) {
return("Mais de 70 anos")
} else {
return(NA)
}
}
Aqui dá pra se ter uma visualização da tabela que tenho até então.
|
ano
|
faixa_etaria
|
populacao
|
|
2016
|
25 a 29 anos
|
15417271
|
|
2016
|
30 a 34 anos
|
16565123
|
|
2016
|
35 a 45 anos
|
30697363
|
|
2016
|
46 a 60 anos
|
37633650
|
|
2016
|
61 a 70 anos
|
16444403
|
|
2016
|
Mais de 70 anos
|
12997738
|
|
2017
|
25 a 29 anos
|
15361348
|
|
2017
|
30 a 34 anos
|
16187827
|
|
2017
|
35 a 45 anos
|
31462107
|
|
2017
|
46 a 60 anos
|
37959837
|
Pode-se notar que não tenho a população de 18 a 24 anos. Vou extrair
essa faixa etária de outra tabela do PNAD, que já trabalhamos antes.
populacao_18_a_24_anos <- pnad_4_populacao_idade %>%
filter(grepl("18 a 24 anos", grupo_de_idade),
grepl("Total¹", etnia)) %>%
select(-genero) %>% # vou remover genero para remover duplicados (pois tenho genero e etnia)
rename(faixa_etaria = grupo_de_idade,
populacao = valor)%>%
group_by(ano,faixa_etaria, etnia) %>%
summarise(populacao = sum(populacao)) %>%
select(-etnia) %>% # por fim removo a coluna de etnia que consta apenas 'Total'
drop_na()
Como já demonstrado anteriormente, vou usar aritmérica para prever a
população em 2019.
Distribuição da Faixa
Etária da População Brasileira
Finalmente a tabela com todas as faixas etarias igual a do INFOPEN
|
faixa_etaria
|
ano
|
populacao
|
|
18 a 24 anos
|
2016
|
22234284
|
|
25 a 29 anos
|
2016
|
15417271
|
|
30 a 34 anos
|
2016
|
16565123
|
|
35 a 45 anos
|
2016
|
30697363
|
|
46 a 60 anos
|
2016
|
37633650
|
|
61 a 70 anos
|
2016
|
16444403
|
|
Mais de 70 anos
|
2016
|
12997738
|
|
18 a 24 anos
|
2017
|
22727774
|
|
25 a 29 anos
|
2017
|
15361348
|
|
30 a 34 anos
|
2017
|
16187827
|
Agora resta apenas combinar as tabelas de faixa etária.
populacao_infopen_faixa_etaria <- as.data.frame(left_join(infopen_faixa_de_idade_4,
populacao_faixa_etaria,
by = join_by(ano, faixa_etaria))) %>%
mutate(faixa_etaria = as.factor(faixa_etaria))
Tabela PNADC -
INFOPEN por Faixa etária
|
ano
|
faixa_etaria
|
presos
|
populacao
|
|
2016
|
18 a 24 anos
|
214624
|
22234284
|
|
2016
|
25 a 29 anos
|
169540
|
15417271
|
|
2016
|
30 a 34 anos
|
127187
|
16565123
|
|
2016
|
35 a 45 anos
|
133083
|
30697363
|
|
2016
|
46 a 60 anos
|
49033
|
37633650
|
|
2016
|
61 a 70 anos
|
7527
|
16444403
|
|
2016
|
Mais de 70 anos
|
1376
|
12997738
|
|
2017
|
18 a 24 anos
|
202629
|
22727774
|
|
2017
|
25 a 29 anos
|
168851
|
15361348
|
|
2017
|
30 a 34 anos
|
130889
|
16187827
|
Tabela IBGE
Rendimentos
Explicação dos
Dados
Essa tabela possui a distribuição de rendimentos da população
brasileira. O próprio IBGE divulgou um informativo
sobre a distribuição dos rendimentos da população brasileira entre 2012
e 2019.
Eu vou trabalhar apenas com uma fração dos dados disponíveis nessa
tabela: o rendimento habitualmente recebido, a preços médio e somente
para as pessoas de 14 anos ou mais de idade. De acordo com o IBGE,
rendimento habitual se define da seguinte forma:
” O rendimento habitual consiste no rendimento recebido por
empregados, empregadores e trabalhadores por conta própria, mensalmente,
sem acréscimos extraordinários ou descontos esporádicos. Para o
empregado, o rendimento mensal habitualmente recebido exclui todas as
parcelas que não tenham caráter contínuo (bonificação anual, salário
atrasado, horas extras, participação anual nos lucros, 13o salário, 14o
salário, adiantamento de salário, etc.) e não considera os descontos
ocasionais (faltas, parte do 13o salário antecipado, prejuízo eventual
causado ao empreendimento etc.).
Caso o rendimento recebido de empregado, de trabalhador por conta
própria e de empregador seja variável, considera-se o rendimento
habitual aquele em média recebido pela pessoa no período em que
realizava o trabalho declarado na semana de referência. Quando a
remuneração varia em função do período ou estação do ano, considera-se o
rendimento mensal que a pessoa ganha habitualmente nesse período
sazonal.” fonte: glossário
Exploração de
Dados
Essa tabela é bem simples. Na coluna ‘classe’, temos a classe
percentual de pessoas por rendimento, e nas demais colunas o rendimento
habitual dessa classe de pessoas.
Vou utilizar uma tabela ja presente no relatorio do IBGE para melhor
exemplificar a utilizadade da tabela
Na primeira linha ‘2012’, na coluna ‘Mais de 80% até 90%’, temos o valor
3 351, que representa um rendimento habitual de R$ 3.351,00 mensal. Ou
seja, 90% dos brasileiros recebem até esse valor, apenas 10% recebem
mais que isso.
Manipulando os
Dados
Para que possa ter como padronizar as tabelas de rendimento do PNAD e
do INFOPEN vou precisar de um ajuste de acordo com o salário mínimo.
Para isso vou criar uma tabela com os valores do anos 2016 a 2019.
ano <- c(2019, 2018, 2017, 2016)
salario_minimo <- c(998.00, 954.00, 937.00, 880.00)
salario_minimo_2016_a_2019 <- data.frame(ano, salario_minimo)
Essa tabela considera apenas percentual de pessoas com algum
rendimento. O IBGE considera desempregados pessoas que estão a procura
de trabalho no periodo da amostra. Porém, não considera pessoas sem
rendimentos que não estavam a procura de emprego como desempregadas.
Essa parcela de pessoas sem rendimentos é a que vamos tratar aqui.
Para extrair esses dados, vou utilizar a mesma tabela já usada, que
também possui essas informações. A tabela
‘PNAD_Continua_2019_Rendimento_de_Todas_as_Fontes’, possui como
indicador o “Percentual de pessoas com rendimento”, logo vou extrair
‘100%’ desse valor e obeter o percentual de pessoas sem rendimentos.
percentual_empregados <-rendimentos %>%
filter(`Abertura geográfica` == "Brasil",
Tipo == "Valor",
sub.classe %in% c("Todas as fontes¹" ),
ind == "Percentual de pessoas com rendimento, na população residente") %>%
select(sub.classe, '2016','2017','2018','2019') %>%
unique()
percentual_empregados_2_formato_longo <- pivot_longer(percentual_empregados,
cols = c("2016", "2017", "2018", "2019"),
names_to = "ano",
values_to = "valor")
percentual_sem_rendimentos <- percentual_empregados_2_formato_longo %>%
mutate(sub.classe = (100 - valor),
valor = 0,
remuneracao = "Não recebe",
ano = as.factor(ano))
sem_rendimentos <- left_join(percentual_sem_rendimentos, populacao_total_14_anos_ou_mais, by = join_by(ano)) %>%
mutate(populacao = (sub.classe*populacao)/100,) %>%
group_by(ano, remuneracao) %>%
summarise(populacao = sum(populacao)) %>%
select(ano, remuneracao, populacao)
Antes de combinar as tabelas, preciso ainda padronizar as
variaveis.
# Criando a nova coluna com as categorias
remuneracao_populacao_3 <- remuneracao_populacao_2_salario_minimo %>%
mutate(remuneracao = case_when(
valor >= salario_minimo & valor < 2 * salario_minimo ~ "Entre 1 e 2 salários mínimos mensais",
valor >= 3/4 * salario_minimo & valor < salario_minimo ~ "Entre 3/4 e 1 salário mínimo mensal",
valor >= 2 * salario_minimo ~ "Mais que 2 salários mínimos mensais",
valor > 0 & valor< 3/4 * salario_minimo ~ "Menos do que 3/4 do salário mínimo mensal"
)) %>%
select(classe, ano, porcentagem_populacao, remuneracao)
remuneracao_populacao_4 <-merge(remuneracao_populacao_3,
populacao_total_14_anos_ou_mais, by = "ano") %>%
mutate(populacao_remunerada = (populacao * porcentagem_populacao)/100) %>%
select(ano, remuneracao, populacao_remunerada) %>%
rename(populacao = populacao_remunerada)
remuneracao_populacao_5 <- remuneracao_populacao_4 %>%
group_by(ano, remuneracao) %>%
summarise(populacao = sum(populacao)) %>%
mutate( ano = as.factor(ano))
# Definir a ordem correta de rendimentos
ordem_correta_rendimentos <- c("Não recebe",
"Menos do que 3/4 do salário mínimo mensal",
"Entre 3/4 e 1 salário mínimo mensal",
"Entre 1 e 2 salários mínimos mensais",
"Mais que 2 salários mínimos mensais")
remuneracao_populacao_6 <- rbind(remuneracao_populacao_5, sem_rendimentos)%>%
mutate(remuneracao = as.factor(remuneracao),
remuneracao = factor(remuneracao, levels = ordem_correta_rendimentos))
Por fim uma visão sobre a distribuição de rendimentos no pais:
Tabela PNADC -
INFOPEN Rendimentos
|
ano
|
remuneracao
|
presos
|
populacao
|
|
2016
|
Entre 1 e 2 salários mínimos mensais
|
45996
|
66196247
|
|
2016
|
Entre 3/4 e 1 salário mínimo mensal
|
383948
|
33098124
|
|
2016
|
Mais que 2 salários mínimos mensais
|
16286
|
49647185
|
|
2016
|
Menos do que 3/4 do salário mínimo mensal
|
81645
|
16549062
|
|
2016
|
Não recebe
|
174533
|
64375850
|
|
2017
|
Entre 1 e 2 salários mínimos mensais
|
40861
|
66972793
|
|
2017
|
Entre 3/4 e 1 salário mínimo mensal
|
289068
|
16743198
|
|
2017
|
Mais que 2 salários mínimos mensais
|
2858
|
50229595
|
|
2017
|
Menos do que 3/4 do salário mínimo mensal
|
120993
|
33486397
|
|
2017
|
Não recebe
|
251953
|
65298473
|
Análises e
Correlações.
A Maior parde da proposta do projeto já foi passada. Desse ponto em
diante, foco mais em presentar algumas correlações encontradas nas
tabelas que montamos e apresentamos um pouco acima.
Vou começar criando uma coluna que relaciona a quantidade de presos
ao total da população, e logo após plotar alguns graficos que ilustram a
correlação entre cada variável
dataframe etnia
A variação do percentual de presos pela populacao em relação a etnia,
nos mostra que em praticamente todos os estados há uma incidencia maior
de presos pardos e pretos em relação à população. Isso não indica
causalidade, uma vez que há outros fatores que podem influenciar o
indivíduo a cometer algum crime e acabar atras das grades. Porém é um
fato que precisa ser investigado mais a fundo. Seria ideal se houvesse
uma forma de avaliar mais variáveis como possível racismo por parte do
poder judiciário, ou até mesmo educação e renda, como estamos fazendo
aqui. Nos próximos gráficos, apresento algumas correlações entre essas
variáveis.

dataframe
faixa_etaria
Aqui podemos observar uma diminuicão no índice de presos na faixa
etária de 18 a 24 anos no decorrer do tempo. Isso pode se dar por
diversas razões, dentre elas o envelhecimento da populaçãocarcerária.
Porém, se pegarmos todas as outras faixas-etárias, temos um aumento
considerável no número de presos no que chamamos “idade ativa”, que
compreende a população até 61 anos de idade. É realmente frustrante
perceber que os nossos “Bill Gates”, “Zuckerbergs”, e “Elon Musks” estão
atrás das grades. A população que deveria estar na faculade, está presa,
por inúmeros fatores, dentre os quais a pouca idade, junto com a baixa
escolaridade e a falta de grana. Realmente seria um sonho não ter tantos
jovens presos.

dataframe grau de
instrução
Essa tabela mostra a distribuição de presos por grau de instrução.
Claramente a chave vira no ensino médio incompleto, uma vez que a partir
daí, o percentual de presos sobre a população cai drásticamente. Já não
é mistério algum que uma população com baixa educação normalmente tem
como resposta um grau elevado de violência, pegue países como noruéga,
holanda e japão por exemplo onde há pouquíssimos presos, e compare o
nível de acesso ao Ensino Superior com o do Brasil.

dataframe
rendimentos
Aqui podemos observaer que a maior parte da população carcerária são
pessoas que recebem até 1 salário mínimo mensal. Esse valor entre 3/4 e
1 salário mínimo mensal inclui diversas pessoas que recebem auxílios
governamentais como o “Bolsa Família” ou outros. Elas não podem ser, de
acordo com o IBGE classificadas como sem renda ou desempregadas.
O Departamento Intersindical de Estatpistica e Estudos
Socioeconômicos (Dieese), divulga mensalmente o valor do custo da Cesta
Básica de Alimentos que seria de acordo com o òrgão, “suficiente para o
sustento e bem estar de um trabalhador em idade adulta, contendo
quantidades balanceadas de proteínas, calorias, ferro cálcio e
fósforo.(DIEESE 2019a)”. Em 2019, o valor
médio da cesta-básica nacional era de R$ 422,19, o que representa quase
metade o salário mínimo da época (R$ 998,00).

Salário Mínimo
Necessário
A Constituição do Brasil, de outubro de 1988, estipula que o salário
mínimo deve ser um valor estabelecido em lei e uniforme em todo o país.
Este valor deve ser suficiente para cobrir as necessidades básicas de um
trabalhador e de sua família, incluindo despesas com moradia,
alimentação, educação, saúde, lazer, roupas, higiene, transporte e
previdência social. Além disso, a Constituição prevê que esse salário
mínimo deve ter reajustes periódicos para garantir seu poder de compra
(Art. 7º, IV da Constituição Federal do Brasil).
O DIEESE, ao calcular o Salário Mínimo Necessário, leva em
consideração estas disposições constitucionais. Eles se baseiam no
Decreto Lei nº 399, que determina que os gastos com alimentação de um
trabalhador adulto não devem ser menores que o custo da Cesta Básica de
Alimentos.
Para esses cálculos, o DIEESE considera um modelo de família composto
por 2 adultos e 2 crianças, onde se supõe que o consumo destas crianças
é equivalente ao de um adulto.
O método usado para calcular o gasto alimentar de uma família começa
com o custo da Cesta Básica de Alimentos mais cara entre as 27 capitais
brasileiras. Esse valor é então multiplicado por 3.
O DIEESE(DIEESE 2019b) realizou a
Pesquisa de Orçamento Familiar (POF) em São Paulo no período de 94/95.
Os resultados mostraram que a alimentação correspondia a 35,71% das
despesas das famílias do estrato mais baixo de renda. Ao comparar o
custo da alimentação para uma família (a cesta mais cara multiplicada
por 3) com a proporção do orçamento dessas famílias dedicado à
alimentação (35,71%), é possível deduzir o orçamento total necessário
para cobrir também outras despesas, como moradia, vestuário, transporte
e assim por diante.
Portanto, podemos resumir a fórmula para calcular o Salário Mínimo
Necessário da seguinte forma:
\[C.F.A. = 3(CC)\]
\[\frac{C.F.A.}{X} =
\frac{0,3571}{1,00}\] Usando regra de 3, temos que:
\[C.F.A. = X(0,3571)\] logo:
\[ X = \frac{C.F.A.}{0,3571} \]
Onde: C.F.A. = Custo Familiar de Alimentação e C.C. = Custo da Cesta
Básica de maior valor
O Salário Mínimo Necessário, que é calculado mensalmente como uma
avaliação do que deveria ser o salário mínimo atual, também serve como
uma ferramenta que os sindicatos dos trabalhadores usam para expor a
violação do princípio constitucional que define os parâmetros para a
determinação do menor salário permitido no país.
Temos abaixo o valor do que seria o salário ideal do trabalhador,
previsto em lei, para arcar com todos custos mensais de sua
residência.
|
Mês
|
Salário Minimo
|
Salário Necessário
|
|
Dezembro
|
998
|
4342.57
|
|
Novembro
|
998
|
4021.39
|
|
Outubro
|
998
|
3978.63
|
|
Setembro
|
998
|
3980.82
|
|
Agosto
|
998
|
4044.58
|
|
Julho
|
998
|
4143.55
|
|
Junho
|
998
|
4214.62
|
|
Maio
|
998
|
4259.90
|
|
Abril
|
998
|
4385.75
|
|
Março
|
998
|
4277.04
|
Atravez desses dados, podemos ver a discrepância entre os valores
mínimos e os necessários para a manutenção do lar no Brasil. Não é
recente a queixa por reformas políticas e econômicas no Brasil. Ainda na
década de 1970, o grupo “Legião Urbana” já levantava protesto com a
música “Que país é esse?”. Podemos ver na decada seguinte o cantor
Cazuza protestar em forma de canto a música “Brasil” que claramente já
denunciava a pobreza da nação.
A população carcerária diz muito sobre o país. Jovens, pobres,
pessoas de baixa escolaridade e de pele escura estão nos topos das
estatísticas, isso sinaliza uma omissão por parte do governo. O Código
Penal, em seu artigo 135, descreve o delito de omissão de socorro, que
consiste na atitude de deixar de socorrer pessoas em situação de
vulnerabilidade, como crianças abandonadas ou perdidas, pessoas
inválidas, com ferimentos, ou em situação de risco ou perigo. Por esse
fator, o governo também deveria estar atrás das grades.
LS0tCnRpdGxlOiAiQW7DoWxpc2UgUG9wdWxhw6fDo28gQ2FyY2Vyw6FyaWEgZGUgMjAxNiBhIDIwMTkgbm8gQnJhc2lsIgphdXRob3I6ICJXZXZlcnNvbiBOb3NzZWlzIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGhpZ2hsaWdodDogdGV4dG1hdGUKICAgIHRoZW1lOiBmbGF0bHkKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IHllcwogICAgICBzbW9vdGhfc2Nyb2xsOiBubwpiaWJsaW9ncmFwaHk6IHJlZmVyZW5jaWFzLmJpYgotLS0KCiMgUHJvcG9zdGEgZGUgcHJvamV0bwpPIG9iamV0aXZvIGRlc3NlIHByb2pldG8gw6kgZGVtb25zdHJhciBtaW5oYXMgaGFiaWxpZGFkZXMgY29tIFIgZW0gbWFuaXB1bGHDp8OjbyBlIGVzdHJ1dHVyYcOnw6NvIGRlIGRhZG9zLCBiZW0gY29tbyB1bWEgYW7DoWxpc2UgZG9zIGRhZG9zIGFwcmVzZW50YWRvcy4gQ29tIGlzc28gZW0gdmlzdGEsIHZvdSBkZWl4YXIgZXhwb3N0byBib2EgcGFydGUgZG9zIGPDs2RpZ29zLCBtYXMgbsOjbyB0b2RvcyBwYXJhIHF1ZSBuw6NvIGZpcXVlIG11aXRvIHJlcGV0aXRpdm8uIERldm8gcmVzc2FsdGFyIHF1ZSBlbWJvcmEgcHJlc2VudGUgZW0gYWxndW1hcyB0YWJlbGFzLCBhIGV0bmlhICJhbWFyZWxhIG91IGluZMOtZ2VuYSIgbsOjbyBzZXLDoSBhcHJlc2VudGFkYSBubyByZWxhdMOzcmlvIGZpbmFsLCB1bWEgdmV6IHF1ZSBocMOhIHVtYSBxdWFudGlkYWRlIGdyYW5kZSBkZSBvdXRsaWVycyBlIHF1ZSBhY2FiYW0gaW52aWVzYW5kbyBhIGFuw6FsaXNlLgogIApUb2RvcyBvcyBhcnF1aXZvcyB1dGlsaXphZG9zIG5lc3NlIHByb2pldG9zIHBvZGVtIHNlciBlbmNvbnRyYWRvcyBubyBsaW5rIGFiYWl4by4gICAKW2xpbmsgcGFyYSBvcyBhcnF1aXZvc10oaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vcy9ydXg2cmd0NGNodDFjYW4vTm92byUyMHByb2pldG8lMjBSLnppcD9kbD0wKQoKIyMgTcOpdG9kbyBkZSBBbsOhbGlzZXMKCk5vIGRlY29ycmVyIGRhIGFuw6FsaXNlIHZvdSBmYXplciB2w6FyaWFzIHByZXZpc8O1ZXMgZGUgcG9wdWxhw6fDo28sIHBvaXMgbmVtIHRvZGFzIGFzIHRhYmVsYXMgYXByZXNlbnRhbSBkYWRvcyBkZSAyMDE5LiBQYXJhIHByZXZpc8OjbyBkYSBwb3B1bGHDp8Ojbywgdm91IG1lIGJhc2VhciBubyAqbcOpdG9kbyBhcml0bcOpdGljbyogcHJlc2VudGUgbm8gbGl2cm8gZGUgTWFyY29zIFZvbiBTcGVybGluZyBbQFZvblNwZXJsaW5nMjAxNF0uCiAgCgoqKk3DqXRvZG8gYXJpdG3DqXRpY28qKgogIApFc3RlIG3DqXRvZG8gcHJlc3N1cMO1ZSB1bWEgdGF4YSBkZSBjcmVzY2ltZW50byBjb25zdGFudGUgcGFyYSBvcyBhbm9zIHF1ZSBzZSBzZWd1ZW0sIGEgcGFydGlyIGRlIGRhZG9zIGNvbmhlY2lkb3MsIHBvciBleGVtcGxvLCBhIHBvcHVsYcOnw6NvIGRvIMO6bHRpbW8gY2Vuc28uIE1hdGVtYXRpY2FtZW50ZSwgcG9kZSBzZXIgcmVwcmVzZW50YWRvIGRhIHNlZ3VpbnRlIGZvcm1hOgoKJCRcZnJhY3tkUH17ZHR9ID0ga19hJCQKbm9zIHF1YWlzIGRQL2R0IHJlcHJlc2VudGEgYSB2YXJpYcOnw6NvIGRhIHBvcHVsYcOnw6NvIChQKSBwb3IgdW5pZGFkZSBkZSB0ZW1wbyAodCksIGUga2Egw6l1bWEgY29uc3RhbnRlLiBDb25zaWRlcmFuZG8gcXVlIFAxIMOpIGEgcG9wdWxhw6fDo28gZG8gcGVuw7psdGltbyBjZW5zbyAoYW5vIHQxKSBlIFAyLCBhIHBvcHVsYcOnw6NvIGRvIMO6bHRpbW8gY2Vuc28gKGFubyB0MiksIHRlbS1zZToKICAKJCRcaW50X3tQXzJ9XntQXzF9ID0ga19hXGludF97dF8xfV57dF8yfWR0JCQKCkludGVncmFuZG8gZW50cmUgb3MgbGltaXRlcyBkZWZpbmlkb3MsIHRlbS1zZToKICAKJCRQXzItUF8xID0ga19hKHRfMi10XzEpJCQKJCRrX2EgPSBcZnJhY3tQXzItUF8xfXt0XzItdF8xfSQkCgpVdGlsaXphbmRvLXNlIGEgZXF1YcOnw6NvLCBjaGVnYS1zZSDDoCBleHByZXNzw6NvIGdlcmFsIGRvIG3DqXRvZG8gYXJpdG3DqXRpY286CgokJFA9UF8yICsga19uKHQtdF8yKSQkCgpvbmRlIHQgcmVwcmVzZW50YSBvIGFubyBkYSBwcm9qZcOnw6NvLgogIApFc3RlIG3DqXRvZG8gYWRtaXRlIHF1ZSBhIHBvcHVsYcOnw6NvIHZhcmllIGxpbmVhcm1lbnRlIGNvbSBvIHRlbXBvIGUgcG9kZSBzZXIgdXRpbGl6YWRvIHBhcmEgYSBwcmV2aXPDo28gcG9wdWxhY2lvbmFsIHBhcmEgdW0gcGVyw61vZG8gcGVxdWVubywgZGUgMSBhIDUgYW5vcy4gUGFyYSBwcmV2aXPDo28gcG9yIHBlcsOtb2RvIG11aXRvIGxvbmdvLCB0b21hLXNlIGFjZW50dWFkYSBhIGRpc2NyZXDDom5jaWEgY29tIGEgcmVhbGlkYWRlIGhpc3TDs3JpY2EsIHVtYSB2ZXogcXVlIG8gY3Jlc2NpbWVudG8gw6kgcHJlc3N1cG9zdG8gaWxpbWl0YWRvLgogIApQYXJhIGFwbGljYXIgZXNzYSBmw7NybXVsYSBkbyBtw6l0b2RvIGFyaXRtw6l0aWNvLCB2b3UgdXNhciBlc3NhIGZ1bsOnw6NvIGxvZ28gYSBiYWl4by4KCmBgYHtyIGZvcm11bGEgbWV0b2RvIGFyaXRtZXRpY299CmZvcm11bGEgPC0gZnVuY3Rpb24oUDIsIHQyLCBQMCwgdDAsIHQpIHsKICBLYSA8LSAoUDIgLSBQMCkgLyAodDIgLSB0MCkKICBQdCA8LSBQMiArIEthICogKHQgLSB0MikKICByZXR1cm4oUHQpCn0KYGBgCgojIyBQcmVwYXJhw6fDo28gZG8gQW1iaWVudGUgUgogIApBbnRlcyBkZSBtYWlzIG5hZGEsIHZvdSBjYXJyZWdhciBvcyBwYWNvdGVzIHF1ZSB2b3UgdXNhciBwYXJhIG1hbmlwdWxhciBvcyBkYWRvcywgIGZhemVyIGFuw6FsaXNlcyBlIGdlcmFyIGVzc2UgcmVsYXTDs3Jpby4KYGBge3IgQ2FycmVnYW1lbnRvIGRlIFBhY290ZXMsIG1lc3NhZ2UgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGNhY2hlPSBUUlVFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFKQpsaWJyYXJ5KGZvcmVpZ24pCmxpYnJhcnkobG10ZXN0KQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeSh3cml0ZXhsKQpsaWJyYXJ5KHN0cmluZ2kpCmxpYnJhcnkoc3RyaW5ncikKbGlicmFyeShwdXJycikKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkobWFya2Rvd24pCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShodG1sdG9vbHMpCmxpYnJhcnkocnN0YXRpeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApsaWJyYXJ5KGVtbWVhbnMpCgpgYGAKCiMgTyBJTkZPUEVOCiAgCiJPIEluZm9wZW4gw6kgdW0gc2lzdGVtYSBkZSBpbmZvcm1hw6fDtWVzIGVzdGF0w61zdGljYXMgZG8gc2lzdGVtYSBwZW5pdGVuY2nDoXJpbyBicmFzaWxlaXJvLiBPIHNpc3RlbWEsIGF0dWFsaXphZG8gcGVsb3MgZ2VzdG9yZXMgZG9zIGVzdGFiZWxlY2ltZW50b3MgZGVzZGUgMjAwNCwgc2ludGV0aXphIGluZm9ybWHDp8O1ZXMgc29icmUgb3MgZXN0YWJlbGVjaW1lbnRvcyBwZW5haXMgZSBhIHBvcHVsYcOnw6NvIHByaXNpb25hbC4gRW0gMjAxNCwgbyBERVBFTiByZWZvcm11bG91IGEgbWV0b2RvbG9naWEgdXRpbGl6YWRhLCBjb20gdmlzdGFzIGEgbW9kZXJuaXphciBvIGluc3RydW1lbnRvIGRlIGNvbGV0YSBlIGFtcGxpYXIgbyBsZXF1ZSBkZSBpbmZvcm1hw6fDtWVzIGNvbGV0YWRhcy4gTyB0cmF0YW1lbnRvIGRvcyBkYWRvcyBwZXJtaXRpdSBhbXBsbyBkaWFnbsOzc3RpY28gZGEgcmVhbGlkYWRlIGVzdHVkYWRhLCBtYXMgcXVlIG7Do28gZXNnb3RhbSwgZGUgZm9ybWEgYWxndW1hLCB0b2RhcyBhcyBwb3NzaWJpbGlkYWRlcyBkZSBhbsOhbGlzZS4iCgojIyBDYXJyZWdhbWVudG9zIGRvcyBEYWRvcyBJbmljaWFpcyBQYXNzbyBhIFBhc3NvCgpQcmltZWlybyB2b3UgY3JpYXIgdW0gZGljaW9uw6FyaW8gZGUgZXN0YWRvcyBxdWUgdm91IHVzYXIuIEZpeiBpc3NvIGFmaW0gZGUgcGFkcm9uaWF6YXIgb3Mgbm9tZXMgZG9zIGVzdGFkb3MsIHBvaXMgYWxndW1hcyB0YWJlbGFzIGFwcmVzZW50YW0gb3Mgbm9tZXMgY29tcGxldG9zLCBvdXRyYXMgYXByZXNlbnRhbSBhcGVuYXMgYXMgc2lnbGFzIGRvcyBlc3RhZG9zLgoKYGBgIHtyIERpY2lvbsOhcmlvIGRlIGVzdGFkb3MsIGluY2x1ZGUgPSBGQUxTRX0KdWZfZGljdCA8LSBjKCJBY3JlIiA9ICJBQyIsCiAgICAgICAgICAgICAiQWxhZ29hcyIgPSAiQUwiLAogICAgICAgICAgICAgIkFtYXDDoSIgPSAiQVAiLAogICAgICAgICAgICAgIkFtYXpvbmFzIiA9ICJBTSIsCiAgICAgICAgICAgICAiQmFoaWEiID0gIkJBIiwKICAgICAgICAgICAgICJDZWFyw6EiID0gIkNFIiwKICAgICAgICAgICAgICJEaXN0cml0byBGZWRlcmFsIiA9ICJERiIsCiAgICAgICAgICAgICAiRXNww61yaXRvIFNhbnRvIiA9ICJFUyIsCiAgICAgICAgICAgICAiR29pw6FzIiA9ICJHTyIsCiAgICAgICAgICAgICAiTWFyYW5ow6NvIiA9ICJNQSIsCiAgICAgICAgICAgICAiTWF0byBHcm9zc28iID0gIk1UIiwKICAgICAgICAgICAgICJNYXRvIEdyb3NzbyBkbyBTdWwiID0gIk1TIiwKICAgICAgICAgICAgICJNaW5hcyBHZXJhaXMiID0gIk1HIiwKICAgICAgICAgICAgICJQYXLDoSIgPSAiUEEiLAogICAgICAgICAgICAgIlBhcmHDrWJhIiA9ICJQQiIsCiAgICAgICAgICAgICAiUGFyYW7DoSIgPSAiUFIiLAogICAgICAgICAgICAgIlBlcm5hbWJ1Y28iID0gIlBFIiwKICAgICAgICAgICAgICJQaWF1w60iID0gIlBJIiwKICAgICAgICAgICAgICJSaW8gZGUgSmFuZWlybyIgPSAiUkoiLAogICAgICAgICAgICAgIlJpbyBHcmFuZGUgZG8gTm9ydGUiID0gIlJOIiwKICAgICAgICAgICAgICJSaW8gR3JhbmRlIGRvIFN1bCIgPSAiUlMiLAogICAgICAgICAgICAgIlJvbmTDtG5pYSIgPSAiUk8iLAogICAgICAgICAgICAgIlJvcmFpbWEiID0gIlJSIiwKICAgICAgICAgICAgICJTYW50YSBDYXRhcmluYSIgPSAiU0MiLAogICAgICAgICAgICAgIlPDo28gUGF1bG8iID0gIlNQIiwKICAgICAgICAgICAgICJTZXJnaXBlIiA9ICJTRSIsCiAgICAgICAgICAgICAiVG9jYW50aW5zIiA9ICJUTyIpCgojIE1hcGVhbWVudG8gZGFzIFVGcyDDoHMgcmVnacO1ZXMKdWZfcmVnaWFvIDwtIGRhdGEuZnJhbWUoCiAgVUYgPSBjKCJSTyIsICJBQyIsICJBTSIsICJSUiIsICJQQSIsICJBUCIsICJUTyIsICJNQSIsICJQSSIsICJDRSIsICJSTiIsICJQQiIsICJQRSIsICJBTCIsICJTRSIsICJCQSIsICJNRyIsICJFUyIsICJSSiIsICJTUCIsICJQUiIsICJTQyIsICJSUyIsICJNUyIsICJNVCIsICJHTyIsICJERiIpLAogIHJlZ2lhbyA9IGMocmVwKCJOb3J0ZSIsIDcpLCByZXAoIk5vcmRlc3RlIiwgOSksIHJlcCgiU3VkZXN0ZSIsIDQpLCByZXAoIlN1bCIsIDMpLCByZXAoIkNlbnRyby1PZXN0ZSIsIDQpKQopCmBgYAoKYGBge3IgaGVhZCB1Zl9kaWN0fQpoZWFkKHVmX2RpY3QsIDIwKQpgYGAKCkFxdWkgYSBsaXN0YSBkZSBjb2x1bmFzIHF1ZSB2b3UgZXN0cmFpciBkYXMgdGFiZWxhcyBkbyBJTkZPUEVOLiBDcmllaSBlc3NhIGxpc3RhIHVzYW5kbyBtYW5pcHVsYcOnw6NvIGNvbSBFeGNlbC4KYGBge3IgQ29sdW5hcyB1c2FkYXMgSU5GT1BFTiwgaW5jbHVkZSA9IEZBTFNFfQpjb2x1bmFzIDwtIGMoUG9wdWxhw6fDo29fcHJpc2lvbmFsX1ByZXNvc19wcm92aXPDs3Jpb3Nfc2VtX2NvbmRlbmHDp8Ojb19KdXN0acOnYV9Fc3RhZHVhbF9NYXNjdWxpbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IFByZXNvcyBwcm92aXPDs3Jpb3MgKHNlbSBjb25kZW5hw6fDo28pIHwgSnVzdGnDp2EgRXN0YWR1YWwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfUHJlc29zX3Byb3Zpc8Ozcmlvc19zZW1fY29uZGVuYcOnw6NvX0p1c3Rpw6dhX0VzdGFkdWFsX0ZlbWluaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3MgcHJvdmlzw7NyaW9zIChzZW0gY29uZGVuYcOnw6NvKSB8IEp1c3Rpw6dhIEVzdGFkdWFsIEZlbWluaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfUHJlc29zX3Byb3Zpc8Ozcmlvc19zZW1fY29uZGVuYcOnw6NvX0p1c3Rpw6dhX0ZlZGVyYWxfTWFzY3VsaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3MgcHJvdmlzw7NyaW9zIChzZW0gY29uZGVuYcOnw6NvKSB8IEp1c3Rpw6dhIEZlZGVyYWwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfUHJlc29zX3Byb3Zpc8Ozcmlvc19zZW1fY29uZGVuYcOnw6NvX0p1c3Rpw6dhX0ZlZGVyYWxfRmVtaW5pbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IFByZXNvcyBwcm92aXPDs3Jpb3MgKHNlbSBjb25kZW5hw6fDo28pIHwgSnVzdGnDp2EgRmVkZXJhbCBGZW1pbmlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX1ByZXNvc19wcm92aXPDs3Jpb3Nfc2VtX2NvbmRlbmHDp8Ojb19PdXRyb3NKdXN0X1RyYWJfY8OtdmVsX01hc2N1bGlubwk9CSI0LjEgUG9wdWxhw6fDo28gcHJpc2lvbmFsIHwgUHJlc29zIHByb3Zpc8OzcmlvcyAoc2VtIGNvbmRlbmHDp8OjbykgfCBPdXRyb3MoSnVzdC4gVHJhYi4sIGPDrXZlbCkgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfUHJlc29zX3Byb3Zpc8Ozcmlvc19zZW1fY29uZGVuYcOnw6NvX091dHJvc0p1c3RfVHJhYl9jw612ZWxfRmVtaW5pbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IFByZXNvcyBwcm92aXPDs3Jpb3MgKHNlbSBjb25kZW5hw6fDo28pIHwgT3V0cm9zKEp1c3QuIFRyYWIuLCBjw612ZWwpIEZlbWluaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfUHJlc29zX3Byb3Zpc8Ozcmlvc19zZW1fY29uZGVuYcOnw6NvX1RvdGFsCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3MgcHJvdmlzw7NyaW9zIChzZW0gY29uZGVuYcOnw6NvKSB8IFRvdGFsIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfUHJlc29zX3NlbnRlbmNpYWRvc19yZWdpbWVfZmVjaGFkb19KdXN0acOnYV9Fc3RhZHVhbF9NYXNjdWxpbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IFByZXNvcyBzZW50ZW5jaWFkb3MgLSByZWdpbWUgZmVjaGFkbyB8IEp1c3Rpw6dhIEVzdGFkdWFsIE1hc2N1bGlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX1ByZXNvc19zZW50ZW5jaWFkb3NfcmVnaW1lX2ZlY2hhZG9fSnVzdGnDp2FfRXN0YWR1YWxfRmVtaW5pbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IFByZXNvcyBzZW50ZW5jaWFkb3MgLSByZWdpbWUgZmVjaGFkbyB8IEp1c3Rpw6dhIEVzdGFkdWFsIEZlbWluaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfUHJlc29zX3NlbnRlbmNpYWRvc19yZWdpbWVfZmVjaGFkb19KdXN0acOnYV9GZWRlcmFsX01hc2N1bGlubwk9CSI0LjEgUG9wdWxhw6fDo28gcHJpc2lvbmFsIHwgUHJlc29zIHNlbnRlbmNpYWRvcyAtIHJlZ2ltZSBmZWNoYWRvIHwgSnVzdGnDp2EgRmVkZXJhbCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIFBvcHVsYcOnw6NvX3ByaXNpb25hbF9QcmVzb3Nfc2VudGVuY2lhZG9zX3JlZ2ltZV9mZWNoYWRvX0p1c3Rpw6dhX0ZlZGVyYWxfRmVtaW5pbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IFByZXNvcyBzZW50ZW5jaWFkb3MgLSByZWdpbWUgZmVjaGFkbyB8IEp1c3Rpw6dhIEZlZGVyYWwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIFBvcHVsYcOnw6NvX3ByaXNpb25hbF9QcmVzb3Nfc2VudGVuY2lhZG9zX3JlZ2ltZV9mZWNoYWRvX091dHJvc0p1c3RfVHJhYl9jw612ZWxfTWFzY3VsaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3Mgc2VudGVuY2lhZG9zIC0gcmVnaW1lIGZlY2hhZG8gfCBPdXRyb3MoSnVzdC4gVHJhYi4sIGPDrXZlbCkgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfUHJlc29zX3NlbnRlbmNpYWRvc19yZWdpbWVfZmVjaGFkb19PdXRyb3NKdXN0X1RyYWJfY8OtdmVsX0ZlbWluaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3Mgc2VudGVuY2lhZG9zIC0gcmVnaW1lIGZlY2hhZG8gfCBPdXRyb3MoSnVzdC4gVHJhYi4sIGPDrXZlbCkgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIFBvcHVsYcOnw6NvX3ByaXNpb25hbF9QcmVzb3Nfc2VudGVuY2lhZG9zX3JlZ2ltZV9mZWNoYWRvX1RvdGFsCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3Mgc2VudGVuY2lhZG9zIC0gcmVnaW1lIGZlY2hhZG8gfCBUb3RhbCIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX1ByZXNvc19zZW50ZW5jaWFkb3NfcmVnaW1lX3NlbWlhYmVydG9fSnVzdGnDp2FfRXN0YWR1YWxfTWFzY3VsaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3Mgc2VudGVuY2lhZG9zIC0gcmVnaW1lIHNlbWlhYmVydG8gfCBKdXN0acOnYSBFc3RhZHVhbCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIFBvcHVsYcOnw6NvX3ByaXNpb25hbF9QcmVzb3Nfc2VudGVuY2lhZG9zX3JlZ2ltZV9zZW1pYWJlcnRvX0p1c3Rpw6dhX0VzdGFkdWFsX0ZlbWluaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3Mgc2VudGVuY2lhZG9zIC0gcmVnaW1lIHNlbWlhYmVydG8gfCBKdXN0acOnYSBFc3RhZHVhbCBGZW1pbmlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX1ByZXNvc19zZW50ZW5jaWFkb3NfcmVnaW1lX3NlbWlhYmVydG9fSnVzdGnDp2FfRmVkZXJhbF9NYXNjdWxpbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IFByZXNvcyBzZW50ZW5jaWFkb3MgLSByZWdpbWUgc2VtaWFiZXJ0byB8IEp1c3Rpw6dhIEZlZGVyYWwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfUHJlc29zX3NlbnRlbmNpYWRvc19yZWdpbWVfc2VtaWFiZXJ0b19KdXN0acOnYV9GZWRlcmFsX0ZlbWluaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3Mgc2VudGVuY2lhZG9zIC0gcmVnaW1lIHNlbWlhYmVydG8gfCBKdXN0acOnYSBGZWRlcmFsIEZlbWluaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfUHJlc29zX3NlbnRlbmNpYWRvc19yZWdpbWVfc2VtaWFiZXJ0b19PdXRyb3NKdXN0X1RyYWJfY8OtdmVsX01hc2N1bGlubwk9CSI0LjEgUG9wdWxhw6fDo28gcHJpc2lvbmFsIHwgUHJlc29zIHNlbnRlbmNpYWRvcyAtIHJlZ2ltZSBzZW1pYWJlcnRvIHwgT3V0cm9zKEp1c3QuIFRyYWIuLCBjw612ZWwpIE1hc2N1bGlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX1ByZXNvc19zZW50ZW5jaWFkb3NfcmVnaW1lX3NlbWlhYmVydG9fT3V0cm9zSnVzdF9UcmFiX2PDrXZlbF9GZW1pbmlubwk9CSI0LjEgUG9wdWxhw6fDo28gcHJpc2lvbmFsIHwgUHJlc29zIHNlbnRlbmNpYWRvcyAtIHJlZ2ltZSBzZW1pYWJlcnRvIHwgT3V0cm9zKEp1c3QuIFRyYWIuLCBjw612ZWwpIEZlbWluaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfUHJlc29zX3NlbnRlbmNpYWRvc19yZWdpbWVfc2VtaWFiZXJ0b19Ub3RhbAk9CSI0LjEgUG9wdWxhw6fDo28gcHJpc2lvbmFsIHwgUHJlc29zIHNlbnRlbmNpYWRvcyAtIHJlZ2ltZSBzZW1pYWJlcnRvIHwgVG90YWwiCSwKICAgICAgICAgICAgIFBvcHVsYcOnw6NvX3ByaXNpb25hbF9QcmVzb3Nfc2VudGVuY2lhZG9zX3JlZ2ltZV9hYmVydG9fSnVzdGnDp2FfRXN0YWR1YWxfTWFzY3VsaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3Mgc2VudGVuY2lhZG9zIC0gcmVnaW1lIGFiZXJ0byB8IEp1c3Rpw6dhIEVzdGFkdWFsIE1hc2N1bGlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX1ByZXNvc19zZW50ZW5jaWFkb3NfcmVnaW1lX2FiZXJ0b19KdXN0acOnYV9Fc3RhZHVhbF9GZW1pbmlubwk9CSI0LjEgUG9wdWxhw6fDo28gcHJpc2lvbmFsIHwgUHJlc29zIHNlbnRlbmNpYWRvcyAtIHJlZ2ltZSBhYmVydG8gfCBKdXN0acOnYSBFc3RhZHVhbCBGZW1pbmlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX1ByZXNvc19zZW50ZW5jaWFkb3NfcmVnaW1lX2FiZXJ0b19KdXN0acOnYV9GZWRlcmFsX01hc2N1bGlubwk9CSI0LjEgUG9wdWxhw6fDo28gcHJpc2lvbmFsIHwgUHJlc29zIHNlbnRlbmNpYWRvcyAtIHJlZ2ltZSBhYmVydG8gfCBKdXN0acOnYSBGZWRlcmFsIE1hc2N1bGlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX1ByZXNvc19zZW50ZW5jaWFkb3NfcmVnaW1lX2FiZXJ0b19KdXN0acOnYV9GZWRlcmFsX0ZlbWluaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3Mgc2VudGVuY2lhZG9zIC0gcmVnaW1lIGFiZXJ0byB8IEp1c3Rpw6dhIEZlZGVyYWwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIFBvcHVsYcOnw6NvX3ByaXNpb25hbF9QcmVzb3Nfc2VudGVuY2lhZG9zX3JlZ2ltZV9hYmVydG9fT3V0cm9zSnVzdF9UcmFiX2PDrXZlbF9NYXNjdWxpbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IFByZXNvcyBzZW50ZW5jaWFkb3MgLSByZWdpbWUgYWJlcnRvIHwgT3V0cm9zKEp1c3QuIFRyYWIuLCBjw612ZWwpIE1hc2N1bGlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX1ByZXNvc19zZW50ZW5jaWFkb3NfcmVnaW1lX2FiZXJ0b19PdXRyb3NKdXN0X1RyYWJfY8OtdmVsX0ZlbWluaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBQcmVzb3Mgc2VudGVuY2lhZG9zIC0gcmVnaW1lIGFiZXJ0byB8IE91dHJvcyhKdXN0LiBUcmFiLiwgY8OtdmVsKSBGZW1pbmlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX1ByZXNvc19zZW50ZW5jaWFkb3NfcmVnaW1lX2FiZXJ0b19Ub3RhbAk9CSI0LjEgUG9wdWxhw6fDo28gcHJpc2lvbmFsIHwgUHJlc29zIHNlbnRlbmNpYWRvcyAtIHJlZ2ltZSBhYmVydG8gfCBUb3RhbCIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX01lZGlkYV9kZV9zZWd1cmFuw6dhX2ludGVybmHDp8Ojb19KdXN0acOnYV9Fc3RhZHVhbF9NYXNjdWxpbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IE1lZGlkYSBkZSBzZWd1cmFuw6dhIC0gaW50ZXJuYcOnw6NvIHwgSnVzdGnDp2EgRXN0YWR1YWwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfTWVkaWRhX2RlX3NlZ3VyYW7Dp2FfaW50ZXJuYcOnw6NvX0p1c3Rpw6dhX0VzdGFkdWFsX0ZlbWluaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBNZWRpZGEgZGUgc2VndXJhbsOnYSAtIGludGVybmHDp8OjbyB8IEp1c3Rpw6dhIEVzdGFkdWFsIEZlbWluaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfTWVkaWRhX2RlX3NlZ3VyYW7Dp2FfaW50ZXJuYcOnw6NvX0p1c3Rpw6dhX0ZlZGVyYWxfTWFzY3VsaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBNZWRpZGEgZGUgc2VndXJhbsOnYSAtIGludGVybmHDp8OjbyB8IEp1c3Rpw6dhIEZlZGVyYWwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfTWVkaWRhX2RlX3NlZ3VyYW7Dp2FfaW50ZXJuYcOnw6NvX0p1c3Rpw6dhX0ZlZGVyYWxfRmVtaW5pbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IE1lZGlkYSBkZSBzZWd1cmFuw6dhIC0gaW50ZXJuYcOnw6NvIHwgSnVzdGnDp2EgRmVkZXJhbCBGZW1pbmlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX01lZGlkYV9kZV9zZWd1cmFuw6dhX2ludGVybmHDp8Ojb19PdXRyb3NKdXN0X1RyYWJfY8OtdmVsX01hc2N1bGlubwk9CSI0LjEgUG9wdWxhw6fDo28gcHJpc2lvbmFsIHwgTWVkaWRhIGRlIHNlZ3VyYW7Dp2EgLSBpbnRlcm5hw6fDo28gfCBPdXRyb3MoSnVzdC4gVHJhYi4sIGPDrXZlbCkgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfTWVkaWRhX2RlX3NlZ3VyYW7Dp2FfaW50ZXJuYcOnw6NvX091dHJvc0p1c3RfVHJhYl9jw612ZWxfRmVtaW5pbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IE1lZGlkYSBkZSBzZWd1cmFuw6dhIC0gaW50ZXJuYcOnw6NvIHwgT3V0cm9zKEp1c3QuIFRyYWIuLCBjw612ZWwpIEZlbWluaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfTWVkaWRhX2RlX3NlZ3VyYW7Dp2FfaW50ZXJuYcOnw6NvX1RvdGFsCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBNZWRpZGEgZGUgc2VndXJhbsOnYSAtIGludGVybmHDp8OjbyB8IFRvdGFsIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfTWVkaWRhX2RlX3NlZ3VyYW7Dp2FfdHJhdGFtZW50b19hbWJ1bGF0b3JpYWxfSnVzdGnDp2FfRXN0YWR1YWxfTWFzY3VsaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBNZWRpZGEgZGUgc2VndXJhbsOnYSAtIHRyYXRhbWVudG8gYW1idWxhdG9yaWFsIHwgSnVzdGnDp2EgRXN0YWR1YWwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfTWVkaWRhX2RlX3NlZ3VyYW7Dp2FfdHJhdGFtZW50b19hbWJ1bGF0b3JpYWxfSnVzdGnDp2FfRXN0YWR1YWxfRmVtaW5pbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IE1lZGlkYSBkZSBzZWd1cmFuw6dhIC0gdHJhdGFtZW50byBhbWJ1bGF0b3JpYWwgfCBKdXN0acOnYSBFc3RhZHVhbCBGZW1pbmlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX01lZGlkYV9kZV9zZWd1cmFuw6dhX3RyYXRhbWVudG9fYW1idWxhdG9yaWFsX0p1c3Rpw6dhX0ZlZGVyYWxfTWFzY3VsaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBNZWRpZGEgZGUgc2VndXJhbsOnYSAtIHRyYXRhbWVudG8gYW1idWxhdG9yaWFsIHwgSnVzdGnDp2EgRmVkZXJhbCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIFBvcHVsYcOnw6NvX3ByaXNpb25hbF9NZWRpZGFfZGVfc2VndXJhbsOnYV90cmF0YW1lbnRvX2FtYnVsYXRvcmlhbF9KdXN0acOnYV9GZWRlcmFsX0ZlbWluaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBNZWRpZGEgZGUgc2VndXJhbsOnYSAtIHRyYXRhbWVudG8gYW1idWxhdG9yaWFsIHwgSnVzdGnDp2EgRmVkZXJhbCBGZW1pbmlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX01lZGlkYV9kZV9zZWd1cmFuw6dhX3RyYXRhbWVudG9fYW1idWxhdG9yaWFsX091dHJvc0p1c3RfVHJhYl9jw612ZWxfTWFzY3VsaW5vCT0JIjQuMSBQb3B1bGHDp8OjbyBwcmlzaW9uYWwgfCBNZWRpZGEgZGUgc2VndXJhbsOnYSAtIHRyYXRhbWVudG8gYW1idWxhdG9yaWFsIHwgT3V0cm9zKEp1c3QuIFRyYWIuLCBjw612ZWwpIE1hc2N1bGlubyIJLAogICAgICAgICAgICAgUG9wdWxhw6fDo29fcHJpc2lvbmFsX01lZGlkYV9kZV9zZWd1cmFuw6dhX3RyYXRhbWVudG9fYW1idWxhdG9yaWFsX091dHJvc0p1c3RfVHJhYl9jw612ZWxfRmVtaW5pbm8JPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IE1lZGlkYSBkZSBzZWd1cmFuw6dhIC0gdHJhdGFtZW50byBhbWJ1bGF0b3JpYWwgfCBPdXRyb3MoSnVzdC4gVHJhYi4sIGPDrXZlbCkgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIFBvcHVsYcOnw6NvX3ByaXNpb25hbF9NZWRpZGFfZGVfc2VndXJhbsOnYV90cmF0YW1lbnRvX2FtYnVsYXRvcmlhbF9Ub3RhbAk9CSI0LjEgUG9wdWxhw6fDo28gcHJpc2lvbmFsIHwgTWVkaWRhIGRlIHNlZ3VyYW7Dp2EgLSB0cmF0YW1lbnRvIGFtYnVsYXRvcmlhbCB8IFRvdGFsIgksCiAgICAgICAgICAgICBQb3B1bGHDp8Ojb19wcmlzaW9uYWxfVG90YWwJPQkiNC4xIFBvcHVsYcOnw6NvIHByaXNpb25hbCB8IFRvdGFsIgksCiAgICAgICAgICAgICBmYWl4YV9ldGFyaWFfTWFzY3VsaW5vXzE4X2FfMjRfYW5vcwk9CSI1LjEgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZmFpeGEgZXTDoXJpYSB8IDE4IGEgMjQgYW5vcyB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgZmFpeGFfZXRhcmlhX0ZlbWluaW5vXzE4X2FfMjRfYW5vcwk9CSI1LjEgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZmFpeGEgZXTDoXJpYSB8IDE4IGEgMjQgYW5vcyB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBmYWl4YV9ldGFyaWFfVG90YWxfMThfYV8yNF9hbm9zCT0JIjUuMSBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBmYWl4YSBldMOhcmlhIHwgMTggYSAyNCBhbm9zIHwgVG90YWwiCSwKICAgICAgICAgICAgIGZhaXhhX2V0YXJpYV9NYXNjdWxpbm9fMjVfYV8yOV9hbm9zCT0JIjUuMSBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBmYWl4YSBldMOhcmlhIHwgMjUgYSAyOSBhbm9zIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBmYWl4YV9ldGFyaWFfRmVtaW5pbm9fMjVfYV8yOV9hbm9zCT0JIjUuMSBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBmYWl4YSBldMOhcmlhIHwgMjUgYSAyOSBhbm9zIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGZhaXhhX2V0YXJpYV9Ub3RhbF8yNV9hXzI5X2Fub3MJPQkiNS4xIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGZhaXhhIGV0w6FyaWEgfCAyNSBhIDI5IGFub3MgfCBUb3RhbCIJLAogICAgICAgICAgICAgZmFpeGFfZXRhcmlhX01hc2N1bGlub18zMF9hXzM0X2Fub3MJPQkiNS4xIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGZhaXhhIGV0w6FyaWEgfCAzMCBhIDM0IGFub3MgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGZhaXhhX2V0YXJpYV9GZW1pbmlub18zMF9hXzM0X2Fub3MJPQkiNS4xIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGZhaXhhIGV0w6FyaWEgfCAzMCBhIDM0IGFub3MgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgZmFpeGFfZXRhcmlhX1RvdGFsXzMwX2FfMzRfYW5vcwk9CSI1LjEgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZmFpeGEgZXTDoXJpYSB8IDMwIGEgMzQgYW5vcyB8IFRvdGFsIgksCiAgICAgICAgICAgICBmYWl4YV9ldGFyaWFfTWFzY3VsaW5vXzM1X2FfNDVfYW5vcwk9CSI1LjEgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZmFpeGEgZXTDoXJpYSB8IDM1IGEgNDUgYW5vcyB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgZmFpeGFfZXRhcmlhX0ZlbWluaW5vXzM1X2FfNDVfYW5vcwk9CSI1LjEgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZmFpeGEgZXTDoXJpYSB8IDM1IGEgNDUgYW5vcyB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBmYWl4YV9ldGFyaWFfVG90YWxfMzVfYV80NV9hbm9zCT0JIjUuMSBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBmYWl4YSBldMOhcmlhIHwgMzUgYSA0NSBhbm9zIHwgVG90YWwiCSwKICAgICAgICAgICAgIGZhaXhhX2V0YXJpYV9NYXNjdWxpbm9fNDZfYV82MF9hbm9zCT0JIjUuMSBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBmYWl4YSBldMOhcmlhIHwgNDYgYSA2MCBhbm9zIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBmYWl4YV9ldGFyaWFfRmVtaW5pbm9fNDZfYV82MF9hbm9zCT0JIjUuMSBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBmYWl4YSBldMOhcmlhIHwgNDYgYSA2MCBhbm9zIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGZhaXhhX2V0YXJpYV9Ub3RhbF80Nl9hXzYwX2Fub3MJPQkiNS4xIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGZhaXhhIGV0w6FyaWEgfCA0NiBhIDYwIGFub3MgfCBUb3RhbCIJLAogICAgICAgICAgICAgZmFpeGFfZXRhcmlhX01hc2N1bGlub182MV9hXzcwX2Fub3MJPQkiNS4xIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGZhaXhhIGV0w6FyaWEgfCA2MSBhIDcwIGFub3MgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGZhaXhhX2V0YXJpYV9GZW1pbmlub182MV9hXzcwX2Fub3MJPQkiNS4xIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGZhaXhhIGV0w6FyaWEgfCA2MSBhIDcwIGFub3MgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgZmFpeGFfZXRhcmlhX1RvdGFsXzYxX2FfNzBfYW5vcwk9CSI1LjEgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZmFpeGEgZXTDoXJpYSB8IDYxIGEgNzAgYW5vcyB8IFRvdGFsIgksCiAgICAgICAgICAgICBmYWl4YV9ldGFyaWFfTWFzY3VsaW5vX01haXNfZGVfNzBfYW5vcwk9CSI1LjEgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZmFpeGEgZXTDoXJpYSB8IE1haXMgZGUgNzAgYW5vcyB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgZmFpeGFfZXRhcmlhX0ZlbWluaW5vX01haXNfZGVfNzBfYW5vcwk9CSI1LjEgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZmFpeGEgZXTDoXJpYSB8IE1haXMgZGUgNzAgYW5vcyB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBmYWl4YV9ldGFyaWFfVG90YWxfTWFpc19kZV83MF9hbm9zCT0JIjUuMSBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBmYWl4YSBldMOhcmlhIHwgTWFpcyBkZSA3MCBhbm9zIHwgVG90YWwiCSwKICAgICAgICAgICAgIGZhaXhhX2V0YXJpYV9NYXNjdWxpbm9fTsOjb19pbmZvcm1hZG8JPQkiNS4xIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGZhaXhhIGV0w6FyaWEgfCBOw6NvIGluZm9ybWFkbyB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgZmFpeGFfZXRhcmlhX0ZlbWluaW5vX07Do29faW5mb3JtYWRvCT0JIjUuMSBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBmYWl4YSBldMOhcmlhIHwgTsOjbyBpbmZvcm1hZG8gfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgZXRuaWFfTWFzY3VsaW5vX0JyYW5jYQk9CSI1LjIgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgY29yIGRlIHBlbGUvcmHDp2EvZXRuaWEgfCBCcmFuY2EgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGV0bmlhX0ZlbWluaW5vX0JyYW5jYQk9CSI1LjIgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgY29yIGRlIHBlbGUvcmHDp2EvZXRuaWEgfCBCcmFuY2EgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgZXRuaWFfVG90YWxfQnJhbmNhCT0JIjUuMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBjb3IgZGUgcGVsZS9yYcOnYS9ldG5pYSB8IEJyYW5jYSB8IFRvdGFsIgksCiAgICAgICAgICAgICBldG5pYV9NYXNjdWxpbm9fUHJldGEJPQkiNS4yIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGNvciBkZSBwZWxlL3Jhw6dhL2V0bmlhIHwgUHJldGEgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGV0bmlhX0ZlbWluaW5vX1ByZXRhCT0JIjUuMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBjb3IgZGUgcGVsZS9yYcOnYS9ldG5pYSB8IFByZXRhIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGV0bmlhX1RvdGFsX1ByZXRhCT0JIjUuMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBjb3IgZGUgcGVsZS9yYcOnYS9ldG5pYSB8IFByZXRhIHwgVG90YWwiCSwKICAgICAgICAgICAgIGV0bmlhX01hc2N1bGlub19QYXJkYQk9CSI1LjIgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgY29yIGRlIHBlbGUvcmHDp2EvZXRuaWEgfCBQYXJkYSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgZXRuaWFfRmVtaW5pbm9fUGFyZGEJPQkiNS4yIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGNvciBkZSBwZWxlL3Jhw6dhL2V0bmlhIHwgUGFyZGEgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgZXRuaWFfVG90YWxfUGFyZGEJPQkiNS4yIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGNvciBkZSBwZWxlL3Jhw6dhL2V0bmlhIHwgUGFyZGEgfCBUb3RhbCIJLAogICAgICAgICAgICAgZXRuaWFfTWFzY3VsaW5vX0FtYXJlbGEJPQkiNS4yIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGNvciBkZSBwZWxlL3Jhw6dhL2V0bmlhIHwgQW1hcmVsYSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgZXRuaWFfRmVtaW5pbm9fQW1hcmVsYQk9CSI1LjIgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgY29yIGRlIHBlbGUvcmHDp2EvZXRuaWEgfCBBbWFyZWxhIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGV0bmlhX1RvdGFsX0FtYXJlbGEJPQkiNS4yIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGNvciBkZSBwZWxlL3Jhw6dhL2V0bmlhIHwgQW1hcmVsYSB8IFRvdGFsIgksCiAgICAgICAgICAgICBldG5pYV9NYXNjdWxpbm9fSW5kw61nZW5hCT0JIjUuMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBjb3IgZGUgcGVsZS9yYcOnYS9ldG5pYSB8IEluZMOtZ2VuYSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgZXRuaWFfRmVtaW5pbm9fSW5kw61nZW5hCT0JIjUuMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBjb3IgZGUgcGVsZS9yYcOnYS9ldG5pYSB8IEluZMOtZ2VuYSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBldG5pYV9Ub3RhbF9JbmTDrWdlbmEJPQkiNS4yIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGNvciBkZSBwZWxlL3Jhw6dhL2V0bmlhIHwgSW5kw61nZW5hIHwgVG90YWwiCSwKICAgICAgICAgICAgIGdyYXVfZGVfaW5zdHJ1Y2FvX01hc2N1bGlub19BbmFsZmFiZXRvCT0JIjUuNiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBncmF1IGRlIGluc3RydcOnw6NvIHwgQW5hbGZhYmV0byB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgZ3JhdV9kZV9pbnN0cnVjYW9fRmVtaW5pbm9fQW5hbGZhYmV0bwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEFuYWxmYWJldG8gfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgZ3JhdV9kZV9pbnN0cnVjYW9fVG90YWxfQW5hbGZhYmV0bwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEFuYWxmYWJldG8gfCBUb3RhbCIJLAogICAgICAgICAgICAgZ3JhdV9kZV9pbnN0cnVjYW9fTWFzY3VsaW5vX0FsZmFiZXRpemFkb19zZW1fY3Vyc29zX3JlZ3VsYXJlcwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEFsZmFiZXRpemFkbyAoc2VtIGN1cnNvcyByZWd1bGFyZXMpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19GZW1pbmlub19BbGZhYmV0aXphZG9fc2VtX2N1cnNvc19yZWd1bGFyZXMJPQkiNS42IFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGdyYXUgZGUgaW5zdHJ1w6fDo28gfCBBbGZhYmV0aXphZG8gKHNlbSBjdXJzb3MgcmVndWxhcmVzKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19Ub3RhbF9BbGZhYmV0aXphZG9fc2VtX2N1cnNvc19yZWd1bGFyZXMJPQkiNS42IFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGdyYXUgZGUgaW5zdHJ1w6fDo28gfCBBbGZhYmV0aXphZG8gKHNlbSBjdXJzb3MgcmVndWxhcmVzKSB8IFRvdGFsIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19NYXNjdWxpbm9fRW5zaW5vX0Z1bmRhbWVudGFsX0luY29tcGxldG8JPQkiNS42IFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGdyYXUgZGUgaW5zdHJ1w6fDo28gfCBFbnNpbm8gRnVuZGFtZW50YWwgSW5jb21wbGV0byB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgZ3JhdV9kZV9pbnN0cnVjYW9fRmVtaW5pbm9fRW5zaW5vX0Z1bmRhbWVudGFsX0luY29tcGxldG8JPQkiNS42IFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGdyYXUgZGUgaW5zdHJ1w6fDo28gfCBFbnNpbm8gRnVuZGFtZW50YWwgSW5jb21wbGV0byB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19Ub3RhbF9FbnNpbm9fRnVuZGFtZW50YWxfSW5jb21wbGV0bwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEVuc2lubyBGdW5kYW1lbnRhbCBJbmNvbXBsZXRvIHwgVG90YWwiCSwKICAgICAgICAgICAgIGdyYXVfZGVfaW5zdHJ1Y2FvX01hc2N1bGlub19FbnNpbm9fRnVuZGFtZW50YWxfQ29tcGxldG8JPQkiNS42IFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGdyYXUgZGUgaW5zdHJ1w6fDo28gfCBFbnNpbm8gRnVuZGFtZW50YWwgQ29tcGxldG8gfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGdyYXVfZGVfaW5zdHJ1Y2FvX0ZlbWluaW5vX0Vuc2lub19GdW5kYW1lbnRhbF9Db21wbGV0bwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEVuc2lubyBGdW5kYW1lbnRhbCBDb21wbGV0byB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19Ub3RhbF9FbnNpbm9fRnVuZGFtZW50YWxfQ29tcGxldG8JPQkiNS42IFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGdyYXUgZGUgaW5zdHJ1w6fDo28gfCBFbnNpbm8gRnVuZGFtZW50YWwgQ29tcGxldG8gfCBUb3RhbCIJLAogICAgICAgICAgICAgZ3JhdV9kZV9pbnN0cnVjYW9fTWFzY3VsaW5vX0Vuc2lub19Nw6lkaW9fSW5jb21wbGV0bwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEVuc2lubyBNw6lkaW8gSW5jb21wbGV0byB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgZ3JhdV9kZV9pbnN0cnVjYW9fRmVtaW5pbm9fRW5zaW5vX03DqWRpb19JbmNvbXBsZXRvCT0JIjUuNiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBncmF1IGRlIGluc3RydcOnw6NvIHwgRW5zaW5vIE3DqWRpbyBJbmNvbXBsZXRvIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGdyYXVfZGVfaW5zdHJ1Y2FvX1RvdGFsX0Vuc2lub19Nw6lkaW9fSW5jb21wbGV0bwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEVuc2lubyBNw6lkaW8gSW5jb21wbGV0byB8IFRvdGFsIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19NYXNjdWxpbm9fRW5zaW5vX03DqWRpb19Db21wbGV0bwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEVuc2lubyBNw6lkaW8gQ29tcGxldG8gfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGdyYXVfZGVfaW5zdHJ1Y2FvX0ZlbWluaW5vX0Vuc2lub19Nw6lkaW9fQ29tcGxldG8JPQkiNS42IFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGdyYXUgZGUgaW5zdHJ1w6fDo28gfCBFbnNpbm8gTcOpZGlvIENvbXBsZXRvIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGdyYXVfZGVfaW5zdHJ1Y2FvX1RvdGFsX0Vuc2lub19Nw6lkaW9fQ29tcGxldG8JPQkiNS42IFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGdyYXUgZGUgaW5zdHJ1w6fDo28gfCBFbnNpbm8gTcOpZGlvIENvbXBsZXRvIHwgVG90YWwiCSwKICAgICAgICAgICAgIGdyYXVfZGVfaW5zdHJ1Y2FvX01hc2N1bGlub19FbnNpbm9fU3VwZXJpb3JfSW5jb21wbGV0bwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEVuc2lubyBTdXBlcmlvciBJbmNvbXBsZXRvIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19GZW1pbmlub19FbnNpbm9fU3VwZXJpb3JfSW5jb21wbGV0bwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEVuc2lubyBTdXBlcmlvciBJbmNvbXBsZXRvIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGdyYXVfZGVfaW5zdHJ1Y2FvX1RvdGFsX0Vuc2lub19TdXBlcmlvcl9JbmNvbXBsZXRvCT0JIjUuNiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBncmF1IGRlIGluc3RydcOnw6NvIHwgRW5zaW5vIFN1cGVyaW9yIEluY29tcGxldG8gfCBUb3RhbCIJLAogICAgICAgICAgICAgZ3JhdV9kZV9pbnN0cnVjYW9fTWFzY3VsaW5vX0Vuc2lub19TdXBlcmlvcl9Db21wbGV0bwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEVuc2lubyBTdXBlcmlvciBDb21wbGV0byB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgZ3JhdV9kZV9pbnN0cnVjYW9fRmVtaW5pbm9fRW5zaW5vX1N1cGVyaW9yX0NvbXBsZXRvCT0JIjUuNiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBncmF1IGRlIGluc3RydcOnw6NvIHwgRW5zaW5vIFN1cGVyaW9yIENvbXBsZXRvIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGdyYXVfZGVfaW5zdHJ1Y2FvX1RvdGFsX0Vuc2lub19TdXBlcmlvcl9Db21wbGV0bwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEVuc2lubyBTdXBlcmlvciBDb21wbGV0byB8IFRvdGFsIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19NYXNjdWxpbm9fRW5zaW5vX2FjaW1hX2RlX1N1cGVyaW9yX0NvbXBsZXRvCT0JIjUuNiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBncmF1IGRlIGluc3RydcOnw6NvIHwgRW5zaW5vIGFjaW1hIGRlIFN1cGVyaW9yIENvbXBsZXRvIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19GZW1pbmlub19FbnNpbm9fYWNpbWFfZGVfU3VwZXJpb3JfQ29tcGxldG8JPQkiNS42IFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIGdyYXUgZGUgaW5zdHJ1w6fDo28gfCBFbnNpbm8gYWNpbWEgZGUgU3VwZXJpb3IgQ29tcGxldG8gfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgZ3JhdV9kZV9pbnN0cnVjYW9fVG90YWxfRW5zaW5vX2FjaW1hX2RlX1N1cGVyaW9yX0NvbXBsZXRvCT0JIjUuNiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBncmF1IGRlIGluc3RydcOnw6NvIHwgRW5zaW5vIGFjaW1hIGRlIFN1cGVyaW9yIENvbXBsZXRvIHwgVG90YWwiCSwKICAgICAgICAgICAgIGdyYXVfZGVfaW5zdHJ1Y2FvX01hc2N1bGlub19Ow6NvX0luZm9ybWFkbwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IE7Do28gSW5mb3JtYWRvIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19GZW1pbmlub19Ow6NvX0luZm9ybWFkbwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IE7Do28gSW5mb3JtYWRvIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGdyYXVfZGVfaW5zdHJ1Y2FvX1RvdGFsX07Do29fSW5mb3JtYWRvCT0JIjUuNiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBncmF1IGRlIGluc3RydcOnw6NvIHwgTsOjbyBJbmZvcm1hZG8gfCBUb3RhbCIJLAogICAgICAgICAgICAgZ3JhdV9kZV9pbnN0cnVjYW9fTWFzY3VsaW5vCT0JIjUuNiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciBncmF1IGRlIGluc3RydcOnw6NvIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19GZW1pbmlubwk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBncmF1X2RlX2luc3RydWNhb19Ub3RhbAk9CSI1LjYgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgZ3JhdSBkZSBpbnN0cnXDp8OjbyB8IFRvdGFsIgksCiAgICAgICAgICAgICB0ZW1wb190b3RhbF9kZV9wZW5hX01hc2N1bGlub19BdMOpXzZfbWVzZXMJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgQXTDqSA2IG1lc2VzIChpbmNsdXNpdmUpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICB0ZW1wb190b3RhbF9kZV9wZW5hX0ZlbWluaW5vX0F0w6lfNl9tZXNlcwk9CSI1LjEyIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIHRvdGFsIGRlIHBlbmFzIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlICkgfCBBdMOpIDYgbWVzZXMgKGluY2x1c2l2ZSkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgdGVtcG9fdG90YWxfZGVfcGVuYV9NYXNjdWxpbm9fTWFpc19kZV82X21lc2VzX2F0w6lfMV9hbm8JPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSA2IG1lc2VzIGF0w6kgMSBhbm8gKGluY2x1c2l2ZSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3RvdGFsX2RlX3BlbmFfRmVtaW5pbm9fTWFpc19kZV82X21lc2VzX2F0w6lfMV9hbm8JPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSA2IG1lc2VzIGF0w6kgMSBhbm8gKGluY2x1c2l2ZSkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgdGVtcG9fdG90YWxfZGVfcGVuYV9NYXNjdWxpbm9fTWFpc19kZV8xX2Fub19hdMOpXzJfYW5vcwk9CSI1LjEyIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIHRvdGFsIGRlIHBlbmFzIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlICkgfCBNYWlzIGRlIDEgYW5vIGF0w6kgMiBhbm9zIChpbmNsdXNpdmUpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICB0ZW1wb190b3RhbF9kZV9wZW5hX0ZlbWluaW5vX01haXNfZGVfMV9hbm9fYXTDqV8yX2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSAxIGFubyBhdMOpIDIgYW5vcyAoaW5jbHVzaXZlKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICB0ZW1wb190b3RhbF9kZV9wZW5hX01hc2N1bGlub19NYWlzX2RlXzJfYXTDqV80X2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSAyIGF0w6kgNCBhbm9zIChpbmNsdXNpdmUpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICB0ZW1wb190b3RhbF9kZV9wZW5hX0ZlbWluaW5vX01haXNfZGVfMl9hdMOpXzRfYW5vcwk9CSI1LjEyIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIHRvdGFsIGRlIHBlbmFzIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlICkgfCBNYWlzIGRlIDIgYXTDqSA0IGFub3MgKGluY2x1c2l2ZSkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgdGVtcG9fdG90YWxfZGVfcGVuYV9NYXNjdWxpbm9fTWFpc19kZV80X2F0w6lfOF9hbm9zCT0JIjUuMTIgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgdGVtcG8gdG90YWwgZGUgcGVuYXMgKHByZXNvcy9hcyBjb25kZW5hZG9zL2FzIGUgKSB8IE1haXMgZGUgNCBhdMOpIDggYW5vcyAoaW5jbHVzaXZlKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgdGVtcG9fdG90YWxfZGVfcGVuYV9GZW1pbmlub19NYWlzX2RlXzRfYXTDqV84X2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSA0IGF0w6kgOCBhbm9zIChpbmNsdXNpdmUpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3RvdGFsX2RlX3BlbmFfTWFzY3VsaW5vX01haXNfZGVfOF9hdMOpXzE1X2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSA4IGF0w6kgMTUgYW5vcyAoaW5jbHVzaXZlKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgdGVtcG9fdG90YWxfZGVfcGVuYV9GZW1pbmlub19NYWlzX2RlXzhfYXTDqV8xNV9hbm9zCT0JIjUuMTIgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgdGVtcG8gdG90YWwgZGUgcGVuYXMgKHByZXNvcy9hcyBjb25kZW5hZG9zL2FzIGUgKSB8IE1haXMgZGUgOCBhdMOpIDE1IGFub3MgKGluY2x1c2l2ZSkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgdGVtcG9fdG90YWxfZGVfcGVuYV9NYXNjdWxpbm9fTWFpc19kZV8xNV9hdMOpXzIwX2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSAxNSBhdMOpIDIwIGFub3MgKGluY2x1c2l2ZSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3RvdGFsX2RlX3BlbmFfRmVtaW5pbm9fTWFpc19kZV8xNV9hdMOpXzIwX2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSAxNSBhdMOpIDIwIGFub3MgKGluY2x1c2l2ZSkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgdGVtcG9fdG90YWxfZGVfcGVuYV9NYXNjdWxpbm9fTWFpc19kZV8yMF9hdMOpXzMwX2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSAyMCBhdMOpIDMwIGFub3MgKGluY2x1c2l2ZSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3RvdGFsX2RlX3BlbmFfRmVtaW5pbm9fTWFpc19kZV8yMF9hdMOpXzMwX2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSAyMCBhdMOpIDMwIGFub3MgKGluY2x1c2l2ZSkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgdGVtcG9fdG90YWxfZGVfcGVuYV9NYXNjdWxpbm9fTWFpc19kZV8zMF9hdMOpXzUwX2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSAzMCBhdMOpIDUwIGFub3MgKGluY2x1c2l2ZSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3RvdGFsX2RlX3BlbmFfRmVtaW5pbm9fTWFpc19kZV8zMF9hdMOpXzUwX2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSAzMCBhdMOpIDUwIGFub3MgKGluY2x1c2l2ZSkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgdGVtcG9fdG90YWxfZGVfcGVuYV9NYXNjdWxpbm9fTWFpc19kZV81MF9hdMOpXzEwMF9hbm9zCT0JIjUuMTIgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgdGVtcG8gdG90YWwgZGUgcGVuYXMgKHByZXNvcy9hcyBjb25kZW5hZG9zL2FzIGUgKSB8IE1haXMgZGUgNTAgYXTDqSAxMDAgYW5vcyAoaW5jbHVzaXZlKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgdGVtcG9fdG90YWxfZGVfcGVuYV9GZW1pbmlub19NYWlzX2RlXzUwX2F0w6lfMTAwX2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSA1MCBhdMOpIDEwMCBhbm9zIChpbmNsdXNpdmUpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3RvdGFsX2RlX3BlbmFfTWFzY3VsaW5vX01haXNfZGVfMTAwX2Fub3MJPQkiNS4xMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyB0b3RhbCBkZSBwZW5hcyAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSApIHwgTWFpcyBkZSAxMDAgYW5vcyB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgdGVtcG9fdG90YWxfZGVfcGVuYV9GZW1pbmlub19NYWlzX2RlXzEwMF9hbm9zCT0JIjUuMTIgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgdGVtcG8gdG90YWwgZGUgcGVuYXMgKHByZXNvcy9hcyBjb25kZW5hZG9zL2FzIGUgKSB8IE1haXMgZGUgMTAwIGFub3MgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgdGVtcG9fcmVtYW5lc2NlbnRlX2RlX3BlbmFfTWFzY3VsaW5vX0F0w6lfNl9tZXNlcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IEF0w6kgNiBtZXNlcyAoaW5jbHVzaXZlKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgdGVtcG9fcmVtYW5lc2NlbnRlX2RlX3BlbmFfRmVtaW5pbm9fQXTDqV82X21lc2VzCT0JIjUuMTMgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgdGVtcG8gZGUgcGVuYSByZW1hbmVzY2VudGUgKHByZXNvcy9hcyBjb25kZW5hZG9zL2FzIGUpIHwgQXTDqSA2IG1lc2VzIChpbmNsdXNpdmUpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3JlbWFuZXNjZW50ZV9kZV9wZW5hX01hc2N1bGlub19NYWlzX2RlXzZfbWVzZXNfYXTDqV8xX2Fubwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgNiBtZXNlcyBhdMOpIDEgYW5vIChpbmNsdXNpdmUpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICB0ZW1wb19yZW1hbmVzY2VudGVfZGVfcGVuYV9GZW1pbmlub19NYWlzX2RlXzZfbWVzZXNfYXTDqV8xX2Fubwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgNiBtZXNlcyBhdMOpIDEgYW5vIChpbmNsdXNpdmUpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3JlbWFuZXNjZW50ZV9kZV9wZW5hX01hc2N1bGlub19NYWlzX2RlXzFfYW5vX2F0w6lfMl9hbm9zCT0JIjUuMTMgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgdGVtcG8gZGUgcGVuYSByZW1hbmVzY2VudGUgKHByZXNvcy9hcyBjb25kZW5hZG9zL2FzIGUpIHwgTWFpcyBkZSAxIGFubyBhdMOpIDIgYW5vcyAoaW5jbHVzaXZlKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgdGVtcG9fcmVtYW5lc2NlbnRlX2RlX3BlbmFfRmVtaW5pbm9fTWFpc19kZV8xX2Fub19hdMOpXzJfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgMSBhbm8gYXTDqSAyIGFub3MgKGluY2x1c2l2ZSkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgdGVtcG9fcmVtYW5lc2NlbnRlX2RlX3BlbmFfTWFzY3VsaW5vX01haXNfZGVfMl9hdMOpXzRfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgMiBhdMOpIDQgYW5vcyAoaW5jbHVzaXZlKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgdGVtcG9fcmVtYW5lc2NlbnRlX2RlX3BlbmFfRmVtaW5pbm9fTWFpc19kZV8yX2F0w6lfNF9hbm9zCT0JIjUuMTMgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgdGVtcG8gZGUgcGVuYSByZW1hbmVzY2VudGUgKHByZXNvcy9hcyBjb25kZW5hZG9zL2FzIGUpIHwgTWFpcyBkZSAyIGF0w6kgNCBhbm9zIChpbmNsdXNpdmUpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3JlbWFuZXNjZW50ZV9kZV9wZW5hX01hc2N1bGlub19NYWlzX2RlXzRfYXTDqV84X2Fub3MJPQkiNS4xMyBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyBkZSBwZW5hIHJlbWFuZXNjZW50ZSAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSkgfCBNYWlzIGRlIDQgYXTDqSA4IGFub3MgKGluY2x1c2l2ZSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3JlbWFuZXNjZW50ZV9kZV9wZW5hX0ZlbWluaW5vX01haXNfZGVfNF9hdMOpXzhfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgNCBhdMOpIDggYW5vcyAoaW5jbHVzaXZlKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICB0ZW1wb19yZW1hbmVzY2VudGVfZGVfcGVuYV9NYXNjdWxpbm9fTWFpc19kZV84X2F0w6lfMTVfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgOCBhdMOpIDE1IGFub3MgKGluY2x1c2l2ZSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3JlbWFuZXNjZW50ZV9kZV9wZW5hX0ZlbWluaW5vX01haXNfZGVfOF9hdMOpXzE1X2Fub3MJPQkiNS4xMyBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyBkZSBwZW5hIHJlbWFuZXNjZW50ZSAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSkgfCBNYWlzIGRlIDggYXTDqSAxNSBhbm9zIChpbmNsdXNpdmUpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3JlbWFuZXNjZW50ZV9kZV9wZW5hX01hc2N1bGlub19NYWlzX2RlXzE1X2F0w6lfMjBfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgMTUgYXTDqSAyMCBhbm9zIChpbmNsdXNpdmUpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICB0ZW1wb19yZW1hbmVzY2VudGVfZGVfcGVuYV9GZW1pbmlub19NYWlzX2RlXzE1X2F0w6lfMjBfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgMTUgYXTDqSAyMCBhbm9zIChpbmNsdXNpdmUpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3JlbWFuZXNjZW50ZV9kZV9wZW5hX01hc2N1bGlub19NYWlzX2RlXzIwX2F0w6lfMzBfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgMjAgYXTDqSAzMCBhbm9zIChpbmNsdXNpdmUpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICB0ZW1wb19yZW1hbmVzY2VudGVfZGVfcGVuYV9GZW1pbmlub19NYWlzX2RlXzIwX2F0w6lfMzBfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgMjAgYXTDqSAzMCBhbm9zIChpbmNsdXNpdmUpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3JlbWFuZXNjZW50ZV9kZV9wZW5hX01hc2N1bGlub19NYWlzX2RlXzMwX2F0w6lfNTBfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgMzAgYXTDqSA1MCBhbm9zIChpbmNsdXNpdmUpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICB0ZW1wb19yZW1hbmVzY2VudGVfZGVfcGVuYV9GZW1pbmlub19NYWlzX2RlXzMwX2F0w6lfNTBfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgMzAgYXTDqSA1MCBhbm9zIChpbmNsdXNpdmUpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3JlbWFuZXNjZW50ZV9kZV9wZW5hX01hc2N1bGlub19NYWlzX2RlXzUwX2F0w6lfMTAwX2Fub3MJPQkiNS4xMyBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyBkZSBwZW5hIHJlbWFuZXNjZW50ZSAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSkgfCBNYWlzIGRlIDUwIGF0w6kgMTAwIGFub3MgKGluY2x1c2l2ZSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3JlbWFuZXNjZW50ZV9kZV9wZW5hX0ZlbWluaW5vX01haXNfZGVfNTBfYXTDqV8xMDBfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgNTAgYXTDqSAxMDAgYW5vcyAoaW5jbHVzaXZlKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICB0ZW1wb19yZW1hbmVzY2VudGVfZGVfcGVuYV9NYXNjdWxpbm9fTWFpc19kZV8xMDBfYW5vcwk9CSI1LjEzIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHRlbXBvIGRlIHBlbmEgcmVtYW5lc2NlbnRlIChwcmVzb3MvYXMgY29uZGVuYWRvcy9hcyBlKSB8IE1haXMgZGUgMTAwIGFub3MgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIHRlbXBvX3JlbWFuZXNjZW50ZV9kZV9wZW5hX0ZlbWluaW5vX01haXNfZGVfMTAwX2Fub3MJPQkiNS4xMyBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciB0ZW1wbyBkZSBwZW5hIHJlbWFuZXNjZW50ZSAocHJlc29zL2FzIGNvbmRlbmFkb3MvYXMgZSkgfCBNYWlzIGRlIDEwMCBhbm9zIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19Ib21pY8OtZGlvX3NpbXBsZXMJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGVzc29hIHwgSG9taWPDrWRpbyBzaW1wbGVzIChBcnQuIDEyMSwgY2FwdXQpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Ib21pY8OtZGlvX3NpbXBsZXMJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGVzc29hIHwgSG9taWPDrWRpbyBzaW1wbGVzIChBcnQuIDEyMSwgY2FwdXQpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGNyaW1lX1RvdGFsX0hvbWljw61kaW9fc2ltcGxlcwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBwZXNzb2EgfCBIb21pY8OtZGlvIHNpbXBsZXMgKEFydC4gMTIxLCBjYXB1dCkgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX0hvbWljw61saW9fY3VscG9zbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBwZXNzb2EgfCBIb21pY8OtbGlvIGN1bHBvc28gKEFydC4gMTIxLCDCpyAzwrApIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Ib21pY8OtbGlvX2N1bHBvc28JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGVzc29hIHwgSG9taWPDrWxpbyBjdWxwb3NvIChBcnQuIDEyMSwgwqcgM8KwKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9Ib21pY8OtbGlvX2N1bHBvc28JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGVzc29hIHwgSG9taWPDrWxpbyBjdWxwb3NvIChBcnQuIDEyMSwgwqcgM8KwKSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fSG9taWPDrWRpb19xdWFsaWZpY2Fkbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBwZXNzb2EgfCBIb21pY8OtZGlvIHF1YWxpZmljYWRvIChBcnQuIDEyMSwgwqcgMsKwKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fSG9taWPDrWRpb19xdWFsaWZpY2Fkbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBwZXNzb2EgfCBIb21pY8OtZGlvIHF1YWxpZmljYWRvIChBcnQuIDEyMSwgwqcgMsKwKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9Ib21pY8OtZGlvX3F1YWxpZmljYWRvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIHBlc3NvYSB8IEhvbWljw61kaW8gcXVhbGlmaWNhZG8gKEFydC4gMTIxLCDCpyAywrApIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19BYm9ydG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGVzc29hIHwgQWJvcnRvIChBcnQuIDEyNCwgMTI1LCAxMjYgZSAxMjcpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19BYm9ydG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGVzc29hIHwgQWJvcnRvIChBcnQuIDEyNCwgMTI1LCAxMjYgZSAxMjcpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGNyaW1lX1RvdGFsX0Fib3J0bwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBwZXNzb2EgfCBBYm9ydG8gKEFydC4gMTI0LCAxMjUsIDEyNiBlIDEyNykgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX0xlc8Ojb19jb3Jwb3JhbAk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBwZXNzb2EgfCBMZXPDo28gY29ycG9yYWwgKEFydC4gMTI5LCBjYXB1dCBlIMKnIDHCsCwgMsKwLCAzwrAgZSA2wrApIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19MZXPDo29fY29ycG9yYWwJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGVzc29hIHwgTGVzw6NvIGNvcnBvcmFsIChBcnQuIDEyOSwgY2FwdXQgZSDCpyAxwrAsIDLCsCwgM8KwIGUgNsKwKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9MZXPDo29fY29ycG9yYWwJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGVzc29hIHwgTGVzw6NvIGNvcnBvcmFsIChBcnQuIDEyOSwgY2FwdXQgZSDCpyAxwrAsIDLCsCwgM8KwIGUgNsKwKSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fVmlvbMOqbmNpYV9kb23DqXN0aWNhCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIHBlc3NvYSB8IFZpb2zDqm5jaWEgZG9tw6lzdGljYSAoQXJ0LiAxMjksICDCpyA5wrApIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19WaW9sw6puY2lhX2RvbcOpc3RpY2EJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGVzc29hIHwgVmlvbMOqbmNpYSBkb23DqXN0aWNhIChBcnQuIDEyOSwgIMKnIDnCsCkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfVmlvbMOqbmNpYV9kb23DqXN0aWNhCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIHBlc3NvYSB8IFZpb2zDqm5jaWEgZG9tw6lzdGljYSAoQXJ0LiAxMjksICDCpyA5wrApIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19TZXF1ZXN0cm9fZV9jw6FyY2VyZV9wcml2YWRvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIHBlc3NvYSB8IFNlcXVlc3RybyBlIGPDoXJjZXJlIHByaXZhZG8gKEFydC4gMTQ4KSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fU2VxdWVzdHJvX2VfY8OhcmNlcmVfcHJpdmFkbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBwZXNzb2EgfCBTZXF1ZXN0cm8gZSBjw6FyY2VyZSBwcml2YWRvIChBcnQuIDE0OCkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfU2VxdWVzdHJvX2VfY8OhcmNlcmVfcHJpdmFkbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBwZXNzb2EgfCBTZXF1ZXN0cm8gZSBjw6FyY2VyZSBwcml2YWRvIChBcnQuIDE0OCkgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX091dHJvc19uw6NvX2xpc3RhZG9zX2FjaW1hX2VudHJlX29zX2FydGlnb3NfMTIyX2VfMTU0X0EJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGVzc29hIHwgT3V0cm9zIC0gbsOjbyBsaXN0YWRvcyBhY2ltYSBlbnRyZSBvcyBhcnRpZ29zIDEyMiBlIDE1NC1BIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19PdXRyb3NfbsOjb19saXN0YWRvc19hY2ltYV9lbnRyZV9vc19hcnRpZ29zXzEyMl9lXzE1NF9BCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIHBlc3NvYSB8IE91dHJvcyAtIG7Do28gbGlzdGFkb3MgYWNpbWEgZW50cmUgb3MgYXJ0aWdvcyAxMjIgZSAxNTQtQSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9PdXRyb3NfbsOjb19saXN0YWRvc19hY2ltYV9lbnRyZV9vc19hcnRpZ29zXzEyMl9lXzE1NF9BCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIHBlc3NvYSB8IE91dHJvcyAtIG7Do28gbGlzdGFkb3MgYWNpbWEgZW50cmUgb3MgYXJ0aWdvcyAxMjIgZSAxNTQtQSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fRnVydG9fc2ltcGxlcwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IEZ1cnRvIHNpbXBsZXMgKEFydC4gMTU1KSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fRnVydG9fc2ltcGxlcwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IEZ1cnRvIHNpbXBsZXMgKEFydC4gMTU1KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9GdXJ0b19zaW1wbGVzCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBvIHBhdHJpbcO0bmlvIHwgRnVydG8gc2ltcGxlcyAoQXJ0LiAxNTUpIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19GdXJ0b19xdWFsaWZpY2Fkbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IEZ1cnRvIHF1YWxpZmljYWRvIChBcnQuIDE1NSwgwqcgNMKwIGUgNcKwKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fRnVydG9fcXVhbGlmaWNhZG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBGdXJ0byBxdWFsaWZpY2FkbyAoQXJ0LiAxNTUsIMKnIDTCsCBlIDXCsCkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfRnVydG9fcXVhbGlmaWNhZG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBGdXJ0byBxdWFsaWZpY2FkbyAoQXJ0LiAxNTUsIMKnIDTCsCBlIDXCsCkgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX1JvdWJvX3NpbXBsZXMJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBSb3VibyBzaW1wbGVzIChBcnQuIDE1NykgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX1JvdWJvX3NpbXBsZXMJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBSb3VibyBzaW1wbGVzIChBcnQuIDE1NykgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfUm91Ym9fc2ltcGxlcwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IFJvdWJvIHNpbXBsZXMgKEFydC4gMTU3KSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fUm91Ym9fcXVhbGlmaWNhZG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBSb3VibyBxdWFsaWZpY2FkbyAoQXJ0LiAxNTcsIMKnIDLCsCB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fUm91Ym9fcXVhbGlmaWNhZG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBSb3VibyBxdWFsaWZpY2FkbyAoQXJ0LiAxNTcsIMKnIDLCsCB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9Sb3Vib19xdWFsaWZpY2Fkbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IFJvdWJvIHF1YWxpZmljYWRvIChBcnQuIDE1NywgwqcgMsKwIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19MYXRyb2PDrW5pbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IExhdHJvY8OtbmlvIChBcnQuIDE1NywgwqcgM8KwKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fTGF0cm9jw61uaW8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBMYXRyb2PDrW5pbyAoQXJ0LiAxNTcsIMKnIDPCsCkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfTGF0cm9jw61uaW8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBMYXRyb2PDrW5pbyAoQXJ0LiAxNTcsIMKnIDPCsCkgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX0V4dG9yc8Ojbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IEV4dG9yc8OjbyAoQXJ0LiAxNTgpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19FeHRvcnPDo28JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBFeHRvcnPDo28gKEFydC4gMTU4KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9FeHRvcnPDo28JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBFeHRvcnPDo28gKEFydC4gMTU4KSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fRXh0b3Jzw6NvX21lZGlhbnRlX3NlcXVlc3Rybwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IEV4dG9yc8OjbyBtZWRpYW50ZSBzZXF1ZXN0cm8gKEFydC4gMTU5KSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fRXh0b3Jzw6NvX21lZGlhbnRlX3NlcXVlc3Rybwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IEV4dG9yc8OjbyBtZWRpYW50ZSBzZXF1ZXN0cm8gKEFydC4gMTU5KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9FeHRvcnPDo29fbWVkaWFudGVfc2VxdWVzdHJvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBvIHBhdHJpbcO0bmlvIHwgRXh0b3Jzw6NvIG1lZGlhbnRlIHNlcXVlc3RybyAoQXJ0LiAxNTkpIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19BcHJvcHJpYcOnw6NvX2luZMOpYml0YQk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IEFwcm9wcmlhw6fDo28gaW5kw6liaXRhIChBcnQuIDE2OCkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX0Fwcm9wcmlhw6fDo29faW5kw6liaXRhCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBvIHBhdHJpbcO0bmlvIHwgQXByb3ByaWHDp8OjbyBpbmTDqWJpdGEgKEFydC4gMTY4KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9BcHJvcHJpYcOnw6NvX2luZMOpYml0YQk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IEFwcm9wcmlhw6fDo28gaW5kw6liaXRhIChBcnQuIDE2OCkgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX0Fwcm9wcmlhw6fDo29faW5kw6liaXRhX3ByZXZpZGVuY2nDoXJpYQk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IEFwcm9wcmlhw6fDo28gaW5kw6liaXRhIHByZXZpZGVuY2nDoXJpYSAoQXJ0LiAxNjgtQSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX0Fwcm9wcmlhw6fDo29faW5kw6liaXRhX3ByZXZpZGVuY2nDoXJpYQk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IEFwcm9wcmlhw6fDo28gaW5kw6liaXRhIHByZXZpZGVuY2nDoXJpYSAoQXJ0LiAxNjgtQSkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfQXByb3ByaWHDp8Ojb19pbmTDqWJpdGFfcHJldmlkZW5jacOhcmlhCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBvIHBhdHJpbcO0bmlvIHwgQXByb3ByaWHDp8OjbyBpbmTDqWJpdGEgcHJldmlkZW5jacOhcmlhIChBcnQuIDE2OC1BKSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fRXN0ZWxpb25hdG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBFc3RlbGlvbmF0byAoQXJ0LiAxNzEpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Fc3RlbGlvbmF0bwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IEVzdGVsaW9uYXRvIChBcnQuIDE3MSkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfRXN0ZWxpb25hdG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBFc3RlbGlvbmF0byAoQXJ0LiAxNzEpIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19SZWNlcHRhw6fDo28JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBSZWNlcHRhw6fDo28gKEFydC4gMTgwKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fUmVjZXB0YcOnw6NvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBvIHBhdHJpbcO0bmlvIHwgUmVjZXB0YcOnw6NvIChBcnQuIDE4MCkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfUmVjZXB0YcOnw6NvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBvIHBhdHJpbcO0bmlvIHwgUmVjZXB0YcOnw6NvIChBcnQuIDE4MCkgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX1JlY2VwdGHDp8Ojb19xdWFsaWZpY2FkYQk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IFJlY2VwdGHDp8OjbyBxdWFsaWZpY2FkYSAoQXJ0LiAxODAsIMKnIDHCsCkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX1JlY2VwdGHDp8Ojb19xdWFsaWZpY2FkYQk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgbyBwYXRyaW3DtG5pbyB8IFJlY2VwdGHDp8OjbyBxdWFsaWZpY2FkYSAoQXJ0LiAxODAsIMKnIDHCsCkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfUmVjZXB0YcOnw6NvX3F1YWxpZmljYWRhCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBvIHBhdHJpbcO0bmlvIHwgUmVjZXB0YcOnw6NvIHF1YWxpZmljYWRhIChBcnQuIDE4MCwgwqcgMcKwKSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fT3V0cm9zX27Do29fbGlzdGFkb3NfYWNpbWFfZW50cmVfb3NfYXJ0aWdvc18xNTZfZV8xNzkgCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBvIHBhdHJpbcO0bmlvIHwgT3V0cm9zIC0gbsOjbyBsaXN0YWRvcyBhY2ltYSBlbnRyZSBvcyBhcnRpZ29zIDE1NiBlIDE3OSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fT3V0cm9zX27Do29fbGlzdGFkb3NfYWNpbWFfZW50cmVfb3NfYXJ0aWdvc18xNTZfZV8xNzkJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIG8gcGF0cmltw7RuaW8gfCBPdXRyb3MgLSBuw6NvIGxpc3RhZG9zIGFjaW1hIGVudHJlIG9zIGFydGlnb3MgMTU2IGUgMTc5IHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGNyaW1lX1RvdGFsX091dHJvc19uw6NvX2xpc3RhZG9zX2FjaW1hX2VudHJlX29zX2FydGlnb3NfMTU2X2VfMTc5CT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBvIHBhdHJpbcO0bmlvIHwgT3V0cm9zIC0gbsOjbyBsaXN0YWRvcyBhY2ltYSBlbnRyZSBvcyBhcnRpZ29zIDE1NiBlIDE3OSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fRXN0dXBybwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBkaWduaWRhZGUgc2V4dWFsIHwgRXN0dXBybyAoQXJ0LiAyMTMpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Fc3R1cHJvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGRpZ25pZGFkZSBzZXh1YWwgfCBFc3R1cHJvIChBcnQuIDIxMykgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfRXN0dXBybwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBkaWduaWRhZGUgc2V4dWFsIHwgRXN0dXBybyAoQXJ0LiAyMTMpIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19BdGVudGFkb192aW9sZW50b19hb19wdWRvcgk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBkaWduaWRhZGUgc2V4dWFsIHwgQXRlbnRhZG8gdmlvbGVudG8gYW8gcHVkb3IgKEFydC4gMjE0KSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fQXRlbnRhZG9fdmlvbGVudG9fYW9fcHVkb3IJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgZGlnbmlkYWRlIHNleHVhbCB8IEF0ZW50YWRvIHZpb2xlbnRvIGFvIHB1ZG9yIChBcnQuIDIxNCkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfQXRlbnRhZG9fdmlvbGVudG9fYW9fcHVkb3IJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgZGlnbmlkYWRlIHNleHVhbCB8IEF0ZW50YWRvIHZpb2xlbnRvIGFvIHB1ZG9yIChBcnQuIDIxNCkgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX0VzdHVwcm9fZGVfdnVsbmVyw6F2ZWwJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgZGlnbmlkYWRlIHNleHVhbCB8IEVzdHVwcm8gZGUgdnVsbmVyw6F2ZWwgKEFydC4gMjE3LUEpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Fc3R1cHJvX2RlX3Z1bG5lcsOhdmVsCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGRpZ25pZGFkZSBzZXh1YWwgfCBFc3R1cHJvIGRlIHZ1bG5lcsOhdmVsIChBcnQuIDIxNy1BKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9Fc3R1cHJvX2RlX3Z1bG5lcsOhdmVsCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGRpZ25pZGFkZSBzZXh1YWwgfCBFc3R1cHJvIGRlIHZ1bG5lcsOhdmVsIChBcnQuIDIxNy1BKSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fQ29ycnVww6fDo29fZGVfbWVub3Jlcwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBkaWduaWRhZGUgc2V4dWFsIHwgQ29ycnVww6fDo28gZGUgbWVub3JlcyAoQXJ0LiAyMTgpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Db3JydXDDp8Ojb19kZV9tZW5vcmVzCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGRpZ25pZGFkZSBzZXh1YWwgfCBDb3JydXDDp8OjbyBkZSBtZW5vcmVzIChBcnQuIDIxOCkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfQ29ycnVww6fDo29fZGVfbWVub3Jlcwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBkaWduaWRhZGUgc2V4dWFsIHwgQ29ycnVww6fDo28gZGUgbWVub3JlcyAoQXJ0LiAyMTgpIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19UcsOhZmljb19pbnRlcm5hY2lvbmFsX2RlX3Blc3NvYV9wYXJhX2ZpbV9kZV9leHBsb3Jhw6fDo29fc2V4dWFsCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGRpZ25pZGFkZSBzZXh1YWwgfCBUcsOhZmljbyBpbnRlcm5hY2lvbmFsIGRlIHBlc3NvYSBwYXJhIGZpbSBkZSBleHBsb3Jhw6fDo28gc2V4dWFsIChBcnQuIDIzMSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX1Ryw6FmaWNvX2ludGVybmFjaW9uYWxfZGVfcGVzc29hX3BhcmFfZmltX2RlX2V4cGxvcmHDp8Ojb19zZXh1YWwJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgZGlnbmlkYWRlIHNleHVhbCB8IFRyw6FmaWNvIGludGVybmFjaW9uYWwgZGUgcGVzc29hIHBhcmEgZmltIGRlIGV4cGxvcmHDp8OjbyBzZXh1YWwgKEFydC4gMjMxKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9UcsOhZmljb19pbnRlcm5hY2lvbmFsX2RlX3Blc3NvYV9wYXJhX2ZpbV9kZV9leHBsb3Jhw6fDo29fc2V4dWFsCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGRpZ25pZGFkZSBzZXh1YWwgfCBUcsOhZmljbyBpbnRlcm5hY2lvbmFsIGRlIHBlc3NvYSBwYXJhIGZpbSBkZSBleHBsb3Jhw6fDo28gc2V4dWFsIChBcnQuIDIzMSkgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX1Ryw6FmaWNvX2ludGVybm9fZGVfcGVzc29hX3BhcmFfZmltX2RlX2V4cGxvcmHDp8Ojb19zZXh1YWwJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgZGlnbmlkYWRlIHNleHVhbCB8IFRyw6FmaWNvIGludGVybm8gZGUgcGVzc29hIHBhcmEgZmltIGRlIGV4cGxvcmHDp8OjbyBzZXh1YWwgKEFydC4gMjMxLUEpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19UcsOhZmljb19pbnRlcm5vX2RlX3Blc3NvYV9wYXJhX2ZpbV9kZV9leHBsb3Jhw6fDo29fc2V4dWFsCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGRpZ25pZGFkZSBzZXh1YWwgfCBUcsOhZmljbyBpbnRlcm5vIGRlIHBlc3NvYSBwYXJhIGZpbSBkZSBleHBsb3Jhw6fDo28gc2V4dWFsIChBcnQuIDIzMS1BKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9UcsOhZmljb19pbnRlcm5vX2RlX3Blc3NvYV9wYXJhX2ZpbV9kZV9leHBsb3Jhw6fDo29fc2V4dWFsCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGRpZ25pZGFkZSBzZXh1YWwgfCBUcsOhZmljbyBpbnRlcm5vIGRlIHBlc3NvYSBwYXJhIGZpbSBkZSBleHBsb3Jhw6fDo28gc2V4dWFsIChBcnQuIDIzMS1BKSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fT3V0cm9zX0FydGlnb3NfMjE1XzIxNl9BXzIxOF9BXzIxOF9CXzIyN18yMjhfMjI5XzIzMAk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBkaWduaWRhZGUgc2V4dWFsIHwgT3V0cm9zIChBcnRpZ29zIDIxNSwgMjE2LUEsIDIxOC1BLCAyMTgtQiwgMjI3LCAyMjgsIDIyOSwgMjMwKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fT3V0cm9zX0FydGlnb3NfMjE1XzIxNl9BXzIxOF9BXzIxOF9CXzIyN18yMjhfMjI5XzIzMAk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBkaWduaWRhZGUgc2V4dWFsIHwgT3V0cm9zIChBcnRpZ29zIDIxNSwgMjE2LUEsIDIxOC1BLCAyMTgtQiwgMjI3LCAyMjgsIDIyOSwgMjMwKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9PdXRyb3NfQXJ0aWdvc18yMTVfMjE2X0FfMjE4X0FfMjE4X0JfMjI3XzIyOF8yMjlfMjMwCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGRpZ25pZGFkZSBzZXh1YWwgfCBPdXRyb3MgKEFydGlnb3MgMjE1LCAyMTYtQSwgMjE4LUEsIDIxOC1CLCAyMjcsIDIyOCwgMjI5LCAyMzApIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19RdWFkcmlsaGFfb3VfYmFuZG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGF6IHDDumJsaWNhIHwgUXVhZHJpbGhhIG91IGJhbmRvIChBcnQuIDI4OCkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX1F1YWRyaWxoYV9vdV9iYW5kbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBwYXogcMO6YmxpY2EgfCBRdWFkcmlsaGEgb3UgYmFuZG8gKEFydC4gMjg4KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9RdWFkcmlsaGFfb3VfYmFuZG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgcGF6IHDDumJsaWNhIHwgUXVhZHJpbGhhIG91IGJhbmRvIChBcnQuIDI4OCkgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX01vZWRhX2ZhbHNhCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGbDqSBww7pibGljYSB8IE1vZWRhIGZhbHNhIChBcnQuIDI4OSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX01vZWRhX2ZhbHNhCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGbDqSBww7pibGljYSB8IE1vZWRhIGZhbHNhIChBcnQuIDI4OSkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfTW9lZGFfZmFsc2EJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgZsOpIHDDumJsaWNhIHwgTW9lZGEgZmFsc2EgKEFydC4gMjg5KSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fRmFsc2lmaWNhw6fDo29fZGVfcGFww6lpc19zZWxvc19zaW5hbF9lX2RvY3VtZW50b3NfcMO6YmxpY29zCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGbDqSBww7pibGljYSB8IEZhbHNpZmljYcOnw6NvIGRlIHBhcMOpaXMsIHNlbG9zLCBzaW5hbCBlIGRvY3VtZW50b3MgcMO6YmxpY29zICggQXJ0LiAyOTMgYSAyOTcpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19GYWxzaWZpY2HDp8Ojb19kZV9wYXDDqWlzX3NlbG9zX3NpbmFsX2VfZG9jdW1lbnRvc19ww7pibGljb3MJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgZsOpIHDDumJsaWNhIHwgRmFsc2lmaWNhw6fDo28gZGUgcGFww6lpcywgc2Vsb3MsIHNpbmFsIGUgZG9jdW1lbnRvcyBww7pibGljb3MgKCBBcnQuIDI5MyBhIDI5NykgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfRmFsc2lmaWNhw6fDo29fZGVfcGFww6lpc19zZWxvc19zaW5hbF9lX2RvY3VtZW50b3NfcMO6YmxpY29zCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGbDqSBww7pibGljYSB8IEZhbHNpZmljYcOnw6NvIGRlIHBhcMOpaXMsIHNlbG9zLCBzaW5hbCBlIGRvY3VtZW50b3MgcMO6YmxpY29zICggQXJ0LiAyOTMgYSAyOTcpIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19GYWxzaWRhZGVfaWRlb2zDs2dpY2EJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgZsOpIHDDumJsaWNhIHwgRmFsc2lkYWRlIGlkZW9sw7NnaWNhIChBcnQuIDI5OSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX0ZhbHNpZGFkZV9pZGVvbMOzZ2ljYQk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBmw6kgcMO6YmxpY2EgfCBGYWxzaWRhZGUgaWRlb2zDs2dpY2EgKEFydC4gMjk5KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9GYWxzaWRhZGVfaWRlb2zDs2dpY2EJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgZsOpIHDDumJsaWNhIHwgRmFsc2lkYWRlIGlkZW9sw7NnaWNhIChBcnQuIDI5OSkgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX1Vzb19kZV9kb2N1bWVudG9fZmFsc28JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgZsOpIHDDumJsaWNhIHwgVXNvIGRlIGRvY3VtZW50byBmYWxzbyAoQXJ0LiAzMDQpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Vc29fZGVfZG9jdW1lbnRvX2ZhbHNvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGbDqSBww7pibGljYSB8IFVzbyBkZSBkb2N1bWVudG8gZmFsc28gKEFydC4gMzA0KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9Vc29fZGVfZG9jdW1lbnRvX2ZhbHNvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIGbDqSBww7pibGljYSB8IFVzbyBkZSBkb2N1bWVudG8gZmFsc28gKEFydC4gMzA0KSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fUGVjdWxhdG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgQWRtaW5pc3RyYcOnw6NvIFDDumJsaWNhIHwgUGVjdWxhdG8gKEFydC4gMzEyIGUgMzEzKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fUGVjdWxhdG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgQWRtaW5pc3RyYcOnw6NvIFDDumJsaWNhIHwgUGVjdWxhdG8gKEFydC4gMzEyIGUgMzEzKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9QZWN1bGF0bwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBBZG1pbmlzdHJhw6fDo28gUMO6YmxpY2EgfCBQZWN1bGF0byAoQXJ0LiAzMTIgZSAzMTMpIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19Db25jdXNzw6NvX2VfZXhjZXNzb19kZV9leGHDp8Ojbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBBZG1pbmlzdHJhw6fDo28gUMO6YmxpY2EgfCBDb25jdXNzw6NvIGUgZXhjZXNzbyBkZSBleGHDp8OjbyAoQXJ0LiAzMTYpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Db25jdXNzw6NvX2VfZXhjZXNzb19kZV9leGHDp8Ojbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBjb250cmEgYSBBZG1pbmlzdHJhw6fDo28gUMO6YmxpY2EgfCBDb25jdXNzw6NvIGUgZXhjZXNzbyBkZSBleGHDp8OjbyAoQXJ0LiAzMTYpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGNyaW1lX1RvdGFsX0NvbmN1c3PDo29fZV9leGNlc3NvX2RlX2V4YcOnw6NvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIEFkbWluaXN0cmHDp8OjbyBQw7pibGljYSB8IENvbmN1c3PDo28gZSBleGNlc3NvIGRlIGV4YcOnw6NvIChBcnQuIDMxNikgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX0NvcnJ1cMOnw6NvX3Bhc3NpdmEJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgY29udHJhIGEgQWRtaW5pc3RyYcOnw6NvIFDDumJsaWNhIHwgQ29ycnVww6fDo28gcGFzc2l2YSAoQXJ0LiAzMTcpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Db3JydXDDp8Ojb19wYXNzaXZhCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIEFkbWluaXN0cmHDp8OjbyBQw7pibGljYSB8IENvcnJ1cMOnw6NvIHBhc3NpdmEgKEFydC4gMzE3KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9Db3JydXDDp8Ojb19wYXNzaXZhCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIGNvbnRyYSBhIEFkbWluaXN0cmHDp8OjbyBQw7pibGljYSB8IENvcnJ1cMOnw6NvIHBhc3NpdmEgKEFydC4gMzE3KSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fQ29ycnVww6fDo29fYXRpdmEJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgcHJhdGljYWRvcyBwb3IgcGFydGljdWxhciBjb250cmEgYSBBZG1pbmlzdHJhw6fDo28gUMO6YmxpY2EgfCBDb3JydXDDp8OjbyBhdGl2YSAoQXJ0LiAzMzMpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Db3JydXDDp8Ojb19hdGl2YQk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBDw5NESUdPIFBFTkFMIHwgR3J1cG86IENyaW1lcyBwcmF0aWNhZG9zIHBvciBwYXJ0aWN1bGFyIGNvbnRyYSBhIEFkbWluaXN0cmHDp8OjbyBQw7pibGljYSB8IENvcnJ1cMOnw6NvIGF0aXZhIChBcnQuIDMzMykgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfQ29ycnVww6fDo29fYXRpdmEJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgcHJhdGljYWRvcyBwb3IgcGFydGljdWxhciBjb250cmEgYSBBZG1pbmlzdHJhw6fDo28gUMO6YmxpY2EgfCBDb3JydXDDp8OjbyBhdGl2YSAoQXJ0LiAzMzMpIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19Db250cmFiYW5kb19vdV9kZXNjYW1pbmhvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIHByYXRpY2Fkb3MgcG9yIHBhcnRpY3VsYXIgY29udHJhIGEgQWRtaW5pc3RyYcOnw6NvIFDDumJsaWNhIHwgQ29udHJhYmFuZG8gb3UgZGVzY2FtaW5obyAoQXJ0LiAzMzQpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Db250cmFiYW5kb19vdV9kZXNjYW1pbmhvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IEPDk0RJR08gUEVOQUwgfCBHcnVwbzogQ3JpbWVzIHByYXRpY2Fkb3MgcG9yIHBhcnRpY3VsYXIgY29udHJhIGEgQWRtaW5pc3RyYcOnw6NvIFDDumJsaWNhIHwgQ29udHJhYmFuZG8gb3UgZGVzY2FtaW5obyAoQXJ0LiAzMzQpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGNyaW1lX1RvdGFsX0NvbnRyYWJhbmRvX291X2Rlc2NhbWluaG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogQ8OTRElHTyBQRU5BTCB8IEdydXBvOiBDcmltZXMgcHJhdGljYWRvcyBwb3IgcGFydGljdWxhciBjb250cmEgYSBBZG1pbmlzdHJhw6fDo28gUMO6YmxpY2EgfCBDb250cmFiYW5kbyBvdSBkZXNjYW1pbmhvIChBcnQuIDMzNCkgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX1Ryw6FmaWNvX2RlX2Ryb2dhcwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogRHJvZ2FzIChMZWkgNi4zNjgvNzYgZSBMZWkgMTEuMzQzLzA2KSB8IFRyw6FmaWNvIGRlIGRyb2dhcyAoQXJ0LiAxMiBkYSBMZWkgNi4zNjgvNzYgZSBBcnQuIDMzIGRhIExlaSAxMS4zNDMvMDYpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19UcsOhZmljb19kZV9kcm9nYXMJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IERyb2dhcyAoTGVpIDYuMzY4Lzc2IGUgTGVpIDExLjM0My8wNikgfCBUcsOhZmljbyBkZSBkcm9nYXMgKEFydC4gMTIgZGEgTGVpIDYuMzY4Lzc2IGUgQXJ0LiAzMyBkYSBMZWkgMTEuMzQzLzA2KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9UcsOhZmljb19kZV9kcm9nYXMJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IERyb2dhcyAoTGVpIDYuMzY4Lzc2IGUgTGVpIDExLjM0My8wNikgfCBUcsOhZmljbyBkZSBkcm9nYXMgKEFydC4gMTIgZGEgTGVpIDYuMzY4Lzc2IGUgQXJ0LiAzMyBkYSBMZWkgMTEuMzQzLzA2KSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fQXNzb2NpYcOnw6NvX3BhcmFfb190csOhZmljbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogRHJvZ2FzIChMZWkgNi4zNjgvNzYgZSBMZWkgMTEuMzQzLzA2KSB8IEFzc29jaWHDp8OjbyBwYXJhIG8gdHLDoWZpY28gKEFydC4gMTQgZGEgTGVpIDYuMzY4Lzc2IGUgQXJ0LiAzNSBkYSBMZWkgMTEuMzQzLzA2KSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fQXNzb2NpYcOnw6NvX3BhcmFfb190csOhZmljbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogRHJvZ2FzIChMZWkgNi4zNjgvNzYgZSBMZWkgMTEuMzQzLzA2KSB8IEFzc29jaWHDp8OjbyBwYXJhIG8gdHLDoWZpY28gKEFydC4gMTQgZGEgTGVpIDYuMzY4Lzc2IGUgQXJ0LiAzNSBkYSBMZWkgMTEuMzQzLzA2KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9Bc3NvY2lhw6fDo29fcGFyYV9vX3Ryw6FmaWNvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBEcm9nYXMgKExlaSA2LjM2OC83NiBlIExlaSAxMS4zNDMvMDYpIHwgQXNzb2NpYcOnw6NvIHBhcmEgbyB0csOhZmljbyAoQXJ0LiAxNCBkYSBMZWkgNi4zNjgvNzYgZSBBcnQuIDM1IGRhIExlaSAxMS4zNDMvMDYpIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19UcsOhZmljb19pbnRlcm5hY2lvbmFsX2RlX2Ryb2dhcwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogRHJvZ2FzIChMZWkgNi4zNjgvNzYgZSBMZWkgMTEuMzQzLzA2KSB8IFRyw6FmaWNvIGludGVybmFjaW9uYWwgZGUgZHJvZ2FzIChBcnQuIDE4IGRhIExlaSA2LjM2OC83NiBlIEFydC4gMzMgZSA0MCwgaW5jaXNvIEkgZGEgTGVpIDExLjM0My8wNikgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX1Ryw6FmaWNvX2ludGVybmFjaW9uYWxfZGVfZHJvZ2FzCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBEcm9nYXMgKExlaSA2LjM2OC83NiBlIExlaSAxMS4zNDMvMDYpIHwgVHLDoWZpY28gaW50ZXJuYWNpb25hbCBkZSBkcm9nYXMgKEFydC4gMTggZGEgTGVpIDYuMzY4Lzc2IGUgQXJ0LiAzMyBlIDQwLCBpbmNpc28gSSBkYSBMZWkgMTEuMzQzLzA2KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9UcsOhZmljb19pbnRlcm5hY2lvbmFsX2RlX2Ryb2dhcwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogRHJvZ2FzIChMZWkgNi4zNjgvNzYgZSBMZWkgMTEuMzQzLzA2KSB8IFRyw6FmaWNvIGludGVybmFjaW9uYWwgZGUgZHJvZ2FzIChBcnQuIDE4IGRhIExlaSA2LjM2OC83NiBlIEFydC4gMzMgZSA0MCwgaW5jaXNvIEkgZGEgTGVpIDExLjM0My8wNikgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX1BvcnRlX2lsZWdhbF9kZV9hcm1hX2RlX2ZvZ29fZGVfdXNvX3Blcm1pdGlkbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogRXN0YXR1dG8gZG8gRGVzYXJtYW1lbnRvIChMZWkgMTAuODI2LCBkZSAyMi8xMi8yMDAzKSB8IFBvcnRlIGlsZWdhbCBkZSBhcm1hIGRlIGZvZ28gZGUgdXNvIHBlcm1pdGlkbyAoQXJ0LiAxNCkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX1BvcnRlX2lsZWdhbF9kZV9hcm1hX2RlX2ZvZ29fZGVfdXNvX3Blcm1pdGlkbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogRXN0YXR1dG8gZG8gRGVzYXJtYW1lbnRvIChMZWkgMTAuODI2LCBkZSAyMi8xMi8yMDAzKSB8IFBvcnRlIGlsZWdhbCBkZSBhcm1hIGRlIGZvZ28gZGUgdXNvIHBlcm1pdGlkbyAoQXJ0LiAxNCkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfUG9ydGVfaWxlZ2FsX2RlX2FybWFfZGVfZm9nb19kZV91c29fcGVybWl0aWRvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBFc3RhdHV0byBkbyBEZXNhcm1hbWVudG8gKExlaSAxMC44MjYsIGRlIDIyLzEyLzIwMDMpIHwgUG9ydGUgaWxlZ2FsIGRlIGFybWEgZGUgZm9nbyBkZSB1c28gcGVybWl0aWRvIChBcnQuIDE0KSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fRGlzcGFyb19kZV9hcm1hX2RlX2ZvZ28JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IEVzdGF0dXRvIGRvIERlc2FybWFtZW50byAoTGVpIDEwLjgyNiwgZGUgMjIvMTIvMjAwMykgfCBEaXNwYXJvIGRlIGFybWEgZGUgZm9nbyAoQXJ0LiAxNSkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX0Rpc3Bhcm9fZGVfYXJtYV9kZV9mb2dvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBFc3RhdHV0byBkbyBEZXNhcm1hbWVudG8gKExlaSAxMC44MjYsIGRlIDIyLzEyLzIwMDMpIHwgRGlzcGFybyBkZSBhcm1hIGRlIGZvZ28gKEFydC4gMTUpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGNyaW1lX1RvdGFsX0Rpc3Bhcm9fZGVfYXJtYV9kZV9mb2dvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBFc3RhdHV0byBkbyBEZXNhcm1hbWVudG8gKExlaSAxMC44MjYsIGRlIDIyLzEyLzIwMDMpIHwgRGlzcGFybyBkZSBhcm1hIGRlIGZvZ28gKEFydC4gMTUpIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19Qb3NzZV9vdV9wb3J0ZV9pbGVnYWxfZGVfYXJtYV9kZV9mb2dvX2RlX3Vzb19yZXN0cml0bwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogRXN0YXR1dG8gZG8gRGVzYXJtYW1lbnRvIChMZWkgMTAuODI2LCBkZSAyMi8xMi8yMDAzKSB8IFBvc3NlIG91IHBvcnRlIGlsZWdhbCBkZSBhcm1hIGRlIGZvZ28gZGUgdXNvIHJlc3RyaXRvIChBcnQuIDE2KSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fUG9zc2Vfb3VfcG9ydGVfaWxlZ2FsX2RlX2FybWFfZGVfZm9nb19kZV91c29fcmVzdHJpdG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IEVzdGF0dXRvIGRvIERlc2FybWFtZW50byAoTGVpIDEwLjgyNiwgZGUgMjIvMTIvMjAwMykgfCBQb3NzZSBvdSBwb3J0ZSBpbGVnYWwgZGUgYXJtYSBkZSBmb2dvIGRlIHVzbyByZXN0cml0byAoQXJ0LiAxNikgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfUG9zc2Vfb3VfcG9ydGVfaWxlZ2FsX2RlX2FybWFfZGVfZm9nb19kZV91c29fcmVzdHJpdG8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IEVzdGF0dXRvIGRvIERlc2FybWFtZW50byAoTGVpIDEwLjgyNiwgZGUgMjIvMTIvMjAwMykgfCBQb3NzZSBvdSBwb3J0ZSBpbGVnYWwgZGUgYXJtYSBkZSBmb2dvIGRlIHVzbyByZXN0cml0byAoQXJ0LiAxNikgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX0NvbcOpcmNpb19pbGVnYWxfZGVfYXJtYV9kZV9mb2dvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBFc3RhdHV0byBkbyBEZXNhcm1hbWVudG8gKExlaSAxMC44MjYsIGRlIDIyLzEyLzIwMDMpIHwgQ29tw6lyY2lvIGlsZWdhbCBkZSBhcm1hIGRlIGZvZ28gKEFydC4gMTcpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19Db23DqXJjaW9faWxlZ2FsX2RlX2FybWFfZGVfZm9nbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogRXN0YXR1dG8gZG8gRGVzYXJtYW1lbnRvIChMZWkgMTAuODI2LCBkZSAyMi8xMi8yMDAzKSB8IENvbcOpcmNpbyBpbGVnYWwgZGUgYXJtYSBkZSBmb2dvIChBcnQuIDE3KSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9Db23DqXJjaW9faWxlZ2FsX2RlX2FybWFfZGVfZm9nbwk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogRXN0YXR1dG8gZG8gRGVzYXJtYW1lbnRvIChMZWkgMTAuODI2LCBkZSAyMi8xMi8yMDAzKSB8IENvbcOpcmNpbyBpbGVnYWwgZGUgYXJtYSBkZSBmb2dvIChBcnQuIDE3KSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fVHLDoWZpY29faW50ZXJuYWNpb25hbF9kZV9hcm1hX2RlX2ZvZ28JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IEVzdGF0dXRvIGRvIERlc2FybWFtZW50byAoTGVpIDEwLjgyNiwgZGUgMjIvMTIvMjAwMykgfCBUcsOhZmljbyBpbnRlcm5hY2lvbmFsIGRlIGFybWEgZGUgZm9nbyAoQXJ0LiAxOCkgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIGNyaW1lX0ZlbWluaW5vX1Ryw6FmaWNvX2ludGVybmFjaW9uYWxfZGVfYXJtYV9kZV9mb2dvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBFc3RhdHV0byBkbyBEZXNhcm1hbWVudG8gKExlaSAxMC44MjYsIGRlIDIyLzEyLzIwMDMpIHwgVHLDoWZpY28gaW50ZXJuYWNpb25hbCBkZSBhcm1hIGRlIGZvZ28gKEFydC4gMTgpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGNyaW1lX1RvdGFsX1Ryw6FmaWNvX2ludGVybmFjaW9uYWxfZGVfYXJtYV9kZV9mb2dvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBFc3RhdHV0byBkbyBEZXNhcm1hbWVudG8gKExlaSAxMC44MjYsIGRlIDIyLzEyLzIwMDMpIHwgVHLDoWZpY28gaW50ZXJuYWNpb25hbCBkZSBhcm1hIGRlIGZvZ28gKEFydC4gMTgpIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19Ib21pY8OtZGlvX2N1bHBvc29fbmFfY29uZHXDp8Ojb19kZV92ZcOtY3Vsb19hdXRvbW90b3IJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IENyaW1lcyBkZSBUcsOibnNpdG8gKExlaSA5LjUwMywgZGUgMjMvMDkvMTk5NykgfCBIb21pY8OtZGlvIGN1bHBvc28gbmEgY29uZHXDp8OjbyBkZSB2ZcOtY3VsbyBhdXRvbW90b3IgKEFydC4gMzAyKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fSG9taWPDrWRpb19jdWxwb3NvX25hX2NvbmR1w6fDo29fZGVfdmXDrWN1bG9fYXV0b21vdG9yCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBDcmltZXMgZGUgVHLDom5zaXRvIChMZWkgOS41MDMsIGRlIDIzLzA5LzE5OTcpIHwgSG9taWPDrWRpbyBjdWxwb3NvIG5hIGNvbmR1w6fDo28gZGUgdmXDrWN1bG8gYXV0b21vdG9yIChBcnQuIDMwMikgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfSG9taWPDrWRpb19jdWxwb3NvX25hX2NvbmR1w6fDo29fZGVfdmXDrWN1bG9fYXV0b21vdG9yCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBDcmltZXMgZGUgVHLDom5zaXRvIChMZWkgOS41MDMsIGRlIDIzLzA5LzE5OTcpIHwgSG9taWPDrWRpbyBjdWxwb3NvIG5hIGNvbmR1w6fDo28gZGUgdmXDrWN1bG8gYXV0b21vdG9yIChBcnQuIDMwMikgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX091dHJvc19BcnRpZ29fMzAzX2FfMzEyCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBMZWdpc2xhw6fDo28gZXNwZWPDrWZpY2EgLSBvdXRyb3MgfCBPdXRyb3MgKEFydC4gMzAzIGEgMzEyKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fT3V0cm9zX0FydGlnb18zMDNfYV8zMTIJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IExlZ2lzbGHDp8OjbyBlc3BlY8OtZmljYSAtIG91dHJvcyB8IE91dHJvcyAoQXJ0LiAzMDMgYSAzMTIpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGNyaW1lX1RvdGFsX091dHJvc19BcnRpZ29fMzAzX2FfMzEyCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBMZWdpc2xhw6fDo28gZXNwZWPDrWZpY2EgLSBvdXRyb3MgfCBPdXRyb3MgKEFydC4gMzAzIGEgMzEyKSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fRXN0YXR1dG9fZGFfQ3JpYW7Dp2FfZV9kb19BZG9sZXNjZW50ZQk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogTGVnaXNsYcOnw6NvIGVzcGVjw61maWNhIC0gb3V0cm9zIHwgRXN0YXR1dG8gZGEgQ3JpYW7Dp2EgZSBkbyBBZG9sZXNjZW50ZSAoTGVpIDguMDY5LCBkZSAxMy8wMS8xOTkwKSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fRXN0YXR1dG9fZGFfQ3JpYW7Dp2FfZV9kb19BZG9sZXNjZW50ZQk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogTGVnaXNsYcOnw6NvIGVzcGVjw61maWNhIC0gb3V0cm9zIHwgRXN0YXR1dG8gZGEgQ3JpYW7Dp2EgZSBkbyBBZG9sZXNjZW50ZSAoTGVpIDguMDY5LCBkZSAxMy8wMS8xOTkwKSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICBjcmltZV9Ub3RhbF9Fc3RhdHV0b19kYV9DcmlhbsOnYV9lX2RvX0Fkb2xlc2NlbnRlCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBMZWdpc2xhw6fDo28gZXNwZWPDrWZpY2EgLSBvdXRyb3MgfCBFc3RhdHV0byBkYSBDcmlhbsOnYSBlIGRvIEFkb2xlc2NlbnRlIChMZWkgOC4wNjksIGRlIDEzLzAxLzE5OTApIHwgVG90YWwiCSwKICAgICAgICAgICAgIGNyaW1lX01hc2N1bGlub19HZW5vY8OtZGlvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBMZWdpc2xhw6fDo28gZXNwZWPDrWZpY2EgLSBvdXRyb3MgfCBHZW5vY8OtZGlvIChMZWkgMi44ODksIGRlIDAxLzEwLzE5NTYpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19HZW5vY8OtZGlvCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBMZWdpc2xhw6fDo28gZXNwZWPDrWZpY2EgLSBvdXRyb3MgfCBHZW5vY8OtZGlvIChMZWkgMi44ODksIGRlIDAxLzEwLzE5NTYpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGNyaW1lX1RvdGFsX0dlbm9jw61kaW8JPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IExlZ2lzbGHDp8OjbyBlc3BlY8OtZmljYSAtIG91dHJvcyB8IEdlbm9jw61kaW8gKExlaSAyLjg4OSwgZGUgMDEvMTAvMTk1NikgfCBUb3RhbCIJLAogICAgICAgICAgICAgY3JpbWVfTWFzY3VsaW5vX0NyaW1lc19kZV90b3J0dXJhCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBMZWdpc2xhw6fDo28gZXNwZWPDrWZpY2EgLSBvdXRyb3MgfCBDcmltZXMgZGUgdG9ydHVyYSAoTGVpIDkuNDU1LCBkZSAwNy8wNC8xOTk3KSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgY3JpbWVfRmVtaW5pbm9fQ3JpbWVzX2RlX3RvcnR1cmEJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IExlZ2lzbGHDp8OjbyBlc3BlY8OtZmljYSAtIG91dHJvcyB8IENyaW1lcyBkZSB0b3J0dXJhIChMZWkgOS40NTUsIGRlIDA3LzA0LzE5OTcpIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIGNyaW1lX1RvdGFsX0NyaW1lc19kZV90b3J0dXJhCT0JIjUuMTQgUXVhbnRpZGFkZSBkZSBpbmNpZMOqbmNpYXMgcG9yIHRpcG8gcGVuYWwgfCAgR1JVUE86IExFR0lTTEHDh8ODTyBFU1BFQ8ONRklDQSB8IEdydXBvOiBMZWdpc2xhw6fDo28gZXNwZWPDrWZpY2EgLSBvdXRyb3MgfCBDcmltZXMgZGUgdG9ydHVyYSAoTGVpIDkuNDU1LCBkZSAwNy8wNC8xOTk3KSB8IFRvdGFsIgksCiAgICAgICAgICAgICBjcmltZV9NYXNjdWxpbm9fQ3JpbWVzX2NvbnRyYV9vX01laW9fQW1iaWVudGUJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IExlZ2lzbGHDp8OjbyBlc3BlY8OtZmljYSAtIG91dHJvcyB8IENyaW1lcyBjb250cmEgbyBNZWlvIEFtYmllbnRlIChMZWkgOS42MDUsIGRlIDEyLzAyLzE5OTgpIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICBjcmltZV9GZW1pbmlub19DcmltZXNfY29udHJhX29fTWVpb19BbWJpZW50ZQk9CSI1LjE0IFF1YW50aWRhZGUgZGUgaW5jaWTDqm5jaWFzIHBvciB0aXBvIHBlbmFsIHwgIEdSVVBPOiBMRUdJU0xBw4fDg08gRVNQRUPDjUZJQ0EgfCBHcnVwbzogTGVnaXNsYcOnw6NvIGVzcGVjw61maWNhIC0gb3V0cm9zIHwgQ3JpbWVzIGNvbnRyYSBvIE1laW8gQW1iaWVudGUgKExlaSA5LjYwNSwgZGUgMTIvMDIvMTk5OCkgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgY3JpbWVfVG90YWxfQ3JpbWVzX2NvbnRyYV9vX01laW9fQW1iaWVudGUJPQkiNS4xNCBRdWFudGlkYWRlIGRlIGluY2lkw6puY2lhcyBwb3IgdGlwbyBwZW5hbCB8ICBHUlVQTzogTEVHSVNMQcOHw4NPIEVTUEVDw41GSUNBIHwgR3J1cG86IExlZ2lzbGHDp8OjbyBlc3BlY8OtZmljYSAtIG91dHJvcyB8IENyaW1lcyBjb250cmEgbyBNZWlvIEFtYmllbnRlIChMZWkgOS42MDUsIGRlIDEyLzAyLzE5OTgpIHwgVG90YWwiCSwKICAgICAgICAgICAgIHJlbXVuZXJhY2FvX01hc2N1bGlub19Ow6NvX3JlY2ViZV8JPQkiNi4yIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHJlbXVuZXJhw6fDo28gfCBOw6NvIHJlY2ViZSB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgcmVtdW5lcmFjYW9fRmVtaW5pbm9fTsOjb19yZWNlYmUJPQkiNi4yIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHJlbXVuZXJhw6fDo28gfCBOw6NvIHJlY2ViZSB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICByZW11bmVyYWNhb19NYXNjdWxpbm9fTWVub3NfZG9fcXVlXzMuNF9kb19zYWzDoXJpb19tw61uaW1vX21lbnNhbAk9CSI2LjIgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgcmVtdW5lcmHDp8OjbyB8IE1lbm9zIGRvIHF1ZSAzLzQgZG8gc2Fsw6FyaW8gbcOtbmltbyBtZW5zYWwgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIHJlbXVuZXJhY2FvX0ZlbWluaW5vX01lbm9zX2RvX3F1ZV8zLjRfZG9fc2Fsw6FyaW9fbcOtbmltb19tZW5zYWwJPQkiNi4yIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHJlbXVuZXJhw6fDo28gfCBNZW5vcyBkbyBxdWUgMy80IGRvIHNhbMOhcmlvIG3DrW5pbW8gbWVuc2FsIHwgRmVtaW5pbm8iCSwKICAgICAgICAgICAgIHJlbXVuZXJhY2FvX01hc2N1bGlub19FbnRyZV8zLjRfZV8xX3NhbMOhcmlvX23DrW5pbW9fbWVuc2FsCT0JIjYuMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciByZW11bmVyYcOnw6NvIHwgRW50cmUgMy80IGUgMSBzYWzDoXJpbyBtw61uaW1vIG1lbnNhbCB8IE1hc2N1bGlubyIJLAogICAgICAgICAgICAgcmVtdW5lcmFjYW9fRmVtaW5pbm9fRW50cmVfMy40X2VfMV9zYWzDoXJpb19tw61uaW1vX21lbnNhbAk9CSI2LjIgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgcmVtdW5lcmHDp8OjbyB8IEVudHJlIDMvNCBlIDEgc2Fsw6FyaW8gbcOtbmltbyBtZW5zYWwgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgcmVtdW5lcmFjYW9fTWFzY3VsaW5vX0VudHJlXzFfZV8yX3NhbMOhcmlvc19tw61uaW1vc19tZW5zYWlzCT0JIjYuMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciByZW11bmVyYcOnw6NvIHwgRW50cmUgMSBlIDIgc2Fsw6FyaW9zIG3DrW5pbW9zIG1lbnNhaXMgfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIHJlbXVuZXJhY2FvX0ZlbWluaW5vX0VudHJlXzFfZV8yX3NhbMOhcmlvc19tw61uaW1vc19tZW5zYWlzCT0JIjYuMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciByZW11bmVyYcOnw6NvIHwgRW50cmUgMSBlIDIgc2Fsw6FyaW9zIG3DrW5pbW9zIG1lbnNhaXMgfCBGZW1pbmlubyIJLAogICAgICAgICAgICAgcmVtdW5lcmFjYW9fTWFzY3VsaW5vX01haXNfcXVlXzJfc2Fsw6FyaW9zX23DrW5pbW9zX21lbnNhaXMJPQkiNi4yIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHJlbXVuZXJhw6fDo28gfCBNYWlzIHF1ZSAyIHNhbMOhcmlvcyBtw61uaW1vcyBtZW5zYWlzIHwgTWFzY3VsaW5vIgksCiAgICAgICAgICAgICByZW11bmVyYWNhb19GZW1pbmlub19NYWlzX3F1ZV8yX3NhbMOhcmlvc19tw61uaW1vc19tZW5zYWlzCT0JIjYuMiBRdWFudGlkYWRlIGRlIHBlc3NvYXMgcHJpdmFkYXMgZGUgbGliZXJkYWRlIHBvciByZW11bmVyYcOnw6NvIHwgTWFpcyBxdWUgMiBzYWzDoXJpb3MgbcOtbmltb3MgbWVuc2FpcyB8IEZlbWluaW5vIgksCiAgICAgICAgICAgICByZW11bmVyYWNhb19NYXNjdWxpbm9fU2VtX2luZm9ybWHDp8Ojbwk9CSI2LjIgUXVhbnRpZGFkZSBkZSBwZXNzb2FzIHByaXZhZGFzIGRlIGxpYmVyZGFkZSBwb3IgcmVtdW5lcmHDp8OjbyB8IFNlbSBpbmZvcm1hw6fDo28gfCBNYXNjdWxpbm8iCSwKICAgICAgICAgICAgIHJlbXVuZXJhY2FvX0ZlbWluaW5vX1NlbV9pbmZvcm1hw6fDo28JPQkiNi4yIFF1YW50aWRhZGUgZGUgcGVzc29hcyBwcml2YWRhcyBkZSBsaWJlcmRhZGUgcG9yIHJlbXVuZXJhw6fDo28gfCBTZW0gaW5mb3JtYcOnw6NvIHwgRmVtaW5pbm8iCSkKYGBgCgpGYXplciB1bSBsb29wIG5vcyBhcnF1aXZvcyBkYXMgdGFiZWxhcyBkbyBJTkZPUEVOIGUgbGlzdGFyIG9zIG5vbWVzIGRlbGVzCmBgYHtyIG5vbWVfZG9zX2FycXVpdm9zX2luZm9wZW4sIGluY2x1ZGU9RkFMU0V9Cm5vbWVfZG9zX2FycXVpdm9zX2luZm9wZW4gPC0gbGlzdC5maWxlcyhwYXRoID0gIklORk9QRU4vdGFiZWxhcyBleGNlbC8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAiKi54bHN4KiIpCmBgYAoKQ29tYmluYXIgbyBkaXJldG9yaW8gYW8gbm9tZSBkbyBhcnF1aXZvCmBgYHtyIGFycXVpdm9zX2luZm9wZW4gfQphcnF1aXZvc19pbmZvcGVuIDwtIHN0cl9jKCJJTkZPUEVOL3RhYmVsYXMgZXhjZWwvIixub21lX2Rvc19hcnF1aXZvc19pbmZvcGVuKQpgYGAKCkRhciBub21lIGEgY2FkYSBlbGVtZW50byBkbyB2ZXRvcgpgYGB7ciBuYW1lc30KbmFtZXMoYXJxdWl2b3NfaW5mb3BlbikgPC0gZ3N1YigiXFwueGxzeCQiLCAiIiwgbm9tZV9kb3NfYXJxdWl2b3NfaW5mb3BlbikKYGBgCgpBcGxpY2FyIGEgZnVuw6fDo28gcmVhZF9leGNlbCBwYXJhIGNhZGEgZWxlbWVudG8gZG8gdmV0b3IgaW1wb3J0YW5kbyBhc3NpbSB0b2RvcyBvcyBhcnF1aXZvcyBkZSB1bWEgc8OzIHZlegpgYGB7ciBjcmlhY2FvIHRhYmVsYSBpbmZvcGVufQppbmZvcGVuX2JyPC0gbWFwX2RmKC54ID0gYXJxdWl2b3NfaW5mb3BlbiwgLmYgPSByZWFkX2V4Y2VsLCAuaWQgPSAiZGF0YSIpICU+JSAKICBzZWxlY3QoIlVGIixkYXRhLCBhbGxfb2YoY29sdW5hcykpCmBgYAoKIyMgUmVjb25oZWNlbmRvIGEgVGFiZWxhCgpBcyB0YWJlbGFzIGRvIElORk9QRU4gYXByZXNlbnRhbSBkYWRvcyBlbSBwYWluZWwsIG9uZGUgY2FkYSBpbmRpdmlkbyDDqSByZXByZXNlbnRhZG8gbWFpcyBkZSB1bWEgdmV6LgogIApDYWRhIHRhYmVsYSBkbyBJTkZPUEVOIGNvbnTDqW0gbWFpcyBkZSAxMzAwIGNvbHVuYXMgZSBhcHJveGltYWRhbWVudGUgMTUwMCBsaW5oYXMuICAKYGBge3IgZXhlbXBsbyBkZSB1bWEgdGFiZWxhIGRvIElORk9QRU4gfQpqdW5fMjAxNyA8LSByZWFkX2V4Y2VsKCJJTkZPUEVOL3RhYmVsYXMgZXhjZWwvanVuIDIwMTcueGxzeCIpCmBgYApOdW1lcm8gZGUgY29sdW5hczogYHIgbmNvbChqdW5fMjAxNylgICAKTsO6bWVybyBkZSBsaW5hczogYHIgbnJvdyhqdW5fMjAxNylgICAgCiAgCkFww7NzIGFuYWxpc2FyIGNhZGEgdGFiZWxhLCBkZWNpZGkgZmlsdHJhciBhcGVuYXMgYXMgY29sdW5hcyBtYWlzIGludGVyZXNzYW50ZXMgcGFyYSBhIG1pbmhhIGFuYWxpc2UgZSBvIHJlc3VsdGFkbyBmb2kgdW1hIHRhYmVsYSBjb20gYHIgbnJvdyhpbmZvcGVuX2JyKWAgbGluaGFzIGUgYHIgbmNvbChpbmZvcGVuX2JyKWAgY29sdW5hcy4KCiMjIENvbWXDp2FuZG8gbWFuaXB1bGFyIG8gZGF0YWZyYW1lCgpBcMOzcyBhZ3J1cGFyIHRvZGFzIGFzIHRhYmVsYXMgZSBlc2NvbGhlciBhcGVuYXMgYXMgY29sdW5hcyBxdWUgdm91IHV0aWxpYXIsIG8gcHLDs3hpbW8gcGFzc28gc2Vyw6EgdHJhbnNmb3JtYXIgZGUgZm9ybWF0byBsYXJnbyBwYXJhIGxvbmdvLiBPIEZvcm1hdG8gbG9uZ28gZmFjaWxpdGEgYWxndW1hcyBtYW5pcHVsYcOnw7VlcyxlIG8gZm9ybWF0byBsYXJnbyBvdXRyYXMuIE5vIGRlY29ycmVyIGRlc3NhIGFuw6FsaXNlIHZvdSB1dGlsaXphciBvcyBkb2lzIGZvcm1hdG9zLgpgYGB7ciB0YWJlbGEgaW5mb3BlbiBsb25nb30KaW5mb3Blbl8yX2Zvcm1hdG9fbG9uZ28gPC1pbmZvcGVuX2JyJT4lIAogIGdhdGhlcih2YXJpYXZlbCAsIHF1YW50aWRhZGUsIC0gYyhVRixkYXRhKSkgJT4lIAogIGRyb3BfbmEoKQpgYGAKClZvdSByZXN1bWlyIG9zIHZhbG9yZXMgcGFyYSBxdWUgc2VqYW0gcmVtb3ZpZGFzIGFzIGxpbmhhcyByZXBldGlkYXMgZSBvYnRlbmhhLXNlIG8gdG90YWwgZGUgY2FkYSB2YXJpYXZlbApgYGB7ciB0YWJlbGEgaW5mb3BlbiByZXN1bWlkb30KaW5mb3Blbl8zX3Jlc3VtaWRvIDwtIGluZm9wZW5fMl9mb3JtYXRvX2xvbmdvICU+JQogIGdyb3VwX2J5KFVGLCBkYXRhLCB2YXJpYXZlbCkgJT4lCiAgbXV0YXRlKGRhdGEgPSBnc3ViKCJkZXoiLCAiZGVjIiwgZGF0YSkpJT4lICMjIHByZWNpc2VpIHVzYXIgImRlYyIgcGFyYSBxdWUgbyBwcm9ncmFtYSBlbnRlbmRlc3NlIHF1ZSBzZSByZWZlcmlhIGFvIG1lcyBkZSBkZXplbWJybwogIHN1bW1hcmlzZShwcmVzb3MgPSBzdW0ocXVhbnRpZGFkZSwgbmEucm0gPSBUUlVFKSkgJT4lIAogIG1lcmdlKHVmX3JlZ2lhbywgYnkgPSAiVUYiLCBhbGwueCA9IFRSVUUpCmBgYAoKIyMgQ3JpYXIgYXMgVmFyacOhdmVpcyBRdWUgVm91IFRyYWJhbGhhcgoKQXDDs3MgcmVzdW1pciBvcyBkYWRvcyBlIHJlbW92ZXIgb3MgJ05BcycsIGNoZWdvdSBvIG1vbWVudG8gZGUgc2VwYXJhciBvcyBkYWRvcyBlbSBjb2x1bmFzIHF1ZSB2b3UgdXRpbGl6YXIuCmBgYHtyIHRhYmVsYSBmaW5hbCBpbmZvcGVufQppbmZvcGVuXzRfZmluYWwgPC0gaW5mb3Blbl8zX3Jlc3VtaWRvICU+JQogIHJvd3dpc2UoKSAlPiUgIyMgZGVmaW5lIG8gZXNjb3BvIGRhcyBvcGVyYWNvZXMgc2VndWludGUsIHBhcmEgc2VyZW0gdHJhYmFsaGFkYXMgcG9yIGxpbmhhIGUgbmFvIGNvbHVuYXMKICBmaWx0ZXIoIXN0cl9kZXRlY3QodmFyaWF2ZWwsICJOw6NvX0luZm9ybWFkb3xOw6NvX2luZm9ybWFkb3xTZW0gaW5mb3JtYcOnw6NvIikpJT4lICMjIHJlbW92ZXIgYXMgdmFyacOhdmVpcyBxdWUgbmFvIHNlcmFvIG5lY2Vzc2FyaWFzCiAgbXV0YXRlKCAjIyBhcXVpIGNvbWVjbyBhIGRlZmluaXIgYXMgY29sdW5hcyBxdWUgdm91IHVzYXIuIFZvdSBleHRyYWlyIGFzIG5vdmFzIGNvbHVuYXMgZGEgY29sdW5hIHZhcmlhdmVsCiAgICBnZW5lcm8gPSBjYXNlX3doZW4oCiAgICAgIHN0cl9kZXRlY3QodmFyaWF2ZWwsICIoRmVtaW5pbm8pIikgfiAiRmVtaW5pbm8iLAogICAgICBzdHJfZGV0ZWN0KHZhcmlhdmVsLCAiKE1hc2N1bGlubykiKSB+ICJNYXNjdWxpbm8iLAogICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXyksCiAgICB2YXJpYXZlbCA9IGdzdWIoIl9NYXNjdWxpbm98X0ZlbWluaW5vfCIsICIiLCB2YXJpYXZlbCksICMjIG5lc3NlIHBvbnRvIGV1IHByZWNpc28gcmVtb3ZlciBhIHN0cmluZyBkZSBnZW5lcm8gcGFyYSBldml0YXIgY29uZmxpdG9zIG1haXMgYSBmcmVudGUgbm8gY8OzZGlnbwogICAgZXRuaWEgPSBpZmVsc2UoZ3JlcGwoImV0bmlhXyIsIHZhcmlhdmVsKSwKICAgICAgICAgICAgICAgICAgIHN1YigiZXRuaWFfIiwgIiIsIHZhcmlhdmVsKSwgTkEpLAogICAgZXRuaWEgPSBpZl9lbHNlKGV0bmlhID09ICJCcmFuY2EiLCAiQnJhbmNhIiwgCiAgICAgICAgICAgICAgICAgICAgaWZfZWxzZShldG5pYSAlaW4lIGMoIlByZXRhIiwgIlBhcmRhIiksICJQcmV0YSBvdSBQYXJkYSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9lbHNlKGV0bmlhICVpbiUgYygiQW1hcmVsYSIsICJJbmRpZ2VuYSIpLCAiQW1hcmVsYSBvdSBJbmRpZ2VuYSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsTkEpKSksCiAgICBncmF1X2RlX2luc3RydWNhbyA9IGlmZWxzZShncmVwbCgiZ3JhdV9kZV9pbnN0cnVjYW9fIiwgdmFyaWF2ZWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViKCJncmF1X2RlX2luc3RydWNhb18iLCIiLCB2YXJpYXZlbCksIE5BKSwgCiAgICByZW11bmVyYWNhbyA9IGlmZWxzZShncmVwbCgicmVtdW5lcmFjYW9fIix2YXJpYXZlbCksCiAgICAgICAgICAgICAgICAgICAgICAgICBzdWIoInJlbXVuZXJhY2FvXyIsIiIsdmFyaWF2ZWwpLE5BKSwKICAgIGZhaXhhX2V0YXJpYSA9IGlmZWxzZShncmVwbCgiZmFpeGFfZXRhcmlhXyIsIHZhcmlhdmVsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIoImZhaXhhX2V0YXJpYV8iLCIiLHZhcmlhdmVsKSxOQSkpJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1wcmVzb3MpLCBhcy5mYWN0b3IpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNlbGVjdCgiZGF0YSIsInJlZ2lhbyIsIlVGIiwgImdlbmVybyIsImV0bmlhIiwgCiAgICAgICAgICJncmF1X2RlX2luc3RydWNhbyIsICJmYWl4YV9ldGFyaWEiLCAicmVtdW5lcmFjYW8iLCJwcmVzb3MiKSAlPiUgIyMgdXNlaSBzZWxlY3QoKSBhcGVuYXMgcG9ycXVlIGdvc3RhcmlhIGRlIHZpenVhbGlhciBhcyBjb2x1bmFzIG5lc3NhIG9yZGVtCiAgZmlsdGVyKCFpcy5uYShnZW5lcm8pKQpgYGAKCiMjIEdlcmHDp8OjbyBkYXMgVGFiZWxhcwoKRW0gcmVsYcOnw6NvIMOgIHF1YW50aWRhZGUgZGUgcHJlc29zLCBlc3NhIMOpIGEgdGFiZWxhIG1haXMgY29uZmnDoXZlbCBwb2lzIG5lbSB0b2RvcyBvcyBwcmVzw61kaW9zIHTDqm0gY2FwYWNpZGFkZSBkZSByZWNvbGhlciB0b2RvcyBvcyBkYWRvcy4gTG9nbywgY29tIGFzIG91dHJhcyB0YWJlbGFzIHZvdSB0cmFiYWxoYXIgYXBlbmFzIGEgcG9yY2VudGFnZW0gZGUgcHJlc29zIGVtIHJlbGFjYW8gYW8gdG90YWwgZSBleHRyYWlyIGRhcXVpIG8gdmFsb3IgY29ycmVzcG9uZGVudGUuCgojIyMgVGFiZWxhIGNvbSBhIHBvcHVsYcOnw6NvIHByaXNpb25hbCB0b3RhbApgYGB7ciBwb3B1bGFjYW9fcHJpc2lvbmFsfQpwb3B1bGFjYW9fcHJpc2lvbmFsIDwtaW5mb3Blbl8zX3Jlc3VtaWRvICU+JQogIGZpbHRlcihzdHJfZGV0ZWN0KHZhcmlhdmVsLCAiUG9wdWxhw6fDo29fcHJpc2lvbmFsIikpJT4lCiAgcm93d2lzZSgpICU+JSAKICBtdXRhdGUoCiAgICBnZW5lcm8gPSBjYXNlX3doZW4oCiAgICAgIHN0cl9kZXRlY3QodmFyaWF2ZWwsICIoRmVtaW5pbm8pIikgfiAiRmVtaW5pbm8iLAogICAgICBzdHJfZGV0ZWN0KHZhcmlhdmVsLCAiKE1hc2N1bGlubykiKSB+ICJNYXNjdWxpbm8iLAogICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXykpICU+JSAKICBzZWxlY3QocmVnaWFvLCBVRixkYXRhLGdlbmVybywgcHJlc29zKSAlPiUgCiAgZHJvcF9uYSgpICU+JSAKICB1bmdyb3VwKCkKCnBvcHVsYWNhb19wcmlzaW9uYWxfMl9yZXN1bWlkbyA8LSBwb3B1bGFjYW9fcHJpc2lvbmFsICU+JSAKICBmaWx0ZXIoZ3JlcGwoIl5kZWMiLCBkYXRhKSB8IGRhdGEgPT0gImp1biAyMDE5IikgJT4lICMjIGFww7NzIGFsZ3VtYXMgYW7DoWxpc2VzIGRlY2lkw60gdXNhciBhcGVuYXMgMSByZWZlcsOqbmNpYSBwb3IgYW5vLCBhbyBpbnZlcyBkZSB1bWEgbcOpZGlhIGRvcyB2YWxvcmVzLiAKICBncm91cF9ieShyZWdpYW8sIFVGLCBkYXRhKSAlPiUKICBtdXRhdGUoYW5vID0gc3RyX3JlcGxhY2UoZGF0YSwgIlxcRCooXFxkezR9KS4qIiwgIlxcMSIpKSAlPiUgIyMgcmVtb3ZlbmRvIG9zIDQgcHJpbWVyaW9zIGNoYXJhY3RlcmVzIGRvcyB2YWxvcmVzIG5hIGNvbHVuYSAnYW5vJwogIHVuZ3JvdXAoKSAlPiUgCiAgZ3JvdXBfYnkoYW5vLCByZWdpYW8sIFVGKSAlPiUgCiAgc3VtbWFyaXNlKHRvdGFsX3ByZXNvcyA9IHN1bShwcmVzb3MpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzZWxlY3QoYW5vLCByZWdpYW8sIFVGLCB0b3RhbF9wcmVzb3MpCmBgYAoKVm91IGRlaXhhciBhcGVuYXMgbWFpcyBlc3NlIGV4bXBsbyBkZSBjw7NkaWdvLCBwb2lzIHBhcmEgYSBjcmlhw6fDo28gZGFzIGRlbWFpcyB0YWJlbGFzIG7Do28gaMOhIG11aXRhIGRpZmVyZW7Dp2EgZW0gcmVsYcOnw6NvIGFvIHByb2Nlc3NvIGRlc3NhLiBPIHF1ZSBwb2RlIG11ZGFyIHPDo28gYWxndW5zIGFqdXN0ZXMgcG9udHVhaXMsIG1hcyBuYWRhIHF1ZSBtZXJlw6dhIG1lbnPDo28uIApgYGAge3IgQ3JpYW5kbyB0YWJlbGEgZmFpeGEgZGUgaWRhZGV9CmluZm9wZW5fZmFpeGFfZGVfaWRhZGUgPC1pbmZvcGVuXzRfZmluYWwgJT4lIAogIHNlbGVjdChyZWdpYW8sVUYsZGF0YSxnZW5lcm8sIGZhaXhhX2V0YXJpYSwgcHJlc29zKSAlPiUgIyMgc2VsZWNpb25hciBhcyBjb2x1bmFzCiAgbXV0YXRlKGZhaXhhX2V0YXJpYSA9IGdzdWIoIl8iLCAiICIsIGZhaXhhX2V0YXJpYSkpICU+JSAjIyByZW1vdmVyIG9zICJfIiBwYXJhIGZhY2lsaXRhciBsZWl0dXJhIGUgZXhwb3J0YWNhbyBwYXJhIGNzdiAKICBtdXRhdGVfYXQodmFycygtcHJlc29zKSwgYXMuZmFjdG9yKSAlPiUgIyMgY29udmVydGVyIHRvZGFzIGFzIGNvbHVuYXMgcGFyYSBmYWN0b3IgLSBwcmVzb3MKICBkcm9wX25hKCkgIyMgcmVtb3ZlciBOQQoKaW5mb3Blbl9mYWl4YV9kZV9pZGFkZV8yX3BvcmNlbnRhZ2VtIDwtIGluZm9wZW5fZmFpeGFfZGVfaWRhZGUgJT4lIAogIGZpbHRlcihncmVwbCgiXmRlYyIsIGRhdGEpIHwgZGF0YSA9PSAianVuIDIwMTkiKSAlPiUKICBncm91cF9ieShyZWdpYW8sIFVGLCBkYXRhKSAlPiUKICBtdXRhdGUoYW5vID0gc3RyX3JlcGxhY2UoZGF0YSwgIlxcRCooXFxkezR9KS4qIiwgIlxcMSIpLAogICAgICAgICB0b3RhbF9wcmVzb3NfZmFpeGEgPSBzdW0ocHJlc29zLCBuYS5ybSA9IFRSVUUpLCAjIHNvbWEgdG90YWwgZGUgcHJlc29zIHBvciByZWdpw6NvLCBVRiwgZ8OqbmVybyBlIGFubwogICAgICAgICBwb3JjZW50YWdlbV9wcmVzb3MgPSByb3VuZCgoKHByZXNvcyAvIHRvdGFsX3ByZXNvc19mYWl4YSkgKiAxMDApLDIpLAogICAgICAgICBVRiA9IGFzLmZhY3RvcihVRiksCiAgICAgICAgIGFubyA9IGFzLmNoYXJhY3Rlcihhbm8pKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzZWxlY3QoYW5vLCByZWdpYW8sIFVGLCBnZW5lcm8sIGZhaXhhX2V0YXJpYSwgcG9yY2VudGFnZW1fcHJlc29zKQoKaW5mb3Blbl9mYWl4YV9kZV9pZGFkZV8zX2ZpbmFsIDwtIGluZm9wZW5fZmFpeGFfZGVfaWRhZGVfMl9wb3JjZW50YWdlbSAlPiUKICBsZWZ0X2pvaW4ocG9wdWxhY2FvX3ByaXNpb25hbF8yX3Jlc3VtaWRvLCBieSA9IGMoImFubyIsICJyZWdpYW8iLCAiVUYiKSkgJT4lCiAgbXV0YXRlKHByZXNvcyA9IHJvdW5kKCgocG9yY2VudGFnZW1fcHJlc29zIC8gMTAwKSAqIHRvdGFsX3ByZXNvcyksIDApKSAlPiUKICBzZWxlY3QoYW5vLCByZWdpYW8sIFVGLCBnZW5lcm8sIGZhaXhhX2V0YXJpYSwgcHJlc29zKQoKaW5mb3Blbl9mYWl4YV9kZV9pZGFkZV80IDwtIGluZm9wZW5fZmFpeGFfZGVfaWRhZGVfM19maW5hbCAlPiUgCiAgZ3JvdXBfYnkoYW5vLGZhaXhhX2V0YXJpYSkgJT4lIAogIHN1bW1hcmlzZShwcmVzb3MgPSBzdW0ocHJlc29zKSkgJT4lIAogIG11dGF0ZShhbm8gPSBhcy5udW1lcmljKGFubykpCmBgYAoKYGBgIHtyIENyaWFuZG8gYXMgZGVtYWlzIHRhYmVsYXMgZG8gSU5GT1BFTiwgaW5jbHVkZSA9IEZBTFNFfQppbmZvcGVuX2V0bmlhIDwtIGluZm9wZW5fNF9maW5hbCAlPiUgCiAgc2VsZWN0KHJlZ2lhbyxVRixkYXRhLGdlbmVybywgZXRuaWEsIHByZXNvcykgJT4lIAogIG11dGF0ZShldG5pYSA9IGdzdWIoIl8iLCAiICIsIGV0bmlhKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1wcmVzb3MpLCBhcy5mYWN0b3IpICU+JQogIGdyb3VwX2J5KHJlZ2lhbyxVRixkYXRhLGdlbmVybywgZXRuaWEpICU+JSAKICBzdW1tYXJpc2UocHJlc29zID0gc3VtKHByZXNvcykpICU+JSAKICBkcm9wX25hKCkKCmluZm9wZW5fZXRuaWFfMl9wb3JjZW50YWdlbSA8LSBpbmZvcGVuX2V0bmlhICU+JSAKICBmaWx0ZXIoZ3JlcGwoIl5kZWMiLCBkYXRhKSB8IGRhdGEgPT0gImp1biAyMDE5IikgJT4lCiAgZ3JvdXBfYnkocmVnaWFvLCBVRiwgZGF0YSkgJT4lCiAgbXV0YXRlKGFubyA9IHN0cl9yZXBsYWNlKGRhdGEsICJcXEQqKFxcZHs0fSkuKiIsICJcXDEiKSwKICAgICAgICAgdG90YWxfcHJlc29zX2ZhaXhhID0gc3VtKHByZXNvcywgbmEucm0gPSBUUlVFKSwgIyBzb21hIHRvdGFsIGRlIHByZXNvcyBwb3IgcmVnacOjbywgVUYsIGfDqm5lcm8gZSBhbm8KICAgICAgICAgcG9yY2VudGFnZW1fcHJlc29zID0gcm91bmQoKChwcmVzb3MgLyB0b3RhbF9wcmVzb3NfZmFpeGEpICogMTAwKSwyKSwKICAgICAgICAgVUYgPSBhcy5mYWN0b3IoVUYpLAogICAgICAgICBhbm8gPSBhcy5jaGFyYWN0ZXIoYW5vKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgc2VsZWN0KGFubywgcmVnaWFvLCBVRiwgZ2VuZXJvLCBldG5pYSwgcG9yY2VudGFnZW1fcHJlc29zKQoKaW5mb3Blbl9ldG5pYV8zX2ZpbmFsIDwtIGluZm9wZW5fZXRuaWFfMl9wb3JjZW50YWdlbSAlPiUKICBsZWZ0X2pvaW4ocG9wdWxhY2FvX3ByaXNpb25hbF8yX3Jlc3VtaWRvLCBieSA9IGMoImFubyIsICJyZWdpYW8iLCAiVUYiKSkgJT4lCiAgZmlsdGVyKCFzdHJfZGV0ZWN0KGV0bmlhLCAiQW1hcmVsYSBvdSBJbmRpZ2VuYSIpKSAlPiUgCiAgbXV0YXRlKHByZXNvcyA9IHJvdW5kKCgocG9yY2VudGFnZW1fcHJlc29zIC8gMTAwKSAqIHRvdGFsX3ByZXNvcyksIDApLAogICAgICAgICBldG5pYSA9IHRvbG93ZXIoZXRuaWEpLAogICAgICAgICBhbm8gPSBhcy5udW1lcmljKGFubykpICU+JQogIGdyb3VwX2J5KGFubywgcmVnaWFvLCBVRixldG5pYSwpICU+JSAKICBzdW1tYXJpc2UocHJlc29zID0gc3VtKHByZXNvcykpICU+JSAKICBzZWxlY3QoYW5vLCByZWdpYW8sIFVGLCBldG5pYSwgcHJlc29zKQoKIyBwcmVzb3MgZGUgYWNvcmRvIGNvbSBhIHJlbXVuZXJhY2FvLiBEZSB0b2RhcyBhcyB0YWJlbGFzLCBlc3NhIMOpIGEgcXVlIG1haXMgZmFsdGEgZGFkb3MKCmluZm9wZW5fcmVtdW5lcmFjYW8gPC1pbmZvcGVuXzRfZmluYWwgJT4lIAogIHNlbGVjdChyZWdpYW8sVUYsZGF0YSxnZW5lcm8sIHJlbXVuZXJhY2FvLCBwcmVzb3MpICU+JSAKICBtdXRhdGUocmVtdW5lcmFjYW8gPSBnc3ViKCJfIiwgIiAiLCByZW11bmVyYWNhbyksCiAgICAgICAgIHJlbXVuZXJhY2FvID0gZ3N1YigiMy40IiwgIjMvNCIsIHJlbXVuZXJhY2FvKSwKICAgICAgICAgcmVtdW5lcmFjYW8gPSBnc3ViKCJOw6NvIHJlY2ViZSAiLCJOw6NvIHJlY2ViZSIsIHJlbXVuZXJhY2FvKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1wcmVzb3MpLCBhcy5mYWN0b3IpICU+JQogIGRyb3BfbmEoKQoKaW5mb3Blbl9yZW11bmVyYWNhb18yX3BvcmNlbnRhZ2VtIDwtIGluZm9wZW5fcmVtdW5lcmFjYW8gJT4lIAogIGZpbHRlcihncmVwbCgiXmRlYyIsIGRhdGEpIHwgZGF0YSA9PSAianVuIDIwMTkiLAogICAgICAgICAhZ3JlcGwoIlNlbSBpbmZvcm1hw6fDo28iLCByZW11bmVyYWNhbykpICU+JQogIGdyb3VwX2J5KHJlZ2lhbywgVUYsIGRhdGEpICU+JQogIG11dGF0ZShhbm8gPSBzdHJfcmVwbGFjZShkYXRhLCAiXFxEKihcXGR7NH0pLioiLCAiXFwxIiksCiAgICAgICAgIHRvdGFsX3ByZXNvc19mYWl4YSA9IHN1bShwcmVzb3MsIG5hLnJtID0gVFJVRSksIAogICAgICAgICBwb3JjZW50YWdlbV9wcmVzb3MgPSByb3VuZCgoKHByZXNvcyAvIHRvdGFsX3ByZXNvc19mYWl4YSkgKiAxMDApLDIpLAogICAgICAgICBVRiA9IGFzLmZhY3RvcihVRiksCiAgICAgICAgIGFubyA9IGFzLmNoYXJhY3Rlcihhbm8pKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzZWxlY3QoYW5vLCByZWdpYW8sIFVGLCBnZW5lcm8sIHJlbXVuZXJhY2FvLCBwb3JjZW50YWdlbV9wcmVzb3MpCgppbmZvcGVuX3JlbXVuZXJhY2FvXzNfZmluYWwgPC0gaW5mb3Blbl9yZW11bmVyYWNhb18yX3BvcmNlbnRhZ2VtICU+JQogIGxlZnRfam9pbihwb3B1bGFjYW9fcHJpc2lvbmFsXzJfcmVzdW1pZG8sIGJ5ID0gYygiYW5vIiwgInJlZ2lhbyIsICJVRiIpKSAlPiUKICBtdXRhdGUocHJlc29zID0gcm91bmQoKChwb3JjZW50YWdlbV9wcmVzb3MgLyAxMDApICogdG90YWxfcHJlc29zKSwgMCkpICU+JQogIHNlbGVjdChhbm8sIHJlZ2lhbywgVUYsIGdlbmVybywgcmVtdW5lcmFjYW8sIHByZXNvcykgJT4lIAogIGdyb3VwX2J5KGFubywgcmVnaWFvLCBVRiwgcmVtdW5lcmFjYW8sKSAlPiUgCiAgc3VtbWFyaXNlKCBwcmVzb3MgPSBzdW0ocHJlc29zKSkKCiMgUG9yIGZpbSBhIHRhYmVsYSBncmF1IGRlIGluc3RydcOnw6NvLCBxdWUgYWluZGEgcmVjZWJlcsOhIG91dHJvIHRyYXRhbWVudG8gbWFpcyBhZGlhbnRlCgppbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvIDwtaW5mb3Blbl80X2ZpbmFsICU+JSAKICBzZWxlY3QocmVnaWFvLFVGLGRhdGEsZ2VuZXJvLCBncmF1X2RlX2luc3RydWNhbywgcHJlc29zKSAlPiUgCiAgbXV0YXRlKGdyYXVfZGVfaW5zdHJ1Y2FvID0gZ3N1YigiXyIsICIgIiwgZ3JhdV9kZV9pbnN0cnVjYW8pKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoLXByZXNvcyksIGFzLmZhY3RvcikgJT4lCiAgZHJvcF9uYSgpCgppbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvXzJfcG9yY2VudGFnZW0gPC0gaW5mb3Blbl9ncmF1X2RlX2luc3RydWNhbyAlPiUgCiAgZmlsdGVyKGdyZXBsKCJeZGVjIiwgZGF0YSkgfCBkYXRhID09ICJqdW4gMjAxOSIpICU+JQogIGdyb3VwX2J5KHJlZ2lhbywgVUYsIGRhdGEpICU+JQogIG11dGF0ZShhbm8gPSBzdHJfcmVwbGFjZShkYXRhLCAiXFxEKihcXGR7NH0pLioiLCAiXFwxIiksCiAgICAgICAgIHRvdGFsX3ByZXNvc19mYWl4YSA9IHN1bShwcmVzb3MsIG5hLnJtID0gVFJVRSksICMgc29tYSB0b3RhbCBkZSBwcmVzb3MgcG9yIHJlZ2nDo28sIFVGLCBnw6puZXJvIGUgYW5vCiAgICAgICAgIHBvcmNlbnRhZ2VtX3ByZXNvcyA9IHJvdW5kKCgocHJlc29zIC8gdG90YWxfcHJlc29zX2ZhaXhhKSAqIDEwMCksMiksCiAgICAgICAgIFVGID0gYXMuZmFjdG9yKFVGKSwKICAgICAgICAgYW5vID0gYXMuY2hhcmFjdGVyKGFubykpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHNlbGVjdChhbm8sIHJlZ2lhbywgVUYsIGdlbmVybywgZ3JhdV9kZV9pbnN0cnVjYW8sIHBvcmNlbnRhZ2VtX3ByZXNvcykKCmluZm9wZW5fZ3JhdV9kZV9pbnN0cnVjYW9fM19maW5hbCA8LSBpbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvXzJfcG9yY2VudGFnZW0gJT4lCiAgbGVmdF9qb2luKHBvcHVsYWNhb19wcmlzaW9uYWxfMl9yZXN1bWlkbywgYnkgPSBjKCJhbm8iLCAicmVnaWFvIiwgIlVGIikpICU+JQogIG11dGF0ZShwcmVzb3MgPSByb3VuZCgoKHBvcmNlbnRhZ2VtX3ByZXNvcyAvIDEwMCkgKiB0b3RhbF9wcmVzb3MpLCAwKSkgJT4lCiAgc2VsZWN0KGFubywgcmVnaWFvLCBVRiwgZ2VuZXJvLCBncmF1X2RlX2luc3RydWNhbywgcHJlc29zKQpgYGAKCgoKIyMgVmlzdWFsaXphw6fDo28gZG9zIERhZG9zIGRvIElORk9QRU57LnRhYnNldCAudGFic2V0LWZhZGV9CgpBcXVpIGVzdMOjbyBhcyB0YWJlbGFzIGRvIElORk9QRU4gcXVlIGlyZWkgdXRpbGl6YXIuIE9ic2V2ZSBxdWUgY29tYmluZWkgdsOhcmlhcyB0YWJlbGFzLCByZWFyYW5qZWkgYXMgY29sdW5hcyBlIGV4dHJhw60gNSB0YWJlbGFzIGRpc3RpbnRhcywgY29tIGRhZG9zIGVtIHBhaW5lbC4KCiMjIyBQb3B1bGFjYW8gcHJpc2lvbmFsCmBgYCB7ciBQb3B1bGFjYW8gcHJpc2lvbmFsLCBlY2hvID0gRkFMU0UgfQpyZXN1bW8gPC0gIHBvcHVsYWNhb19wcmlzaW9uYWwgJT4lCiAgICBhcnJhbmdlKGRlc2MocHJlc29zKSkKCmthYmxlKGhlYWQocmVzdW1vLDEwKSkgJT4lCiAgICBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBGLCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSkKCmBgYAogIAojIyMgIEV0bmlhIApgYGAge3IgRXRuaWEsIGVjaG8gPSBGQUxTRSB9CnJlc3Vtb19ldG5pYSA8LSAgaW5mb3Blbl9ldG5pYV8zX2ZpbmFsICU+JQogICAgYXJyYW5nZShkZXNjKHByZXNvcykpCgprYWJsZShoZWFkKHJlc3Vtb19ldG5pYSwxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRiwgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIikpCmBgYAoKIyMjIEdyYXUgZGUgaW5zdHJ1w6fDo28KYGBgIHtyIEdyYXUgZGUgaW5zdHJ1w6fDo28gLCBlY2hvID0gRkFMU0UgfQpyZXN1bW9faW5zdHJ1Y2FvIDwtICBpbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvXzNfZmluYWwgJT4lCiAgYXJyYW5nZShkZXNjKHByZXNvcykpCgprYWJsZShoZWFkKHJlc3Vtb19pbnN0cnVjYW8sMTApKSAlPiUKICBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBGLCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSkKYGBgCgojIyMgRmFpeGEgZXTDoXJpYSAKYGBgIHtyIEZhaXhhIGV0w6FyaWEgLCBlY2hvID0gRkFMU0UgfQpyZXN1bW9faWRhZGUgPC0gIGluZm9wZW5fZmFpeGFfZGVfaWRhZGVfNCAlPiUKICBhcnJhbmdlKGRlc2MocHJlc29zKSkKCmthYmxlKGhlYWQocmVzdW1vX2lkYWRlLDEwKSkgJT4lCiAga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRiwgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIikpCmBgYAoKIyMjIEZhaXhhIGRlIHJlbXVuZXJhw6fDo28gCmBgYCB7ciBGYWl4YSBkZSByZW11bmVyYcOnw6NvICwgZWNobyA9IEZBTFNFIH0KcmVzdW1vX3JlbXVuZXJhw6fDo28gPC0gIGluZm9wZW5fcmVtdW5lcmFjYW9fM19maW5hbCAlPiUKICBhcnJhbmdlKGRlc2MocHJlc29zKSkKCmthYmxlKGhlYWQocmVzdW1vX3JlbXVuZXJhw6fDo28sMTApKSAlPiUKICBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBGLCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSkKYGBgCgojIFRhYmVsYSBJQkdFIEdyYXUgZGUgSW5zdHJ1w6fDo28KQSBwcm9wb3N0YSBkZXNzYSBhbsOhbGlzZSDDqSBjb21wYXJhciBvcyBkYWRvcyBkYSBwb3B1bGHDp8OjbyBjYXJjZXLDoXJpYSBjb20gb3MgZGFkb3MgZG8gSUJHRSwgZSBmYXplciB1bWEgY29ycmVsYcOnw6NvIGVudHJlIGVsZXMuIE9zIGRhZG9zIHF1ZSB2b3UgdXRpbGl6YXIgYXF1aSBmYXplbSBwYXJ0ZSBkYSBQZXNxdWluYSBOYWNpb25hbCBQb3IgQW1vc3RyYSBkZSBEb21pY8OtbGlvcyBDb250aW51YSAoUE5BREMpIGUgcG9kZW0gc2VyIGVuY29udHJhZGFzIG5hIHDDoWdpbmEgZGUgZXN0YXTDrXN0aWNhcyBkbyBbSUJHRV0oaHR0cHM6Ly93d3cuaWJnZS5nb3YuYnIvZXN0YXRpc3RpY2FzL2Rvd25sb2Fkcy1lc3RhdGlzdGljYXMuaHRtbCkuCiAgCkFxdWkgY29tZcOnbyB0cmFiYWxoYXIgYSBzZWd1bmRhIHRhYmVsYSBxdWUgc2Vyw6EgdXNhZGEuIEVzc2EgdGFiZWxhIMO6bmljYSBwb3NzdWkgdmFyaWFzIGZvbGhhcyBxdWUgdm91IGV4dHJhaXIgZSBtYW5pcHVsYXIgb3MgZGFkb3MuIEEgdGFiZWxhICJQTkFEX0NvbnRpbnVhXzIwMThfRWR1Y2FjYW8ueGxzIiwgcG9zc3VpIGRhZG9zIHJlZmVyZW50ZXMgw6AgZWR1Y2HDp8OjbyBkYSBwb3B1bGHDp8Ojby4gU8OjbyB2w6FyaWFzIGluZm9ybWHDp8O1ZXMsIGRlbnRyZSBhcyBxdWFpczogbsOtdmVsIGVkdWNhY2lvbmFsIHBvciByZWdpw6NvLCBnZXJlbm8gZSBldG5pYS4gRXNzYSB0YWJlbGEgdGFtYsOpbSBhcHJlc2VudGEgZGFkb3MgZW0gcGFpbmVsLiAgCipBbWFyZWxvcyBlIEluZGlnZW5hcyBjb25zdGFtIG5vIFRvdGFsKgoKICAKVm91IHB1bGFyIGEgcGFydGUgZGUgaW1wb3J0YcOnw6NvIGRhIHRhYmVsYSBlIGlyIGRpcmV0YW1lbnRlIHBhcmEgbyBkYXRhZnJhbWUuCmBgYHtyIFBOQURfQ29udGludWFfMjAxOF9FZHVjYWNhbywgaW5jbHVkZT1GQUxTRX0KIyBkZWZpbmUgY2FtaW5obyBwYXJhIG8gYXJxdWl2byBleGNlbApjYW1pbmhvX2FycXVpdm9fcG5hZCA8LSAiUE5BRGMvUE5BRF9Db250aW51YV8yMDE4X0VkdWNhY2FvLnhscyIKCiMgcGVnYSBvcyBub21lcyBkYXMgZm9saGFzIHF1ZSBzZXJhbyB1c2FkYXMKbm9tZXNfZm9saGFzX3BuYWQgPC0gZXhjZWxfc2hlZXRzKGNhbWluaG9fYXJxdWl2b19wbmFkKQoKIyByZW1vdmUgYXMgZHVhcyBwcmltZWlyYXMgZm9saGFzCm5vbWVzX2ZvbGhhc19wbmFkIDwtIG5vbWVzX2ZvbGhhc19wbmFkWy1jKDEsIDIpXQoKIyBjcmlhciB1bSBkYXRhIGZyYW1lIHZhemlvCnBuYWRfYnIgPC0gZGF0YS5mcmFtZSgpCgojIGZhemVyIHVtIGxvb3AgcG9yIHRvZGFzIGFzIGZvbGhhcyBlIGFkaWNpb25hciBlbGFzIG5vIGRhdGFmcmFtZSBxdWUgZXN0YXZhIHZhemlvCmZvciAoaSBpbiBzZXFfYWxvbmcobm9tZXNfZm9saGFzX3BuYWQpKSB7CiAgZm9saGFfcG5hZCA8LSByZWFkX2V4Y2VsKGNhbWluaG9fYXJxdWl2b19wbmFkLCBzaGVldCA9IG5vbWVzX2ZvbGhhc19wbmFkW2ldLCBza2lwID0gNykKICBwbmFkX2JyIDwtIGJpbmRfcm93cyhwbmFkX2JyLCBmb2xoYV9wbmFkKQp9CgojIHBhcmEgZXZpdGFyIGRpc3RyYWNvZXMsIHZvdSByZW1vdmVyIGEgdmFyacOhdmVsIGZvbGhhX3BuYWQgcXVlIGZvaSBjcmlhZGEgcGFyYSBmYXplciBvIGxvb3Agbm8gZGF0YWZyYW1lIHBuYWQgCnJtKGZvbGhhX3BuYWQpCgojcmVub21lYXIgYXMgY29sdW5hcyBwYXJhIGZpY2FyIG1haXMgZmFjaWwgdHJhYmFsaGFyIGNvbSBlbGFzCmNvbG5hbWVzKHBuYWRfYnIpPC0gYygiaW5kaWNhZG9yIiwgIm5pdmVsX3RlcnJpdG9yaWFsIiwgCiAgICAgICAgICAgICAgICAgICAiYWJlcnR1cmFfdGVycml0b3JpYWwiLCJ2YXJpYXZlbF8xIiwKICAgICAgICAgICAgICAgICAgICJjYXRlZ29yaWFfMSIsICJ2YXJpYXZlbF8yIiwgCiAgICAgICAgICAgICAgICAgICAiY2F0ZWdvcmlhXzIiLCIyMDE2IiwiMjAxNyIsIjIwMTgiKQoKI3JlbW92ZXIgbGluaGFzIGR1cGxpY2FkYXMgcG9pcyBuaXZlbCBicmFzaWwgZXN0w6EgcHJlc2VudGUgZW0gdG9kYXMgYXMgZm9saGFzCnBuYWRfYnIgPC0gcG5hZF9iclshZHVwbGljYXRlZChwbmFkX2JyKSwgXQpgYGAKICAKVmlzdWFsaXphw6fDo28gZGEgVGFiZWxhIGRvIFBOQUQKYGBge3IgdmlzdWFsaXphw6fDo28gZGEgdGFiZWxhIGRvIFBOQUQsIGVjaG89RkFMU0V9CmthYmxlKGhlYWQocG5hZF9iciwxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKCkVzc2UgZGF0YWZyYW1lIHJldW5lIGRhZG9zIGRlIHRvZGFzIGFzIGFiYXMgZG8gYXJxdWl2byAiUE5BRF9Db250aW51YV8yMDE4X0VkdWNhY2FvLnhscyIsIGFpbmRhIGjDoSBtdWl0YSBtYW5pcHVsYcOnw6NvIGEgc2VyIGZlaXRhLiAgCgojIyAgTWFuaXB1bGHDp8OjbyBkb3MgRGFkb3MKClByaW1laXJvLCB2b3UgdHJhbnNwb3Igb3MgZGFkb3MgcGFyYSBxdWUgZXUgcG9zc2EgdHJhbnNmb3Jtw6EtbG9zIGVtIGZvcm1hdG8gbG9uZ28sIHRhbCBjb21vIG5vIG1vZGVsbyBhbnRlcmlvciwgY29tIGEgdGFiZWxhIGRvIElORk9QRU4uCmBgYHtyIHRyYW5zZm9ybWFyIHRhYmVsYSBkbyBwbmFkLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbmFkXzJfZm9ybWF0b19sb25nbyA8LSBwaXZvdF9sb25nZXIocG5hZF9iciwgODoxMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc190byA9ICJhbm8iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJ2YWxvciIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX2Ryb3BfbmEgPSBUUlVFKQpgYGAKClZvdSBtdWx0aXBsaWNhciBvIHZhbG9yIG5hIGNvbHVuYSAndmFsb3InIHBvciAxMDAwIHNlIGEgY29sdW5hICdpbmRpY2Fkb3InIGNvbnRpdmVyIGEgc3RyaW5nICcobWlsIHBlc3NvYXMpJyBlLCBlbSBzZWd1aWRhLCByZW1vdsOqLWxhLiBEZXBvaXMgdm91IGNyaWFyIHVtYSB2YXJpw6F2ZWwgJ3JlZ2lhbycgcGFyYSBhcm1hemVuYXIgYSByZWdpw6NvIGRlIGNhZGEgZXN0YWRvLgpgYGB7ciBwbmFkXzNfY29tX3JlZ2lvZXMsfQpwbmFkXzNfY29tX3JlZ2lvZXMgPC0gcG5hZF8yX2Zvcm1hdG9fbG9uZ28gJT4lCiAgbXV0YXRlKHZhbG9yID0gaWZlbHNlKGdyZXBsKCIobWlsIHBlc3NvYXMpIiwgaW5kaWNhZG9yKSwgdmFsb3IgKiAxMDAwLCB2YWxvciksCiAgICAgICAgIGluZGljYWRvciA9IGdzdWIoIlxccypcXChtaWwgcGVzc29hc1xcKSIsICIiLCBpbmRpY2Fkb3IpLAogICAgICAgICByZWdpYW8gPSBjYXNlX3doZW4oYWJlcnR1cmFfdGVycml0b3JpYWwgJWluJSBjKCJBY3JlIiwgIkFtYXpvbmFzIiwgIkFtYXDDoSIsICJQYXLDoSIsICJSb25kw7RuaWEiLCAiUm9yYWltYSIsICJUb2NhbnRpbnMiKSB+ICJOb3J0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYmVydHVyYV90ZXJyaXRvcmlhbCAlaW4lIGMoIk1hcmFuaMOjbyIsICJQaWF1w60iLCAiQ2VhcsOhIiwgIlJpbyBHcmFuZGUgZG8gTm9ydGUiLCAiUGFyYcOtYmEiLCAiUGVybmFtYnVjbyIsICJBbGFnb2FzIiwgIlNlcmdpcGUiLCAiQmFoaWEiKSB+ICJOb3JkZXN0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYmVydHVyYV90ZXJyaXRvcmlhbCAlaW4lIGMoIk1pbmFzIEdlcmFpcyIsICJFc3DDrXJpdG8gU2FudG8iLCAiUmlvIGRlIEphbmVpcm8iLCAiU8OjbyBQYXVsbyIpIH4gIlN1ZGVzdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJlcnR1cmFfdGVycml0b3JpYWwgJWluJSBjKCJQYXJhbsOhIiwgIlNhbnRhIENhdGFyaW5hIiwgIlJpbyBHcmFuZGUgZG8gU3VsIikgfiAiU3VsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFiZXJ0dXJhX3RlcnJpdG9yaWFsICVpbiUgYygiTWF0byBHcm9zc28iLCAiTWF0byBHcm9zc28gZG8gU3VsIiwgIkdvacOhcyIsICJEaXN0cml0byBGZWRlcmFsIikgfiAiQ2VudHJvLU9lc3RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSkKYGBgCgoKYGBge3IgVGFiZWxhcyBmaW5haXMgcG9wdWxhw6fDo28gcG9yIHJlZ2nDo28gZSAxNCBhbm9zIG91IG1haXMsIGluY2x1ZGU9RkFMU0V9CnBuYWRfNF9wb3B1bGFjYW9faWRhZGUgPC0gcG5hZF8zX2NvbV9yZWdpb2VzICU+JQogIGZpbHRlcihpbmRpY2Fkb3IgPT0gIlBvcHVsYcOnw6NvIiwKICAgICAgICAgbml2ZWxfdGVycml0b3JpYWwgPT0gIlVuaWRhZGUgZGEgRmVkZXJhw6fDo28iLAogICAgICAgICBjYXRlZ29yaWFfMSAlaW4lIGMoIkhvbWVtIiwgIk11bGhlciIsIkJyYW5jYSIsIlByZXRhIG91IHBhcmRhIiwiVG90YWzCuSIpLAogICAgICAgICBjYXRlZ29yaWFfMiAhPSAiVG90YWwiKSAlPiUKICBtdXRhdGUoZ2VuZXJvID0gaWZlbHNlKGNhdGVnb3JpYV8xICVpbiUgYygiSG9tZW0iLCAiTXVsaGVyIiksIGNhdGVnb3JpYV8xLCBOQSksCiAgICAgICAgIGV0bmlhID0gaWZlbHNlKGNhdGVnb3JpYV8xICVpbiUgYygiQnJhbmNhIiwgIlByZXRhIG91IHBhcmRhIiwiVG90YWzCuSIpLCBjYXRlZ29yaWFfMSwgTkEpLAogICAgICAgICBVRiA9IHVmX2RpY3RbYXMuY2hhcmFjdGVyKGFiZXJ0dXJhX3RlcnJpdG9yaWFsKV0pICU+JQogIHNlbGVjdChyZWdpYW8sIFVGLCBnZW5lcm8sIGV0bmlhLCAiZ3J1cG9fZGVfaWRhZGUiID0gY2F0ZWdvcmlhXzIsIGFubywgdmFsb3IpCmBgYAoKIyMjIFRhYmVsYSBQTkFEIFBvcHVsYcOnw6NvIGNvbSAxOCBhbm9zIG91IG1haXMKClZvdSBjb21iaW5hciBlc3NhIHRhYmVsYSBkbyBJQkdFICwgY29tIGEgcHJpbWVpcmEgdGFiZWxhIGRvIElORk9QRU4gcXVlIGRpeiByZXNwZWl0byBhIHBvcHVsYcOnw6NvIGNhcmNlcsOhcmlhLCBwb2RlbmRvIGFzc2ltIHRhbWJlbSBjb3JyZWxhY2lvbmFyIG8gdG90YWwgZGUgcHJlc29zIGNvbSBwZXNzb2FzIGRlIDE4IGFub3Mgb3UgbWFpcywgbWFzIGRlIGZvcm1hIHJlc3VtaWRhLgoKYGBge3IgcG9wdWxhY2FvIHByaXNpb25hbCB2cyBwb3B1bGFjYW8gYnJhc2lsZWlyYSBjb20gMTggYW5vcyBvdSBtYWlzLCBpbmNsdWRlPUZBTFNFfQpwb3B1bGFjYW9fMThfYW5vc19vdV9tYWlzIDwtIHBuYWRfNF9wb3B1bGFjYW9faWRhZGUgJT4lIAogIHNlbGVjdCgtZXRuaWEpICU+JSAKICBmaWx0ZXIoIXN0cl9kZXRlY3QoZ3J1cG9fZGVfaWRhZGUsICIwIGEgMyBhbm9zfDQgZSA1IGFub3N8NiBhIDkgYW5vc3wxMCBhIDE0IGFub3N8MTUgYSAxNyBhbm9zIikpICU+JSAKICBuYS5vbWl0KCkKCnBvcHVsYWNhb18xOF9hbm9zX291X21haXNfMiA8LSBwb3B1bGFjYW9fMThfYW5vc19vdV9tYWlzICU+JSAKICBncm91cF9ieShhbm8sIHJlZ2lhbywgVUYpICU+JSAKICBzdW1tYXJpc2UoIHZhbG9yID0gc3VtKHZhbG9yKSkgJT4lIAogIHJlbmFtZSh0b3RhbCA9IHZhbG9yKQpgYGAKCkFxdWkgcG9kZW1vcyB0ZXIgdW1hIGlkZWlhIGRvcyBkYWRvcyBwcmVzZW50ZXMgbmVzc2EgdGFiZWxhLiAKYGBge3IgaGVhZChwb3B1bGFjYW9fMThfYW5vc19vdV9tYWlzXzIpLCBlY2hvPUZBTFNFfQpoZWFkKHBvcHVsYWNhb18xOF9hbm9zX291X21haXNfMikKYGBgCgpFc3NhIHRhYmVsYSBwb3NzdWkgZGFkb3MgZGUgMjAxNiBhIDIwMTguIE8gcHJpbWVpcm8gcGFzc28gdmFpIHNlciBjYWxjdWxhciBvIHRvdGFsIGRlIHBlc3NvYXMgcGFyYSBjYWRhIHZhcmnDoXZlbCBubyBhbm8gZGUgMjAxOSwgdXNhbmRvIG8gbcOpdG9kbyBhcml0aW3DqXRpY28gZGVzY3JpdG8gbm8gY29tZcOnbyBkZXNzYSBhbsOhbGlzZS4KCiMjIFVzYW5kbyBNw6l0b2RvIEFyaXRtw6l0aWNvIFBhcmEgRXN0aW1hciB1bWEgUG9wdWxhw6fDo28KClZvdSBjb21lw6dhciB0cmFuc2Zvcm1hbmRvIGVzc2VzIGRhZG9zIGVtIGZvcm1hdG8gbGFyZ28gKHdpZGUpLCBsb2dvIGVtIHNlZ3VpZGEgYXBsaWNvIGEgZnVuw6fDo28gY29tIGEgZsOzcm11bGEgZSBwb3IgZmltIHZvbHRvIGNvbSBhIHRhYmVsYSBwYXJhIGZvcm1hdG8gbG9uZ28obG9uZykuCgpgYGB7ciBwb3B1bGFjYW8gYWNpbWRhIGRlIDE4IGFub3MgZXN0YXTDrXN0aWNhIGRlIHBvcHVsYcOnw6NvfQpwb3B1bGFjYW9fMThfYW5vc19vdV9tYWlzXzMgPC0gcGl2b3Rfd2lkZXIocG9wdWxhY2FvXzE4X2Fub3Nfb3VfbWFpc18yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX2Zyb20gPSBhbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX2Zyb20gPSB0b3RhbCkKCnBvcHVsYWNhb18xOF9hbm9zX291X21haXNfNCA8LSBwb3B1bGFjYW9fMThfYW5vc19vdV9tYWlzXzMgJT4lIAogbXV0YXRlKAogICAgYDIwMTlgID0gcm91bmQoZm9ybXVsYShgMjAxOGAsMjAxOCxgMjAxNmAsMjAxNiwyMDE5KSkKICApCnBvcHVsYWNhb18xOF9hbm9zX291X21haXNfNSA8LSBwaXZvdF9sb25nZXIocG9wdWxhY2FvXzE4X2Fub3Nfb3VfbWFpc180LCBjb2xzID0gLWMoVUYscmVnaWFvKSxuYW1lc190byA9ICJhbm8iLHZhbHVlc190byA9ICJwb3B1bGFjYW8iKSAlPiUgCiAgbXV0YXRlKGFjcm9zcygtcG9wdWxhY2FvLCBhcy5mYWN0b3IpKQpgYGAKClZvdSBhZ29yYSBjb21iaW5hciBlc3NhIHRhYmVsYSBjb20gYSBwb3B1bGHDp8OjbyBwcmlzaW9uYWwgZG8gSU5GT1BFTi4KYGBge3IgcG9wdWxhY2FvX2luZm9wZW5fdG90YWwsIGluY2x1ZGU9RkFMU0V9CnBvcHVsYWNhb19pbmZvcGVuX3RvdGFsIDwtIGxlZnRfam9pbihwb3B1bGFjYW9fcHJpc2lvbmFsXzJfcmVzdW1pZG8sIHBvcHVsYWNhb18xOF9hbm9zX291X21haXNfNSwgYnkgPSBqb2luX2J5KGFubywgcmVnaWFvLCBVRikgKSAlPiUgCiAgcmVuYW1lKHByZXNvcyA9IHRvdGFsX3ByZXNvcykKCmBgYAoKCmBgYHtyIHZpc3VhbGl6YcOnw6NvIHBvcHVsYWNhb19pbmZvcGVuX3RvdGFsICwgZWNobz1GQUxTRX0Ka2FibGUoaGVhZChwb3B1bGFjYW9faW5mb3Blbl90b3RhbCwxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKCiMjIFRhYmVsYSBQTkFEIERhZG9zIFNvYnJlIGEgRWR1Y2HDp8OjbwogIApWb3UgcmVwZXRpciBiYXNpY2FtZW50ZSBvIG1lc21vIHByb2Nlc3NvIG5hIHRhYmVsYSBjb20gZGFkb3Mgc29icmUgYSBwb3B1bGHDp8Ojby4gRXNzYSB0YWJlbGEgcG9yw6ltLCBjb25zaWRlZGEgcGVzc29hcyBkZSAxNCBhbm9zIG91IG1haXMgZGUgaWRhZGUsIGNvbW8gcG9kZSBzZSBub3RhciBwZWxvIGluZGljYWRvci4gCmBgYHtyIGFsZmFiZXRpemFjYW9fcG9wdWxhY2FvIH0KYWxmYWJldGl6YWNhb19wb3B1bGFjYW8gPC0gcG5hZF8zX2NvbV9yZWdpb2VzICU+JQogIGZpbHRlcihpbmRpY2Fkb3IgPT0gIlBlc3NvYXMgZGUgMTQgYW5vcyBvdSBtYWlzIGRlIGlkYWRlIiwKICAgICAgICAgbml2ZWxfdGVycml0b3JpYWwgPT0gIlVuaWRhZGUgZGEgRmVkZXJhw6fDo28iLAogICAgICAgICBjYXRlZ29yaWFfMSAlaW4lIGMoIkhvbWVtIiwgIk11bGhlciIsIkJyYW5jYSIsIlByZXRhIG91IHBhcmRhIiwiVG90YWzCuSIpLAogICAgICAgICB2YXJpYXZlbF8yID09ICJOw612ZWwgZGUgaW5zdHJ1w6fDo28iLAogICAgICAgICAhKGNhdGVnb3JpYV8yICVpbiUgYygiVG90YWwiKSkpICU+JQogIG11dGF0ZSggYW5vID0gYXMubnVtZXJpYyhhbm8pLAogICAgZ2VuZXJvID0gaWZlbHNlKGNhdGVnb3JpYV8xID09ICJIb21lbSIsICJNYXNjdWxpbm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGNhdGVnb3JpYV8xID09ICJNdWxoZXIiLCAiRmVtaW5pbm8iLCBOQSkpLAogICAgICAgICBVRiA9IHVmX2RpY3RbYXMuY2hhcmFjdGVyKGFiZXJ0dXJhX3RlcnJpdG9yaWFsKV0pICU+JQogIHNlbGVjdChyZWdpYW8sIFVGLCBnZW5lcm8sIGdyYXVfZGVfaW5zdHJ1Y2FvID0gY2F0ZWdvcmlhXzIsIGFubywgdG90YWwgPSB2YWxvcikgJT4lIAogIGRyb3BfbmEoKQpgYGAKICAKTWVzbW8gUHJvY2Vzc28gcGFyYSBjYWxjdWxhciBhIHBvcHVsYcOnw6NvIG5vIGFubyBkZSAyMDE5LiAKYGBge3IgYWxmYWJldGl6YWNhb19wb3B1bGFjYW8gZXN0YXTDrXN0aWNhIGRlIHBvcHVsYcOnw6NvfQphbGZhYmV0aXphY2FvX3BvcHVsYWNhb18yIDwtIHBpdm90X3dpZGVyKGFsZmFiZXRpemFjYW9fcG9wdWxhY2FvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX2Zyb20gPSBhbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX2Zyb20gPSB0b3RhbCkKCmFsZmFiZXRpemFjYW9fcG9wdWxhY2FvXzMgPC0gYWxmYWJldGl6YWNhb19wb3B1bGFjYW9fMiAlPiUgCiBtdXRhdGUoCiAgICBgMjAxOWAgPSByb3VuZChmb3JtdWxhKGAyMDE4YCwyMDE4LGAyMDE2YCwyMDE2LDIwMTkpKQogICkKYWxmYWJldGl6YWNhb19wb3B1bGFjYW9fNCA8LSBwaXZvdF9sb25nZXIoYWxmYWJldGl6YWNhb19wb3B1bGFjYW9fMywgY29scyA9IC1jKHJlZ2lhbzpncmF1X2RlX2luc3RydWNhbyksbmFtZXNfdG8gPSAiYW5vIix2YWx1ZXNfdG8gPSAicG9wdWxhY2FvIikgJT4lIAogIG11dGF0ZShhY3Jvc3MoLXBvcHVsYWNhbywgYXMuZmFjdG9yKSkKYGBgCgpgYGB7ciB2aXN1YWxpemFjYW8gZGEgdGFiZWxhIGFsZmFiZXRpemFjYW9fcG9wdWxhY2FvXzQsIGVjaG89RkFMU0V9CmhlYWQoYWxmYWJldGl6YWNhb19wb3B1bGFjYW9fNCkKYGBgCgpDb21vIHBvZGUgc2UgaW1hZ2luYXIsIGFzIGRpc3RyaWJ1acOnw7VlcyBkZSBncmF1IGRlIGluc3RydcOnw6NvIG7Do28gZXN0w6NvIHBhZHJvbml6YWRhcywgdm91IHVzYXIgdW1hIGZ1bsOnw6NvIHBhcmEgY3JpYXIgZXNzZSBwYWRyw6NvIGVudHJlIGEgdGFiZWxhIGRvIFBOQUQgZSBhIGRvIElORk9QRU4uCgpgYGB7ciBGdW7Dp8OjbyBwYXJhIHBhZHJvbml6YXIgZ3JhdSBkZSBpbnN0cnXDp8Ojb30KcGFkcm9uaXphcl9ncmF1X2RlX2luc3RydWNhbyA8LSBmdW5jdGlvbihncmF1KSB7CiAgZ3JhdV9zaW1wbGlmaWNhZG8gPC0gZ3N1YigiIFxcKG91IGN1cnNvIGVxdWl2YWxlbnRlXFwpIiwgIiIsIGdyYXUpCiAgcmVjb2RlKGdyYXVfc2ltcGxpZmljYWRvLAogICAgICAgICAiU2VtIGluc3RydcOnw6NvIiA9ICJBbmFsZmFiZXRvIiwKICAgICAgICAgIkZ1bmRhbWVudGFsIGluY29tcGxldG8iID0gIkVuc2lubyBGdW5kYW1lbnRhbCBJbmNvbXBsZXRvIiwKICAgICAgICAgIkZ1bmRhbWVudGFsIGNvbXBsZXRvIiA9ICJFbnNpbm8gRnVuZGFtZW50YWwgQ29tcGxldG8iLAogICAgICAgICAiTcOpZGlvIGluY29tcGxldG8iID0gIkVuc2lubyBNw6lkaW8gSW5jb21wbGV0byIsCiAgICAgICAgICJNw6lkaW8gY29tcGxldG8iID0gIkVuc2lubyBNw6lkaW8gQ29tcGxldG8iLAogICAgICAgICAiU3VwZXJpb3IgaW5jb21wbGV0byIgPSAiRW5zaW5vIFN1cGVyaW9yIEluY29tcGxldG8iLAogICAgICAgICAiU3VwZXJpb3IgY29tcGxldG8iID0gIkVuc2lubyBTdXBlcmlvciBDb21wbGV0byIsCiAgICAgICAgICJBbGZhYmV0aXphZG8gc2VtIGN1cnNvcyByZWd1bGFyZXMiID0gIkVuc2lubyBGdW5kYW1lbnRhbCBJbmNvbXBsZXRvIikKfQpgYGAKCgpgYGB7ciBjb2x1bmFzIHBhZHJvbml6YWRhcywgaW5jbHVkZT1GQUxTRX0KIyBQcmltZWlybyBhIHRhYmVsYSBkbyBQTkFECmFsZmFiZXRpemFjYW9fcG9wdWxhY2FvXzUgPC0gYWxmYWJldGl6YWNhb19wb3B1bGFjYW9fNCAlPiUKICBtdXRhdGUoZ3JhdV9kZV9pbnN0cnVjYW8gPSBtYXBfY2hyKGdyYXVfZGVfaW5zdHJ1Y2FvLCBwYWRyb25pemFyX2dyYXVfZGVfaW5zdHJ1Y2FvKSkgJT4lIAogIHNlbGVjdCAoImFubyIsICJyZWdpYW8iLCAiVUYiLCAiZ2VuZXJvIiwgImdyYXVfZGVfaW5zdHJ1Y2FvIiwgInBvcHVsYWNhbyIpCgojIEUgZW50w6NvIGEgdGFiZWxhIGRvIElORk9QRU4KaW5mb3Blbl9ncmF1X2RlX2luc3RydWNhb18zMV9wYWRyYW8gPC0gaW5mb3Blbl9ncmF1X2RlX2luc3RydWNhb18zX2ZpbmFsICU+JQogIG11dGF0ZShncmF1X2RlX2luc3RydWNhbyA9IG1hcF9jaHIoZ3JhdV9kZV9pbnN0cnVjYW8sIHBhZHJvbml6YXJfZ3JhdV9kZV9pbnN0cnVjYW8pLAogICAgICAgICBncmF1X2RlX2luc3RydWNhbyA9IGlmZWxzZShncmF1X2RlX2luc3RydWNhbyAlaW4lIGMoIkVuc2lubyBTdXBlcmlvciBDb21wbGV0byIsICJFbnNpbm8gYWNpbWEgZGUgU3VwZXJpb3IgQ29tcGxldG8iKSwiRW5zaW5vIFN1cGVyaW9yIENvbXBsZXRvIiwgZ3JhdV9kZV9pbnN0cnVjYW8pKSAlPiUgCiAgZ3JvdXBfYnkoYW5vLCByZWdpYW8sIFVGLCBnZW5lcm8sZ3JhdV9kZV9pbnN0cnVjYW8pICU+JSAKICBzdW1tYXJpc2UocHJlc29zID0gc3VtKHByZXNvcykpICU+JQogIHNlbGVjdCAoImFubyIsICJyZWdpYW8iLCAiVUYiLCAiZ2VuZXJvIiwgImdyYXVfZGVfaW5zdHJ1Y2FvIiwgInByZXNvcyIpCmBgYAoKZGVwb2lzIGRlIHJvZGFyIGEgZnVuw6fDo28gbmFzIGR1YXMgdGFiZWxhcywgZWlzIG8gcmVzdWx0YWRvOiAKCiMjIFRhYmVsYXMgUGFkcm9uaXphZGFzIFBOQURDIGUgSU5GT1BFTiB7LnRhYnNldCAudGFic2V0LWZhZGV9CgojIyMgQWxmYWJldGl6YcOnw6NvIGRhIHBvcHVsYcOnw6NvCgpgYGB7ciB2aXN1YWxpemHDp8OjbyBhbGZhYmV0aXphY2FvX3BvcHVsYWNhb181IHBhZHJvbml6YWRhLCBlY2hvPUZBTFNFfQprYWJsZShoZWFkKGFycmFuZ2UoYWxmYWJldGl6YWNhb19wb3B1bGFjYW9fNSxhbm8sIHJlZ2lhbywgVUYsIGdlbmVybyxncmF1X2RlX2luc3RydWNhbywgcG9wdWxhY2FvKSwxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKCiMjIyBBbGZhYmV0aXphw6fDo28gZG9zIHByZXNvcwpgYGB7ciB2aXN1YWxpemHDp8OjbyBpbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvXzMxX3BhZHJhbyBwYWRyb25pemFkYSwgZWNobz1GQUxTRX0Ka2FibGUoaGVhZChpbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvXzMxX3BhZHJhbywxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKCiMjIERhZG9zIEF1c2VudGVzIG5hIFRhYmVsYSBJTkZPUEVOCgpQZXJjZWJpIHF1ZSBhcMOzcyB0b2RhcyBhcyBwYWRyb25pemHDp8O1ZXMgYXMgdGFiZWxhcyB2b2x0YXJhbSBjb20gcXVhbnRpZGFkZXMgZGlmZXJlbnRlcyBkZSBvYnNlcnZhw6fDtWVzLiBBIHRhYmVsYSBpbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvXzMxX3BhZHJhbyBwb3NzdWkgYHIgbnJvdyhpbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvXzMxX3BhZHJhbylgIG9ic2VydmHDp8O1ZXMsIGVucXVhbnRvIGFsZmFiZXRpemFjYW9fcG9wdWxhY2FvXzUgcG9zc3VpIGByIG5yb3coYWxmYWJldGl6YWNhb19wb3B1bGFjYW9fNSlgIG9ic2VydmHDp8O1ZXMuIFJlc29sdmkgaW52ZXN0aWdhciB1c2FuZG8gYW50aV9qb2luIGUgZGVzY29icmkgcXVlIGEgdGFiZWxhIGRvIGluZm9wZW4gbsOjbyB0ZW0gYXMgb2JzZXJ2YcOnw7VlcyBkYSB0YWJlbGEgY3JpYWRhIGFiYWl4by4KICAKYGBge3Igb2JzZXJ2YWNvZXNfZmFsdGFudGVzLCBpbmNsdWRlPUZBTFNFfQpvYnNlcnZhY29lc19mYWx0YW50ZXMgPC0gYW50aV9qb2luKGFsZmFiZXRpemFjYW9fcG9wdWxhY2FvXzUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9wZW5fZ3JhdV9kZV9pbnN0cnVjYW9fMzFfcGFkcmFvLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9IGMoImFubyIsICJVRiIsICJnZW5lcm8iLCAicmVnaWFvIiwgImdyYXVfZGVfaW5zdHJ1Y2FvIikpCmBgYAogIApgYGB7ciBoZWFkKG9ic2VydmFjb2VzX2ZhbHRhbnRlcyksIGVjaG89RkFMU0V9CmhlYWQob2JzZXJ2YWNvZXNfZmFsdGFudGVzKQpgYGAKClBhcmEgbsOjbyBkZWl4YXIgZXNzZXMgdmFsb3JlcyBlbSBicmFuY28sIGRlY2lkaSB1c2FyIG1lZGlhIHNpbXBsZXMgZG8gbsO6bWVybyBkZSBwcmVzb3Mgbm9zIG91dHJvcyBhbm9zIHBhcmEgY2FkYSBvYnNlcnZhw6fDo28gYXVzZW50ZSwgdXNhciBlc3NhIG3DqWRpYSBjb21vIHZhbG9yIGUgc8OzIGVudMOjbyBjb21iaW5hciBhcyB0YWJlbGFzIGRvIFBOQURDIGNvbSBJTkZPUEVOLgoKYGBge3IgRmlsdHJhciBhZ3J1cGFyIGUgY2FsY3VsYXIgYSBtw6lkaWEgZG9zIHByZXNvcyBwb3IgZ3J1cG8sIGluY2x1ZGU9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9Cm1lZGlhc19wb3JfZ3J1cG8gPC0gaW5mb3Blbl9ncmF1X2RlX2luc3RydWNhb18zMV9wYWRyYW8gJT4lCiAgZmlsdGVyKGFubyAlaW4lIGMoIjIwMTYiLCAiMjAxOCIsICIyMDE5IikgfCBhbm8gJWluJSBjKCIyMDE3IiwgIjIwMTgiLCAiMjAxOSIpKSAlPiUKICBncm91cF9ieShVRiwgZ2VuZXJvLCByZWdpYW8sIGdyYXVfZGVfaW5zdHJ1Y2FvKSAlPiUKICBzdW1tYXJpc2UobWVkaWFfcHJlc29zID0gbWVhbihwcmVzb3MpKQoKIyBBdHVhbGl6YXIgbyBkYXRhZnJhbWUgb2JzZXJ2YWNvZXNfZmFsdGFudGVzIGNvbSBvcyB2YWxvcmVzIGVzdGltYWRvcyBkZSBwcmVzb3MKb2JzZXJ2YWNvZXNfZmFsdGFudGVzXzJfYXR1YWxpemFkYXMgPC0gbWVyZ2Uob2JzZXJ2YWNvZXNfZmFsdGFudGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYXNfcG9yX2dydXBvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9IGMoIlVGIiwgImdlbmVybyIsInJlZ2lhbyIsImdyYXVfZGVfaW5zdHJ1Y2FvIiksYWxsLnggPSBUUlVFLCBhbGwueSA9IEZBTFNFKQpgYGAKCmBgYHtyIGluZm9wZW5fZ3JhdV9kZV9pbnN0cnVjYW9fNF9maW5hbCwgaW5jbHVkZT1GQUxTRX0KaW5mb3Blbl9ncmF1X2RlX2luc3RydWNhb180X2ZpbmFsIDwtIHJiaW5kKGluZm9wZW5fZ3JhdV9kZV9pbnN0cnVjYW9fMzFfcGFkcmFvLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmFjb2VzX2ZhbHRhbnRlc18yX2F0dWFsaXphZGFzKSAlPiUgCiAgbXV0YXRlKHByZXNvcyA9IGlmZWxzZShpcy5uYShwcmVzb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFfcHJlc29zLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJlc29zKSwKICAgICAgICAgcHJlc29zID0gcm91bmQocHJlc29zLCAwKSkgJT4lIAogIHNlbGVjdCgtYyhtZWRpYV9wcmVzb3MsIHBvcHVsYWNhbykpCmBgYAoKQWdvcmEgYSB0YWJlbGEgZG8gSU5GT1BFTiBjb250w6ltIGByIG5yb3coaW5mb3Blbl9ncmF1X2RlX2luc3RydWNhb180X2ZpbmFsKWAgY29sdW5hcywgdGFsIGNvbW8gYSB0YWJlbGEgZG8gUE5BRCwgbG9nbyBwb3NzbyBjb21iaW7DoS1sYXMuCgpgYGB7ciBEZWZpbmlyIGEgb3JkZW0gY29ycmV0YSBkZSBncmF1cyBkZSBpbnN0cnVjYW8sIGluY2x1ZGU9RkFMU0V9Cm9yZGVtX2NvcnJldGFfZ3JhdXNfZGVfaW5zdHJ1Y2FvIDwtIGMoIkFuYWxmYWJldG8iLCAiRW5zaW5vIEZ1bmRhbWVudGFsIEluY29tcGxldG8iLCAiRW5zaW5vIEZ1bmRhbWVudGFsIENvbXBsZXRvIiwgIkVuc2lubyBNw6lkaW8gSW5jb21wbGV0byIsICJFbnNpbm8gTcOpZGlvIENvbXBsZXRvIiwgIkVuc2lubyBTdXBlcmlvciBJbmNvbXBsZXRvIiwiRW5zaW5vIFN1cGVyaW9yIENvbXBsZXRvIikKCgpwb3B1bGFjYW9faW5mb3Blbl9ncmF1X2RlX2luc3RydWNhbyA8LSBhcy5kYXRhLmZyYW1lKGxlZnRfam9pbihpbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvXzRfZmluYWwsCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZmFiZXRpemFjYW9fcG9wdWxhY2FvXzUsCiAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gam9pbl9ieShhbm8sIHJlZ2lhbywgVUYsIGdlbmVybywgZ3JhdV9kZV9pbnN0cnVjYW8pKSkgJT4lCiAgbXV0YXRlKGFubyA9IGFzLm51bWVyaWMoYW5vKSkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1jKHByZXNvcywgcG9wdWxhY2FvLCBhbm8pKSwgYXMuZmFjdG9yKSAlPiUKICBtdXRhdGUoZ3JhdV9kZV9pbnN0cnVjYW8gPSBmYWN0b3IoZ3JhdV9kZV9pbnN0cnVjYW8sIGxldmVscyA9IG9yZGVtX2NvcnJldGFfZ3JhdXNfZGVfaW5zdHJ1Y2FvKSkKYGBgCgojIyBUYWJlbGEgUE5BREMgLSBJTkZPUEVOIEdyYXUgZGUgSW5zdHJ1w6fDo28KCmBgYHtyIHZpc3VhbGl6YcOnw6NvIHBvcHVsYWNhb19pbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvICwgZWNobz1GQUxTRX0Ka2FibGUoaGVhZChwb3B1bGFjYW9faW5mb3Blbl9ncmF1X2RlX2luc3RydWNhbywxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKCgojIFRhYmVsYSBJQkdFIEV0bmlhCgpFc3NhIFRhYmVsYSBwb3NzdWkgYSBkaXN0cmlidWnDp8OjbyBwZXJjZW50dWFsIGV0bmljYSBkYSBwb3B1bGHDp8OjbyBicmFzaWxlaXJhIHBvciBlc3RhZG8uIE8gYXJxdWl2byBhIHNlciB0cmFiYWxoYWRvIGFxdWkgY2hhbWEtc2UgIlRhYmVsYSAxLjEgRElTVCBQRVJDRVQgUkFDQS54bHMiLCBlIHBvZGUgc2VyIGVuY29udHJhZG8gbm8gc2l0ZSBkbyBbSUJHRV0oaHR0cHM6Ly93d3cuaWJnZS5nb3YuYnIvZXN0YXRpc3RpY2FzL2Rvd25sb2Fkcy1lc3RhdGlzdGljYXMuaHRtbCkKIApWb3UgcHVsYXIgYSBwYXJ0ZSBkZSBsZWl0dXJhIGRvcyBkYWRvcyBwb2lzIG7Do28gZGlmZXJlIGVtIG5hZGEgZGFzIHRhYmVsYXMgYW50ZXJpb3Jlcy4KYGBge3IgVGFiZWxhIDEuMSBESVNUIFBFUkNFVCBSQUNBLCBpbmNsdWRlPUZBTFNFfQojIE9idGVyIG8gbm9tZSBkZSB0b2RhcyBhcyBmb2xoYXMgZG8gYXJxdWl2bwpub21lc19mb2xoYXNfZXRuaWFfcmVnaWFvX3RhYmVsYV8xLjEgPC0gZXhjZWxfc2hlZXRzKCJQTkFEYy9UYWJlbGEgMS4xIERJU1QgUEVSQ0VUIFJBQ0EueGxzIikKCiMgSW5pY2lhbGl6YXIgdW0gZGF0YWZyYW1lIHZhemlvCmRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2V0bmlhX2VfcmVnaWFvIDwtIGRhdGEuZnJhbWUoKQoKIyBMb29wIHBhcmEgbGVyIGNhZGEgZm9saGEgZSBhZGljaW9uYXIgYW8gZGF0YWZyYW1lIGRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2V0bmlhX2VfcmVnaWFvCmZvciAobm9tZV9mb2xoYV90YWJlbGFfMS4xIGluIG5vbWVzX2ZvbGhhc19ldG5pYV9yZWdpYW9fdGFiZWxhXzEuMSkgewogICMgTGVyIGEgZm9saGEgYXR1YWwKICBmb2xoYV9hdHVhbF90YWJlbGFfMS4xIDwtIHJlYWRfeGxzKCJQTkFEYy9UYWJlbGEgMS4xIERJU1QgUEVSQ0VUIFJBQ0EueGxzIiwgc2hlZXQgPSBub21lX2ZvbGhhX3RhYmVsYV8xLjEsIHJhbmdlID0gIkE1OkszNyIpCiAgCiAgIyBBZGljaW9uYXIgdW1hIGNvbHVuYSAnYW5vJyBjb20gbyBub21lIGRhIGZvbGhhCiAgZm9saGFfYXR1YWxfdGFiZWxhXzEuMSRhbm8gPC0gbm9tZV9mb2xoYV90YWJlbGFfMS4xCiAgCiAgIyBSZW5vbWVhciBjb2x1bmFzCiAgY29sbmFtZXMoZm9saGFfYXR1YWxfdGFiZWxhXzEuMSkgPC0gYygiVUYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCIsICJjdl90b3RhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJyYW5jYSIsICJjdl9icmFuY2EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmV0YSIsICJjdl9wcmV0YSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmRhIiwgImN2X1BhcmRhIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQW1hcmVsb19pbmRpZ2VuYSIsICJjdl9BbWFyZWxvX2luZGlnZW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbm8iKQogIAogICMgUmVtb3ZlciBhIHByaW1laXJhIGxpbmhhCiAgZm9saGFfYXR1YWxfdGFiZWxhXzEuMSA8LSBmb2xoYV9hdHVhbF90YWJlbGFfMS4xWy0xLF0KICAKICAjIEFkaWNpb25hciBhIGZvbGhhIGF0dWFsIGFvIGRhdGFmcmFtZSBkaXN0cmlidWljYW9fcG9wdWxhY2FvX3Bvcl9ldG5pYV9lX3JlZ2lhbwogIGRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2V0bmlhX2VfcmVnaWFvIDwtIGJpbmRfcm93cyhkaXN0cmlidWljYW9fcG9wdWxhY2FvX3Bvcl9ldG5pYV9lX3JlZ2lhbywgZm9saGFfYXR1YWxfdGFiZWxhXzEuMSkgCn0KCiMjIHJlbW92ZW5kbyBhcyBjb2x1bmFzIGRlIGNvZWZpY2llbnRlIGRlIHZhcmlhY2FvCmRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2V0bmlhX2VfcmVnaWFvXzIgPC0gZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfZXRuaWFfZV9yZWdpYW8gJT4lIAogIHNlbGVjdChhbm8sIFVGLCBUb3RhbCwgQnJhbmNhLCAKICAgICAgICAgUHJldGEsIFBhcmRhKSAlPiUgCiAgbXV0YXRlKGFubyA9IGFzLm51bWVyaWMoYW5vKSwKICAgICAgICAgVUYgPSB1Zl9kaWN0W2FzLmNoYXJhY3RlcihVRildLCAjIyB1c2FuZG8gbyBkaWNpb25hcmlvIGRlIGVzdGFkb3MgcGFyYSBwb2RlciBmaWx0cmFyIGFzIHJlZ2lvZXMKICAgICAgICAgVUYgPSBhcy5mYWN0b3IoVUYpKSAlPiUgCiAgbmEub21pdCgpCgpkaXN0cmlidWljYW9fcG9wdWxhY2FvX3Bvcl9ldG5pYV9lX3JlZ2lhb18yIDwtIGFzLmRhdGEuZnJhbWUoZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfZXRuaWFfZV9yZWdpYW9fMikKCmBgYAoKYGBge3IgdmlzdWFsaXphY2FvIGRpc3QgZXRuaWEgZSByZWdpYW8sIGVjaG89RkFMU0V9CmthYmxlKGhlYWQoZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfZXRuaWFfZV9yZWdpYW9fMiwxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKCkVzc2EgdGFiZWxhIHBvc3N1aSBkYWRvcyBkZSAyMDEyIGEgMjAxOC4gVm91IHV0aWxpemFyIGEgZsOzcm11bGEgcXVlIGRpc2N1dGltb3Mgbm8gY29tZcOnbyBwYXJhIGVzdGltYXIgYSBwb3B1bGHDp8OjbyBlbSAyMDE5LiAgClZvdSBjb21lw6dhciB0cmFuc2Zvcm1hbmRvIG9zIGRhZG9zIGRhIHRhYmVsYSwgcG9pcyBvIG51bWVybyBwcmVzZW50ZSBuYSBjb2x1bmEgdG90YWwgYWluZGEgZGV2ZSBzZXIgbXVsdGlwbGljYWRvIHBvciAxMDAwLCBlIG9zIHZhbG9yZXMgZGFzIGV0bmlhcyBlc3TDo28gZW0gcG9yY2VudGFnZW0gZW0gcmVsYcOnw6NvIGFvIHRvdGFsLgoKYGBge3IgdHJhbnNmb3JtYXIgcG9yY2VudGFnZW5zIGVtIHZhbG9yZXN9CmRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2V0bmlhX2VfcmVnaWFvXzMgPC0gZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfZXRuaWFfZV9yZWdpYW9fMiAlPiUgCiAgbXV0YXRlKAogICAgVG90YWwgPSByb3VuZChUb3RhbCoxMDAwKSwKICAgIEJyYW5jYSA9IHJvdW5kKEJyYW5jYSpUb3RhbC8xMDApLAogICAgUHJldGEgPSByb3VuZChQcmV0YSpUb3RhbC8xMDApLAogICAgUGFyZGEgPSByb3VuZChQYXJkYSpUb3RhbC8xMDApKQoKYGBgCgoKYGBge3IgZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfZXRuaWFfZV9yZWdpYW9fMyBjYWxjdWxhciB2YWxvcmVzIHBhcmEgMjAxOSwgaW5jbHVkZT1GQUxTRX0KZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfZXRuaWFfZV9yZWdpYW9fNCA8LSBkaXN0cmlidWljYW9fcG9wdWxhY2FvX3Bvcl9ldG5pYV9lX3JlZ2lhb18zICU+JQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBhbm8sIHZhbHVlc19mcm9tID0gVG90YWw6UGFyZGEpCgpkaXN0cmlidWljYW9fcG9wdWxhY2FvX3Bvcl9ldG5pYV9lX3JlZ2lhb181IDwtIGRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2V0bmlhX2VfcmVnaWFvXzQgJT4lIAogIG11dGF0ZSgKICAgIFRvdGFsXzIwMTkgPSByb3VuZChmb3JtdWxhKFRvdGFsXzIwMTgsMjAxOCxUb3RhbF8yMDEyLDIwMTIsMjAxOSkpLAogICAgQnJhbmNhXzIwMTkgPSByb3VuZChmb3JtdWxhKEJyYW5jYV8yMDE4LDIwMTgsQnJhbmNhXzIwMTIsMjAxMiwyMDE5KSksCiAgICBQYXJkYV8yMDE5ID0gIHJvdW5kKGZvcm11bGEoUGFyZGFfMjAxOCwyMDE4LFBhcmRhXzIwMTIsMjAxMiwyMDE5KSksCiAgICBQcmV0YV8yMDE5ID0gcm91bmQoZm9ybXVsYShQcmV0YV8yMDE4LDIwMTgsUHJldGFfMjAxMiwyMDEyLDIwMTkpKSkKCmRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2V0bmlhX2VfcmVnaWFvXzYgPC0gZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfZXRuaWFfZV9yZWdpYW9fNSAlPiUKICBwaXZvdF9sb25nZXIoY29scyA9IC1VRiwgbmFtZXNfdG8gPSBjKCIudmFsdWUiLCAiYW5vIiksIG5hbWVzX3NlcCA9ICJfIikgJT4lIAogIGZpbHRlcihhbm8gJWluJSBjKCIyMDE2IiwiMjAxNyIsIjIwMTgiLCIyMDE5IikpICU+JSAKICBzZWxlY3QoLVRvdGFsKQoKZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfZXRuaWFfZV9yZWdpYW9fNyA8LSBkaXN0cmlidWljYW9fcG9wdWxhY2FvX3Bvcl9ldG5pYV9lX3JlZ2lhb182ICU+JSAKICAgIHBpdm90X2xvbmdlcihjb2xzID0gYygiUHJldGEiLCAiQnJhbmNhIiwgIlBhcmRhIiksCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gImV0bmlhIiwKICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gInBvcHVsYWNhbyIpCgpgYGAKClBvciBmaW0gYSB0YWJlbGEgcXVlIGlyZW1vcyB1dGlsaXphciBwYXJhIGNvbWJpbmFyIGNvbSBhIGRvIElORk9QRU4KYGBge3IgdGFiZWxhIHBvcHVsYWNhb19ldG5pYSxpbmNsdWRlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQpwb3B1bGFjYW9fZXRuaWEgPC0gZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfZXRuaWFfZV9yZWdpYW9fNyAlPiUKICBtZXJnZSh1Zl9yZWdpYW8sIGJ5ID0gIlVGIiwgYWxsLnggPSBUUlVFKSAlPiUgCiAgbXV0YXRlKGFubyA9IGFzLm51bWVyaWMoYW5vKSwKICAgIGV0bmlhID0gaWZfZWxzZShldG5pYSA9PSAiQnJhbmNhIiwgImJyYW5jYSIsIAogICAgICAgICAgICAgICAgICAgIGlmX2Vsc2UoZXRuaWEgJWluJSBjKCJQcmV0YSIsICJQYXJkYSIpLCAicHJldGEgb3UgcGFyZGEiLE5BKSkpICU+JSAKICBncm91cF9ieShhbm8sIFVGLCByZWdpYW8sIGV0bmlhKSAlPiUgCiAgc3VtbWFyaXNlKHBvcHVsYWNhbyA9IHN1bShwb3B1bGFjYW8pKSAlPiUgCiAgc2VsZWN0KGFubywgcmVnaWFvLCBVRiwgZXRuaWEsIHBvcHVsYWNhbykKCmBgYAoKIyMgRGlzdHJpYnVpw6fDo28gw4l0bmljYSBkYSBQb3B1bGHDp8OjbyBCcmFzaWxlaXJhCgpgYGB7ciB2aXN1YWxpemHDp8OjbyBkYSB0YWJlbGEgcG9wdWxhY2FvX2V0bmlhLCBlY2hvPUZBTFNFfQprYWJsZShoZWFkKHBvcHVsYWNhb19ldG5pYSwxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKCiMjIE9ic2VydmHDp8O1ZXMgQXVzZW50ZXMgbmEgVGFiZWxhIGRvIElORk9QRU4KQXDDs3MgbWFuaXB1bGHDp8OjbyBkb3MgZGFkb3MgZGVzc2EgdGFiZWxhIGRvIElCR0UsIHZvdSBjb21iaW7DoS1sYSBjb20gYSB0YWJlbGEgZG8gSU5GT1BFTiwgcGFyYSB0ZXIgY29tbyBjb3JyZWxhY2lvbmFyIG8gdG90YWwgZGUgcHJlc29zIGUgYSBwb3B1bGHDp8OjbyBwYXJhIGNhZGEgdmFyacOhdmVsLiBQb3LDqW0sIG5hIGhvcmEgZGUgY29tYmluYXIgb3MgZGF0YWZyYW1lcywgZGVzY29icmkgcXVlIHF1ZSBow6Egb2JzZXJ2YcOnw7VlcyBmYWx0YW50ZXMgbmEgdGFiZWxhIGluZm9wZW5fZXRuaWFfM19maW5hbCBwb2lzIGVsYSBwb3NzdWkgbWVub3MgbGluaGFzIHF1ZSBhIHRhYmVsYSBkbyBQTkFELiBWb3UgdXNhciBhbnRpLWpvaW4gcGFyYSBkZXNjb2Jyw60tbG9zIGUgcmVncmVzc2FvIGxpbmVhciBwYXJhIGNhbGN1bGFyLWxvcyAKCmBgYHtyIGRpZmVyZW5jYV9pbmZvcGVuX3BvcHVsYWNhb19ldG5pYSwgaW5jbHVkZT1GQUxTRX0KZGlmZXJlbmNhX2luZm9wZW5fcG9wdWxhY2FvX2V0bmlhIDwtIGFudGlfam9pbihwb3B1bGFjYW9fZXRuaWEsIGluZm9wZW5fZXRuaWFfM19maW5hbCwgYnkgPSBqb2luX2J5KGFubywgcmVnaWFvLCBVRiwgZXRuaWEpKSAlPiUgCiAgbXV0YXRlKFVGID0gYXMuY2hhcmFjdGVyKFVGKSkgJT4lIAogIHNlbGVjdCgtcG9wdWxhY2FvKQpgYGAKClPDo28gZXNzYXMgYXMgb2JzZXJ2YcOnw7VlcyBhdXNlbnRlcyBuYSB0YWJlbGEgZG8gSU5GT1BFTgpgYGB7ciBoZWFkKGRpZmVyZW5jYV9pbmZvcGVuX3BvcHVsYWNhb19ldG5pYSl9CmhlYWQoZGlmZXJlbmNhX2luZm9wZW5fcG9wdWxhY2FvX2V0bmlhKQpgYGAKCmBgYHtyIHNlcmdpcGVfZXRuaWEsIGluY2x1ZGU9RkFMU0V9CnNlcmdpcGVfZXRuaWEgPC0gaW5mb3Blbl9ldG5pYV8zX2ZpbmFsICU+JSAKICBmaWx0ZXIoVUYgPT0gIlNFIiwgYW5vIDwgMjAxOSkKCgojIGZ1bmNhbyBwYXJhIHByZXZlciBvIGFubyAyMDE5CnByZXZlcl9pbmZvcGVuX2V0bmlhIDwtIGZ1bmN0aW9uKGRhdGEpIHsKICBtb2RlbCA8LSBsbShwcmVzb3MgfiBhbm8sIGRhdGEgPSBkYXRhKQogIHByZWRpY3QobW9kZWwsIG5ld2RhdGEgPSBkYXRhLmZyYW1lKGFubyA9IDIwMTkpKQp9CgojIyBwcmV2aXNhbyBwYXJhIDIwMTkKcHJldmlzb2VzXzIwMTlfaW5mb3Blbl9ldG5pYSA8LSBzZXJnaXBlX2V0bmlhICU+JQogIGdyb3VwX2J5KHJlZ2lhbywgVUYsIGV0bmlhKSAlPiUKICBuZXN0KCkgJT4lCiAgbXV0YXRlKHByZXNvcyA9IHJvdW5kKG1hcF9kYmwoZGF0YSwgcHJldmVyX2luZm9wZW5fZXRuaWEpKSwKICAgICAgICAgYW5vID0gMjAxOSkgJT4lICNhY3Jlc2NlbnRhciBhIGNvbHVuYSBhbm8gY29tIG8gdmFsb3IgMjAxOQogIHNlbGVjdCgtZGF0YSkKYGBgCgpBcMOzcyBhbGd1bnMgY8OhbGN1bG9zLCBjaGVndWVpIG5lc3NlIHJlc3VsdGFkbyBkZSBwcmV2acOjbyBkZSBwcmVzb3MgZSBjYWRhIG9ic2VydmHDp8OjbzoKYGBge3IgaGVhZChwcmV2aXNvZXNfMjAxOV9pbmZvcGVuX2V0bmlhKX0KaGVhZChwcmV2aXNvZXNfMjAxOV9pbmZvcGVuX2V0bmlhKQpgYGAKICAKQWdvcmEgYmFzdGEgY29tYmluYXIgYXMgdGFiZWxhcyBjb20gZGFkb3Mgc29icmUgYSBldG5pYSBkYSBwb3B1bGHDp8OjbyBicmFzaWxlaXJhIHRvdGFsIGNvbSBhIHBvcHVsYcOnw6NvIGNhcmNlcsOhcmlhIGUgZW50w6NvIGNoZWdhcmVtb3MgbmVzc2EgdGFiZWxhOiAKYGBge3IgY29tYmluYXIgdGFiZWxhcyBpbmZvcGVuIGV0bmlhIGNvbSBkYWRvcyBmYWx0YW50ZXMsIGluY2x1ZGU9RkFMU0V9CnNlcmdpcGVfZXRuaWEgPC1yYmluZChzZXJnaXBlX2V0bmlhLCBwcmV2aXNvZXNfMjAxOV9pbmZvcGVuX2V0bmlhKQoKIyMgZmluYWxtZW50ZSBhIHRhYmVsYSBjb21wbGV0YSBkbyBpbmZvcGVuCmluZm9wZW5fZXRuaWFfNCA8LSByYmluZChpbmZvcGVuX2V0bmlhXzNfZmluYWwsIHNlcmdpcGVfZXRuaWEpICU+JSAKICBkaXN0aW5jdCgpCgojIyB0YWJlbGEgY29tIGNvbWJpbmFjYW8gZG9zIGRhZG9zCnBvcHVsYWNhb19pbmZvcGVuX2V0bmlhIDwtIGFzLmRhdGEuZnJhbWUobGVmdF9qb2luKGluZm9wZW5fZXRuaWFfNCwgcG9wdWxhY2FvX2V0bmlhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9IGpvaW5fYnkoYW5vLCByZWdpYW8sIFVGLCBldG5pYSkpKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoLWMocHJlc29zLCBwb3B1bGFjYW8sIGFubykpLCBhcy5mYWN0b3IpICU+JSAKICBtdXRhdGUocHJlc29zID0gYXMubnVtZXJpYyhwcmVzb3MpKQoKYGBgCiAgCiMjIFRhYmVsYSBQTkFEQyAtIElORk9QRU4gRXRuaWEKICAKYGBge3IgdmlzdWFsaXphw6fDo28gZGEgdGFiZWxhIHBvcHVsYWNhb19pbmZvcGVuX2V0bmlhLCBlY2hvPUZBTFNFfQprYWJsZShoZWFkKHBvcHVsYWNhb19pbmZvcGVuX2V0bmlhLDEwKSkgJT4lCiAgICBrYWJsZV9zdHlsaW5nKGZvbnRfc2l6ZSA9IDEyLCBmdWxsX3dpZHRoID0gVCwgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiwgImJvcmRlcmVkIikpCmBgYAoKCiMgVGFiZWxhIElCR0UgRmFpeGEgRXTDoXJpYQoKTyBhcnF1aXZvIGEgc2VyIHRyYWJhbGhhZG8gYXF1aSBjaGFtYS1zZSAiVGFiZWxhIDEuMiBESVNUIFBPUCBFVEFSSUEueGxzIiwgZSBwb2RlIHNlciBlbmNvbnRyYWRvIG5vIHNpdGUgZG8gW0lCR0VdKGh0dHBzOi8vd3d3LmliZ2UuZ292LmJyL2VzdGF0aXN0aWNhcy9kb3dubG9hZHMtZXN0YXRpc3RpY2FzLmh0bWwpCiAgCkVzc2EgdGFiZWxhIHBvc3N1aSBkYWRvcyBzb2JyZSBhIGRpc3RyaWJ1acOnw6NvIGRhIGZhaXhhIGV0w6FyaWEgZGEgcG9wdWxhw6fDo28gcG9yIGV0bmlhLgoqSW5kw61nZW5hcywgYW1hcmVsb3MgZSBwZXNzb2FzIHNlbSBkZWNsYXJhw6fDo28gZGUgY29yIG91IHJhw6dhIGNvbnN0YW0gbm8gdG90YWwuKgoKYGBge3IgVGFiZWxhIDEuMiBESVNUIFBPUCBFVEFSSUEsIGluY2x1ZGU9RkFMU0V9CgojIE9idGVyIG8gbm9tZSBkZSB0b2RhcyBhcyBmb2xoYXMgZG8gYXJxdWl2bwpub21lc19mb2xoYXNfcG9wdWxhY2FvX3Bvcl9pZGFkZV90YWJlbGFfMS4yIDwtIGV4Y2VsX3NoZWV0cygiUE5BRGMvVGFiZWxhIDEuMiBESVNUIFBPUCBFVEFSSUEueGxzIikKCiMgSW5pY2lhbGl6YXIgdW0gZGF0YWZyYW1lIHZhemlvCmRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2lkYWRlIDwtIGRhdGEuZnJhbWUoKQoKIyBMb29wIHBhcmEgbGVyIGNhZGEgZm9saGEgZSBhZGljaW9uYXIgYW8gZGF0YWZyYW1lIGRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2lkYWRlCmZvciAobm9tZV9kYV9mb2xoYV90YWJlbGFfMS4yIGluIG5vbWVzX2ZvbGhhc19wb3B1bGFjYW9fcG9yX2lkYWRlX3RhYmVsYV8xLjIpIHsKICAjIExlciBhIGZvbGhhIGF0dWFsCiAgZm9saGFfYXR1YWxfdGFiZWxhXzEuMiA8LSByZWFkX3hscygiUE5BRGMvVGFiZWxhIDEuMiBESVNUIFBPUCBFVEFSSUEueGxzIiwgc2hlZXQgPSBub21lX2RhX2ZvbGhhX3RhYmVsYV8xLjIsIHJhbmdlID0gIkE1OksyMyIpCiAgCiAgIyBBZGljaW9uYXIgdW1hIGNvbHVuYSAnYW5vJyBjb20gbyBub21lIGRhIGZvbGhhCiAgZm9saGFfYXR1YWxfdGFiZWxhXzEuMiRhbm8gPC0gbm9tZV9kYV9mb2xoYV90YWJlbGFfMS4yCiAgCiAgIyBSZW5vbWVhciBjb2x1bmFzCiAgY29sbmFtZXMoZm9saGFfYXR1YWxfdGFiZWxhXzEuMikgPC0gYygiZmFpeGFfZXRhcmlhIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwiLCAiY3ZfdG90YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJicmFuY2EiLCAiY3ZfYnJhbmNhIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJldGFfb3VfUGFyZGEiLCAiY3ZfcHJldGFfcGFyZGEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9wb3JjYW9fYnJhbmNhIiwgImN2X3Byb3BvcmNhb19icmFuY2EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9wb3JjYW9fcHJldGFfcGFyZGEiLCAiY3ZfcHJvcG9yY2FvX3ByZXRhX3BhcmRhIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5vIikKICAKICAjIFJlbW92ZXIgYSBwcmltZWlyYSBsaW5oYQogIGZvbGhhX2F0dWFsX3RhYmVsYV8xLjIgPC0gZm9saGFfYXR1YWxfdGFiZWxhXzEuMlstMSxdCiAgCiAgIyBBZGljaW9uYXIgYSBmb2xoYSBhdHVhbCBhbyBkYXRhZnJhbWUgZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfaWRhZGUKICBkaXN0cmlidWljYW9fcG9wdWxhY2FvX3Bvcl9pZGFkZSA8LSBiaW5kX3Jvd3MoZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfaWRhZGUsIGZvbGhhX2F0dWFsX3RhYmVsYV8xLjIpCn0KYGBgCgpgYGB7ciB2aXN1YWxpemHDp8OjbyBkYSB0YWJlbGEgVGFiZWxhIDEuMiBESVNUIFBPUCBFVEFSSUEsIGVjaG89RkFMU0V9CmthYmxlKGhlYWQoZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfaWRhZGUsMTApKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoZm9udF9zaXplID0gMTIsIGZ1bGxfd2lkdGggPSBULCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiLCAiYm9yZGVyZWQiKSkKYGBgCgpgYGB7ciBmaWx0cmFuZG8gZSBvcmdhbml6YW5kbyBvcyBkYWRvcyBxdWUgdm91IHByZWNpc2FyLCBpbmNsdWRlPUZBTFNFfQpkaXN0cmlidWljYW9fcG9wdWxhY2FvX3Bvcl9pZGFkZV8yIDwtIGRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2lkYWRlICU+JSAKICBzZWxlY3QoYW5vLCBmYWl4YV9ldGFyaWEsVG90YWwpICU+JSAKICBtdXRhdGUoYW5vID0gYXMubnVtZXJpYyhhbm8pLAogICAgICAgICBmYWl4YV9ldGFyaWEgPSBhcy5mYWN0b3IoZmFpeGFfZXRhcmlhKSwKICAgICAgICAgVG90YWwgPSBUb3RhbCoxMDAwKSAlPiUgCiAgICBmaWx0ZXIoIXN0cl9kZXRlY3QoZmFpeGFfZXRhcmlhLCAiMCBhIDQgYW5vc3w1IGEgOSBhbm9zfDEwIGEgMTQgYW5vc3wxNSBhIDE5IGFub3N8MjAgYSAyNCBhbm9zIikpCgpgYGAKCkFzc2ltIGNvbW8gYSB0YWJlbGEgYW50ZXJpb3IsIGVzc2EgcG9zc3VpIGRhZG9zIGFwZW5hcyBkZSAyMDEyIGEgMjAxOCwgbG9nbyB2b3UgdXRpbGl6YXIgYSBtZXNtYSBmw7NybXVsYSBwYXJhIHByZXZlciBhIHBvcHVsYcOnw6NvIGVtIDIwMTkuCgpgYGB7ciBmYWl4YV9ldGFyaWEgd2lkZSwgaW5jbHVkZT1GQUxTRX0KZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfaWRhZGVfMyA8LSBwaXZvdF93aWRlcihkaXN0cmlidWljYW9fcG9wdWxhY2FvX3Bvcl9pZGFkZV8yLCBuYW1lc19mcm9tID0gYW5vLCB2YWx1ZXNfZnJvbSA9IFRvdGFsKQoKZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfaWRhZGVfMyA8LSBkaXN0cmlidWljYW9fcG9wdWxhY2FvX3Bvcl9pZGFkZV8zICU+JSAKICBtdXRhdGUoCiAgICBgMjAxOWAgPSByb3VuZChmb3JtdWxhKGAyMDE4YCwyMDE4LGAyMDEyYCwyMDEyLDIwMTkpKQogICkKCmRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2lkYWRlXzQgPC0gcGl2b3RfbG9uZ2VyKGRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2lkYWRlXzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29scyA9IC1mYWl4YV9ldGFyaWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAiYW5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAicG9wdWxhY2FvIikgJT4lIAogIGZpbHRlcihhbm8gJWluJSBjKCIyMDE2IiwiMjAxNyIsIjIwMTgiLCIyMDE5IikpCmBgYAogIAojIyBQYWRyb25pemHDp8OjbyBkYXMgRmFpeGFzIGRlIElkYWRlCiAgCkNvbW8gw6kgcG9zc2l2ZWwgdmVyIGxvZ28gYSBiYWl4bywgZW1ib3JhIGFnb3JhIHRlbmhhbW9zIG9zIGRhZG9zIGRlIDIwMTYgYSAyMDE5LCBhcyBmYWl4YXMgZXTDoXJpYXMgbsOjbyBzw6NvIGV4YXRhbWVudGUgaWd1YWlzIMOgcyBkbyBJTkZPUEVOLCBtYXMgc8OjbyBiZW0gcHJveGltYXMuCmBgYHtyIHZpc3VhbGl6YWNhbyBkYSB0YWJlbGEgY29tIGRhZG9zIDIwMTIgYSAyMDE5LCBlY2hvPUZBTFNFfQprYWJsZShoZWFkKGRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2lkYWRlXzQsMTApKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoZm9udF9zaXplID0gMTIsIGZ1bGxfd2lkdGggPSBULCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiLCAiYm9yZGVyZWQiKSkKYGBgCk8gcXVlIHZvdSBmYXplciwgw6kgY3JpYXIgdW1hIGZ1bsOnw6NvIHF1ZSBhanVzdGEgYXMgZmFpeGFzIGV0w6FyaWFzIHBhcmEgZXN0YXJlbSBkZSBhY29yZG8gY29tIGFzIGRvIElORk9QRU4KYGBge3IgZnVuY2FvIHF1ZSBhanVzdGEgYSBmYWl4YSBldGFyaWF9CmFqdXN0YV9mYWl4YV9ldGFyaWEgPC0gZnVuY3Rpb24oZmFpeGEpIHsKICBpZiAoZmFpeGEgJWluJSBjKCIyNSBhIDI5IGFub3MiKSkgewogICAgcmV0dXJuKCIyNSBhIDI5IGFub3MiKQogIH0gZWxzZSBpZiAoZmFpeGEgJWluJSBjKCIzMCBhIDM0IGFub3MiKSkgewogICAgcmV0dXJuKCIzMCBhIDM0IGFub3MiKQogIH0gZWxzZSBpZiAoZmFpeGEgJWluJSBjKCIzNSBhIDM5IGFub3MiLCAiNDAgYSA0NCBhbm9zIikpIHsKICAgIHJldHVybigiMzUgYSA0NSBhbm9zIikKICB9IGVsc2UgaWYgKGZhaXhhICVpbiUgYygiNDUgYSA0OSBhbm9zIiwgIjUwIGEgNTQgYW5vcyIsICI1NSBhIDU5IGFub3MiKSkgewogICAgcmV0dXJuKCI0NiBhIDYwIGFub3MiKQogIH0gZWxzZSBpZiAoZmFpeGEgJWluJSBjKCI2MCBhIDY0IGFub3MiLCAiNjUgYSA2OSBhbm9zIikpIHsKICAgIHJldHVybigiNjEgYSA3MCBhbm9zIikKICB9IGVsc2UgaWYgKGZhaXhhICVpbiUgYygiNzAgYSA3NCBhbm9zIiwgIjc1IGEgNzkgYW5vcyIsICI4MCBhbm9zIGUgbWFpcyIpKSB7CiAgICByZXR1cm4oIk1haXMgZGUgNzAgYW5vcyIpCiAgfSBlbHNlIHsKICAgIHJldHVybihOQSkKICB9Cn0KYGBgCgpgYGB7ciBBanVzdGFuZG8gYXMgZmFpeGFzIGV0w6FyaWFzLCBpbmNsdWRlPUZBTFNFfQpkaXN0cmlidWljYW9fcG9wdWxhY2FvX3Bvcl9pZGFkZV80JGZhaXhhX2V0YXJpYSA8LSBzYXBwbHkoZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfaWRhZGVfNCRmYWl4YV9ldGFyaWEsIGFqdXN0YV9mYWl4YV9ldGFyaWEpCmBgYAoKCmBgYHtyIG9yZ2FuaXphw6fDo28gZGEgdGFiZWxhIGUgc3VtYXJpemHDp8OjbyBkb3MgZGFkb3MsIGluY2x1ZGU9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CmRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2lkYWRlXzUgPC0gZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfaWRhZGVfNCAlPiUKICBncm91cF9ieShhbm8sIGZhaXhhX2V0YXJpYSkgJT4lIAogIHN1bW1hcmlzZShwb3B1bGFjYW8gPSBzdW0ocG9wdWxhY2FvKSkKYGBgCgpBcXVpIGTDoSBwcmEgc2UgdGVyIHVtYSB2aXN1YWxpemHDp8OjbyBkYSB0YWJlbGEgcXVlIHRlbmhvIGF0w6kgZW50w6NvLgpgYGB7ciB2aXN1YWxpemFyIGEgdGFiZWxhIGRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2lkYWRlXzUsIGVjaG89RkFMU0V9CmthYmxlKGhlYWQoZGlzdHJpYnVpY2FvX3BvcHVsYWNhb19wb3JfaWRhZGVfNSwxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKUG9kZS1zZSBub3RhciBxdWUgbsOjbyB0ZW5obyBhIHBvcHVsYcOnw6NvIGRlIDE4IGEgMjQgYW5vcy4gVm91IGV4dHJhaXIgZXNzYSBmYWl4YSBldMOhcmlhIGRlIG91dHJhIHRhYmVsYSBkbyBQTkFELCBxdWUgasOhIHRyYWJhbGhhbW9zIGFudGVzLgoKYGBge3IgcG9wdWxhY2FvXzE4X2FfMjRfYW5vcywgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KcG9wdWxhY2FvXzE4X2FfMjRfYW5vcyA8LSBwbmFkXzRfcG9wdWxhY2FvX2lkYWRlICU+JQogIGZpbHRlcihncmVwbCgiMTggYSAyNCBhbm9zIiwgZ3J1cG9fZGVfaWRhZGUpLAogICAgICAgICBncmVwbCgiVG90YWzCuSIsIGV0bmlhKSkgJT4lIAogIHNlbGVjdCgtZ2VuZXJvKSAlPiUgIyB2b3UgcmVtb3ZlciBnZW5lcm8gcGFyYSByZW1vdmVyIGR1cGxpY2Fkb3MgKHBvaXMgdGVuaG8gZ2VuZXJvIGUgZXRuaWEpCiAgcmVuYW1lKGZhaXhhX2V0YXJpYSA9IGdydXBvX2RlX2lkYWRlLAogICAgICAgICBwb3B1bGFjYW8gPSB2YWxvciklPiUKICBncm91cF9ieShhbm8sZmFpeGFfZXRhcmlhLCBldG5pYSkgJT4lIAogIHN1bW1hcmlzZShwb3B1bGFjYW8gPSBzdW0ocG9wdWxhY2FvKSkgJT4lIAogIHNlbGVjdCgtZXRuaWEpICU+JSAjIHBvciBmaW0gcmVtb3ZvIGEgY29sdW5hIGRlIGV0bmlhIHF1ZSBjb25zdGEgYXBlbmFzICdUb3RhbCcKICBkcm9wX25hKCkKYGBgCgpDb21vIGrDoSBkZW1vbnN0cmFkbyBhbnRlcmlvcm1lbnRlLCB2b3UgdXNhciBhcml0bcOpcmljYSBwYXJhIHByZXZlciBhIHBvcHVsYcOnw6NvIGVtIDIwMTkuCmBgYHtyIHBvcHVsYWNhb18xOF9hXzI0X2Fub3MgMjAxNiBhIDIwMTksaW5jbHVkZT1GQUxTRX0KcG9wdWxhY2FvXzE4X2FfMjRfYW5vc193aWRlIDwtIHBpdm90X3dpZGVyKHBvcHVsYWNhb18xOF9hXzI0X2Fub3MsIG5hbWVzX2Zyb20gPSBhbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNfZnJvbSA9IHBvcHVsYWNhbykKCnBvcHVsYWNhb18xOF9hXzI0X2Fub3NfMiA8LSBwb3B1bGFjYW9fMThfYV8yNF9hbm9zX3dpZGUgJT4lIAogIG11dGF0ZSgKICAgIGAyMDE5YCA9IHJvdW5kKGZvcm11bGEoYDIwMThgLDIwMTgsYDIwMTZgLDIwMTYsMjAxOSkpCiAgKQoKcG9wdWxhY2FvXzE4X2FfMjRfYW5vc18zIDwtIHBpdm90X2xvbmdlcihwb3B1bGFjYW9fMThfYV8yNF9hbm9zXzIsIGNvbHMgPSAtZmFpeGFfZXRhcmlhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX3RvID0gImFubyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gInBvcHVsYWNhbyIpCmBgYAoKYGBge3IgcG9wdWxhY2FvX2ZhaXhhX2V0YXJpYSwgZWNobz1GQUxTRX0KcG9wdWxhY2FvX2ZhaXhhX2V0YXJpYSA8LSByYmluZChwb3B1bGFjYW9fMThfYV8yNF9hbm9zXzMsIGRpc3RyaWJ1aWNhb19wb3B1bGFjYW9fcG9yX2lkYWRlXzUpICU+JSBtdXRhdGUoCiAgYW5vID0gYXMubnVtZXJpYyhhbm8pLAogIGZhaXhhX2V0YXJpYSA9IGFzLmZhY3RvcihmYWl4YV9ldGFyaWEpLAopCmBgYAogIAojIyBEaXN0cmlidWnDp8OjbyBkYSBGYWl4YSBFdMOhcmlhIGRhIFBvcHVsYcOnw6NvIEJyYXNpbGVpcmEKICAKRmluYWxtZW50ZSBhIHRhYmVsYSBjb20gdG9kYXMgYXMgZmFpeGFzIGV0YXJpYXMgaWd1YWwgYSBkbyBJTkZPUEVOCmBgYHtyIHZpc3VhbGl6YXIgYSB0YWJlbGEgcG9wdWxhY2FvX2ZhaXhhX2V0YXJpYSwgZWNobz1GQUxTRX0Ka2FibGUoaGVhZChhcnJhbmdlKHBvcHVsYWNhb19mYWl4YV9ldGFyaWEsYW5vKSwxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKICAKQWdvcmEgcmVzdGEgYXBlbmFzIGNvbWJpbmFyIGFzIHRhYmVsYXMgZGUgZmFpeGEgZXTDoXJpYS4KYGBge3IgY29tYmluYXIgYXMgdGFiZWxhcyBkZSBmYWl4YSBldGFyaWEgZG8gSU5GT1BFTiBlIGRvIFBOQUQgfQpwb3B1bGFjYW9faW5mb3Blbl9mYWl4YV9ldGFyaWEgPC0gYXMuZGF0YS5mcmFtZShsZWZ0X2pvaW4oaW5mb3Blbl9mYWl4YV9kZV9pZGFkZV80LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVsYWNhb19mYWl4YV9ldGFyaWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSBqb2luX2J5KGFubywgZmFpeGFfZXRhcmlhKSkpICU+JSAKICBtdXRhdGUoZmFpeGFfZXRhcmlhID0gYXMuZmFjdG9yKGZhaXhhX2V0YXJpYSkpCgpgYGAKCgojIyBUYWJlbGEgUE5BREMgLSBJTkZPUEVOIHBvciBGYWl4YSBldMOhcmlhCgpgYGB7ciB2aXN1YWxpemFyIGEgdGFiZWxhIHBvcHVsYWNhb19pbmZvcGVuX2ZhaXhhX2V0YXJpYSwgZWNobz1GQUxTRX0Ka2FibGUoaGVhZChhcnJhbmdlKHBvcHVsYWNhb19pbmZvcGVuX2ZhaXhhX2V0YXJpYSxhbm8pLDEwKSkgJT4lCiAgICBrYWJsZV9zdHlsaW5nKGZvbnRfc2l6ZSA9IDEyLCBmdWxsX3dpZHRoID0gVCwgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiwgImJvcmRlcmVkIikpCmBgYAoKIyBUYWJlbGEgSUJHRSBSZW5kaW1lbnRvcwoKIyMgUG9wdWxhw6fDo28gVG90YWwgY29tIDE0IEFub3Mgb3UgTWFpcy4KClByZWNpc28gZGVzc2EgdGFiZWxhIGNvbSBhIHBvcHVsYWNhbyBnZXJhbCBhY2ltYSBkZSAxNCBhbm9zLCBwb2lzIGEgdGFiZWxhIGNvbSByZW5kaW1lbnRvcyBkbyBJQkdFIGNvbnNpZGVyYSBhcGVuYXMgZXNzYSBmYWl4YSBkZSBpZGFkZS4gQSB0YWJlbGEgc29icmUgZWR1Y2HDp8OjbywgcXVlIGrDoSB1c2Ftb3MgY29uc2lkZXJhIGVzc2EgZmFpeGEgZGEgcG9wdWxhw6fDo28uCgpgYGB7ciBwb3B1bGFjYW9fdG90YWxfMTRfYW5vc19vdV9tYWlzLCBpbmNsdWRlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQpwb3B1bGFjYW9fdG90YWxfMTRfYW5vc19vdV9tYWlzIDwtIGFsZmFiZXRpemFjYW9fcG9wdWxhY2FvXzUgJT4lIAogIGdyb3VwX2J5KHJlZ2lhbyxVRiwgYW5vKSAlPiUgCiAgc3VtbWFyaXplKHBvcHVsYWNhbyA9IHN1bShwb3B1bGFjYW8pKQpgYGAKCiMjIyBUYWJlbGEgQ29tIGEgUG9wdWxhw6fDo28gVG90YWwgY29tIDE0IEFub3Mgb3UgTWFpcy4KYGBge3IgdmlzdWFsaXphw6fDo28gUG9wdWxhw6fDo28gdG90YWwgY29tIDE0IGFub3Mgb3UgbWFpcywgZWNobz1GQUxTRX0Ka2FibGUoaGVhZChwb3B1bGFjYW9fdG90YWxfMTRfYW5vc19vdV9tYWlzLDEwKSkgJT4lCiAgICBrYWJsZV9zdHlsaW5nKGZvbnRfc2l6ZSA9IDEyLCBmdWxsX3dpZHRoID0gVCwgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiwgImJvcmRlcmVkIikpCmBgYAoKIyMgRXhwbGljYcOnw6NvIGRvcyBEYWRvcwoKRXNzYSB0YWJlbGEgcG9zc3VpIGEgZGlzdHJpYnVpw6fDo28gZGUgcmVuZGltZW50b3MgZGEgcG9wdWxhw6fDo28gYnJhc2lsZWlyYS4KTyBwcsOzcHJpbyBJQkdFIGRpdnVsZ291IHVtIFtpbmZvcm1hdGl2b10oaHR0cHM6Ly9iaWJsaW90ZWNhLmliZ2UuZ292LmJyL3Zpc3VhbGl6YWNhby9saXZyb3MvbGl2MTAxNzA5X2luZm9ybWF0aXZvLnBkZikgc29icmUgYSBkaXN0cmlidWnDp8OjbyBkb3MgcmVuZGltZW50b3MgZGEgcG9wdWxhw6fDo28gYnJhc2lsZWlyYSBlbnRyZSAyMDEyIGUgMjAxOS4KCkV1IHZvdSB0cmFiYWxoYXIgYXBlbmFzIGNvbSB1bWEgZnJhw6fDo28gZG9zIGRhZG9zIGRpc3BvbsOtdmVpcyBuZXNzYSB0YWJlbGE6IG8gcmVuZGltZW50byBoYWJpdHVhbG1lbnRlIHJlY2ViaWRvLCBhIHByZWPMp29zIG1lzIFkaW8gZSBzb21lbnRlIHBhcmEgYXMgcGVzc29hcyBkZSAxNCBhbm9zIG91IG1haXMgZGUgaWRhZGUuCkRlIGFjb3JkbyBjb20gbyBJQkdFLCByZW5kaW1lbnRvIGhhYml0dWFsIHNlIGRlZmluZSBkYSBzZWd1aW50ZSBmb3JtYToKICAKIiBPIHJlbmRpbWVudG8gaGFiaXR1YWwgY29uc2lzdGUgbm8gcmVuZGltZW50byByZWNlYmlkbyBwb3IgZW1wcmVnYWRvcywgZW1wcmVnYWRvcmVzIGUgdHJhYmFsaGFkb3JlcyBwb3IgY29udGEgcHLDs3ByaWEsIG1lbnNhbG1lbnRlLCBzZW0gYWNyw6lzY2ltb3MgZXh0cmFvcmRpbsOhcmlvcyBvdSBkZXNjb250b3MgZXNwb3LDoWRpY29zLiBQYXJhIG8gZW1wcmVnYWRvLCBvIHJlbmRpbWVudG8gbWVuc2FsIGhhYml0dWFsbWVudGUgcmVjZWJpZG8gZXhjbHVpIHRvZGFzIGFzIHBhcmNlbGFzIHF1ZSBuw6NvIHRlbmhhbSBjYXLDoXRlciBjb250w61udW8gKGJvbmlmaWNhw6fDo28gYW51YWwsIHNhbMOhcmlvIGF0cmFzYWRvLCBob3JhcyBleHRyYXMsIHBhcnRpY2lwYcOnw6NvIGFudWFsIG5vcyBsdWNyb3MsIDEzbyBzYWzDoXJpbywgMTRvIHNhbMOhcmlvLCBhZGlhbnRhbWVudG8gZGUgc2Fsw6FyaW8sIGV0Yy4pIGUgbsOjbyBjb25zaWRlcmEgb3MgZGVzY29udG9zIG9jYXNpb25haXMgKGZhbHRhcywgcGFydGUgZG8gMTNvIHNhbMOhcmlvIGFudGVjaXBhZG8sIHByZWp1w616byBldmVudHVhbCBjYXVzYWRvIGFvIGVtcHJlZW5kaW1lbnRvIGV0Yy4pLgogIApDYXNvIG8gcmVuZGltZW50byByZWNlYmlkbyBkZSBlbXByZWdhZG8sIGRlIHRyYWJhbGhhZG9yIHBvciBjb250YSBwcsOzcHJpYSBlIGRlIGVtcHJlZ2Fkb3Igc2VqYSB2YXJpw6F2ZWwsIGNvbnNpZGVyYS1zZSBvIHJlbmRpbWVudG8gaGFiaXR1YWwgYXF1ZWxlIGVtIG3DqWRpYSByZWNlYmlkbyBwZWxhIHBlc3NvYSBubyBwZXLDrW9kbyBlbSBxdWUgcmVhbGl6YXZhIG8gdHJhYmFsaG8gZGVjbGFyYWRvIG5hIHNlbWFuYSBkZSByZWZlcsOqbmNpYS4gUXVhbmRvIGEgcmVtdW5lcmHDp8OjbyB2YXJpYSBlbSBmdW7Dp8OjbyBkbyBwZXLDrW9kbyBvdSBlc3Rhw6fDo28gZG8gYW5vLCBjb25zaWRlcmEtc2UgbyByZW5kaW1lbnRvIG1lbnNhbCBxdWUgYSBwZXNzb2EgZ2FuaGEgaGFiaXR1YWxtZW50ZSBuZXNzZSBwZXLDrW9kbyBzYXpvbmFsLiIgZm9udGU6IFtnbG9zc8OhcmlvXShodHRwOi8vZnRwLmliZ2UuZ292LmJyL1RyYWJhbGhvX2VfUmVuZGltZW50by9QZXNxdWlzYV9OYWNpb25hbF9wb3JfQW1vc3RyYV9kZV9Eb21pY2lsaW9zX2NvbnRpbnVhL01lbnNhbC9nbG9zc2FyaW9fcG5hZGNfbWVuc2FsLnBkZikKCiMjIEV4cGxvcmHDp8OjbyBkZSBEYWRvcwoKYGBge3IgUE5BRF9Db250aW51YV8yMDE5X1JlbmRpbWVudG9fZGVfVG9kYXNfYXNfRm9udGVzLCBpbmNsdWRlPUZBTFNFfQpjYW1pbmhvX2RvX2FycXVpdm9fcmVuZGltZW50b3MgPC0gIlBOQURjL1BOQURfQ29udGludWFfMjAxOV9SZW5kaW1lbnRvX2RlX1RvZGFzX2FzX0ZvbnRlcy54bHN4Igpmb2xoYV91c2FkYV9yZW5kaW1lbnRvcyA8LSAiUkRQQyAoVHJhYiBoYWIrT3V0cm9zIGVmZXRpdm8pIgoKcmVuZGltZW50b3MgPC0gcmVhZF9leGNlbChjYW1pbmhvX2RvX2FycXVpdm9fcmVuZGltZW50b3MsIHNoZWV0ID0gZm9saGFfdXNhZGFfcmVuZGltZW50b3MsIHNraXAgPSAxMikKCnJlbXVuZXJhY2FvX3BvcHVsYWNhbyA8LXJlbmRpbWVudG9zICU+JSAKICBmaWx0ZXIoYEFiZXJ0dXJhIGdlb2dyw6FmaWNhYCA9PSAiQnJhc2lsIiwKICAgICAgICAgVGlwbyA9PSAiVmFsb3IiLAogICAgICAgICBzdWIuY2xhc3NlICVpbiUgYygiYXTDqSA1JSIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibWFpcyBkZSA1JSBhdMOpIDEwJSIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibWFpcyBkZSAxMCUgYXTDqSAyMCUiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1haXMgZGUgMjAlIGF0w6kgMzAlIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWlzIGRlIDMwJSBhdMOpIDQwJSIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibWFpcyBkZSA0MCUgYXTDqSA1MCUiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1haXMgZGUgNTAlIGF0w6kgNjAlIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWlzIGRlIDYwJSBhdMOpIDcwJSIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibWFpcyBkZSA3MCUgYXTDqSA4MCUiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1haXMgZGUgODAlIGF0w6kgOTAlIgksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWlzIGRlIDkwJSBhdMOpIDk1JSIJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibWFpcyBkZSA5NSUgYXTDqSA5OSUiCSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1haXMgZGUgOTklIGF0w6kgMTAwJSIJKSwKICAgICAgICAgaW5kID09ICJSZW5kaW1lbnRvIG3DqWRpbyBtZW5zYWwgcmVhbCBkYXMgcGVzc29hcyBkZSAxNCBhbm9zIG91IG1haXMgZGUgaWRhZGUsIGRlIHRvZG9zIG9zIHRyYWJhbGhvcywgYSBwcmXDp29zIG3DqWRpb3MgZG8gYW5vIikgJT4lIAogIHNlbGVjdChzdWIuY2xhc3NlLCAnMjAxNicsJzIwMTcnLCcyMDE4JywnMjAxOScpICU+JQogIG11dGF0ZShjbGFzc2UgPSBnc3ViKCJhdMOpIDUlIiwgIm1haXMgZGUgMCUgYXRlIDUlIiwgc3ViLmNsYXNzZSkpICU+JQogIHNlbGVjdCgtc3ViLmNsYXNzZSkgJT4lIAogIHVuaXF1ZSgpCgpgYGAKRXNzYSB0YWJlbGEgw6kgYmVtIHNpbXBsZXMuIE5hIGNvbHVuYSAnY2xhc3NlJywgdGVtb3MgYSBjbGFzc2UgcGVyY2VudHVhbCBkZSBwZXNzb2FzIHBvciByZW5kaW1lbnRvLCBlIG5hcyBkZW1haXMgY29sdW5hcyBvIHJlbmRpbWVudG8gaGFiaXR1YWwgZGVzc2EgY2xhc3NlIGRlIHBlc3NvYXMuCiAgClZvdSB1dGlsaXphciB1bWEgdGFiZWxhIGphIHByZXNlbnRlIG5vIHJlbGF0b3JpbyBkbyBJQkdFIHBhcmEgbWVsaG9yIGV4ZW1wbGlmaWNhciBhIHV0aWxpemFkYWRlIGRhIHRhYmVsYQoKIVtGb250ZTogSUJHRSwgRGlyZXRvcmlhIGRlIFBlc3F1aXNhcywgQ29vcmRlbmHDp8OjbyBkZSBUcmFiYWxobyBlIFJlbmRpbWVudG8sIFBlc3F1aXNhIE5hY2lvbmFsIHBvciBBbW9zdHJhIGRlIERvbWljw61saW9zIENvbnTDrW51YSAyMDEyLTIwMTkuPGJyPiZuYnNwOyZuYnNwO05vdGFzOjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsxLiBSZW5kaW1lbnRvIGhhYml0dWFsbWVudGUgcmVjZWJpZG8sIGEgcHJlw6dvcyBtw6lkaW9zIGRlIDIwMTkuPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzIuIFJlbmRpbWVudG8gY2FwdGFkbyBzb21lbnRlIHBhcmEgYXMgcGVzc29hcyBkZSAxNCBhbm9zIG91IG1haXMgZGUgaWRhZGUuXShodHRwczovL2kuaWJiLmNvLzVNajZMS2gvU2NyZWVuc2hvdC0yMDIzLTA2LTEwLWF0LTE5LTM5LTI2LnBuZykKTmEgcHJpbWVpcmEgbGluaGEgJzIwMTInLCBuYSBjb2x1bmEgJ01haXMgZGUgODAlIGF0w6kgOTAlJywgdGVtb3MgbyB2YWxvciAzIDM1MSwgcXVlIHJlcHJlc2VudGEgdW0gcmVuZGltZW50byBoYWJpdHVhbCBkZSBSJCAzLjM1MSwwMCBtZW5zYWwuIE91IHNlamEsIDkwJSBkb3MgYnJhc2lsZWlyb3MgcmVjZWJlbSBhdMOpIGVzc2UgdmFsb3IsIGFwZW5hcyAxMCUgcmVjZWJlbSBtYWlzIHF1ZSBpc3NvLgogIAojIyBNYW5pcHVsYW5kbyBvcyBEYWRvcwogIApQYXJhIHF1ZSBwb3NzYSB0ZXIgY29tbyBwYWRyb25pemFyIGFzIHRhYmVsYXMgZGUgcmVuZGltZW50byBkbyBQTkFEIGUgZG8gSU5GT1BFTiB2b3UgcHJlY2lzYXIgZGUgdW0gYWp1c3RlIGRlIGFjb3JkbyBjb20gbyBzYWzDoXJpbyBtw61uaW1vLiBQYXJhIGlzc28gdm91IGNyaWFyIHVtYSB0YWJlbGEgY29tIG9zIHZhbG9yZXMgZG8gYW5vcyAyMDE2IGEgMjAxOS4KCmBgYHtyIHNhbGFyaW9fbWluaW1vXzIwMTZfYV8yMDE5fQphbm8gPC0gYygyMDE5LCAyMDE4LCAyMDE3LCAyMDE2KQpzYWxhcmlvX21pbmltbyA8LSBjKDk5OC4wMCwgOTU0LjAwLCA5MzcuMDAsIDg4MC4wMCkKc2FsYXJpb19taW5pbW9fMjAxNl9hXzIwMTkgPC0gZGF0YS5mcmFtZShhbm8sIHNhbGFyaW9fbWluaW1vKQpgYGAKCgpgYGB7ciBjb21iaW5hciB2YWxvcmVzIGRlIHNhbGFyaW8gbWluaW1vIGNvbSByZW11bmVyYcOnw6NvLCBpbmNsdWRlPUZBTFNFfQpyZW11bmVyYWNhb19wb3B1bGFjYW9fMl9zYWxhcmlvX21pbmltbyA8LSBwaXZvdF9sb25nZXIocmVtdW5lcmFjYW9fcG9wdWxhY2FvLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29scyA9IGMoIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX3RvID0gImFubyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAidmFsb3IiKSU+JQogIG11dGF0ZShhbm8gPSBhcy5udW1lcmljKGFubyksCiAgICBwb3JjZW50YWdlbV9wb3B1bGFjYW8gPSBhcy5udW1lcmljKGNhc2Vfd2hlbigKICAgIGNsYXNzZSA9PSJtYWlzIGRlIDAlIGF0ZSA1JSIgfiAiNSIgLAogICAgY2xhc3NlID09Im1haXMgZGUgNSUgYXTDqSAxMCUiIH4gIjUiICwKICAgIGNsYXNzZSA9PSJtYWlzIGRlIDEwJSBhdMOpIDIwJSIgfiAiMTAiICwKICAgIGNsYXNzZSA9PSJtYWlzIGRlIDIwJSBhdMOpIDMwJSIgfiAiMTAiICwKICAgIGNsYXNzZSA9PSJtYWlzIGRlIDMwJSBhdMOpIDQwJSIgfiAiMTAiICwKICAgIGNsYXNzZSA9PSJtYWlzIGRlIDQwJSBhdMOpIDUwJSIgfiAiMTAiICwKICAgIGNsYXNzZSA9PSJtYWlzIGRlIDUwJSBhdMOpIDYwJSIgfiAiMTAiICwKICAgIGNsYXNzZSA9PSJtYWlzIGRlIDYwJSBhdMOpIDcwJSIgfiAiMTAiICwKICAgIGNsYXNzZSA9PSJtYWlzIGRlIDcwJSBhdMOpIDgwJSIgfiAiMTAiICwKICAgIGNsYXNzZSA9PSJtYWlzIGRlIDgwJSBhdMOpIDkwJSIgfiAiMTAiICwKICAgIGNsYXNzZSA9PSJtYWlzIGRlIDkwJSBhdMOpIDk1JSIgfiAiNSIgLAogICAgY2xhc3NlID09Im1haXMgZGUgOTUlIGF0w6kgOTklIiB+ICI0IiAsCiAgICBjbGFzc2UgPT0ibWFpcyBkZSA5OSUgYXTDqSAxMDAlIiB+ICIxIiAsCiAgKSkpICU+JSAKICBsZWZ0X2pvaW4oc2FsYXJpb19taW5pbW9fMjAxNl9hXzIwMTksIGJ5ID0gImFubyIpCgpgYGAKRXNzYSB0YWJlbGEgY29uc2lkZXJhIGFwZW5hcyBwZXJjZW50dWFsIGRlIHBlc3NvYXMgY29tIGFsZ3VtIHJlbmRpbWVudG8uIE8gSUJHRSBjb25zaWRlcmEgZGVzZW1wcmVnYWRvcyBwZXNzb2FzIHF1ZSBlc3TDo28gYSBwcm9jdXJhIGRlIHRyYWJhbGhvIG5vIHBlcmlvZG8gZGEgYW1vc3RyYS4gUG9yw6ltLCBuw6NvIGNvbnNpZGVyYSBwZXNzb2FzIHNlbSByZW5kaW1lbnRvcyBxdWUgbsOjbyBlc3RhdmFtIGEgcHJvY3VyYSBkZSBlbXByZWdvIGNvbW8gZGVzZW1wcmVnYWRhcy4gRXNzYSBwYXJjZWxhIGRlIHBlc3NvYXMgc2VtIHJlbmRpbWVudG9zIMOpIGEgcXVlIHZhbW9zIHRyYXRhciBhcXVpLgogIApQYXJhIGV4dHJhaXIgZXNzZXMgZGFkb3MsIHZvdSB1dGlsaXphciBhIG1lc21hIHRhYmVsYSBqw6EgdXNhZGEsIHF1ZSB0YW1iw6ltIHBvc3N1aSBlc3NhcyBpbmZvcm1hw6fDtWVzLgpBIHRhYmVsYSAnUE5BRF9Db250aW51YV8yMDE5X1JlbmRpbWVudG9fZGVfVG9kYXNfYXNfRm9udGVzJywgcG9zc3VpIGNvbW8gaW5kaWNhZG9yIG8gIlBlcmNlbnR1YWwgZGUgcGVzc29hcyBjb20gcmVuZGltZW50byIsIGxvZ28gdm91IGV4dHJhaXIgJzEwMCUnIGRlc3NlIHZhbG9yIGUgb2JldGVyIG8gcGVyY2VudHVhbCBkZSBwZXNzb2FzIHNlbSByZW5kaW1lbnRvcy4KCmBgYHtyIGRpY2lvbmFyIG8gbnVtZXJvIGRlIHNlbV9yZW5kaW1lbnRvcywgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KcGVyY2VudHVhbF9lbXByZWdhZG9zIDwtcmVuZGltZW50b3MgJT4lIAogIGZpbHRlcihgQWJlcnR1cmEgZ2VvZ3LDoWZpY2FgID09ICJCcmFzaWwiLAogICAgICAgICBUaXBvID09ICJWYWxvciIsCiAgICAgICAgIHN1Yi5jbGFzc2UgJWluJSBjKCJUb2RhcyBhcyBmb250ZXPCuSIJKSwKICAgICAgICAgaW5kID09ICJQZXJjZW50dWFsIGRlIHBlc3NvYXMgY29tIHJlbmRpbWVudG8sIG5hIHBvcHVsYcOnw6NvIHJlc2lkZW50ZSIpICU+JSAKICBzZWxlY3Qoc3ViLmNsYXNzZSwgJzIwMTYnLCcyMDE3JywnMjAxOCcsJzIwMTknKSAlPiUgCiAgdW5pcXVlKCkKCnBlcmNlbnR1YWxfZW1wcmVnYWRvc18yX2Zvcm1hdG9fbG9uZ28gPC0gcGl2b3RfbG9uZ2VyKHBlcmNlbnR1YWxfZW1wcmVnYWRvcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzID0gYygiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX3RvID0gImFubyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gInZhbG9yIikKCnBlcmNlbnR1YWxfc2VtX3JlbmRpbWVudG9zIDwtIHBlcmNlbnR1YWxfZW1wcmVnYWRvc18yX2Zvcm1hdG9fbG9uZ28gJT4lIAogIG11dGF0ZShzdWIuY2xhc3NlID0gKDEwMCAtIHZhbG9yKSwKICAgICAgICAgdmFsb3IgPSAwLAogICAgICAgICByZW11bmVyYWNhbyA9ICJOw6NvIHJlY2ViZSIsCiAgICAgICAgIGFubyA9IGFzLmZhY3Rvcihhbm8pKQoKc2VtX3JlbmRpbWVudG9zIDwtIGxlZnRfam9pbihwZXJjZW50dWFsX3NlbV9yZW5kaW1lbnRvcywgcG9wdWxhY2FvX3RvdGFsXzE0X2Fub3Nfb3VfbWFpcywgYnkgPSBqb2luX2J5KGFubykpICU+JSAKICBtdXRhdGUocG9wdWxhY2FvID0gKHN1Yi5jbGFzc2UqcG9wdWxhY2FvKS8xMDAsKSAlPiUgCiAgZ3JvdXBfYnkoYW5vLCByZW11bmVyYWNhbykgJT4lIAogIHN1bW1hcmlzZShwb3B1bGFjYW8gPSBzdW0ocG9wdWxhY2FvKSkgJT4lIAogIHNlbGVjdChhbm8sIHJlbXVuZXJhY2FvLCBwb3B1bGFjYW8pCgpgYGAKCkFudGVzIGRlIGNvbWJpbmFyIGFzIHRhYmVsYXMsIHByZWNpc28gYWluZGEgcGFkcm9uaXphciBhcyB2YXJpYXZlaXMuCmBgYHtyIHBhZHJvbml6YXIgdmFyacOhdmVpcyBkZSByZW5kaW1lbnRvcywgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KCiMgQ3JpYW5kbyBhIG5vdmEgY29sdW5hIGNvbSBhcyBjYXRlZ29yaWFzCnJlbXVuZXJhY2FvX3BvcHVsYWNhb18zIDwtIHJlbXVuZXJhY2FvX3BvcHVsYWNhb18yX3NhbGFyaW9fbWluaW1vICU+JQogIG11dGF0ZShyZW11bmVyYWNhbyA9IGNhc2Vfd2hlbigKICAgIHZhbG9yID49IHNhbGFyaW9fbWluaW1vICYgdmFsb3IgPCAyICogc2FsYXJpb19taW5pbW8gfiAiRW50cmUgMSBlIDIgc2Fsw6FyaW9zIG3DrW5pbW9zIG1lbnNhaXMiLAogICAgdmFsb3IgPj0gMy80ICogc2FsYXJpb19taW5pbW8gJiB2YWxvciA8IHNhbGFyaW9fbWluaW1vIH4gIkVudHJlIDMvNCBlIDEgc2Fsw6FyaW8gbcOtbmltbyBtZW5zYWwiLAogICAgdmFsb3IgPj0gMiAqIHNhbGFyaW9fbWluaW1vIH4gIk1haXMgcXVlIDIgc2Fsw6FyaW9zIG3DrW5pbW9zIG1lbnNhaXMiLAogICAgdmFsb3IgPiAwICYgdmFsb3I8IDMvNCAqIHNhbGFyaW9fbWluaW1vIH4gIk1lbm9zIGRvIHF1ZSAzLzQgZG8gc2Fsw6FyaW8gbcOtbmltbyBtZW5zYWwiCiAgKSkgJT4lIAogIHNlbGVjdChjbGFzc2UsIGFubywgcG9yY2VudGFnZW1fcG9wdWxhY2FvLCByZW11bmVyYWNhbykKCgpyZW11bmVyYWNhb19wb3B1bGFjYW9fNCA8LW1lcmdlKHJlbXVuZXJhY2FvX3BvcHVsYWNhb18zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1bGFjYW9fdG90YWxfMTRfYW5vc19vdV9tYWlzLCBieSA9ICJhbm8iKSAlPiUgCiAgbXV0YXRlKHBvcHVsYWNhb19yZW11bmVyYWRhID0gKHBvcHVsYWNhbyAqIHBvcmNlbnRhZ2VtX3BvcHVsYWNhbykvMTAwKSAlPiUgCiAgc2VsZWN0KGFubywgcmVtdW5lcmFjYW8sIHBvcHVsYWNhb19yZW11bmVyYWRhKSAlPiUgCiAgcmVuYW1lKHBvcHVsYWNhbyA9IHBvcHVsYWNhb19yZW11bmVyYWRhKQoKcmVtdW5lcmFjYW9fcG9wdWxhY2FvXzUgPC0gcmVtdW5lcmFjYW9fcG9wdWxhY2FvXzQgJT4lIAogIGdyb3VwX2J5KGFubywgcmVtdW5lcmFjYW8pICU+JSAKICBzdW1tYXJpc2UocG9wdWxhY2FvID0gc3VtKHBvcHVsYWNhbykpICU+JSAKICBtdXRhdGUoIGFubyA9IGFzLmZhY3Rvcihhbm8pKQpgYGAKCmBgYHtyIGRlZmluaW5kbyBvcmRlbSBjb3JyZXRhIGRlIHJlbmRpbWVudG9zfQojIERlZmluaXIgYSBvcmRlbSBjb3JyZXRhIGRlIHJlbmRpbWVudG9zCm9yZGVtX2NvcnJldGFfcmVuZGltZW50b3MgPC0gYygiTsOjbyByZWNlYmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1lbm9zIGRvIHF1ZSAzLzQgZG8gc2Fsw6FyaW8gbcOtbmltbyBtZW5zYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVudHJlIDMvNCBlIDEgc2Fsw6FyaW8gbcOtbmltbyBtZW5zYWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbnRyZSAxIGUgMiBzYWzDoXJpb3MgbcOtbmltb3MgbWVuc2FpcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFpcyBxdWUgMiBzYWzDoXJpb3MgbcOtbmltb3MgbWVuc2FpcyIpCgpyZW11bmVyYWNhb19wb3B1bGFjYW9fNiA8LSByYmluZChyZW11bmVyYWNhb19wb3B1bGFjYW9fNSwgc2VtX3JlbmRpbWVudG9zKSU+JSAKICBtdXRhdGUocmVtdW5lcmFjYW8gPSBhcy5mYWN0b3IocmVtdW5lcmFjYW8pLAogICAgICAgICByZW11bmVyYWNhbyA9IGZhY3RvcihyZW11bmVyYWNhbywgbGV2ZWxzID0gb3JkZW1fY29ycmV0YV9yZW5kaW1lbnRvcykpCgpgYGAKClBvciBmaW0gdW1hIHZpc8OjbyBzb2JyZSBhIGRpc3RyaWJ1acOnw6NvIGRlIHJlbmRpbWVudG9zIG5vIHBhaXM6CgojIyBEaXN0cmlidWnDp8OjbyBwb3B1bGHDp8OjbyBjb20gZSBzZW0gcmVuZGltZW50b3MgCgpgYGB7ciB2aXN1YWxpemHDp8OjbyBwb3B1bGHDp8OjbyBjb20gZSBzZW0gcmVuZGltZW50b3MsIGVjaG89RkFMU0V9CmthYmxlKGhlYWQoYXJyYW5nZShyZW11bmVyYWNhb19wb3B1bGFjYW9fNixyZW11bmVyYWNhbyksMTApKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoZm9udF9zaXplID0gMTIsIGZ1bGxfd2lkdGggPSBULCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiLCAiYm9yZGVyZWQiKSkKYGBgCgpBbnRlcyBkZSBjb21iaW5hciBvcyBkYXRhZnJhbWVzLCBvYnNlcnZlaSBxdWUgYSB0YWJlbGEgZG8gSW5mb3BlbiBuw6NvIHBvc3N1aSBkYWRvcyBzb2JyZSByZW11bmVyYcOnw6NvIGRvcyBwcmVzb3MgZW0gMjAxNyBwYXJhIG8gZXN0YWRvIGRlIFNhbyBQYXVsby4gdm91IHVzYXIgaW50ZXJwb2xhw6fDo28gbGluZWFyIFtAbGFyc29uMTk4OHJlZmxleGl2aXR5XSBwYXJhIHByZXZlciBlc3NlcyBkYWRvcy4KCmBgYHtyIHJlbXVuZXJhw6fDo28gZGUgcHJlc29zIGVtIFNQIDIwMTd9CiMgU3ViY29uanVudG8gZG9zIGRhZG9zIHBhcmEgbyBlc3RhZG8gZGUgU8OjbyBQYXVsbwppbmZvcGVuX3NwIDwtIGluZm9wZW5fcmVtdW5lcmFjYW9fM19maW5hbFtpbmZvcGVuX3JlbXVuZXJhY2FvXzNfZmluYWwkVUYgPT0gJ1NQJywgXQpgYGAKICAKRnVuw6fDo28gcGFyYSBwcmV2ZXIgb3MgZGFkb3MgYXVzZW50ZXMgc29icmUgYSByZW11bmVyYcOnw6NvIGRlIHByZXNvcyBlbSBTUCBlbSAyMDE3CmBgYHtyIEZ1bsOnw6NvIHBhcmEgcHJldmVyIHZhbG9yZXMgYXVzZW50ZXMgc29icmUgYSByZW11bmVyYWNhbyBkZSBwcmVzb3MgZW0gU1B9CnByZWRpY3RfbmEgPC0gZnVuY3Rpb24oYW5vLCBwcmVzb3MpIHsKICBjb21wbGV0ZV9jYXNlcyA8LSAhaXMubmEocHJlc29zKQogIGFwcHJveCh4ID0gYXMubnVtZXJpYyhhbm9bY29tcGxldGVfY2FzZXNdKSwgCiAgICAgICAgIHkgPSBwcmVzb3NbY29tcGxldGVfY2FzZXNdLCAKICAgICAgICAgeG91dCA9IGFzLm51bWVyaWMoYW5vKSkkeQp9CmBgYAogIApBcGxpY2FyIGEgZnVuw6fDo28gcGFyYSBjYWRhIGNvbWJpbmHDp8OjbyBkZSBnw6puZXJvIGUgcmVtdW5lcmHDp8OjbwpgYGB7ciBBcGxpY2FyIGEgZnVuw6fDo28gcGFyYSBjYWRhIGNvbWJpbmHDp8OjbyBkZSBnw6puZXJvIGUgcmVtdW5lcmHDp8Ojb30KaW5mb3Blbl9zcCA8LSBpbmZvcGVuX3NwICU+JSAKICBncm91cF9ieShyZW11bmVyYWNhbykgJT4lIAogIG11dGF0ZShwcmVzb3MgPSByb3VuZChwcmVkaWN0X25hKGFubywgcHJlc29zKSkpICU+JSAKICB1bmdyb3VwKCkKYGBgCgpTdWJzdGl0dWlyIG9zIGRhZG9zIG9yaWdpbmFpcyBwYXJhIFPDo28gUGF1bG8gY29tIG9zIG5vdm9zIGRhZG9zIHByZWVuY2hpZG9zCmBgYHtyIGRhZG9zIHByZWVuY2hpZG9zfQppbmZvcGVuX3JlbXVuZXJhY2FvXzNfZmluYWxbaW5mb3Blbl9yZW11bmVyYWNhb18zX2ZpbmFsJFVGID09ICdTUCcsIF0gPC0gaW5mb3Blbl9zcAoKYGBgCiAgCkZpbmFsbWVudGUgYSB0YWJlbGEgZmluYWwgYSBxdWFudGlkYWRlIGVzdGltYWRhIGRlIHByZXNvcyBwb3IgcmVtdW5lcmHDp8OjbwpgYGB7ciB0YWJlbGEgZmluYWwgaW5mb3Blbl9yZW11bmVyYcOnw6NvfQppbmZvcGVuX3JlbXVuZXJhY2FvXzQgPC0gaW5mb3Blbl9yZW11bmVyYWNhb18zX2ZpbmFsICU+JSAKICBncm91cF9ieShhbm8sIHJlbXVuZXJhY2FvKSAlPiUgCiAgbXV0YXRlKGFubyA9IGFzLmZhY3Rvcihhbm8pKSAlPiUgCiAgc3VtbWFyaXNlKHByZXNvcyA9IHN1bShwcmVzb3MpKQpgYGAKCkFww7NzIHRvZGFzIGFzIG1hbmlwdWxhw6fDtWVzLCBwb3NzbyBmaW5hbG1lbnRlIGNvbWJpbmFyIGFzIHRhYmVsYXMuCgpgYGB7ciBwb3B1bGFjYW9faW5mb3Blbl9yZW5kaW1lbnRvcywgaW5jbHVkZT1GQUxTRX0KcG9wdWxhY2FvX2luZm9wZW5fcmVuZGltZW50b3MgPC0gYXMuZGF0YS5mcmFtZShsZWZ0X2pvaW4oaW5mb3Blbl9yZW11bmVyYWNhb180LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtdW5lcmFjYW9fcG9wdWxhY2FvXzYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9IGpvaW5fYnkoYW5vLCByZW11bmVyYWNhbykpKSAlPiUgCiAgbXV0YXRlKHJlbXVuZXJhY2FvID0gYXMuZmFjdG9yKHJlbXVuZXJhY2FvKSwKICAgICAgICAgcmVtdW5lcmFjYW8gPSBmYWN0b3IocmVtdW5lcmFjYW8sIGxldmVscyA9IG9yZGVtX2NvcnJldGFfcmVuZGltZW50b3MpLAogICAgICAgICBhbm8gPSBhcy5mYWN0b3IoYW5vKSkKCmBgYAoKIyMgVGFiZWxhIFBOQURDIC0gSU5GT1BFTiBSZW5kaW1lbnRvcwoKYGBge3IgdmlzdWFsaXphw6fDo28gcG9wdWxhY2FvX2luZm9wZW5fcmVuZGltZW50b3MsIGVjaG89RkFMU0V9CmthYmxlKGhlYWQocG9wdWxhY2FvX2luZm9wZW5fcmVuZGltZW50b3MsMTApKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoZm9udF9zaXplID0gMTIsIGZ1bGxfd2lkdGggPSBULCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiLCAiYm9yZGVyZWQiKSkKYGBgCgoKCiMgQXByZXNlbnRhw6fDo28gZG9zIERhZG9zIENvbGV0YWRvcyBlIE1hbmlwdWxhZG9zOiB7LnRhYnNldCAudGFic2V0LWZhZGV9CgojIyBUYWJlbGEgUE5BRCAtIElORk9QRU4gVG90YWwKCmBgYHtyIHZpc3VhbGl6YcOnw6NvIGZpbmFsIHBvcHVsYWNhb19pbmZvcGVuX3RvdGFsICwgZWNobz1GQUxTRX0Ka2FibGUoaGVhZChwb3B1bGFjYW9faW5mb3Blbl90b3RhbCwxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKICAKIyMgVGFiZWxhIFBOQURDIC0gSU5GT1BFTiBHcmF1IGRlIEluc3RydcOnw6NvCmBgYHtyIHZpc3VhbGl6YcOnw6NvIGZpbmFsIHBvcHVsYWNhb19pbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvICwgZWNobz1GQUxTRX0Ka2FibGUoaGVhZChwb3B1bGFjYW9faW5mb3Blbl9ncmF1X2RlX2luc3RydWNhbywxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKICAKIyMgVGFiZWxhIFBOQURDIC0gSU5GT1BFTiBFdG5pYQpgYGB7ciB2aXN1YWxpemHDp8OjbyBmaW5hbCB0YWJlbGEgcG9wdWxhY2FvX2luZm9wZW5fZXRuaWEsIGVjaG89RkFMU0V9CmthYmxlKGhlYWQocG9wdWxhY2FvX2luZm9wZW5fZXRuaWEsMTApKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoZm9udF9zaXplID0gMTIsIGZ1bGxfd2lkdGggPSBULCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiLCAiYm9yZGVyZWQiKSkKYGBgCiAgCiMjIFRhYmVsYSBQTkFEQyAtIElORk9QRU4gRmFpeGEgZXTDoXJpYQpgYGB7ciB2aXN1YWxpemHDp8OjbyBmaW5hbCB0YWJlbGEgcG9wdWxhY2FvX2luZm9wZW5fZmFpeGFfZXRhcmlhLCBlY2hvPUZBTFNFfQprYWJsZShoZWFkKGFycmFuZ2UocG9wdWxhY2FvX2luZm9wZW5fZmFpeGFfZXRhcmlhLGFubyksMTApKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoZm9udF9zaXplID0gMTIsIGZ1bGxfd2lkdGggPSBULCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiLCAiYm9yZGVyZWQiKSkKYGBgCiAgCiMjIFRhYmVsYSBQTkFEQyAtIElORk9QRU4gUmVuZGltZW50b3MKYGBge3IgdmlzdWFsaXphw6fDo28gZmluYWwgcG9wdWxhY2FvX2luZm9wZW5fcmVuZGltZW50b3MsIGVjaG89RkFMU0V9CmthYmxlKGhlYWQocG9wdWxhY2FvX2luZm9wZW5fZ3JhdV9kZV9pbnN0cnVjYW8sMTApKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoZm9udF9zaXplID0gMTIsIGZ1bGxfd2lkdGggPSBULCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiLCAiYm9yZGVyZWQiKSkKYGBgCgojIEFuw6FsaXNlcyBlIENvcnJlbGHDp8O1ZXMuCgpBIE1haW9yIHBhcmRlIGRhIHByb3Bvc3RhIGRvIHByb2pldG8gasOhIGZvaSBwYXNzYWRhLiBEZXNzZSBwb250byBlbSBkaWFudGUsIGZvY28gbWFpcyBlbSBwcmVzZW50YXIgYWxndW1hcyBjb3JyZWxhw6fDtWVzIGVuY29udHJhZGFzIG5hcyB0YWJlbGFzIHF1ZSBtb250YW1vcyBlIGFwcmVzZW50YW1vcyB1bSBwb3VjbyBhY2ltYS4gCiAgCgpWb3UgY29tZcOnYXIgY3JpYW5kbyB1bWEgY29sdW5hIHF1ZSByZWxhY2lvbmEgYSBxdWFudGlkYWRlIGRlIHByZXNvcyBhbyB0b3RhbCBkYSBwb3B1bGHDp8OjbywgZSBsb2dvIGFww7NzIHBsb3RhciBhbGd1bnMgZ3JhZmljb3MgcXVlIGlsdXN0cmFtIGEgY29ycmVsYcOnw6NvIGVudHJlIGNhZGEgdmFyacOhdmVsCgojIyBkYXRhZnJhbWUgZXRuaWEKCkEgdmFyaWHDp8OjbyBkbyBwZXJjZW50dWFsIGRlIHByZXNvcyBwZWxhIHBvcHVsYWNhbyBlbSByZWxhw6fDo28gYSBldG5pYSwgbm9zIG1vc3RyYSBxdWUgZW0gcHJhdGljYW1lbnRlIHRvZG9zIG9zIGVzdGFkb3MgaMOhIHVtYSBpbmNpZGVuY2lhIG1haW9yIGRlIHByZXNvcyBwYXJkb3MgZSBwcmV0b3MgZW0gcmVsYcOnw6NvIMOgIHBvcHVsYcOnw6NvLiBJc3NvIG7Do28gaW5kaWNhIGNhdXNhbGlkYWRlLCB1bWEgdmV6IHF1ZSBow6Egb3V0cm9zIGZhdG9yZXMgcXVlIHBvZGVtIGluZmx1ZW5jaWFyIG8gaW5kaXbDrWR1byBhIGNvbWV0ZXIgYWxndW0gY3JpbWUgZSBhY2FiYXIgYXRyYXMgZGFzIGdyYWRlcy4gUG9yw6ltIMOpIHVtIGZhdG8gcXVlIHByZWNpc2Egc2VyIGludmVzdGlnYWRvIG1haXMgYSBmdW5kby4gU2VyaWEgaWRlYWwgc2UgaG91dmVzc2UgdW1hIGZvcm1hIGRlIGF2YWxpYXIgbWFpcyB2YXJpw6F2ZWlzIGNvbW8gcG9zc8OtdmVsIHJhY2lzbW8gcG9yIHBhcnRlIGRvIHBvZGVyIGp1ZGljacOhcmlvLCBvdSBhdMOpIG1lc21vIGVkdWNhw6fDo28gZSByZW5kYSwgY29tbyBlc3RhbW9zIGZhemVuZG8gYXF1aS4gTm9zIHByw7N4aW1vcyBncsOhZmljb3MsIGFwcmVzZW50byBhbGd1bWFzIGNvcnJlbGHDp8O1ZXMgZW50cmUgZXNzYXMgdmFyacOhdmVpcy4KYGBge3IgcGxvdCBkb3MgZ3JhZmljb3MgZGUgZXRuaWEgcG9yIGVzdGFkbywgZWNobz1GQUxTRX0KZ2dwbG90KHBvcHVsYWNhb19pbmZvcGVuX2V0bmlhLCBhZXMoeD1hbm8sIHk9KHByZXNvcy9wb3B1bGFjYW8pLCBjb2xvcj1ldG5pYSkpICsKICBnZW9tX2xpbmUoKSArCiAgZmFjZXRfd3JhcCh+VUYsIHNjYWxlcyA9ICJmcmVlX3kiLCAgbmNvbCA9IDUpICsgCiAgbGFicyh4PSJBbm8iLCB5PSJWYWxvciIsIGNvbG91cj0iRXRuaWEiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2JsYW5rKCkpCgpgYGAKCgojIyBkYXRhZnJhbWUgZmFpeGFfZXRhcmlhCgpBcXVpIHBvZGVtb3Mgb2JzZXJ2YXIgdW1hIGRpbWludWljw6NvIG5vIMOtbmRpY2UgZGUgcHJlc29zIG5hIGZhaXhhIGV0w6FyaWEgZGUgMTggYSAyNCBhbm9zIG5vIGRlY29ycmVyIGRvIHRlbXBvLiBJc3NvIHBvZGUgc2UgZGFyIHBvciBkaXZlcnNhcyByYXrDtWVzLCBkZW50cmUgZWxhcyBvIGVudmVsaGVjaW1lbnRvIGRhIHBvcHVsYcOnw6NvY2FyY2Vyw6FyaWEuIFBvcsOpbSwgc2UgcGVnYXJtb3MgdG9kYXMgYXMgb3V0cmFzIGZhaXhhcy1ldMOhcmlhcywgdGVtb3MgdW0gYXVtZW50byBjb25zaWRlcsOhdmVsIG5vIG7Dum1lcm8gZGUgcHJlc29zIG5vIHF1ZSBjaGFtYW1vcyAiaWRhZGUgYXRpdmEiLCBxdWUgY29tcHJlZW5kZSBhIHBvcHVsYcOnw6NvIGF0w6kgNjEgYW5vcyBkZSBpZGFkZS4gw4kgcmVhbG1lbnRlIGZydXN0cmFudGUgcGVyY2ViZXIgcXVlIG9zIG5vc3NvcyAiQmlsbCBHYXRlcyIsICJadWNrZXJiZXJncyIsIGUgIkVsb24gTXVza3MiIGVzdMOjbyBhdHLDoXMgZGFzIGdyYWRlcy4gQSBwb3B1bGHDp8OjbyBxdWUgZGV2ZXJpYSBlc3RhciBuYSBmYWN1bGFkZSwgZXN0w6EgcHJlc2EsIHBvciBpbsO6bWVyb3MgZmF0b3JlcywgZGVudHJlIG9zIHF1YWlzIGEgcG91Y2EgaWRhZGUsIGp1bnRvIGNvbSBhIGJhaXhhIGVzY29sYXJpZGFkZSBlIGEgZmFsdGEgZGUgZ3JhbmEuIFJlYWxtZW50ZSBzZXJpYSB1bSBzb25obyBuw6NvIHRlciB0YW50b3Mgam92ZW5zIHByZXNvcy4KYGBge3IgZ2dwbG90IHBvcHVsYWNhb19pbmZvcGVuX2ZhaXhhX2V0YXJpYSwgZWNobz1GQUxTRX0KCmdncGxvdChwb3B1bGFjYW9faW5mb3Blbl9mYWl4YV9ldGFyaWEsIGFlcyh4PWFubywgeT0ocHJlc29zL3BvcHVsYWNhbyksIGNvbG9yPWZhaXhhX2V0YXJpYSkpICsKICBnZW9tX2xpbmUoKSArCiAgZmFjZXRfd3JhcCh+ZmFpeGFfZXRhcmlhLCBzY2FsZXMgPSAiZnJlZV95IiwgIG5jb2wgPSAyKSArIAogIGxhYnMoeD0iQW5vIiwgeT0iVmFsb3IiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2JsYW5rKCkpCgpgYGAKCgojIyBkYXRhZnJhbWUgZ3JhdSBkZSBpbnN0cnXDp8OjbyAKCkVzc2EgdGFiZWxhIG1vc3RyYSBhIGRpc3RyaWJ1acOnw6NvIGRlIHByZXNvcyBwb3IgZ3JhdSBkZSBpbnN0cnXDp8Ojby4gQ2xhcmFtZW50ZSBhIGNoYXZlIHZpcmEgbm8gZW5zaW5vIG3DqWRpbyBpbmNvbXBsZXRvLCB1bWEgdmV6IHF1ZSBhIHBhcnRpciBkYcOtLCBvIHBlcmNlbnR1YWwgZGUgcHJlc29zIHNvYnJlIGEgcG9wdWxhw6fDo28gY2FpIGRyw6FzdGljYW1lbnRlLiBKw6EgbsOjbyDDqSBtaXN0w6lyaW8gYWxndW0gcXVlIHVtYSBwb3B1bGHDp8OjbyBjb20gYmFpeGEgZWR1Y2HDp8OjbyBub3JtYWxtZW50ZSB0ZW0gY29tbyByZXNwb3N0YSB1bSBncmF1IGVsZXZhZG8gZGUgdmlvbMOqbmNpYSwgcGVndWUgcGHDrXNlcyBjb21vIG5vcnXDqWdhLCBob2xhbmRhIGUgamFww6NvIHBvciBleGVtcGxvIG9uZGUgaMOhIHBvdXF1w61zc2ltb3MgcHJlc29zLCBlIGNvbXBhcmUgbyBuw612ZWwgZGUgYWNlc3NvIGFvIEVuc2lubyBTdXBlcmlvciBjb20gbyBkbyBCcmFzaWwuIAoKYGBge3IgZ2dwbG90IHBvcHVsYWNhb19pbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvLCBlY2hvPUZBTFNFfQpnZ3Bsb3QoZGF0YSA9IHBvcHVsYWNhb19pbmZvcGVuX2dyYXVfZGVfaW5zdHJ1Y2FvLCBhZXMoeCA9IGdyYXVfZGVfaW5zdHJ1Y2FvLCB5ID0gKHByZXNvcy9wb3B1bGFjYW8pLGZpbGwgPSBncmF1X2RlX2luc3RydWNhbykpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIGxhYnMoeCA9ICJHcmF1IGRlIEluc3RydcOnw6NvIiwgeSA9ICJQcm9wb3LDp8OjbyBkZSBQcmVzb3MvUG9wdWxhw6fDo28iLCBmaWxsID0gIkdyYXUgZGUgSW5zdHJ1w6fDo28iKSArCiAgZmFjZXRfd3JhcCh+VUYsIHNjYWxlcyA9ICJmcmVlX3kiLCAgbmNvbCA9IDUpKwogICAgdGhlbWVfbWluaW1hbCgpICsKICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgojIyBkYXRhZnJhbWUgcmVuZGltZW50b3MKCkFxdWkgcG9kZW1vcyBvYnNlcnZhZXIgcXVlIGEgbWFpb3IgcGFydGUgZGEgcG9wdWxhw6fDo28gY2FyY2Vyw6FyaWEgc8OjbyBwZXNzb2FzIHF1ZSByZWNlYmVtIGF0w6kgMSBzYWzDoXJpbyBtw61uaW1vIG1lbnNhbC4gRXNzZSB2YWxvciBlbnRyZSAzLzQgZSAxIHNhbMOhcmlvIG3DrW5pbW8gbWVuc2FsIGluY2x1aSBkaXZlcnNhcyBwZXNzb2FzIHF1ZSByZWNlYmVtIGF1eMOtbGlvcyBnb3Zlcm5hbWVudGFpcyBjb21vIG8gIkJvbHNhIEZhbcOtbGlhIiBvdSBvdXRyb3MuIEVsYXMgbsOjbyBwb2RlbSBzZXIsIGRlIGFjb3JkbyBjb20gbyBJQkdFIGNsYXNzaWZpY2FkYXMgY29tbyBzZW0gcmVuZGEgb3UgZGVzZW1wcmVnYWRhcy4KCk8gRGVwYXJ0YW1lbnRvIEludGVyc2luZGljYWwgZGUgRXN0YXRwaXN0aWNhIGUgRXN0dWRvcyBTb2Npb2Vjb27DtG1pY29zIChEaWVlc2UpLCBkaXZ1bGdhIG1lbnNhbG1lbnRlIG8gdmFsb3IgZG8gY3VzdG8gZGEgQ2VzdGEgQsOhc2ljYSBkZSBBbGltZW50b3MgcXVlIHNlcmlhIGRlIGFjb3JkbyBjb20gbyDDsnJnw6NvLCAic3VmaWNpZW50ZSBwYXJhIG8gc3VzdGVudG8gZSBiZW0gZXN0YXIgZGUgdW0gdHJhYmFsaGFkb3IgZW0gaWRhZGUgYWR1bHRhLCBjb250ZW5kbyBxdWFudGlkYWRlcyBiYWxhbmNlYWRhcyBkZSBwcm90ZcOtbmFzLCBjYWxvcmlhcywgZmVycm8gY8OhbGNpbyBlIGbDs3Nmb3JvLltATWV0b2RvbG9naWFdIi4gRW0gMjAxOSwgbyB2YWxvciBtw6lkaW8gZGEgY2VzdGEtYsOhc2ljYSBuYWNpb25hbCBlcmEgZGUgUlwkIDQyMiwxOSwgbyBxdWUgcmVwcmVzZW50YSBxdWFzZSBtZXRhZGUgbyBzYWzDoXJpbyBtw61uaW1vIGRhIMOpcG9jYSAoUlwkIDk5OCwwMCkuCgpgYGB7ciBnZ3Bsb3QgcG9wdWxhY2FvX2luZm9wZW5fcmVuZGltZW50b3MsIGVjaG89RkFMU0UgfQoKZ2dwbG90KHBvcHVsYWNhb19pbmZvcGVuX3JlbmRpbWVudG9zLCBhZXMoeD1hbm8sIHk9KHByZXNvcy9wb3B1bGFjYW8pLCBmaWxsPXJlbXVuZXJhY2FvKSkgKwogIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5IiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJOw7ptZXJvIGRlIHByZXNvcyBwb3IgYW5vIGUgcmVtdW5lcmHDp8OjbyIsCiAgICAgICB4ID0gIkFubyIsCiAgICAgICB5ID0gIk7Dum1lcm8gZGUgUHJlc29zIiwKICAgICAgIGZpbGwgPSAiUmVtdW5lcmHDp8OjbyIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDIiKQoKYGBgCgojIyMgU2FsYcyBcmlvIE1pzIFuaW1vIE5lY2Vzc2HMgXJpbwoKQSBDb25zdGl0dWnDp8OjbyBkbyBCcmFzaWwsIGRlIG91dHVicm8gZGUgMTk4OCwgZXN0aXB1bGEgcXVlIG8gc2Fsw6FyaW8gbcOtbmltbyBkZXZlIHNlciB1bSB2YWxvciBlc3RhYmVsZWNpZG8gZW0gbGVpIGUgdW5pZm9ybWUgZW0gdG9kbyBvIHBhw61zLiBFc3RlIHZhbG9yIGRldmUgc2VyIHN1ZmljaWVudGUgcGFyYSBjb2JyaXIgYXMgbmVjZXNzaWRhZGVzIGLDoXNpY2FzIGRlIHVtIHRyYWJhbGhhZG9yIGUgZGUgc3VhIGZhbcOtbGlhLCBpbmNsdWluZG8gZGVzcGVzYXMgY29tIG1vcmFkaWEsIGFsaW1lbnRhw6fDo28sIGVkdWNhw6fDo28sIHNhw7pkZSwgbGF6ZXIsIHJvdXBhcywgaGlnaWVuZSwgdHJhbnNwb3J0ZSBlIHByZXZpZMOqbmNpYSBzb2NpYWwuIEFsw6ltIGRpc3NvLCBhIENvbnN0aXR1acOnw6NvIHByZXbDqiBxdWUgZXNzZSBzYWzDoXJpbyBtw61uaW1vIGRldmUgdGVyIHJlYWp1c3RlcyBwZXJpw7NkaWNvcyBwYXJhIGdhcmFudGlyIHNldSBwb2RlciBkZSBjb21wcmEgKEFydC4gN8K6LCBJViBkYSBDb25zdGl0dWnDp8OjbyBGZWRlcmFsIGRvIEJyYXNpbCkuCgpPIERJRUVTRSwgYW8gY2FsY3VsYXIgbyBTYWzDoXJpbyBNw61uaW1vIE5lY2Vzc8OhcmlvLCBsZXZhIGVtIGNvbnNpZGVyYcOnw6NvIGVzdGFzIGRpc3Bvc2nDp8O1ZXMgY29uc3RpdHVjaW9uYWlzLiBFbGVzIHNlIGJhc2VpYW0gbm8gRGVjcmV0byBMZWkgbsK6IDM5OSwgcXVlIGRldGVybWluYSBxdWUgb3MgZ2FzdG9zIGNvbSBhbGltZW50YcOnw6NvIGRlIHVtIHRyYWJhbGhhZG9yIGFkdWx0byBuw6NvIGRldmVtIHNlciBtZW5vcmVzIHF1ZSBvIGN1c3RvIGRhIENlc3RhIELDoXNpY2EgZGUgQWxpbWVudG9zLgoKUGFyYSBlc3NlcyBjw6FsY3Vsb3MsIG8gRElFRVNFIGNvbnNpZGVyYSB1bSBtb2RlbG8gZGUgZmFtw61saWEgY29tcG9zdG8gcG9yIDIgYWR1bHRvcyBlIDIgY3JpYW7Dp2FzLCBvbmRlIHNlIHN1cMO1ZSBxdWUgbyBjb25zdW1vIGRlc3RhcyBjcmlhbsOnYXMgw6kgZXF1aXZhbGVudGUgYW8gZGUgdW0gYWR1bHRvLgoKTyBtw6l0b2RvIHVzYWRvIHBhcmEgY2FsY3VsYXIgbyBnYXN0byBhbGltZW50YXIgZGUgdW1hIGZhbcOtbGlhIGNvbWXDp2EgY29tIG8gY3VzdG8gZGEgQ2VzdGEgQsOhc2ljYSBkZSBBbGltZW50b3MgbWFpcyBjYXJhIGVudHJlIGFzIDI3IGNhcGl0YWlzIGJyYXNpbGVpcmFzLiBFc3NlIHZhbG9yIMOpIGVudMOjbyBtdWx0aXBsaWNhZG8gcG9yIDMuCgpPIERJRUVTRVtARElFRVNFXSByZWFsaXpvdSBhIFBlc3F1aXNhIGRlIE9yw6dhbWVudG8gRmFtaWxpYXIgKFBPRikgZW0gU8OjbyBQYXVsbyBubyBwZXLDrW9kbyBkZSA5NC85NS4gT3MgcmVzdWx0YWRvcyBtb3N0cmFyYW0gcXVlIGEgYWxpbWVudGHDp8OjbyBjb3JyZXNwb25kaWEgYSAzNSw3MSUgZGFzIGRlc3Blc2FzIGRhcyBmYW3DrWxpYXMgZG8gZXN0cmF0byBtYWlzIGJhaXhvIGRlIHJlbmRhLiBBbyBjb21wYXJhciBvIGN1c3RvIGRhIGFsaW1lbnRhw6fDo28gcGFyYSB1bWEgZmFtw61saWEgKGEgY2VzdGEgbWFpcyBjYXJhIG11bHRpcGxpY2FkYSBwb3IgMykgY29tIGEgcHJvcG9yw6fDo28gZG8gb3LDp2FtZW50byBkZXNzYXMgZmFtw61saWFzIGRlZGljYWRvIMOgIGFsaW1lbnRhw6fDo28gKDM1LDcxJSksIMOpIHBvc3PDrXZlbCBkZWR1emlyIG8gb3LDp2FtZW50byB0b3RhbCBuZWNlc3PDoXJpbyBwYXJhIGNvYnJpciB0YW1iw6ltIG91dHJhcyBkZXNwZXNhcywgY29tbyBtb3JhZGlhLCB2ZXN0dcOhcmlvLCB0cmFuc3BvcnRlIGUgYXNzaW0gcG9yIGRpYW50ZS4KClBvcnRhbnRvLCBwb2RlbW9zIHJlc3VtaXIgYSBmw7NybXVsYSBwYXJhIGNhbGN1bGFyIG8gU2Fsw6FyaW8gTcOtbmltbyBOZWNlc3PDoXJpbyBkYSBzZWd1aW50ZSBmb3JtYToKCiQkQy5GLkEuID0gMyhDQykkJAoKJCRcZnJhY3tDLkYuQS59e1h9ID0gXGZyYWN7MCwzNTcxfXsxLDAwfSQkClVzYW5kbyByZWdyYSBkZSAzLCB0ZW1vcyBxdWU6CgokJEMuRi5BLiA9ICBYKDAsMzU3MSkkJApsb2dvOgoKJCQgWCA9IFxmcmFje0MuRi5BLn17MCwzNTcxfSAkJApPbmRlOgpDLkYuQS4gPSBDdXN0byBGYW1pbGlhciBkZSBBbGltZW50YWPMp2HMg28gCmUgQy5DLiA9IEN1c3RvIGRhIENlc3RhIEJhzIFzaWNhIGRlIG1haW9yIHZhbG9yCgpPIFNhbMOhcmlvIE3DrW5pbW8gTmVjZXNzw6FyaW8sIHF1ZSDDqSBjYWxjdWxhZG8gbWVuc2FsbWVudGUgY29tbyB1bWEgYXZhbGlhw6fDo28gZG8gcXVlIGRldmVyaWEgc2VyIG8gc2Fsw6FyaW8gbcOtbmltbyBhdHVhbCwgdGFtYsOpbSBzZXJ2ZSBjb21vIHVtYSBmZXJyYW1lbnRhIHF1ZSBvcyBzaW5kaWNhdG9zIGRvcyB0cmFiYWxoYWRvcmVzIHVzYW0gcGFyYSBleHBvciBhIHZpb2xhw6fDo28gZG8gcHJpbmPDrXBpbyBjb25zdGl0dWNpb25hbCBxdWUgZGVmaW5lIG9zIHBhcsOibWV0cm9zIHBhcmEgYSBkZXRlcm1pbmHDp8OjbyBkbyBtZW5vciBzYWzDoXJpbyBwZXJtaXRpZG8gbm8gcGHDrXMuCgpUZW1vcyBhYmFpeG8gbyB2YWxvciBkbyBxdWUgc2VyaWEgbyBzYWzDoXJpbyBpZGVhbCBkbyB0cmFiYWxoYWRvciwgcHJldmlzdG8gZW0gbGVpLCBwYXJhIGFyY2FyIGNvbSB0b2RvcyBjdXN0b3MgbWVuc2FpcyBkZSBzdWEgcmVzaWTDqm5jaWEuCgpgYGB7ciBESUVFU0UsIGluY2x1ZGU9RkFMU0V9CmRpZWVzZV8yMDE5IDwtIHJlYWRfZXhjZWwoImRpZWVzZV8yMDE5Lnhsc3giKQpgYGAKCmBgYHtyIHZpc3VhbGl6YcOnw6NvIERJRUVTRSwgZWNobz1GQUxTRX0Ka2FibGUoaGVhZChkaWVlc2VfMjAxOSwxMCkpICU+JQogICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxMiwgZnVsbF93aWR0aCA9IFQsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIsICJib3JkZXJlZCIpKQpgYGAKCkF0cmF2ZXogZGVzc2VzIGRhZG9zLCBwb2RlbW9zIHZlciBhIGRpc2NyZXDDom5jaWEgZW50cmUgb3MgdmFsb3JlcyBtw61uaW1vcyBlIG9zIG5lY2Vzc8OhcmlvcyBwYXJhIGEgbWFudXRlbsOnw6NvIGRvIGxhciBubyBCcmFzaWwuIE7Do28gw6kgcmVjZW50ZSBhIHF1ZWl4YSBwb3IgcmVmb3JtYXMgcG9sw610aWNhcyBlIGVjb27DtG1pY2FzIG5vIEJyYXNpbC4gQWluZGEgbmEgZMOpY2FkYSBkZSAxOTcwLCBvIGdydXBvICJMZWdpw6NvIFVyYmFuYSIgasOhIGxldmFudGF2YSBwcm90ZXN0byBjb20gYSBtw7pzaWNhICJRdWUgcGHDrXMgw6kgZXNzZT8iLiBQb2RlbW9zIHZlciBuYSBkZWNhZGEgc2VndWludGUgbyBjYW50b3IgQ2F6dXphIHByb3Rlc3RhciBlbSBmb3JtYSBkZSBjYW50byBhIG3DunNpY2EgIkJyYXNpbCIgcXVlIGNsYXJhbWVudGUgasOhIGRlbnVuY2lhdmEgYSBwb2JyZXphIGRhIG5hw6fDo28uCgpBIHBvcHVsYcOnw6NvIGNhcmNlcsOhcmlhIGRpeiBtdWl0byBzb2JyZSBvIHBhw61zLiBKb3ZlbnMsIHBvYnJlcywgcGVzc29hcyBkZSBiYWl4YSBlc2NvbGFyaWRhZGUgZSBkZSBwZWxlIGVzY3VyYSBlc3TDo28gbm9zIHRvcG9zIGRhcyBlc3RhdMOtc3RpY2FzLCBpc3NvIHNpbmFsaXphIHVtYSBvbWlzc8OjbyBwb3IgcGFydGUgZG8gZ292ZXJuby4gTyBDw7NkaWdvIFBlbmFsLCBlbSBzZXUgYXJ0aWdvIDEzNSwgZGVzY3JldmUgbyBkZWxpdG8gZGUgb21pc3PDo28gZGUgc29jb3JybywgcXVlIGNvbnNpc3RlIG5hIGF0aXR1ZGUgZGUgZGVpeGFyIGRlIHNvY29ycmVyIHBlc3NvYXMgZW0gc2l0dWHDp8OjbyBkZSB2dWxuZXJhYmlsaWRhZGUsIGNvbW8gY3JpYW7Dp2FzIGFiYW5kb25hZGFzIG91IHBlcmRpZGFzLCBwZXNzb2FzIGludsOhbGlkYXMsIGNvbSBmZXJpbWVudG9zLCBvdSBlbSBzaXR1YcOnw6NvIGRlIHJpc2NvIG91IHBlcmlnby4gUG9yIGVzc2UgZmF0b3IsIG8gZ292ZXJubyB0YW1iw6ltIGRldmVyaWEgZXN0YXIgYXRyw6FzIGRhcyBncmFkZXMuCgojIEJpb2dyYWZpYQoKCgo=