Normalverteilung
Im folgenden Teil wird die Dichtefunktion (für stetige Verteilungen) bzw. Wahrscheinlichkeitsfunktion (für diskrete Verteilungen) dargestellt.
Die Normalverteilung oder Gauß-Verteilung ist eine stetige Verteilung (reellen Zahlen z. B. -1,3.5, 0.5 … ) und stellt die wichtigste Wahrscheinlichkeitsverteilung dar. Die Dichtefunktion ist dabei durch die sogenannte Gaußsche Glockenkurve gegeben.
\[f(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}(\frac{x -\mu}{\sigma})^2}\]
plot(function(x) dnorm(x, mean=0, sd=sqrt(1)),
from=-4, to=8, lwd=2,
ylab="Dichte", main = "(a) Normalverteilung")
plot(function(x) dnorm(x, mean=2, sd=sqrt(5)),
from=-4, to=8, lwd=2,
col="blue", lty=2, add=TRUE)
legend("topright", inset=0.02, legend=c("N(0,1)", "N(2,5)"),
col=c("black", "blue"), lwd=c(2,2), lty=c(1,2))

So sehen normalverteilte Daten aus.
a = rnorm(10000, mean = 3)
hist(a, breaks = 100, main = "Histogramm - Normalverteilung")

Histogramm zur Darstellung der Normalverteilung
Normalverteilte Zufallsvariablen in der Praxis sehr beliebt. Biologische Größen sind normalverteilt wie etwa die Körpergröße, der Intelligenzquotienten oder Sozialkompetenz. Physikalische Großen meist auch wie etwa die durchschnittliche Sonnenscheindauer.
Der mathematische Hintergrund ist der zentrale Grenzwertsatz, der besagt, dass unter bestimmten allgemeinen Voraussetzungen die Summe aus n unabhängigen, identisch verteilten Zufallsvariablen wiederum normalverteilt ist.
Standardormalverteilung
Eine besondere Form der Normalverteilung ist die Standardnormalverteilung. Für sie gilt, dass der Mittelwert bei 0 liegt und die Standardabweichung bei 1, also µ=0 und σ=1. Damit nimmt die Funktionsgleichung folgende Form an:
\[f(x) = \frac{1}{\sqrt{2\pi}}e^{-\frac{1}{2}^2}\]
x = rnorm(10000)
hist(x, breaks = 100, main = "Histogramm - Standardnormalverteilung")

Histogramm zur Darstellung der Standardnormalverteilung
Durch Standardisierung bzw. z-Transformation kann eine Normalverteilung in eine Standardnormalverteilung überführt werden. Auf diese Weise können unterschiedliche Verteilungen besser miteinander verglichen werden. Dazu setzt man als neue Variable
\[z = (x-µ)/σ \]
z <- (a-mean(a))/sd(a)
summary(z)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-3.733200 -0.661936 0.002156 0.000000 0.669903 4.328027
\(\chi^2\)-Verteilung
Die Chi-Quadrat-Verteilung bzw. χ 2 ist eine stetige Wahrscheinlichkeitsverteilung über der Menge der nichtnegativen reellen Zahlen (z.B 2.3, 445, 0.5). Die Chi-Quadrat-Verteilung ist eine der Verteilungen, die aus der Normalverteilung abgeleitet werden kann.
plot(function(x) dchisq(x, df=4), from=0, to=50, lwd=2,
ylab="Dichte", main = "(b) Chi-Quadrat-Verteilung")
plot(function(x) dchisq(x, df=20), from=0, to=50, lwd=2,
col="blue", lty=2, add=TRUE)
legend("topright", inset=0.02,
legend=c(expression({chi^2}(4)), expression({chi^2}(20))),
col=c("black", "blue"), lwd=c(2,2), lty=c(1,2))

So sieht die Chi^2 - Verteilung aus
Von der chi^2 zur Normalverteilung
plot(function(x) dchisq(x, df=50), from=30, to=150, lwd=2,
ylab="Dichte", main = "(b) Chi-Quadrat-Verteilung")
plot(function(x) dchisq(x, df=100), from=30, to=150, lwd=2,
col="blue", lty=2, add=TRUE)
plot(function(x) dnorm(x, mean = 100, sd = sqrt(200)), from=30, to=150, lwd=2,
col="red", lty=2, add=TRUE)
legend("topright", inset=0.02,
legend=c(expression({chi^2}(50)), expression({chi^2}(100)), expression(N(100,200))),
col=c("black", "blue", "red"), lwd=c(2,2,2), lty=c(1,2, 2))

