Часть ноль - импорт

Задача по импортированию файлов решается через вкладку Enviroment и клавишу import. Это позволяет добавить необходимые данные в пути поиска RStudio. Имя задаем по-короче, его надо будет постоянно использовать.

Начнем, основная команда получения синопсиса по загруженным данным. Начало начал, удобно понять как R видит ваши данные. Также можно использовать продвинутый вариант описательной статистики с группирующей переменной.

GuideDATA <- ChickWeight
summary(GuideDATA)
#Группирующая переменная идет через запятую
describeBy (GuideDATA$weight, GuideDATA$Diet)

Данные не всегда определяются правильным образом, по этому иногда ему надо подсказать. Каждый вектор можно назначить переменную фактором, числовой, текстовой, логической, комплексной, необработанной (байты).

#Столбец dose сделать фактором
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
#Столбец color сделать непрерывной переменной
GuideDATA$color <- as.numeric(GuideDATA$color)

Часть первая - линейная статистика

Проверка параметров

Первая задача, проверка распределения на нормальность. Используется: Шапиро-Уилка, гистограмма и Q-Q plot. Далее проверка равенства дисперсий

with(GuideDATA, {
  hist(weight,col="blue",xlab="Вес")
  qqnorm(weight)
  shapiro.test(weight)
})


    Shapiro-Wilk normality test

data:  weight
W = 0.90866, p-value < 2.2e-16

Shapiro-Wilk p-value меньше 0,05 - отвержение H0, распределение ненормальное, что видно на гистограммах, а Q-Q plot в случае нормального распределения показывает ровную линию от нуля.

Попарное сравнение

Простейший тест Т-тест Стьюдента для попарного сравнения средних или непараметрический Критерий Уилкоксона.

#Первой указывается зависимая переменная, вторым независимая переменная, далее ресурс
t.test(len~supp, data = ToothGrowth)

    Welch Two Sample t-test

data:  len by supp
t = 1.9153, df = 55.309, p-value = 0.06063
alternative hypothesis: true difference in means between group OJ and group VC is not equal to 0
95 percent confidence interval:
 -0.1710156  7.5710156
sample estimates:
mean in group OJ mean in group VC 
        20.66333         16.96333 
#Непраметрический аналог
wilcox.test(len~supp,data=ToothGrowth)
Предупреждение: не могу подсчитать точное p-значение при наличии повторяющихся наблюдений

    Wilcoxon rank sum test with continuity correction

data:  len by supp
W = 575.5, p-value = 0.06449
alternative hypothesis: true location shift is not equal to 0
#Классическая визуализация ящиками
boxplot(len~supp,data=ToothGrowth) 

Мы видим что t больше 0.05 занчит сохраняем H0 обе выборки из одной генеральной совокупности. df показывает степени свободы.
Тест применяется с автоматической поправкой Уэма, что позволяет его применять на группы с разной дисперсией, отключается добавлением аргумента ...,var.equal=TRUE

Множественное сравнение

Итак, множественный анализ дисперсий. Главный вопрос - в какую сторону дисперсия в между группами отличается от внутригрупповой дисперсии?
\[ F=\frac{\text{Дисперсия между группами}}{\text{Дисперсия внутри групп}} \]
Если F-критерий Фишера больше критического – Н0 о равенстве средних в группах отвергаем, внутри есть различия. Требования к выбокам:

  1. Надо стремиться к равенству размеров групп. Неравенство размеров сразу делает результаты анализа уязвимыми к отклонениям от требований нормальности и гомогенности.

  2. Равенство дисперсий

  3. Нормальное распределение в каждой группе
    Если никак, обходим через Краскел-Уолеса, требует только равенства дисперсий kruskal.test(len~dose,data=ToothGrowth)

# Проверка нормальности распределения в каждой группе, нормальность распределения остатков.
shapiro.test(resid(model))

    Shapiro-Wilk normality test

data:  resid(model)
W = 0.96457, p-value = 0.07884
# Проверка равенства дисперсий
leveneTest(len ~ dose, data=ToothGrowth, center="mean")
Levene's Test for Homogeneity of Variance (center = "mean")
      Df F value Pr(>F)
group  2  0.7328  0.485
      57               
# Графичеки
qqPlot(lm(len ~ dose, data = ToothGrowth)) 
[1] 23 32

Если все хорошо - в путь.

model <- aov(len~dose,data=ToothGrowth)
summary(model)
            Df Sum Sq Mean Sq F value   Pr(>F)    
dose         2   2426    1213   67.42 9.53e-16 ***
Residuals   57   1026      18                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# Просмотр уровней влияния
TukeyHSD(model)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = len ~ dose, data = ToothGrowth)

$dose
      diff       lwr       upr    p adj
2-1  9.130  5.901805 12.358195 0.00e+00
3-1 15.495 12.266805 18.723195 0.00e+00
3-2  6.365  3.136805  9.593195 4.25e-05
# Простейшая визуализация
plotmeans(len ~ dose, xlab = "Vit. C level", ylab = "Teeth lenght", data = ToothGrowth)

Сначала смотрим на Pr(\>F) - меньше 0.05, значения различаются. F value - насколько сильно различаются (в n раз). В TukeyHSD смотрим на графу diff.

Корреляции и регрессии

Корреляции

Начнем с общих параетров. Коффециент Пирсона, просто и сердито. Оценивает силу линейной связи.

attach(trees)
  # Полный вывод
  cor.test(Height, Volume)

    Pearson's product-moment correlation

data:  Height and Volume
t = 4.0205, df = 29, p-value = 0.0003784
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.3095235 0.7859756
sample estimates:
      cor 
0.5982497 
  # Линейный график корреляции, диаграмма рассеивания
  scatterplot(Height, Volume)

detach()

Вывод прос – p-value значимсоть корреляции, cor коэффициент.

Регрессии

Общая формула для построения регрисионной модели:
\[ Y_i=\alpha + \beta X_i + \varepsilon_i \\ \text{Свободный член } + \text{ Регресионный коф. } +\text{ Остатки, ошибки} \] Число параметров сравнения не стоит раздувать. Каждый параметр не только требудет +10 вариантов к выборке, но и увеличивает число моделей к построению в квадрате (все варианты нуждно сравнить со всеми).
Идея проста, сравниваем две изменчивости - с включением остаточной изменчивости или без. Грубо говоря сраниваем сравниваем идеальную модель с реальной. Изменчивости сравниваются:

  1. Сравниваем F-критерием, обсуждаемым выше.
    p<0.05 отвергаем H0 влияние предиктора на переменную значимо

  2. Т-статистика попарного сравнения, значимость различий бетта коэффициент от нуля
    бетта отличен от 0 p<0.05 отвергаем H0 значимое влияние фактора

  3. Расчет доверительных интервалов коэффициентов

    • Оба 95% CI интервала положительны, не включают ноль – эффект сильный
    • Оба 90% CI интервала положительны, не включают ноль – эффект слабый но есть
    • В противном случае – соси

Теперь в коде, не забываем что распределение должно быть нормальным, а дисперсии гомогенными.

model <- lm(len~dose,data=ToothGrowth)
# Проверка нормальности распределения в каждой группе, нормальность распределения остатков.
shapiro.test(resid(model))

    Shapiro-Wilk normality test

data:  resid(model)
W = 0.96457, p-value = 0.07884
summary(model)

Call:
lm(formula = len ~ dose, data = ToothGrowth)

Residuals:
   Min     1Q Median     3Q    Max 
