Introduction

For this assignment, I used the data set “Students’ Academic Performance Dataset” from Kaggle. This is an educational dataset which is collected from learning management system (LMS) called Kalboard 360. The data is collected using a leaning activity tracker tool which is called experience API. The data set contains 480 student records of which 305 are male and 175 are female. There are a total of 16 features in this data set that are classified into three major categories: (1) Demographic features such as gender and nationality, (2) Academic background features such as educational stage, grade level and section, (3)Behavioral Features such as raised hand in class, viewing resources, answering survey by parents, and school satisfaction.

Research Question and Hypotheses

The purpose of this analysis is to determine what factors influence student success in school. I am most interested in looking at the following variables: gender, raisedhands, relation, and StageID to see which affects student grades the most. I believe students who raise their hands the most in school will have high grades because the more questions students ask or the more questions they answer during school demonstrate the level of understanding of students in different subjects. I think students in highschool, especially, will show the greatest raisedhands effect because students are more serious in their course work when in higher edcuation level since the content is more intricate. In terms of gender, I hypothesize males will raise their hands the most often in class and will have high grades. Relation is also a very interesting variable to look at it because I do feel the parent responsible for the student plays a great and important role in student’s academic success. I suspect students who have mothers listed in this data set for being responsible for them will have higher student academic success because mothers are more serious and strict and they spend the most time with their children on their homework and academics in general.

Defining Variables

grades1: grade level of the student, (binary dependent variable) where 1 indicates high grade level and 0 indicates low grade level

raisedhands: the number of times student raises their hands in class

gender: whether the student is male of female

StageID: educational level of the student (lowerlevel, middleschool, and highschool)

relation: parent responsible for the child, mom or dad

Importing and previewing the data set

library(readr)
Student_Academic_Data<-read_csv("C:\\Users\\Sangita Roy\\Desktop\\Student_Academic_Data.csv")
head(Student_Academic_Data)
unique(Student_Academic_Data$Class)
[1] "M" "L" "H"

Cleaning up the data set

library(dplyr)
Student_Data1<- Student_Academic_Data %>% 
  rename(Nationality=NationalITy,
  VisitedResources=VisITedResources,
  Grades=Class) %>%
  mutate(grades1=factor(ifelse(Grades=="H",1,0))) %>%
  mutate(gender = as.factor(gender)) %>%
  mutate(StageID=as.factor(StageID)) %>%
  mutate(Relation=as.factor(Relation))
  head(Student_Data1)

Summary of data set

summary(Student_Data1)
 gender  Nationality        PlaceofBirth               StageID   
 F:175   Length:480         Length:480         HighSchool  : 33  
 M:305   Class :character   Class :character   lowerlevel  :199  
         Mode  :character   Mode  :character   MiddleSchool:248  
                                                                 
                                                                 
                                                                 
   GradeID           SectionID            Topic          
 Length:480         Length:480         Length:480        
 Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character  
                                                         
                                                         
                                                         
   Semester           Relation    raisedhands     VisitedResources
 Length:480         Father:283   Min.   :  0.00   Min.   : 0.0    
 Class :character   Mum   :197   1st Qu.: 15.75   1st Qu.:20.0    
 Mode  :character                Median : 50.00   Median :65.0    
                                 Mean   : 46.77   Mean   :54.8    
                                 3rd Qu.: 75.00   3rd Qu.:84.0    
                                 Max.   :100.00   Max.   :99.0    
 AnnouncementsView   Discussion    ParentAnsweringSurvey
 Min.   : 0.00     Min.   : 1.00   Length:480           
 1st Qu.:14.00     1st Qu.:20.00   Class :character     
 Median :33.00     Median :39.00   Mode  :character     
 Mean   :37.92     Mean   :43.28                        
 3rd Qu.:58.00     3rd Qu.:70.00                        
 Max.   :98.00     Max.   :99.00                        
 ParentschoolSatisfaction StudentAbsenceDays    Grades          grades1
 Length:480               Length:480         Length:480         0:338  
 Class :character         Class :character   Class :character   1:142  
 Mode  :character         Mode  :character   Mode  :character          
                                                                       
                                                                       
                                                                       

Regression Model#1

library(Zelig)
z_stud <- zlogit$new()
z_stud$zelig(grades1 ~ raisedhands + gender + Relation + StageID, data = Student_Data1)
summary(z_stud)
Model: 

