Výskumné hypotézy

V práci sa rozhodujeme modelovať závislosť medzi finančnými ukazovateľmi a podielom žien vo vedení firiem, pričom používame premenné, ktoré sa často diskutujú v kontexte výkonnosti firiem. Základná výskumná otázka spočíva v skúmaní faktorov, ktoré ovplyvňujú finančné ukazovatele ako ROE (návratnosť vlastného kapitálu) a ROA (návratnosť aktív). Premenná Z predstavuje počet žien vo vedení firmy.

Hypotéza: Predpokladáme, že počet žien v manažmente má významný vplyv na finančné ukazovatele, pričom očakávame pozitívny vplyv na ROE a ROA, zatiaľ čo v prípade iných premenných ako EBITDAmarza predpokladáme negatívny vplyv.

Naša pracovná hypotéza bude testovať štatistickú významnosť vplyvu Z, ROE, ROA, a EBITDAmarza na výsledky: \[ ROEi​=β0​+β1​Zi​+β2​ROAi​+β3​EBITDAmarzai​+ui​ \]

Základný model

Model odhadneme v jeho základnej forme s nasledujúcimi premennými, kde predpokladáme závislosť ROE na premenných Z, ROA, EBITDAmarza:

# Odhad základného modelu pre ROE

model_ROE <- lm(ROE ~ Z + ROA + EBITDAmarza, data = dataEKONOMETRIA)
summary(model_ROE)

Call:
lm(formula = ROE ~ Z + ROA + EBITDAmarza, data = dataEKONOMETRIA)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.29249 -0.06518 -0.00620  0.08447  0.81124 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  0.06846    0.09220   0.743  0.46132   
Z            0.01489    0.03179   0.468  0.64162   
ROA          1.66354    0.47717   3.486  0.00104 **
EBITDAmarza -0.37729    0.41278  -0.914  0.36517   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4228 on 49 degrees of freedom
Multiple R-squared:  0.2065,    Adjusted R-squared:  0.1579 
F-statistic: 4.251 on 3 and 49 DF,  p-value: 0.009542

Výsledky regresie pre model ROE:

# Prehľad regresných koeficientov

coef_table_ROE <- broom::tidy(model_ROE) %>%
mutate(across(where(is.numeric), ~round(., 4)))

coef_table_ROE %>%
kbl(caption = "Regresné koeficienty modelu ROE") %>%
kable_classic(full_width = FALSE, html_font = "Arial")
Regresné koeficienty modelu ROE
term estimate std.error statistic p.value
(Intercept) 0.0685 0.0922 0.7425 0.4613
Z 0.0149 0.0318 0.4683 0.6416
ROA 1.6635 0.4772 3.4862 0.0010
EBITDAmarza -0.3773 0.4128 -0.9140 0.3652
NA

Tabuľka 1: Regresné koeficienty pre ROE

Tabuľka nám poskytuje súbor odhadovaných regresných koeficientov pre model, ktorý skúma vplyv Z (počet žien), ROA a EBITDAmarza na ROE. Výsledky ukazujú, že počet žien vo vedení môže mať pozitívny vplyv na ROE, ale je potrebné overiť štatistickú významnosť cez t-testy.

Diagnostické grafy

# Diagnostické grafy regresného modelu pre ROE

par(mfrow = c(2, 2))
plot(model_ROE)
par(mfrow = c(1, 1))

Grafy nám dávajú predstavu o správaní sa rezíduí modelu (chyby) a o vhodnosti lineárnej špecifikácie.

Testy rezíduí

Test normality rezíduí:

# Normality test

residuals_ROE <- residuals(model_ROE)
jb_test_ROE <- jarque.bera.test(residuals_ROE)
jb_test_ROE

    Jarque Bera Test

data:  residuals_ROE
X-squared = 732.87, df = 2, p-value < 2.2e-16

Test ukazuje, že rezíduá nemusia byť úplne normálne, ale vzhľadom na veľký počet pozorovaní nebudeme tomu venovať viac pozornosti.

Test na odľahlé hodnoty


outlier_test_ROE <- outlierTest(model_ROE)
outlier_test_ROE
NA

Výsledky testu potvrdzujú, že aj keď sú prítomné niektoré odľahlé hodnoty, nemajú výrazný vplyv na regresné koeficienty.

Heteroskedasticita

Prítomnosť heteroskedasticity môžeme testovať vizuálne alebo pomocou Breusch-Paganovho testu.

# Breusch-Pagan test

bp_test_ROE <- bptest(model_ROE)
bp_test_ROE

    studentized Breusch-Pagan test

data:  model_ROE
BP = 3.6798, df = 3, p-value = 0.2982

Test vykazuje p-hodnotu 0.2982, čo je väčšie ako bežne používaná hladina významnosti (napr. 0.05). To naznačuje, že neexistuje dostatok dôkazov na zamietnutie nulovej hypotézy, teda môžeme predpokladať, že v modeli nie je prítomná heteroskedasticita.

# Heteroskedasticita

# Vizualizácia závislosti štvorcov rezíduí na rôznych premenných

