Kruskal-Wallis-Test in R


Hypothese

H0: Es gibt keinen Unterschied zwischen Altersgruppe(0-30/31-55/56+) und der Sportlichkeit gemessen auf dem Laufband in Minuten.

H1: Es gibt einen Unterschied zwischen Altersgruppe(0-30/31-55/56+) und der Sportlichkeit gemessen auf dem Laufband in Minuten.

Voraussetzungen für den Kruskal-Wallis-Test

Die abhängige Variable ist mindestens ordinalskaliert -> ist gegeben

Es liegt eine unabhängige Variable vor, mittels der die zu vergleichenden Gruppen gebildet werden. -> Die Altergruppen sind unabhängig.

Deskriptive Statistiken

Diese “library(dplyr)” muss verwendet werden.

wallis %>%
group_by(Altersgruppe) %>%
  summarize(Anzahl = n(),  Median = median(Sportlichkeit)) %>%
  mutate_if(is.numeric, round, 2)
`summarise()` ungrouping output (override with `.groups` argument)

Die Mediane der Gruppen unterscheiden sich. Die Gruppe “0-30” scheint am sportlichsten zu sein mit einem Wert von 13.5 min (N=10). Die Gruppe “31-55” schaffen 9.2 Min.(N=8) auf dem Laufbahn und am wenigsten sportlich ist die Gruppe der “56+” mit einem Median von 3 (N=11).

Boxplots

boxplot(wallis$Sportlichkeit ~ wallis$Altersgruppe, main = "Boxplots Altersgruppen-Sportlichkeit  ", ylab = "Sportlichkeit gemessen auf dem Laufbahn in Minuten", xlab= "Altergruppe" , col = c("lightgreen", "deepskyblue","tomato"))

Die Mediane der Gruppen unterscheiden sich. Es gibt augenscheinlich keine Ausreisser.

ALTERNATIV

library(ggplot2)
ggplot(wallis, aes(x=Altersgruppe, y=Sportlichkeit, color=Altersgruppe)) + 
geom_violin() + 
geom_boxplot(width=0.2) +
labs(x= "Altersgruppe",y = "Sportlichkeit", title="Boxplots zwischen Altersgruppen" )

Ergebnisse der Kruskal-Wallis-Test

test <- kruskal.test(Sportlichkeit ~ Altersgruppe, data=wallis)
test

    Kruskal-Wallis rank sum test

data:  Sportlichkeit by Altersgruppe
Kruskal-Wallis chi-squared = 21.122, df = 2, p-value = 2.59e-05

Die Tabelle zeigt Unterschiede. Für das Beispiel wird eine Signifikanz von .000 ausgegeben. Also kann davon ausgegangen werden, dass es Unterschiede bezüglich der zentralen Tendenzen der Gruppen gibt (Chi-Quadrat(2) = 21.22,p = .000). Allerdings lässt sich aufgrund dieses Tests nicht bestimmen, welche der drei Gruppen sich signifikant voneinander unterscheiden. Es ist denkbar, dass sich lediglich ein Paar signifikant unterscheidet und zwischen den übrigen keine signifikanten Unterschiede vorliegen. Daher wird ein Post-hoc-Test durchgeführt.


PostHoc <- aov(Sportlichkeit ~ Altersgruppe, data=wallis)
TukeyHSD(PostHoc)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = Sportlichkeit ~ Altersgruppe, data = wallis)

$Altersgruppe
                diff        lwr       upr     p adj
31-55-0-30 -5.000000  -8.225499 -1.774501 0.0019217
56+-0-30   -9.731818 -12.702930 -6.760707 0.0000000
56+-31-55  -4.731818  -7.891484 -1.572153 0.0026789

Der Post-Hoc-Test ergibt, dass sich alle vergleichenden Gruppen signifikant unterscheiden (p < 0.05).

Es gibt einem signifikanten Unterschied zwischen den drei getesteten Gruppen, das heisst, dass jede Altersgruppe einen deutlichen Unterschied in der Sportlichkeit aufweist.

Es können drei unabhängige Gruppen gebildet werden. Eine Generalisierung ist möglich.

Berechnung der Effektstärke

\[r = \Biggl| \frac{z}{\sqrt{n}}\Biggl|\]

mit:

Zstat<-qnorm(test$p.value/2) #ungerichtet 

sprintf("Z-Wert für den H-Test : %.2f", Zstat)
[1] "Z-Wert für den H-Test : -4.21"
daten <- nrow(wallis)
sprintf("Anzahl der Daten: %.f", daten)
[1] "Anzahl der Daten: 29"
eff <- abs(Zstat/sqrt(daten))
sprintf("Effektstärke: %.2f", eff)
[1] "Effektstärke: 0.78"

Zur Beurteilung der Groesse des Effektes dient die Einteilung von Cohen (1992):

\[ \begin{align} \text{Schwacher Effekt: } 0.10 &< ||r|| < 0.30 \\ \text{Schwacher bis mittlerer Effekt: } 0.30 &= ||r|| \\ \text{Mittlerer Effekt: } 0.30 &< ||r|| < 0.50 \\ \text{Mittlerer bis starker Effekt: }0.50 &= ||r|| \\ \text{Starker Effekt: } 0.50 &< ||r|| \end{align} \]

Damit entspricht eine Effektstärke von 0.78 einem starken Effekt.

ALTERNATIVE

\[w = \left|\sqrt\frac{\mathcal{X}^2}{n}\right|\] mit:

anzahl <- nrow(wallis)
chi <- test$statistic

w<- sqrt(chi /anzahl)
 sprintf("Effektstärke: %.2f",w)
[1] "Effektstärke: 0.85"

\[ \begin{align} \text{Schwacher Effekt: } 0.10 &< w \le 0.30 \\ \text{Mittlerer Effekt: } 0.30 &< w \le 0.50 \\ \text{Starker Effekt: } 0.50 &< w \end{align} \]

Damit entspricht eine Effektstärke von 0.85 einem starken Effekt.

Eine Aussage

Der Kruskal-Wallis-Test bestätigt, dass die Sportlichkeit sich durch die Altersgruppe unterscheidet (Chi-Quadrat(2) = 21.22, p = .000).

Der anschliessend durchgeführte Post-hoc-Test (Tukey) zeigt, dass alle Gruppen “0-30” (Median = 13.5, n = 10)und “31-55” (Median = 9.2, n = 8), sowie “56+” (Median = 3.0, n = 9) signifikant unterscheiden (p < .05).

Die Effektstärke (w = .85) zeigt ein starken Effekt, sodass tatsächlich die Altersgruppe einen grossen Effekt auf die Ausdauer, gemessen in Minuten auf dem Laufband, hat.

H0 wird ablehnen.