Call:
z_stud$zelig(formula = grades1 ~ raisedhands + gender + Relation + 
    StageID, data = Student_Data1)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.8056  -0.6709  -0.2989   0.7113   2.6189  

Coefficients:
                    Estimate Std. Error z value Pr(>|z|)
(Intercept)         -2.89852    0.55236  -5.247 1.54e-07
raisedhands          0.04240    0.00525   8.076 6.69e-16
genderM             -0.63445    0.25208  -2.517   0.0118
RelationMum          1.17620    0.25077   4.690 2.73e-06
StageIDlowerlevel   -0.25898    0.49438  -0.524   0.6004
StageIDMiddleSchool -0.79609    0.49495  -1.608   0.1077

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 583.00  on 479  degrees of freedom
Residual deviance: 411.21  on 474  degrees of freedom
AIC: 423.21

Number of Fisher Scoring iterations: 5

Next step: Use 'setx' method

The results of the first model shows that the number of times students raise their hands in class, gender, and mothers responsible for the child in school affect student’s academic success. As the number of times students raise their hands in class increase, student academic success increases by 0.04. In other words, students who raise their hands in class are more likely to obtain high grades. Student academic success increases by 1.17 for those who have mothers responsible for them. Academic success in school decreases for females in high school by 2.8. The results for raisehands, gender(M), and RelationMum are significant (p<.05).

Regression Model#2 (Interaction Model)

z_stud1 <- zlogit$new()
z_stud1$zelig(grades1 ~ raisedhands + gender*Relation + StageID, data = Student_Data1)
summary(z_stud1)
Model: 

Call:
z_stud1$zelig(formula = grades1 ~ raisedhands + gender * Relation + 
    StageID, data = Student_Data1)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.9534  -0.6602  -0.2969   0.6099   2.7115  

Coefficients:
                     Estimate Std. Error z value Pr(>|z|)
(Intercept)         -3.514811   0.622313  -5.648 1.62e-08
raisedhands          0.042175   0.005266   8.009 1.16e-15
genderM              0.277576   0.417401   0.665  0.50604
RelationMum          2.150076   0.436102   4.930 8.21e-07
StageIDlowerlevel   -0.284190   0.504624  -0.563  0.57332
StageIDMiddleSchool -0.768138   0.504167  -1.524  0.12761
genderM:RelationMum -1.555217   0.538001  -2.891  0.00384

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 583.00  on 479  degrees of freedom
Residual deviance: 402.42  on 473  degrees of freedom
AIC: 416.42

Number of Fisher Scoring iterations: 5

Next step: Use 'setx' method

The second model shows an interaction between gender and relation along with differences in education level and differences in the number of times students raise their hands in class. As we can see, the interaction between gender and relation is significant (p<.05).

The Raised Hands Effect

z_stud$setrange(raisedhands=0:100)
z_stud$sim()
z_stud$graph()

The graph shows as the number of times students raise their hands in class increases, the probability of academic success also increases.

Gender differences and viewing Only the Simulated first difference

z_stud1$setx(gender="M")
z_stud1$setx1(gender="F")
z_stud1$sim()
fd <- z_stud1$get_qi(xvalue="x1", qi="fd")
summary(fd)
       V1            
 Min.   :-0.1534174  
 1st Qu.:-0.0491164  
 Median :-0.0258543  
 Mean   :-0.0230186  
 3rd Qu.: 0.0006766  
 Max.   : 0.1719998  
plot(z_stud1)

Since gender demonstrated to be a significant factor in influencing student academic success, gender differences are being illustrated in the plots.

Testing educational level variations in gender difference using Zelig

Lower Level

zstud.L <- zlogit$new()
zstud.L$zelig(grades1 ~  raisedhands+ Relation*gender + StageID, data = Student_Data1)
zstud.L$setx(gender = "M", StageID = "lowerlevel") 
zstud.L$setx1(gender = "F", StageID = "lowerlevel")
zstud.L$sim()
plot(zstud.L)

Gender differences in education level are being shown in the plots using the first education level in this data set which is “lowerlevel” between males and females.

Middle School