-8.061 -3.274 -1.061  3.063 10.434 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   3.3183     1.4542   2.282   0.0262 *  
dose          7.7475     0.6731  11.509   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.257 on 58 degrees of freedom
Multiple R-squared:  0.6955,    Adjusted R-squared:  0.6902 
F-statistic: 132.5 on 1 and 58 DF,  p-value: < 2.2e-16
# Получить доверительные интервалы
confint(model)
                2.5 %   97.5 %
(Intercept) 0.4075019 6.229165
dose        6.4000469 9.094953

F-statistic: 67.42 on 2 and 57 DF, p-value: 9.533e-16 p < 0.05 модель адекватно оценивает данные, если фактор один, то это также означает, что предиктор значительно влияет на выборку.
Multiple R-squared: 0.7029, Adjusted R-squared: 0.6924 - второй коэффициент скоректирован, это коффициент детерминации. Показывает какая доля дисперсии зависимой переменной определяется нашим предиктором. Типа 69,2% всей выбьорки описывается нашей моделью.
(Intercept) – свободный член (длинна зуба при 0 дозе).
Estimate – бетта коэффициент. Std. Error – стандартная ошибка.
Pr(>|t|) – с помощью Стюдента сравниваем бетта коэффциент с нулем.

Изначально доверительные интервалы мы строим для 95%. Если надо построить интервалы для 90% ...,level=0.9
Также хорошо было бы построить диаграмму рассеивания, но ни на уроке, ни у меня сейчас по этой моделе ничего вразумительного получить не удалось. Общая идея такой диаграммы - рассиевание должно быть равным, без каких-либо выплесков.

Теперь попробуем участь две независимые переменные.

model <- lm(Volume~Girth+Height, data=trees)
summary(model)

Call:
lm(formula = Volume ~ Girth + Height, data = trees)

Residuals:
    Min      1Q  Median      3Q     Max 
-6.4065 -2.6493 -0.2876  2.2003  8.4847 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -57.9877     8.6382  -6.713 2.75e-07 ***
Girth         4.7082     0.2643  17.816  < 2e-16 ***
Height        0.3393     0.1302   2.607   0.0145 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.882 on 28 degrees of freedom
Multiple R-squared:  0.948, Adjusted R-squared:  0.9442 
F-statistic:   255 on 2 and 28 DF,  p-value: < 2.2e-16
confint(model)
                   2.5 %      97.5 %
(Intercept) -75.68226247 -40.2930554
Girth         4.16683899   5.2494820
Height        0.07264863   0.6058538

Вывод уже понятный. Важно помнить, что полученная модель не может быть “распилена” по коэффициентам. То что мы получили работает только в полном сборе. По этому, если фактора у нас два, то нужно строить 4 моедли: оба фактора вместе влияют, кажждый по отдельности, и ни один фактор не влияет. После того, как мы получили все 4 модели в классическом виде выбирается по F-статистике и по дисперсиям. Но одной золотой модели врят-ли найти.

Есть и ещё одна проблема - автокорреляция. Когда два фактора влияние которых мы сравниваем, сильно кореллируют друг с другом. В этом случае проведем тест корреляции.

cor.test(trees$Girth, trees$Height)

    Pearson's product-moment correlation

data:  trees$Girth and trees$Height
t = 3.2722, df = 29, p-value = 0.002758
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.2021327 0.7378538
sample estimates:
      cor 
0.5192801 

p-value < 0.05 корреляция есть, cor = 0.52 да и при том огромная. Следовательно линейную модель по этим двум факторам строить нельяз.
Но можно немного схитрить. Вычесть влияние одного фактора их другого.

model <- lm(Girth~Height, data=trees)
# Часть переменной обхват объясняется высотой дерева, а вот остаточная изменчивость не объясняется высостой дерева. Эти остатки мы и возьмем
model <- lm(Volume~Girth+resid(model), data=trees)
summary(model)

Call:
lm(formula = Volume ~ Girth + resid(model), data = trees)

Residuals:
    Min      1Q  Median      3Q     Max 
-6.4065 -2.6493 -0.2876  2.2003  8.4847 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -49.7787     5.8039  -8.577 2.54e-09 ***
Girth          6.0347     0.4349  13.876 4.50e-14 ***
resid(model)  -1.3265     0.5089  -2.607   0.0145 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.882 on 28 degrees of freedom
Multiple R-squared:  0.948, Adjusted R-squared:  0.9442 
F-statistic:   255 on 2 and 28 DF,  p-value: < 2.2e-16

Но вот ещё одна проблема, зависимая переменная у нас с ненормальным распределением, тогда линенйную регрессию применять нельяз. Что же, тогда применяем логарифмирование log(). Если у нас проблемы с нормальность - логарифмируем зависимую переменную, если проблемы с дисперсиями - логарифмируем независимую переменную. Применение к дискретным данным логарифмирование - получаем линейную модель.

Но если независимая переменная в модели фактор, как анализируется такая переменная? В общем-то из таблицы с данными берется первый фактор и сравнивается с отальными.

ToothGrowth$dose <- as.factor(ToothGrowth$dose)
model <- lm(len~supp+dose, data = ToothGrowth)
summary(model)

Call:
lm(formula = len ~ supp + dose, data = ToothGrowth)

Residuals:
   Min     1Q Median     3Q    Max 
-7.085 -2.751 -0.800  2.446  9.650 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  12.4550     0.9883  12.603  < 2e-16 ***
suppVC       -3.7000     0.9883  -3.744 0.000429 ***
dose2         9.1300     1.2104   7.543 4.38e-10 ***
dose3        15.4950     1.2104  12.802  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.828 on 56 degrees of freedom
Multiple R-squared:  0.7623,    Adjusted R-squared:  0.7496 
F-statistic: 59.88 on 3 and 56 DF,  p-value: < 2.2e-16

Каждый фактор сравнивается с первым из таблицы и коэффициент показывает насколько все последующие факторы отличаются по влиянию от первого. При этом если вместо + использовать знак * то проявляется эффект взаимодействия. То есть второй вариант для варианта где доза и тип препарата влияют на длинну зуба зависимо. А первый вариант, когда доза влияет независимо от препарата, не важно витамин это или апельсиновый сок.