LS0tDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCiMgQmVyZWNobnVuZyBkZXIgVGVzdHN0YXRpc3RpayANCg0KRGVyIEtydXNrYWwtV2FsbGlzLVRlc3QgYmFzaWVydCBhdWYgZGVyIElkZWUgZGVyIFJhbmdpZXJ1bmcgZGVyIERhdGVuLiBEYXMgaGVpc3N0LCBlcyB3aXJkIG5pY2h0IG1pdCBkZW4gTWVzc3dlcnRlbiBzZWxic3QgZ2VyZWNobmV0LCBzb25kZXJuIGRpZXNlIHdlcmRlbiBkdXJjaCBSw6RuZ2UgZXJzZXR6dCwgbWl0IHdlbGNoZW4gZGVyIGVpZ2VudGxpY2hlIFRlc3QgZHVyY2hnZWbDvGhydCB3aXJkLiBEYW1pdCBiZXJ1aHQgZGllIEJlcmVjaG51bmcgZGVzIFRlc3RzIGF1c3NjaGxpZXNzbGljaCBhdWYgZGVyIE9yZG51bmcgZGVyIERhdGVuIChncsO2c3NlciBhbHMsIGtsZWluZXIgYWxzKS4gRGllIGFic29sdXRlbiBBYnN0w6RuZGUgendpc2NoZW4gZGVuIFdlcnRlbiB3ZXJkZW4gbmljaHQgYmVyw7xja3NpY2h0aWd0Lg0KDQpIaWVyYmVpIHdlcmRlbiBkaWUgTWVzc3dlcnRlIG1pdCBSw6RuZ2VuIHZlcnNlaGVuLiBBbHMgZXJzdGVzIHdlcmRlbiBkaWUgZWluemVsbmVuIE1lc3N3ZXJ0ZSBpaHJlciBHcsO2c2UgDQpuYWNoIGF1ZmdlcmVpaHQuIERpZXMgZ2VzY2hpZWh0IHVuYWJow6RuZ2lnIHZvbiBkZXIgR3J1cHBlbnp1Z2Vow7ZyaWdrZWl0IChTcGFsdGUgIkdydXBwZSIpLiBEYW5hY2ggd2VyZGVuIGRpZSBNZXNzd2VydGUgcmFuZ2llcnQgdW5kIGdldHJlbm50IGbDvHIgamVkZSBHcnVwcGUgYmVuYW5udC4NCg0KRGllc2UgUsOkbmdlIHNpbmQgaW4gQWJiaWxkdW5nIGluIGRlbiBTcGFsdGVuICJSw6RuZ2UgJzAtMzAnIiBiaXMgNTYrJyIgZW50aGFsdGVuLiBLb21tdCBlaW4gTWVzc3dlcnQgbWVocmZhY2ggdm9yIChlbmdsLiAidGllcyIpLCBzbyB3ZXJkZW4gc29nZW5hbm50ZSAidmVyYnVuZGVuZSBSw6RuZ2UiIGdlYmlsZGV0Lg0KDQoNCldlbm4gUmFuZyAxIHVuZCAyIGJlaWRlIGRpZSBnbGVpY2hlbiBNZXNzd2VydGUgYXVmd2Vpc2VuLCB3aXJkIGF1cyBkaWVzZW4gYmVpZGVuIGRlciBNaXR0ZWx3ZXJ0IGdlYmlsZGV0ICgoMSArIDIpLzIgPSAxLjUpIHVuZCBkaWUgUsOkbmdlIDEgdW5kIDIgd2VyZGVuIG5ldSBiZWlkZSBtaXQgZGVtIFJhbmcgMS41IHZlcnNlaGVuLiBEaWVzIGlzdCBpbSB2b3JsaWVnZW5kZW4gQmVpc3BpZWwgZsO8ciBkaWUgUsOkbmdlIDEyIHVuZCAxMyAobWl0dGxlcmVyIFJhbmc6ICgxMisxMykvMiA9IDEyLjUpLCBzb3dpZSAxNCBiaXMgMTYgZGVyIEZhbGwgKG1pdHRsZXJlciBSYW5nOiAoMTQrMTUrMTYpLzMgPSAxNSkuDQoNClNjaGxpZXNzbGljaCB3ZXJkZW4gYXVzIGRpZXNlbiBlcm1pdHRlbHRlbiBSw6RuZ2VuIHNvZ2VuYW5udGUgUmFuZ3N1bW1lbiBnZWJpbGRldCAoIlN1bW1lbiIpLiBIaWVyZsO8ciB3ZXJkZW4gbGVkaWdsaWNoIGRpZSBSw6RuZ2UgZGVyIGpld2VpbGlnZW4gR3J1cHBlIGF1ZnN1bW1pZXJ0LiBEaWVzIGVyZ2lidCBlaW5lIFJhbmdzdW1tZSB2b24gMjM3LjUgZsO8ciBkaWUgR3J1cHBlIDAtMzAgKG4gPSAxMCksIDEyNCBmw7xyIGRpZSBHcnVwcGUgIjMxLTU1IiAobiA9IDgpIHVuZCA3My41IGbDvHIgZGllIEdydXBwZSAiNTYrIiAobiA9IDExKS4gWnVyIEJlcmVjaG51bmcgZGVyIFRlc3RzdGF0aXN0aWsgSCB3ZXJkZW4gZGllc2UgUmFuZ3N1bW1lbiB2ZXJ3ZW5kZXQ6IA0KDQoNCiMjIyBPaG5lIEtvcnJla3R1cg0KDQokJA0KXGJlZ2lue2FsaWdufQ0KSCAmPSBcZnJhY3sxMn17TihOKzEpfVxzdW1ee2t9X3tpPTF9XGZyYWN7Ul4yX2l9e25faX0tMyhOKzEpIA0KXGVuZHthbGlnbn0NCiQkDQoNCg0KDQokJA0KXGJlZ2lue2FsaWdufQ0KSCAmPSBcZnJhY3sxMn17MjkoMjkrMSl9KihcZnJhY3syMzcuNV4yfXsxMH0rXGZyYWN7MTI0XjJ9ezh9K1xmcmFjezczLjVeMn17MTF9KS0zKDI5KzEpID0gMjEuMDggDQpcZW5ke2FsaWdufQ0KJCQgDQoNCm1pdDoNCg0KKiAkUl9pID0kIFJhbmdzdW1tZW4gZsO8ciBqZWRlIEdydXBwZQ0KDQoqICROID0kIEdlc2FtdHN0aWNocHJvYmVuZ3LDtsOfZQ0KDQoqICRuX2kgPSQgR3LDtsOfZSBkZXIgZWluemVsbmVuIEdydXBwZQ0KDQoqICRrID0kIEFuemFobCBkZXIgR3J1cHBlbg0KDQoNCg0KDQojIyMgRnJlaWhlaXRzZ3JhZGUgDQoNCiQkZGYgPSBrIC0xICQkDQoNCiQkZGYgPSAzIC0xID0gMiQkDQoNCm1pdDoNCiogJGsgPSQgQW56YWhsIGRlciBHcnVwcGVuDQoNCg0KDQojIyMgTWl0IEtvcnJla3R1cg0KQmVpIHZlcmJ1bmRlbmVuIFLDpG5nZW4gbXVzcyBkaWUgVGVzdHN0YXRpc3RpayBrb3JyaWdpZXJ0IHdlcmRlbi4gKihXaXJkIHZvbiBkZXIgTWV0aG9kZSBrcnVza2FsLnRlc3QoKSBpYm4gUiAgYXV0b21hdGlzY2ggZ2VtYWNodC4pKg0KDQoNCiQkDQpcYmVnaW57YWxpZ259DQpIX3trb3JyfSAmPSBcZnJhY3tIfXsxLVxmcmFje1xzdW1ee219X3tqPTF9KHReM19qLXRfail9e05eMy1OfX0gXFwNClxlbmR7YWxpZ259DQokJA0KDQoNCkRhIGJlaW0gQmVpc3BpZWwgdmVyYnVuZGVuZSBSw6RuZ2Ugdm9ybGllZ2VuLCBtdXNzIGRpZSBLb3JyZWt0dXJmb3JtZWwgYW5nZXdlbmRldCB3ZXJkZW4uIDxicj4NCkVzIGxpZWdlbiBkcmVpbWFsIHZlcmJ1bmRlbmUgUsOkbmdlIHZvciAoZGFoZXIgbSA9IDQpOg0KUsOkbmdlIDEgJiAyIChkYWhlciB0MSA9IDIpIHNvd2llIDEzICYgMjggKGRhaGVyIHQyID0gMiksIDE2ICYgMiAoZGFoZXIgdDMgPSAyKSB1bmQgMjIgJiAyICYxOCAoZGFoZXIgdDMgPSAzKQ0KPGJyPkRpZXMgZXJnaWJ0OiANCg0KDQoNCiQkDQpcYmVnaW57YWxpZ259DQpIX3trb3JyfSAmPSBcZnJhY3syMS4wOH17MS1cZnJhY3soMl4zLTIpKygyXjMtMikrKDJeMy0yKSsoM14zLTMpfXsyOV4zLTI5fX0gPTIxLjENClxlbmR7YWxpZ259DQokJA0KDQoNCg0KYGBge3J9DQpyb3VuZCgyMS4wOC8oMS0oKDJeMy0yKSsoMl4zLTIpKygyXjMtMikrKDNeMy0zKSkvKDI5XjMtMjkpKSwyKQ0KYGBgDQoNCg0KbWl0Og0KDQoqICRtID0kIEFuemFobCB2ZXJidW5kZW5lIFLDpG5nZQ0KDQoqICR0X2ogPSQgQW56YWhsIFJvaGRhdGVud2VydGUsIGRpZSBpbSAkaiQtdGVuIFJhbmdwbGF0eiBzdGVoZW4NCg0KDQoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRSwgcmVzdWx0cz0naGlkZSd9DQpsaWJyYXJ5KGRwbHlyKQ0KYGBgDQo8YnI+DQo8YnI+DQoNCiMjIyBEZXIgZW1wcmlzY2hlciBXZXJ0DQoNCkRlciBlbXByaXNjaGUgV2VydCBsaWVndCBiZWkgJHwyMS4xfCQuDQo8YnI+DQo8YnI+DQoNCiMjIyBEZXIga3JpdGlzY2ggV2VydA0KDQpEZXIgYmVyZWNobmV0ZSBXZXJ0IG11c3MgbnVuIGF1ZiBTaWduaWZpa2FueiBnZXByw7xmdCB3ZXJkZW4uIERpZSBUZXN0c3RhdGlzdGlrIHZlcmdsZWljaHQgZGVuIGtyaXRpc2NoZW4gV2VydCBkZXIgZHVyY2ggZGllIEZyZWloZWl0c2dyYWRlIGJlc3RpbW10ZW4gQ2hpLVF1YWRyYXQtVmVydGVpbHVuZyBtaXQgZGVtIGVycmVjaG5ldGVuIFdlcnQuIERpZXNlciBrcml0aXNjaGUgV2VydCBrYW5uIFRhYmVsbGVuIGVudG5vbW1lbiB3ZXJkZW4uDQoNCmBgYHtyfQ0KcWNoaXNxKDAuOTc1LGRmPTIpDQpgYGANCg0KDQpEZXIga3JpdGlzY2hlIFdlcnQgbGllZ3QgYmVpIDUuOTkNCg0KDQoNCjxicj4NCjxicj4NCg0KIyMjIFZlcmdsZWljaA0KDQokJHziiJIyMS4xfCA+IDUuOTkg4oaSXHRleHQge0VzIGxpZWd0IGVpbiBzaWcuIFVudGVyc2NoaWVkIHZvci59JCQNCg0KDQoNCkbDvHIgZGFzIHZvcmxpZWdlbmRlIEJlaXNwaWVsIGJldHLDvGdlIGRlciBrcml0aXNjaGUgV2VydCA1Ljk5IGJlaSBkZiA9IDIgdW5kIM6xID0gLjA1LiBJc3QgZGVyIEJldHJhZyBkZXIgVGVzdHN0YXRpc3RpayBow7ZoZXIgYWxzIGRlciBrcml0aXNjaGUgV2VydCwgc28gaXN0IGRlciBVbnRlcnNjaGllZCBzaWduaWZpa2FudC4gRGllcyB3w6RyZSBmw7xyIGRhcyBCZWlzcGllbCBkZXIgRmFsbCAoMjEuMTIyID4gNS45OSkuIEVzIGvDtm5udGUgZGFoZXIgZGF2b24gYXVzZ2VnYW5nZW4gd2VyZGVuLCBkYXNzIHNpY2ggZGllIHplbnRyYWxlbiBUZW5kZW56ZW4gdW50ZXJzY2hlaWRlbiAoQ2hpLVF1YWRyYXQoMikgPSAyMS4xMjIsIHAgPCAuMDUpLiANCg0KDQo8YnI+DQo8YnI+DQoNCiMgIEtydXNrYWwtV2FsbGlzLVRlc3QgaW4gUiANCjxicj4NCg0KIyBIeXBvdGhlc2UgDQpIMDogRXMgZ2lidCBrZWluZW4gVW50ZXJzY2hpZWQgendpc2NoZW4gQWx0ZXJzZ3J1cHBlKDAtMzAvMzEtNTUvNTYrKSB1bmQgZGVyIFNwb3J0bGljaGtlaXQgZ2VtZXNzZW4gYXVmIGRlbSBMYXVmYmFuZCBpbiBNaW51dGVuLiANCg0KDQpIMTogRXMgZ2lidCBlaW5lbiBVbnRlcnNjaGllZCB6d2lzY2hlbiBBbHRlcnNncnVwcGUoMC0zMC8zMS01NS81NispIHVuZCBkZXIgU3BvcnRsaWNoa2VpdCBnZW1lc3NlbiBhdWYgZGVtIExhdWZiYW5kIGluIE1pbnV0ZW4uDQoNCg0KIyBWb3JhdXNzZXR6dW5nZW4gZsO8ciBkZW4gS3J1c2thbC1XYWxsaXMtVGVzdA0KDQpEaWUgYWJow6RuZ2lnZSBWYXJpYWJsZSBpc3QgbWluZGVzdGVucyBvcmRpbmFsc2thbGllcnQgLT4gaXN0IGdlZ2ViZW4NCg0KRXMgbGllZ3QgZWluZSB1bmFiaMOkbmdpZ2UgVmFyaWFibGUgdm9yLCBtaXR0ZWxzIGRlciBkaWUgenUgdmVyZ2xlaWNoZW5kZW4gR3J1cHBlbiBnZWJpbGRldCB3ZXJkZW4uIC0+IERpZSBBbHRlcmdydXBwZW4gc2luZCB1bmFiaMOkbmdpZy4NCg0KDQoNCiMgRGVza3JpcHRpdmUgU3RhdGlzdGlrZW4NCg0KRGllc2UgImxpYnJhcnkoZHBseXIpIiBtdXNzIHZlcndlbmRldCB3ZXJkZW4uDQpgYGB7cn0NCndhbGxpcyAlPiUNCmdyb3VwX2J5KEFsdGVyc2dydXBwZSkgJT4lDQogIHN1bW1hcml6ZShBbnphaGwgPSBuKCksICBNZWRpYW4gPSBtZWRpYW4oU3BvcnRsaWNoa2VpdCkpICU+JQ0KICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIDIpDQpgYGANCg0KRGllIE1lZGlhbmUgZGVyIEdydXBwZW4gdW50ZXJzY2hlaWRlbiBzaWNoLiBEaWUgR3J1cHBlICIwLTMwIiBzY2hlaW50IGFtIHNwb3J0bGljaHN0ZW4genUgc2VpbiBtaXQgZWluZW0gV2VydCB2b24gMTMuNSBtaW4gKE49MTApLiBEaWUgR3J1cHBlICIzMS01NSIgc2NoYWZmZW4gOS4yIE1pbi4oTj04KSBhdWYgZGVtIExhdWZiYWhuIHVuZCBhbSB3ZW5pZ3N0ZW4gc3BvcnRsaWNoIGlzdCBkaWUgR3J1cHBlIGRlciAiNTYrIiBtaXQgZWluZW0gTWVkaWFuIHZvbiAzIChOPTExKS4NCg0KDQoNCg0KIyMgQm94cGxvdHMNCg0KDQpgYGB7cn0NCmJveHBsb3Qod2FsbGlzJFNwb3J0bGljaGtlaXQgfiB3YWxsaXMkQWx0ZXJzZ3J1cHBlLCBtYWluID0gIkJveHBsb3RzIEFsdGVyc2dydXBwZW4tU3BvcnRsaWNoa2VpdCAgIiwgeWxhYiA9ICJTcG9ydGxpY2hrZWl0IGdlbWVzc2VuIGF1ZiBkZW0gTGF1ZmJhaG4gaW4gTWludXRlbiIsIHhsYWI9ICJBbHRlcmdydXBwZSIgLCBjb2wgPSBjKCJsaWdodGdyZWVuIiwgImRlZXBza3libHVlIiwidG9tYXRvIikpDQoNCmBgYA0KDQpEaWUgTWVkaWFuZSBkZXIgR3J1cHBlbiB1bnRlcnNjaGVpZGVuIHNpY2guIEVzIGdpYnQgYXVnZW5zY2hlaW5saWNoIGtlaW5lIEF1c3JlaXNzZXIuDQoNCg0KIyBBTFRFUk5BVElWDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3Qod2FsbGlzLCBhZXMoeD1BbHRlcnNncnVwcGUsIHk9U3BvcnRsaWNoa2VpdCwgY29sb3I9QWx0ZXJzZ3J1cHBlKSkgKyANCmdlb21fdmlvbGluKCkgKyANCmdlb21fYm94cGxvdCh3aWR0aD0wLjIpICsNCmxhYnMoeD0gIkFsdGVyc2dydXBwZSIseSA9ICJTcG9ydGxpY2hrZWl0IiwgdGl0bGU9IkJveHBsb3RzIHp3aXNjaGVuIEFsdGVyc2dydXBwZW4iICkNCmBgYA0KDQoNCiMgRXJnZWJuaXNzZSBkZXIgS3J1c2thbC1XYWxsaXMtVGVzdA0KDQoNCmBgYHtyfQ0KdGVzdCA8LSBrcnVza2FsLnRlc3QoU3BvcnRsaWNoa2VpdCB+IEFsdGVyc2dydXBwZSwgZGF0YT13YWxsaXMpDQp0ZXN0DQpgYGANCg0KRGllIFRhYmVsbGUgemVpZ3QgVW50ZXJzY2hpZWRlLiBGw7xyIGRhcyBCZWlzcGllbCB3aXJkIGVpbmUgU2lnbmlmaWthbnogdm9uIC4wMDAgYXVzZ2VnZWJlbi4gQWxzbyBrYW5uIGRhdm9uIGF1c2dlZ2FuZ2VuIHdlcmRlbiwgZGFzcyBlcyBVbnRlcnNjaGllZGUgYmV6w7xnbGljaCBkZXIgemVudHJhbGVuIFRlbmRlbnplbiBkZXIgR3J1cHBlbiBnaWJ0IChDaGktUXVhZHJhdCgyKSA9IDIxLjIyLHAgPSAuMDAwKS4gQWxsZXJkaW5ncyBsw6Rzc3Qgc2ljaCBhdWZncnVuZCBkaWVzZXMgVGVzdHMgbmljaHQgYmVzdGltbWVuLCB3ZWxjaGUgZGVyIGRyZWkgR3J1cHBlbiBzaWNoIHNpZ25pZmlrYW50IHZvbmVpbmFuZGVyIHVudGVyc2NoZWlkZW4uIEVzIGlzdCBkZW5rYmFyLCBkYXNzIHNpY2ggbGVkaWdsaWNoIGVpbiBQYWFyIHNpZ25pZmlrYW50IHVudGVyc2NoZWlkZXQgdW5kIHp3aXNjaGVuIGRlbiDDvGJyaWdlbiBrZWluZSBzaWduaWZpa2FudGVuIFVudGVyc2NoaWVkZSB2b3JsaWVnZW4uIERhaGVyIHdpcmQgZWluIFBvc3QtaG9jLVRlc3QgZHVyY2hnZWbDvGhydC4NCg0KDQpgYGB7cn0NCg0KUG9zdEhvYyA8LSBhb3YoU3BvcnRsaWNoa2VpdCB+IEFsdGVyc2dydXBwZSwgZGF0YT13YWxsaXMpDQpUdWtleUhTRChQb3N0SG9jKQ0KDQpgYGANCg0KDQpEZXIgUG9zdC1Ib2MtVGVzdCBlcmdpYnQsIGRhc3Mgc2ljaCBhbGxlIHZlcmdsZWljaGVuZGVuIEdydXBwZW4gc2lnbmlmaWthbnQgdW50ZXJzY2hlaWRlbiAocCA8IDAuMDUpLiANCg0KRXMgZ2lidCBlaW5lbSBzaWduaWZpa2FudGVuIFVudGVyc2NoaWVkIHp3aXNjaGVuIGRlbiBkcmVpIGdldGVzdGV0ZW4gR3J1cHBlbiwgZGFzIGhlaXNzdCwgZGFzcyBqZWRlIEFsdGVyc2dydXBwZSBlaW5lbiBkZXV0bGljaGVuIFVudGVyc2NoaWVkIGluIGRlciBTcG9ydGxpY2hrZWl0IGF1ZndlaXN0Lg0KDQpFcyBrw7ZubmVuIGRyZWkgdW5hYmjDpG5naWdlIEdydXBwZW4gZ2ViaWxkZXQgd2VyZGVuLiBFaW5lIEdlbmVyYWxpc2llcnVuZyBpc3QgbcO2Z2xpY2guDQoNCg0KIyBCZXJlY2hudW5nIGRlciBFZmZla3RzdMOkcmtlDQoNCiQkciA9IFxCaWdnbHwgXGZyYWN7en17XHNxcnR7bn19XEJpZ2dsfCQkDQoNCm1pdDoNCg0KKiAkeiA9JCB6LXRyYW5zZm9ybWllcnRlcyAkcCQgZGVzIENoaS1RdWFkcmF0LVRlc3RzIG5hY2ggS3J1c2thbC1XYWxsaXMuDQoNCiogJG4gPSQgR3LDtsOfZSBkZXIgR2VzYW10c3RpY2hwcm9iZQ0KDQoNCg0KDQoNCmBgYHtyfQ0KWnN0YXQ8LXFub3JtKHRlc3QkcC52YWx1ZS8yKSAjdW5nZXJpY2h0ZXQgDQoNCnNwcmludGYoIlotV2VydCBmw7xyIGRlbiBILVRlc3QgOiAlLjJmIiwgWnN0YXQpDQoNCmRhdGVuIDwtIG5yb3cod2FsbGlzKQ0Kc3ByaW50ZigiQW56YWhsIGRlciBEYXRlbjogJS5mIiwgZGF0ZW4pDQoNCg0KZWZmIDwtIGFicyhac3RhdC9zcXJ0KGRhdGVuKSkNCnNwcmludGYoIkVmZmVrdHN0w6Rya2U6ICUuMmYiLCBlZmYpDQoNCmBgYA0KDQoNClp1ciBCZXVydGVpbHVuZyBkZXIgR3JvZXNzZSBkZXMgRWZmZWt0ZXMgZGllbnQgZGllIEVpbnRlaWx1bmcgdm9uIENvaGVuICgxOTkyKToNCg0KJCQNClxiZWdpbnthbGlnbn0NClx0ZXh0e1NjaHdhY2hlciBFZmZla3Q6IH0gMC4xMCAmPCB8fHJ8fCA8IDAuMzAgICAgICAgICAgICAgXFwNClx0ZXh0e1NjaHdhY2hlciBiaXMgbWl0dGxlcmVyIEVmZmVrdDogfSAwLjMwICY9IHx8cnx8ICAgICAgXFwNClx0ZXh0e01pdHRsZXJlciBFZmZla3Q6IH0gMC4zMCAmPCB8fHJ8fCA8IDAuNTAgICAgICAgICAgICAgXFwNClx0ZXh0e01pdHRsZXJlciBiaXMgc3RhcmtlciBFZmZla3Q6IH0wLjUwICY9IHx8cnx8ICAgICAgICAgXFwNClx0ZXh0e1N0YXJrZXIgRWZmZWt0OiB9IDAuNTAgJjwgfHxyfHwgICAgICAgIA0KXGVuZHthbGlnbn0NCiQkDQoNCkRhbWl0IGVudHNwcmljaHQgZWluZSBFZmZla3RzdMOkcmtlIHZvbiAwLjc4IGVpbmVtIHN0YXJrZW4gRWZmZWt0Lg0KDQojIEFMVEVSTkFUSVZFDQoNCg0KJCR3ID0gXGxlZnR8XHNxcnRcZnJhY3tcbWF0aGNhbHtYfV4yfXtufVxyaWdodHwkJA0KbWl0Og0KDQoqICRcY2hpXjIgPSRDaGktUXVhZHJhdC1XZXJ0IG5hY2ggS3J1c2thbC1XYWxsaXMuDQoNCiogJG4gPSQgR3LDtsOfZSBkZXIgR2VzYW10c3RpY2hwcm9iZQ0KDQoNCg0KYGBge3J9DQphbnphaGwgPC0gbnJvdyh3YWxsaXMpDQpjaGkgPC0gdGVzdCRzdGF0aXN0aWMNCg0KdzwtIHNxcnQoY2hpIC9hbnphaGwpDQogc3ByaW50ZigiRWZmZWt0c3TDpHJrZTogJS4yZiIsdykNCg0KYGBgDQoNCiQkDQpcYmVnaW57YWxpZ259DQpcdGV4dHtTY2h3YWNoZXIgRWZmZWt0OiB9IDAuMTAgJjwgdyBcbGUgMC4zMCAgICAgICAgICAgICBcXA0KXHRleHR7TWl0dGxlcmVyIEVmZmVrdDogfSAwLjMwICY8IHcgXGxlIDAuNTAgICAgICAgICAgICAgXFwNClx0ZXh0e1N0YXJrZXIgRWZmZWt0OiB9IDAuNTAgJjwgdyAgICAgICAgDQpcZW5ke2FsaWdufQ0KJCQNCg0KDQpEYW1pdCBlbnRzcHJpY2h0IGVpbmUgRWZmZWt0c3TDpHJrZSB2b24gMC44NSBlaW5lbSBzdGFya2VuIEVmZmVrdC4NCg0KDQojIEVpbmUgQXVzc2FnZQ0KDQpEZXIgS3J1c2thbC1XYWxsaXMtVGVzdCBiZXN0w6R0aWd0LCBkYXNzIGRpZSBTcG9ydGxpY2hrZWl0IHNpY2ggZHVyY2ggZGllIEFsdGVyc2dydXBwZSB1bnRlcnNjaGVpZGV0IChDaGktUXVhZHJhdCgyKSA9IDIxLjIyLCBwID0gLjAwMCkuIA0KDQpEZXIgYW5zY2hsaWVzc2VuZCBkdXJjaGdlZsO8aHJ0ZSBQb3N0LWhvYy1UZXN0IChUdWtleSkgemVpZ3QsIGRhc3MgYWxsZSBHcnVwcGVuICIwLTMwIiAoTWVkaWFuID0gMTMuNSwgbiA9IDEwKXVuZCAiMzEtNTUiIChNZWRpYW4gPSA5LjIsIG4gPSA4KSwgc293aWUgIjU2KyIgKE1lZGlhbiA9IDMuMCwgbiA9IDkpIHNpZ25pZmlrYW50IHVudGVyc2NoZWlkZW4gKHAgPCAuMDUpLiANCg0KRGllIEVmZmVrdHN0w6Rya2UgKHcgPSAuODUpIHplaWd0IGVpbiBzdGFya2VuIEVmZmVrdCwgc29kYXNzIHRhdHPDpGNobGljaCBkaWUgQWx0ZXJzZ3J1cHBlIGVpbmVuIGdyb3NzZW4gRWZmZWt0IGF1ZiBkaWUgQXVzZGF1ZXIsIGdlbWVzc2VuIGluIE1pbnV0ZW4gYXVmIGRlbSBMYXVmYmFuZCwgaGF0Lg0KDQpIMCB3aXJkIGFibGVobmVuLg==