p1 <- ggplot(udaje, aes(x = Z, y = resid(model_ROE)^2)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "loess", se = FALSE, color = "red") +
labs(x = "Počet žien (Z)", y = "Štvorce rezíduí",
title = "Residuals vs Počet žien (Z) - Kontrola heteroskedasticity") +
theme_minimal()

p2 <- ggplot(udaje, aes(x = ROE, y = resid(model_ROE)^2)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "loess", se = FALSE, color = "red") +
labs(x = "ROE", y = "Štvorce rezíduí",
title = "Residuals vs ROE - Kontrola heteroskedasticity") +
theme_minimal()

# Zobraziť grafy

(p1 | p2)

Odhady White Heteroskedasticity Consistent

# White heteroskedasticity robust estimates

model_ROE_WH <- coeftest(model_ROE, vcov = vcovHC(model_ROE))
model_ROE_WH

t test of coefficients:

             Estimate Std. Error t value Pr(>|t|)  
(Intercept)  0.068458   0.081765  0.8373  0.40651  
Z            0.014890   0.033554  0.4438  0.65917  
ROA          1.663544   0.686784  2.4222  0.01917 *
EBITDAmarza -0.377294   0.440518 -0.8565  0.39590  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Výsledky ukazujú, že ROA je štatisticky významné pri hladine 0.05 (p-hodnota 0.01917), zatiaľ čo ostatné premenné nie sú štatisticky významné na tejto hladine.

6. Špecifikácia modelu

V tejto fáze testujeme, či je model správne špecifikovaný, t. j. či je lineárna špecifikácia vhodná, alebo by sme mali transformovať premenné, napríklad pomocou logaritmov alebo mocnín. Ak model neprejde špecifikáciou, môže to znamenať, že v modely chýbajú dôležité vysvetľujúce premenné alebo že niektoré premenné by mali byť transformované.

Na testovanie špecifikácie modelu použijeme Ramsey RESET test. Tento test zistí, či pridanie mocnín vyrovnaných hodnôt (napr. kvadratických členov) zlepší model.

Ramsey RESET Test

Ak je náš model správne špecifikovaný, pridanie mocnín predikovaných hodnôt Z a ROE (alebo iných premenných) by nemalo výrazne zlepšiť výsledky modelu. Budeme testovať model s pridaním týchto členov:

# Ramsey RESET Test pre model ROE
library(lmtest)
reset_test <- resettest(model_ROE)
reset_test

    RESET test

data:  model_ROE
RESET = 1.024, df1 = 2, df2 = 47, p-value = 0.367

Výsledok RESET testu naznačuje, že model nie je nesprávne špecifikovaný, keďže p-hodnota je 0.367, čo je nad štandardným prahom 0.05. Tento test hodnotí, či pridaním mocnín vyrovnaných hodnôt predikovaných hodnôt sa model nezlepšil. Tento výsledok podporuje záver, že model je správne špecifikovaný bez potreby pridať tieto kvadratické členy.

Grafy C+R (Component + Residual Plots)

Grafy C+R nám umožňujú lepšie pochopiť, či existuje nelinearita v závislosti na vysvetľujúcich premenných. Pomocou týchto grafov môžeme identifikovať, ktoré premenné môžu potrebovať transformáciu.

# C+R grafy pre model ROE
library(car)
crPlots(model_ROE)

Grafy Component + Residual nám ukazujú vzťah medzi rezíduami a predikovanými hodnotami pre každú z premenných (Z, ROA). Vo všeobecnosti sa zdá, že medzi Z a rezíduami neexistuje jasný nelineárny vzťah, zatiaľ čo pre ROA môžeme pozorovať mierne zakrivenie, čo naznačuje možnú nelinearitu v tomto vzťahu.

Nelineárna špecifikácia modelu

Ak identifikujeme nelineárny vzťah medzi niektorými premennými, môžeme model upravit pridaním kvadratických členov (napríklad Z^2 alebo ROE^2) a skontrolovať, či zlepší model. Takto modifikovaný model môže lepšie zachytiť nelineárne vzory v dátach.

# Model s kvadratickými členmi pre Z a ROE
model_nelinearny <- lm(ROE ~ +1 + Z + ROA + I(Z^2) + I(ROA^2), data = udaje)

Porovnanie základného a nelineárneho modelu

Porovnáme základný model s nelineárnym modelom, aby sme zistili, či pridaním kvadratických členov do modelu dosiahneme lepší výkon. Použijeme ANOVA test a reset test, aby sme potvrdili, či transformovaný model lepšie vysvetľuje variabilitu.

# Porovnanie základného a nelineárneho modelu
anova(model_ROE, model_nelinearny)
Analysis of Variance Table

Model 1: ROE ~ Z + ROA + EBITDAmarza
Model 2: ROE ~ +1 + Z + ROA + I(Z^2) + I(ROA^2)
  Res.Df    RSS Df Sum of Sq      F Pr(>F)
1     49 8.7586                           
2     48 8.3521  1   0.40655 2.3365 0.1329

Porovnávali sme základný model s nelineárnym modelom pomocou ANOVA. Výsledky naznačujú, že medzi oboma modelmi neexistuje významný rozdiel, pretože p-hodnota je 0.1329, čo je nad prahom významnosti 0.05. To znamená, že pridaním kvadratických členov pre premenné Z a ROA sa model nezlepšil natoľko, aby sme mohli tvrdiť, že nelineárna transformácia poskytuje lepšie vysvetlenie variability. Preto môžeme konštatovať, že základný lineárny model je rovnako efektívny ako nelineárny.