zstud.M <- zlogit$new()
zstud.M$zelig(grades1 ~  raisedhands+ Relation*gender + StageID, data = Student_Data1)
zstud.M$setx(gender = "M", StageID = "MiddleSchool") 
zstud.M$setx1(gender = "F", StageID = "MiddleSchool")
zstud.M$sim()
plot(zstud.M)

Gender differences of students in “MiddleSchool” are shown.

High School

zstud.H <- zlogit$new()
zstud.H$zelig(grades1 ~  raisedhands+ Relation*gender + StageID, data = Student_Data1)
zstud.H$setx(gender = "M", StageID = "HighSchool") 
zstud.H$setx1(gender = "F", StageID = "HighSchool")
zstud.H$sim()
plot(zstud.H)

Gender differences of students in highschool are being illustrated.

Putting them in one place

d1 <- zstud.L$get_qi(xvalue="x1", qi="fd")
d2 <- zstud.M$get_qi(xvalue="x1", qi="fd")
d3 <- zstud.H$get_qi(xvalue="x1", qi="fd")
  
dfd <- as.data.frame(cbind(d1, d2, d3))
head(dfd)

Sort, Group and Plot by Educational Level

Sort

library(tidyr)
tidd <- dfd %>% 
  gather(StageID, simv, 1:3)
head(tidd)

Group

tidd %>% 
  group_by(StageID) %>% 
  summarise(mean = mean(simv), sd = sd(simv))

Plot

library(ggplot2)
ggplot(tidd, aes(simv)) + geom_histogram() + facet_grid(~StageID)

Histogram shows there are not significant gender differences within education levels in terms of academic success between lowerlevel and middleschool. However, the greatest variation can be seen in the “highschool” group.

Source:

Elaf Abu Amrieh, Thair Hamtini, and Ibrahim Aljarah, The University of Jordan, Amman, Jordan, http://www.Ibrahimaljarah.com www.ju.edu.jo

