Hypothese

H1: Es gibt einen Zusammmenhang zwischen der Studierbereitschaft vor dem Auslandsjahr und der Studierbereitschaft nach dem Auslandsjahr.

H0: Es gibt keinen Zusammmenhang zwischen der Studierbereitschaft vor dem Auslandsjahr und der Studierbereitschaft nach dem Auslandsjahr.

Alternativ

H0: Beide Variablen sind in der Grundgesamtheit unabhängig voneinander.

H1: Beide Variablen sind in der Grundgesamtheit abhängig voneinander

Vorausetzungen

Die Variablen sind kategorial (nominal- oder ordinalskaliert)

Datensatzgröße

  1. Die Stichprobe ist > 50.

  2. Ist dies nicht der Fall, so wird bei einer Stichprobe kleiner als 20 der exakte Test nach Fisher verwendet

  3. bei einer Stichprobengröße zwischen 20 und 50 die Korrektur nach Yates.

Die erwarteten Zellhäufigkeiten sind > 5. Ist dies nicht der Fall, so wird der exakte Test nach Fisher verwendet.

Die Freiheitsgrade des Chi-Quadrat-Tests sind größer als 1. Ist dies nicht der Fall, so wird die Korrektur nach Yates verwendet.

Datensatz

head(chi, 5)

Balkendiagramm

counts<- table(Vorher= chi$vorher, Nachher = chi$nachher)

barplot(counts, main="Balkendiagramm zur Studierbereitschaft",
col=c("deepskyblue","tomato"),
ylab="Anzahl Personen",xlab = "Studierbereitschaft",
beside=F,

sub = "Nachher",
#names.arg =c("VorH-NachH","VorN-NachH","VorH-NachN", "VorN-NachN"),
legend = rownames(counts),
args.legend = list(x = "topright", title="vorher"))

Sankey Diagram

Dieses Sankey Diagramme bietet sich an bei “vorher” - “nachher” - Darstellungen.

#install.packages("networkD3")
library(networkD3)
library(dplyr)


links <- data.frame(
source=c("hoch_v","hoch_v", "niedrig_v", "niedrig_v"), 
target=c("hoch_n","niedrig_n","hoch_n","niedrig_n"), 
value=c(6,9, 25, 5)
)


# From these flows we need to create a node data frame: it lists every entities involved in the flow
nodes <- data.frame(
name=c(as.character(links$source), 
as.character(links$target)) %>% unique()
)

# With networkD3, connection must be provided using id, not using real name like in the links dataframe.. So we need to reformat it.
links$IDsource <- match(links$source, nodes$name)-1 
links$IDtarget <- match(links$target, nodes$name)-1

# Make the Network
p <- sankeyNetwork(Links = links, Nodes = nodes,
Source = "IDsource", 
Target = "IDtarget",
Value = "value", 
NodeID = "name", 
iterations = 0,
nodeWidth=40, fontSize=13, 
sinksRight=TRUE)
p

Kreuztabelle und beobachteten Werte

counts<- table( Vorher=chi$vorher, Nachher = chi$nachher)
head(counts)
         Nachher
Vorher    hoch niedrig
  hoch       6       9
  niedrig   25       5

Die Tabelle wurde angelegt.

Erwarteten Werte

ch <- chisq.test(counts, correct = F)
round(ch$expected,2)
         Nachher
Vorher     hoch niedrig
  hoch    10.33    4.67
  niedrig 20.67    9.33

Die beobachteten und die erwarteten Werte wurden verglichen. Es zeigen sich für das Beispiel einen Unterschiede. Ob es jedoch signifikant sind, wird mittels Chi-Quadrat-Test geprüft.

Ergebnis zum \(\chi^2\) und Prüfung der Signifikanz

Berechnung der Freiheitsgrade

\[df= (k_1 -1)\cdot (k_2 -1)\] mit

\(k_1\) = die Faktorstufen der ersten Variable
\(k_2\) = die Faktorstufen der zweiten Variable

\[df= (2 -1)\cdot (2 -1) = 1\]

Fall Fisher Yates
Fall 1 - -
Fall 2 - +
Fall 3 + -
Fall 4 + +

Fall 1

