Dataset - Onderzoeksvraag - Design?
Data-exploratie
prostate <- read_csv("https://raw.githubusercontent.com/statomics/sbc20/master/data/prostate.csv")
prostate <- prostate %>%
mutate(svi = as.factor(svi))
library(GGally)
prostate %>%
dplyr::select(-pgg45) %>%
ggpairs()

- Schatting voor parameter \(\beta_v\) mogelijks geen zuiver effect van tumor volume.
- Zelfs als lcavol niet is geassocieerd met het lpsa, dan nog kunnen patiënten met een groter tumor volume een hoger lpsa hebben omdat ze bijvoorbeeld een aantasting van de zaadblaasjes hebben (svi status 1). \(\rightarrow\) Confounding.
- Door de svi status in het model op te nemen corrigeren we voor de mogelijkse confounding.
Vertalen van onderzoeksvraag naar populatie parameters: effectgrootte
\[\text{E}\left(Y\vert X_v, X_w, X_s\right) = \beta_0 + \beta_v X_v + \beta_w X_w + \beta_s X_s\]
Schatten van effectgrootte a.d.h.v. steekproef
- Kleinste kwadratentechniek
lmV <- lm(lpsa~lcavol, prostate)
summary(lmV)
Call:
lm(formula = lpsa ~ lcavol, data = prostate)
Residuals:
Min 1Q Median 3Q Max
-1.67624 -0.41648 0.09859 0.50709 1.89672
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.50730 0.12194 12.36 <2e-16 ***
lcavol 0.71932 0.06819 10.55 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.7875 on 95 degrees of freedom
Multiple R-squared: 0.5394, Adjusted R-squared: 0.5346
F-statistic: 111.3 on 1 and 95 DF, p-value: < 2.2e-16
lmVWS <- lm(lpsa~lcavol + lweight + svi, prostate)
summary(lmVWS)
Call:
lm(formula = lpsa ~ lcavol + lweight + svi, data = prostate)
Residuals:
Min 1Q Median 3Q Max
-1.72966 -0.45767 0.02814 0.46404 1.57012
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.26807 0.54350 -0.493 0.62301
lcavol 0.55164 0.07467 7.388 6.3e-11 ***
lweight 0.50854 0.15017 3.386 0.00104 **
sviinvasion 0.66616 0.20978 3.176 0.00203 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.7168 on 93 degrees of freedom
Multiple R-squared: 0.6264, Adjusted R-squared: 0.6144
F-statistic: 51.99 on 3 and 93 DF, p-value: < 2.2e-16
De parameter bij lcavol geeft nu aan dat patiënten met een tumorvolume dat 1% hoger ligt, maar eenzelfde prostaat gewicht en svi status hebben, een prostaat antigeen concentratie zullen hebben dat gemiddeld slechts 0.55% hoger ligt.
De reden dat we eerder een verschil van meer dan 0.72% vonden, kan worden verklaard doordat patiënten met een verschil in tumorvolume vaak ook verschillen in prostaat gewicht en svi status en omdat prostaat gewicht en svi mogelijks ook een associatie vertonen met log PSA