Die Chi^2 - Verteilung nähert sich der Normalverteilung.
Die \(\chi^2\)-Verteilung findet selten Anwendung in der Realität. Hauptsächlich wird sie für die Schätzung von Verteilungsparametern, wie zum Beispiel der Varianz , und bei Hypothesentests angewendet.
\(t\)-Verteilung
Die t-Verteilung ist Quasie eine Verwandte der der Normalverteilung. Normalverteilung unterschätzen bei kleinen Stichprobenumfängen bestimmte statistische Größen. Dieser Effekt kann aber ausgeglichen werden, t-Verteilung verwendet. Die t-Verteilung hat ein breiteres Enden als die Normalverteilung. Mit steigenden Stichprobenumfänge nähern sich die beiden Verteilungen an bis sie sind schließlich identisch sind.
Eine Zufallsvariable T heißt t-verteilt mit n Freiheitsgraden, in Zeichen T∼t(n), n∈N, falls sie als Quotient zweier unabhängigen Zufallsvariablen geschrieben werden kann, wobei im Zähler Z ∼ N(0,1)und im Nenner die Wurzel einer standardisierten, d. h. in diesem Fall durch die Anzahl der Freiheitsgradengeteilten χ2 (n)-verteilten Zufallsvariable Y steht:
\[T = \frac{Z}{\sqrt{Y/n}} ⇒ T ∼ t(n)\]
plot(function(x) dt(x, df=30), from=-6, to=6, lwd=2,
ylab="Dichte", main = "(c) t-Verteilung")
plot(function(x) dt(x, df=2), from=-6, to=6, lwd=2,
col="blue", lty=2, add=TRUE)
legend("topright", inset=0.02, legend=c("t(30)", "t(2)"),
col=c("black", "blue"), lwd=c(2,2), lty=c(1,2))

NA
NA
So sieht die t-Verteilung aus.
Von der t-Verteilung zur Normalverteilung
plot(function(x) dnorm(x, mean=0, sd=sqrt(1)),
from=-4, to=4, lwd=2,
ylab="Dichte", main = "(a) Normalverteilung")
plot(function(x) dt(x, df = 30),
from=-4, to=4, lwd=2,
col="blue", lty=2, add=TRUE)
legend("topright", inset=0.02, legend=c("N(0,1)", "t(30)"),
col=c("black", "blue"), lwd=c(2,2), lty=c(1,2))

Die t-Verteilung nähert sich der Normalverteilung mit N = 30.
Die t-Verteilung spielt eine wichtige Rolle beim Hypothesentests und Konfidenzintervalle.
\(F\)-Verteilung
Die F-Verteilung oder Fisher-Verteilung ist eine stetige Wahrscheinlichkeitsverteilung.Die F-Verteilung verwendet zwei unabhängige Freiheitsgrade als Parameter.
Eine Zufallsvariable F heißt F-verteilt mit m Zählergraden undnNennergraden, in Zeichen F∼F(m,n),m, n∈ \(\mathbb{N}\), falls sie als Quotient zweier unabhängigen , standardisierter, χ2 -verteilter Zufallsvariablen Y1∼χ2(m) ,Y2∼χ2(n) geschrieben werden kann:
\[F= \frac {Y_1/m}{Y_2/n} ⇒ F ∼ F(m,n)\]
plot(function(x) df(x, df1=4, df2=30), from=0, to=8, lwd=2,
ylab="Dichte", main = "(d) F-Verteilung")
plot(function(x) df(x, df1=4, df2=2), from=0, to=8, lwd=2,
col="blue", lty=2, add=TRUE)
legend("topright", inset=0.02, legend=c("F(4,30)", "F(4,2)"),
col=c("black", "blue"), lwd=c(2,2), lty=c(1,2))

Die F-Verteilung sieht so aus.
Von der F-Verteilung zur chi^2 Verteilung (Transformationssatz)
plot(function(x) df(x, df1=4, df2=30), from=0, to=8, lwd=2,
ylab="Dichte", main = "(d) F-Verteilung")
plot(function(x) df(x/4, df1=4, df2=30)/4, from=0, to=8, lwd=2,
col="red", lty=2, add=TRUE)
plot(function(x) dchisq(x, df=4), from=0, to=8, lwd=2,
col="darkgreen", lty=1, add=TRUE)
legend("topright", inset=0.02,
legend=c(expression(F(4,30)), expression(4 * F(4,30)), expression({chi^2}(4))),
col=c("black", "red", "darkgreen"), lwd=c(2,2,2), lty=c(1,2, 2))

