Introdução

Ciclos econômicos são flutuações cíclicas da atividade econômica marcadas pela alternância entre fases de expansão e recessão. Sua característica central é que, embora recorrentes, essas flutuações não são periódicas: não há regularidade que permita prever com precisão quando uma fase começa ou termina. Ainda assim, a análise dos ciclos passados permite identificar padrões, reconhecer fragilidades que se repetem e compreender melhor a dinâmica da economia brasileira ao longo do tempo.

A Tabela 1 apresenta as datas oficiais dos ciclos econômicos brasileiros, conforme a datação do Comitê de Datação de Ciclos Econômicos (CODACE), da FGV:

Tabela 1:

Pico

Vale

Meses do
pico ao vale

Meses entre o vale
anterior e este pico

Do vale anterior
até este vale

Do pico anterior
até este pico

Novembro 1980 (IV)

Fevereiro 1983 (I)

28

Março 1987 (I)

Outubro 1988 (IV)

20

48

68

76

Julho 1989 (III)

Dezembro 1991 (IV)

30

8

38

28

Janeiro 1995 (I)

Setembro 1995 (III)

9

36

45

66

Novembro 1997 (IV)

Fevereiro 1999 (I)

16

25

41

34

Janeiro 2001 (I)

Setembro 2001 (III)

9

22

31

38

Novembro 2002 (IV)

Junho 2003 (II)

8

13

21

22

Agosto 2008 (III)

Dezembro 2008 (IV)

5

61

66

69

Março 2014 (I)

Dezembro 2016 (IV)

34

62

114

67

4º Trim. de 2019

2º Trim. de 2020

Duração média (em meses)

17,7

34,4

53,0

50,0

Fonte: CODACE/FGV-IBRE.

Este relatório adota uma abordagem histórica. Analisa-se, inicialmente, o ciclo de expansão de 2008–2014 e a recessão de 2014–2016, buscando identificar os motores de crescimento e as fragilidades estruturais de cada período. Em seguida, observa-se quais desses padrões persistem, se transformaram ou foram superados no Brasil atual.

A escolha por uma análise histórica mais aprofundada parte da premissa de que muitas das questões estruturais que afetam a atividade econômica brasileira hoje têm raízes em ciclos anteriores. Compreendê-las exige, portanto, olhar para trás antes de interpretar o presente.

1. A Expansão Pós-Crise (2008–2014)

1.1 O colchão externo: como o Brasil saiu da crise

Contextualizando historicamente, a crise de 2008 foi marcada por uma extrema desconfiança no mercado. Com a quebra de instituições como o Lehman Brothers - um dos maiores bancos de investimento do mundo -, surgiu uma preocupação generalizada: o que poderia acontecer com o sistema financeiro global? Em momentos de medo, ocorre o chamado flight-to-quality, a corrida por ativos mais seguros, como o dólar. Com isso, a demanda pela moeda americana aumenta abruptamente, pressionando seu preço para cima.

No Gráfico 1, observa-se que o Brasil havia acumulado reservas internacionais ao longo dos anos anteriores à crise. No momento do choque, essas reservas recuaram, evidenciando seu uso como amortecedor. A linha do câmbio em seu ponto mais alto corresponde exatamente ao período em que as reservas estavam sendo consumidas, ilustrando a relação entre os dois movimentos.

Gráfico 1:

A intervenção do Banco Central foi focada em resolver a escassez de dólares no mercado. A principal tática foi o uso de vendas com compromisso de recompra: o BC ofereceu dólares aos bancos com a garantia de recomprá-los em data futura, sanando a falta de liquidez sem comprometer permanentemente o estoque de reservas. De forma complementar, o BC utilizou as reservas para suprir a escassez de crédito externo no financiamento do comércio exterior - as chamadas linhas de trade finance - que haviam sido cortadas pelos bancos internacionais com a eclosão da crise. Sem esse suporte, os exportadores brasileiros não teriam como financiar o intervalo entre a produção e o recebimento das vendas ao exterior. Além disso, o BC utilizou o swap cambial - um contrato que oferece proteção cambial sem desembolso imediato de dólar físico -, instrumento essencial para ancorar expectativas e estabilizar o câmbio no mercado futuro.

A atuação do Banco Central permitiu que o país mitigasse os efeitos da crise de forma relativamente rápida, contendo o contágio. O vale do ciclo foi datado no quarto trimestre de 2008, a partir do qual o Brasil iniciou uma nova trajetória de expansão. Vale destacar que as datas do CODACE são confirmadas com uma certa defasagem - em dezembro de 2008, a população não tinha como saber que se iniciava uma trajetória de expansão.

1.2 Os motores da expansão

A expansão brasileira não foi fruto de um único fator, mas de um conjunto de variáveis agindo de forma articulada. Com o colchão externo garantindo estabilidade, o crescimento de 2008–2014 foi puxado internamente - consumo das famílias, expansão do crédito, formalização do trabalho, e gasto público - impulsionaram conjuntamente a demanda agregada.

1.2.1 Renda e consumo das famílias

Durante o período de expansão, o consumo das famílias cresceu de forma sustentada e se firmou como um componente estável da demanda agregada. Esse movimento é, ao mesmo tempo, causa e consequência do ciclo: causa, porque a expansão do consumo elevou a demanda, estimulando produção e contratações; consequência, porque o aumento do emprego e da renda alimentou de volta a capacidade de consumir. O que destravou esse ciclo, porém, não foi aleatório - esteve ligado à política de valorização do salário mínimo.

A regra, negociada em 2007, fixou dois componentes para o reajuste anual: (i) o INPC[^ 1] do período, que apenas repõe a inflação e, portanto, não implica ganho real; e (ii) a variação do PIB defasada em dois anos, que constitui o ganho real propriamente dito. Assim, o reajuste de 2008 incorporou o PIB de 2006; o de 2009, o de 2007; o de 2010, o de 2008. A trajetória conjunta do salário mínimo real e do consumo das famílias pode ser vista no gráfico 2.

[^ 1] Nota: Índice Nacional de Preços ao Consumidor, calculado pelo IBGE. Mede a inflação da cesta de consumo das famílias com pessoa de referência assalariada e rendimento entre 1 e 5 salários mínimos, em áreas urbanas. É, portanto, o índice que reflete a inflação enfrentada pela própria população afetada pelo reajuste do SM, daí sua escolha como componente de reposição na regra.

Gráfico 2:

Vale destacar, ainda, que o salário mínimo não impacta apenas os trabalhadores que recebem diretamente o piso. Seus efeitos se espalham pela estrutura salarial de forma mais ampla. Categorias profissionais com pisos definidos em múltiplos do SM, como engenheiros, médicos e agrônomos, também têm seus rendimentos reajustados quando o piso aumenta. Além disso, mesmo trabalhadores sem vínculo formal com o SM tendem a reivindicar reajustes quando ele sobe em termos reais, já que o valor relativo de seus próprios salários diminui em comparação ao restante da estrutura salarial.

Dessa forma, ele funciona como uma referência importante para os salários no Brasil, produzindo efeitos que vão muito além do grupo que efetivamente recebe o piso. Porém, o aumento do consumo não pode ser atribuído integralmente ao salário mínimo. Como se observa no gráfico 2, a despesa do consumo cresce mais que o SM, sinal de que outro motor está operando em paralelo.

Esse motor é a expansão do crédito, observada no gráfico 3.

Gráfico 3:

Como evidenciado no gráfico 3, a relação crédito/PIB total (linha azul escuro) passou de 35,5% em 2008 para 56,5% em dezembro de 2013. Como evidenciado no gráfico 3, a relação crédito/PIB total (linha azul-escura) passou de 35,5% em 2008 para 56,5% em dezembro de 2013. A expansão do crédito a pessoas físicas operou por meio de instrumentos específicos: o crédito consignado com desconto direto em folha, o financiamento de veículos com prazo alongado, o financiamento imobiliário, o crédito pessoal e o cartão de crédito com parcelamento sem juros. O efeito dessas medidas foi facilitar o acesso a bens duráveis, eletrodomésticos, automóveis, e serviços antes restritos a faixas mais altas de renda.

A linha de crédito a pessoas jurídicas (linha amarela) também avança no período, de cerca de 19,1% para 30,5% do PIB. Parte dessa expansão se deveu à atuação anticíclica dos bancos públicos após 2008, quando os bancos privados se tornaram mais cautelosos diante da crise internacional.

O resultado conjunto desses motores - salário mínimo em valorização real e crédito ao consumidor em forte expansão - foi a consolidação de um mercado de consumo no Brasil. Famílias de menor renda passaram a acessar bens e serviços antes restritos, fenômeno também chamado de “nova classe média”. Mais do que o aumento do consumo agregado, o que ocorre é uma percepção generalizada de melhora, a sensação que sustenta o ciclo e reforça a visão, na época, de que o Brasil vivia um período de prosperidade. Do ponto de vista macroeconômico, contudo, cabe uma ressalva: um crescimento sustentado por crédito e consumo funciona no curto prazo, mas tem limites.

1.2.2 Mercado de trabalho

Outro motor relevante da expansão foi o mercado de trabalho. Como mostra o gráfico 4, a taxa de desocupação medida pela PME[^2] caiu de forma consistente ao longo do período. Em termos teóricos, uma população mais empregada amplia a massa de renda disponível e, portanto, o espaço para consumo - reforçando a tese de que a demanda doméstica foi o principal vetor da expansão.

Gráfico 4:

A série bruta (linha amarela), no entanto, apresenta um padrão sazonal independente do ciclo: queda no fim do ano, puxada por contratações temporárias e pagamento do 13º, seguida de alta em janeiro. Para analisar a tendência, utilizou-se a média móvel de 12 meses (linha azul).

A média móvel evidencia duas fases. Nos primeiros meses de 2009, o desemprego ainda sobe, refletindo as demissões puxadas pela crise financeira internacional em 2008. A partir do início de 2010, a queda é praticamente ininterrupta até o fim da expansão. No dado bruto, a PME parte de 8,2% em janeiro de 2009, atinge o pico de 9% em março do mesmo ano e chega a 5% em março de 2014.

[^2] Nota: Pesquisa Mensal de Emprego (PME), realizada pelo IBGE em seis regiões metropolitanas (Belo Horizonte, São Paulo, Rio de Janeiro, Recife, Salvador, e Porto Alegre). A PNAD Contínua (Pesquisa Nacional por Amostra de Domicílios Contínua), hoje fonte de referência para a taxa de desocupação, só foi iniciada em 2012, razão pela qual se optou pela PME para cobrir o período analisado nesta seção.

A queda da desocupação, contudo, conta apenas parte da história. A formalização do emprego também teve um papel importante na ampliação do consumo.

Gráfico 5:

Como observado no gráfico 5, a parcela de trabalhadores com carteira assinada inicia trajetória de expansão em 2004, saindo de 41% e atingindo 52,6% em 2014. No mesmo período, o trabalho sem carteira recua de 17,4% para 9,9%.

Além de garantir maior estabilidade de renda, a formalização do trabalho amplia o acesso a benefícios - como crédito consignado, FGTS que viabiliza o financiamento habitacional, 13º salário, e férias remuneradas. Esse conjunto reduz a insegurança das famílias, aumentando a propensão marginal a consumir.

Em outras palavras, a maior estabilidade da renda e das condições de vida contribuiu para sustentar a expansão da demanda interna ao longo do período.

1.2.3 Desempenho setorial

A análise do PIB funciona, aqui, como uma forma de consolidar os movimentos observados até então. O Produto Interno Bruto cresceu de forma sustentada ao longo de todo o ciclo, mas é necessário analisar o que cresceu. O gráfico 6 desagrega o produto por setor.

Gráfico 6:

Serviços já respondiam pela maior fatia do PIB em 2009 (aproximadamente R$453 bilhões) e quase dobraram até o início de 2014 (R$831 bilhões). A indústria saiu de R$152 bilhões para R$282 bilhões, enquanto a agropecuária passou de R$41 bilhões para R$74 bilhões. Em termos absolutos, todos os setores cresceram. O ponto, porém, está nas participações relativas. Em 2009, os serviços representavam aproximadamente 70% do PIB, a indústria cerca de 23% e a agropecuária aproximadamente 6%. Em 2014, esses números permaneceram praticamente inalterados. A estrutura produtiva brasileira não se transformou ao longo de cinco anos de expansão econômica.

Mesmo em um período de crescimento, já era possível identificar fragilidades estruturais importantes. O ciclo de expansão sustentado por crédito, consumo e formalização do trabalho não foi acompanhado por mudanças relevantes na composição da economia.

1.3 As fragilidades ocultas

Mesmo em períodos de expansão, é possível identificar fragilidades que eventualmente podem contribuir para uma crise futura. A teoria dos ciclos econômicos parte a ideia de que recessões e expansões são recorrentes, ainda que não periódicas - ou seja, não é possível saber quando cada fase irá começar ou terminar, mas sabe-se que ambas tendem a se alternar ao longo do tempo. Nesse sentido, períodos de prosperidade não devem ser analisados apenas pelos seus resultados positivos de curto prazo. O crescimento econômico pode ocultar desequilíbrios que só se tornam plenamente visíveis quando o país entra em recessão. Assim, analisar as fragilidades construídas durante a expansão ajuda a compreender não apenas os fatores que contribuíram para a recessão posterior, mas os próprios limites do crescimento do país.

1.3.1 Investimento produtivo

Um indicador extremamente relevante para analisar a sustentabilidade do crescimento econômico é a Formação Bruta de Capital Fixo (FBCF), que mede os investimentos realizados em ativos produtivos, como máquinas, equipamentos, construção, e infraestrutura. Em geral, esse indicador funciona como uma sinalização da capacidade futura de expansão da produção e do aumento da produtividade da economia, podendo ser observado no gráfico 7.

Gráfico 7:

O gráfico 7 apresenta a variação percentual anual da FBCF ao longo do período. Após a crise internacional de 2008, observa-se uma forte recuperação do investimento. A taxa, que estava próxima de -3,9% em julho de 2009, saltou para valores positivos, atingindo cerca de 29% em janeiro de 2010. Parte desse movimento é esperada, já que períodos pós-crise costumam apresentar recuperações percentuais mais fortes, especialmente porque o investimento tende a se retrair durante momentos de instabilidade econômica.

O principal ponto de análise, porém, está no comportamento posterior. Embora o ciclo de expansão brasileiro tenha se encerrado oficialmente em 2014, o pico do investimento ocorreu ainda no início de 2010. A partir desse ponto, a trajetória da FBCF passa a apresentar desaceleração e oscilações - atingindo inclusive crescimento negativo de -1,49% em julho de 2012, mesmo dentro do período de expansão.

Isso sugere a ausência de um padrão de investimento produtivo: mesmo em um cenário de crescimento econômico, o investimento não conseguiu manter uma trajetória contínua de fortalecimento. Esse movimento é relevante, porque o investimento produtivo é um dos principais mecanismos capazes de ampliar a capacidade produtiva e elevar a produtividade da economia no longo prazo. Assim, a desaceleração da Formação Bruta de Capital Fixo antes mesmo do encerramento oficial do ciclo de expansão já sinalizava limitações estruturais importantes da economia brasileira.

1.3.2 Produtividade

Depois da análise do PIB, do emprego, do consumo, e do investimento produtivo, cabe observar se o crescimento do período foi acompanhado por ganhos de eficiência. Para isso, o gráfico 8 apresenta a Produtividade Total dos Fatores (PTF) desde 1995, com o período de expansão em destaque.

Gráfico 8:

A PTF é derivada de uma função de produção, que relaciona o produto com os fatores utilizados na produção, que pode ser visto na equação 1.

Equação 1: \[ Y_t = A_t (u_t K_t)^{\alpha} L_t^{1-\alpha} \]

Em que, - \(Y_t\) representa o produto; - \(A_t\) representa a Produtividade Total dos Fatores; - \(u_t K_t\) representa o capital ajustado pela utilização da capacidade instalada; - \(L_t\) representa o fator trabalho; - \(\alpha\) representa a participação do capital na produção; - \(1-\alpha\) representa a participação do trabalho na produção.

Isolando A, obtém-se a PTF, na equação 2.

Equação 2: \[ A_t = \frac{Y_t}{(u_t K_t)^{\alpha} L_t^{1-\alpha}} \]

No entanto, a interpretação da PTF muda quando se incorpora o ajuste de capital humano. Sem esse ajuste, parte do ganho associado à maior escolaridade ou qualificação da força de trabalho pode aparecer indevidamente como aumento de produtividade. Para corrigir isso, o fator trabalho passa a ser ajustado pelo Índice de Capital Humano (ICH), evidenciado na equação 3.

Equação 3: \[ L_t = H_t \times \left(\frac{ICH_t}{100}\right) \]

Em que: - \(H_t\) representa as horas trabalhadas; - \(ICH_t\) representa o Índice de Capital Humano. Voltando ao gráfico 8, a PTF sem ajuste de capital humano (linha amarela) apresenta uma trajetória de crescimento praticamente contínua desde 1995. Durante o período de expansão econômica iniciado em 2008, esse crescimento se intensifica, mantendo-se elevado até aproximadamente 2011, quando a série passa a apresentar certa estagnação e, posteriormente, queda. Observando apenas essa série, seria possível concluir que o período foi acompanhado por ganhos relevantes de produtividade. No entanto, essa interpretação se altera quando se analisa a PTF com ajuste de capital humano (linha azul). Ao incorporar o ICH ao fator trabalho, parte do crescimento anteriormente atribuído à produtividade passa a ser explicada pela maior qualificação da mão de obra. Durante todo o período de expansão, a série com ajuste permaneceu abaixo da série sem ajuste, indicando que os ganhos efetivos de produtividade foram limitados. Isso significa que parte importante do crescimento observado no período esteve associada ao aumento da qualificação dos trabalhadores, e não a ganhos estruturais de eficiência produtiva. Assim, a análise da PTF reforça que o ciclo de expansão brasileiro não foi sustentado por aumentos consistentes de produtividade no longo prazo. O crescimento ocorreu, mas sem transformação suficiente na capacidade da economia de produzir mais utilizando os mesmos fatores de produção. Esse resultado é coerente com os demais indicadores analisados anteriormente. A desaceleração do investimento produtivo e a limitação dos ganhos de produtividade sugerem que o modelo de crescimento do período possuía fragilidades estruturais importantes, sendo sustentado principalmente pela expansão do consumo e do mercado interno.

1.4 O esgotamento do ciclo

Tendo em vista os fatores analisados anteriormente - tanto os motores da expansão quanto as fragilidades estruturais acumuladas ao longo do período -, torna-se possível observar o início do esgotamento do ciclo econômico brasileiro. O crescimento sustentado principalmente pela expansão da demanda interna e do consumo passou a encontrar limites em um contexto de desaceleração do investimento produtivo e de ganhos restritos de produtividade. Nesse contexto, o gráfico 9 apresenta a evolução da Necessidade de Financiamento do Setor Público (NFSP) e da Dívida Bruta do Governo Geral entre 2008 e 2014.

Gráfico 9:

A NFSP permaneceu negativa durante grande parte do período analisado, indicando a presença de superávits primários. Ao longo do ciclo, porém, observa-se uma redução desses superávits. Isso significa que, embora o setor público ainda apresentasse resultado positivo, sua capacidade de poupança fiscal vinha diminuindo. A dívida bruta do governo geral apresentou oscilações ao longo do período posterior à crise de 2008, alternando momentos de redução e aumento. No entanto, a partir de março de 2014 - marco que sinaliza o encerramento oficial do ciclo de expansão -, a trajetória da dívida passa a apresentar crescimento contínuo. Nesse momento, a dívida bruta correspondia a aproximadamente 51,79%, alcançando cerca de 56,28% em dezembro de 2014. O comportamento da NFSP acompanha esse movimento. Em abril de 2014, o indicador ainda se encontrava em aproximadamente -1,68% do PIB, indicando superávit primário. No entanto, ao longo dos meses seguintes, a necessidade de financiamento passa a aumentar continuamente, até atingir 0,56% do PIB em dezembro de 2014 - primeiro valor positivo observado em todo o período analisado. Esses movimentos reforçam a percepção de esgotamento do ciclo econômico brasileiro. O crescimento sustentado ao longo dos anos anteriores passou a encontrar limites em um contexto marcado pela desaceleração do investimento produtivo, pela limitação dos ganhos de produtividade e pela deterioração gradual das contas públicas. Assim, os indicadores fiscais reforçam a ideia de que o modelo de crescimento do período possuía fragilidades estruturais importantes, sustentando-se principalmente pela expansão do consumo e da demanda interna, sem avanços suficientes em produtividade e investimento capazes de garantir sua sustentação no longo prazo.

2. A Grande Recessão (2014–2016)

2.1 Contexto e datação oficial da recessão

Conforme já apresentado na introdução, a recessão brasileira recente foi datada pelo CODACE entre o segundo trimestre de 2014 (pico) e o quarto trimestre de 2016 (vale), totalizando onze trimestres consecutivos de contração da atividade. Em datação mensal, divulgada posteriormente pelo Comitê, o pico ocorreu em março de 2014 e o vale em dezembro de 2016. A queda acumulada do PIB no período, medida pela série dessazonalizada, foi da ordem de 7 a 8%, magnitude que se aproxima de 11% quando avaliada em termos per capita.

Em termos de comparação histórica, trata-se de uma das recessões mais severas já registradas no Brasil. Foi a mais longa desde o início da datação trimestral do CODACE em 1980, uma das mais profundas dos últimos 150 anos de história econômica do país, e foi seguida pela recuperação mais lenta já documentada — o nível pré-crise do PIB per capita só seria recuperado anos depois.

No Gráfico 10, é possível visualizar a interação entre o PIB, a Selic e o IPCA ao longo do ciclo recessivo: a área sombreada delimita o período datado pelo CODACE (2T/2014 a 4T/2016), durante o qual o PIB registrou variações negativas sucessivas enquanto a inflação atingia 10,67% em 2015 e a Selic era elevada até 14,25% ao ano.

Gráfico 10

2.2 Os fatores que levaram à recessão

A recessão de 2014–2016 não foi resultado de um único choque, mas da convergência de três vetores que se reforçaram mutuamente: o esgotamento do ciclo expansivo anterior, um choque externo desfavorável e uma crise de credibilidade da política econômica.

O primeiro vetor foi a herança do ciclo 2008–2014, discutida na seção anterior. O modelo de crescimento baseado em consumo, crédito subsidiado, desonerações setoriais e expansão do gasto público — consolidado a partir de 2011–2012 sob o rótulo de Nova Matriz Econômica — deixou o país com déficits primários crescentes, inflação represada por preços administrados e margens de lucro deprimidas no setor privado. Quando o ciclo começou a desacelerar, esses desequilíbrios estreitaram o espaço de manobra da política econômica.

O segundo vetor foi externo. A partir de 2011, e com mais intensidade em 2014–2015, encerrou-se o superciclo das commodities que havia sustentado parte do crescimento dos anos 2000. A desaceleração da economia chinesa derrubou os preços internacionais e deteriorou os termos de troca brasileiros, comprimindo a receita de exportações e reduzindo o investimento no setor extrativo. O choque externo não explica isoladamente a profundidade da recessão — países latino-americanos igualmente expostos ao ciclo de commodities, como Chile e Peru, sofreram desacelerações muito mais brandas — mas atuou como amplificador das vulnerabilidades já presentes.

O terceiro vetor foi a perda de credibilidade da política econômica em 2015. A descoberta das pedaladas fiscais minou a confiança nos números oficiais; o ajuste fiscal anunciado por Joaquim Levy em uma economia já em queda combinou-se com o realinhamento dos preços administrados, o que levou o IPCA a 10,67% em 2015 e forçou a Selic a subir até 14,25%. A perda do grau de investimento pela Standard & Poor’s em setembro de 2015, seguida pelas demais agências, encareceu o financiamento e elevou o risco-país. Sobreposto a tudo isso, o avanço da Operação Lava Jato paralisou investimentos no setor de óleo e gás e na construção, e o processo de impeachment iniciado em dezembro de 2015 paralisou a agenda econômica.

A combinação desses três vetores produziu o que a literatura costuma chamar de balance sheet recession: uma contração em que famílias, empresas e setor público precisam reduzir endividamento simultaneamente, o que ajuda a entender tanto a profundidade quanto a lentidão da recuperação posterior.

2.3 Mercado de trabalho, investimento e produtividade

2.3.1 O colapso do investimento

Embora o desemprego seja a face mais visível de uma recessão, foi o investimento que liderou a queda da atividade entre 2014 e 2016, em sintonia com o que sugere a teoria dos ciclos: a Formação Bruta de Capital Fixo (FBCF) é tipicamente o componente mais volátil do PIB e o primeiro a reagir à deterioração das expectativas.

Na variação anual, a FBCF começou a desacelerar ainda em 2014, registrando contração de 4,4% no ano. A queda aprofundou-se para -13,9% em 2015 e mais -12,1% em 2016. Olhando para a dinâmica trimestral, conforme mostra o Gráfico 11, o componente acumulou onze trimestres consecutivos de queda, com recuos que chegaram a -7,0% em um único trimestre (2T/2015). No acumulado do pico ao vale, o investimento recuou cerca de 27%, e a taxa de investimento (FBCF/PIB) caiu de 20,9% em 2013 para 16,4% em 2016 — um dos níveis mais baixos da série histórica do indicador, que continuaria caindo até 14,6% em 2017.

A lógica econômica por trás desse colapso conecta-se diretamente aos problemas acumulados no ciclo anterior. A redução das margens de lucro das empresas, num contexto de elevação do custo unitário do trabalho e câmbio apreciado, já vinha desestimulando novos projetos desde 2012–2013. Quando a esses fatores se somaram a alta da Selic, a elevação do risco-país, a paralisação dos projetos da Petrobras pela Operação Lava Jato e o congelamento dos desembolsos do BNDES — que havia sido peça central do financiamento do investimento durante a expansão —, o investimento entrou em queda livre. Os indicadores de utilização da capacidade instalada da indústria, apresentados no Gráfico 12, caíram para mínimos históricos, sinalizando que não havia razão econômica para ampliar o estoque de capital.

Gráfico 11

Gráfico 12

2.3.2 O ajuste do mercado de trabalho

O mercado de trabalho confirmou na recessão um padrão clássico do ciclo econômico: foi a última variável a entrar e a última a sair da crise. No primeiro trimestre de 2014, a taxa de desocupação medida pela PNAD Contínua estava em 7,2%, próxima do mínimo histórico da série. A partir de meados de 2014, com a queda do investimento e a desaceleração da indústria, o desemprego começou a subir, mas inicialmente de forma lenta.

Essa lentidão inicial reflete o que a literatura chama de labor hoarding: as empresas seguraram suas equipes na expectativa de uma recuperação rápida, absorvendo no curto prazo a queda da demanda como redução de produtividade e horas trabalhadas. Quando ficou claro que a recessão seria longa, os ajustes vieram de forma abrupta. Como mostra o Gráfico 13, a taxa de desocupação saltou para 9,1% no último trimestre de 2015, atingiu 12,1% no quarto trimestre de 2016 e alcançou o pico de 13,9% no primeiro trimestre de 2017 — já fora do período recessivo oficial, confirmando justamente a defasagem do mercado de trabalho em relação ao ciclo do PIB.

Dois aspectos do ajuste merecem destaque, pois ajudam a entender legados duradouros da crise. O primeiro é o aumento da informalidade: parte significativa da recuperação posterior do emprego se deu por vínculos sem carteira ou por conta própria, com remuneração mais baixa e produtividade média menor. O segundo é a queda da massa de rendimentos reais — resultado combinado de menor ocupação e da inflação elevada de 2015–2016, que comprimiu o poder de compra dos salários e alimentou um ciclo recessivo no consumo, tema da próxima seção.

Gráfico 13

2.3.3 Produtividade: o problema estrutural revelado pela recessão

A recessão expôs uma fragilidade que estava parcialmente mascarada pela expansão anterior: a estagnação da produtividade. Os indicadores construídos pelo Observatório da Produtividade Regis Bonelli (FGV/IBRE) mostram que, entre 2010 e 2014, enquanto a produtividade por hora trabalhada crescia a um ritmo modesto de cerca de 1,5% ao ano, a Produtividade Total dos Fatores (PTF) avançava apenas 0,5% ao ano — sinal de que o crescimento estava sendo sustentado mais por acumulação de fatores (capital e trabalho) do que por ganhos de eficiência.

Durante a recessão, a PTF teve queda expressiva, visível no Gráfico 14 pela inflexão do índice a partir de 2014 e pelo ponto particularmente severo no quarto trimestre de 2015. A produtividade por hora também recuou. O ponto analiticamente mais relevante, porém, é o que veio depois: pela primeira vez em sua história recente, o Brasil saiu de uma recessão profunda sem registrar ganhos significativos de produtividade na recuperação. Em ciclos anteriores, a saída da crise costumava vir acompanhada de aumento da eficiência, à medida que as empresas reorganizavam processos e o capital se realocava para usos mais produtivos. Dessa vez, isso não ocorreu.

Esse comportamento ajuda a explicar a frustração com o ritmo do crescimento pós-2017 e dialoga diretamente com a discussão do momento atual: sem ganhos consistentes de produtividade, a economia brasileira passa a depender cada vez mais da acumulação de fatores para crescer, o que reforça os limites estruturais ao ciclo de expansão.

Gráfico 14

2.4 Consumo, crédito e confiança

2.4.1 A reversão do consumo das famílias

O consumo das famílias, que havia sido o motor do ciclo expansivo de 2008–2014, sofreu uma reversão expressiva durante a recessão. Como evidencia o Gráfico 15, pela série trimestral dessazonalizada, o agregado registrou sete quedas consecutivas entre o 1º trimestre de 2015 e o 3º trimestre de 2016. Os recuos chegaram a 1,9% em um único trimestre, no 2º trimestre de 2015, e a queda acumulada no período foi de aproximadamente 6%, configurando a contração mais longa e intensa do consumo das famílias na série histórica recente.

A magnitude desse movimento é macroeconomicamente decisiva porque o consumo das famílias responde por aproximadamente dois terços do PIB pela ótica da despesa. Quando esse componente entra em queda, dificilmente outros agregados conseguem compensar, e a contração se generaliza.

A reversão foi resultado da combinação de fatores discutidos nas seções anteriores. A queda da renda real do trabalho, decorrente do aumento do desemprego e da inflação de dois dígitos em 2015, comprimiu o poder de compra. A elevação da Selic encareceu o crédito ao consumidor, que será analisado na próxima subseção. E o endividamento elevado das famílias — herança do ciclo de crédito da década anterior — limitou a capacidade de absorção do choque por meio de novos empréstimos. O resultado foi um ciclo recessivo no consumo que se retroalimentou: queda do emprego comprime a renda, que comprime o consumo, que comprime a produção e o emprego novamente.

Gráfico 15

2.4.2 A retração do crédito

O crédito, que havia funcionado como combustível da expansão anterior, comportou-se na recessão como amplificador da queda. Conforme se observa no Gráfico 16, o estoque total de crédito do Sistema Financeiro Nacional, que vinha crescendo continuamente desde meados dos anos 2000, recuou em termos reais e caiu como proporção do PIB — de cerca de 53,7% no fim de 2015 para 49,3% no fim de 2016.

Três fatores explicam essa reversão. O primeiro é a alta da Selic, que elevou as taxas de juros ao tomador final a patamares proibitivos: os juros médios do crédito livre para pessoa física chegaram a cerca de 71,5% ao ano em 2016. O segundo é a deterioração da percepção de risco do sistema financeiro diante da queda da atividade e do aumento da inadimplência, sobretudo entre empresas. O terceiro é a retração do crédito direcionado, particularmente do BNDES, que reverteu o forte crescimento dos desembolsos observado no ciclo anterior — movimento associado tanto ao ajuste fiscal quanto à reorientação da política de crédito a partir de 2015.

O efeito combinado foi um processo de desalavancagem simultânea de famílias e empresas, que se prolongou pelos anos seguintes ao fim da recessão e ajuda a explicar a lentidão da retomada. Em uma economia em que o crédito havia sido um componente central do crescimento, a sua reversão eliminou um dos principais canais de financiamento da demanda agregada.

Gráfico 16

2.4.3 Confiança e incerteza

Um aspecto distintivo da recessão de 2014–2016, em comparação com episódios anteriores, é o papel central das expectativas e da incerteza. Como ilustra o Gráfico 17, os indicadores de confiança da FGV/IBRE — em particular o Índice de Confiança Empresarial (ICE) e o Índice de Confiança do Consumidor (ICC) — atingiram mínimos históricos entre o final de 2015 e o início de 2016, em níveis inferiores aos observados no auge da crise internacional de 2008–2009. Indicadores de incerteza, como o Indicador de Incerteza da Economia (IIE-Br) da FGV, também registraram níveis recordes no mesmo período, com pico em setembro de 2015.

A deterioração das expectativas é macroeconomicamente relevante porque cria um canal próprio de transmissão da crise. Diante de cenários incertos, empresas postergam decisões de investimento e famílias aumentam a poupança precaucionária, comprimindo simultaneamente a FBCF e o consumo — ou seja, ampliando o efeito recessivo dos demais choques pela via expectacional.

A perda de credibilidade da política econômica em 2015 alimentou diretamente esses indicadores. A revisão da meta de superávit primário para déficit, a sucessão de trocas no comando do Ministério da Fazenda (Levy → Nelson Barbosa → Henrique Meirelles) e as incertezas do processo de impeachment funcionaram como ruídos contínuos que dificultavam a formação de expectativas estáveis. Assim, a crise política não atuou apenas como um pano de fundo da recessão, mas como um vetor concreto de transmissão dos problemas para a atividade econômica real.

Gráfico 17

2.5 PIB e a profundidade da queda da atividade

A síntese de todos os movimentos analisados nas seções anteriores aparece nas Contas Nacionais. O PIB brasileiro registrou variações anuais de +0,5% em 2014, -3,5% em 2015 e -3,6% em 2016, com a economia encolhendo por onze trimestres consecutivos quando se examina a série dessazonalizada. O Gráfico 18 torna visível essa sequência: as colunas escuras delimitam exatamente os onze trimestres consecutivos de contração entre o 2T/2014 e o 4T/2016 datados pelo CODACE.

Pela ótica da despesa, a contração foi liderada pela FBCF — cuja contribuição negativa para o PIB chegou a cerca de -2,7 pontos percentuais em 2015 — e pelo consumo das famílias. Apenas as exportações líquidas e o consumo do governo apresentaram contribuições não negativas em alguns trimestres, sendo as exportações beneficiadas pela depreciação cambial e o consumo do governo limitado pelo aperto fiscal de 2015. Pela ótica da oferta, a queda foi puxada pela indústria, com destaque para a indústria de transformação e a construção civil — esta última especialmente afetada pela paralisação de obras vinculadas à Operação Lava Jato.

Em termos per capita, a queda foi ainda mais severa, aproximando-se de 11% acumulados quando descontado o crescimento populacional. O choque foi suficiente para fazer o PIB per capita brasileiro retroceder ao nível observado por volta de 2008 — ou seja, a recessão anulou quase todo o avanço de bem-estar agregado conquistado durante o ciclo expansivo discutido na seção anterior.

Gráfico 18

2.6 Transição para a recuperação lenta

Tecnicamente, a recessão terminou no quarto trimestre de 2016, com o vale identificado pelo CODACE em dezembro daquele ano. Mas, como ocorre em recessões profundas e de natureza estrutural, o fim da contração não significou o fim da crise. A recuperação que se iniciou em 2017 mostrou-se a mais lenta da história econômica brasileira recente: o crescimento médio do PIB nos anos seguintes ficou em torno de 1,3% ao ano, ritmo claramente insuficiente para recompor as perdas.

Quatro fatores ajudam a explicar essa lentidão. O primeiro é o caráter de balance sheet recession: como visto nas seções anteriores, famílias, empresas e setor público entraram simultaneamente em processo de redução de endividamento, o que prolongou o ciclo de desalavancagem por anos e limitou a reação da demanda agregada. O segundo é a fragilidade fiscal, que restringiu o uso de estímulos via gasto público e, ao contrário, exigiu reformas como a Emenda Constitucional do Teto de Gastos (EC 95/2016) e a Reforma Trabalhista (2017) apenas para conter a deterioração estrutural. O terceiro são as cicatrizes (scars) deixadas pela recessão sobre o capital humano e o estoque de capital físico: trabalhadores desocupados por longos períodos perdem produtividade e empregabilidade, e investimentos não realizados não são facilmente recuperados em ciclos subsequentes — ponto que dialoga diretamente com a estagnação da produtividade discutida em 2.3.3. O quarto são as instabilidades posteriores que interromperam a retomada antes que ela se consolidasse: a greve dos caminhoneiros em 2018, a transição política daquele ano e, mais à frente, o choque da pandemia em 2020.

A recessão de 2014–2016 deixa, assim, lições importantes para a leitura dos ciclos econômicos brasileiros. A primeira é que expansões puxadas por consumo e crédito, sustentadas por estímulos fiscais e parafiscais, tendem a esgotar-se quando os fundamentos de produtividade não acompanham o ritmo da demanda. A segunda é que choques externos não são, sozinhos, determinantes — eles amplificam vulnerabilidades internas pré-existentes. A terceira é que a credibilidade da política econômica é um insumo macroeconômico relevante: sua perda eleva a incerteza, deprime expectativas e transforma o que seria uma desaceleração em recessão profunda.

Essas lições servem de pano de fundo para a próxima seção, em que será examinado o momento atual da economia brasileira — buscando avaliar em que medida os arranjos institucionais e os fundamentos macroeconômicos pós-recessão alteraram a dinâmica cíclica do país, e quais dos legados de 2014–2016 ainda condicionam o ciclo presente.

3. Brasil atual

De acordo com as datas oficiais do CODACE, o último ciclo econômico brasileiro - caracterizado como uma recessão - foi encerrado no segundo trimestre de 2020. Até o momento da publicação deste relatório, não houve divulgação oficial sobre o período subsequente, de modo que não se sabe formalmente se a economia brasileira se encontra em uma fase de expansão ou recessão. No entanto, como discutido anteriormente, independentemente da fase do ciclo econômico, é possível identificar padrões, pontos fortes e desequilíbrios estruturais na economia. Assim, esta seção busca analisar alguns indicadores do Brasil atual à luz do histórico apresentado ao longo do relatório, observando quais fragilidades persistem e quais transformações podem ser percebidas na economia brasileira.

3.1 Estrutura produtiva e investimento

A análise do ciclo atual começa pela composição setorial do produto. O ritmo da expansão importa, mas o que define se ela é sustentável no longo prazo é a estrutura por trás: quais setores estão puxando o crescimento, em que proporção, e se essa proporção se altera ao longo do tempo. Assim, a questão central é observar se a economia brasileira está passando por uma transformação estrutural ou se continua crescendo dentro do mesmo padrão observado em ciclos anteriores.

Gráfico 19:

Como observado no gráfico X, no terceiro trimestre de 2020, o setor de serviços (linha azul escura) respondia por aproximadamente R$ 1,15 trilhão do PIB brasileiro, enquanto a indústria (linha amarela) representava cerca de R$ 405 bilhões e a agropecuária (linha azul clara) aproximadamente R$ 100 bilhões. No período mais recente da série, correspondente ao quarto trimestre de 2025, os serviços passaram para aproximadamente R$2,04 trilhões, enquanto a indústria atingiu cerca de R$648 bilhões. A agropecuária, por sua vez, permaneceu próxima de R$100 bilhões, embora essa comparação deve considerar os efeitos de sazonalidade característicos do setor.

Em termos absolutos, todos os setores cresceram ao longo do período analisado. O mais relevante, porém, está na composição relativa do PIB. O setor de serviços continua concentrando mais de 60% da atividade econômica brasileira e ampliou ainda mais sua participação ao longo da série, enquanto a indústria permanece relativamente estagnada em termos percentuais. O problema brasileiro, então, não é simplesmente a predominância do setor de serviços - característica comum também a várias economias, inclusive desenvolvidas. O problema está na ausência de avanço relativo da indústria e na limitada transformação estrutural da economia. Assim como observado no ciclo de expansão de 2008–2014, o crescimento recente da economia brasileira continua concentrado em setores que já eram predominantes anteriormente, sem mudanças significativas na composição produtiva do país.

A composição setorial da economia ajuda a entender como o país cresce. O investimento, por outro lado, ajuda a entender se esse crescimento possui capacidade de sustentação no longo prazo. Nesse sentido, o gráfico X apresenta a evolução da Formação Bruta de Capital Fixo (FBCF) em conjunto com a taxa Selic entre 2020 e 2025.

Gráfico 20:

Como observado no gráfico X, a FBCF continua apresentando forte oscilação ao longo do período, sem estabelecer uma trajetória consistente de crescimento. Mesmo nos momentos de recuperação do investimento, o movimento não se sustenta por longos períodos, reproduzindo um padrão já observado em ciclos anteriores da economia brasileira.

O pico da série ocorreu em abril de 2021, quando a variação anual da FBCF atingiu aproximadamente 26,25%. No entanto, o movimento perdeu força rapidamente, chegando a -6,84% em junho de 2023. Mesmo nos dados mais recentes, a instabilidade permanece evidente: em julho de 2025, a FBCF registrava crescimento de aproximadamente 2,32%, mas voltou para -3,12% em outubro do mesmo ano. Assim, a principal característica observada na série é justamente a ausência de uma trajetória sustentada de investimento. A FBCF apresenta momentos pontuais de recuperação, mas sem continuidade suficiente para consolidar um ciclo consistente de expansão do investimento produtivo no país.

Parte dessa dinâmica pode ser associada ao patamar elevado da taxa Selic no Brasil. Em alguns momentos do gráfico, é possível observar que a redução dos juros é acompanhada por melhora da Formação Bruta de Capital Fixo. No entanto, mesmo durante esses períodos de queda, a taxa básica de juros permanece em níveis elevados. Em outras palavras, muitas vezes a Selic reduz de 15% para 14%, mas continua representando um custo alto para decisões de investimento produtivo.

Somado a isso, o ambiente de incerteza fiscal e econômica reduz ainda mais os incentivos ao investimento. O resultado é uma trajetória de investimento instável e marcada por fortes oscilações, reproduzindo um padrão semelhante ao observado no ciclo de expansão de 2008–2014.

3.2 Mercado de trabalho e produtividade

A análise do mercado de trabalho no ciclo atual exige um olhar para além da taxa de desocupação. Embora essa seja a métrica mais conhecida e utilizada, sua queda isoladamente não é suficiente para indicar, por si só, um mercado de trabalho saudável ou sustentável. Por isso, é importante analisá-la em conjunto com a taxa de subutilização, que oferece uma leitura mais ampla das condições efetivas da economia.

A taxa de subutilização engloba não apenas as pessoas desocupadas, mas também aquelas que trabalham menos horas do que gostariam - a chamada subocupação por insuficiência de horas - e a força de trabalho potencial, composta por pessoas que gostariam de trabalhar, mas não procuraram emprego por diferentes motivos, como dificuldades de deslocamento, ausência de creche para os filhos ou incompatibilidade de horários com a faculdade. Por reunir essas três dimensões, a taxa de subutilização funciona como um termômetro mais sensível das condições do mercado de trabalho.

A análise conjunta dos dois indicadores é importante porque diferentes combinações entre eles revelam estados distintos da economia. Em alguns períodos de recessão, por exemplo, a taxa de desocupação pode permanecer relativamente baixa, transmitindo a impressão de um mercado de trabalho aquecido. Entretanto, se a subutilização permanecer elevada, o quadro real ainda indica a existência de trabalhadores subocupados ou fora da força de trabalho, mas ainda disponíveis para trabalhar.

Gráfico 21:

No caso brasileiro recente, porém, o movimento observado foi de queda simultânea tanto da taxa de desocupação quanto da taxa de subutilização. Em julho de 2020, a taxa de desocupação encontrava-se em 14,9%, enquanto a taxa de subutilização atingia 30,4%. Em outubro de 2025, ambos os indicadores haviam recuado de forma expressiva: a desocupação chegou a 5,1% e a subutilização a 13,4%.

A trajetória de queda é evidente nas duas séries, refletindo uma redução consistente do desemprego e da força de trabalho subutilizada ao longo do período. Entretanto, no caso brasileiro atual, essa configuração não é necessariamente positiva. As duas taxas encontram-se simultaneamente em níveis muito baixos, indicando que há pouca folga disponível no mercado de trabalho. Em outras palavras, grande parte das pessoas que poderiam ser incorporadas ao mercado já se encontra ocupada ou procurando emprego ativamente.

Esse cenário tende a gerar pressões salariais, que posteriormente podem se traduzir em pressões inflacionárias, dificultando a condução da política monetária e impondo limites adicionais ao crescimento econômico. Em economias com ganhos robustos de produtividade, um mercado de trabalho aquecido pode ser sustentado por aumentos da capacidade produtiva. No caso brasileiro, contudo, essa preocupação se torna mais relevante justamente porque o desempenho da produtividade permanece limitado.

Nesse sentido, o gráfico 22 apresenta a evolução recente da Produtividade Total dos Fatores (PTF).

Gráfico 22:

Como observado no gráfico 22, a PTF apresentada já incorpora o ajuste por capital humano - cuja importância foi discutida anteriormente -, garantindo que os movimentos observados reflitam ganhos efetivos de eficiência produtiva, e não simplesmente o aumento da escolaridade ou da qualificação da força de trabalho. Além disso, adicionou-se uma média móvel de quatro trimestres (linha amarela), que permite visualizar a tendência da série ao suavizar oscilações pontuais.

A série inicia em julho de 2020 em um patamar elevado, de aproximadamente 92 pontos, valor que pode ser associado ao contexto pós-pandêmico, marcado pelo retorno gradual da atividade econômica e por padrões atípicos de trabalho. A partir desse ponto, a PTF apresenta uma queda significativa, atingindo 87,3 já em abril de 2021, sinalizando que o nível elevado observado no início da série não se sustentou.

Ao longo do período, observam-se algumas recuperações pontuais, como entre julho de 2022 e janeiro de 2023, e entre outubro de 2023 e janeiro de 2024. Entretanto, tanto a média móvel quanto a própria série evidenciam que, apesar desses movimentos intermediários, a tendência geral da PTF ao longo do período foi de queda. O dado mais recente, referente ao quarto trimestre de 2025, registra a PTF em 83,9, patamar significativamente inferior aos 92 observados no início da série analisada.

Esse resultado é particularmente preocupante quando combinado com o quadro do mercado de trabalho discutido anteriormente. A economia brasileira encontra-se em uma situação em que praticamente todas as pessoas que poderiam estar trabalhando já se encontram ocupadas, mas, ao mesmo tempo, essas pessoas não estão se tornando mais produtivas ao longo do tempo. Em outras palavras, o país atingiu o limite da acumulação de fatores no mercado de trabalho sem que isso fosse acompanhado por ganhos de eficiência produtiva. Esse cenário impõe restrições importantes ao crescimento de longo prazo. Sem aumentos consistentes de produtividade, a economia perde a capacidade de produzir mais utilizando os mesmos recursos, reproduzindo, e agravando, uma das principais fragilidades estruturais já identificadas no ciclo de expansão de 2008–2014.

3.3 Confiança, incerteza e limites do crescimento

Para além dos indicadores de atividade, mercado de trabalho e produtividade, a análise do ciclo atual se beneficia da observação de indicadores qualitativos que captam a percepção de empresários e consumidores sobre o estado da economia. O gráfico 23 apresenta o Índice de Confiança Empresarial (ICE) e o Índice de Confiança do Consumidor (ICC), ambos calculados pela FGV/IBRE, em conjunto com o Nível de Utilização da Capacidade Instalada (NUCI), que mede o quanto a indústria está efetivamente operando em relação ao seu potencial de produção.

Gráfico 23:

Como observado no gráfico 23, o NUCI (linha azul clara) mantém-se em patamares relativamente elevados ao longo de todo o período, o que indica baixa ociosidade na indústria. Esse comportamento pode parecer positivo à primeira vista, mas deve ser lido com cautela: uma indústria operando próxima do seu limite de capacidade pode gerar pressão de preços pelo lado da demanda, dado que qualquer aumento do consumo encontra dificuldades de ser absorvido pela produção corrente. Em outras palavras, o NUCI elevado não significa, automaticamente, uma indústria em expansão - significa apenas que não há folga produtiva para absorver choques de demanda.

O ICE (linha amarela), que mede a confiança empresarial, segue em níveis fracos, principalmente no que diz respeito às expectativas futuras dos empresários. Esse comportamento é macroeconomicamente relevante porque a confiança empresarial é um dos principais determinantes das decisões de investimento e contratação. Quando os empresários não enxergam um horizonte claro de expansão da demanda, eles tendem a postergar projetos, limitar a expansão da produção e manter quadros de pessoal mais enxutos - reforçando, na prática, a fragilidade do investimento já observada anteriormente.

O ICC (linha azul escura), por sua vez, apresenta trajetória de recuperação ao longo do período. O movimento é consistente com a melhora do mercado de trabalho discutida em 3.2, que ampliou tanto a ocupação quanto a renda das famílias. Apesar dessa recuperação, contudo, o índice permanece abaixo de 100 pontos - patamar considerado neutro -, sinalizando que o consumidor brasileiro segue cauteloso quanto às perspectivas futuras, mesmo diante de uma situação corrente mais favorável.

A leitura conjunta dos três indicadores revela uma contradição importante do ciclo atual: a economia mostra resiliência no presente, refletida na utilização da capacidade instalada e na melhora do consumo, mas opera com baixa confiança em relação ao futuro. Esse descompasso entre o desempenho corrente e as expectativas futuras impõe um limite adicional ao crescimento, pois reduz os incentivos para que empresas ampliem seus investimentos e para que famílias aumentem o consumo de bens duráveis - perpetuando, assim, as fragilidades estruturais já identificadas ao longo desta seção.

3.4 Situação fiscal e dívida pública

Atualmente, não é possível analisar a situação econômica brasileira sem passar pela questão da dívida pública. O endividamento do governo geral encontra-se em um patamar elevado, próximo de 80% do PIB, e a trajetória dos indicadores fiscais nos últimos anos reforça a preocupação com a sustentabilidade das contas públicas. O gráfico 24 apresenta a evolução da Necessidade de Financiamento do Setor Público (NFSP) e da Dívida Bruta do Governo Geral entre 2020 e 2025.

Gráfico 24:

Como observado no gráfico 24, as barras amarelas representam a NFSP - sendo que valores positivos correspondem a déficits primários do governo, e valores negativos a superávits. A linha azul escura, por sua vez, mostra a evolução da dívida bruta do governo geral como percentual do PIB. Desde julho de 2023, o Brasil tem registrado déficits primários praticamente contínuos, o que significa que as receitas do governo não têm sido suficientes para cobrir seus gastos correntes, excluídos os juros da dívida. Entre novembro e dezembro de 2024, observa-se uma redução do tamanho desses déficits, e ao longo de 2025 os déficits têm se mantido em níveis mais baixos. Ainda assim, a situação fiscal brasileira permanece preocupante.

A redução do déficit é, sem dúvida, um movimento positivo. No entanto, é importante notar que a dívida pública brasileira já se encontra em patamar elevado - chegando em quase 80% do PIB como pode ser visto na linha azul -, e isso faz com que ela apresente uma dinâmica de crescimento praticamente autônoma. Mesmo que o governo conseguisse zerar completamente seus gastos discricionários, a dívida continuaria a crescer, impulsionada pela combinação entre um crescimento econômico baixo e juros estruturalmente elevados. Em outras palavras, o resultado primário deixa de ser suficiente, isoladamente, para estabilizar a trajetória da dívida quando o diferencial entre a taxa de juros e a taxa de crescimento da economia é amplo e persistente.

Esse quadro fiscal precisa ser lido em conjunto com os indicadores discutidos nas seções anteriores. A economia brasileira encontra-se em uma situação na qual a estrutura produtiva não se transformou, o investimento permanece instável, o mercado de trabalho está aquecido sem reservas de mão de obra disponível, e a produtividade segue em trajetória de queda. Esse conjunto de fragilidades estruturais limita a capacidade de crescimento do país no longo prazo - e, justamente por isso, retroalimenta a deterioração fiscal: sem crescimento robusto, a relação dívida/PIB tende a se elevar mesmo na ausência de novos déficits expressivos.

O resultado é um cenário em que as contas públicas se deterioram não apenas pelo lado do gasto, mas também pela própria fragilidade estrutural da economia brasileira em gerar crescimento sustentado.

Conclusão

A análise histórica dos ciclos econômicos brasileiros se mostra fundamental para a compreensão do momento atual da economia. Ao longo deste relatório, foram examinados o ciclo de expansão de 2008–2014, a recessão de 2014–2016 e a fase iniciada após o segundo trimestre de 2020, buscando identificar não apenas os movimentos de cada período, mas, sobretudo, os padrões estruturais que se repetem ao longo do tempo. Essa abordagem permite observar que muitas das fragilidades identificadas na economia brasileira atual têm raízes em ciclos anteriores, e que sua persistência impõe limites importantes ao crescimento de longo prazo.

A situação atual da economia brasileira é preocupante. O crescimento permanece em ritmo baixo, a indústria opera próxima do limite da capacidade instalada, o mercado de trabalho encontra-se aquecido, com taxas de desocupação e subutilização em níveis mínimos, e a produtividade total dos fatores segue em trajetória de queda. Esse conjunto de indicadores aponta para uma economia que, embora apresente resiliência no curto prazo, encontra-se estagnada em termos estruturais — com pouca folga de capacidade produtiva, sem ganhos consistentes de eficiência e com fragilidades fiscais persistentes. O Brasil precisa, portanto, encontrar mecanismos para crescer de forma sustentável, o que exige, necessariamente, uma perspectiva de longo prazo voltada ao aumento da produtividade, à transformação estrutural da economia e à ampliação do investimento produtivo.

Quanto à fase em que a economia brasileira efetivamente se encontra, ainda não há definição oficial. O último ciclo datado pelo CODACE foi encerrado no segundo trimestre de 2020 e, até o momento da publicação deste relatório, em maio de 2026, não houve divulgação de novas datas - de modo que não é possível afirmar formalmente se o país segue em expansão ou se já transitou para uma nova fase recessiva. Independentemente da datação, contudo, o ponto central da análise permanece o mesmo. Se o Brasil ainda se encontra em expansão, as fragilidades observadas são exatamente as mesmas que precederam a recessão de 2014–2016: baixa produtividade, investimento instável, estrutura produtiva pouco alterada e contas públicas fragilizadas. Se uma nova recessão já estiver em curso, essas mesmas fragilidades estão entre suas principais causas.

Em qualquer das hipóteses, a conclusão é a mesma. Os problemas estruturais que limitam o crescimento da economia brasileira não são novos: foram identificados no ciclo de expansão de 2008–2014, expostos com nitidez pela recessão de 2014–2016 e seguem presentes no ciclo atual. Enquanto essas questões estruturais não forem efetivamente enfrentadas - sobretudo no que diz respeito à produtividade e ao investimento produtivo - a economia brasileira tende a permanecer presa em ciclos curtos de crescimento moderado seguidos por recessões profundas, sem conseguir consolidar uma trajetória de expansão sustentável no longo prazo.

Referências

ABEL, Andrew B.; BERNANKE, Ben S.; CROUSHORE, Dean. Macroeconomia. 6. ed. São Paulo: Pearson Addison Wesley, 2008.AGÊNCIA BRASIL. Fitch rebaixa nota e Brasil perde grau de investimento. Brasília: EBC, 2015. Disponível em: https://agenciabrasil.ebc.com.br/economia/noticia/2015-12/fitch-rebaixa-brasil-e-pais-perde-grau-de-investimento. Acesso em: 25 maio 2026.BALASSIANO, Marcel. Recessão brasileira (2014-2016): uma análise por meio do método do controle sintético do PIB, PIB per capita, taxa de investimento e taxa de desemprego. Blog do IBRE, 2018. Disponível em: https://blogdoibre.fgv.br/posts/recessao-brasileira-2014-2016-uma-analise-por-meio-do-metodo-do-controle-sintetico-do-pib-pib. Acesso em: 25 maio 2026.BANCO CENTRAL DO BRASIL. Sistema Gerenciador de Séries Temporais (SGS): séries de crédito, Selic e indicadores monetários. Brasília: BCB, 2024. Disponível em: https://www3.bcb.gov.br/sgspub/. Acesso em: 25 maio 2026.BARRETO, Flávio Ataliba; AVELINO, Pedro; FRANÇA, João Mário Santos de. Novas evidências sobre o peso do crédito nas famílias brasileiras. Blog do IBRE, 2026. Disponível em: https://blogdoibre.fgv.br/posts/novas-evidencias-sobre-o-peso-do-credito-nas-familias-brasileiras. Acesso em: 25 maio 2026.COMITÊ DE DATAÇÃO DE CICLOS ECONÔMICOS (CODACE). Cronologia de Ciclos da Economia Brasileira. Rio de Janeiro: FGV IBRE, 2024. Disponível em: https://portalibre.fgv.br/codace-cronologia. Acesso em: 25 maio 2026.CRISE econômica brasileira de 2014. In: WIKIPÉDIA: a enciclopédia livre. [S. l.], 2025. Disponível em: https://pt.wikipedia.org/wiki/Crise_econ%C3%B4mica_brasileira_de_2014. Acesso em: 25 maio 2026.DEPARTAMENTO INTERSINDICAL DE ESTATÍSTICA E ESTUDOS SOCIOECONÔMICOS. Nota técnica nº 79: política de valorização do salário mínimo — valor para 2009. São Paulo: DIEESE, 2009. Disponível em: https://www.dieese.org.br/notatecnica/2009/notatec79SalMin2009.html. Acesso em: 25 maio 2026.DEPARTAMENTO INTERSINDICAL DE ESTATÍSTICA E ESTUDOS SOCIOECONÔMICOS. Nota técnica nº 135: a evolução do crédito na economia brasileira 2008–2014. São Paulo: DIEESE, 2014. Disponível em: https://www.dieese.org.br/notatecnica/2014/notaTec135Credito.pdf. Acesso em: 25 maio 2026.E-CÁLCULOS. Histórico do salário mínimo. [s.l.: s.n., s.d.]. Disponível em: https://www.ecalculos.com.br/utilitarios/historico-salario-minimo.php. Acesso em: 25 maio 2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de Economia (FGV IBRE). Indicadores trimestrais de PTF: 4º trimestre de 2025. Rio de Janeiro: FGV IBRE, 2026. Disponível em: https://ibre.fgv.br/sites/ibre.fgv.br/files/arquivos/u65/indicadores_trimestrais_de_ptf_-_4t2025.pdf. Acesso em: 25 maio 2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de Economia (FGV IBRE). Observatório da Produtividade Regis Bonelli. Rio de Janeiro: FGV IBRE, 2024. Disponível em: https://ibre.fgv.br/observatorio-produtividade. Acesso em: 25 maio 2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de Economia (FGV IBRE). Portal do Ciclo Econômico. Rio de Janeiro: FGV IBRE, 2024. Disponível em: https://ciclo-economico-ibre.fgv.br/. Acesso em: 25 maio 2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de Economia (FGV IBRE). Resultados dos indicadores de produtividade do trabalho no quarto trimestre de 2025. Blog do IBRE, 2026. Disponível em: https://blogdoibre.fgv.br/posts/resultados-dos-indicadores-de-produtividade-do-trabalho-no-quarto-trimestre-de-2025. Acesso em: 25 maio 2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de Economia (FGV IBRE). Sobre ciclos econômicos. Rio de Janeiro: FGV IBRE, 2024. Disponível em: https://portalibre.fgv.br/sobre-ciclos-economicos. Acesso em: 25 maio 2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de Economia (FGV IBRE). Sondagens, Índices de Confiança e Indicadores de Atividade. Rio de Janeiro: FGV IBRE, [2026]. Disponível em: https://portalibre.fgv.br. Acesso em: 25 maio 2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Contas Nacionais Trimestrais. Rio de Janeiro: IBGE, 2024. Disponível em: https://www.ibge.gov.br/estatisticas/economicas/contas-nacionais/9300-contas-nacionais-trimestrais.html. Acesso em: 25 maio 2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Evolução do Mercado de Trabalho: retrospectiva 2003–2014. Rio de Janeiro: IBGE, 2015. Disponível em: https://ftp.ibge.gov.br/Trabalho_e_Rendimento/Pesquisa_Mensal_de_Emprego/Evolucao_Mercado_Trabalho/retrospectiva2003_2014.pdf. Acesso em: 25 maio 2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Índice Nacional de Preços ao Consumidor (INPC). Rio de Janeiro: IBGE, [2026]. Disponível em: https://www.ibge.gov.br/estatisticas/economicas/precos-e-custos/9258-indice-nacional-de-precos-ao-consumidor.html. Acesso em: 25 maio 2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Pesquisa Mensal de Emprego (PME). Rio de Janeiro: IBGE, [2026]. Disponível em: https://www.ibge.gov.br/estatisticas/sociais/trabalho/9180-pesquisa-mensal-de-emprego.html. Acesso em: 25 maio 2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Pesquisa Nacional por Amostra de Domicílios Contínua (PNAD Contínua). Rio de Janeiro: IBGE, [2026]. Disponível em: https://sidra.ibge.gov.br/Tabela/1846. Acesso em: 25 maio 2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Sistema IBGE de Recuperação Automática (SIDRA): Tabelas 5932 (Contas Nacionais Trimestrais) e 4099 (PNAD Contínua). Rio de Janeiro: IBGE, 2024. Disponível em: https://sidra.ibge.gov.br/. Acesso em: 25 maio 2026.RANDO, Imira Taira. O Brasil e a crise financeira: políticas econômicas (2008–2014). Trabalho de conclusão de curso — Faculdade de Ciências e Letras, Universidade Estadual Paulista “Júlio de Mesquita Filho”, Campus de Araraquara, [s.d.]. Disponível em: https://repositorio.unesp.br/server/api/core/bitstreams/bf788161-c4c8-4db3-905e-0791ec8e4e55/content. Acesso em: 25 maio 2026.VELOSO, Fernando; FEIJÓ, Janaína; BARBOSA FILHO, Fernando de Holanda; RUHE, Ana Paula. Índice de Capital Humano (ICH) Anual. Rio de Janeiro: FGV IBRE, jun. 2023. Disponível em: https://ibre.fgv.br/sites/ibre.fgv.br/files/arquivos/u65/ich_anual_final.pdf. Acesso em: 25 maio 2026.

LS0tDQp0aXRsZTogIkJyYXNpbDogZW0gZXhwYW5zw6NvIG91IHJlY2Vzc8Ojbz8gVW1hIGFuw6FsaXNlIGhpc3TDs3JpY2EgZG9zIGNpY2xvcyBlY29uw7RtaWNvcyBicmFzaWxlaXJvcyINCmF1dGhvcjogIlJvYmVydGEgTG9iYXRvIGUgVGhpYWdvIEZyYWdvc28iDQpkYXRlOiAiMjAyNi0wNS0yNSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0aGVtZTogbHVtZW4NCiAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgY29kZV9mb2xkaW5nOiBzaG93DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICBwZGZfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KLS0tDQpgYGBgYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkNCmxpYnJhcnkoZmxleHRhYmxlKQ0KbGlicmFyeShvZmZpY2VyKQ0KbGlicmFyeShHZXRCQ0JEYXRhKQ0KbGlicmFyeShodG1sd2lkZ2V0cykNCmxpYnJhcnkod2Vic2hvdDIpDQpsaWJyYXJ5KHpvbykNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KHNpZHJhcikNCmxpYnJhcnkoaXBlYWRhdGFyKQ0KbGlicmFyeShxdWFudG1vZCkNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHJiY2IpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkod3JpdGV4bCkNCmxpYnJhcnkoaHR0cikNCmxpYnJhcnkodGlkeXIpDQpsaWJyYXJ5KGZyZWRyKQ0KZGFkb3NfZGlyIDwtICJDOi9Vc2Vycy9yb2Jlci9Eb3dubG9hZHMiDQpgYGBgYGBgDQoNCiMgSW50cm9kdcOnw6NvIA0KQ2ljbG9zIGVjb27DtG1pY29zIHPDo28gZmx1dHVhw6fDtWVzIGPDrWNsaWNhcyBkYSBhdGl2aWRhZGUgZWNvbsO0bWljYSBtYXJjYWRhcyBwZWxhIGFsdGVybsOibmNpYSBlbnRyZSBmYXNlcyBkZSBleHBhbnPDo28gZSByZWNlc3PDo28uIFN1YSBjYXJhY3RlcsOtc3RpY2EgY2VudHJhbCDDqSBxdWUsIGVtYm9yYSByZWNvcnJlbnRlcywgZXNzYXMgZmx1dHVhw6fDtWVzIG7Do28gc8OjbyBwZXJpw7NkaWNhczogbsOjbyBow6EgcmVndWxhcmlkYWRlIHF1ZSBwZXJtaXRhIHByZXZlciBjb20gcHJlY2lzw6NvIHF1YW5kbyB1bWEgZmFzZSBjb21lw6dhIG91IHRlcm1pbmEuIEFpbmRhIGFzc2ltLCBhIGFuw6FsaXNlIGRvcyBjaWNsb3MgcGFzc2Fkb3MgcGVybWl0ZSBpZGVudGlmaWNhciBwYWRyw7VlcywgcmVjb25oZWNlciBmcmFnaWxpZGFkZXMgcXVlIHNlIHJlcGV0ZW0gZSBjb21wcmVlbmRlciBtZWxob3IgYSBkaW7Dom1pY2EgZGEgZWNvbm9taWEgYnJhc2lsZWlyYSBhbyBsb25nbyBkbyB0ZW1wby4NCg0KQSBUYWJlbGEgMSBhcHJlc2VudGEgYXMgZGF0YXMgb2ZpY2lhaXMgZG9zIGNpY2xvcyBlY29uw7RtaWNvcyBicmFzaWxlaXJvcywgY29uZm9ybWUgYSBkYXRhw6fDo28gZG8gQ29taXTDqiBkZSBEYXRhw6fDo28gZGUgQ2ljbG9zIEVjb27DtG1pY29zIChDT0RBQ0UpLCBkYSBGR1Y6DQoNCioqVGFiZWxhIDE6KioNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KY29kYWNlX3JlbCA8LSBkYXRhLmZyYW1lKA0KICBwaWNvID0gYygiTm92ZW1icm8gMTk4MCAoSVYpIiwgIk1hcsOnbyAxOTg3IChJKSIsICJKdWxobyAxOTg5IChJSUkpIiwNCiAgICAgICAgICAgIkphbmVpcm8gMTk5NSAoSSkiLCAiTm92ZW1icm8gMTk5NyAoSVYpIiwgIkphbmVpcm8gMjAwMSAoSSkiLA0KICAgICAgICAgICAiTm92ZW1icm8gMjAwMiAoSVYpIiwgIkFnb3N0byAyMDA4IChJSUkpIiwgIk1hcsOnbyAyMDE0IChJKSIsDQogICAgICAgICAgICI0wrogVHJpbS4gZGUgMjAxOSIpLA0KICB2YWxlID0gYygiRmV2ZXJlaXJvIDE5ODMgKEkpIiwgIk91dHVicm8gMTk4OCAoSVYpIiwgIkRlemVtYnJvIDE5OTEgKElWKSIsDQogICAgICAgICAgICJTZXRlbWJybyAxOTk1IChJSUkpIiwgIkZldmVyZWlybyAxOTk5IChJKSIsICJTZXRlbWJybyAyMDAxIChJSUkpIiwNCiAgICAgICAgICAgIkp1bmhvIDIwMDMgKElJKSIsICJEZXplbWJybyAyMDA4IChJVikiLCAiRGV6ZW1icm8gMjAxNiAoSVYpIiwNCiAgICAgICAgICAgIjLCuiBUcmltLiBkZSAyMDIwIiksDQogIHBpY29fdmFsZSA9IGMoIjI4IiwgIjIwIiwgIjMwIiwgIjkiLCAiMTYiLCAiOSIsICI4IiwgIjUiLCAiMzQiLCAi4oCTIiksDQogIG1lc2VzX2VudHJlID0gYygi4oCTIiwgIjQ4IiwgIjgiLCAiMzYiLCAiMjUiLCAiMjIiLCAiMTMiLCAiNjEiLCAiNjIiLCAi4oCTIiksDQogIHZhbGVfYW50ZXJpb3IgPSBjKCLigJMiLCAiNjgiLCAiMzgiLCAiNDUiLCAiNDEiLCAiMzEiLCAiMjEiLCAiNjYiLCAiMTE0IiwgIuKAkyIpLA0KICBwaWNvX2FudGVyaW9yID0gYygi4oCTIiwgIjc2IiwgIjI4IiwgIjY2IiwgIjM0IiwgIjM4IiwgIjIyIiwgIjY5IiwgIjY3IiwgIuKAkyIpDQopDQoNCm1lZGlhX3JvdyA8LSBkYXRhLmZyYW1lKA0KICBwaWNvID0gIkR1cmHDp8OjbyBtw6lkaWEgKGVtIG1lc2VzKSIsDQogIHZhbGUgPSAiIiwNCiAgcGljb192YWxlID0gIjE3LDciLA0KICBtZXNlc19lbnRyZSA9ICIzNCw0IiwNCiAgdmFsZV9hbnRlcmlvciA9ICI1MywwIiwNCiAgcGljb19hbnRlcmlvciA9ICI1MCwwIg0KKQ0KDQp0YWJlbGFfcmVsIDwtIGJpbmRfcm93cyhjb2RhY2VfcmVsLCBtZWRpYV9yb3cpDQoNCmZ0X3JlbCA8LSBmbGV4dGFibGUodGFiZWxhX3JlbCkgJT4lDQogIHNldF9oZWFkZXJfbGFiZWxzKA0KICAgIHBpY28gPSAiUGljbyIsDQogICAgdmFsZSA9ICJWYWxlIiwNCiAgICBwaWNvX3ZhbGUgPSAiTWVzZXMgZG9cbnBpY28gYW8gdmFsZSIsDQogICAgbWVzZXNfZW50cmUgPSAiTWVzZXMgZW50cmUgbyB2YWxlXG5hbnRlcmlvciBlIGVzdGUgcGljbyIsDQogICAgdmFsZV9hbnRlcmlvciA9ICJEbyB2YWxlIGFudGVyaW9yXG5hdMOpIGVzdGUgdmFsZSIsDQogICAgcGljb19hbnRlcmlvciA9ICJEbyBwaWNvIGFudGVyaW9yXG5hdMOpIGVzdGUgcGljbyINCiAgKSAlPiUNCiAgIyBGdW5kbyBicmFuY28gZ2VyYWwNCiAgYmcoYmcgPSAiI0ZGRkZGRiIsIHBhcnQgPSAiYWxsIikgJT4lDQogIGNvbG9yKGNvbG9yID0gIiM0NDQ0NDQiLCBwYXJ0ID0gImJvZHkiKSAlPiUNCiAgIyBIZWFkZXIgbWluaW1hbGlzdGENCiAgYmcoYmcgPSAiI0ZGRkZGRiIsIHBhcnQgPSAiaGVhZGVyIikgJT4lDQogIGNvbG9yKGNvbG9yID0gIiMwMjAyM0MiLCBwYXJ0ID0gImhlYWRlciIpICU+JQ0KICBib2xkKHBhcnQgPSAiaGVhZGVyIikgJT4lDQogICMgRGVzdGFxdWUgZXhwYW5zw6NvIDIwMDgNCiAgYmcoaSA9IDgsIGJnID0gIiNGRkY4RTciKSAlPiUNCiAgY29sb3IoaSA9IDgsIGNvbG9yID0gIiMwMjAyM0MiKSAlPiUNCiAgYm9sZChpID0gOCkgJT4lDQogICMgRGVzdGFxdWUgcmVjZXNzw6NvIDIwMTQNCiAgYmcoaSA9IDksIGJnID0gIiNFOEVBRjAiKSAlPiUNCiAgY29sb3IoaSA9IDksIGNvbG9yID0gIiMwMjAyM0MiKSAlPiUNCiAgYm9sZChpID0gOSkgJT4lDQogICMgTGluaGEgbcOpZGlhDQogIGJnKGkgPSBucm93KHRhYmVsYV9yZWwpLCBiZyA9ICIjRjVGNUY1IikgJT4lDQogIGNvbG9yKGkgPSBucm93KHRhYmVsYV9yZWwpLCBjb2xvciA9ICIjNDQ0NDQ0IikgJT4lDQogIGJvbGQoaSA9IG5yb3codGFiZWxhX3JlbCkpICU+JQ0KICBpdGFsaWMoaSA9IG5yb3codGFiZWxhX3JlbCkpICU+JQ0KICAjIEJvcmRhcyBtaW5pbWFsaXN0YXMNCiAgYm9yZGVyX3JlbW92ZSgpICU+JQ0KICBobGluZShpID0gMSwgYm9yZGVyID0gZnBfYm9yZGVyKGNvbG9yID0gIiMwMjAyM0MiLCB3aWR0aCA9IDEuNSksIHBhcnQgPSAiaGVhZGVyIikgJT4lDQogIGhsaW5lX3RvcChib3JkZXIgPSBmcF9ib3JkZXIoY29sb3IgPSAiIzAyMDIzQyIsIHdpZHRoID0gMS41KSwgcGFydCA9ICJoZWFkZXIiKSAlPiUNCiAgaGxpbmVfYm90dG9tKGJvcmRlciA9IGZwX2JvcmRlcihjb2xvciA9ICIjQ0NDQ0NDIiwgd2lkdGggPSAwLjUpLCBwYXJ0ID0gImJvZHkiKSAlPiUNCiAgIyBMaW5oYXMgc2VwYXJhZG9yYXMgc3VhdmVzDQogIGhsaW5lKGkgPSBjKDE6MTApLCBib3JkZXIgPSBmcF9ib3JkZXIoY29sb3IgPSAiI0VFRUVFRSIsIHdpZHRoID0gMC41KSwgcGFydCA9ICJib2R5IikgJT4lDQogICMgQWxpbmhhbWVudG8NCiAgYWxpZ24oYWxpZ24gPSAiY2VudGVyIiwgcGFydCA9ICJhbGwiKSAlPiUNCiAgYWxpZ24oaiA9IDE6MiwgYWxpZ24gPSAibGVmdCIsIHBhcnQgPSAiYWxsIikgJT4lDQogICMgRm9udGUNCiAgZm9udChmb250bmFtZSA9ICJBcmlhbCIsIHBhcnQgPSAiYWxsIikgJT4lDQogIGZvbnRzaXplKHNpemUgPSAxMCwgcGFydCA9ICJib2R5IikgJT4lDQogIGZvbnRzaXplKHNpemUgPSAxMCwgcGFydCA9ICJoZWFkZXIiKSAlPiUNCiAgcGFkZGluZyhwYWRkaW5nLnRvcCA9IDYsIHBhZGRpbmcuYm90dG9tID0gNiwgcGFydCA9ICJhbGwiKSAlPiUNCiAgIyBGb250ZS9jYXB0aW9uDQogIGFkZF9mb290ZXJfbGluZXMoIkZvbnRlOiBDT0RBQ0UvRkdWLUlCUkUuIikgJT4lDQogIGNvbG9yKGNvbG9yID0gIiM4ODg4ODgiLCBwYXJ0ID0gImZvb3RlciIpICU+JQ0KICBmb250c2l6ZShzaXplID0gOSwgcGFydCA9ICJmb290ZXIiKSAlPiUNCiAgaXRhbGljKHBhcnQgPSAiZm9vdGVyIikgJT4lDQogIGF1dG9maXQoKQ0KDQpmdF9yZWwNCmBgYA0KDQpFc3RlIHJlbGF0w7NyaW8gYWRvdGEgdW1hIGFib3JkYWdlbSBoaXN0w7NyaWNhLiBBbmFsaXNhLXNlLCBpbmljaWFsbWVudGUsIG8gY2ljbG8gZGUgZXhwYW5zw6NvIGRlIDIwMDjigJMyMDE0IGUgYSByZWNlc3PDo28gZGUgMjAxNOKAkzIwMTYsIGJ1c2NhbmRvIGlkZW50aWZpY2FyIG9zIG1vdG9yZXMgZGUgY3Jlc2NpbWVudG8gZSBhcyBmcmFnaWxpZGFkZXMgZXN0cnV0dXJhaXMgZGUgY2FkYSBwZXLDrW9kby4gRW0gc2VndWlkYSwgb2JzZXJ2YS1zZSBxdWFpcyBkZXNzZXMgcGFkcsO1ZXMgcGVyc2lzdGVtLCBzZSB0cmFuc2Zvcm1hcmFtIG91IGZvcmFtIHN1cGVyYWRvcyBubyBCcmFzaWwgYXR1YWwuIA0KDQpBIGVzY29saGEgcG9yIHVtYSBhbsOhbGlzZSBoaXN0w7NyaWNhIG1haXMgYXByb2Z1bmRhZGEgcGFydGUgZGEgcHJlbWlzc2EgZGUgcXVlIG11aXRhcyBkYXMgcXVlc3TDtWVzIGVzdHJ1dHVyYWlzIHF1ZSBhZmV0YW0gYSBhdGl2aWRhZGUgZWNvbsO0bWljYSBicmFzaWxlaXJhIGhvamUgdMOqbSByYcOtemVzIGVtIGNpY2xvcyBhbnRlcmlvcmVzLiBDb21wcmVlbmTDqi1sYXMgZXhpZ2UsIHBvcnRhbnRvLCBvbGhhciBwYXJhIHRyw6FzIGFudGVzIGRlIGludGVycHJldGFyIG8gcHJlc2VudGUuDQoNCiMgMS4gQSBFeHBhbnPDo28gUMOzcy1DcmlzZSAoMjAwOOKAkzIwMTQpDQojIyAxLjEgTyBjb2xjaMOjbyBleHRlcm5vOiBjb21vIG8gQnJhc2lsIHNhaXUgZGEgY3Jpc2UNCg0KQ29udGV4dHVhbGl6YW5kbyBoaXN0b3JpY2FtZW50ZSwgYSBjcmlzZSBkZSAyMDA4IGZvaSBtYXJjYWRhIHBvciB1bWEgZXh0cmVtYSBkZXNjb25maWFuw6dhIG5vIG1lcmNhZG8uIENvbSBhIHF1ZWJyYSBkZSBpbnN0aXR1acOnw7VlcyBjb21vIG8gTGVobWFuIEJyb3RoZXJzIC0gdW0gZG9zIG1haW9yZXMgYmFuY29zIGRlIGludmVzdGltZW50byBkbyBtdW5kbyAtLCBzdXJnaXUgdW1hIHByZW9jdXBhw6fDo28gZ2VuZXJhbGl6YWRhOiBvIHF1ZSBwb2RlcmlhIGFjb250ZWNlciBjb20gbyBzaXN0ZW1hIGZpbmFuY2Vpcm8gZ2xvYmFsPyBFbSBtb21lbnRvcyBkZSBtZWRvLCBvY29ycmUgbyBjaGFtYWRvIGZsaWdodC10by1xdWFsaXR5LCBhIGNvcnJpZGEgcG9yIGF0aXZvcyBtYWlzIHNlZ3Vyb3MsIGNvbW8gbyBkw7NsYXIuIENvbSBpc3NvLCBhIGRlbWFuZGEgcGVsYSBtb2VkYSBhbWVyaWNhbmEgYXVtZW50YSBhYnJ1cHRhbWVudGUsIHByZXNzaW9uYW5kbyBzZXUgcHJlw6dvIHBhcmEgY2ltYS4gDQoNCk5vIEdyw6FmaWNvIDEsIG9ic2VydmEtc2UgcXVlIG8gQnJhc2lsIGhhdmlhIGFjdW11bGFkbyByZXNlcnZhcyBpbnRlcm5hY2lvbmFpcyBhbyBsb25nbyBkb3MgYW5vcyBhbnRlcmlvcmVzIMOgIGNyaXNlLiBObyBtb21lbnRvIGRvIGNob3F1ZSwgZXNzYXMgcmVzZXJ2YXMgcmVjdWFyYW0sIGV2aWRlbmNpYW5kbyBzZXUgdXNvIGNvbW8gYW1vcnRlY2Vkb3IuIEEgbGluaGEgZG8gY8OibWJpbyBlbSBzZXUgcG9udG8gbWFpcyBhbHRvIGNvcnJlc3BvbmRlIGV4YXRhbWVudGUgYW8gcGVyw61vZG8gZW0gcXVlIGFzIHJlc2VydmFzIGVzdGF2YW0gc2VuZG8gY29uc3VtaWRhcywgaWx1c3RyYW5kbyBhIHJlbGHDp8OjbyBlbnRyZSBvcyBkb2lzIG1vdmltZW50b3MuDQoNCioqR3LDoWZpY28gMToqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0Kc3RhcnRfZGF0ZSA8LSBhcy5EYXRlKCIyMDA0LTAxLTAxIikNCmVuZF9kYXRlICAgPC0gYXMuRGF0ZSgiMjAxNC0wMy0zMSIpDQoNCmNvbF9yZXNlcnZhcyA8LSAiI0ZFQjAxNSINCmNvbF9kb2xhciAgICA8LSAiIzAyMDIzQyINCg0KIyBSZXNlcnZhczogU0dTIDM1NDYg4oCUIG1lbnNhbCwgVVMkIG1pbGjDtWVzDQpyZXNlcnZhcyA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IDM1NDYsDQogIGZpcnN0LmRhdGUgPSBzdGFydF9kYXRlLA0KICBsYXN0LmRhdGUgID0gZW5kX2RhdGUsDQogIHVzZS5tZW1vaXNlID0gRkFMU0UNCikgfD4NCiAgc2VsZWN0KGRhdGUgPSByZWYuZGF0ZSwgcmVzZXJ2YXMgPSB2YWx1ZSkNCg0KIyBEw7NsYXI6IFNHUyAxMDgxMyDigJQgZGnDoXJpbzsgY29sYXBzYSBwYXJhIGZpbmFsIGRlIG3DqnMgKG3DqWRpYSBtZW5zYWwpDQpkb2xhciA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IDEwODEzLA0KICBmaXJzdC5kYXRlID0gc3RhcnRfZGF0ZSwNCiAgbGFzdC5kYXRlICA9IGVuZF9kYXRlLA0KICB1c2UubWVtb2lzZSA9IEZBTFNFDQopIHw+DQogIHNlbGVjdChkYXRlID0gcmVmLmRhdGUsIHVzZCA9IHZhbHVlKSB8Pg0KICBtdXRhdGUobWVzID0gZmxvb3JfZGF0ZShkYXRlLCAibW9udGgiKSkgfD4NCiAgZ3JvdXBfYnkobWVzKSB8Pg0KICBzdW1tYXJpc2UodXNkID0gbWVhbih1c2QsIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpIHw+DQogIHJlbmFtZShkYXRlID0gbWVzKQ0KDQpoYyA8LSBoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpIHw+DQogIGhjX3RpdGxlKHRleHQgPSAiVmFyaWHDp8OjbyBkYXMgUmVzZXJ2YXMgSW50ZXJuYWNpb25haXMgZSBkYSBUYXhhIGRlIEPDom1iaW88YnI+MjAwNC0yMDE0IiwNCiAgICAgICAgICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiMwMjAyM0MiLCBmb250V2VpZ2h0ID0gImJvbGQiKSkgfD4NCiAgaGNfc3VidGl0bGUodGV4dCA9ICJTw6lyaWVzIG1lbnNhaXMg4oCUIGphbi8yMDA0IGEgbWFyLzIwMTQiLA0KICAgICAgICAgICAgICBhbGlnbiA9ICJjZW50ZXIiKSB8Pg0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICJSZXNlcnZhcyBpbnRlcm5hY2lvbmFpczxicj4oVVMkIG1pbGjDtWVzKSIsDQogICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gY29sX3Jlc2VydmFzKSksDQogICAgICAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9IGNvbF9yZXNlcnZhcykpLA0KICAgICAgICAgb3Bwb3NpdGUgPSBGQUxTRSksDQogICAgbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICJUYXhhIGRlIGPDom1iaW88YnI+KFIkL1VTJCkiLA0KICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IGNvbF9kb2xhcikpLA0KICAgICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSBjb2xfZG9sYXIpKSwNCiAgICAgICAgIG9wcG9zaXRlID0gVFJVRSkNCiAgKSB8Pg0KICBoY19hZGRfc2VyaWVzKGRhdGEgPSByZXNlcnZhcywgdHlwZSA9ICJsaW5lIiwNCiAgICAgICAgICAgICAgICBoY2Flcyh4ID0gZGF0ZSwgeSA9IHJlc2VydmFzKSwNCiAgICAgICAgICAgICAgICBuYW1lID0gIlJlc2VydmFzIGludGVybmFjaW9uYWlzIiwNCiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbF9yZXNlcnZhcywgeUF4aXMgPSAwKSB8Pg0KICBoY19hZGRfc2VyaWVzKGRhdGEgPSBkb2xhciwgdHlwZSA9ICJsaW5lIiwNCiAgICAgICAgICAgICAgICBoY2Flcyh4ID0gZGF0ZSwgeSA9IHVzZCksDQogICAgICAgICAgICAgICAgbmFtZSA9ICJVU0QvQlJMIiwNCiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbF9kb2xhciwgeUF4aXMgPSAxKSB8Pg0KICBoY190b29sdGlwKHNoYXJlZCA9IFRSVUUsIHZhbHVlRGVjaW1hbHMgPSAyKSB8Pg0KICBoY19sZWdlbmQoZW5hYmxlZCA9IFRSVUUpIHw+DQogIGhjX2NyZWRpdHMoZW5hYmxlZCA9IFRSVUUsDQogICAgICAgICAgICAgdGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgKFNHUyAzNTQ2IGUgMTA4MTMpLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgICAgICAgICAgaHJlZiA9ICIiKQ0KDQpoYw0KYGBgDQoNCkEgaW50ZXJ2ZW7Dp8OjbyBkbyBCYW5jbyBDZW50cmFsIGZvaSBmb2NhZGEgZW0gcmVzb2x2ZXIgYSBlc2Nhc3NleiBkZSBkw7NsYXJlcyBubyBtZXJjYWRvLiBBIHByaW5jaXBhbCB0w6F0aWNhIGZvaSBvIHVzbyBkZSB2ZW5kYXMgY29tIGNvbXByb21pc3NvIGRlIHJlY29tcHJhOiBvIEJDIG9mZXJlY2V1IGTDs2xhcmVzIGFvcyBiYW5jb3MgY29tIGEgZ2FyYW50aWEgZGUgcmVjb21wcsOhLWxvcyBlbSBkYXRhIGZ1dHVyYSwgc2FuYW5kbyBhIGZhbHRhIGRlIGxpcXVpZGV6IHNlbSBjb21wcm9tZXRlciBwZXJtYW5lbnRlbWVudGUgbyBlc3RvcXVlIGRlIHJlc2VydmFzLiBEZSBmb3JtYSBjb21wbGVtZW50YXIsIG8gQkMgdXRpbGl6b3UgYXMgcmVzZXJ2YXMgcGFyYSBzdXByaXIgYSBlc2Nhc3NleiBkZSBjcsOpZGl0byBleHRlcm5vIG5vIGZpbmFuY2lhbWVudG8gZG8gY29tw6lyY2lvIGV4dGVyaW9yIC0gYXMgY2hhbWFkYXMgbGluaGFzIGRlIHRyYWRlIGZpbmFuY2UgLSBxdWUgaGF2aWFtIHNpZG8gY29ydGFkYXMgcGVsb3MgYmFuY29zIGludGVybmFjaW9uYWlzIGNvbSBhIGVjbG9zw6NvIGRhIGNyaXNlLiBTZW0gZXNzZSBzdXBvcnRlLCBvcyBleHBvcnRhZG9yZXMgYnJhc2lsZWlyb3MgbsOjbyB0ZXJpYW0gY29tbyBmaW5hbmNpYXIgbyBpbnRlcnZhbG8gZW50cmUgYSBwcm9kdcOnw6NvIGUgbyByZWNlYmltZW50byBkYXMgdmVuZGFzIGFvIGV4dGVyaW9yLiAgQWzDqW0gZGlzc28sIG8gQkMgdXRpbGl6b3UgbyBzd2FwIGNhbWJpYWwgLSB1bSBjb250cmF0byBxdWUgb2ZlcmVjZSBwcm90ZcOnw6NvIGNhbWJpYWwgc2VtIGRlc2VtYm9sc28gaW1lZGlhdG8gZGUgZMOzbGFyIGbDrXNpY28gLSwgaW5zdHJ1bWVudG8gZXNzZW5jaWFsIHBhcmEgYW5jb3JhciBleHBlY3RhdGl2YXMgZSBlc3RhYmlsaXphciBvIGPDom1iaW8gbm8gbWVyY2FkbyBmdXR1cm8uDQoNCkEgYXR1YcOnw6NvIGRvIEJhbmNvIENlbnRyYWwgcGVybWl0aXUgcXVlIG8gcGHDrXMgbWl0aWdhc3NlIG9zIGVmZWl0b3MgZGEgY3Jpc2UgZGUgZm9ybWEgcmVsYXRpdmFtZW50ZSByw6FwaWRhLCBjb250ZW5kbyBvIGNvbnTDoWdpby4gTyB2YWxlIGRvIGNpY2xvIGZvaSBkYXRhZG8gbm8gcXVhcnRvIHRyaW1lc3RyZSBkZSAyMDA4LCBhIHBhcnRpciBkbyBxdWFsIG8gQnJhc2lsIGluaWNpb3UgdW1hIG5vdmEgdHJhamV0w7NyaWEgZGUgZXhwYW5zw6NvLiBWYWxlIGRlc3RhY2FyIHF1ZSBhcyBkYXRhcyBkbyBDT0RBQ0Ugc8OjbyBjb25maXJtYWRhcyBjb20gdW1hIGNlcnRhIGRlZmFzYWdlbSAtIGVtIGRlemVtYnJvIGRlIDIwMDgsIGEgcG9wdWxhw6fDo28gbsOjbyB0aW5oYSBjb21vIHNhYmVyIHF1ZSBzZSBpbmljaWF2YSB1bWEgdHJhamV0w7NyaWEgZGUgZXhwYW5zw6NvLg0KDQojIyAxLjIgT3MgbW90b3JlcyBkYSBleHBhbnPDo28NCg0KQSBleHBhbnPDo28gYnJhc2lsZWlyYSBuw6NvIGZvaSBmcnV0byBkZSB1bSDDum5pY28gZmF0b3IsIG1hcyBkZSB1bSBjb25qdW50byBkZSB2YXJpw6F2ZWlzIGFnaW5kbyBkZSBmb3JtYSBhcnRpY3VsYWRhLiBDb20gbyBjb2xjaMOjbyBleHRlcm5vIGdhcmFudGluZG8gZXN0YWJpbGlkYWRlLCBvIGNyZXNjaW1lbnRvIGRlIDIwMDjigJMyMDE0IGZvaSBwdXhhZG8gaW50ZXJuYW1lbnRlIC0gY29uc3VtbyBkYXMgZmFtw61saWFzLCBleHBhbnPDo28gZG8gY3LDqWRpdG8sIGZvcm1hbGl6YcOnw6NvIGRvIHRyYWJhbGhvLCBlIGdhc3RvIHDDumJsaWNvIC0gaW1wdWxzaW9uYXJhbSBjb25qdW50YW1lbnRlIGEgZGVtYW5kYSBhZ3JlZ2FkYS4gDQoNCiMjIyAxLjIuMSBSZW5kYSBlIGNvbnN1bW8gZGFzIGZhbcOtbGlhcw0KRHVyYW50ZSBvIHBlcsOtb2RvIGRlIGV4cGFuc8OjbywgbyBjb25zdW1vIGRhcyBmYW3DrWxpYXMgY3Jlc2NldSBkZSBmb3JtYSBzdXN0ZW50YWRhIGUgc2UgZmlybW91IGNvbW8gdW0gY29tcG9uZW50ZSBlc3TDoXZlbCBkYSBkZW1hbmRhIGFncmVnYWRhLiBFc3NlIG1vdmltZW50byDDqSwgYW8gbWVzbW8gdGVtcG8sIGNhdXNhIGUgY29uc2VxdcOqbmNpYSBkbyBjaWNsbzogY2F1c2EsIHBvcnF1ZSBhIGV4cGFuc8OjbyBkbyBjb25zdW1vIGVsZXZvdSBhIGRlbWFuZGEsIGVzdGltdWxhbmRvIHByb2R1w6fDo28gZSBjb250cmF0YcOnw7VlczsgY29uc2VxdcOqbmNpYSwgcG9ycXVlIG8gYXVtZW50byBkbyBlbXByZWdvIGUgZGEgcmVuZGEgYWxpbWVudG91IGRlIHZvbHRhIGEgY2FwYWNpZGFkZSBkZSBjb25zdW1pci4gTyBxdWUgZGVzdHJhdm91IGVzc2UgY2ljbG8sIHBvcsOpbSwgbsOjbyBmb2kgYWxlYXTDs3JpbyAtIGVzdGV2ZSBsaWdhZG8gw6AgcG9sw610aWNhIGRlIHZhbG9yaXphw6fDo28gZG8gc2Fsw6FyaW8gbcOtbmltby4NCg0KQSByZWdyYSwgbmVnb2NpYWRhIGVtIDIwMDcsIGZpeG91IGRvaXMgY29tcG9uZW50ZXMgcGFyYSBvIHJlYWp1c3RlIGFudWFsOiAoaSkgbyBJTlBDW14gMV0gZG8gcGVyw61vZG8sIHF1ZSBhcGVuYXMgcmVww7VlIGEgaW5mbGHDp8OjbyBlLCBwb3J0YW50bywgbsOjbyBpbXBsaWNhIGdhbmhvIHJlYWw7IGUgKGlpKSBhIHZhcmlhw6fDo28gZG8gUElCIGRlZmFzYWRhIGVtIGRvaXMgYW5vcywgcXVlIGNvbnN0aXR1aSBvIGdhbmhvIHJlYWwgcHJvcHJpYW1lbnRlIGRpdG8uIEFzc2ltLCBvIHJlYWp1c3RlIGRlIDIwMDggaW5jb3Jwb3JvdSBvIFBJQiBkZSAyMDA2OyBvIGRlIDIwMDksIG8gZGUgMjAwNzsgbyBkZSAyMDEwLCBvIGRlIDIwMDguIEEgdHJhamV0w7NyaWEgY29uanVudGEgZG8gc2Fsw6FyaW8gbcOtbmltbyByZWFsIGUgZG8gY29uc3VtbyBkYXMgZmFtw61saWFzIHBvZGUgc2VyIHZpc3RhIG5vIGdyw6FmaWNvIDIuDQoNClteIDFdIE5vdGE6IMONbmRpY2UgTmFjaW9uYWwgZGUgUHJlw6dvcyBhbyBDb25zdW1pZG9yLCBjYWxjdWxhZG8gcGVsbyBJQkdFLiBNZWRlIGEgaW5mbGHDp8OjbyBkYSBjZXN0YSBkZSBjb25zdW1vIGRhcyBmYW3DrWxpYXMgY29tIHBlc3NvYSBkZSByZWZlcsOqbmNpYSBhc3NhbGFyaWFkYSBlIHJlbmRpbWVudG8gZW50cmUgMSBlIDUgc2Fsw6FyaW9zIG3DrW5pbW9zLCBlbSDDoXJlYXMgdXJiYW5hcy4gw4ksIHBvcnRhbnRvLCBvIMOtbmRpY2UgcXVlIHJlZmxldGUgYSBpbmZsYcOnw6NvIGVuZnJlbnRhZGEgcGVsYSBwcsOzcHJpYSBwb3B1bGHDp8OjbyBhZmV0YWRhIHBlbG8gcmVhanVzdGUgZG8gU00sIGRhw60gc3VhIGVzY29saGEgY29tbyBjb21wb25lbnRlIGRlIHJlcG9zacOnw6NvIG5hIHJlZ3JhLg0KDQoqKkdyw6FmaWNvIDI6KiogDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmNvbnN1bW9mYW0gPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvcm9iZXIvT25lRHJpdmUvSWJNYWNyby9jb25zdW1vZmFtMS54bHN4IikNCnRyaW1lc3RyZXMgPC0gYXMuY2hhcmFjdGVyKGNvbnN1bW9mYW1bMywgLTFdKQ0KdmFsb3JlcyA8LSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcihjb25zdW1vZmFtWzUsIC0xXSkpDQpjb25zdW1vIDwtIGRhdGEuZnJhbWUoDQogIHRyaW1lc3RyZSA9IHRyaW1lc3RyZXMsDQogIHZhbG9yID0gdmFsb3Jlcw0KKSAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IGFzLmludGVnZXIoc3Vic3RyKHRyaW1lc3RyZSwgbmNoYXIodHJpbWVzdHJlKS0zLCBuY2hhcih0cmltZXN0cmUpKSksDQogICAgdHJpbSA9IGNhc2Vfd2hlbigNCiAgICAgIGdyZXBsKCIxwroiLCB0cmltZXN0cmUpIH4gMSwNCiAgICAgIGdyZXBsKCIywroiLCB0cmltZXN0cmUpIH4gMiwNCiAgICAgIGdyZXBsKCIzwroiLCB0cmltZXN0cmUpIH4gMywNCiAgICAgIGdyZXBsKCI0wroiLCB0cmltZXN0cmUpIH4gNA0KICAgICksDQogICAgZGF0YSA9IGFzLkRhdGUocGFzdGUwKGFubywgIi0iLCBmb3JtYXRDKHRyaW0gKiAzIC0gMiwgd2lkdGggPSAyLCBmbGFnID0gIjAiKSwgIi0xNSIpKSwNCiAgICBkYXRhX21zID0gYXMubnVtZXJpYyhhcy5QT1NJWGN0KGRhdGEsIHR6ID0gIlVUQyIpKSAqIDEwMDANCiAgKQ0KZGFkb3MgPC0gY29uc3VtbyAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhbG9yKQ0KDQojID09PSBEQURPUyBERSBTQUzDgVJJTyBNw41OSU1PID09PQ0Kc2FsYXJpb190cmltIDwtIGRhdGEuZnJhbWUoDQogIGRhdGEgPSBhcy5EYXRlKGMoDQogICAgIjIwMDktMDEtMTUiLCAiMjAwOS0wNC0xNSIsICIyMDA5LTA3LTE1IiwgIjIwMDktMTAtMTUiLA0KICAgICIyMDEwLTAxLTE1IiwgIjIwMTAtMDQtMTUiLCAiMjAxMC0wNy0xNSIsICIyMDEwLTEwLTE1IiwNCiAgICAiMjAxMS0wMS0xNSIsICIyMDExLTA0LTE1IiwgIjIwMTEtMDctMTUiLCAiMjAxMS0xMC0xNSIsDQogICAgIjIwMTItMDEtMTUiLCAiMjAxMi0wNC0xNSIsICIyMDEyLTA3LTE1IiwgIjIwMTItMTAtMTUiLA0KICAgICIyMDEzLTAxLTE1IiwgIjIwMTMtMDQtMTUiLCAiMjAxMy0wNy0xNSIsICIyMDEzLTEwLTE1IiwNCiAgICAiMjAxNC0wMS0xNSINCiAgKSksDQogIHZhbG9yID0gYygNCiAgICA0MTUsIDQ2NSwgNDY1LCA0NjUsDQogICAgNTEwLCA1MTAsIDUxMCwgNTEwLA0KICAgIDU0MCwgNTQ1LCA1NDUsIDU0NSwNCiAgICA2MjIsIDYyMiwgNjIyLCA2MjIsDQogICAgNjc4LCA2NzgsIDY3OCwgNjc4LA0KICAgIDcyNA0KICApDQopICU+JQ0KICBtdXRhdGUoZGF0YV9tcyA9IGFzLm51bWVyaWMoYXMuUE9TSVhjdChkYXRhLCB0eiA9ICJVVEMiKSkgKiAxMDAwKQ0KZGFkb3Nfc2FsYXJpbyA8LSBzYWxhcmlvX3RyaW0gJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvcikNCg0KIyA9PT0gR1LDgUZJQ08gPT09DQpncmFmaWNvIDwtIGhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2NoYXJ0KA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBzcGFjaW5nVG9wID0gMjAsIHNwYWNpbmdSaWdodCA9IDIwLA0KICAgIHNwYWNpbmdCb3R0b20gPSAyMCwgc3BhY2luZ0xlZnQgPSAyMCwNCiAgICBtYXJnaW5SaWdodCA9IDgwICAjIGV2aXRhIGNvcnRlIGRvIGVpeG8gZGlyZWl0byBuYSBleHBvcnRhw6fDo28NCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3MpLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgbmFtZSA9ICJEZXNwZXNhIGRlIENvbnN1bW8gZGFzIEZhbcOtbGlhcyIsDQogICAgY29sb3IgPSAiIzAyMDIzQyIsDQogICAgbGluZVdpZHRoID0gMywNCiAgICB5QXhpcyA9IDAsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAwLCB2YWx1ZVN1ZmZpeCA9ICIgUiQgbWkiKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19zYWxhcmlvKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiU2Fsw6FyaW8gTcOtbmltbyIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgbGluZVdpZHRoID0gMiwNCiAgICB5QXhpcyA9IDEsDQogICAgZGFzaFN0eWxlID0gIlNvbGlkIiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSksDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDAsIHZhbHVlUHJlZml4ID0gIlIkICIpDQogICkgJT4lDQogIGhjX3lBeGlzX211bHRpcGxlcygNCiAgICBsaXN0KA0KICAgICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiUiQgbWlsaMO1ZXMgKHByZcOnb3MgY29ycmVudGVzKSIsDQogICAgICAgICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMnB4IikpLA0KICAgICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSkNCiAgICApLA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJTYWzDoXJpbyBNw61uaW1vIChSJCkiLA0KICAgICAgICAgICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjQzlBODRDIiwgZm9udFNpemUgPSAiMTJweCIpKSwNCiAgICAgIG9wcG9zaXRlID0gVFJVRSwNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAwLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiI0M5QTg0QyIpKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiRGVzcGVzYSBkZSBDb25zdW1vIGRhcyBGYW3DrWxpYXMgZSBTYWzDoXJpbyBNw61uaW1vIOKAlCBCcmFzaWwiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIyMHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzExMTExMSIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiQ29uc3VtbyBlbSBSJCBtaWxow7VlcyAocHJlw6dvcyBjb3JyZW50ZXMpIHwgU2Fsw6FyaW8gbcOtbmltbyBlbSBSJCDigJQgMVQyMDA5IGEgNFQyMDE0IiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTNweCIsIGNvbG9yID0gIiM2NjY2NjYiKQ0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgY3Jvc3NoYWlycyA9IFRSVUUsDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLA0KICAgIGJvcmRlckNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIGJvcmRlclJhZGl1cyA9IDgsDQogICAgc2hhZG93ID0gRkFMU0UsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiKQ0KICApICU+JQ0KICBoY19sZWdlbmQoZW5hYmxlZCA9IFRSVUUpICU+JQ0KICBoY19yYW5nZVNlbGVjdG9yKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19zY3JvbGxiYXIoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFL0NvbnRhcyBOYWNpb25haXM7IE1URS4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMHB4IiwgY29sb3IgPSAiIzc3Nzc3NyIpDQogICkNCmdyYWZpY28NCmBgYA0KDQpWYWxlIGRlc3RhY2FyLCBhaW5kYSwgcXVlIG8gc2Fsw6FyaW8gbcOtbmltbyBuw6NvIGltcGFjdGEgYXBlbmFzIG9zIHRyYWJhbGhhZG9yZXMgcXVlIHJlY2ViZW0gZGlyZXRhbWVudGUgbyBwaXNvLiBTZXVzIGVmZWl0b3Mgc2UgZXNwYWxoYW0gcGVsYSBlc3RydXR1cmEgc2FsYXJpYWwgZGUgZm9ybWEgbWFpcyBhbXBsYS4gQ2F0ZWdvcmlhcyBwcm9maXNzaW9uYWlzIGNvbSBwaXNvcyBkZWZpbmlkb3MgZW0gbcO6bHRpcGxvcyBkbyBTTSwgY29tbyBlbmdlbmhlaXJvcywgbcOpZGljb3MgZSBhZ3LDtG5vbW9zLCB0YW1iw6ltIHTDqm0gc2V1cyByZW5kaW1lbnRvcyByZWFqdXN0YWRvcyBxdWFuZG8gbyBwaXNvIGF1bWVudGEuIEFsw6ltIGRpc3NvLCBtZXNtbyB0cmFiYWxoYWRvcmVzIHNlbSB2w61uY3VsbyBmb3JtYWwgY29tIG8gU00gdGVuZGVtIGEgcmVpdmluZGljYXIgcmVhanVzdGVzIHF1YW5kbyBlbGUgc29iZSBlbSB0ZXJtb3MgcmVhaXMsIGrDoSBxdWUgbyB2YWxvciByZWxhdGl2byBkZSBzZXVzIHByw7NwcmlvcyBzYWzDoXJpb3MgZGltaW51aSBlbSBjb21wYXJhw6fDo28gYW8gcmVzdGFudGUgZGEgZXN0cnV0dXJhIHNhbGFyaWFsLiANCg0KRGVzc2EgZm9ybWEsIGVsZSBmdW5jaW9uYSBjb21vIHVtYSByZWZlcsOqbmNpYSBpbXBvcnRhbnRlIHBhcmEgb3Mgc2Fsw6FyaW9zIG5vIEJyYXNpbCwgcHJvZHV6aW5kbyBlZmVpdG9zIHF1ZSB2w6NvIG11aXRvIGFsw6ltIGRvIGdydXBvIHF1ZSBlZmV0aXZhbWVudGUgcmVjZWJlIG8gcGlzby4NClBvcsOpbSwgbyBhdW1lbnRvIGRvIGNvbnN1bW8gbsOjbyBwb2RlIHNlciBhdHJpYnXDrWRvIGludGVncmFsbWVudGUgYW8gc2Fsw6FyaW8gbcOtbmltby4gQ29tbyBzZSBvYnNlcnZhIG5vIGdyw6FmaWNvIDIsIGEgZGVzcGVzYSBkbyBjb25zdW1vIGNyZXNjZSBtYWlzIHF1ZSBvIFNNLCBzaW5hbCBkZSBxdWUgb3V0cm8gbW90b3IgZXN0w6Egb3BlcmFuZG8gZW0gcGFyYWxlbG8uIA0KDQpFc3NlIG1vdG9yIMOpIGEgZXhwYW5zw6NvIGRvIGNyw6lkaXRvLCBvYnNlcnZhZGEgbm8gZ3LDoWZpY28gMy4NCg0KKipHcsOhZmljbyAzOioqDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmNyZWRpdG9fcGliIDwtIGRhdGEuZnJhbWUoDQogIGRhdGEgPSBhcy5EYXRlKGMoDQogICAgIjIwMDgtMDEtMTUiLA0KICAgICIyMDA4LTEyLTE1IiwNCiAgICAiMjAwOS0xMi0xNSIsDQogICAgIjIwMTAtMTItMTUiLA0KICAgICIyMDExLTEyLTE1IiwNCiAgICAiMjAxMi0xMi0xNSIsDQogICAgIjIwMTMtMTItMTUiDQogICkpLA0KICB0b3RhbCA9IGMoMzUuNDcsIDQwLjcwLCA0My44NSwgNDUuNDMsIDQ5LjEwLCA1My44MCwgNTYuNTApLA0KICBwaiAgICA9IGMoMTkuMDgsIDIzLjA2LCAyNC40OSwgMjQuODQsIDI2LjkwLCAyOS40MCwgMzAuNTApLA0KICBwZiAgICA9IGMoMTYuMzksIDE3LjYzLCAxOS4zNiwgMjAuNTksIDIyLjIwLCAyNC40MCwgMjYuMDApDQopICU+JQ0KICBtdXRhdGUoZGF0YV9tcyA9IGFzLm51bWVyaWMoYXMuUE9TSVhjdChkYXRhLCB0eiA9ICJVVEMiKSkgKiAxMDAwKQ0KDQpkYWRvc190b3RhbCA8LSBjcmVkaXRvX3BpYiAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhbG9yID0gdG90YWwpDQpkYWRvc19waiAgICA8LSBjcmVkaXRvX3BpYiAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhbG9yID0gcGopDQpkYWRvc19wZiAgICA8LSBjcmVkaXRvX3BpYiAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhbG9yID0gcGYpDQoNCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2NoYXJ0KA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBzcGFjaW5nVG9wID0gMjAsIHNwYWNpbmdSaWdodCA9IDIwLA0KICAgIHNwYWNpbmdCb3R0b20gPSAyMCwgc3BhY2luZ0xlZnQgPSAyMA0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc190b3RhbCksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlRvdGFsIiwNCiAgICBjb2xvciA9ICIjMDIwMjNDIiwNCiAgICBsaW5lV2lkdGggPSAzLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIGRvIFBJQiIpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX3BqKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiUGVzc29hIEp1csOtZGljYSIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgbGluZVdpZHRoID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSA0KSwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMSwgdmFsdWVTdWZmaXggPSAiJSBkbyBQSUIiKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19wZiksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlBlc3NvYSBGw61zaWNhIiwNCiAgICBjb2xvciA9ICIjNDZCMUUxIiwNCiAgICBsaW5lV2lkdGggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIGRvIFBJQiIpDQogICkgJT4lDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCgNCiAgICAgIHRleHQgPSAiQ3LDqWRpdG8vUElCICglKSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICAgICksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICBsYWJlbHMgPSBsaXN0KA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSwNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWV9JSINCiAgICApLA0KICAgIG1pbiA9IDANCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiRXhwYW5zw6NvIGRvIENyw6lkaXRvIG5vIEJyYXNpbCIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjIwcHgiLCBmb250V2VpZ2h0ID0gImJvbGQiLCBjb2xvciA9ICIjMTExMTExIikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJTYWxkbyBkYXMgb3BlcmHDp8O1ZXMgZGUgY3LDqWRpdG8gZW0gcmVsYcOnw6NvIGFvIFBJQiAoJSkgLSBqYW4vMjAwOCBhIGRlei8yMDEzIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTNweCIsIGNvbG9yID0gIiM2NjY2NjYiKQ0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgY3Jvc3NoYWlycyA9IFRSVUUsDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLA0KICAgIGJvcmRlckNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIGJvcmRlclJhZGl1cyA9IDgsDQogICAgc2hhZG93ID0gRkFMU0UsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiKQ0KICApICU+JQ0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfbmF2aWdhdG9yKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX3Njcm9sbGJhcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IERJRUVTRS9CYW5jbyBDZW50cmFsIGRvIEJyYXNpbC4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMHB4IiwgY29sb3IgPSAiIzc3Nzc3NyIpDQogICkNCmBgYA0KDQpDb21vIGV2aWRlbmNpYWRvIG5vIGdyw6FmaWNvIDMsIGEgcmVsYcOnw6NvIGNyw6lkaXRvL1BJQiB0b3RhbCAobGluaGEgYXp1bCBlc2N1cm8pIHBhc3NvdSBkZSAzNSw1JSBlbSAyMDA4IHBhcmEgNTYsNSUgZW0gZGV6ZW1icm8gZGUgMjAxMy4NCkNvbW8gZXZpZGVuY2lhZG8gbm8gZ3LDoWZpY28gMywgYSByZWxhw6fDo28gY3LDqWRpdG8vUElCIHRvdGFsIChsaW5oYSBhenVsLWVzY3VyYSkgcGFzc291IGRlIDM1LDUlIGVtIDIwMDggcGFyYSA1Niw1JSBlbSBkZXplbWJybyBkZSAyMDEzLiBBIGV4cGFuc8OjbyBkbyBjcsOpZGl0byBhIHBlc3NvYXMgZsOtc2ljYXMgb3Blcm91IHBvciBtZWlvIGRlIGluc3RydW1lbnRvcyBlc3BlY8OtZmljb3M6IG8gY3LDqWRpdG8gY29uc2lnbmFkbyBjb20gZGVzY29udG8gZGlyZXRvIGVtIGZvbGhhLCBvIGZpbmFuY2lhbWVudG8gZGUgdmXDrWN1bG9zIGNvbSBwcmF6byBhbG9uZ2FkbywgbyBmaW5hbmNpYW1lbnRvIGltb2JpbGnDoXJpbywgbyBjcsOpZGl0byBwZXNzb2FsIGUgbyBjYXJ0w6NvIGRlIGNyw6lkaXRvIGNvbSBwYXJjZWxhbWVudG8gc2VtIGp1cm9zLiBPIGVmZWl0byBkZXNzYXMgbWVkaWRhcyBmb2kgZmFjaWxpdGFyIG8gYWNlc3NvIGEgYmVucyBkdXLDoXZlaXMsIGVsZXRyb2RvbcOpc3RpY29zLCBhdXRvbcOzdmVpcywgZSBzZXJ2acOnb3MgYW50ZXMgcmVzdHJpdG9zIGEgZmFpeGFzIG1haXMgYWx0YXMgZGUgcmVuZGEuDQoNCkEgbGluaGEgZGUgY3LDqWRpdG8gYSBwZXNzb2FzIGp1csOtZGljYXMgKGxpbmhhIGFtYXJlbGEpIHRhbWLDqW0gYXZhbsOnYSBubyBwZXLDrW9kbywgZGUgY2VyY2EgZGUgMTksMSUgcGFyYSAzMCw1JSBkbyBQSUIuIFBhcnRlIGRlc3NhIGV4cGFuc8OjbyBzZSBkZXZldSDDoCBhdHVhw6fDo28gYW50aWPDrWNsaWNhIGRvcyBiYW5jb3MgcMO6YmxpY29zIGFww7NzIDIwMDgsIHF1YW5kbyBvcyBiYW5jb3MgcHJpdmFkb3Mgc2UgdG9ybmFyYW0gbWFpcyBjYXV0ZWxvc29zIGRpYW50ZSBkYSBjcmlzZSBpbnRlcm5hY2lvbmFsLg0KDQpPIHJlc3VsdGFkbyBjb25qdW50byBkZXNzZXMgbW90b3JlcyAtIHNhbMOhcmlvIG3DrW5pbW8gZW0gdmFsb3JpemHDp8OjbyByZWFsIGUgY3LDqWRpdG8gYW8gY29uc3VtaWRvciBlbSBmb3J0ZSBleHBhbnPDo28gLSBmb2kgYSBjb25zb2xpZGHDp8OjbyBkZSB1bSBtZXJjYWRvIGRlIGNvbnN1bW8gbm8gQnJhc2lsLiBGYW3DrWxpYXMgZGUgbWVub3IgcmVuZGEgcGFzc2FyYW0gYSBhY2Vzc2FyIGJlbnMgZSBzZXJ2acOnb3MgYW50ZXMgcmVzdHJpdG9zLCBmZW7DtG1lbm8gdGFtYsOpbSBjaGFtYWRvIGRlICJub3ZhIGNsYXNzZSBtw6lkaWEiLiBNYWlzIGRvIHF1ZSBvIGF1bWVudG8gZG8gY29uc3VtbyBhZ3JlZ2FkbywgbyBxdWUgb2NvcnJlIMOpIHVtYSBwZXJjZXDDp8OjbyBnZW5lcmFsaXphZGEgZGUgbWVsaG9yYSwgYSBzZW5zYcOnw6NvIHF1ZSBzdXN0ZW50YSBvIGNpY2xvIGUgcmVmb3LDp2EgYSB2aXPDo28sIG5hIMOpcG9jYSwgZGUgcXVlIG8gQnJhc2lsIHZpdmlhIHVtIHBlcsOtb2RvIGRlIHByb3NwZXJpZGFkZS4gRG8gcG9udG8gZGUgdmlzdGEgbWFjcm9lY29uw7RtaWNvLCBjb250dWRvLCBjYWJlIHVtYSByZXNzYWx2YTogdW0gY3Jlc2NpbWVudG8gc3VzdGVudGFkbyBwb3IgY3LDqWRpdG8gZSBjb25zdW1vIGZ1bmNpb25hIG5vIGN1cnRvIHByYXpvLCBtYXMgdGVtIGxpbWl0ZXMuDQoNCiMjIyMgMS4yLjIgTWVyY2FkbyBkZSB0cmFiYWxobw0KDQpPdXRybyBtb3RvciByZWxldmFudGUgZGEgZXhwYW5zw6NvIGZvaSBvIG1lcmNhZG8gZGUgdHJhYmFsaG8uIENvbW8gbW9zdHJhIG8gZ3LDoWZpY28gNCwgYSB0YXhhIGRlIGRlc29jdXBhw6fDo28gbWVkaWRhIHBlbGEgUE1FW14yXSBjYWl1IGRlIGZvcm1hIGNvbnNpc3RlbnRlIGFvIGxvbmdvIGRvIHBlcsOtb2RvLiBFbSB0ZXJtb3MgdGXDs3JpY29zLCB1bWEgcG9wdWxhw6fDo28gbWFpcyBlbXByZWdhZGEgYW1wbGlhIGEgbWFzc2EgZGUgcmVuZGEgZGlzcG9uw612ZWwgZSwgcG9ydGFudG8sIG8gZXNwYcOnbyBwYXJhIGNvbnN1bW8gLSByZWZvcsOnYW5kbyBhIHRlc2UgZGUgcXVlIGEgZGVtYW5kYSBkb23DqXN0aWNhIGZvaSBvIHByaW5jaXBhbCB2ZXRvciBkYSBleHBhbnPDo28uIA0KDQoqKkdyw6FmaWNvIDQ6KioNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpwbWVfcmF3IDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL3JvYmVyL09uZURyaXZlL0liTWFjcm8vdGF4YWRlc29jdXBhw6fDo28ueGxzeCIpDQoNCm1lc2VzIDwtIGFzLmNoYXJhY3RlcihwbWVfcmF3WzEsIC1jKDEsMiwzKV0pDQp2YWxvcmVzIDwtIGFzLm51bWVyaWMoZ3N1YigiLCIsICIuIiwgYXMuY2hhcmFjdGVyKHBtZV9yYXdbNSwgLWMoMSwyLDMpXSkpKQ0KDQpwbWUgPC0gZGF0YS5mcmFtZSgNCiAgbWVzID0gbWVzZXMsDQogIGRlc29jdXBhY2FvID0gdmFsb3Jlcw0KKSAlPiUNCiAgbXV0YXRlKA0KICAgIG1lc19udW0gPSBjYXNlX3doZW4oDQogICAgICBncmVwbCgiamFuZWlybyIsICAgbWVzKSB+IDEsDQogICAgICBncmVwbCgiZmV2ZXJlaXJvIiwgbWVzKSB+IDIsDQogICAgICBncmVwbCgibWFyw6dvIiwgICAgIG1lcykgfiAzLA0KICAgICAgZ3JlcGwoImFicmlsIiwgICAgIG1lcykgfiA0LA0KICAgICAgZ3JlcGwoIm1haW8iLCAgICAgIG1lcykgfiA1LA0KICAgICAgZ3JlcGwoImp1bmhvIiwgICAgIG1lcykgfiA2LA0KICAgICAgZ3JlcGwoImp1bGhvIiwgICAgIG1lcykgfiA3LA0KICAgICAgZ3JlcGwoImFnb3N0byIsICAgIG1lcykgfiA4LA0KICAgICAgZ3JlcGwoInNldGVtYnJvIiwgIG1lcykgfiA5LA0KICAgICAgZ3JlcGwoIm91dHVicm8iLCAgIG1lcykgfiAxMCwNCiAgICAgIGdyZXBsKCJub3ZlbWJybyIsICBtZXMpIH4gMTEsDQogICAgICBncmVwbCgiZGV6ZW1icm8iLCAgbWVzKSB+IDEyDQogICAgKSwNCiAgICBhbm8gPSBhcy5pbnRlZ2VyKHN1YnN0cihtZXMsIG5jaGFyKG1lcyktMywgbmNoYXIobWVzKSkpLA0KICAgIGRhdGEgPSBhcy5EYXRlKHBhc3RlMChhbm8sICItIiwgZm9ybWF0QyhtZXNfbnVtLCB3aWR0aD0yLCBmbGFnPSIwIiksICItMTUiKSksDQogICAgZGF0YV9tcyA9IGFzLm51bWVyaWMoYXMuUE9TSVhjdChkYXRhLCB0eiA9ICJVVEMiKSkgKiAxMDAwDQogICkgJT4lDQogIGZpbHRlcihkYXRhID49IGFzLkRhdGUoIjIwMDgtMDEtMTUiKSAmIGRhdGEgPD0gYXMuRGF0ZSgiMjAxNC0wMy0xNSIpKSAlPiUNCiAgYXJyYW5nZShkYXRhKSAlPiUNCiAgbXV0YXRlKG1tMTIgPSByb2xsbWVhbihkZXNvY3VwYWNhbywgayA9IDEyLCBmaWxsID0gTkEsIGFsaWduID0gInJpZ2h0IikpDQoNCmRhZG9zX3JlYWwgPC0gcG1lICU+JQ0KICBmaWx0ZXIoZGF0YSA+PSBhcy5EYXRlKCIyMDA5LTAxLTE1IikpICU+JQ0KICBzZWxlY3QodGltZXN0YW1wID0gZGF0YV9tcywgZGVzb2N1cGFjYW8pDQoNCmRhZG9zX21tMTIgPC0gcG1lICU+JQ0KICBmaWx0ZXIoIWlzLm5hKG1tMTIpICYgZGF0YSA+PSBhcy5EYXRlKCIyMDA5LTAxLTE1IikpICU+JQ0KICBzZWxlY3QodGltZXN0YW1wID0gZGF0YV9tcywgZGVzb2N1cGFjYW8gPSBtbTEyKQ0KDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY19jaGFydChiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsIHNwYWNpbmdUb3AgPSAyMCwgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgICAgICAgIHNwYWNpbmdCb3R0b20gPSAyMCwgc3BhY2luZ0xlZnQgPSAyMCkgJT4lDQogIGhjX2FkZF9zZXJpZXMoZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX3JlYWwpLCB0eXBlID0gImxpbmUiLCBuYW1lID0gIkRhZG8gb3JpZ2luYWwiLA0KICAgICAgICAgICAgICAgIGNvbG9yID0gIiNGRUIwMTUiLCBsaW5lV2lkdGggPSAxLjUsDQogICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIikpICU+JQ0KICBoY19hZGRfc2VyaWVzKGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19tbTEyKSwgdHlwZSA9ICJsaW5lIiwgbmFtZSA9ICJNw6lkaWEgbcOzdmVsIDEyIG1lc2VzIiwNCiAgICAgICAgICAgICAgICBjb2xvciA9ICIjMDIwMjNDIiwgbGluZVdpZHRoID0gMywNCiAgICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSksDQogICAgICAgICAgICAgICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEsIHZhbHVlU3VmZml4ID0gIiUiKSkgJT4lDQogIGhjX3lBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gIlRheGEgZGUgZGVzb2N1cGHDp8OjbyAoJSkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMnB4IikpLA0KICAgICAgICAgICBncmlkTGluZUNvbG9yID0gIiNFNkU2RTYiLA0KICAgICAgICAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiksIGZvcm1hdCA9ICJ7dmFsdWV9JSIpKSAlPiUNCiAgaGNfeEF4aXMobGluZUNvbG9yID0gIiNEOUQ5RDkiLCB0aWNrQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgICAgICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSkpICU+JQ0KICBoY19wbG90T3B0aW9ucyhzZXJpZXMgPSBsaXN0KGFuaW1hdGlvbiA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkpKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJUYXhhIGRlIERlc29jdXBhw6fDo28gLSBCcmFzaWwiLA0KICAgICAgICAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMjBweCIsIGZvbnRXZWlnaHQgPSAiYm9sZCIsIGNvbG9yID0gIiMxMTExMTEiKSkgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiUmVnacO1ZXMgbWV0cm9wb2xpdGFuYXMg4oCUIGphbi8yMDA5IGEgbWFyLzIwMTQiLA0KICAgICAgICAgICAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTNweCIsIGNvbG9yID0gIiM2NjY2NjYiKSkgJT4lDQogIGhjX3Rvb2x0aXAoc2hhcmVkID0gVFJVRSwgY3Jvc3NoYWlycyA9IFRSVUUsIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICAgICAgICAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwgYm9yZGVyUmFkaXVzID0gOCwgc2hhZG93ID0gRkFMU0UsDQogICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiKSkgJT4lDQogIGhjX2xlZ2VuZChlbmFibGVkID0gVFJVRSwgYWxpZ24gPSAiY2VudGVyIiwgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgICAgICAgICAgbGF5b3V0ID0gImhvcml6b250YWwiKSAlPiUNCiAgaGNfcmFuZ2VTZWxlY3RvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19uYXZpZ2F0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfc2Nyb2xsYmFyKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX2NyZWRpdHMoZW5hYmxlZCA9IFRSVUUsIHRleHQgPSAiRm9udGU6IElCR0UvUE1FLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9ICIjNzc3Nzc3IikpDQpgYGANCg0KQSBzw6lyaWUgYnJ1dGEgKGxpbmhhIGFtYXJlbGEpLCBubyBlbnRhbnRvLCBhcHJlc2VudGEgdW0gcGFkcsOjbyBzYXpvbmFsIGluZGVwZW5kZW50ZSBkbyBjaWNsbzogcXVlZGEgbm8gZmltIGRvIGFubywgcHV4YWRhIHBvciBjb250cmF0YcOnw7VlcyB0ZW1wb3LDoXJpYXMgZSBwYWdhbWVudG8gZG8gMTPCuiwgc2VndWlkYSBkZSBhbHRhIGVtIGphbmVpcm8uIFBhcmEgYW5hbGlzYXIgYSB0ZW5kw6puY2lhLCB1dGlsaXpvdS1zZSBhIG3DqWRpYSBtw7N2ZWwgZGUgMTIgbWVzZXMgKGxpbmhhIGF6dWwpLg0KDQpBIG3DqWRpYSBtw7N2ZWwgZXZpZGVuY2lhIGR1YXMgZmFzZXMuIE5vcyBwcmltZWlyb3MgbWVzZXMgZGUgMjAwOSwgbyBkZXNlbXByZWdvIGFpbmRhIHNvYmUsIHJlZmxldGluZG8gYXMgZGVtaXNzw7VlcyBwdXhhZGFzIHBlbGEgY3Jpc2UgZmluYW5jZWlyYSBpbnRlcm5hY2lvbmFsIGVtIDIwMDguIEEgcGFydGlyIGRvIGluw61jaW8gZGUgMjAxMCwgYSBxdWVkYSDDqSBwcmF0aWNhbWVudGUgaW5pbnRlcnJ1cHRhIGF0w6kgbyBmaW0gZGEgZXhwYW5zw6NvLiBObyBkYWRvIGJydXRvLCBhIFBNRSBwYXJ0ZSBkZSA4LDIlIGVtIGphbmVpcm8gZGUgMjAwOSwgYXRpbmdlIG8gcGljbyBkZSA5JSBlbSBtYXLDp28gZG8gbWVzbW8gYW5vIGUgY2hlZ2EgYSA1JSBlbSBtYXLDp28gZGUgMjAxNC4NCg0KW14yXSBOb3RhOiBQZXNxdWlzYSBNZW5zYWwgZGUgRW1wcmVnbyAoUE1FKSwgcmVhbGl6YWRhIHBlbG8gSUJHRSBlbSBzZWlzIHJlZ2nDtWVzIG1ldHJvcG9saXRhbmFzIChCZWxvIEhvcml6b250ZSwgU8OjbyBQYXVsbywgUmlvIGRlIEphbmVpcm8sIFJlY2lmZSwgU2FsdmFkb3IsIGUgUG9ydG8gQWxlZ3JlKS4gQSBQTkFEIENvbnTDrW51YSAoUGVzcXVpc2EgTmFjaW9uYWwgcG9yIEFtb3N0cmEgZGUgRG9taWPDrWxpb3MgQ29udMOtbnVhKSwgaG9qZSBmb250ZSBkZSByZWZlcsOqbmNpYSBwYXJhIGEgdGF4YSBkZSBkZXNvY3VwYcOnw6NvLCBzw7MgZm9pIGluaWNpYWRhIGVtIDIwMTIsIHJhesOjbyBwZWxhIHF1YWwgc2Ugb3B0b3UgcGVsYSBQTUUgcGFyYSBjb2JyaXIgbyBwZXLDrW9kbyBhbmFsaXNhZG8gbmVzdGEgc2XDp8Ojby4NCg0KQSBxdWVkYSBkYSBkZXNvY3VwYcOnw6NvLCBjb250dWRvLCBjb250YSBhcGVuYXMgcGFydGUgZGEgaGlzdMOzcmlhLiBBIGZvcm1hbGl6YcOnw6NvIGRvIGVtcHJlZ28gdGFtYsOpbSB0ZXZlIHVtIHBhcGVsIGltcG9ydGFudGUgbmEgYW1wbGlhw6fDo28gZG8gY29uc3Vtby4NCg0KKipHcsOhZmljbyA1OioqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbWVyY2Fkb190cmFiYWxobyA8LSBkYXRhLmZyYW1lKA0KICBhbm8gPSAyMDAzOjIwMTQsDQogIGNvbV9jYXJ0ZWlyYSA9IGMoNDEuNiwgNDEuMCwgNDIuMCwgNDMuMiwgNDQuMiwgNDYuMCwgNDYuNSwgNDguMiwgNTAuNCwgNTEuMSwgNTIuMSwgNTIuNiksDQogIHNlbV9jYXJ0ZWlyYSA9IGMoMTcuMCwgMTcuNCwgMTcuMCwgMTYuMiwgMTUuNCwgMTQuOCwgMTQuMSwgMTMuNCwgMTIuNCwgMTEuOSwgMTEuMCwgOS44OCkNCikNCg0KaGlnaGNoYXJ0KCkgJT4lDQogIGhjX2NoYXJ0KA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgc3BhY2luZ1RvcCA9IDIwLCBzcGFjaW5nUmlnaHQgPSAyMCwNCiAgICBzcGFjaW5nQm90dG9tID0gMjAsIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIkNvbSBjYXJ0ZWlyYSBhc3NpbmFkYSIsDQogICAgZGF0YSA9IG1lcmNhZG9fdHJhYmFsaG8kY29tX2NhcnRlaXJhLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJTZW0gY2FydGVpcmEgYXNzaW5hZGEiLA0KICAgIGRhdGEgPSBtZXJjYWRvX3RyYWJhbGhvJHNlbV9jYXJ0ZWlyYSwNCiAgICBjb2xvciA9ICIjRkVCMDE1Ig0KICApICU+JQ0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gYXMuY2hhcmFjdGVyKG1lcmNhZG9fdHJhYmFsaG8kYW5vKSwNCiAgICBsaW5lQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgdGlja0NvbG9yID0gIiNEOUQ5RDkiLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSkNCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KA0KICAgICAgdGV4dCA9ICIlIGRvIHRvdGFsIGRlIG9jdXBhZG9zIiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiwgZm9udFNpemUgPSAiMTJweCIpDQogICAgKSwNCiAgICBncmlkTGluZUNvbG9yID0gIiNFNkU2RTYiLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpLA0KICAgICAgZm9ybWF0ID0gInt2YWx1ZX0lIg0KICAgICkNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIGJvcmRlcldpZHRoID0gMCwNCiAgICAgIGdyb3VwUGFkZGluZyA9IDAuMSwNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMDUNCiAgICApLA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiRm9ybWFsaXphw6fDo28gZG8gTWVyY2FkbyBkZSBUcmFiYWxobyDigJQgQnJhc2lsIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMjBweCIsIGZvbnRXZWlnaHQgPSAiYm9sZCIsIGNvbG9yID0gIiMxMTExMTEiKQ0KICApICU+JQ0KICBoY19zdWJ0aXRsZSgNCiAgICB0ZXh0ID0gIkRpc3RyaWJ1acOnw6NvIHBlcmNlbnR1YWwgZG9zIG9jdXBhZG9zIOKAlCByZWdpw7VlcyBtZXRyb3BvbGl0YW5hcyDigJQgMjAwMyBhIDIwMTQiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxM3B4IiwgY29sb3IgPSAiIzY2NjY2NiIpDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgYm9yZGVyQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgYm9yZGVyUmFkaXVzID0gOCwNCiAgICBzaGFkb3cgPSBGQUxTRSwNCiAgICB2YWx1ZVN1ZmZpeCA9ICIlIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTJweCIpDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCINCiAgKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFL1BNRSDigJQgUmV0cm9zcGVjdGl2YSAyMDAzLTIwMTQuIEVsYWJvcmHDp8OjbyBwcsOzcHJpYSBJYk1hY3JvQkguIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTBweCIsIGNvbG9yID0gIiM3Nzc3NzciKQ0KICApDQpgYGANCg0KQ29tbyBvYnNlcnZhZG8gbm8gZ3LDoWZpY28gNSwgYSBwYXJjZWxhIGRlIHRyYWJhbGhhZG9yZXMgY29tIGNhcnRlaXJhIGFzc2luYWRhIGluaWNpYSB0cmFqZXTDs3JpYSBkZSBleHBhbnPDo28gZW0gMjAwNCwgc2FpbmRvIGRlIDQxJSBlIGF0aW5naW5kbyA1Miw2JSBlbSAyMDE0LiBObyBtZXNtbyBwZXLDrW9kbywgbyB0cmFiYWxobyBzZW0gY2FydGVpcmEgcmVjdWEgZGUgMTcsNCUgcGFyYSA5LDklLg0KDQpBbMOpbSBkZSBnYXJhbnRpciBtYWlvciBlc3RhYmlsaWRhZGUgZGUgcmVuZGEsIGEgZm9ybWFsaXphw6fDo28gZG8gdHJhYmFsaG8gYW1wbGlhIG8gYWNlc3NvIGEgYmVuZWbDrWNpb3MgLSBjb21vIGNyw6lkaXRvIGNvbnNpZ25hZG8sIEZHVFMgcXVlIHZpYWJpbGl6YSBvIGZpbmFuY2lhbWVudG8gaGFiaXRhY2lvbmFsLCAxM8K6IHNhbMOhcmlvLCBlIGbDqXJpYXMgcmVtdW5lcmFkYXMuIEVzc2UgY29uanVudG8gcmVkdXogYSBpbnNlZ3VyYW7Dp2EgZGFzIGZhbcOtbGlhcywgYXVtZW50YW5kbyBhIHByb3BlbnPDo28gbWFyZ2luYWwgYSBjb25zdW1pci4NCg0KRW0gb3V0cmFzIHBhbGF2cmFzLCBhIG1haW9yIGVzdGFiaWxpZGFkZSBkYSByZW5kYSBlIGRhcyBjb25kacOnw7VlcyBkZSB2aWRhIGNvbnRyaWJ1aXUgcGFyYSBzdXN0ZW50YXIgYSBleHBhbnPDo28gZGEgZGVtYW5kYSBpbnRlcm5hIGFvIGxvbmdvIGRvIHBlcsOtb2RvLiANCg0KIyMjIyAxLjIuMyBEZXNlbXBlbmhvIHNldG9yaWFsDQoNCkEgYW7DoWxpc2UgZG8gUElCIGZ1bmNpb25hLCBhcXVpLCBjb21vIHVtYSBmb3JtYSBkZSBjb25zb2xpZGFyIG9zIG1vdmltZW50b3Mgb2JzZXJ2YWRvcyBhdMOpIGVudMOjby4gTyBQcm9kdXRvIEludGVybm8gQnJ1dG8gY3Jlc2NldSBkZSBmb3JtYSBzdXN0ZW50YWRhIGFvIGxvbmdvIGRlIHRvZG8gbyBjaWNsbywgbWFzIMOpIG5lY2Vzc8OhcmlvIGFuYWxpc2FyIG8gcXVlIGNyZXNjZXUuIE8gZ3LDoWZpY28gNiBkZXNhZ3JlZ2EgbyBwcm9kdXRvIHBvciBzZXRvci4gDQoNCioqR3LDoWZpY28gNjoqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KcGliX3BsYW5pbGhhIDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL3JvYmVyL09uZURyaXZlL0liTWFjcm8vUElCYXJlYS54bHN4Iiwgc2tpcCA9IDEpDQoNCnBpYiA8LSBwaWJfcGxhbmlsaGEgJT4lDQogIHNsaWNlKC0xLCAtMikgJT4lDQogIHJlbmFtZSh0cmltZXN0cmUgPSBCcmFzaWwsIHNldG9yID0gLi4uMiwgdmFsb3IgPSAuLi4zKSAlPiUNCiAgZmlsbCh0cmltZXN0cmUsIC5kaXJlY3Rpb24gPSAiZG93biIpICU+JSANCiAgZmlsdGVyKHNldG9yICVpbiUgYygiQWdyb3BlY3XDoXJpYSAtIHRvdGFsIiwgDQogICAgICAgICAgICAgICAgICAgICAgIkluZMO6c3RyaWEgLSB0b3RhbCIsIA0KICAgICAgICAgICAgICAgICAgICAgICJTZXJ2acOnb3MgLSB0b3RhbCIpKSAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IGFzLmludGVnZXIoc3Vic3RyKHRyaW1lc3RyZSwgbmNoYXIodHJpbWVzdHJlKS0zLCBuY2hhcih0cmltZXN0cmUpKSksDQogICAgdHJpbSA9IGNhc2Vfd2hlbigNCiAgICAgIGdyZXBsKCIxwroiLCB0cmltZXN0cmUpIH4gMSwNCiAgICAgIGdyZXBsKCIywroiLCB0cmltZXN0cmUpIH4gMiwNCiAgICAgIGdyZXBsKCIzwroiLCB0cmltZXN0cmUpIH4gMywNCiAgICAgIGdyZXBsKCI0wroiLCB0cmltZXN0cmUpIH4gNA0KICAgICksDQogICAgZGF0YSA9IGFzLkRhdGUocGFzdGUwKGFubywgIi0iLCB0cmltICogMyAtIDIsICItMDEiKSksDQogICAgZGF0YV9tcyA9IGFzLmRvdWJsZShkaWZmdGltZShkYXRhLCBhcy5EYXRlKCIxOTcwLTAxLTAxIiksIHVuaXRzID0gInNlY3MiKSkgKiAxMDAwLA0KICAgIHNldG9yID0gY2FzZV93aGVuKA0KICAgICAgZ3JlcGwoIkFncm8iLCBzZXRvcikgfiAiQWdyb3BlY3XDoXJpYSIsDQogICAgICBncmVwbCgiSW5kIiwgc2V0b3IpIH4gIkluZMO6c3RyaWEiLA0KICAgICAgZ3JlcGwoIlNlcnYiLCBzZXRvcikgfiAiU2VydmnDp29zIg0KICAgICkNCiAgKSAlPiUNCiAgZmlsdGVyKGRhdGEgPj0gYXMuRGF0ZSgiMjAwOS0wMS0wMSIpICYgZGF0YSA8PSBhcy5EYXRlKCIyMDE0LTAzLTAxIikpDQoNCmFncm8gPC0gcGliIHw+IGZpbHRlcihzZXRvciA9PSAiQWdyb3BlY3XDoXJpYSIpDQppbmQgIDwtIHBpYiB8PiBmaWx0ZXIoc2V0b3IgPT0gIkluZMO6c3RyaWEiKQ0Kc2VydiA8LSBwaWIgfD4gZmlsdGVyKHNldG9yID09ICJTZXJ2acOnb3MiKQ0KDQpncmFmaWNvX3BpYl9zZXRvciA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJQSUIgcG9yIFNldG9yIC0gQnJhc2lsIiwgYWxpZ24gPSAiY2VudGVyIikgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiVmFsb3JlcyBhIHByZcOnb3MgY29ycmVudGVzIChSJCBtaWxow7VlcykgLSAxVDIwMDkgYSAxVDIwMTQiLCBhbGlnbiA9ICJjZW50ZXIiKSAlPiUNCiAgaGNfYWRkX3NlcmllcyhkYXRhID0gYWdybywgdHlwZSA9ICJsaW5lIiwgaGNhZXMoeCA9IGRhdGFfbXMsIHkgPSB2YWxvciksDQogICAgICAgICAgICAgICAgbmFtZSA9ICJBZ3JvcGVjdcOhcmlhIiwgY29sb3IgPSAiIzQ2QjFFMSIpICU+JQ0KICBoY19hZGRfc2VyaWVzKGRhdGEgPSBpbmQsIHR5cGUgPSAibGluZSIsIGhjYWVzKHggPSBkYXRhX21zLCB5ID0gdmFsb3IpLA0KICAgICAgICAgICAgICAgIG5hbWUgPSAiSW5kw7pzdHJpYSIsIGNvbG9yID0gIiNGRUIwMTUiKSAlPiUNCiAgaGNfYWRkX3NlcmllcyhkYXRhID0gc2VydiwgdHlwZSA9ICJsaW5lIiwgaGNhZXMoeCA9IGRhdGFfbXMsIHkgPSB2YWxvciksDQogICAgICAgICAgICAgICAgbmFtZSA9ICJTZXJ2acOnb3MiLCBjb2xvciA9ICIjMDIwMjNDIikgJT4lDQogIGhjX3hBeGlzKA0KICAgIHR5cGUgPSAiZGF0ZXRpbWUiLA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlBlcsOtb2RvIiksDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIGZvcm1hdHRlciA9IEpTKCJmdW5jdGlvbigpIHsNCiAgICAgICAgdmFyIG1lc2VzID0gWydKYW4nLCAnRmV2JywgJ01hcicsICdBYnInLCAnTWFpJywgJ0p1bicsDQogICAgICAgICAgICAgICAgICAgICAnSnVsJywgJ0FnbycsICdTZXQnLCAnT3V0JywgJ05vdicsICdEZXonXTsNCiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKTsNCiAgICAgICAgcmV0dXJuIG1lc2VzW2QuZ2V0TW9udGgoKV0gKyAnIFxcJycgKyANCiAgICAgICAgICAgICAgIFN0cmluZyhkLmdldEZ1bGxZZWFyKCkpLnNsaWNlKDIpOw0KICAgICAgfSIpDQogICAgKQ0KICApICU+JQ0KICBoY19yYW5nZVNlbGVjdG9yKA0KICAgIHNlbGVjdGVkID0gNSwNCiAgICBidXR0b25zID0gbGlzdCgNCiAgICAgIGxpc3QodHlwZSA9ICJ5ZWFyIiwgY291bnQgPSAxLCB0ZXh0ID0gIjFhIiksDQogICAgICBsaXN0KHR5cGUgPSAieWVhciIsIGNvdW50ID0gMywgdGV4dCA9ICIzYSIpLA0KICAgICAgbGlzdCh0eXBlID0gInllYXIiLCBjb3VudCA9IDUsIHRleHQgPSAiNWEiKSwNCiAgICAgIGxpc3QodHlwZSA9ICJhbGwiLCB0ZXh0ID0gIlR1ZG8iKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfbmF2aWdhdG9yKGVuYWJsZWQgPSBUUlVFKSAlPiUNCiAgaGNfc2Nyb2xsYmFyKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX3lBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gIlIkIG1pbGjDtWVzIikpICU+JQ0KICBoY190b29sdGlwKHZhbHVlU3VmZml4ID0gIiBtaSIsIHNoYXJlZCA9IFRSVUUpICU+JQ0KICBoY19jcmVkaXRzKGVuYWJsZWQgPSBUUlVFLA0KICAgICAgICAgICAgIHRleHQgPSAiRm9udGU6IElCR0UvQ29udGFzIE5hY2lvbmFpcy4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iKQ0KDQpwcmludChncmFmaWNvX3BpYl9zZXRvcikNCmBgYA0KDQpTZXJ2acOnb3MgasOhIHJlc3BvbmRpYW0gcGVsYSBtYWlvciBmYXRpYSBkbyBQSUIgZW0gMjAwOSAoYXByb3hpbWFkYW1lbnRlIFJcJDQ1MyBiaWxow7VlcykgZSBxdWFzZSBkb2JyYXJhbSBhdMOpIG8gaW7DrWNpbyBkZSAyMDE0IChSXCQ4MzEgYmlsaMO1ZXMpLiBBIGluZMO6c3RyaWEgc2FpdSBkZSBSXCQxNTIgYmlsaMO1ZXMgcGFyYSBSXCQyODIgYmlsaMO1ZXMsIGVucXVhbnRvIGEgYWdyb3BlY3XDoXJpYSBwYXNzb3UgZGUgUlwkNDEgYmlsaMO1ZXMgcGFyYSBSJDc0IGJpbGjDtWVzLiBFbSB0ZXJtb3MgYWJzb2x1dG9zLCB0b2RvcyBvcyBzZXRvcmVzIGNyZXNjZXJhbS4NCk8gcG9udG8sIHBvcsOpbSwgZXN0w6EgbmFzIHBhcnRpY2lwYcOnw7VlcyByZWxhdGl2YXMuIEVtIDIwMDksIG9zIHNlcnZpw6dvcyByZXByZXNlbnRhdmFtIGFwcm94aW1hZGFtZW50ZSA3MCUgZG8gUElCLCBhIGluZMO6c3RyaWEgY2VyY2EgZGUgMjMlIGUgYSBhZ3JvcGVjdcOhcmlhIGFwcm94aW1hZGFtZW50ZSA2JS4gRW0gMjAxNCwgZXNzZXMgbsO6bWVyb3MgcGVybWFuZWNlcmFtIHByYXRpY2FtZW50ZSBpbmFsdGVyYWRvcy4gQSBlc3RydXR1cmEgcHJvZHV0aXZhIGJyYXNpbGVpcmEgbsOjbyBzZSB0cmFuc2Zvcm1vdSBhbyBsb25nbyBkZSBjaW5jbyBhbm9zIGRlIGV4cGFuc8OjbyBlY29uw7RtaWNhLg0KDQpNZXNtbyBlbSB1bSBwZXLDrW9kbyBkZSBjcmVzY2ltZW50bywgasOhIGVyYSBwb3Nzw612ZWwgaWRlbnRpZmljYXIgZnJhZ2lsaWRhZGVzIGVzdHJ1dHVyYWlzIGltcG9ydGFudGVzLiBPIGNpY2xvIGRlIGV4cGFuc8OjbyBzdXN0ZW50YWRvIHBvciBjcsOpZGl0bywgY29uc3VtbyBlIGZvcm1hbGl6YcOnw6NvIGRvIHRyYWJhbGhvIG7Do28gZm9pIGFjb21wYW5oYWRvIHBvciBtdWRhbsOnYXMgcmVsZXZhbnRlcyBuYSBjb21wb3Npw6fDo28gZGEgZWNvbm9taWEuIA0KDQojIyAxLjMgQXMgZnJhZ2lsaWRhZGVzIG9jdWx0YXMNCg0KTWVzbW8gZW0gcGVyw61vZG9zIGRlIGV4cGFuc8Ojbywgw6kgcG9zc8OtdmVsIGlkZW50aWZpY2FyIGZyYWdpbGlkYWRlcyBxdWUgZXZlbnR1YWxtZW50ZSBwb2RlbSBjb250cmlidWlyIHBhcmEgdW1hIGNyaXNlIGZ1dHVyYS4gQSB0ZW9yaWEgZG9zIGNpY2xvcyBlY29uw7RtaWNvcyBwYXJ0ZSBhIGlkZWlhIGRlIHF1ZSByZWNlc3PDtWVzIGUgZXhwYW5zw7VlcyBzw6NvIHJlY29ycmVudGVzLCBhaW5kYSBxdWUgbsOjbyBwZXJpw7NkaWNhcyAtIG91IHNlamEsIG7Do28gw6kgcG9zc8OtdmVsIHNhYmVyIHF1YW5kbyBjYWRhIGZhc2UgaXLDoSBjb21lw6dhciBvdSB0ZXJtaW5hciwgbWFzIHNhYmUtc2UgcXVlIGFtYmFzIHRlbmRlbSBhIHNlIGFsdGVybmFyIGFvIGxvbmdvIGRvIHRlbXBvLg0KTmVzc2Ugc2VudGlkbywgcGVyw61vZG9zIGRlIHByb3NwZXJpZGFkZSBuw6NvIGRldmVtIHNlciBhbmFsaXNhZG9zIGFwZW5hcyBwZWxvcyBzZXVzIHJlc3VsdGFkb3MgcG9zaXRpdm9zIGRlIGN1cnRvIHByYXpvLiBPIGNyZXNjaW1lbnRvIGVjb27DtG1pY28gcG9kZSBvY3VsdGFyIGRlc2VxdWlsw61icmlvcyBxdWUgc8OzIHNlIHRvcm5hbSBwbGVuYW1lbnRlIHZpc8OtdmVpcyBxdWFuZG8gbyBwYcOtcyBlbnRyYSBlbSByZWNlc3PDo28uIEFzc2ltLCBhbmFsaXNhciBhcyBmcmFnaWxpZGFkZXMgY29uc3RydcOtZGFzIGR1cmFudGUgYSBleHBhbnPDo28gYWp1ZGEgYSBjb21wcmVlbmRlciBuw6NvIGFwZW5hcyBvcyBmYXRvcmVzIHF1ZSBjb250cmlidcOtcmFtIHBhcmEgYSByZWNlc3PDo28gcG9zdGVyaW9yLCBtYXMgb3MgcHLDs3ByaW9zIGxpbWl0ZXMgZG8gY3Jlc2NpbWVudG8gZG8gcGHDrXMuDQoNCiMjIyMgMS4zLjEgSW52ZXN0aW1lbnRvIHByb2R1dGl2bw0KDQpVbSBpbmRpY2Fkb3IgZXh0cmVtYW1lbnRlIHJlbGV2YW50ZSBwYXJhIGFuYWxpc2FyIGEgc3VzdGVudGFiaWxpZGFkZSBkbyBjcmVzY2ltZW50byBlY29uw7RtaWNvIMOpIGEgRm9ybWHDp8OjbyBCcnV0YSBkZSBDYXBpdGFsIEZpeG8gKEZCQ0YpLCBxdWUgbWVkZSBvcyBpbnZlc3RpbWVudG9zIHJlYWxpemFkb3MgZW0gYXRpdm9zIHByb2R1dGl2b3MsIGNvbW8gbcOhcXVpbmFzLCBlcXVpcGFtZW50b3MsIGNvbnN0cnXDp8OjbywgZSBpbmZyYWVzdHJ1dHVyYS4gRW0gZ2VyYWwsIGVzc2UgaW5kaWNhZG9yIGZ1bmNpb25hIGNvbW8gdW1hIHNpbmFsaXphw6fDo28gZGEgY2FwYWNpZGFkZSBmdXR1cmEgZGUgZXhwYW5zw6NvIGRhIHByb2R1w6fDo28gZSBkbyBhdW1lbnRvIGRhIHByb2R1dGl2aWRhZGUgZGEgZWNvbm9taWEsIHBvZGVuZG8gc2VyIG9ic2VydmFkbyBubyBncsOhZmljbyA3LiANCg0KKipHcsOhZmljbyA3OioqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZmJjZiA8LSBkYXRhLmZyYW1lKA0KICBwZXJpb2RvID0gYygiMjAwOSBUMSIsICIyMDA5IFQyIiwgIjIwMDkgVDMiLCAiMjAwOSBUNCIsDQogICAgICAgICAgICAgICIyMDEwIFQxIiwgIjIwMTAgVDIiLCAiMjAxMCBUMyIsICIyMDEwIFQ0IiwNCiAgICAgICAgICAgICAgIjIwMTEgVDEiLCAiMjAxMSBUMiIsICIyMDExIFQzIiwgIjIwMTEgVDQiLA0KICAgICAgICAgICAgICAiMjAxMiBUMSIsICIyMDEyIFQyIiwgIjIwMTIgVDMiLCAiMjAxMiBUNCIsDQogICAgICAgICAgICAgICIyMDEzIFQxIiwgIjIwMTMgVDIiLCAiMjAxMyBUMyIsICIyMDEzIFQ0IiwNCiAgICAgICAgICAgICAgIjIwMTQgVDEiKSwNCiAgdmFyaWFjYW8gPSBjKC05LjQ5LCAtOC4yOSwgLTMuODYsIDEyLjk1LA0KICAgICAgICAgICAgICAgMjkuMDAsIDIyLjkyLCAxNS4yNiwgNy43OSwNCiAgICAgICAgICAgICAgIDguMjMsIDguMTMsIDUuNzYsIDUuNDYsDQogICAgICAgICAgICAgICAzLjE0LCAxLjExLCAtMS40OSwgMC42MSwNCiAgICAgICAgICAgICAgIDIuOTUsIDguNDksIDcuMzUsIDQuNDMsDQogICAgICAgICAgICAgICA0LjE2KQ0KKSAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IGFzLmludGVnZXIoc3Vic3RyKHBlcmlvZG8sIDEsIDQpKSwNCiAgICB0cmltID0gYXMuaW50ZWdlcihzdWJzdHIocGVyaW9kbywgNywgNykpLA0KICAgIGRhdGEgPSBhcy5EYXRlKHBhc3RlMChhbm8sICItIiwgZm9ybWF0Qyh0cmltICogMyAtIDIsIHdpZHRoID0gMiwgZmxhZyA9ICIwIiksICItMTUiKSksDQogICAgZGF0YV9tcyA9IGFzLm51bWVyaWMoYXMuUE9TSVhjdChkYXRhLCB0eiA9ICJVVEMiKSkgKiAxMDAwDQogICkNCg0KZGFkb3MgPC0gZmJjZiAlPiUNCiAgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhcmlhY2FvKQ0KDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY19jaGFydCgNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgc3BhY2luZ1RvcCA9IDIwLA0KICAgIHNwYWNpbmdSaWdodCA9IDIwLA0KICAgIHNwYWNpbmdCb3R0b20gPSAyMCwNCiAgICBzcGFjaW5nTGVmdCA9IDIwDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zKSwNCiAgICB0eXBlID0gImNvbHVtbiIsDQogICAgbmFtZSA9ICJGQkNGIC0gVmFyaWHDp8OjbyBhbnVhbCAoJSkuIiwNCiAgICBjb2xvciA9ICIjRkVCMDE1IiwNCiAgICBib3JkZXJDb2xvciA9ICIjRkVCMDE1IiwNCiAgICBwb2ludFBhZGRpbmcgPSAwLjA4LA0KICAgIGdyb3VwUGFkZGluZyA9IDAuMTAsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDIsIHZhbHVlU3VmZml4ID0gIiUiKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QoDQogICAgICB0ZXh0ID0gIlZhcmlhw6fDo28gYW51YWwgKCUpIiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiwgZm9udFNpemUgPSAiMTJweCIpDQogICAgKSwNCiAgICBncmlkTGluZUNvbG9yID0gIiNFNkU2RTYiLA0KICAgIGdyaWRMaW5lV2lkdGggPSAxLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSksDQogICAgcGxvdExpbmVzID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHZhbHVlID0gMCwNCiAgICAgICAgd2lkdGggPSAxLjUsDQogICAgICAgIGNvbG9yID0gIiM5RTlFOUUiLA0KICAgICAgICBkYXNoU3R5bGUgPSAiU2hvcnREYXNoIiwNCiAgICAgICAgekluZGV4ID0gNQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApLA0KICAgIGNvbHVtbiA9IGxpc3QoYm9yZGVyV2lkdGggPSAwKQ0KICApICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIkZvcm1hw6fDo28gQnJ1dGEgZGUgQ2FwaXRhbCBGaXhvIG5vIEJyYXNpbCIsDQogICAgc3R5bGUgPSBsaXN0KA0KICAgICAgZm9udFNpemUgPSAiMjBweCIsDQogICAgICBmb250V2VpZ2h0ID0gImJvbGQiLA0KICAgICAgY29sb3IgPSAiIzExMTExMSINCiAgICApDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiVmFyaWHDp8OjbyBhbnVhbCAoJSkgLSAxVDIwMDkgYSAxVDIwMTQgLSBtw6lkaWEgMTk5NSA9IDEwMCIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEzcHgiLCBjb2xvciA9ICIjNjY2NjY2IikNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKGVuYWJsZWQgPSBGQUxTRSkgfD4NCiAgaGNfcmFuZ2VTZWxlY3RvcihlbmFibGVkID0gRkFMU0UpIHw+DQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpIHw+DQogIGhjX3Njcm9sbGJhcihlbmFibGVkID0gRkFMU0UpIHw+DQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgdGV4dCA9ICJGb250ZTogSUJHRS9Db250YXMgTmFjaW9uYWlzLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9ICIjNzc3Nzc3IikNCiAgKQ0KYGBgDQoNCk8gZ3LDoWZpY28gNyBhcHJlc2VudGEgYSB2YXJpYcOnw6NvIHBlcmNlbnR1YWwgYW51YWwgZGEgRkJDRiBhbyBsb25nbyBkbyBwZXLDrW9kby4gQXDDs3MgYSBjcmlzZSBpbnRlcm5hY2lvbmFsIGRlIDIwMDgsIG9ic2VydmEtc2UgdW1hIGZvcnRlIHJlY3VwZXJhw6fDo28gZG8gaW52ZXN0aW1lbnRvLiBBIHRheGEsIHF1ZSBlc3RhdmEgcHLDs3hpbWEgZGUgLTMsOSUgZW0ganVsaG8gZGUgMjAwOSwgc2FsdG91IHBhcmEgdmFsb3JlcyBwb3NpdGl2b3MsIGF0aW5naW5kbyBjZXJjYSBkZSAyOSUgZW0gamFuZWlybyBkZSAyMDEwLiBQYXJ0ZSBkZXNzZSBtb3ZpbWVudG8gw6kgZXNwZXJhZGEsIGrDoSBxdWUgcGVyw61vZG9zIHDDs3MtY3Jpc2UgY29zdHVtYW0gYXByZXNlbnRhciByZWN1cGVyYcOnw7VlcyBwZXJjZW50dWFpcyBtYWlzIGZvcnRlcywgZXNwZWNpYWxtZW50ZSBwb3JxdWUgbyBpbnZlc3RpbWVudG8gdGVuZGUgYSBzZSByZXRyYWlyIGR1cmFudGUgbW9tZW50b3MgZGUgaW5zdGFiaWxpZGFkZSBlY29uw7RtaWNhLg0KDQpPIHByaW5jaXBhbCBwb250byBkZSBhbsOhbGlzZSwgcG9yw6ltLCBlc3TDoSBubyBjb21wb3J0YW1lbnRvIHBvc3Rlcmlvci4gRW1ib3JhIG8gY2ljbG8gZGUgZXhwYW5zw6NvIGJyYXNpbGVpcm8gdGVuaGEgc2UgZW5jZXJyYWRvIG9maWNpYWxtZW50ZSBlbSAyMDE0LCBvIHBpY28gZG8gaW52ZXN0aW1lbnRvIG9jb3JyZXUgYWluZGEgbm8gaW7DrWNpbyBkZSAyMDEwLiBBIHBhcnRpciBkZXNzZSBwb250bywgYSB0cmFqZXTDs3JpYSBkYSBGQkNGIHBhc3NhIGEgYXByZXNlbnRhciBkZXNhY2VsZXJhw6fDo28gZSBvc2NpbGHDp8O1ZXMgLSBhdGluZ2luZG8gaW5jbHVzaXZlIGNyZXNjaW1lbnRvIG5lZ2F0aXZvIGRlIC0xLDQ5JSAgZW0ganVsaG8gZGUgMjAxMiwgbWVzbW8gZGVudHJvIGRvIHBlcsOtb2RvIGRlIGV4cGFuc8Ojby4NCg0KSXNzbyBzdWdlcmUgYSBhdXPDqm5jaWEgZGUgdW0gcGFkcsOjbyBkZSBpbnZlc3RpbWVudG8gcHJvZHV0aXZvOiBtZXNtbyBlbSB1bSBjZW7DoXJpbyBkZSBjcmVzY2ltZW50byBlY29uw7RtaWNvLCBvIGludmVzdGltZW50byBuw6NvIGNvbnNlZ3VpdSBtYW50ZXIgdW1hIHRyYWpldMOzcmlhIGNvbnTDrW51YSBkZSBmb3J0YWxlY2ltZW50by4gRXNzZSBtb3ZpbWVudG8gw6kgcmVsZXZhbnRlLCBwb3JxdWUgbyBpbnZlc3RpbWVudG8gcHJvZHV0aXZvIMOpIHVtIGRvcyBwcmluY2lwYWlzIG1lY2FuaXNtb3MgY2FwYXplcyBkZSBhbXBsaWFyIGEgY2FwYWNpZGFkZSBwcm9kdXRpdmEgZSBlbGV2YXIgYSBwcm9kdXRpdmlkYWRlIGRhIGVjb25vbWlhIG5vIGxvbmdvIHByYXpvLg0KQXNzaW0sIGEgZGVzYWNlbGVyYcOnw6NvIGRhIEZvcm1hw6fDo28gQnJ1dGEgZGUgQ2FwaXRhbCBGaXhvIGFudGVzIG1lc21vIGRvIGVuY2VycmFtZW50byBvZmljaWFsIGRvIGNpY2xvIGRlIGV4cGFuc8OjbyBqw6Egc2luYWxpemF2YSBsaW1pdGHDp8O1ZXMgZXN0cnV0dXJhaXMgaW1wb3J0YW50ZXMgZGEgZWNvbm9taWEgYnJhc2lsZWlyYS4NCg0KDQojIyMjIDEuMy4yIFByb2R1dGl2aWRhZGUNCg0KRGVwb2lzIGRhIGFuw6FsaXNlIGRvIFBJQiwgZG8gZW1wcmVnbywgZG8gY29uc3VtbywgZSBkbyBpbnZlc3RpbWVudG8gcHJvZHV0aXZvLCBjYWJlIG9ic2VydmFyIHNlIG8gY3Jlc2NpbWVudG8gZG8gcGVyw61vZG8gZm9pIGFjb21wYW5oYWRvIHBvciBnYW5ob3MgZGUgZWZpY2nDqm5jaWEuIFBhcmEgaXNzbywgbyBncsOhZmljbyA4IGFwcmVzZW50YSBhIFByb2R1dGl2aWRhZGUgVG90YWwgZG9zIEZhdG9yZXMgKFBURikgZGVzZGUgMTk5NSwgY29tIG8gcGVyw61vZG8gZGUgZXhwYW5zw6NvIGVtIGRlc3RhcXVlLg0KDQoqKkdyw6FmaWNvIDg6KiogDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KcHRmIDwtIGRhdGEuZnJhbWUoDQogIGFubyA9IDE5OTU6MjAxNCwNCiAgY29tX2NoID0gYygxMDAuMCwgOTkuMiwgOTguNiwgOTYuNCwgOTUuOCwgOTQuNSwgOTIuNiwgOTIuOSwgOTAuOCwgOTIuNywNCiAgICAgICAgICAgICA5My4xLCA5Mi4zLCA5My44LCA5NC4xLCA5My4yLCA5NC45LCA5Ni4xLCA5NC4yLCA5My4zLCA5MS4yKSwNCiAgc2VtX2NoID0gYyg5Ni40LCA5Ny4zLCA5OC4zLCA5OC40LCA5OC40LCA5OC4xLCA5Ny4zLCA5OS4zLCA5OC43LCAxMDEuMSwNCiAgICAgICAgICAgICAxMDIuNiwgMTA0LjUsIDEwNy42LCAxMDkuNSwgMTEwLjQsIDExMy4zLCAxMTUuOCwgMTE1LjgsIDExNi4xLCAxMTUuMSkNCikgJT4lDQogIG11dGF0ZSgNCiAgICBjb21fY2hfaWR4ID0gY29tX2NoIC8gY29tX2NoW2FubyA9PSAyMDA4XSAqIDEwMCwNCiAgICBzZW1fY2hfaWR4ID0gc2VtX2NoIC8gc2VtX2NoW2FubyA9PSAyMDA4XSAqIDEwMCwNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLTAxLTAxIikpLA0KICAgIGRhdGFfbXMgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoZGF0YSwgdHogPSAiVVRDIikpICogMTAwMA0KICApDQoNCmRhZG9zX2NvbSA8LSBwdGYgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvciA9IGNvbV9jaF9pZHgpDQpkYWRvc19zZW0gPC0gcHRmICU+JSBzZWxlY3QodGltZXN0YW1wID0gZGF0YV9tcywgdmFsb3IgPSBzZW1fY2hfaWR4KQ0KDQojIFRpbWVzdGFtcHMgcGFyYSBhIGJhbmRhIDIwMDgtMjAxNA0KdHNfMjAwOCA8LSBhcy5udW1lcmljKGFzLlBPU0lYY3QoIjIwMDgtMDEtMDEiLCB0eiA9ICJVVEMiKSkgKiAxMDAwDQp0c18yMDE0IDwtIGFzLm51bWVyaWMoYXMuUE9TSVhjdCgiMjAxNC0wMS0wMSIsIHR6ID0gIlVUQyIpKSAqIDEwMDANCg0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLA0KICAgIHNwYWNpbmdUb3AgPSAyMCwgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgc3BhY2luZ0JvdHRvbSA9IDIwLCBzcGFjaW5nTGVmdCA9IDIwDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX3NlbSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlBURiBzZW0gYWp1c3RlIGRlIGNhcGl0YWwgaHVtYW5vIiwNCiAgICBjb2xvciA9ICIjRkVCMDE1IiwNCiAgICBsaW5lV2lkdGggPSAyLjUsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gMyksDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlBURiBjb20gYWp1c3RlIGRlIGNhcGl0YWwgaHVtYW5vIiwNCiAgICBjb2xvciA9ICIjMDIwMjNDIiwNCiAgICBsaW5lV2lkdGggPSAyLjUsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gMyksDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEpDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIGxpbmVDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICB0aWNrQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpKSwNCiAgICBwbG90QmFuZHMgPSBsaXN0KA0KICAgICAgbGlzdCgNCiAgICAgICAgZnJvbSA9IHRzXzIwMDgsDQogICAgICAgIHRvID0gdHNfMjAxNCwNCiAgICAgICAgY29sb3IgPSAicmdiYSgyLCAyLCA2MCwgMC4wNikiLA0KICAgICAgICBsYWJlbCA9IGxpc3QoDQogICAgICAgICAgdGV4dCA9ICJQZXLDrW9kbyBkZSBleHBhbnPDo28iLA0KICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiwgZm9udFNpemUgPSAiMTFweCIsIGZvbnRTdHlsZSA9ICJpdGFsaWMiKSwNCiAgICAgICAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgICAgICAgIHZlcnRpY2FsQWxpZ24gPSAidG9wIiwNCiAgICAgICAgICB5ID0gMTUNCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KA0KICAgICAgdGV4dCA9ICLDjW5kaWNlICgyMDA4ID0gMTAwKSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICAgICksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICBsYWJlbHMgPSBsaXN0KA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSwNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWV9Ig0KICAgICksDQogICAgcGxvdExpbmVzID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHZhbHVlID0gMTAwLA0KICAgICAgICB3aWR0aCA9IDEuNSwNCiAgICAgICAgY29sb3IgPSAiIzlFOUU5RSIsDQogICAgICAgIGRhc2hTdHlsZSA9ICJTaG9ydERhc2giLA0KICAgICAgICB6SW5kZXggPSA1DQogICAgICApDQogICAgKQ0KICApICU+JQ0KICBoY19wbG90T3B0aW9ucygNCiAgICBzZXJpZXMgPSBsaXN0KA0KICAgICAgYW5pbWF0aW9uID0gRkFMU0UsDQogICAgICBzdGF0ZXMgPSBsaXN0KGluYWN0aXZlID0gbGlzdChvcGFjaXR5ID0gMSkpDQogICAgKQ0KICApICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIlByb2R1dGl2aWRhZGUgVG90YWwgZG9zIEZhdG9yZXMg4oCUIEJyYXNpbCIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjIwcHgiLCBmb250V2VpZ2h0ID0gImJvbGQiLCBjb2xvciA9ICIjMTExMTExIikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICLDjW5kaWNlIHJlYmFzZWFkbyBlbSAyMDA4ID0gMTAwIOKAlCAxOTk1IGEgMjAxNCIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEzcHgiLCBjb2xvciA9ICIjNjY2NjY2IikNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIg0KICApICU+JQ0KICBoY19yYW5nZVNlbGVjdG9yKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19zY3JvbGxiYXIoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBGR1YvSUJSRSDigJQgT2JzZXJ2YXTDs3JpbyBkYSBQcm9kdXRpdmlkYWRlIFJlZ2lzIEJvbmVsbGkuIEVsYWJvcmHDp8OjbyBwcsOzcHJpYSBJYk1hY3JvQkguIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTBweCIsIGNvbG9yID0gIiM3Nzc3NzciKQ0KICApDQpgYGANCg0KQSBQVEYgw6kgZGVyaXZhZGEgZGUgdW1hIGZ1bsOnw6NvIGRlIHByb2R1w6fDo28sIHF1ZSByZWxhY2lvbmEgbyBwcm9kdXRvIGNvbSBvcyBmYXRvcmVzIHV0aWxpemFkb3MgbmEgcHJvZHXDp8OjbywgcXVlIHBvZGUgc2VyIHZpc3RvIG5hIGVxdWHDp8OjbyAxLg0KDQoqKkVxdWHDp8OjbyAxOioqDQokJA0KWV90ID0gQV90ICh1X3QgS190KV57XGFscGhhfSBMX3ReezEtXGFscGhhfQ0KJCQNCg0KRW0gcXVlLCANCi0gJFlfdCQgcmVwcmVzZW50YSBvIHByb2R1dG87DQotICRBX3QkIHJlcHJlc2VudGEgYSBQcm9kdXRpdmlkYWRlIFRvdGFsIGRvcyBGYXRvcmVzOw0KLSAkdV90IEtfdCQgcmVwcmVzZW50YSBvIGNhcGl0YWwgYWp1c3RhZG8gcGVsYSB1dGlsaXphw6fDo28gZGEgY2FwYWNpZGFkZSBpbnN0YWxhZGE7DQotICRMX3QkIHJlcHJlc2VudGEgbyBmYXRvciB0cmFiYWxobzsNCi0gJFxhbHBoYSQgcmVwcmVzZW50YSBhIHBhcnRpY2lwYcOnw6NvIGRvIGNhcGl0YWwgbmEgcHJvZHXDp8OjbzsNCi0gJDEtXGFscGhhJCByZXByZXNlbnRhIGEgcGFydGljaXBhw6fDo28gZG8gdHJhYmFsaG8gbmEgcHJvZHXDp8Ojby4NCg0KSXNvbGFuZG8gQSwgb2J0w6ltLXNlIGEgUFRGLCBuYSBlcXVhw6fDo28gMi4NCg0KKipFcXVhw6fDo28gMjoqKg0KJCQNCkFfdCA9IFxmcmFje1lfdH17KHVfdCBLX3QpXntcYWxwaGF9IExfdF57MS1cYWxwaGF9fQ0KJCQNCg0KTm8gZW50YW50bywgYSBpbnRlcnByZXRhw6fDo28gZGEgUFRGIG11ZGEgcXVhbmRvIHNlIGluY29ycG9yYSBvIGFqdXN0ZSBkZSBjYXBpdGFsIGh1bWFuby4gU2VtIGVzc2UgYWp1c3RlLCBwYXJ0ZSBkbyBnYW5obyBhc3NvY2lhZG8gw6AgbWFpb3IgZXNjb2xhcmlkYWRlIG91IHF1YWxpZmljYcOnw6NvIGRhIGZvcsOnYSBkZSB0cmFiYWxobyBwb2RlIGFwYXJlY2VyIGluZGV2aWRhbWVudGUgY29tbyBhdW1lbnRvIGRlIHByb2R1dGl2aWRhZGUuIFBhcmEgY29ycmlnaXIgaXNzbywgbyBmYXRvciB0cmFiYWxobyBwYXNzYSBhIHNlciBhanVzdGFkbyBwZWxvIMONbmRpY2UgZGUgQ2FwaXRhbCBIdW1hbm8gKElDSCksIGV2aWRlbmNpYWRvIG5hIGVxdWHDp8OjbyAzLg0KDQoqKkVxdWHDp8OjbyAzOioqDQokJA0KTF90ID0gSF90IFx0aW1lcyBcbGVmdChcZnJhY3tJQ0hfdH17MTAwfVxyaWdodCkNCiQkDQoNCkVtIHF1ZTogLSAkSF90JCByZXByZXNlbnRhIGFzIGhvcmFzIHRyYWJhbGhhZGFzOw0KLSAkSUNIX3QkIHJlcHJlc2VudGEgbyDDjW5kaWNlIGRlIENhcGl0YWwgSHVtYW5vLg0KVm9sdGFuZG8gYW8gZ3LDoWZpY28gOCwgYSBQVEYgc2VtIGFqdXN0ZSBkZSBjYXBpdGFsIGh1bWFubyAobGluaGEgYW1hcmVsYSkgYXByZXNlbnRhIHVtYSB0cmFqZXTDs3JpYSBkZSBjcmVzY2ltZW50byBwcmF0aWNhbWVudGUgY29udMOtbnVhIGRlc2RlIDE5OTUuIER1cmFudGUgbyBwZXLDrW9kbyBkZSBleHBhbnPDo28gZWNvbsO0bWljYSBpbmljaWFkbyBlbSAyMDA4LCBlc3NlIGNyZXNjaW1lbnRvIHNlIGludGVuc2lmaWNhLCBtYW50ZW5kby1zZSBlbGV2YWRvIGF0w6kgYXByb3hpbWFkYW1lbnRlIDIwMTEsIHF1YW5kbyBhIHPDqXJpZSBwYXNzYSBhIGFwcmVzZW50YXIgY2VydGEgZXN0YWduYcOnw6NvIGUsIHBvc3Rlcmlvcm1lbnRlLCBxdWVkYS4gT2JzZXJ2YW5kbyBhcGVuYXMgZXNzYSBzw6lyaWUsIHNlcmlhIHBvc3PDrXZlbCBjb25jbHVpciBxdWUgbyBwZXLDrW9kbyBmb2kgYWNvbXBhbmhhZG8gcG9yIGdhbmhvcyByZWxldmFudGVzIGRlIHByb2R1dGl2aWRhZGUuDQpObyBlbnRhbnRvLCBlc3NhIGludGVycHJldGHDp8OjbyBzZSBhbHRlcmEgcXVhbmRvIHNlIGFuYWxpc2EgYSBQVEYgY29tIGFqdXN0ZSBkZSBjYXBpdGFsIGh1bWFubyAobGluaGEgYXp1bCkuIEFvIGluY29ycG9yYXIgbyBJQ0ggYW8gZmF0b3IgdHJhYmFsaG8sIHBhcnRlIGRvIGNyZXNjaW1lbnRvIGFudGVyaW9ybWVudGUgYXRyaWJ1w61kbyDDoCBwcm9kdXRpdmlkYWRlIHBhc3NhIGEgc2VyIGV4cGxpY2FkYSBwZWxhIG1haW9yIHF1YWxpZmljYcOnw6NvIGRhIG3Do28gZGUgb2JyYS4gRHVyYW50ZSB0b2RvIG8gcGVyw61vZG8gZGUgZXhwYW5zw6NvLCBhIHPDqXJpZSBjb20gYWp1c3RlIHBlcm1hbmVjZXUgYWJhaXhvIGRhIHPDqXJpZSBzZW0gYWp1c3RlLCBpbmRpY2FuZG8gcXVlIG9zIGdhbmhvcyBlZmV0aXZvcyBkZSBwcm9kdXRpdmlkYWRlIGZvcmFtIGxpbWl0YWRvcy4gSXNzbyBzaWduaWZpY2EgcXVlIHBhcnRlIGltcG9ydGFudGUgZG8gY3Jlc2NpbWVudG8gb2JzZXJ2YWRvIG5vIHBlcsOtb2RvIGVzdGV2ZSBhc3NvY2lhZGEgYW8gYXVtZW50byBkYSBxdWFsaWZpY2HDp8OjbyBkb3MgdHJhYmFsaGFkb3JlcywgZSBuw6NvIGEgZ2FuaG9zIGVzdHJ1dHVyYWlzIGRlIGVmaWNpw6puY2lhIHByb2R1dGl2YS4gQXNzaW0sIGEgYW7DoWxpc2UgZGEgUFRGIHJlZm9yw6dhIHF1ZSBvIGNpY2xvIGRlIGV4cGFuc8OjbyBicmFzaWxlaXJvIG7Do28gZm9pIHN1c3RlbnRhZG8gcG9yIGF1bWVudG9zIGNvbnNpc3RlbnRlcyBkZSBwcm9kdXRpdmlkYWRlIG5vIGxvbmdvIHByYXpvLiBPIGNyZXNjaW1lbnRvIG9jb3JyZXUsIG1hcyBzZW0gdHJhbnNmb3JtYcOnw6NvIHN1ZmljaWVudGUgbmEgY2FwYWNpZGFkZSBkYSBlY29ub21pYSBkZSBwcm9kdXppciBtYWlzIHV0aWxpemFuZG8gb3MgbWVzbW9zIGZhdG9yZXMgZGUgcHJvZHXDp8Ojby4NCkVzc2UgcmVzdWx0YWRvIMOpIGNvZXJlbnRlIGNvbSBvcyBkZW1haXMgaW5kaWNhZG9yZXMgYW5hbGlzYWRvcyBhbnRlcmlvcm1lbnRlLiBBIGRlc2FjZWxlcmHDp8OjbyBkbyBpbnZlc3RpbWVudG8gcHJvZHV0aXZvIGUgYSBsaW1pdGHDp8OjbyBkb3MgZ2FuaG9zIGRlIHByb2R1dGl2aWRhZGUgc3VnZXJlbSBxdWUgbyBtb2RlbG8gZGUgY3Jlc2NpbWVudG8gZG8gcGVyw61vZG8gcG9zc3XDrWEgZnJhZ2lsaWRhZGVzIGVzdHJ1dHVyYWlzIGltcG9ydGFudGVzLCBzZW5kbyBzdXN0ZW50YWRvIHByaW5jaXBhbG1lbnRlIHBlbGEgZXhwYW5zw6NvIGRvIGNvbnN1bW8gZSBkbyBtZXJjYWRvIGludGVybm8uDQoNCiMjIyAxLjQgTyBlc2dvdGFtZW50byBkbyBjaWNsbw0KDQpUZW5kbyBlbSB2aXN0YSBvcyBmYXRvcmVzIGFuYWxpc2Fkb3MgYW50ZXJpb3JtZW50ZSAtIHRhbnRvIG9zIG1vdG9yZXMgZGEgZXhwYW5zw6NvIHF1YW50byBhcyBmcmFnaWxpZGFkZXMgZXN0cnV0dXJhaXMgYWN1bXVsYWRhcyBhbyBsb25nbyBkbyBwZXLDrW9kbyAtLCB0b3JuYS1zZSBwb3Nzw612ZWwgb2JzZXJ2YXIgbyBpbsOtY2lvIGRvIGVzZ290YW1lbnRvIGRvIGNpY2xvIGVjb27DtG1pY28gYnJhc2lsZWlyby4gTyBjcmVzY2ltZW50byBzdXN0ZW50YWRvIHByaW5jaXBhbG1lbnRlIHBlbGEgZXhwYW5zw6NvIGRhIGRlbWFuZGEgaW50ZXJuYSBlIGRvIGNvbnN1bW8gcGFzc291IGEgZW5jb250cmFyIGxpbWl0ZXMgZW0gdW0gY29udGV4dG8gZGUgZGVzYWNlbGVyYcOnw6NvIGRvIGludmVzdGltZW50byBwcm9kdXRpdm8gZSBkZSBnYW5ob3MgcmVzdHJpdG9zIGRlIHByb2R1dGl2aWRhZGUuDQpOZXNzZSBjb250ZXh0bywgbyBncsOhZmljbyA5IGFwcmVzZW50YSBhIGV2b2x1w6fDo28gZGEgTmVjZXNzaWRhZGUgZGUgRmluYW5jaWFtZW50byBkbyBTZXRvciBQw7pibGljbyAoTkZTUCkgZSBkYSBEw612aWRhIEJydXRhIGRvIEdvdmVybm8gR2VyYWwgZW50cmUgMjAwOCBlIDIwMTQuDQoNCioqR3LDoWZpY28gOToqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmRhdGFfaW5pY2lvIDwtIGFzLkRhdGUoIjIwMDgtMDEtMDEiKQ0KZGF0YV9maW0gPC0gYXMuRGF0ZSgiMjAxNC0xMi0zMSIpDQoNCnJlc3VsdGFkb19wcmltYXJpbyA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IGMoInJlc3VsdGFkb19wcmltYXJpbyIgPSA1NzkzKSwNCiAgZmlyc3QuZGF0ZSA9IGRhdGFfaW5pY2lvLA0KICBsYXN0LmRhdGUgPSBkYXRhX2ZpbSwNCiAgZm9ybWF0LmRhdGEgPSAid2lkZSINCikgJT4lDQogIG11dGF0ZShEYXRhID0gYXMuRGF0ZShyZWYuZGF0ZSkpDQoNCmRpdmlkYV9icnV0YSA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IGMoImRpdmlkYV9icnV0YSIgPSAxMzc2MiksDQogIGZpcnN0LmRhdGUgPSBkYXRhX2luaWNpbywNCiAgbGFzdC5kYXRlID0gZGF0YV9maW0sDQogIGZvcm1hdC5kYXRhID0gIndpZGUiDQopICU+JQ0KICBtdXRhdGUoRGF0YSA9IGFzLkRhdGUocmVmLmRhdGUpKQ0KDQpkYWRvcyA8LSByZXN1bHRhZG9fcHJpbWFyaW8gJT4lDQogIHNlbGVjdChEYXRhLCByZXN1bHRhZG9fcHJpbWFyaW8pICU+JQ0KICBmdWxsX2pvaW4oDQogICAgZGl2aWRhX2JydXRhICU+JSBzZWxlY3QoRGF0YSwgZGl2aWRhX2JydXRhKSwNCiAgICBieSA9ICJEYXRhIg0KICApICU+JQ0KICBhcnJhbmdlKERhdGEpICU+JQ0KICBuYS5vbWl0KCkgJT4lDQogIG11dGF0ZSh0aW1lc3RhbXAgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoRGF0YSwgdHogPSAiVVRDIikpICogMTAwMCkNCg0KZ3JhZmljbyA8LSBoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY19jaGFydCgNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgc3BhY2luZ1RvcCA9IDIwLCBzcGFjaW5nUmlnaHQgPSAyMCwNCiAgICBzcGFjaW5nQm90dG9tID0gMjAsIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGFwcGx5KHNlcV9sZW4obnJvdyhkYWRvcykpLCBmdW5jdGlvbihpKSBsaXN0KGRhZG9zJHRpbWVzdGFtcFtpXSwgZGFkb3MkcmVzdWx0YWRvX3ByaW1hcmlvW2ldKSksDQogICAgdHlwZSA9ICJjb2x1bW4iLA0KICAgIG5hbWUgPSAiTkZTUCIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgYm9yZGVyQ29sb3IgPSAiI0ZFQjAxNSIsDQogICAgcG9pbnRQYWRkaW5nID0gMC4wOCwNCiAgICBncm91cFBhZGRpbmcgPSAwLjEwLA0KICAgIHlBeGlzID0gMCwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMiwgdmFsdWVTdWZmaXggPSAiIHAucC4iKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsYXBwbHkoc2VxX2xlbihucm93KGRhZG9zKSksIGZ1bmN0aW9uKGkpIGxpc3QoZGFkb3MkdGltZXN0YW1wW2ldLCBkYWRvcyRkaXZpZGFfYnJ1dGFbaV0pKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiRMOtdmlkYSBCcnV0YSAoJSBkbyBQSUIpIiwNCiAgICBjb2xvciA9ICIjMDIwMjNDIiwNCiAgICBsaW5lV2lkdGggPSAzLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwNCiAgICB5QXhpcyA9IDEsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDIsIHZhbHVlU3VmZml4ID0gIiUiKQ0KICApICU+JQ0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCgNCiAgICAgICAgdGV4dCA9ICJORlNQIC0gUmVzdWx0YWRvIFByaW3DoXJpbyAoJSBkbyBQSUIpIiwNCiAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgICAgICksDQogICAgICBvcHBvc2l0ZSA9IEZBTFNFLA0KICAgICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAxLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpKSwNCiAgICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICAgIGxpc3QoDQogICAgICAgICAgdmFsdWUgPSAwLA0KICAgICAgICAgIHdpZHRoID0gMS41LA0KICAgICAgICAgIGNvbG9yID0gIiM5RTlFOUUiLA0KICAgICAgICAgIGRhc2hTdHlsZSA9ICJTaG9ydERhc2giLA0KICAgICAgICAgIHpJbmRleCA9IDUNCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCgNCiAgICAgICAgdGV4dCA9ICJEw612aWRhIEJydXRhICglIGRvIFBJQikiLA0KICAgICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICAgICAgKSwNCiAgICAgIG9wcG9zaXRlID0gVFJVRSwNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAwLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApLA0KICAgIGNvbHVtbiA9IGxpc3QoYm9yZGVyV2lkdGggPSAwKQ0KICApICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIk5lY2Vzc2lkYWRlIGRlIEZpbmFuY2lhbWVudG8gZG8gU2V0b3IgUMO6YmxpY28gZSBEw612aWRhIEJydXRhIGRvIEdvdmVybm8gR2VyYWwiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIyMHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzExMTExMSIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiRXZvbHXDp8OjbyBkYSBORlNQIGUgZG8gZW5kaXZpZGFtZW50byBww7pibGljbyBubyBCcmFzaWwgKDIwMDjigJMyMDE0KSIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEzcHgiLCBjb2xvciA9ICIjNjY2NjY2IikNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgPSBsaXN0KA0KICAgICAgY29sb3IgPSAiIzIyMjIyMiIsDQogICAgICBmb250V2VpZ2h0ID0gIm5vcm1hbCIsDQogICAgICBmb250U2l6ZSA9ICIxMnB4Ig0KICAgICkNCiAgKSAlPiUNCiAgaGNfcmFuZ2VTZWxlY3RvcigNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBpbnB1dEVuYWJsZWQgPSBGQUxTRSwNCiAgICBzZWxlY3RlZCA9IDQsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAieWVhciIsIGNvdW50ID0gMSwgdGV4dCA9ICIxQSIpLA0KICAgICAgbGlzdCh0eXBlID0gInllYXIiLCBjb3VudCA9IDIsIHRleHQgPSAiMkEiKSwNCiAgICAgIGxpc3QodHlwZSA9ICJ5ZWFyIiwgY291bnQgPSAzLCB0ZXh0ID0gIjNBIiksDQogICAgICBsaXN0KHR5cGUgPSAiYWxsIiwgdGV4dCA9ICJUdWRvIikNCiAgICApDQogICkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gVFJVRSkgJT4lDQogIGhjX3Njcm9sbGJhcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9ICIjNzc3Nzc3IikNCiAgKQ0KDQpncmFmaWNvDQpgYGANCg0KQSBORlNQIHBlcm1hbmVjZXUgbmVnYXRpdmEgZHVyYW50ZSBncmFuZGUgcGFydGUgZG8gcGVyw61vZG8gYW5hbGlzYWRvLCBpbmRpY2FuZG8gYSBwcmVzZW7Dp2EgZGUgc3VwZXLDoXZpdHMgcHJpbcOhcmlvcy4gQW8gbG9uZ28gZG8gY2ljbG8sIHBvcsOpbSwgb2JzZXJ2YS1zZSB1bWEgcmVkdcOnw6NvIGRlc3NlcyBzdXBlcsOhdml0cy4gSXNzbyBzaWduaWZpY2EgcXVlLCBlbWJvcmEgbyBzZXRvciBww7pibGljbyBhaW5kYSBhcHJlc2VudGFzc2UgcmVzdWx0YWRvIHBvc2l0aXZvLCBzdWEgY2FwYWNpZGFkZSBkZSBwb3VwYW7Dp2EgZmlzY2FsIHZpbmhhIGRpbWludWluZG8uDQpBIGTDrXZpZGEgYnJ1dGEgZG8gZ292ZXJubyBnZXJhbCBhcHJlc2VudG91IG9zY2lsYcOnw7VlcyBhbyBsb25nbyBkbyBwZXLDrW9kbyBwb3N0ZXJpb3Igw6AgY3Jpc2UgZGUgMjAwOCwgYWx0ZXJuYW5kbyBtb21lbnRvcyBkZSByZWR1w6fDo28gZSBhdW1lbnRvLiBObyBlbnRhbnRvLCBhIHBhcnRpciBkZSBtYXLDp28gZGUgMjAxNCAtIG1hcmNvIHF1ZSBzaW5hbGl6YSBvIGVuY2VycmFtZW50byBvZmljaWFsIGRvIGNpY2xvIGRlIGV4cGFuc8OjbyAtLCBhIHRyYWpldMOzcmlhIGRhIGTDrXZpZGEgcGFzc2EgYSBhcHJlc2VudGFyIGNyZXNjaW1lbnRvIGNvbnTDrW51by4gTmVzc2UgbW9tZW50bywgYSBkw612aWRhIGJydXRhIGNvcnJlc3BvbmRpYSBhIGFwcm94aW1hZGFtZW50ZSA1MSw3OSUsIGFsY2Fuw6dhbmRvIGNlcmNhIGRlIDU2LDI4JSBlbSBkZXplbWJybyBkZSAyMDE0Lg0KTyBjb21wb3J0YW1lbnRvIGRhIE5GU1AgYWNvbXBhbmhhIGVzc2UgbW92aW1lbnRvLiBFbSBhYnJpbCBkZSAyMDE0LCBvIGluZGljYWRvciBhaW5kYSBzZSBlbmNvbnRyYXZhIGVtIGFwcm94aW1hZGFtZW50ZSAtMSw2OCUgZG8gUElCLCBpbmRpY2FuZG8gc3VwZXLDoXZpdCBwcmltw6FyaW8uIE5vIGVudGFudG8sIGFvIGxvbmdvIGRvcyBtZXNlcyBzZWd1aW50ZXMsIGEgbmVjZXNzaWRhZGUgZGUgZmluYW5jaWFtZW50byBwYXNzYSBhIGF1bWVudGFyIGNvbnRpbnVhbWVudGUsIGF0w6kgYXRpbmdpciAwLDU2JSBkbyBQSUIgZW0gZGV6ZW1icm8gZGUgMjAxNCAtIHByaW1laXJvIHZhbG9yIHBvc2l0aXZvIG9ic2VydmFkbyBlbSB0b2RvIG8gcGVyw61vZG8gYW5hbGlzYWRvLg0KRXNzZXMgbW92aW1lbnRvcyByZWZvcsOnYW0gYSBwZXJjZXDDp8OjbyBkZSBlc2dvdGFtZW50byBkbyBjaWNsbyBlY29uw7RtaWNvIGJyYXNpbGVpcm8uIE8gY3Jlc2NpbWVudG8gc3VzdGVudGFkbyBhbyBsb25nbyBkb3MgYW5vcyBhbnRlcmlvcmVzIHBhc3NvdSBhIGVuY29udHJhciBsaW1pdGVzIGVtIHVtIGNvbnRleHRvIG1hcmNhZG8gcGVsYSBkZXNhY2VsZXJhw6fDo28gZG8gaW52ZXN0aW1lbnRvIHByb2R1dGl2bywgcGVsYSBsaW1pdGHDp8OjbyBkb3MgZ2FuaG9zIGRlIHByb2R1dGl2aWRhZGUgZSBwZWxhIGRldGVyaW9yYcOnw6NvIGdyYWR1YWwgZGFzIGNvbnRhcyBww7pibGljYXMuIEFzc2ltLCBvcyBpbmRpY2Fkb3JlcyBmaXNjYWlzIHJlZm9yw6dhbSBhIGlkZWlhIGRlIHF1ZSBvIG1vZGVsbyBkZSBjcmVzY2ltZW50byBkbyBwZXLDrW9kbyBwb3NzdcOtYSBmcmFnaWxpZGFkZXMgZXN0cnV0dXJhaXMgaW1wb3J0YW50ZXMsIHN1c3RlbnRhbmRvLXNlIHByaW5jaXBhbG1lbnRlIHBlbGEgZXhwYW5zw6NvIGRvIGNvbnN1bW8gZSBkYSBkZW1hbmRhIGludGVybmEsIHNlbSBhdmFuw6dvcyBzdWZpY2llbnRlcyBlbSBwcm9kdXRpdmlkYWRlIGUgaW52ZXN0aW1lbnRvIGNhcGF6ZXMgZGUgZ2FyYW50aXIgc3VhIHN1c3RlbnRhw6fDo28gbm8gbG9uZ28gcHJhem8uDQoNCiMgMi4gQSBHcmFuZGUgUmVjZXNzw6NvICgyMDE04oCTMjAxNikNCg0KIyMgMi4xIENvbnRleHRvIGUgZGF0YcOnw6NvIG9maWNpYWwgZGEgcmVjZXNzw6NvDQoNCkNvbmZvcm1lIGrDoSBhcHJlc2VudGFkbyBuYSBpbnRyb2R1w6fDo28sIGEgcmVjZXNzw6NvIGJyYXNpbGVpcmEgcmVjZW50ZSBmb2kgZGF0YWRhIHBlbG8gQ09EQUNFIGVudHJlIG8gc2VndW5kbyB0cmltZXN0cmUgZGUgMjAxNCAocGljbykgZSBvIHF1YXJ0byB0cmltZXN0cmUgZGUgMjAxNiAodmFsZSksIHRvdGFsaXphbmRvIG9uemUgdHJpbWVzdHJlcyBjb25zZWN1dGl2b3MgZGUgY29udHJhw6fDo28gZGEgYXRpdmlkYWRlLiBFbSBkYXRhw6fDo28gbWVuc2FsLCBkaXZ1bGdhZGEgcG9zdGVyaW9ybWVudGUgcGVsbyBDb21pdMOqLCBvIHBpY28gb2NvcnJldSBlbSBtYXLDp28gZGUgMjAxNCBlIG8gdmFsZSBlbSBkZXplbWJybyBkZSAyMDE2LiBBIHF1ZWRhIGFjdW11bGFkYSBkbyBQSUIgbm8gcGVyw61vZG8sIG1lZGlkYSBwZWxhIHPDqXJpZSBkZXNzYXpvbmFsaXphZGEsIGZvaSBkYSBvcmRlbSBkZSA3IGEgOCUsIG1hZ25pdHVkZSBxdWUgc2UgYXByb3hpbWEgZGUgMTElIHF1YW5kbyBhdmFsaWFkYSBlbSB0ZXJtb3MgcGVyIGNhcGl0YS4NCg0KRW0gdGVybW9zIGRlIGNvbXBhcmHDp8OjbyBoaXN0w7NyaWNhLCB0cmF0YS1zZSBkZSB1bWEgZGFzIHJlY2Vzc8O1ZXMgbWFpcyBzZXZlcmFzIGrDoSByZWdpc3RyYWRhcyBubyBCcmFzaWwuIEZvaSBhIG1haXMgbG9uZ2EgZGVzZGUgbyBpbsOtY2lvIGRhIGRhdGHDp8OjbyB0cmltZXN0cmFsIGRvIENPREFDRSBlbSAxOTgwLCB1bWEgZGFzIG1haXMgcHJvZnVuZGFzIGRvcyDDumx0aW1vcyAxNTAgYW5vcyBkZSBoaXN0w7NyaWEgZWNvbsO0bWljYSBkbyBwYcOtcywgZSBmb2kgc2VndWlkYSBwZWxhIHJlY3VwZXJhw6fDo28gbWFpcyBsZW50YSBqw6EgZG9jdW1lbnRhZGEg4oCUIG8gbsOtdmVsIHByw6ktY3Jpc2UgZG8gUElCIHBlciBjYXBpdGEgc8OzIHNlcmlhIHJlY3VwZXJhZG8gYW5vcyBkZXBvaXMuDQoNCk5vIEdyw6FmaWNvIDEwLCDDqSBwb3Nzw612ZWwgdmlzdWFsaXphciBhIGludGVyYcOnw6NvIGVudHJlIG8gUElCLCBhIFNlbGljIGUgbyBJUENBIGFvIGxvbmdvIGRvIGNpY2xvIHJlY2Vzc2l2bzogYSDDoXJlYSBzb21icmVhZGEgZGVsaW1pdGEgbyBwZXLDrW9kbyBkYXRhZG8gcGVsbyBDT0RBQ0UgKDJULzIwMTQgYSA0VC8yMDE2KSwgZHVyYW50ZSBvIHF1YWwgbyBQSUIgcmVnaXN0cm91IHZhcmlhw6fDtWVzIG5lZ2F0aXZhcyBzdWNlc3NpdmFzIGVucXVhbnRvIGEgaW5mbGHDp8OjbyBhdGluZ2lhIDEwLDY3JSBlbSAyMDE1IGUgYSBTZWxpYyBlcmEgZWxldmFkYSBhdMOpIDE0LDI1JSBhbyBhbm8uDQoNCioqR3LDoWZpY28gMTAqKg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHJiY2IpDQpsaWJyYXJ5KEdldEJDQkRhdGEpDQoNCiMgUGFsZXRhIGRhIExpZ2ENCkFNQVJFTE8gICAgIDwtICIjZmViNzEyIg0KQVpVTF9FU0NVUk8gPC0gIiMwMjAyM0MiDQpBWlVMX01FRElPICA8LSAiIzAwMmM1ZSINCkNJTlpBICAgICAgIDwtICIjYTZhNmE2Ig0KVEVYVE8gICAgICAgPC0gIiMzYTNhM2EiDQpBWlVMX0NMQVJPICA8LSAiIzQ2YjFlMSINCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgMSkgUElCIFRSSU1FU1RSQUwNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCmJydXRvIDwtIHJlYWRfZXhjZWwoZmlsZS5wYXRoKGRhZG9zX2RpciwgInRhYmVsYTU5MzItMy54bHN4IiksIHNoZWV0ID0gIlRhYmVsYSIsIGNvbF9uYW1lcyA9IEZBTFNFKQ0KDQp0cmltZXN0cmVzIDwtIGFzLmNoYXJhY3Rlcih1bmxpc3QoYnJ1dG9bNCwgLTFdKSkNCnZhbG9yZXMgICAgPC0gYXMubnVtZXJpYyh1bmxpc3QoYnJ1dG9bNiwgLTFdKSkNCg0KcGFyc2VfdHJpbWVzdHJlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgcSA8LSBhcy5pbnRlZ2VyKHN1YnN0cih4LCAxLCAxKSkNCiAgeSA8LSBhcy5pbnRlZ2VyKHN1YnN0cih4LCBuY2hhcih4KSAtIDMsIG5jaGFyKHgpKSkNCiAgYXMuRGF0ZShzcHJpbnRmKCIlZC0lMDJkLTAxIiwgeSwgKHEgLSAxKSAqIDMgKyAxKSkNCn0NCg0Kcm90dWxvX2N1cnRvIDwtIGZ1bmN0aW9uKHgpIHsNCiAgcSA8LSBzdWJzdHIoeCwgMSwgMSkNCiAgeSA8LSBzdWJzdHIoeCwgbmNoYXIoeCkgLSAzLCBuY2hhcih4KSkNCiAgc3ByaW50ZigiVCVzLyVzIiwgcSwgeSkNCn0NCg0KcGliIDwtIHRpYmJsZSgNCiAgdHJpbWVzdHJlID0gdHJpbWVzdHJlcywNCiAgcm90dWxvICAgID0gc2FwcGx5KHRyaW1lc3RyZXMsIHJvdHVsb19jdXJ0byksDQogIGRhdGEgICAgICA9IHNhcHBseSh0cmltZXN0cmVzLCBwYXJzZV90cmltZXN0cmUpICU+JSBhcy5EYXRlKG9yaWdpbiA9ICIxOTcwLTAxLTAxIiksDQogIHBpYiAgICAgICA9IHZhbG9yZXMNCikgJT4lDQogIGZpbHRlcihkYXRhID49IGFzLkRhdGUoIjIwMTAtMDEtMDEiKSwNCiAgICAgICAgIGRhdGEgPD0gYXMuRGF0ZSgiMjAxNy0xMi0zMSIpKSAlPiUNCiAgbXV0YXRlKA0KICAgIGVtX3JlY2Vzc2FvID0gZGF0YSA+PSBhcy5EYXRlKCIyMDE0LTA0LTAxIikgJiBkYXRhIDw9IGFzLkRhdGUoIjIwMTYtMTAtMDEiKSwNCiAgICBjb3JfcGliICAgICA9IGlmX2Vsc2UoZW1fcmVjZXNzYW8sIEFaVUxfRVNDVVJPLCBBWlVMX0NMQVJPKQ0KICApDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIDIpIElQQ0EgMTJNIE1FTlNBTA0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KaXBjYSA8LSBnZXRfc2VyaWVzKA0KICAxMzUyMiwNCiAgc3RhcnRfZGF0ZSA9ICIyMDEwLTAxLTAxIiwNCiAgZW5kX2RhdGUgICA9ICIyMDE3LTEyLTMxIg0KKSAlPiUNCiAgcmVuYW1lKGlwY2EgPSBgMTM1MjJgKSAlPiUNCiAgbXV0YXRlKA0KICAgIGRhdGUgPSBhcy5EYXRlKGRhdGUpLA0KICAgIHRyaW1lc3RyZV9kYXRhID0gZmxvb3JfZGF0ZShkYXRlLCAicXVhcnRlciIpDQogICkNCg0KaXBjYV90cmkgPC0gaXBjYSAlPiUNCiAgYXJyYW5nZShkYXRlKSAlPiUNCiAgZ3JvdXBfYnkodHJpbWVzdHJlX2RhdGEpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgaXBjYSA9IGxhc3QobmEub21pdChpcGNhKSksDQogICAgLmdyb3VwcyA9ICJkcm9wIg0KICApDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIDMpIFNFTElDIE1FTlNBTA0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KaW5pY2lvIDwtIGFzLkRhdGUoIjIwMTAtMDEtMDEiKQ0KZmltICAgIDwtIGFzLkRhdGUoIjIwMTctMTItMzEiKQ0KDQpzZXJpZXNfaWRzIDwtIGMoDQogIFNlbGljID0gNDMyDQopDQoNCmRhZG9zX2JjYiA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IHNlcmllc19pZHMsDQogIGZpcnN0LmRhdGUgPSBpbmljaW8sDQogIGxhc3QuZGF0ZSAgPSBmaW0sDQogIGZvcm1hdC5kYXRhID0gIndpZGUiDQopDQoNCnNlbGljIDwtIGRhZG9zX2JjYiAlPiUNCiAgcmVuYW1lKA0KICAgIGRhdGUgPSByZWYuZGF0ZSwNCiAgICBzZWxpYyA9IFNlbGljDQogICkgJT4lDQogIG11dGF0ZSgNCiAgICBkYXRlID0gYXMuRGF0ZShkYXRlKSwNCiAgICB0cmltZXN0cmVfZGF0YSA9IGZsb29yX2RhdGUoZGF0ZSwgInF1YXJ0ZXIiKQ0KICApICU+JQ0KICBhcnJhbmdlKGRhdGUpDQoNCnNlbGljX3RyaSA8LSBzZWxpYyAlPiUNCiAgZ3JvdXBfYnkodHJpbWVzdHJlX2RhdGEpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgc2VsaWMgPSBsYXN0KG5hLm9taXQoc2VsaWMpKSwNCiAgICAuZ3JvdXBzID0gImRyb3AiDQogICkNCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgNCkgSlVOVEFSIFBJQiwgSVBDQSBFIFNFTElDDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpkZiA8LSBwaWIgJT4lDQogIGxlZnRfam9pbihpcGNhX3RyaSwgYnkgPSBjKCJkYXRhIiA9ICJ0cmltZXN0cmVfZGF0YSIpKSAlPiUNCiAgbGVmdF9qb2luKHNlbGljX3RyaSwgYnkgPSBjKCJkYXRhIiA9ICJ0cmltZXN0cmVfZGF0YSIpKQ0KDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyA1KSBHUsOBRklDTw0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KaGlnaGNoYXJ0KCkgJT4lDQogIA0KICBoY19jaGFydCgNCiAgICB6b29tVHlwZSA9ICJ4IiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJBcmlhbCwgc2Fucy1zZXJpZiIpDQogICkgJT4lDQogIA0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIlBJQiwgU2VsaWMgZSBJUENBIG5vIGNpY2xvIHJlY2Vzc2l2byBicmFzaWxlaXJvIiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBBWlVMX0VTQ1VSTywgZm9udFdlaWdodCA9ICJib2xkIikNCiAgKSAlPiUNCiAgDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiUElCIGVtIHZhcmlhw6fDo28gcmVhbCB0cmltZXN0cmFsIGNvbnRyYSBvIG1lc21vIHRyaW1lc3RyZSBhbnRlcmlvcjsgSVBDQSBhY3VtdWxhZG8gZW0gMTIgbWVzZXM7IFNlbGljIG1ldGEgYW8gZmltIGRvIHRyaW1lc3RyZSIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIA0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gZGYkcm90dWxvLA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gTlVMTCksDQogICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykpLA0KICAgIHBsb3RCYW5kcyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICBmcm9tICA9IHdoaWNoKGRmJHJvdHVsbyA9PSAiVDIvMjAxNCIpIC0gMS41LA0KICAgICAgICB0byAgICA9IHdoaWNoKGRmJHJvdHVsbyA9PSAiVDQvMjAxNiIpIC0gMC41LA0KICAgICAgICBjb2xvciA9ICJyZ2JhKDE2NiwgMTY2LCAxNjYsIDAuMTUpIg0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlZhcmlhw6fDo28gZSB0YXhhICglKSIpLA0KICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0lIiwgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKSwNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCh2YWx1ZSA9IDAsIGNvbG9yID0gVEVYVE8sIHdpZHRoID0gMSwgekluZGV4ID0gNCkNCiAgICApLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGRmLA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICBoY2Flcyh4ID0gcm90dWxvLCB5ID0gcGliLCBjb2xvciA9IGNvcl9waWIpLA0KICAgIG5hbWUgPSAiUElCIiwNCiAgICBjb2xvckJ5UG9pbnQgPSBUUlVFLA0KICAgIGJvcmRlcldpZHRoID0gMCwNCiAgICB6SW5kZXggPSAyDQogICkgJT4lDQogIA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBkZiwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSByb3R1bG8sIHkgPSBpcGNhKSwNCiAgICBuYW1lID0gIklQQ0EgMTJtIiwNCiAgICBjb2xvciA9IEFNQVJFTE8sDQogICAgbGluZVdpZHRoID0gMi41LA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwNCiAgICB6SW5kZXggPSA1DQogICkgJT4lDQogIA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBkZiwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSByb3R1bG8sIHkgPSBzZWxpYyksDQogICAgbmFtZSA9ICJTZWxpYyIsDQogICAgY29sb3IgPSBBWlVMX0VTQ1VSTywNCiAgICBsaW5lV2lkdGggPSAyLjUsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHpJbmRleCA9IDYNCiAgKSAlPiUNCiAgDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAid2hpdGUiLA0KICAgIGJvcmRlckNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pLA0KICAgIHZhbHVlRGVjaW1hbHMgPSAyLA0KICAgIHZhbHVlU3VmZml4ID0gIiUiDQogICkgJT4lDQogIA0KICBoY19wbG90T3B0aW9ucygNCiAgICBjb2x1bW4gPSBsaXN0KA0KICAgICAgYm9yZGVyV2lkdGggPSAwLA0KICAgICAgZ3JvdXBQYWRkaW5nID0gMC4wNQ0KICAgICksDQogICAgc2VyaWVzID0gbGlzdCgNCiAgICAgIGNvbm5lY3ROdWxscyA9IEZBTFNFDQogICAgKQ0KICApICU+JQ0KICANCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iDQogICkgJT4lDQogIA0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IElCR0UsIEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsIGUgQ09EQUNFL0ZHViBJQlJFLiINCiAgKQ0KYGBgDQoNCiMjIDIuMiBPcyBmYXRvcmVzIHF1ZSBsZXZhcmFtIMOgIHJlY2Vzc8Ojbw0KDQpBIHJlY2Vzc8OjbyBkZSAyMDE04oCTMjAxNiBuw6NvIGZvaSByZXN1bHRhZG8gZGUgdW0gw7puaWNvIGNob3F1ZSwgbWFzIGRhIGNvbnZlcmfDqm5jaWEgZGUgdHLDqnMgdmV0b3JlcyBxdWUgc2UgcmVmb3LDp2FyYW0gbXV0dWFtZW50ZTogbyBlc2dvdGFtZW50byBkbyBjaWNsbyBleHBhbnNpdm8gYW50ZXJpb3IsIHVtIGNob3F1ZSBleHRlcm5vIGRlc2Zhdm9yw6F2ZWwgZSB1bWEgY3Jpc2UgZGUgY3JlZGliaWxpZGFkZSBkYSBwb2zDrXRpY2EgZWNvbsO0bWljYS4NCg0KTyBwcmltZWlybyB2ZXRvciBmb2kgYSBoZXJhbsOnYSBkbyBjaWNsbyAyMDA44oCTMjAxNCwgZGlzY3V0aWRhIG5hIHNlw6fDo28gYW50ZXJpb3IuIE8gbW9kZWxvIGRlIGNyZXNjaW1lbnRvIGJhc2VhZG8gZW0gY29uc3VtbywgY3LDqWRpdG8gc3Vic2lkaWFkbywgZGVzb25lcmHDp8O1ZXMgc2V0b3JpYWlzIGUgZXhwYW5zw6NvIGRvIGdhc3RvIHDDumJsaWNvIOKAlCBjb25zb2xpZGFkbyBhIHBhcnRpciBkZSAyMDEx4oCTMjAxMiBzb2IgbyByw7N0dWxvIGRlIE5vdmEgTWF0cml6IEVjb27DtG1pY2Eg4oCUIGRlaXhvdSBvIHBhw61zIGNvbSBkw6lmaWNpdHMgcHJpbcOhcmlvcyBjcmVzY2VudGVzLCBpbmZsYcOnw6NvIHJlcHJlc2FkYSBwb3IgcHJlw6dvcyBhZG1pbmlzdHJhZG9zIGUgbWFyZ2VucyBkZSBsdWNybyBkZXByaW1pZGFzIG5vIHNldG9yIHByaXZhZG8uIFF1YW5kbyBvIGNpY2xvIGNvbWXDp291IGEgZGVzYWNlbGVyYXIsIGVzc2VzIGRlc2VxdWlsw61icmlvcyBlc3RyZWl0YXJhbSBvIGVzcGHDp28gZGUgbWFub2JyYSBkYSBwb2zDrXRpY2EgZWNvbsO0bWljYS4NCg0KTyBzZWd1bmRvIHZldG9yIGZvaSBleHRlcm5vLiBBIHBhcnRpciBkZSAyMDExLCBlIGNvbSBtYWlzIGludGVuc2lkYWRlIGVtIDIwMTTigJMyMDE1LCBlbmNlcnJvdS1zZSBvIHN1cGVyY2ljbG8gZGFzIGNvbW1vZGl0aWVzIHF1ZSBoYXZpYSBzdXN0ZW50YWRvIHBhcnRlIGRvIGNyZXNjaW1lbnRvIGRvcyBhbm9zIDIwMDAuIEEgZGVzYWNlbGVyYcOnw6NvIGRhIGVjb25vbWlhIGNoaW5lc2EgZGVycnVib3Ugb3MgcHJlw6dvcyBpbnRlcm5hY2lvbmFpcyBlIGRldGVyaW9yb3Ugb3MgdGVybW9zIGRlIHRyb2NhIGJyYXNpbGVpcm9zLCBjb21wcmltaW5kbyBhIHJlY2VpdGEgZGUgZXhwb3J0YcOnw7VlcyBlIHJlZHV6aW5kbyBvIGludmVzdGltZW50byBubyBzZXRvciBleHRyYXRpdm8uIE8gY2hvcXVlIGV4dGVybm8gbsOjbyBleHBsaWNhIGlzb2xhZGFtZW50ZSBhIHByb2Z1bmRpZGFkZSBkYSByZWNlc3PDo28g4oCUIHBhw61zZXMgbGF0aW5vLWFtZXJpY2Fub3MgaWd1YWxtZW50ZSBleHBvc3RvcyBhbyBjaWNsbyBkZSBjb21tb2RpdGllcywgY29tbyBDaGlsZSBlIFBlcnUsIHNvZnJlcmFtIGRlc2FjZWxlcmHDp8O1ZXMgbXVpdG8gbWFpcyBicmFuZGFzIOKAlCBtYXMgYXR1b3UgY29tbyBhbXBsaWZpY2Fkb3IgZGFzIHZ1bG5lcmFiaWxpZGFkZXMgasOhIHByZXNlbnRlcy4NCg0KTyB0ZXJjZWlybyB2ZXRvciBmb2kgYSBwZXJkYSBkZSBjcmVkaWJpbGlkYWRlIGRhIHBvbMOtdGljYSBlY29uw7RtaWNhIGVtIDIwMTUuIEEgZGVzY29iZXJ0YSBkYXMgcGVkYWxhZGFzIGZpc2NhaXMgbWlub3UgYSBjb25maWFuw6dhIG5vcyBuw7ptZXJvcyBvZmljaWFpczsgbyBhanVzdGUgZmlzY2FsIGFudW5jaWFkbyBwb3IgSm9hcXVpbSBMZXZ5IGVtIHVtYSBlY29ub21pYSBqw6EgZW0gcXVlZGEgY29tYmlub3Utc2UgY29tIG8gcmVhbGluaGFtZW50byBkb3MgcHJlw6dvcyBhZG1pbmlzdHJhZG9zLCBvIHF1ZSBsZXZvdSBvIElQQ0EgYSAxMCw2NyUgZW0gMjAxNSBlIGZvcsOnb3UgYSBTZWxpYyBhIHN1YmlyIGF0w6kgMTQsMjUlLiBBIHBlcmRhIGRvIGdyYXUgZGUgaW52ZXN0aW1lbnRvIHBlbGEgU3RhbmRhcmQgJiBQb29yJ3MgZW0gc2V0ZW1icm8gZGUgMjAxNSwgc2VndWlkYSBwZWxhcyBkZW1haXMgYWfDqm5jaWFzLCBlbmNhcmVjZXUgbyBmaW5hbmNpYW1lbnRvIGUgZWxldm91IG8gcmlzY28tcGHDrXMuIFNvYnJlcG9zdG8gYSB0dWRvIGlzc28sIG8gYXZhbsOnbyBkYSBPcGVyYcOnw6NvIExhdmEgSmF0byBwYXJhbGlzb3UgaW52ZXN0aW1lbnRvcyBubyBzZXRvciBkZSDDs2xlbyBlIGfDoXMgZSBuYSBjb25zdHJ1w6fDo28sIGUgbyBwcm9jZXNzbyBkZSBpbXBlYWNobWVudCBpbmljaWFkbyBlbSBkZXplbWJybyBkZSAyMDE1IHBhcmFsaXNvdSBhIGFnZW5kYSBlY29uw7RtaWNhLg0KDQpBIGNvbWJpbmHDp8OjbyBkZXNzZXMgdHLDqnMgdmV0b3JlcyBwcm9kdXppdSBvIHF1ZSBhIGxpdGVyYXR1cmEgY29zdHVtYSBjaGFtYXIgZGUgYmFsYW5jZSBzaGVldCByZWNlc3Npb246IHVtYSBjb250cmHDp8OjbyBlbSBxdWUgZmFtw61saWFzLCBlbXByZXNhcyBlIHNldG9yIHDDumJsaWNvIHByZWNpc2FtIHJlZHV6aXIgZW5kaXZpZGFtZW50byBzaW11bHRhbmVhbWVudGUsIG8gcXVlIGFqdWRhIGEgZW50ZW5kZXIgdGFudG8gYSBwcm9mdW5kaWRhZGUgcXVhbnRvIGEgbGVudGlkw6NvIGRhIHJlY3VwZXJhw6fDo28gcG9zdGVyaW9yLg0KDQojIyAyLjMgTWVyY2FkbyBkZSB0cmFiYWxobywgaW52ZXN0aW1lbnRvIGUgcHJvZHV0aXZpZGFkZQ0KDQojIyMgMi4zLjEgTyBjb2xhcHNvIGRvIGludmVzdGltZW50bw0KDQpFbWJvcmEgbyBkZXNlbXByZWdvIHNlamEgYSBmYWNlIG1haXMgdmlzw612ZWwgZGUgdW1hIHJlY2Vzc8OjbywgZm9pIG8gaW52ZXN0aW1lbnRvIHF1ZSBsaWRlcm91IGEgcXVlZGEgZGEgYXRpdmlkYWRlIGVudHJlIDIwMTQgZSAyMDE2LCBlbSBzaW50b25pYSBjb20gbyBxdWUgc3VnZXJlIGEgdGVvcmlhIGRvcyBjaWNsb3M6IGEgRm9ybWHDp8OjbyBCcnV0YSBkZSBDYXBpdGFsIEZpeG8gKEZCQ0YpIMOpIHRpcGljYW1lbnRlIG8gY29tcG9uZW50ZSBtYWlzIHZvbMOhdGlsIGRvIFBJQiBlIG8gcHJpbWVpcm8gYSByZWFnaXIgw6AgZGV0ZXJpb3Jhw6fDo28gZGFzIGV4cGVjdGF0aXZhcy4NCg0KTmEgdmFyaWHDp8OjbyBhbnVhbCwgYSBGQkNGIGNvbWXDp291IGEgZGVzYWNlbGVyYXIgYWluZGEgZW0gMjAxNCwgcmVnaXN0cmFuZG8gY29udHJhw6fDo28gZGUgNCw0JSBubyBhbm8uIEEgcXVlZGEgYXByb2Z1bmRvdS1zZSBwYXJhIC0xMyw5JSBlbSAyMDE1IGUgbWFpcyAtMTIsMSUgZW0gMjAxNi4gT2xoYW5kbyBwYXJhIGEgZGluw6JtaWNhIHRyaW1lc3RyYWwsIGNvbmZvcm1lIG1vc3RyYSBvIEdyw6FmaWNvIDExLCBvIGNvbXBvbmVudGUgYWN1bXVsb3Ugb256ZSB0cmltZXN0cmVzIGNvbnNlY3V0aXZvcyBkZSBxdWVkYSwgY29tIHJlY3VvcyBxdWUgY2hlZ2FyYW0gYSAtNywwJSBlbSB1bSDDum5pY28gdHJpbWVzdHJlICgyVC8yMDE1KS4gTm8gYWN1bXVsYWRvIGRvIHBpY28gYW8gdmFsZSwgbyBpbnZlc3RpbWVudG8gcmVjdW91IGNlcmNhIGRlIDI3JSwgZSBhIHRheGEgZGUgaW52ZXN0aW1lbnRvIChGQkNGL1BJQikgY2FpdSBkZSAyMCw5JSBlbSAyMDEzIHBhcmEgMTYsNCUgZW0gMjAxNiDigJQgdW0gZG9zIG7DrXZlaXMgbWFpcyBiYWl4b3MgZGEgc8OpcmllIGhpc3TDs3JpY2EgZG8gaW5kaWNhZG9yLCBxdWUgY29udGludWFyaWEgY2FpbmRvIGF0w6kgMTQsNiUgZW0gMjAxNy4NCg0KQSBsw7NnaWNhIGVjb27DtG1pY2EgcG9yIHRyw6FzIGRlc3NlIGNvbGFwc28gY29uZWN0YS1zZSBkaXJldGFtZW50ZSBhb3MgcHJvYmxlbWFzIGFjdW11bGFkb3Mgbm8gY2ljbG8gYW50ZXJpb3IuIEEgcmVkdcOnw6NvIGRhcyBtYXJnZW5zIGRlIGx1Y3JvIGRhcyBlbXByZXNhcywgbnVtIGNvbnRleHRvIGRlIGVsZXZhw6fDo28gZG8gY3VzdG8gdW5pdMOhcmlvIGRvIHRyYWJhbGhvIGUgY8OibWJpbyBhcHJlY2lhZG8sIGrDoSB2aW5oYSBkZXNlc3RpbXVsYW5kbyBub3ZvcyBwcm9qZXRvcyBkZXNkZSAyMDEy4oCTMjAxMy4gUXVhbmRvIGEgZXNzZXMgZmF0b3JlcyBzZSBzb21hcmFtIGEgYWx0YSBkYSBTZWxpYywgYSBlbGV2YcOnw6NvIGRvIHJpc2NvLXBhw61zLCBhIHBhcmFsaXNhw6fDo28gZG9zIHByb2pldG9zIGRhIFBldHJvYnJhcyBwZWxhIE9wZXJhw6fDo28gTGF2YSBKYXRvIGUgbyBjb25nZWxhbWVudG8gZG9zIGRlc2VtYm9sc29zIGRvIEJOREVTIOKAlCBxdWUgaGF2aWEgc2lkbyBwZcOnYSBjZW50cmFsIGRvIGZpbmFuY2lhbWVudG8gZG8gaW52ZXN0aW1lbnRvIGR1cmFudGUgYSBleHBhbnPDo28g4oCULCBvIGludmVzdGltZW50byBlbnRyb3UgZW0gcXVlZGEgbGl2cmUuIE9zIGluZGljYWRvcmVzIGRlIHV0aWxpemHDp8OjbyBkYSBjYXBhY2lkYWRlIGluc3RhbGFkYSBkYSBpbmTDunN0cmlhLCBhcHJlc2VudGFkb3Mgbm8gR3LDoWZpY28gMTIsIGNhw61yYW0gcGFyYSBtw61uaW1vcyBoaXN0w7NyaWNvcywgc2luYWxpemFuZG8gcXVlIG7Do28gaGF2aWEgcmF6w6NvIGVjb27DtG1pY2EgcGFyYSBhbXBsaWFyIG8gZXN0b3F1ZSBkZSBjYXBpdGFsLg0KDQoqKkdyw6FmaWNvIDExKioNCg0KYGBge3J9DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIFBBQ09URVMgLS0tLS0tLS0tLS0tLS0tLS0tDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHN0cmluZ3IpDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIFBBTEVUQSBEQSBMSUdBIC0tLS0tLS0tLS0tLS0tLS0tLQ0KQU1BUkVMTyAgICAgPC0gIiNmZWI3MTIiDQpBWlVMX0VTQ1VSTyA8LSAiIzAyMDIzQyINCkFaVUxfTUVESU8gIDwtICIjMDAyYzVlIg0KQ0lOWkEgICAgICAgPC0gIiNhNmE2YTYiDQpURVhUTyAgICAgICA8LSAiIzNhM2EzYSINCkFaVUxfQ0xBUk8gIDwtICIjNDZiMWUxIg0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAxKSBMRVIgQSBCQVNFIC0tLS0tLS0tLS0tLS0tLS0tLQ0KZmJjZl9yYXcgPC0gcmVhZF9leGNlbCgNCiAgZmlsZS5wYXRoKGRhZG9zX2RpciwgInhsc3gueGxzeCIpLA0KICBzaGVldCA9ICJUYWJlbGEiLA0KICBjb2xfbmFtZXMgPSBGQUxTRQ0KKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAyKSBFWFRSQUlSIFRSSU1FU1RSRVMgRSBWQUxPUkVTIC0tLS0tLS0tLS0tLS0tLS0tLQ0KdHJpbWVzdHJlcyA8LSBhcy5jaGFyYWN0ZXIodW5saXN0KGZiY2ZfcmF3WzQsIDI6bmNvbChmYmNmX3JhdyldKSkNCnZhbG9yZXMgPC0gYXMubnVtZXJpYyh1bmxpc3QoZmJjZl9yYXdbNiwgMjpuY29sKGZiY2ZfcmF3KV0pKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAzKSBGVU7Dh8OVRVMgUEFSQSBUUkFUQVIgVFJJTUVTVFJFUyAtLS0tLS0tLS0tLS0tLS0tLS0NCnBhcnNlX3RyaW1lc3RyZSA8LSBmdW5jdGlvbih4KSB7DQogIHRyaW0gPC0gYXMuaW50ZWdlcihzdHJfZXh0cmFjdCh4LCAiXlsxLTRdIikpDQogIGFubyA8LSBhcy5pbnRlZ2VyKHN0cl9leHRyYWN0KHgsICJcXGR7NH0kIikpDQogIG1lcyA8LSAodHJpbSAtIDEpICogMyArIDENCiAgDQogIGFzLkRhdGUocGFzdGUwKGFubywgIi0iLCBzcHJpbnRmKCIlMDJkIiwgbWVzKSwgIi0wMSIpKQ0KfQ0KDQpyb3R1bG9fdHJpbWVzdHJlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgdHJpbSA8LSBzdHJfZXh0cmFjdCh4LCAiXlsxLTRdIikNCiAgYW5vIDwtIHN0cl9leHRyYWN0KHgsICJcXGR7NH0kIikNCiAgDQogIHBhc3RlMCh0cmltLCAiVC8iLCBhbm8pDQp9DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDQpIE1PTlRBUiBCQVNFIEZJTkFMIC0tLS0tLS0tLS0tLS0tLS0tLQ0KZmJjZiA8LSB0aWJibGUoDQogIHRyaW1lc3RyZSA9IHRyaW1lc3RyZXMsDQogIGRhdGEgPSBwYXJzZV90cmltZXN0cmUodHJpbWVzdHJlcyksDQogIHJvdHVsbyA9IHJvdHVsb190cmltZXN0cmUodHJpbWVzdHJlcyksDQogIHZhcmlhY2FvID0gdmFsb3Jlcw0KKSAlPiUNCiAgZmlsdGVyKA0KICAgIGRhdGEgPj0gYXMuRGF0ZSgiMjAxNC0wMS0wMSIpLA0KICAgIGRhdGEgPD0gYXMuRGF0ZSgiMjAxNy0wMS0wMSIpDQogICkgJT4lDQogIG11dGF0ZSgNCiAgICBjb3IgPSBpZl9lbHNlKA0KICAgICAgdmFyaWFjYW8gPCAwLA0KICAgICAgQVpVTF9FU0NVUk8sDQogICAgICBBWlVMX0NMQVJPDQogICAgKQ0KICApDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDUpIEdSw4FGSUNPIC0tLS0tLS0tLS0tLS0tLS0tLQ0KaGNoYXJ0KA0KICBmYmNmLA0KICB0eXBlID0gImNvbHVtbiIsDQogIGhjYWVzKHggPSByb3R1bG8sIHkgPSB2YXJpYWNhbywgY29sb3IgPSBjb3IpLA0KICBuYW1lID0gIkZCQ0YiDQopICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIkZvcm1hw6fDo28gQnJ1dGEgZGUgQ2FwaXRhbCBGaXhvIiwNCiAgICBzdHlsZSA9IGxpc3QoDQogICAgICBjb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgICAgZm9udFdlaWdodCA9ICJib2xkIg0KICAgICkNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJWYXJpYcOnw6NvIGNvbnRyYSBvIHRyaW1lc3RyZSBpbWVkaWF0YW1lbnRlIGFudGVyaW9yLCAyVC8yMDE0IGEgMVQvMjAxNyIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIGNhdGVnb3JpZXMgPSBmYmNmJHJvdHVsbywNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJWYXJpYcOnw6NvIHRyaW1lc3RyYWwgKCUpIiksDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWV9JSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgICApLA0KICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB2YWx1ZSA9IDAsDQogICAgICAgIGNvbG9yID0gVEVYVE8sDQogICAgICAgIHdpZHRoID0gMSwNCiAgICAgICAgekluZGV4ID0gNA0KICAgICAgKQ0KICAgICksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjZWVlZWVlIg0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIGhlYWRlckZvcm1hdCA9ICI8Yj57cG9pbnQua2V5fTwvYj48YnIvPiIsDQogICAgcG9pbnRGb3JtYXQgPSAiVmFyaWHDp8OjbzogPGI+e3BvaW50Lnk6LjFmfSU8L2I+IiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAid2hpdGUiLA0KICAgIGJvcmRlckNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGNvbHVtbiA9IGxpc3QoDQogICAgICBjb2xvckJ5UG9pbnQgPSBUUlVFLA0KICAgICAgYm9yZGVyV2lkdGggPSAwLA0KICAgICAgZ3JvdXBQYWRkaW5nID0gMC4wOCwNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMDQNCiAgICApDQogICkgJT4lDQogIGhjX2xlZ2VuZChlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IElCR0UsIENvbnRhcyBOYWNpb25haXMgVHJpbWVzdHJhaXMsIFRhYmVsYSA1OTMyIFNJRFJBLiINCiAgKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgc3R5bGUgPSBsaXN0KGZvbnRGYW1pbHkgPSAiQXJpYWwsIHNhbnMtc2VyaWYiKQ0KICApDQpgYGANCg0KKipHcsOhZmljbyAxMioqDQoNCmBgYHtyfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSBQQUNPVEVTIC0tLS0tLS0tLS0tLS0tLS0tLQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSBQQUxFVEEgREEgTElHQSAtLS0tLS0tLS0tLS0tLS0tLS0NCkFNQVJFTE8gICAgIDwtICIjZmViNzEyIg0KQVpVTF9FU0NVUk8gPC0gIiMwMjAyM0MiDQpBWlVMX01FRElPICA8LSAiIzAwMmM1ZSINCkNJTlpBICAgICAgIDwtICIjYTZhNmE2Ig0KVEVYVE8gICAgICAgPC0gIiMzYTNhM2EiDQpBWlVMX0NMQVJPICA8LSAiIzQ2YjFlMSINCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMSkgTEVSIEEgQkFTRSAtLS0tLS0tLS0tLS0tLS0tLS0NCm51Y2lfcmF3IDwtIHJlYWRfZXhjZWwoDQogIGZpbGUucGF0aChkYWRvc19kaXIsICJjaWNsby1kZS1jcmVzY2ltZW50byAoMikueGxzeCIpLA0KICBzaGVldCA9ICJiYXNlX3ZhcmlhdmVpcyINCikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMikgVFJBVEFSIEEgQkFTRSAtLS0tLS0tLS0tLS0tLS0tLS0NCm51Y2kgPC0gbnVjaV9yYXcgJT4lDQogIG11dGF0ZSgNCiAgICBkYXRhID0gYXMuRGF0ZShkYXRhKSwNCiAgICBOVUNJID0gYXMubnVtZXJpYyhOVUNJKQ0KICApICU+JQ0KICBmaWx0ZXIoDQogICAgZGF0YSA+PSBhcy5EYXRlKCIyMDE0LTEwLTAxIiksDQogICAgZGF0YSA8PSBhcy5EYXRlKCIyMDE3LTEyLTAxIikNCiAgKSAlPiUNCiAgYXJyYW5nZShkYXRhKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAzKSBHUsOBRklDTyAtLS0tLS0tLS0tLS0tLS0tLS0NCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIA0KICBoY19hZGRfc2VyaWVzKA0KICAgIG51Y2ksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBoY2Flcyh4ID0gZGF0YSwgeSA9IE5VQ0kpLA0KICAgIG5hbWUgPSAiTlVDSSIsDQogICAgY29sb3IgPSBBWlVMX0VTQ1VSTywNCiAgICBsaW5lV2lkdGggPSAyLjQsDQogICAgekluZGV4ID0gNQ0KICApICU+JQ0KICANCiAgaGNfdGl0bGUoDQogICAgdGV4dCA9ICJOw612ZWwgZGUgVXRpbGl6YcOnw6NvIGRhIENhcGFjaWRhZGUgSW5zdGFsYWRhIiwNCiAgICBzdHlsZSA9IGxpc3QoDQogICAgICBjb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgICAgZm9udFdlaWdodCA9ICJib2xkIg0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiSW5kw7pzdHJpYSBkZSB0cmFuc2Zvcm1hw6fDo28sIG91dC8yMDE0IGEgZGV6LzIwMTciLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICANCiAgaGNfeEF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSBOVUxMKSwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKSkNCiAgKSAlPiUNCiAgDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIk5VQ0kgKCUpIiksDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWV9JSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgICApLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICB2YWx1ZURlY2ltYWxzID0gMSwNCiAgICB2YWx1ZVN1ZmZpeCA9ICIlIiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAid2hpdGUiLA0KICAgIGJvcmRlckNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIA0KICBoY19sZWdlbmQoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgDQogIGhjX3JhbmdlU2VsZWN0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfc2Nyb2xsYmFyKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICANCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBGR1YvSUJSRSwgU29uZGFnZW0gZGEgSW5kw7pzdHJpYS4iDQogICkgJT4lDQogIA0KICBoY19jaGFydCgNCiAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJBcmlhbCwgc2Fucy1zZXJpZiIpDQogICkNCmBgYA0KDQojIyMgMi4zLjIgTyBhanVzdGUgZG8gbWVyY2FkbyBkZSB0cmFiYWxobw0KDQpPIG1lcmNhZG8gZGUgdHJhYmFsaG8gY29uZmlybW91IG5hIHJlY2Vzc8OjbyB1bSBwYWRyw6NvIGNsw6Fzc2ljbyBkbyBjaWNsbyBlY29uw7RtaWNvOiBmb2kgYSDDumx0aW1hIHZhcmnDoXZlbCBhIGVudHJhciBlIGEgw7psdGltYSBhIHNhaXIgZGEgY3Jpc2UuIE5vIHByaW1laXJvIHRyaW1lc3RyZSBkZSAyMDE0LCBhIHRheGEgZGUgZGVzb2N1cGHDp8OjbyBtZWRpZGEgcGVsYSBQTkFEIENvbnTDrW51YSBlc3RhdmEgZW0gNywyJSwgcHLDs3hpbWEgZG8gbcOtbmltbyBoaXN0w7NyaWNvIGRhIHPDqXJpZS4gQSBwYXJ0aXIgZGUgbWVhZG9zIGRlIDIwMTQsIGNvbSBhIHF1ZWRhIGRvIGludmVzdGltZW50byBlIGEgZGVzYWNlbGVyYcOnw6NvIGRhIGluZMO6c3RyaWEsIG8gZGVzZW1wcmVnbyBjb21lw6dvdSBhIHN1YmlyLCBtYXMgaW5pY2lhbG1lbnRlIGRlIGZvcm1hIGxlbnRhLg0KDQpFc3NhIGxlbnRpZMOjbyBpbmljaWFsIHJlZmxldGUgbyBxdWUgYSBsaXRlcmF0dXJhIGNoYW1hIGRlIGxhYm9yIGhvYXJkaW5nOiBhcyBlbXByZXNhcyBzZWd1cmFyYW0gc3VhcyBlcXVpcGVzIG5hIGV4cGVjdGF0aXZhIGRlIHVtYSByZWN1cGVyYcOnw6NvIHLDoXBpZGEsIGFic29ydmVuZG8gbm8gY3VydG8gcHJhem8gYSBxdWVkYSBkYSBkZW1hbmRhIGNvbW8gcmVkdcOnw6NvIGRlIHByb2R1dGl2aWRhZGUgZSBob3JhcyB0cmFiYWxoYWRhcy4gUXVhbmRvIGZpY291IGNsYXJvIHF1ZSBhIHJlY2Vzc8OjbyBzZXJpYSBsb25nYSwgb3MgYWp1c3RlcyB2aWVyYW0gZGUgZm9ybWEgYWJydXB0YS4gQ29tbyBtb3N0cmEgbyBHcsOhZmljbyAxMywgYSB0YXhhIGRlIGRlc29jdXBhw6fDo28gc2FsdG91IHBhcmEgOSwxJSBubyDDumx0aW1vIHRyaW1lc3RyZSBkZSAyMDE1LCBhdGluZ2l1IDEyLDElIG5vIHF1YXJ0byB0cmltZXN0cmUgZGUgMjAxNiBlIGFsY2Fuw6dvdSBvIHBpY28gZGUgMTMsOSUgbm8gcHJpbWVpcm8gdHJpbWVzdHJlIGRlIDIwMTcg4oCUIGrDoSBmb3JhIGRvIHBlcsOtb2RvIHJlY2Vzc2l2byBvZmljaWFsLCBjb25maXJtYW5kbyBqdXN0YW1lbnRlIGEgZGVmYXNhZ2VtIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8gZW0gcmVsYcOnw6NvIGFvIGNpY2xvIGRvIFBJQi4NCg0KRG9pcyBhc3BlY3RvcyBkbyBhanVzdGUgbWVyZWNlbSBkZXN0YXF1ZSwgcG9pcyBhanVkYW0gYSBlbnRlbmRlciBsZWdhZG9zIGR1cmFkb3Vyb3MgZGEgY3Jpc2UuIE8gcHJpbWVpcm8gw6kgbyBhdW1lbnRvIGRhIGluZm9ybWFsaWRhZGU6IHBhcnRlIHNpZ25pZmljYXRpdmEgZGEgcmVjdXBlcmHDp8OjbyBwb3N0ZXJpb3IgZG8gZW1wcmVnbyBzZSBkZXUgcG9yIHbDrW5jdWxvcyBzZW0gY2FydGVpcmEgb3UgcG9yIGNvbnRhIHByw7NwcmlhLCBjb20gcmVtdW5lcmHDp8OjbyBtYWlzIGJhaXhhIGUgcHJvZHV0aXZpZGFkZSBtw6lkaWEgbWVub3IuIE8gc2VndW5kbyDDqSBhIHF1ZWRhIGRhIG1hc3NhIGRlIHJlbmRpbWVudG9zIHJlYWlzIOKAlCByZXN1bHRhZG8gY29tYmluYWRvIGRlIG1lbm9yIG9jdXBhw6fDo28gZSBkYSBpbmZsYcOnw6NvIGVsZXZhZGEgZGUgMjAxNeKAkzIwMTYsIHF1ZSBjb21wcmltaXUgbyBwb2RlciBkZSBjb21wcmEgZG9zIHNhbMOhcmlvcyBlIGFsaW1lbnRvdSB1bSBjaWNsbyByZWNlc3Npdm8gbm8gY29uc3VtbywgdGVtYSBkYSBwcsOzeGltYSBzZcOnw6NvLg0KDQoqKkdyw6FmaWNvIDEzKioNCg0KYGBge3J9DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIFBBQ09URVMgLS0tLS0tLS0tLS0tLS0tLS0tDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHN0cmluZ3IpDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIFBBTEVUQSBEQSBMSUdBIC0tLS0tLS0tLS0tLS0tLS0tLQ0KQU1BUkVMTyAgICAgPC0gIiNmZWI3MTIiDQpBWlVMX0VTQ1VSTyA8LSAiIzAyMDIzQyINCkFaVUxfTUVESU8gIDwtICIjMDAyYzVlIg0KQ0lOWkEgICAgICAgPC0gIiNhNmE2YTYiDQpURVhUTyAgICAgICA8LSAiIzNhM2EzYSINCkFaVUxfQ0xBUk8gIDwtICIjNDZiMWUxIg0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAxKSBMRVIgQSBCQVNFIC0tLS0tLS0tLS0tLS0tLS0tLQ0KZGVzZW1wcmVnb19yYXcgPC0gcmVhZF9leGNlbCgNCiAgZmlsZS5wYXRoKGRhZG9zX2RpciwgIlRheGFkZWRlc29jdXBhY2FvLnhsc3giKSwNCiAgc2hlZXQgPSAiVGFiZWxhIiwNCiAgY29sX25hbWVzID0gRkFMU0UNCikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMikgRVhUUkFJUiBUUklNRVNUUkVTIEUgVkFMT1JFUyAtLS0tLS0tLS0tLS0tLS0tLS0NCnRyaW1lc3RyZXMgPC0gYXMuY2hhcmFjdGVyKHVubGlzdChkZXNlbXByZWdvX3Jhd1s0LCAyOm5jb2woZGVzZW1wcmVnb19yYXcpXSkpDQp2YWxvcmVzICAgIDwtIGFzLm51bWVyaWModW5saXN0KGRlc2VtcHJlZ29fcmF3WzUsIDI6bmNvbChkZXNlbXByZWdvX3JhdyldKSkNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMykgRlVOw4fDlUVTIFBBUkEgVFJBVEFSIFRSSU1FU1RSRVMgLS0tLS0tLS0tLS0tLS0tLS0tDQpwYXJzZV90cmltZXN0cmUgPC0gZnVuY3Rpb24oeCkgew0KICB0cmltIDwtIGFzLmludGVnZXIoc3RyX2V4dHJhY3QoeCwgIl5bMS00XSIpKQ0KICBhbm8gIDwtIGFzLmludGVnZXIoc3RyX2V4dHJhY3QoeCwgIlxcZHs0fSQiKSkNCiAgbWVzICA8LSAodHJpbSAtIDEpICogMyArIDENCiAgDQogIGFzLkRhdGUocGFzdGUwKGFubywgIi0iLCBzcHJpbnRmKCIlMDJkIiwgbWVzKSwgIi0wMSIpKQ0KfQ0KDQpyb3R1bG9fdHJpbWVzdHJlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgdHJpbSA8LSBzdHJfZXh0cmFjdCh4LCAiXlsxLTRdIikNCiAgYW5vICA8LSBzdHJfZXh0cmFjdCh4LCAiXFxkezR9JCIpDQogIA0KICBwYXN0ZTAodHJpbSwgIlQvIiwgYW5vKQ0KfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSA0KSBNT05UQVIgQkFTRSBGSU5BTCAtLS0tLS0tLS0tLS0tLS0tLS0NCmRlc2VtcHJlZ28gPC0gdGliYmxlKA0KICB0cmltZXN0cmUgPSB0cmltZXN0cmVzLA0KICBkYXRhID0gcGFyc2VfdHJpbWVzdHJlKHRyaW1lc3RyZXMpLA0KICByb3R1bG8gPSByb3R1bG9fdHJpbWVzdHJlKHRyaW1lc3RyZXMpLA0KICB0YXhhID0gdmFsb3Jlcw0KKSAlPiUNCiAgZmlsdGVyKA0KICAgIGRhdGEgPj0gYXMuRGF0ZSgiMjAxNC0xMC0wMSIpLA0KICAgIGRhdGEgPD0gYXMuRGF0ZSgiMjAxNy0xMC0wMSIpDQogICkgJT4lDQogIGFycmFuZ2UoZGF0YSkNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gNSkgR1LDgUZJQ08gLS0tLS0tLS0tLS0tLS0tLS0tDQpoY2hhcnQoDQogIGRlc2VtcHJlZ28sDQogIHR5cGUgPSAibGluZSIsDQogIGhjYWVzKHggPSByb3R1bG8sIHkgPSB0YXhhKSwNCiAgbmFtZSA9ICJUYXhhIGRlIGRlc29jdXBhw6fDo28iLA0KICBjb2xvciA9IEFaVUxfRVNDVVJPLA0KICBsaW5lV2lkdGggPSAyLjYNCikgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiVGF4YSBkZSBkZXNvY3VwYcOnw6NvIiwNCiAgICBzdHlsZSA9IGxpc3QoDQogICAgICBjb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgICAgZm9udFdlaWdodCA9ICJib2xkIg0KICAgICkNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJQTkFEIENvbnTDrW51YSB0cmltZXN0cmFsLCA0VC8yMDE0IGEgNFQvMjAxNyIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIGNhdGVnb3JpZXMgPSBkZXNlbXByZWdvJHJvdHVsbywNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJUYXhhIGRlIGRlc29jdXBhw6fDo28gKCUpIiksDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWV9JSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgICApLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBoZWFkZXJGb3JtYXQgPSAiPGI+e3BvaW50LmtleX08L2I+PGJyLz4iLA0KICAgIHBvaW50Rm9ybWF0ID0gIlRheGEgZGUgZGVzb2N1cGHDp8OjbzogPGI+e3BvaW50Lnk6LjFmfSU8L2I+IiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAid2hpdGUiLA0KICAgIGJvcmRlckNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGxpbmUgPSBsaXN0KA0KICAgICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpDQogICAgKQ0KICApICU+JQ0KICBoY19sZWdlbmQoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFLCBQTkFEIENvbnTDrW51YSwgVGFiZWxhIDQwOTkgU0lEUkEuIg0KICApICU+JQ0KICBoY19jaGFydCgNCiAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJBcmlhbCwgc2Fucy1zZXJpZiIpDQogICkNCmBgYA0KDQojIyMgMi4zLjMgUHJvZHV0aXZpZGFkZTogbyBwcm9ibGVtYSBlc3RydXR1cmFsIHJldmVsYWRvIHBlbGEgcmVjZXNzw6NvDQoNCkEgcmVjZXNzw6NvIGV4cMO0cyB1bWEgZnJhZ2lsaWRhZGUgcXVlIGVzdGF2YSBwYXJjaWFsbWVudGUgbWFzY2FyYWRhIHBlbGEgZXhwYW5zw6NvIGFudGVyaW9yOiBhIGVzdGFnbmHDp8OjbyBkYSBwcm9kdXRpdmlkYWRlLiBPcyBpbmRpY2Fkb3JlcyBjb25zdHJ1w61kb3MgcGVsbyBPYnNlcnZhdMOzcmlvIGRhIFByb2R1dGl2aWRhZGUgUmVnaXMgQm9uZWxsaSAoRkdWL0lCUkUpIG1vc3RyYW0gcXVlLCBlbnRyZSAyMDEwIGUgMjAxNCwgZW5xdWFudG8gYSBwcm9kdXRpdmlkYWRlIHBvciBob3JhIHRyYWJhbGhhZGEgY3Jlc2NpYSBhIHVtIHJpdG1vIG1vZGVzdG8gZGUgY2VyY2EgZGUgMSw1JSBhbyBhbm8sIGEgUHJvZHV0aXZpZGFkZSBUb3RhbCBkb3MgRmF0b3JlcyAoUFRGKSBhdmFuw6dhdmEgYXBlbmFzIDAsNSUgYW8gYW5vIOKAlCBzaW5hbCBkZSBxdWUgbyBjcmVzY2ltZW50byBlc3RhdmEgc2VuZG8gc3VzdGVudGFkbyBtYWlzIHBvciBhY3VtdWxhw6fDo28gZGUgZmF0b3JlcyAoY2FwaXRhbCBlIHRyYWJhbGhvKSBkbyBxdWUgcG9yIGdhbmhvcyBkZSBlZmljacOqbmNpYS4NCg0KRHVyYW50ZSBhIHJlY2Vzc8OjbywgYSBQVEYgdGV2ZSBxdWVkYSBleHByZXNzaXZhLCB2aXPDrXZlbCBubyBHcsOhZmljbyAxNCBwZWxhIGluZmxleMOjbyBkbyDDrW5kaWNlIGEgcGFydGlyIGRlIDIwMTQgZSBwZWxvIHBvbnRvIHBhcnRpY3VsYXJtZW50ZSBzZXZlcm8gbm8gcXVhcnRvIHRyaW1lc3RyZSBkZSAyMDE1LiBBIHByb2R1dGl2aWRhZGUgcG9yIGhvcmEgdGFtYsOpbSByZWN1b3UuIE8gcG9udG8gYW5hbGl0aWNhbWVudGUgbWFpcyByZWxldmFudGUsIHBvcsOpbSwgw6kgbyBxdWUgdmVpbyBkZXBvaXM6IHBlbGEgcHJpbWVpcmEgdmV6IGVtIHN1YSBoaXN0w7NyaWEgcmVjZW50ZSwgbyBCcmFzaWwgc2FpdSBkZSB1bWEgcmVjZXNzw6NvIHByb2Z1bmRhIHNlbSByZWdpc3RyYXIgZ2FuaG9zIHNpZ25pZmljYXRpdm9zIGRlIHByb2R1dGl2aWRhZGUgbmEgcmVjdXBlcmHDp8Ojby4gRW0gY2ljbG9zIGFudGVyaW9yZXMsIGEgc2HDrWRhIGRhIGNyaXNlIGNvc3R1bWF2YSB2aXIgYWNvbXBhbmhhZGEgZGUgYXVtZW50byBkYSBlZmljacOqbmNpYSwgw6AgbWVkaWRhIHF1ZSBhcyBlbXByZXNhcyByZW9yZ2FuaXphdmFtIHByb2Nlc3NvcyBlIG8gY2FwaXRhbCBzZSByZWFsb2NhdmEgcGFyYSB1c29zIG1haXMgcHJvZHV0aXZvcy4gRGVzc2EgdmV6LCBpc3NvIG7Do28gb2NvcnJldS4NCg0KRXNzZSBjb21wb3J0YW1lbnRvIGFqdWRhIGEgZXhwbGljYXIgYSBmcnVzdHJhw6fDo28gY29tIG8gcml0bW8gZG8gY3Jlc2NpbWVudG8gcMOzcy0yMDE3IGUgZGlhbG9nYSBkaXJldGFtZW50ZSBjb20gYSBkaXNjdXNzw6NvIGRvIG1vbWVudG8gYXR1YWw6IHNlbSBnYW5ob3MgY29uc2lzdGVudGVzIGRlIHByb2R1dGl2aWRhZGUsIGEgZWNvbm9taWEgYnJhc2lsZWlyYSBwYXNzYSBhIGRlcGVuZGVyIGNhZGEgdmV6IG1haXMgZGEgYWN1bXVsYcOnw6NvIGRlIGZhdG9yZXMgcGFyYSBjcmVzY2VyLCBvIHF1ZSByZWZvcsOnYSBvcyBsaW1pdGVzIGVzdHJ1dHVyYWlzIGFvIGNpY2xvIGRlIGV4cGFuc8Ojby4NCg0KKipHcsOhZmljbyAxNCoqDQoNCmBgYHtyfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSBQQUNPVEVTIC0tLS0tLS0tLS0tLS0tLS0tLQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkoc3RyaW5ncikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gUEFMRVRBIERBIExJR0EgLS0tLS0tLS0tLS0tLS0tLS0tDQpBTUFSRUxPICAgICA8LSAiI2ZlYjcxMiINCkFaVUxfRVNDVVJPIDwtICIjMDIwMjNDIg0KQVpVTF9NRURJTyAgPC0gIiMwMDJjNWUiDQpDSU5aQSAgICAgICA8LSAiI2E2YTZhNiINClRFWFRPICAgICAgIDwtICIjM2EzYTNhIg0KQVpVTF9DTEFSTyAgPC0gIiM0NmIxZTEiDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDEpIExFUiBBIEJBU0UgLS0tLS0tLS0tLS0tLS0tLS0tDQpwdGZfcmF3IDwtIHJlYWRfZXhjZWwoDQogIGZpbGUucGF0aChkYWRvc19kaXIsICJiYXNlX2RlX2RhZG9zXy1fcHRmX3RyaW1lc3RyYWxfcG9yX2hvcmFfdHJhYmFsaGFkYV80dDIwMjUueGxzeCIpLA0KICBzaGVldCA9ICJQVEYgY29tIGFqdXN0ZSBzYXpvbmFsIiwNCiAgc2tpcCA9IDgNCikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMikgVFJBVEFSIEEgQkFTRSAtLS0tLS0tLS0tLS0tLS0tLS0NCnB0ZiA8LSBwdGZfcmF3ICU+JQ0KICByZW5hbWUoDQogICAgdHJpbWVzdHJlID0gRGF0YSwNCiAgICBwdGZfaGFiaXR1YWlzID0gYFBURiAoSG9yYXMgSGFiaXR1YWlzKWAsDQogICAgcHRmX2VmZXRpdmFzICA9IGBQVEYgKEhvcmFzIEVmZXRpdmFzKWANCiAgKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh0cmltZXN0cmUpKSAlPiUNCiAgbXV0YXRlKA0KICAgIHRyaW1lc3RyZSA9IGFzLmNoYXJhY3Rlcih0cmltZXN0cmUpLA0KICAgIGFubyA9IGFzLmludGVnZXIoc3RyX2V4dHJhY3QodHJpbWVzdHJlLCAiXlxcZHs0fSIpKSwNCiAgICB0cmltID0gYXMuaW50ZWdlcihzdHJfZXh0cmFjdCh0cmltZXN0cmUsICIoPzw9cSlbMS00XSIpKSwNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLSIsIHNwcmludGYoIiUwMmQiLCAodHJpbSAtIDEpICogMyArIDEpLCAiLTAxIikpLA0KICAgIHJvdHVsbyA9IHBhc3RlMCh0cmltLCAiVC8iLCBhbm8pLA0KICAgIHB0Zl9lZmV0aXZhcyA9IGFzLm51bWVyaWMocHRmX2VmZXRpdmFzKQ0KICApICU+JQ0KICBmaWx0ZXIoDQogICAgZGF0YSA+PSBhcy5EYXRlKCIyMDE0LTAxLTAxIiksDQogICAgZGF0YSA8PSBhcy5EYXRlKCIyMDE4LTEwLTAxIikNCiAgKSAlPiUNCiAgYXJyYW5nZShkYXRhKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAzKSBHUsOBRklDTyAtLS0tLS0tLS0tLS0tLS0tLS0NCmhjaGFydCgNCiAgcHRmLA0KICB0eXBlID0gImxpbmUiLA0KICBoY2Flcyh4ID0gcm90dWxvLCB5ID0gcHRmX2VmZXRpdmFzKSwNCiAgbmFtZSA9ICJQVEYgcG9yIGhvcmFzIGVmZXRpdmFzIiwNCiAgY29sb3IgPSBBWlVMX0VTQ1VSTywNCiAgbGluZVdpZHRoID0gMi42DQopICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIlByb2R1dGl2aWRhZGUgVG90YWwgZG9zIEZhdG9yZXMiLA0KICAgIHN0eWxlID0gbGlzdCgNCiAgICAgIGNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgICBmb250V2VpZ2h0ID0gImJvbGQiDQogICAgKQ0KICApICU+JQ0KICBoY19zdWJ0aXRsZSgNCiAgICB0ZXh0ID0gIlBURiBwb3IgaG9yYXMgZWZldGl2YXMsIGNvbSBhanVzdGUgc2F6b25hbCwgMjAxNCBhIDIwMTgiLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gcHRmJHJvdHVsbywNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICLDjW5kaWNlLCAyVC8yMDEyID0gMTAwIiksDQogICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykpLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBoZWFkZXJGb3JtYXQgPSAiPGI+e3BvaW50LmtleX08L2I+PGJyLz4iLA0KICAgIHBvaW50Rm9ybWF0ID0gIlBURjogPGI+e3BvaW50Lnk6LjFmfTwvYj4iLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICJ3aGl0ZSIsDQogICAgYm9yZGVyQ29sb3IgPSBBWlVMX0VTQ1VSTywNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgbGluZSA9IGxpc3QoDQogICAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSkNCiAgICApDQogICkgJT4lDQogIGhjX2xlZ2VuZChlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IEZHVi9JQlJFLCBPYnNlcnZhdMOzcmlvIGRhIFByb2R1dGl2aWRhZGUgUmVnaXMgQm9uZWxsaS4iDQogICkgJT4lDQogIGhjX2NoYXJ0KA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBzYW5zLXNlcmlmIikNCiAgKQ0KYGBgDQoNCiMjIDIuNCBDb25zdW1vLCBjcsOpZGl0byBlIGNvbmZpYW7Dp2ENCg0KIyMjIDIuNC4xIEEgcmV2ZXJzw6NvIGRvIGNvbnN1bW8gZGFzIGZhbcOtbGlhcw0KDQpPIGNvbnN1bW8gZGFzIGZhbcOtbGlhcywgcXVlIGhhdmlhIHNpZG8gbyBtb3RvciBkbyBjaWNsbyBleHBhbnNpdm8gZGUgMjAwOOKAkzIwMTQsIHNvZnJldSB1bWEgcmV2ZXJzw6NvIGV4cHJlc3NpdmEgZHVyYW50ZSBhIHJlY2Vzc8Ojby4gQ29tbyBldmlkZW5jaWEgbyBHcsOhZmljbyAxNSwgcGVsYSBzw6lyaWUgdHJpbWVzdHJhbCBkZXNzYXpvbmFsaXphZGEsIG8gYWdyZWdhZG8gcmVnaXN0cm91IHNldGUgcXVlZGFzIGNvbnNlY3V0aXZhcyBlbnRyZSBvIDHCuiB0cmltZXN0cmUgZGUgMjAxNSBlIG8gM8K6IHRyaW1lc3RyZSBkZSAyMDE2LiBPcyByZWN1b3MgY2hlZ2FyYW0gYSAxLDklIGVtIHVtIMO6bmljbyB0cmltZXN0cmUsIG5vIDLCuiB0cmltZXN0cmUgZGUgMjAxNSwgZSBhIHF1ZWRhIGFjdW11bGFkYSBubyBwZXLDrW9kbyBmb2kgZGUgYXByb3hpbWFkYW1lbnRlIDYlLCBjb25maWd1cmFuZG8gYSBjb250cmHDp8OjbyBtYWlzIGxvbmdhIGUgaW50ZW5zYSBkbyBjb25zdW1vIGRhcyBmYW3DrWxpYXMgbmEgc8OpcmllIGhpc3TDs3JpY2EgcmVjZW50ZS4NCg0KQSBtYWduaXR1ZGUgZGVzc2UgbW92aW1lbnRvIMOpIG1hY3JvZWNvbm9taWNhbWVudGUgZGVjaXNpdmEgcG9ycXVlIG8gY29uc3VtbyBkYXMgZmFtw61saWFzIHJlc3BvbmRlIHBvciBhcHJveGltYWRhbWVudGUgZG9pcyB0ZXLDp29zIGRvIFBJQiBwZWxhIMOzdGljYSBkYSBkZXNwZXNhLiBRdWFuZG8gZXNzZSBjb21wb25lbnRlIGVudHJhIGVtIHF1ZWRhLCBkaWZpY2lsbWVudGUgb3V0cm9zIGFncmVnYWRvcyBjb25zZWd1ZW0gY29tcGVuc2FyLCBlIGEgY29udHJhw6fDo28gc2UgZ2VuZXJhbGl6YS4NCg0KQSByZXZlcnPDo28gZm9pIHJlc3VsdGFkbyBkYSBjb21iaW5hw6fDo28gZGUgZmF0b3JlcyBkaXNjdXRpZG9zIG5hcyBzZcOnw7VlcyBhbnRlcmlvcmVzLiBBIHF1ZWRhIGRhIHJlbmRhIHJlYWwgZG8gdHJhYmFsaG8sIGRlY29ycmVudGUgZG8gYXVtZW50byBkbyBkZXNlbXByZWdvIGUgZGEgaW5mbGHDp8OjbyBkZSBkb2lzIGTDrWdpdG9zIGVtIDIwMTUsIGNvbXByaW1pdSBvIHBvZGVyIGRlIGNvbXByYS4gQSBlbGV2YcOnw6NvIGRhIFNlbGljIGVuY2FyZWNldSBvIGNyw6lkaXRvIGFvIGNvbnN1bWlkb3IsIHF1ZSBzZXLDoSBhbmFsaXNhZG8gbmEgcHLDs3hpbWEgc3Vic2XDp8Ojby4gRSBvIGVuZGl2aWRhbWVudG8gZWxldmFkbyBkYXMgZmFtw61saWFzIOKAlCBoZXJhbsOnYSBkbyBjaWNsbyBkZSBjcsOpZGl0byBkYSBkw6ljYWRhIGFudGVyaW9yIOKAlCBsaW1pdG91IGEgY2FwYWNpZGFkZSBkZSBhYnNvcsOnw6NvIGRvIGNob3F1ZSBwb3IgbWVpbyBkZSBub3ZvcyBlbXByw6lzdGltb3MuIE8gcmVzdWx0YWRvIGZvaSB1bSBjaWNsbyByZWNlc3Npdm8gbm8gY29uc3VtbyBxdWUgc2UgcmV0cm9hbGltZW50b3U6IHF1ZWRhIGRvIGVtcHJlZ28gY29tcHJpbWUgYSByZW5kYSwgcXVlIGNvbXByaW1lIG8gY29uc3VtbywgcXVlIGNvbXByaW1lIGEgcHJvZHXDp8OjbyBlIG8gZW1wcmVnbyBub3ZhbWVudGUuDQoNCioqR3LDoWZpY28gMTUqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoc3RyaW5ncikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gUEFMRVRBIERBIExJR0EgLS0tLS0tLS0tLS0tLS0tLS0tDQpBTUFSRUxPICAgICA8LSAiI2ZlYjcxMiINCkFaVUxfRVNDVVJPIDwtICIjMDIwMjNDIg0KQVpVTF9NRURJTyAgPC0gIiMwMDJjNWUiDQpDSU5aQSAgICAgICA8LSAiI2E2YTZhNiINClRFWFRPICAgICAgIDwtICIjM2EzYTNhIg0KQVpVTF9DTEFSTyAgPC0gIiM0NmIxZTEiDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDEpIExFUiBBIEJBU0UgLS0tLS0tLS0tLS0tLS0tLS0tDQpjb25zdW1vX3JhdyA8LSByZWFkX2V4Y2VsKA0KICBmaWxlLnBhdGgoZGFkb3NfZGlyLCAiVmFyaWFjYW9jb25zZmFtLnhsc3giKSwNCiAgc2hlZXQgPSAiVGFiZWxhIiwNCiAgY29sX25hbWVzID0gRkFMU0UNCikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMikgRVhUUkFJUiBUUklNRVNUUkVTIEUgVkFMT1JFUyAtLS0tLS0tLS0tLS0tLS0tLS0NCnRyaW1lc3RyZXMgPC0gYXMuY2hhcmFjdGVyKHVubGlzdChjb25zdW1vX3Jhd1s0LCAyOm5jb2woY29uc3Vtb19yYXcpXSkpDQp2YWxvcmVzICAgIDwtIGFzLm51bWVyaWModW5saXN0KGNvbnN1bW9fcmF3WzYsIDI6bmNvbChjb25zdW1vX3JhdyldKSkNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMykgRlVOw4fDlUVTIFBBUkEgVFJBVEFSIFRSSU1FU1RSRVMgLS0tLS0tLS0tLS0tLS0tLS0tDQpwYXJzZV90cmltZXN0cmUgPC0gZnVuY3Rpb24oeCkgew0KICB0cmltIDwtIGFzLmludGVnZXIoc3RyX2V4dHJhY3QoeCwgIl5bMS00XSIpKQ0KICBhbm8gIDwtIGFzLmludGVnZXIoc3RyX2V4dHJhY3QoeCwgIlxcZHs0fSQiKSkNCiAgbWVzICA8LSAodHJpbSAtIDEpICogMyArIDENCiAgDQogIGFzLkRhdGUocGFzdGUwKGFubywgIi0iLCBzcHJpbnRmKCIlMDJkIiwgbWVzKSwgIi0wMSIpKQ0KfQ0KDQpyb3R1bG9fdHJpbWVzdHJlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgdHJpbSA8LSBzdHJfZXh0cmFjdCh4LCAiXlsxLTRdIikNCiAgYW5vICA8LSBzdHJfZXh0cmFjdCh4LCAiXFxkezR9JCIpDQogIA0KICBwYXN0ZTAodHJpbSwgIlQvIiwgYW5vKQ0KfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSA0KSBNT05UQVIgQkFTRSBGSU5BTCAtLS0tLS0tLS0tLS0tLS0tLS0NCmNvbnN1bW8gPC0gdGliYmxlKA0KICB0cmltZXN0cmUgPSB0cmltZXN0cmVzLA0KICBkYXRhID0gcGFyc2VfdHJpbWVzdHJlKHRyaW1lc3RyZXMpLA0KICByb3R1bG8gPSByb3R1bG9fdHJpbWVzdHJlKHRyaW1lc3RyZXMpLA0KICB2YXJpYWNhbyA9IHZhbG9yZXMNCikgJT4lDQogIGZpbHRlcigNCiAgICBkYXRhID49IGFzLkRhdGUoIjIwMTQtMDEtMDEiKSwNCiAgICBkYXRhIDw9IGFzLkRhdGUoIjIwMTctMTAtMDEiKQ0KICApICU+JQ0KICBhcnJhbmdlKGRhdGEpICU+JQ0KICBtdXRhdGUoDQogICAgY29yID0gaWZfZWxzZSh2YXJpYWNhbyA8IDAsIEFaVUxfRVNDVVJPLCBBWlVMX0NMQVJPKQ0KICApDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDUpIEdSw4FGSUNPIC0tLS0tLS0tLS0tLS0tLS0tLQ0KaGlnaGNoYXJ0KCkgJT4lDQogIA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGNvbnN1bW8sDQogICAgdHlwZSA9ICJjb2x1bW4iLA0KICAgIGhjYWVzKHggPSByb3R1bG8sIHkgPSB2YXJpYWNhbywgY29sb3IgPSBjb3IpLA0KICAgIG5hbWUgPSAiVmFyaWHDp8OjbyB0cmltZXN0cmFsIg0KICApICU+JQ0KICANCiAgaGNfdGl0bGUoDQogICAgdGV4dCA9ICJDb25zdW1vIGRhcyBmYW3DrWxpYXMiLA0KICAgIHN0eWxlID0gbGlzdCgNCiAgICAgIGNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgICBmb250V2VpZ2h0ID0gImJvbGQiDQogICAgKQ0KICApICU+JQ0KICANCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJWYXJpYcOnw6NvIHRyaW1lc3RyYWwsIDIwMTQgYSAyMDE3IiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgKSAlPiUNCiAgDQogIGhjX3hBeGlzKA0KICAgIGNhdGVnb3JpZXMgPSBjb25zdW1vJHJvdHVsbywNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKQ0KICApICU+JQ0KICANCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiVmFyaWHDp8OjbyB0cmltZXN0cmFsICglKSIpLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBmb3JtYXQgPSAie3ZhbHVlfSUiLA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICAgKSwNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCgNCiAgICAgICAgdmFsdWUgPSAwLA0KICAgICAgICBjb2xvciA9IFRFWFRPLA0KICAgICAgICB3aWR0aCA9IDEsDQogICAgICAgIHpJbmRleCA9IDQNCiAgICAgICkNCiAgICApLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgDQogIGhjX3Rvb2x0aXAoDQogICAgaGVhZGVyRm9ybWF0ID0gIjxiPntwb2ludC5rZXl9PC9iPjxici8+IiwNCiAgICBwb2ludEZvcm1hdCA9ICJWYXJpYcOnw6NvIHRyaW1lc3RyYWw6IDxiPntwb2ludC55Oi4xZn0lPC9iPiIsDQogICAgYmFja2dyb3VuZENvbG9yID0gIndoaXRlIiwNCiAgICBib3JkZXJDb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICANCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIGNvbG9yQnlQb2ludCA9IFRSVUUsDQogICAgICBib3JkZXJXaWR0aCA9IDAsDQogICAgICBncm91cFBhZGRpbmcgPSAwLjA4LA0KICAgICAgcG9pbnRQYWRkaW5nID0gMC4wNA0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX2xlZ2VuZChlbmFibGVkID0gRkFMU0UpICU+JQ0KICANCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFLCBDb250YXMgTmFjaW9uYWlzIFRyaW1lc3RyYWlzLCBUYWJlbGEgNTkzMiBTSURSQS4iDQogICkgJT4lDQogIA0KICBoY19jaGFydCgNCiAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJBcmlhbCwgc2Fucy1zZXJpZiIpDQogICkNCmBgYA0KDQojIyMgMi40LjIgQSByZXRyYcOnw6NvIGRvIGNyw6lkaXRvDQoNCk8gY3LDqWRpdG8sIHF1ZSBoYXZpYSBmdW5jaW9uYWRvIGNvbW8gY29tYnVzdMOtdmVsIGRhIGV4cGFuc8OjbyBhbnRlcmlvciwgY29tcG9ydG91LXNlIG5hIHJlY2Vzc8OjbyBjb21vIGFtcGxpZmljYWRvciBkYSBxdWVkYS4gQ29uZm9ybWUgc2Ugb2JzZXJ2YSBubyBHcsOhZmljbyAxNiwgbyBlc3RvcXVlIHRvdGFsIGRlIGNyw6lkaXRvIGRvIFNpc3RlbWEgRmluYW5jZWlybyBOYWNpb25hbCwgcXVlIHZpbmhhIGNyZXNjZW5kbyBjb250aW51YW1lbnRlIGRlc2RlIG1lYWRvcyBkb3MgYW5vcyAyMDAwLCByZWN1b3UgZW0gdGVybW9zIHJlYWlzIGUgY2FpdSBjb21vIHByb3BvcsOnw6NvIGRvIFBJQiDigJQgZGUgY2VyY2EgZGUgNTMsNyUgbm8gZmltIGRlIDIwMTUgcGFyYSA0OSwzJSBubyBmaW0gZGUgMjAxNi4NCg0KVHLDqnMgZmF0b3JlcyBleHBsaWNhbSBlc3NhIHJldmVyc8Ojby4gTyBwcmltZWlybyDDqSBhIGFsdGEgZGEgU2VsaWMsIHF1ZSBlbGV2b3UgYXMgdGF4YXMgZGUganVyb3MgYW8gdG9tYWRvciBmaW5hbCBhIHBhdGFtYXJlcyBwcm9pYml0aXZvczogb3MganVyb3MgbcOpZGlvcyBkbyBjcsOpZGl0byBsaXZyZSBwYXJhIHBlc3NvYSBmw61zaWNhIGNoZWdhcmFtIGEgY2VyY2EgZGUgNzEsNSUgYW8gYW5vIGVtIDIwMTYuIE8gc2VndW5kbyDDqSBhIGRldGVyaW9yYcOnw6NvIGRhIHBlcmNlcMOnw6NvIGRlIHJpc2NvIGRvIHNpc3RlbWEgZmluYW5jZWlybyBkaWFudGUgZGEgcXVlZGEgZGEgYXRpdmlkYWRlIGUgZG8gYXVtZW50byBkYSBpbmFkaW1wbMOqbmNpYSwgc29icmV0dWRvIGVudHJlIGVtcHJlc2FzLiBPIHRlcmNlaXJvIMOpIGEgcmV0cmHDp8OjbyBkbyBjcsOpZGl0byBkaXJlY2lvbmFkbywgcGFydGljdWxhcm1lbnRlIGRvIEJOREVTLCBxdWUgcmV2ZXJ0ZXUgbyBmb3J0ZSBjcmVzY2ltZW50byBkb3MgZGVzZW1ib2xzb3Mgb2JzZXJ2YWRvIG5vIGNpY2xvIGFudGVyaW9yIOKAlCBtb3ZpbWVudG8gYXNzb2NpYWRvIHRhbnRvIGFvIGFqdXN0ZSBmaXNjYWwgcXVhbnRvIMOgIHJlb3JpZW50YcOnw6NvIGRhIHBvbMOtdGljYSBkZSBjcsOpZGl0byBhIHBhcnRpciBkZSAyMDE1Lg0KDQpPIGVmZWl0byBjb21iaW5hZG8gZm9pIHVtIHByb2Nlc3NvIGRlIGRlc2FsYXZhbmNhZ2VtIHNpbXVsdMOibmVhIGRlIGZhbcOtbGlhcyBlIGVtcHJlc2FzLCBxdWUgc2UgcHJvbG9uZ291IHBlbG9zIGFub3Mgc2VndWludGVzIGFvIGZpbSBkYSByZWNlc3PDo28gZSBhanVkYSBhIGV4cGxpY2FyIGEgbGVudGlkw6NvIGRhIHJldG9tYWRhLiBFbSB1bWEgZWNvbm9taWEgZW0gcXVlIG8gY3LDqWRpdG8gaGF2aWEgc2lkbyB1bSBjb21wb25lbnRlIGNlbnRyYWwgZG8gY3Jlc2NpbWVudG8sIGEgc3VhIHJldmVyc8OjbyBlbGltaW5vdSB1bSBkb3MgcHJpbmNpcGFpcyBjYW5haXMgZGUgZmluYW5jaWFtZW50byBkYSBkZW1hbmRhIGFncmVnYWRhLg0KDQoqKkdyw6FmaWNvIDE2KioNCg0KYGBge3J9DQoNCiMgUEFDT1RFUw0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkoR2V0QkNCRGF0YSkNCmxpYnJhcnkodGlkeXIpDQoNCiMgUEFMRVRBIERBIExJR0ENCkFNQVJFTE8gICAgIDwtICIjZmViNzEyIg0KQVpVTF9FU0NVUk8gPC0gIiMwMjAyM0MiDQpBWlVMX01FRElPICA8LSAiIzAwMmM1ZSINCkNJTlpBICAgICAgIDwtICIjYTZhNmE2Ig0KVEVYVE8gICAgICAgPC0gIiMzYTNhM2EiDQpBWlVMX0NMQVJPICA8LSAiIzQ2YjFlMSINCg0KIyBQRVLDjU9ETw0KaW5pY2lvIDwtIGFzLkRhdGUoIjIwMDgtMDEtMDEiKQ0KZmltICAgIDwtIGFzLkRhdGUoIjIwMTctMTItMzEiKQ0KDQojIFPDiVJJRVMgU0dTDQpzZXJpZXNfaWRzIDwtIGMoDQogIENyZWRpdG9fVG90YWwgICAgICAgPSAyMDYyMiwNCiAgQ3JlZGl0b19MaXZyZSAgICAgICA9IDIwNjI1LA0KICBDcmVkaXRvX0RpcmVjaW9uYWRvID0gMjA2MjgNCikNCg0KZGFkb3NfYmNiIDwtIGdiY2JkX2dldF9zZXJpZXMoDQogIGlkID0gc2VyaWVzX2lkcywNCiAgZmlyc3QuZGF0ZSA9IGluaWNpbywNCiAgbGFzdC5kYXRlICA9IGZpbSwNCiAgZm9ybWF0LmRhdGEgPSAid2lkZSINCikNCg0KIyBUUkFUQVIgQkFTRQ0KY3JlZGl0byA8LSBkYWRvc19iY2IgJT4lDQogIHJlbmFtZSgNCiAgICBkYXRhID0gcmVmLmRhdGUsDQogICAgdG90YWwgPSBDcmVkaXRvX1RvdGFsLA0KICAgIGxpdnJlID0gQ3JlZGl0b19MaXZyZSwNCiAgICBkaXJlY2lvbmFkbyA9IENyZWRpdG9fRGlyZWNpb25hZG8NCiAgKSAlPiUNCiAgbXV0YXRlKA0KICAgIGRhdGEgPSBhcy5EYXRlKGRhdGEpLA0KICAgIGRhdGEgPSBmbG9vcl9kYXRlKGRhdGEsICJtb250aCIpDQogICkgJT4lDQogIGFycmFuZ2UoZGF0YSkNCg0KIyBHUsOBRklDTw0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgDQogIGhjX2FkZF9zZXJpZXMoDQogICAgY3JlZGl0bywNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSBkYXRhLCB5ID0gdG90YWwpLA0KICAgIG5hbWUgPSAiQ3LDqWRpdG8gdG90YWwiLA0KICAgIGNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgbGluZVdpZHRoID0gMi44LA0KICAgIHpJbmRleCA9IDUNCiAgKSAlPiUNCiAgDQogIGhjX2FkZF9zZXJpZXMoDQogICAgY3JlZGl0bywNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSBkYXRhLCB5ID0gbGl2cmUpLA0KICAgIG5hbWUgPSAiQ3LDqWRpdG8gbGl2cmUiLA0KICAgIGNvbG9yID0gQVpVTF9DTEFSTywNCiAgICBsaW5lV2lkdGggPSAyLjIsDQogICAgekluZGV4ID0gNA0KICApICU+JQ0KICANCiAgaGNfYWRkX3NlcmllcygNCiAgICBjcmVkaXRvLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgaGNhZXMoeCA9IGRhdGEsIHkgPSBkaXJlY2lvbmFkbyksDQogICAgbmFtZSA9ICJDcsOpZGl0byBkaXJlY2lvbmFkbyIsDQogICAgY29sb3IgPSBBTUFSRUxPLA0KICAgIGxpbmVXaWR0aCA9IDIuMiwNCiAgICB6SW5kZXggPSA0DQogICkgJT4lDQogIA0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIkVzdG9xdWUgZGUgY3LDqWRpdG8gZG8gU0ZOIiwNCiAgICBzdHlsZSA9IGxpc3QoDQogICAgICBjb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgICAgZm9udFdlaWdodCA9ICJib2xkIg0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiQ3LDqWRpdG8gdG90YWwsIGxpdnJlIGUgZGlyZWNpb25hZG8gY29tbyBwZXJjZW50dWFsIGRvIFBJQiwgMjAwOCBhIDIwMTciLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICANCiAgaGNfeEF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSBOVUxMKSwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKSkNCiAgKSAlPiUNCiAgDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlBlcmNlbnR1YWwgZG8gUElCICglKSIpLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBmb3JtYXQgPSAie3ZhbHVlfSUiLA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICAgKSwNCiAgICBncmlkTGluZUNvbG9yID0gIiNlZWVlZWUiDQogICkgJT4lDQogIA0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgY3Jvc3NoYWlycyA9IFRSVUUsDQogICAgdmFsdWVEZWNpbWFscyA9IDEsDQogICAgdmFsdWVTdWZmaXggPSAiJSIsDQogICAgYmFja2dyb3VuZENvbG9yID0gIndoaXRlIiwNCiAgICBib3JkZXJDb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICANCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iDQogICkgJT4lDQogIA0KICBoY19yYW5nZVNlbGVjdG9yKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX3Njcm9sbGJhcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19uYXZpZ2F0b3IoZW5hYmxlZCA9IFRSVUUpICU+JQ0KICANCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBCYW5jbyBDZW50cmFsIGRvIEJyYXNpbCwgU0dTLiINCiAgKSAlPiUNCiAgDQogIGhjX2NoYXJ0KA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBzYW5zLXNlcmlmIikNCiAgKQ0KYGBgDQoNCiMjIyAyLjQuMyBDb25maWFuw6dhIGUgaW5jZXJ0ZXphDQoNClVtIGFzcGVjdG8gZGlzdGludGl2byBkYSByZWNlc3PDo28gZGUgMjAxNOKAkzIwMTYsIGVtIGNvbXBhcmHDp8OjbyBjb20gZXBpc8OzZGlvcyBhbnRlcmlvcmVzLCDDqSBvIHBhcGVsIGNlbnRyYWwgZGFzIGV4cGVjdGF0aXZhcyBlIGRhIGluY2VydGV6YS4gQ29tbyBpbHVzdHJhIG8gR3LDoWZpY28gMTcsIG9zIGluZGljYWRvcmVzIGRlIGNvbmZpYW7Dp2EgZGEgRkdWL0lCUkUg4oCUIGVtIHBhcnRpY3VsYXIgbyDDjW5kaWNlIGRlIENvbmZpYW7Dp2EgRW1wcmVzYXJpYWwgKElDRSkgZSBvIMONbmRpY2UgZGUgQ29uZmlhbsOnYSBkbyBDb25zdW1pZG9yIChJQ0MpIOKAlCBhdGluZ2lyYW0gbcOtbmltb3MgaGlzdMOzcmljb3MgZW50cmUgbyBmaW5hbCBkZSAyMDE1IGUgbyBpbsOtY2lvIGRlIDIwMTYsIGVtIG7DrXZlaXMgaW5mZXJpb3JlcyBhb3Mgb2JzZXJ2YWRvcyBubyBhdWdlIGRhIGNyaXNlIGludGVybmFjaW9uYWwgZGUgMjAwOOKAkzIwMDkuIEluZGljYWRvcmVzIGRlIGluY2VydGV6YSwgY29tbyBvIEluZGljYWRvciBkZSBJbmNlcnRlemEgZGEgRWNvbm9taWEgKElJRS1CcikgZGEgRkdWLCB0YW1iw6ltIHJlZ2lzdHJhcmFtIG7DrXZlaXMgcmVjb3JkZXMgbm8gbWVzbW8gcGVyw61vZG8sIGNvbSBwaWNvIGVtIHNldGVtYnJvIGRlIDIwMTUuDQoNCkEgZGV0ZXJpb3Jhw6fDo28gZGFzIGV4cGVjdGF0aXZhcyDDqSBtYWNyb2Vjb25vbWljYW1lbnRlIHJlbGV2YW50ZSBwb3JxdWUgY3JpYSB1bSBjYW5hbCBwcsOzcHJpbyBkZSB0cmFuc21pc3PDo28gZGEgY3Jpc2UuIERpYW50ZSBkZSBjZW7DoXJpb3MgaW5jZXJ0b3MsIGVtcHJlc2FzIHBvc3RlcmdhbSBkZWNpc8O1ZXMgZGUgaW52ZXN0aW1lbnRvIGUgZmFtw61saWFzIGF1bWVudGFtIGEgcG91cGFuw6dhIHByZWNhdWNpb27DoXJpYSwgY29tcHJpbWluZG8gc2ltdWx0YW5lYW1lbnRlIGEgRkJDRiBlIG8gY29uc3VtbyDigJQgb3Ugc2VqYSwgYW1wbGlhbmRvIG8gZWZlaXRvIHJlY2Vzc2l2byBkb3MgZGVtYWlzIGNob3F1ZXMgcGVsYSB2aWEgZXhwZWN0YWNpb25hbC4NCg0KQSBwZXJkYSBkZSBjcmVkaWJpbGlkYWRlIGRhIHBvbMOtdGljYSBlY29uw7RtaWNhIGVtIDIwMTUgYWxpbWVudG91IGRpcmV0YW1lbnRlIGVzc2VzIGluZGljYWRvcmVzLiBBIHJldmlzw6NvIGRhIG1ldGEgZGUgc3VwZXLDoXZpdCBwcmltw6FyaW8gcGFyYSBkw6lmaWNpdCwgYSBzdWNlc3PDo28gZGUgdHJvY2FzIG5vIGNvbWFuZG8gZG8gTWluaXN0w6lyaW8gZGEgRmF6ZW5kYSAoTGV2eSDihpIgTmVsc29uIEJhcmJvc2Eg4oaSIEhlbnJpcXVlIE1laXJlbGxlcykgZSBhcyBpbmNlcnRlemFzIGRvIHByb2Nlc3NvIGRlIGltcGVhY2htZW50IGZ1bmNpb25hcmFtIGNvbW8gcnXDrWRvcyBjb250w61udW9zIHF1ZSBkaWZpY3VsdGF2YW0gYSBmb3JtYcOnw6NvIGRlIGV4cGVjdGF0aXZhcyBlc3TDoXZlaXMuIEFzc2ltLCBhIGNyaXNlIHBvbMOtdGljYSBuw6NvIGF0dW91IGFwZW5hcyBjb21vIHVtIHBhbm8gZGUgZnVuZG8gZGEgcmVjZXNzw6NvLCBtYXMgY29tbyB1bSB2ZXRvciBjb25jcmV0byBkZSB0cmFuc21pc3PDo28gZG9zIHByb2JsZW1hcyBwYXJhIGEgYXRpdmlkYWRlIGVjb27DtG1pY2EgcmVhbC4NCg0KKipHcsOhZmljbyAxNyoqDQoNCmBgYHtyfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSBQQUNPVEVTIC0tLS0tLS0tLS0tLS0tLS0tLQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSBQQUxFVEEgREEgTElHQSAtLS0tLS0tLS0tLS0tLS0tLS0NCkFNQVJFTE8gICAgIDwtICIjZmViNzEyIg0KQVpVTF9FU0NVUk8gPC0gIiMwMjAyM0MiDQpBWlVMX01FRElPICA8LSAiIzAwMmM1ZSINCkNJTlpBICAgICAgIDwtICIjYTZhNmE2Ig0KVEVYVE8gICAgICAgPC0gIiMzYTNhM2EiDQpBWlVMX0NMQVJPICA8LSAiIzQ2YjFlMSINCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMSkgTEVSIEEgQkFTRSAtLS0tLS0tLS0tLS0tLS0tLS0NCmNvbmZfcmF3IDwtIHJlYWRfZXhjZWwoDQogIGZpbGUucGF0aChkYWRvc19kaXIsICJjaWNsby1kZS1jcmVzY2ltZW50byAoMikueGxzeCIpLA0KICBzaGVldCA9ICJiYXNlX3ZhcmlhdmVpcyINCikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMikgVFJBVEFSIEEgQkFTRSAtLS0tLS0tLS0tLS0tLS0tLS0NCmNvbmYgPC0gY29uZl9yYXcgJT4lDQogIG11dGF0ZSgNCiAgICBkYXRhID0gYXMuRGF0ZShkYXRhKSwNCiAgICBJQ0MgPSBhcy5udW1lcmljKElDQyksDQogICAgSUNFID0gYXMubnVtZXJpYyhJQ0UpDQogICkgJT4lDQogIGZpbHRlcigNCiAgICBkYXRhID49IGFzLkRhdGUoIjIwMTQtMDEtMDEiKSwNCiAgICBkYXRhIDw9IGFzLkRhdGUoIjIwMTctMTItMzEiKQ0KICApICU+JQ0KICBhcnJhbmdlKGRhdGEpDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDMpIEdSw4FGSUNPIC0tLS0tLS0tLS0tLS0tLS0tLQ0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgDQogIGhjX2FkZF9zZXJpZXMoDQogICAgY29uZiwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSBkYXRhLCB5ID0gSUNDKSwNCiAgICBuYW1lID0gIklDQyIsDQogICAgY29sb3IgPSBBTUFSRUxPLA0KICAgIGxpbmVXaWR0aCA9IDIuNCwNCiAgICB6SW5kZXggPSA1DQogICkgJT4lDQogIA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGNvbmYsDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBoY2Flcyh4ID0gZGF0YSwgeSA9IElDRSksDQogICAgbmFtZSA9ICJJQ0UiLA0KICAgIGNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgbGluZVdpZHRoID0gMi40LA0KICAgIHpJbmRleCA9IDUNCiAgKSAlPiUNCiAgDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiSW5kaWNhZG9yZXMgZGUgY29uZmlhbsOnYSIsDQogICAgc3R5bGUgPSBsaXN0KA0KICAgICAgY29sb3IgPSBBWlVMX0VTQ1VSTywNCiAgICAgIGZvbnRXZWlnaHQgPSAiYm9sZCINCiAgICApDQogICkgJT4lDQogIA0KICBoY19zdWJ0aXRsZSgNCiAgICB0ZXh0ID0gIsONbmRpY2UgZGUgQ29uZmlhbsOnYSBkbyBDb25zdW1pZG9yIGUgw41uZGljZSBkZSBDb25maWFuw6dhIEVtcHJlc2FyaWFsLCAyMDE0IGEgMjAxNyIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIA0KICBoY194QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKQ0KICApICU+JQ0KICANCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiw41uZGljZSIpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKSwNCiAgICBncmlkTGluZUNvbG9yID0gIiNlZWVlZWUiDQogICkgJT4lDQogIA0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgY3Jvc3NoYWlycyA9IFRSVUUsDQogICAgdmFsdWVEZWNpbWFscyA9IDEsDQogICAgYmFja2dyb3VuZENvbG9yID0gIndoaXRlIiwNCiAgICBib3JkZXJDb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICANCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgbGluZSA9IGxpc3QoDQogICAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSkNCiAgICApDQogICkgJT4lDQogIA0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSINCiAgKSAlPiUNCiAgDQogIGhjX3JhbmdlU2VsZWN0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfc2Nyb2xsYmFyKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICANCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBGR1YvSUJSRSwgU29uZGFnZW0gZG8gQ29uc3VtaWRvciBlIFNvbmRhZ2VtIEVtcHJlc2FyaWFsLiINCiAgKSAlPiUNCiAgDQogIGhjX2NoYXJ0KA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBzYW5zLXNlcmlmIikNCiAgKQ0KYGBgDQoNCiMjIDIuNSBQSUIgZSBhIHByb2Z1bmRpZGFkZSBkYSBxdWVkYSBkYSBhdGl2aWRhZGUNCg0KQSBzw61udGVzZSBkZSB0b2RvcyBvcyBtb3ZpbWVudG9zIGFuYWxpc2Fkb3MgbmFzIHNlw6fDtWVzIGFudGVyaW9yZXMgYXBhcmVjZSBuYXMgQ29udGFzIE5hY2lvbmFpcy4gTyBQSUIgYnJhc2lsZWlybyByZWdpc3Ryb3UgdmFyaWHDp8O1ZXMgYW51YWlzIGRlICswLDUlIGVtIDIwMTQsIC0zLDUlIGVtIDIwMTUgZSAtMyw2JSBlbSAyMDE2LCBjb20gYSBlY29ub21pYSBlbmNvbGhlbmRvIHBvciBvbnplIHRyaW1lc3RyZXMgY29uc2VjdXRpdm9zIHF1YW5kbyBzZSBleGFtaW5hIGEgc8OpcmllIGRlc3Nhem9uYWxpemFkYS4gTyBHcsOhZmljbyAxOCB0b3JuYSB2aXPDrXZlbCBlc3NhIHNlcXXDqm5jaWE6IGFzIGNvbHVuYXMgZXNjdXJhcyBkZWxpbWl0YW0gZXhhdGFtZW50ZSBvcyBvbnplIHRyaW1lc3RyZXMgY29uc2VjdXRpdm9zIGRlIGNvbnRyYcOnw6NvIGVudHJlIG8gMlQvMjAxNCBlIG8gNFQvMjAxNiBkYXRhZG9zIHBlbG8gQ09EQUNFLg0KDQpQZWxhIMOzdGljYSBkYSBkZXNwZXNhLCBhIGNvbnRyYcOnw6NvIGZvaSBsaWRlcmFkYSBwZWxhIEZCQ0Yg4oCUIGN1amEgY29udHJpYnVpw6fDo28gbmVnYXRpdmEgcGFyYSBvIFBJQiBjaGVnb3UgYSBjZXJjYSBkZSAtMiw3IHBvbnRvcyBwZXJjZW50dWFpcyBlbSAyMDE1IOKAlCBlIHBlbG8gY29uc3VtbyBkYXMgZmFtw61saWFzLiBBcGVuYXMgYXMgZXhwb3J0YcOnw7VlcyBsw61xdWlkYXMgZSBvIGNvbnN1bW8gZG8gZ292ZXJubyBhcHJlc2VudGFyYW0gY29udHJpYnVpw6fDtWVzIG7Do28gbmVnYXRpdmFzIGVtIGFsZ3VucyB0cmltZXN0cmVzLCBzZW5kbyBhcyBleHBvcnRhw6fDtWVzIGJlbmVmaWNpYWRhcyBwZWxhIGRlcHJlY2lhw6fDo28gY2FtYmlhbCBlIG8gY29uc3VtbyBkbyBnb3Zlcm5vIGxpbWl0YWRvIHBlbG8gYXBlcnRvIGZpc2NhbCBkZSAyMDE1LiBQZWxhIMOzdGljYSBkYSBvZmVydGEsIGEgcXVlZGEgZm9pIHB1eGFkYSBwZWxhIGluZMO6c3RyaWEsIGNvbSBkZXN0YXF1ZSBwYXJhIGEgaW5kw7pzdHJpYSBkZSB0cmFuc2Zvcm1hw6fDo28gZSBhIGNvbnN0cnXDp8OjbyBjaXZpbCDigJQgZXN0YSDDumx0aW1hIGVzcGVjaWFsbWVudGUgYWZldGFkYSBwZWxhIHBhcmFsaXNhw6fDo28gZGUgb2JyYXMgdmluY3VsYWRhcyDDoCBPcGVyYcOnw6NvIExhdmEgSmF0by4NCg0KRW0gdGVybW9zIHBlciBjYXBpdGEsIGEgcXVlZGEgZm9pIGFpbmRhIG1haXMgc2V2ZXJhLCBhcHJveGltYW5kby1zZSBkZSAxMSUgYWN1bXVsYWRvcyBxdWFuZG8gZGVzY29udGFkbyBvIGNyZXNjaW1lbnRvIHBvcHVsYWNpb25hbC4gTyBjaG9xdWUgZm9pIHN1ZmljaWVudGUgcGFyYSBmYXplciBvIFBJQiBwZXIgY2FwaXRhIGJyYXNpbGVpcm8gcmV0cm9jZWRlciBhbyBuw612ZWwgb2JzZXJ2YWRvIHBvciB2b2x0YSBkZSAyMDA4IOKAlCBvdSBzZWphLCBhIHJlY2Vzc8OjbyBhbnVsb3UgcXVhc2UgdG9kbyBvIGF2YW7Dp28gZGUgYmVtLWVzdGFyIGFncmVnYWRvIGNvbnF1aXN0YWRvIGR1cmFudGUgbyBjaWNsbyBleHBhbnNpdm8gZGlzY3V0aWRvIG5hIHNlw6fDo28gYW50ZXJpb3IuDQoNCioqR3LDoWZpY28gMTgqKg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQojIFBhbGV0YSBkYSBMaWdhDQpBTUFSRUxPICAgICA8LSAiI2ZlYjcxMiINCkFaVUxfRVNDVVJPIDwtICIjMDIwMjNDIg0KQVpVTF9NRURJTyAgPC0gIiMwMDJjNWUiDQpDSU5aQSAgICAgICA8LSAiI2E2YTZhNiINClRFWFRPICAgICAgIDwtICIjM2EzYTNhIg0KQVpVTF9DTEFSTyAgPC0gIiM0NmIxZTEiDQoNCiMgVGFiZWxhIDU5MzIgLSBTSURSQS9JQkdFOiB2YXJpYcOnw6NvIHJlYWwgZG8gUElCIHRyaW1lc3RyYWwNCiMgKGVtIHJlbGHDp8OjbyBhbyBtZXNtbyBwZXLDrW9kbyBkbyBhbm8gYW50ZXJpb3IsIGVtICUpDQpicnV0byA8LSByZWFkX2V4Y2VsKGZpbGUucGF0aChkYWRvc19kaXIsICJ0YWJlbGE1OTMyLTMueGxzeCIpLCBzaGVldCA9ICJUYWJlbGEiLCBjb2xfbmFtZXMgPSBGQUxTRSkNCg0KIyBUcmltZXN0cmVzIG5hIGxpbmhhIDQsIHZhbG9yZXMgbmEgbGluaGEgNg0KdHJpbWVzdHJlcyA8LSBhcy5jaGFyYWN0ZXIodW5saXN0KGJydXRvWzQsIC0xXSkpDQp2YWxvcmVzICAgIDwtIGFzLm51bWVyaWModW5saXN0KGJydXRvWzYsIC0xXSkpDQoNCiMgQ29udmVydGVyICIxwrogdHJpbWVzdHJlIDIwMTQiIC0+IGRhdGEgZG8gcHJpbWVpcm8gbcOqcyBkbyB0cmltZXN0cmUNCnBhcnNlX3RyaW1lc3RyZSA8LSBmdW5jdGlvbih4KSB7DQogIHEgPC0gYXMuaW50ZWdlcihzdWJzdHIoeCwgMSwgMSkpDQogIHkgPC0gYXMuaW50ZWdlcihzdWJzdHIoeCwgbmNoYXIoeCkgLSAzLCBuY2hhcih4KSkpDQogIGFzLkRhdGUoc3ByaW50ZigiJWQtJTAyZC0wMSIsIHksIChxIC0gMSkgKiAzICsgMSkpDQp9DQoNCiMgUsOzdHVsbyBjdXJ0byBwYXJhIG8gZWl4byBYIChleC46ICJUMS8yMDE0IikNCnJvdHVsb19jdXJ0byA8LSBmdW5jdGlvbih4KSB7DQogIHEgPC0gc3Vic3RyKHgsIDEsIDEpDQogIHkgPC0gc3Vic3RyKHgsIG5jaGFyKHgpIC0gMywgbmNoYXIoeCkpDQogIHNwcmludGYoIlQlcy8lcyIsIHEsIHkpDQp9DQoNCnBpYiA8LSB0aWJibGUoDQogIHRyaW1lc3RyZSAgID0gdHJpbWVzdHJlcywNCiAgcm90dWxvICAgICAgPSBzYXBwbHkodHJpbWVzdHJlcywgcm90dWxvX2N1cnRvKSwNCiAgZGF0YSAgICAgICAgPSBzYXBwbHkodHJpbWVzdHJlcywgcGFyc2VfdHJpbWVzdHJlKSAlPiUgYXMuRGF0ZShvcmlnaW4gPSAiMTk3MC0wMS0wMSIpLA0KICB2YXJpYWNhbyAgICA9IHZhbG9yZXMNCikgJT4lDQogIG11dGF0ZSgNCiAgICBlbV9yZWNlc3NhbyA9IGRhdGEgPj0gYXMuRGF0ZSgiMjAxNC0wNC0wMSIpICYgZGF0YSA8PSBhcy5EYXRlKCIyMDE2LTEwLTAxIiksDQogICAgY29yICAgICAgICAgPSBpZl9lbHNlKGVtX3JlY2Vzc2FvLCBBWlVMX0VTQ1VSTywgQVpVTF9DTEFSTykNCiAgKQ0KDQojIENvbnN0cnVpciBvIGdyw6FmaWNvIGRlIGNvbHVuYXMgY29tIGhpZ2hjaGFydGVyDQpoY2hhcnQoDQogIHBpYiwNCiAgdHlwZSAgID0gImNvbHVtbiIsDQogIGhjYWVzKHggPSByb3R1bG8sIHkgPSB2YXJpYWNhbywgY29sb3IgPSBjb3IpLA0KICBuYW1lICAgPSAiUElCIGJyYXNpbGVpcm86IHZhcmlhw6fDo28gcmVhbCB0cmltZXN0cmFsICINCikgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgID0gIlBJQiBicmFzaWxlaXJvOiB2YXJpYcOnw6NvIHJlYWwgdHJpbWVzdHJhbCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gQVpVTF9FU0NVUk8sIGZvbnRXZWlnaHQgPSAiYm9sZCIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgID0gIk9uemUgdHJpbWVzdHJlcyBjb25zZWN1dGl2b3MgZGUgY29udHJhw6fDo28gZW50cmUgMlQvMjAxNCBlIDRULzIwMTYiLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gcGliJHJvdHVsbywNCiAgICB0aXRsZSAgICAgID0gbGlzdCh0ZXh0ID0gTlVMTCksDQogICAgbGFiZWxzICAgICA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKSwNCnBsb3RCYW5kcyAgPSBsaXN0KA0KDQogIGxpc3QoDQoNCiAgICBmcm9tICA9IHdoaWNoKHBpYiRyb3R1bG8gPT0gIlQyLzIwMTQiKSAtIDEuNSwNCg0KICAgIHRvICAgID0gd2hpY2gocGliJHJvdHVsbyA9PSAiVDQvMjAxNiIpIC0gMC41LA0KDQogICAgY29sb3IgPSAicmdiYSgxNjYsIDE2NiwgMTY2LCAwLjE1KSINCg0KICApDQoNCikNCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgICAgICAgICA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyAgICAgICAgPSBsaXN0KGZvcm1hdCA9ICJ7dmFsdWV9JSIsIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKSksDQogICAgcGxvdExpbmVzICAgICA9IGxpc3QobGlzdCh2YWx1ZSA9IDAsIGNvbG9yID0gVEVYVE8sIHdpZHRoID0gMSwgekluZGV4ID0gNCkpLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBoZWFkZXJGb3JtYXQgICAgPSAiPGI+e3BvaW50LmtleX08L2I+PGJyLz4iLA0KICAgIHBvaW50Rm9ybWF0ICAgICA9ICJWYXJpYcOnw6NvOiA8Yj57cG9pbnQueTorLjFmfSU8L2I+IiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAid2hpdGUiLA0KICAgIGJvcmRlckNvbG9yICAgICA9IEFaVUxfRVNDVVJPLA0KICAgIHN0eWxlICAgICAgICAgICA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIGNvbG9yQnlQb2ludCA9IFRSVUUsDQogICAgICBib3JkZXJXaWR0aCAgPSAwLA0KICAgICAgZ3JvdXBQYWRkaW5nID0gMC4wNQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgdGV4dCAgICA9ICJGb250ZTogSUJHRSDigJQgQ29udGFzIE5hY2lvbmFpcyBUcmltZXN0cmFpcyAoVGFiZWxhIDU5MzIvU0lEUkEpLiBEYXRhw6fDo286IENPREFDRS9GR1YtSUJSRS4iDQogICkgJT4lDQogIGhjX2NoYXJ0KHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBzYW5zLXNlcmlmIikpDQpgYGANCg0KIyMgMi42IFRyYW5zacOnw6NvIHBhcmEgYSByZWN1cGVyYcOnw6NvIGxlbnRhDQoNClRlY25pY2FtZW50ZSwgYSByZWNlc3PDo28gdGVybWlub3Ugbm8gcXVhcnRvIHRyaW1lc3RyZSBkZSAyMDE2LCBjb20gbyB2YWxlIGlkZW50aWZpY2FkbyBwZWxvIENPREFDRSBlbSBkZXplbWJybyBkYXF1ZWxlIGFuby4gTWFzLCBjb21vIG9jb3JyZSBlbSByZWNlc3PDtWVzIHByb2Z1bmRhcyBlIGRlIG5hdHVyZXphIGVzdHJ1dHVyYWwsIG8gZmltIGRhIGNvbnRyYcOnw6NvIG7Do28gc2lnbmlmaWNvdSBvIGZpbSBkYSBjcmlzZS4gQSByZWN1cGVyYcOnw6NvIHF1ZSBzZSBpbmljaW91IGVtIDIwMTcgbW9zdHJvdS1zZSBhIG1haXMgbGVudGEgZGEgaGlzdMOzcmlhIGVjb27DtG1pY2EgYnJhc2lsZWlyYSByZWNlbnRlOiBvIGNyZXNjaW1lbnRvIG3DqWRpbyBkbyBQSUIgbm9zIGFub3Mgc2VndWludGVzIGZpY291IGVtIHRvcm5vIGRlIDEsMyUgYW8gYW5vLCByaXRtbyBjbGFyYW1lbnRlIGluc3VmaWNpZW50ZSBwYXJhIHJlY29tcG9yIGFzIHBlcmRhcy4NCg0KUXVhdHJvIGZhdG9yZXMgYWp1ZGFtIGEgZXhwbGljYXIgZXNzYSBsZW50aWTDo28uIE8gcHJpbWVpcm8gw6kgbyBjYXLDoXRlciBkZSBiYWxhbmNlIHNoZWV0IHJlY2Vzc2lvbjogY29tbyB2aXN0byBuYXMgc2XDp8O1ZXMgYW50ZXJpb3JlcywgZmFtw61saWFzLCBlbXByZXNhcyBlIHNldG9yIHDDumJsaWNvIGVudHJhcmFtIHNpbXVsdGFuZWFtZW50ZSBlbSBwcm9jZXNzbyBkZSByZWR1w6fDo28gZGUgZW5kaXZpZGFtZW50bywgbyBxdWUgcHJvbG9uZ291IG8gY2ljbG8gZGUgZGVzYWxhdmFuY2FnZW0gcG9yIGFub3MgZSBsaW1pdG91IGEgcmVhw6fDo28gZGEgZGVtYW5kYSBhZ3JlZ2FkYS4gTyBzZWd1bmRvIMOpIGEgZnJhZ2lsaWRhZGUgZmlzY2FsLCBxdWUgcmVzdHJpbmdpdSBvIHVzbyBkZSBlc3TDrW11bG9zIHZpYSBnYXN0byBww7pibGljbyBlLCBhbyBjb250csOhcmlvLCBleGlnaXUgcmVmb3JtYXMgY29tbyBhIEVtZW5kYSBDb25zdGl0dWNpb25hbCBkbyBUZXRvIGRlIEdhc3RvcyAoRUMgOTUvMjAxNikgZSBhIFJlZm9ybWEgVHJhYmFsaGlzdGEgKDIwMTcpIGFwZW5hcyBwYXJhIGNvbnRlciBhIGRldGVyaW9yYcOnw6NvIGVzdHJ1dHVyYWwuIE8gdGVyY2Vpcm8gc8OjbyBhcyBjaWNhdHJpemVzIChzY2FycykgZGVpeGFkYXMgcGVsYSByZWNlc3PDo28gc29icmUgbyBjYXBpdGFsIGh1bWFubyBlIG8gZXN0b3F1ZSBkZSBjYXBpdGFsIGbDrXNpY286IHRyYWJhbGhhZG9yZXMgZGVzb2N1cGFkb3MgcG9yIGxvbmdvcyBwZXLDrW9kb3MgcGVyZGVtIHByb2R1dGl2aWRhZGUgZSBlbXByZWdhYmlsaWRhZGUsIGUgaW52ZXN0aW1lbnRvcyBuw6NvIHJlYWxpemFkb3MgbsOjbyBzw6NvIGZhY2lsbWVudGUgcmVjdXBlcmFkb3MgZW0gY2ljbG9zIHN1YnNlcXVlbnRlcyDigJQgcG9udG8gcXVlIGRpYWxvZ2EgZGlyZXRhbWVudGUgY29tIGEgZXN0YWduYcOnw6NvIGRhIHByb2R1dGl2aWRhZGUgZGlzY3V0aWRhIGVtIDIuMy4zLiBPIHF1YXJ0byBzw6NvIGFzIGluc3RhYmlsaWRhZGVzIHBvc3RlcmlvcmVzIHF1ZSBpbnRlcnJvbXBlcmFtIGEgcmV0b21hZGEgYW50ZXMgcXVlIGVsYSBzZSBjb25zb2xpZGFzc2U6IGEgZ3JldmUgZG9zIGNhbWluaG9uZWlyb3MgZW0gMjAxOCwgYSB0cmFuc2nDp8OjbyBwb2zDrXRpY2EgZGFxdWVsZSBhbm8gZSwgbWFpcyDDoCBmcmVudGUsIG8gY2hvcXVlIGRhIHBhbmRlbWlhIGVtIDIwMjAuDQoNCkEgcmVjZXNzw6NvIGRlIDIwMTTigJMyMDE2IGRlaXhhLCBhc3NpbSwgbGnDp8O1ZXMgaW1wb3J0YW50ZXMgcGFyYSBhIGxlaXR1cmEgZG9zIGNpY2xvcyBlY29uw7RtaWNvcyBicmFzaWxlaXJvcy4gQSBwcmltZWlyYSDDqSBxdWUgZXhwYW5zw7VlcyBwdXhhZGFzIHBvciBjb25zdW1vIGUgY3LDqWRpdG8sIHN1c3RlbnRhZGFzIHBvciBlc3TDrW11bG9zIGZpc2NhaXMgZSBwYXJhZmlzY2FpcywgdGVuZGVtIGEgZXNnb3Rhci1zZSBxdWFuZG8gb3MgZnVuZGFtZW50b3MgZGUgcHJvZHV0aXZpZGFkZSBuw6NvIGFjb21wYW5oYW0gbyByaXRtbyBkYSBkZW1hbmRhLiBBIHNlZ3VuZGEgw6kgcXVlIGNob3F1ZXMgZXh0ZXJub3MgbsOjbyBzw6NvLCBzb3ppbmhvcywgZGV0ZXJtaW5hbnRlcyDigJQgZWxlcyBhbXBsaWZpY2FtIHZ1bG5lcmFiaWxpZGFkZXMgaW50ZXJuYXMgcHLDqS1leGlzdGVudGVzLiBBIHRlcmNlaXJhIMOpIHF1ZSBhIGNyZWRpYmlsaWRhZGUgZGEgcG9sw610aWNhIGVjb27DtG1pY2Egw6kgdW0gaW5zdW1vIG1hY3JvZWNvbsO0bWljbyByZWxldmFudGU6IHN1YSBwZXJkYSBlbGV2YSBhIGluY2VydGV6YSwgZGVwcmltZSBleHBlY3RhdGl2YXMgZSB0cmFuc2Zvcm1hIG8gcXVlIHNlcmlhIHVtYSBkZXNhY2VsZXJhw6fDo28gZW0gcmVjZXNzw6NvIHByb2Z1bmRhLg0KDQpFc3NhcyBsacOnw7VlcyBzZXJ2ZW0gZGUgcGFubyBkZSBmdW5kbyBwYXJhIGEgcHLDs3hpbWEgc2XDp8OjbywgZW0gcXVlIHNlcsOhIGV4YW1pbmFkbyBvIG1vbWVudG8gYXR1YWwgZGEgZWNvbm9taWEgYnJhc2lsZWlyYSDigJQgYnVzY2FuZG8gYXZhbGlhciBlbSBxdWUgbWVkaWRhIG9zIGFycmFuam9zIGluc3RpdHVjaW9uYWlzIGUgb3MgZnVuZGFtZW50b3MgbWFjcm9lY29uw7RtaWNvcyBww7NzLXJlY2Vzc8OjbyBhbHRlcmFyYW0gYSBkaW7Dom1pY2EgY8OtY2xpY2EgZG8gcGHDrXMsIGUgcXVhaXMgZG9zIGxlZ2Fkb3MgZGUgMjAxNOKAkzIwMTYgYWluZGEgY29uZGljaW9uYW0gbyBjaWNsbyBwcmVzZW50ZS4NCg0KIyAzLiBCcmFzaWwgYXR1YWwNCg0KRGUgYWNvcmRvIGNvbSBhcyBkYXRhcyBvZmljaWFpcyBkbyBDT0RBQ0UsIG8gw7psdGltbyBjaWNsbyBlY29uw7RtaWNvIGJyYXNpbGVpcm8gLSBjYXJhY3Rlcml6YWRvIGNvbW8gdW1hIHJlY2Vzc8OjbyAtIGZvaSBlbmNlcnJhZG8gbm8gc2VndW5kbyB0cmltZXN0cmUgZGUgMjAyMC4gQXTDqSBvIG1vbWVudG8gZGEgcHVibGljYcOnw6NvIGRlc3RlIHJlbGF0w7NyaW8sIG7Do28gaG91dmUgZGl2dWxnYcOnw6NvIG9maWNpYWwgc29icmUgbyBwZXLDrW9kbyBzdWJzZXF1ZW50ZSwgZGUgbW9kbyBxdWUgbsOjbyBzZSBzYWJlIGZvcm1hbG1lbnRlIHNlIGEgZWNvbm9taWEgYnJhc2lsZWlyYSBzZSBlbmNvbnRyYSBlbSB1bWEgZmFzZSBkZSBleHBhbnPDo28gb3UgcmVjZXNzw6NvLg0KTm8gZW50YW50bywgY29tbyBkaXNjdXRpZG8gYW50ZXJpb3JtZW50ZSwgaW5kZXBlbmRlbnRlbWVudGUgZGEgZmFzZSBkbyBjaWNsbyBlY29uw7RtaWNvLCDDqSBwb3Nzw612ZWwgaWRlbnRpZmljYXIgcGFkcsO1ZXMsIHBvbnRvcyBmb3J0ZXMgZSBkZXNlcXVpbMOtYnJpb3MgZXN0cnV0dXJhaXMgbmEgZWNvbm9taWEuIEFzc2ltLCBlc3RhIHNlw6fDo28gYnVzY2EgYW5hbGlzYXIgYWxndW5zIGluZGljYWRvcmVzIGRvIEJyYXNpbCBhdHVhbCDDoCBsdXogZG8gaGlzdMOzcmljbyBhcHJlc2VudGFkbyBhbyBsb25nbyBkbyByZWxhdMOzcmlvLCBvYnNlcnZhbmRvIHF1YWlzIGZyYWdpbGlkYWRlcyBwZXJzaXN0ZW0gZSBxdWFpcyB0cmFuc2Zvcm1hw6fDtWVzIHBvZGVtIHNlciBwZXJjZWJpZGFzIG5hIGVjb25vbWlhIGJyYXNpbGVpcmEuDQoNCiMjIDMuMSBFc3RydXR1cmEgcHJvZHV0aXZhIGUgaW52ZXN0aW1lbnRvDQoNCkEgYW7DoWxpc2UgZG8gY2ljbG8gYXR1YWwgY29tZcOnYSBwZWxhIGNvbXBvc2nDp8OjbyBzZXRvcmlhbCBkbyBwcm9kdXRvLiBPIHJpdG1vIGRhIGV4cGFuc8OjbyBpbXBvcnRhLCBtYXMgbyBxdWUgZGVmaW5lIHNlIGVsYSDDqSBzdXN0ZW50w6F2ZWwgbm8gbG9uZ28gcHJhem8gw6kgYSBlc3RydXR1cmEgcG9yIHRyw6FzOiBxdWFpcyBzZXRvcmVzIGVzdMOjbyBwdXhhbmRvIG8gY3Jlc2NpbWVudG8sIGVtIHF1ZSBwcm9wb3LDp8OjbywgZSBzZSBlc3NhIHByb3BvcsOnw6NvIHNlIGFsdGVyYSBhbyBsb25nbyBkbyB0ZW1wby4gQXNzaW0sIGEgcXVlc3TDo28gY2VudHJhbCDDqSBvYnNlcnZhciBzZSBhIGVjb25vbWlhIGJyYXNpbGVpcmEgZXN0w6EgcGFzc2FuZG8gcG9yIHVtYSB0cmFuc2Zvcm1hw6fDo28gZXN0cnV0dXJhbCBvdSBzZSBjb250aW51YSBjcmVzY2VuZG8gZGVudHJvIGRvIG1lc21vIHBhZHLDo28gb2JzZXJ2YWRvIGVtIGNpY2xvcyBhbnRlcmlvcmVzLg0KDQoqKkdyw6FmaWNvIDE5OioqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoc3RyaW5ncikNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQoNCm1hdHJpel9waWIgPC0gbWF0cml4KA0KICBjKA0KICAgICIzwrogdHJpbWVzdHJlIDIwMjAiLCAiQWdyb3BlY3XDoXJpYSIsICIxMDA0ODMiLA0KICAgICIzwrogdHJpbWVzdHJlIDIwMjAiLCAiSW5kw7pzdHJpYSIsICI0MDUyNDgiLA0KICAgICIzwrogdHJpbWVzdHJlIDIwMjAiLCAiU2VydmnDp29zIiwgIjExNTUzMDYiLA0KICAgICI0wrogdHJpbWVzdHJlIDIwMjAiLCAiQWdyb3BlY3XDoXJpYSIsICI3Njk2NSIsDQogICAgIjTCuiB0cmltZXN0cmUgMjAyMCIsICJJbmTDunN0cmlhIiwgIjM5OTQwMyIsDQogICAgIjTCuiB0cmltZXN0cmUgMjAyMCIsICJTZXJ2acOnb3MiLCAiMTI3MzA3NSIsDQogICAgIjHCuiB0cmltZXN0cmUgMjAyMSIsICJBZ3JvcGVjdcOhcmlhIiwgIjI0NDA2OCIsDQogICAgIjHCuiB0cmltZXN0cmUgMjAyMSIsICJJbmTDunN0cmlhIiwgIjQyNjgyMiIsDQogICAgIjHCuiB0cmltZXN0cmUgMjAyMSIsICJTZXJ2acOnb3MiLCAiMTE4NDMwMyIsDQogICAgIjLCuiB0cmltZXN0cmUgMjAyMSIsICJBZ3JvcGVjdcOhcmlhIiwgIjE2OTA2NCIsDQogICAgIjLCuiB0cmltZXN0cmUgMjAyMSIsICJJbmTDunN0cmlhIiwgIjQ5MzA0MCIsDQogICAgIjLCuiB0cmltZXN0cmUgMjAyMSIsICJTZXJ2acOnb3MiLCAiMTI0Mzk0OSIsDQogICAgIjPCuiB0cmltZXN0cmUgMjAyMSIsICJBZ3JvcGVjdcOhcmlhIiwgIjEwNjg4NiIsDQogICAgIjPCuiB0cmltZXN0cmUgMjAyMSIsICJJbmTDunN0cmlhIiwgIjU1NTc2OSIsDQogICAgIjPCuiB0cmltZXN0cmUgMjAyMSIsICJTZXJ2acOnb3MiLCAiMTI5MzY4MiIsDQogICAgIjTCuiB0cmltZXN0cmUgMjAyMSIsICJBZ3JvcGVjdcOhcmlhIiwgIjcxMDY3IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIxIiwgIkluZMO6c3RyaWEiLCAiNTE4MTY4IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIxIiwgIlNlcnZpw6dvcyIsICIxNDA3MTgwIiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIyIiwgIkFncm9wZWN1w6FyaWEiLCAiMTcwNDA4IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIyIiwgIkluZMO6c3RyaWEiLCAiNDk0MTcwIiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIyIiwgIlNlcnZpw6dvcyIsICIxMzE4NjAzIiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIyIiwgIkFncm9wZWN1w6FyaWEiLCAiMTYyNDg1IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIyIiwgIkluZMO6c3RyaWEiLCAiNTk0OTcwIiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIyIiwgIlNlcnZpw6dvcyIsICIxNDI4MDIyIiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIyIiwgIkFncm9wZWN1w6FyaWEiLCAiMTQ1NzA1IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIyIiwgIkluZMO6c3RyaWEiLCAiNjE3MDk4IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIyIiwgIlNlcnZpw6dvcyIsICIxNDk2NzE3IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIyIiwgIkFncm9wZWN1w6FyaWEiLCAiMTAyNzQ1IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIyIiwgIkluZMO6c3RyaWEiLCAiNTkzODg5IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIyIiwgIlNlcnZpw6dvcyIsICIxNjExNjYzIiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIzIiwgIkFncm9wZWN1w6FyaWEiLCAiMTk2NDg2IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIzIiwgIkluZMO6c3RyaWEiLCAiNTYyOTc3IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIzIiwgIlNlcnZpw6dvcyIsICIxNTAxMjQwIiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIzIiwgIkFncm9wZWN1w6FyaWEiLCAiMTk0MzI3IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIzIiwgIkluZMO6c3RyaWEiLCAiNjAzMTQ0IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIzIiwgIlNlcnZpw6dvcyIsICIxNTkyNzM3IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIzIiwgIkFncm9wZWN1w6FyaWEiLCAiMTU3MTQ5IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIzIiwgIkluZMO6c3RyaWEiLCAiNjIwMjI2IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIzIiwgIlNlcnZpw6dvcyIsICIxNjI5MDYwIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIzIiwgIkFncm9wZWN1w6FyaWEiLCAiMTExMTYyIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIzIiwgIkluZMO6c3RyaWEiLCAiNjM2OTY2IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIzIiwgIlNlcnZpw6dvcyIsICIxNzUzMTE4IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI0IiwgIkFncm9wZWN1w6FyaWEiLCAiMTkwNzQ5IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI0IiwgIkluZMO6c3RyaWEiLCAiNTcyMzE1IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI0IiwgIlNlcnZpw6dvcyIsICIxNjE5MTc1IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI0IiwgIkFncm9wZWN1w6FyaWEiLCAiMjAzNjg0IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI0IiwgIkluZMO6c3RyaWEiLCAiNjE5MDU3IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI0IiwgIlNlcnZpw6dvcyIsICIxNzA4MTE3IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI0IiwgIkFncm9wZWN1w6FyaWEiLCAiMTcwODc0IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI0IiwgIkluZMO6c3RyaWEiLCAiNjQzOTcxIiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI0IiwgIlNlcnZpw6dvcyIsICIxNzY3MjExIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI0IiwgIkFncm9wZWN1w6FyaWEiLCAiMTEyMjY4IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI0IiwgIkluZMO6c3RyaWEiLCAiNjMxMzEzIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI0IiwgIlNlcnZpw6dvcyIsICIxODc1MzY4IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI1IiwgIkFncm9wZWN1w6FyaWEiLCAiMjQ1NTgyIiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI1IiwgIkluZMO6c3RyaWEiLCAiNTkyNjI0IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI1IiwgIlNlcnZpw6dvcyIsICIxNzYxMzUxIiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI1IiwgIkFncm9wZWN1w6FyaWEiLCAiMjUxOTc2IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI1IiwgIkluZMO6c3RyaWEiLCAiNjQzNjA0IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI1IiwgIlNlcnZpw6dvcyIsICIxODc2MTM3IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI1IiwgIkFncm9wZWN1w6FyaWEiLCAiMTc2MTkxIiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI1IiwgIkluZMO6c3RyaWEiLCAiNjgyMTU1IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI1IiwgIlNlcnZpw6dvcyIsICIxOTI4MDEyIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI1IiwgIkFncm9wZWN1w6FyaWEiLCAiMTAxNTQ4IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI1IiwgIkluZMO6c3RyaWEiLCAiNjQ4NDMxIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI1IiwgIlNlcnZpw6dvcyIsICIyMDQ0MzcwIg0KICApLA0KICBuY29sID0gMywNCiAgYnlyb3cgPSBUUlVFDQopDQoNCmNvbG5hbWVzKG1hdHJpel9waWIpIDwtIGMoInRyaW1lc3RyZSIsICJzZXRvciIsICJ2YWxvciIpDQoNCnBpYjIgPC0gYXMuZGF0YS5mcmFtZShtYXRyaXpfcGliKSAlPiUNCiAgbXV0YXRlKA0KICAgIHZhbG9yID0gYXMubnVtZXJpYyh2YWxvciksDQogICAgYW5vID0gYXMuaW50ZWdlcihzdHJfZXh0cmFjdCh0cmltZXN0cmUsICJcXGR7NH0iKSksDQogICAgdHJpbSA9IGFzLmludGVnZXIoc3RyX2V4dHJhY3QodHJpbWVzdHJlLCAiXlxcZCIpKSwNCiAgICBtZXMgPSBjYXNlX3doZW4oDQogICAgICB0cmltID09IDEgfiAiMDEiLA0KICAgICAgdHJpbSA9PSAyIH4gIjA0IiwNCiAgICAgIHRyaW0gPT0gMyB+ICIwNyIsDQogICAgICB0cmltID09IDQgfiAiMTAiDQogICAgKSwNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLSIsIG1lcywgIi0wMSIpKSwNCiAgICBkYXRhX21zID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGEpDQogICkNCg0KZ3JhZmljb19waWJfc2V0b3IgPC0gaGlnaGNoYXJ0KCkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiUElCIHBvciBTZXRvciDigJQgQnJhc2lsIiwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIyMHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzExMTExMSIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiVmFsb3JlcyBhIHByZcOnb3MgY29ycmVudGVzIChSJCBtaWxow7Vlcykg4oCUIDNUMjAyMCBhIDRUMjAyNSIsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTNweCIsIGNvbG9yID0gIiM2NjY2NjYiKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBwaWIyICU+JSBmaWx0ZXIoc2V0b3IgPT0gIkFncm9wZWN1w6FyaWEiKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSBkYXRhX21zLCB5ID0gdmFsb3IpLA0KICAgIG5hbWUgPSAiQWdyb3BlY3XDoXJpYSIsDQogICAgY29sb3IgPSAiIzQ2QjFFMSIsDQogICAgbGluZVdpZHRoID0gMi41LA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBwaWIyICU+JSBmaWx0ZXIoc2V0b3IgPT0gIkluZMO6c3RyaWEiKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSBkYXRhX21zLCB5ID0gdmFsb3IpLA0KICAgIG5hbWUgPSAiSW5kw7pzdHJpYSIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgbGluZVdpZHRoID0gMi41LA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBwaWIyICU+JSBmaWx0ZXIoc2V0b3IgPT0gIlNlcnZpw6dvcyIpLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgaGNhZXMoeCA9IGRhdGFfbXMsIHkgPSB2YWxvciksDQogICAgbmFtZSA9ICJTZXJ2acOnb3MiLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIHR5cGUgPSAiZGF0ZXRpbWUiLA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gTlVMTCksDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlIkIG1pbGjDtWVzIiwgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICB2YWx1ZVN1ZmZpeCA9ICIgbWkiLA0KICAgIHZhbHVlRGVjaW1hbHMgPSAwLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCINCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgc2VyaWVzID0gbGlzdCgNCiAgICAgIGFuaW1hdGlvbiA9IEZBTFNFLA0KICAgICAgc3RhdGVzID0gbGlzdChpbmFjdGl2ZSA9IGxpc3Qob3BhY2l0eSA9IDEpKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLA0KICAgIHNwYWNpbmdUb3AgPSAyMCwNCiAgICBzcGFjaW5nUmlnaHQgPSAyMCwNCiAgICBzcGFjaW5nQm90dG9tID0gMjAsDQogICAgc3BhY2luZ0xlZnQgPSAyMA0KICApICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IElCR0UvQ29udGFzIE5hY2lvbmFpcy4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iDQogICkNCg0KZ3JhZmljb19waWJfc2V0b3INCmBgYA0KDQoNCkNvbW8gb2JzZXJ2YWRvIG5vIGdyw6FmaWNvIFgsIG5vIHRlcmNlaXJvIHRyaW1lc3RyZSBkZSAyMDIwLCBvIHNldG9yIGRlIHNlcnZpw6dvcyAobGluaGEgYXp1bCBlc2N1cmEpIHJlc3BvbmRpYSBwb3IgYXByb3hpbWFkYW1lbnRlIFJcJCAxLDE1IHRyaWxow6NvIGRvIFBJQiBicmFzaWxlaXJvLCBlbnF1YW50byBhIGluZMO6c3RyaWEgKGxpbmhhIGFtYXJlbGEpIHJlcHJlc2VudGF2YSBjZXJjYSBkZSBSXCQgNDA1IGJpbGjDtWVzIGUgYSBhZ3JvcGVjdcOhcmlhIChsaW5oYSBhenVsIGNsYXJhKSBhcHJveGltYWRhbWVudGUgUlwkIDEwMCBiaWxow7Vlcy4gTm8gcGVyw61vZG8gbWFpcyByZWNlbnRlIGRhIHPDqXJpZSwgY29ycmVzcG9uZGVudGUgYW8gcXVhcnRvIHRyaW1lc3RyZSBkZSAyMDI1LCBvcyBzZXJ2acOnb3MgcGFzc2FyYW0gcGFyYSBhcHJveGltYWRhbWVudGUgUlwkMiwwNCB0cmlsaMO1ZXMsIGVucXVhbnRvIGEgaW5kw7pzdHJpYSBhdGluZ2l1IGNlcmNhIGRlIFJcJDY0OCBiaWxow7Vlcy4gQSBhZ3JvcGVjdcOhcmlhLCBwb3Igc3VhIHZleiwgcGVybWFuZWNldSBwcsOzeGltYSBkZSBSJDEwMCBiaWxow7VlcywgZW1ib3JhIGVzc2EgY29tcGFyYcOnw6NvIGRldmUgY29uc2lkZXJhciBvcyBlZmVpdG9zIGRlIHNhem9uYWxpZGFkZSBjYXJhY3RlcsOtc3RpY29zIGRvIHNldG9yLg0KDQpFbSB0ZXJtb3MgYWJzb2x1dG9zLCB0b2RvcyBvcyBzZXRvcmVzIGNyZXNjZXJhbSBhbyBsb25nbyBkbyBwZXLDrW9kbyBhbmFsaXNhZG8uIE8gbWFpcyByZWxldmFudGUsIHBvcsOpbSwgZXN0w6EgbmEgY29tcG9zacOnw6NvIHJlbGF0aXZhIGRvIFBJQi4gTyBzZXRvciBkZSBzZXJ2acOnb3MgY29udGludWEgY29uY2VudHJhbmRvIG1haXMgZGUgNjAlIGRhIGF0aXZpZGFkZSBlY29uw7RtaWNhIGJyYXNpbGVpcmEgZSBhbXBsaW91IGFpbmRhIG1haXMgc3VhIHBhcnRpY2lwYcOnw6NvIGFvIGxvbmdvIGRhIHPDqXJpZSwgZW5xdWFudG8gYSBpbmTDunN0cmlhIHBlcm1hbmVjZSByZWxhdGl2YW1lbnRlIGVzdGFnbmFkYSBlbSB0ZXJtb3MgcGVyY2VudHVhaXMuDQpPIHByb2JsZW1hIGJyYXNpbGVpcm8sIGVudMOjbywgbsOjbyDDqSBzaW1wbGVzbWVudGUgYSBwcmVkb21pbsOibmNpYSBkbyBzZXRvciBkZSBzZXJ2acOnb3MgLSBjYXJhY3RlcsOtc3RpY2EgY29tdW0gdGFtYsOpbSBhIHbDoXJpYXMgZWNvbm9taWFzLCBpbmNsdXNpdmUgZGVzZW52b2x2aWRhcy4gTyBwcm9ibGVtYSBlc3TDoSBuYSBhdXPDqm5jaWEgZGUgYXZhbsOnbyByZWxhdGl2byBkYSBpbmTDunN0cmlhIGUgbmEgbGltaXRhZGEgdHJhbnNmb3JtYcOnw6NvIGVzdHJ1dHVyYWwgZGEgZWNvbm9taWEuIEFzc2ltIGNvbW8gb2JzZXJ2YWRvIG5vIGNpY2xvIGRlIGV4cGFuc8OjbyBkZSAyMDA44oCTMjAxNCwgbyBjcmVzY2ltZW50byByZWNlbnRlIGRhIGVjb25vbWlhIGJyYXNpbGVpcmEgY29udGludWEgY29uY2VudHJhZG8gZW0gc2V0b3JlcyBxdWUgasOhIGVyYW0gcHJlZG9taW5hbnRlcyBhbnRlcmlvcm1lbnRlLCBzZW0gbXVkYW7Dp2FzIHNpZ25pZmljYXRpdmFzIG5hIGNvbXBvc2nDp8OjbyBwcm9kdXRpdmEgZG8gcGHDrXMuDQoNCkEgY29tcG9zacOnw6NvIHNldG9yaWFsIGRhIGVjb25vbWlhIGFqdWRhIGEgZW50ZW5kZXIgY29tbyBvIHBhw61zIGNyZXNjZS4gTyBpbnZlc3RpbWVudG8sIHBvciBvdXRybyBsYWRvLCBhanVkYSBhIGVudGVuZGVyIHNlIGVzc2UgY3Jlc2NpbWVudG8gcG9zc3VpIGNhcGFjaWRhZGUgZGUgc3VzdGVudGHDp8OjbyBubyBsb25nbyBwcmF6by4gTmVzc2Ugc2VudGlkbywgbyBncsOhZmljbyBYIGFwcmVzZW50YSBhIGV2b2x1w6fDo28gZGEgRm9ybWHDp8OjbyBCcnV0YSBkZSBDYXBpdGFsIEZpeG8gKEZCQ0YpIGVtIGNvbmp1bnRvIGNvbSBhIHRheGEgU2VsaWMgZW50cmUgMjAyMCBlIDIwMjUuDQoNCioqR3LDoWZpY28gMjA6KioNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KEdldEJDQkRhdGEpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQpmYmNmMiA8LSBkYXRhLmZyYW1lKA0KICBwZXJpb2RvID0gYygNCiAgICAiMjAyMCBUMyIsICIyMDIwIFQ0IiwNCiAgICAiMjAyMSBUMSIsICIyMDIxIFQyIiwgIjIwMjEgVDMiLCAiMjAyMSBUNCIsDQogICAgIjIwMjIgVDEiLCAiMjAyMiBUMiIsICIyMDIyIFQzIiwgIjIwMjIgVDQiLA0KICAgICIyMDIzIFQxIiwgIjIwMjMgVDIiLCAiMjAyMyBUMyIsICIyMDIzIFQ0IiwNCiAgICAiMjAyNCBUMSIsICIyMDI0IFQyIiwgIjIwMjQgVDMiLCAiMjAyNCBUNCIsDQogICAgIjIwMjUgVDEiLCAiMjAyNSBUMiIsICIyMDI1IFQzIiwgIjIwMjUgVDQiDQogICksDQogIHZhcmlhY2FvID0gYygNCiAgICAtOC44MiwgMTAuNDMsDQogICAgMTEuNjgsIDI2LjY1LCAxNC44MCwgMS43MSwNCiAgICAtNS45MSwgMS45OSwgNS4wNywgMy4yMywNCiAgICAxLjQ1LCAtMS41NSwgLTYuODQsIC00LjQyLA0KICAgIDIuNTcsIDUuMjMsIDEwLjI3LCA5LjIxLA0KICAgIDkuMDEsIDQuMTEsIDIuMzIsIC0zLjEyDQogICkNCikgJT4lDQogIG11dGF0ZSgNCiAgICBhbm8gPSBhcy5pbnRlZ2VyKHN1YnN0cihwZXJpb2RvLCAxLCA0KSksDQogICAgdHJpbSA9IGFzLmludGVnZXIoc3Vic3RyKHBlcmlvZG8sIDcsIDcpKSwNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLSIsIGZvcm1hdEModHJpbSAqIDMgLSAyLCB3aWR0aCA9IDIsIGZsYWcgPSAiMCIpLCAiLTE1IikpLA0KICAgIGRhdGFfbXMgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoZGF0YSwgdHogPSAiVVRDIikpICogMTAwMA0KICApDQoNCnNlbGljX3JhdyA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IGMoU2VsaWMgPSA0MzIpLA0KICBmaXJzdC5kYXRlID0gIjIwMjAtMDctMDEiLA0KICBsYXN0LmRhdGUgID0gIjIwMjUtMTItMzEiLA0KICBmb3JtYXQuZGF0YSA9ICJ3aWRlIg0KKSAlPiUNCiAgcmVuYW1lKGRhdGUgPSByZWYuZGF0ZSwgc2VsaWMgPSBTZWxpYykgJT4lDQogIG11dGF0ZSh0cmltZXN0cmUgPSBmbG9vcl9kYXRlKGFzLkRhdGUoZGF0ZSksICJxdWFydGVyIikpICU+JQ0KICBncm91cF9ieSh0cmltZXN0cmUpICU+JQ0KICBzdW1tYXJpc2Uoc2VsaWMgPSBsYXN0KG5hLm9taXQoc2VsaWMpKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lDQogIG11dGF0ZShkYXRhX21zID0gYXMubnVtZXJpYyhhcy5QT1NJWGN0KHRyaW1lc3RyZSwgdHogPSAiVVRDIikpICogMTAwMCkNCg0KZGFkb3NfZmJjZiAgPC0gZmJjZjIgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YXJpYWNhbykNCmRhZG9zX3NlbGljIDwtIHNlbGljX3JhdyAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHNlbGljKQ0KDQpncmFmaWNvX2ZiY2Zfc2VsaWMgPC0gaGlnaGNoYXJ0KCkgJT4lDQogIGhjX2NoYXJ0KA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBzcGFjaW5nVG9wID0gMjAsDQogICAgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgc3BhY2luZ0JvdHRvbSA9IDIwLA0KICAgIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCiAgaGNfdGl0bGUoDQogICAgdGV4dCA9ICJGb3JtYcOnw6NvIEJydXRhIGRlIENhcGl0YWwgRml4byBlIFRheGEgU2VsaWMgLSBCcmFzaWwiLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjE4cHgiLCBmb250V2VpZ2h0ID0gImJvbGQiLCBjb2xvciA9ICIjMDIwMjNDIikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJGQkNGOiB2YXJpYcOnw6NvIGFudWFsICglKSB8IFNlbGljOiAlIGEuYS4tIDNUMjAyMCBhIDRUMjAyNSIsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTJweCIsIGNvbG9yID0gIiM2NjY2NjYiKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19mYmNmKSwNCiAgICB0eXBlID0gImNvbHVtbiIsDQogICAgbmFtZSA9ICJGQkNGIFZhcmlhw6fDo28gYW51YWwgKCUpIiwNCiAgICBjb2xvciA9ICIjRkVCMDE1IiwNCiAgICB5QXhpcyA9IDAsDQogICAgcG9pbnRQYWRkaW5nID0gMC4wNSwNCiAgICBncm91cFBhZGRpbmcgPSAwLjA4LA0KICAgIGJvcmRlcldpZHRoID0gMA0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19zZWxpYyksDQogICAgdHlwZSA9ICJzcGxpbmUiLA0KICAgIG5hbWUgPSAiU2VsaWMgKCUgYS5hLikiLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHlBeGlzID0gMQ0KICApICU+JQ0KICBoY194QXhpcygNCiAgICB0eXBlID0gImRhdGV0aW1lIiwNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxpbmVDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICB0aWNrQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgdGlja0xlbmd0aCA9IDAsDQogICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjExcHgiKSkNCiAgKSAlPiUNCiAgaGNfeUF4aXNfbXVsdGlwbGVzKA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJGQkNGIFZhcmlhw6fDo28gYW51YWwgKCUpIiwNCiAgICAgICAgICAgICAgICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjExcHgiKSksDQogICAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiksIGZvcm1hdCA9ICJ7dmFsdWV9IiksDQogICAgICBvcHBvc2l0ZSA9IEZBTFNFLA0KICAgICAgZ3JpZExpbmVDb2xvciA9ICIjRUVFRUVFIiwNCiAgICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICAgIGxpc3QodmFsdWUgPSAwLCBjb2xvciA9ICIjOUU5RTlFIiwgd2lkdGggPSAxLCB6SW5kZXggPSA1LCBkYXNoU3R5bGUgPSAiU2hvcnREYXNoIikNCiAgICAgICkNCiAgICApLA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJTZWxpYyAoJSBhLmEuKSIsDQogICAgICAgICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMXB4IikpLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpLCBmb3JtYXQgPSAie3ZhbHVlfSIpLA0KICAgICAgb3Bwb3NpdGUgPSBUUlVFLA0KICAgICAgZ3JpZExpbmVXaWR0aCA9IDAsDQogICAgICBtaW4gPSAwLA0KICAgICAgbWF4ID0gMTgNCiAgICApDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICB2YWx1ZURlY2ltYWxzID0gMiwNCiAgICB2YWx1ZVN1ZmZpeCA9ICIlIiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgYm9yZGVyQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgYm9yZGVyUmFkaXVzID0gOCwNCiAgICBzaGFkb3cgPSBGQUxTRSwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTJweCIpDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCIsDQogICAgaXRlbVN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiwgZm9udFdlaWdodCA9ICJub3JtYWwiLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgc2VyaWVzID0gbGlzdCgNCiAgICAgIGFuaW1hdGlvbiA9IEZBTFNFLA0KICAgICAgc3RhdGVzID0gbGlzdChpbmFjdGl2ZSA9IGxpc3Qob3BhY2l0eSA9IDEpKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFL0NvbnRhcyBOYWNpb25haXM7IEJDQiAoU0dTIDQzMikuIEVsYWJvcmHDp28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9ICIjNzc3Nzc3IikNCiAgKQ0KDQpncmFmaWNvX2ZiY2Zfc2VsaWMNCmBgYA0KDQpDb21vIG9ic2VydmFkbyBubyBncsOhZmljbyBYLCBhIEZCQ0YgY29udGludWEgYXByZXNlbnRhbmRvIGZvcnRlIG9zY2lsYcOnw6NvIGFvIGxvbmdvIGRvIHBlcsOtb2RvLCBzZW0gZXN0YWJlbGVjZXIgdW1hIHRyYWpldMOzcmlhIGNvbnNpc3RlbnRlIGRlIGNyZXNjaW1lbnRvLiBNZXNtbyBub3MgbW9tZW50b3MgZGUgcmVjdXBlcmHDp8OjbyBkbyBpbnZlc3RpbWVudG8sIG8gbW92aW1lbnRvIG7Do28gc2Ugc3VzdGVudGEgcG9yIGxvbmdvcyBwZXLDrW9kb3MsIHJlcHJvZHV6aW5kbyB1bSBwYWRyw6NvIGrDoSBvYnNlcnZhZG8gZW0gY2ljbG9zIGFudGVyaW9yZXMgZGEgZWNvbm9taWEgYnJhc2lsZWlyYS4NCg0KTyBwaWNvIGRhIHPDqXJpZSBvY29ycmV1IGVtIGFicmlsIGRlIDIwMjEsIHF1YW5kbyBhIHZhcmlhw6fDo28gYW51YWwgZGEgRkJDRiBhdGluZ2l1IGFwcm94aW1hZGFtZW50ZSAyNiwyNSUuIE5vIGVudGFudG8sIG8gbW92aW1lbnRvIHBlcmRldSBmb3LDp2EgcmFwaWRhbWVudGUsIGNoZWdhbmRvIGEgLTYsODQlIGVtIGp1bmhvIGRlIDIwMjMuIE1lc21vIG5vcyBkYWRvcyBtYWlzIHJlY2VudGVzLCBhIGluc3RhYmlsaWRhZGUgcGVybWFuZWNlIGV2aWRlbnRlOiBlbSBqdWxobyBkZSAyMDI1LCBhIEZCQ0YgcmVnaXN0cmF2YSBjcmVzY2ltZW50byBkZSBhcHJveGltYWRhbWVudGUgMiwzMiUsIG1hcyB2b2x0b3UgcGFyYSAtMywxMiUgZW0gb3V0dWJybyBkbyBtZXNtbyBhbm8uIEFzc2ltLCBhIHByaW5jaXBhbCBjYXJhY3RlcsOtc3RpY2Egb2JzZXJ2YWRhIG5hIHPDqXJpZSDDqSBqdXN0YW1lbnRlIGEgYXVzw6puY2lhIGRlIHVtYSB0cmFqZXTDs3JpYSBzdXN0ZW50YWRhIGRlIGludmVzdGltZW50by4gQSBGQkNGIGFwcmVzZW50YSBtb21lbnRvcyBwb250dWFpcyBkZSByZWN1cGVyYcOnw6NvLCBtYXMgc2VtIGNvbnRpbnVpZGFkZSBzdWZpY2llbnRlIHBhcmEgY29uc29saWRhciB1bSBjaWNsbyBjb25zaXN0ZW50ZSBkZSBleHBhbnPDo28gZG8gaW52ZXN0aW1lbnRvIHByb2R1dGl2byBubyBwYcOtcy4NCg0KUGFydGUgZGVzc2EgZGluw6JtaWNhIHBvZGUgc2VyIGFzc29jaWFkYSBhbyBwYXRhbWFyIGVsZXZhZG8gZGEgdGF4YSBTZWxpYyBubyBCcmFzaWwuIEVtIGFsZ3VucyBtb21lbnRvcyBkbyBncsOhZmljbywgw6kgcG9zc8OtdmVsIG9ic2VydmFyIHF1ZSBhIHJlZHXDp8OjbyBkb3MganVyb3Mgw6kgYWNvbXBhbmhhZGEgcG9yIG1lbGhvcmEgZGEgRm9ybWHDp8OjbyBCcnV0YSBkZSBDYXBpdGFsIEZpeG8uIE5vIGVudGFudG8sIG1lc21vIGR1cmFudGUgZXNzZXMgcGVyw61vZG9zIGRlIHF1ZWRhLCBhIHRheGEgYsOhc2ljYSBkZSBqdXJvcyBwZXJtYW5lY2UgZW0gbsOtdmVpcyBlbGV2YWRvcy4gRW0gb3V0cmFzIHBhbGF2cmFzLCBtdWl0YXMgdmV6ZXMgYSBTZWxpYyByZWR1eiBkZSAxNSUgcGFyYSAxNCUsIG1hcyBjb250aW51YSByZXByZXNlbnRhbmRvIHVtIGN1c3RvIGFsdG8gcGFyYSBkZWNpc8O1ZXMgZGUgaW52ZXN0aW1lbnRvIHByb2R1dGl2by4NCg0KU29tYWRvIGEgaXNzbywgbyBhbWJpZW50ZSBkZSBpbmNlcnRlemEgZmlzY2FsIGUgZWNvbsO0bWljYSByZWR1eiBhaW5kYSBtYWlzIG9zIGluY2VudGl2b3MgYW8gaW52ZXN0aW1lbnRvLiBPIHJlc3VsdGFkbyDDqSB1bWEgdHJhamV0w7NyaWEgZGUgaW52ZXN0aW1lbnRvIGluc3TDoXZlbCBlIG1hcmNhZGEgcG9yIGZvcnRlcyBvc2NpbGHDp8O1ZXMsIHJlcHJvZHV6aW5kbyB1bSBwYWRyw6NvIHNlbWVsaGFudGUgYW8gb2JzZXJ2YWRvIG5vIGNpY2xvIGRlIGV4cGFuc8OjbyBkZSAyMDA44oCTMjAxNC4NCg0KIyMgMy4yIE1lcmNhZG8gZGUgdHJhYmFsaG8gZSBwcm9kdXRpdmlkYWRlDQoNCkEgYW7DoWxpc2UgZG8gbWVyY2FkbyBkZSB0cmFiYWxobyBubyBjaWNsbyBhdHVhbCBleGlnZSB1bSBvbGhhciBwYXJhIGFsw6ltIGRhIHRheGEgZGUgZGVzb2N1cGHDp8Ojby4gRW1ib3JhIGVzc2Egc2VqYSBhIG3DqXRyaWNhIG1haXMgY29uaGVjaWRhIGUgdXRpbGl6YWRhLCBzdWEgcXVlZGEgaXNvbGFkYW1lbnRlIG7Do28gw6kgc3VmaWNpZW50ZSBwYXJhIGluZGljYXIsIHBvciBzaSBzw7MsIHVtIG1lcmNhZG8gZGUgdHJhYmFsaG8gc2F1ZMOhdmVsIG91IHN1c3RlbnTDoXZlbC4gUG9yIGlzc28sIMOpIGltcG9ydGFudGUgYW5hbGlzw6EtbGEgZW0gY29uanVudG8gY29tIGEgdGF4YSBkZSBzdWJ1dGlsaXphw6fDo28sIHF1ZSBvZmVyZWNlIHVtYSBsZWl0dXJhIG1haXMgYW1wbGEgZGFzIGNvbmRpw6fDtWVzIGVmZXRpdmFzIGRhIGVjb25vbWlhLiANCg0KQSB0YXhhIGRlIHN1YnV0aWxpemHDp8OjbyBlbmdsb2JhIG7Do28gYXBlbmFzIGFzIHBlc3NvYXMgZGVzb2N1cGFkYXMsIG1hcyB0YW1iw6ltIGFxdWVsYXMgcXVlIHRyYWJhbGhhbSBtZW5vcyBob3JhcyBkbyBxdWUgZ29zdGFyaWFtIC0gYSBjaGFtYWRhIHN1Ym9jdXBhw6fDo28gcG9yIGluc3VmaWNpw6puY2lhIGRlIGhvcmFzIC0gZSBhIGZvcsOnYSBkZSB0cmFiYWxobyBwb3RlbmNpYWwsIGNvbXBvc3RhIHBvciBwZXNzb2FzIHF1ZSBnb3N0YXJpYW0gZGUgdHJhYmFsaGFyLCBtYXMgbsOjbyBwcm9jdXJhcmFtIGVtcHJlZ28gcG9yIGRpZmVyZW50ZXMgbW90aXZvcywgY29tbyBkaWZpY3VsZGFkZXMgZGUgZGVzbG9jYW1lbnRvLCBhdXPDqm5jaWEgZGUgY3JlY2hlIHBhcmEgb3MgZmlsaG9zIG91IGluY29tcGF0aWJpbGlkYWRlIGRlIGhvcsOhcmlvcyBjb20gYSBmYWN1bGRhZGUuIFBvciByZXVuaXIgZXNzYXMgdHLDqnMgZGltZW5zw7VlcywgYSB0YXhhIGRlIHN1YnV0aWxpemHDp8OjbyBmdW5jaW9uYSBjb21vIHVtIHRlcm3DtG1ldHJvIG1haXMgc2Vuc8OtdmVsIGRhcyBjb25kacOnw7VlcyBkbyBtZXJjYWRvIGRlIHRyYWJhbGhvLg0KDQpBIGFuw6FsaXNlIGNvbmp1bnRhIGRvcyBkb2lzIGluZGljYWRvcmVzIMOpIGltcG9ydGFudGUgcG9ycXVlIGRpZmVyZW50ZXMgY29tYmluYcOnw7VlcyBlbnRyZSBlbGVzIHJldmVsYW0gZXN0YWRvcyBkaXN0aW50b3MgZGEgZWNvbm9taWEuIEVtIGFsZ3VucyBwZXLDrW9kb3MgZGUgcmVjZXNzw6NvLCBwb3IgZXhlbXBsbywgYSB0YXhhIGRlIGRlc29jdXBhw6fDo28gcG9kZSBwZXJtYW5lY2VyIHJlbGF0aXZhbWVudGUgYmFpeGEsIHRyYW5zbWl0aW5kbyBhIGltcHJlc3PDo28gZGUgdW0gbWVyY2FkbyBkZSB0cmFiYWxobyBhcXVlY2lkby4gRW50cmV0YW50bywgc2UgYSBzdWJ1dGlsaXphw6fDo28gcGVybWFuZWNlciBlbGV2YWRhLCBvIHF1YWRybyByZWFsIGFpbmRhIGluZGljYSBhIGV4aXN0w6puY2lhIGRlIHRyYWJhbGhhZG9yZXMgc3Vib2N1cGFkb3Mgb3UgZm9yYSBkYSBmb3LDp2EgZGUgdHJhYmFsaG8sIG1hcyBhaW5kYSBkaXNwb27DrXZlaXMgcGFyYSB0cmFiYWxoYXIuDQoNCioqR3LDoWZpY28gMjE6KioNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQpyYXdfZGVzb2MgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvcm9iZXIvT25lRHJpdmUvSWJNYWNyby90YWJlbGE0MDk5Lnhsc3giKQ0KdHJpbWVzdHJlc19kZXNvYyA8LSBhcy5jaGFyYWN0ZXIocmF3X2Rlc29jWzMsIC0xXSkNCnZhbG9yZXNfZGVzb2MgPC0gYXMubnVtZXJpYyhnc3ViKCIsIiwgIi4iLCBhcy5jaGFyYWN0ZXIocmF3X2Rlc29jWzQsIC0xXSkpKQ0KDQpkZXNvYyA8LSBkYXRhLmZyYW1lKA0KICB0cmltZXN0cmUgPSB0cmltZXN0cmVzX2Rlc29jLA0KICB2YWxvciA9IHZhbG9yZXNfZGVzb2MNCikgJT4lDQogIGZpbHRlcighaXMubmEodmFsb3IpKSAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyAgPSBhcy5pbnRlZ2VyKHN0cl9leHRyYWN0KHRyaW1lc3RyZSwgIlxcZHs0fSIpKSwNCiAgICB0cmltID0gYXMuaW50ZWdlcihzdHJfZXh0cmFjdCh0cmltZXN0cmUsICJeXFxkIikpDQogICkgJT4lDQogIGZpbHRlcighaXMubmEoYW5vKSwgIWlzLm5hKHRyaW0pLCB0cmltID49IDEsIHRyaW0gPD0gNCkgJT4lDQogIG11dGF0ZSgNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLSIsIGZvcm1hdEModHJpbSAqIDMgLSAyLCB3aWR0aCA9IDIsIGZsYWcgPSAiMCIpLCAiLTE1IikpLA0KICAgIGRhdGFfbXMgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoZGF0YSwgdHogPSAiVVRDIikpICogMTAwMA0KICApICU+JQ0KICBhcnJhbmdlKGRhdGEpDQoNCnJhd19zdWJ1dGlsIDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL3JvYmVyL09uZURyaXZlL0liTWFjcm8vZGVzb2N1cC54bHN4IikNCnRyaW1lc3RyZXNfc3ViIDwtIGFzLmNoYXJhY3RlcihyYXdfc3VidXRpbFszLCAtMV0pDQp2YWxvcmVzX3N1YiA8LSBhcy5udW1lcmljKGdzdWIoIiwiLCAiLiIsIGFzLmNoYXJhY3RlcihyYXdfc3VidXRpbFs0LCAtMV0pKSkNCg0Kc3VidXRpbCA8LSBkYXRhLmZyYW1lKA0KICB0cmltZXN0cmUgPSB0cmltZXN0cmVzX3N1YiwNCiAgdmFsb3IgPSB2YWxvcmVzX3N1Yg0KKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWxvcikpICU+JQ0KICBtdXRhdGUoDQogICAgYW5vICA9IGFzLmludGVnZXIoc3RyX2V4dHJhY3QodHJpbWVzdHJlLCAiXFxkezR9IikpLA0KICAgIHRyaW0gPSBhcy5pbnRlZ2VyKHN0cl9leHRyYWN0KHRyaW1lc3RyZSwgIl5cXGQiKSkNCiAgKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShhbm8pLCAhaXMubmEodHJpbSksIHRyaW0gPj0gMSwgdHJpbSA8PSA0KSAlPiUNCiAgbXV0YXRlKA0KICAgIGRhdGEgPSBhcy5EYXRlKHBhc3RlMChhbm8sICItIiwgZm9ybWF0Qyh0cmltICogMyAtIDIsIHdpZHRoID0gMiwgZmxhZyA9ICIwIiksICItMTUiKSksDQogICAgZGF0YV9tcyA9IGFzLm51bWVyaWMoYXMuUE9TSVhjdChkYXRhLCB0eiA9ICJVVEMiKSkgKiAxMDAwDQogICkgJT4lDQogIGFycmFuZ2UoZGF0YSkNCg0KZGFkb3NfZGVzb2MgPC0gZGVzb2MgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvcikNCmRhZG9zX3N1YiAgIDwtIHN1YnV0aWwgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvcikNCg0KZ3JhZmljb190cmFiYWxobyA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLA0KICAgIHNwYWNpbmdUb3AgPSAyMCwgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgc3BhY2luZ0JvdHRvbSA9IDIwLCBzcGFjaW5nTGVmdCA9IDIwDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiTWVyY2FkbyBkZSBUcmFiYWxobyDigJQgQnJhc2lsIiwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxOHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzAyMDIzQyIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiVGF4YSBkZSBkZXNvY3VwYcOnw6NvIGUgdGF4YSBkZSBzdWJ1dGlsaXphw6fDo28g4oCUIFBOQUQgQ29udMOtbnVhIHRyaW1lc3RyYWwiLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiLCBjb2xvciA9ICIjNjY2NjY2IikNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfZGVzb2MpLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgbmFtZSA9ICJUYXhhIGRlIGRlc29jdXBhw6fDo28iLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIikNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3Nfc3ViKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiVGF4YSBkZSBzdWJ1dGlsaXphw6fDo28iLA0KICAgIGNvbG9yID0gIiNGRUIwMTUiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIikNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgdHlwZSA9ICJkYXRldGltZSIsDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSBOVUxMKSwNCiAgICBsaW5lQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgdGlja0NvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tMZW5ndGggPSAwLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMXB4IikpDQogICkgJT4lDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIiglKSIsDQogICAgICAgICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiwgZm9udFNpemUgPSAiMTFweCIpKSwNCiAgICBncmlkTGluZUNvbG9yID0gIiNFRUVFRUUiLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSwgZm9ybWF0ID0gInt2YWx1ZX0lIikNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250V2VpZ2h0ID0gIm5vcm1hbCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICApICU+JQ0KICBoY19wbG90T3B0aW9ucygNCiAgICBzZXJpZXMgPSBsaXN0KA0KICAgICAgYW5pbWF0aW9uID0gRkFMU0UsDQogICAgICBzdGF0ZXMgPSBsaXN0KGluYWN0aXZlID0gbGlzdChvcGFjaXR5ID0gMSkpDQogICAgKQ0KICApICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IElCR0UvUE5BRCBDb250w61udWEuIEVsYWJvcmHDp8OjbyBwcsOzcHJpYSBJYk1hY3JvQkguIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTBweCIsIGNvbG9yID0gIiM3Nzc3NzciKQ0KICApDQoNCmdyYWZpY29fdHJhYmFsaG8NCmBgYA0KDQoNCk5vIGNhc28gYnJhc2lsZWlybyByZWNlbnRlLCBwb3LDqW0sIG8gbW92aW1lbnRvIG9ic2VydmFkbyBmb2kgZGUgcXVlZGEgc2ltdWx0w6JuZWEgdGFudG8gZGEgdGF4YSBkZSBkZXNvY3VwYcOnw6NvIHF1YW50byBkYSB0YXhhIGRlIHN1YnV0aWxpemHDp8Ojby4gRW0ganVsaG8gZGUgMjAyMCwgYSB0YXhhIGRlIGRlc29jdXBhw6fDo28gZW5jb250cmF2YS1zZSBlbSAxNCw5JSwgZW5xdWFudG8gYSB0YXhhIGRlIHN1YnV0aWxpemHDp8OjbyBhdGluZ2lhIDMwLDQlLiBFbSBvdXR1YnJvIGRlIDIwMjUsIGFtYm9zIG9zIGluZGljYWRvcmVzIGhhdmlhbSByZWN1YWRvIGRlIGZvcm1hIGV4cHJlc3NpdmE6IGEgZGVzb2N1cGHDp8OjbyBjaGVnb3UgYSA1LDElIGUgYSBzdWJ1dGlsaXphw6fDo28gYSAxMyw0JS4NCg0KQSB0cmFqZXTDs3JpYSBkZSBxdWVkYSDDqSBldmlkZW50ZSBuYXMgZHVhcyBzw6lyaWVzLCByZWZsZXRpbmRvIHVtYSByZWR1w6fDo28gY29uc2lzdGVudGUgZG8gZGVzZW1wcmVnbyBlIGRhIGZvcsOnYSBkZSB0cmFiYWxobyBzdWJ1dGlsaXphZGEgYW8gbG9uZ28gZG8gcGVyw61vZG8uIEVudHJldGFudG8sIG5vIGNhc28gYnJhc2lsZWlybyBhdHVhbCwgZXNzYSBjb25maWd1cmHDp8OjbyBuw6NvIMOpIG5lY2Vzc2FyaWFtZW50ZSBwb3NpdGl2YS4gQXMgZHVhcyB0YXhhcyBlbmNvbnRyYW0tc2Ugc2ltdWx0YW5lYW1lbnRlIGVtIG7DrXZlaXMgbXVpdG8gYmFpeG9zLCBpbmRpY2FuZG8gcXVlIGjDoSBwb3VjYSBmb2xnYSBkaXNwb27DrXZlbCBubyBtZXJjYWRvIGRlIHRyYWJhbGhvLiBFbSBvdXRyYXMgcGFsYXZyYXMsIGdyYW5kZSBwYXJ0ZSBkYXMgcGVzc29hcyBxdWUgcG9kZXJpYW0gc2VyIGluY29ycG9yYWRhcyBhbyBtZXJjYWRvIGrDoSBzZSBlbmNvbnRyYSBvY3VwYWRhIG91IHByb2N1cmFuZG8gZW1wcmVnbyBhdGl2YW1lbnRlLg0KDQpFc3NlIGNlbsOhcmlvIHRlbmRlIGEgZ2VyYXIgcHJlc3PDtWVzIHNhbGFyaWFpcywgcXVlIHBvc3Rlcmlvcm1lbnRlIHBvZGVtIHNlIHRyYWR1emlyIGVtIHByZXNzw7VlcyBpbmZsYWNpb27DoXJpYXMsIGRpZmljdWx0YW5kbyBhIGNvbmR1w6fDo28gZGEgcG9sw610aWNhIG1vbmV0w6FyaWEgZSBpbXBvbmRvIGxpbWl0ZXMgYWRpY2lvbmFpcyBhbyBjcmVzY2ltZW50byBlY29uw7RtaWNvLiBFbSBlY29ub21pYXMgY29tIGdhbmhvcyByb2J1c3RvcyBkZSBwcm9kdXRpdmlkYWRlLCB1bSBtZXJjYWRvIGRlIHRyYWJhbGhvIGFxdWVjaWRvIHBvZGUgc2VyIHN1c3RlbnRhZG8gcG9yIGF1bWVudG9zIGRhIGNhcGFjaWRhZGUgcHJvZHV0aXZhLiBObyBjYXNvIGJyYXNpbGVpcm8sIGNvbnR1ZG8sIGVzc2EgcHJlb2N1cGHDp8OjbyBzZSB0b3JuYSBtYWlzIHJlbGV2YW50ZSBqdXN0YW1lbnRlIHBvcnF1ZSBvIGRlc2VtcGVuaG8gZGEgcHJvZHV0aXZpZGFkZSBwZXJtYW5lY2UgbGltaXRhZG8uDQoNCk5lc3NlIHNlbnRpZG8sIG8gZ3LDoWZpY28gMjIgYXByZXNlbnRhIGEgZXZvbHXDp8OjbyByZWNlbnRlIGRhIFByb2R1dGl2aWRhZGUgVG90YWwgZG9zIEZhdG9yZXMgKFBURikuDQoNCioqR3LDoWZpY28gMjI6KioNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCg0KcHRmX3RyaW0gPC0gZGF0YS5mcmFtZSgNCiAgcGVyaW9kbyA9IGMoDQogICAgIjIwMjBxMyIsIjIwMjBxNCIsDQogICAgIjIwMjFxMSIsIjIwMjFxMiIsIjIwMjFxMyIsIjIwMjFxNCIsDQogICAgIjIwMjJxMSIsIjIwMjJxMiIsIjIwMjJxMyIsIjIwMjJxNCIsDQogICAgIjIwMjNxMSIsIjIwMjNxMiIsIjIwMjNxMyIsIjIwMjNxNCIsDQogICAgIjIwMjRxMSIsIjIwMjRxMiIsIjIwMjRxMyIsIjIwMjRxNCIsDQogICAgIjIwMjVxMSIsIjIwMjVxMiIsIjIwMjVxMyIsIjIwMjVxNCINCiAgKSwNCiAgZWZldGl2YXMgPSBjKA0KICAgIDkyLjAsIDg4LjQsDQogICAgODcuNSwgODcuMywgODUuNSwgODQuNCwNCiAgICA4NC42LCA4NC40LCA4NC4zLCA4NS4wLA0KICAgIDg2LjEsIDg1LjcsIDg1LjQsIDg0LjksDQogICAgODQuMywgODQuNSwgODQuNCwgODMuOCwNCiAgICA4NC45LCA4My44LCA4My44LCA4My45DQogICkNCikgJT4lDQogIG11dGF0ZSgNCiAgICBhbm8gPSBhcy5pbnRlZ2VyKHN1YnN0cihwZXJpb2RvLCAxLCA0KSksDQogICAgdHJpbSA9IGFzLmludGVnZXIoc3Vic3RyKHBlcmlvZG8sIDYsIDYpKSwNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLSIsIGZvcm1hdEModHJpbSAqIDMgLSAyLCB3aWR0aCA9IDIsIGZsYWcgPSAiMCIpLCAiLTE1IikpLA0KICAgIGRhdGFfbXMgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoZGF0YSwgdHogPSAiVVRDIikpICogMTAwMA0KICApDQoNCnB0Zl90cmltIDwtIHB0Zl90cmltICU+JQ0KICBhcnJhbmdlKGRhdGEpICU+JQ0KICBtdXRhdGUoDQogICAgbW00ID0gem9vOjpyb2xsbWVhbihlZmV0aXZhcywgayA9IDQsIGZpbGwgPSBOQSwgYWxpZ24gPSAicmlnaHQiKQ0KICApDQoNCmRhZG9zX3B0ZiA8LSBwdGZfdHJpbSAlPiUNCiAgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIGVmZXRpdmFzKQ0KDQpkYWRvc19tbTQgPC0gcHRmX3RyaW0gJT4lDQogIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCBtbTQpDQoNCmdyYWZpY29fcHRmIDwtIGhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2NoYXJ0KA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBzcGFjaW5nVG9wID0gMjAsDQogICAgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgc3BhY2luZ0JvdHRvbSA9IDIwLA0KICAgIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfcHRmKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiUFRGIChIb3JhcyBFZmV0aXZhcykiLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gNCkNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfbW00KSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiTcOpZGlhIG3Ds3ZlbCAoNCB0cmltZXN0cmVzKSIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgbGluZVdpZHRoID0gMi41LA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICLDjW5kaWNlICgyMDEyVDIgPSAxMDApIiksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2Ig0KICApICU+JQ0KICBoY194QXhpcygNCiAgICBsaW5lQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgdGlja0NvbG9yID0gIiNEOUQ5RDkiDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiUHJvZHV0aXZpZGFkZSBUb3RhbCBkb3MgRmF0b3JlcyAtIEJyYXNpbCIsDQogICAgYWxpZ24gPSAiY2VudGVyIg0KICApICU+JQ0KICBoY19zdWJ0aXRsZSgNCiAgICB0ZXh0ID0gIlBURiBhanVzdGFkYSBwb3IgaG9yYXMgZWZldGl2YXMgLSAzVDIwMjAgYSA0VDIwMjUiLA0KICAgIGFsaWduID0gImNlbnRlciINCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIHZhbHVlRGVjaW1hbHMgPSAxDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIg0KICApICU+JQ0KICBoY19uYXZpZ2F0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfc2Nyb2xsYmFyKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBPYnNlcnZhdMOzcmlvIGRhIFByb2R1dGl2aWRhZGUgUmVnaXMgQm9uZWxsaS9GR1YgSUJSRS4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iDQogICkNCg0KZ3JhZmljb19wdGYNCmBgYA0KDQpDb21vIG9ic2VydmFkbyBubyBncsOhZmljbyAyMiwgYSBQVEYgYXByZXNlbnRhZGEgasOhIGluY29ycG9yYSBvIGFqdXN0ZSBwb3IgY2FwaXRhbCBodW1hbm8gLSBjdWphIGltcG9ydMOibmNpYSBmb2kgZGlzY3V0aWRhIGFudGVyaW9ybWVudGUgLSwgZ2FyYW50aW5kbyBxdWUgb3MgbW92aW1lbnRvcyBvYnNlcnZhZG9zIHJlZmxpdGFtIGdhbmhvcyBlZmV0aXZvcyBkZSBlZmljacOqbmNpYSBwcm9kdXRpdmEsIGUgbsOjbyBzaW1wbGVzbWVudGUgbyBhdW1lbnRvIGRhIGVzY29sYXJpZGFkZSBvdSBkYSBxdWFsaWZpY2HDp8OjbyBkYSBmb3LDp2EgZGUgdHJhYmFsaG8uIEFsw6ltIGRpc3NvLCBhZGljaW9ub3Utc2UgdW1hIG3DqWRpYSBtw7N2ZWwgZGUgcXVhdHJvIHRyaW1lc3RyZXMgKGxpbmhhIGFtYXJlbGEpLCBxdWUgcGVybWl0ZSB2aXN1YWxpemFyIGEgdGVuZMOqbmNpYSBkYSBzw6lyaWUgYW8gc3Vhdml6YXIgb3NjaWxhw6fDtWVzIHBvbnR1YWlzLiANCg0KQSBzw6lyaWUgaW5pY2lhIGVtIGp1bGhvIGRlIDIwMjAgZW0gdW0gcGF0YW1hciBlbGV2YWRvLCBkZSBhcHJveGltYWRhbWVudGUgOTIgcG9udG9zLCB2YWxvciBxdWUgcG9kZSBzZXIgYXNzb2NpYWRvIGFvIGNvbnRleHRvIHDDs3MtcGFuZMOqbWljbywgbWFyY2FkbyBwZWxvIHJldG9ybm8gZ3JhZHVhbCBkYSBhdGl2aWRhZGUgZWNvbsO0bWljYSBlIHBvciBwYWRyw7VlcyBhdMOtcGljb3MgZGUgdHJhYmFsaG8uIEEgcGFydGlyIGRlc3NlIHBvbnRvLCBhIFBURiBhcHJlc2VudGEgdW1hIHF1ZWRhIHNpZ25pZmljYXRpdmEsIGF0aW5naW5kbyA4NywzIGrDoSBlbSBhYnJpbCBkZSAyMDIxLCBzaW5hbGl6YW5kbyBxdWUgbyBuw612ZWwgZWxldmFkbyBvYnNlcnZhZG8gbm8gaW7DrWNpbyBkYSBzw6lyaWUgbsOjbyBzZSBzdXN0ZW50b3UuDQoNCkFvIGxvbmdvIGRvIHBlcsOtb2RvLCBvYnNlcnZhbS1zZSBhbGd1bWFzIHJlY3VwZXJhw6fDtWVzIHBvbnR1YWlzLCBjb21vIGVudHJlIGp1bGhvIGRlIDIwMjIgZSBqYW5laXJvIGRlIDIwMjMsIGUgZW50cmUgb3V0dWJybyBkZSAyMDIzIGUgamFuZWlybyBkZSAyMDI0LiBFbnRyZXRhbnRvLCB0YW50byBhIG3DqWRpYSBtw7N2ZWwgcXVhbnRvIGEgcHLDs3ByaWEgc8OpcmllIGV2aWRlbmNpYW0gcXVlLCBhcGVzYXIgZGVzc2VzIG1vdmltZW50b3MgaW50ZXJtZWRpw6FyaW9zLCBhIHRlbmTDqm5jaWEgZ2VyYWwgZGEgUFRGIGFvIGxvbmdvIGRvIHBlcsOtb2RvIGZvaSBkZSBxdWVkYS4gTyBkYWRvIG1haXMgcmVjZW50ZSwgcmVmZXJlbnRlIGFvIHF1YXJ0byB0cmltZXN0cmUgZGUgMjAyNSwgcmVnaXN0cmEgYSBQVEYgZW0gODMsOSwgcGF0YW1hciBzaWduaWZpY2F0aXZhbWVudGUgaW5mZXJpb3IgYW9zIDkyIG9ic2VydmFkb3Mgbm8gaW7DrWNpbyBkYSBzw6lyaWUgYW5hbGlzYWRhLg0KDQpFc3NlIHJlc3VsdGFkbyDDqSBwYXJ0aWN1bGFybWVudGUgcHJlb2N1cGFudGUgcXVhbmRvIGNvbWJpbmFkbyBjb20gbyBxdWFkcm8gZG8gbWVyY2FkbyBkZSB0cmFiYWxobyBkaXNjdXRpZG8gYW50ZXJpb3JtZW50ZS4gQSBlY29ub21pYSBicmFzaWxlaXJhIGVuY29udHJhLXNlIGVtIHVtYSBzaXR1YcOnw6NvIGVtIHF1ZSBwcmF0aWNhbWVudGUgdG9kYXMgYXMgcGVzc29hcyBxdWUgcG9kZXJpYW0gZXN0YXIgdHJhYmFsaGFuZG8gasOhIHNlIGVuY29udHJhbSBvY3VwYWRhcywgbWFzLCBhbyBtZXNtbyB0ZW1wbywgZXNzYXMgcGVzc29hcyBuw6NvIGVzdMOjbyBzZSB0b3JuYW5kbyBtYWlzIHByb2R1dGl2YXMgYW8gbG9uZ28gZG8gdGVtcG8uIEVtIG91dHJhcyBwYWxhdnJhcywgbyBwYcOtcyBhdGluZ2l1IG8gbGltaXRlIGRhIGFjdW11bGHDp8OjbyBkZSBmYXRvcmVzIG5vIG1lcmNhZG8gZGUgdHJhYmFsaG8gc2VtIHF1ZSBpc3NvIGZvc3NlIGFjb21wYW5oYWRvIHBvciBnYW5ob3MgZGUgZWZpY2nDqm5jaWEgcHJvZHV0aXZhLg0KRXNzZSBjZW7DoXJpbyBpbXDDtWUgcmVzdHJpw6fDtWVzIGltcG9ydGFudGVzIGFvIGNyZXNjaW1lbnRvIGRlIGxvbmdvIHByYXpvLiBTZW0gYXVtZW50b3MgY29uc2lzdGVudGVzIGRlIHByb2R1dGl2aWRhZGUsIGEgZWNvbm9taWEgcGVyZGUgYSBjYXBhY2lkYWRlIGRlIHByb2R1emlyIG1haXMgdXRpbGl6YW5kbyBvcyBtZXNtb3MgcmVjdXJzb3MsIHJlcHJvZHV6aW5kbywgZSBhZ3JhdmFuZG8sIHVtYSBkYXMgcHJpbmNpcGFpcyBmcmFnaWxpZGFkZXMgZXN0cnV0dXJhaXMgasOhIGlkZW50aWZpY2FkYXMgbm8gY2ljbG8gZGUgZXhwYW5zw6NvIGRlIDIwMDjigJMyMDE0Lg0KDQojIyAzLjMgQ29uZmlhbsOnYSwgaW5jZXJ0ZXphIGUgbGltaXRlcyBkbyBjcmVzY2ltZW50byANCg0KUGFyYSBhbMOpbSBkb3MgaW5kaWNhZG9yZXMgZGUgYXRpdmlkYWRlLCBtZXJjYWRvIGRlIHRyYWJhbGhvIGUgcHJvZHV0aXZpZGFkZSwgYSBhbsOhbGlzZSBkbyBjaWNsbyBhdHVhbCBzZSBiZW5lZmljaWEgZGEgb2JzZXJ2YcOnw6NvIGRlIGluZGljYWRvcmVzIHF1YWxpdGF0aXZvcyBxdWUgY2FwdGFtIGEgcGVyY2Vww6fDo28gZGUgZW1wcmVzw6FyaW9zIGUgY29uc3VtaWRvcmVzIHNvYnJlIG8gZXN0YWRvIGRhIGVjb25vbWlhLiBPIGdyw6FmaWNvIDIzIGFwcmVzZW50YSBvIMONbmRpY2UgZGUgQ29uZmlhbsOnYSBFbXByZXNhcmlhbCAoSUNFKSBlIG8gw41uZGljZSBkZSBDb25maWFuw6dhIGRvIENvbnN1bWlkb3IgKElDQyksIGFtYm9zIGNhbGN1bGFkb3MgcGVsYSBGR1YvSUJSRSwgZW0gY29uanVudG8gY29tIG8gTsOtdmVsIGRlIFV0aWxpemHDp8OjbyBkYSBDYXBhY2lkYWRlIEluc3RhbGFkYSAoTlVDSSksIHF1ZSBtZWRlIG8gcXVhbnRvIGEgaW5kw7pzdHJpYSBlc3TDoSBlZmV0aXZhbWVudGUgb3BlcmFuZG8gZW0gcmVsYcOnw6NvIGFvIHNldSBwb3RlbmNpYWwgZGUgcHJvZHXDp8Ojby4gDQoNCioqR3LDoWZpY28gMjM6KioNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQpjaWNsb19hdHVhbCA8LSBkYXRhLmZyYW1lKA0KICBkYXRhID0gc2VxKGFzLkRhdGUoIjIwMjAtMDctMDEiKSwgYXMuRGF0ZSgiMjAyNi0wNC0wMSIpLCBieSA9ICJtb250aCIpLA0KICBJQ0UgPSBjKA0KICAgIDgyLjAsIDg5LjksIDk0LjgsIDk3LjgsIDk3LjcsIDk4LjIsDQogICAgOTYuMCwgOTQuNywgODcuNywgOTAuMywgOTQuMSwgOTcuMCwgOTkuNywgMTAwLjUsIDk3LjUsIDk5LjcsIDk4LjQsIDk3LjUsDQogICAgOTMuOSwgOTMuMCwgOTMuNCwgOTUuNywgOTcuMSwgOTcuNSwgOTYuNywgOTkuMCwgOTkuMSwgOTcuNCwgOTMuMSwgOTMuNSwNCiAgICA5MS41LCA5Mi40LCA5My4xLCA5MS4zLCA5MC4zLCA5Mi4yLCA5MS42LCA5Mi42LCA5Mi42LCA5Mi41LCA5My45LCA5NC4yLA0KICAgIDk1LjAsIDk0LjEsIDk1LjEsIDk1LjUsIDk1LjAsIDk1LjMsIDk2LjUsIDk4LjAsIDk2LjgsIDk3LjcsIDk2LjksIDk2LjQsDQogICAgOTMuOSwgOTMuMiwgOTIuOSwgOTMuMywgOTMuNywgOTEuNSwgOTAuMiwgODguMCwgODkuMywgODkuNiwgOTAuMiwgOTEuNSwNCiAgICA5Mi40LCA5Mi4xLCA5MS42LCA5MC42DQogICksDQogIElDQyA9IGMoDQogICAgNzguMSwgNzguNywgODEuNiwgODAuOSwgODAuMiwgNzcuNCwNCiAgICA3Ni4wLCA3OC45LCA3MC4yLCA3NC40LCA3OC4yLCA4MS4yLCA4MS40LCA4MC4xLCA3My40LCA3NC4zLCA3My4wLCA3NC40LA0KICAgIDc0LjUsIDc4LjgsIDc2LjcsIDgwLjIsIDc3LjQsIDc5LjAsIDc4LjUsIDgxLjcsIDg2LjksIDg2LjgsIDgzLjUsIDg2LjksDQogICAgODYuNiwgODUuNSwgODkuMSwgODguNCwgOTAuMywgOTIuMywgOTMuOCwgOTQuOSwgOTQuOCwgOTEuNSwgOTEuMCwgOTIuNCwNCiAgICA5MS4wLCA4OS42LCA5Mi45LCA5NC41LCA5MC42LCA5MS43LCA5Mi40LCA5Mi43LCA5Mi44LCA5MS41LCA5NC4wLCA5MC45LA0KICAgIDg2LjUsIDg1LjEsIDg0LjgsIDg2LjYsIDg3LjksIDg2LjIsIDg1LjgsIDg1LjUsIDg2LjQsIDg3LjAsIDg4LjgsIDg5LjEsDQogICAgODcuMywgODYuMSwgODguMSwgODkuMQ0KICApLA0KICBOVUNJID0gYygNCiAgICA3Mi4wLCA3NC45LCA3Ny45LCA3OS43LCA3OS45LCA3OS41LA0KICAgIDgwLjIsIDc5LjYsIDc4LjYsIDc2LjcsIDc3LjcsIDc5LjAsIDc5LjYsIDc5LjMsIDc5LjksIDgxLjIsIDgxLjAsIDgwLjAsDQogICAgODEuMCwgODAuNSwgODAuNSwgNzkuOCwgODAuNywgODEuMCwgODEuOCwgODEuNywgODAuNCwgODAuNiwgODAuMSwgNzkuOSwNCiAgICA3OS4xLCA3OS4zLCA3OS40LCA4MC43LCA4MC4wLCA4MC4wLCA4MC41LCA4MC4zLCA4MS4zLCA4MC43LCA4MS4yLCA4MS41LA0KICAgIDgxLjQsIDgxLjIsIDgxLjYsIDgyLjIsIDgxLjcsIDgyLjMsIDgzLjAsIDgzLjAsIDgzLjEsIDgyLjUsIDgxLjksIDgxLjUsDQogICAgODEuOSwgODEuMywgODEuNywgODIuOSwgODMuNSwgODMuNiwgODIuMiwgODIuNCwgODIuMywgODEuOSwgNzkuOSwgODAuMCwNCiAgICA4MS4zLCA4MS42LCA4Mi40LCA4My4yDQogICkNCikgJT4lDQogIG11dGF0ZShkYXRhX21zID0gYXMubnVtZXJpYyhhcy5QT1NJWGN0KGRhdGEsIHR6ID0gIlVUQyIpKSAqIDEwMDApDQoNCmRhZG9zX2ljZSAgPC0gY2ljbG9fYXR1YWwgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvciA9IElDRSkNCmRhZG9zX2ljYyAgPC0gY2ljbG9fYXR1YWwgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvciA9IElDQykNCmRhZG9zX251Y2kgPC0gY2ljbG9fYXR1YWwgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvciA9IE5VQ0kpDQoNCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2NoYXJ0KGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwgc3BhY2luZ1RvcCA9IDIwLCBzcGFjaW5nUmlnaHQgPSAyMCwNCiAgICAgICAgICAgc3BhY2luZ0JvdHRvbSA9IDIwLCBzcGFjaW5nTGVmdCA9IDIwKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfaWNlKSwNCiAgICB0eXBlID0gImxpbmUiLCBuYW1lID0gIklDRSDigJQgQ29uZmlhbsOnYSBFbXByZXNhcmlhbCIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19pY2MpLA0KICAgIHR5cGUgPSAibGluZSIsIG5hbWUgPSAiSUNDIOKAlCBDb25maWFuw6dhIGRvIENvbnN1bWlkb3IiLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiLCBsaW5lV2lkdGggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMSkNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfbnVjaSksDQogICAgdHlwZSA9ICJsaW5lIiwgbmFtZSA9ICJOVUNJICglKSIsDQogICAgY29sb3IgPSAiIzQ2QjFFMSIsIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIikNCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiw41uZGljZSAvICUiLA0KICAgICAgICAgICAgICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjEycHgiKSksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIGxpbmVDb2xvciA9ICIjRDlEOUQ5IiwgdGlja0NvbG9yID0gIiNEOUQ5RDkiLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSkNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgc2VyaWVzID0gbGlzdChhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkpDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiQ29uZmlhbsOnYSBlIENhcGFjaWRhZGUgSW5zdGFsYWRhIOKAlCBCcmFzaWwiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIyMHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzExMTExMSIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiSUNFLCBJQ0MgZSBOVUNJIOKAlCBqdWwvMjAyMCBhbyBtYWlzIHJlY2VudGUiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxM3B4IiwgY29sb3IgPSAiIzY2NjY2NiIpDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwgY3Jvc3NoYWlycyA9IFRSVUUsDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLCBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LCBzaGFkb3cgPSBGQUxTRSwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTJweCIpDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsIGxheW91dCA9ICJob3Jpem9udGFsIg0KICApICU+JQ0KICBoY19yYW5nZVNlbGVjdG9yKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19zY3JvbGxiYXIoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBGR1YvSUJSRS4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMHB4IiwgY29sb3IgPSAiIzc3Nzc3NyIpDQogICkNCmBgYA0KDQpDb21vIG9ic2VydmFkbyBubyBncsOhZmljbyAyMywgbyBOVUNJIChsaW5oYSBhenVsIGNsYXJhKSBtYW50w6ltLXNlIGVtIHBhdGFtYXJlcyByZWxhdGl2YW1lbnRlIGVsZXZhZG9zIGFvIGxvbmdvIGRlIHRvZG8gbyBwZXLDrW9kbywgbyBxdWUgaW5kaWNhIGJhaXhhIG9jaW9zaWRhZGUgbmEgaW5kw7pzdHJpYS4gRXNzZSBjb21wb3J0YW1lbnRvIHBvZGUgcGFyZWNlciBwb3NpdGl2byDDoCBwcmltZWlyYSB2aXN0YSwgbWFzIGRldmUgc2VyIGxpZG8gY29tIGNhdXRlbGE6IHVtYSBpbmTDunN0cmlhIG9wZXJhbmRvIHByw7N4aW1hIGRvIHNldSBsaW1pdGUgZGUgY2FwYWNpZGFkZSBwb2RlIGdlcmFyIHByZXNzw6NvIGRlIHByZcOnb3MgcGVsbyBsYWRvIGRhIGRlbWFuZGEsIGRhZG8gcXVlIHF1YWxxdWVyIGF1bWVudG8gZG8gY29uc3VtbyBlbmNvbnRyYSBkaWZpY3VsZGFkZXMgZGUgc2VyIGFic29ydmlkbyBwZWxhIHByb2R1w6fDo28gY29ycmVudGUuIEVtIG91dHJhcyBwYWxhdnJhcywgbyBOVUNJIGVsZXZhZG8gbsOjbyBzaWduaWZpY2EsIGF1dG9tYXRpY2FtZW50ZSwgdW1hIGluZMO6c3RyaWEgZW0gZXhwYW5zw6NvIC0gc2lnbmlmaWNhIGFwZW5hcyBxdWUgbsOjbyBow6EgZm9sZ2EgcHJvZHV0aXZhIHBhcmEgYWJzb3J2ZXIgY2hvcXVlcyBkZSBkZW1hbmRhLg0KDQpPIElDRSAobGluaGEgYW1hcmVsYSksIHF1ZSBtZWRlIGEgY29uZmlhbsOnYSBlbXByZXNhcmlhbCwgc2VndWUgZW0gbsOtdmVpcyBmcmFjb3MsIHByaW5jaXBhbG1lbnRlIG5vIHF1ZSBkaXogcmVzcGVpdG8gw6BzIGV4cGVjdGF0aXZhcyBmdXR1cmFzIGRvcyBlbXByZXPDoXJpb3MuIEVzc2UgY29tcG9ydGFtZW50byDDqSBtYWNyb2Vjb25vbWljYW1lbnRlIHJlbGV2YW50ZSBwb3JxdWUgYSBjb25maWFuw6dhIGVtcHJlc2FyaWFsIMOpIHVtIGRvcyBwcmluY2lwYWlzIGRldGVybWluYW50ZXMgZGFzIGRlY2lzw7VlcyBkZSBpbnZlc3RpbWVudG8gZSBjb250cmF0YcOnw6NvLiBRdWFuZG8gb3MgZW1wcmVzw6FyaW9zIG7Do28gZW54ZXJnYW0gdW0gaG9yaXpvbnRlIGNsYXJvIGRlIGV4cGFuc8OjbyBkYSBkZW1hbmRhLCBlbGVzIHRlbmRlbSBhIHBvc3RlcmdhciBwcm9qZXRvcywgbGltaXRhciBhIGV4cGFuc8OjbyBkYSBwcm9kdcOnw6NvIGUgbWFudGVyIHF1YWRyb3MgZGUgcGVzc29hbCBtYWlzIGVueHV0b3MgLSByZWZvcsOnYW5kbywgbmEgcHLDoXRpY2EsIGEgZnJhZ2lsaWRhZGUgZG8gaW52ZXN0aW1lbnRvIGrDoSBvYnNlcnZhZGEgYW50ZXJpb3JtZW50ZS4NCg0KTyBJQ0MgKGxpbmhhIGF6dWwgZXNjdXJhKSwgcG9yIHN1YSB2ZXosIGFwcmVzZW50YSB0cmFqZXTDs3JpYSBkZSByZWN1cGVyYcOnw6NvIGFvIGxvbmdvIGRvIHBlcsOtb2RvLiBPIG1vdmltZW50byDDqSBjb25zaXN0ZW50ZSBjb20gYSBtZWxob3JhIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8gZGlzY3V0aWRhIGVtIDMuMiwgcXVlIGFtcGxpb3UgdGFudG8gYSBvY3VwYcOnw6NvIHF1YW50byBhIHJlbmRhIGRhcyBmYW3DrWxpYXMuIEFwZXNhciBkZXNzYSByZWN1cGVyYcOnw6NvLCBjb250dWRvLCBvIMOtbmRpY2UgcGVybWFuZWNlIGFiYWl4byBkZSAxMDAgcG9udG9zIC0gcGF0YW1hciBjb25zaWRlcmFkbyBuZXV0cm8gLSwgc2luYWxpemFuZG8gcXVlIG8gY29uc3VtaWRvciBicmFzaWxlaXJvIHNlZ3VlIGNhdXRlbG9zbyBxdWFudG8gw6BzIHBlcnNwZWN0aXZhcyBmdXR1cmFzLCBtZXNtbyBkaWFudGUgZGUgdW1hIHNpdHVhw6fDo28gY29ycmVudGUgbWFpcyBmYXZvcsOhdmVsLg0KDQpBIGxlaXR1cmEgY29uanVudGEgZG9zIHRyw6pzIGluZGljYWRvcmVzIHJldmVsYSB1bWEgY29udHJhZGnDp8OjbyBpbXBvcnRhbnRlIGRvIGNpY2xvIGF0dWFsOiBhIGVjb25vbWlhIG1vc3RyYSByZXNpbGnDqm5jaWEgbm8gcHJlc2VudGUsIHJlZmxldGlkYSBuYSB1dGlsaXphw6fDo28gZGEgY2FwYWNpZGFkZSBpbnN0YWxhZGEgZSBuYSBtZWxob3JhIGRvIGNvbnN1bW8sIG1hcyBvcGVyYSBjb20gYmFpeGEgY29uZmlhbsOnYSBlbSByZWxhw6fDo28gYW8gZnV0dXJvLiBFc3NlIGRlc2NvbXBhc3NvIGVudHJlIG8gZGVzZW1wZW5obyBjb3JyZW50ZSBlIGFzIGV4cGVjdGF0aXZhcyBmdXR1cmFzIGltcMO1ZSB1bSBsaW1pdGUgYWRpY2lvbmFsIGFvIGNyZXNjaW1lbnRvLCBwb2lzIHJlZHV6IG9zIGluY2VudGl2b3MgcGFyYSBxdWUgZW1wcmVzYXMgYW1wbGllbSBzZXVzIGludmVzdGltZW50b3MgZSBwYXJhIHF1ZSBmYW3DrWxpYXMgYXVtZW50ZW0gbyBjb25zdW1vIGRlIGJlbnMgZHVyw6F2ZWlzIC0gcGVycGV0dWFuZG8sIGFzc2ltLCBhcyBmcmFnaWxpZGFkZXMgZXN0cnV0dXJhaXMgasOhIGlkZW50aWZpY2FkYXMgYW8gbG9uZ28gZGVzdGEgc2XDp8Ojby4NCg0KIyMgMy40IFNpdHVhw6fDo28gZmlzY2FsIGUgZMOtdmlkYSBww7pibGljYQ0KDQpBdHVhbG1lbnRlLCBuw6NvIMOpIHBvc3PDrXZlbCBhbmFsaXNhciBhIHNpdHVhw6fDo28gZWNvbsO0bWljYSBicmFzaWxlaXJhIHNlbSBwYXNzYXIgcGVsYSBxdWVzdMOjbyBkYSBkw612aWRhIHDDumJsaWNhLiBPIGVuZGl2aWRhbWVudG8gZG8gZ292ZXJubyBnZXJhbCBlbmNvbnRyYS1zZSBlbSB1bSBwYXRhbWFyIGVsZXZhZG8sIHByw7N4aW1vIGRlIDgwJSBkbyBQSUIsIGUgYSB0cmFqZXTDs3JpYSBkb3MgaW5kaWNhZG9yZXMgZmlzY2FpcyBub3Mgw7psdGltb3MgYW5vcyByZWZvcsOnYSBhIHByZW9jdXBhw6fDo28gY29tIGEgc3VzdGVudGFiaWxpZGFkZSBkYXMgY29udGFzIHDDumJsaWNhcy4gTyBncsOhZmljbyAyNCBhcHJlc2VudGEgYSBldm9sdcOnw6NvIGRhIE5lY2Vzc2lkYWRlIGRlIEZpbmFuY2lhbWVudG8gZG8gU2V0b3IgUMO6YmxpY28gKE5GU1ApIGUgZGEgRMOtdmlkYSBCcnV0YSBkbyBHb3Zlcm5vIEdlcmFsIGVudHJlIDIwMjAgZSAyMDI1LiANCg0KKipHcsOhZmljbyAyNDoqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoR2V0QkNCRGF0YSkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQoNCmRhdGFfaW5pY2lvIDwtIGFzLkRhdGUoIjIwMjAtMDctMDEiKQ0KZGF0YV9maW0gPC0gYXMuRGF0ZSgiMjAyNS0xMi0zMSIpDQoNCnJlc3VsdGFkb19wcmltYXJpbyA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IGMoInJlc3VsdGFkb19wcmltYXJpbyIgPSA1NzkzKSwNCiAgZmlyc3QuZGF0ZSA9IGRhdGFfaW5pY2lvLA0KICBsYXN0LmRhdGUgPSBkYXRhX2ZpbSwNCiAgZm9ybWF0LmRhdGEgPSAid2lkZSINCikgJT4lDQogIG11dGF0ZShEYXRhID0gYXMuRGF0ZShyZWYuZGF0ZSkpDQoNCmRpdmlkYV9icnV0YSA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IGMoImRpdmlkYV9icnV0YSIgPSAxMzc2MiksDQogIGZpcnN0LmRhdGUgPSBkYXRhX2luaWNpbywNCiAgbGFzdC5kYXRlID0gZGF0YV9maW0sDQogIGZvcm1hdC5kYXRhID0gIndpZGUiDQopICU+JQ0KICBtdXRhdGUoRGF0YSA9IGFzLkRhdGUocmVmLmRhdGUpKQ0KDQpkYWRvcyA8LSByZXN1bHRhZG9fcHJpbWFyaW8gJT4lDQogIHNlbGVjdChEYXRhLCByZXN1bHRhZG9fcHJpbWFyaW8pICU+JQ0KICBmdWxsX2pvaW4oDQogICAgZGl2aWRhX2JydXRhICU+JSBzZWxlY3QoRGF0YSwgZGl2aWRhX2JydXRhKSwNCiAgICBieSA9ICJEYXRhIg0KICApICU+JQ0KICBhcnJhbmdlKERhdGEpICU+JQ0KICBuYS5vbWl0KCkgJT4lDQogIG11dGF0ZSh0aW1lc3RhbXAgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoRGF0YSwgdHogPSAiVVRDIikpICogMTAwMCkNCg0KZ3JhZmljbyA8LSBoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY19jaGFydCgNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgc3BhY2luZ1RvcCA9IDIwLCBzcGFjaW5nUmlnaHQgPSAyMCwNCiAgICBzcGFjaW5nQm90dG9tID0gMjAsIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGFwcGx5KHNlcV9sZW4obnJvdyhkYWRvcykpLCBmdW5jdGlvbihpKSBsaXN0KGRhZG9zJHRpbWVzdGFtcFtpXSwgZGFkb3MkcmVzdWx0YWRvX3ByaW1hcmlvW2ldKSksDQogICAgdHlwZSA9ICJjb2x1bW4iLA0KICAgIG5hbWUgPSAiTkZTUCIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgYm9yZGVyQ29sb3IgPSAiI0ZFQjAxNSIsDQogICAgcG9pbnRQYWRkaW5nID0gMC4wOCwNCiAgICBncm91cFBhZGRpbmcgPSAwLjEwLA0KICAgIHlBeGlzID0gMCwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMiwgdmFsdWVTdWZmaXggPSAiIHAucC4iKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsYXBwbHkoc2VxX2xlbihucm93KGRhZG9zKSksIGZ1bmN0aW9uKGkpIGxpc3QoZGFkb3MkdGltZXN0YW1wW2ldLCBkYWRvcyRkaXZpZGFfYnJ1dGFbaV0pKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiRMOtdmlkYSBCcnV0YSAoJSBkbyBQSUIpIiwNCiAgICBjb2xvciA9ICIjMDIwMjNDIiwNCiAgICBsaW5lV2lkdGggPSAzLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwNCiAgICB5QXhpcyA9IDEsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDIsIHZhbHVlU3VmZml4ID0gIiUiKQ0KICApICU+JQ0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCgNCiAgICAgICAgdGV4dCA9ICJORlNQIC0gUmVzdWx0YWRvIFByaW3DoXJpbyAoJSBkbyBQSUIpIiwNCiAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgICAgICksDQogICAgICBvcHBvc2l0ZSA9IEZBTFNFLA0KICAgICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAxLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpKSwNCiAgICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICAgIGxpc3QoDQogICAgICAgICAgdmFsdWUgPSAwLA0KICAgICAgICAgIHdpZHRoID0gMS41LA0KICAgICAgICAgIGNvbG9yID0gIiM5RTlFOUUiLA0KICAgICAgICAgIGRhc2hTdHlsZSA9ICJTaG9ydERhc2giLA0KICAgICAgICAgIHpJbmRleCA9IDUNCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCgNCiAgICAgICAgdGV4dCA9ICJEw612aWRhIEJydXRhICglIGRvIFBJQikiLA0KICAgICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICAgICAgKSwNCiAgICAgIG9wcG9zaXRlID0gVFJVRSwNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAwLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApLA0KICAgIGNvbHVtbiA9IGxpc3QoYm9yZGVyV2lkdGggPSAwKQ0KICApICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIk5lY2Vzc2lkYWRlIGRlIEZpbmFuY2lhbWVudG8gZG8gU2V0b3IgUMO6YmxpY28gZSBEw612aWRhIEJydXRhIGRvIEdvdmVybm8gR2VyYWwiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIyMHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzExMTExMSIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiRXZvbHXDp8OjbyBkYSBORlNQIGUgZG8gZW5kaXZpZGFtZW50byBww7pibGljbyBubyBCcmFzaWwgKDIwMjDigJMyMDI1KSIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEzcHgiLCBjb2xvciA9ICIjNjY2NjY2IikNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgPSBsaXN0KA0KICAgICAgY29sb3IgPSAiIzIyMjIyMiIsDQogICAgICBmb250V2VpZ2h0ID0gIm5vcm1hbCIsDQogICAgICBmb250U2l6ZSA9ICIxMnB4Ig0KICAgICkNCiAgKSAlPiUNCiAgaGNfcmFuZ2VTZWxlY3RvcigNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBpbnB1dEVuYWJsZWQgPSBGQUxTRSwNCiAgICBzZWxlY3RlZCA9IDQsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAieWVhciIsIGNvdW50ID0gMSwgdGV4dCA9ICIxQSIpLA0KICAgICAgbGlzdCh0eXBlID0gInllYXIiLCBjb3VudCA9IDIsIHRleHQgPSAiMkEiKSwNCiAgICAgIGxpc3QodHlwZSA9ICJ5ZWFyIiwgY291bnQgPSAzLCB0ZXh0ID0gIjNBIiksDQogICAgICBsaXN0KHR5cGUgPSAiYWxsIiwgdGV4dCA9ICJUdWRvIikNCiAgICApDQogICkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gVFJVRSkgJT4lDQogIGhjX3Njcm9sbGJhcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9ICIjNzc3Nzc3IikNCiAgKQ0KDQpncmFmaWNvDQpgYGANCg0KQ29tbyBvYnNlcnZhZG8gbm8gZ3LDoWZpY28gMjQsIGFzIGJhcnJhcyBhbWFyZWxhcyByZXByZXNlbnRhbSBhIE5GU1AgLSBzZW5kbyBxdWUgdmFsb3JlcyBwb3NpdGl2b3MgY29ycmVzcG9uZGVtIGEgZMOpZmljaXRzIHByaW3DoXJpb3MgZG8gZ292ZXJubywgZSB2YWxvcmVzIG5lZ2F0aXZvcyBhIHN1cGVyw6F2aXRzLiBBIGxpbmhhIGF6dWwgZXNjdXJhLCBwb3Igc3VhIHZleiwgbW9zdHJhIGEgZXZvbHXDp8OjbyBkYSBkw612aWRhIGJydXRhIGRvIGdvdmVybm8gZ2VyYWwgY29tbyBwZXJjZW50dWFsIGRvIFBJQi4gRGVzZGUganVsaG8gZGUgMjAyMywgbyBCcmFzaWwgdGVtIHJlZ2lzdHJhZG8gZMOpZmljaXRzIHByaW3DoXJpb3MgcHJhdGljYW1lbnRlIGNvbnTDrW51b3MsIG8gcXVlIHNpZ25pZmljYSBxdWUgYXMgcmVjZWl0YXMgZG8gZ292ZXJubyBuw6NvIHTDqm0gc2lkbyBzdWZpY2llbnRlcyBwYXJhIGNvYnJpciBzZXVzIGdhc3RvcyBjb3JyZW50ZXMsIGV4Y2x1w61kb3Mgb3MganVyb3MgZGEgZMOtdmlkYS4gRW50cmUgbm92ZW1icm8gZSBkZXplbWJybyBkZSAyMDI0LCBvYnNlcnZhLXNlIHVtYSByZWR1w6fDo28gZG8gdGFtYW5obyBkZXNzZXMgZMOpZmljaXRzLCBlIGFvIGxvbmdvIGRlIDIwMjUgb3MgZMOpZmljaXRzIHTDqm0gc2UgbWFudGlkbyBlbSBuw612ZWlzIG1haXMgYmFpeG9zLiBBaW5kYSBhc3NpbSwgYSBzaXR1YcOnw6NvIGZpc2NhbCBicmFzaWxlaXJhIHBlcm1hbmVjZSBwcmVvY3VwYW50ZS4NCg0KQSByZWR1w6fDo28gZG8gZMOpZmljaXQgw6ksIHNlbSBkw7p2aWRhLCB1bSBtb3ZpbWVudG8gcG9zaXRpdm8uIE5vIGVudGFudG8sIMOpIGltcG9ydGFudGUgbm90YXIgcXVlIGEgZMOtdmlkYSBww7pibGljYSBicmFzaWxlaXJhIGrDoSBzZSBlbmNvbnRyYSBlbSBwYXRhbWFyIGVsZXZhZG8gLSBjaGVnYW5kbyBlbSBxdWFzZSA4MCUgZG8gUElCIGNvbW8gcG9kZSBzZXIgdmlzdG8gbmEgbGluaGEgYXp1bCAtLCBlIGlzc28gZmF6IGNvbSBxdWUgZWxhIGFwcmVzZW50ZSB1bWEgZGluw6JtaWNhIGRlIGNyZXNjaW1lbnRvIHByYXRpY2FtZW50ZSBhdXTDtG5vbWEuIE1lc21vIHF1ZSBvIGdvdmVybm8gY29uc2VndWlzc2UgemVyYXIgY29tcGxldGFtZW50ZSBzZXVzIGdhc3RvcyBkaXNjcmljaW9uw6FyaW9zLCBhIGTDrXZpZGEgY29udGludWFyaWEgYSBjcmVzY2VyLCBpbXB1bHNpb25hZGEgcGVsYSBjb21iaW5hw6fDo28gZW50cmUgdW0gY3Jlc2NpbWVudG8gZWNvbsO0bWljbyBiYWl4byBlIGp1cm9zIGVzdHJ1dHVyYWxtZW50ZSBlbGV2YWRvcy4gRW0gb3V0cmFzIHBhbGF2cmFzLCBvIHJlc3VsdGFkbyBwcmltw6FyaW8gZGVpeGEgZGUgc2VyIHN1ZmljaWVudGUsIGlzb2xhZGFtZW50ZSwgcGFyYSBlc3RhYmlsaXphciBhIHRyYWpldMOzcmlhIGRhIGTDrXZpZGEgcXVhbmRvIG8gZGlmZXJlbmNpYWwgZW50cmUgYSB0YXhhIGRlIGp1cm9zIGUgYSB0YXhhIGRlIGNyZXNjaW1lbnRvIGRhIGVjb25vbWlhIMOpIGFtcGxvIGUgcGVyc2lzdGVudGUuDQoNCkVzc2UgcXVhZHJvIGZpc2NhbCBwcmVjaXNhIHNlciBsaWRvIGVtIGNvbmp1bnRvIGNvbSBvcyBpbmRpY2Fkb3JlcyBkaXNjdXRpZG9zIG5hcyBzZcOnw7VlcyBhbnRlcmlvcmVzLiBBIGVjb25vbWlhIGJyYXNpbGVpcmEgZW5jb250cmEtc2UgZW0gdW1hIHNpdHVhw6fDo28gbmEgcXVhbCBhIGVzdHJ1dHVyYSBwcm9kdXRpdmEgbsOjbyBzZSB0cmFuc2Zvcm1vdSwgbyBpbnZlc3RpbWVudG8gcGVybWFuZWNlIGluc3TDoXZlbCwgbyBtZXJjYWRvIGRlIHRyYWJhbGhvIGVzdMOhIGFxdWVjaWRvIHNlbSByZXNlcnZhcyBkZSBtw6NvIGRlIG9icmEgZGlzcG9uw612ZWwsIGUgYSBwcm9kdXRpdmlkYWRlIHNlZ3VlIGVtIHRyYWpldMOzcmlhIGRlIHF1ZWRhLiBFc3NlIGNvbmp1bnRvIGRlIGZyYWdpbGlkYWRlcyBlc3RydXR1cmFpcyBsaW1pdGEgYSBjYXBhY2lkYWRlIGRlIGNyZXNjaW1lbnRvIGRvIHBhw61zIG5vIGxvbmdvIHByYXpvIC0gZSwganVzdGFtZW50ZSBwb3IgaXNzbywgcmV0cm9hbGltZW50YSBhIGRldGVyaW9yYcOnw6NvIGZpc2NhbDogc2VtIGNyZXNjaW1lbnRvIHJvYnVzdG8sIGEgcmVsYcOnw6NvIGTDrXZpZGEvUElCIHRlbmRlIGEgc2UgZWxldmFyIG1lc21vIG5hIGF1c8OqbmNpYSBkZSBub3ZvcyBkw6lmaWNpdHMgZXhwcmVzc2l2b3MuIA0KDQpPIHJlc3VsdGFkbyDDqSB1bSBjZW7DoXJpbyBlbSBxdWUgYXMgY29udGFzIHDDumJsaWNhcyBzZSBkZXRlcmlvcmFtIG7Do28gYXBlbmFzIHBlbG8gbGFkbyBkbyBnYXN0bywgbWFzIHRhbWLDqW0gcGVsYSBwcsOzcHJpYSBmcmFnaWxpZGFkZSBlc3RydXR1cmFsIGRhIGVjb25vbWlhIGJyYXNpbGVpcmEgZW0gZ2VyYXIgY3Jlc2NpbWVudG8gc3VzdGVudGFkby4NCg0KIyMgQ29uY2x1c8Ojbw0KQSBhbsOhbGlzZSBoaXN0w7NyaWNhIGRvcyBjaWNsb3MgZWNvbsO0bWljb3MgYnJhc2lsZWlyb3Mgc2UgbW9zdHJhIGZ1bmRhbWVudGFsIHBhcmEgYSBjb21wcmVlbnPDo28gZG8gbW9tZW50byBhdHVhbCBkYSBlY29ub21pYS4gQW8gbG9uZ28gZGVzdGUgcmVsYXTDs3JpbywgZm9yYW0gZXhhbWluYWRvcyBvIGNpY2xvIGRlIGV4cGFuc8OjbyBkZSAyMDA44oCTMjAxNCwgYSByZWNlc3PDo28gZGUgMjAxNOKAkzIwMTYgZSBhIGZhc2UgaW5pY2lhZGEgYXDDs3MgbyBzZWd1bmRvIHRyaW1lc3RyZSBkZSAyMDIwLCBidXNjYW5kbyBpZGVudGlmaWNhciBuw6NvIGFwZW5hcyBvcyBtb3ZpbWVudG9zIGRlIGNhZGEgcGVyw61vZG8sIG1hcywgc29icmV0dWRvLCBvcyBwYWRyw7VlcyBlc3RydXR1cmFpcyBxdWUgc2UgcmVwZXRlbSBhbyBsb25nbyBkbyB0ZW1wby4gRXNzYSBhYm9yZGFnZW0gcGVybWl0ZSBvYnNlcnZhciBxdWUgbXVpdGFzIGRhcyBmcmFnaWxpZGFkZXMgaWRlbnRpZmljYWRhcyBuYSBlY29ub21pYSBicmFzaWxlaXJhIGF0dWFsIHTDqm0gcmHDrXplcyBlbSBjaWNsb3MgYW50ZXJpb3JlcywgZSBxdWUgc3VhIHBlcnNpc3TDqm5jaWEgaW1ww7VlIGxpbWl0ZXMgaW1wb3J0YW50ZXMgYW8gY3Jlc2NpbWVudG8gZGUgbG9uZ28gcHJhem8uDQoNCkEgc2l0dWHDp8OjbyBhdHVhbCBkYSBlY29ub21pYSBicmFzaWxlaXJhIMOpIHByZW9jdXBhbnRlLiBPIGNyZXNjaW1lbnRvIHBlcm1hbmVjZSBlbSByaXRtbyBiYWl4bywgYSBpbmTDunN0cmlhIG9wZXJhIHByw7N4aW1hIGRvIGxpbWl0ZSBkYSBjYXBhY2lkYWRlIGluc3RhbGFkYSwgbyBtZXJjYWRvIGRlIHRyYWJhbGhvIGVuY29udHJhLXNlIGFxdWVjaWRvLCBjb20gdGF4YXMgZGUgZGVzb2N1cGHDp8OjbyBlIHN1YnV0aWxpemHDp8OjbyBlbSBuw612ZWlzIG3DrW5pbW9zLCBlIGEgcHJvZHV0aXZpZGFkZSB0b3RhbCBkb3MgZmF0b3JlcyBzZWd1ZSBlbSB0cmFqZXTDs3JpYSBkZSBxdWVkYS4gRXNzZSBjb25qdW50byBkZSBpbmRpY2Fkb3JlcyBhcG9udGEgcGFyYSB1bWEgZWNvbm9taWEgcXVlLCBlbWJvcmEgYXByZXNlbnRlIHJlc2lsacOqbmNpYSBubyBjdXJ0byBwcmF6bywgZW5jb250cmEtc2UgZXN0YWduYWRhIGVtIHRlcm1vcyBlc3RydXR1cmFpcyDigJQgY29tIHBvdWNhIGZvbGdhIGRlIGNhcGFjaWRhZGUgcHJvZHV0aXZhLCBzZW0gZ2FuaG9zIGNvbnNpc3RlbnRlcyBkZSBlZmljacOqbmNpYSBlIGNvbSBmcmFnaWxpZGFkZXMgZmlzY2FpcyBwZXJzaXN0ZW50ZXMuIE8gQnJhc2lsIHByZWNpc2EsIHBvcnRhbnRvLCBlbmNvbnRyYXIgbWVjYW5pc21vcyBwYXJhIGNyZXNjZXIgZGUgZm9ybWEgc3VzdGVudMOhdmVsLCBvIHF1ZSBleGlnZSwgbmVjZXNzYXJpYW1lbnRlLCB1bWEgcGVyc3BlY3RpdmEgZGUgbG9uZ28gcHJhem8gdm9sdGFkYSBhbyBhdW1lbnRvIGRhIHByb2R1dGl2aWRhZGUsIMOgIHRyYW5zZm9ybWHDp8OjbyBlc3RydXR1cmFsIGRhIGVjb25vbWlhIGUgw6AgYW1wbGlhw6fDo28gZG8gaW52ZXN0aW1lbnRvIHByb2R1dGl2by4NCg0KUXVhbnRvIMOgIGZhc2UgZW0gcXVlIGEgZWNvbm9taWEgYnJhc2lsZWlyYSBlZmV0aXZhbWVudGUgc2UgZW5jb250cmEsIGFpbmRhIG7Do28gaMOhIGRlZmluacOnw6NvIG9maWNpYWwuIE8gw7psdGltbyBjaWNsbyBkYXRhZG8gcGVsbyBDT0RBQ0UgZm9pIGVuY2VycmFkbyBubyBzZWd1bmRvIHRyaW1lc3RyZSBkZSAyMDIwIGUsIGF0w6kgbyBtb21lbnRvIGRhIHB1YmxpY2HDp8OjbyBkZXN0ZSByZWxhdMOzcmlvLCBlbSBtYWlvIGRlIDIwMjYsIG7Do28gaG91dmUgZGl2dWxnYcOnw6NvIGRlIG5vdmFzIGRhdGFzIC0gZGUgbW9kbyBxdWUgbsOjbyDDqSBwb3Nzw612ZWwgYWZpcm1hciBmb3JtYWxtZW50ZSBzZSBvIHBhw61zIHNlZ3VlIGVtIGV4cGFuc8OjbyBvdSBzZSBqw6EgdHJhbnNpdG91IHBhcmEgdW1hIG5vdmEgZmFzZSByZWNlc3NpdmEuIEluZGVwZW5kZW50ZW1lbnRlIGRhIGRhdGHDp8OjbywgY29udHVkbywgbyBwb250byBjZW50cmFsIGRhIGFuw6FsaXNlIHBlcm1hbmVjZSBvIG1lc21vLiBTZSBvIEJyYXNpbCBhaW5kYSBzZSBlbmNvbnRyYSBlbSBleHBhbnPDo28sIGFzIGZyYWdpbGlkYWRlcyBvYnNlcnZhZGFzIHPDo28gZXhhdGFtZW50ZSBhcyBtZXNtYXMgcXVlIHByZWNlZGVyYW0gYSByZWNlc3PDo28gZGUgMjAxNOKAkzIwMTY6IGJhaXhhIHByb2R1dGl2aWRhZGUsIGludmVzdGltZW50byBpbnN0w6F2ZWwsIGVzdHJ1dHVyYSBwcm9kdXRpdmEgcG91Y28gYWx0ZXJhZGEgZSBjb250YXMgcMO6YmxpY2FzIGZyYWdpbGl6YWRhcy4gU2UgdW1hIG5vdmEgcmVjZXNzw6NvIGrDoSBlc3RpdmVyIGVtIGN1cnNvLCBlc3NhcyBtZXNtYXMgZnJhZ2lsaWRhZGVzIGVzdMOjbyBlbnRyZSBzdWFzIHByaW5jaXBhaXMgY2F1c2FzLg0KDQpFbSBxdWFscXVlciBkYXMgaGlww7N0ZXNlcywgYSBjb25jbHVzw6NvIMOpIGEgbWVzbWEuIE9zIHByb2JsZW1hcyBlc3RydXR1cmFpcyBxdWUgbGltaXRhbSBvIGNyZXNjaW1lbnRvIGRhIGVjb25vbWlhIGJyYXNpbGVpcmEgbsOjbyBzw6NvIG5vdm9zOiBmb3JhbSBpZGVudGlmaWNhZG9zIG5vIGNpY2xvIGRlIGV4cGFuc8OjbyBkZSAyMDA44oCTMjAxNCwgZXhwb3N0b3MgY29tIG5pdGlkZXogcGVsYSByZWNlc3PDo28gZGUgMjAxNOKAkzIwMTYgZSBzZWd1ZW0gcHJlc2VudGVzIG5vIGNpY2xvIGF0dWFsLiBFbnF1YW50byBlc3NhcyBxdWVzdMO1ZXMgZXN0cnV0dXJhaXMgbsOjbyBmb3JlbSBlZmV0aXZhbWVudGUgZW5mcmVudGFkYXMgLSBzb2JyZXR1ZG8gbm8gcXVlIGRpeiByZXNwZWl0byDDoCBwcm9kdXRpdmlkYWRlIGUgYW8gaW52ZXN0aW1lbnRvIHByb2R1dGl2byAtIGEgZWNvbm9taWEgYnJhc2lsZWlyYSB0ZW5kZSBhIHBlcm1hbmVjZXIgcHJlc2EgZW0gY2ljbG9zIGN1cnRvcyBkZSBjcmVzY2ltZW50byBtb2RlcmFkbyBzZWd1aWRvcyBwb3IgcmVjZXNzw7VlcyBwcm9mdW5kYXMsIHNlbSBjb25zZWd1aXIgY29uc29saWRhciB1bWEgdHJhamV0w7NyaWEgZGUgZXhwYW5zw6NvIHN1c3RlbnTDoXZlbCBubyBsb25nbyBwcmF6by4NCg0KIyMgUmVmZXLDqm5jaWFzDQoNCkFCRUwsIEFuZHJldyBCLjsgQkVSTkFOS0UsIEJlbiBTLjsgQ1JPVVNIT1JFLCBEZWFuLiBNYWNyb2Vjb25vbWlhLiA2LiBlZC4gU8OjbyBQYXVsbzogUGVhcnNvbiBBZGRpc29uIFdlc2xleSwgMjAwOC5BR8OKTkNJQSBCUkFTSUwuIEZpdGNoIHJlYmFpeGEgbm90YSBlIEJyYXNpbCBwZXJkZSBncmF1IGRlIGludmVzdGltZW50by4gQnJhc8OtbGlhOiBFQkMsIDIwMTUuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL2FnZW5jaWFicmFzaWwuZWJjLmNvbS5ici9lY29ub21pYS9ub3RpY2lhLzIwMTUtMTIvZml0Y2gtcmViYWl4YS1icmFzaWwtZS1wYWlzLXBlcmRlLWdyYXUtZGUtaW52ZXN0aW1lbnRvLiBBY2Vzc28gZW06IDI1IG1haW8gMjAyNi5CQUxBU1NJQU5PLCBNYXJjZWwuIFJlY2Vzc8OjbyBicmFzaWxlaXJhICgyMDE0LTIwMTYpOiB1bWEgYW7DoWxpc2UgcG9yIG1laW8gZG8gbcOpdG9kbyBkbyBjb250cm9sZSBzaW50w6l0aWNvIGRvIFBJQiwgUElCIHBlciBjYXBpdGEsIHRheGEgZGUgaW52ZXN0aW1lbnRvIGUgdGF4YSBkZSBkZXNlbXByZWdvLiBCbG9nIGRvIElCUkUsIDIwMTguIERpc3BvbsOtdmVsIGVtOiBodHRwczovL2Jsb2dkb2licmUuZmd2LmJyL3Bvc3RzL3JlY2Vzc2FvLWJyYXNpbGVpcmEtMjAxNC0yMDE2LXVtYS1hbmFsaXNlLXBvci1tZWlvLWRvLW1ldG9kby1kby1jb250cm9sZS1zaW50ZXRpY28tZG8tcGliLXBpYi4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuQkFOQ08gQ0VOVFJBTCBETyBCUkFTSUwuIFNpc3RlbWEgR2VyZW5jaWFkb3IgZGUgU8OpcmllcyBUZW1wb3JhaXMgKFNHUyk6IHPDqXJpZXMgZGUgY3LDqWRpdG8sIFNlbGljIGUgaW5kaWNhZG9yZXMgbW9uZXTDoXJpb3MuIEJyYXPDrWxpYTogQkNCLCAyMDI0LiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly93d3czLmJjYi5nb3YuYnIvc2dzcHViLy4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuQkFSUkVUTywgRmzDoXZpbyBBdGFsaWJhOyBBVkVMSU5PLCBQZWRybzsgRlJBTsOHQSwgSm/Do28gTcOhcmlvIFNhbnRvcyBkZS4gTm92YXMgZXZpZMOqbmNpYXMgc29icmUgbyBwZXNvIGRvIGNyw6lkaXRvIG5hcyBmYW3DrWxpYXMgYnJhc2lsZWlyYXMuIEJsb2cgZG8gSUJSRSwgMjAyNi4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vYmxvZ2RvaWJyZS5mZ3YuYnIvcG9zdHMvbm92YXMtZXZpZGVuY2lhcy1zb2JyZS1vLXBlc28tZG8tY3JlZGl0by1uYXMtZmFtaWxpYXMtYnJhc2lsZWlyYXMuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LkNPTUlUw4ogREUgREFUQcOHw4NPIERFIENJQ0xPUyBFQ09Ow5RNSUNPUyAoQ09EQUNFKS4gQ3Jvbm9sb2dpYSBkZSBDaWNsb3MgZGEgRWNvbm9taWEgQnJhc2lsZWlyYS4gUmlvIGRlIEphbmVpcm86IEZHViBJQlJFLCAyMDI0LiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly9wb3J0YWxpYnJlLmZndi5ici9jb2RhY2UtY3Jvbm9sb2dpYS4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuQ1JJU0UgZWNvbsO0bWljYSBicmFzaWxlaXJhIGRlIDIwMTQuIEluOiBXSUtJUMOJRElBOiBhIGVuY2ljbG9ww6lkaWEgbGl2cmUuIFtTLiBsLl0sIDIwMjUuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3B0Lndpa2lwZWRpYS5vcmcvd2lraS9DcmlzZV9lY29uJUMzJUI0bWljYV9icmFzaWxlaXJhX2RlXzIwMTQuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LkRFUEFSVEFNRU5UTyBJTlRFUlNJTkRJQ0FMIERFIEVTVEFUw41TVElDQSBFIEVTVFVET1MgU09DSU9FQ09Ow5RNSUNPUy4gTm90YSB0w6ljbmljYSBuwrogNzk6IHBvbMOtdGljYSBkZSB2YWxvcml6YcOnw6NvIGRvIHNhbMOhcmlvIG3DrW5pbW8g4oCUIHZhbG9yIHBhcmEgMjAwOS4gU8OjbyBQYXVsbzogRElFRVNFLCAyMDA5LiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly93d3cuZGllZXNlLm9yZy5ici9ub3RhdGVjbmljYS8yMDA5L25vdGF0ZWM3OVNhbE1pbjIwMDkuaHRtbC4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuREVQQVJUQU1FTlRPIElOVEVSU0lORElDQUwgREUgRVNUQVTDjVNUSUNBIEUgRVNUVURPUyBTT0NJT0VDT07DlE1JQ09TLiBOb3RhIHTDqWNuaWNhIG7CuiAxMzU6IGEgZXZvbHXDp8OjbyBkbyBjcsOpZGl0byBuYSBlY29ub21pYSBicmFzaWxlaXJhIDIwMDjigJMyMDE0LiBTw6NvIFBhdWxvOiBESUVFU0UsIDIwMTQuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3d3dy5kaWVlc2Uub3JnLmJyL25vdGF0ZWNuaWNhLzIwMTQvbm90YVRlYzEzNUNyZWRpdG8ucGRmLiBBY2Vzc28gZW06IDI1IG1haW8gMjAyNi5FLUPDgUxDVUxPUy4gSGlzdMOzcmljbyBkbyBzYWzDoXJpbyBtw61uaW1vLiBbcy5sLjogcy5uLiwgcy5kLl0uIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3d3dy5lY2FsY3Vsb3MuY29tLmJyL3V0aWxpdGFyaW9zL2hpc3Rvcmljby1zYWxhcmlvLW1pbmltby5waHAuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LkZVTkRBw4fDg08gR0VUVUxJTyBWQVJHQVMuIEluc3RpdHV0byBCcmFzaWxlaXJvIGRlIEVjb25vbWlhIChGR1YgSUJSRSkuIEluZGljYWRvcmVzIHRyaW1lc3RyYWlzIGRlIFBURjogNMK6IHRyaW1lc3RyZSBkZSAyMDI1LiBSaW8gZGUgSmFuZWlybzogRkdWIElCUkUsIDIwMjYuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL2licmUuZmd2LmJyL3NpdGVzL2licmUuZmd2LmJyL2ZpbGVzL2FycXVpdm9zL3U2NS9pbmRpY2Fkb3Jlc190cmltZXN0cmFpc19kZV9wdGZfLV80dDIwMjUucGRmLiBBY2Vzc28gZW06IDI1IG1haW8gMjAyNi5GVU5EQcOHw4NPIEdFVFVMSU8gVkFSR0FTLiBJbnN0aXR1dG8gQnJhc2lsZWlybyBkZSBFY29ub21pYSAoRkdWIElCUkUpLiBPYnNlcnZhdMOzcmlvIGRhIFByb2R1dGl2aWRhZGUgUmVnaXMgQm9uZWxsaS4gUmlvIGRlIEphbmVpcm86IEZHViBJQlJFLCAyMDI0LiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly9pYnJlLmZndi5ici9vYnNlcnZhdG9yaW8tcHJvZHV0aXZpZGFkZS4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuRlVOREHDh8ODTyBHRVRVTElPIFZBUkdBUy4gSW5zdGl0dXRvIEJyYXNpbGVpcm8gZGUgRWNvbm9taWEgKEZHViBJQlJFKS4gUG9ydGFsIGRvIENpY2xvIEVjb27DtG1pY28uIFJpbyBkZSBKYW5laXJvOiBGR1YgSUJSRSwgMjAyNC4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vY2ljbG8tZWNvbm9taWNvLWlicmUuZmd2LmJyLy4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuRlVOREHDh8ODTyBHRVRVTElPIFZBUkdBUy4gSW5zdGl0dXRvIEJyYXNpbGVpcm8gZGUgRWNvbm9taWEgKEZHViBJQlJFKS4gUmVzdWx0YWRvcyBkb3MgaW5kaWNhZG9yZXMgZGUgcHJvZHV0aXZpZGFkZSBkbyB0cmFiYWxobyBubyBxdWFydG8gdHJpbWVzdHJlIGRlIDIwMjUuIEJsb2cgZG8gSUJSRSwgMjAyNi4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vYmxvZ2RvaWJyZS5mZ3YuYnIvcG9zdHMvcmVzdWx0YWRvcy1kb3MtaW5kaWNhZG9yZXMtZGUtcHJvZHV0aXZpZGFkZS1kby10cmFiYWxoby1uby1xdWFydG8tdHJpbWVzdHJlLWRlLTIwMjUuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LkZVTkRBw4fDg08gR0VUVUxJTyBWQVJHQVMuIEluc3RpdHV0byBCcmFzaWxlaXJvIGRlIEVjb25vbWlhIChGR1YgSUJSRSkuIFNvYnJlIGNpY2xvcyBlY29uw7RtaWNvcy4gUmlvIGRlIEphbmVpcm86IEZHViBJQlJFLCAyMDI0LiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly9wb3J0YWxpYnJlLmZndi5ici9zb2JyZS1jaWNsb3MtZWNvbm9taWNvcy4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuRlVOREHDh8ODTyBHRVRVTElPIFZBUkdBUy4gSW5zdGl0dXRvIEJyYXNpbGVpcm8gZGUgRWNvbm9taWEgKEZHViBJQlJFKS4gU29uZGFnZW5zLCDDjW5kaWNlcyBkZSBDb25maWFuw6dhIGUgSW5kaWNhZG9yZXMgZGUgQXRpdmlkYWRlLiBSaW8gZGUgSmFuZWlybzogRkdWIElCUkUsIFsyMDI2XS4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vcG9ydGFsaWJyZS5mZ3YuYnIuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LklOU1RJVFVUTyBCUkFTSUxFSVJPIERFIEdFT0dSQUZJQSBFIEVTVEFUw41TVElDQS4gQ29udGFzIE5hY2lvbmFpcyBUcmltZXN0cmFpcy4gUmlvIGRlIEphbmVpcm86IElCR0UsIDIwMjQuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3d3dy5pYmdlLmdvdi5ici9lc3RhdGlzdGljYXMvZWNvbm9taWNhcy9jb250YXMtbmFjaW9uYWlzLzkzMDAtY29udGFzLW5hY2lvbmFpcy10cmltZXN0cmFpcy5odG1sLiBBY2Vzc28gZW06IDI1IG1haW8gMjAyNi5JTlNUSVRVVE8gQlJBU0lMRUlSTyBERSBHRU9HUkFGSUEgRSBFU1RBVMONU1RJQ0EuIEV2b2x1w6fDo28gZG8gTWVyY2FkbyBkZSBUcmFiYWxobzogcmV0cm9zcGVjdGl2YSAyMDAz4oCTMjAxNC4gUmlvIGRlIEphbmVpcm86IElCR0UsIDIwMTUuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL2Z0cC5pYmdlLmdvdi5ici9UcmFiYWxob19lX1JlbmRpbWVudG8vUGVzcXVpc2FfTWVuc2FsX2RlX0VtcHJlZ28vRXZvbHVjYW9fTWVyY2Fkb19UcmFiYWxoby9yZXRyb3NwZWN0aXZhMjAwM18yMDE0LnBkZi4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuSU5TVElUVVRPIEJSQVNJTEVJUk8gREUgR0VPR1JBRklBIEUgRVNUQVTDjVNUSUNBLiDDjW5kaWNlIE5hY2lvbmFsIGRlIFByZcOnb3MgYW8gQ29uc3VtaWRvciAoSU5QQykuIFJpbyBkZSBKYW5laXJvOiBJQkdFLCBbMjAyNl0uIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3d3dy5pYmdlLmdvdi5ici9lc3RhdGlzdGljYXMvZWNvbm9taWNhcy9wcmVjb3MtZS1jdXN0b3MvOTI1OC1pbmRpY2UtbmFjaW9uYWwtZGUtcHJlY29zLWFvLWNvbnN1bWlkb3IuaHRtbC4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuSU5TVElUVVRPIEJSQVNJTEVJUk8gREUgR0VPR1JBRklBIEUgRVNUQVTDjVNUSUNBLiBQZXNxdWlzYSBNZW5zYWwgZGUgRW1wcmVnbyAoUE1FKS4gUmlvIGRlIEphbmVpcm86IElCR0UsIFsyMDI2XS4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vd3d3LmliZ2UuZ292LmJyL2VzdGF0aXN0aWNhcy9zb2NpYWlzL3RyYWJhbGhvLzkxODAtcGVzcXVpc2EtbWVuc2FsLWRlLWVtcHJlZ28uaHRtbC4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuSU5TVElUVVRPIEJSQVNJTEVJUk8gREUgR0VPR1JBRklBIEUgRVNUQVTDjVNUSUNBLiBQZXNxdWlzYSBOYWNpb25hbCBwb3IgQW1vc3RyYSBkZSBEb21pY8OtbGlvcyBDb250w61udWEgKFBOQUQgQ29udMOtbnVhKS4gUmlvIGRlIEphbmVpcm86IElCR0UsIFsyMDI2XS4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vc2lkcmEuaWJnZS5nb3YuYnIvVGFiZWxhLzE4NDYuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LklOU1RJVFVUTyBCUkFTSUxFSVJPIERFIEdFT0dSQUZJQSBFIEVTVEFUw41TVElDQS4gU2lzdGVtYSBJQkdFIGRlIFJlY3VwZXJhw6fDo28gQXV0b23DoXRpY2EgKFNJRFJBKTogVGFiZWxhcyA1OTMyIChDb250YXMgTmFjaW9uYWlzIFRyaW1lc3RyYWlzKSBlIDQwOTkgKFBOQUQgQ29udMOtbnVhKS4gUmlvIGRlIEphbmVpcm86IElCR0UsIDIwMjQuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3NpZHJhLmliZ2UuZ292LmJyLy4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuUkFORE8sIEltaXJhIFRhaXJhLiBPIEJyYXNpbCBlIGEgY3Jpc2UgZmluYW5jZWlyYTogcG9sw610aWNhcyBlY29uw7RtaWNhcyAoMjAwOOKAkzIwMTQpLiBUcmFiYWxobyBkZSBjb25jbHVzw6NvIGRlIGN1cnNvIOKAlCBGYWN1bGRhZGUgZGUgQ2nDqm5jaWFzIGUgTGV0cmFzLCBVbml2ZXJzaWRhZGUgRXN0YWR1YWwgUGF1bGlzdGEgIkrDumxpbyBkZSBNZXNxdWl0YSBGaWxobyIsIENhbXB1cyBkZSBBcmFyYXF1YXJhLCBbcy5kLl0uIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3JlcG9zaXRvcmlvLnVuZXNwLmJyL3NlcnZlci9hcGkvY29yZS9iaXRzdHJlYW1zL2JmNzg4MTYxLWM0YzgtNGRiMy05MDVlLTA3OTFlYzhlNGU1NS9jb250ZW50LiBBY2Vzc28gZW06IDI1IG1haW8gMjAyNi5WRUxPU08sIEZlcm5hbmRvOyBGRUlKw5MsIEphbmHDrW5hOyBCQVJCT1NBIEZJTEhPLCBGZXJuYW5kbyBkZSBIb2xhbmRhOyBSVUhFLCBBbmEgUGF1bGEuIMONbmRpY2UgZGUgQ2FwaXRhbCBIdW1hbm8gKElDSCkgQW51YWwuIFJpbyBkZSBKYW5laXJvOiBGR1YgSUJSRSwganVuLiAyMDIzLiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly9pYnJlLmZndi5ici9zaXRlcy9pYnJlLmZndi5ici9maWxlcy9hcnF1aXZvcy91NjUvaWNoX2FudWFsX2ZpbmFsLnBkZi4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYu