Outline


    01. Correlation (Pearson’s r)

    02. Linear Regression


    Data and packages

    Hate Crimes




    • Packages:
    ipak <- function(pkg){
      new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
      if (length(new.pkg)) 
        install.packages(new.pkg, dependencies = TRUE)
      sapply(pkg, require, character.only = TRUE)
    }
    
    packages <- c("ggplot2", "dplyr")
    ipak(packages)


    • Create a subset of the dataframe:
    Hate_Crimes_selected <- read.csv("hate_crimes.csv") %>% 
      select(c(share_voters_voted_trump, share_white_poverty, median_household_income))


    Correlation


    Pearson product-moment correlation coefficient:



    Předpoklady použití :
    • Alespoň intervalová úroveň měření proměnných
    • Normálně rozložená data
    • Homoskedascita


    • Normalita rozložení:
    hist(Hate_Crimes_selected$share_voters_voted_trump, 
         main="Histogram podílu voličů Donalda Trumpa", 
         xlab="Podíl (v %)", 
         border="red", 
         col="darkblue", 
         xlim=c(0,1), 
         breaks=20)


    • Homoskedascita:
    plot(Hate_Crimes_selected$share_voters_voted_trump,
    Hate_Crimes_selected$median_household_income, 
    main="Scatterplot podílu voličů Donalda Trumpa \n a mediánu ročního příjmu domácnosti", 
    xlab="Podíl voličů Donalda Trumpa", 
    ylab="Medián ročního
    příjmu domácnosti (v $)", 
    pch=19)


    qqnorm(Hate_Crimes_selected$share_voters_voted_trump)

    base


    • Compute the correlations among share_white_poverty, share_voters_voted_trump and median_household_income:
    cor(Hate_Crimes_selected)
                             share_voters_voted_trump share_white_poverty
    share_voters_voted_trump                1.0000000           0.5528492
    share_white_poverty                     0.5528492           1.0000000
    median_household_income                -0.5975281          -0.8180451
                             median_household_income
    share_voters_voted_trump              -0.5975281
    share_white_poverty                   -0.8180451
    median_household_income                1.0000000
    • The cor() function does not calculate p-values to test for significance, but the cor.test() function does:
    
    cor.test(Hate_Crimes_selected$share_voters_voted_trump, Hate_Crimes_selected$share_white_poverty, use = pairwise)
    
        Pearson's product-moment correlation
    
    data:  Hate_Crimes_selected$share_voters_voted_trump and Hate_Crimes_selected$share_white_poverty
    t = 4.6442, df = 49, p-value = 2.589e-05
    alternative hypothesis: true correlation is not equal to 0
    95 percent confidence interval:
     0.3271014 0.7189034
    sample estimates:
          cor 
    0.5528492 
    cor.test(Hate_Crimes_selected$share_white_poverty, Hate_Crimes_selected$median_household_income, use = pairwise)
    
        Pearson's product-moment correlation
    
    data:  Hate_Crimes_selected$share_white_poverty and Hate_Crimes_selected$median_household_income
    t = -9.9561, df = 49, p-value = 2.329e-13
    alternative hypothesis: true correlation is not equal to 0
    95 percent confidence interval:
     -0.8924377 -0.7003477
    sample estimates:
           cor 
    -0.8180451 
    cor.test(Hate_Crimes_selected$share_voters_voted_trump, Hate_Crimes_selected$median_household_income, use = pairwise)
    
        Pearson's product-moment correlation
    
    data:  Hate_Crimes_selected$share_voters_voted_trump and Hate_Crimes_selected$median_household_income
    t = -5.2163, df = 49, p-value = 3.669e-06
    alternative hypothesis: true correlation is not equal to 0
    95 percent confidence interval:
     -0.7496651 -0.3854093
    sample estimates:
           cor 
    -0.5975281 


    Rcmdr


    • The rcorr.adjust() function of the Rcmdr package computes the correlations with the pairwise p-values among the correlations:
    library("Rcmdr")


    • Two types of p-values are computed: the ordinary p-values and the adjusted p-values:
    RcmdrMisc::rcorr.adjust(Hate_Crimes_selected)
    
     Pearson correlations:
                             share_voters_voted_trump share_white_poverty
    share_voters_voted_trump                   1.0000              0.5528
    share_white_poverty                        0.5528              1.0000
    median_household_income                   -0.5975             -0.8180
                             median_household_income
    share_voters_voted_trump                 -0.5975
    share_white_poverty                      -0.8180
    median_household_income                   1.0000
    
     Number of observations: 51 
    
     Pairwise two-sided p-values:
                             share_voters_voted_trump share_white_poverty
    share_voters_voted_trump                          <.0001             
    share_white_poverty      <.0001                                      
    median_household_income  <.0001                   <.0001             
                             median_household_income
    share_voters_voted_trump <.0001                 
    share_white_poverty      <.0001                 
    median_household_income                         
    
     Adjusted p-values (Holm's method)
                             share_voters_voted_trump share_white_poverty
    share_voters_voted_trump                          <.0001             
    share_white_poverty      <.0001                                      
    median_household_income  <.0001                   <.0001             
                             median_household_income
    share_voters_voted_trump <.0001                 
    share_white_poverty      <.0001                 
    median_household_income                         


    Linear Regression




    • Jak to, že děti vysokých rodičů samy bývají vysoké, ale ne tak jako jejich rodiče?
    • Jak to, že děti útlých rodičů samy bývají útlé, ale ne tak útlé jako jejich rodiče?
    • Jak to, že nejlepší atlet minulé sezóny letos podává o něco horší výkon než loni?


    Regression towards mediocrity


    “It appeared from these experiments that the offspring did not tend to resemble their parent seeds in size, but to be always more mediocre than they-to be smaller than the parents, if the parents were large; to be larger than the parents, if the parents were very small.”

    “The point of convergence was considerably below the average size of the seeds contained in the large bagful I bought at a nursery garden, out of which I selected those that were sown, and I had some reason to believe that the size of the seed towards which the produce converged was similar to that of an average seed taken out of beds of self-planted specimens.”

    Galton, 1886, s. 246


    • Lineární regrese
      • Nakolik lze z IQ skóru usuzovat o výkonu v matematice?
        • Predikce


    • Vícenásobná lineární regrese
      • Přispívá k výši platu kromě úrovně vzdělání také pohlaví?
        • Predikce
        • Inkrementální validita
        • Statistická kontrola


    Notace
    \(Y = Y' + e\)


    • Lineární regrese:

    \(Y' = a + bX\)

    \(Y' = b_{0} + b_{1}X_{1}\)


    • Vícenásobná lineární regrese:

    \(Y' = b_{0} + b_{n}X_{n}\)

    \(Y' = b_{0} + b_{1}X_{1} + b_{2}X_{2} + ... + b_{n}X_{n}+ e\)


    • \(Y\) = Outcome (= dependent) variable
    • \(Y'\) = Our model
    • \(e\) = Error
    • \(a\) or \(b_{0}\) = Intercept
    • \(b\) or \(b_{1...n}\) = Slope
    • \(X_{1...n}\) = Predictor (= independent variable)



    Přímka (model) je proložena daty tak, aby jim co nejlépe odpovídala.

    • Metoda odhadu nejmenších čtverců (Least Squares Estimation)
      • Suma (druhých mocnin) vzdáleností modelu od dat je nejmenší možná



    \(S_{T}\)\(^{2}\) = \(S_{M}\)\(^{2}\) + \(S_{R}\)\(^{2}\)

    • Neboli \(SS_{T} = SS_{res} + SS_{reg}\)


    \(R^{2}\) = \(SS_{M}\)\(^{2}\) + \(SS_{T}\)\(^{2}\)


    \(SS_{M}\)

    • Rozdíl mezi nulovým modelem (průměr \(Y\)) a námi stanoveným modeleme (přímkou).

    \(SS_{R}\)

    • Rozdíl mezi daty a námi stanoveným modelem (přímkou).

    \(SS_{T}\)

    • Rozdíl mezi daty a nulovým modelem (průměr \(Y\)).

    \(R^{2}\)

    • Podíl rozptylu závislé (outcome) proměnné vysvětlené modelem (= koeficient determinance).


    Metoda nejmenších čtverců graficky



    Model

    ModelHateCrime <- lm(formula = share_voters_voted_trump ~ share_white_poverty, data = Hate_Crimes_selected)


    • Compute the summary statistics for model:
    # Generic functions (summary) change their behaviour based on an object's class.
    
    summary(ModelHateCrime)
    
    Call:
    lm(formula = share_voters_voted_trump ~ share_white_poverty, 
        data = Hate_Crimes_selected)
    
    Residuals:
          Min        1Q    Median        3Q       Max 
    -0.312542 -0.052037  0.007795  0.061240  0.214686 
    
    Coefficients:
                        Estimate Std. Error t value Pr(>|t|)    
    (Intercept)           0.2463     0.0543   4.536 3.72e-05 ***
    share_white_poverty   2.6554     0.5718   4.644 2.59e-05 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 0.09992 on 49 degrees of freedom
    Multiple R-squared:  0.3056,    Adjusted R-squared:  0.2915 
    F-statistic: 21.57 on 1 and 49 DF,  p-value: 2.589e-05


    • Perform an analysis of variance on model:
    anova(ModelHateCrime)
    Analysis of Variance Table
    
    Response: share_voters_voted_trump
                        Df  Sum Sq  Mean Sq F value    Pr(>F)    
    share_white_poverty  1 0.21536 0.215355  21.569 2.589e-05 ***
    Residuals           49 0.48924 0.009985                      
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


    • Predict based on the fitted function:
    predict(ModelHateCrime)
            1         2         3         4         5         6         7         8         9 
    0.5649769 0.4056510 0.4853139 0.5649769 0.4853139 0.4322053 0.4056510 0.4587596 0.3525424 
           10        11        12        13        14        15        16        17        18 
    0.5384226 0.4853139 0.4322053 0.5384226 0.4322053 0.5649769 0.4853139 0.5384226 0.6977485 
           19        20        21        22        23        24        25        26        27 
    0.5649769 0.5649769 0.4056510 0.4587596 0.4853139 0.3790967 0.6180855 0.4322053 0.5118683 
           28        29        30        31        32        33        34        35        36 
    0.4322053 0.4587596 0.4056510 0.4322053 0.5118683 0.5118683 0.5118683 0.4853139 0.5118683 
           37        38        39        40        41        42        43        44        45 
    0.5118683 0.5118683 0.4853139 0.4587596 0.4853139 0.4587596 0.5915312 0.4587596 0.4587596 
           46        47        48        49        50        51 
    0.5118683 0.4322053 0.4853139 0.6180855 0.4853139 0.4853139 


    Coefficients


    \(b_{i}\)

    • Vyjadřuje nárůst \(Y’\) při nárůstu \(X_{i}\) o jednu jednotku v jednotkách Y, při kontrole všech ostatních prediktorů (tj. semiparciální korelace); jedinečný přínos
      • K porovnání síly prediktoru v různých skupinách, modelech, vzorcích

    \(β_{i}\)

    • Beta vyjadřuje nárůst \(Y’\) při nárůstu \(X_{i}\) o 1; pokud jsou \(X_{i}\) a \(Y\) standardizovány, při kontrole všech ostatních prediktorů (tj. semiparciální korelace), jedinečný přínos
      • K porovnání prediktorů mezi sebou v rámci jednoho modelu
      • K porovnání různě operacionalizovaného prediktoru v různých modelech
      • Ukazatel velikosti účinku

    \(b_{0}\)

    • Po vycentrování (odečtení průměru od všech hodnot \(X_{i}\)) odpovídá průměru \(Y\).
    QuantPsyc::lm.beta(ModelHateCrime)
    share_white_poverty 
              0.5528492 


    Resources

    American Psychological Association. (2001). Publication manual of the American Psychological Association (6th ed.). Washington, DC: APA.

    Field, A. (2009). Discovering statistics using SPSS, 3th Ed. Los Angeles: Sage.

    Fox, J. (2016). Applied Regression Analysis and Generalized Linear Models, 3th Ed. Los Angeles: Sage.

    Galton, F. (1886). Regression towards mediocrity in hereditary stature. Journal of the Anthropological Institute, 15, pp. 246-63. Dostupné online z “http://galton.org/essays/1880-1889/galton-1886-jaigiregression-stature.pdf

    Robotková, A., & Ježek, S. (2012). Vícenásobná lineární regrese. Prezentace ke kurzu PSY252.

     

    A work by Vit Gabrhel

     

    LS0tCnRpdGxlOiAiKiowOS4gQ29ycmVsYXRpb24sIExpbmVhciBSZWdyZXNzaW9uKioiCnN1YnRpdGxlOiAiUjEwMSIKYXV0aG9yOiAiVsOtdCBHYWJyaGVsIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdGhlbWU6IHlldGkKICAgIGNvZGVfZm9sZGluZzogInNob3ciCiAgICAKLS0tCgojIyBPdXRsaW5lCjxicj4KCjx1bD4KIyMjIyAwMS4gKipDb3JyZWxhdGlvbiAoUGVhcnNvbidzIHIpKioKIyMjIyAwMi4gKipMaW5lYXIgUmVncmVzc2lvbioqCjx1bC8+Cgo8YnI+CgojIyBEYXRhIGFuZCBwYWNrYWdlcwojIyMgKkhhdGUgQ3JpbWVzKgoKPGJyPgoKIVtdKDAxLnBuZykKCjxicj4KCiFbXSgwMi5wbmcpCgo8YnI+CgoqIFBhY2thZ2VzOgpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgcmVzdWx0cz0naGlkZScsIHdhcm5pbmc9RkFMU0V9CmlwYWsgPC0gZnVuY3Rpb24ocGtnKXsKICBuZXcucGtnIDwtIHBrZ1shKHBrZyAlaW4lIGluc3RhbGxlZC5wYWNrYWdlcygpWywgIlBhY2thZ2UiXSldCiAgaWYgKGxlbmd0aChuZXcucGtnKSkgCiAgICBpbnN0YWxsLnBhY2thZ2VzKG5ldy5wa2csIGRlcGVuZGVuY2llcyA9IFRSVUUpCiAgc2FwcGx5KHBrZywgcmVxdWlyZSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQp9CgpwYWNrYWdlcyA8LSBjKCJnZ3Bsb3QyIiwgImRwbHlyIikKaXBhayhwYWNrYWdlcykKYGBgCgo8YnI+CgoqIENyZWF0ZSBhIHN1YnNldCBvZiB0aGUgZGF0YWZyYW1lOgpgYGB7cn0KSGF0ZV9DcmltZXNfc2VsZWN0ZWQgPC0gcmVhZC5jc3YoImhhdGVfY3JpbWVzLmNzdiIpICU+JSAKICBzZWxlY3QoYyhzaGFyZV92b3RlcnNfdm90ZWRfdHJ1bXAsIHNoYXJlX3doaXRlX3BvdmVydHksIG1lZGlhbl9ob3VzZWhvbGRfaW5jb21lKSkKYGBgCgo8YnI+CgojIyBDb3JyZWxhdGlvbgoKPGJyPiAKCiMjIyMgWypQZWFyc29uIHByb2R1Y3QtbW9tZW50IGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50Kl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGVhcnNvbl9jb3JyZWxhdGlvbl9jb2VmZmljaWVudCk6Cgo8YnI+CgohW10oMDMuanBnKQoKPGJyPgoKIyMjIyMgPHU+IFDFmWVkcG9rbGFkeSBwb3XFvml0w60gPC91PiA6CiogQWxlc3BvxYggaW50ZXJ2YWxvdsOhIMO6cm92ZcWIIG3Em8WZZW7DrSBwcm9txJtubsO9Y2gKKiBOb3Jtw6FsbsSbIHJvemxvxb5lbsOhIGRhdGEKKiBIb21vc2tlZGFzY2l0YQoKPGJyPgoKKiBOb3JtYWxpdGEgcm96bG/FvmVuw606CmBgYHtyfQpoaXN0KEhhdGVfQ3JpbWVzX3NlbGVjdGVkJHNoYXJlX3ZvdGVyc192b3RlZF90cnVtcCwgCiAgICAgbWFpbj0iSGlzdG9ncmFtIHBvZMOtbHUgdm9sacSNxa8gRG9uYWxkYSBUcnVtcGEiLCAKICAgICB4bGFiPSJQb2TDrWwgKHYgJSkiLCAKICAgICBib3JkZXI9InJlZCIsIAogICAgIGNvbD0iZGFya2JsdWUiLCAKICAgICB4bGltPWMoMCwxKSwgCiAgICAgYnJlYWtzPTIwKQpgYGAKCjxicj4KCiogSG9tb3NrZWRhc2NpdGE6CmBgYHtyfQpwbG90KEhhdGVfQ3JpbWVzX3NlbGVjdGVkJHNoYXJlX3ZvdGVyc192b3RlZF90cnVtcCwKSGF0ZV9DcmltZXNfc2VsZWN0ZWQkbWVkaWFuX2hvdXNlaG9sZF9pbmNvbWUsIAptYWluPSJTY2F0dGVycGxvdCBwb2TDrWx1IHZvbGnEjcWvIERvbmFsZGEgVHJ1bXBhIFxuIGEgbWVkacOhbnUgcm/EjW7DrWhvIHDFmcOtam11IGRvbcOhY25vc3RpIiwgCnhsYWI9IlBvZMOtbCB2b2xpxI3FryBEb25hbGRhIFRydW1wYSIsIAp5bGFiPSJNZWRpw6FuIHJvxI1uw61obwpwxZnDrWptdSBkb23DoWNub3N0aSAodiAkKSIsIApwY2g9MTkpCmBgYAoKPGJyPgoKKiBbTm9ybWFsIHByb2JhYmlsaXR5IHBsb3RdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05vcm1hbF9wcm9iYWJpbGl0eV9wbG90KTogCmBgYHtyfQpxcW5vcm0oSGF0ZV9DcmltZXNfc2VsZWN0ZWQkc2hhcmVfdm90ZXJzX3ZvdGVkX3RydW1wKQpgYGAKCiMjIyBiYXNlCgo8YnI+CgoqIENvbXB1dGUgdGhlIGNvcnJlbGF0aW9ucyBhbW9uZyBzaGFyZV93aGl0ZV9wb3ZlcnR5LCBzaGFyZV92b3RlcnNfdm90ZWRfdHJ1bXAgYW5kIG1lZGlhbl9ob3VzZWhvbGRfaW5jb21lOgpgYGB7cn0KY29yKEhhdGVfQ3JpbWVzX3NlbGVjdGVkKQpgYGAKCiogVGhlIGNvcigpIGZ1bmN0aW9uIGRvZXMgbm90IGNhbGN1bGF0ZSBwLXZhbHVlcyB0byB0ZXN0IGZvciBzaWduaWZpY2FuY2UsIGJ1dCB0aGUgY29yLnRlc3QoKSBmdW5jdGlvbiBkb2VzOgpgYGB7cn0KCmNvci50ZXN0KEhhdGVfQ3JpbWVzX3NlbGVjdGVkJHNoYXJlX3ZvdGVyc192b3RlZF90cnVtcCwgSGF0ZV9DcmltZXNfc2VsZWN0ZWQkc2hhcmVfd2hpdGVfcG92ZXJ0eSwgdXNlID0gcGFpcndpc2UpCgpjb3IudGVzdChIYXRlX0NyaW1lc19zZWxlY3RlZCRzaGFyZV93aGl0ZV9wb3ZlcnR5LCBIYXRlX0NyaW1lc19zZWxlY3RlZCRtZWRpYW5faG91c2Vob2xkX2luY29tZSwgdXNlID0gcGFpcndpc2UpCgpjb3IudGVzdChIYXRlX0NyaW1lc19zZWxlY3RlZCRzaGFyZV92b3RlcnNfdm90ZWRfdHJ1bXAsIEhhdGVfQ3JpbWVzX3NlbGVjdGVkJG1lZGlhbl9ob3VzZWhvbGRfaW5jb21lLCB1c2UgPSBwYWlyd2lzZSkKYGBgCgo8YnI+CgojIyMgUmNtZHIKCjxicj4KCiogVGhlIHJjb3JyLmFkanVzdCgpIGZ1bmN0aW9uIG9mIHRoZSBbUmNtZHJdKGh0dHBzOi8vd3d3LnJjb21tYW5kZXIuY29tLykgcGFja2FnZSBjb21wdXRlcyB0aGUgY29ycmVsYXRpb25zIHdpdGggdGhlIHBhaXJ3aXNlIHAtdmFsdWVzIGFtb25nIHRoZSBjb3JyZWxhdGlvbnM6CmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBldmFsPUZBTFNFLCBtZXNzYWdlPSdoaWRlJ30KbGlicmFyeSgiUmNtZHIiKQpgYGAKCjxicj4KCiogVHdvIHR5cGVzIG9mIHAtdmFsdWVzIGFyZSBjb21wdXRlZDogdGhlIG9yZGluYXJ5IHAtdmFsdWVzIGFuZCB0aGUgYWRqdXN0ZWQgcC12YWx1ZXM6CmBgYHtyLCBtZXNzYWdlPUZBTFNFfQpSY21kck1pc2M6OnJjb3JyLmFkanVzdChIYXRlX0NyaW1lc19zZWxlY3RlZCkKYGBgCgo8YnI+CgojIyBMaW5lYXIgUmVncmVzc2lvbgoKPGJyPiAKCjxjZW50ZXI+CgohW10oMDQucG5nKQoKPGJyPgoKIVtdKDA1LnBuZykKCjwvY2VudGVyPgoKPGJyPgoKKiBKYWsgdG8sIMW+ZSBkxJt0aSB2eXNva8O9Y2ggcm9kacSNxa8gc2FteSBiw712YWrDrSB2eXNva8OpLCBhbGUgbmUgdGFrIGpha28gamVqaWNoIHJvZGnEjWU/CiogSmFrIHRvLCDFvmUgZMSbdGkgw7p0bMO9Y2ggcm9kacSNxa8gc2FteSBiw712YWrDrSDDunRsw6ksIGFsZSBuZSB0YWsgw7p0bMOpIGpha28gamVqaWNoIHJvZGnEjWU/CiogSmFrIHRvLCDFvmUgbmVqbGVwxaHDrSBhdGxldCBtaW51bMOpIHNlesOzbnkgbGV0b3MgcG9kw6F2w6EgbyBuxJtjbyBob3LFocOtIHbDvWtvbiBuZcW+IGxvbmk/Cgo8YnI+CgojIyMjIDx1PiBSZWdyZXNzaW9uIHRvd2FyZHMgbWVkaW9jcml0eSA8L3U+Cgo8YnI+IAoKKiJJdCBhcHBlYXJlZCBmcm9tIHRoZXNlIGV4cGVyaW1lbnRzIHRoYXQgdGhlIG9mZnNwcmluZyBkaWQgbm90IHRlbmQgdG8gcmVzZW1ibGUgdGhlaXIgcGFyZW50IHNlZWRzIGluIHNpemUsIGJ1dCB0byBiZSBhbHdheXMgbW9yZSBtZWRpb2NyZSB0aGFuIHRoZXktdG8gYmUgc21hbGxlciB0aGFuIHRoZSBwYXJlbnRzLCBpZiB0aGUgcGFyZW50cyB3ZXJlIGxhcmdlOyB0byBiZSBsYXJnZXIgdGhhbiB0aGUgcGFyZW50cywgaWYgdGhlIHBhcmVudHMgd2VyZSB2ZXJ5IHNtYWxsLiIqCgoqIlRoZSBwb2ludCBvZiBjb252ZXJnZW5jZSB3YXMgY29uc2lkZXJhYmx5IGJlbG93IHRoZSBhdmVyYWdlIHNpemUgb2YgdGhlIHNlZWRzIGNvbnRhaW5lZCBpbiB0aGUgbGFyZ2UgYmFnZnVsIEkgYm91Z2h0IGF0IGEgbnVyc2VyeSBnYXJkZW4sIG91dCBvZiB3aGljaCBJIHNlbGVjdGVkIHRob3NlIHRoYXQgd2VyZSBzb3duLCBhbmQgSSBoYWQgc29tZSByZWFzb24gdG8gYmVsaWV2ZSB0aGF0IHRoZSBzaXplIG9mIHRoZSBzZWVkIHRvd2FyZHMgd2hpY2ggdGhlIHByb2R1Y2UgY29udmVyZ2VkIHdhcyBzaW1pbGFyIHRvIHRoYXQgb2YgYW4gYXZlcmFnZSBzZWVkIHRha2VuCm91dCBvZiBiZWRzIG9mIHNlbGYtcGxhbnRlZCBzcGVjaW1lbnMuIioKCkdhbHRvbiwgMTg4Niwgcy4gMjQ2Cgo8YnI+CgoqICoqTGluZcOhcm7DrSByZWdyZXNlKioKICArIE5ha29saWsgbHplIHogSVEgc2vDs3J1IHVzdXpvdmF0IG8gdsO9a29udSB2IG1hdGVtYXRpY2U/CiAgICArICpQcmVkaWtjZSoKCjxicj4KCiogKipWw61jZW7DoXNvYm7DoSBsaW5lw6FybsOtIHJlZ3Jlc2UqKgogICsgUMWZaXNww612w6EgayB2w73FoWkgcGxhdHUga3JvbcSbIMO6cm92bsSbIHZ6ZMSbbMOhbsOtIHRha8OpIHBvaGxhdsOtPwogICAgKyAqUHJlZGlrY2UqCiAgICArICpJbmtyZW1lbnTDoWxuw60gdmFsaWRpdGEqCiAgICArICpTdGF0aXN0aWNrw6Ega29udHJvbGEqCgo8YnI+CgojIyMjIyAqKk5vdGFjZSoqCgo8Y2VudGVyPgokWSA9IFknICsgZSQKPC9jZW50ZXI+Cgo8YnI+CgoqICpMaW5lw6FybsOtIHJlZ3Jlc2UqOgoKPGNlbnRlcj4KJFknID0gYSArIGJYJAoKJFknID0gYl97MH0gKyBiX3sxfVhfezF9JAo8L2NlbnRlcj4KCjxicj4KCiogKlbDrWNlbsOhc29ibsOhIGxpbmXDoXJuw60gcmVncmVzZSo6Cgo8Y2VudGVyPgokWScgPSBiX3swfSArIGJfe259WF97bn0kCgokWScgPSBiX3swfSArIGJfezF9WF97MX0gKyBiX3syfVhfezJ9ICsgLi4uICsgYl97bn1YX3tufSsgZSQKPC9jZW50ZXI+Cgo8YnI+CgoqICRZJCAqPSogKipPdXRjb21lKiogKD0gZGVwZW5kZW50KSAqKnZhcmlhYmxlKioKKiAkWSckICo9KiBPdXIgKiptb2RlbCoqCiogJGUkICo9KiAqKkVycm9yKioKKiAkYSQgKm9yKiAkYl97MH0kICo9KiAqKkludGVyY2VwdCoqCiogJGIkICpvciogJGJfezEuLi5ufSQgKj0qICoqU2xvcGUqKgoqICRYX3sxLi4ubn0kICo9KiAqKlByZWRpY3RvcioqICg9IGluZGVwZW5kZW50IHZhcmlhYmxlKQoKPGJyPgoKPGNlbnRlcj4KCiFbXSgwNi5wbmcpCgo8L2NlbnRlcj4KCjxicj4KCipQxZnDrW1rYSAobW9kZWwpIGplIHByb2xvxb5lbmEgZGF0eSB0YWssIGFieSBqaW0gY28gbmVqbMOpcGUgb2Rwb3bDrWRhbGEuKgoKKiBNZXRvZGEgb2RoYWR1IG5lam1lbsWhw61jaCDEjXR2ZXJjxa8gKCoqTGVhc3QgU3F1YXJlcyBFc3RpbWF0aW9uKiopCiAgKyBTdW1hIChkcnVow71jaCBtb2NuaW4pIHZ6ZMOhbGVub3N0w60gbW9kZWx1IG9kIGRhdCBqZSBuZWptZW7FocOtIG1vxb5uw6EKICAKPGJyPgoKPGNlbnRlcj4KCiFbXSgwNy5wbmcpCgo8L2NlbnRlcj4KCjxicj4KCiRTX3tUfSQkXnsyfSQgPSAkU197TX0kJF57Mn0kICsgJFNfe1J9JCReezJ9JAoKKiBOZWJvbGkgJFNTX3tUfSA9IFNTX3tyZXN9ICsgU1Nfe3JlZ30kCgo8YnI+CgokUl57Mn0kID0gJFNTX3tNfSQkXnsyfSQgKyAkU1Nfe1R9JCReezJ9JAoKPGJyPgoKJFNTX3tNfSQKCiogUm96ZMOtbCBtZXppICoqbnVsb3bDvW0gbW9kZWxlbSoqIChwcsWvbcSbciAkWSQpIGEgbsOhbWkgc3Rhbm92ZW7DvW0gbW9kZWxlbWUgKHDFmcOtbWtvdSkuCgokU1Nfe1J9JAoKKiBSb3pkw61sIG1lemkgKipkYXR5KiogYSAqKm7DoW1pIHN0YW5vdmVuw71tIG1vZGVsZW0qKiAocMWZw61ta291KS4KCiRTU197VH0kCgoqIFJvemTDrWwgbWV6aSBkYXR5IGEgbnVsb3bDvW0gbW9kZWxlbSAocHLFr23Em3IgJFkkKS4KCiRSXnsyfSQKCiogUG9kw61sIHJvenB0eWx1IHrDoXZpc2zDqSAob3V0Y29tZSkgcHJvbcSbbm7DqSAqKnZ5c3bEm3RsZW7DqSBtb2RlbGVtKiogKD0gKmtvZWZpY2llbnQgZGV0ZXJtaW5hbmNlKikuCgo8YnI+CgoqTWV0b2RhIG5lam1lbsWhw61jaCDEjXR2ZXJjxa8gZ3JhZmlja3kqCgo8Y2VudGVyPgoKIVtdKDA4LnBuZykKCjwvY2VudGVyPgoKPGJyPgoKPGNlbnRlcj4KCiFbXSgwNy5wbmcpCgo8L2NlbnRlcj4KCjxicj4KCiMjIyMgKipNb2RlbCoqCgoKYGBge3J9Ck1vZGVsSGF0ZUNyaW1lIDwtIGxtKGZvcm11bGEgPSBzaGFyZV92b3RlcnNfdm90ZWRfdHJ1bXAgfiBzaGFyZV93aGl0ZV9wb3ZlcnR5LCBkYXRhID0gSGF0ZV9DcmltZXNfc2VsZWN0ZWQpCmBgYAoKPGJyPgoKKiBDb21wdXRlIHRoZSBzdW1tYXJ5IHN0YXRpc3RpY3MgZm9yIG1vZGVsOgpgYGB7cn0KIyBHZW5lcmljIGZ1bmN0aW9ucyAoc3VtbWFyeSkgY2hhbmdlIHRoZWlyIGJlaGF2aW91ciBiYXNlZCBvbiBhbiBvYmplY3QncyBjbGFzcy4KCnN1bW1hcnkoTW9kZWxIYXRlQ3JpbWUpCmBgYAoKPGJyPgoKKiBQZXJmb3JtIGFuIGFuYWx5c2lzIG9mIHZhcmlhbmNlIG9uIG1vZGVsOgpgYGB7cn0KYW5vdmEoTW9kZWxIYXRlQ3JpbWUpCmBgYAoKPGJyPgoKKiBQcmVkaWN0IGJhc2VkIG9uIHRoZSBmaXR0ZWQgZnVuY3Rpb246CmBgYHtyfQpwcmVkaWN0KE1vZGVsSGF0ZUNyaW1lKQpgYGAKCjxicj4KCiMjIyMgKipDb2VmZmljaWVudHMqKgoKPGJyPgoKKiokYl97aX0kKioKCiogVnlqYWTFmXVqZSBuw6Fyxa9zdCAkWeKAmSQgcMWZaSBuw6Fyxa9zdHUgJFhfe2l9JCBvIGplZG51IGplZG5vdGt1IHYgamVkbm90a8OhY2ggWSwgcMWZaSBrb250cm9sZSB2xaFlY2ggb3N0YXRuw61jaCBwcmVkaWt0b3LFryAodGouIHNlbWlwYXJjacOhbG7DrSBrb3JlbGFjZSk7IGplZGluZcSNbsO9IHDFmcOtbm9zCiAgKyBLIHBvcm92bsOhbsOtIHPDrWx5IHByZWRpa3RvcnUgdiByxa96bsO9Y2ggc2t1cGluw6FjaCwgbW9kZWxlY2gsIHZ6b3Jjw61jaAoKKiokzrJfe2l9JCoqCgoqIEJldGEgdnlqYWTFmXVqZSBuw6Fyxa9zdCAkWeKAmSQgcMWZaSBuw6Fyxa9zdHUgJFhfe2l9JCBvIDE7IHBva3VkIGpzb3UgJFhfe2l9JCBhICRZJCBzdGFuZGFyZGl6b3bDoW55LCBwxZlpIGtvbnRyb2xlIHbFoWVjaCBvc3RhdG7DrWNoIHByZWRpa3RvcsWvICh0ai4gc2VtaXBhcmNpw6FsbsOtIGtvcmVsYWNlKSwgamVkaW5lxI1uw70gcMWZw61ub3MKICArIEsgcG9yb3Zuw6Fuw60gcHJlZGlrdG9yxa8gbWV6aSBzZWJvdSB2IHLDoW1jaSBqZWRub2hvIG1vZGVsdQogICsgSyBwb3Jvdm7DoW7DrSByxa96bsSbIG9wZXJhY2lvbmFsaXpvdmFuw6lobyBwcmVkaWt0b3J1IHYgcsWvem7DvWNoIG1vZGVsZWNoCiAgKyBVa2F6YXRlbCB2ZWxpa29zdGkgw7rEjWlua3UKCioqJGJfezB9JCoqCgoqIFBvIHZ5Y2VudHJvdsOhbsOtIChvZGXEjXRlbsOtIHByxa9txJtydSBvZCB2xaFlY2ggaG9kbm90ICRYX3tpfSQpIG9kcG92w61kw6EgcHLFr23Em3J1ICRZJC4KCmBgYHtyLCB3YXJuaW5nPUZBTFNFLH0KUXVhbnRQc3ljOjpsbS5iZXRhKE1vZGVsSGF0ZUNyaW1lKQpgYGAKCjxicj4KCiMjIFJlc291cmNlcwoKQW1lcmljYW4gUHN5Y2hvbG9naWNhbCBBc3NvY2lhdGlvbi4gKDIwMDEpLiBQdWJsaWNhdGlvbiBtYW51YWwgb2YgdGhlIEFtZXJpY2FuIFBzeWNob2xvZ2ljYWwgQXNzb2NpYXRpb24gKDZ0aCBlZC4pLiBXYXNoaW5ndG9uLCBEQzogQVBBLgoKRmllbGQsIEEuICgyMDA5KS4gRGlzY292ZXJpbmcgc3RhdGlzdGljcyB1c2luZyBTUFNTLCAzdGggRWQuIExvcyBBbmdlbGVzOiBTYWdlLgoKRm94LCBKLiAoMjAxNikuIEFwcGxpZWQgUmVncmVzc2lvbiBBbmFseXNpcyBhbmQgR2VuZXJhbGl6ZWQgTGluZWFyIE1vZGVscywgM3RoIEVkLiBMb3MgQW5nZWxlczogU2FnZS4KCkdhbHRvbiwgRi4gKDE4ODYpLiBSZWdyZXNzaW9uIHRvd2FyZHMgbWVkaW9jcml0eSBpbiBoZXJlZGl0YXJ5IHN0YXR1cmUuIEpvdXJuYWwgb2YgdGhlIEFudGhyb3BvbG9naWNhbCBJbnN0aXR1dGUsCjE1LCBwcC4gMjQ2LTYzLiBEb3N0dXBuw6kgb25saW5lIHogImh0dHA6Ly9nYWx0b24ub3JnL2Vzc2F5cy8xODgwLTE4ODkvZ2FsdG9uLTE4ODYtamFpZ2lyZWdyZXNzaW9uLXN0YXR1cmUucGRmIgoKUm9ib3Rrb3bDoSwgQS4sICYgSmXFvmVrLCBTLiAoMjAxMikuIFbDrWNlbsOhc29ibsOhIGxpbmXDoXJuw60gcmVncmVzZS4gUHJlemVudGFjZSBrZSBrdXJ6dSBQU1kyNTIuCgombmJzcDsKPGhyIC8+CjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij5BIHdvcmsgYnkgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL1ZHYWJyaGVsIj5WaXQgR2FicmhlbDwvYT48L3A+CjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICM4MDgwODA7Ij48ZW0+dml0LmdhYnJoZWxAZ21haWwuY29tPC9lbT48L3NwYW4+PC9wPgoKPCEtLSBBZGQgaWNvbiBsaWJyYXJ5IC0tPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ZvbnQtYXdlc29tZS80LjcuMC9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiPgoKPCEtLSBBZGQgZm9udCBhd2Vzb21lIGljb25zIC0tPgo8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+CiAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vVkdhYnJoZWwiIGNsYXNzPSJmYSBmYS1naXRodWIiPjwvYT4KICAgIDxhIGhyZWY9Imh0dHBzOi8vY3oubGlua2VkaW4uY29tL2luL3YlQzMlQUR0LWdhYnJoZWwtMmIwYThiOTgiIGNsYXNzPSJmYSBmYS1saW5rZWRpbiI+PC9hPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9zY2hvbGFyLmdvb2dsZS5jb20vY2l0YXRpb25zP3VzZXI9WS1OR0pla0FBQUFKJmhsPWVuJm9pPWFvIiBjbGFzcz0iZmEgZmEtYm9vayI+PC9hPgo8L3A+CgombmJzcDs=