LS0tCnRpdGxlOiAi0JrQvtC90YHQv9C10LrRgiDQt9Cw0L3Rj9GC0LjQuSDQv9C+INGP0LfRi9C60YMgUiIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCi0tLQoKYGBge3IgaW5jbHVkZSA9IEZBTFNFfQoj0J/QvtC00LrQu9GO0YfQtdC90LjQtSDQstGB0LXRhSDQv9Cw0LrQtdGC0L7QsiDRgNCw0LfQvtC8LgpsYXBwbHkoYygicm1hcmtkb3duIiwgImNhciIsICJncGxvdHMiLCAicHN5Y2giLCAiZ2dwbG90MiIsICJkYXRhc2V0cyIpLCByZXF1aXJlLCBjaGFyYWN0ZXIub25seSA9IFRSVUUpCgpgYGAKCiMjINCn0LDRgdGC0Ywg0L3QvtC70YwgLSDQuNC80L/QvtGA0YIKCtCX0LDQtNCw0YfQsCDQv9C+INC40LzQv9C+0YDRgtC40YDQvtCy0LDQvdC40Y4g0YTQsNC50LvQvtCyINGA0LXRiNCw0LXRgtGB0Y8g0YfQtdGA0LXQtyDQstC60LvQsNC00LrRgyBFbnZpcm9tZW50INC4INC60LvQsNCy0LjRiNGDIGltcG9ydC4g0K3RgtC+INC/0L7Qt9Cy0L7Qu9GP0LXRgiDQtNC+0LHQsNCy0LjRgtGMINC90LXQvtCx0YXQvtC00LjQvNGL0LUg0LTQsNC90L3Ri9C1INCyINC/0YPRgtC4INC/0L7QuNGB0LrQsCBSU3R1ZGlvLiDQmNC80Y8g0LfQsNC00LDQtdC8INC/0L4t0LrQvtGA0L7Rh9C1LCDQtdCz0L4g0L3QsNC00L4g0LHRg9C00LXRgiDQv9C+0YHRgtC+0Y/QvdC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMLlwKCtCd0LDRh9C90LXQvCwg0L7RgdC90L7QstC90LDRjyDQutC+0LzQsNC90LTQsCDQv9C+0LvRg9GH0LXQvdC40Y8g0YHQuNC90L7Qv9GB0LjRgdCwINC/0L4g0LfQsNCz0YDRg9C20LXQvdC90YvQvCDQtNCw0L3QvdGL0LwuINCd0LDRh9Cw0LvQviDQvdCw0YfQsNC7LCDRg9C00L7QsdC90L4g0L/QvtC90Y/RgtGMINC60LDQuiBSINCy0LjQtNC40YIg0LLQsNGI0Lgg0LTQsNC90L3Ri9C1LiDQotCw0LrQttC1INC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC/0YDQvtC00LLQuNC90YPRgtGL0Lkg0LLQsNGA0LjQsNC90YIg0L7Qv9C40YHQsNGC0LXQu9GM0L3QvtC5INGB0YLQsNGC0LjRgdGC0LjQutC4INGBINCz0YDRg9C/0L/QuNGA0YPRjtGJ0LXQuSDQv9C10YDQtdC80LXQvdC90L7QuS4KCmBgYHtyfQpHdWlkZURBVEEgPC0gQ2hpY2tXZWlnaHQKc3VtbWFyeShHdWlkZURBVEEpCiPQk9GA0YPQv9C/0LjRgNGD0Y7RidCw0Y8g0L/QtdGA0LXQvNC10L3QvdCw0Y8g0LjQtNC10YIg0YfQtdGA0LXQtyDQt9Cw0L/Rj9GC0YPRjgpkZXNjcmliZUJ5IChHdWlkZURBVEEkd2VpZ2h0LCBHdWlkZURBVEEkRGlldCkKYGBgCgrQlNCw0L3QvdGL0LUg0L3QtSDQstGB0LXQs9C00LAg0L7Qv9GA0LXQtNC10LvRj9GO0YLRgdGPINC/0YDQsNCy0LjQu9GM0L3Ri9C8INC+0LHRgNCw0LfQvtC8LCDQv9C+INGN0YLQvtC80YMg0LjQvdC+0LPQtNCwINC10LzRgyDQvdCw0LTQviDQv9C+0LTRgdC60LDQt9Cw0YLRjC4g0JrQsNC20LTRi9C5INCy0LXQutGC0L7RgCDQvNC+0LbQvdC+INC90LDQt9C90LDRh9C40YLRjCDQv9C10YDQtdC80LXQvdC90YPRjiDRhNCw0LrRgtC+0YDQvtC8LCDRh9C40YHQu9C+0LLQvtC5LCDRgtC10LrRgdGC0L7QstC+0LksINC70L7Qs9C40YfQtdGB0LrQvtC5LCDQutC+0LzQv9C70LXQutGB0L3QvtC5LCDQvdC10L7QsdGA0LDQsdC+0YLQsNC90L3QvtC5ICjQsdCw0LnRgtGLKS4KCmBgYHtyfQoj0KHRgtC+0LvQsdC10YYgZG9zZSDRgdC00LXQu9Cw0YLRjCDRhNCw0LrRgtC+0YDQvtC8ClRvb3RoR3Jvd3RoJGRvc2UgPC0gYXMuZmFjdG9yKFRvb3RoR3Jvd3RoJGRvc2UpCiPQodGC0L7Qu9Cx0LXRhiBjb2xvciDRgdC00LXQu9Cw0YLRjCDQvdC10L/RgNC10YDRi9Cy0L3QvtC5INC/0LXRgNC10LzQtdC90L3QvtC5Ckd1aWRlREFUQSRjb2xvciA8LSBhcy5udW1lcmljKEd1aWRlREFUQSRjb2xvcikKYGBgCgojIyDQp9Cw0YHRgtGMINC/0LXRgNCy0LDRjyAtINC70LjQvdC10LnQvdCw0Y8g0YHRgtCw0YLQuNGB0YLQuNC60LAKCiMjIyDQn9GA0L7QstC10YDQutCwINC/0LDRgNCw0LzQtdGC0YDQvtCyCgrQn9C10YDQstCw0Y8g0LfQsNC00LDRh9CwLCDQv9GA0L7QstC10YDQutCwINGA0LDRgdC/0YDQtdC00LXQu9C10L3QuNGPINC90LAg0L3QvtGA0LzQsNC70YzQvdC+0YHRgtGMLiDQmNGB0L/QvtC70YzQt9GD0LXRgtGB0Y86INCo0LDQv9C40YDQvi3Qo9C40LvQutCwLCDQs9C40YHRgtC+0LPRgNCw0LzQvNCwINC4IFEtUSBwbG90LiDQlNCw0LvQtdC1INC/0YDQvtCy0LXRgNC60LAg0YDQsNCy0LXQvdGB0YLQstCwINC00LjRgdC/0LXRgNGB0LjQuQoKYGBge3J9CndpdGgoR3VpZGVEQVRBLCB7CiAgaGlzdCh3ZWlnaHQsY29sPSJibHVlIix4bGFiPSLQktC10YEiKQogIHFxbm9ybSh3ZWlnaHQpCiAgc2hhcGlyby50ZXN0KHdlaWdodCkKfSkKYGBgCmBTaGFwaXJvLVdpbGsgcC12YWx1ZWAg0LzQtdC90YzRiNC1IDAsMDUgLSDQvtGC0LLQtdGA0LbQtdC90LjQtSBIfjB+LCDRgNCw0YHQv9GA0LXQtNC10LvQtdC90LjQtSDQvdC10L3QvtGA0LzQsNC70YzQvdC+0LUsINGH0YLQviDQstC40LTQvdC+INC90LAg0LPQuNGB0YLQvtCz0YDQsNC80LzQsNGFLCDQsCBgUS1RIHBsb3RgINCyINGB0LvRg9GH0LDQtSDQvdC+0YDQvNCw0LvRjNC90L7Qs9C+INGA0LDRgdC/0YDQtdC00LXQu9C10L3QuNGPINC/0L7QutCw0LfRi9Cy0LDQtdGCINGA0L7QstC90YPRjiDQu9C40L3QuNGOINC+0YIg0L3Rg9C70Y8uXAoKIyMjINCf0L7Qv9Cw0YDQvdC+0LUg0YHRgNCw0LLQvdC10L3QuNC1CgrQn9GA0L7RgdGC0LXQudGI0LjQuSDRgtC10YHRgiDQoi3RgtC10YHRgiDQodGC0YzRjtC00LXQvdGC0LAg0LTQu9GPINC/0L7Qv9Cw0YDQvdC+0LPQviDRgdGA0LDQstC90LXQvdC40Y8g0YHRgNC10LTQvdC40YUg0LjQu9C4INC90LXQv9Cw0YDQsNC80LXRgtGA0LjRh9C10YHQutC40Lkg0JrRgNC40YLQtdGA0LjQuSDQo9C40LvQutC+0LrRgdC+0L3QsC4KCmBgYHtyfQoj0J/QtdGA0LLQvtC5INGD0LrQsNC30YvQstCw0LXRgtGB0Y8g0LfQsNCy0LjRgdC40LzQsNGPINC/0LXRgNC10LzQtdC90L3QsNGPLCDQstGC0L7RgNGL0Lwg0L3QtdC30LDQstC40YHQuNC80LDRjyDQv9C10YDQtdC80LXQvdC90LDRjywg0LTQsNC70LXQtSDRgNC10YHRg9GA0YEKdC50ZXN0KGxlbn5zdXBwLCBkYXRhID0gVG9vdGhHcm93dGgpCiPQndC10L/RgNCw0LzQtdGC0YDQuNGH0LXRgdC60LjQuSDQsNC90LDQu9C+0LMKd2lsY294LnRlc3QobGVufnN1cHAsZGF0YT1Ub290aEdyb3d0aCkKI9Ca0LvQsNGB0YHQuNGH0LXRgdC60LDRjyDQstC40LfRg9Cw0LvQuNC30LDRhtC40Y8g0Y/RidC40LrQsNC80LgKYm94cGxvdChsZW5+c3VwcCxkYXRhPVRvb3RoR3Jvd3RoKSAKYGBgCgrQnNGLINCy0LjQtNC40Lwg0YfRgtC+IHQg0LHQvtC70YzRiNC1IDAuMDUg0LfQsNC90YfQuNGCINGB0L7RhdGA0LDQvdGP0LXQvCBIfjB+INC+0LHQtSDQstGL0LHQvtGA0LrQuCDQuNC3INC+0LTQvdC+0Lkg0LPQtdC90LXRgNCw0LvRjNC90L7QuSDRgdC+0LLQvtC60YPQv9C90L7RgdGC0LguIGRmINC/0L7QutCw0LfRi9Cy0LDQtdGCINGB0YLQtdC/0LXQvdC4INGB0LLQvtCx0L7QtNGLLlwK0KLQtdGB0YIg0L/RgNC40LzQtdC90Y/QtdGC0YHRjyDRgSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtC5INC/0L7Qv9GA0LDQstC60L7QuSDQo9GN0LzQsCwg0YfRgtC+INC/0L7Qt9Cy0L7Qu9GP0LXRgiDQtdCz0L4g0L/RgNC40LzQtdC90Y/RgtGMINC90LAg0LPRgNGD0L/Qv9GLINGBINGA0LDQt9C90L7QuSDQtNC40YHQv9C10YDRgdC40LXQuSwg0L7RgtC60LvRjtGH0LDQtdGC0YHRjyDQtNC+0LHQsNCy0LvQtdC90LjQtdC8INCw0YDQs9GD0LzQtdC90YLQsCBgLi4uLHZhci5lcXVhbD1UUlVFYFwKCiMjIyDQnNC90L7QttC10YHRgtCy0LXQvdC90L7QtSDRgdGA0LDQstC90LXQvdC40LUKCtCY0YLQsNC6LCDQvNC90L7QttC10YHRgtCy0LXQvdC90YvQuSDQsNC90LDQu9C40Lcg0LTQuNGB0L/QtdGA0YHQuNC5LiDQk9C70LDQstC90YvQuSDQstC+0L/RgNC+0YEgLSDQsiDQutCw0LrRg9GOINGB0YLQvtGA0L7QvdGDINC00LjRgdC/0LXRgNGB0LjRjyDQsiDQvNC10LbQtNGDINCz0YDRg9C/0L/QsNC80Lgg0L7RgtC70LjRh9Cw0LXRgtGB0Y8g0L7RgiDQstC90YPRgtGA0LjQs9GA0YPQv9C/0L7QstC+0Lkg0LTQuNGB0L/QtdGA0YHQuNC4P1wKJCQKRj1cZnJhY3tcdGV4dHvQlNC40YHQv9C10YDRgdC40Y8g0LzQtdC20LTRgyDQs9GA0YPQv9C/0LDQvNC4fX17XHRleHR70JTQuNGB0L/QtdGA0YHQuNGPINCy0L3Rg9GC0YDQuCDQs9GA0YPQv9C/fX0KJCQgIArQldGB0LvQuCBGLdC60YDQuNGC0LXRgNC40Lkg0KTQuNGI0LXRgNCwINCx0L7Qu9GM0YjQtSDQutGA0LjRgtC40YfQtdGB0LrQvtCz0L4g4oCTINCdfjB+INC+INGA0LDQstC10L3RgdGC0LLQtSDRgdGA0LXQtNC90LjRhSDQsiDQs9GA0YPQv9C/0LDRhSDQvtGC0LLQtdGA0LPQsNC10LwsINCy0L3Rg9GC0YDQuCDQtdGB0YLRjCDRgNCw0LfQu9C40YfQuNGPLiDQotGA0LXQsdC+0LLQsNC90LjRjyDQuiDQstGL0LHQvtC60LDQvDoKCjEuICDQndCw0LTQviDRgdGC0YDQtdC80LjRgtGM0YHRjyDQuiDRgNCw0LLQtdC90YHRgtCy0YMg0YDQsNC30LzQtdGA0L7QsiDQs9GA0YPQv9C/LiDQndC10YDQsNCy0LXQvdGB0YLQstC+INGA0LDQt9C80LXRgNC+0LIg0YHRgNCw0LfRgyDQtNC10LvQsNC10YIg0YDQtdC30YPQu9GM0YLQsNGC0Ysg0LDQvdCw0LvQuNC30LAg0YPRj9C30LLQuNC80YvQvNC4INC6INC+0YLQutC70L7QvdC10L3QuNGP0Lwg0L7RgiDRgtGA0LXQsdC+0LLQsNC90LjQuSDQvdC+0YDQvNCw0LvRjNC90L7RgdGC0Lgg0Lgg0LPQvtC80L7Qs9C10L3QvdC+0YHRgtC4LgoKMi4gINCg0LDQstC10L3RgdGC0LLQviDQtNC40YHQv9C10YDRgdC40LkKCjMuICDQndC+0YDQvNCw0LvRjNC90L7QtSDRgNCw0YHQv9GA0LXQtNC10LvQtdC90LjQtSDQsiDQutCw0LbQtNC+0Lkg0LPRgNGD0L/Qv9C1XAogICAgKtCV0YHQu9C4INC90LjQutCw0LosINC+0LHRhdC+0LTQuNC8INGH0LXRgNC10Lcg0JrRgNCw0YHQutC10Lst0KPQvtC70LXRgdCwLCDRgtGA0LXQsdGD0LXRgiDRgtC+0LvRjNC60L4g0YDQsNCy0LXQvdGB0YLQstCwINC00LjRgdC/0LXRgNGB0LjQuSBga3J1c2thbC50ZXN0KGxlbn5kb3NlLGRhdGE9VG9vdGhHcm93dGgpYCoKCmBgYHtyfQojINCf0YDQvtCy0LXRgNC60LAg0L3QvtGA0LzQsNC70YzQvdC+0YHRgtC4INGA0LDRgdC/0YDQtdC00LXQu9C10L3QuNGPINCyINC60LDQttC00L7QuSDQs9GA0YPQv9C/0LUsINC90L7RgNC80LDQu9GM0L3QvtGB0YLRjCDRgNCw0YHQv9GA0LXQtNC10LvQtdC90LjRjyDQvtGB0YLQsNGC0LrQvtCyLgpzaGFwaXJvLnRlc3QocmVzaWQobW9kZWwpKQojINCf0YDQvtCy0LXRgNC60LAg0YDQsNCy0LXQvdGB0YLQstCwINC00LjRgdC/0LXRgNGB0LjQuQpsZXZlbmVUZXN0KGxlbiB+IGRvc2UsIGRhdGE9VG9vdGhHcm93dGgsIGNlbnRlcj0ibWVhbiIpCiMg0JPRgNCw0YTQuNGH0LXQutC4CnFxUGxvdChsbShsZW4gfiBkb3NlLCBkYXRhID0gVG9vdGhHcm93dGgpKSAKCmBgYAoK0JXRgdC70Lgg0LLRgdC1INGF0L7RgNC+0YjQviAtINCyINC/0YPRgtGMLgoKYGBge3J9Cm1vZGVsIDwtIGFvdihsZW5+ZG9zZSxkYXRhPVRvb3RoR3Jvd3RoKQpzdW1tYXJ5KG1vZGVsKQojINCf0YDQvtGB0LzQvtGC0YAg0YPRgNC+0LLQvdC10Lkg0LLQu9C40Y/QvdC40Y8KVHVrZXlIU0QobW9kZWwpCiMg0J/RgNC+0YHRgtC10LnRiNCw0Y8g0LLQuNC30YPQsNC70LjQt9Cw0YbQuNGPCnBsb3RtZWFucyhsZW4gfiBkb3NlLCB4bGFiID0gIlZpdC4gQyBsZXZlbCIsIHlsYWIgPSAiVGVldGggbGVuZ2h0IiwgZGF0YSA9IFRvb3RoR3Jvd3RoKQpgYGAKCtCh0L3QsNGH0LDQu9CwINGB0LzQvtGC0YDQuNC8INC90LAgYFByKFw+RilgIC0g0LzQtdC90YzRiNC1IDAuMDUsINC30L3QsNGH0LXQvdC40Y8g0YDQsNC30LvQuNGH0LDRjtGC0YHRjy4gYEYgdmFsdWVgIC0g0L3QsNGB0LrQvtC70YzQutC+INGB0LjQu9GM0L3QviDRgNCw0LfQu9C40YfQsNGO0YLRgdGPICjQsiBuINGA0LDQtykuINCSIGBUdWtleUhTRGAg0YHQvNC+0YLRgNC40Lwg0L3QsCDQs9GA0LDRhNGDIGBkaWZmYC5cCgojIyMg0JrQvtGA0YDQtdC70Y/RhtC40Lgg0Lgg0YDQtdCz0YDQtdGB0YHQuNC4CgojIyMjINCa0L7RgNGA0LXQu9GP0YbQuNC4CgrQndCw0YfQvdC10Lwg0YEg0L7QsdGJ0LjRhSDQv9Cw0YDQsNC10YLRgNC+0LIuINCa0L7RhNGE0LXRhtC40LXQvdGCINCf0LjRgNGB0L7QvdCwLCDQv9GA0L7RgdGC0L4g0Lgg0YHQtdGA0LTQuNGC0L4uINCe0YbQtdC90LjQstCw0LXRgiDRgdC40LvRgyDQu9C40L3QtdC50L3QvtC5INGB0LLRj9C30LguCgpgYGB7cn0KYXR0YWNoKHRyZWVzKQogICMg0J/QvtC70L3Ri9C5INCy0YvQstC+0LQsINC00LvRjyDQstGL0LLQvtC00LAg0LrQvtGEINC+0YLQtNC10LvRjNC90L4sINC90YPQttC00L3QviDQv9C40YHQsNGC0Ywg0YLQvtC70YzQutC+IGNvcgogIGNvci50ZXN0KEhlaWdodCwgVm9sdW1lKQogICMg0JvQuNC90LXQudC90YvQuSDQs9GA0LDRhNC40Log0LrQvtGA0YDQtdC70Y/RhtC40LgsINC00LjQsNCz0YDQsNC80LzQsCDRgNCw0YHRgdC10LjQstCw0L3QuNGPCiAgc2NhdHRlcnBsb3QoSGVpZ2h0LCBWb2x1bWUpCmRldGFjaCgpCmBgYAoK0JLRi9Cy0L7QtCDQv9GA0L7RgSAtLSBgcC12YWx1ZWAg0LfQvdCw0YfQuNC80YHQvtGC0Ywg0LrQvtGA0YDQtdC70Y/RhtC40LgsIGBjb3JgINC60L7RjdGE0YTQuNGG0LjQtdC90YIuXAoKIyMjIyDQoNC10LPRgNC10YHRgdC40LgK0J7QsdGJ0LDRjyDRhNC+0YDQvNGD0LvQsCDQtNC70Y8g0L/QvtGB0YLRgNC+0LXQvdC40Y8g0YDQtdCz0YDQuNGB0LjQvtC90L3QvtC5INC80L7QtNC10LvQuDpcCiQkCiBZX2k9XGFscGhhICsgXGJldGEgWF9pICsgXHZhcmVwc2lsb25faSAgXFwKIFx0ZXh0e9Ch0LLQvtCx0L7QtNC90YvQuSDRh9C70LXQvSB9ICsgXHRleHR7INCg0LXQs9GA0LXRgdC40L7QvdC90YvQuSDQutC+0YQuIH0gK1x0ZXh0eyDQntGB0YLQsNGC0LrQuCwg0L7RiNC40LHQutC4fQokJArQp9C40YHQu9C+INC/0LDRgNCw0LzQtdGC0YDQvtCyINGB0YDQsNCy0L3QtdC90LjRjyDQvdC1INGB0YLQvtC40YIg0YDQsNC30LTRg9Cy0LDRgtGMLiDQmtCw0LbQtNGL0Lkg0L/QsNGA0LDQvNC10YLRgCDQvdC1INGC0L7Qu9GM0LrQviDRgtGA0LXQsdGD0LTQtdGCICsxMCDQstCw0YDQuNCw0L3RgtC+0LIg0Log0LLRi9Cx0L7RgNC60LUsINC90L4g0Lgg0YPQstC10LvQuNGH0LjQstCw0LXRgiDRh9C40YHQu9C+INC80L7QtNC10LvQtdC5INC6INC/0L7RgdGC0YDQvtC10L3QuNGOINCyINC60LLQsNC00YDQsNGC0LUgKNCy0YHQtSDQstCw0YDQuNCw0L3RgtGLINC90YPQttC00L3QviDRgdGA0LDQstC90LjRgtGMINGB0L4g0LLRgdC10LzQuCkuXArQmNC00LXRjyDQv9GA0L7RgdGC0LAsINGB0YDQsNCy0L3QuNCy0LDQtdC8INC00LLQtSDQuNC30LzQtdC90YfQuNCy0L7RgdGC0LggLSDRgSDQstC60LvRjtGH0LXQvdC40LXQvCDQvtGB0YLQsNGC0L7Rh9C90L7QuSDQuNC30LzQtdC90YfQuNCy0L7RgdGC0Lgg0LjQu9C4INCx0LXQty4g0JPRgNGD0LHQviDQs9C+0LLQvtGA0Y8g0YHRgNCw0L3QuNCy0LDQtdC8INGB0YDQsNCy0L3QuNCy0LDQtdC8INC40LTQtdCw0LvRjNC90YPRjiDQvNC+0LTQtdC70Ywg0YEg0YDQtdCw0LvRjNC90L7QuS4g0JjQt9C80LXQvdGH0LjQstC+0YHRgtC4INGB0YDQsNCy0L3QuNCy0LDRjtGC0YHRjzpcCgoxLiAg0KHRgNCw0LLQvdC40LLQsNC10LwgRi3QutGA0LjRgtC10YDQuNC10LwsINC+0LHRgdGD0LbQtNCw0LXQvNGL0Lwg0LLRi9GI0LUuXAogICAgKnA8MC4wNSDQvtGC0LLQtdGA0LPQsNC10LwgSH4wfiDQstC70LjRj9C90LjQtSDQv9GA0LXQtNC40LrRgtC+0YDQsCDQvdCwINC/0LXRgNC10LzQtdC90L3Rg9GOINC30L3QsNGH0LjQvNC+KgoKMi4gINCiLdGB0YLQsNGC0LjRgdGC0LjQutCwINC/0L7Qv9Cw0YDQvdC+0LPQviDRgdGA0LDQstC90LXQvdC40Y8sINC30L3QsNGH0LjQvNC+0YHRgtGMINGA0LDQt9C70LjRh9C40Lkg0LHQtdGC0YLQsCDQutC+0Y3RhNGE0LjRhtC40LXQvdGCINC+0YIg0L3Rg9C70Y9cCiAgICAq0LHQtdGC0YLQsCDQvtGC0LvQuNGH0LXQvSDQvtGCIDAgcDwwLjA1INC+0YLQstC10YDQs9Cw0LXQvCBIfjB+INC30L3QsNGH0LjQvNC+0LUg0LLQu9C40Y/QvdC40LUg0YTQsNC60YLQvtGA0LAqCgozLiAg0KDQsNGB0YfQtdGCINC00L7QstC10YDQuNGC0LXQu9GM0L3Ri9GFINC40L3RgtC10YDQstCw0LvQvtCyINC60L7RjdGE0YTQuNGG0LjQtdC90YLQvtCyXAogICAgLSDQntCx0LAgOTUlIENJINC40L3RgtC10YDQstCw0LvQsCDQv9C+0LvQvtC20LjRgtC10LvRjNC90YssINC90LUg0LLQutC70Y7Rh9Cw0Y7RgiDQvdC+0LvRjCAtLSDRjdGE0YTQtdC60YIg0YHQuNC70YzQvdGL0LkKICAgIC0g0J7QsdCwIDkwJSBDSSDQuNC90YLQtdGA0LLQsNC70LAg0L/QvtC70L7QttC40YLQtdC70YzQvdGLLCDQvdC1INCy0LrQu9GO0YfQsNGO0YIg0L3QvtC70YwgLS0g0Y3RhNGE0LXQutGCINGB0LvQsNCx0YvQuSDQvdC+INC10YHRgtGMCiAgICAtINCSINC/0YDQvtGC0LjQstC90L7QvCDRgdC70YPRh9Cw0LUgLS0g0YHQvtGB0LgKCtCi0LXQv9C10YDRjCDQsiDQutC+0LTQtSwg0L3QtSDQt9Cw0LHRi9Cy0LDQtdC8INGH0YLQviDRgNCw0YHQv9GA0LXQtNC10LvQtdC90LjQtSDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L3QvtGA0LzQsNC70YzQvdGL0LwsINCwINC00LjRgdC/0LXRgNGB0LjQuCDQs9C+0LzQvtCz0LXQvdC90YvQvNC4LgoKYGBge3J9Cm1vZGVsIDwtIGxtKGxlbn5kb3NlLGRhdGE9VG9vdGhHcm93dGgpCiMg0J/RgNC+0LLQtdGA0LrQsCDQvdC+0YDQvNCw0LvRjNC90L7RgdGC0Lgg0YDQsNGB0L/RgNC10LTQtdC70LXQvdC40Y8g0LIg0LrQsNC20LTQvtC5INCz0YDRg9C/0L/QtSwg0L3QvtGA0LzQsNC70YzQvdC+0YHRgtGMINGA0LDRgdC/0YDQtdC00LXQu9C10L3QuNGPINC+0YHRgtCw0YLQutC+0LIuCnNoYXBpcm8udGVzdChyZXNpZChtb2RlbCkpCnN1bW1hcnkobW9kZWwpCiMg0J/QvtC70YPRh9C40YLRjCDQtNC+0LLQtdGA0LjRgtC10LvRjNC90YvQtSDQuNC90YLQtdGA0LLQsNC70YsKY29uZmludChtb2RlbCkKYGBgCmBGLXN0YXRpc3RpYzogNjcuNDIgb24gMiBhbmQgNTcgREYsICBwLXZhbHVlOiA5LjUzM2UtMTZgIHAgPCAwLjA1INC80L7QtNC10LvRjCDQsNC00LXQutCy0LDRgtC90L4g0L7RhtC10L3QuNCy0LDQtdGCINC00LDQvdC90YvQtSwg0LXRgdC70Lgg0YTQsNC60YLQvtGAINC+0LTQuNC9LCDRgtC+INGN0YLQviDRgtCw0LrQttC1INC+0LfQvdCw0YfQsNC10YIsINGH0YLQviDQv9GA0LXQtNC40LrRgtC+0YAg0LfQvdCw0YfQuNGC0LXQu9GM0L3QviDQstC70LjRj9C10YIg0L3QsCDQstGL0LHQvtGA0LrRgy5cCmBNdWx0aXBsZSBSLXNxdWFyZWQ6ICAwLjcwMjksCUFkanVzdGVkIFItc3F1YXJlZDogIDAuNjkyNGAgLSDQstGC0L7RgNC+0Lkg0LrQvtGN0YTRhNC40YbQuNC10L3RgiDRgdC60L7RgNC10LrRgtC40YDQvtCy0LDQvSwg0Y3RgtC+INC60L7RhNGE0LjRhtC40LXQvdGCINC00LXRgtC10YDQvNC40L3QsNGG0LjQuC4g0J/QvtC60LDQt9GL0LLQsNC10YIg0LrQsNC60LDRjyDQtNC+0LvRjyDQtNC40YHQv9C10YDRgdC40Lgg0LfQsNCy0LjRgdC40LzQvtC5INC/0LXRgNC10LzQtdC90L3QvtC5INC+0L/RgNC10LTQtdC70Y/QtdGC0YHRjyDQvdCw0YjQuNC8INC/0YDQtdC00LjQutGC0L7RgNC+0LwuINCi0LjQv9CwIDY5LDIlINCy0YHQtdC5INCy0YvQsdGM0L7RgNC60Lgg0L7Qv9C40YHRi9Cy0LDQtdGC0YHRjyDQvdCw0YjQtdC5INC80L7QtNC10LvRjNGOLlwKYChJbnRlcmNlcHQpYCAtLSDRgdCy0L7QsdC+0LTQvdGL0Lkg0YfQu9C10L0gKNC00LvQuNC90L3QsCDQt9GD0LHQsCDQv9GA0LggMCDQtNC+0LfQtSkuIFwKYEVzdGltYXRlYCAtLSDQsdC10YLRgtCwINC60L7RjdGE0YTQuNGG0LjQtdC90YIuIGBTdGQuIEVycm9yYCAtLSDRgdGC0LDQvdC00LDRgNGC0L3QsNGPINC+0YjQuNCx0LrQsC5cCmBQcig+fHR8KWAgLS0g0YEg0L/QvtC80L7RidGM0Y4g0KHRgtGO0LTQtdC90YLQsCDRgdGA0LDQstC90LjQstCw0LXQvCDQsdC10YLRgtCwINC60L7RjdGE0YTRhtC40LXQvdGCINGBINC90YPQu9C10LwuXApcCtCY0LfQvdCw0YfQsNC70YzQvdC+INC00L7QstC10YDQuNGC0LXQu9GM0L3Ri9C1INC40L3RgtC10YDQstCw0LvRiyDQvNGLINGB0YLRgNC+0LjQvCDQtNC70Y8gOTUlLiDQldGB0LvQuCDQvdCw0LTQviDQv9C+0YHRgtGA0L7QuNGC0Ywg0LjQvdGC0LXRgNCy0LDQu9GLINC00LvRjyA5MCUgYC4uLixsZXZlbD0wLjlgXArQotCw0LrQttC1INGF0L7RgNC+0YjQviDQsdGL0LvQviDQsdGLINC/0L7RgdGC0YDQvtC40YLRjCDQtNC40LDQs9GA0LDQvNC80YMg0YDQsNGB0YHQtdC40LLQsNC90LjRjywg0L3QviDQvdC4INC90LAg0YPRgNC+0LrQtSwg0L3QuCDRgyDQvNC10L3RjyDRgdC10LnRh9Cw0YEg0L/QviDRjdGC0L7QuSDQvNC+0LTQtdC70LUg0L3QuNGH0LXQs9C+INCy0YDQsNC30YPQvNC40YLQtdC70YzQvdC+0LPQviDQv9C+0LvRg9GH0LjRgtGMINC90LUg0YPQtNCw0LvQvtGB0YwuINCe0LHRidCw0Y8g0LjQtNC10Y8g0YLQsNC60L7QuSDQtNC40LDQs9GA0LDQvNC80YsgLSDRgNCw0YHRgdC40LXQstCw0L3QuNC1INC00L7Qu9C20L3QviDQsdGL0YLRjCDRgNCw0LLQvdGL0LwsINCx0LXQtyDQutCw0LrQuNGFLdC70LjQsdC+INCy0YvQv9C70LXRgdC60L7Qsi5cClwK0KLQtdC/0LXRgNGMINC/0L7Qv9GA0L7QsdGD0LXQvCDRg9GH0LDRgdGC0Ywg0LTQstC1INC90LXQt9Cw0LLQuNGB0LjQvNGL0LUg0L/QtdGA0LXQvNC10L3QvdGL0LUuCgoKYGBge3J9Cm1vZGVsIDwtIGxtKFZvbHVtZX5HaXJ0aCtIZWlnaHQsIGRhdGE9dHJlZXMpCnN1bW1hcnkobW9kZWwpCmNvbmZpbnQobW9kZWwpCmBgYArQktGL0LLQvtC0INGD0LbQtSDQv9C+0L3Rj9GC0L3Ri9C5LiDQktCw0LbQvdC+INC/0L7QvNC90LjRgtGMLCDRh9GC0L4g0L/QvtC70YPRh9C10L3QvdCw0Y8g0LzQvtC00LXQu9GMINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCAi0YDQsNGB0L/QuNC70LXQvdCwIiDQv9C+INC60L7RjdGE0YTQuNGG0LjQtdC90YLQsNC8LiDQotC+INGH0YLQviDQvNGLINC/0L7Qu9GD0YfQuNC70Lgg0YDQsNCx0L7RgtCw0LXRgiDRgtC+0LvRjNC60L4g0LIg0L/QvtC70L3QvtC8INGB0LHQvtGA0LUuINCf0L4g0Y3RgtC+0LzRgywg0LXRgdC70Lgg0YTQsNC60YLQvtGA0LAg0YMg0L3QsNGBINC00LLQsCwg0YLQviDQvdGD0LbQvdC+INGB0YLRgNC+0LjRgtGMIDQg0LzQvtC10LTQu9C4OiDQvtCx0LAg0YTQsNC60YLQvtGA0LAg0LLQvNC10YHRgtC1INCy0LvQuNGP0Y7Rgiwg0LrQsNC20LbQtNGL0Lkg0L/QviDQvtGC0LTQtdC70YzQvdC+0YHRgtC4LCDQuCDQvdC4INC+0LTQuNC9INGE0LDQutGC0L7RgCDQvdC1INCy0LvQuNGP0LXRgi4g0J/QvtGB0LvQtSDRgtC+0LPQviwg0LrQsNC6INC80Ysg0L/QvtC70YPRh9C40LvQuCDQstGB0LUgNCDQvNC+0LTQtdC70Lgg0LIg0LrQu9Cw0YHRgdC40YfQtdGB0LrQvtC8INCy0LjQtNC1INCy0YvQsdC40YDQsNC10YLRgdGPINC/0L4gRi3RgdGC0LDRgtC40YHRgtC40LrQtSDQuCDQv9C+INC00LjRgdC/0LXRgNGB0LjRj9C8LiDQndC+INC+0LTQvdC+0Lkg0LfQvtC70L7RgtC+0Lkg0LzQvtC00LXQu9C4INCy0YDRj9GCLdC70Lgg0L3QsNC50YLQuC5cClwK0JXRgdGC0Ywg0Lgg0LXRidGRINC+0LTQvdCwINC/0YDQvtCx0LvQtdC80LAgLSDQsNCy0YLQvtC60L7RgNGA0LXQu9GP0YbQuNGPLiDQmtC+0LPQtNCwINC00LLQsCDRhNCw0LrRgtC+0YDQsCDQstC70LjRj9C90LjQtSDQutC+0YLQvtGA0YvRhSDQvNGLINGB0YDQsNCy0L3QuNCy0LDQtdC8LCDRgdC40LvRjNC90L4g0LrQvtGA0LXQu9C70LjRgNGD0Y7RgiDQtNGA0YPQsyDRgSDQtNGA0YPQs9C+0LwuINCSINGN0YLQvtC8INGB0LvRg9GH0LDQtSDQv9GA0L7QstC10LTQtdC8INGC0LXRgdGCINC60L7RgNGA0LXQu9GP0YbQuNC4LgpgYGB7cn0KY29yLnRlc3QodHJlZXMkR2lydGgsIHRyZWVzJEhlaWdodCkKYGBgCmBwLXZhbHVlYCA8IDAuMDUg0LrQvtGA0YDQtdC70Y/RhtC40Y8g0LXRgdGC0YwsIGBjb3JgID0gMC41MiDQtNCwINC4INC/0YDQuCDRgtC+0Lwg0L7Qs9GA0L7QvNC90LDRjy4g0KHQu9C10LTQvtCy0LDRgtC10LvRjNC90L4g0LvQuNC90LXQudC90YPRjiDQvNC+0LTQtdC70Ywg0L/QviDRjdGC0LjQvCDQtNCy0YPQvCDRhNCw0LrRgtC+0YDQsNC8INGB0YLRgNC+0LjRgtGMINC90LXQu9GM0Y/Qty5cCtCd0L4g0LzQvtC20L3QviDQvdC10LzQvdC+0LPQviDRgdGF0LjRgtGA0LjRgtGMLiDQktGL0YfQtdGB0YLRjCDQstC70LjRj9C90LjQtSDQvtC00L3QvtCz0L4g0YTQsNC60YLQvtGA0LAg0LjRhSDQtNGA0YPQs9C+0LPQvi4KYGBge3J9Cm1vZGVsIDwtIGxtKEdpcnRofkhlaWdodCwgZGF0YT10cmVlcykKIyDQp9Cw0YHRgtGMINC/0LXRgNC10LzQtdC90L3QvtC5INC+0LHRhdCy0LDRgiDQvtCx0YrRj9GB0L3Rj9C10YLRgdGPINCy0YvRgdC+0YLQvtC5INC00LXRgNC10LLQsCwg0LAg0LLQvtGCINC+0YHRgtCw0YLQvtGH0L3QsNGPINC40LfQvNC10L3Rh9C40LLQvtGB0YLRjCDQvdC1INC+0LHRitGP0YHQvdGP0LXRgtGB0Y8g0LLRi9GB0L7RgdGC0L7QuSDQtNC10YDQtdCy0LAuINCt0YLQuCDQvtGB0YLQsNGC0LrQuCDQvNGLINC4INCy0L7Qt9GM0LzQtdC8Cm1vZGVsIDwtIGxtKFZvbHVtZX5HaXJ0aCtyZXNpZChtb2RlbCksIGRhdGE9dHJlZXMpCnN1bW1hcnkobW9kZWwpCmBgYArQndC+INCy0L7RgiDQtdGJ0ZEg0L7QtNC90LAg0L/RgNC+0LHQu9C10LzQsCwg0LfQsNCy0LjRgdC40LzQsNGPINC/0LXRgNC10LzQtdC90L3QsNGPINGDINC90LDRgSDRgSDQvdC10L3QvtGA0LzQsNC70YzQvdGL0Lwg0YDQsNGB0L/RgNC10LTQtdC70LXQvdC40LXQvCwg0YLQvtCz0LTQsCDQu9C40L3QtdC90LnQvdGD0Y4g0YDQtdCz0YDQtdGB0YHQuNGOINC/0YDQuNC80LXQvdGP0YLRjCDQvdC10LvRjNGP0LcuINCn0YLQviDQttC1LCDRgtC+0LPQtNCwINC/0YDQuNC80LXQvdGP0LXQvCDQu9C+0LPQsNGA0LjRhNC80LjRgNC+0LLQsNC90LjQtSBgbG9nKClgLiDQldGB0LvQuCDRgyDQvdCw0YEg0L/RgNC+0LHQu9C10LzRiyDRgSDQvdC+0YDQvNCw0LvRjNC90L7RgdGC0YwgLSDQu9C+0LPQsNGA0LjRhNC80LjRgNGD0LXQvCDQt9Cw0LLQuNGB0LjQvNGD0Y4g0L/QtdGA0LXQvNC10L3QvdGD0Y4sINC10YHQu9C4INC/0YDQvtCx0LvQtdC80Ysg0YEg0LTQuNGB0L/QtdGA0YHQuNGP0LzQuCAtINC70L7Qs9Cw0YDQuNGE0LzQuNGA0YPQtdC8INC90LXQt9Cw0LLQuNGB0LjQvNGD0Y4g0L/QtdGA0LXQvNC10L3QvdGD0Y4uINCf0YDQuNC80LXQvdC10L3QuNC1INC6INC00LjRgdC60YDQtdGC0L3Ri9C8INC00LDQvdC90YvQvCDQu9C+0LPQsNGA0LjRhNC80LjRgNC+0LLQsNC90LjQtSAtINC/0L7Qu9GD0YfQsNC10Lwg0LvQuNC90LXQudC90YPRjiDQvNC+0LTQtdC70YwuXApcCtCd0L4g0LXRgdC70Lgg0L3QtdC30LDQstC40YHQuNC80LDRjyDQv9C10YDQtdC80LXQvdC90LDRjyDQsiDQvNC+0LTQtdC70Lgg0YTQsNC60YLQvtGALCDQutCw0Log0LDQvdCw0LvQuNC30LjRgNGD0LXRgtGB0Y8g0YLQsNC60LDRjyDQv9C10YDQtdC80LXQvdC90LDRjz8g0JIg0L7QsdGJ0LXQvC3RgtC+INC40Lcg0YLQsNCx0LvQuNGG0Ysg0YEg0LTQsNC90L3Ri9C80Lgg0LHQtdGA0LXRgtGB0Y8g0L/QtdGA0LLRi9C5INGE0LDQutGC0L7RgCDQuCDRgdGA0LDQstC90LjQstCw0LXRgtGB0Y8g0YEg0L7RgtCw0LvRjNC90YvQvNC4LgoKCmBgYHtyfQpUb290aEdyb3d0aCRkb3NlIDwtIGFzLmZhY3RvcihUb290aEdyb3d0aCRkb3NlKQojIFRvb3RoR3Jvd3RoJGRvc2UgPC0gYXMubnVtZXJpYyhUb290aEdyb3d0aCRkb3NlKQptb2RlbCA8LSBsbShsZW5+c3VwcCtkb3NlLCBkYXRhID0gVG9vdGhHcm93dGgpCnN1bW1hcnkobW9kZWwpCmBgYArQmtCw0LbQtNGL0Lkg0YTQsNC60YLQvtGAINGB0YDQsNCy0L3QuNCy0LDQtdGC0YHRjyDRgSDQv9C10YDQstGL0Lwg0LjQtyDRgtCw0LHQu9C40YbRiyDQuCDQutC+0Y3RhNGE0LjRhtC40LXQvdGCINC/0L7QutCw0LfRi9Cy0LDQtdGCINC90LDRgdC60L7Qu9GM0LrQviDQstGB0LUg0L/QvtGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LrRgtC+0YDRiyDQvtGC0LvQuNGH0LDRjtGC0YHRjyDQv9C+INCy0LvQuNGP0L3QuNGOINC+0YIg0L/QtdGA0LLQvtCz0L4uINCf0YDQuCDRjdGC0L7QvCDQtdGB0LvQuCDQstC80LXRgdGC0L4gYCtgINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQt9C90LDQuiBgKmAg0YLQviDQv9GA0L7Rj9Cy0LvRj9C10YLRgdGPINGN0YTRhNC10LrRgiDQstC30LDQuNC80L7QtNC10LnRgdGC0LLQuNGPLiDQotC+INC10YHRgtGMINCy0YLQvtGA0L7QuSDQstCw0YDQuNCw0L3RgiDQtNC70Y8g0LLQsNGA0LjQsNC90YLQsCDQs9C00LUg0LTQvtC30LAg0Lgg0YLQuNC/INC/0YDQtdC/0LDRgNCw0YLQsCDQstC70LjRj9GO0YIg0L3QsCDQtNC70LjQvdC90YMg0LfRg9Cx0LAg0LfQsNCy0LjRgdC40LzQvi4g0JAg0L/QtdGA0LLRi9C5INCy0LDRgNC40LDQvdGCLCDQutC+0LPQtNCwINC00L7Qt9CwINCy0LvQuNGP0LXRgiDQvdC10LfQsNCy0LjRgdC40LzQviDQvtGCINC/0YDQtdC/0LDRgNCw0YLQsCwg0L3QtSDQstCw0LbQvdC+INCy0LjRgtCw0LzQuNC9INGN0YLQviDQuNC70Lgg0LDQv9C10LvRjNGB0LjQvdC+0LLRi9C5INGB0L7Qui4KCgoKCmBgYHtyfQoKYGBgCgpgYGB7cn0KCmBgYAoKYGBge3J9CgpgYGAKCmBgYHtyfQoKYGBgCgpgYGB7cn0KCmBgYAo=