Die F-Verteilung nähert sich der Chi- Verteilung.
Wichtige Anwendungsgebiete der F-Verteilung sind statistische Testverfahren, etwa der Vergleich von Varianzen bei normalverteilten Variablen (Varianzanalyse).
Poisson-Verteilung
Die Poisson-Verteilung richtet sich an eine diskrete Wahrscheinlichkeitsverteilung mit Zählenwerten. Kurz um: Wie oft tritt ein bestimmtes, zählbares Ereignis ein, wenn man es sehr oft wiederholt?
\[P(X = x) = \frac{\lambda ^x}{x!}*e^{-\lambda}\] λ = ist der Erwartungswert einer binomialverteilten Zufallsgröße ( n! ist die Fakultät der natürlichen Zahl n e ist die Euler’sche Zahl
library(tidyverse)
# Build Poisson distributions
p_dat <- map_df(1:10, ~ tibble(
l = paste(.),
x = 0:20,
y = dpois(0:20, .)
))
# Build Normal distributions
n_dat <- map_df(1:10, ~ tibble(
l = paste(.),
x = seq(0, 20, by = 0.001),
y = dnorm(seq(0, 20, by = 0.001), ., sqrt(.))
))
# Use ggplot2 to plot
ggplot(n_dat, aes(x, y, color = factor(l, levels = 1:10))) +
geom_line() +
geom_point(data = p_dat, aes(x, y, color = factor(l, levels = 1:10))) +
labs(color = "Lambda:") +
theme_minimal()

So sieht die Poisson-Verteilung aus. Sie nähert sich er Normalverteilung. Ein klassisches Beispiel der Poisson-Verteilung ist die Anzahl der Soldaten der preußischen Armee, die pro Jahr durch einen Pferdetritt versehentlich getötet wurden. Die Anzahl der Mutationen eines bestimmten DNA-Strang pro Zeiteinheit oder die Anzahl der Besucher einer Website pro Minute sind weitere sehr gute Beispiele.
LS0tDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyBOb3JtYWx2ZXJ0ZWlsdW5nDQoNCkltIGZvbGdlbmRlbiBUZWlsIHdpcmQgZGllIERpY2h0ZWZ1bmt0aW9uIChmw7xyIHN0ZXRpZ2UgVmVydGVpbHVuZ2VuKSBiencuIFdhaHJzY2hlaW5saWNoa2VpdHNmdW5rdGlvbiAoZsO8ciBkaXNrcmV0ZSBWZXJ0ZWlsdW5nZW4pIGRhcmdlc3RlbGx0Lg0KDQpEaWUgTm9ybWFsdmVydGVpbHVuZyBvZGVyIEdhdcOfLVZlcnRlaWx1bmcgaXN0IGVpbmUgc3RldGlnZSBWZXJ0ZWlsdW5nIChyZWVsbGVuIFphaGxlbiB6LiBCLiAtMSwzLjUsIDAuNSAuLi4gKSB1bmQgc3RlbGx0IGRpZSB3aWNodGlnc3RlIFdhaHJzY2hlaW5saWNoa2VpdHN2ZXJ0ZWlsdW5nIGRhci4gRGllIERpY2h0ZWZ1bmt0aW9uIGlzdCBkYWJlaSBkdXJjaCBkaWUgc29nZW5hbm50ZSBHYXXDn3NjaGUgR2xvY2tlbmt1cnZlIGdlZ2ViZW4uIA0KDQokJGYoeCkgPSBcZnJhY3sxfXtcc3FydHsyXHBpXHNpZ21hXjJ9fWVeey1cZnJhY3sxfXsyfShcZnJhY3t4IC1cbXV9e1xzaWdtYX0pXjJ9JCQNCg0KYGBge3J9DQpwbG90KGZ1bmN0aW9uKHgpIGRub3JtKHgsIG1lYW49MCwgc2Q9c3FydCgxKSksIA0KICAgICBmcm9tPS00LCB0bz04LCBsd2Q9MiwgDQoJICAgIHlsYWI9IkRpY2h0ZSIsIG1haW4gPSAiKGEpICAgICBOb3JtYWx2ZXJ0ZWlsdW5nIikNCnBsb3QoZnVuY3Rpb24oeCkgZG5vcm0oeCwgbWVhbj0yLCBzZD1zcXJ0KDUpKSwgDQogICAgIGZyb209LTQsIHRvPTgsIGx3ZD0yLCANCgkgICBjb2w9ImJsdWUiLCBsdHk9MiwgYWRkPVRSVUUpDQpsZWdlbmQoInRvcHJpZ2h0IiwgaW5zZXQ9MC4wMiwgbGVnZW5kPWMoIk4oMCwxKSIsICJOKDIsNSkiKSwgDQoJY29sPWMoImJsYWNrIiwgImJsdWUiKSwgbHdkPWMoMiwyKSwgbHR5PWMoMSwyKSkNCmBgYA0KKipTbyBzZWhlbiBub3JtYWx2ZXJ0ZWlsdGUgRGF0ZW4gYXVzLioqDQoNCg0KYGBge3J9DQphID0gcm5vcm0oMTAwMDAsIG1lYW4gPSAzKQ0KaGlzdChhLCBicmVha3MgPSAxMDAsIG1haW4gPSAiSGlzdG9ncmFtbSAtIE5vcm1hbHZlcnRlaWx1bmciKQ0KYGBgDQoqKkhpc3RvZ3JhbW0genVyIERhcnN0ZWxsdW5nIGRlciBOb3JtYWx2ZXJ0ZWlsdW5nKioNCg0KTm9ybWFsdmVydGVpbHRlIFp1ZmFsbHN2YXJpYWJsZW4gaW4gZGVyIFByYXhpcyBzZWhyIGJlbGllYnQuIEJpb2xvZ2lzY2hlIEdyw7bDn2VuIHNpbmQgbm9ybWFsdmVydGVpbHQgd2llIGV0d2EgZGllIEvDtnJwZXJncsO2w59lLCBkZXIgSW50ZWxsaWdlbnpxdW90aWVudGVuIG9kZXIgU296aWFsa29tcGV0ZW56LiBQaHlzaWthbGlzY2hlIEdyb8OfZW4gbWVpc3QgYXVjaCB3aWUgZXR3YSBkaWUgZHVyY2hzY2huaXR0bGljaGUgU29ubmVuc2NoZWluZGF1ZXIuDQoNCkRlciBtYXRoZW1hdGlzY2hlIEhpbnRlcmdydW5kIGlzdCBkZXIgemVudHJhbGUgR3Jlbnp3ZXJ0c2F0eiwgZGVyIGJlc2FndCwgZGFzcyB1bnRlciBiZXN0aW1tdGVuIGFsbGdlbWVpbmVuIFZvcmF1c3NldHp1bmdlbiBkaWUgU3VtbWUgYXVzIG4gdW5hYmjDpG5naWdlbiwgaWRlbnRpc2NoIHZlcnRlaWx0ZW4gWnVmYWxsc3ZhcmlhYmxlbiB3aWVkZXJ1bSBub3JtYWx2ZXJ0ZWlsdCBpc3QuDQoNCg0KIyMgU3RhbmRhcmRvcm1hbHZlcnRlaWx1bmcNCg0KRWluZSBiZXNvbmRlcmUgRm9ybSBkZXIgTm9ybWFsdmVydGVpbHVuZyBpc3QgZGllIFN0YW5kYXJkbm9ybWFsdmVydGVpbHVuZy4gRsO8ciBzaWUgZ2lsdCwgZGFzcyBkZXIgTWl0dGVsd2VydCBiZWkgMCBsaWVndCB1bmQgZGllIFN0YW5kYXJkYWJ3ZWljaHVuZyBiZWkgMSwgYWxzbyDCtT0wIHVuZCDPgz0xLiBEYW1pdCBuaW1tdCBkaWUgRnVua3Rpb25zZ2xlaWNodW5nIGZvbGdlbmRlIEZvcm0gYW46DQoNCiQkZih4KSA9IFxmcmFjezF9e1xzcXJ0ezJccGl9fWVeey1cZnJhY3sxfXsyfV4yfSQkDQoNCmBgYHtyfQ0KeCA9IHJub3JtKDEwMDAwKQ0KaGlzdCh4LCBicmVha3MgPSAxMDAsIG1haW4gPSAiSGlzdG9ncmFtbSAtIFN0YW5kYXJkbm9ybWFsdmVydGVpbHVuZyIpDQpgYGANCioqSGlzdG9ncmFtbSB6dXIgRGFyc3RlbGx1bmcgZGVyIFN0YW5kYXJkbm9ybWFsdmVydGVpbHVuZyoqDQoNCg0KRHVyY2ggU3RhbmRhcmRpc2llcnVuZyBiencuIHotVHJhbnNmb3JtYXRpb24ga2FubiBlaW5lIE5vcm1hbHZlcnRlaWx1bmcgaW4gZWluZSBTdGFuZGFyZG5vcm1hbHZlcnRlaWx1bmcgw7xiZXJmw7xocnQgd2VyZGVuLiBBdWYgZGllc2UgV2Vpc2Uga8O2bm5lbiB1bnRlcnNjaGllZGxpY2hlIFZlcnRlaWx1bmdlbiBiZXNzZXIgbWl0ZWluYW5kZXIgdmVyZ2xpY2hlbiB3ZXJkZW4uIERhenUgc2V0enQgbWFuIGFscyBuZXVlIFZhcmlhYmxlIA0KDQokJHogPSAoeC3CtSkvz4MgJCQgDQoNCmBgYHtyfQ0KeiA8LSAoYS1tZWFuKGEpKS9zZChhKQ0Kc3VtbWFyeSh6KQ0KYGBgDQoNCg0KDQoNCiMjICRcY2hpXjIkLVZlcnRlaWx1bmcNCg0KRGllIENoaS1RdWFkcmF0LVZlcnRlaWx1bmcgYnp3LiDPhyAyIGlzdCBlaW5lIHN0ZXRpZ2UgV2FocnNjaGVpbmxpY2hrZWl0c3ZlcnRlaWx1bmcgw7xiZXIgZGVyIE1lbmdlIGRlciBuaWNodG5lZ2F0aXZlbiByZWVsbGVuIFphaGxlbiAoei5CIDIuMywgNDQ1LCAwLjUpLiBEaWUgQ2hpLVF1YWRyYXQtVmVydGVpbHVuZyBpc3QgZWluZSBkZXIgVmVydGVpbHVuZ2VuLCBkaWUgYXVzIGRlciBOb3JtYWx2ZXJ0ZWlsdW5nIGFiZ2VsZWl0ZXQgd2VyZGVuIGthbm4uIA0KDQpgYGB7cn0NCg0KcGxvdChmdW5jdGlvbih4KSBkY2hpc3EoeCwgZGY9NCksIGZyb209MCwgdG89NTAsIGx3ZD0yLCANCgl5bGFiPSJEaWNodGUiLCBtYWluID0gIihiKSAgICAgQ2hpLVF1YWRyYXQtVmVydGVpbHVuZyIpDQpwbG90KGZ1bmN0aW9uKHgpIGRjaGlzcSh4LCBkZj0yMCksIGZyb209MCwgdG89NTAsIGx3ZD0yLCANCgljb2w9ImJsdWUiLCBsdHk9MiwgYWRkPVRSVUUpDQpsZWdlbmQoInRvcHJpZ2h0IiwgaW5zZXQ9MC4wMiwgDQoJbGVnZW5kPWMoZXhwcmVzc2lvbih7Y2hpXjJ9KDQpKSwgZXhwcmVzc2lvbih7Y2hpXjJ9KDIwKSkpLCANCgljb2w9YygiYmxhY2siLCAiYmx1ZSIpLCBsd2Q9YygyLDIpLCBsdHk9YygxLDIpKQ0KDQpgYGANCg0KKipTbyBzaWVodCBkaWUgQ2hpXjIgLSBWZXJ0ZWlsdW5nIGF1cyoqDQoNCg0KIyMjIyBWb24gZGVyIGNoaV4yIHp1ciBOb3JtYWx2ZXJ0ZWlsdW5nDQpgYGB7cn0NCnBsb3QoZnVuY3Rpb24oeCkgZGNoaXNxKHgsIGRmPTUwKSwgZnJvbT0zMCwgdG89MTUwLCBsd2Q9MiwgDQoJeWxhYj0iRGljaHRlIiwgbWFpbiA9ICIoYikgICAgIENoaS1RdWFkcmF0LVZlcnRlaWx1bmciKQ0KcGxvdChmdW5jdGlvbih4KSBkY2hpc3EoeCwgZGY9MTAwKSwgZnJvbT0zMCwgdG89MTUwLCBsd2Q9MiwgDQoJY29sPSJibHVlIiwgbHR5PTIsIGFkZD1UUlVFKQ0KcGxvdChmdW5jdGlvbih4KSBkbm9ybSh4LCBtZWFuID0gMTAwLCBzZCA9IHNxcnQoMjAwKSksIGZyb209MzAsIHRvPTE1MCwgbHdkPTIsIA0KCWNvbD0icmVkIiwgbHR5PTIsIGFkZD1UUlVFKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgaW5zZXQ9MC4wMiwgDQoJbGVnZW5kPWMoZXhwcmVzc2lvbih7Y2hpXjJ9KDUwKSksIGV4cHJlc3Npb24oe2NoaV4yfSgxMDApKSwgZXhwcmVzc2lvbihOKDEwMCwyMDApKSksIA0KCWNvbD1jKCJibGFjayIsICJibHVlIiwgInJlZCIpLCBsd2Q9YygyLDIsMiksIGx0eT1jKDEsMiwgMikpDQpgYGANCg0KKipEaWUgQ2hpXjIgLSBWZXJ0ZWlsdW5nIG7DpGhlcnQgc2ljaCBkZXIgTm9ybWFsdmVydGVpbHVuZy4qKg0KDQpEaWUgJFxjaGleMiQtVmVydGVpbHVuZyBmaW5kZXQgIHNlbHRlbiBBbndlbmR1bmcgaW4gZGVyIFJlYWxpdMOkdC4gDQpIYXVwdHPDpGNobGljaCB3aXJkIHNpZSBmw7xyIGRpZSBTY2jDpHR6dW5nIHZvbiBWZXJ0ZWlsdW5nc3BhcmFtZXRlcm4sIHdpZSB6dW0gQmVpc3BpZWwgZGVyIFZhcmlhbnogLCB1bmQgYmVpIEh5cG90aGVzZW50ZXN0cyBhbmdld2VuZGV0Lg0KDQojIyAkdCQtVmVydGVpbHVuZw0KDQpEaWUgdC1WZXJ0ZWlsdW5nIGlzdCAgUXVhc2llIGVpbmUgVmVyd2FuZHRlIGRlciBkZXIgTm9ybWFsdmVydGVpbHVuZy4NCk5vcm1hbHZlcnRlaWx1bmcgdW50ZXJzY2jDpHR6ZW4gYmVpIGtsZWluZW4gU3RpY2hwcm9iZW51bWbDpG5nZW4gYmVzdGltbXRlIHN0YXRpc3Rpc2NoZSBHcsO2w59lbi4gRGllc2VyIEVmZmVrdCBrYW5uIGFiZXIgYXVzZ2VnbGljaGVuIHdlcmRlbiwgdC1WZXJ0ZWlsdW5nIHZlcndlbmRldC4gRGllIHQtVmVydGVpbHVuZyBoYXQgZWluIGJyZWl0ZXJlcyBFbmRlbiBhbHMgZGllIE5vcm1hbHZlcnRlaWx1bmcuIE1pdCBzdGVpZ2VuZGVuIFN0aWNocHJvYmVudW1mw6RuZ2UgbsOkaGVybiBzaWNoIGRpZSBiZWlkZW4gVmVydGVpbHVuZ2VuIGFuIGJpcyBzaWUgc2luZCBzY2hsaWXDn2xpY2ggaWRlbnRpc2NoIHNpbmQuDQoNCkVpbmUgWnVmYWxsc3ZhcmlhYmxlIFQgaGVpw590IHQtdmVydGVpbHQgbWl0IG4gRnJlaWhlaXRzZ3JhZGVuLCBpbiBaZWljaGVuIFTiiLx0KG4pLCBu4oiITiwgZmFsbHMgc2llIGFscyBRdW90aWVudCB6d2VpZXIgdW5hYmjDpG5naWdlbiBadWZhbGxzdmFyaWFibGVuIGdlc2NocmllYmVuIHdlcmRlbiBrYW5uLCB3b2JlaSBpbSBaw6RobGVyIFog4oi8IE4oMCwxKXVuZCBpbSBOZW5uZXIgZGllIFd1cnplbCBlaW5lciBzdGFuZGFyZGlzaWVydGVuLCBkLiBoLiBpbiBkaWVzZW0gRmFsbCBkdXJjaCBkaWUgQW56YWhsIGRlciBGcmVpaGVpdHNncmFkZW5nZXRlaWx0ZW4gz4cyIChuKS12ZXJ0ZWlsdGVuIFp1ZmFsbHN2YXJpYWJsZSBZIHN0ZWh0Og0KDQokJFQgPSBcZnJhY3tafXtcc3FydHtZL259fSDih5IgVCDiiLwgdChuKSQkDQoNCmBgYHtyfQ0KDQpwbG90KGZ1bmN0aW9uKHgpIGR0KHgsIGRmPTMwKSwgZnJvbT0tNiwgdG89NiwgbHdkPTIsIA0KCXlsYWI9IkRpY2h0ZSIsIG1haW4gPSAiKGMpICAgICB0LVZlcnRlaWx1bmciKQ0KcGxvdChmdW5jdGlvbih4KSBkdCh4LCBkZj0yKSwgZnJvbT0tNiwgdG89NiwgbHdkPTIsIA0KCWNvbD0iYmx1ZSIsIGx0eT0yLCBhZGQ9VFJVRSkNCmxlZ2VuZCgidG9wcmlnaHQiLCBpbnNldD0wLjAyLCBsZWdlbmQ9YygidCgzMCkiLCAidCgyKSIpLCANCgljb2w9YygiYmxhY2siLCAiYmx1ZSIpLCBsd2Q9YygyLDIpLCBsdHk9YygxLDIpKQ0KDQoNCmBgYA0KDQoqKlNvIHNpZWh0IGRpZSB0LVZlcnRlaWx1bmcgYXVzLioqDQoNCiMjIyMgVm9uIGRlciB0LVZlcnRlaWx1bmcgenVyIE5vcm1hbHZlcnRlaWx1bmcgDQoNCmBgYHtyfQ0KcGxvdChmdW5jdGlvbih4KSBkbm9ybSh4LCBtZWFuPTAsIHNkPXNxcnQoMSkpLCANCiAgICAgZnJvbT0tNCwgdG89NCwgbHdkPTIsIA0KCSB5bGFiPSJEaWNodGUiLCBtYWluID0gIihhKSAgICAgTm9ybWFsdmVydGVpbHVuZyIpDQpwbG90KGZ1bmN0aW9uKHgpIGR0KHgsIGRmID0gMzApLCANCiAgICAgZnJvbT0tNCwgdG89NCwgbHdkPTIsIA0KCSAgICBjb2w9ImJsdWUiLCBsdHk9MiwgYWRkPVRSVUUpDQpsZWdlbmQoInRvcHJpZ2h0IiwgaW5zZXQ9MC4wMiwgbGVnZW5kPWMoIk4oMCwxKSIsICJ0KDMwKSIpLCANCgljb2w9YygiYmxhY2siLCAiYmx1ZSIpLCBsd2Q9YygyLDIpLCBsdHk9YygxLDIpKQ0KYGBgDQoqKkRpZSB0LVZlcnRlaWx1bmcgbsOkaGVydCBzaWNoIGRlciBOb3JtYWx2ZXJ0ZWlsdW5nIG1pdCBOID0gMzAuKioNCg0KRGllIHQtVmVydGVpbHVuZyBzcGllbHQgZWluZSB3aWNodGlnZSBSb2xsZSBiZWltIEh5cG90aGVzZW50ZXN0cyB1bmQgS29uZmlkZW56aW50ZXJ2YWxsZS4gDQoNCg0KIyMgJEYkLVZlcnRlaWx1bmcNCkRpZSBGLVZlcnRlaWx1bmcgb2RlciBGaXNoZXItVmVydGVpbHVuZyBpc3QgZWluZSBzdGV0aWdlIFdhaHJzY2hlaW5saWNoa2VpdHN2ZXJ0ZWlsdW5nLkRpZSBGLVZlcnRlaWx1bmcgdmVyd2VuZGV0IHp3ZWkgdW5hYmjDpG5naWdlIEZyZWloZWl0c2dyYWRlIGFscyBQYXJhbWV0ZXIuDQoNCkVpbmUgWnVmYWxsc3ZhcmlhYmxlIEYgaGVpw590IEYtdmVydGVpbHQgbWl0IG0gWsOkaGxlcmdyYWRlbiB1bmRuTmVubmVyZ3JhZGVuLCBpbiBaZWljaGVuIEbiiLxGKG0sbiksbSwgbuKIiCAkXG1hdGhiYntOfSQsIGZhbGxzIHNpZSBhbHMgUXVvdGllbnQgendlaWVyIHVuYWJow6RuZ2lnZW4gLCBzdGFuZGFyZGlzaWVydGVyLCDPhzIgLXZlcnRlaWx0ZXIgWnVmYWxsc3ZhcmlhYmxlbiBZMeKIvM+HMihtKSAsWTLiiLzPhzIobikgZ2VzY2hyaWViZW4gd2VyZGVuIGthbm46DQoNCg0KDQokJEY9IFxmcmFjIHtZXzEvbX17WV8yL259IOKHkiBGIOKIvCBGKG0sbikkJA0KDQpgYGB7cn0NCnBsb3QoZnVuY3Rpb24oeCkgZGYoeCwgZGYxPTQsIGRmMj0zMCksIGZyb209MCwgdG89OCwgbHdkPTIsIA0KCXlsYWI9IkRpY2h0ZSIsIG1haW4gPSAiKGQpICAgICBGLVZlcnRlaWx1bmciKQ0KcGxvdChmdW5jdGlvbih4KSBkZih4LCBkZjE9NCwgZGYyPTIpLCBmcm9tPTAsIHRvPTgsIGx3ZD0yLCANCgljb2w9ImJsdWUiLCBsdHk9MiwgYWRkPVRSVUUpDQpsZWdlbmQoInRvcHJpZ2h0IiwgaW5zZXQ9MC4wMiwgbGVnZW5kPWMoIkYoNCwzMCkiLCAiRig0LDIpIiksIA0KCWNvbD1jKCJibGFjayIsICJibHVlIiksIGx3ZD1jKDIsMiksIGx0eT1jKDEsMikpDQpgYGANCioqRGllIEYtVmVydGVpbHVuZyBzaWVodCBzbyBhdXMuKioNCg0KIyMjIyBWb24gZGVyIEYtVmVydGVpbHVuZyB6dXIgY2hpXjIgVmVydGVpbHVuZyAoVHJhbnNmb3JtYXRpb25zc2F0eikNCg0KDQpgYGB7cn0NCnBsb3QoZnVuY3Rpb24oeCkgZGYoeCwgZGYxPTQsIGRmMj0zMCksIGZyb209MCwgdG89OCwgbHdkPTIsIA0KCXlsYWI9IkRpY2h0ZSIsIG1haW4gPSAiKGQpICAgICBGLVZlcnRlaWx1bmciKQ0KcGxvdChmdW5jdGlvbih4KSBkZih4LzQsIGRmMT00LCBkZjI9MzApLzQsIGZyb209MCwgdG89OCwgbHdkPTIsDQpjb2w9InJlZCIsIGx0eT0yLCBhZGQ9VFJVRSkNCnBsb3QoZnVuY3Rpb24oeCkgZGNoaXNxKHgsIGRmPTQpLCBmcm9tPTAsIHRvPTgsIGx3ZD0yLA0KY29sPSJkYXJrZ3JlZW4iLCBsdHk9MSwgYWRkPVRSVUUpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCBpbnNldD0wLjAyLCANCglsZWdlbmQ9YyhleHByZXNzaW9uKEYoNCwzMCkpLCBleHByZXNzaW9uKDQgKiBGKDQsMzApKSwgZXhwcmVzc2lvbih7Y2hpXjJ9KDQpKSksIA0KCWNvbD1jKCJibGFjayIsICJyZWQiLCAiZGFya2dyZWVuIiksIGx3ZD1jKDIsMiwyKSwgbHR5PWMoMSwyLCAyKSkNCmBgYA0KDQoqKkRpZSBGLVZlcnRlaWx1bmcgbsOkaGVydCBzaWNoIGRlciBDaGktIFZlcnRlaWx1bmcuKioNCg0KV2ljaHRpZ2UgQW53ZW5kdW5nc2dlYmlldGUgZGVyIEYtVmVydGVpbHVuZyBzaW5kIHN0YXRpc3Rpc2NoZSBUZXN0dmVyZmFocmVuLCBldHdhIGRlciBWZXJnbGVpY2ggdm9uIFZhcmlhbnplbiBiZWkgbm9ybWFsdmVydGVpbHRlbiBWYXJpYWJsZW4gKFZhcmlhbnphbmFseXNlKS4NCg0KDQoNCiMjIFBvaXNzb24tVmVydGVpbHVuZw0KDQpEaWUgUG9pc3Nvbi1WZXJ0ZWlsdW5nIHJpY2h0ZXQgc2ljaCBhbiBlaW5lIGRpc2tyZXRlIFdhaHJzY2hlaW5saWNoa2VpdHN2ZXJ0ZWlsdW5nIG1pdCBaw6RobGVud2VydGVuLiBLdXJ6IHVtOiBXaWUgb2Z0IHRyaXR0IGVpbiBiZXN0aW1tdGVzLCB6w6RobGJhcmVzIEVyZWlnbmlzIGVpbiwgd2VubiBtYW4gZXMgc2VociBvZnQgd2llZGVyaG9sdD8NCg0KJCRQKFggPSB4KSA9IFxmcmFje1xsYW1iZGEgXnh9e3ghfSplXnstXGxhbWJkYX0kJA0KzrsgPSBpc3QgZGVyIEVyd2FydHVuZ3N3ZXJ0IGVpbmVyIGJpbm9taWFsdmVydGVpbHRlbiBadWZhbGxzZ3LDtsOfZSAoDQpuISBpc3QgZGllIEZha3VsdMOkdCBkZXIgbmF0w7xybGljaGVuIFphaGwgbg0KZSBpc3QgZGllIEV1bGVyJ3NjaGUgWmFobA0KDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQoNCiMgQnVpbGQgUG9pc3NvbiBkaXN0cmlidXRpb25zDQoNCnBfZGF0IDwtIG1hcF9kZigxOjEwLCB+IHRpYmJsZSgNCiAgbCA9IHBhc3RlKC4pLA0KICB4ID0gMDoyMCwNCiAgeSA9IGRwb2lzKDA6MjAsIC4pDQopKQ0KDQojIEJ1aWxkIE5vcm1hbCBkaXN0cmlidXRpb25zDQoNCm5fZGF0IDwtIG1hcF9kZigxOjEwLCB+IHRpYmJsZSgNCiAgbCA9IHBhc3RlKC4pLA0KICB4ID0gc2VxKDAsIDIwLCBieSA9IDAuMDAxKSwNCiAgeSA9IGRub3JtKHNlcSgwLCAyMCwgYnkgPSAwLjAwMSksIC4sIHNxcnQoLikpDQopKQ0KDQojIFVzZSBnZ3Bsb3QyIHRvIHBsb3QNCg0KZ2dwbG90KG5fZGF0LCBhZXMoeCwgeSwgY29sb3IgPSBmYWN0b3IobCwgbGV2ZWxzID0gMToxMCkpKSArDQogIGdlb21fbGluZSgpICsNCiAgZ2VvbV9wb2ludChkYXRhID0gcF9kYXQsIGFlcyh4LCB5LCBjb2xvciA9IGZhY3RvcihsLCBsZXZlbHMgPSAxOjEwKSkpICsNCiAgbGFicyhjb2xvciA9ICJMYW1iZGE6IikgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KYGBgDQoNCioqU28gc2llaHQgZGllIFBvaXNzb24tVmVydGVpbHVuZyBhdXMuIFNpZSBuw6RoZXJ0IHNpY2ggZXIgTm9ybWFsdmVydGVpbHVuZy4qKg0KRWluIGtsYXNzaXNjaGVzIEJlaXNwaWVsIGRlciBQb2lzc29uLVZlcnRlaWx1bmcgaXN0IGRpZSBBbnphaGwgZGVyIFNvbGRhdGVuIGRlciBwcmV1w59pc2NoZW4gQXJtZWUsIGRpZSBwcm8gSmFociBkdXJjaCBlaW5lbiBQZmVyZGV0cml0dCB2ZXJzZWhlbnRsaWNoIGdldMO2dGV0IHd1cmRlbi4gRGllIEFuemFobCBkZXIgTXV0YXRpb25lbiBlaW5lcyBiZXN0aW1tdGVuIEROQS1TdHJhbmcgcHJvIFplaXRlaW5oZWl0IG9kZXIgZGllIEFuemFobCBkZXIgQmVzdWNoZXIgZWluZXIgV2Vic2l0ZSBwcm8gTWludXRlIHNpbmQgd2VpdGVyZSBzZWhyIGd1dGUgQmVpc3BpZWxlLg0KDQo=