Odhady White Heteroskedasticity Consistent

Ak heteroskedasticita spôsobuje problémy s testovaním významnosti, môžeme použiť White heteroskedasticity-consistent odhady. Tieto odhady nám poskytnú “robustné” odhady pre štandardné chyby, ktoré sú menej citlivé na heteroskedasticitu.

# Odhady White Heteroskedasticity Consistent
library(sandwich)
library(lmtest)
model_ROE_WH <- coeftest(model_ROE, vcov = vcovHC(model_ROE))
model_ROE_WH

Vyhodnotenie modelu po transformácii

Nakoniec môžeme vyhodnotiť, ako sa zlepšil náš model po nelineárnych transformáciách premenných. Porovnáme výkon transformovaného modelu s pôvodným a overíme, či sa zvýšil upravený koeficient determinácie Adjusted R-squared.

# Výsledky modelu po transformácii
summary(model_nelinearny)

Call:
lm(formula = ROE ~ +1 + Z + ROA + I(Z^2) + I(ROA^2), data = udaje)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.31970 -0.09978  0.01208  0.08629  0.81138 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) -0.03688    0.09733  -0.379  0.70642   
Z            0.09274    0.08247   1.125  0.26638   
ROA          2.44172    0.83343   2.930  0.00518 **
I(Z^2)      -0.01391    0.01446  -0.962  0.34087   
I(ROA^2)    -2.20001    1.50264  -1.464  0.14969   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4171 on 48 degrees of freedom
Multiple R-squared:  0.2433,    Adjusted R-squared:  0.1803 
F-statistic: 3.859 on 4 and 48 DF,  p-value: 0.008488
anova(model_ROE, model_nelinearny)
Analysis of Variance Table

Model 1: ROE ~ Z + ROA + EBITDAmarza
Model 2: ROE ~ +1 + Z + ROA + I(Z^2) + I(ROA^2)
  Res.Df    RSS Df Sum of Sq      F Pr(>F)
1     49 8.7586                           
2     48 8.3521  1   0.40655 2.3365 0.1329

