Farmacocinética

Fonte: PharmPress

\(MEC\) = Minimum effective concentration

\((C_p)_{max}\) = \(C_{max}\) = Peak plasma concentration

\(T_{max}\) = Peak time

\(T_{1/2}\) = Biological half-life

Onset of action ~ \(\frac{T_{max}.MEC}{(C_p)_{max}}\)

Anti-histamínicos

Fonte: Church & Church, 2013

Droga T12 (h)
Difenidramina 8.61
Clorfeniramina 27.00
Hidroxizina 25.00
Prometazina 19.00
Droga Dose Ki RO4 RO24
Desloratadina 5 0.4 71 43
Fexofenadina 120 10.0 95 12
Levocetirizina 5 3.0 90 57

Emergência

Anti-alérgicos

Síndromes alérgicas

Síntese dos estudos

Alguns casos de alergia refratária, é possível aumentar a dose dos antialérgicos em até 4 vezes a dose convencional, sem efeitos adversos notáveis.

Em geral, parece ser mais efetivo utilizar combinação de inibidores de H1 + H2 do que inibidores de H1 isoladamente. Por exemplo:

  • Difenidramina + Ranitidina
  • Difenidramina + Cimetidina
Estudos

Fonte: Staevska et al., 2010

Em casos de urticária refratária ao tratamento, 75% dos pacientes respondem bem a superdosagens (até o quádruplo da dose convencional) de levocetirizina ou desloratadina, até um máximo de 20 mg de cada droga, em monoterapia.


Fonte: Lin et al., 2000

Inibidores de H1 (50 mg difenidramina) + Inibidores de H2 (50 mg ranitidina) são mais efetivos que Inibidores de H1 isoladamente (50 mg difenidramina) para o tratamento de síndromes alérgicas.


Fonte: Runge et al., 1992

Inibidores de H1 (50 mg IV difenidramina) são mais efetivos que inibidores de H2 (300 mg IV cimetidina) para tratamento do prurido de alergias. Contudo, o tratamento combinado de inibidores de H1+H2 é mais efetivo que inibidores de H1 isoladamente para o tratamento de urticária aguda.


Fonte: e Palungwachira et al., 2020

Dexametasona oral aumenta a recorrência de urticária, em relação aos pacientes tratados somente com Clorfeniramina.

Anafilaxia

Fonte: Elis et al., 2020

O tratamento padrão para choques anafiláticos é a injeção de adrenalina no músculo reto lateral da coxa, podendo ser aplicado até duas doses, a segunda após um intervalo de 10 minutos. Contudo, no Brasil essa possibilidade não existe, o que nos obriga a procurar por tratamentos alternativos.

Os tratamentos adjuvantes são os anti-H1 IV (primeira geração), VO (segunda geração), e anti-H2

  • Primeira geração
    • Difenidramina
    • Clorfeniramina
    • Hidroxizina
    • Prometazina
  • Segunda geração
    • Cetirizina (age em 30 min)
  • Anti-H2
    • Ranitidina

Além dos tratamentos citados acima, que têm efeito em síndromes alérgicas, há tratamentos que ainda necessitam de comprovação de efeito, como:

O azul de metileno aumenta a pressão arterial média em 6 mmHg, sem diferença na mortalidade, segundo meta-análise (Pasin et al., 2013). Pode ser usado em choque vasodilatatório (Zhang et al., 2017)

Classes e doses

Anti-H1

O receptor H1 é constitutivo, ou seja, ele é constantemente ativado em níveis baixos, mesmo sem ligante. Quando a histamina se liga, ele aumenta a sua atividade.

A maioria dos anti-histamínicos age como agonista inverso do receptor H1. Ou seja, os fármacos se ligam ao receptor H1 e diminuem a sua atividade constitutiva.

Esses fármacos normalmente atravessam a barreira hematoencefálica, causando sedação. Esse efeito é desejado nos pacientes com insônia (e.g. difenidramina e doxilamina).

Outra função desses fármacos é reduzir a inflamação, uma vez que a ativação constitutiva do H1 implica na expressão de NF-kB. Esse efeito é desejado para poupar o uso de AINEs (e.g. hidroxizina, prometazina, feniltoloxamina, orfenadrina e tripelenamina).

  • Primeira geração
    • Difenidramina
    • Clemastina
    • Triprolidina
    • Hidroxizina
    • Ciproheptadina
    • Prometazina
    • Clorfeniramina
    • Bromfeniramina
    • Dexclorfeniramina
    • Dimenidrato
  • Segunda geração
    • Terfenadina
    • Loratadina
    • Ebastina
    • Cetirizina
    • Rupatadina
    • Mizolastina
    • Emedastina
    • Azelastina
    • Bilastina
  • Terceira geração
    • Desloratadina (metabólito da loratadina)
    • Fexofenadina (metabólito da terfenadina)
    • Levocetirizina (enantiômero da cetirizina)
  • Anti histamínicos usados para outros fins
    • Quetiapina (anti-psicótico)
    • Mirtazapina (anti-depressivo)
    • Orfenadrina (relaxante muscular)
    • Cinarizina (cinetose)
    • Prometazina (anti-náusea)
    • Dimenidrato (anti-náusea)

Anti-H2

São geralmente usados pelo efeito inibidor de secreção gástrica, mas também possuem efeito no tratamento combinado de alergias.

  • Cimetidina
  • Ranitidina
  • Nizatidina
  • Famotidina

Otorrino

Rinite alérgica

Síntese dos estudos

Boas opções de tratamento:

  • Mometasona IN 200μg + Ebastina VO 10 mg (2018)
  • Fexofenadina/Pseudoefedrina + Mometasona por duas semanas (2017)
  • Montelukast-fexofenadina (2016)
  • Azelastina + fluticasona (Dymista) (2015)
  • Desloratadine/pseudoephedrina 5/240 1x dia ou 2.5/120 2x ao dia (2005)
  • Petasides hybridus (2001)
  • Montelukast 10 mg + Loratadina 10 mg (2000)
Estudos

Fonte: Li et al., 2018

Mometasona IN 200μg + Ebastina VO 10 mg > Ebastina VO 20 mg (P < 0.001)

Fonte: Berger & Meltzer, 2015

Azelastina + fluticasona (Dymista) > Corticoide intranasal (ação em 30 min)

Fonte: Weiner, 1998

Corticoides intranasais > Anti-H1 orais (OR 0.08-0.8)

Fonte: Meltzer et al., 2000

Montelukast 10 mg + Loratadina 10 mg > monoterapia (P < 0.001)

Contudo, outro estudo realizado 2 anos depois não encontrou diferença entre montelukast/loratadina vs monoterapia com loratadina.

Fonte: Schapowal, 2001

Petasides hybridus (Antilerg, butterbur) tem efeito equivalente a cetirizina, causando menos sedação.

Fonte: Kokan et al., 2017

Fexofenadina/Pseudoefedrina + Mometasona por duas semanas > Mometasona monoterapia

Fonte: Snidvongs et al., 2017

Fexofenadina = levocetirizina.

Fonte: Mahatme et al., 2016

Montelukast-fexofenadina > montelukast-levocetirizina (p <0.05)

Fonte: DuBuske, 2005

Para o tratamento de congestão nasal na rinite alérgica:

  • Desloratadina 5 mg > Fexofenadina 120 mg
  • Desloratadina 5 mg = Fexofenadina 180 mg
  • Desloratadine/pseudoephedrina (5/240) > monoterapia
  • Desloratadine/pseudoephedrina (2.5/120) duas vezes ao dia > monoterapia

Obstetrícia

Parto

ILA

É mais informativa antes de 40 semanas gestacionais. A técnica utilizada é a dos 4 quadrantes, sendo a maior medida registrada. O oligoâmnio é um indicativo de sofrimento fetal crônico.