Inferentie
Kunnen we hetgeen we zien in de steekproef vertalen naar de populatie toe?
Hiervoor moeten we rekening houden dat we maar een heel klein deel van de populatie hebben kunnen bemonsteren.
Gevens, statistieken en conclusies zijn stochastisch. Ze variëren van steekproef tot steekproef.
We moeten die variabiliteit in kunnen schatten o.b.v. één enkele steekproef!
Aannames?
Representatieve steekproef:
\(\hat\beta_j\) is een onvertekende schatter van \(\beta\) als steekproef representatief is
\[E[\hat \beta_j]=\beta_j\]
Normaliteit
\[Y_{i} \sim N(\mu_i,\sigma^2)\] \[Y_i \sim N(\beta_0+\beta_vx_{iv}+\beta_wx_{iw} + \beta_sx_{is},\sigma^2) \longrightarrow \hat \beta_j \sim N(\beta_j, \sigma^2_{\hat \beta_j})\]
en lineaire combinaties van de model parameterschatters zijn ook normaal verdeeld.
\[
\longrightarrow L^T\hat \beta \sim N(L^T\beta, \sigma^2_{L^T\hat{\boldsymbol{\beta}}})
\]
Onafhankelijkheid en gelijkheid van variantie
\[\sigma^2_{L^T\hat{\boldsymbol{\beta}}} = c_L \sigma^2 \]
\[\hat \sigma^2 = MSE = \sum\limits_{i=1} ^ n \frac{(Y_i - \hat Y_i)^2}{n-p}\]
\[SE_{L^T\hat{\boldsymbol{\beta}}} = c_L \hat \sigma \]
\[ T = \frac{L\hat{\boldsymbol{\beta}} - L\boldsymbol{\beta}}{\text{SE}_{L\hat{\boldsymbol{\beta}}}}
\sim t_{n-p}\]
BI en T-test \(H_0: L\boldsymbol{\beta} = 0\) vs \(H_1: L\boldsymbol{\beta} \neq 0\)
F statistiek volgt F-verdeling onder de \(H_0\) \[ F = \frac{MSR_2 - MSR_1}{MSE} \sim F_{p_2 - p_1,n-p_2}\]
R - output
library(car)
summary(lmVWS)
Call:
lm(formula = lpsa ~ lcavol + lweight + svi, data = prostate)
Residuals:
Min 1Q Median 3Q Max
-1.72966 -0.45767 0.02814 0.46404 1.57012
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.26807 0.54350 -0.493 0.62301
lcavol 0.55164 0.07467 7.388 6.3e-11 ***
lweight 0.50854 0.15017 3.386 0.00104 **
sviinvasion 0.66616 0.20978 3.176 0.00203 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.7168 on 93 degrees of freedom
Multiple R-squared: 0.6264, Adjusted R-squared: 0.6144
F-statistic: 51.99 on 3 and 93 DF, p-value: < 2.2e-16
Anova(lmVWS, type = "III")
Conclusie
De associaties tussen lpsa \(\leftrightarrow\) log kanker volume, lpsa \(\leftrightarrow\) log prostaat gewicht en lpsa \(\leftrightarrow\) status van de zaadblaasjes zijn respectievelijk extreem significant (\(p<<0.001\)) en sterk significant (\(p = 0.001\) en \(p = 0.002\)).
- interpretaties van de hellingen en BI!
Wat als aannames niet zijn voldaan?
- Normaliteit en heteroscedasticiteit niet voldaan: transformatie van Y
- Lineariteit niet voldaan: transformatie van X of hogere orde termen (interacties en machten \(X^2, X^3, ...\)).
- Normaliteit niet voldaan: bij grote steekproeven CLT
LS0tCnRpdGxlOiAnMTAuIFJlY2FwOiBBbGdlbWVlbiBMaW5lYWlyIE1vZGVsIC0gQWRkaXRpZWYgTW9kZWwnCmF1dGhvcjogIkxpZXZlbiBDbGVtZW50IgpkYXRlOiAic3RhdE9taWNzLCBHaGVudCBVbml2ZXJzaXR5IChodHRwczovL3N0YXRvbWljcy5naXRodWIuaW8pIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgdGhlbWU6IGNvc21vCiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIGxhdGV4X2VuZ2luZTogeGVsYXRleAotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoaW5jbHVkZSA9IFRSVUUsIGNvbW1lbnQgPSBOQSwgZWNobyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkKbGlicmFyeSh0aWR5dmVyc2UpCmBgYAoKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CiNEbyBub3QgcnVuIGR1cmluZyB0aGUgbGVjdHVyZSB3aGVuIHdlIHdvcmsgaW50ZXJhY3RpdmVseQpzZXQuc2VlZCgxMzE0KQpgYGAKCiMgRGF0YXNldCAtIE9uZGVyem9la3N2cmFhZyAtIERlc2lnbj8KCi0gUHJvc3RhYXRrYW5rZXIgY2FzZSBzdHVkaWUKLSBBc3NvY2lhdGllIHR1c3NlbiBwcm9zdGFhdCBzcGVjaWZpZWsgYW50aWdlbiBjb25jZW50cmF0aWUgZW4gYW5kZXJlIHByZWRpY3RvcmVuCgotIFR5cGUgcmVzcG9uc2U/Ci0gVHlwZSBwcmVkaWN0b3Jlbj8KCiMgRGF0YS1leHBsb3JhdGllCgpgYGB7cn0KcHJvc3RhdGUgPC0gcmVhZF9jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGF0b21pY3Mvc2JjMjAvbWFzdGVyL2RhdGEvcHJvc3RhdGUuY3N2IikKCnByb3N0YXRlIDwtIHByb3N0YXRlICU+JQogIG11dGF0ZShzdmkgPSBhcy5mYWN0b3Ioc3ZpKSkKCmxpYnJhcnkoR0dhbGx5KQpwcm9zdGF0ZSAlPiUKICBkcGx5cjo6c2VsZWN0KC1wZ2c0NSkgICU+JQogIGdncGFpcnMoKQpgYGAKCi0gU2NoYXR0aW5nIHZvb3IgcGFyYW1ldGVyICRcYmV0YV92JCBtb2dlbGlqa3MgZ2VlbiB6dWl2ZXIgZWZmZWN0IHZhbiB0dW1vciB2b2x1bWUuCi0gWmVsZnMgYWxzIGxjYXZvbCBuaWV0IGlzIGdlYXNzb2NpZWVyZCBtZXQgaGV0IGxwc2EsICBkYW4gbm9nIGt1bm5lbiBwYXRpw6tudGVuIG1ldCBlZW4gZ3JvdGVyIHR1bW9yIHZvbHVtZSBlZW4gaG9nZXIgbHBzYSBoZWJiZW4gb21kYXQgemUgYmlqdm9vcmJlZWxkIGVlbiBhYW50YXN0aW5nIHZhbiBkZSB6YWFkYmxhYXNqZXMgaGViYmVuIChzdmkgc3RhdHVzIDEpLgokXHJpZ2h0YXJyb3ckIENvbmZvdW5kaW5nLgotIERvb3IgZGUgc3ZpIHN0YXR1cyBpbiBoZXQgbW9kZWwgb3AgdGUgbmVtZW4gY29ycmlnZXJlbiB3ZSB2b29yIGRlIG1vZ2VsaWprc2UgY29uZm91bmRpbmcuCgojIFZlcnRhbGVuIHZhbiBvbmRlcnpvZWtzdnJhYWcgbmFhciBwb3B1bGF0aWUgcGFyYW1ldGVyczogZWZmZWN0Z3Jvb3R0ZQoKXFtcdGV4dHtFfVxsZWZ0KFlcdmVydCBYX3YsIFhfdywgWF9zXHJpZ2h0KSA9IFxiZXRhXzAgKyBcYmV0YV92IFhfdiArIFxiZXRhX3cgWF93ICsgXGJldGFfcyBYX3NcXQoKCi0gQXNzb2NpYXRpZSB2YW4gcHJlZGljdG9yZW4gbWV0IGxvZyBQU0E6IGhlbGxpbmdlbiB2YW4gaGV0IG1vZGVsCi0gTWVlciBhY2N1cmF0ZSBwcmVkaWN0aWVzIGRvb3IgbWVlcmRlcmUgcHJlZGljdG9yZW4gc2ltdWx0YWFuIGluIHJla2VuaW5nIHRlIGJyZW5nZW4KCgotIEludGVycHJldGF0aWU/CgogIC0gdmVyc2NoaWwgaW4gZ2VtaWRkZWxkZSB1aXRrb21zdCB0dXNzZW4gc3ViamVjdGVuIGRpZSBpbiDDqcOpbiBlZW5oZWlkIHZhbiBsb2cgdHVtb3Igdm9sdW1lICgkWF92JCkgdmVyc2NoaWxsZW4sIG1hYXIgZGV6ZWxmZGUgd2FhcmRlIGhlYmJlbiB2b29yIGRlIG92ZXJpZ2UgdmVya2xhcmVuZGUgdmFyaWFiZWxlbiAoJFhfdyQgZW4gJFhfcyQpIGluIGhldCBtb2RlbC4KCiAgLSBBc3NvY2lhdGllIHR1c3NlbiBsb2cgUFNBIGVuIGRlIHByZWRpY3RvciBsb2cgdHVtb3Igdm9sdW1lIHdhYXJiaWogZ2Vjb3JyaWdlZXJkIHdvcmR0IHZvb3IgZGUgb3ZlcmlnZSBwcmVkaWN0b3JlbiwgIGhpZXIgZHVzIGFzc29jaWF0aWUgdmFuIGxvZyBQU0EgZW4gaGV0IGxvZyB0dW1vciB2b2x1bWUgbmEgY29ycmVjdGllIHZvb3IgbG9nIHByb3N0YWF0Z2V3aWNodCBlbiBzdmktc3RhdHVzLgoKCiMgU2NoYXR0ZW4gdmFuIGVmZmVjdGdyb290dGUgYS5kLmgudi4gc3RlZWtwcm9lZgoKLSBLbGVpbnN0ZSBrd2FkcmF0ZW50ZWNobmllawoKYGBge3J9CmxtViA8LSBsbShscHNhfmxjYXZvbCwgcHJvc3RhdGUpCnN1bW1hcnkobG1WKQpsbVZXUyA8LSBsbShscHNhfmxjYXZvbCArIGx3ZWlnaHQgKyBzdmksIHByb3N0YXRlKQpzdW1tYXJ5KGxtVldTKQpgYGAKCkRlIHBhcmFtZXRlciBiaWogbGNhdm9sIGdlZWZ0IG51IGFhbiBkYXQgcGF0acOrbnRlbiBtZXQgZWVuIHR1bW9ydm9sdW1lIGRhdCAxJSBob2dlciBsaWd0LCBtYWFyIGVlbnplbGZkZSBwcm9zdGFhdCBnZXdpY2h0IGVuIHN2aSBzdGF0dXMgaGViYmVuLCBlZW4gcHJvc3RhYXQgYW50aWdlZW4gY29uY2VudHJhdGllIHp1bGxlbiBoZWJiZW4gZGF0IGdlbWlkZGVsZCBzbGVjaHRzIDAuNTUlIGhvZ2VyIGxpZ3QuCgpEZSByZWRlbiBkYXQgd2UgZWVyZGVyIGVlbiB2ZXJzY2hpbCB2YW4gbWVlciBkYW4gMC43MiUgdm9uZGVuLCBrYW4gd29yZGVuIHZlcmtsYWFyZCBkb29yZGF0IHBhdGnDq250ZW4gbWV0IGVlbiB2ZXJzY2hpbCBpbiB0dW1vcnZvbHVtZSB2YWFrIG9vayB2ZXJzY2hpbGxlbiBpbiBwcm9zdGFhdCBnZXdpY2h0IGVuIHN2aSBzdGF0dXMgZW4gb21kYXQgcHJvc3RhYXQgZ2V3aWNodCBlbiBzdmkgbW9nZWxpamtzIG9vayBlZW4gYXNzb2NpYXRpZSB2ZXJ0b25lbiBtZXQgbG9nIFBTQQoKCmBgYHtyIG91dC53aWR0aD0nODAlJywgZmlnLmFzcD0uOCwgZmlnLmFsaWduPSdjZW50ZXInLCBtZXNzYWdlPUZBTFNFLGVjaG89RkFMU0V9CmxpYnJhcnkocGxvdDNEKQpncmlkLmxpbmVzID0gMTAKeCA8LSBwcm9zdGF0ZSRsY2F2b2wKeSA8LSBwcm9zdGF0ZSRsd2VpZ2h0CnogPC0gcHJvc3RhdGUkbHBzYQpmaXQgPC0gbG0oen54K3krc3ZpLGRhdGE9cHJvc3RhdGUpCngucHJlZCA8LSBzZXEobWluKHgpLCBtYXgoeCksIGxlbmd0aC5vdXQgPSBncmlkLmxpbmVzKQp5LnByZWQgPC0gc2VxKG1pbih5KSwgbWF4KHkpLCBsZW5ndGgub3V0ID0gZ3JpZC5saW5lcykKCiMgZml0dGVkIHBvaW50cyBmb3IgZHJvcGxpbmVzIHRvIHN1cmZhY2UKdGg9MjAKcGg9NQpzY2F0dGVyM0QoeCwgeSwgeiwgcGNoID0gMTYsY29sPWMoImRhcmtibHVlIiwicmVkIilbYXMuZG91YmxlKHByb3N0YXRlJHN2aSldLCBjZXggPSAuNzUsCiAgICB0aGV0YSA9IHRoLCBwaGkgPSBwaCwgdGlja3R5cGUgPSAiZGV0YWlsZWQiLAogICAgeGxhYiA9ICJsY2F2b2wiLCB5bGFiID0gImx3ZWlnaHQiLCB6bGFiID0gImxwc2EiLCAgCiAgIGNvbHZhcj1GQUxTRSxidHkgPSAiZyIpCgpmb3IgKGkgaW4gMTpucm93KHByb3N0YXRlKSkKbGluZXMzRCh4PXJlcChwcm9zdGF0ZSRsY2F2b2xbaV0sMikseT1yZXAocHJvc3RhdGUkbHdlaWdodFtpXSwyKSx6PWMocHJvc3RhdGUkbHBzYVtpXSxsbVZXUyRmaXRbaV0pLGNvbD1jKCJkYXJrYmx1ZSIsInJlZCIpW2FzLmRvdWJsZShwcm9zdGF0ZSRzdmkpW2ldXSxhZGQ9VFJVRSxsdHk9MikKCnoucHJlZDNEIDwtIG91dGVyKHgucHJlZCwgeS5wcmVkLCBmdW5jdGlvbih4LHkpIHtsbVZXUyRjb2VmWzFdK2xtVldTJGNvZWZbMl0qeCtsbVZXUyRjb2VmWzNdKnl9KQp4LnByZWQzRCA8LSBvdXRlcih4LnByZWQseS5wcmVkLGZ1bmN0aW9uKHgseSkgeCkKeS5wcmVkM0QgPC0gb3V0ZXIoeC5wcmVkLHkucHJlZCxmdW5jdGlvbih4LHkpIHkpCnN1cmYzRCh4LnByZWQzRCx5LnByZWQzRCx6LnByZWQzRCxjb2w9ImJsdWUiLGZhY2V0cz1OQSxhZGQ9VFJVRSkKejIucHJlZDNEIDwtIG91dGVyKHgucHJlZCwgeS5wcmVkLCBmdW5jdGlvbih4LHkpIHtsbVZXUyRjb2VmWzFdK2xtVldTJGNvZWZbNF0rbG1WV1MkY29lZlsyXSp4K2xtVldTJGNvZWZbM10qeX0pCnN1cmYzRCh4LnByZWQzRCx5LnByZWQzRCx6Mi5wcmVkM0QsY29sPSJyZWQiLGZhY2V0cz1OQSxhZGQ9VFJVRSkKYGBgCgojIEluZmVyZW50aWUKCi0gS3VubmVuIHdlIGhldGdlZW4gd2UgemllbiBpbiBkZSBzdGVla3Byb2VmIHZlcnRhbGVuIG5hYXIgZGUgcG9wdWxhdGllIHRvZT8KCi0gSGllcnZvb3IgbW9ldGVuIHdlIHJla2VuaW5nIGhvdWRlbiBkYXQgd2UgbWFhciBlZW4gaGVlbCBrbGVpbiBkZWVsIHZhbiBkZSBwb3B1bGF0aWUgaGViYmVuIGt1bm5lbiBiZW1vbnN0ZXJlbi4KCi0gR2V2ZW5zLCBzdGF0aXN0aWVrZW4gZW4gY29uY2x1c2llcyB6aWpuIHN0b2NoYXN0aXNjaC4gWmUgdmFyacOrcmVuIHZhbiBzdGVla3Byb2VmIHRvdCBzdGVla3Byb2VmLgoKLSBXZSBtb2V0ZW4gZGllIHZhcmlhYmlsaXRlaXQgaW4ga3VubmVuIHNjaGF0dGVuIG8uYi52LiDDqcOpbiBlbmtlbGUgc3RlZWtwcm9lZiEKCiMjIEFhbm5hbWVzPwojIyMgUmVwcmVzZW50YXRpZXZlIHN0ZWVrcHJvZWY6CgokXGhhdFxiZXRhX2okIGlzIGVlbiBvbnZlcnRla2VuZGUgc2NoYXR0ZXIgdmFuICRcYmV0YSQgYWxzIHN0ZWVrcHJvZWYgcmVwcmVzZW50YXRpZWYgaXMKClxbRVtcaGF0IFxiZXRhX2pdPVxiZXRhX2pcXQoKIyMjIE5vcm1hbGl0ZWl0CgpcW1lfe2l9IFxzaW0gTihcbXVfaSxcc2lnbWFeMilcXQpcW1lfaSBcc2ltIE4oXGJldGFfMCtcYmV0YV92eF97aXZ9K1xiZXRhX3d4X3tpd30gKyBcYmV0YV9zeF97aXN9LFxzaWdtYV4yKSAgXGxvbmdyaWdodGFycm93IFxoYXQgXGJldGFfaiBcc2ltIE4oXGJldGFfaiwgXHNpZ21hXjJfe1xoYXQgXGJldGFfan0pXF0KCmVuIGxpbmVhaXJlIGNvbWJpbmF0aWVzIHZhbiBkZSBtb2RlbCBwYXJhbWV0ZXJzY2hhdHRlcnMgemlqbiBvb2sgbm9ybWFhbCB2ZXJkZWVsZC4KClxbClxsb25ncmlnaHRhcnJvdyBMXlRcaGF0IFxiZXRhIFxzaW0gTihMXlRcYmV0YSwgXHNpZ21hXjJfe0xeVFxoYXR7XGJvbGRzeW1ib2x7XGJldGF9fX0pClxdCgojIyMgT25hZmhhbmtlbGlqa2hlaWQgZW4gZ2VsaWpraGVpZCB2YW4gdmFyaWFudGllCgpcW1xzaWdtYV4yX3tMXlRcaGF0e1xib2xkc3ltYm9se1xiZXRhfX19ID0gY19MIFxzaWdtYV4yIFxdCgotICRcc2lnbWFeMj8kCgpcW1xoYXQgXHNpZ21hXjIgPSBNU0UgPSBcc3VtXGxpbWl0c197aT0xfSBeIG4gXGZyYWN7KFlfaSAtIFxoYXQgWV9pKV4yfXtuLXB9XF0KClxbU0Vfe0xeVFxoYXR7XGJvbGRzeW1ib2x7XGJldGF9fX0gPSBjX0wgXGhhdCBcc2lnbWEgXF0KCi0gdCBzdGF0aXN0aWVrCgpcWyBUID0gXGZyYWN7TFxoYXR7XGJvbGRzeW1ib2x7XGJldGF9fSAtIExcYm9sZHN5bWJvbHtcYmV0YX19e1x0ZXh0e1NFfV97TFxoYXR7XGJvbGRzeW1ib2x7XGJldGF9fX19CiBcc2ltIHRfe24tcH1cXQoKLSBCSSBlbiBULXRlc3QgJEhfMDogTFxib2xkc3ltYm9se1xiZXRhfSA9IDAkIHZzICAkSF8xOiBMXGJvbGRzeW1ib2x7XGJldGF9IFxuZXEgMCQKCi0gRiBzdGF0aXN0aWVrIHZvbGd0IEYtdmVyZGVsaW5nIG9uZGVyIGRlICRIXzAkClxbIEYgPSBcZnJhY3tNU1JfMiAtIE1TUl8xfXtNU0V9IFxzaW0gRl97cF8yIC0gcF8xLG4tcF8yfVxdCgojIFIgLSBvdXRwdXQKCmBgYHtyfQpsaWJyYXJ5KGNhcikKc3VtbWFyeShsbVZXUykKQW5vdmEobG1WV1MsIHR5cGUgPSAiSUlJIikKYGBgCgojIENvbmNsdXNpZQoKRGUgYXNzb2NpYXRpZXMgdHVzc2VuIGxwc2EgJFxsZWZ0cmlnaHRhcnJvdyQgbG9nIGthbmtlciB2b2x1bWUsIGxwc2EgJFxsZWZ0cmlnaHRhcnJvdyQgbG9nIHByb3N0YWF0IGdld2ljaHQgZW4gbHBzYSAkXGxlZnRyaWdodGFycm93JCBzdGF0dXMgdmFuIGRlIHphYWRibGFhc2plcyB6aWpuIHJlc3BlY3RpZXZlbGlqayBleHRyZWVtIHNpZ25pZmljYW50ICgkcDw8MC4wMDEkKSBlbiBzdGVyayBzaWduaWZpY2FudCAoJHAgPSAwLjAwMSQgZW4gJHAgPSAwLjAwMiQpLgoKKyBpbnRlcnByZXRhdGllcyB2YW4gZGUgaGVsbGluZ2VuIGVuIEJJIQoKCiMgV2F0IGFscyBhYW5uYW1lcyBuaWV0IHppam4gdm9sZGFhbj8KCi0gTm9ybWFsaXRlaXQgZW4gaGV0ZXJvc2NlZGFzdGljaXRlaXQgbmlldCB2b2xkYWFuOiB0cmFuc2Zvcm1hdGllIHZhbiBZCi0gTGluZWFyaXRlaXQgbmlldCB2b2xkYWFuOiB0cmFuc2Zvcm1hdGllIHZhbiBYIG9mIGhvZ2VyZSBvcmRlIHRlcm1lbiAoaW50ZXJhY3RpZXMgZW4gbWFjaHRlbiAkWF4yLCBYXjMsIC4uLiQpLgotIE5vcm1hbGl0ZWl0IG5pZXQgdm9sZGFhbjogYmlqIGdyb3RlIHN0ZWVrcHJvZXZlbiBDTFQK