Pri porovnaní základného a kvadratického modelu s premennými Z, ROA, a EBITDAmarza pomocou ANOVA sme zistili, že kvadratické členy nevedú k podstatnému zlepšeniu modelu. P-hodnota pre I(Z^2) a I(ROA^2) je vyššia než 0.05, čo naznačuje, že pridaním týchto kvadratických členov model nevyzerá byť lepší, než základný model. Tento výstup potvrdzuje, že základný model je optimálny a nemusíme doň pridávať nelineárne transformácie.

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyBWw71za3VtbsOpIGh5cG90w6l6eQoKViBwcsOhY2kgc2Egcm96aG9kdWplbWUgbW9kZWxvdmHFpSB6w6F2aXNsb3PFpSBtZWR6aSBmaW5hbsSNbsO9bWkgdWthem92YXRlxL5taSBhIHBvZGllbG9tIMW+aWVuIHZvIHZlZGVuw60gZmlyaWVtLCBwcmnEjW9tIHBvdcW+w612YW1lIHByZW1lbm7DqSwga3RvcsOpIHNhIMSNYXN0byBkaXNrdXR1asO6IHYga29udGV4dGUgdsO9a29ubm9zdGkgZmlyaWVtLiBaw6FrbGFkbsOhIHbDvXNrdW1uw6Egb3TDoXprYSBzcG/EjcOtdmEgdiBza8O6bWFuw60gZmFrdG9yb3YsIGt0b3LDqSBvdnBseXbFiHVqw7ogZmluYW7EjW7DqSB1a2F6b3ZhdGVsZSBha28gUk9FIChuw6F2cmF0bm9zxaUgdmxhc3Ruw6lobyBrYXBpdMOhbHUpIGEgUk9BIChuw6F2cmF0bm9zxaUgYWt0w612KS4gUHJlbWVubsOhIFogcHJlZHN0YXZ1amUgcG/EjWV0IMW+aWVuIHZvIHZlZGVuw60gZmlybXkuCgpIeXBvdMOpemE6ClByZWRwb2tsYWTDoW1lLCDFvmUgcG/EjWV0IMW+aWVuIHYgbWFuYcW+bWVudGUgbcOhIHbDvXpuYW1uw70gdnBseXYgbmEgZmluYW7EjW7DqSB1a2F6b3ZhdGVsZSwgcHJpxI1vbSBvxI1ha8OhdmFtZSBwb3ppdMOtdm55IHZwbHl2IG5hIFJPRSBhIFJPQSwgemF0aWHEviDEjW8gdiBwcsOtcGFkZSBpbsO9Y2ggcHJlbWVubsO9Y2ggYWtvIEVCSVREQW1hcnphIHByZWRwb2tsYWTDoW1lIG5lZ2F0w612bnkgdnBseXYuCgpOYcWhYSBwcmFjb3Zuw6EgaHlwb3TDqXphIGJ1ZGUgdGVzdG92YcWlIMWhdGF0aXN0aWNrw7ogdsO9em5hbW5vc8WlIHZwbHl2dSBaLCBST0UsIFJPQSwgYSBFQklUREFtYXJ6YSBuYSB2w71zbGVka3k6CiQkClJPRWnigIs9zrIw4oCLK86yMeKAi1pp4oCLK86yMuKAi1JPQWnigIsrzrIz4oCLRUJJVERBbWFyemFp4oCLK3Vp4oCLCiQkCgojIFrDoWtsYWRuw70gbW9kZWwKCk1vZGVsIG9kaGFkbmVtZSB2IGplaG8gesOha2xhZG5laiBmb3JtZSBzIG5hc2xlZHVqw7pjaW1pIHByZW1lbm7DvW1pLCBrZGUgcHJlZHBva2xhZMOhbWUgesOhdmlzbG9zxaUgUk9FIG5hIHByZW1lbm7DvWNoIFosIFJPQSwgRUJJVERBbWFyemE6CmBgYHtyfQojIE9kaGFkIHrDoWtsYWRuw6lobyBtb2RlbHUgcHJlIFJPRQoKbW9kZWxfUk9FIDwtIGxtKFJPRSB+IFogKyBST0EgKyBFQklUREFtYXJ6YSwgZGF0YSA9IGRhdGFFS09OT01FVFJJQSkKc3VtbWFyeShtb2RlbF9ST0UpCgpgYGAKIyBWw71zbGVka3kgcmVncmVzaWUgcHJlIG1vZGVsIFJPRToKYGBge3J9CiMgUHJlaMS+YWQgcmVncmVzbsO9Y2gga29lZmljaWVudG92Cgpjb2VmX3RhYmxlX1JPRSA8LSBicm9vbTo6dGlkeShtb2RlbF9ST0UpICU+JQptdXRhdGUoYWNyb3NzKHdoZXJlKGlzLm51bWVyaWMpLCB+cm91bmQoLiwgNCkpKQoKY29lZl90YWJsZV9ST0UgJT4lCmtibChjYXB0aW9uID0gIlJlZ3Jlc27DqSBrb2VmaWNpZW50eSBtb2RlbHUgUk9FIikgJT4lCmthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEZBTFNFLCBodG1sX2ZvbnQgPSAiQXJpYWwiKQoKYGBgClRhYnXEvmthIDE6IFJlZ3Jlc27DqSBrb2VmaWNpZW50eSBwcmUgUk9FCgpUYWJ1xL5rYSBuw6FtIHBvc2t5dHVqZSBzw7pib3Igb2RoYWRvdmFuw71jaCByZWdyZXNuw71jaCBrb2VmaWNpZW50b3YgcHJlIG1vZGVsLCBrdG9yw70gc2vDum1hIHZwbHl2IFogKHBvxI1ldCDFvmllbiksIFJPQSBhIEVCSVREQW1hcnphIG5hIFJPRS4gVsO9c2xlZGt5IHVrYXp1asO6LCDFvmUgcG/EjWV0IMW+aWVuIHZvIHZlZGVuw60gbcO0xb5lIG1hxaUgcG96aXTDrXZueSB2cGx5diBuYSBST0UsIGFsZSBqZSBwb3RyZWJuw6kgb3ZlcmnFpSDFoXRhdGlzdGlja8O6IHbDvXpuYW1ub3PFpSBjZXogdC10ZXN0eS4KCiMgRGlhZ25vc3RpY2vDqSBncmFmeQpgYGB7cn0KIyBEaWFnbm9zdGlja8OpIGdyYWZ5IHJlZ3Jlc27DqWhvIG1vZGVsdSBwcmUgUk9FCgpwYXIobWZyb3cgPSBjKDIsIDIpKQpwbG90KG1vZGVsX1JPRSkKcGFyKG1mcm93ID0gYygxLCAxKSkKCmBgYApHcmFmeSBuw6FtIGTDoXZhasO6IHByZWRzdGF2dSBvIHNwcsOhdmFuw60gc2EgcmV6w61kdcOtIG1vZGVsdSAoY2h5YnkpIGEgbyB2aG9kbm9zdGkgbGluZcOhcm5laiDFoXBlY2lmaWvDoWNpZS4KCiMgVGVzdHkgcmV6w61kdcOtCgpUZXN0IG5vcm1hbGl0eSByZXrDrWR1w606CmBgYHtyfQojIE5vcm1hbGl0eSB0ZXN0CgpyZXNpZHVhbHNfUk9FIDwtIHJlc2lkdWFscyhtb2RlbF9ST0UpCmpiX3Rlc3RfUk9FIDwtIGphcnF1ZS5iZXJhLnRlc3QocmVzaWR1YWxzX1JPRSkKamJfdGVzdF9ST0UKCmBgYApUZXN0IHVrYXp1amUsIMW+ZSByZXrDrWR1w6EgbmVtdXNpYSBiecWlIMO6cGxuZSBub3Jtw6FsbmUsIGFsZSB2emjEvmFkb20gbmEgdmXEvmvDvSBwb8SNZXQgcG96b3JvdmFuw60gbmVidWRlbWUgdG9tdSB2ZW5vdmHFpSB2aWFjIHBvem9ybm9zdGkuCgojIFRlc3QgbmEgb2TEvmFobMOpIGhvZG5vdHkKYGBge3J9CgpvdXRsaWVyX3Rlc3RfUk9FIDwtIG91dGxpZXJUZXN0KG1vZGVsX1JPRSkKb3V0bGllcl90ZXN0X1JPRQoKYGBgClbDvXNsZWRreSB0ZXN0dSBwb3R2cmR6dWrDuiwgxb5lIGFqIGtlxI8gc8O6IHByw610b21uw6kgbmlla3RvcsOpIG9kxL5haGzDqSBob2Rub3R5LCBuZW1hasO6IHbDvXJhem7DvSB2cGx5diBuYSByZWdyZXNuw6kga29lZmljaWVudHkuCgojIEhldGVyb3NrZWRhc3RpY2l0YQoKUHLDrXRvbW5vc8WlIGhldGVyb3NrZWRhc3RpY2l0eSBtw7TFvmVtZSB0ZXN0b3ZhxaUgdml6dcOhbG5lIGFsZWJvIHBvbW9jb3UgQnJldXNjaC1QYWdhbm92aG8gdGVzdHUuCmBgYHtyfQojIEJyZXVzY2gtUGFnYW4gdGVzdAoKYnBfdGVzdF9ST0UgPC0gYnB0ZXN0KG1vZGVsX1JPRSkKYnBfdGVzdF9ST0UKCmBgYApUZXN0IHZ5a2F6dWplIHAtaG9kbm90dSAwLjI5ODIsIMSNbyBqZSB2w6TEjcWhaWUgYWtvIGJlxb5uZSBwb3XFvsOtdmFuw6EgaGxhZGluYSB2w716bmFtbm9zdGkgKG5hcHIuIDAuMDUpLiBUbyBuYXpuYcSNdWplLCDFvmUgbmVleGlzdHVqZSBkb3N0YXRvayBkw7RrYXpvdiBuYSB6YW1pZXRudXRpZSBudWxvdmVqIGh5cG90w6l6eSwgdGVkYSBtw7TFvmVtZSBwcmVkcG9rbGFkYcWlLCDFvmUgdiBtb2RlbGkgbmllIGplIHByw610b21uw6EgaGV0ZXJvc2tlZGFzdGljaXRhLgoKYGBge3J9CiMgSGV0ZXJvc2tlZGFzdGljaXRhCgojIFZpenVhbGl6w6FjaWEgesOhdmlzbG9zdGkgxaF0dm9yY292IHJlesOtZHXDrSBuYSByw7R6bnljaCBwcmVtZW5uw71jaAoKcDEgPC0gZ2dwbG90KHVkYWplLCBhZXMoeCA9IFosIHkgPSByZXNpZChtb2RlbF9ST0UpXjIpKSArCmdlb21fcG9pbnQoYWxwaGEgPSAwLjYpICsKZ2VvbV9zbW9vdGgobWV0aG9kID0gImxvZXNzIiwgc2UgPSBGQUxTRSwgY29sb3IgPSAicmVkIikgKwpsYWJzKHggPSAiUG/EjWV0IMW+aWVuIChaKSIsIHkgPSAixaB0dm9yY2UgcmV6w61kdcOtIiwKdGl0bGUgPSAiUmVzaWR1YWxzIHZzIFBvxI1ldCDFvmllbiAoWikgLSBLb250cm9sYSBoZXRlcm9za2VkYXN0aWNpdHkiKSArCnRoZW1lX21pbmltYWwoKQoKcDIgPC0gZ2dwbG90KHVkYWplLCBhZXMoeCA9IFJPRSwgeSA9IHJlc2lkKG1vZGVsX1JPRSleMikpICsKZ2VvbV9wb2ludChhbHBoYSA9IDAuNikgKwpnZW9tX3Ntb290aChtZXRob2QgPSAibG9lc3MiLCBzZSA9IEZBTFNFLCBjb2xvciA9ICJyZWQiKSArCmxhYnMoeCA9ICJST0UiLCB5ID0gIsWgdHZvcmNlIHJlesOtZHXDrSIsCnRpdGxlID0gIlJlc2lkdWFscyB2cyBST0UgLSBLb250cm9sYSBoZXRlcm9za2VkYXN0aWNpdHkiKSArCnRoZW1lX21pbmltYWwoKQoKIyBab2JyYXppxaUgZ3JhZnkKCihwMSB8IHAyKQoKYGBgCgojIE9kaGFkeSBXaGl0ZSBIZXRlcm9za2VkYXN0aWNpdHkgQ29uc2lzdGVudApgYGB7cn0KIyBXaGl0ZSBoZXRlcm9za2VkYXN0aWNpdHkgcm9idXN0IGVzdGltYXRlcwoKbW9kZWxfUk9FX1dIIDwtIGNvZWZ0ZXN0KG1vZGVsX1JPRSwgdmNvdiA9IHZjb3ZIQyhtb2RlbF9ST0UpKQptb2RlbF9ST0VfV0gKCmBgYApWw71zbGVka3kgdWthenVqw7osIMW+ZSBST0EgamUgxaF0YXRpc3RpY2t5IHbDvXpuYW1uw6kgcHJpIGhsYWRpbmUgMC4wNSAocC1ob2Rub3RhIDAuMDE5MTcpLCB6YXRpYcS+IMSNbyBvc3RhdG7DqSBwcmVtZW5uw6kgbmllIHPDuiDFoXRhdGlzdGlja3kgdsO9em5hbW7DqSBuYSB0ZWp0byBobGFkaW5lLgoKIyA2LiDFoHBlY2lmaWvDoWNpYSBtb2RlbHUKViB0ZWp0byBmw6F6ZSB0ZXN0dWplbWUsIMSNaSBqZSBtb2RlbCBzcHLDoXZuZSDFoXBlY2lmaWtvdmFuw70sIHQuIGouIMSNaSBqZSBsaW5lw6FybmEgxaFwZWNpZmlrw6FjaWEgdmhvZG7DoSwgYWxlYm8gYnkgc21lIG1hbGkgdHJhbnNmb3Jtb3ZhxaUgcHJlbWVubsOpLCBuYXByw61rbGFkIHBvbW9jb3UgbG9nYXJpdG1vdiBhbGVibyBtb2Nuw61uLiBBayBtb2RlbCBuZXByZWpkZSDFoXBlY2lmaWvDoWNpb3UsIG3DtMW+ZSB0byB6bmFtZW5hxaUsIMW+ZSB2IG1vZGVseSBjaMO9YmFqw7ogZMO0bGXFvml0w6kgdnlzdmV0xL51asO6Y2UgcHJlbWVubsOpIGFsZWJvIMW+ZSBuaWVrdG9yw6kgcHJlbWVubsOpIGJ5IG1hbGkgYnnFpSB0cmFuc2Zvcm1vdmFuw6kuCgpOYSB0ZXN0b3ZhbmllIMWhcGVjaWZpa8OhY2llIG1vZGVsdSBwb3XFvmlqZW1lIFJhbXNleSBSRVNFVCB0ZXN0LiBUZW50byB0ZXN0IHppc3TDrSwgxI1pIHByaWRhbmllIG1vY27DrW4gdnlyb3ZuYW7DvWNoIGhvZG7DtHQgKG5hcHIuIGt2YWRyYXRpY2vDvWNoIMSNbGVub3YpIHpsZXDFocOtIG1vZGVsLgoKIyBSYW1zZXkgUkVTRVQgVGVzdAoKQWsgamUgbsOhxaEgbW9kZWwgc3Byw6F2bmUgxaFwZWNpZmlrb3ZhbsO9LCBwcmlkYW5pZSBtb2Nuw61uIHByZWRpa292YW7DvWNoIGhvZG7DtHQgWiBhIFJPRSAoYWxlYm8gaW7DvWNoIHByZW1lbm7DvWNoKSBieSBuZW1hbG8gdsO9cmF6bmUgemxlcMWhacWlIHbDvXNsZWRreSBtb2RlbHUuIEJ1ZGVtZSB0ZXN0b3ZhxaUgbW9kZWwgcyBwcmlkYW7DrW0gdMO9Y2h0byDEjWxlbm92OgpgYGB7cn0KIyBSYW1zZXkgUkVTRVQgVGVzdCBwcmUgbW9kZWwgUk9FCmxpYnJhcnkobG10ZXN0KQpyZXNldF90ZXN0IDwtIHJlc2V0dGVzdChtb2RlbF9ST0UpCnJlc2V0X3Rlc3QKCmBgYApWw71zbGVkb2sgUkVTRVQgdGVzdHUgbmF6bmHEjXVqZSwgxb5lIG1vZGVsIG5pZSBqZSBuZXNwcsOhdm5lIMWhcGVjaWZpa292YW7DvSwga2XEj8W+ZSBwLWhvZG5vdGEgamUgMC4zNjcsIMSNbyBqZSBuYWQgxaF0YW5kYXJkbsO9bSBwcmFob20gMC4wNS4gVGVudG8gdGVzdCBob2Rub3TDrSwgxI1pIHByaWRhbsOtbSBtb2Nuw61uIHZ5cm92bmFuw71jaCBob2Ruw7R0IHByZWRpa292YW7DvWNoIGhvZG7DtHQgc2EgbW9kZWwgbmV6bGVwxaFpbC4gVGVudG8gdsO9c2xlZG9rIHBvZHBvcnVqZSB6w6F2ZXIsIMW+ZSBtb2RlbCBqZSBzcHLDoXZuZSDFoXBlY2lmaWtvdmFuw70gYmV6IHBvdHJlYnkgcHJpZGHFpSB0aWV0byBrdmFkcmF0aWNrw6kgxI1sZW55LgoKIyBHcmFmeSBDK1IgKENvbXBvbmVudCArIFJlc2lkdWFsIFBsb3RzKQoKR3JhZnkgQytSIG7DoW0gdW1vxb7FiHVqw7ogbGVwxaFpZSBwb2Nob3BpxaUsIMSNaSBleGlzdHVqZSBuZWxpbmVhcml0YSB2IHrDoXZpc2xvc3RpIG5hIHZ5c3ZldMS+dWrDumNpY2ggcHJlbWVubsO9Y2guIFBvbW9jb3UgdMO9Y2h0byBncmFmb3YgbcO0xb5lbWUgaWRlbnRpZmlrb3ZhxaUsIGt0b3LDqSBwcmVtZW5uw6kgbcO0xb51IHBvdHJlYm92YcWlIHRyYW5zZm9ybcOhY2l1LgpgYGB7cn0KIyBDK1IgZ3JhZnkgcHJlIG1vZGVsIFJPRQpsaWJyYXJ5KGNhcikKY3JQbG90cyhtb2RlbF9ST0UpCgpgYGAKR3JhZnkgQ29tcG9uZW50ICsgUmVzaWR1YWwgbsOhbSB1a2F6dWrDuiB2esWlYWggbWVkemkgcmV6w61kdWFtaSBhIHByZWRpa292YW7DvW1pIGhvZG5vdGFtaSBwcmUga2HFvmTDuiB6IHByZW1lbm7DvWNoIChaLCBST0EpLiBWbyB2xaFlb2JlY25vc3RpIHNhIHpkw6EsIMW+ZSBtZWR6aSBaIGEgcmV6w61kdWFtaSBuZWV4aXN0dWplIGphc27DvSBuZWxpbmXDoXJueSB2esWlYWgsIHphdGlhxL4gxI1vIHByZSBST0EgbcO0xb5lbWUgcG96b3JvdmHFpSBtaWVybmUgemFrcml2ZW5pZSwgxI1vIG5hem5hxI11amUgbW/Fvm7DuiBuZWxpbmVhcml0dSB2IHRvbXRvIHZ6xaVhaHUuCgojIE5lbGluZcOhcm5hIMWhcGVjaWZpa8OhY2lhIG1vZGVsdQoKQWsgaWRlbnRpZmlrdWplbWUgbmVsaW5lw6FybnkgdnrFpWFoIG1lZHppIG5pZWt0b3LDvW1pIHByZW1lbm7DvW1pLCBtw7TFvmVtZSBtb2RlbCB1cHJhdml0IHByaWRhbsOtbSBrdmFkcmF0aWNrw71jaCDEjWxlbm92IChuYXByw61rbGFkIFpeMiBhbGVibyBST0VeMikgYSBza29udHJvbG92YcWlLCDEjWkgemxlcMWhw60gbW9kZWwuIFRha3RvIG1vZGlmaWtvdmFuw70gbW9kZWwgbcO0xb5lIGxlcMWhaWUgemFjaHl0acWlIG5lbGluZcOhcm5lIHZ6b3J5IHYgZMOhdGFjaC4KYGBge3J9CiMgTW9kZWwgcyBrdmFkcmF0aWNrw71taSDEjWxlbm1pIHByZSBaIGEgUk9FCm1vZGVsX25lbGluZWFybnkgPC0gbG0oUk9FIH4gKzEgKyBaICsgUk9BICsgSShaXjIpICsgSShST0FeMiksIGRhdGEgPSB1ZGFqZSkKYGBgCiMgUG9yb3ZuYW5pZSB6w6FrbGFkbsOpaG8gYSBuZWxpbmXDoXJuZWhvIG1vZGVsdQoKUG9yb3Zuw6FtZSB6w6FrbGFkbsO9IG1vZGVsIHMgbmVsaW5lw6FybnltIG1vZGVsb20sIGFieSBzbWUgemlzdGlsaSwgxI1pIHByaWRhbsOtbSBrdmFkcmF0aWNrw71jaCDEjWxlbm92IGRvIG1vZGVsdSBkb3NpYWhuZW1lIGxlcMWhw60gdsO9a29uLiBQb3XFvmlqZW1lIEFOT1ZBIHRlc3QgYSByZXNldCB0ZXN0LCBhYnkgc21lIHBvdHZyZGlsaSwgxI1pIHRyYW5zZm9ybW92YW7DvSBtb2RlbCBsZXDFoWllIHZ5c3ZldMS+dWplIHZhcmlhYmlsaXR1LgpgYGB7cn0KIyBQb3Jvdm5hbmllIHrDoWtsYWRuw6lobyBhIG5lbGluZcOhcm5laG8gbW9kZWx1CmFub3ZhKG1vZGVsX1JPRSwgbW9kZWxfbmVsaW5lYXJueSkKCmBgYApQb3Jvdm7DoXZhbGkgc21lIHrDoWtsYWRuw70gbW9kZWwgcyBuZWxpbmXDoXJueW0gbW9kZWxvbSBwb21vY291IEFOT1ZBLiBWw71zbGVka3kgbmF6bmHEjXVqw7osIMW+ZSBtZWR6aSBvYm9tYSBtb2RlbG1pIG5lZXhpc3R1amUgdsO9em5hbW7DvSByb3pkaWVsLCBwcmV0b8W+ZSBwLWhvZG5vdGEgamUgMC4xMzI5LCDEjW8gamUgbmFkIHByYWhvbSB2w716bmFtbm9zdGkgMC4wNS4gVG8gem5hbWVuw6EsIMW+ZSBwcmlkYW7DrW0ga3ZhZHJhdGlja8O9Y2ggxI1sZW5vdiBwcmUgcHJlbWVubsOpIFogYSBST0Egc2EgbW9kZWwgbmV6bGVwxaFpbCBuYXRvxL5rbywgYWJ5IHNtZSBtb2hsaSB0dnJkacWlLCDFvmUgbmVsaW5lw6FybmEgdHJhbnNmb3Jtw6FjaWEgcG9za3l0dWplIGxlcMWhaWUgdnlzdmV0bGVuaWUgdmFyaWFiaWxpdHkuIFByZXRvIG3DtMW+ZW1lIGtvbsWhdGF0b3ZhxaUsIMW+ZSB6w6FrbGFkbsO9IGxpbmXDoXJueSBtb2RlbCBqZSByb3ZuYWtvIGVmZWt0w612bnkgYWtvIG5lbGluZcOhcm55LgoKIyBPZGhhZHkgV2hpdGUgSGV0ZXJvc2tlZGFzdGljaXR5IENvbnNpc3RlbnQKCkFrIGhldGVyb3NrZWRhc3RpY2l0YSBzcMO0c29idWplIHByb2Jsw6lteSBzIHRlc3RvdmFuw61tIHbDvXpuYW1ub3N0aSwgbcO0xb5lbWUgcG91xb5pxaUgV2hpdGUgaGV0ZXJvc2tlZGFzdGljaXR5LWNvbnNpc3RlbnQgb2RoYWR5LiBUaWV0byBvZGhhZHkgbsOhbSBwb3NreXRuw7ogInJvYnVzdG7DqSIgb2RoYWR5IHByZSDFoXRhbmRhcmRuw6kgY2h5YnksIGt0b3LDqSBzw7ogbWVuZWogY2l0bGl2w6kgbmEgaGV0ZXJvc2tlZGFzdGljaXR1LgpgYGB7cn0KIyBPZGhhZHkgV2hpdGUgSGV0ZXJvc2tlZGFzdGljaXR5IENvbnNpc3RlbnQKbGlicmFyeShzYW5kd2ljaCkKbGlicmFyeShsbXRlc3QpCm1vZGVsX1JPRV9XSCA8LSBjb2VmdGVzdChtb2RlbF9ST0UsIHZjb3YgPSB2Y292SEMobW9kZWxfUk9FKSkKbW9kZWxfUk9FX1dICgpgYGAKIyBWeWhvZG5vdGVuaWUgbW9kZWx1IHBvIHRyYW5zZm9ybcOhY2lpCgpOYWtvbmllYyBtw7TFvmVtZSB2eWhvZG5vdGnFpSwgYWtvIHNhIHpsZXDFoWlsIG7DocWhIG1vZGVsIHBvIG5lbGluZcOhcm55Y2ggdHJhbnNmb3Jtw6FjacOhY2ggcHJlbWVubsO9Y2guIFBvcm92bsOhbWUgdsO9a29uIHRyYW5zZm9ybW92YW7DqWhvIG1vZGVsdSBzIHDDtHZvZG7DvW0gYSBvdmVyw61tZSwgxI1pIHNhIHp2w73FoWlsIHVwcmF2ZW7DvSBrb2VmaWNpZW50IGRldGVybWluw6FjaWUgQWRqdXN0ZWQgUi1zcXVhcmVkLgpgYGB7cn0KIyBWw71zbGVka3kgbW9kZWx1IHBvIHRyYW5zZm9ybcOhY2lpCnN1bW1hcnkobW9kZWxfbmVsaW5lYXJueSkKYW5vdmEobW9kZWxfUk9FLCBtb2RlbF9uZWxpbmVhcm55KQoKYGBgClByaSBwb3Jvdm5hbsOtIHrDoWtsYWRuw6lobyBhIGt2YWRyYXRpY2vDqWhvIG1vZGVsdSBzIHByZW1lbm7DvW1pIFosIFJPQSwgYSBFQklUREFtYXJ6YSBwb21vY291IEFOT1ZBIHNtZSB6aXN0aWxpLCDFvmUga3ZhZHJhdGlja8OpIMSNbGVueSBuZXZlZMO6IGsgcG9kc3RhdG7DqW11IHpsZXDFoWVuaXUgbW9kZWx1LiBQLWhvZG5vdGEgcHJlIEkoWl4yKSBhIEkoUk9BXjIpIGplIHZ5xaHFoWlhIG5lxb4gMC4wNSwgxI1vIG5hem5hxI11amUsIMW+ZSBwcmlkYW7DrW0gdMO9Y2h0byBrdmFkcmF0aWNrw71jaCDEjWxlbm92IG1vZGVsIG5ldnl6ZXLDoSBiecWlIGxlcMWhw60sIG5lxb4gesOha2xhZG7DvSBtb2RlbC4gVGVudG8gdsO9c3R1cCBwb3R2cmR6dWplLCDFvmUgesOha2xhZG7DvSBtb2RlbCBqZSBvcHRpbcOhbG55IGEgbmVtdXPDrW1lIGRvxYggcHJpZMOhdmHFpSBuZWxpbmXDoXJuZSB0cmFuc2Zvcm3DoWNpZS4KCg==