df <- fread("ILA, Classificação
            < 3, Oligoâmnio grave
            < 5, Oligoâmnio
            5.1 - 8, Reduzido
            8.1 - 18, Normal
            18.1 - 24.9, Aumentado
            > 25, Polidrâmnio", sep = ",", fill = T, header = T)
kable(df) %>%
  kable_styling(bootstrap_options = "striped", full_width = F)
ILA Classificação
< 3 Oligoâmnio grave
< 5 Oligoâmnio
5.1 - 8 Reduzido
8.1 - 18 Normal
18.1 - 24.9 Aumentado
> 25 Polidrâmnio

Cardiotocografia

df <- fread("Parâmetro, normal, atípico, anormal
            Linha de base, 110 - 160, 100 - 110<br>>160<br>por <30 min, <100 ou >160<br>por 30 min
            Variabilidade, 6 - 25<br><6 por <40 min, <6 por >40 min, <6 por >80 min<br>>25 por >10 min
            Desacelerações, Ocasional < 30 s, 30-60 s, >60 s ou tardia
            Acelerações<br>>15s >15 bpm se >32 sem<br>>10s >10 bpm se <32 s, 2+ acelerações <40 min, <2 acelerações<br>em > 40 min, <2 acelerações<br>em > 80 min
            Ação, Reavaliação opcional, Reavaliação necessária, Conduta urgente<br>US e PBF<br>Terminar a gestação?", sep = ",", fill = T, header = T)

kable(df, escape = FALSE) %>%
  kable_styling(bootstrap_options = "striped", full_width = F)
Parâmetro normal atípico anormal
Linha de base 110 - 160 100 - 110
>160
por <30 min
<100 ou >160
por 30 min
Variabilidade 6 - 25
<6 por <40 min
<6 por >40 min <6 por >80 min
>25 por >10 min
Desacelerações Ocasional < 30 s 30-60 s >60 s ou tardia
Acelerações
>15s >15 bpm se >32 sem
>10s >10 bpm se <32 s
2+ acelerações <40 min <2 acelerações
em > 40 min
<2 acelerações
em > 80 min
Ação Reavaliação opcional Reavaliação necessária Conduta urgente
US e PBF
Terminar a gestação?

Bishop

O Índice de Bishop traz informações a respeito da maturidade cervical.

Pontuação Conduta
< 6 Preparar o colo
6 - 8 Provavelmente ocitocina
> 8 Ocitocina
df <- fread("Caracter, 0, 1, 2, 3
            Esvaecimento, 0-30, 40-50, 60-70, 80
            Consistência, Firme, Média, Amolecida, -
            Posição, Posterior, Mediana, Anterior, -
            Altura, -3, -2, -1/0, +1/+2", sep = ",", fill = T, header = T)

kable(df) %>%
  kable_styling(bootstrap_options = "striped", full_width = F)
Caracter 0 1 2 3
Esvaecimento 0-30 40-50 60-70 80
Consistência Firme Média Amolecida -
Posição Posterior Mediana Anterior -
Altura -3 -2 -1/0 +1/+2

Indução

Contraindicações

  • Gestação múltipla
  • Placenta prévia
  • Macrossomia

Métodos

  • Dinoprostona (PGE2)
  • Misoprostol (PGE1)
  • Ocitocina
  • Balão (Krause)
    • Se cesárea anterior e colo desfavorável

As indicações para prostaglandinas

  • Colo não favorável
  • Gestação única
  • Apresentação cefálica
  • Boa vitalidade fetal

As contraindicações de prostaglandinas

  • Asma grave
  • Glaucoma
  • Alergia ao medicamento
  • Trabalho de parto em andamento
  • Cicatriz uterina (cesárea prévia)

Características do misoprostol

  • Comprimidos de 25 μg - 200 μg
  • Barato e fácil de armazenar
  • Impossibilidade de remoção nos casos de hiperatividade uterina
  • Reavaliar o colo após 4 h
  • Aguardar 4h para introduzir com ocitocina

Hemorragia pós-parto

A hemorragia pós parto é a principal causa de morte em puérperas. Podemos organizar, em ordem de importância clínica, as causas de hemorragia da seguinte maneira.

Tônus (atonia ou hipotonia)

  • Hiperdistensão uterina
    • Polidrâmnio
    • Gemelaridade
    • Macrossomia
  • Corioamnionite (causa RPM)
  • Grande multípara (> 6 partos)

Tecido (placenta, cotilédones, membranas, acretismo)

  • É possível esperar por 10 minutos
  • Ocitocina pode ser considerada nessa fase
  • Caso não haja descolamento, proceder para a manobra do pescador
    • Puxar o cordão com a outra mão no útero
    • Empurrar o útero com a outra mão segurando o cordão
    • Caso o cordão caminhe com o útero, é sinal de adesão placentária
  • Considerar a história clínica. Raramente haverá acretismo em primíparas, gestantes sem cesárea prévia, ou gestantes sem curetagem ou miomectomia prévia.

Traumas (episiotomia, rotura de artérias, lesão de bexiga)

  • Para evitar a rotura de artéria durante cesáreas, antes de proceder ao corte, sempre realizar palpação para conferir a posição do útero, que frequentemente se encontra levovertido.

Trombos (discrasias sanguíneas)

  • Normalmente não causam sangramentos abundantes. Caso a paciente não tenha história prévia e não saiba informar, é possível observar se a loquiação apresenta ausência de coágulos, o que seria um sinal de coagulopatias.

Epilepsia

Fonte: Borgelt et al., 2016

Epidemiologia

15-32% das mulheres podem apresentar aumento na frequência ou severidade das convulsões na gestação devido ao aumento estrogênico e progestagênico.

Mulheres sem convulsões por 9 meses prévios à gestação permanecerão sem convulsões durante toda a gestação em 84-92% dos casos, caso mantenham o regime terapêutico prévio.

A mortalidade materna é 10x maior em epilépticas do que em não epilépticas (Odds Ratio).

Complicações no feto

Os fetos de mães epilépticas têm mais risco de má-formações, possivelmente devido à exposição a antiepilépticos.

Devido a essa incidência aumentada, preconiza-se o uso de monoterapia, em vez de politerapia, para o tratamento das convulsões. Contudo, há discussão se o problema está na politerapia per se, ou na adição do valproato de sódio, um grande teratogênico.

Em casos graves (e.g. epilepsia genética generalizada), antes de considerar a iniciação de valproato, é possível tentar combinações com levetiracetam e lamotrigina, cuja teratogenicidade é menor.

É importante considerar que a interrupção abruta do medicamento antiepiléptico durante a gestação, por medo da teratogenicidade, pode levar a complicações graves para a mãe, inclusive morte.

Abortamento

Definição

Perda da gestação antes das 20 semanas de gestação. A OMS define como expulsão de um embrião (10 semanas ou menos) ou feto com 500 g ou menos.

Incidências

Dentre todas as gestações

  • Em gestações reconhecidas clinicamente
    • Mães prévias ou primigestas: 5%
    • Entre 20-30 anos: 9-17%
    • Entre 30-35 anos: 20%
    • Entre 35-40 anos: 40%
    • Entre 40-45 anos: 80%
    • Após um abortamento: 20%
    • Após dois abortamentos consecutivos: 28%
    • Após 3 ou mais abortamentos consecutivos: 43%
    • Geral: 8-20%
  • Em gestações não reconhecidas, ou subclínicas: 13-26%

Dentre todos os abortamentos

  • Abortamentos de primeiro trimestre: 80%
  • Abortamentos antes do reconhecimento clínico: 70%
  • Abortamentos de segundo trimestre: 10-15%
  • Abortamentos devidos a cromossomopatias: 50%

Dentre as cromossomopatias

  • Aneuploidias: 85%
  • Triploidias: 10%
  • Tetraploidias: 4.2%

Incidência de cromossomopatias

  • Dentre as gestações anembrionadas: 90%
  • Dentre os abortamentos de 8-11 semanas: 50%
  • Dentre os abortamentos de 16-19 semanas: 30%

Ginecologia

Vaginoses

Tratamento

Em gestantes

O metronidazol não está associado à teratogenicidade ou a outros eventos adversos no feto Brocklehurst et al., 2013, apesar de atravessar a barreira placentária.

O tratamento é feito apenas em pacientes sintomáticas.

  • Clindamicina 300 mg oral 2x/dia por 7 dias
  • Metronidazol 500 mg oral 2x/dia por 7 dias

Em não gestantes

Nas não gestantes, é possível, opcionalmente, tratamento por creme ou supositório vaginais. Não consumir etanol.

  • Metronidazol
  • Gel vaginal 0,75% 1x/dia por 5 dias
  • Clindamicina
  • Creme vaginal 2% 1x/dia à noite por 7 dias
  • Supositório vaginal 100 mg 1x/dia à noite por 3 dias

Recorrência

  • Dentro de 3 meses: 30%
  • Dentro de 12 meses: 50%

Tratar as recorrências preventivamente ou por um curso mais longo, com antibiótico diferente.

  • Tratamento preventivo prolongado: metronidazol ou tinidazol oral por 7 dias + ácido bórico vaginal 600 mg por 21 dias
  • Dois dias após a última dose de ácido bórico: se o novo exame mostrar remissão, iniciar metronidazol em gel, 2x/semana por 6 meses (terapia supressiva)

Vaginites infecciosas

Gêneros das bactérias mais presentes nas vulvovaginites e vaginoses

Seleção de bactérias com aumento significativo (p > 0.05) Ordenadas por porcentagem de achados

Divisão dos microrganismos

HPV

Vacinas

  • Cervarix: 16, 18
  • Gardasil: 6, 11
  • Gardasil 9: 31, 33, 45, 52 e 58

Prevalência no câncer cervical

COVID-19

Estratégias de uso de EPI

Fonte: Verbeek et al., 2020

Algumas proteções são mais efetivas que outras para evitar infecções, mas um estudo identificou uma parcela relativamente equivalente de proteção conferida por cada uma das proteções a seguir.

Contudo, o uso de N95 não parece ser superior ao uso de máscaras cirúrgicas em diversas circunstâncias, um achado repetido por diversos estudos clínicos randomizados, coortes e casos-controle.


Fonte: Smith et al., 2016

Permanência em superfícies

Fonte: Doremalen et al., 2020

Um estudo identificou o tempo de duração das partículas virais de SARS-CoV-2 em diversas superfícies.

Infectividade

Fonte: Zou et al., 2020

Um estudo identificou que a cada ~2 dias, a carga viral do RT-qPCR nasal + orofaríngeo cai pela metade, tornando-se praticamente indetectável após 10 dias de sintomas. Contudo, eles também identificaram que os maiores níveis de carga viral aparecem no primeiro dia de sintomas, o que sugere que a carga viral e a transmissibilidade já inicia em grande parte antes do início dos sintomas.


Fonte: Han et al., 2020

Em um estudo com crianças, a carga viral no dia 0 do início dos sintomas se aproxima de \(10^8\) cópias/mL de secreção nasofaríngea, chegando a \(10^2\) cópias/mL (quase negativação) após 35 dias. A carga viral média no caso de amostra salivar é a mesma no início, mas a quase negativação é atingida antes, após ~15 dias do início dos sintomas. A carga viral inicial era maior em crianças sintomáticas do que em crianças assintomáticas (\(10^9\) vs \(10^{6.32}\) cópias/mL).


Fonte: Stadnytskyi et al., 2020

Um estudo estimou que se uma pessoa com carga viral salivar de \(10^{6.85}\) cópias/mL fala alto em um ambiente fechado, ele libera 1000 aerossóis contendo vírions por minuto, os quais permanecem no ar por 8 minutos. As partículas que mais demoram no ar são aquelas que saem da boca hidratadas da boca com um diâmetro de >\(12\mu m\). Partículas menores também são emitidas e podem permanecer indefinidamente em suspensão, com meia-vida controlada somente pela taxa de ventilação ambiente, mas a chance de uma partícula de \(1\mu m\) conter um vírion é de somente 0.01%.

EPIs

Fonte: Chu et al., 2020

Máscaras distanciamento social e proteção ocular, cada um contribui isoladamente para reduzir as chances de infecção.

Contudo, não é possível avaliar se o uso de máscaras contribui devido ao comportamento associado a ela, como evitar tocar o rosto e o fato de pessoas evitarem se aproximar de outras que estejam usando máscaras.


Fonte: Marchiori et al., 2020

Por exemplo, um grupo italiano identificou que há um distanciamento maior de pessoas com máscaras em calçadas.


Fonte: MacIntyre et al., 2015

O uso de máscaras cirúrgicas é mais protetor que o uso de máscaras caseiras, mas quando o ensaio clínico randomizado que afirma isso foi realizado, não havia muito rigor e instrução a respeito do uso de máscaras caseiras, que potencialmente eram reutilizadas e lavadas/desinfectadas apenas a critério individual.

Síndrome gripal (RR)=13.00, 95% CI 1.69 to 100.07 ILI (RR=6.64, 95% CI 1.45 to 28.65) and laboratory-confirmed virus (RR=1.72, 95% CI 1.01 to 2.94) Penetration of cloth masks by particles was almost 97% and medical masks 44%


Fonte: Leung et al., 2020

Um estudo publicado na Nature testou a capacidade das máscaras cirúrgicas em reduzir a carga viral emitida pela tosse. Eles subdividiram o estudo por partículas menores de \(5\mu m\) (aerossois) e maiores de \(5\mu m\) (gotículas), e por três vírus (coronavírus, rinovírus e influenza).

LS0tDQp0aXRsZTogIkNhZGVybm8gZGUgTWVkaWNpbmEiDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOiANCiAgICB0aGVtZTogcmVhZGFibGUNCiAgICB0b2M6IG5vDQotLS0NCg0KYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0Kc3VwcHJlc3NXYXJuaW5ncyhzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoZGF0YS50YWJsZSkpKQ0Kc3VwcHJlc3NXYXJuaW5ncyhzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoZ2dwbG90MikpKQ0Kc3VwcHJlc3NXYXJuaW5ncyhzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoeHRhYmxlKSkpDQpzdXBwcmVzc1dhcm5pbmdzKHN1cHByZXNzTWVzc2FnZXMobGlicmFyeShrYWJsZUV4dHJhKSkpDQoNCnRibC5yaXNrIDwtIGZ1bmN0aW9uKGRmLCB2YWxvciwgdGl0dWxvLCB0ZXh0bywgdGFtYW5obz0wLjUsIGxpbWl0ZSA9IDEwMCwgcG9udG8gPSBULCBpbnRlcmNlcHQgPSAwKXsNCiAgZGYgPC0gZGF0YS5mcmFtZShkZikNCiAgZGZbLDFdIDwtIGFzLmZhY3RvcihkZlssMV0pDQogIGRmWywxXSA8LSBmYWN0b3IoZGZbLDFdLCBsZXZlbHMgPSBkZltvcmRlcihkZlssMl0pLDFdKQ0KICBpZiAobmNvbChkZikgPT0gMikgew0KICAgIGlmIChwb250byA9PSBUKSB7DQogIGdncGxvdChkZiwgYWVzKHggPSBkZlssMl0sIHkgPSBkZlssMV0pKSArIGdlb21fcG9pbnQoc2l6ZSA9IHRhbWFuaG8qNCkgKyB0aGVtZV9jbGFzc2ljKCkgKyBnZ3RpdGxlKHRleHRvKSArDQogICAgeGxhYih0aXR1bG8pICsgeWxhYih2YWxvcikgKyBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLGxpbWl0ZSkpICsNCiAgICAgIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDApICsNCiAgICAgIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSkNCiAgfSBlbHNlIHsNCiAgICBnZ3Bsb3QoZGYsIGFlcyh4ID0gZGZbLDJdLCB5ID0gZGZbLDFdKSkgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSB0YW1hbmhvKSArIHRoZW1lX2NsYXNzaWMoKSArIGdndGl0bGUodGV4dG8pICsNCiAgICAgIHhsYWIodGl0dWxvKSArIHlsYWIodmFsb3IpICsgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCxsaW1pdGUpKSArDQogICAgICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCkpDQogIH0NCiAgfSBlbHNlIHsNCiAgICBmb3IgKGkgaW4gMTpucm93KGRmKSkgew0KICAgICAgaWYgKGlzLm5hKGRmW2ksM10pKSB7DQogICAgICAgIGRmW2ksM10gPC0gZGZbaSwyXQ0KICAgICAgfQ0KICAgIH0NCiAgICBmb3IgKGkgaW4gMTpucm93KGRmKSkgew0KICAgICAgZGYkYXZnW2ldIDwtIG1lYW4oYyhkZltpLDJdLCBkZltpLDNdKSkNCiAgICB9DQogICAgZGZbLDFdIDwtIGZhY3RvcihkZlssMV0sIGxldmVscyA9IGRmW29yZGVyKGRmWyw0XSksMV0pDQogICAgZ2dwbG90KGRmKSArIGdlb21fcG9pbnRyYW5nZShhZXMoeCA9IGRmWywxXSwgeSA9IGRmWyw0XSwgeW1pbiA9IGRmWywyXSwgeW1heCA9IGRmWywzXSksIHNpemUgPSB0YW1hbmhvKSArIGNvb3JkX2ZsaXAoKSArIHRoZW1lX2NsYXNzaWMoKSArIGdndGl0bGUodGV4dG8pICsNCiAgICAgIHlsYWIodGl0dWxvKSArIHhsYWIodmFsb3IpICsgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCxsaW1pdGUpKSArDQogICAgICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCkpICsNCiAgICAgIGdlb21faGxpbmUoeWludGVyY2VwdCA9IGludGVyY2VwdCkNCiAgfQ0KfQ0KYGBgDQoNCiMgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHN9DQoNCiMjIEZhcm1hY29jaW7DqXRpY2ENCg0KRm9udGU6IFtQaGFybVByZXNzXShodHRwczovL3d3dy5waGFybXByZXNzLmNvbS9maWxlcy9kb2NzL0Jhc2ljJTIwUGhhcm1hY29raW5ldGljcyUyMHNhbXBsZS5wZGYpDQoNCiRNRUMkID0gTWluaW11bSBlZmZlY3RpdmUgY29uY2VudHJhdGlvbg0KDQokKENfcClfe21heH0kID0gJENfe21heH0kID0gUGVhayBwbGFzbWEgY29uY2VudHJhdGlvbg0KDQokVF97bWF4fSQgPSBQZWFrIHRpbWUgDQoNCiRUX3sxLzJ9JCA9IEJpb2xvZ2ljYWwgaGFsZi1saWZlIA0KDQpPbnNldCBvZiBhY3Rpb24gfiAkXGZyYWN7VF97bWF4fS5NRUN9eyhDX3ApX3ttYXh9fSQNCg0KYGBge3IsIGVjaG89RkFMU0V9DQoNCmxpYnJhcnkocnZlc3QpDQpsaWJyYXJ5KFhNTCkNCg0KZHJvZ2FzIDwtIGZ1bmN0aW9uKGMsIGNyaXRlcmlvKXsNCiAgU01JTEVTIDwtIHBhc3RlMCgiaHR0cHM6Ly9jYWN0dXMubmNpLm5paC5nb3YvY2hlbWljYWwvc3RydWN0dXJlLyIsIGMsICIvc21pbGVzIikNCiAgU01JTEVTIDwtIGh0bWxfdGV4dChyZWFkX2h0bWwoU01JTEVTKSkNCiAgSVVQQUMgPC0gcGFzdGUwKCJodHRwczovL2NhY3R1cy5uY2kubmloLmdvdi9jaGVtaWNhbC9zdHJ1Y3R1cmUvIiwgU01JTEVTLCAiL2l1cGFjX25hbWUiKQ0KICBJVVBBQyA8LSBodG1sX3RleHQocmVhZF9odG1sKElVUEFDKSkNCiAgYWZmaW5pdHkgPC0gcGFzdGUwKCJodHRwOi8vYmluZGluZ2RiLm9yZy9heGlzMi9zZXJ2aWNlcy9CREJTZXJ2aWNlL2dldFRhcmdldEJ5Q29tcG91bmQ/c21pbGVzPSIsIFNNSUxFUywgIiZjdXRvZmY9MC44IikNCiAgYWYucGFyc2UgPC0geG1sUGFyc2UoYWZmaW5pdHkpDQogIGFmLmRmIDwtIHhtbFRvRGF0YUZyYW1lKGFmLnBhcnNlKQ0KICANCiAgYWYuZGYgPC0gYWYuZGZbd2hpY2goYWYuZGYkYWZmaW5pdHlfdHlwZSA9PSAiS2kiICYgYWYuZGYkc3BlY2llcyA9PSAiSG9tbyBzYXBpZW5zIChIdW1hbikiKSxdDQogIGFmLmRmJGFmZmluaXR5IDwtIGFzLm51bWVyaWMoYWYuZGYkYWZmaW5pdHkpDQogIGFmLmRmIDwtIGFmLmRmW29yZGVyKGFmLmRmJGFmZmluaXR5KSwgYygidGFyZ2V0IiwgImFmZmluaXR5IildDQogIGFmLmRmIDwtIGFmLmRmW3doaWNoKGlzLm5hKGFmLmRmJGFmZmluaXR5KSA9PSBGKSxdDQogIA0KICBuZXcuZGYgPC0gZGF0YS5mcmFtZSh4ID0gMSwgeW1pbiA9IDIsIHkgPSAzLCB5bWF4ID0gNCkNCiAgY291bnRlciA8LSAwDQogIGZvciAoaSBpbiB1bmlxdWUoYWYuZGYkdGFyZ2V0KSkgew0KICAgIGNvdW50ZXIgPC0gY291bnRlciArIDENCiAgICBuZXcuZGZbY291bnRlciwgMV0gPC0gaQ0KICAgIG5ldy5kZltjb3VudGVyLCAyXSA8LSBxdWFudGlsZShhZi5kZlt3aGljaChhZi5kZiR0YXJnZXQ9PWkpLCAiYWZmaW5pdHkiXSwgMC43NSlbWzFdXQ0KICAgIG5ldy5kZltjb3VudGVyLCAzXSA8LSBxdWFudGlsZShhZi5kZlt3aGljaChhZi5kZiR0YXJnZXQ9PWkpLCAiYWZmaW5pdHkiXSwgMC41KVtbMV1dDQogICAgbmV3LmRmW2NvdW50ZXIsIDRdIDwtIHF1YW50aWxlKGFmLmRmW3doaWNoKGFmLmRmJHRhcmdldD09aSksICJhZmZpbml0eSJdLCAwLjI1KVtbMV1dDQogIH0NCiAgdGJsLnJpc2sobmV3LmRmW3doaWNoKG5ldy5kZiR5PGNyaXRlcmlvKSxjKCJ4IiwgInkiKV0sICIiLCAiS2kiLCBwYXN0ZTAoIkFmaW5pZGFkZXMgZGEgIiwgYywgIlxuS2kgPCAiLCBjcml0ZXJpbyksIDAuNSwgY3JpdGVyaW8sIFQpDQp9DQoNCmBgYA0KDQpgYGB7ciwgZWNobyA9IEZBTFNFfQ0Kc3VwcHJlc3NXYXJuaW5ncyhzdXBwcmVzc01lc3NhZ2VzKGRyb2dhcygicXVldGlhcGluZSIsIDUwKSkpDQpgYGANCg0KIyMjIEFudGktaGlzdGFtw61uaWNvcw0KDQpGb250ZTogW0NodXJjaCAmIENodXJjaCwgMjAxM10oaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wbWMvYXJ0aWNsZXMvUE1DMzY2NzI4Ni8pDQoNCmBgYHtyLCBlY2hvID0gRkFMU0V9DQoNCmRmIDwtIGZyZWFkKCINCkRyb2dhLCBUMTIgKGgpDQpEaWZlbmlkcmFtaW5hLCA4LjYxDQpDbG9yZmVuaXJhbWluYSwgMjcNCkhpZHJveGl6aW5hLCAyNQ0KUHJvbWV0YXppbmEsIDE5DQoiLCBmaWxsID0gVCwgc2VwID0gIiwiKQ0KDQprYWJsZShkZikgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBGKQ0KDQpgYGANCg0KYGBge3J9DQpkZiA8LSBmcmVhZCgiDQpEcm9nYSwgRG9zZSwgS2ksIFJPNCwgUk8yNA0KRGVzbG9yYXRhZGluYSwgNSwgMC40LCA3MSwgNDMNCkZleG9mZW5hZGluYSwgMTIwLCAxMCwgOTUsIDEyDQpMZXZvY2V0aXJpemluYSwgNSwgMywgOTAsIDU3DQoiLCBmaWxsID0gVCwgc2VwID0gIiwiKQ0KDQprYWJsZShkZikgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBGKQ0KYGBgDQoNCiMjIEVtZXJnw6puY2lhIHsudGFic2V0fQ0KDQojIyMgQW50aS1hbMOpcmdpY29zIHsudGFic2V0fQ0KDQojIyMjIFPDrW5kcm9tZXMgYWzDqXJnaWNhcyB7LnRhYnNldH0NCg0KIyMjIyMgU8OtbnRlc2UgZG9zIGVzdHVkb3MNCg0KQWxndW5zIGNhc29zIGRlIGFsZXJnaWEgcmVmcmF0w6FyaWEsIMOpIHBvc3PDrXZlbCBhdW1lbnRhciBhIGRvc2UgZG9zIGFudGlhbMOpcmdpY29zIGVtIGF0w6kgNCB2ZXplcyBhIGRvc2UgY29udmVuY2lvbmFsLCBzZW0gZWZlaXRvcyBhZHZlcnNvcyBub3TDoXZlaXMuDQoNCkVtIGdlcmFsLCBwYXJlY2Ugc2VyIG1haXMgZWZldGl2byB1dGlsaXphciBjb21iaW5hw6fDo28gZGUgaW5pYmlkb3JlcyBkZSBIMSArIEgyIGRvIHF1ZSBpbmliaWRvcmVzIGRlIEgxIGlzb2xhZGFtZW50ZS4gUG9yIGV4ZW1wbG86DQoNCiogRGlmZW5pZHJhbWluYSArIFJhbml0aWRpbmENCiogRGlmZW5pZHJhbWluYSArIENpbWV0aWRpbmENCg0KIyMjIyMgRXN0dWRvcw0KDQpGb250ZTogW1N0YWV2c2thIGV0IGFsLiwgMjAxMF0oaHR0cHM6Ly93d3cuc2NpZW5jZWRpcmVjdC5jb20vc2NpZW5jZS9hcnRpY2xlL2Ficy9waWkvUzAwOTE2NzQ5MDkwMjczNDEpDQoNCkVtIGNhc29zIGRlIHVydGljw6FyaWEgcmVmcmF0w6FyaWEgYW8gdHJhdGFtZW50bywgNzUlIGRvcyBwYWNpZW50ZXMgcmVzcG9uZGVtIGJlbSBhIHN1cGVyZG9zYWdlbnMgKGF0w6kgbyBxdcOhZHJ1cGxvIGRhIGRvc2UgY29udmVuY2lvbmFsKSBkZSBsZXZvY2V0aXJpemluYSBvdSBkZXNsb3JhdGFkaW5hLCBhdMOpIHVtIG3DoXhpbW8gZGUgMjAgbWcgZGUgY2FkYSBkcm9nYSwgZW0gbW9ub3RlcmFwaWEuDQoNCioqKg0KRm9udGU6IFtMaW4gZXQgYWwuLCAyMDAwXShodHRwczovL3B1Ym1lZC5uY2JpLm5sbS5uaWguZ292LzExMDU0MjAwLykNCg0KSW5pYmlkb3JlcyBkZSBIMSAoNTAgbWcgZGlmZW5pZHJhbWluYSkgKyBJbmliaWRvcmVzIGRlIEgyICg1MCBtZyByYW5pdGlkaW5hKSBzw6NvIG1haXMgZWZldGl2b3MgcXVlIEluaWJpZG9yZXMgZGUgSDEgaXNvbGFkYW1lbnRlICg1MCBtZyBkaWZlbmlkcmFtaW5hKSBwYXJhIG8gdHJhdGFtZW50byBkZSBzw61uZHJvbWVzIGFsw6lyZ2ljYXMuDQoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTZ9DQpwb3JyIDwtIGZ1bmN0aW9uKHgpe3JvdW5kKDEwMCooMSAtICgxIC0gKHgveFsxXSkpKSwgMSl9DQoNClJlZ2ltZSA8LSBjKCJJbmljaWFsIiwgIjFoIiwgIjJoIikNCnB1IDwtIHBvcnIoYygyNCwxOSwxMSkpICMgUGxhY2VibyAodXJ0aWPDoXJpYSkNCnJ1IDwtIHBvcnIoYygyOSwxMiw0KSkgIyBSYW5pdGlkaW5hICh1cnRpY8OhcmlhKQ0KcGUgPC0gcG9ycihjKDM2LDI2LDIwKSkgIyBQbGFjZWJvIChlcml0ZW1hKQ0KcmUgPC0gcG9ycihjKDM0LDI2LDEzKSkgIyBSYW5pdGlkaW5hIChlcml0ZW1hKQ0KcGEgPC0gcG9ycihjKDI3LDI0LDE0KSkgIyBQbGFjZWJvIChhbmdpb2VkZW1hKQ0KcmEgPC0gcG9ycihjKDIyLDE1LDExKSkgIyBSYW5pdGlkaW5hIChhbmdpb2VkZW1hKQ0KDQpkZiA8LSBkYXRhLmZyYW1lKHB1LCBydSwgcGUsIHJlLCBwYSwgcmEpDQpjb2xuYW1lcyhkZikgPC0gYygiUGxhY2VibyAodXJ0aWPDoXJpYSkiLCAiUmFuaXRpZGluYSAodXJ0aWPDoXJpYSkiLA0KIlBsYWNlYm8gKGVyaXRlbWEpIiwNCiJSYW5pdGlkaW5hIChlcml0ZW1hKSIsDQoiUGxhY2VibyAoYW5naW9lZGVtYSkiLA0KIlJhbml0aWRpbmEgKGFuZ2lvZWRlbWEpIikNCg0KZGYkVGVtcG8gPC0gYygiMGgiLCAiMWgiLCAiMmgiKQ0KDQpkZiA8LSBkYXRhLnRhYmxlKGRmKQ0KZGYgPC0gbWVsdChkZiwgNykNCmRmJHBsYWNlYm8gPC0gcmVwKGMocmVwKCJEaWZlbmlkcmFtaW5hIiwgMyksIHJlcCgiRGlmZW5pZHJhbWluYSArIFJhbml0aWRpbmEiLCAzKSksIDMpDQoNCmxpYnJhcnkoZ2dwbG90MikNCmdncGxvdChkZiwgYWVzKHkgPSB2YWx1ZSwgeCA9IFRlbXBvKSkgKyBnZW9tX2xpbmUoYWVzKGdyb3VwID0gdmFyaWFibGUsIGNvbG9yID0gcGxhY2VibyksIHNpemUgPSAyLCBhbHBoYSA9IDAuNSkgKyB5bGFiKCJQb3JjZW50YWdlbSBjb20gc2ludG9tYXMiKSArIHRoZW1lX2NsYXNzaWMoKSArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkgKyBnZ3RpdGxlKCJSZWR1w6fDo28gbm9zIHNpbnRvbWFzIGFsw6lyZ2ljb3Ncbihhbmdpb2VkZW1hLCBlcml0ZW1hLCB1cnRpY8OhcmlhKSIpDQpgYGANCioqKg0KRm9udGU6IFtSdW5nZSBldCBhbC4sIDE5OTJdKGh0dHBzOi8vcHVibWVkLm5jYmkubmxtLm5paC5nb3YvMTUzNjQ4MS8pDQoNCkluaWJpZG9yZXMgZGUgSDEgKDUwIG1nIElWIGRpZmVuaWRyYW1pbmEpIHPDo28gbWFpcyBlZmV0aXZvcyBxdWUgaW5pYmlkb3JlcyBkZSBIMiAoMzAwIG1nIElWIGNpbWV0aWRpbmEpIHBhcmEgdHJhdGFtZW50byBkbyBwcnVyaWRvIGRlIGFsZXJnaWFzLiBDb250dWRvLCBvIHRyYXRhbWVudG8gY29tYmluYWRvIGRlIGluaWJpZG9yZXMgZGUgSDErSDIgw6kgbWFpcyBlZmV0aXZvIHF1ZSBpbmliaWRvcmVzIGRlIEgxIGlzb2xhZGFtZW50ZSBwYXJhIG8gdHJhdGFtZW50byBkZSB1cnRpY8OhcmlhIGFndWRhLg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTIsIGZpZy53aWR0aD02fQ0KZGYgPC0gZnJlYWQoImZhdG9yOiBhbMOtdmlvDQogICAgICAgICAgICBEaWZlbmlkcmFtaW5hOiAxMDANCiAgICAgICAgICAgIERpZmVuaWRyYW1pbmEgKyBDaW1ldGlkaW5hOiA5Mg0KICAgICAgICAgICAgQ2ltZXRpZGluYTogNjAiLA0KICAgICAgICAgICAgZmlsbCA9IFQsIHNlcCA9ICc6JykNCg0KdGJsLnJpc2soZGYsICIiLCAiUG9yY2VudGFnZW0gcXVlIG9idGV2ZSBhbMOtdmlvIiwgIlRyYXRhbWVudG8gZGUgcHJ1cmlkbyBhbMOpcmdpY28iLCAwLjUsIDEwMCwgRikNCmBgYA0KYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0yLCBmaWcud2lkdGg9Nn0NCmRmIDwtIGZyZWFkKCJmYXRvcjogYWzDrXZpbw0KICAgICAgICAgICAgRGlmZW5pZHJhbWluYTogNDYNCiAgICAgICAgICAgIERpZmVuaWRyYW1pbmEgKyBDaW1ldGlkaW5hOiA5Mg0KICAgICAgICAgICAgQ2ltZXRpZGluYTogODAiLA0KICAgICAgICAgICAgZmlsbCA9IFQsIHNlcCA9ICc6JykNCg0KdGJsLnJpc2soZGYsICIiLCAiUG9yY2VudGFnZW0gcXVlIG9idGV2ZSBhbMOtdmlvIiwgIlRyYXRhbWVudG8gZGUgdXJ0aWPDoXJpYSBhZ3VkYSIsIDAuNSwgMTAwLCBGKQ0KYGBgDQoNCioqKg0KRm9udGU6IFtlIFBhbHVuZ3dhY2hpcmEgZXQgYWwuLCAyMDIwXShodHRwczovL3d3dy5zY2llbmNlZGlyZWN0LmNvbS9zY2llbmNlL2FydGljbGUvYWJzL3BpaS9TMDczNTY3NTcyMDMwMDk4WCkNCg0KRGV4YW1ldGFzb25hIG9yYWwgYXVtZW50YSBhIHJlY29ycsOqbmNpYSBkZSB1cnRpY8OhcmlhLCBlbSByZWxhw6fDo28gYW9zIHBhY2llbnRlcyB0cmF0YWRvcyBzb21lbnRlIGNvbSBDbG9yZmVuaXJhbWluYS4NCg0KYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0yLCBmaWcud2lkdGg9Nn0NCmRmIDwtIGZyZWFkKCJmYXRvcjogYWzDrXZpbw0KICAgICAgICAgICAgQ2xvcmZlbmlyYW1pbmE6IDQuMjogOC4zDQogICAgICAgICAgICBDbG9yZmVuaXJhbWluYSArIERleGFtZXRhc29uYSArIFByZWRuaXNvbG9uYTogMjU6IDI5LjIiLA0KICAgICAgICAgICAgZmlsbCA9IFQsIHNlcCA9ICc6JykNCg0KdGJsLnJpc2soZGYsICIiLCAiUG9yY2VudGFnZW0gZGUgcmVjb3Jyw6puY2lhIGFww7NzIDcgZGlhcyIsICJUcmF0YW1lbnRvIGRlIHVydGljw6FyaWEgYWd1ZGEiLCAwLjUsIDUwLCBGKQ0KYGBgDQoNCiMjIyMgQW5hZmlsYXhpYSB7LnRhYnNldH0NCg0KRm9udGU6IFtFbGlzIGV0IGFsLiwgMjAyMF0oaHR0cHM6Ly9saW5rLnNwcmluZ2VyLmNvbS9jaGFwdGVyLzEwLjEwMDcvOTc4LTMtMDMwLTQzMjA1LThfMykNCg0KTyB0cmF0YW1lbnRvIHBhZHLDo28gcGFyYSBjaG9xdWVzIGFuYWZpbMOhdGljb3Mgw6kgYSBpbmplw6fDo28gZGUgYWRyZW5hbGluYSBubyBtw7pzY3VsbyByZXRvIGxhdGVyYWwgZGEgY294YSwgcG9kZW5kbyBzZXIgYXBsaWNhZG8gYXTDqSBkdWFzIGRvc2VzLCBhIHNlZ3VuZGEgYXDDs3MgdW0gaW50ZXJ2YWxvIGRlIDEwIG1pbnV0b3MuIENvbnR1ZG8sIG5vIEJyYXNpbCBlc3NhIHBvc3NpYmlsaWRhZGUgbsOjbyBleGlzdGUsIG8gcXVlIG5vcyBvYnJpZ2EgYSBwcm9jdXJhciBwb3IgdHJhdGFtZW50b3MgYWx0ZXJuYXRpdm9zLg0KDQpPcyB0cmF0YW1lbnRvcyBhZGp1dmFudGVzIHPDo28gb3MgYW50aS1IMSBJViAocHJpbWVpcmEgZ2VyYcOnw6NvKSwgVk8gKHNlZ3VuZGEgZ2VyYcOnw6NvKSwgZSBhbnRpLUgyDQoNCiogUHJpbWVpcmEgZ2VyYcOnw6NvDQogICogRGlmZW5pZHJhbWluYQ0KICAqIENsb3JmZW5pcmFtaW5hDQogICogSGlkcm94aXppbmENCiAgKiBQcm9tZXRhemluYQ0KKiBTZWd1bmRhIGdlcmHDp8Ojbw0KICAqIENldGlyaXppbmEgKGFnZSBlbSAzMCBtaW4pDQoqIEFudGktSDINCiAgKiBSYW5pdGlkaW5hDQoNCkFsw6ltIGRvcyB0cmF0YW1lbnRvcyBjaXRhZG9zIGFjaW1hLCBxdWUgdMOqbSBlZmVpdG8gZW0gc8OtbmRyb21lcyBhbMOpcmdpY2FzLCBow6EgdHJhdGFtZW50b3MgcXVlIGFpbmRhIG5lY2Vzc2l0YW0gZGUgY29tcHJvdmHDp8OjbyBkZSBlZmVpdG8sIGNvbW86DQoNCiogQXp1bCBkZSBtZXRpbGVubyANCiogw4FjaWRvIHRyYW5leMOibWljbyAxMDAwIG1nIElWIFtIb3N0ZSAmIFN0ZXZlbnMsIDE5OTFdKGh0dHBzOi8vcHVibWVkLm5jYmkubmxtLm5paC5nb3YvMTkyNzIzNi8pDQoNCk8gYXp1bCBkZSBtZXRpbGVubyBhdW1lbnRhIGEgcHJlc3PDo28gYXJ0ZXJpYWwgbcOpZGlhIGVtIDYgbW1IZywgc2VtIGRpZmVyZW7Dp2EgbmEgbW9ydGFsaWRhZGUsIHNlZ3VuZG8gbWV0YS1hbsOhbGlzZSAoW1Bhc2luIGV0IGFsLiwgMjAxM10oaHR0cHM6Ly9wdWJtZWQubmNiaS5ubG0ubmloLmdvdi8yMzQzMjUwMS8pKS4gUG9kZSBzZXIgdXNhZG8gZW0gY2hvcXVlIHZhc29kaWxhdGF0w7NyaW8gKFtaaGFuZyBldCBhbC4sIDIwMTddKGh0dHBzOi8vcHVibWVkLm5jYmkubmxtLm5paC5nb3YvMjkxNTE0MTIvKSkNCg0KIyMjIyBDbGFzc2VzIGUgZG9zZXMgey50YWJzZXR9DQoNCioqQW50aS1IMSoqDQoNCk8gcmVjZXB0b3IgSDEgw6kgKmNvbnN0aXR1dGl2byosIG91IHNlamEsIGVsZSDDqSBjb25zdGFudGVtZW50ZSBhdGl2YWRvIGVtIG7DrXZlaXMgYmFpeG9zLCBtZXNtbyBzZW0gbGlnYW50ZS4gUXVhbmRvIGEgaGlzdGFtaW5hIHNlIGxpZ2EsIGVsZSBhdW1lbnRhIGEgc3VhIGF0aXZpZGFkZS4NCg0KQSBtYWlvcmlhIGRvcyBhbnRpLWhpc3RhbcOtbmljb3MgYWdlIGNvbW8gKmFnb25pc3RhIGludmVyc28qIGRvIHJlY2VwdG9yIEgxLiBPdSBzZWphLCBvcyBmw6FybWFjb3Mgc2UgbGlnYW0gYW8gcmVjZXB0b3IgSDEgZSBkaW1pbnVlbSBhIHN1YSBhdGl2aWRhZGUgY29uc3RpdHV0aXZhLg0KDQpFc3NlcyBmw6FybWFjb3Mgbm9ybWFsbWVudGUgKiphdHJhdmVzc2FtIGEgYmFycmVpcmEqKiBoZW1hdG9lbmNlZsOhbGljYSwgY2F1c2FuZG8gc2VkYcOnw6NvLiBFc3NlIGVmZWl0byDDqSBkZXNlamFkbyBub3MgcGFjaWVudGVzIGNvbSBpbnPDtG5pYSAoZS5nLiBkaWZlbmlkcmFtaW5hIGUgZG94aWxhbWluYSkuDQoNCk91dHJhIGZ1bsOnw6NvIGRlc3NlcyBmw6FybWFjb3Mgw6kgcmVkdXppciBhIGluZmxhbWHDp8OjbywgdW1hIHZleiBxdWUgYSBhdGl2YcOnw6NvIGNvbnN0aXR1dGl2YSBkbyBIMSBpbXBsaWNhIG5hIGV4cHJlc3PDo28gZGUgTkYta0IuIEVzc2UgZWZlaXRvIMOpIGRlc2VqYWRvIHBhcmEgcG91cGFyIG8gdXNvIGRlIEFJTkVzIChlLmcuIGhpZHJveGl6aW5hLCBwcm9tZXRhemluYSwgZmVuaWx0b2xveGFtaW5hLCBvcmZlbmFkcmluYSBlIHRyaXBlbGVuYW1pbmEpLg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD02fQ0KZGYgPC0gZnJlYWQoIkRpZmVuaWRyYW1pbmEgY2l0cmF0bywgMzgsIDQ1Ng0KRGlmZW5pZHJhbWluYSBoaWRyb2Nsb3JldG8sIDI1LCAzMDANCkRpZmVuaWRyYW1pbmEgSVYsIDEwLCA0MDANClByb21ldGF6aW5hIFZPLCAyNSwgNzUNCkhpZHJveGl6aW5hIFZPLCAyNSwgNjAwDQpEZXhjbG9yZmVuaXJhbWluYSBWTywgMiwgOA0KRGVzbG9yYXRhZGluYSBWTywgNSwgMjANCkNldGlyaXppbmEsIDEwLCAxMA0KRmV4b2ZlbmFkaW5hLCA2MCwgMTgwDQpMb3JhdGFkaW5hLCAxMCwgMTANCkNsZW1hc3RpbmEsIDEuMzQsIDguMDQNClRyaXByb2xpZGluYSwgMi41LCAxMA0KQ2lwcm9oZXB0YWRpbmEsIDQsIDMyDQpQcm9tZXRhemluYSwgNi4yNSwgMjUNCkxldm9jZXRpcml6aW5hLCA1LCAyMA0KQ2xvcmZlbmlyYW1pbmEsIDQsIDMyDQpCcm9tZmVuaXJhbWluYSwgNCwgMjQNCkRpbWVuaWRyYXRvLCA1MCwgNDAwDQoiLCBmaWxsID0gVCwgc2VwID0gIiwiKQ0KDQp0YmwucmlzayhkZiwgIiIsICJEb3NhZ2VucyIsICJGw6FybWFjb3MgYW50aS1IMSIsIDAuNSwgNzAwLCBGKQ0KYGBgDQoNCg0KKiBQcmltZWlyYSBnZXJhw6fDo28NCiAgKiBEaWZlbmlkcmFtaW5hDQogICogQ2xlbWFzdGluYQ0KICAqIFRyaXByb2xpZGluYQ0KICAqIEhpZHJveGl6aW5hDQogICogQ2lwcm9oZXB0YWRpbmENCiAgKiBQcm9tZXRhemluYQ0KICAqIENsb3JmZW5pcmFtaW5hDQogICogQnJvbWZlbmlyYW1pbmENCiAgKiBEZXhjbG9yZmVuaXJhbWluYQ0KICAqIERpbWVuaWRyYXRvDQoNCiogU2VndW5kYSBnZXJhw6fDo28NCiAgKiBUZXJmZW5hZGluYQ0KICAqIExvcmF0YWRpbmENCiAgKiBFYmFzdGluYQ0KICAqIENldGlyaXppbmENCiAgKiBSdXBhdGFkaW5hDQogICogTWl6b2xhc3RpbmENCiAgKiBFbWVkYXN0aW5hDQogICogQXplbGFzdGluYQ0KICAqIEJpbGFzdGluYQ0KICANCiogVGVyY2VpcmEgZ2VyYcOnw6NvDQogICogRGVzbG9yYXRhZGluYSAobWV0YWLDs2xpdG8gZGEgbG9yYXRhZGluYSkNCiAgKiBGZXhvZmVuYWRpbmEgKG1ldGFiw7NsaXRvIGRhIHRlcmZlbmFkaW5hKQ0KICAqIExldm9jZXRpcml6aW5hIChlbmFudGnDtG1lcm8gZGEgY2V0aXJpemluYSkNCiAgDQoqIEFudGkgaGlzdGFtw61uaWNvcyB1c2Fkb3MgcGFyYSBvdXRyb3MgZmlucw0KICAqIFF1ZXRpYXBpbmEgKGFudGktcHNpY8OzdGljbykNCiAgKiBNaXJ0YXphcGluYSAoYW50aS1kZXByZXNzaXZvKQ0KICAqIE9yZmVuYWRyaW5hIChyZWxheGFudGUgbXVzY3VsYXIpDQogICogQ2luYXJpemluYSAoY2luZXRvc2UpDQogICogUHJvbWV0YXppbmEgKGFudGktbsOhdXNlYSkNCiAgKiBEaW1lbmlkcmF0byAoYW50aS1uw6F1c2VhKQ0KICAgIA0KKipBbnRpLUgyKioNCg0KU8OjbyBnZXJhbG1lbnRlIHVzYWRvcyBwZWxvIGVmZWl0byBpbmliaWRvciBkZSBzZWNyZcOnw6NvIGfDoXN0cmljYSwgbWFzIHRhbWLDqW0gcG9zc3VlbSBlZmVpdG8gbm8gdHJhdGFtZW50byBjb21iaW5hZG8gZGUgYWxlcmdpYXMuDQoNCiAgKiBDaW1ldGlkaW5hDQogICogUmFuaXRpZGluYQ0KICAqIE5pemF0aWRpbmENCiAgKiBGYW1vdGlkaW5hDQogIA0KYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0yLCBmaWcud2lkdGg9Nn0NCmRmIDwtIGZyZWFkKCJDaW1ldGlkaW5hLCA0MDAsIDEyMDANClJhbml0aWRpbmEsIDE1MCwgMzAwDQpOaXphdGlkaW5hLCAxNTAsIDMwMA0KRmFtb3RpZGluYSwgMjAsIDQwIiwgZmlsbCA9IFQsIHNlcCA9ICIsIikNCg0KdGJsLnJpc2soZGYsICIiLCAiRG9zYWdlbnMiLCAiRsOhcm1hY29zIGFudGktSDIiLCAwLjUsIDEyMDAsIEYpDQpgYGANCg0KIyMgT3RvcnJpbm8gey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHN9DQoNCiMjIyBSaW5pdGUgYWzDqXJnaWNhIHsudGFic2V0fQ0KDQojIyMjIyBTw61udGVzZSBkb3MgZXN0dWRvcw0KDQpCb2FzIG9ww6fDtWVzIGRlIHRyYXRhbWVudG86DQoNCiogTW9tZXRhc29uYSBJTiAyMDDOvGcgKyBFYmFzdGluYSBWTyAxMCBtZyAoMjAxOCkNCiogRmV4b2ZlbmFkaW5hL1BzZXVkb2VmZWRyaW5hICsgTW9tZXRhc29uYSBwb3IgZHVhcyBzZW1hbmFzICgyMDE3KQ0KKiBNb250ZWx1a2FzdC1mZXhvZmVuYWRpbmEgKDIwMTYpDQoqIEF6ZWxhc3RpbmEgKyBmbHV0aWNhc29uYSAoRHltaXN0YSkgKDIwMTUpDQoqIERlc2xvcmF0YWRpbmUvcHNldWRvZXBoZWRyaW5hIDUvMjQwIDF4IGRpYSBvdSAyLjUvMTIwIDJ4IGFvIGRpYSAoMjAwNSkNCiogKlBldGFzaWRlcyBoeWJyaWR1cyogKDIwMDEpDQoqIE1vbnRlbHVrYXN0IDEwIG1nICsgTG9yYXRhZGluYSAxMCBtZyAoMjAwMCkNCg0KIyMjIyMgRXN0dWRvcw0KDQpGb250ZTogW0xpIGV0IGFsLiwgMjAxOF0oaHR0cHM6Ly9wdWJtZWQubmNiaS5ubG0ubmloLmdvdi8yOTc5ODIwNi8pDQoNCk1vbWV0YXNvbmEgSU4gMjAwzrxnICsgRWJhc3RpbmEgVk8gMTAgbWcgPiBFYmFzdGluYSBWTyAyMCBtZyAoUCA8IDAuMDAxKQ0KDQpGb250ZTogW0JlcmdlciAmIE1lbHR6ZXIsIDIwMTVdKGh0dHBzOi8vcHVibWVkLm5jYmkubmxtLm5paC5nb3YvMjYxMzIzMTIvKQ0KDQpBemVsYXN0aW5hICsgZmx1dGljYXNvbmEgKER5bWlzdGEpID4gQ29ydGljb2lkZSBpbnRyYW5hc2FsIChhw6fDo28gZW0gMzAgbWluKQ0KDQpGb250ZTogW1dlaW5lciwgMTk5OF0oaHR0cHM6Ly93d3cuYm1qLmNvbS9jb250ZW50LzMxNy83MTczLzE2MjQuc2hvcnQpDQoNCkNvcnRpY29pZGVzIGludHJhbmFzYWlzID4gQW50aS1IMSBvcmFpcyAoT1IgMC4wOC0wLjgpDQoNCkZvbnRlOiBbTWVsdHplciBldCBhbC4sIDIwMDBdKGh0dHBzOi8vd3d3LnNjaWVuY2VkaXJlY3QuY29tL3NjaWVuY2UvYXJ0aWNsZS9hYnMvcGlpL1MwMDkxNjc0OTAwODAwMTQ3KQ0KDQpNb250ZWx1a2FzdCAxMCBtZyArIExvcmF0YWRpbmEgMTAgbWcgPiBtb25vdGVyYXBpYSAoUCA8IDAuMDAxKQ0KDQpDb250dWRvLCBbb3V0cm8gZXN0dWRvXShodHRwczovL3d3dy5hbm5hbGxlcmd5Lm9yZy9hcnRpY2xlL1MxMDgxLTEyMDYoMTApNjE4OTEtMS9hYnN0cmFjdCkgcmVhbGl6YWRvIDIgYW5vcyBkZXBvaXMgbsOjbyBlbmNvbnRyb3UgZGlmZXJlbsOnYSBlbnRyZSBtb250ZWx1a2FzdC9sb3JhdGFkaW5hIHZzIG1vbm90ZXJhcGlhIGNvbSBsb3JhdGFkaW5hLg0KDQpGb250ZTogW1NjaGFwb3dhbCwgMjAwMV0oaHR0cHM6Ly93d3cuYm1qLmNvbS9jb250ZW50LzMyNC83MzMwLzE0NC5zaG9ydCkNCg0KKlBldGFzaWRlcyBoeWJyaWR1cyogKEFudGlsZXJnLCBidXR0ZXJidXIpIHRlbSBlZmVpdG8gZXF1aXZhbGVudGUgYSBjZXRpcml6aW5hLCBjYXVzYW5kbyBtZW5vcyBzZWRhw6fDo28uDQoNCkZvbnRlOiBbS29rYW4gZXQgYWwuLCAyMDE3XShodHRwczovL3d3dy5qc3RhZ2UuanN0LmdvLmpwL2FydGljbGUvamliaXJpbnN1cHBsLzE0OC8wLzE0OF8zMi9fYXJ0aWNsZS8tY2hhci9qYS8pDQoNCkZleG9mZW5hZGluYS9Qc2V1ZG9lZmVkcmluYSArIE1vbWV0YXNvbmEgcG9yIGR1YXMgc2VtYW5hcyA+IE1vbWV0YXNvbmEgbW9ub3RlcmFwaWENCg0KRm9udGU6IFtTbmlkdm9uZ3MgZXQgYWwuLCAyMDE3XShodHRwczovL2NvbnRlbnQuc2NpZW5kby5jb20vdmlldy9qb3VybmFscy9hYm0vOS8zL2FydGljbGUtcDM4Ny54bWw/bGFuZ3VhZ2U9ZW4mcHJvZHVjdD1zY2llbmRvJnRhYl9ib2R5PWFic3RyYWN0KQ0KDQpGZXhvZmVuYWRpbmEgPSBsZXZvY2V0aXJpemluYS4NCg0KRm9udGU6IFtNYWhhdG1lIGV0IGFsLiwgMjAxNl0oaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wbWMvYXJ0aWNsZXMvUE1DNTE1NTQ2NC8pDQoNCk1vbnRlbHVrYXN0LWZleG9mZW5hZGluYSA+IG1vbnRlbHVrYXN0LWxldm9jZXRpcml6aW5hIChwIDwwLjA1KQ0KDQpGb250ZTogW0R1QnVza2UsIDIwMDVdKGh0dHBzOi8vd3d3LnRhbmRmb25saW5lLmNvbS9kb2kvcGRmLzEwLjE1MTcvMTQ2NTY1NjYuNi4xNC4yNTExP25lZWRBY2Nlc3M9dHJ1ZSkNCg0KUGFyYSBvIHRyYXRhbWVudG8gZGUgY29uZ2VzdMOjbyBuYXNhbCBuYSByaW5pdGUgYWzDqXJnaWNhOg0KDQoqIERlc2xvcmF0YWRpbmEgNSBtZyA+IEZleG9mZW5hZGluYSAxMjAgbWcNCiogRGVzbG9yYXRhZGluYSA1IG1nID0gRmV4b2ZlbmFkaW5hIDE4MCBtZw0KKiBEZXNsb3JhdGFkaW5lL3BzZXVkb2VwaGVkcmluYSAoNS8yNDApID4gbW9ub3RlcmFwaWENCiogRGVzbG9yYXRhZGluZS9wc2V1ZG9lcGhlZHJpbmEgKDIuNS8xMjApIGR1YXMgdmV6ZXMgYW8gZGlhID4gbW9ub3RlcmFwaWENCg0KIyMgT2JzdGV0csOtY2lhIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzfQ0KDQojIyMgUGFydG8gey50YWJzZXR9DQoNCiMjIyMgSUxBDQoNCsOJIG1haXMgaW5mb3JtYXRpdmEgYW50ZXMgZGUgNDAgc2VtYW5hcyBnZXN0YWNpb25haXMuIEEgdMOpY25pY2EgdXRpbGl6YWRhIMOpIGEgZG9zIDQgcXVhZHJhbnRlcywgc2VuZG8gYSBtYWlvciBtZWRpZGEgcmVnaXN0cmFkYS4gTyBvbGlnb8OibW5pbyDDqSB1bSBpbmRpY2F0aXZvIGRlIHNvZnJpbWVudG8gZmV0YWwgY3LDtG5pY28uDQoNCmBgYHtyLCByZXN1bHRzPSdhc2lzJ30NCmRmIDwtIGZyZWFkKCJJTEEsIENsYXNzaWZpY2HDp8Ojbw0KICAgICAgICAgICAgPCAzLCBPbGlnb8OibW5pbyBncmF2ZQ0KICAgICAgICAgICAgPCA1LCBPbGlnb8OibW5pbw0KICAgICAgICAgICAgNS4xIC0gOCwgUmVkdXppZG8NCiAgICAgICAgICAgIDguMSAtIDE4LCBOb3JtYWwNCiAgICAgICAgICAgIDE4LjEgLSAyNC45LCBBdW1lbnRhZG8NCiAgICAgICAgICAgID4gMjUsIFBvbGlkcsOibW5pbyIsIHNlcCA9ICIsIiwgZmlsbCA9IFQsIGhlYWRlciA9IFQpDQprYWJsZShkZikgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBGKQ0KYGBgDQoNCiMjIyMgQ2FyZGlvdG9jb2dyYWZpYQ0KDQpgYGB7ciwgcmVzdWx0cz0nYXNpcyd9DQpkZiA8LSBmcmVhZCgiUGFyw6JtZXRybywgbm9ybWFsLCBhdMOtcGljbywgYW5vcm1hbA0KICAgICAgICAgICAgTGluaGEgZGUgYmFzZSwgMTEwIC0gMTYwLCAxMDAgLSAxMTA8YnI+PjE2MDxicj5wb3IgPDMwIG1pbiwgPDEwMCBvdSA+MTYwPGJyPnBvciAzMCBtaW4NCiAgICAgICAgICAgIFZhcmlhYmlsaWRhZGUsIDYgLSAyNTxicj48NiBwb3IgPDQwIG1pbiwgPDYgcG9yID40MCBtaW4sIDw2IHBvciA+ODAgbWluPGJyPj4yNSBwb3IgPjEwIG1pbg0KICAgICAgICAgICAgRGVzYWNlbGVyYcOnw7VlcywgT2Nhc2lvbmFsIDwgMzAgcywgMzAtNjAgcywgPjYwIHMgb3UgdGFyZGlhDQogICAgICAgICAgICBBY2VsZXJhw6fDtWVzPGJyPj4xNXMgPjE1IGJwbSBzZSA+MzIgc2VtPGJyPj4xMHMgPjEwIGJwbSBzZSA8MzIgcywgMisgYWNlbGVyYcOnw7VlcyA8NDAgbWluLCA8MiBhY2VsZXJhw6fDtWVzPGJyPmVtID4gNDAgbWluLCA8MiBhY2VsZXJhw6fDtWVzPGJyPmVtID4gODAgbWluDQogICAgICAgICAgICBBw6fDo28sIFJlYXZhbGlhw6fDo28gb3BjaW9uYWwsIFJlYXZhbGlhw6fDo28gbmVjZXNzw6FyaWEsIENvbmR1dGEgdXJnZW50ZTxicj5VUyBlIFBCRjxicj5UZXJtaW5hciBhIGdlc3Rhw6fDo28/Iiwgc2VwID0gIiwiLCBmaWxsID0gVCwgaGVhZGVyID0gVCkNCg0Ka2FibGUoZGYsIGVzY2FwZSA9IEZBTFNFKSAlPiUNCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgZnVsbF93aWR0aCA9IEYpDQpgYGANCg0KIyMjIyBCaXNob3ANCg0KTyDDjW5kaWNlIGRlIEJpc2hvcCB0cmF6IGluZm9ybWHDp8O1ZXMgYSByZXNwZWl0byBkYSAqKm1hdHVyaWRhZGUgY2VydmljYWwqKi4NCg0KfCBQb250dWHDp8OjbyAgICAgfCBDb25kdXRhICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0gfC0tLS0tLS0tLS0tLS0tLSAgICAgICAgICB8DQp8IDwgNiAgICAgICAgICAgfCBQcmVwYXJhciBvIGNvbG8gICAgICAgICB8DQp8IDYgLSA4ICAgICAgICAgfCBQcm92YXZlbG1lbnRlIG9jaXRvY2luYSB8DQp8ID4gOCAgICAgICAgICAgfCBPY2l0b2NpbmEgICAgICAgICAgICAgICB8DQoNCmBgYHtyLCByZXN1bHRzPSdhc2lzJ30NCmRmIDwtIGZyZWFkKCJDYXJhY3RlciwgMCwgMSwgMiwgMw0KICAgICAgICAgICAgRXN2YWVjaW1lbnRvLCAwLTMwLCA0MC01MCwgNjAtNzAsIDgwDQogICAgICAgICAgICBDb25zaXN0w6puY2lhLCBGaXJtZSwgTcOpZGlhLCBBbW9sZWNpZGEsIC0NCiAgICAgICAgICAgIFBvc2nDp8OjbywgUG9zdGVyaW9yLCBNZWRpYW5hLCBBbnRlcmlvciwgLQ0KICAgICAgICAgICAgQWx0dXJhLCAtMywgLTIsIC0xLzAsICsxLysyIiwgc2VwID0gIiwiLCBmaWxsID0gVCwgaGVhZGVyID0gVCkNCg0Ka2FibGUoZGYpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCBmdWxsX3dpZHRoID0gRikNCmBgYA0KDQojIyMgSW5kdcOnw6NvIHsudGFic2V0fQ0KDQojIyMjIENvbnRyYWluZGljYcOnw7Vlcw0KDQoqIEdlc3Rhw6fDo28gbcO6bHRpcGxhDQoqIFBsYWNlbnRhIHByw6l2aWENCiogTWFjcm9zc29taWENCg0KIyMjIyBNw6l0b2Rvcw0KDQoqIERpbm9wcm9zdG9uYSAoUEdFMikNCiogTWlzb3Byb3N0b2wgKFBHRTEpDQoqIE9jaXRvY2luYQ0KKiBCYWzDo28gKEtyYXVzZSkNCiAgKiBTZSBjZXPDoXJlYSBhbnRlcmlvciBlIGNvbG8gZGVzZmF2b3LDoXZlbA0KDQpBcyBpbmRpY2HDp8O1ZXMgcGFyYSBwcm9zdGFnbGFuZGluYXMNCg0KKiBDb2xvIG7Do28gZmF2b3LDoXZlbA0KKiBHZXN0YcOnw6NvIMO6bmljYQ0KKiBBcHJlc2VudGHDp8OjbyBjZWbDoWxpY2ENCiogQm9hIHZpdGFsaWRhZGUgZmV0YWwNCg0KQXMgY29udHJhaW5kaWNhw6fDtWVzIGRlIHByb3N0YWdsYW5kaW5hcw0KDQoqIEFzbWEgZ3JhdmUNCiogR2xhdWNvbWENCiogQWxlcmdpYSBhbyBtZWRpY2FtZW50bw0KKiBUcmFiYWxobyBkZSBwYXJ0byBlbSBhbmRhbWVudG8NCiogKipDaWNhdHJpeiB1dGVyaW5hKiogKGNlc8OhcmVhIHByw6l2aWEpDQoNCkNhcmFjdGVyw61zdGljYXMgZG8gbWlzb3Byb3N0b2wNCg0KKiBDb21wcmltaWRvcyBkZSAyNSDOvGcgLSAyMDAgzrxnDQoqIEJhcmF0byBlIGbDoWNpbCBkZSBhcm1hemVuYXINCiogKipJbXBvc3NpYmlsaWRhZGUgZGUgcmVtb8Onw6NvKiogbm9zIGNhc29zIGRlIGhpcGVyYXRpdmlkYWRlIHV0ZXJpbmENCiogUmVhdmFsaWFyIG8gY29sbyBhcMOzcyA0IGgNCiogQWd1YXJkYXIgNGggcGFyYSBpbnRyb2R1emlyIGNvbSBvY2l0b2NpbmENCg0KIyMjIEhlbW9ycmFnaWEgcMOzcy1wYXJ0byB7LnRhYnNldH0NCg0KQSBoZW1vcnJhZ2lhIHDDs3MgcGFydG8gw6kgYSBwcmluY2lwYWwgY2F1c2EgZGUgbW9ydGUgZW0gcHXDqXJwZXJhcy4gUG9kZW1vcyBvcmdhbml6YXIsIGVtIG9yZGVtIGRlIGltcG9ydMOibmNpYSBjbMOtbmljYSwgYXMgY2F1c2FzIGRlIGhlbW9ycmFnaWEgZGEgc2VndWludGUgbWFuZWlyYS4NCg0KKipUw7RudXMqKiAoYXRvbmlhIG91IGhpcG90b25pYSkNCg0KKiBIaXBlcmRpc3RlbnPDo28gdXRlcmluYQ0KICAqIFBvbGlkcsOibW5pbw0KICAqIEdlbWVsYXJpZGFkZQ0KICAqIE1hY3Jvc3NvbWlhDQoqIENvcmlvYW1uaW9uaXRlIChjYXVzYSBSUE0pDQoqIEdyYW5kZSBtdWx0w61wYXJhICg+IDYgcGFydG9zKQ0KDQoqKlRlY2lkbyoqIChwbGFjZW50YSwgY290aWzDqWRvbmVzLCBtZW1icmFuYXMsIGFjcmV0aXNtbykNCg0KKiDDiSBwb3Nzw612ZWwgZXNwZXJhciBwb3IgMTAgbWludXRvcw0KKiBPY2l0b2NpbmEgcG9kZSBzZXIgY29uc2lkZXJhZGEgbmVzc2EgZmFzZQ0KKiBDYXNvIG7Do28gaGFqYSBkZXNjb2xhbWVudG8sIHByb2NlZGVyIHBhcmEgYSBtYW5vYnJhIGRvIHBlc2NhZG9yDQogICogUHV4YXIgbyBjb3Jkw6NvIGNvbSBhIG91dHJhIG3Do28gbm8gw7p0ZXJvDQogICogRW1wdXJyYXIgbyDDunRlcm8gY29tIGEgb3V0cmEgbcOjbyBzZWd1cmFuZG8gbyBjb3Jkw6NvDQogICogQ2FzbyBvIGNvcmTDo28gY2FtaW5oZSBjb20gbyDDunRlcm8sIMOpIHNpbmFsIGRlIGFkZXPDo28gcGxhY2VudMOhcmlhDQoqIENvbnNpZGVyYXIgYSBoaXN0w7NyaWEgY2zDrW5pY2EuIFJhcmFtZW50ZSBoYXZlcsOhIGFjcmV0aXNtbyBlbSBwcmltw61wYXJhcywgZ2VzdGFudGVzIHNlbSBjZXPDoXJlYSBwcsOpdmlhLCBvdSBnZXN0YW50ZXMgc2VtIGN1cmV0YWdlbSBvdSBtaW9tZWN0b21pYSBwcsOpdmlhLg0KDQoqKlRyYXVtYXMqKiAoZXBpc2lvdG9taWEsIHJvdHVyYSBkZSBhcnTDqXJpYXMsIGxlc8OjbyBkZSBiZXhpZ2EpDQoNCiogUGFyYSBldml0YXIgYSByb3R1cmEgZGUgYXJ0w6lyaWEgZHVyYW50ZSBjZXPDoXJlYXMsIGFudGVzIGRlIHByb2NlZGVyIGFvIGNvcnRlLCBzZW1wcmUgcmVhbGl6YXIgcGFscGHDp8OjbyBwYXJhIGNvbmZlcmlyIGEgcG9zacOnw6NvIGRvIMO6dGVybywgcXVlIGZyZXF1ZW50ZW1lbnRlIHNlIGVuY29udHJhIGxldm92ZXJ0aWRvLg0KDQoqKlRyb21ib3MqKiAoZGlzY3Jhc2lhcyBzYW5ndcOtbmVhcykNCg0KKiBOb3JtYWxtZW50ZSBuw6NvIGNhdXNhbSBzYW5ncmFtZW50b3MgYWJ1bmRhbnRlcy4gQ2FzbyBhIHBhY2llbnRlIG7Do28gdGVuaGEgaGlzdMOzcmlhIHByw6l2aWEgZSBuw6NvIHNhaWJhIGluZm9ybWFyLCDDqSBwb3Nzw612ZWwgb2JzZXJ2YXIgc2UgYSBsb3F1aWHDp8OjbyBhcHJlc2VudGEgYXVzw6puY2lhIGRlIGNvw6FndWxvcywgbyBxdWUgc2VyaWEgdW0gc2luYWwgZGUgY29hZ3Vsb3BhdGlhcy4NCg0KIyMjIEVwaWxlcHNpYSB7LnRhYnNldH0NCg0KRm9udGU6IFtCb3JnZWx0IGV0IGFsLiwgMjAxNl0oaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wbWMvYXJ0aWNsZXMvUE1DNTAzNjU0Ni8pDQoNCiMjIyMgRXBpZGVtaW9sb2dpYQ0KDQoxNS0zMiUgZGFzIG11bGhlcmVzIHBvZGVtIGFwcmVzZW50YXIgKiphdW1lbnRvKiogbmEgZnJlcXXDqm5jaWEgb3Ugc2V2ZXJpZGFkZSBkYXMgY29udnVsc8O1ZXMgbmEgZ2VzdGHDp8OjbyBkZXZpZG8gYW8gYXVtZW50byBlc3Ryb2fDqm5pY28gZSBwcm9nZXN0YWfDqm5pY28uDQoNCk11bGhlcmVzIHNlbSBjb252dWxzw7VlcyBwb3IgOSBtZXNlcyBwcsOpdmlvcyDDoCBnZXN0YcOnw6NvIHBlcm1hbmVjZXLDo28gc2VtIGNvbnZ1bHPDtWVzIGR1cmFudGUgdG9kYSBhIGdlc3Rhw6fDo28gZW0gODQtOTIlIGRvcyBjYXNvcywgKipjYXNvIG1hbnRlbmhhbSBvIHJlZ2ltZSB0ZXJhcMOqdXRpY28gcHLDqXZpbyoqLg0KDQpBICoqbW9ydGFsaWRhZGUqKiBtYXRlcm5hIMOpICoqMTB4KiogbWFpb3IgZW0gZXBpbMOpcHRpY2FzIGRvIHF1ZSBlbSBuw6NvIGVwaWzDqXB0aWNhcyAoT2RkcyBSYXRpbykuDQoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9MiwgZmlnLndpZHRoPTZ9DQpkZiA8LSBmcmVhZCgiZmF0b3I6IG1vcnRhbGlkYWRlDQogICAgICAgICAgICBFcGlsw6lwdGljYXM6IDAuMDgNCiAgICAgICAgICAgIE7Do28gZXBpbMOpcHRpY2FzOiAwLjAwNiIsDQogICAgICAgICAgICBmaWxsPVQsIHNlcD0nOicpDQoNCnRibC5yaXNrKGRmLCAiIiwgIk1vcnRhbGlkYWRlICglKSIsICJNb3J0YWxpZGFkZSBlbSBnZXN0YW50ZXMiLCAwLjUsIDAuMSwgRikNCmBgYA0KDQojIyMjIENvbXBsaWNhw6fDtWVzIG5vIGZldG8NCg0KT3MgZmV0b3MgZGUgbcOjZXMgZXBpbMOpcHRpY2FzIHTDqm0gbWFpcyByaXNjbyBkZSBtw6EtZm9ybWHDp8O1ZXMsIHBvc3NpdmVsbWVudGUgZGV2aWRvIMOgIGV4cG9zacOnw6NvIGEgYW50aWVwaWzDqXB0aWNvcy4NCg0KYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0yLCBmaWcud2lkdGg9Nn0NCmRmIDwtIGZyZWFkKCJmYXRvcjogbW9ydGFsaWRhZGUNCiAgICAgICAgICAgIEVwaWzDqXB0aWNhczogNDogMTQNCiAgICAgICAgICAgIE7Do28gZXBpbMOpcHRpY2FzOiAxOiA0IiwNCiAgICAgICAgICAgIGZpbGw9VCwgc2VwPSc6JykNCg0KdGJsLnJpc2soZGYsICIiLCAiSW5jaWTDqm5jaWEgZGUgbcOhLWZvcm1hw6fDtWVzICglKSIsICJGZXRvcyBjb20gbcOhLWZvcm1hw6fDtWVzIiwgMC41LCAxMDAsIEYpDQpgYGANCg0KRGV2aWRvIGEgZXNzYSBpbmNpZMOqbmNpYSBhdW1lbnRhZGEsIHByZWNvbml6YS1zZSBvIHVzbyBkZSBtb25vdGVyYXBpYSwgZW0gdmV6IGRlIHBvbGl0ZXJhcGlhLCBwYXJhIG8gdHJhdGFtZW50byBkYXMgY29udnVsc8O1ZXMuIENvbnR1ZG8sIGjDoSBkaXNjdXNzw6NvIHNlIG8gcHJvYmxlbWEgZXN0w6EgbmEgcG9saXRlcmFwaWEgKnBlciBzZSosIG91IG5hIGFkacOnw6NvIGRvICoqdmFscHJvYXRvIGRlIHPDs2RpbyoqLCB1bSBncmFuZGUgdGVyYXRvZ8Oqbmljby4NCg0KRW0gY2Fzb3MgZ3JhdmVzIChlLmcuICplcGlsZXBzaWEgZ2Vuw6l0aWNhIGdlbmVyYWxpemFkYSopLCBhbnRlcyBkZSBjb25zaWRlcmFyIGEgaW5pY2lhw6fDo28gZGUgdmFscHJvYXRvLCDDqSBwb3Nzw612ZWwgdGVudGFyIGNvbWJpbmHDp8O1ZXMgY29tICoqbGV2ZXRpcmFjZXRhbSoqIGUgKipsYW1vdHJpZ2luYSoqLCBjdWphIHRlcmF0b2dlbmljaWRhZGUgw6kgbWVub3IuDQoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTZ9DQpkZiA8LSBmcmVhZCgiZHJvZ2EtIG1hbGZvcm1hw6fDo28gLSBtYXgNCiAgICAgICAgICAgIFRBWEEgQkFTQUwtMS42Mi00DQpDYXJiYW1hemVwaW5lIDwgNDAwIG1nL2QtMi4yDQpDbG9uYXplcGFtLTMNCkdhYmFwZW50aW4tMS43DQpMYW1vdHJpZ2luZS0xLjctMy43DQpMZXZldGlyYWNldGFtLTIuNA0KT3hjYXJiYXplcGluZS0yLjgNClBoZW5vYmFyYml0YWwtNi41DQpQaGVueXRvaW4vRm9zcGhlbnl0b2luLTMuNw0KUHJlZ2FiYWxpbi0zLjMNClRvcGlyYW1hdGUgbW9ub3RoZXJhcHktMy4xLTQuNg0KVG9waXJhbWF0ZSBwb2x5dGhlcmFweS0xNC4xDQpWYWxwcm9pYyBhY2lkLTYuMC05LjANClZhbHByb2ljIGFjaWQgPCA3MDAgbWcvZC02DQpWYWxwcm9pYyBhY2lkIDcwMCBhIDE1MDAgbWcvZC0xMA0KVmFscHJvaWMgYWNpZCA+MTUwMCBtZy9kLTIwDQpNb25vdGVyYXBpYSAoZ2VyYWwpLTMNClBvbGl0ZXJhcGlhIChnZXJhbCktMTcNCiIsDQogICAgICAgICAgICBmaWxsPVQsIHNlcD0nLScpDQoNCnRibC5yaXNrKGRmLCAiIiwgIkluY2lkw6puY2lhIGRlIG3DoS1mb3JtYcOnw7VlcyAoJSkiLCAiVGVyYXRvZ2VuaWNpZGFkZSBkYXMgZHJvZ2FzIiwgMC41LCAyNSwgVCkNCmBgYA0KDQrDiSBpbXBvcnRhbnRlIGNvbnNpZGVyYXIgcXVlIGEgaW50ZXJydXDDp8OjbyBhYnJ1dGEgZG8gbWVkaWNhbWVudG8gYW50aWVwaWzDqXB0aWNvIGR1cmFudGUgYSBnZXN0YcOnw6NvLCBwb3IgbWVkbyBkYSB0ZXJhdG9nZW5pY2lkYWRlLCBwb2RlIGxldmFyIGEgY29tcGxpY2HDp8O1ZXMgZ3JhdmVzIHBhcmEgYSBtw6NlLCBpbmNsdXNpdmUgbW9ydGUuDQoNCiMjIyBBYm9ydGFtZW50byB7LnRhYnNldH0NCg0KIyMjIyBEZWZpbmnDp8Ojbw0KUGVyZGEgZGEgZ2VzdGHDp8OjbyBhbnRlcyBkYXMgMjAgc2VtYW5hcyBkZSBnZXN0YcOnw6NvLiBBIE9NUyBkZWZpbmUgY29tbyBleHB1bHPDo28gZGUgdW0gZW1icmnDo28gKDEwIHNlbWFuYXMgb3UgbWVub3MpIG91IGZldG8gY29tIDUwMCBnIG91IG1lbm9zLg0KDQojIyMjIEluY2lkw6puY2lhcw0KDQoqKkRlbnRyZSB0b2RhcyBhcyBnZXN0YcOnw7VlcyoqDQoNCiogRW0gZ2VzdGHDp8O1ZXMgcmVjb25oZWNpZGFzIGNsaW5pY2FtZW50ZQ0KICArIE3Do2VzIHByw6l2aWFzIG91IHByaW1pZ2VzdGFzOiA1JQ0KICArIEVudHJlIDIwLTMwIGFub3M6IDktMTclDQogICsgRW50cmUgMzAtMzUgYW5vczogMjAlDQogICsgRW50cmUgMzUtNDAgYW5vczogNDAlDQogICsgRW50cmUgNDAtNDUgYW5vczogODAlDQogICsgQXDDs3MgdW0gYWJvcnRhbWVudG86IDIwJQ0KICArIEFww7NzIGRvaXMgYWJvcnRhbWVudG9zIGNvbnNlY3V0aXZvczogMjglDQogICsgQXDDs3MgMyBvdSBtYWlzIGFib3J0YW1lbnRvcyBjb25zZWN1dGl2b3M6IDQzJQ0KICArIEdlcmFsOiA4LTIwJQ0KKiBFbSBnZXN0YcOnw7VlcyBuw6NvIHJlY29uaGVjaWRhcywgb3Ugc3ViY2zDrW5pY2FzOiAxMy0yNiUNCg0KYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0yLCBmaWcud2lkdGg9Nn0NCg0KZGYgPC0gZnJlYWQoImlkYWRlOiBtaW46IG1heA0KICAgICAgICAgICAgICBNw6NlcyBwcsOpdmlhcyBvdSBwcmltaWdlc3RhczogNQ0KICBFbnRyZSAyMC0zMCBhbm9zOiA5OiAxNw0KICBFbnRyZSAzMC0zNSBhbm9zOiAyMA0KICBFbnRyZSAzNS00MCBhbm9zOiA0MA0KICBFbnRyZSA0MC00NSBhbm9zOiA4MA0KICBBcMOzcyB1bSBhYm9ydGFtZW50bzogMjANCiAgQXDDs3MgZG9pcyBhYm9ydGFtZW50b3MgY29uc2VjdXRpdm9zOiAyOA0KICBBcMOzcyAzIG91IG1haXMgYWJvcnRhbWVudG9zIGNvbnNlY3V0aXZvczogNDMNCiAgR2VyYWw6IDg6IDIwIiwNCiAgICAgICAgICAgIGZpbGw9VCwgc2VwPSc6JykNCg0KdGJsLnJpc2soZGYsICIiLCAiUG9yY2VudGFnZW0gZGFzIGdlc3Rhw6fDtWVzIiwgIkluY2lkw6puY2lhIGRlIGFib3J0YW1lbnRvcyIsIDAuNSwgMTAwLCBUKQ0KYGBgDQoNCioqRGVudHJlIHRvZG9zIG9zIGFib3J0YW1lbnRvcyoqDQoNCiogQWJvcnRhbWVudG9zIGRlIHByaW1laXJvIHRyaW1lc3RyZTogODAlDQoqIEFib3J0YW1lbnRvcyBhbnRlcyBkbyByZWNvbmhlY2ltZW50byBjbMOtbmljbzogNzAlDQoqIEFib3J0YW1lbnRvcyBkZSBzZWd1bmRvIHRyaW1lc3RyZTogMTAtMTUlDQoqIEFib3J0YW1lbnRvcyBkZXZpZG9zIGEgY3JvbW9zc29tb3BhdGlhczogNTAlDQoNCioqRGVudHJlIGFzIGNyb21vc3NvbW9wYXRpYXMqKg0KDQoqIEFuZXVwbG9pZGlhczogODUlDQoqIFRyaXBsb2lkaWFzOiAxMCUNCiogVGV0cmFwbG9pZGlhczogNC4yJQ0KDQoqKkluY2lkw6puY2lhIGRlIGNyb21vc3NvbW9wYXRpYXMqKg0KDQoqIERlbnRyZSBhcyBnZXN0YcOnw7VlcyBhbmVtYnJpb25hZGFzOiA5MCUNCiogRGVudHJlIG9zIGFib3J0YW1lbnRvcyBkZSA4LTExIHNlbWFuYXM6IDUwJQ0KKiBEZW50cmUgb3MgYWJvcnRhbWVudG9zIGRlIDE2LTE5IHNlbWFuYXM6IDMwJQ0KICANCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9MiwgZmlnLndpZHRoPTZ9DQpkZiA8LSBmcmVhZCgiaWRhZGU6IG1pbjogbWF4DQogICAgICAgICAgICAgIEFib3J0YW1lbnRvcyBkZSBwcmltZWlybyB0cmltZXN0cmU6IDgwDQpBYm9ydGFtZW50b3MgYW50ZXMgZG8gcmVjb25oZWNpbWVudG8gY2zDrW5pY286IDcwDQpBYm9ydGFtZW50b3MgZGUgc2VndW5kbyB0cmltZXN0cmU6IDEwOiAxNQ0KQWJvcnRhbWVudG9zIGRldmlkb3MgYSBjcm9tb3Nzb21vcGF0aWFzOiA1MCIsDQogICAgICAgICAgICBmaWxsPVQsIHNlcD0nOicpDQoNCnRibC5yaXNrKGRmLCAiIiwgIlBvcmNlbnRhZ2VtIGRvcyBhYm9ydGFtZW50b3MiLCAiSW5jaWTDqm5jaWEgZGVudHJlIG9zIGFib3J0YW1lbnRvcyIsIDAuNSwgMTAwLCBUKQ0KDQpgYGANCiMjIEdpbmVjb2xvZ2lhIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzfQ0KDQojIyMgVmFnaW5vc2VzIHsudGFic2V0fQ0KDQojIyMjIFRyYXRhbWVudG8NCg0KKipFbSBnZXN0YW50ZXMqKg0KDQpPIG1ldHJvbmlkYXpvbCAqKm7Do28gZXN0w6EgYXNzb2NpYWRvIMOgIHRlcmF0b2dlbmljaWRhZGUqKiBvdSBhIG91dHJvcyBldmVudG9zIGFkdmVyc29zIG5vIGZldG8gW0Jyb2NrbGVodXJzdCBldCBhbC4sIDIwMTNdKGh0dHBzOi8vcHVibWVkLm5jYmkubmxtLm5paC5nb3YvMjM0NDA3NzcvKSwgYXBlc2FyIGRlIGF0cmF2ZXNzYXIgYSBiYXJyZWlyYSBwbGFjZW50w6FyaWEuDQoNCk8gdHJhdGFtZW50byDDqSBmZWl0byBhcGVuYXMgZW0gcGFjaWVudGVzIHNpbnRvbcOhdGljYXMuDQoNCiogQ2xpbmRhbWljaW5hIDMwMCBtZyBvcmFsIDJ4L2RpYSBwb3IgNyBkaWFzDQoqIE1ldHJvbmlkYXpvbCA1MDAgbWcgb3JhbCAyeC9kaWEgcG9yIDcgZGlhcw0KDQoqKkVtIG7Do28gZ2VzdGFudGVzKioNCg0KTmFzIG7Do28gZ2VzdGFudGVzLCDDqSBwb3Nzw612ZWwsIG9wY2lvbmFsbWVudGUsIHRyYXRhbWVudG8gcG9yIGNyZW1lIG91IHN1cG9zaXTDs3JpbyB2YWdpbmFpcy4gTsOjbyBjb25zdW1pciBldGFub2wuDQoNCiogTWV0cm9uaWRhem9sDQogKiBHZWwgdmFnaW5hbCAwLDc1JSAxeC9kaWEgcG9yIDUgZGlhcw0KKiBDbGluZGFtaWNpbmENCiAqIENyZW1lIHZhZ2luYWwgMiUgMXgvZGlhIMOgIG5vaXRlIHBvciA3IGRpYXMNCiAqIFN1cG9zaXTDs3JpbyB2YWdpbmFsIDEwMCBtZyAxeC9kaWEgw6Agbm9pdGUgcG9yIDMgZGlhcw0KIA0KIyMjIyBSZWNvcnLDqm5jaWENCg0KKiBEZW50cm8gZGUgMyBtZXNlczogMzAlDQoqIERlbnRybyBkZSAxMiBtZXNlczogNTAlDQoNClRyYXRhciBhcyByZWNvcnLDqm5jaWFzIHByZXZlbnRpdmFtZW50ZSBvdSBwb3IgdW0gY3Vyc28gbWFpcyBsb25nbywgY29tIGFudGliacOzdGljbyBkaWZlcmVudGUuDQoNCiogVHJhdGFtZW50byBwcmV2ZW50aXZvIHByb2xvbmdhZG86IG1ldHJvbmlkYXpvbCBvdSB0aW5pZGF6b2wgb3JhbCBwb3IgNyBkaWFzICsgw6FjaWRvIGLDs3JpY28gdmFnaW5hbCA2MDAgbWcgcG9yIDIxIGRpYXMNCiogRG9pcyBkaWFzIGFww7NzIGEgw7psdGltYSBkb3NlIGRlIMOhY2lkbyBiw7NyaWNvOiBzZSBvIG5vdm8gZXhhbWUgbW9zdHJhciByZW1pc3PDo28sIGluaWNpYXIgbWV0cm9uaWRhem9sIGVtIGdlbCwgMngvc2VtYW5hIHBvciA2IG1lc2VzICh0ZXJhcGlhIHN1cHJlc3NpdmEpDQoNCiMjIyBWYWdpbml0ZXMgaW5mZWNjaW9zYXMgey50YWJzZXR9DQoNCiMjIyMgR8OqbmVyb3MgZGFzIGJhY3TDqXJpYXMgbWFpcyBwcmVzZW50ZXMgbmFzIHZ1bHZvdmFnaW5pdGVzIGUgdmFnaW5vc2VzDQoNClNlbGXDp8OjbyBkZSBiYWN0w6lyaWFzIGNvbSBhdW1lbnRvIHNpZ25pZmljYXRpdm8gKHAgPiAwLjA1KQ0KT3JkZW5hZGFzIHBvciBwb3JjZW50YWdlbSBkZSBhY2hhZG9zDQoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTZ9DQojIyBTZWd1bmRvIGh0dHBzOi8vd3d3Lm5hdHVyZS5jb20vYXJ0aWNsZXMvczQxNTk4LTAxOS01MDQxMC14L3RhYmxlcy8yDQpkZiA8LSBmcmVhZCgiDQogICAgICAgICAgICBnZW5lcm86cG9yY2VudGFnZW0NCiAgICAgICAgICAgIEdhcmRuZXJlbGxhOjcuNjgNClByZXZvdGVsbGE6My43Ng0KUm9zZWJ1cmlhOjMuNTENCkZhZWNhbGliYWN0ZXJpdW06Mi4xNA0KQXRvcG9iaXVtOjEuOTQNClJ1bWlub2NvY2NhY2VhZToxLjg2DQpCaWZpZG9iYWN0ZXJpdW06MS4yOA0KTWVnYXNwaGFlcmE6MS4wNA0KU3RyZXB0b2NvY2N1czoxLjA0DQoiLCBzZXAgPSAiOiIpDQoNCnRibC5yaXNrKGRmLCAiIiwgIlBvcmNlbnRhZ2VtIGRhcyB2dWx2b3ZhZ2luaXRlcyIsICJWdWx2b3ZhZ2luaXRlcyBwb3IgQ2FuZGlkYSBzcC4iLCAwLjUsIDEwLCBUKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTZ9DQpkZiA8LSBmcmVhZCgiDQogICAgICAgICAgICBnZW5lcm86cG9yY2VudGFnZW0NCiAgICAgICAgICAgIEdhcmRuZXJlbGxhOjExLjQ0DQpQcmV2b3RlbGxhOjkuMTUNCk1lZ2FzcGhhZXJhOjguNjQNClNuZWF0aGlhOjcuNzYNCkF0b3BvYml1bTo0LjkyDQpSb3NlYnVyaWE6My41MQ0KQ2xvc3RyaWRpdW06Mi4xNA0KQWVyb2NvY2N1czoyLjA2DQpEaWFsaXN0ZXI6Mi4wMg0KUGFydmltb25hczoxLjM5DQoiLCBzZXAgPSAiOiIpDQp0YmwucmlzayhkZiwgIiIsICJQb3JjZW50YWdlbSBkYXMgdmFnaW5vc2VzIiwgIlZhZ2lub3NlcyBiYWN0ZXJpYW5hcyIsIDAuNSwgMjAsIFQpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0zLCBmaWcud2lkdGg9Nn0NCmRmIDwtIGZyZWFkKCINCiAgICAgICAgICAgIGdlbmVybzpwb3JjZW50YWdlbQ0KICAgICAgICAgICAgUm9zZWJ1cmlhOjQuNDINCk1lZ2FzcGhhZXJhOjIuOTcNCkZhZWNhbGliYWN0ZXJpdW06Mi4zMQ0KUnVtaW5vY29jY2FjZWFlOjEuOTUNCkF0b3BvYml1bToxDQpCbGF1dGlhOjAuOTENCkNsb3N0cmlkaXVtOjAuNjUNCkxhY2hub3NwaXJhY2VhZTowLjU5DQoNCg0KIiwgc2VwID0gIjoiKQ0KdGJsLnJpc2soZGYsICIiLCAiUG9yY2VudGFnZW0gZGFzIHZhZ2luaXRlcyIsICJWYWdpbml0ZXMgcG9yIENobGFteWRpYSIsIDAuNSwgMTAsIFQpDQoNCmBgYA0KDQojIyMjIERpdmlzw6NvIGRvcyBtaWNyb3JnYW5pc21vcw0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KZGYgPC0gZnJlYWQoIkVzcMOpY2llLCB0aXBvLCBncmFtLCBhZXIsIHN1Yi1hZXINCiAgICAgICAgICAgIENhbmRpZGEgYWxiaWNhbnMsIGZ1bmdvDQogICAgICAgICAgICBDYW5kaWRhIGdsYWJyYXRhLCBmdW5nbw0KICAgICAgICAgICAgQ2FuZGlkYSB0cm9waWNhbGlzLCBmdW5nbw0KICAgICAgICAgICAgQ2FuZGlkYSBrcnVzZWksIGZ1bmdvDQogICAgICAgICAgICBDYW5kaWRhIHBhcmFwc2lsb3NpcywgZnVuZ28NCiAgICAgICAgICAgIFN0cmVwdG9jb2NjdXMsIGJhY3TDqXJpYSwgcG9zaXRpdm8sIGFuYWVyw7NiaW8sIGZhY3VsdGF0aXZvDQogICAgICAgICAgICBTdGFwaHlsb2NvY2N1cywgYmFjdMOpcmlhLCBwb3NpdGl2bywgYW5hZXLDs2JpbywgZmFjdWx0YXRpdm8NCiAgICAgICAgICAgIEVzY2hlcmljaGlhIGNvbGksIGJhY3TDqXJpYSwgbmVnYXRpdm8sIGFuYWVyw7NiaW8sIGZhY3VsdGF0aXZvDQogICAgICAgICAgICBMaXN0ZXJpYSBtb25vY3l0b2dlbmVzLCBiYWN0w6lyaWEsIHBvc2l0aXZvLCBhbmFlcsOzYmlvLCBmYWN1bHRhdGl2bw0KICAgICAgICAgICAgTmVpc3NlcmlhLCBiYWN0w6lyaWEsIG5lZ2F0aXZvLCBhZXLDs2Jpbw0KICAgICAgICAgICAgVHJpY2hvbW9uYXMgdmFnaW5hbGlzLCBwcm90b3pvw6FyaW8sICwgYW5hZXLDs2Jpbw0KICAgICAgICAgICAgQ2hsYW15ZGlhIHRyYWNob21hdGlzLCBiYWN0w6lyaWEsIG5lZ2F0aXZvLCBhbmFlcsOzYmlvDQogICAgICAgICAgICBHYXJkbmVyZWxsYSB2YWdpbmFsaXMsIGJhY3TDqXJpYSwgdmFyacOhdmVsLCBhbmFlcsOzYmlvDQogICAgICAgICAgICBBdG9wb2JpdW0sIGJhY3TDqXJpYSwgcG9zaXRpdm8sIGFuYWVyw7NiaW8NCiAgICAgICAgICAgIFByZXZvdGVsbGEsIGJhY3TDqXJpYSwgbmVnYXRpdm8sIGFuYWVyw7NiaW8NCiAgICAgICAgICAgIENsb3N0cmlkaXVtLCBiYWN0w6lyaWEsIHBvc2l0aXZvLCBhbmFlcsOzYmlvLCBvYnJpZ2F0w7NyaW8NCiAgICAgICAgICAgIFJvc2VidXJpYSwgYmFjdMOpcmlhLCBuZWdhdGl2bywgYW5hZXLDs2Jpbw0KICAgICAgICAgICAgRmFlY2FsaWJhY3Rlcml1bSwgYmFjdMOpcmlhLCBwb3NpdGl2bywgYW5hZXLDs2Jpbw0KICAgICAgICAgICAgQXRvcG9iaXVtLCBiYWN0w6lyaWEsIHBvc2l0aXZvLCBhbmFlcsOzYmlvDQogICAgICAgICAgICBSdW1pbm9jb2NjdXMsIGJhY3TDqXJpYSwgcG9zaXRpdm8sIGFuYWVyw7NiaW8NCiAgICAgICAgICAgIE1lZ2FzcGhhZXJhLCBiYWN0w6lyaWEsIG5lZ2F0aXZvLCBhbmFlcsOzYmlvLCBvYnJpZ2F0w7NyaW8NCiAgICAgICAgICAgICIsIGZpbGwgPSBULCBzZXAgPSAiLCIpDQpkZltvcmRlcih0aXBvLCBhZXIsIGBzdWItYWVyYCwgZ3JhbSldDQoNCmBgYA0KDQojIyMgSFBWIHsudGFic2V0fQ0KDQojIyMjIFZhY2luYXMNCg0KKiBDZXJ2YXJpeDogMTYsIDE4DQoqIEdhcmRhc2lsOiA2LCAxMQ0KKiBHYXJkYXNpbCA5OiAzMSwgMzMsIDQ1LCA1MiBlIDU4DQoNCiMjIyMgUHJldmFsw6puY2lhIG5vIGPDom5jZXIgY2VydmljYWwNCg0KYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9Nn0NCiMjIGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvcG1jL2FydGljbGVzL1BNQzU4ODA2MTIvDQoNCmRmIDwtIGZyZWFkKCJIUFYsIHByb2INCkhQVjE2LDY1LjYNCkhQVjE4LDEyLjYNCkhQVjU4LDEyLjYNCkhQVjUyLDYuNQ0KSFBWMzMsNS41DQpIUFYzMSwzLjUNCkhQVjU5LDIuNg0KSFBWNDUsMi4xDQpIUFYzOSwyLjINCkhQVjUxLDEuNA0KSFBWNTYsMS4zDQpIUFY2OCwxLjMNCkhQVjM1LDEuMg0KSFBWNjYsMC43Iiwgc2VwID0gIiwiKQ0KDQpkZg0KDQp0YmwucmlzayhkZiwgIiIsICJQb3JjZW50YWdlbSBlbSBjw6JuY2VyZXMgY2VydmljYWlzIiwgIlByZXZhbMOqbmNpYSBkZSBzdWJ0aXBvcyBkZSBIUFYgZW0gQ0EgY2VydmljYWwiLCAwLjUsIDEwMCwgVCkNCmBgYA0KDQojIyBDT1ZJRC0xOSB7LnRhYnNldH0NCg0KIyMjIEVzdHJhdMOpZ2lhcyBkZSB1c28gZGUgRVBJDQoNCkZvbnRlOiBbVmVyYmVlayBldCBhbC4sIDIwMjBdKGh0dHBzOi8vcHVibWVkLm5jYmkubmxtLm5paC5nb3YvMzI0MTIwOTYvKQ0KDQpBbGd1bWFzIHByb3Rlw6fDtWVzIHPDo28gbWFpcyBlZmV0aXZhcyBxdWUgb3V0cmFzIHBhcmEgZXZpdGFyIGluZmVjw6fDtWVzLCBtYXMgdW0gZXN0dWRvIGlkZW50aWZpY291IHVtYSBwYXJjZWxhIHJlbGF0aXZhbWVudGUgZXF1aXZhbGVudGUgZGUgcHJvdGXDp8OjbyBjb25mZXJpZGEgcG9yIGNhZGEgdW1hIGRhcyBwcm90ZcOnw7VlcyBhIHNlZ3Vpci4NCg0KYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0yLCBmaWcud2lkdGg9Nn0NCmRmIDwtIGZyZWFkKCJmYXRvciwgUlIsIG1heA0KICAgICAgICAgICAgQXZlbnRhbCBjb20gbHV2YXMgc2VsYWRhcywgMC4wOSwgMC43OA0KICAgICAgICAgICAgQXZlbnRhbCBjb20gdmVkYcOnw6NvIG5vIHBlc2Nvw6dvIGUgcHVuaG9zLCAwLjAxLCAwLjU1DQogICAgICAgICAgICBSZW1vw6fDo28gZGUgbHV2YXMgZSBhdmVudGFsIGVtIHVtYSBldGFwYSwgMC4wNSwgMC43Nw0KICAgICAgICAgICAgTHV2YXMgZHVwbGFzLCAwLjE3LCAwLjY2IiwgZmlsbCA9IFQsIHNlcCA9ICIsIikNCg0KdGJsLnJpc2soZGYsICIiLCAiUmlzY28gcmVsYXRpdm8gZGUgY29udGFtaW5hw6fDo28iLCAiRXN0cmF0w6lnaWFzIGRlIHVzbyBkZSBFUEkiLCAwLjUsIDIsIEYsIDEpDQpgYGANCkNvbnR1ZG8sIG8gdXNvIGRlIE45NSBuw6NvIHBhcmVjZSBzZXIgc3VwZXJpb3IgYW8gdXNvIGRlIG3DoXNjYXJhcyBjaXLDunJnaWNhcyBlbSBkaXZlcnNhcyBjaXJjdW5zdMOibmNpYXMsIHVtIGFjaGFkbyByZXBldGlkbyBwb3IgZGl2ZXJzb3MgZXN0dWRvcyBjbMOtbmljb3MgcmFuZG9taXphZG9zLCBjb29ydGVzIGUgY2Fzb3MtY29udHJvbGUuDQoNCioqKg0KRm9udGU6IFtTbWl0aCBldCBhbC4sIDIwMTZdKGh0dHBzOi8vcHVibWVkLm5jYmkubmxtLm5paC5nb3YvMjY5NTI1MjkvKQ0KDQpgYGB7ciBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTIsIGZpZy53aWR0aD02fQ0KZGYgPC0gZnJlYWQoImZhdG9yLCBPUiwgbWF4DQogICAgICAgICAgICBJbmZlY8Onw7VlcyByZXNwaXJhdMOzcmlhcyAoRUNSKSwgMC42NCwgMS4yNA0KICAgICAgICAgICAgSW5mZWPDp8O1ZXMgcmVzcGlyYXTDs3JpYXMgKENvb3J0ZSksIDAuMDMsIDYuNDENCiAgICAgICAgICAgIEluZmVjw6fDtWVzIHJlc3BpcmF0w7NyaWFzIChDYXNvLWNvbnRyb2xlKSwgMC4yNSwgMy4zNg0KICAgICAgICAgICAgU8OtbmRyb21lIGdyaXBhbCAoRUNSKSwgMC4xOSwgMS40MQ0KICAgICAgICAgICAgQWJzZW50ZcOtc21vIChFQ1IpLCAwLjU3LCAxLjUiLCBmaWxsID0gVCwgc2VwID0gIiwiKQ0KDQp0YmwucmlzayhkZiwgIiIsICJPZGRzIFJhdGlvIiwgIlVzbyBkZSBOOTUgeCBtw6FzY2FyYXMgY2lyw7pyZ2ljYXMiLCAwLjUsIDEwLCBGLCAxKQ0KYGBgDQoNCiMjIyBQZXJtYW7Dqm5jaWEgZW0gc3VwZXJmw61jaWVzDQoNCkZvbnRlOiBbRG9yZW1hbGVuIGV0IGFsLiwgMjAyMF0oaHR0cHM6Ly93d3cubmVqbS5vcmcvZG9pLzEwLjEwNTYvTkVKTWMyMDA0OTczKQ0KDQpVbSBlc3R1ZG8gaWRlbnRpZmljb3UgbyB0ZW1wbyBkZSBkdXJhw6fDo28gZGFzIHBhcnTDrWN1bGFzIHZpcmFpcyBkZSBTQVJTLUNvVi0yIGVtIGRpdmVyc2FzIHN1cGVyZsOtY2llcy4NCg0KYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0yLCBmaWcud2lkdGg9Nn0NCmRmIDwtIGZyZWFkKCJmYXRvciwgdGVtcG8NCiAgICAgICAgICAgIENvYnJlLCA4LCAyNA0KICAgICAgICAgICAgQ2FydG9saW5hLCAyNCwgNDgNCiAgICAgICAgICAgIEHDp28gaW5veCwgNDgNCiAgICAgICAgICAgIFBsw6FzdGljbywgNzIiLCBmaWxsID0gVCkNCg0KdGJsLnJpc2soZGYsICIiLCAiVGVtcG8gcGFyYSBpbmF0aXZhw6fDo28gKGhvcmFzKSIsICJWaWFzIGRlIHRyYW5zbWlzc8OjbyAoU0FSUyBlIFNBUlMtQ29WLTIpIiwgMC41LCA4MCwgRiwgMSkNCmBgYA0KDQojIyMgSW5mZWN0aXZpZGFkZQ0KDQpGb250ZTogW1pvdSBldCBhbC4sIDIwMjBdKGh0dHBzOi8vd3d3Lm5lam0ub3JnL2RvaS9mdWxsLzEwLjEwNTYvTkVKTWMyMDAxNzM3KQ0KDQpVbSBlc3R1ZG8gaWRlbnRpZmljb3UgcXVlIGEgY2FkYSB+MiBkaWFzLCBhIGNhcmdhIHZpcmFsIGRvIFJULXFQQ1IgbmFzYWwgKyBvcm9mYXLDrW5nZW8gY2FpIHBlbGEgbWV0YWRlLCB0b3JuYW5kby1zZSBwcmF0aWNhbWVudGUgaW5kZXRlY3TDoXZlbCBhcMOzcyAxMCBkaWFzIGRlIHNpbnRvbWFzLiBDb250dWRvLCBlbGVzIHRhbWLDqW0gaWRlbnRpZmljYXJhbSBxdWUgb3MgbWFpb3JlcyBuw612ZWlzIGRlIGNhcmdhIHZpcmFsIGFwYXJlY2VtIG5vIHByaW1laXJvIGRpYSBkZSBzaW50b21hcywgbyBxdWUgc3VnZXJlIHF1ZSBhIGNhcmdhIHZpcmFsIGUgYSB0cmFuc21pc3NpYmlsaWRhZGUgasOhIGluaWNpYSBlbSBncmFuZGUgcGFydGUgYW50ZXMgZG8gaW7DrWNpbyBkb3Mgc2ludG9tYXMuDQoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTZ9DQpkZiA8LSBzZXEoMzAsNDAsIGxlbmd0aC5vdXQgPSAyMCkNCnBsb3QoZGYsIHlsaW0gPSBjKDQwLDIwKSwgdHlwZSA9ICJsIiwgeWxhYiA9ICJDdCIsIHhsYWIgPSAiRGlhcyBhcMOzcyBpbsOtY2lvIGRvcyBzaW50b21hcyIsIG1haW4gPSAiQ2FyZ2EgdmlyYWwgZGUgU0FSUy1Db1YtMiIpDQphYmxpbmUoaCA9IDQwKQ0KDQoNCmBgYA0KDQoqKioNCkZvbnRlOiBbSGFuIGV0IGFsLiwgMjAyMF0oaHR0cHM6Ly93d3duYy5jZGMuZ292L2VpZC9hcnRpY2xlLzI2LzEwLzIwLTI0NDktZjEpDQoNCkVtIHVtIGVzdHVkbyAqKmNvbSBjcmlhbsOnYXMqKiwgYSBjYXJnYSB2aXJhbCBubyBkaWEgMCBkbyBpbsOtY2lvIGRvcyBzaW50b21hcyBzZSBhcHJveGltYSBkZSAkMTBeOCQgY8OzcGlhcy9tTCBkZSBzZWNyZcOnw6NvIG5hc29mYXLDrW5nZWEsIGNoZWdhbmRvIGEgJDEwXjIkIGPDs3BpYXMvbUwgKCpxdWFzZSogbmVnYXRpdmHDp8OjbykgYXDDs3MgMzUgZGlhcy4gQSBjYXJnYSB2aXJhbCBtw6lkaWEgbm8gY2FzbyBkZSBhbW9zdHJhIHNhbGl2YXIgw6kgYSBtZXNtYSBubyBpbsOtY2lvLCBtYXMgYSAqcXVhc2UqIG5lZ2F0aXZhw6fDo28gw6kgYXRpbmdpZGEgYW50ZXMsIGFww7NzIH4xNSBkaWFzIGRvIGluw61jaW8gZG9zIHNpbnRvbWFzLiBBIGNhcmdhIHZpcmFsIGluaWNpYWwgZXJhIG1haW9yIGVtIGNyaWFuw6dhcyBzaW50b23DoXRpY2FzIGRvIHF1ZSBlbSBjcmlhbsOnYXMgYXNzaW50b23DoXRpY2FzICgkMTBeOSQgdnMgJDEwXns2LjMyfSQgY8OzcGlhcy9tTCkuDQoNCioqKg0KRm9udGU6IFtTdGFkbnl0c2t5aSBldCBhbC4sIDIwMjBdKGh0dHBzOi8vd3d3LnBuYXMub3JnL2NvbnRlbnQvMTE3LzIyLzExODc1KQ0KDQpVbSBlc3R1ZG8gZXN0aW1vdSBxdWUgc2UgdW1hIHBlc3NvYSBjb20gY2FyZ2EgdmlyYWwgc2FsaXZhciBkZSAkMTBeezYuODV9JCBjw7NwaWFzL21MIGZhbGEgYWx0byBlbSB1bSBhbWJpZW50ZSBmZWNoYWRvLCBlbGUgbGliZXJhIDEwMDAgYWVyb3Nzw7NpcyBjb250ZW5kbyB2w61yaW9ucyBwb3IgbWludXRvLCBvcyBxdWFpcyBwZXJtYW5lY2VtIG5vIGFyIHBvciA4IG1pbnV0b3MuIEFzIHBhcnTDrWN1bGFzIHF1ZSBtYWlzIGRlbW9yYW0gbm8gYXIgc8OjbyBhcXVlbGFzIHF1ZSBzYWVtIGRhIGJvY2EgaGlkcmF0YWRhcyBkYSBib2NhIGNvbSB1bSBkacOibWV0cm8gZGUgPiQxMlxtdSBtJC4gUGFydMOtY3VsYXMgbWVub3JlcyB0YW1iw6ltIHPDo28gZW1pdGlkYXMgZSBwb2RlbSBwZXJtYW5lY2VyIGluZGVmaW5pZGFtZW50ZSBlbSBzdXNwZW5zw6NvLCBjb20gbWVpYS12aWRhIGNvbnRyb2xhZGEgc29tZW50ZSBwZWxhIHRheGEgZGUgdmVudGlsYcOnw6NvIGFtYmllbnRlLCBtYXMgYSBjaGFuY2UgZGUgdW1hIHBhcnTDrWN1bGEgZGUgJDFcbXUgbSQgY29udGVyIHVtIHbDrXJpb24gw6kgZGUgc29tZW50ZSAwLjAxJS4gDQoNCiMjIyBFUElzDQoNCkZvbnRlOiBbQ2h1IGV0IGFsLiwgMjAyMF0oaHR0cHM6Ly93d3cudGhlbGFuY2V0LmNvbS9hY3Rpb24vc2hvd1BkZj9waWk9UzAxNDAtNjczNiUyODIwJTI5MzExNDItOSkNCg0KTcOhc2NhcmFzIGRpc3RhbmNpYW1lbnRvIHNvY2lhbCBlIHByb3Rlw6fDo28gb2N1bGFyLCBjYWRhIHVtIGNvbnRyaWJ1aSBpc29sYWRhbWVudGUgcGFyYSByZWR1emlyIGFzIGNoYW5jZXMgZGUgaW5mZWPDp8Ojby4NCg0KYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0yLCBmaWcud2lkdGg9Nn0NCmRmIDwtIGZyZWFkKCJmYXRvcjogYU9SDQogICAgICAgICAgICBEaXN0YW5jaWFtZW50byBwZXNzb2FsOiAwLjA5OiAwLjM4DQogICAgICAgICAgICBVc28gZGUgbcOhc2NhcmFzOiAwLjA3OiAwLjM0DQogICAgICAgICAgICBQcm90ZcOnw6NvIG9jdWxhcjogMC4xMjogMC4zOSIsDQogICAgICAgICAgICBmaWxsID0gVCwgc2VwID0gJzonKQ0KDQp0YmwucmlzayhkZiwgIiIsICJPZGRzIFJhdGlvIGFqdXN0YWRvIiwgIkZhdG9yZXMgZGUgcHJvdGXDp8OjbyBuYSB0cmFuc21pc3PDo28gKENPVklELTE5KSIsIDAuNSwgMiwgRiwgMSkNCmBgYA0KDQpDb250dWRvLCBuw6NvIMOpIHBvc3PDrXZlbCBhdmFsaWFyIHNlIG8gdXNvIGRlIG3DoXNjYXJhcyBjb250cmlidWkgZGV2aWRvIGFvIGNvbXBvcnRhbWVudG8gYXNzb2NpYWRvIGEgZWxhLCBjb21vIGV2aXRhciB0b2NhciBvIHJvc3RvIGUgbyBmYXRvIGRlIHBlc3NvYXMgZXZpdGFyZW0gc2UgYXByb3hpbWFyIGRlIG91dHJhcyBxdWUgZXN0ZWphbSB1c2FuZG8gbcOhc2NhcmFzLg0KDQoqKioNCkZvbnRlOiBbTWFyY2hpb3JpIGV0IGFsLiwgMjAyMF0oaHR0cHM6Ly9hcnhpdi5vcmcvcGRmLzIwMDUuMTI0NDYucGRmKQ0KDQpQb3IgZXhlbXBsbywgdW0gZ3J1cG8gaXRhbGlhbm8gaWRlbnRpZmljb3UgcXVlIGjDoSB1bSBkaXN0YW5jaWFtZW50byBtYWlvciBkZSBwZXNzb2FzIGNvbSBtw6FzY2FyYXMgZW0gY2Fsw6dhZGFzLg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTIsIGZpZy53aWR0aD02fQ0KZGYgPC0gZnJlYWQoImZhdG9yOiBkaXN0YW5jaWE6IG1heA0KICAgICAgICAgICAgQ29tIMOzY3Vsb3MgZSBtw6FzY2FyYTogODA6IDkwDQogICAgICAgICAgICBDb20gbcOhc2NhcmE6IDYwDQogICAgICAgICAgICBTZW0gbcOhc2NhcmE6IDMwIiwNCiAgICAgICAgICAgIGZpbGwgPSBULCBzZXAgPSAnOicpDQoNCnRibC5yaXNrKGRmLCAiIiwgIkRpc3TDom5jaWEgKGNtKSIsICJEaXN0YW5jaWFtZW50byBkZSBwZXNzb2FzIHVzYW5kbyBFUElzIiwgMC41LCAxMDAsIFQsIDApDQpgYGANCg0KKioqDQpGb250ZTogW01hY0ludHlyZSBldCBhbC4sIDIwMTVdKGh0dHBzOi8vYm1qb3Blbi5ibWouY29tL2NvbnRlbnQvNS80L2UwMDY1NzcpDQoNCk8gdXNvIGRlIG3DoXNjYXJhcyBjaXLDunJnaWNhcyDDqSBtYWlzIHByb3RldG9yIHF1ZSBvIHVzbyBkZSBtw6FzY2FyYXMgY2FzZWlyYXMsIG1hcyBxdWFuZG8gbyBlbnNhaW8gY2zDrW5pY28gcmFuZG9taXphZG8gcXVlIGFmaXJtYSBpc3NvIGZvaSByZWFsaXphZG8sIG7Do28gaGF2aWEgbXVpdG8gcmlnb3IgZSBpbnN0cnXDp8OjbyBhIHJlc3BlaXRvIGRvIHVzbyBkZSBtw6FzY2FyYXMgY2FzZWlyYXMsIHF1ZSBwb3RlbmNpYWxtZW50ZSBlcmFtIHJldXRpbGl6YWRhcyBlIGxhdmFkYXMvZGVzaW5mZWN0YWRhcyBhcGVuYXMgYSBjcml0w6lyaW8gaW5kaXZpZHVhbC4NCg0KU8OtbmRyb21lIGdyaXBhbCAoUlIpPTEzLjAwLCA5NSUgQ0kgMS42OSB0byAxMDAuMDcNCklMSSAoUlI9Ni42NCwgOTUlIENJIDEuNDUgdG8gMjguNjUpIGFuZCBsYWJvcmF0b3J5LWNvbmZpcm1lZCB2aXJ1cyAoUlI9MS43MiwgOTUlIENJIDEuMDEgdG8gMi45NCkNClBlbmV0cmF0aW9uIG9mIGNsb3RoIG1hc2tzIGJ5IHBhcnRpY2xlcyB3YXMgYWxtb3N0IDk3JSBhbmQgbWVkaWNhbCBtYXNrcyA0NCUNCg0KYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0yLCBmaWcud2lkdGg9Nn0NCmRmIDwtIGZyZWFkKCJmYXRvcjogUlI6IG1heA0KICAgICAgICAgICAgVG9kYXMgYXMgaW5mZWPDp8O1ZXM6IDEuNjk6IDEwMC4wNw0KICAgICAgICAgICAgU8OtbmRyb21lIGdyaXBhbDogMS40NTogMjguNjUNCiAgICAgICAgICAgIENvbmZpcm1hw6fDo28gbGFib3JhdG9yaWFsOiAxLjAxOiAyLjk0IiwNCiAgICAgICAgICAgIGZpbGwgPSBULCBzZXAgPSAnOicpDQoNCnRibC5yaXNrKGRmLCAiIiwgIlJpc2NvIHJlbGF0aXZvIiwgIlJpc2NvIGRvIHVzbyBkZSBtw6FzY2FyYXMgY2FzZWlyYXMgeCBjaXLDunJnaWNhcyIsIDAuNSwgMTAxLCBULCAxKQ0KYGBgDQoNCioqKg0KRm9udGU6IFtMZXVuZyBldCBhbC4sIDIwMjBdKGh0dHBzOi8vd3d3Lm5hdHVyZS5jb20vYXJ0aWNsZXMvczQxNTkxLTAyMC0wODQzLTIpDQoNClVtIGVzdHVkbyBwdWJsaWNhZG8gbmEgTmF0dXJlIHRlc3RvdSBhIGNhcGFjaWRhZGUgZGFzIG3DoXNjYXJhcyBjaXLDunJnaWNhcyBlbSByZWR1emlyIGEgY2FyZ2EgdmlyYWwgZW1pdGlkYSBwZWxhIHRvc3NlLiBFbGVzIHN1YmRpdmlkaXJhbSBvIGVzdHVkbyBwb3IgcGFydMOtY3VsYXMgbWVub3JlcyBkZSAkNVxtdSBtJCAoYWVyb3Nzb2lzKSBlIG1haW9yZXMgZGUgJDVcbXUgbSQgKGdvdMOtY3VsYXMpLCBlIHBvciB0csOqcyB2w61ydXMgKGNvcm9uYXbDrXJ1cywgcmlub3bDrXJ1cyBlIGluZmx1ZW56YSkuDQoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9MiwgZmlnLndpZHRoPTZ9DQpkZiA8LSBmcmVhZCgiZmF0b3I6IHBvcmNlbnQNCiAgICAgICAgICAgIENvcm9uYXbDrXJ1czogMzANCiAgICAgICAgICAgIENvcm9uYXbDrXJ1cyAoY29tIG3DoXNjYXJhKTogMA0KICAgICAgICAgICAgSW5mbHVlbnphOiAyNg0KICAgICAgICAgICAgSW5mbHVlbnphIChjb20gbcOhc2NhcmEpOiA0DQogICAgICAgICAgICBSaW5vdsOtcnVzOiAyOA0KICAgICAgICAgICAgUmlub3bDrXJ1cyAoY29tIG3DoXNjYXJhKTogMjIiLA0KICAgICAgICAgICAgZmlsbCA9IFQsIHNlcCA9ICc6JykNCg0KdGJsLnJpc2soZGYsICIiLCAiUG9yY2VudGFnZW0gZGUgcG9zaXRpdmHDp8OjbyIsICJUcmFuc21pc3PDo28gZGUgcGFydMOtY3VsYXMgPiA1IM68bSIsIDAuNSwgMTAxLCBULCAwKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9MiwgZmlnLndpZHRoPTZ9DQpkZiA8LSBmcmVhZCgiZmF0b3I6IHBvcmNlbnQNCiAgICAgICAgICAgIENvcm9uYXbDrXJ1czogNDANCiAgICAgICAgICAgIENvcm9uYXbDrXJ1cyAoY29tIG3DoXNjYXJhKTogMA0KICAgICAgICAgICAgSW5mbHVlbnphOiAzNQ0KICAgICAgICAgICAgSW5mbHVlbnphIChjb20gbcOhc2NhcmEpOiAyMg0KICAgICAgICAgICAgUmlub3bDrXJ1czogNTYNCiAgICAgICAgICAgIFJpbm92w61ydXMgKGNvbSBtw6FzY2FyYSk6IDM4IiwNCiAgICAgICAgICAgIGZpbGwgPSBULCBzZXAgPSAnOicpDQoNCnRibC5yaXNrKGRmLCAiIiwgIlBvcmNlbnRhZ2VtIGRlIHBvc2l0aXZhw6fDo28iLCAiVHJhbnNtaXNzw6NvIGRlIHBhcnTDrWN1bGFzIDwgNSDOvG0iLCAwLjUsIDEwMSwgVCwgMCkNCmBgYA==