\[\chi^2 = \sum^I_{i=1}\sum^J_{j=1}\frac{(f_{ij}-f^{'}_{ij})^2}{f^{'}_{ij}} =\frac{(6-10.33)^2}{10.33}+ \frac{(25-20.67)^2}{20.67}+\frac{(9-4.67)^2}{4.67}+\frac{(5-9.33)^2}{9.33}=8.7\]

round(((6-10.33)^2/10.33)+((25-20.67)^2/20.67)+((9-4.67)^2/4.67)+((5-9.33)^2/9.33), 1)
[1] 8.7

keine Anpassung erforderlich


ch <- chisq.test(counts, correct = F) # correct = F ohne Anpassungen -  die "normale" Formel
ch 

    Pearson's Chi-squared test

data:  counts
X-squared = 8.7615, df = 1, p-value = 0.003077

Bericht:(Chi-Quadrat(1) = 8.7615, p = .003077)

Fall 2

Anpassung: Korrektur nach Yates

\[\chi^2 = \sum^I_{i=1}\sum^J_{j=1}\frac{(\Bigl| f_{ij}-f^{'}_{ij}\Bigl| -0.5)^2}{f^{'}_{ij}} = \\ \frac{(\Bigl| (6-10.33)\Bigl| -0.5)^2}{10.33} +\frac{(\Bigl| (25-20.67)\Bigl| -0.5)^2}{20.67} + \\ \frac{(\Bigl| ((9-4.67)\Bigl| -0.5)^2}{4.67} +\frac{(\Bigl| (5-9.33)\Bigl| -0.5)^2}{9.33} = 6.8\]

round(
    (((abs(6-10.33))-0.5)^2/10.33)+
    (((abs(25-20.67))-0.5)^2/20.67)+
    (((abs(9-4.67))-0.5)^2/4.67)+
    (((abs(5-9.33))-0.5)^2/9.33)
,2)
[1] 6.84
ch <- chisq.test(counts, correct = TRUE) # Die Anpassung nach Yates - correct = TRUE - Die Formel wird um -0.5 erweitert
ch 

    Pearson's Chi-squared test with Yates' continuity correction

data:  counts
X-squared = 6.8563, df = 1, p-value = 0.008833

Bericht:(Chi-Quadrat(1) = 6.8563, p = .008833)

Fall 3

Anpassung: Fisher’s Exact Test

ch <- chisq.test(counts, correct = F)
ch 

    Pearson's Chi-squared test

data:  counts
X-squared = 8.7615, df = 1, p-value = 0.003077
fisher.test(counts)

    Fisher's Exact Test for Count Data

data:  counts
p-value = 0.005673
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
 0.02562454 0.66353638
sample estimates:
odds ratio 
 0.1409759 

Bericht:(Chi-Quadrat(1) = 8.7615, p = .005673)

In dieser Übung ist es notwending nach Fisher und nach Yates zu korregieren. Daher wird folgender Code verwendet.

Fall 4

Anpassung: Fisher’s Exact Test & Anpassung nach Yates

3) bei einer Stichprobengröße zwischen 20 und 50 die Korrektur nach Yates.

*Die erwarteten Zellhäufigkeiten sind > 5. Ist dies nicht der Fall, so wird der exakte Test nach Fisher verwendet.**

Die Freiheitsgrade des Chi-Quadrat-Tests sind größer als 1. Ist dies nicht der Fall, so wird die Korrektur nach Yates verwendet.


ch <- chisq.test(counts, correct = TRUE)
ch

    Pearson's Chi-squared test with Yates' continuity correction

data:  counts
X-squared = 6.8563, df = 1, p-value = 0.008833
a <- fisher.test(counts)

a

    Fisher's Exact Test for Count Data

data:  counts
p-value = 0.005673
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
 0.02562454 0.66353638
sample estimates:
odds ratio 
 0.1409759 

Hinweise: Da in dieser Übungsaufgabe der exakte Test nach Fisher verwendet werden muss, wird nicht folgender p-value = 0.008833 zitiert, sondern Fisher mit einem p-value von 0.005673.

Der Test bestätigt, dass ein Zusammenhang zwischen Studierbereitschaft vor dem Auslandsjahr und die Studierbereitschaft nach dem Auslandsjahr besteht (Chi-Quadrat(1) = 6.8563, p = .005673).

Alternative Darstellung mit gmodels

library(gmodels) 

Kreuztabelle2a <- CrossTable(x =chi$vorher, y = chi$nachher, digits = 1, format = "SPSS", chisq = TRUE) 
Warning in chisq.test(t, correct = TRUE, ...) :
  Chi-squared approximation may be incorrect
Warning in chisq.test(t, correct = FALSE, ...) :
  Chi-squared approximation may be incorrect

   Cell Contents
|-------------------------|
|                   Count |
| Chi-square contribution |
|             Row Percent |
|          Column Percent |
|           Total Percent |
|-------------------------|

Total Observations in Table:  45 

             | chi$nachher 
  chi$vorher |     hoch  |  niedrig  | Row Total | 
-------------|-----------|-----------|-----------|
        hoch |        6  |        9  |       15  | 
             |      1.8  |      4.0  |           | 
             |     40.0% |     60.0% |     33.3% | 
             |     19.4% |     64.3% |           | 
             |     13.3% |     20.0% |           | 
-------------|-----------|-----------|-----------|
     niedrig |       25  |        5  |       30  | 
             |      0.9  |      2.0  |           | 
             |     83.3% |     16.7% |     66.7% | 
             |     80.6% |     35.7% |           | 
             |     55.6% |     11.1% |           | 
-------------|-----------|-----------|-----------|
Column Total |       31  |       14  |       45  | 
             |     68.9% |     31.1% |           | 
-------------|-----------|-----------|-----------|

 
Statistics for All Table Factors


Pearson's Chi-squared test 
------------------------------------------------------------
Chi^2 =  8.761521     d.f. =  1     p =  0.003076524 

Pearson's Chi-squared test with Yates' continuity correction 
------------------------------------------------------------
Chi^2 =  6.856279     d.f. =  1     p =  0.008833031 

 
       Minimum expected frequency: 4.666667 
Cells with Expected Frequency < 5: 1 of 4 (25%)

Cramers V

\[ Cramers\phantom{.}V = \sqrt{\frac{\chi^2}{n\cdot min[k_1-1,k_2-1]}} \]

** Die Zahl \(2\) steht für \(2\times2\) Design.**

\[\mbox{Cramers V} = \sqrt {\frac{\chi^2}{n \cdot (2-1)}}\]

\[\mbox{Cramers V} = \sqrt {\frac{6.86}{45 \cdot (2-1)}} = 0.39\]

anzahl <- nrow(chi)

sprintf("Der Datensatz hat %d Zeilen.",anzahl)
[1] "Der Datensatz hat 45 Zeilen."
sprintf("Das Chi-Quadrat liegt bei %.2f.",ch$statistic)
[1] "Das Chi-Quadrat liegt bei 6.86."
cramersV <- sqrt(( ch$statistic)/(anzahl*(2-1)))
sprintf("Die Effektstärke liegt bei %.2f.",cramersV)
[1] "Die Effektstärke liegt bei 0.39."

Cramer s V ist immer positiv -> keine Aussage über die Richtung des Zusammenhangs

\[ \begin{align} \text{Schwacher Effekt: } 0.1 &< ||Cramers V|| \leq 0.3 \\ \text{Schwacher bis mittlerer Effekt: }0.3 &< ||Cramers V|| \leq 0.4 \\ \text{Mittlerer Effekt: } 0.4 &< ||Cramers V|| < 0.5 \\ \text{Mittlerer bis starker Effekt: }0.5 &= ||Cramers V|| \\ \text{Starker Effekt: } 0.5 &< ||Cramers V|| \end{align}\]

Es zeigt sich für unsere Auswertung, dass ein mittlerer Zusammenhang besteht.

Aussage

Die Studierbereitschaft vor dem Auslandsjahr und die Studierbereitschaft nach dem Auslandsjahr stehen in einem Zusammenhang (Chi-Quadrat(1) = 6.8563, p = .005673, n = 45). Der Zusammenhang ist mittelstark (Cramers V = .4). Damit kann die H0 verworfen werden.

Alternative

Es kann davon ausgegangen werden, dass sich die erwarteten und die beobachteten Häufigkeiten signifikant unterscheiden (Chi-Quadrat(1) = 6.8563, p = .005673, n = 45).Der Zusammenhang ist mittelstark (Cramers V = .4). Damit kann die H0 verworfen werden.

LS0tDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCg0KIyBIeXBvdGhlc2UgDQoNCkgxOiBFcyBnaWJ0IGVpbmVuIFp1c2FtbW1lbmhhbmcgendpc2NoZW4gZGVyIFN0dWRpZXJiZXJlaXRzY2hhZnQgdm9yIGRlbSBBdXNsYW5kc2phaHIgdW5kIGRlciBTdHVkaWVyYmVyZWl0c2NoYWZ0IG5hY2ggZGVtIEF1c2xhbmRzamFoci4gPGJyPiANCg0KSDA6IEVzIGdpYnQga2VpbmVuIFp1c2FtbW1lbmhhbmcgendpc2NoZW4gZGVyIFN0dWRpZXJiZXJlaXRzY2hhZnQgdm9yIGRlbSBBdXNsYW5kc2phaHIgdW5kIGRlciBTdHVkaWVyYmVyZWl0c2NoYWZ0IG5hY2ggZGVtIEF1c2xhbmRzamFoci48YnI+DQoNCg0KIyMjIEFsdGVybmF0aXYgDQoNCg0KSDA6IEJlaWRlIFZhcmlhYmxlbiBzaW5kIGluIGRlciBHcnVuZGdlc2FtdGhlaXQgdW5hYmjDpG5naWcgdm9uZWluYW5kZXIuIA0KDQpIMTogQmVpZGUgVmFyaWFibGVuIHNpbmQgaW4gZGVyIEdydW5kZ2VzYW10aGVpdCBhYmjDpG5naWcgdm9uZWluYW5kZXINCg0KIyBWb3JhdXNldHp1bmdlbiANCg0KRGllIFZhcmlhYmxlbiBzaW5kIGthdGVnb3JpYWwgKG5vbWluYWwtIG9kZXIgb3JkaW5hbHNrYWxpZXJ0KQ0KDQoNCioqRGF0ZW5zYXR6Z3LDtsOfZSoqIDxicj4NCg0KICAxKSBEaWUgU3RpY2hwcm9iZSBpc3QgPiA1MC4NCg0KICAyKSBJc3QgZGllcyBuaWNodCBkZXIgRmFsbCwgc28gd2lyZCBiZWkgZWluZXIgU3RpY2hwcm9iZSBrbGVpbmVyIGFscyAyMCAqKmRlciBleGFrdGUgVGVzdCBuYWNoIEZpc2hlcioqIHZlcndlbmRldA0KDQogIDMpIGJlaSBlaW5lciBTdGljaHByb2Jlbmdyw7bDn2Ugendpc2NoZW4gMjAgdW5kIDUwIGRpZSAqKktvcnJla3R1ciBuYWNoIFlhdGVzKiouDQoNCg0KRGllIGVyd2FydGV0ZW4gWmVsbGjDpHVmaWdrZWl0ZW4gc2luZCA+IDUuIElzdCBkaWVzIG5pY2h0IGRlciBGYWxsLCBzbyB3aXJkICoqZGVyIGV4YWt0ZSBUZXN0IG5hY2ggRmlzaGVyKiogdmVyd2VuZGV0Lg0KDQpEaWUgRnJlaWhlaXRzZ3JhZGUgZGVzIENoaS1RdWFkcmF0LVRlc3RzIHNpbmQgZ3LDtsOfZXIgYWxzIDEuIElzdCBkaWVzIG5pY2h0IGRlciBGYWxsLCBzbyB3aXJkIGRpZSAqKktvcnJla3R1ciBuYWNoIFlhdGVzKiogdmVyd2VuZGV0Lg0KDQoNCiMgRGF0ZW5zYXR6DQoNCmBgYHtyfQ0KaGVhZChjaGksIDUpDQpgYGANCg0KDQojIEJhbGtlbmRpYWdyYW1tDQoNCg0KYGBge3J9DQpjb3VudHM8LSB0YWJsZShWb3JoZXI9IGNoaSR2b3JoZXIsIE5hY2hoZXIgPSBjaGkkbmFjaGhlcikNCg0KYmFycGxvdChjb3VudHMsIG1haW49IkJhbGtlbmRpYWdyYW1tIHp1ciBTdHVkaWVyYmVyZWl0c2NoYWZ0IiwNCmNvbD1jKCJkZWVwc2t5Ymx1ZSIsInRvbWF0byIpLA0KeWxhYj0iQW56YWhsIFBlcnNvbmVuIix4bGFiID0gIlN0dWRpZXJiZXJlaXRzY2hhZnQiLA0KYmVzaWRlPUYsDQoNCnN1YiA9ICJOYWNoaGVyIiwNCiNuYW1lcy5hcmcgPWMoIlZvckgtTmFjaEgiLCJWb3JOLU5hY2hIIiwiVm9ySC1OYWNoTiIsICJWb3JOLU5hY2hOIiksDQpsZWdlbmQgPSByb3duYW1lcyhjb3VudHMpLA0KYXJncy5sZWdlbmQgPSBsaXN0KHggPSAidG9wcmlnaHQiLCB0aXRsZT0idm9yaGVyIikpDQpgYGANCg0KIyMjIFNhbmtleSBEaWFncmFtDQoNCkRpZXNlcyBTYW5rZXkgRGlhZ3JhbW1lIGJpZXRldCBzaWNoIGFuIGJlaSAidm9yaGVyIiAtICJuYWNoaGVyIiAtIERhcnN0ZWxsdW5nZW4uDQoNCg0KDQpgYGB7cn0NCiNpbnN0YWxsLnBhY2thZ2VzKCJuZXR3b3JrRDMiKQ0KbGlicmFyeShuZXR3b3JrRDMpDQpsaWJyYXJ5KGRwbHlyKQ0KDQoNCmxpbmtzIDwtIGRhdGEuZnJhbWUoDQpzb3VyY2U9YygiaG9jaF92IiwiaG9jaF92IiwgIm5pZWRyaWdfdiIsICJuaWVkcmlnX3YiKSwgDQp0YXJnZXQ9YygiaG9jaF9uIiwibmllZHJpZ19uIiwiaG9jaF9uIiwibmllZHJpZ19uIiksIA0KdmFsdWU9Yyg2LDksIDI1LCA1KQ0KKQ0KDQoNCiMgRnJvbSB0aGVzZSBmbG93cyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5vZGUgZGF0YSBmcmFtZTogaXQgbGlzdHMgZXZlcnkgZW50aXRpZXMgaW52b2x2ZWQgaW4gdGhlIGZsb3cNCm5vZGVzIDwtIGRhdGEuZnJhbWUoDQpuYW1lPWMoYXMuY2hhcmFjdGVyKGxpbmtzJHNvdXJjZSksIA0KYXMuY2hhcmFjdGVyKGxpbmtzJHRhcmdldCkpICU+JSB1bmlxdWUoKQ0KKQ0KDQojIFdpdGggbmV0d29ya0QzLCBjb25uZWN0aW9uIG11c3QgYmUgcHJvdmlkZWQgdXNpbmcgaWQsIG5vdCB1c2luZyByZWFsIG5hbWUgbGlrZSBpbiB0aGUgbGlua3MgZGF0YWZyYW1lLi4gU28gd2UgbmVlZCB0byByZWZvcm1hdCBpdC4NCmxpbmtzJElEc291cmNlIDwtIG1hdGNoKGxpbmtzJHNvdXJjZSwgbm9kZXMkbmFtZSktMSANCmxpbmtzJElEdGFyZ2V0IDwtIG1hdGNoKGxpbmtzJHRhcmdldCwgbm9kZXMkbmFtZSktMQ0KDQojIE1ha2UgdGhlIE5ldHdvcmsNCnAgPC0gc2Fua2V5TmV0d29yayhMaW5rcyA9IGxpbmtzLCBOb2RlcyA9IG5vZGVzLA0KU291cmNlID0gIklEc291cmNlIiwgDQpUYXJnZXQgPSAiSUR0YXJnZXQiLA0KVmFsdWUgPSAidmFsdWUiLCANCk5vZGVJRCA9ICJuYW1lIiwgDQppdGVyYXRpb25zID0gMCwNCm5vZGVXaWR0aD00MCwgZm9udFNpemU9MTMsIA0Kc2lua3NSaWdodD1UUlVFKQ0KcA0KYGBgDQoNCiMgS3JldXp0YWJlbGxlIHVuZCBiZW9iYWNodGV0ZW4gV2VydGUNCg0KYGBge3J9DQpjb3VudHM8LSB0YWJsZSggVm9yaGVyPWNoaSR2b3JoZXIsIE5hY2hoZXIgPSBjaGkkbmFjaGhlcikNCmhlYWQoY291bnRzKQ0KYGBgDQoNCkRpZSBUYWJlbGxlIHd1cmRlIGFuZ2VsZWd0Lg0KDQoNCiMgRXJ3YXJ0ZXRlbiBXZXJ0ZSANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9DQpjaCA8LSBjaGlzcS50ZXN0KGNvdW50cywgY29ycmVjdCA9IEYpDQpyb3VuZChjaCRleHBlY3RlZCwyKQ0KDQpgYGANCg0KDQpEaWUgYmVvYmFjaHRldGVuIHVuZCBkaWUgZXJ3YXJ0ZXRlbiBXZXJ0ZSAgd3VyZGVuIHZlcmdsaWNoZW4uIEVzIHplaWdlbiBzaWNoIGbDvHIgZGFzIEJlaXNwaWVsIGVpbmVuIFVudGVyc2NoaWVkZS4NCk9iIGVzIGplZG9jaCBzaWduaWZpa2FudCBzaW5kLCB3aXJkIG1pdHRlbHMgQ2hpLVF1YWRyYXQtVGVzdCBnZXByw7xmdC4gDQoNCg0KIyBFcmdlYm5pcyB6dW0gJFxjaGleMiQgdW5kIFByw7xmdW5nIGRlciBTaWduaWZpa2Fueg0KDQoNCg0KIyMgQmVyZWNobnVuZyBkZXIgRnJlaWhlaXRzZ3JhZGUNCg0KDQokJGRmPSAoa18xIC0xKVxjZG90IChrXzIgLTEpJCQNCm1pdCANCg0KJGtfMSQgPSBkaWUgRmFrdG9yc3R1ZmVuIGRlciBlcnN0ZW4gVmFyaWFibGUgPGJyPg0KJGtfMiQgPSBkaWUgRmFrdG9yc3R1ZmVuIGRlciB6d2VpdGVuIFZhcmlhYmxlIDxicj4NCg0KDQoNCiQkZGY9ICgyIC0xKVxjZG90ICgyIC0xKSA9IDEkJA0KDQp8RmFsbCAgIHxGaXNoZXJ8WWF0ZXN8DQp8LS0tLS0tLXwtLS0tLS18LS0tLS18DQp8RmFsbCAxIHwtICAgICB8LSAgICB8DQp8RmFsbCAyIHwtICAgICB8KyAgICB8DQp8RmFsbCAzIHwrICAgICB8LSAgICB8DQp8RmFsbCA0IHwrICAgICB8KyAgICB8DQoNCiMjIyBGYWxsIDENCg0KJCRcY2hpXjIgPSBcc3VtXklfe2k9MX1cc3VtXkpfe2o9MX1cZnJhY3soZl97aWp9LWZeeyd9X3tpan0pXjJ9e2Zeeyd9X3tpan19ID1cZnJhY3soNi0xMC4zMyleMn17MTAuMzN9KyBcZnJhY3soMjUtMjAuNjcpXjJ9ezIwLjY3fStcZnJhY3soOS00LjY3KV4yfXs0LjY3fStcZnJhY3soNS05LjMzKV4yfXs5LjMzfT04LjckJA0KDQoNCmBgYHtyfQ0Kcm91bmQoKCg2LTEwLjMzKV4yLzEwLjMzKSsoKDI1LTIwLjY3KV4yLzIwLjY3KSsoKDktNC42NyleMi80LjY3KSsoKDUtOS4zMyleMi85LjMzKSwgMSkNCmBgYA0KDQoNCioqa2VpbmUgQW5wYXNzdW5nIGVyZm9yZGVybGljaCoqDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCmNoIDwtIGNoaXNxLnRlc3QoY291bnRzLCBjb3JyZWN0ID0gRikgIyBjb3JyZWN0ID0gRiBvaG5lIEFucGFzc3VuZ2VuIC0gIGRpZSAibm9ybWFsZSIgRm9ybWVsDQpjaCANCg0KYGBgDQoqKkJlcmljaHQ6KiooQ2hpLVF1YWRyYXQoMSkgPSA4Ljc2MTUsIHAgPSAuMDAzMDc3KSANCiAgDQojIyMgRmFsbCAyIA0KDQoqKkFucGFzc3VuZzogS29ycmVrdHVyIG5hY2ggWWF0ZXMgKiogDQoNCiQkXGNoaV4yID0gXHN1bV5JX3tpPTF9XHN1bV5KX3tqPTF9XGZyYWN7KFxCaWdsfCBmX3tpan0tZl57J31fe2lqfVxCaWdsfCAtMC41KV4yfXtmXnsnfV97aWp9fSA9IFxcIA0KXGZyYWN7KFxCaWdsfCAoNi0xMC4zMylcQmlnbHwgLTAuNSleMn17MTAuMzN9ICtcZnJhY3soXEJpZ2x8ICgyNS0yMC42NylcQmlnbHwgLTAuNSleMn17MjAuNjd9ICsgXFwgDQpcZnJhY3soXEJpZ2x8ICgoOS00LjY3KVxCaWdsfCAtMC41KV4yfXs0LjY3fSArXGZyYWN7KFxCaWdsfCAoNS05LjMzKVxCaWdsfCAtMC41KV4yfXs5LjMzfSA9IDYuOCQkDQoNCg0KDQpgYGB7cn0NCnJvdW5kKA0KICAgICgoKGFicyg2LTEwLjMzKSktMC41KV4yLzEwLjMzKSsNCiAgICAoKChhYnMoMjUtMjAuNjcpKS0wLjUpXjIvMjAuNjcpKw0KICAgICgoKGFicyg5LTQuNjcpKS0wLjUpXjIvNC42NykrDQogICAgKCgoYWJzKDUtOS4zMykpLTAuNSleMi85LjMzKQ0KLDIpDQpgYGANCg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KY2ggPC0gY2hpc3EudGVzdChjb3VudHMsIGNvcnJlY3QgPSBUUlVFKSAjIERpZSBBbnBhc3N1bmcgbmFjaCBZYXRlcyAtIGNvcnJlY3QgPSBUUlVFIC0gRGllIEZvcm1lbCB3aXJkIHVtIC0wLjUgZXJ3ZWl0ZXJ0DQpjaCANCg0KYGBgICANCioqQmVyaWNodDoqKihDaGktUXVhZHJhdCgxKSA9IDYuODU2MywgcCA9IC4wMDg4MzMpICAgDQoNCiAgDQoNCiMjIyBGYWxsIDMgIA0KDQoqKkFucGFzc3VuZzogRmlzaGVyJ3MgRXhhY3QgVGVzdCAgKiogDQoNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmNoIDwtIGNoaXNxLnRlc3QoY291bnRzLCBjb3JyZWN0ID0gRikNCmNoIA0KZmlzaGVyLnRlc3QoY291bnRzKQ0KDQpgYGAgIA0KKipCZXJpY2h0OioqKENoaS1RdWFkcmF0KDEpID0gOC43NjE1LCBwID0gLjAwNTY3MykgICANCg0KSW4gZGllc2VyIMOcYnVuZyBpc3QgZXMgbm90d2VuZGluZyBuYWNoIEZpc2hlciB1bmQgbmFjaCBZYXRlcyB6dSBrb3JyZWdpZXJlbi4gRGFoZXIgd2lyZCBmb2xnZW5kZXIgQ29kZSB2ZXJ3ZW5kZXQuIA0KDQoNCiMjIyBGYWxsIDQgIA0KDQoqKkFucGFzc3VuZzogRmlzaGVyJ3MgRXhhY3QgVGVzdCAgJiBBbnBhc3N1bmcgbmFjaCBZYXRlcyAqKiANCg0KKiozKSBiZWkgZWluZXIgU3RpY2hwcm9iZW5ncsO2w59lIHp3aXNjaGVuIDIwIHVuZCA1MCBkaWUgS29ycmVrdHVyIG5hY2ggWWF0ZXMuKioNCg0KKkRpZSBlcndhcnRldGVuIFplbGxow6R1Zmlna2VpdGVuIHNpbmQgPiA1LiBJc3QgZGllcyBuaWNodCBkZXIgRmFsbCwgc28gd2lyZCBkZXIgZXhha3RlIFRlc3QgbmFjaCBGaXNoZXIgdmVyd2VuZGV0LioqDQoNCioqRGllIEZyZWloZWl0c2dyYWRlIGRlcyBDaGktUXVhZHJhdC1UZXN0cyBzaW5kIGdyw7bDn2VyIGFscyAxLiBJc3QgZGllcyBuaWNodCBkZXIgRmFsbCwgc28gd2lyZCBkaWUgS29ycmVrdHVyIG5hY2ggWWF0ZXMgdmVyd2VuZGV0LioqDQoNCg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCg0KY2ggPC0gY2hpc3EudGVzdChjb3VudHMsIGNvcnJlY3QgPSBUUlVFKQ0KY2gNCmEgPC0gZmlzaGVyLnRlc3QoY291bnRzKQ0KDQphDQpgYGANCg0KKipIaW53ZWlzZSoqOiBEYSBpbiBkaWVzZXIgw5xidW5nc2F1ZmdhYmUgZGVyIGV4YWt0ZSBUZXN0IG5hY2ggRmlzaGVyIHZlcndlbmRldCB3ZXJkZW4gbXVzcywgd2lyZCBuaWNodCBmb2xnZW5kZXIgKipwLXZhbHVlID0gMC4wMDg4MzMqKiB6aXRpZXJ0LCBzb25kZXJuIEZpc2hlciBtaXQgZWluZW0gcC12YWx1ZSB2b24gKiowLjAwNTY3MyoqLg0KDQpEZXIgVGVzdCBiZXN0w6R0aWd0LCBkYXNzIGVpbiBadXNhbW1lbmhhbmcgendpc2NoZW4gU3R1ZGllcmJlcmVpdHNjaGFmdCB2b3IgZGVtIEF1c2xhbmRzamFociB1bmQgZGllIFN0dWRpZXJiZXJlaXRzY2hhZnQgbmFjaCBkZW0gQXVzbGFuZHNqYWhyIGJlc3RlaHQgKENoaS1RdWFkcmF0KDEpID0gNi44NTYzLCBwID0gLjAwNTY3MykuDQoNCiMjIyBBbHRlcm5hdGl2ZSBEYXJzdGVsbHVuZyBtaXQgZ21vZGVscw0KDQpgYGB7cn0NCmxpYnJhcnkoZ21vZGVscykgDQoNCktyZXV6dGFiZWxsZTJhIDwtIENyb3NzVGFibGUoeCA9Y2hpJHZvcmhlciwgeSA9IGNoaSRuYWNoaGVyLCBkaWdpdHMgPSAxLCBmb3JtYXQgPSAiU1BTUyIsIGNoaXNxID0gVFJVRSkgDQpgYGANCg0KDQoNCiMgQ3JhbWVycyBWDQoNCiQkDQpDcmFtZXJzXHBoYW50b217Ln1WID0gXHNxcnR7XGZyYWN7XGNoaV4yfXtuXGNkb3QgbWluW2tfMS0xLGtfMi0xXX19DQokJA0KDQoqKiBEaWUgWmFobCAkMiQgc3RlaHQgZsO8ciAkMlx0aW1lczIkIERlc2lnbi4qKg0KDQokJFxtYm94e0NyYW1lcnMgVn0gPSBcc3FydCB7XGZyYWN7XGNoaV4yfXtuIFxjZG90ICgyLTEpfX0kJA0KDQoNCiQkXG1ib3h7Q3JhbWVycyBWfSA9IFxzcXJ0IHtcZnJhY3s2Ljg2fXs0NSBcY2RvdCAoMi0xKX19ID0gMC4zOSQkDQoNCmBgYHtyfQ0KYW56YWhsIDwtIG5yb3coY2hpKQ0KDQpzcHJpbnRmKCJEZXIgRGF0ZW5zYXR6IGhhdCAlZCBaZWlsZW4uIixhbnphaGwpDQoNCnNwcmludGYoIkRhcyBDaGktUXVhZHJhdCBsaWVndCBiZWkgJS4yZi4iLGNoJHN0YXRpc3RpYykNCg0KYGBgDQoNCg0KYGBge3J9DQpjcmFtZXJzViA8LSBzcXJ0KCggY2gkc3RhdGlzdGljKS8oYW56YWhsKigyLTEpKSkNCnNwcmludGYoIkRpZSBFZmZla3RzdMOkcmtlIGxpZWd0IGJlaSAlLjJmLiIsY3JhbWVyc1YpDQpgYGANCkNyYW1lciBzIFYgaXN0IGltbWVyIHBvc2l0aXYgLT4ga2VpbmUgQXVzc2FnZSDDvGJlciBkaWUgUmljaHR1bmcgZGVzIFp1c2FtbWVuaGFuZ3MNCg0KJCQNClxiZWdpbnthbGlnbn0NClx0ZXh0e1NjaHdhY2hlciBFZmZla3Q6IH0gMC4xICY8IHx8Q3JhbWVycyBWfHwgXGxlcSAgMC4zIFxcDQpcdGV4dHtTY2h3YWNoZXIgYmlzIG1pdHRsZXJlciBFZmZla3Q6IH0wLjMgJjwgfHxDcmFtZXJzIFZ8fCBcbGVxICAwLjQgXFwNClx0ZXh0e01pdHRsZXJlciBFZmZla3Q6IH0gMC40ICY8IHx8Q3JhbWVycyBWfHwgPCAwLjUgXFwNClx0ZXh0e01pdHRsZXJlciBiaXMgc3RhcmtlciBFZmZla3Q6IH0wLjUgJj0gfHxDcmFtZXJzIFZ8fCBcXA0KXHRleHR7U3RhcmtlciBFZmZla3Q6IH0gMC41ICY8IHx8Q3JhbWVycyBWfHwgDQpcZW5ke2FsaWdufSQkDQoNCkVzIHplaWd0IHNpY2ggZsO8ciB1bnNlcmUgQXVzd2VydHVuZywgZGFzcyBlaW4gbWl0dGxlcmVyIFp1c2FtbWVuaGFuZyBiZXN0ZWh0Lg0KDQoNCiMgQXVzc2FnZSANCg0KRGllIFN0dWRpZXJiZXJlaXRzY2hhZnQgdm9yIGRlbSBBdXNsYW5kc2phaHIgdW5kIGRpZSBTdHVkaWVyYmVyZWl0c2NoYWZ0IG5hY2ggZGVtIEF1c2xhbmRzamFociBzdGVoZW4gaW4gZWluZW0gWnVzYW1tZW5oYW5nIChDaGktUXVhZHJhdCgxKSA9IDYuODU2MywgcCA9IC4wMDU2NzMsIG4gPSA0NSkuIERlciBadXNhbW1lbmhhbmcgaXN0IG1pdHRlbHN0YXJrIChDcmFtZXJzIFYgPSAuNCkuIERhbWl0IGthbm4gZGllIEgwIHZlcndvcmZlbiB3ZXJkZW4uDQoNCg0KIyMjIEFsdGVybmF0aXZlDQoNCkVzIGthbm4gZGF2b24gYXVzZ2VnYW5nZW4gd2VyZGVuLCBkYXNzIHNpY2ggZGllIGVyd2FydGV0ZW4gdW5kIGRpZSBiZW9iYWNodGV0ZW4gSMOkdWZpZ2tlaXRlbiBzaWduaWZpa2FudCB1bnRlcnNjaGVpZGVuICAoQ2hpLVF1YWRyYXQoMSkgPSA2Ljg1NjMsIHAgPSAuMDA1NjczLCBuID0gNDUpLkRlciBadXNhbW1lbmhhbmcgaXN0IG1pdHRlbHN0YXJrIChDcmFtZXJzIFYgPSAuNCkuIERhbWl0IGthbm4gZGllIEgwIHZlcndvcmZlbiB3ZXJkZW4uDQoNCg0K