Metanálise
Introdução
A pesquisa é algo recorrente em todas as áreas e, hoje em dia, com a
facilidade dos meios de comunicação, é possível encontrar inúmeros
estudos sobre a mesma questão de pesquisa. Na área da saúde, onde se
preconiza a medicina baseada em evidências, a idéia é sempre utilizar a
melhor evidência disponível. Uma questão relevante é a determinação de
qual é a melhor evidência disponível quando inúmeros estudos sobre a
mesma questão de pesquisa estão disponíveis. Parece consenso que uma
revisão sistemática e a combinação dos resultados dos estudos
resultantes devem fazer parte do processo.
Uma maneira simplista de combinar resultados de vários estudos é
juntar os dados dos estudos e analisar como se fossem informações
retiradas de apenas um amplo estudo. Porém, esta maneira desconsidera
completamente a variabilidade, o tamanho de cada estudo e, no caso de
ensaios clínicos, o princípio da aleatorização. Estas características
são de extrema importância visto suas influências nos resultados. Desta
forma, a maneira mais apropriada é utilizar técnicas estatísticas
adequadas. Estas técnicas serão detalhadas neste guia prático e englobam
o que é conhecido na literatura como metanálise (Rodrigues, Ziegelmann,
2010).
A primeira metanálise da história é atribuída ao estatístico
Karl Pearson. Em 1904, Pearson combinou, através de
correlações, os dados de cinco estudos para examinar o efeito preventivo
de inoculações contra febre entérica (Pearson, 19004). Os motivos
relatados por Pearson para a combinação de estudos são, ainda hoje, as
principais razões para o uso da metanálise. O principal argumento é que
muitos dos estudos são pequenos para permitir uma conclusão confiável,
fazendo com que o tamanho do erro seja grande e o poder do estudo seja
baixo.
Em 1931 e 1932, Tippet e Fisher, apresentaram métodos para a
combinação de valores p (Whitehead, 2002). Em 1938, Yates e Cochran
consideraram a combinação de estimativas a partir de diferentes
experimentos agrícolas (Yates; Cochran, 1938). A primeira metanálise
para avaliar o efeito de uma intervenção terapêutica foi publicada em
1955 (Whitehead, 2002). Na década de 1970, a metanálise passou a ser
usada nas ciências sociais, principalmente em pesquisas de educação.
Porém, o termo “metanálise” ainda não era utilizado.
Foi em 1977, que o termo “metanálise” foi utilizado pela primeira vez
em um artigo intitulado “Primary, secondary and metaanalysis of
research” pelo psicólogo Gene Glass (Glass, 1976).
Embora o conceito de Meta-Análise seja oriundo de uma escola de
metodologia desenvolvida por Glass em 1976, estudos genéticos sobre
genótipos e fenótipos já abrangiam esse conceito, conforme descrito por
Sokal e Rohlf (1969), a combinação de várias amostras com informações
sobre o mesmo assunto, para obter estimativas mais precisas das
proporções paramétricas.
Na área médica, a metanálise passou a ser utilizada com mais
frequência na década de 1980. Questões chave da medicina como, por
exemplo, o tratamento de doenças do coração e de câncer, foram
respondidas com auxílio da metanálise (WHITEHEAD, 2002).
Em 1993, uma rede composta de clínicos, epidemiologistas e outros
profissionais de saúde fundaram o Cochrane Collaboration. Esta
organização tem por objetivo elaborar, manter e divulgar revisões
sistemáticas da área da saúde.
Desde sua fundação em Oxford, o Centro Cochrane tem crescido
rapidamente e diversos centros foram fundados na Europa, América do
Norte e Latina, África e Austrália com centenas de pessoas colaborando
em grupos de revisão.
No Brasil, o Centro Cochrane foi inaugurado em 1996, em São Paulo.
Para conhecer mais sobre o Centro Cochrane e utilizar seus materiais de
pesquisa, é possível acessar a página na internet http://www.centrocochranedobrasil.org.br/. Nesta página
são encontrados links para os outros centros e suas bibliotecas
virtuais.
Definição
Metanálise é uma técnica estatística adequada para combinar
resultados provenientes de diferentes estudos produzindo, assim,
estimativas que resumem o todo, chamadas de estimativas
metanalíticas.
Para que o resultado de uma metanálise tenha significado aplicado, os
estudos que compõem os dados da metanálise devem ser o resultado de uma
revisão sistemática.
Uma revisão sistemática consiste de um conjunto de regras para
identificar estudos sobre uma determinada questão e, em seguida,
selecionar quais deles serão incluídos ou não na metanálise. Para que
uma revisão sistemática seja válida algumas regras devem ser seguidas
(Fletcher, Fletcher, 2006). Não são recentes as tentativas de unir os
resultados de diferentes estudos.
Etapa da
Metanálise
Não existe um roteiro consensual sobre como realizar uma
meta-análise. Entretanto, existe alguma uniformidade a respeito de
etapas que devem ser seguidas (IRWIG et al, 1994; DINNES et al., 2005;
SOUSA, RIBEIRO, 2009) sugerem algumas etapas necessárias, representadas
por:
Definir o
Objetivo
Para definir a questão problema ou o objetivo do trabalho, o
pesquisador deve se preocupar em definir que é a variável chave objeto
da análise sistemática das diferentes pesquisas. Assim, o problema deve
demonstrar se o estudo meta-analítico proposto ira tratar de verificar
os efeitos antecedentes, dos consequentes ou de ambos sobre a
variável-chave.
O problema de pesquisa é o objetivo principal do trabalho, geralmente
proposto de forma interrogativa, aquilo que se pretende realizar. Ainda
na etapa de definição do objetivo, o pesquisador também pode a partir de
revisão da teoria, elaborar hipóteses sobre o efeito positivo ou
negativo da variável-chave.
A elaboração de um ou mais hipóteses é opcional para cada trabalho
meta-analítico. Todavia, se for elaborada, é importante que o autor
apresente os argumentos teóricos que justifiquem ou não uma associação
entre variáveis e o sentido dessa agregação.
Buscar as
Publicações nas Bases de Dados
Após a explicação da definição do objetivo, o próximo passo é
pesquisar as bases, uma das tarefas críticas da meta-análise. Uma boa
base de dados deve disponibilizar pesquisas que passaram por um crivo
mais profundo em termos de avaliação para a publicação, tal como o
sistema double blind review (dupla revisão cega).
Publicações em periódicos e congressos que possuam menor
reconhecimento cientifico podem ser adicionadas para elaboração de
amostras maiores, mas devem ser codificadas para controle. Para
Berwanger et al (2007), uma meta-análise deve tentar a máxima evidencia
existente sobre um assunto. Por isso, deve-se utilizar as bases de dados
mais reconhecidas no seu campo de conhecimento, como a PROQUEST e a
EBSCO são para o marketing.
A estratégia de busca e seleção deve ser definida antes da consulta
as diferentes bases de dados, a mantida ao longo da pesquisa, pois uma
busca ampla e sistemática é um dos critérios de que auxiliam na garantia
da qualidade das pesquisas obtidas.
Definir os
Critérios de Buscar
Esta é uma tarefa que também varia em cada pesquisa, pois o
pesquisador devera criar critérios de busca, de seleção e de inclusão
dos artigos a serem investigados.
A clareza da exposição dos critérios tem dois objetivos principais:
permitir que o revisor avalie a qualidade da busca e consentir que
futuros pesquisadores adotem critérios semelhantes para novas pesquisas.
Os critérios de exclusão devem ser descritos e rigorosamente seguidos
pelo analista (BERWANGER et al, 2007). Desta forma, o leitor pode
decidir se os resultados possuem relevância e aplicabilidade.
Selecionar as
Pesquisas
Após uma ampla busca das publicações em diversos bases de dados com
base em critérios clara e precisamente definidos, o pesquisador deve se
preocupar em selecionar apenas aquelas pesquisas que possuam as
informações buscadas. Nem todos os trabalhos obtidos possuem informações
uteis que possam ser convertidas em uma estatística.
A meta-análise pode ser entendida como uma forma de pesquisa na qual
cada pesquisa individual é considerada como um respondente. De cada uma
delas são extraídas as informações que integrarão um banco de dados
especialmente construídos para cada meta-análise.
Nesse banco de dados, cada estudo entra como uma linha, enquanto as
informações extraídas de cada estudo são as colunas. Em seguida, esse
banco de dados é analisado tendo como objetivo principal o cálculo do
tamanho do efeito.
Avaliar a
Heterogeneidade
é muito raro que pesquisas estudem e mensurem as mesmas variáveis de
forma semelhante. Ou seja, é muito comum que haja heterogeneidade no
banco de dados. Para garantir a qualidade das analises, o pesquisador
deve avaliar os motivos da variância entre os estudos, se esta variação
foi imprevista e se foi causada por aspectos metodológicos, tais como o
uso métodos experimentais ou suveys, escalas de medidas diferentes, etc.
(DINNES et al., 2005).
Calcular os resultados de cada estudo, combinando os efeitos: Em
estatística, um tamanho de efeitos (effect-sizes) é uma medida da força
do relacionamento entre duas variáveis em uma população. Ou seja, é a
magnitude do efeito que uma variável exerce sobre a outra em termos de
associação. Um effect-size calculado a partir dos dados é uma
estatística descritiva que veicula a magnitude estimada de um
relacionamento, sem que se faça qualquer declaração sobre a existência
de uma relação estatisticamente significante entre as variáveis (BREI et
al., 2011).
O objetivo do pesquisador numa meta-análise é verificar qual é o
tamanho do efeito entre duas variáveis. Esse tamanho do efeito é
determinado pelo effect-size, podendo ser identificados diferentes tipos
na literatura, fornecidos pelos autores. Em outras palavras, os
effect-sizes são obtidos através da conversão dos efeitos das
associações, sento t de student, F da análise de variância, F da ANCOVA,
diferença de médias antes e depois do tratamento, Qui-quadrado,
correlação de Pearson, r e outros (LIPSEY; WILSON, 2011).
Avaliar o
Efeito da Variação
Uma das melhores opções para avaliar o efeito da variação é usar o
gráfico chamado FOREST PLOT. O gráfico serve para ilustrar a força
relativa dos efeitos de tratamento em múltiplos estudos e a quantidade
de variabilidade dos efeitos, mostrando desde de resultados extremamente
negativos a fortemente positivos.
Assim, eles permitem uma análise visual tanto de effect-size quanto
dos intervalos de confiança facilitando a comparação visual dos achados
de diferentes estudos (BERWANGER et al, 2007).
Os resultados dos efeitos já transformados em r ou d por uma
meta-análise podem ser avaliados por meio de intervalos de confiança, ou
seja, a estimativa de um parâmetro de interesse na população. O objetivo
de um intervalo de confiança é mostrar qual a variação da média dos
estudos abordados. Além disso, ele permite estabelecer uma referência,
com a qual podem ser comparados os resultados de estudos futuros. Ou
seja, ao invés de estimar o parâmetro por meio de um único valor, o
intervalo de confiança serve para mostrar um intervalo onde aquele
parâmetro provavelmente se encontra (a partir de um nível de
significância escolhido pelo pesquisador).
Interpretar
os Resultados
A última etapa da realização de uma meta-análise é a interpretação
dos resultados de um modelo global. Recomendamos que uma tabela final de
meta-análise apresente, pelo menos, os seguintes dados:
- Número de Estudos;
- Número de observações;
- Tamanho da Amostra (N);
- Valor de r simples;
- Valor de Z;
- Valor de r corrigidos pela confiabilidade;
- Valor de r corrigidos pela amostra;
- Erro padrão do effect-size;
- Valor de d de Cohen, calculado a partir do
effect-size;
- Intervalo de confiança;
- Teste de homogeneidade (Q);
- *Teste I².
Dentre todos os dados propostos, individualmente, o
effect-size é a medida mais importância para
interpretação dos resultados, principalmente a versão do effect-size que
está ponderada pela amostra e pela confiabilidade, pois ela permite ao
pesquisador avaliar a força da relação entre as variáveis principais do
estudo, ou seja, avaliar se há u m efeito fraco, médio ou forte, e tirar
as conclusões a respeito da força da relação entre as variáveis.
Nesse contexto, os principais passos para realização de uma
meta-análise são vários, detalhados, e requerem por parte do pesquisador
conhecimento substancial de estatística descritiva e inferencial, além
de domínio de um bom software.
A principal desvantagem da meta-análise é que esta não pode compensar
as limitações inerentes aos estudos em que se baseia, uma vez, que eles
próprios têm erros, sistemáticos e aleatórios, que não são corrigidos
pela sua análise conjunta, sendo pelo contrário, aditivos (Ressing,
2009).
Visualização
Gráfica
Aspetos
Gerais
A maneira mais usual de apresentar os resultados de uma Meta-Análise
é o gráfico chamado Forest Plot (gráfico em floresta).
Este gráfico mostra informações individuais dos estudos e os resultados
da interação.
Para cada estudo o gráfico apresenta a medida de efeito e seu
intervalo de confiança(IC), sendo que a medida de efeito é representada
por um símbolo que pode, por exemplo, ser um quadrado,
um círculo, um losango, ou outra
figura dependendo do software.
O tamanho deste símbolo é proporcional ao peso do estudo na
Meta-Análise, quanto maior o peso, maior o tamanho do símbolo da medida
de efeito. Também é exibido em torno da estimativa da medida de efeito
uma linha horizontal que é o respectivo intervalo de confiança (IC),
sendo que quanto maior esta linha, maior é a variabilidade dentro do
estudo.
Nesse contexto, os resultados representados à esquerda da linha
vertical evidenciam que o evento é mais propenso a ocorrer no grupo de
Controle; contrariamente os resultados representados à direita desta
linha evidenciam que o evento tem maior propensão a ocorrer no grupo
Experimental ou Tratamento (Ramalho, 2005; Martinez, 2007).
Forest
Plot
o gráfico em floresta tradicional é composto por 6 colunas que
sumarizam os resultados das diversas abordagens.
A primeira coluna do gráfico corresponde à identificação do estudo
(neste caso representado pelo Autor e pela referência correspondente),
subdividos de acordo com a abordagem utilizada nos ensaios clínicos:
métodos pragmáticos, comportamentais ou cognitivo-comportamentais.
Na segunda e na terceira colunas estão representadas as proporções de
eventos de interesse (recaída) em cada estudo para os grupos intervenção
e controle respectivamente.
O valor apresentado na quinta coluna corresponde ao peso de cada
publicação para o resultado agregado da metanálise.
A quarta e a sexta colunas correspondem ao tamanho do efeito de cada
estudo, aqui representado pelo RR e por seus respectivos intervalos de
confiança (IC) de 95%, estando apresentado de forma gráfica na quarta
coluna e de forma numérica na última.
Componentes
do Forest Plot
- Quadrado : é o Peso de Cada Estudo (amostra);
- IC: Intervalo de Confiança para cada estudo;
- Linha de Nulidade:
- Losango: Estimativa do Efeito do Resultado
Composto.
Funnil
Plot
Os dados selecionados para compor a meta-análise podem estar
influenciados pelo Viés de Publicação. Entende-se por
viés de publicação a tendência de os resultados publicados estarem
sistematicamente diferentes da realidade.
Análise de ensaios clínicos com protocolo registrado na base de
registros ClinicalTrial.gov revelou que menos de 70%
dos estudos são publicados (ROSS et al., 2012).
A não publicação de resultados pode ser devida à decisão do autor ou
do financiador do estudo, que não submetem para publicação os achados
desfavoráveis, ou dos editores de periódicos científicos, que podem não
ter interesse em divulgar resultados negativos (sem significância
estatística).
Nas revisões sistemáticas, a presença desse viés pode ser
identificada por meio de Gráfico de Funil (Funnil Plot)
e de testes estatísticos (Higgins; Green, 2011).
A utilização dessas técnicas é recomendada para meta-análises com dez
estudos ou mais e baseia-se em questões de estimativa e de precisão. Os
estudos pouco precisos, em geral realizados com amostras de tamanho
pequeno, poderão encontrar resultados positivos ou negativos
(estatisticamente significativos ou não) por influência do acaso.
Estudos de maior precisão, em geral em menor número, estariam mais
próximos do valor real e situados na parte mais estreita do gráfico de
funil. Também é possível estimar a presença desse viés em bases de
registros de estudos, pela busca daqueles que não vieram a ser
publicados.
Caso haja evidências de viés de publicação sugerimos:
- Revisar planilha de coleta de dados, buscando por erros na extração
dos dados dos estudos;
- Avaliar que medida de efeito está adequada (ex: uso de diferença de
médias em vez de diferença padronizada de médias em metanálises de dados
contínuos);
- Realizar analise de sensibilidade considerando a exclusão de estudos
com pequeno tamanho amostral e potenciais outliers identificados na
análise visual;
- Realizar ajustamento para viés de publicação utilizando análise de
trim and fill.
Medidas de
Risco/Efeito
Contextualização
Metanálise é o uso de métodos estatísticos para sumarizar resultados
de estudos independentes. Combinando informações de todos os estudos
relevantes, a metanálise pode estimar os efeitos de uma determinada
intervenção de forma mais precisa do que cada estudo individualmente.
Para a elaboração de uma revisão sistemática, é possível trabalhar com
dados de diversas naturezas, contudo, para proceder com a abordagem
meta-analítica, o resultado final de cada estudo deve ser expresso em
uma medida padronizada, denominada tamanho do
efeito.
Metanálises que consideram desfechos binários(variável
dicotômica) são as mais comuns. Para cada estudo individual é
calculada uma mesma medida de associação, sendo mais freqüente o uso do
Risco Relativo (RR) ou da Razão de Chances
(odds ratio – OR), que expressarão o tamanho do efeito. Após,
procede-se com a agregação das medidas a partir da ponderação dos
resultados dos estudos individuais. Uma vez obtidos esses dados, é
possível calcular medidas de impacto e benefício, como o Número
Necessário para Tratar (NNT), assim como em qualquer ensaio
clínico individual.
Para Dados Contínuos, utiliza-se a diferença
ponderada das médias (weighted mean difference, ou
simplesmente, mean difference – MD) entre os dois
grupos de comparação quando possuímos as medidas em uma mesma escala.
Quando as mensurações são realizadas em escalas distintas, sem a
possibilidade de conversão à uma mesma unidade (por exemplo, testes
psicométricos diferentes para avaliar um mesmo estado de saúde),
utiliza-se a diferença padronizada das médias (standarized mean
difference – SMD), que consiste na divisão da diferença das médias dos
dois grupos pelo desvio padrão comum a eles, gerando assim um valor
correspondente a diferença em desvios padrões entre as duas intervenções
avaliadas.
Odds ou
Chance
As medidas de efeito mais utilizadas para grupos são o odds
ratio e a incidência.
Por definição odds é a razão entre a probabilidade de o evento
ocorrer e a probabilidade do evento não ocorrer que, matematicamente, é
equivalente a7 razão entre o número de eventos e o número de não
eventos.
\[ ln(Odds)_{j}= ln \left(
\frac{a_{i}}{b_{j}}\right) \] onde \(a_{i}\) é o número de indivíduos que sofreu
o evento no estudo \(j\) e \(b_{j}\) é o número de indivíduos que não
sofreu o evento no estudo j, com \(j=1,2,\ldots,J\).
Incidência
A incidência mede o número de novos casos surgidos numa determinada
população e num determinado intervalo de tempo. Ela também, é usualmente
calculada em escala logarítmica.
\[ ln(Incid)_{j}= ln \left(
\frac{d_{i}}{q_{j}}\right) \]
onde \(d_{i}\) são os eventos
observados no estudo \(j\) e \(q_{j}\) unidades de tempo.
Modelo
Estatístico
Em metanálise existem basicamente dois tipos de modelos que podem ser
adotados, o modelo de efeitos fixos e o modelo de efeitos aleatórios
(Sousa & Ribeiro, 2009).
Modelos de
Efeitos Fixos
Referindo-nos ao modelo de efeito fixo é essencial compreender que
este pressupõe que o efeito de interesse é o mesmo em todos os estudos e
que as diferenças observadas entre eles são devidas apenas a erros
amostrais (este erro também é referido na literatura como variabilidade
dentro dos estudos).
De forma simplificada, é como se os métodos com efeitos fixos
considerassem que a variabilidade entre os estudos ocorreu apenas pelo
acaso e ignorassem a heterogeneidade entre eles (Moayyedi, 2004, apud
Sousa; Ribeiro, 2009; Rodrigues; Ziegelmann, 2010).
Assim e se considerarmos J o número de estudos da meta-análise e
\(Y_{j}\) o efeito observado no estudo
j (com j = 1,2,…,J). O modelo de efeito fixo é dado por:
\[ Y_{j} = \theta_{M} + \epsilon_{j}
\]
Onde, \(\epsilon_{j}\) é o erro
aleatório do estudo j e \(\theta_{M}\)
é o efeito comum a todos os estudos, denominado de medida
meta-analítica.
De acordo com este modelo pressupõe-se que os erros aleatórios têm
distribuição normal com média 0 e variância \(\sigma^{2}_{j}\) conhecida (esta variância
é o quadrado do erro padrão estimado no estudo j) e é por este motivo
que as medidas de efeito dos OR e RR são calculadas em escala
logarítmica.
Modelos de
Efeitos Aleatórios ou Randômicos
Para além dos modelos de efeitos fixos, como já foi referido
anteriormente, existem ainda os modelos de efeitos aleatórios que
pressupõem que o efeito de interesse não é o mesmo em todos os estudos.
Neste sentido, consideram que os estudos que fazem parte da meta-análise
formam uma amostra aleatória de uma população hipotética de estudos.
Contudo, apesar dos efeitos dos estudos não serem considerados iguais
eles são conectados através de uma distribuição de probabilidade,
geralmente suposta normal (Rodrigues, 2010; Rodrigues & Ziegelmann,
2010).
Por este fundamento criam resultados combinados com maior intervalo
de confiança daí serem os mais recomendados. Todavia e apesar de terem
essa vantagem, os métodos com efeitos aleatórios são criticados por
atribuírem maior peso a estudos menores (Moayyedi, 2004, apud Sousa
& Ribeiro, 2009).
O modelo de efeitos aleatórios é dado por:
\[ Y_{j} = \theta_{M} + \zeta_{j} +
\epsilon_{j} \]
Onde, \(\epsilon_{j}\) é o erro
aleatório do estudo j, \(\zeta_{j}\) é
o efeito aleatório de cada estudo j e é a medida meta-analítica.
No modelo de efeitos aleatórios pressupõe-se que os erros aleatórios
têm distribuição normal com média 0 e variância conhecida \(\sigma^{2}_{j}\) (mesma suposição do modelo
de efeito fixo) e os efeitos aleatórios têm distribuição normal com
média 0 e variância desconhecida \(\tau{2}\).
Neste modelo, a estimativa pontual para \(\theta_{M}\), similarmente consiste na
média ponderada entre as medidas de efeito de cada estudo com a
diferença da estimativa de \(\tau{2}\)
influenciar na ponderação (Rodrigues, 2010; Rodrigues & Ziegelmann,
2010).
Teste de
Heterogeneidade
A heterogeneidade em revisões sistemáticas com meta-análise consiste
na variabilidade ou diferença entre estudos em relação à estimativa de
efeitos e por isso o seu cálculo é fundamental para avaliar o grau de
confiança dos resultados em situações de decisões incertas ou suposições
sobre os dados e resultados usados (Clarke, 2001, apud Ramalho,
2005).
Em metanálise, quando a variabilidade entre os estudos não é apenas
aleatória, dizemos que os estudos são heterogêneos. A avaliação sobre
heterogeneidade tem papel importante na escolha dos modelos de
metanálise e, portanto, deve ser realizada anates da escolha do
modelo.
Em termos globais alguns autores dividem as heterogeneidades em três
tipos (Craig & Smyth, 2004; Pocinho, 2008; Higgins & Green,
2011):
Heterogeneidade Estatística (diferenças nos
resultados) – é a variação entre os resultados dos estudos, o que pode
ser causado por: heterogeneidade clínica ou metodológica, escolha errada
das medidas de efeito do tratamento ou pelo acaso;
Heterogeneidade Metodológica (diferenças nos
desenhos dos estudos incluídos) – consiste nas variações relacionadas
com a aleatorização, sigilo da alocação, cegamento,
perdas/exclusões;
Heterogeneidade clínica (diferenças entre as
características dos estudos, por exemplo: os participantes, intervenções
ou resultados) – é a diferença real entre os estudos devido às suas
características: participantes (critérios de inclusão e exclusão,
diagnóstico, etc.), intervenções (tipo, dose, duração, etc.), desfechos
clínicos (tipo, escala, ponto de coorte, duração do follow up,
etc.).
É neste sentido que os testes estatísticos de heterogeneidade se
revestem de uma desmedida importância na realização da meta-análise pois
permitem inferir se a variabilidade observada nos resultados de um
estudo (tamanho de efeito) é maior que o esperado devido ao acaso.
Na realização da meta-análise pode-se, recorrer a dois testes para
determinar a existência de heterogeneidade, o Teste Q
proposto por Cochran (1954) e/ou qualificada pela Estatística
\(I^{2}\) definida por Higgins
e Thompson (2002).
Teste Q de
Cochram
O teste Q de Cochran traduz o método mais utilizado para avaliar a
heterogeneidade e parte do pressuposto que os achados dos estudos
primários são iguais (hipótese nula) e verifica se os dados encontrados
refutam esta hipótese (Lau, Ioannidis & Schmid, 1998). Se a hipótese
nula for confirmada, os estudos são considerados homogêneos (p-valor
> 0,05).
As Hipóteses do Teste Q de Cochran
\(H_{0}\): os estudos são homogêneos
\(H_{1}\): os estudos são
heterogêneos
O teste Q de Cochran é, então, dado por:
\[ Q = \sum_{j=1}^{j}
W_{j}(Y_{j}-\theta_{M})^{2} \]
Onde \(W_{j}\) é o peso do estudo j,
\(Y_{j}\) é a medida de efeito do
estudo j e \(\theta_{M}\) é a
estimativa para a medida meta-analítica.
Como já foi supramencionado, o valor p calculado indica se a
heterogeneidade é significativamente, ou não, diferente de zero. Um
problema é que o valor de Q varia entre 0 e infinito, o que acarreta
várias desvantagens (Rodrigues & Ziegelmann, 2010).
Segundo Higgins et al. (2003) apontam que em meta-análises que
envolvem um número pequeno de estudos, o poder do teste pode ser baixo.
Assim, ainda que tenhamos uma grande variação entre os estudos, o teste
de Cochran pode não conseguir detectar a heterogeneidade devido ao
número reduzido de estudos (o p-valor será erroneamente elevado).
Por outro lado, quando a meta-análise envolve um número elevado de
estudos, o poder do teste será alto e o teste de Cochran pode evidenciar
uma heterogeneidade entre os estudos “estatisticamente significante”,
porém, clinicamente não importante.
Estatística
\(I^{2}\)
Contudo, alguns autores argumentam que a heterogeneidade por menor
que seja encontra-se sempre presente, pelo que não tem sentido testar
apenas a sua presença, mas quantificá-la (Mulrow et al., 1997; Berwanger
et al., 2007). E foi nesse sentido que foi desenvolvido o Teste de
Inconsistência I² proposta por Higgins & Thompson (2002).
A estatística \(I^{2}\) é obtida a
partir da estatística Q do teste de Cochran e do número j de estudos
envolvidos na meta-análise e dada por:
\[ I^{2} = \frac{Q - (j-1)}{Q}\times 100\%
\]
A estatística \(I^{2}\) pode variar
de valores negativos até \(100\%\).
Quando o valor for negativo ele é igualado a 0. O valor p de \(I^{2}\) é equivalente ao valor p de Q. A
estatística \(I^{2}\) descreve a
porcentagem de variabilidade do efeito que é devida à heterogeneidade e
não por acaso (Dinnes et al., 2005).
Interpretativamente, uma escala com um valor de \(I^{2}\) próximo a \(0\%\) indica não heterogeneidade entre os
estudos, próximo a \(25\%\) indica
Baixa Heterogeneidade, próximo a \(50\%\) indica Heterogeneidade
Moderada e próximo a \(75\%\) indica Alta
heterogeneidade entre os estudos (Higgins et al. 2003; Rodrigues &
Ziegelmann, 2010).
Referências
Bibliográficas
AYRES, M.; AYRES JÚNIOR, M.; AYRES, D.L; SANTOS, A.S. BioEstat 5.0:
aplicações estatísticas nas áreas das ciências biológicas e médicas.
Belém: MCT; IDSM; CNPq, 2015.
BERWANGER, O.; SUZUMURA E. A.; BUEHLER, A.M.; OLIVEIRA, J.B. (2007).
Como Avaliar Criticamente Revisões Sistemáticas e Metanálise? Revista
Brasileira de Terapia Intensiva, 19(4): 475-480.
BREI, V.A; D’AVILA, L; CAMARGO, L.F; ENGELS, J. The influence of
adptation and standardization of the marketing mixo on performance: a
meta-anlysis. Brazilian Administration Review, 8, 266-287, 2011.
COCHRAME, W.G. The combination of estimates from different
experiments. Biometrics 1954; 10: 101-129.
DERSIMONIAN, R; LAIRD, N. Meta-analysis in clinical trials.
Controlled Clinical Trials. 1986; 7:177-88.
DINNES, J.; DEEKS J.; KIRBY, J; RODERICK, P. A methodological review
of how heterogeneity has been examined in systematic reviews of
diagnostic test accuracy. Health Technol Assess. 2005; 9 (12):
1-113.
Fletcher RH, Fletcher SW. Epidemiologia clínica: elementos
essenciais; tradução Roberta Marchiori Martins. Porto Alegre, Artmed,
2006.
Glass GV. Primary, secondary, and meta-analysis of research.
Educational Researcher. V. 5, p. 3-8, 1976.
HIGGINS, J.P.T.; THOMPSON, S.G. (2002). Quantifying heterogeneity in
a metaanalysis. Stat Med., 21: 1539-58.
HIGGINS, J.P; THOMPSON, S.G; DEEKS, J.J; ALTMAN, D.G. Measuring
inconsistency in meta-analyses. BMJ. 2003; 327: 557-60.
HIGGINS, J; GREEN, S, editors. Cochrane handbook for systematic
reviews of interventions [Internet]. Version 5.1.0. Oxford: Cochrane
Collaboration; c2011 [cited 2014 Aug 8]. Available from:
www.cochrane-handbook.org.
LAU, J.; IOANNIDIS, J. P.; SCHMID, C. H. (1998). Summing up evidence:
one answer is not always enough. Lancet; 351: 123-127. LIPSEY, M.W;
WILSON, D.B. (2001). Practical Meta-Analysis. Beverly Hills, CA:
SAGE.
MARTINEZ, E. Z. (2007). Metanálise de ensaios clínicos controlados
aleatorizados: aspectos quantitativos. Medicina; 40 (2): 223-35.
Ribeirão Preto.
MULROW, C.; LANGHORNE, P.; GRIMSHAW, J. (1997). Integrating
heterogeneous pieces of evidence in systematic reviews. Ann Intern Med.,
127: 989-995.
Pearson K. Report on certain enteric fever inoculation statistics.
BMJ. 1904;3:1243-6. 3.
RAMALHO, A. (2005). Manual para redação de estudos e projetos de
revisão sistemática com e sem metanálise. Coimbra: FORMASAU. ISBN
972-8485-54-9.
RODRIGUES, C.; ZIEGELMANN, P. (2010). Metanálise: um guia prático.
Revista HCPA. 30(4): 435-446. ISSN: 1983-5485.
ROSS, J.S; TSE, T; ZARIN, DA; XU, H; ZHOU, L; KRUMHOLZ, H.M.
Publication of NIH funded trials registered in ClinicalTrials.gov: cross
sectional analysis. BMJ. 2012 Jan;344(d7292):1-10.
SOKAL, R.R; ROHLF, F.J. (1995). Biometry, 3 rd. Ed, W.H. Freeman and
Company, New York.
VIECHBAUES, W. Meta-Analysis Package for R, 2009.
Whitehead A. Meta-analysis of controlled clinical trials. John Wiley
& Sons. 2002.
Yates F, Cochran WG. The analysis of groups of experiments. The
Journal of Agricultural Science. 1938;28(4):556-80.
LS0tDQp0aXRsZTogIioqTUVUQU7DgUxJU0U6IHVtIEd1aWEgUHLDoXRpY28qKiINCmF1dGhvcjoNCi0gbmFtZTogTcOhcmlvIERpZWdvIFZhbGVudGUNCi0gbmFtZTogQ2FybG9zIFBhaXjDo28NCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgaGlnaGxpZ2h0OiB0ZXh0bWF0ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6IGNlcnVsZWFuDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDYNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHllcw0KICAgICAgc21vb3RoX3Njcm9sbDogeWVzDQogICAga2VlcF9tZDogeWVzDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogJzYnDQppbnN0aXR1dGU6DQphYnN0cmFjdDogIkEgbWV0YW7DoWxpc2Ugw6kgdW1hIHTDqWNuaWNhIGVzdGF0w61zdGljYSB1dGlsaXphZGEgcGFyYSBjb21iaW5hciByZXN1bHRhZG9zIHByb3ZlbmllbnRlcyBkZSBkaWZlcmVudGVzIGVzdHVkb3MuIFBhcmEgaXN0bywgc8OjbyBkZXNjcml0b3MgYXMgbWVkaWRhcyBkZSBlZmVpdG8gdXRpbGl6YWRhcyBlbSBtZXRhbsOhbGlzZSBuYSDDoXJlYSBkYSBzYcO6ZGUsIGJlbSBjb21vIG9zIG1vZGVsb3MgZGUgZWZlaXRvcyBmaXhvIGUgZGUgZWZlaXRvcyBhbGVhdMOzcmlvcy4gTyBvYmpldGl2byBkZXN0ZSBndWlhIMOpIGFwcmVzZW50YXIgZGUgZm9ybWEgbWV0b2RvbMOzZ2ljYSBjb21vIHJlYWxpemFyIGUgaW50ZXJwcmV0YXIgdW1hIG1ldGFuw6FsaXNlIG5hcyBwZXNxdWlzYXMgY2zDrW5pY2FzLiINCi0tLQ0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCg0KDQoNCmBgYHs9aHRtbH0NCjxzdHlsZT4NCmJvZHl7dGV4dC1hbGlnbjoganVzdGlmeX0NCjwvc3R5bGU+DQpgYGANCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KIyAqKk1ldGFuw6FsaXNlKioNCiMjICoqSW50cm9kdcOnw6NvKioNCg0KQSBwZXNxdWlzYSDDqSBhbGdvIHJlY29ycmVudGUgZW0gdG9kYXMgYXMgw6FyZWFzIGUsIGhvamUgZW0gZGlhLCBjb20gYSBmYWNpbGlkYWRlIGRvcyBtZWlvcyBkZSBjb211bmljYcOnw6NvLCDDqSBwb3Nzw612ZWwgZW5jb250cmFyIGluw7ptZXJvcyBlc3R1ZG9zIHNvYnJlIGEgbWVzbWEgcXVlc3TDo28gZGUgcGVzcXVpc2EuIE5hIMOhcmVhIGRhIHNhw7pkZSwgb25kZSBzZSBwcmVjb25pemEgYSBtZWRpY2luYSBiYXNlYWRhIGVtIGV2aWTDqm5jaWFzLCBhIGlkw6lpYSDDqSBzZW1wcmUgdXRpbGl6YXIgYSBtZWxob3IgZXZpZMOqbmNpYSBkaXNwb27DrXZlbC4gVW1hIHF1ZXN0w6NvIHJlbGV2YW50ZSDDqSBhIGRldGVybWluYcOnw6NvIGRlIHF1YWwgw6kgYSBtZWxob3IgZXZpZMOqbmNpYSBkaXNwb27DrXZlbCBxdWFuZG8gaW7Dum1lcm9zIGVzdHVkb3Mgc29icmUgYSBtZXNtYSBxdWVzdMOjbyBkZSBwZXNxdWlzYSBlc3TDo28gZGlzcG9uw612ZWlzLiBQYXJlY2UgY29uc2Vuc28gcXVlIHVtYSByZXZpc8OjbyBzaXN0ZW3DoXRpY2EgZSBhIGNvbWJpbmHDp8OjbyBkb3MgcmVzdWx0YWRvcyBkb3MgZXN0dWRvcyByZXN1bHRhbnRlcyBkZXZlbSBmYXplciBwYXJ0ZSBkbyBwcm9jZXNzby4NCg0KVW1hIG1hbmVpcmEgc2ltcGxpc3RhIGRlIGNvbWJpbmFyIHJlc3VsdGFkb3MgZGUgdsOhcmlvcyBlc3R1ZG9zIMOpIGp1bnRhciBvcyBkYWRvcyBkb3MgZXN0dWRvcyBlIGFuYWxpc2FyIGNvbW8gc2UgZm9zc2VtIGluZm9ybWHDp8O1ZXMgcmV0aXJhZGFzIGRlIGFwZW5hcyB1bSBhbXBsbyBlc3R1ZG8uIFBvcsOpbSwgZXN0YSBtYW5laXJhIGRlc2NvbnNpZGVyYSBjb21wbGV0YW1lbnRlIGEgdmFyaWFiaWxpZGFkZSwgbyB0YW1hbmhvIGRlIGNhZGEgZXN0dWRvIGUsIG5vIGNhc28gZGUgZW5zYWlvcyBjbMOtbmljb3MsIG8gcHJpbmPDrXBpbyBkYSBhbGVhdG9yaXphw6fDo28uIEVzdGFzIGNhcmFjdGVyw61zdGljYXMgc8OjbyBkZSBleHRyZW1hIGltcG9ydMOibmNpYSB2aXN0byBzdWFzIGluZmx1w6puY2lhcyBub3MgcmVzdWx0YWRvcy4gRGVzdGEgZm9ybWEsIGEgbWFuZWlyYSBtYWlzIGFwcm9wcmlhZGEgw6kgdXRpbGl6YXIgdMOpY25pY2FzIGVzdGF0w61zdGljYXMgYWRlcXVhZGFzLiBFc3RhcyB0w6ljbmljYXMgc2Vyw6NvIGRldGFsaGFkYXMgbmVzdGUgZ3VpYSBwcsOhdGljbyBlIGVuZ2xvYmFtIG8gcXVlIMOpIGNvbmhlY2lkbyBuYSBsaXRlcmF0dXJhIGNvbW8gbWV0YW7DoWxpc2UgKFJvZHJpZ3VlcywgWmllZ2VsbWFubiwgMjAxMCkuDQoNCkEgcHJpbWVpcmEgbWV0YW7DoWxpc2UgZGEgaGlzdMOzcmlhIMOpIGF0cmlidcOtZGEgYW8gZXN0YXTDrXN0aWNvICoqS2FybCBQZWFyc29uKiouIEVtIDE5MDQsIFBlYXJzb24gY29tYmlub3UsIGF0cmF2w6lzIGRlIGNvcnJlbGHDp8O1ZXMsIG9zIGRhZG9zIGRlIGNpbmNvIGVzdHVkb3MgcGFyYSBleGFtaW5hciBvIGVmZWl0byBwcmV2ZW50aXZvIGRlIGlub2N1bGHDp8O1ZXMgY29udHJhIGZlYnJlIGVudMOpcmljYSAoUGVhcnNvbiwgMTkwMDQpLiBPcyBtb3Rpdm9zIHJlbGF0YWRvcyBwb3IgUGVhcnNvbiBwYXJhIGEgY29tYmluYcOnw6NvIGRlIGVzdHVkb3Mgc8OjbywgYWluZGEgaG9qZSwgYXMgcHJpbmNpcGFpcyByYXrDtWVzIHBhcmEgbyB1c28gZGEgbWV0YW7DoWxpc2UuIE8gcHJpbmNpcGFsIGFyZ3VtZW50byDDqSBxdWUgbXVpdG9zIGRvcyBlc3R1ZG9zIHPDo28gcGVxdWVub3MgcGFyYSBwZXJtaXRpciB1bWEgY29uY2x1c8OjbyBjb25macOhdmVsLCBmYXplbmRvIGNvbSBxdWUgbyB0YW1hbmhvIGRvIGVycm8gc2VqYSBncmFuZGUgZSBvIHBvZGVyIGRvIGVzdHVkbyBzZWphIGJhaXhvLg0KDQpFbSAxOTMxIGUgMTkzMiwgVGlwcGV0IGUgRmlzaGVyLCBhcHJlc2VudGFyYW0gbcOpdG9kb3MgcGFyYSBhIGNvbWJpbmHDp8OjbyBkZSB2YWxvcmVzIHAgKFdoaXRlaGVhZCwgMjAwMikuIEVtIDE5MzgsIFlhdGVzIGUgQ29jaHJhbiBjb25zaWRlcmFyYW0gYSBjb21iaW5hw6fDo28gZGUgZXN0aW1hdGl2YXMgYSBwYXJ0aXIgZGUgZGlmZXJlbnRlcyBleHBlcmltZW50b3MgYWdyw61jb2xhcyAoWWF0ZXM7IENvY2hyYW4sIDE5MzgpLiBBIHByaW1laXJhIG1ldGFuw6FsaXNlIHBhcmEgYXZhbGlhciBvIGVmZWl0byBkZSB1bWEgaW50ZXJ2ZW7Dp8OjbyB0ZXJhcMOqdXRpY2EgZm9pIHB1YmxpY2FkYSBlbSAxOTU1IChXaGl0ZWhlYWQsIDIwMDIpLiBOYSBkw6ljYWRhIGRlIDE5NzAsIGEgbWV0YW7DoWxpc2UgcGFzc291IGEgc2VyIHVzYWRhIG5hcyBjacOqbmNpYXMgc29jaWFpcywgcHJpbmNpcGFsbWVudGUgZW0gcGVzcXVpc2FzIGRlIGVkdWNhw6fDo28uIFBvcsOpbSwgbyB0ZXJtbyAibWV0YW7DoWxpc2UiIGFpbmRhIG7Do28gZXJhIHV0aWxpemFkby4NCg0KRm9pIGVtIDE5NzcsIHF1ZSBvIHRlcm1vICJtZXRhbsOhbGlzZSIgZm9pIHV0aWxpemFkbyBwZWxhIHByaW1laXJhIHZleiBlbSB1bSBhcnRpZ28gaW50aXR1bGFkbyAiUHJpbWFyeSwgc2Vjb25kYXJ5IGFuZCBtZXRhYW5hbHlzaXMgb2YgcmVzZWFyY2giIHBlbG8gcHNpY8OzbG9nbyBHZW5lIEdsYXNzIChHbGFzcywgMTk3NikuDQoNCkVtYm9yYSBvIGNvbmNlaXRvIGRlIE1ldGEtQW7DoWxpc2Ugc2VqYSBvcml1bmRvIGRlIHVtYSBlc2NvbGEgZGUgbWV0b2RvbG9naWEgZGVzZW52b2x2aWRhIHBvciBHbGFzcyBlbSAxOTc2LCBlc3R1ZG9zIGdlbsOpdGljb3Mgc29icmUgZ2Vuw7N0aXBvcyBlIGZlbsOzdGlwb3MgasOhIGFicmFuZ2lhbSBlc3NlIGNvbmNlaXRvLCBjb25mb3JtZSBkZXNjcml0byBwb3IgU29rYWwgZSBSb2hsZiAoMTk2OSksIGEgY29tYmluYcOnw6NvIGRlIHbDoXJpYXMgYW1vc3RyYXMgY29tIGluZm9ybWHDp8O1ZXMgc29icmUgbyBtZXNtbyBhc3N1bnRvLCBwYXJhIG9idGVyIGVzdGltYXRpdmFzIG1haXMgcHJlY2lzYXMgZGFzIHByb3BvcsOnw7VlcyBwYXJhbcOpdHJpY2FzLg0KDQpOYSDDoXJlYSBtw6lkaWNhLCBhIG1ldGFuw6FsaXNlIHBhc3NvdSBhIHNlciB1dGlsaXphZGEgY29tIG1haXMgZnJlcXXDqm5jaWEgbmEgZMOpY2FkYSBkZSAxOTgwLiBRdWVzdMO1ZXMgY2hhdmUgZGEgbWVkaWNpbmEgY29tbywgcG9yIGV4ZW1wbG8sIG8gdHJhdGFtZW50byBkZSBkb2Vuw6dhcyBkbyBjb3Jhw6fDo28gZSBkZSBjw6JuY2VyLCBmb3JhbSByZXNwb25kaWRhcyBjb20gYXV4w61saW8gZGEgbWV0YW7DoWxpc2UgKFdISVRFSEVBRCwgMjAwMikuDQoNCkVtIDE5OTMsIHVtYSByZWRlIGNvbXBvc3RhIGRlIGNsw61uaWNvcywgZXBpZGVtaW9sb2dpc3RhcyBlIG91dHJvcyBwcm9maXNzaW9uYWlzIGRlIHNhw7pkZSBmdW5kYXJhbSBvIENvY2hyYW5lIENvbGxhYm9yYXRpb24uIEVzdGEgb3JnYW5pemHDp8OjbyB0ZW0gcG9yIG9iamV0aXZvIGVsYWJvcmFyLCBtYW50ZXIgZSBkaXZ1bGdhciByZXZpc8O1ZXMgc2lzdGVtw6F0aWNhcyBkYSDDoXJlYSBkYSBzYcO6ZGUuDQoNCkRlc2RlIHN1YSBmdW5kYcOnw6NvIGVtIE94Zm9yZCwgbyBDZW50cm8gQ29jaHJhbmUgdGVtIGNyZXNjaWRvIHJhcGlkYW1lbnRlIGUgZGl2ZXJzb3MgY2VudHJvcyBmb3JhbSBmdW5kYWRvcyBuYSBFdXJvcGEsIEFtw6lyaWNhIGRvIE5vcnRlIGUgTGF0aW5hLCDDgWZyaWNhIGUgQXVzdHLDoWxpYSBjb20gY2VudGVuYXMgZGUgcGVzc29hcyBjb2xhYm9yYW5kbyBlbSBncnVwb3MgZGUgcmV2aXPDo28uDQoNCk5vIEJyYXNpbCwgbyBDZW50cm8gQ29jaHJhbmUgZm9pIGluYXVndXJhZG8gZW0gMTk5NiwgZW0gU8OjbyBQYXVsby4gUGFyYSBjb25oZWNlciBtYWlzIHNvYnJlIG8gQ2VudHJvIENvY2hyYW5lIGUgdXRpbGl6YXIgc2V1cyBtYXRlcmlhaXMgZGUgcGVzcXVpc2EsIMOpIHBvc3PDrXZlbCBhY2Vzc2FyIGEgcMOhZ2luYSBuYSBpbnRlcm5ldCA8aHR0cDovL3d3dy5jZW50cm9jb2NocmFuZWRvYnJhc2lsLm9yZy5ici8+LiBOZXN0YSBww6FnaW5hIHPDo28gZW5jb250cmFkb3MgbGlua3MgcGFyYSBvcyBvdXRyb3MgY2VudHJvcyBlIHN1YXMgYmlibGlvdGVjYXMgdmlydHVhaXMuDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQojIyAqKkRlZmluacOnw6NvKioNCg0KTWV0YW7DoWxpc2Ugw6kgdW1hIHTDqWNuaWNhIGVzdGF0w61zdGljYSBhZGVxdWFkYSBwYXJhIGNvbWJpbmFyIHJlc3VsdGFkb3MgcHJvdmVuaWVudGVzIGRlIGRpZmVyZW50ZXMgZXN0dWRvcyBwcm9kdXppbmRvLCBhc3NpbSwgZXN0aW1hdGl2YXMgcXVlIHJlc3VtZW0gbyB0b2RvLCBjaGFtYWRhcyBkZSBlc3RpbWF0aXZhcyBtZXRhbmFsw610aWNhcy4NCg0KUGFyYSBxdWUgbyByZXN1bHRhZG8gZGUgdW1hIG1ldGFuw6FsaXNlIHRlbmhhIHNpZ25pZmljYWRvIGFwbGljYWRvLCBvcyBlc3R1ZG9zIHF1ZSBjb21ww7VlbSBvcyBkYWRvcyBkYSBtZXRhbsOhbGlzZSBkZXZlbSBzZXIgbyByZXN1bHRhZG8gZGUgdW1hIHJldmlzw6NvIHNpc3RlbcOhdGljYS4NCg0KVW1hIHJldmlzw6NvIHNpc3RlbcOhdGljYSBjb25zaXN0ZSBkZSB1bSBjb25qdW50byBkZSByZWdyYXMgcGFyYSBpZGVudGlmaWNhciBlc3R1ZG9zIHNvYnJlIHVtYSBkZXRlcm1pbmFkYSBxdWVzdMOjbyBlLCBlbSBzZWd1aWRhLCBzZWxlY2lvbmFyIHF1YWlzIGRlbGVzIHNlcsOjbyBpbmNsdcOtZG9zIG91IG7Do28gbmEgbWV0YW7DoWxpc2UuIFBhcmEgcXVlIHVtYSByZXZpc8OjbyBzaXN0ZW3DoXRpY2Egc2VqYSB2w6FsaWRhIGFsZ3VtYXMgcmVncmFzIGRldmVtIHNlciBzZWd1aWRhcyAoRmxldGNoZXIsIEZsZXRjaGVyLCAyMDA2KS4gTsOjbyBzw6NvIHJlY2VudGVzIGFzIHRlbnRhdGl2YXMgZGUgdW5pciBvcyByZXN1bHRhZG9zIGRlIGRpZmVyZW50ZXMgZXN0dWRvcy4NCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KDQoNCiMgKipFdGFwYSBkYSBNZXRhbsOhbGlzZSoqDQoNCk7Do28gZXhpc3RlIHVtIHJvdGVpcm8gY29uc2Vuc3VhbCBzb2JyZSBjb21vIHJlYWxpemFyIHVtYSBtZXRhLWFuw6FsaXNlLiBFbnRyZXRhbnRvLCBleGlzdGUgYWxndW1hIHVuaWZvcm1pZGFkZSBhIHJlc3BlaXRvIGRlIGV0YXBhcyBxdWUgZGV2ZW0gc2VyIHNlZ3VpZGFzIChJUldJRyBldCBhbCwgMTk5NDsgRElOTkVTIGV0IGFsLiwgMjAwNTsgU09VU0EsIFJJQkVJUk8sIDIwMDkpIHN1Z2VyZW0gYWxndW1hcyBldGFwYXMgbmVjZXNzw6FyaWFzLCByZXByZXNlbnRhZGFzIHBvcjoNCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCiMjICoqRGVmaW5pciBvIE9iamV0aXZvKioNCg0KUGFyYSBkZWZpbmlyIGEgcXVlc3TDo28gcHJvYmxlbWEgb3UgbyBvYmpldGl2byBkbyB0cmFiYWxobywgbyBwZXNxdWlzYWRvciBkZXZlIHNlIHByZW9jdXBhciBlbSBkZWZpbmlyIHF1ZSDDqSBhIHZhcmnDoXZlbCBjaGF2ZSBvYmpldG8gZGEgYW7DoWxpc2Ugc2lzdGVtw6F0aWNhIGRhcyBkaWZlcmVudGVzIHBlc3F1aXNhcy4gQXNzaW0sIG8gcHJvYmxlbWEgZGV2ZSBkZW1vbnN0cmFyIHNlIG8gZXN0dWRvIG1ldGEtYW5hbMOtdGljbyBwcm9wb3N0byBpcmEgdHJhdGFyIGRlIHZlcmlmaWNhciBvcyBlZmVpdG9zIGFudGVjZWRlbnRlcywgZG9zIGNvbnNlcXVlbnRlcyBvdSBkZSBhbWJvcyBzb2JyZSBhIHZhcmnDoXZlbC1jaGF2ZS4gDQoNCg0KTyBwcm9ibGVtYSBkZSBwZXNxdWlzYSDDqSBvIG9iamV0aXZvIHByaW5jaXBhbCBkbyB0cmFiYWxobywgZ2VyYWxtZW50ZSBwcm9wb3N0byBkZSBmb3JtYSBpbnRlcnJvZ2F0aXZhLCBhcXVpbG8gcXVlIHNlIHByZXRlbmRlIHJlYWxpemFyLiBBaW5kYSBuYSBldGFwYSBkZSBkZWZpbmnDp8OjbyBkbyBvYmpldGl2bywgbyBwZXNxdWlzYWRvciB0YW1iw6ltIHBvZGUgYSBwYXJ0aXIgZGUgcmV2aXPDo28gZGEgdGVvcmlhLCBlbGFib3JhciBoaXDDs3Rlc2VzIHNvYnJlIG8gZWZlaXRvIHBvc2l0aXZvIG91IG5lZ2F0aXZvIGRhIHZhcmnDoXZlbC1jaGF2ZS4gDQoNCkEgZWxhYm9yYcOnw6NvIGRlIHVtIG91IG1haXMgaGlww7N0ZXNlcyDDqSBvcGNpb25hbCBwYXJhIGNhZGEgdHJhYmFsaG8gbWV0YS1hbmFsw610aWNvLiBUb2RhdmlhLCBzZSBmb3IgZWxhYm9yYWRhLCDDqSBpbXBvcnRhbnRlIHF1ZSBvIGF1dG9yIGFwcmVzZW50ZSBvcyBhcmd1bWVudG9zIHRlw7NyaWNvcyBxdWUganVzdGlmaXF1ZW0gb3UgbsOjbyB1bWEgYXNzb2NpYcOnw6NvIGVudHJlIHZhcmnDoXZlaXMgZSBvIHNlbnRpZG8gZGVzc2EgYWdyZWdhw6fDo28uICAgICAgICAgICANCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCiMjICoqQnVzY2FyIGFzIFB1YmxpY2HDp8O1ZXMgbmFzIEJhc2VzIGRlIERhZG9zKioNCg0KQXDDs3MgYSBleHBsaWNhw6fDo28gZGEgZGVmaW5pw6fDo28gZG8gb2JqZXRpdm8sIG8gcHLDs3hpbW8gcGFzc28gw6kgcGVzcXVpc2FyIGFzIGJhc2VzLCB1bWEgZGFzIHRhcmVmYXMgY3LDrXRpY2FzIGRhIG1ldGEtYW7DoWxpc2UuIFVtYSBib2EgYmFzZSBkZSBkYWRvcyBkZXZlIGRpc3BvbmliaWxpemFyIHBlc3F1aXNhcyBxdWUgcGFzc2FyYW0gcG9yIHVtIGNyaXZvIG1haXMgcHJvZnVuZG8gZW0gdGVybW9zIGRlIGF2YWxpYcOnw6NvIHBhcmEgYSBwdWJsaWNhw6fDo28sIHRhbCBjb21vIG8gc2lzdGVtYSBkb3VibGUgYmxpbmQgcmV2aWV3IChkdXBsYSByZXZpc8OjbyBjZWdhKS4gDQoNClB1YmxpY2HDp8O1ZXMgZW0gcGVyacOzZGljb3MgZSBjb25ncmVzc29zIHF1ZSBwb3NzdWFtIG1lbm9yIHJlY29uaGVjaW1lbnRvIGNpZW50aWZpY28gcG9kZW0gc2VyIGFkaWNpb25hZGFzIHBhcmEgZWxhYm9yYcOnw6NvIGRlIGFtb3N0cmFzIG1haW9yZXMsIG1hcyBkZXZlbSBzZXIgY29kaWZpY2FkYXMgcGFyYSBjb250cm9sZS4gUGFyYSBCZXJ3YW5nZXIgZXQgYWwgKDIwMDcpLCB1bWEgbWV0YS1hbsOhbGlzZSBkZXZlIHRlbnRhciBhIG3DoXhpbWEgZXZpZGVuY2lhIGV4aXN0ZW50ZSBzb2JyZSB1bSBhc3N1bnRvLiBQb3IgaXNzbywgZGV2ZS1zZSB1dGlsaXphciBhcyBiYXNlcyBkZSBkYWRvcyBtYWlzIHJlY29uaGVjaWRhcyBubyBzZXUgY2FtcG8gZGUgY29uaGVjaW1lbnRvLCBjb21vIGEgUFJPUVVFU1QgZSBhIEVCU0NPIHPDo28gcGFyYSBvIG1hcmtldGluZy4gDQoNCkEgZXN0cmF0w6lnaWEgZGUgYnVzY2EgZSBzZWxlw6fDo28gZGV2ZSBzZXIgZGVmaW5pZGEgYW50ZXMgZGEgY29uc3VsdGEgYXMgZGlmZXJlbnRlcyBiYXNlcyBkZSBkYWRvcywgYSBtYW50aWRhIGFvIGxvbmdvIGRhIHBlc3F1aXNhLCBwb2lzIHVtYSBidXNjYSBhbXBsYSBlIHNpc3RlbcOhdGljYSDDqSB1bSBkb3MgY3JpdMOpcmlvcyBkZSBxdWUgYXV4aWxpYW0gbmEgZ2FyYW50aWEgZGEgcXVhbGlkYWRlIGRhcyBwZXNxdWlzYXMgb2J0aWRhcy4gDQogICAgIA0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KICAgICANCiMjICoqRGVmaW5pciBvcyBDcml0w6lyaW9zIGRlIEJ1c2NhcioqDQoNCkVzdGEgw6kgdW1hIHRhcmVmYSBxdWUgdGFtYsOpbSB2YXJpYSBlbSBjYWRhIHBlc3F1aXNhLCBwb2lzIG8gcGVzcXVpc2Fkb3IgZGV2ZXJhIGNyaWFyIGNyaXTDqXJpb3MgZGUgYnVzY2EsIGRlIHNlbGXDp8OjbyBlIGRlIGluY2x1c8OjbyBkb3MgYXJ0aWdvcyBhIHNlcmVtIGludmVzdGlnYWRvcy4gDQoNCkEgY2xhcmV6YSBkYSBleHBvc2nDp8OjbyBkb3MgY3JpdMOpcmlvcyB0ZW0gZG9pcyBvYmpldGl2b3MgcHJpbmNpcGFpczogcGVybWl0aXIgcXVlIG8gcmV2aXNvciBhdmFsaWUgYSBxdWFsaWRhZGUgZGEgYnVzY2EgZSBjb25zZW50aXIgcXVlIGZ1dHVyb3MgcGVzcXVpc2Fkb3JlcyBhZG90ZW0gY3JpdMOpcmlvcyBzZW1lbGhhbnRlcyBwYXJhIG5vdmFzIHBlc3F1aXNhcy4gT3MgY3JpdMOpcmlvcyBkZSBleGNsdXPDo28gZGV2ZW0gc2VyIGRlc2NyaXRvcyBlIHJpZ29yb3NhbWVudGUgc2VndWlkb3MgcGVsbyBhbmFsaXN0YSAoQkVSV0FOR0VSIGV0IGFsLCAyMDA3KS4gRGVzdGEgZm9ybWEsIG8gbGVpdG9yIHBvZGUgZGVjaWRpciBzZSBvcyByZXN1bHRhZG9zIHBvc3N1ZW0gcmVsZXbDom5jaWEgZSBhcGxpY2FiaWxpZGFkZS4gDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQojIyAqKlNlbGVjaW9uYXIgYXMgUGVzcXVpc2FzKioNCg0KQXDDs3MgdW1hIGFtcGxhIGJ1c2NhIGRhcyBwdWJsaWNhw6fDtWVzIGVtIGRpdmVyc29zIGJhc2VzIGRlIGRhZG9zIGNvbSBiYXNlIGVtIGNyaXTDqXJpb3MgY2xhcmEgZSBwcmVjaXNhbWVudGUgZGVmaW5pZG9zLCBvIHBlc3F1aXNhZG9yIGRldmUgc2UgcHJlb2N1cGFyIGVtIHNlbGVjaW9uYXIgYXBlbmFzIGFxdWVsYXMgcGVzcXVpc2FzIHF1ZSBwb3NzdWFtIGFzIGluZm9ybWHDp8O1ZXMgYnVzY2FkYXMuIE5lbSB0b2RvcyBvcyB0cmFiYWxob3Mgb2J0aWRvcyBwb3NzdWVtIGluZm9ybWHDp8O1ZXMgdXRlaXMgcXVlIHBvc3NhbSBzZXIgY29udmVydGlkYXMgZW0gdW1hIGVzdGF0w61zdGljYS4gDQoNCkEgbWV0YS1hbsOhbGlzZSBwb2RlIHNlciBlbnRlbmRpZGEgY29tbyB1bWEgZm9ybWEgZGUgcGVzcXVpc2EgbmEgcXVhbCBjYWRhIHBlc3F1aXNhIGluZGl2aWR1YWwgw6kgY29uc2lkZXJhZGEgY29tbyB1bSByZXNwb25kZW50ZS4gRGUgY2FkYSB1bWEgZGVsYXMgc8OjbyBleHRyYcOtZGFzIGFzIGluZm9ybWHDp8O1ZXMgcXVlIGludGVncmFyw6NvIHVtIGJhbmNvIGRlIGRhZG9zIGVzcGVjaWFsbWVudGUgY29uc3RydcOtZG9zIHBhcmEgY2FkYSBtZXRhLWFuw6FsaXNlLiANCg0KTmVzc2UgYmFuY28gZGUgZGFkb3MsIGNhZGEgZXN0dWRvIGVudHJhIGNvbW8gdW1hIGxpbmhhLCBlbnF1YW50byBhcyBpbmZvcm1hw6fDtWVzIGV4dHJhw61kYXMgZGUgY2FkYSBlc3R1ZG8gc8OjbyBhcyBjb2x1bmFzLiBFbSBzZWd1aWRhLCBlc3NlIGJhbmNvIGRlIGRhZG9zIMOpIGFuYWxpc2FkbyB0ZW5kbyBjb21vIG9iamV0aXZvIHByaW5jaXBhbCBvIGPDoWxjdWxvIGRvIHRhbWFuaG8gZG8gZWZlaXRvLiANCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KIyMgKipBdmFsaWFyIGEgSGV0ZXJvZ2VuZWlkYWRlKioNCg0Kw6kgbXVpdG8gcmFybyBxdWUgcGVzcXVpc2FzIGVzdHVkZW0gZSBtZW5zdXJlbSBhcyBtZXNtYXMgdmFyacOhdmVpcyBkZSBmb3JtYSBzZW1lbGhhbnRlLiBPdSBzZWphLCDDqSBtdWl0byBjb211bSBxdWUgaGFqYSBoZXRlcm9nZW5laWRhZGUgbm8gYmFuY28gZGUgZGFkb3MuIFBhcmEgZ2FyYW50aXIgYSBxdWFsaWRhZGUgZGFzIGFuYWxpc2VzLCBvIHBlc3F1aXNhZG9yIGRldmUgYXZhbGlhciBvcyBtb3Rpdm9zIGRhIHZhcmnDom5jaWEgZW50cmUgb3MgZXN0dWRvcywgc2UgZXN0YSB2YXJpYcOnw6NvIGZvaSBpbXByZXZpc3RhIGUgc2UgZm9pIGNhdXNhZGEgcG9yIGFzcGVjdG9zIG1ldG9kb2zDs2dpY29zLCB0YWlzIGNvbW8gbyB1c28gbcOpdG9kb3MgZXhwZXJpbWVudGFpcyBvdSBzdXZleXMsIGVzY2FsYXMgZGUgbWVkaWRhcyBkaWZlcmVudGVzLCBldGMuIChESU5ORVMgZXQgYWwuLCAyMDA1KS4gIA0KDQpDYWxjdWxhciBvcyByZXN1bHRhZG9zIGRlIGNhZGEgZXN0dWRvLCBjb21iaW5hbmRvIG9zIGVmZWl0b3M6IEVtIGVzdGF0w61zdGljYSwgdW0gdGFtYW5obyBkZSBlZmVpdG9zIChlZmZlY3Qtc2l6ZXMpIMOpIHVtYSBtZWRpZGEgZGEgZm9yw6dhIGRvIHJlbGFjaW9uYW1lbnRvIGVudHJlIGR1YXMgdmFyacOhdmVpcyBlbSB1bWEgcG9wdWxhw6fDo28uIE91IHNlamEsIMOpIGEgbWFnbml0dWRlIGRvIGVmZWl0byBxdWUgdW1hIHZhcmnDoXZlbCBleGVyY2Ugc29icmUgYSBvdXRyYSBlbSB0ZXJtb3MgZGUgYXNzb2NpYcOnw6NvLiBVbSBlZmZlY3Qtc2l6ZSBjYWxjdWxhZG8gYSBwYXJ0aXIgZG9zIGRhZG9zIMOpIHVtYSBlc3RhdMOtc3RpY2EgZGVzY3JpdGl2YSBxdWUgdmVpY3VsYSBhIG1hZ25pdHVkZSBlc3RpbWFkYSBkZSB1bSByZWxhY2lvbmFtZW50bywgc2VtIHF1ZSBzZSBmYcOnYSBxdWFscXVlciBkZWNsYXJhw6fDo28gc29icmUgYSBleGlzdMOqbmNpYSBkZSB1bWEgcmVsYcOnw6NvIGVzdGF0aXN0aWNhbWVudGUgc2lnbmlmaWNhbnRlIGVudHJlIGFzIHZhcmnDoXZlaXMgKEJSRUkgZXQgYWwuLCAyMDExKS4gDQoNCk8gb2JqZXRpdm8gZG8gcGVzcXVpc2Fkb3IgbnVtYSBtZXRhLWFuw6FsaXNlIMOpIHZlcmlmaWNhciBxdWFsIMOpIG8gdGFtYW5obyBkbyBlZmVpdG8gZW50cmUgZHVhcyB2YXJpw6F2ZWlzLiBFc3NlIHRhbWFuaG8gZG8gZWZlaXRvIMOpIGRldGVybWluYWRvIHBlbG8gZWZmZWN0LXNpemUsIHBvZGVuZG8gc2VyIGlkZW50aWZpY2Fkb3MgZGlmZXJlbnRlcyB0aXBvcyBuYSBsaXRlcmF0dXJhLCBmb3JuZWNpZG9zIHBlbG9zIGF1dG9yZXMuIEVtIG91dHJhcyBwYWxhdnJhcywgb3MgZWZmZWN0LXNpemVzIHPDo28gb2J0aWRvcyBhdHJhdsOpcyBkYSBjb252ZXJzw6NvIGRvcyBlZmVpdG9zIGRhcyBhc3NvY2lhw6fDtWVzLCBzZW50byB0IGRlIHN0dWRlbnQsIEYgZGEgYW7DoWxpc2UgZGUgdmFyacOibmNpYSwgRiBkYSBBTkNPVkEsIGRpZmVyZW7Dp2EgZGUgbcOpZGlhcyBhbnRlcyBlIGRlcG9pcyBkbyB0cmF0YW1lbnRvLCBRdWktcXVhZHJhZG8sIGNvcnJlbGHDp8OjbyBkZSBQZWFyc29uLCByIGUgb3V0cm9zIChMSVBTRVk7IFdJTFNPTiwgMjAxMSkuDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCiMjICoqQXZhbGlhciBvIEVmZWl0byBkYSBWYXJpYcOnw6NvKiogDQoNClVtYSBkYXMgbWVsaG9yZXMgb3DDp8O1ZXMgcGFyYSBhdmFsaWFyIG8gZWZlaXRvIGRhIHZhcmlhw6fDo28gw6kgdXNhciBvIGdyw6FmaWNvIGNoYW1hZG8gRk9SRVNUIFBMT1QuIE8gZ3LDoWZpY28gc2VydmUgcGFyYSBpbHVzdHJhciBhIGZvcsOnYSByZWxhdGl2YSBkb3MgZWZlaXRvcyBkZSB0cmF0YW1lbnRvIGVtIG3Dumx0aXBsb3MgZXN0dWRvcyBlIGEgcXVhbnRpZGFkZSBkZSB2YXJpYWJpbGlkYWRlIGRvcyBlZmVpdG9zLCBtb3N0cmFuZG8gZGVzZGUgZGUgcmVzdWx0YWRvcyBleHRyZW1hbWVudGUgbmVnYXRpdm9zIGEgZm9ydGVtZW50ZSBwb3NpdGl2b3MuIA0KDQpBc3NpbSwgZWxlcyBwZXJtaXRlbSB1bWEgYW7DoWxpc2UgdmlzdWFsIHRhbnRvIGRlIGVmZmVjdC1zaXplIHF1YW50byBkb3MgaW50ZXJ2YWxvcyBkZSBjb25maWFuw6dhIGZhY2lsaXRhbmRvIGEgY29tcGFyYcOnw6NvIHZpc3VhbCBkb3MgYWNoYWRvcyBkZSBkaWZlcmVudGVzIGVzdHVkb3MgKEJFUldBTkdFUiBldCBhbCwgMjAwNykuIA0KDQoNCk9zIHJlc3VsdGFkb3MgZG9zIGVmZWl0b3MgasOhIHRyYW5zZm9ybWFkb3MgZW0gciBvdSBkIHBvciB1bWEgbWV0YS1hbsOhbGlzZSBwb2RlbSBzZXIgYXZhbGlhZG9zIHBvciBtZWlvIGRlIGludGVydmFsb3MgZGUgY29uZmlhbsOnYSwgb3Ugc2VqYSwgYSBlc3RpbWF0aXZhIGRlIHVtIHBhcsOibWV0cm8gZGUgaW50ZXJlc3NlIG5hIHBvcHVsYcOnw6NvLiBPIG9iamV0aXZvIGRlIHVtIGludGVydmFsbyBkZSBjb25maWFuw6dhIMOpIG1vc3RyYXIgcXVhbCBhIHZhcmlhw6fDo28gZGEgbcOpZGlhIGRvcyBlc3R1ZG9zIGFib3JkYWRvcy4gQWzDqW0gZGlzc28sIGVsZSBwZXJtaXRlIGVzdGFiZWxlY2VyIHVtYSByZWZlcsOqbmNpYSwgY29tIGEgcXVhbCBwb2RlbSBzZXIgY29tcGFyYWRvcyBvcyByZXN1bHRhZG9zIGRlIGVzdHVkb3MgZnV0dXJvcy4gT3Ugc2VqYSwgYW8gaW52w6lzIGRlIGVzdGltYXIgbyBwYXLDom1ldHJvIHBvciBtZWlvIGRlIHVtIMO6bmljbyB2YWxvciwgbyBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYSBzZXJ2ZSBwYXJhIG1vc3RyYXIgdW0gaW50ZXJ2YWxvIG9uZGUgYXF1ZWxlIHBhcsOibWV0cm8gcHJvdmF2ZWxtZW50ZSBzZSBlbmNvbnRyYSAoYSBwYXJ0aXIgZGUgdW0gbsOtdmVsIGRlIHNpZ25pZmljw6JuY2lhIGVzY29saGlkbyBwZWxvIHBlc3F1aXNhZG9yKS4gIA0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQojIyAqKkludGVycHJldGFyIG9zIFJlc3VsdGFkb3MqKiANCg0KQSDDumx0aW1hIGV0YXBhIGRhIHJlYWxpemHDp8OjbyBkZSB1bWEgbWV0YS1hbsOhbGlzZSDDqSBhIGludGVycHJldGHDp8OjbyBkb3MgcmVzdWx0YWRvcyBkZSB1bSBtb2RlbG8gZ2xvYmFsLiBSZWNvbWVuZGFtb3MgcXVlIHVtYSB0YWJlbGEgZmluYWwgZGUgbWV0YS1hbsOhbGlzZSBhcHJlc2VudGUsIHBlbG8gbWVub3MsIG9zIHNlZ3VpbnRlcyBkYWRvczoNCg0KDQotICAgKipOw7ptZXJvIGRlIEVzdHVkb3MqKjsgDQotICAgKipOw7ptZXJvIGRlIG9ic2VydmHDp8O1ZXMqKjsNCi0gICAqKlRhbWFuaG8gZGEgQW1vc3RyYSAoTikqKjsNCi0gICAqKlZhbG9yIGRlIHIgc2ltcGxlcyoqOyANCi0gICAqKlZhbG9yIGRlIFoqKjsNCi0gICAqKlZhbG9yIGRlIHIgY29ycmlnaWRvcyBwZWxhIGNvbmZpYWJpbGlkYWRlKio7DQotICAgKipWYWxvciBkZSByIGNvcnJpZ2lkb3MgcGVsYSBhbW9zdHJhKio7DQotICAgKipFcnJvIHBhZHLDo28gZG8gZWZmZWN0LXNpemUqKjsNCi0gIAkqKlZhbG9yIGRlIGQgZGUgQ29oZW4sIGNhbGN1bGFkbyBhIHBhcnRpciBkbyBlZmZlY3Qtc2l6ZSoqOw0KLSAgICoqSW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EqKjsNCi0gICAqKlRlc3RlIGRlIGhvbW9nZW5laWRhZGUgKFEpKio7DQotICAgKioqVGVzdGUgScKyKiouICAgDQoNCg0KRGVudHJlIHRvZG9zIG9zIGRhZG9zIHByb3Bvc3RvcywgaW5kaXZpZHVhbG1lbnRlLCBvICoqZWZmZWN0LXNpemUqKiDDqSBhIG1lZGlkYSBtYWlzIGltcG9ydMOibmNpYSBwYXJhIGludGVycHJldGHDp8OjbyBkb3MgcmVzdWx0YWRvcywgcHJpbmNpcGFsbWVudGUgYSB2ZXJzw6NvIGRvIGVmZmVjdC1zaXplIHF1ZSBlc3TDoSBwb25kZXJhZGEgcGVsYSBhbW9zdHJhIGUgcGVsYSBjb25maWFiaWxpZGFkZSwgcG9pcyBlbGEgcGVybWl0ZSBhbyBwZXNxdWlzYWRvciBhdmFsaWFyIGEgZm9yw6dhIGRhIHJlbGHDp8OjbyBlbnRyZSBhcyB2YXJpw6F2ZWlzIHByaW5jaXBhaXMgZG8gZXN0dWRvLCBvdSBzZWphLCBhdmFsaWFyIHNlIGjDoSB1IG0gZWZlaXRvIGZyYWNvLCBtw6lkaW8gb3UgZm9ydGUsIGUgdGlyYXIgYXMgY29uY2x1c8O1ZXMgYSByZXNwZWl0byBkYSBmb3LDp2EgZGEgcmVsYcOnw6NvIGVudHJlIGFzIHZhcmnDoXZlaXMuDQoNCk5lc3NlIGNvbnRleHRvLCBvcyBwcmluY2lwYWlzIHBhc3NvcyBwYXJhIHJlYWxpemHDp8OjbyBkZSB1bWEgbWV0YS1hbsOhbGlzZSBzw6NvIHbDoXJpb3MsIGRldGFsaGFkb3MsIGUgcmVxdWVyZW0gcG9yIHBhcnRlIGRvIHBlc3F1aXNhZG9yIGNvbmhlY2ltZW50byBzdWJzdGFuY2lhbCBkZSBlc3RhdMOtc3RpY2EgZGVzY3JpdGl2YSBlIGluZmVyZW5jaWFsLCBhbMOpbSBkZSBkb23DrW5pbyBkZSB1bSBib20gc29mdHdhcmUuIA0KDQpBIHByaW5jaXBhbCBkZXN2YW50YWdlbSBkYSBtZXRhLWFuw6FsaXNlIMOpIHF1ZSBlc3RhIG7Do28gcG9kZSBjb21wZW5zYXIgYXMgbGltaXRhw6fDtWVzIGluZXJlbnRlcyBhb3MgZXN0dWRvcyBlbSBxdWUgc2UgYmFzZWlhLCB1bWEgdmV6LCBxdWUgZWxlcyBwcsOzcHJpb3MgdMOqbSBlcnJvcywgc2lzdGVtw6F0aWNvcyBlIGFsZWF0w7NyaW9zLCBxdWUgbsOjbyBzw6NvIGNvcnJpZ2lkb3MgcGVsYSBzdWEgYW7DoWxpc2UgY29uanVudGEsIHNlbmRvIHBlbG8gY29udHLDoXJpbywgYWRpdGl2b3MgKFJlc3NpbmcsIDIwMDkpLg0KDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCg0KIyAqKlZpc3VhbGl6YcOnw6NvIEdyw6FmaWNhKioNCiMjICoqQXNwZXRvcyBHZXJhaXMqKg0KDQpBIG1hbmVpcmEgbWFpcyB1c3VhbCBkZSBhcHJlc2VudGFyIG9zIHJlc3VsdGFkb3MgZGUgdW1hIE1ldGEtQW7DoWxpc2Ugw6kgbyBncsOhZmljbyBjaGFtYWRvICoqRm9yZXN0IFBsb3QgKGdyw6FmaWNvIGVtIGZsb3Jlc3RhKSoqLiBFc3RlIGdyw6FmaWNvIG1vc3RyYSBpbmZvcm1hw6fDtWVzIGluZGl2aWR1YWlzIGRvcyBlc3R1ZG9zIGUgb3MgcmVzdWx0YWRvcyBkYSBpbnRlcmHDp8Ojby4gIA0KDQpQYXJhIGNhZGEgZXN0dWRvIG8gZ3LDoWZpY28gYXByZXNlbnRhIGEgbWVkaWRhIGRlIGVmZWl0byBlIHNldSBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYShJQyksIHNlbmRvIHF1ZSBhIG1lZGlkYSBkZSBlZmVpdG8gw6kgcmVwcmVzZW50YWRhIHBvciB1bSBzw61tYm9sbyBxdWUgcG9kZSwgcG9yIGV4ZW1wbG8sIHNlciB1bSAqKnF1YWRyYWRvKiosIHVtICoqY8OtcmN1bG8qKiwgdW0gKipsb3NhbmdvKiosIG91IG91dHJhIGZpZ3VyYSBkZXBlbmRlbmRvIGRvIHNvZnR3YXJlLiANCg0KTyB0YW1hbmhvIGRlc3RlIHPDrW1ib2xvIMOpIHByb3BvcmNpb25hbCBhbyBwZXNvIGRvIGVzdHVkbyBuYSBNZXRhLUFuw6FsaXNlLCBxdWFudG8gbWFpb3IgbyBwZXNvLCBtYWlvciBvIHRhbWFuaG8gZG8gc8OtbWJvbG8gZGEgbWVkaWRhIGRlIGVmZWl0by4gVGFtYsOpbSDDqSBleGliaWRvIGVtIHRvcm5vIGRhIGVzdGltYXRpdmEgZGEgbWVkaWRhIGRlIGVmZWl0byB1bWEgbGluaGEgaG9yaXpvbnRhbCBxdWUgw6kgbyByZXNwZWN0aXZvIGludGVydmFsbyBkZSBjb25maWFuw6dhIChJQyksIHNlbmRvIHF1ZSBxdWFudG8gbWFpb3IgZXN0YSBsaW5oYSwgbWFpb3Igw6kgYSB2YXJpYWJpbGlkYWRlIGRlbnRybyBkbyBlc3R1ZG8uDQoNCk5lc3NlIGNvbnRleHRvLCBvcyByZXN1bHRhZG9zIHJlcHJlc2VudGFkb3Mgw6AgZXNxdWVyZGEgZGEgbGluaGEgdmVydGljYWwgZXZpZGVuY2lhbSBxdWUgbyBldmVudG8gw6kgbWFpcyBwcm9wZW5zbyBhIG9jb3JyZXIgbm8gZ3J1cG8gZGUgQ29udHJvbGU7IGNvbnRyYXJpYW1lbnRlIG9zIHJlc3VsdGFkb3MgcmVwcmVzZW50YWRvcyDDoCBkaXJlaXRhIGRlc3RhIGxpbmhhIGV2aWRlbmNpYW0gcXVlIG8gZXZlbnRvIHRlbSBtYWlvciBwcm9wZW5zw6NvIGEgb2NvcnJlciBubyBncnVwbyBFeHBlcmltZW50YWwgb3UgVHJhdGFtZW50byAoUmFtYWxobywgMjAwNTsgTWFydGluZXosIDIwMDcpLg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQojIyAqKkZvcmVzdCBQbG90KioNCg0KbyBncsOhZmljbyBlbSBmbG9yZXN0YSB0cmFkaWNpb25hbCDDqSBjb21wb3N0byBwb3IgNiBjb2x1bmFzIHF1ZSBzdW1hcml6YW0gb3MgcmVzdWx0YWRvcyBkYXMgZGl2ZXJzYXMgYWJvcmRhZ2Vucy4NCg0KQSBwcmltZWlyYSBjb2x1bmEgZG8gZ3LDoWZpY28gY29ycmVzcG9uZGUgw6AgaWRlbnRpZmljYcOnw6NvIGRvIGVzdHVkbyAobmVzdGUgY2FzbyByZXByZXNlbnRhZG8gcGVsbyBBdXRvciBlIHBlbGEgcmVmZXLDqm5jaWEgY29ycmVzcG9uZGVudGUpLCBzdWJkaXZpZG9zIGRlIGFjb3JkbyBjb20gYSBhYm9yZGFnZW0gdXRpbGl6YWRhIG5vcyBlbnNhaW9zIGNsw61uaWNvczogbcOpdG9kb3MgcHJhZ23DoXRpY29zLCBjb21wb3J0YW1lbnRhaXMgb3UgY29nbml0aXZvLWNvbXBvcnRhbWVudGFpcy4gDQoNCk5hIHNlZ3VuZGEgZSBuYSB0ZXJjZWlyYSBjb2x1bmFzIGVzdMOjbyByZXByZXNlbnRhZGFzIGFzIHByb3BvcsOnw7VlcyBkZSBldmVudG9zIGRlIGludGVyZXNzZSAocmVjYcOtZGEpIGVtIGNhZGEgZXN0dWRvIHBhcmEgb3MgZ3J1cG9zIGludGVydmVuw6fDo28gZSBjb250cm9sZSByZXNwZWN0aXZhbWVudGUuDQoNCk8gdmFsb3IgYXByZXNlbnRhZG8gbmEgcXVpbnRhIGNvbHVuYSBjb3JyZXNwb25kZSBhbyBwZXNvIGRlIGNhZGEgcHVibGljYcOnw6NvIHBhcmEgbyByZXN1bHRhZG8gYWdyZWdhZG8gZGEgbWV0YW7DoWxpc2UuIA0KDQpBIHF1YXJ0YSBlIGEgc2V4dGEgY29sdW5hcyBjb3JyZXNwb25kZW0gYW8gdGFtYW5obyBkbyBlZmVpdG8gZGUgY2FkYSBlc3R1ZG8sIGFxdWkgcmVwcmVzZW50YWRvIHBlbG8gUlIgZSBwb3Igc2V1cyByZXNwZWN0aXZvcyBpbnRlcnZhbG9zIGRlIGNvbmZpYW7Dp2EgKElDKSBkZSA5NSUsIGVzdGFuZG8gYXByZXNlbnRhZG8gZGUgZm9ybWEgZ3LDoWZpY2EgbmEgcXVhcnRhIGNvbHVuYSBlIGRlIGZvcm1hIG51bcOpcmljYSBuYSDDumx0aW1hLg0KDQoNCiMjIyAqKkNvbXBvbmVudGVzIGRvIEZvcmVzdCBQbG90KioNCg0KLSAgICoqUXVhZHJhZG8qKiA6IMOpIG8gUGVzbyBkZSBDYWRhIEVzdHVkbyAoYW1vc3RyYSk7DQotICAgKipJQyoqOiBJbnRlcnZhbG8gZGUgQ29uZmlhbsOnYSBwYXJhIGNhZGEgZXN0dWRvOw0KLSAgICoqTGluaGEgZGUgTnVsaWRhZGUqKjoNCi0gICAqKkxvc2FuZ28qKjogRXN0aW1hdGl2YSBkbyBFZmVpdG8gZG8gUmVzdWx0YWRvIENvbXBvc3RvLg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQojIyAqKkZ1bm5pbCBQbG90KioNCg0KT3MgZGFkb3Mgc2VsZWNpb25hZG9zIHBhcmEgY29tcG9yIGEgbWV0YS1hbsOhbGlzZSBwb2RlbSBlc3RhciBpbmZsdWVuY2lhZG9zIHBlbG8gKipWacOpcyBkZSBQdWJsaWNhw6fDo28qKi4gRW50ZW5kZS1zZSBwb3IgdmnDqXMgZGUgcHVibGljYcOnw6NvIGEgdGVuZMOqbmNpYSBkZSBvcyByZXN1bHRhZG9zIHB1YmxpY2Fkb3MgZXN0YXJlbSBzaXN0ZW1hdGljYW1lbnRlIGRpZmVyZW50ZXMgZGEgcmVhbGlkYWRlLiANCg0KDQpBbsOhbGlzZSBkZSBlbnNhaW9zIGNsw61uaWNvcyBjb20gcHJvdG9jb2xvIHJlZ2lzdHJhZG8gbmEgYmFzZSBkZSByZWdpc3Ryb3MgKipDbGluaWNhbFRyaWFsLmdvdioqIHJldmVsb3UgcXVlIG1lbm9zIGRlIDcwJSBkb3MgZXN0dWRvcyBzw6NvIHB1YmxpY2Fkb3MgKFJPU1MgZXQgYWwuLCAyMDEyKS4gDQoNCg0KQSBuw6NvIHB1YmxpY2HDp8OjbyBkZSByZXN1bHRhZG9zIHBvZGUgc2VyIGRldmlkYSDDoCBkZWNpc8OjbyBkbyBhdXRvciBvdSBkbyBmaW5hbmNpYWRvciBkbyBlc3R1ZG8sIHF1ZSBuw6NvIHN1Ym1ldGVtIHBhcmEgcHVibGljYcOnw6NvIG9zIGFjaGFkb3MgZGVzZmF2b3LDoXZlaXMsIG91IGRvcyBlZGl0b3JlcyBkZSBwZXJpw7NkaWNvcyBjaWVudMOtZmljb3MsIHF1ZSBwb2RlbSBuw6NvIHRlciBpbnRlcmVzc2UgZW0gZGl2dWxnYXIgcmVzdWx0YWRvcyBuZWdhdGl2b3MgKHNlbSBzaWduaWZpY8OibmNpYSBlc3RhdMOtc3RpY2EpLiANCg0KTmFzIHJldmlzw7VlcyBzaXN0ZW3DoXRpY2FzLCBhIHByZXNlbsOnYSBkZXNzZSB2acOpcyBwb2RlIHNlciBpZGVudGlmaWNhZGEgcG9yIG1laW8gZGUgKipHcsOhZmljbyBkZSBGdW5pbCAoRnVubmlsIFBsb3QpKiogZSBkZSB0ZXN0ZXMgZXN0YXTDrXN0aWNvcyAoSGlnZ2luczsgR3JlZW4sIDIwMTEpLg0KDQpBIHV0aWxpemHDp8OjbyBkZXNzYXMgdMOpY25pY2FzIMOpIHJlY29tZW5kYWRhIHBhcmEgbWV0YS1hbsOhbGlzZXMgY29tIGRleiBlc3R1ZG9zIG91IG1haXMgZSBiYXNlaWEtc2UgZW0gcXVlc3TDtWVzIGRlIGVzdGltYXRpdmEgZSBkZSBwcmVjaXPDo28uIE9zIGVzdHVkb3MgcG91Y28gcHJlY2lzb3MsIGVtIGdlcmFsIHJlYWxpemFkb3MgY29tIGFtb3N0cmFzIGRlIHRhbWFuaG8gcGVxdWVubywgcG9kZXLDo28gZW5jb250cmFyIHJlc3VsdGFkb3MgcG9zaXRpdm9zIG91IG5lZ2F0aXZvcyAoZXN0YXRpc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvcyBvdSBuw6NvKSBwb3IgaW5mbHXDqm5jaWEgZG8gYWNhc28uDQoNCkVzdHVkb3MgZGUgbWFpb3IgcHJlY2lzw6NvLCBlbSBnZXJhbCBlbSBtZW5vciBuw7ptZXJvLCBlc3RhcmlhbSBtYWlzIHByw7N4aW1vcyBkbyB2YWxvciByZWFsIGUgc2l0dWFkb3MgbmEgcGFydGUgbWFpcyBlc3RyZWl0YSBkbyBncsOhZmljbyBkZSBmdW5pbC4gVGFtYsOpbSDDqSBwb3Nzw612ZWwgZXN0aW1hciBhIHByZXNlbsOnYSBkZXNzZSB2acOpcyBlbSBiYXNlcyBkZSByZWdpc3Ryb3MgZGUgZXN0dWRvcywgcGVsYSBidXNjYSBkYXF1ZWxlcyBxdWUgbsOjbyB2aWVyYW0gYSBzZXIgcHVibGljYWRvcy4NCg0KQ2FzbyBoYWphIGV2aWTDqm5jaWFzIGRlIHZpw6lzIGRlIHB1YmxpY2HDp8OjbyBzdWdlcmltb3M6DQoNCi0gICBSZXZpc2FyIHBsYW5pbGhhIGRlIGNvbGV0YSBkZSBkYWRvcywgYnVzY2FuZG8gcG9yIGVycm9zIG5hIGV4dHJhw6fDo28gZG9zIGRhZG9zIGRvcyBlc3R1ZG9zOw0KLSAgIEF2YWxpYXIgcXVlIG1lZGlkYSBkZSBlZmVpdG8gZXN0w6EgYWRlcXVhZGEgKGV4OiB1c28gZGUgZGlmZXJlbsOnYSBkZSBtw6lkaWFzIGVtIHZleiBkZSBkaWZlcmVuw6dhIHBhZHJvbml6YWRhIGRlIG3DqWRpYXMgZW0gbWV0YW7DoWxpc2VzIGRlIGRhZG9zIGNvbnTDrW51b3MpOw0KLSAgIFJlYWxpemFyIGFuYWxpc2UgZGUgc2Vuc2liaWxpZGFkZSBjb25zaWRlcmFuZG8gYSBleGNsdXPDo28gZGUgZXN0dWRvcyBjb20gcGVxdWVubyB0YW1hbmhvIGFtb3N0cmFsIGUgcG90ZW5jaWFpcyBvdXRsaWVycyBpZGVudGlmaWNhZG9zIG5hIGFuw6FsaXNlIHZpc3VhbDsNCi0gICBSZWFsaXphciBhanVzdGFtZW50byBwYXJhIHZpw6lzIGRlIHB1YmxpY2HDp8OjbyB1dGlsaXphbmRvIGFuw6FsaXNlIGRlIHRyaW0gYW5kIGZpbGwuDQoNCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCiMgKipNZWRpZGFzIGRlIFJpc2NvL0VmZWl0byoqDQojIyAqKkNvbnRleHR1YWxpemHDp8OjbyoqDQoNCk1ldGFuw6FsaXNlIMOpIG8gdXNvIGRlIG3DqXRvZG9zIGVzdGF0w61zdGljb3MgcGFyYSBzdW1hcml6YXIgcmVzdWx0YWRvcyBkZSBlc3R1ZG9zIGluZGVwZW5kZW50ZXMuIENvbWJpbmFuZG8gaW5mb3JtYcOnw7VlcyBkZSB0b2RvcyBvcyBlc3R1ZG9zIHJlbGV2YW50ZXMsIGEgbWV0YW7DoWxpc2UgcG9kZSBlc3RpbWFyIG9zIGVmZWl0b3MgZGUgdW1hIGRldGVybWluYWRhIGludGVydmVuw6fDo28gZGUgZm9ybWEgbWFpcyBwcmVjaXNhIGRvIHF1ZSBjYWRhIGVzdHVkbyBpbmRpdmlkdWFsbWVudGUuICBQYXJhIGEgZWxhYm9yYcOnw6NvIGRlIHVtYSByZXZpc8OjbyBzaXN0ZW3DoXRpY2EsIMOpIHBvc3PDrXZlbCB0cmFiYWxoYXIgY29tIGRhZG9zIGRlIGRpdmVyc2FzIG5hdHVyZXphcywgY29udHVkbywgcGFyYSBwcm9jZWRlciBjb20gYSBhYm9yZGFnZW0gbWV0YS1hbmFsw610aWNhLCBvIHJlc3VsdGFkbyBmaW5hbCBkZSBjYWRhIGVzdHVkbyBkZXZlIHNlciBleHByZXNzbyBlbSB1bWEgbWVkaWRhIHBhZHJvbml6YWRhLCBkZW5vbWluYWRhICoqdGFtYW5obyBkbyBlZmVpdG8qKi4NCg0KTWV0YW7DoWxpc2VzIHF1ZSBjb25zaWRlcmFtICoqZGVzZmVjaG9zIGJpbsOhcmlvcyh2YXJpw6F2ZWwgZGljb3TDtG1pY2EpKiogc8OjbyBhcyBtYWlzIGNvbXVucy4gUGFyYSBjYWRhIGVzdHVkbyBpbmRpdmlkdWFsIMOpIGNhbGN1bGFkYSB1bWEgbWVzbWEgbWVkaWRhIGRlIGFzc29jaWHDp8Ojbywgc2VuZG8gbWFpcyBmcmVxw7xlbnRlIG8gdXNvIGRvICoqUmlzY28gUmVsYXRpdm8gKFJSKSoqIG91IGRhICoqUmF6w6NvIGRlIENoYW5jZXMgKG9kZHMgcmF0aW8g4oCTIE9SKSoqLCBxdWUgZXhwcmVzc2Fyw6NvIG8gdGFtYW5obyBkbyBlZmVpdG8uIEFww7NzLCBwcm9jZWRlLXNlIGNvbSBhIGFncmVnYcOnw6NvIGRhcyBtZWRpZGFzIGEgcGFydGlyIGRhIHBvbmRlcmHDp8OjbyBkb3MgcmVzdWx0YWRvcyBkb3MgZXN0dWRvcyBpbmRpdmlkdWFpcy4gVW1hIHZleiBvYnRpZG9zIGVzc2VzIGRhZG9zLCDDqSBwb3Nzw612ZWwgY2FsY3VsYXIgbWVkaWRhcyBkZSBpbXBhY3RvIGUgYmVuZWbDrWNpbywgY29tbyBvICoqTsO6bWVybyBOZWNlc3PDoXJpbyBwYXJhIFRyYXRhciAoTk5UKSoqLCBhc3NpbSBjb21vIGVtIHF1YWxxdWVyIGVuc2FpbyBjbMOtbmljbyBpbmRpdmlkdWFsLg0KDQpQYXJhICoqRGFkb3MgQ29udMOtbnVvcyoqLCB1dGlsaXphLXNlIGEgZGlmZXJlbsOnYSBwb25kZXJhZGEgZGFzIG3DqWRpYXMgKCoqd2VpZ2h0ZWQgbWVhbiBkaWZmZXJlbmNlKiosIG91IHNpbXBsZXNtZW50ZSwgKiptZWFuIGRpZmZlcmVuY2Ug4oCTIE1EKiopIGVudHJlIG9zIGRvaXMgZ3J1cG9zIGRlIGNvbXBhcmHDp8OjbyBxdWFuZG8gcG9zc3XDrW1vcyBhcyBtZWRpZGFzIGVtIHVtYSBtZXNtYSBlc2NhbGEuIFF1YW5kbyBhcyBtZW5zdXJhw6fDtWVzIHPDo28gcmVhbGl6YWRhcyBlbSBlc2NhbGFzIGRpc3RpbnRhcywgc2VtIGEgcG9zc2liaWxpZGFkZSBkZSBjb252ZXJzw6NvIMOgIHVtYSBtZXNtYSB1bmlkYWRlIChwb3IgZXhlbXBsbywgdGVzdGVzIHBzaWNvbcOpdHJpY29zIGRpZmVyZW50ZXMgcGFyYSBhdmFsaWFyIHVtIG1lc21vIGVzdGFkbyBkZSBzYcO6ZGUpLCB1dGlsaXphLXNlIGEgZGlmZXJlbsOnYSBwYWRyb25pemFkYSBkYXMgbcOpZGlhcyAoc3RhbmRhcml6ZWQgbWVhbiBkaWZmZXJlbmNlIOKAkyBTTUQpLCBxdWUgY29uc2lzdGUgbmEgZGl2aXPDo28gZGEgZGlmZXJlbsOnYSBkYXMgbcOpZGlhcyBkb3MgZG9pcyBncnVwb3MgcGVsbyBkZXN2aW8gcGFkcsOjbyBjb211bSBhIGVsZXMsIGdlcmFuZG8gYXNzaW0gdW0gdmFsb3IgY29ycmVzcG9uZGVudGUgYSBkaWZlcmVuw6dhIGVtIGRlc3Zpb3MgcGFkcsO1ZXMgZW50cmUgYXMgZHVhcyBpbnRlcnZlbsOnw7VlcyBhdmFsaWFkYXMuDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCiMjICoqT2RkcyBvdSBDaGFuY2UqKg0KDQpBcyBtZWRpZGFzIGRlIGVmZWl0byBtYWlzIHV0aWxpemFkYXMgcGFyYSBncnVwb3Mgc8OjbyBvICoqb2RkcyByYXRpbyoqIGUgYSAqKmluY2lkw6puY2lhKiouDQoNClBvciBkZWZpbmnDp8OjbyBvZGRzIMOpIGEgcmF6w6NvIGVudHJlIGEgcHJvYmFiaWxpZGFkZSBkZSBvIGV2ZW50byBvY29ycmVyIGUgYSBwcm9iYWJpbGlkYWRlIGRvIGV2ZW50byBuw6NvIG9jb3JyZXIgcXVlLCBtYXRlbWF0aWNhbWVudGUsIMOpIGVxdWl2YWxlbnRlIGE3IHJhesOjbyBlbnRyZSBvIG7Dum1lcm8gZGUgZXZlbnRvcyBlIG8gbsO6bWVybyBkZSBuw6NvIGV2ZW50b3MuDQoNCiQkIGxuKE9kZHMpX3tqfT0gbG4gXGxlZnQoIFxmcmFje2Ffe2l9fXtiX3tqfX1ccmlnaHQpICAkJA0Kb25kZSAkYV97aX0kIMOpIG8gbsO6bWVybyBkZSBpbmRpdsOtZHVvcyBxdWUgc29mcmV1IG8gZXZlbnRvIG5vIGVzdHVkbyAkaiQgZSAkYl97an0kIMOpIG8gbsO6bWVybyBkZSBpbmRpdsOtZHVvcyBxdWUgbsOjbyBzb2ZyZXUgbyBldmVudG8gbm8gZXN0dWRvIGosIGNvbSAkaj0xLDIsXGxkb3RzLEokLiANCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KIyMgKipJbmNpZMOqbmNpYSoqDQoNCkEgaW5jaWTDqm5jaWEgbWVkZSBvIG7Dum1lcm8gZGUgbm92b3MgY2Fzb3Mgc3VyZ2lkb3MgbnVtYSBkZXRlcm1pbmFkYSBwb3B1bGHDp8OjbyBlIG51bSBkZXRlcm1pbmFkbyBpbnRlcnZhbG8gZGUgdGVtcG8uIEVsYSB0YW1iw6ltLCDDqSB1c3VhbG1lbnRlIGNhbGN1bGFkYSBlbSBlc2NhbGEgbG9nYXLDrXRtaWNhLg0KDQokJCBsbihJbmNpZClfe2p9PSBsbiBcbGVmdCggXGZyYWN7ZF97aX19e3Ffe2p9fVxyaWdodCkgICQkDQoNCm9uZGUgJGRfe2l9JCBzw6NvIG9zIGV2ZW50b3Mgb2JzZXJ2YWRvcyBubyBlc3R1ZG8gJGokIGUgJHFfe2p9JCB1bmlkYWRlcyBkZSB0ZW1wby4NCg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQojICoqVmFudGFnZW5zIGRhIE1ldGFuw6FsaXNlKioNCg0KLSAgIEF1bWVudGEgbyBQb2RlciBFc3RhdMOtc3RpY28gYW8gQ29tYmluYXIgRXN0dWRvczsNCi0gICBNZWxob3JhIGEgRXN0aW1hdGl2YSBkbyBUYW1hbmhvIGRvIEVmZWl0bzsNCi0gICBSZXNvbHZlIEluY2VydGV6YXMgcXVhbmRvIGjDoSBSZXN1bHRhZG9zIENvbmZsaXRhbnRlczsNCi0gICBBdW1lbnRhIEdlbmVyYWJpbGlkYWRlIGRvcyBFc3R1ZG9zOw0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQojICoqTW9kZWxvIEVzdGF0w61zdGljbyoqDQoNCkVtIG1ldGFuw6FsaXNlIGV4aXN0ZW0gYmFzaWNhbWVudGUgZG9pcyB0aXBvcyBkZSBtb2RlbG9zIHF1ZSBwb2RlbSBzZXIgYWRvdGFkb3MsIG8gbW9kZWxvIGRlIGVmZWl0b3MgZml4b3MgZSBvIG1vZGVsbyBkZSBlZmVpdG9zIGFsZWF0w7NyaW9zIChTb3VzYSAmIFJpYmVpcm8sIDIwMDkpLg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQoNCiMjICoqTW9kZWxvcyBkZSBFZmVpdG9zIEZpeG9zKioNCg0KUmVmZXJpbmRvLW5vcyBhbyBtb2RlbG8gZGUgZWZlaXRvIGZpeG8gw6kgZXNzZW5jaWFsIGNvbXByZWVuZGVyIHF1ZSBlc3RlIHByZXNzdXDDtWUgcXVlIG8gZWZlaXRvIGRlIGludGVyZXNzZSDDqSBvIG1lc21vIGVtIHRvZG9zIG9zIGVzdHVkb3MgZSBxdWUgYXMgZGlmZXJlbsOnYXMgb2JzZXJ2YWRhcyBlbnRyZSBlbGVzIHPDo28gZGV2aWRhcyBhcGVuYXMgYSBlcnJvcyBhbW9zdHJhaXMgKGVzdGUgZXJybyB0YW1iw6ltIMOpIHJlZmVyaWRvIG5hIGxpdGVyYXR1cmEgY29tbyB2YXJpYWJpbGlkYWRlIGRlbnRybyBkb3MgZXN0dWRvcykuIA0KDQpEZSBmb3JtYSBzaW1wbGlmaWNhZGEsIMOpIGNvbW8gc2Ugb3MgbcOpdG9kb3MgY29tIGVmZWl0b3MgZml4b3MgY29uc2lkZXJhc3NlbSBxdWUgYSB2YXJpYWJpbGlkYWRlIGVudHJlIG9zIGVzdHVkb3Mgb2NvcnJldSBhcGVuYXMgcGVsbyBhY2FzbyBlIGlnbm9yYXNzZW0gYSBoZXRlcm9nZW5laWRhZGUgZW50cmUgZWxlcyAoTW9heXllZGksIDIwMDQsIGFwdWQgU291c2E7IFJpYmVpcm8sIDIwMDk7IFJvZHJpZ3VlczsgWmllZ2VsbWFubiwgMjAxMCkuDQoNCkFzc2ltIGUgc2UgY29uc2lkZXJhcm1vcyBKIG8gbsO6bWVybyBkZSBlc3R1ZG9zIGRhIG1ldGEtYW7DoWxpc2UgZSAkWV97an0kIG8gZWZlaXRvIG9ic2VydmFkbyBubyBlc3R1ZG8gaiAoY29tIGogPSAxLDIsLi4uLEopLiBPIG1vZGVsbyBkZSBlZmVpdG8gZml4byDDqSBkYWRvIHBvcjogIA0KDQoNCg0KJCQgWV97an0gPSBcdGhldGFfe019ICsgXGVwc2lsb25fe2p9ICQkDQoNCk9uZGUsICRcZXBzaWxvbl97an0kIMOpIG8gZXJybyBhbGVhdMOzcmlvIGRvIGVzdHVkbyBqIGUgJFx0aGV0YV97TX0kIMOpIG8gZWZlaXRvIGNvbXVtIGEgdG9kb3Mgb3MgZXN0dWRvcywgZGVub21pbmFkbyBkZSBtZWRpZGEgbWV0YS1hbmFsw610aWNhLiANCg0KRGUgYWNvcmRvIGNvbSBlc3RlIG1vZGVsbyBwcmVzc3Vww7VlLXNlIHF1ZSBvcyBlcnJvcyBhbGVhdMOzcmlvcyB0w6ptIGRpc3RyaWJ1acOnw6NvIG5vcm1hbCBjb20gbcOpZGlhIDAgZSB2YXJpw6JuY2lhICRcc2lnbWFeezJ9X3tqfSQgY29uaGVjaWRhIChlc3RhIHZhcmnDom5jaWEgw6kgbyBxdWFkcmFkbyBkbyBlcnJvIHBhZHLDo28gZXN0aW1hZG8gbm8gZXN0dWRvIGopIGUgw6kgcG9yIGVzdGUgbW90aXZvIHF1ZSBhcyBtZWRpZGFzIGRlIGVmZWl0byBkb3MgT1IgZSBSUiBzw6NvIGNhbGN1bGFkYXMgZW0gZXNjYWxhIGxvZ2Fyw610bWljYS4gDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCiMjICoqTW9kZWxvcyBkZSBFZmVpdG9zIEFsZWF0w7NyaW9zIG91IFJhbmTDtG1pY29zKioNCg0KDQpQYXJhIGFsw6ltIGRvcyBtb2RlbG9zIGRlIGVmZWl0b3MgZml4b3MsIGNvbW8gasOhIGZvaSByZWZlcmlkbyBhbnRlcmlvcm1lbnRlLCBleGlzdGVtIGFpbmRhIG9zIG1vZGVsb3MgZGUgZWZlaXRvcyBhbGVhdMOzcmlvcyBxdWUgcHJlc3N1cMO1ZW0gcXVlIG8gZWZlaXRvIGRlIGludGVyZXNzZSBuw6NvIMOpIG8gbWVzbW8gZW0gdG9kb3Mgb3MgZXN0dWRvcy4gTmVzdGUgc2VudGlkbywgY29uc2lkZXJhbSBxdWUgb3MgZXN0dWRvcyBxdWUgZmF6ZW0gcGFydGUgZGEgbWV0YS1hbsOhbGlzZSBmb3JtYW0gdW1hIGFtb3N0cmEgYWxlYXTDs3JpYSBkZSB1bWEgcG9wdWxhw6fDo28gaGlwb3TDqXRpY2EgZGUgZXN0dWRvcy4gDQoNCkNvbnR1ZG8sIGFwZXNhciBkb3MgZWZlaXRvcyBkb3MgZXN0dWRvcyBuw6NvIHNlcmVtIGNvbnNpZGVyYWRvcyBpZ3VhaXMgZWxlcyBzw6NvIGNvbmVjdGFkb3MgYXRyYXbDqXMgZGUgdW1hIGRpc3RyaWJ1acOnw6NvIGRlIHByb2JhYmlsaWRhZGUsIGdlcmFsbWVudGUgc3Vwb3N0YSBub3JtYWwgKFJvZHJpZ3VlcywgMjAxMDsgUm9kcmlndWVzIFwmIFppZWdlbG1hbm4sIDIwMTApLg0KDQpQb3IgZXN0ZSBmdW5kYW1lbnRvIGNyaWFtIHJlc3VsdGFkb3MgY29tYmluYWRvcyBjb20gbWFpb3IgaW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EgZGHDrSBzZXJlbSBvcyBtYWlzIHJlY29tZW5kYWRvcy4gVG9kYXZpYSBlIGFwZXNhciBkZSB0ZXJlbSBlc3NhIHZhbnRhZ2VtLCBvcyBtw6l0b2RvcyBjb20gZWZlaXRvcyBhbGVhdMOzcmlvcyBzw6NvIGNyaXRpY2Fkb3MgcG9yIGF0cmlidcOtcmVtIG1haW9yIHBlc28gYSBlc3R1ZG9zIG1lbm9yZXMgKE1vYXl5ZWRpLCAyMDA0LCBhcHVkIFNvdXNhIFwmIFJpYmVpcm8sIDIwMDkpLiAgDQoNCk8gbW9kZWxvIGRlIGVmZWl0b3MgYWxlYXTDs3Jpb3Mgw6kgZGFkbyBwb3I6DQoNCg0KJCQgWV97an0gPSBcdGhldGFfe019ICsgIFx6ZXRhX3tqfSArIFxlcHNpbG9uX3tqfSAkJA0KDQoNCk9uZGUsICRcZXBzaWxvbl97an0kIMOpIG8gZXJybyBhbGVhdMOzcmlvIGRvIGVzdHVkbyBqLCAkXHpldGFfe2p9JCDDqSBvIGVmZWl0byBhbGVhdMOzcmlvIGRlIGNhZGEgZXN0dWRvIGogZSAgw6kgYSBtZWRpZGEgbWV0YS1hbmFsw610aWNhLiANCg0KTm8gbW9kZWxvIGRlIGVmZWl0b3MgYWxlYXTDs3Jpb3MgcHJlc3N1cMO1ZS1zZSBxdWUgb3MgZXJyb3MgYWxlYXTDs3Jpb3MgdMOqbSBkaXN0cmlidWnDp8OjbyBub3JtYWwgY29tIG3DqWRpYSAwIGUgdmFyacOibmNpYSBjb25oZWNpZGEgJFxzaWdtYV57Mn1fe2p9JCAobWVzbWEgc3Vwb3Npw6fDo28gZG8gbW9kZWxvIGRlIGVmZWl0byBmaXhvKSBlIG9zIGVmZWl0b3MgYWxlYXTDs3Jpb3MgdMOqbSBkaXN0cmlidWnDp8OjbyBub3JtYWwgY29tIG3DqWRpYSAwIGUgdmFyacOibmNpYSBkZXNjb25oZWNpZGEgJFx0YXV7Mn0kLiANCg0KDQpOZXN0ZSBtb2RlbG8sIGEgZXN0aW1hdGl2YSBwb250dWFsIHBhcmEgJFx0aGV0YV97TX0kLCBzaW1pbGFybWVudGUgY29uc2lzdGUgbmEgbcOpZGlhIHBvbmRlcmFkYSBlbnRyZSBhcyBtZWRpZGFzIGRlIGVmZWl0byBkZSBjYWRhIGVzdHVkbyBjb20gYSBkaWZlcmVuw6dhIGRhIGVzdGltYXRpdmEgZGUgJFx0YXV7Mn0kIGluZmx1ZW5jaWFyIG5hIHBvbmRlcmHDp8OjbyAoUm9kcmlndWVzLCAyMDEwOyBSb2RyaWd1ZXMgJiBaaWVnZWxtYW5uLCAyMDEwKS4NCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KIyMgKipUZXN0ZSBkZSBIZXRlcm9nZW5laWRhZGUqKg0KDQpBIGhldGVyb2dlbmVpZGFkZSBlbSByZXZpc8O1ZXMgc2lzdGVtw6F0aWNhcyBjb20gbWV0YS1hbsOhbGlzZSBjb25zaXN0ZSBuYSB2YXJpYWJpbGlkYWRlIG91IGRpZmVyZW7Dp2EgZW50cmUgZXN0dWRvcyBlbSByZWxhw6fDo28gw6AgZXN0aW1hdGl2YSBkZSBlZmVpdG9zIGUgcG9yIGlzc28gbyBzZXUgY8OhbGN1bG8gw6kgZnVuZGFtZW50YWwgcGFyYSBhdmFsaWFyIG8gZ3JhdSBkZSBjb25maWFuw6dhIGRvcyByZXN1bHRhZG9zIGVtIHNpdHVhw6fDtWVzIGRlIGRlY2lzw7VlcyBpbmNlcnRhcyBvdSBzdXBvc2nDp8O1ZXMgc29icmUgb3MgZGFkb3MgZSByZXN1bHRhZG9zIHVzYWRvcyAoQ2xhcmtlLCAyMDAxLCBhcHVkIFJhbWFsaG8sIDIwMDUpLiAgDQoNCkVtIG1ldGFuw6FsaXNlLCBxdWFuZG8gYSB2YXJpYWJpbGlkYWRlIGVudHJlIG9zIGVzdHVkb3MgbsOjbyDDqSBhcGVuYXMgYWxlYXTDs3JpYSwgZGl6ZW1vcyBxdWUgb3MgZXN0dWRvcyBzw6NvIGhldGVyb2fDqm5lb3MuIEEgYXZhbGlhw6fDo28gc29icmUgaGV0ZXJvZ2VuZWlkYWRlIHRlbSBwYXBlbCBpbXBvcnRhbnRlIG5hIGVzY29saGEgZG9zIG1vZGVsb3MgZGUgbWV0YW7DoWxpc2UgZSwgcG9ydGFudG8sIGRldmUgc2VyIHJlYWxpemFkYSBhbmF0ZXMgZGEgZXNjb2xoYSBkbyBtb2RlbG8uICAgICANCg0KRW0gdGVybW9zIGdsb2JhaXMgYWxndW5zIGF1dG9yZXMgZGl2aWRlbSBhcyBoZXRlcm9nZW5laWRhZGVzIGVtIHRyw6pzIHRpcG9zIChDcmFpZyAmIFNteXRoLCAyMDA0OyBQb2NpbmhvLCAyMDA4OyBIaWdnaW5zIFwmIEdyZWVuLCAyMDExKToNCg0KLSAgICoqSGV0ZXJvZ2VuZWlkYWRlIEVzdGF0w61zdGljYSoqIChkaWZlcmVuw6dhcyBub3MgcmVzdWx0YWRvcykg4oCTIMOpIGEgdmFyaWHDp8OjbyBlbnRyZSBvcyByZXN1bHRhZG9zIGRvcyBlc3R1ZG9zLCBvIHF1ZSBwb2RlIHNlciBjYXVzYWRvIHBvcjogaGV0ZXJvZ2VuZWlkYWRlIGNsw61uaWNhIG91IG1ldG9kb2zDs2dpY2EsIGVzY29saGEgZXJyYWRhIGRhcyBtZWRpZGFzIGRlIGVmZWl0byBkbyB0cmF0YW1lbnRvIG91IHBlbG8gYWNhc287DQoNCi0gICAqKkhldGVyb2dlbmVpZGFkZSBNZXRvZG9sw7NnaWNhKiogKGRpZmVyZW7Dp2FzIG5vcyBkZXNlbmhvcyBkb3MgZXN0dWRvcyBpbmNsdcOtZG9zKSDigJMgY29uc2lzdGUgbmFzIHZhcmlhw6fDtWVzIHJlbGFjaW9uYWRhcyBjb20gYSBhbGVhdG9yaXphw6fDo28sIHNpZ2lsbyBkYSBhbG9jYcOnw6NvLCBjZWdhbWVudG8sIHBlcmRhcy9leGNsdXPDtWVzOw0KDQotICAgKipIZXRlcm9nZW5laWRhZGUgY2zDrW5pY2EqKiAoZGlmZXJlbsOnYXMgZW50cmUgYXMgY2FyYWN0ZXLDrXN0aWNhcyBkb3MgZXN0dWRvcywgcG9yIGV4ZW1wbG86IG9zIHBhcnRpY2lwYW50ZXMsIGludGVydmVuw6fDtWVzIG91IHJlc3VsdGFkb3MpIOKAkyDDqSBhIGRpZmVyZW7Dp2EgcmVhbCBlbnRyZSBvcyBlc3R1ZG9zIGRldmlkbyDDoHMgc3VhcyBjYXJhY3RlcsOtc3RpY2FzOiBwYXJ0aWNpcGFudGVzIChjcml0w6lyaW9zIGRlIGluY2x1c8OjbyBlIGV4Y2x1c8OjbywgZGlhZ27Ds3N0aWNvLCBldGMuKSwgaW50ZXJ2ZW7Dp8O1ZXMgKHRpcG8sIGRvc2UsIGR1cmHDp8OjbywgZXRjLiksIGRlc2ZlY2hvcyBjbMOtbmljb3MgKHRpcG8sIGVzY2FsYSwgcG9udG8gZGUgY29vcnRlLCBkdXJhw6fDo28gZG8gZm9sbG93IHVwLCBldGMuKS4NCg0KDQrDiSBuZXN0ZSBzZW50aWRvIHF1ZSBvcyB0ZXN0ZXMgZXN0YXTDrXN0aWNvcyBkZSBoZXRlcm9nZW5laWRhZGUgc2UgcmV2ZXN0ZW0gZGUgdW1hIGRlc21lZGlkYSBpbXBvcnTDom5jaWEgbmEgcmVhbGl6YcOnw6NvIGRhIG1ldGEtYW7DoWxpc2UgcG9pcyBwZXJtaXRlbSBpbmZlcmlyIHNlIGEgdmFyaWFiaWxpZGFkZSBvYnNlcnZhZGEgbm9zIHJlc3VsdGFkb3MgZGUgdW0gZXN0dWRvICh0YW1hbmhvIGRlIGVmZWl0bykgw6kgbWFpb3IgcXVlIG8gZXNwZXJhZG8gZGV2aWRvIGFvIGFjYXNvLg0KDQpOYSByZWFsaXphw6fDo28gZGEgbWV0YS1hbsOhbGlzZSBwb2RlLXNlLCByZWNvcnJlciBhIGRvaXMgdGVzdGVzIHBhcmEgZGV0ZXJtaW5hciBhIGV4aXN0w6puY2lhIGRlIGhldGVyb2dlbmVpZGFkZSwgKipvIFRlc3RlIFEqKiBwcm9wb3N0byBwb3IgQ29jaHJhbiAoMTk1NCkgZS9vdSBxdWFsaWZpY2FkYSBwZWxhICoqRXN0YXTDrXN0aWNhICRJXnsyfSQqKiBkZWZpbmlkYSBwb3IgSGlnZ2lucyBlIFRob21wc29uICgyMDAyKS4NCg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQoNCiMjIyAqKlRlc3RlIFEgZGUgQ29jaHJhbSoqDQoNCk8gdGVzdGUgUSBkZSBDb2NocmFuIHRyYWR1eiBvIG3DqXRvZG8gbWFpcyB1dGlsaXphZG8gcGFyYSBhdmFsaWFyIGEgaGV0ZXJvZ2VuZWlkYWRlIGUgcGFydGUgZG8gcHJlc3N1cG9zdG8gcXVlIG9zIGFjaGFkb3MgZG9zIGVzdHVkb3MgcHJpbcOhcmlvcyBzw6NvIGlndWFpcyAoaGlww7N0ZXNlIG51bGEpIGUgdmVyaWZpY2Egc2Ugb3MgZGFkb3MgZW5jb250cmFkb3MgcmVmdXRhbSBlc3RhIGhpcMOzdGVzZSAoTGF1LCBJb2FubmlkaXMgXCYgU2NobWlkLCAxOTk4KS4gU2UgYSBoaXDDs3Rlc2UgbnVsYSBmb3IgY29uZmlybWFkYSwgb3MgZXN0dWRvcyBzw6NvIGNvbnNpZGVyYWRvcyBob21vZ8OqbmVvcyAocC12YWxvciA+IDAsMDUpLg0KDQoNCkFzIEhpcMOzdGVzZXMgZG8gVGVzdGUgUSBkZSBDb2NocmFuIA0KDQokSF97MH0kOiBvcyBlc3R1ZG9zIHPDo28gaG9tb2fDqm5lb3MNCiRIX3sxfSQ6IG9zIGVzdHVkb3Mgc8OjbyBoZXRlcm9nw6puZW9zDQoNCg0KTyB0ZXN0ZSBRIGRlIENvY2hyYW4gw6ksIGVudMOjbywgZGFkbyBwb3I6DQoNCiQkIFEgPSBcc3VtX3tqPTF9XntqfSBXX3tqfShZX3tqfS1cdGhldGFfe019KV57Mn0gICQkDQoNCk9uZGUgJFdfe2p9JCDDqSBvIHBlc28gZG8gZXN0dWRvIGosICRZX3tqfSQgw6kgYSBtZWRpZGEgZGUgZWZlaXRvIGRvIGVzdHVkbyBqIGUgJFx0aGV0YV97TX0kIMOpIGEgZXN0aW1hdGl2YSBwYXJhIGEgbWVkaWRhIG1ldGEtYW5hbMOtdGljYS4NCg0KDQpDb21vIGrDoSBmb2kgc3VwcmFtZW5jaW9uYWRvLCBvIHZhbG9yIHAgY2FsY3VsYWRvIGluZGljYSBzZSBhIGhldGVyb2dlbmVpZGFkZSDDqSBzaWduaWZpY2F0aXZhbWVudGUsIG91IG7Do28sIGRpZmVyZW50ZSBkZSB6ZXJvLiBVbSBwcm9ibGVtYSDDqSBxdWUgbyB2YWxvciBkZSBRIHZhcmlhIGVudHJlIDAgZSBpbmZpbml0bywgbyBxdWUgYWNhcnJldGEgdsOhcmlhcyBkZXN2YW50YWdlbnMgKFJvZHJpZ3VlcyAmIFppZWdlbG1hbm4sIDIwMTApLiANCg0KDQpTZWd1bmRvIEhpZ2dpbnMgZXQgYWwuICgyMDAzKSBhcG9udGFtIHF1ZSBlbSBtZXRhLWFuw6FsaXNlcyBxdWUgZW52b2x2ZW0gdW0gbsO6bWVybyBwZXF1ZW5vIGRlIGVzdHVkb3MsIG8gcG9kZXIgZG8gdGVzdGUgcG9kZSBzZXIgYmFpeG8uIEFzc2ltLCBhaW5kYSBxdWUgdGVuaGFtb3MgdW1hIGdyYW5kZSB2YXJpYcOnw6NvIGVudHJlIG9zIGVzdHVkb3MsIG8gdGVzdGUgZGUgQ29jaHJhbiBwb2RlIG7Do28gY29uc2VndWlyIGRldGVjdGFyIGEgaGV0ZXJvZ2VuZWlkYWRlIGRldmlkbyBhbyBuw7ptZXJvIHJlZHV6aWRvIGRlIGVzdHVkb3MgKG8gcC12YWxvciBzZXLDoSBlcnJvbmVhbWVudGUgZWxldmFkbykuIA0KDQpQb3Igb3V0cm8gbGFkbywgcXVhbmRvIGEgbWV0YS1hbsOhbGlzZSBlbnZvbHZlIHVtIG7Dum1lcm8gZWxldmFkbyBkZSBlc3R1ZG9zLCBvIHBvZGVyIGRvIHRlc3RlIHNlcsOhIGFsdG8gZSBvIHRlc3RlIGRlIENvY2hyYW4gcG9kZSBldmlkZW5jaWFyIHVtYSBoZXRlcm9nZW5laWRhZGUgZW50cmUgb3MgZXN0dWRvcyDigJxlc3RhdGlzdGljYW1lbnRlIHNpZ25pZmljYW50ZeKAnSwgcG9yw6ltLCBjbGluaWNhbWVudGUgbsOjbyBpbXBvcnRhbnRlLg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQoNCiMjIyAqKkVzdGF0w61zdGljYSAkSV57Mn0kKioNCg0KQ29udHVkbywgYWxndW5zIGF1dG9yZXMgYXJndW1lbnRhbSBxdWUgYSBoZXRlcm9nZW5laWRhZGUgcG9yIG1lbm9yIHF1ZSBzZWphIGVuY29udHJhLXNlIHNlbXByZSBwcmVzZW50ZSwgcGVsbyBxdWUgbsOjbyB0ZW0gc2VudGlkbyB0ZXN0YXIgYXBlbmFzIGEgc3VhIHByZXNlbsOnYSwgbWFzIHF1YW50aWZpY8OhLWxhIChNdWxyb3cgZXQgYWwuLCAxOTk3OyBCZXJ3YW5nZXIgZXQgYWwuLCAyMDA3KS4gRSBmb2kgbmVzc2Ugc2VudGlkbyBxdWUgZm9pIGRlc2Vudm9sdmlkbyBvIFRlc3RlIGRlIEluY29uc2lzdMOqbmNpYSBJwrIgcHJvcG9zdGEgcG9yIEhpZ2dpbnMgXCYgVGhvbXBzb24gKDIwMDIpLg0KDQpBIGVzdGF0w61zdGljYSAkSV57Mn0kIMOpIG9idGlkYSBhIHBhcnRpciBkYSBlc3RhdMOtc3RpY2EgUSBkbyB0ZXN0ZSBkZSBDb2NocmFuIGUgZG8gbsO6bWVybyBqIGRlIGVzdHVkb3MgZW52b2x2aWRvcyBuYSBtZXRhLWFuw6FsaXNlIGUgZGFkYSBwb3I6DQoNCg0KJCQgSV57Mn0gPSBcZnJhY3tRIC0gKGotMSl9e1F9XHRpbWVzIDEwMFwlICQkDQoNCg0KQSBlc3RhdMOtc3RpY2EgJEleezJ9JCBwb2RlIHZhcmlhciBkZSB2YWxvcmVzIG5lZ2F0aXZvcyBhdMOpICQxMDBcJSQuIFF1YW5kbyBvIHZhbG9yIGZvciBuZWdhdGl2byBlbGUgw6kgaWd1YWxhZG8gYSAwLiBPIHZhbG9yIHAgZGUgJEleezJ9JCDDqSBlcXVpdmFsZW50ZSBhbyB2YWxvciBwIGRlIFEuIEEgZXN0YXTDrXN0aWNhICRJXnsyfSQgZGVzY3JldmUgYSBwb3JjZW50YWdlbSBkZSB2YXJpYWJpbGlkYWRlIGRvIGVmZWl0byBxdWUgw6kgZGV2aWRhIMOgIGhldGVyb2dlbmVpZGFkZSBlIG7Do28gcG9yIGFjYXNvIChEaW5uZXMgZXQgYWwuLCAyMDA1KS4NCg0KDQpJbnRlcnByZXRhdGl2YW1lbnRlLCB1bWEgZXNjYWxhIGNvbSB1bSB2YWxvciBkZSAkSV57Mn0kIHByw7N4aW1vIGEgJDBcJSQgaW5kaWNhIG7Do28gaGV0ZXJvZ2VuZWlkYWRlIGVudHJlIG9zIGVzdHVkb3MsIHByw7N4aW1vIGEgJDI1XCUkIGluZGljYSAqKkJhaXhhKiogSGV0ZXJvZ2VuZWlkYWRlLCBwcsOzeGltbyBhICQ1MFwlJCBpbmRpY2EgSGV0ZXJvZ2VuZWlkYWRlICoqTW9kZXJhZGEqKiBlIHByw7N4aW1vIGEgJDc1XCUkIGluZGljYSAqKkFsdGEqKiBoZXRlcm9nZW5laWRhZGUgZW50cmUgb3MgZXN0dWRvcyAoSGlnZ2lucyBldCBhbC4gMjAwMzsgUm9kcmlndWVzIFwmIFppZWdlbG1hbm4sIDIwMTApLg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQoNCg0KIyAqKkV4ZW1wbG8gUHLDoXRpY28qKg0KDQojIyAqKlZhcmnDoXZlaXMgcHJhIE1ldGFuw6FsaXNlICoqDQoNCi0gICAxKSAqKmF1dGhvcioqIDogYXV0b3Jlcw0KLSAgIDIpICoqeWVhcioqIDogYW5vDQotICAgMykgKipOZSoqOiBuw7ptZXJvIGRlIHBhY2llbnRlcyBkbyBncnVwbyBlc3BlcmltZW50YWwodHJhdGFtZW50bykNCi0gICA0KSAqKk1lKio6IG3DqWRpYSANCi0gICA1KSAqKlNlKio6IGRlc3Zpby1wYWRyw6NvDQotICAgNikgKipOYyoqOiBuw7ptZXJvIGRlIHBhY2llbnRlcyBkbyBncnVwbyBjb250cm9sZQ0KLSAgIDcpICoqTWMqKjogbcOpZGlhDQotICAgOCkgKipTYyoqOiBkZXN2aW8tcGFkcsOjbw0KDQoNCg0KIyMgKipCYXNlIGRlIERhZG9zKioNCg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCg0KIyBQYWNvdGVzIFV0aWxpemFkb3MNCmxpYnJhcnkobWV0YSkNCmxpYnJhcnkobWV0YWZvcikNCmxpYnJhcnkocm1ldGEpDQpsaWJyYXJ5KG1ldGFjb3IpIA0KbGlicmFyeShyZWFkeGwpDQoNCiMgRGVmaW5pciBEaXJldMOzcmlvIGRlIFRyYWJhbGhvDQpzZXR3ZCgiQzovVXNlcnMvbWFyaW8gRGhpZWdvL0RvY3VtZW50cy9NRVRBX0FOQUxJU0VfUiIpDQoNCiMgTGVpdHVyYSBkZSBCYXNlIGRlIERhZG9zDQpNZXRhMSA8LSByZWFkX2V4Y2VsKCJkYXRhc2V0MS54bHMiKQ0KYGBgDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCg0KIyMgKipNb2RlbG8gZGUgTWV0YW7DoWxpc2UqKg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNb2RlbG8gZGUgTWV0YW7DoWxpc2UNCg0KTWV0YV9BbmFsaXNlMSA8LSBtZXRhY29udChOZSwgTWUsIFNlLCBOYywgTWMsIFNjLHN0dWRsYWI9cGFzdGUoYXV0aG9yLCB5ZWFyKSxkYXRhPU1ldGExKQ0KDQojIFJlc3VsdGFkb3MNCnN1bW1hcnkoTWV0YV9BbmFsaXNlMSkNCg0KDQpgYGANCg0KDQo6OjogcHJvZ3Jlc3MNCjo6OiB7LnByb2dyZXNzLWJhciBzdHlsZT0id2lkdGg6IDEwMCU7In0NCjo6Og0KOjo6DQoNCg0KDQojIyAqKkZvcmVzdCBQbG90IENsw6Fzc2ljbyoqDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG91dC53aWR0aCA9ICc2NSUnfQ0KZm9yZXN0Lm1ldGEoTWV0YV9BbmFsaXNlMSwgDQogICAgICAgc29ydHZhciA9IFRFLA0KICAgICAgIHhsYWI9IlVzbyBkZSBNZWRpY2FtZW50b3MiLA0KICAgICAgIGNvbC5lcXVpID0gImJsdWUiKQ0KYGBgDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCg0KDQojIyAqKkZvcmVzdCBQbG90IE91dHJvIGxheW91dCoqDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG91dC53aWR0aCA9ICc2NSUnfQ0KZm9yZXN0Lm1ldGEoTWV0YV9BbmFsaXNlMSwgeGxhYj0iVXNvIGRlIE1lZGljYW1lbnRvcyIsDQogICAgICAgbGF5b3V0ID0gIlJldk1hbjUiKQ0KYGBgDQoNCg0KOjo6IHByb2dyZXNzDQo6Ojogey5wcm9ncmVzcy1iYXIgc3R5bGU9IndpZHRoOiAxMDAlOyJ9DQo6OjoNCjo6Og0KDQoNCg0KIyMgKipGdW5uaWwgUGxvdCBDbMOhc3NpY28qKg0KDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG91dC53aWR0aCA9ICc4NSUnfQ0KZnVubmVsKE1ldGFfQW5hbGlzZTEsIA0KICAgICAgIHhsYWIgPSAiRGllcmVuY2EgZGUgTWVkaWFzIiwNCiAgICAgICB5bGFiID0gIkVycm8gUGFkcmFvIikNCmBgYA0KDQoNCg0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg0KDQoNCg0KDQojICoqUmVmZXLDqm5jaWFzIEJpYmxpb2dyw6FmaWNhcyoqDQoNCg0KQVlSRVMsIE0uOyBBWVJFUyBKw5pOSU9SLCBNLjsgQVlSRVMsIEQuTDsgU0FOVE9TLCBBLlMuIEJpb0VzdGF0IDUuMDogYXBsaWNhw6fDtWVzIGVzdGF0w61zdGljYXMgbmFzIMOhcmVhcyBkYXMgY2nDqm5jaWFzIGJpb2zDs2dpY2FzIGUgbcOpZGljYXMuIEJlbMOpbTogTUNUOyBJRFNNOyBDTlBxLCAyMDE1Lg0KDQpCRVJXQU5HRVIsIE8uOyBTVVpVTVVSQSBFLiBBLjsgQlVFSExFUiwgQS5NLjsgT0xJVkVJUkEsIEouQi4gKDIwMDcpLiBDb21vIEF2YWxpYXIgQ3JpdGljYW1lbnRlIFJldmlzw7VlcyBTaXN0ZW3DoXRpY2FzIGUgTWV0YW7DoWxpc2U/IFJldmlzdGEgQnJhc2lsZWlyYSBkZSBUZXJhcGlhIEludGVuc2l2YSwgMTkoNCk6IDQ3NS00ODAuIA0KDQoNCkJSRUksIFYuQTsgROKAmUFWSUxBLCBMOyBDQU1BUkdPLCBMLkY7IEVOR0VMUywgSi4gVGhlIGluZmx1ZW5jZSBvZiBhZHB0YXRpb24gYW5kIHN0YW5kYXJkaXphdGlvbiBvZiB0aGUgbWFya2V0aW5nIG1peG8gb24gcGVyZm9ybWFuY2U6IGEgbWV0YS1hbmx5c2lzLiBCcmF6aWxpYW4gQWRtaW5pc3RyYXRpb24gUmV2aWV3LCA4LCAyNjYtMjg3LCAyMDExLiAgDQoNCkNPQ0hSQU1FLCBXLkcuIFRoZSBjb21iaW5hdGlvbiBvZiBlc3RpbWF0ZXMgZnJvbSBkaWZmZXJlbnQgZXhwZXJpbWVudHMuIEJpb21ldHJpY3MgMTk1NDsgMTA6IDEwMS0xMjkuDQoNCkRFUlNJTU9OSUFOLCBSOyBMQUlSRCwgTi4gTWV0YS1hbmFseXNpcyBpbiBjbGluaWNhbCB0cmlhbHMuIENvbnRyb2xsZWQgQ2xpbmljYWwgVHJpYWxzLiAxOTg2OyA3OjE3Ny04OC4NCg0KRElOTkVTLCBKLjsgREVFS1MgSi47IEtJUkJZLCBKOyBST0RFUklDSywgUC4gQSBtZXRob2RvbG9naWNhbCByZXZpZXcgb2YgaG93IGhldGVyb2dlbmVpdHkgaGFzIGJlZW4gZXhhbWluZWQgaW4gc3lzdGVtYXRpYyByZXZpZXdzIG9mIGRpYWdub3N0aWMgdGVzdCBhY2N1cmFjeS4gSGVhbHRoIFRlY2hub2wgQXNzZXNzLiAyMDA1OyA5ICgxMik6IDEtMTEzLg0KDQpGbGV0Y2hlciBSSCwgRmxldGNoZXIgU1cuIEVwaWRlbWlvbG9naWEgY2zDrW5pY2E6IGVsZW1lbnRvcyBlc3NlbmNpYWlzOyB0cmFkdcOnw6NvIFJvYmVydGEgTWFyY2hpb3JpIE1hcnRpbnMuIFBvcnRvIEFsZWdyZSwgQXJ0bWVkLCAyMDA2Lg0KDQpHbGFzcyBHVi4gUHJpbWFyeSwgc2Vjb25kYXJ5LCBhbmQgbWV0YS1hbmFseXNpcyBvZiByZXNlYXJjaC4gRWR1Y2F0aW9uYWwgUmVzZWFyY2hlci4gVi4gNSwgcC4gMy04LCAxOTc2Lg0KDQpISUdHSU5TLCBKLlAuVC47IFRIT01QU09OLCBTLkcuICgyMDAyKS4gUXVhbnRpZnlpbmcgaGV0ZXJvZ2VuZWl0eSBpbiBhIG1ldGFhbmFseXNpcy4gU3RhdCBNZWQuLCAyMTogMTUzOS01OC4gDQoNCkhJR0dJTlMsIEouUDsgVEhPTVBTT04sIFMuRzsgREVFS1MsIEouSjsgQUxUTUFOLCBELkcuIE1lYXN1cmluZyBpbmNvbnNpc3RlbmN5IGluIG1ldGEtYW5hbHlzZXMuIEJNSi4gMjAwMzsgMzI3OiA1NTctNjAuDQoNCkhJR0dJTlMsIEo7IEdSRUVOLCBTLCBlZGl0b3JzLiBDb2NocmFuZSBoYW5kYm9vayBmb3Igc3lzdGVtYXRpYyByZXZpZXdzIG9mIGludGVydmVudGlvbnMgW0ludGVybmV0XS4gVmVyc2lvbiA1LjEuMC4gT3hmb3JkOiBDb2NocmFuZSBDb2xsYWJvcmF0aW9uOyBjMjAxMSBbY2l0ZWQgMjAxNCBBdWcgOF0uIEF2YWlsYWJsZSBmcm9tOiB3d3cuY29jaHJhbmUtaGFuZGJvb2sub3JnLg0KDQpMQVUsIEouOyBJT0FOTklESVMsIEouIFAuOyBTQ0hNSUQsIEMuIEguICgxOTk4KS4gU3VtbWluZyB1cCBldmlkZW5jZTogb25lIGFuc3dlciBpcyBub3QgYWx3YXlzIGVub3VnaC4gTGFuY2V0OyAzNTE6IDEyMy0xMjcuIA0KTElQU0VZLCBNLlc7IFdJTFNPTiwgRC5CLiAoMjAwMSkuIFByYWN0aWNhbCBNZXRhLUFuYWx5c2lzLiBCZXZlcmx5IEhpbGxzLCBDQTogU0FHRS4gDQoNCk1BUlRJTkVaLCBFLiBaLiAoMjAwNykuIE1ldGFuw6FsaXNlIGRlIGVuc2Fpb3MgY2zDrW5pY29zIGNvbnRyb2xhZG9zIGFsZWF0b3JpemFkb3M6IGFzcGVjdG9zIHF1YW50aXRhdGl2b3MuIE1lZGljaW5hOyA0MCAoMik6IDIyMy0zNS4gUmliZWlyw6NvIFByZXRvLg0KDQpNVUxST1csIEMuOyBMQU5HSE9STkUsIFAuOyBHUklNU0hBVywgSi4gKDE5OTcpLiBJbnRlZ3JhdGluZyBoZXRlcm9nZW5lb3VzIHBpZWNlcyBvZiBldmlkZW5jZSBpbiBzeXN0ZW1hdGljIHJldmlld3MuIEFubiBJbnRlcm4gTWVkLiwgMTI3OiA5ODktOTk1Lg0KDQpQZWFyc29uIEsuIFJlcG9ydCBvbiBjZXJ0YWluIGVudGVyaWMgZmV2ZXIgaW5vY3VsYXRpb24gc3RhdGlzdGljcy4gQk1KLiAxOTA0OzM6MTI0My02LiAzLiANCg0KUkFNQUxITywgQS4gKDIwMDUpLiBNYW51YWwgcGFyYSByZWRhw6fDo28gZGUgZXN0dWRvcyBlIHByb2pldG9zIGRlIHJldmlzw6NvIHNpc3RlbcOhdGljYSBjb20gZSBzZW0gbWV0YW7DoWxpc2UuIENvaW1icmE6IEZPUk1BU0FVLiBJU0JOIDk3Mi04NDg1LTU0LTkuIA0KDQpST0RSSUdVRVMsIEMuOyBaSUVHRUxNQU5OLCBQLiAoMjAxMCkuIE1ldGFuw6FsaXNlOiB1bSBndWlhIHByw6F0aWNvLiBSZXZpc3RhIEhDUEEuIDMwKDQpOiA0MzUtNDQ2LiBJU1NOOiAxOTgzLTU0ODUuICANCg0KUk9TUywgSi5TOyBUU0UsIFQ7IFpBUklOLCBEQTsgWFUsIEg7IFpIT1UsIEw7IEtSVU1IT0xaLCBILk0uIFB1YmxpY2F0aW9uIG9mIE5JSCBmdW5kZWQgdHJpYWxzIHJlZ2lzdGVyZWQgaW4gQ2xpbmljYWxUcmlhbHMuZ292OiBjcm9zcyBzZWN0aW9uYWwgYW5hbHlzaXMuIEJNSi4gMjAxMiBKYW47MzQ0KGQ3MjkyKToxLTEwLg0KDQpTT0tBTCwgUi5SOyBST0hMRiwgRi5KLiAoMTk5NSkuIEJpb21ldHJ5LCAzIHJkLiBFZCwgVy5ILiBGcmVlbWFuIGFuZCBDb21wYW55LCBOZXcgWW9yay4gDQoNClZJRUNIQkFVRVMsIFcuIE1ldGEtQW5hbHlzaXMgUGFja2FnZSBmb3IgUiwgMjAwOS4NCg0KV2hpdGVoZWFkIEEuIE1ldGEtYW5hbHlzaXMgb2YgY29udHJvbGxlZCBjbGluaWNhbCB0cmlhbHMuIEpvaG4gV2lsZXkgJiBTb25zLiAyMDAyLg0KDQpZYXRlcyBGLCBDb2NocmFuIFdHLiBUaGUgYW5hbHlzaXMgb2YgZ3JvdXBzIG9mIGV4cGVyaW1lbnRzLiBUaGUgSm91cm5hbCBvZiBBZ3JpY3VsdHVyYWwgU2NpZW5jZS4gMTkzODsyOCg0KTo1NTYtODAuIA0KDQoNCjo6OiBwcm9ncmVzcw0KOjo6IHsucHJvZ3Jlc3MtYmFyIHN0eWxlPSJ3aWR0aDogMTAwJTsifQ0KOjo6DQo6OjoNCg==