LS0tDQp0aXRsZTogIiMqKldoYXQgRmFjdG9ycyBJbmZsdWVuY2UgU3R1ZGVudCBTdWNjZXNzIGluIFNjaG9vbD8qKiINCmF1dGhvcjogIlNhbmdpdGEgUm95Ig0KZGF0ZTogIk1hcmNoIDE4LCAyMDE4Ig0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyMqKkludHJvZHVjdGlvbioqDQoNCkZvciB0aGlzIGFzc2lnbm1lbnQsIEkgdXNlZCB0aGUgZGF0YSBzZXQgIlN0dWRlbnRzJyBBY2FkZW1pYyBQZXJmb3JtYW5jZSBEYXRhc2V0IiBmcm9tIEthZ2dsZS4gVGhpcyBpcyBhbiBlZHVjYXRpb25hbCBkYXRhc2V0IHdoaWNoIGlzIGNvbGxlY3RlZCBmcm9tIGxlYXJuaW5nIG1hbmFnZW1lbnQgc3lzdGVtIChMTVMpIGNhbGxlZCBLYWxib2FyZCAzNjAuIFRoZSBkYXRhIGlzIGNvbGxlY3RlZCB1c2luZyBhIGxlYW5pbmcgYWN0aXZpdHkgdHJhY2tlciB0b29sIHdoaWNoIGlzIGNhbGxlZCBleHBlcmllbmNlIEFQSS4gVGhlIGRhdGEgc2V0IGNvbnRhaW5zIDQ4MCBzdHVkZW50IHJlY29yZHMgb2Ygd2hpY2ggMzA1IGFyZSBtYWxlIGFuZCAxNzUgYXJlIGZlbWFsZS4gVGhlcmUgYXJlIGEgdG90YWwgb2YgMTYgZmVhdHVyZXMgaW4gdGhpcyBkYXRhIHNldCB0aGF0IGFyZSBjbGFzc2lmaWVkIGludG8gdGhyZWUgbWFqb3IgY2F0ZWdvcmllczogKDEpIERlbW9ncmFwaGljIGZlYXR1cmVzIHN1Y2ggYXMgZ2VuZGVyIGFuZCBuYXRpb25hbGl0eSwgKDIpIEFjYWRlbWljIGJhY2tncm91bmQgZmVhdHVyZXMgc3VjaCBhcyBlZHVjYXRpb25hbCBzdGFnZSwgZ3JhZGUgbGV2ZWwgYW5kIHNlY3Rpb24sICgzKUJlaGF2aW9yYWwgRmVhdHVyZXMgc3VjaCBhcyByYWlzZWQgaGFuZCBpbiBjbGFzcywgdmlld2luZyByZXNvdXJjZXMsIGFuc3dlcmluZyBzdXJ2ZXkgYnkgcGFyZW50cywgYW5kIHNjaG9vbCBzYXRpc2ZhY3Rpb24uDQoNCiMjKipSZXNlYXJjaCBRdWVzdGlvbiBhbmQgSHlwb3RoZXNlcyoqDQoNClRoZSBwdXJwb3NlIG9mIHRoaXMgYW5hbHlzaXMgaXMgdG8gZGV0ZXJtaW5lIHdoYXQgZmFjdG9ycyBpbmZsdWVuY2Ugc3R1ZGVudCBzdWNjZXNzIGluIHNjaG9vbC4gSSBhbSBtb3N0IGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczogZ2VuZGVyLCByYWlzZWRoYW5kcywgcmVsYXRpb24sIGFuZCBTdGFnZUlEIHRvIHNlZSB3aGljaCBhZmZlY3RzIHN0dWRlbnQgZ3JhZGVzIHRoZSBtb3N0LiBJIGJlbGlldmUgc3R1ZGVudHMgd2hvIHJhaXNlIHRoZWlyIGhhbmRzIHRoZSBtb3N0IGluIHNjaG9vbCB3aWxsIGhhdmUgaGlnaCBncmFkZXMgYmVjYXVzZSB0aGUgbW9yZSBxdWVzdGlvbnMgc3R1ZGVudHMgYXNrIG9yIHRoZSBtb3JlIHF1ZXN0aW9ucyB0aGV5IGFuc3dlciBkdXJpbmcgc2Nob29sIGRlbW9uc3RyYXRlIHRoZSBsZXZlbCBvZiB1bmRlcnN0YW5kaW5nIG9mIHN0dWRlbnRzIGluIGRpZmZlcmVudCBzdWJqZWN0cy4gSSB0aGluayBzdHVkZW50cyBpbiBoaWdoc2Nob29sLCBlc3BlY2lhbGx5LCB3aWxsIHNob3cgdGhlIGdyZWF0ZXN0IHJhaXNlZGhhbmRzIGVmZmVjdCBiZWNhdXNlIHN0dWRlbnRzIGFyZSBtb3JlIHNlcmlvdXMgaW4gdGhlaXIgY291cnNlIHdvcmsgd2hlbiBpbiBoaWdoZXIgZWRjdWF0aW9uIGxldmVsIHNpbmNlIHRoZSBjb250ZW50IGlzIG1vcmUgaW50cmljYXRlLiBJbiB0ZXJtcyBvZiBnZW5kZXIsIEkgaHlwb3RoZXNpemUgbWFsZXMgd2lsbCByYWlzZSB0aGVpciBoYW5kcyB0aGUgbW9zdCBvZnRlbiBpbiBjbGFzcyBhbmQgd2lsbCBoYXZlIGhpZ2ggZ3JhZGVzLiBSZWxhdGlvbiBpcyBhbHNvIGEgdmVyeSBpbnRlcmVzdGluZyB2YXJpYWJsZSB0byBsb29rIGF0IGl0IGJlY2F1c2UgSSBkbyBmZWVsIHRoZSBwYXJlbnQgcmVzcG9uc2libGUgZm9yIHRoZSBzdHVkZW50IHBsYXlzIGEgZ3JlYXQgYW5kIGltcG9ydGFudCByb2xlIGluIHN0dWRlbnQncyBhY2FkZW1pYyBzdWNjZXNzLiBJIHN1c3BlY3Qgc3R1ZGVudHMgd2hvIGhhdmUgbW90aGVycyBsaXN0ZWQgaW4gdGhpcyBkYXRhIHNldCBmb3IgYmVpbmcgcmVzcG9uc2libGUgZm9yIHRoZW0gd2lsbCBoYXZlIGhpZ2hlciBzdHVkZW50IGFjYWRlbWljIHN1Y2Nlc3MgYmVjYXVzZSBtb3RoZXJzIGFyZSBtb3JlIHNlcmlvdXMgYW5kIHN0cmljdCBhbmQgdGhleSBzcGVuZCB0aGUgbW9zdCB0aW1lIHdpdGggdGhlaXIgY2hpbGRyZW4gb24gdGhlaXIgaG9tZXdvcmsgYW5kIGFjYWRlbWljcyBpbiBnZW5lcmFsLiANCg0KIyNEZWZpbmluZyBWYXJpYWJsZXMNCg0KKipncmFkZXMxKio6IGdyYWRlIGxldmVsIG9mIHRoZSBzdHVkZW50LCAoYmluYXJ5IGRlcGVuZGVudCB2YXJpYWJsZSkgd2hlcmUgMSBpbmRpY2F0ZXMgaGlnaCBncmFkZSBsZXZlbCBhbmQgMCBpbmRpY2F0ZXMgbG93IGdyYWRlIGxldmVsDQoNCioqcmFpc2VkaGFuZHMqKjogdGhlIG51bWJlciBvZiB0aW1lcyBzdHVkZW50IHJhaXNlcyB0aGVpciBoYW5kcyBpbiBjbGFzcw0KDQoqKmdlbmRlcioqOiB3aGV0aGVyIHRoZSBzdHVkZW50IGlzIG1hbGUgb2YgZmVtYWxlDQoNCioqU3RhZ2VJRCoqOiBlZHVjYXRpb25hbCBsZXZlbCBvZiB0aGUgc3R1ZGVudCAobG93ZXJsZXZlbCwgbWlkZGxlc2Nob29sLCBhbmQgaGlnaHNjaG9vbCkNCg0KKipyZWxhdGlvbioqOiBwYXJlbnQgcmVzcG9uc2libGUgZm9yIHRoZSBjaGlsZCwgbW9tIG9yIGRhZA0KDQoNCiMjSW1wb3J0aW5nIGFuZCBwcmV2aWV3aW5nIHRoZSBkYXRhIHNldA0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkocmVhZHIpDQpTdHVkZW50X0FjYWRlbWljX0RhdGE8LXJlYWRfY3N2KCJDOlxcVXNlcnNcXFNhbmdpdGEgUm95XFxEZXNrdG9wXFxTdHVkZW50X0FjYWRlbWljX0RhdGEuY3N2IikNCmhlYWQoU3R1ZGVudF9BY2FkZW1pY19EYXRhKQ0KYGBgDQoNCmBgYHtyfQ0KdW5pcXVlKFN0dWRlbnRfQWNhZGVtaWNfRGF0YSRDbGFzcykNCmBgYA0KDQojI0NsZWFuaW5nIHVwIHRoZSBkYXRhIHNldA0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoZHBseXIpDQpTdHVkZW50X0RhdGExPC0gU3R1ZGVudF9BY2FkZW1pY19EYXRhICU+JSANCiAgcmVuYW1lKE5hdGlvbmFsaXR5PU5hdGlvbmFsSVR5LA0KICBWaXNpdGVkUmVzb3VyY2VzPVZpc0lUZWRSZXNvdXJjZXMsDQogIEdyYWRlcz1DbGFzcykgJT4lDQogIG11dGF0ZShncmFkZXMxPWZhY3RvcihpZmVsc2UoR3JhZGVzPT0iSCIsMSwwKSkpICU+JQ0KICBtdXRhdGUoZ2VuZGVyID0gYXMuZmFjdG9yKGdlbmRlcikpICU+JQ0KICBtdXRhdGUoU3RhZ2VJRD1hcy5mYWN0b3IoU3RhZ2VJRCkpICU+JQ0KICBtdXRhdGUoUmVsYXRpb249YXMuZmFjdG9yKFJlbGF0aW9uKSkNCg0KICBoZWFkKFN0dWRlbnRfRGF0YTEpDQpgYGANCg0KDQojI1N1bW1hcnkgb2YgZGF0YSBzZXQNCmBgYHtyfQ0Kc3VtbWFyeShTdHVkZW50X0RhdGExKQ0KYGBgDQoNCiMjUmVncmVzc2lvbiBNb2RlbCMxIA0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoWmVsaWcpDQp6X3N0dWQgPC0gemxvZ2l0JG5ldygpDQp6X3N0dWQkemVsaWcoZ3JhZGVzMSB+IHJhaXNlZGhhbmRzICsgZ2VuZGVyICsgUmVsYXRpb24gKyBTdGFnZUlELCBkYXRhID0gU3R1ZGVudF9EYXRhMSkNCnN1bW1hcnkoel9zdHVkKQ0KYGBgDQpUaGUgcmVzdWx0cyBvZiB0aGUgZmlyc3QgbW9kZWwgc2hvd3MgdGhhdCB0aGUgbnVtYmVyIG9mIHRpbWVzIHN0dWRlbnRzIHJhaXNlIHRoZWlyIGhhbmRzIGluIGNsYXNzLCBnZW5kZXIsIGFuZCBtb3RoZXJzIHJlc3BvbnNpYmxlIGZvciB0aGUgY2hpbGQgaW4gc2Nob29sIGFmZmVjdCBzdHVkZW50J3MgYWNhZGVtaWMgc3VjY2Vzcy4gQXMgdGhlIG51bWJlciBvZiB0aW1lcyBzdHVkZW50cyByYWlzZSB0aGVpciBoYW5kcyBpbiBjbGFzcyBpbmNyZWFzZSwgc3R1ZGVudCBhY2FkZW1pYyBzdWNjZXNzIGluY3JlYXNlcyBieSAwLjA0LiBJbiBvdGhlciB3b3Jkcywgc3R1ZGVudHMgd2hvIHJhaXNlIHRoZWlyIGhhbmRzIGluIGNsYXNzIGFyZSBtb3JlIGxpa2VseSB0byBvYnRhaW4gaGlnaCBncmFkZXMuIFN0dWRlbnQgYWNhZGVtaWMgc3VjY2VzcyBpbmNyZWFzZXMgYnkgMS4xNyBmb3IgdGhvc2Ugd2hvIGhhdmUgbW90aGVycyByZXNwb25zaWJsZSBmb3IgdGhlbS4gQWNhZGVtaWMgc3VjY2VzcyBpbiBzY2hvb2wgZGVjcmVhc2VzIGZvciBmZW1hbGVzIGluIGhpZ2ggc2Nob29sIGJ5IDIuOC4gVGhlIHJlc3VsdHMgZm9yIHJhaXNlaGFuZHMsIGdlbmRlcihNKSwgYW5kIFJlbGF0aW9uTXVtIGFyZSBzaWduaWZpY2FudCAocDwuMDUpLiANCg0KIyNSZWdyZXNzaW9uIE1vZGVsIzIgKEludGVyYWN0aW9uIE1vZGVsKQ0KYGBge3J9DQp6X3N0dWQxIDwtIHpsb2dpdCRuZXcoKQ0Kel9zdHVkMSR6ZWxpZyhncmFkZXMxIH4gcmFpc2VkaGFuZHMgKyBnZW5kZXIqUmVsYXRpb24gKyBTdGFnZUlELCBkYXRhID0gU3R1ZGVudF9EYXRhMSkNCnN1bW1hcnkoel9zdHVkMSkNCmBgYA0KVGhlIHNlY29uZCBtb2RlbCBzaG93cyBhbiBpbnRlcmFjdGlvbiBiZXR3ZWVuIGdlbmRlciBhbmQgcmVsYXRpb24gYWxvbmcgd2l0aCBkaWZmZXJlbmNlcyBpbiBlZHVjYXRpb24gbGV2ZWwgYW5kIGRpZmZlcmVuY2VzIGluIHRoZSBudW1iZXIgb2YgdGltZXMgc3R1ZGVudHMgcmFpc2UgdGhlaXIgaGFuZHMgaW4gY2xhc3MuIEFzIHdlIGNhbiBzZWUsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGdlbmRlciBhbmQgcmVsYXRpb24gaXMgc2lnbmlmaWNhbnQgKHA8LjA1KS4gDQoNCg0KIyNUaGUgUmFpc2VkIEhhbmRzIEVmZmVjdA0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnpfc3R1ZCRzZXRyYW5nZShyYWlzZWRoYW5kcz0wOjEwMCkNCnpfc3R1ZCRzaW0oKQ0Kel9zdHVkJGdyYXBoKCkNCg0KYGBgDQpUaGUgZ3JhcGggc2hvd3MgYXMgdGhlIG51bWJlciBvZiB0aW1lcyBzdHVkZW50cyByYWlzZSB0aGVpciBoYW5kcyBpbiBjbGFzcyBpbmNyZWFzZXMsIHRoZSBwcm9iYWJpbGl0eSBvZiBhY2FkZW1pYyBzdWNjZXNzIGFsc28gaW5jcmVhc2VzLg0KDQojI0dlbmRlciBkaWZmZXJlbmNlcyBhbmQgdmlld2luZyBPbmx5IHRoZSBTaW11bGF0ZWQgZmlyc3QgZGlmZmVyZW5jZQ0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnpfc3R1ZDEkc2V0eChnZW5kZXI9Ik0iKQ0Kel9zdHVkMSRzZXR4MShnZW5kZXI9IkYiKQ0Kel9zdHVkMSRzaW0oKQ0KDQpmZCA8LSB6X3N0dWQxJGdldF9xaSh4dmFsdWU9IngxIiwgcWk9ImZkIikNCnN1bW1hcnkoZmQpDQpgYGANCg0KYGBge3IgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTEwLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KcGxvdCh6X3N0dWQxKQ0KYGBgDQpTaW5jZSBnZW5kZXIgZGVtb25zdHJhdGVkIHRvIGJlIGEgc2lnbmlmaWNhbnQgZmFjdG9yIGluIGluZmx1ZW5jaW5nIHN0dWRlbnQgYWNhZGVtaWMgc3VjY2VzcywgZ2VuZGVyIGRpZmZlcmVuY2VzIGFyZSBiZWluZyBpbGx1c3RyYXRlZCBpbiB0aGUgcGxvdHMuDQoNCiMjVGVzdGluZyBlZHVjYXRpb25hbCBsZXZlbCB2YXJpYXRpb25zIGluIGdlbmRlciBkaWZmZXJlbmNlIHVzaW5nIFplbGlnDQoNCkxvd2VyIExldmVsDQpgYGB7ciBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9MTAsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp6c3R1ZC5MIDwtIHpsb2dpdCRuZXcoKQ0KenN0dWQuTCR6ZWxpZyhncmFkZXMxIH4gIHJhaXNlZGhhbmRzKyBSZWxhdGlvbipnZW5kZXIgKyBTdGFnZUlELCBkYXRhID0gU3R1ZGVudF9EYXRhMSkNCnpzdHVkLkwkc2V0eChnZW5kZXIgPSAiTSIsIFN0YWdlSUQgPSAibG93ZXJsZXZlbCIpIA0KenN0dWQuTCRzZXR4MShnZW5kZXIgPSAiRiIsIFN0YWdlSUQgPSAibG93ZXJsZXZlbCIpDQp6c3R1ZC5MJHNpbSgpDQpwbG90KHpzdHVkLkwpDQpgYGANCg0KR2VuZGVyIGRpZmZlcmVuY2VzIGluIGVkdWNhdGlvbiBsZXZlbCBhcmUgYmVpbmcgc2hvd24gaW4gdGhlIHBsb3RzIHVzaW5nIHRoZSBmaXJzdCBlZHVjYXRpb24gbGV2ZWwgaW4gdGhpcyBkYXRhIHNldCB3aGljaCBpcyAibG93ZXJsZXZlbCIgYmV0d2VlbiBtYWxlcyBhbmQgZmVtYWxlcy4NCg0KTWlkZGxlIFNjaG9vbA0KDQpgYGB7ciBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9MTAsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp6c3R1ZC5NIDwtIHpsb2dpdCRuZXcoKQ0KenN0dWQuTSR6ZWxpZyhncmFkZXMxIH4gIHJhaXNlZGhhbmRzKyBSZWxhdGlvbipnZW5kZXIgKyBTdGFnZUlELCBkYXRhID0gU3R1ZGVudF9EYXRhMSkNCnpzdHVkLk0kc2V0eChnZW5kZXIgPSAiTSIsIFN0YWdlSUQgPSAiTWlkZGxlU2Nob29sIikgDQp6c3R1ZC5NJHNldHgxKGdlbmRlciA9ICJGIiwgU3RhZ2VJRCA9ICJNaWRkbGVTY2hvb2wiKQ0KenN0dWQuTSRzaW0oKQ0KcGxvdCh6c3R1ZC5NKQ0KYGBgDQpHZW5kZXIgZGlmZmVyZW5jZXMgb2Ygc3R1ZGVudHMgaW4gIk1pZGRsZVNjaG9vbCIgYXJlIHNob3duLg0KDQpIaWdoIFNjaG9vbA0KYGBge3IgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTEwLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KenN0dWQuSCA8LSB6bG9naXQkbmV3KCkNCnpzdHVkLkgkemVsaWcoZ3JhZGVzMSB+ICByYWlzZWRoYW5kcysgUmVsYXRpb24qZ2VuZGVyICsgU3RhZ2VJRCwgZGF0YSA9IFN0dWRlbnRfRGF0YTEpDQp6c3R1ZC5IJHNldHgoZ2VuZGVyID0gIk0iLCBTdGFnZUlEID0gIkhpZ2hTY2hvb2wiKSANCnpzdHVkLkgkc2V0eDEoZ2VuZGVyID0gIkYiLCBTdGFnZUlEID0gIkhpZ2hTY2hvb2wiKQ0KenN0dWQuSCRzaW0oKQ0KcGxvdCh6c3R1ZC5IKQ0KYGBgDQpHZW5kZXIgZGlmZmVyZW5jZXMgb2Ygc3R1ZGVudHMgaW4gaGlnaHNjaG9vbCBhcmUgYmVpbmcgaWxsdXN0cmF0ZWQuDQoNCg0KIyNQdXR0aW5nIHRoZW0gaW4gb25lIHBsYWNlDQpgYGB7cn0NCmQxIDwtIHpzdHVkLkwkZ2V0X3FpKHh2YWx1ZT0ieDEiLCBxaT0iZmQiKQ0KZDIgPC0genN0dWQuTSRnZXRfcWkoeHZhbHVlPSJ4MSIsIHFpPSJmZCIpDQpkMyA8LSB6c3R1ZC5IJGdldF9xaSh4dmFsdWU9IngxIiwgcWk9ImZkIikNCiAgDQpkZmQgPC0gYXMuZGF0YS5mcmFtZShjYmluZChkMSwgZDIsIGQzKSkNCmhlYWQoZGZkKQ0KYGBgDQoNCiMjU29ydCwgR3JvdXAgYW5kIFBsb3QgYnkgRWR1Y2F0aW9uYWwgTGV2ZWwNCg0KU29ydA0KYGBge3J9DQpsaWJyYXJ5KHRpZHlyKQ0KdGlkZCA8LSBkZmQgJT4lIA0KICBnYXRoZXIoU3RhZ2VJRCwgc2ltdiwgMTozKQ0KaGVhZCh0aWRkKQ0KYGBgDQoNCkdyb3VwDQpgYGB7cn0NCnRpZGQgJT4lIA0KICBncm91cF9ieShTdGFnZUlEKSAlPiUgDQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzaW12KSwgc2QgPSBzZChzaW12KSkNCmBgYA0KDQpQbG90DQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmdncGxvdCh0aWRkLCBhZXMoc2ltdikpICsgZ2VvbV9oaXN0b2dyYW0oKSArIGZhY2V0X2dyaWQoflN0YWdlSUQpDQpgYGANCg0KSGlzdG9ncmFtIHNob3dzIHRoZXJlIGFyZSBub3Qgc2lnbmlmaWNhbnQgZ2VuZGVyIGRpZmZlcmVuY2VzIHdpdGhpbiBlZHVjYXRpb24gbGV2ZWxzIGluIHRlcm1zIG9mIGFjYWRlbWljIHN1Y2Nlc3MgYmV0d2VlbiBsb3dlcmxldmVsIGFuZCBtaWRkbGVzY2hvb2wuIEhvd2V2ZXIsIHRoZSBncmVhdGVzdCB2YXJpYXRpb24gY2FuIGJlIHNlZW4gaW4gdGhlICJoaWdoc2Nob29sIiBncm91cC4NCg0KIyNTb3VyY2U6DQoNCkVsYWYgQWJ1IEFtcmllaCwgVGhhaXIgSGFtdGluaSwgYW5kIElicmFoaW0gQWxqYXJhaCwgVGhlIFVuaXZlcnNpdHkgb2YgSm9yZGFuLCBBbW1hbiwgSm9yZGFuLCBodHRwOi8vd3d3LklicmFoaW1hbGphcmFoLmNvbSB3d3cuanUuZWR1Lmpv