Load packages

library(BBmisc)
library(corrr)
library(ggplot2)
library(lattice)
library(Hmisc)
library(corrplot)
library(tidyverse)
library(lme4)
library(sjPlot)
library(psych)
library(mediation)
library(lavaan)
library(pbkrtest)
library(Rcpp)
library(dplyr)

Load Data

WPT1 <- read.csv("wpt_study1_6.19.2020.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))
WPT2 <- read.csv("Pred2Full.08.06.2020.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))
WPT3 <- read.csv("Pred3Full.08.06.2020.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))

show # of participants with below 50% accuracy and remove

#compute average accuracy for study 1
WPT1$acc <- as.integer(as.character(WPT1$acc))
averga_acc <- WPT1 %>%
  group_by(Participant)%>%
  dplyr::summarise(avg_acc=mean(acc, na.rm = T))
`summarise()` ungrouping output (override with `.groups` argument)
WPT1 <- merge(WPT1, averga_acc, by = "Participant", all.x = F)

#plot # of participants under 50% accurate
count_NAStudy1 <- WPT1$Participant[which(WPT1$avg_acc<=.52)]
count_NAStudy1<- unique(count_NAStudy1)
length(count_NAStudy1)
[1] 9
WPT1 <- WPT1[!(WPT1$Participant %in% count_NAStudy1),]

#plot # of participants under 50% accurate
count_NAStudy2 <- WPT2$Participant[which(WPT2$avg_acc<=.52)]
count_NAStudy2<- unique(count_NAStudy2)
length(count_NAStudy2)
[1] 20
WPT2 <- WPT2[!(WPT2$Participant %in% count_NAStudy2),] #remove those participants

#plot # of participants under 50% accurate
count_NAStudy3 <- WPT3$Participant[which(WPT3$avg_acc<=.52)]
count_NAStudy3<- unique(count_NAStudy3)
length(count_NAStudy3)
[1] 15
WPT3 <- WPT3[!(WPT3$Participant %in% count_NAStudy3),]

calculate average accuracy for each condition and plot

WPT1$acc <- as.numeric(as.character(WPT1$acc))
WPT1Summary <- WPT1 %>% # the names of the new data frame and the data frame to be summarised
  group_by(Condition) %>%   # the grouping variable
  dplyr::summarise(mean_acc = mean(acc, na.rm = T),  # calculates the mean of each group
            sd_PL = sd(acc),
            n_PL = n(),  # calculates the sample size per group
            SE_PL = sd(acc)/sqrt(n())) # calculates the standard error of each group
`summarise()` ungrouping output (override with `.groups` argument)
WPT2Summary <- WPT2 %>% # the names of the new data frame and the data frame to be summarised
  group_by(Condition) %>%   # the grouping variable
  dplyr::summarise(mean_acc = mean(acc, na.rm = T),  # calculates the mean of each group
            sd_PL = sd(acc),
            n_PL = n(),  # calculates the sample size per group
            SE_PL = sd(acc)/sqrt(n())) # calculates the standard error of each group
`summarise()` ungrouping output (override with `.groups` argument)
WPT3Summary <- WPT3 %>% # the names of the new data frame and the data frame to be summarised
  group_by(Condition) %>%# the grouping variable
  dplyr::summarise(meanAcc = mean(acc, na.rm = T),# calculates the mean of each group
                   sd_PL = sd(meanAcc),
                   n_PL = n(),# calculates the sample size per group
                   SE_PL = .01) # calculates the standard error of each group
`summarise()` ungrouping output (override with `.groups` argument)
#Study 1 
ggplot(WPT1Summary, aes(x=as.factor(Condition), y=mean_acc)) +
  geom_bar(stat = "identity", alpha=0.5) +
  geom_errorbar(aes(x=as.factor(Condition), ymin=mean_acc-SE_PL, ymax=mean_acc+SE_PL))+
  coord_cartesian(ylim = c(0, 1))


#Study 
ggplot(WPT2Summary, aes(x=as.factor(Condition), y=mean_acc)) +
  geom_bar(stat = "identity", alpha=0.5) +
  geom_errorbar(aes(x=as.factor(Condition), ymin=mean_acc-SE_PL, ymax=mean_acc+SE_PL))+
  coord_cartesian(ylim = c(0, 1))


#Study 2
ggplot(WPT3Summary, aes(x=as.factor(Condition), y=meanAcc)) +
  geom_bar(stat = "identity", alpha=0.5) +
  geom_errorbar(aes(x=as.factor(Condition), ymin=meanAcc-SE_PL, ymax=meanAcc+SE_PL))+
  coord_cartesian(ylim = c(0, 1))

plot raw learning rate over time for study 1

WPT1 <- WPT1 %>%
  group_by(Participant) %>%
  mutate(Trial = seq_len(n()))

#Study 1 
ggplot(WPT1, aes(Trial, acc, color = Condition)) + 
  geom_smooth(method = "loess")+
  scale_y_continuous(name = "Accuracy") 

#Study2
ggplot(WPT2, aes(Trial, acc, color = Condition)) + 
  geom_smooth(method = "loess")+
  scale_y_continuous(name = "Accuracy") 

#Study3
ggplot(WPT3, aes(Trial, acc, color = Condition)) + 
  geom_smooth(method = "loess")+
  scale_y_continuous(name = "Accuracy") 

########RL Results#######

Load RL Models

RL.ML.3 <- read.csv("fullBICStudy3.ML.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))
RL.Map.3 <- read.csv("fullBICStudy3.MAP.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))

RL.ML.2 <- read.csv("fullBICStudy2.ML.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))
RL.Map.2 <- read.csv("fullBICStudy2.MAP.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))

##Individual Differences for ET DECAY
WPT3Neg <-  read.csv("Negative.ETDecay.MAP.ParamDf.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))
WPT3Neg$Cond <- "Negative"
WPT3Neg <- WPT3Neg[,-1]

WPT3Pos <-  read.csv("Positive.ETDecay.MAP.ParamDf.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))
WPT3Pos$Cond <- "Positive"

WPT3FullRL <- rbind(WPT3Neg, WPT3Pos)
WPT3FullRL <- WPT3FullRL[!(WPT3FullRL$subID %in% count_NAStudy3),] #remove outliers participants

WPT2Steal <-  read.csv("Steal.ETDecay.MAP.ParamDf.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))
WPT2Steal$Cond <- "steal"

WPT2Weather<-  read.csv("Weather.ETDecay.MAP.ParamDf.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))
WPT2Weather$Cond <- "Weather"

WPT2StealCloud<-  read.csv("StealCl.ETDecay.MAP.ParamDf.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))
WPT2StealCloud$Cond <- "StealCl"

WPT2WeatherFace<-  read.csv("WeatherFa.ETDecay.MAP.ParamDf.csv", header=T, stringsAsFactors = FALSE, na.strings=c("","NA"))
WPT2WeatherFace$Cond <- "WeatherFa"

WPT2FullRL <- rbind(WPT2Steal, WPT2Weather, WPT2StealCloud, WPT2WeatherFace)
WPT2FullRL <- WPT2FullRL[!(WPT2FullRL$subID %in% count_NAStudy2),] #remove outliers participants

Plot BIC Summed Difference From Baseline Model (i.e. model that does not take into account experimental design)

ggplot(RL.ML.2, aes(x = Cond, y = SumBIC))+
  geom_bar(stat = "identity", alpha=0.5) +facet_grid(~model)+
  geom_errorbar(aes(x=as.factor(Cond), ymin=SumBIC-SE_PL, ymax=SumBIC+SE_PL))


ggplot(RL.Map.2, aes(x = Cond, y = SumBIC))+
  geom_bar(stat = "identity", alpha=0.5) +facet_grid(~model)+
  geom_errorbar(aes(x=as.factor(Cond), ymin=SumBIC-SE_PL, ymax=SumBIC+SE_PL))


ggplot(RL.ML.3, aes(x = Cond, y = SumBIC))+
  geom_bar(stat = "identity", alpha=0.5) +facet_grid(~model)+
  geom_errorbar(aes(x=as.factor(Cond), ymin=SumBIC-SE_PL, ymax=SumBIC+SE_PL))


ggplot(RL.Map.3, aes(x = Cond, y = SumBIC))+
  geom_bar(stat = "identity", alpha=0.5) +facet_grid(~model)+
  geom_errorbar(aes(x=as.factor(Cond), ymin=SumBIC-SE_PL, ymax=SumBIC+SE_PL))

Plotting and Testing for ET Decay BIC differences

#summarize study 2 BIC 
BIC.Sum.2.ETDecay <- WPT2FullRL %>% # the names of the new data frame and the data frame to be summarised
  group_by(Cond) %>%   # the grouping variable
  dplyr::summarise(SumBIC = sum(BIC, na.rm = T),  # calculates the mean of each group
                   sd_PL = sd(BIC),
                   n_PL = n(),  # calculates the sample size per group
                   SE_PL = sd(BIC)/sqrt(n())) # calculates the standard error of each group
`summarise()` ungrouping output (override with `.groups` argument)
#summarize study 3 BIC 
BIC.Sum.3.ETDecay <- WPT3FullRL %>% # the names of the new data frame and the data frame to be summarised
  group_by(Cond) %>%   # the grouping variable
  dplyr::summarise(SumBIC = sum(BIC, na.rm = T),  # calculates the mean of each group
                   sd_PL = sd(BIC),
                   n_PL = n(),  # calculates the sample size per group
                   SE_PL = sd(BIC)/sqrt(n())) # calculates the standard error of each group
`summarise()` ungrouping output (override with `.groups` argument)
#Run ANOVA, post hoc tests and for study 2 BIC 
WPT2FullRL.AOV <- aov(WPT2FullRL$BIC~WPT2FullRL$Cond)
summary(WPT2FullRL.AOV)
                 Df  Sum Sq Mean Sq F value Pr(>F)  
WPT2FullRL$Cond   3   27858    9286   2.867 0.0365 *
Residuals       369 1195136    3239                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
TukeyHSD(WPT2FullRL.AOV)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = WPT2FullRL$BIC ~ WPT2FullRL$Cond)

$`WPT2FullRL$Cond`
                        diff       lwr       upr     p adj
StealCl-steal     -16.166597 -37.65531  5.322113 0.2125431
Weather-steal     -22.874670 -44.41835 -1.330994 0.0325028
WeatherFa-steal   -18.948126 -40.72222  2.825971 0.1130017
Weather-StealCl    -6.708074 -27.96327 14.547122 0.8476182
WeatherFa-StealCl  -2.781529 -24.27024 18.707180 0.9871347
WeatherFa-Weather   3.926544 -17.61713 25.470221 0.9655238
ggplot(BIC.Sum.2.ETDecay, aes(x=as.factor(Cond), y=SumBIC)) +
  geom_bar(stat = "identity", alpha=0.5) +
  geom_errorbar(aes(x=as.factor(Cond), ymin=SumBIC-SE_PL, ymax=SumBIC+SE_PL))+
  coord_cartesian(ylim = c(100, 25000))


#Run T.Test, post hoc tests and for study 3 BIC 
t.test(WPT3FullRL$BIC~WPT3FullRL$Cond)

    Welch Two Sample t-test

data:  WPT3FullRL$BIC by WPT3FullRL$Cond
t = 0.5537, df = 199.41, p-value = 0.5804
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -11.62906  20.70945
sample estimates:
mean in group Negative mean in group Positive 
              190.3768               185.8367 
ggplot(BIC.Sum.3.ETDecay, aes(x=as.factor(Cond), y=SumBIC)) +
  geom_bar(stat = "identity", alpha=0.5) +
  geom_errorbar(aes(x=as.factor(Cond), ymin=SumBIC-SE_PL, ymax=SumBIC+SE_PL))+
  coord_cartesian(ylim = c(100, 25000))


#Test for Differences Between Studies 2 and 3 steal conditions
Steal3 <- WPT3FullRL[which(WPT3FullRL$Cond == "Negative"),]
Steal2 <- WPT2FullRL[which(WPT2FullRL$Cond == "steal"),]
t.test(Steal3$BIC,Steal2$BIC, paired = F) # Not sig different

    Welch Two Sample t-test

data:  Steal3$BIC and Steal2$BIC
t = -0.92102, df = 191.84, p-value = 0.3582
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -24.906574   9.050359
sample estimates:
mean of x mean of y 
 190.3768  198.3050 

Plot All Correlations in stereotype congruency conditions

#Seperate Stereotype Conditions
Steal3WPT <- WPT3[which(WPT3$Condition == "neg"),]
Touchdown3 <- WPT3[which(WPT3$Condition == "pos"),]
Steal2WPT <- WPT2[which(WPT2$Condition == "steal"),]

#Isolate individual differences
colnames(Steal2WPT)
 [1] "X"               "Participant"     "LR"              "Temp"            "Anneal"          "LL"              "k"               "n"              
 [9] "BIC"             "AIC"             "Pattern"         "Wins"            "Losses"          "Super_Wins"      "Super_Losses"    "Face_Shown"     
[17] "Choice"          "RT"              "Condition"       "Pattern.Outcome" "acc"             "Choice_numeric"  "Outcome"         "Stimuli"        
[25] "Trial"           "Att"             "EX"              "HH"              "SDO"             "EMS"             "IMS"             "blk_contact"    
[33] "wht_contact"     "blk_exp"         "wht_exp"         "intergroup_anx"  "avg_acc"         "prob"            "Condition_eff"   "Cprob"          
[41] "prob_eff"       
Steal3WPT.Corr <- Steal3WPT[,c(16:30)]
Touchdown3.Corr <- Touchdown3[,c(16:30)]
Steal2WPT.Corr <- Steal2WPT[,c(3,4,5,6,27:37)]
# M <- cor(Steal3WPT.Corr, use = "pairwise.complete.obs")
# corrplot(M)
S.corr.Acc <- Steal3WPT.Corr  %>% 
  correlate()  %>% 
  focus(avg_acc)

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
S.corr.Acc %>% 
  mutate(rowname = factor(rowname, levels = rowname[order(avg_acc)])) %>%  # Order by correlation strength
  ggplot(aes(x = rowname, y = avg_acc)) +
  geom_bar(stat = "identity") +
  ylab("Correlation with Alpha") +
  xlab("Variable") + theme_grey(base_size = 8)


T.Corr.Acc <- Touchdown3.Corr  %>% 
  correlate()  %>% 
  focus(avg_acc)

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
T.Corr.Acc %>% 
  mutate(rowname = factor(rowname, levels = rowname[order(avg_acc)])) %>%  # Order by correlation strength
  ggplot(aes(x = rowname, y = avg_acc)) +
  geom_bar(stat = "identity") +
  ylab("Correlation with Alpha") +
  xlab("Variable") + theme_grey(base_size = 8)


S2.corr.Acc <- Steal2WPT.Corr  %>% 
  correlate()  %>% 
  focus(avg_acc)

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
S2.corr.Acc %>% 
  mutate(rowname = factor(rowname, levels = rowname[order(avg_acc)])) %>%  # Order by correlation strength
  ggplot(aes(x = rowname, y = avg_acc)) +
  geom_bar(stat = "identity") +
  ylab("Correlation with Alpha") +
  xlab("Variable") + theme_grey(base_size = 8)

#Scale and median split individual differences for visuals

S2 <- Steal2WPT[,c(2,5,17,18,21,22,24,25,27:38)]
S3 <- Steal3WPT[,c(2,4,5,8,9,12, 14,16:26,29,36)]
stealFull <- rbind(S2, S3)

WPT2$decay <- WPT2$Anneal
WPT2$scDecay <- scale(WPT2$decay)
WPT2$decay2 <- WPT2$scDecay^2
WPT2$SDO_sca <- scale(WPT2$SDO)
WPT2$blk_exp_sca <- scale(WPT2$blk_exp)
WPT2$blk_contact_sca <- scale(WPT2$blk_contact)
WPT2$intergroup_anx_sca <- scale(WPT2$intergroup_anx)
WPT2$IMS_sca <- scale(WPT2$IMS)
WPT2$EMS_sca <- scale(WPT2$EMS)

#scale ind diff for positive condition
WPT3$decay <- WPT3$Anneal
WPT3$SDO_sca <- scale(WPT3$SDO)
WPT3$blk_exp_sca <- scale(WPT3$blk_exp)
WPT3$blk_contact_sca <- scale(WPT3$blk_contact)
WPT3$intergroup_anx_sca <- scale(WPT3$intergroup_anx)
WPT3$IMS_sca <- scale(WPT3$IMS)
WPT3$EMS_sca <- scale(WPT3$EMS)
WPT3$scDecay <- scale(WPT3$decay)
WPT3$decay2 <- WPT3$scDecay^2

stealStudy2 <- S2
stealStudy2$decay <- stealStudy2$Anneal
stealStudy2$SDO_sca <- scale(stealStudy2$SDO)
stealStudy2$blk_exp_sca <- scale(stealStudy2$blk_exp)
stealStudy2$blk_contact_sca <- scale(stealStudy2$blk_contact)
stealStudy2$intergroup_anx_sca <- scale(stealStudy2$intergroup_anx)
stealStudy2$IMS_sca <- scale(stealStudy2$IMS)
stealStudy2$EMS_sca <- scale(stealStudy2$EMS)
stealStudy2$scDecay <- scale(stealStudy2$decay)
stealStudy2$decay2 <- stealStudy2$scDecay^2

stealStudy3 <- S3
stealStudy3$decay <- stealStudy3$Anneal
stealStudy3$SDO_sca <- scale(stealStudy3$SDO)
stealStudy3$blk_exp_sca <- scale(stealStudy3$blk_exp)
stealStudy3$blk_contact_sca <- scale(stealStudy3$blk_contact)
stealStudy3$intergroup_anx_sca <- scale(stealStudy3$intergroup_anx)
stealStudy3$IMS_sca <- scale(stealStudy3$IMS)
stealStudy3$EMS_sca <- scale(stealStudy3$EMS)
stealStudy3$scDecay <- scale(stealStudy3$decay)
stealStudy3$decay2 <- stealStudy3$scDecay^2

posStudy3 <- Touchdown3
posStudy3$decay <- posStudy3$Anneal
posStudy3$SDO_sca <- scale(posStudy3$SDO)
posStudy3$blk_exp_sca <- scale(posStudy3$blk_exp)
posStudy3$blk_contact_sca <- scale(posStudy3$blk_contact)
posStudy3$intergroup_anx_sca <- scale(posStudy3$intergroup_anx)
posStudy3$IMS_sca <- scale(posStudy3$IMS)
posStudy3$EMS_sca <- scale(posStudy3$EMS)
posStudy3$scDecay <- scale(posStudy3$decay)
posStudy3$decay2 <- posStudy3$scDecay^2

stealFull$decay <- stealFull$Anneal
stealFull$scDecay <- scale(stealFull$decay)
stealFull$decay2 <- stealFull$scDecay^2
stealFull$SDO_sca <- scale(stealFull$SDO)
stealFull$blk_exp_sca <- scale(stealFull$blk_exp)
stealFull$blk_contact_sca <- scale(stealFull$blk_contact)
stealFull$intergroup_anx_sca <- scale(stealFull$intergroup_anx)
stealFull$IMS_sca <- scale(stealFull$IMS)
stealFull$EMS_sca <- scale(stealFull$EMS)


#median split 
stealStudy2$SDODich[stealStudy2$SDO > median(stealStudy2$SDO, na.rm = T) ] <- "high"
stealStudy2$SDODich[stealStudy2$SDO < median(stealStudy2$SDO, na.rm = T) ] <- "low"
stealStudy3$SDODich[stealStudy3$SDO > median(stealStudy3$SDO, na.rm = T) ] <- "high"
stealStudy3$SDODich[stealStudy3$SDO < median(stealStudy3$SDO, na.rm = T) ] <- "low"
WPT2$SDODich[WPT2$SDO > median(stealStudy2$SDO, na.rm = T) ] <- "high"
WPT2$SDODich[WPT2$SDO < median(stealStudy2$SDO, na.rm = T) ] <- "low"
WPT3$SDODich[WPT3$SDO > median(stealStudy2$SDO, na.rm = T) ] <- "high"
WPT3$SDODich[WPT3$SDO < median(stealStudy2$SDO, na.rm = T) ] <- "low"
stealFull$SDODich[stealFull$SDO > median(stealFull$SDO, na.rm = T) ] <- "high"
stealFull$SDODich[stealFull$SDO < median(stealFull$SDO, na.rm = T) ] <- "low"
table(stealStudy2$SDODich)

high  low 
7453 7734 
table(stealStudy3$intergroup_anx)

               1              1.5 1.66666666666667 1.83333333333333                2 2.33333333333333              2.5 2.66666666666667 2.83333333333333 
            1818              606             1010              202             1212             2020             1010             1010             2424 
               3 3.16666666666667 3.33333333333333              3.5 3.66666666666667 3.83333333333333                4 
            3232              808              404             1010              404              404              808 
hist(stealStudy2$SDO)

hist(stealStudy3$intergroup_anx)


stealStudy2$IntAnxDich[stealStudy2$intergroup_anx > median(stealStudy2$intergroup_anx, na.rm = T) ] <- "high"
stealStudy2$IntAnxDich[stealStudy2$intergroup_anx < median(stealStudy2$intergroup_anx, na.rm = T) ] <- "low"
stealStudy3$IntAnxDich[stealStudy3$intergroup_anx > median(stealStudy3$intergroup_anx, na.rm = T) ] <- "high"
stealStudy3$IntAnxDich[stealStudy3$intergroup_anx < median(stealStudy3$intergroup_anx, na.rm = T) ] <- "low"
posStudy3$IntAnxDich[posStudy3$intergroup_anx > median(posStudy3$intergroup_anx, na.rm = T) ] <- "high"
posStudy3$IntAnxDich[posStudy3$intergroup_anx < median(posStudy3$intergroup_anx, na.rm = T) ] <- "low"
WPT2$IntAnxDich[WPT2$intergroup_anx > median(stealStudy3$intergroup_anx, na.rm = T) ] <- "high"
WPT2$IntAnxDich[WPT2$intergroup_anx < median(stealStudy3$intergroup_anx, na.rm = T) ] <- "low"
WPT3$IntAnxDich[WPT3$intergroup_anx > median(WPT3$intergroup_anx, na.rm = T) ] <- "high"
WPT3$IntAnxDich[WPT3$intergroup_anx < median(WPT3$intergroup_anx, na.rm = T) ] <- "low"
stealFull$IntAnxDich[stealFull$intergroup_anx > median(stealFull$intergroup_anx, na.rm = T) ] <- "high"
stealFull$IntAnxDich[stealFull$intergroup_anx < median(stealFull$intergroup_anx, na.rm = T) ] <- "low"

stealStudy2$IMSDich[stealStudy2$IMS > median(stealStudy2$IMS, na.rm = T) ] <- "high"
stealStudy2$IMSDich[stealStudy2$IMS < median(stealStudy2$IMS, na.rm = T) ] <- "low"
stealStudy3$IMSDich[stealStudy3$IMS > median(stealStudy3$IMS, na.rm = T) ] <- "high"
stealStudy3$IMSDich[stealStudy3$IMS < median(stealStudy3$IMS, na.rm = T) ] <- "low"
posStudy3$IMSDich[posStudy3$IMS > median(posStudy3$IMS, na.rm = T) ] <- "high"
posStudy3$IMSDich[posStudy3$IMS < median(posStudy3$IMS, na.rm = T) ] <- "low"
WPT2$IMSDich[WPT2$IMS > median(WPT2$IMS, na.rm = T) ] <- "high"
WPT2$IMSDich[WPT2$IMS < median(WPT2$IMS, na.rm = T) ] <- "low"
WPT3$IMSDich[WPT3$IMS > median(WPT3$IMS, na.rm = T) ] <- "high"
WPT3$IMSDich[WPT3$IMS < median(WPT3$IMS, na.rm = T) ] <- "low"
stealFull$IMSDich[stealFull$IMS > median(stealFull$IMS, na.rm = T) ] <- "high"
stealFull$IMSDich[stealFull$IMS < median(stealFull$IMS, na.rm = T) ] <- "low"

stealStudy2$EMSDich[stealStudy2$EMS > median(stealStudy2$EMS, na.rm = T) ] <- "high"
stealStudy2$EMSDich[stealStudy2$EMS < median(stealStudy2$EMS, na.rm = T) ] <- "low"
stealStudy3$EMSDich[stealStudy3$EMS >median(stealStudy3$EMS, na.rm = T) ] <- "high"
stealStudy3$EMSDich[stealStudy3$EMS < median(stealStudy3$EMS, na.rm = T) ] <- "low"
WPT2$EMSDich[WPT2$EMS > median(WPT2$EMS, na.rm = T) ] <- "high"
WPT2$EMSDich[WPT2$EMS < median(WPT2$EMS, na.rm = T) ] <- "low"
WPT3$EMSDich[WPT3$EMS > median(WPT3$EMS, na.rm = T) ] <- "high"
WPT3$EMSDich[WPT3$EMS < median(WPT3$EMS, na.rm = T) ] <- "low"
stealFull$EMSDich[stealFull$EMS > median(stealFull$EMS, na.rm = T) ] <- "high"
stealFull$EMSDich[stealFull$EMS < median(stealFull$EMS, na.rm = T) ] <- "low"

Run logistic mixed models for all three studies

#Study1
Study1Logistic<- glmer(acc~scale(Trial)*Condition_eff+ (1|Participant), data = WPT1, family = "binomial")
summary(Study1Logistic)

#Study2
Study2Logistic<- glmer(acc~scale(Trial)*Condition_eff+ (1|Participant), data = WPT2, family = "binomial")
summary(Study2Logistic)

#Study3
Pred3Full <- Pred3Full[!is.na(Pred3Full$Pattern),]
Study3Logistic<- glmer(acc~scale(Trial)*Condition_eff+ (1|Participant), data = WPT3, family = "binomial")
summary(Study3Logistic)

#individual differences


StealFullEMS <- glmer(acc~scale(Trial)*EMS_sca + (1|Participant), data = stealFull, family = "binomial")
summary(StealFullEMS)
Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) ['glmerMod']
 Family: binomial  ( logit )
Formula: acc ~ scale(Trial) * EMS_sca + (1 | Participant)
   Data: stealFull

     AIC      BIC   logLik deviance df.resid 
 33708.3  33750.6 -16849.1  33698.3    34791 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-5.3411  0.2232  0.3867  0.5481  1.4412 

Random effects:
 Groups      Name        Variance Std.Dev.
 Participant (Intercept) 0.4995   0.7067  
Number of obs: 34796, groups:  Participant, 176

Fixed effects:
                     Estimate Std. Error z value Pr(>|z|)    
(Intercept)           1.42656    0.05536  25.769  < 2e-16 ***
scale(Trial)          0.48908    0.01425  34.316  < 2e-16 ***
EMS_sca              -0.05797    0.05159  -1.123    0.261    
scale(Trial):EMS_sca -0.06522    0.01408  -4.631 3.64e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(T) EMS_sc
scale(Tril)  0.066              
EMS_sca     -0.007 -0.013       
scl(T):EMS_ -0.012 -0.042  0.071
StealFullIMS <- glmer(acc~scale(Trial)*IMS_sca + (1|Participant), data = stealFull, family = "binomial")
summary(StealFullIMS)
Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) ['glmerMod']
 Family: binomial  ( logit )
Formula: acc ~ scale(Trial) * IMS_sca + (1 | Participant)
   Data: stealFull

     AIC      BIC   logLik deviance df.resid 
 33700.0  33742.3 -16845.0  33690.0    34793 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-5.6722  0.2210  0.3858  0.5510  1.5011 

Random effects:
 Groups      Name        Variance Std.Dev.
 Participant (Intercept) 0.5017   0.7083  
Number of obs: 34798, groups:  Participant, 176

Fixed effects:
                     Estimate Std. Error z value Pr(>|z|)    
(Intercept)           1.42866    0.05549  25.746  < 2e-16 ***
scale(Trial)          0.48926    0.01428  34.260  < 2e-16 ***
IMS_sca              -0.12278    0.05467  -2.246 0.024718 *  
scale(Trial):IMS_sca -0.05301    0.01407  -3.766 0.000166 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(T) IMS_sc
scale(Tril)  0.067              
IMS_sca     -0.013 -0.014       
scl(T):IMS_ -0.014 -0.079  0.069
StealFullIntAnx <- glmer(acc~scale(Trial)*intergroup_anx_sca + (1|Participant), data = stealFull, family = "binomial")
summary(StealFullIntAnx)
Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) ['glmerMod']
 Family: binomial  ( logit )
Formula: acc ~ scale(Trial) * intergroup_anx_sca + (1 | Participant)
   Data: stealFull

     AIC      BIC   logLik deviance df.resid 
 33487.0  33529.3 -16738.5  33477.0    34806 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-5.7075  0.2266  0.3845  0.5439  1.3748 

Random effects:
 Groups      Name        Variance Std.Dev.
 Participant (Intercept) 0.506    0.7113  
Number of obs: 34811, groups:  Participant, 176

Fixed effects:
                                Estimate Std. Error z value Pr(>|z|)    
(Intercept)                      1.44585    0.05572  25.950   <2e-16 ***
scale(Trial)                     0.48234    0.01430  33.735   <2e-16 ***
intergroup_anx_sca              -0.06223    0.05003  -1.244    0.214    
scale(Trial):intergroup_anx_sca -0.00179    0.01444  -0.124    0.901    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(T) intr__
scale(Tril)  0.066              
intrgrp_nx_ -0.007 -0.005       
scl(Trl):__ -0.006 -0.041  0.077
StealFullblkCon <- glmer(acc~scale(Trial)*blk_contact_sca + (1|Participant), data = stealFull, family = "binomial")
summary(StealFullblkCon)
Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) ['glmerMod']
 Family: binomial  ( logit )
Formula: acc ~ scale(Trial) * blk_contact_sca + (1 | Participant)
   Data: stealFull

     AIC      BIC   logLik deviance df.resid 
 34275.4  34317.8 -17132.7  34265.4    35387 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-5.7859  0.2238  0.3866  0.5485  1.3902 

Random effects:
 Groups      Name        Variance Std.Dev.
 Participant (Intercept) 0.514    0.7169  
Number of obs: 35392, groups:  Participant, 179

Fixed effects:
                             Estimate Std. Error z value Pr(>|z|)    
(Intercept)                   1.42795    0.05563  25.668   <2e-16 ***
scale(Trial)                  0.48111    0.01410  34.120   <2e-16 ***
blk_contact_sca              -0.01249    0.05541  -0.225    0.822    
scale(Trial):blk_contact_sca -0.01617    0.01398  -1.157    0.247    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(T) blk_c_
scale(Tril)  0.064              
blk_cntct_s -0.001 -0.002       
scl(Trl):__ -0.002 -0.016  0.059
StealFullblkExt <- glmer(acc~scale(Trial)*blk_exp_sca + (1|Participant), data = stealFull, family = "binomial")
summary(StealFullblkExt)
Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) ['glmerMod']
 Family: binomial  ( logit )
Formula: acc ~ scale(Trial) * blk_exp_sca + (1 | Participant)
   Data: stealFull

     AIC      BIC   logLik deviance df.resid 
 31791.2  31833.2 -15890.6  31781.2    32844 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-5.7896  0.2246  0.3874  0.5470  1.4190 

Random effects:
 Groups      Name        Variance Std.Dev.
 Participant (Intercept) 0.4946   0.7033  
Number of obs: 32849, groups:  Participant, 166

Fixed effects:
                         Estimate Std. Error z value Pr(>|z|)    
(Intercept)               1.42843    0.05674  25.176   <2e-16 ***
scale(Trial)              0.48953    0.01467  33.378   <2e-16 ***
blk_exp_sca              -0.06330    0.05640  -1.122   0.2617    
scale(Trial):blk_exp_sca -0.03548    0.01439  -2.466   0.0136 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(T) blk_x_
scale(Tril)  0.066              
blk_exp_sca -0.001 -0.008       
scl(Trl):__ -0.008 -0.041  0.063

RL differences by study & condition

Study2RLRT <- lmer(RT~scDecay*Condition_eff +(1|Participant), data = WPT2)
Study2RLRT <- lmer(RT~scDecay*Condition_eff +(1|Participant), data = WPT2)
summary(Study2RLRT)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: RT ~ scDecay * Condition_eff + (1 | Participant)
   Data: WPT2

REML criterion at convergence: 323716.5

Scaled residuals: 
   Min     1Q Median     3Q    Max 
-1.380 -0.293 -0.120  0.151 78.768 

Random effects:
 Groups      Name        Variance Std.Dev.
 Participant (Intercept) 0.1327   0.3643  
 Residual                4.7471   2.1788  
Number of obs: 73482, groups:  Participant, 373

Fixed effects:
                                    Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)                          1.93603    0.02085 363.87350  92.849   <2e-16 ***
scDecay                              0.02192    0.02102 364.05420   1.043   0.2977    
Condition_effsteal                   0.04931    0.03642 363.73749   1.354   0.1766    
Condition_effsteal_clouds            0.07717    0.03651 363.92471   2.113   0.0352 *  
Condition_effweather_faces          -0.06511    0.03571 363.91190  -1.823   0.0691 .  
scDecay:Condition_effsteal          -0.06178    0.03565 364.38103  -1.733   0.0839 .  
scDecay:Condition_effsteal_clouds    0.03091    0.03851 364.31145   0.803   0.4227    
scDecay:Condition_effweather_faces  -0.02623    0.03721 363.74537  -0.705   0.4812    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
                 (Intr) scDecy Cndtn_ Cndtn_ffs_ Cndtn_ffw_ scD:C_ scDcy:Cndtn_ffs_
scDecay           0.017                                                            
Cndtn_ffstl       0.015 -0.113                                                     
Cndtn_ffst_       0.019  0.118 -0.346                                              
Cndtn_ffwt_      -0.020  0.088 -0.332 -0.333                                       
scDcy:Cndt_      -0.116 -0.036 -0.115 -0.009      0.010                            
scDcy:Cndtn_ffs_  0.113  0.098 -0.008  0.145     -0.120     -0.359                 
scDcy:Cndtn_ffw_  0.085  0.038  0.009 -0.121      0.117     -0.335 -0.384          

Plot individual differences

stealStudy2$EMSDich
   [1] "low"  "high" "low"  "low"  "low"  "low"  "low"  "high" "high" NA     NA     "low"  "low"  "low"  "high" "low"  "low"  "high" "high" "low"  "low" 
  [22] "high" "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "low"  "low"  NA     NA     "high" "high" "low"  "high" "low"  NA    
  [43] "high" "high" "low"  "high" "high" "high" "high" "high" "low"  "low"  "high" "high" "high" "low"  "high" "low"  "low"  "high" "low"  "low"  "low" 
  [64] "low"  NA     "low"  "high" NA     "high" NA     "high" "high" "low"  "low"  "high" "high" "low"  "high" "high" "low"  "low"  "low"  "high" "low" 
  [85] "high" "high" "low"  "high" "low"  "low"  "low"  "low"  "low"  "high" "high" NA     NA     "low"  "low"  "low"  "high" "low"  "low"  "high" "high"
 [106] "low"  "low"  "high" "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "low"  "low"  NA     NA     "high" "high" "low"  "high"
 [127] "low"  NA     "high" "high" "low"  "high" "high" "high" "high" "high" "low"  "low"  "high" "high" "high" "low"  "high" "low"  "low"  "high" "low" 
 [148] "low"  "low"  "low"  NA     "low"  "high" NA     "high" NA     "high" "high" "low"  "low"  "high" "high" "low"  "high" "high" "low"  "low"  "low" 
 [169] "high" "low"  "high" "high" "low"  "high" "low"  "low"  "low"  "low"  "low"  "high" "high" NA     NA     "low"  "low"  "low"  "high" "low"  "low" 
 [190] "high" "high" "low"  "low"  "high" "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "low"  "low"  NA     NA     "high" "high"
 [211] "low"  "high" "low"  NA     "high" "high" "low"  "high" "high" "high" "high" "high" "low"  "low"  "high" "high" "high" "low"  "high" "low"  "low" 
 [232] "high" "low"  "low"  "low"  "low"  NA     "low"  "high" NA     "high" NA     "high" "high" "low"  "low"  "high" "high" "low"  "high" "high" "low" 
 [253] "low"  "low"  "high" "low"  "high" "high" "low"  "high" "low"  "low"  "low"  "low"  "low"  "high" "high" NA     NA     "low"  "low"  "low"  "high"
 [274] "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "low"  "low"  NA     NA    
 [295] "high" "high" "low"  "high" "low"  NA     "high" "high" "low"  "high" "high" "high" "high" "high" "low"  "low"  "high" "high" "high" "low"  "high"
 [316] "low"  "low"  "high" "low"  "low"  "low"  "low"  NA     "low"  "high" NA     "high" NA     "high" "high" "low"  "low"  "high" "high" "low"  "high"
 [337] "high" "low"  "low"  "low"  "high" "low"  "high" "high" "low"  "high" "low"  "low"  "low"  "low"  "low"  "high" "high" NA     NA     "low"  "low" 
 [358] "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "low"  "low" 
 [379] NA     NA     "high" "high" "low"  "high" "low"  NA     "high" "high" "low"  "high" "high" "high" "high" "high" "low"  "low"  "high" "high" "high"
 [400] "low"  "high" "low"  "low"  "high" "low"  "low"  "low"  "low"  NA     "low"  "high" NA     "high" NA     "high" "high" "low"  "low"  "high" "high"
 [421] "low"  "high" "high" "low"  "low"  "low"  "high" "low"  "high" "high" "low"  "high" "low"  "low"  "low"  "low"  "low"  "high" "high" NA     NA    
 [442] "low"  "low"  "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low" 
 [463] "low"  "low"  NA     NA     "high" "high" "low"  "high" "low"  NA     "high" "high" "low"  "high" "high" "high" "high" "high" "low"  "low"  "high"
 [484] "high" "high" "low"  "high" "low"  "low"  "high" "low"  "low"  "low"  "low"  NA     "low"  "high" NA     "high" NA     "high" "high" "low"  "low" 
 [505] "high" "high" "low"  "high" "high" "low"  "low"  "low"  "high" "low"  "high" "high" "low"  "high" "low"  "low"  "low"  "low"  "low"  "high" "high"
 [526] NA     NA     "low"  "low"  "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "high" "low"  "low"  "high" "high" "low"  "low" 
 [547] "high" "low"  "low"  "low"  NA     NA     "high" "high" "low"  "high" "low"  NA     "high" "high" "low"  "high" "high" "high" "high" "high" "low" 
 [568] "low"  "high" "high" "high" "low"  "high" "low"  "low"  "high" "low"  "low"  "low"  "low"  NA     "low"  "high" NA     "high" NA     "high" "high"
 [589] "low"  "low"  "high" "high" "low"  "high" "high" "low"  "low"  "low"  "high" "low"  "high" "high" "low"  "high" "low"  "low"  "low"  "low"  "low" 
 [610] "high" "high" NA     NA     "low"  "low"  "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "high" "low"  "low"  "high" "high"
 [631] "low"  "low"  "high" "low"  "low"  "low"  NA     NA     "high" "high" "low"  "high" "low"  NA     "high" "high" "low"  "high" "high" "high" "high"
 [652] "high" "low"  "low"  "high" "high" "high" "low"  "high" "low"  "low"  "high" "low"  "low"  "low"  "low"  NA     "low"  "high" NA     "high" NA    
 [673] "high" "high" "low"  "low"  "high" "high" "low"  "high" "high" "low"  "low"  "low"  "high" "low"  "high" "high" "low"  "high" "low"  "low"  "low" 
 [694] "low"  "low"  "high" "high" NA     NA     "low"  "low"  "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "high" "low"  "low" 
 [715] "high" "high" "low"  "low"  "high" "low"  "low"  "low"  NA     NA     "high" "high" "low"  "high" "low"  NA     "high" "high" "low"  "high" "high"
 [736] "high" "high" "high" "low"  "low"  "high" "high" "high" "low"  "high" "low"  "low"  "high" "low"  "low"  "low"  "low"  NA     "low"  "high" NA    
 [757] "high" NA     "high" "high" "low"  "low"  "high" "high" "low"  "high" "high" "low"  "low"  "low"  "high" "low"  "high" "high" "low"  "high" "low" 
 [778] "low"  "low"  "low"  "low"  "high" "high" NA     NA     "low"  "low"  "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "high"
 [799] "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "low"  "low"  NA     NA     "high" "high" "low"  "high" "low"  NA     "high" "high" "low" 
 [820] "high" "high" "high" "high" "high" "low"  "low"  "high" "high" "high" "low"  "high" "low"  "low"  "high" "low"  "low"  "low"  "low"  NA     "low" 
 [841] "high" NA     "high" NA     "high" "high" "low"  "low"  "high" "high" "low"  "high" "high" "low"  "low"  "low"  "high" "low"  "high" "high" "low" 
 [862] "high" "low"  "low"  "low"  "low"  "low"  "high" "high" NA     NA     "low"  "low"  "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high"
 [883] "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "low"  "low"  NA     NA     "high" "high" "low"  "high" "low"  NA     "high"
 [904] "high" "low"  "high" "high" "high" "high" "high" "low"  "low"  "high" "high" "high" "low"  "high" "low"  "low"  "high" "low"  "low"  "low"  "low" 
 [925] NA     "low"  "high" NA     "high" NA     "high" "high" "low"  "low"  "high" "high" "low"  "high" "high" "low"  "low"  "low"  "high" "low"  "high"
 [946] "high" "low"  "high" "low"  "low"  "low"  "low"  "low"  "high" "high" NA     NA     "low"  "low"  "low"  "high" "low"  "low"  "high" "high" "low" 
 [967] "low"  "high" "low"  "high" "low"  "low"  "high" "high" "low"  "low"  "high" "low"  "low"  "low"  NA     NA     "high" "high" "low"  "high" "low" 
 [988] NA     "high" "high" "low"  "high" "high" "high" "high" "high" "low"  "low"  "high" "high"
 [ reached getOption("max.print") -- omitted 15232 entries ]
LS0tCnRpdGxlOiAiV1BULkFuYWx5c2VzLjA4LjA2LjIwMjAiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KTG9hZCBwYWNrYWdlcwpgYGB7cn0KbGlicmFyeShCQm1pc2MpCmxpYnJhcnkoY29ycnIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShsYXR0aWNlKQpsaWJyYXJ5KEhtaXNjKQpsaWJyYXJ5KGNvcnJwbG90KQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsbWU0KQpsaWJyYXJ5KHNqUGxvdCkKbGlicmFyeShwc3ljaCkKbGlicmFyeShtZWRpYXRpb24pCmxpYnJhcnkobGF2YWFuKQpsaWJyYXJ5KHBia3J0ZXN0KQpsaWJyYXJ5KFJjcHApCmxpYnJhcnkoZHBseXIpCmBgYAoKTG9hZCBEYXRhCmBgYHtyfQpXUFQxIDwtIHJlYWQuY3N2KCJ3cHRfc3R1ZHkxXzYuMTkuMjAyMC5jc3YiLCBoZWFkZXI9VCwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLCBuYS5zdHJpbmdzPWMoIiIsIk5BIikpCldQVDIgPC0gcmVhZC5jc3YoIlByZWQyRnVsbC4wOC4wNi4yMDIwLmNzdiIsIGhlYWRlcj1ULCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UsIG5hLnN0cmluZ3M9YygiIiwiTkEiKSkKV1BUMyA8LSByZWFkLmNzdigiUHJlZDNGdWxsLjA4LjA2LjIwMjAuY3N2IiwgaGVhZGVyPVQsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSwgbmEuc3RyaW5ncz1jKCIiLCJOQSIpKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZ9CldQVDEkcHJvYltXUFQxJFBhdHRlcm4gPT0gMV0gPC0gLjg5NDcKV1BUMSRwcm9iW1dQVDEkUGF0dGVybiA9PSAyXSA8LSAuNzc3OApXUFQxJHByb2JbV1BUMSRQYXR0ZXJuID09IDNdIDwtIC45MjMxCldQVDEkcHJvYltXUFQxJFBhdHRlcm4gPT0gNV0gPC0gLjgzMzMKV1BUMSRwcm9iW1dQVDEkUGF0dGVybiA9PSA2XSA8LSAuODk0NwpXUFQxJHByb2JbV1BUMSRQYXR0ZXJuID09IDldIDwtIC41NQoKV1BUMSRwcm9iW1dQVDEkUGF0dGVybiA9PSA0IF0gPC0gMS0uMjIyMgpXUFQxJHByb2JbV1BUMSRQYXR0ZXJuID09IDcgXSA8LSAxLS4xMDUzCldQVDEkcHJvYltXUFQxJFBhdHRlcm4gPT0gOCBdIDwtIDEtLjE2NjcKV1BUMSRwcm9iW1dQVDEkUGF0dGVybiA9PSAxMCBdIDwtIDEtLjA3CldQVDEkcHJvYltXUFQxJFBhdHRlcm4gPT0gMTEgXSA8LSAxLS40NApXUFQxJHByb2JbV1BUMSRQYXR0ZXJuID09IDEyIF0gPC0gMS0uMTA1MwoKV1BUMSRwcm9iW1dQVDEkUGF0dGVybiA9PSAxM10gPC0gLjUKV1BUMSRwcm9iW1dQVDEkUGF0dGVybiA9PSAxNF0gPC0gLjUKCldQVDMkcHJvYltXUFQzJFBhdHRlcm4gPT0gMV0gPC0gLjg5NDcKV1BUMyRwcm9iW1dQVDMkUGF0dGVybiA9PSAyXSA8LSAuNzc3OApXUFQzJHByb2JbV1BUMyRQYXR0ZXJuID09IDNdIDwtIC45MjMxCldQVDMkcHJvYltXUFQzJFBhdHRlcm4gPT0gNV0gPC0gLjgzMzMKV1BUMyRwcm9iW1dQVDMkUGF0dGVybiA9PSA2XSA8LSAuODk0NwpXUFQzJHByb2JbV1BUMyRQYXR0ZXJuID09IDldIDwtIC41NQoKV1BUMyRwcm9iW1dQVDMkUGF0dGVybiA9PSA0IF0gPC0gMS0uMjIyMgpXUFQzJHByb2JbV1BUMyRQYXR0ZXJuID09IDcgXSA8LSAxLS4xMDUzCldQVDMkcHJvYltXUFQzJFBhdHRlcm4gPT0gOCBdIDwtIDEtLjE2NjcKV1BUMyRwcm9iW1dQVDMkUGF0dGVybiA9PSAxMCBdIDwtIDEtLjA3CldQVDMkcHJvYltXUFQzJFBhdHRlcm4gPT0gMTEgXSA8LSAxLS40NApXUFQzJHByb2JbV1BUMyRQYXR0ZXJuID09IDEyIF0gPC0gMS0uMTA1MwoKV1BUMyRwcm9iW1dQVDMkUGF0dGVybiA9PSAxM10gPC0gLjUKV1BUMyRwcm9iW1dQVDMkUGF0dGVybiA9PSAxNF0gPC0gLjUKCiNzdHVkeSAyCldQVDIkcHJvYltXUFQyJFBhdHRlcm4gPT0gMV0gPC0gLjg5NDcKV1BUMiRwcm9iW1dQVDIkUGF0dGVybiA9PSAyXSA8LSAuNzc3OApXUFQyJHByb2JbV1BUMiRQYXR0ZXJuID09IDNdIDwtIC45MjMxCldQVDIkcHJvYltXUFQyJFBhdHRlcm4gPT0gNV0gPC0gLjgzMzMKV1BUMiRwcm9iW1dQVDIkUGF0dGVybiA9PSA2XSA8LSAuODk0NwpXUFQyJHByb2JbV1BUMiRQYXR0ZXJuID09IDldIDwtIC41NQoKV1BUMiRwcm9iW1dQVDIkUGF0dGVybiA9PSA0IF0gPC0gMS0uMjIyMgpXUFQyJHByb2JbV1BUMiRQYXR0ZXJuID09IDddIDwtIDEtLjEwNTMKV1BUMiRwcm9iW1dQVDIkUGF0dGVybiA9PSA4IF0gPC0gMS0uMTY2NwpXUFQyJHByb2JbV1BUMiRQYXR0ZXJuID09IDEwIF0gPC0gMS0uMDcKV1BUMiRwcm9iW1dQVDIkUGF0dGVybiA9PSAxMSBdIDwtIDEtLjQ0CldQVDIkcHJvYltXUFQyJFBhdHRlcm4gPT0gMTJdIDwtIDEtLjEwNTMKCldQVDIkcHJvYltXUFQyJFBhdHRlcm4gPT0gMTNdIDwtIC41CldQVDIkcHJvYltXUFQyJFBhdHRlcm4gPT0gMTRdIDwtIC41CmBgYAoKYGBge3IsIGluY2x1ZGU9Rn0KV1BUMSRDb25kaXRpb25fZWZmIDwtIGFzLmZhY3RvcihXUFQxJENvbmRpdGlvbikKY29udHJhc3RzKFdQVDEkQ29uZGl0aW9uX2VmZikgPC0gY29udHIuc3VtKDIpCmNvbG5hbWVzKGNvbnRyYXN0cyhXUFQxJENvbmRpdGlvbl9lZmYpKSA9IGMoIldlYXRoZXIiKQoKV1BUMSRDcHJvYltXUFQxJFBhdHRlcm4gPT0gMV0gPC0iaGlnaCIKV1BUMSRDcHJvYltXUFQxJFBhdHRlcm4gPT0gMl0gPC0ibW9kIgpXUFQxJENwcm9iW1dQVDEkUGF0dGVybiA9PSAzXSA8LSJoaWdoIgpXUFQxJENwcm9iW1dQVDEkUGF0dGVybiA9PSA1XSA8LSJtb2QiCldQVDEkQ3Byb2JbV1BUMSRQYXR0ZXJuID09IDZdIDwtImhpZ2giCldQVDEkQ3Byb2JbV1BUMSRQYXR0ZXJuID09IDldIDwtImxvdyIKV1BUMSRDcHJvYltXUFQxJFBhdHRlcm4gPT0gNCBdIDwtICJtb2QiCldQVDEkQ3Byb2JbV1BUMSRQYXR0ZXJuID09IDcgXSA8LSAiaGlnaCIKV1BUMSRDcHJvYltXUFQxJFBhdHRlcm4gPT0gOCBdIDwtICJtb2QiCldQVDEkQ3Byb2JbV1BUMSRQYXR0ZXJuID09IDEwIF0gPC0gImhpZ2giCldQVDEkQ3Byb2JbV1BUMSRQYXR0ZXJuID09IDExIF0gPC0gImxvdyIKV1BUMSRDcHJvYltXUFQxJFBhdHRlcm4gPT0gMTIgXSA8LSJoaWdoIgpXUFQxJENwcm9iW1dQVDEkUGF0dGVybiA9PSAxM10gPC0gImxvdyIKV1BUMSRDcHJvYltXUFQxJFBhdHRlcm4gPT0gMTRdIDwtICJsb3ciCldQVDEkQ3Byb2IgPC0gYXMuZmFjdG9yKFdQVDEkQ3Byb2IpCmNvbnRyYXN0cyhXUFQxJENwcm9iKSA8LSBjb250ci5zdW0oMykKY29sbmFtZXMoY29udHJhc3RzKFdQVDEkQ3Byb2IpKSA9IGMoImhpZ2giLCAibG93IikKCldQVDEkcHJvYl9lZmYgPC0gYXMuZmFjdG9yKFdQVDEkcHJvYikKY29udHJhc3RzKFdQVDEkcHJvYl9lZmYpIDwtIGNvbnRyLnN1bSg4KQpjb2xuYW1lcyhjb250cmFzdHMoV1BUMSRwcm9iX2VmZikpID0gYygiLjUiLCAiLjU1IiwgIi41NiIsIi43NyIsICI4MyIsICI4OSIsICI5MiIpCgpXUFQzJENvbmRpdGlvbl9lZmYgPC0gYXMuZmFjdG9yKFdQVDMkQ29uZGl0aW9uKQpjb250cmFzdHMoV1BUMyRDb25kaXRpb25fZWZmKSA8LSBjb250ci5zdW0oMikKY29sbmFtZXMoY29udHJhc3RzKFdQVDMkQ29uZGl0aW9uX2VmZikpID0gYygiTmVnYXRpdmUiKQoKV1BUMiRDb25kaXRpb25fZWZmIDwtIGZhY3RvcihXUFQyJENvbmRpdGlvbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygic3RlYWwiLCAic3RlYWxfY2xvdWRzIiwgIndlYXRoZXJfZmFjZXMiLCAid2VhdGhlciIpKQpjb250cmFzdHMoV1BUMiRDb25kaXRpb25fZWZmKSA8LSBjb250ci5zdW0oNCkKY29sbmFtZXMoY29udHJhc3RzKFdQVDIkQ29uZGl0aW9uX2VmZikpID0gYygic3RlYWwiLCAic3RlYWxfY2xvdWRzIiwgIndlYXRoZXJfZmFjZXMiKQoKV1BUMiRDcHJvYltXUFQyJFBhdHRlcm4gPT0gMV0gPC0iaGlnaCIKV1BUMiRDcHJvYltXUFQyJFBhdHRlcm4gPT0gMl0gPC0ibW9kIgpXUFQyJENwcm9iW1dQVDIkUGF0dGVybiA9PSAzXSA8LSJoaWdoIgpXUFQyJENwcm9iW1dQVDIkUGF0dGVybiA9PSA1XSA8LSJtb2QiCldQVDIkQ3Byb2JbV1BUMiRQYXR0ZXJuID09IDZdIDwtImhpZ2giCldQVDIkQ3Byb2JbV1BUMiRQYXR0ZXJuID09IDldIDwtImxvdyIKV1BUMiRDcHJvYltXUFQyJFBhdHRlcm4gPT0gNCBdIDwtICJtb2QiCldQVDIkQ3Byb2JbV1BUMiRQYXR0ZXJuID09IDcgXSA8LSAiaGlnaCIKV1BUMiRDcHJvYltXUFQyJFBhdHRlcm4gPT0gOCBdIDwtICJtb2QiCldQVDIkQ3Byb2JbV1BUMiRQYXR0ZXJuID09IDEwIF0gPC0gImhpZ2giCldQVDIkQ3Byb2JbV1BUMiRQYXR0ZXJuID09IDExIF0gPC0gImxvdyIKV1BUMiRDcHJvYltXUFQyJFBhdHRlcm4gPT0gMTIgXSA8LSJoaWdoIgpXUFQyJENwcm9iW1dQVDIkUGF0dGVybiA9PSAxM10gPC0gImxvdyIKV1BUMiRDcHJvYltXUFQyJFBhdHRlcm4gPT0gMTRdIDwtICJsb3ciCldQVDIkQ3Byb2IgPC0gYXMuZmFjdG9yKFdQVDIkQ3Byb2IpCmNvbnRyYXN0cyhXUFQyJENwcm9iKSA8LSBjb250ci5zdW0oMykKY29sbmFtZXMoY29udHJhc3RzKFdQVDIkQ3Byb2IpKSA9IGMoImhpZ2giLCAibG93IikKCldQVDIkcHJvYl9lZmYgPC0gYXMuZmFjdG9yKFdQVDIkcHJvYikKY29udHJhc3RzKFdQVDIkcHJvYl9lZmYpIDwtIGNvbnRyLnN1bSg4KQpjb2xuYW1lcyhjb250cmFzdHMoV1BUMiRwcm9iX2VmZikpID0gYygiLjUiLCAiLjU1IiwgIi41NiIsIi43NyIsICI4MyIsICI4OSIsICI5MiIpCgpXUFQzJENwcm9iW1dQVDMkUGF0dGVybiA9PSAxXSA8LSJoaWdoIgpXUFQzJENwcm9iW1dQVDMkUGF0dGVybiA9PSAyXSA8LSJtb2QiCldQVDMkQ3Byb2JbV1BUMyRQYXR0ZXJuID09IDNdIDwtImhpZ2giCldQVDMkQ3Byb2JbV1BUMyRQYXR0ZXJuID09IDVdIDwtIm1vZCIKV1BUMyRDcHJvYltXUFQzJFBhdHRlcm4gPT0gNl0gPC0iaGlnaCIKV1BUMyRDcHJvYltXUFQzJFBhdHRlcm4gPT0gOV0gPC0ibG93IgpXUFQzJENwcm9iW1dQVDMkUGF0dGVybiA9PSA0IF0gPC0gIm1vZCIKV1BUMyRDcHJvYltXUFQzJFBhdHRlcm4gPT0gNyBdIDwtICJoaWdoIgpXUFQzJENwcm9iW1dQVDMkUGF0dGVybiA9PSA4IF0gPC0gIm1vZCIKV1BUMyRDcHJvYltXUFQzJFBhdHRlcm4gPT0gMTAgXSA8LSAiaGlnaCIKV1BUMyRDcHJvYltXUFQzJFBhdHRlcm4gPT0gMTEgXSA8LSAibG93IgpXUFQzJENwcm9iW1dQVDMkUGF0dGVybiA9PSAxMiBdIDwtImhpZ2giCldQVDMkQ3Byb2JbV1BUMyRQYXR0ZXJuID09IDEzXSA8LSAibG93IgpXUFQzJENwcm9iW1dQVDMkUGF0dGVybiA9PSAxNF0gPC0gImxvdyIKV1BUMyRDcHJvYiA8LSBhcy5mYWN0b3IoV1BUMyRDcHJvYikKY29udHJhc3RzKFdQVDMkQ3Byb2IpIDwtIGNvbnRyLnN1bSgzKQpjb2xuYW1lcyhjb250cmFzdHMoV1BUMyRDcHJvYikpID0gYygiaGlnaCIsICJsb3ciKQoKV1BUMyRwcm9iX2VmZiA8LSBhcy5mYWN0b3IoV1BUMyRwcm9iKQpjb250cmFzdHMoV1BUMyRwcm9iX2VmZikgPC0gY29udHIuc3VtKDgpCmNvbG5hbWVzKGNvbnRyYXN0cyhXUFQzJHByb2JfZWZmKSkgPSBjKCIuNSIsICIuNTUiLCAiLjU2IiwiLjc3IiwgIjgzIiwgIjg5IiwgIjkyIikKYGBgCgpzaG93ICMgb2YgcGFydGljaXBhbnRzIHdpdGggYmVsb3cgNTAlIGFjY3VyYWN5IGFuZCByZW1vdmUgCmBgYHtyfQojY29tcHV0ZSBhdmVyYWdlIGFjY3VyYWN5IGZvciBzdHVkeSAxCldQVDEkYWNjIDwtIGFzLmludGVnZXIoYXMuY2hhcmFjdGVyKFdQVDEkYWNjKSkKYXZlcmdhX2FjYyA8LSBXUFQxICU+JQogIGdyb3VwX2J5KFBhcnRpY2lwYW50KSU+JQogIGRwbHlyOjpzdW1tYXJpc2UoYXZnX2FjYz1tZWFuKGFjYywgbmEucm0gPSBUKSkKV1BUMSA8LSBtZXJnZShXUFQxLCBhdmVyZ2FfYWNjLCBieSA9ICJQYXJ0aWNpcGFudCIsIGFsbC54ID0gRikKCiNwbG90ICMgb2YgcGFydGljaXBhbnRzIHVuZGVyIDUwJSBhY2N1cmF0ZQpjb3VudF9OQVN0dWR5MSA8LSBXUFQxJFBhcnRpY2lwYW50W3doaWNoKFdQVDEkYXZnX2FjYzw9LjUyKV0KY291bnRfTkFTdHVkeTE8LSB1bmlxdWUoY291bnRfTkFTdHVkeTEpCmxlbmd0aChjb3VudF9OQVN0dWR5MSkKV1BUMSA8LSBXUFQxWyEoV1BUMSRQYXJ0aWNpcGFudCAlaW4lIGNvdW50X05BU3R1ZHkxKSxdCgojcGxvdCAjIG9mIHBhcnRpY2lwYW50cyB1bmRlciA1MCUgYWNjdXJhdGUKY291bnRfTkFTdHVkeTIgPC0gV1BUMiRQYXJ0aWNpcGFudFt3aGljaChXUFQyJGF2Z19hY2M8PS41MildCmNvdW50X05BU3R1ZHkyPC0gdW5pcXVlKGNvdW50X05BU3R1ZHkyKQpsZW5ndGgoY291bnRfTkFTdHVkeTIpCldQVDIgPC0gV1BUMlshKFdQVDIkUGFydGljaXBhbnQgJWluJSBjb3VudF9OQVN0dWR5MiksXSAjcmVtb3ZlIHRob3NlIHBhcnRpY2lwYW50cwoKI3Bsb3QgIyBvZiBwYXJ0aWNpcGFudHMgdW5kZXIgNTAlIGFjY3VyYXRlCmNvdW50X05BU3R1ZHkzIDwtIFdQVDMkUGFydGljaXBhbnRbd2hpY2goV1BUMyRhdmdfYWNjPD0uNTIpXQpjb3VudF9OQVN0dWR5MzwtIHVuaXF1ZShjb3VudF9OQVN0dWR5MykKbGVuZ3RoKGNvdW50X05BU3R1ZHkzKQpXUFQzIDwtIFdQVDNbIShXUFQzJFBhcnRpY2lwYW50ICVpbiUgY291bnRfTkFTdHVkeTMpLF0KYGBgCgpjYWxjdWxhdGUgYXZlcmFnZSBhY2N1cmFjeSBmb3IgZWFjaCBjb25kaXRpb24gYW5kIHBsb3QKYGBge3J9CldQVDEkYWNjIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKFdQVDEkYWNjKSkKV1BUMVN1bW1hcnkgPC0gV1BUMSAlPiUgIyB0aGUgbmFtZXMgb2YgdGhlIG5ldyBkYXRhIGZyYW1lIGFuZCB0aGUgZGF0YSBmcmFtZSB0byBiZSBzdW1tYXJpc2VkCiAgZ3JvdXBfYnkoQ29uZGl0aW9uKSAlPiUgICAjIHRoZSBncm91cGluZyB2YXJpYWJsZQogIGRwbHlyOjpzdW1tYXJpc2UobWVhbl9hY2MgPSBtZWFuKGFjYywgbmEucm0gPSBUKSwgICMgY2FsY3VsYXRlcyB0aGUgbWVhbiBvZiBlYWNoIGdyb3VwCiAgICAgICAgICAgIHNkX1BMID0gc2QoYWNjKSwKICAgICAgICAgICAgbl9QTCA9IG4oKSwgICMgY2FsY3VsYXRlcyB0aGUgc2FtcGxlIHNpemUgcGVyIGdyb3VwCiAgICAgICAgICAgIFNFX1BMID0gc2QoYWNjKS9zcXJ0KG4oKSkpICMgY2FsY3VsYXRlcyB0aGUgc3RhbmRhcmQgZXJyb3Igb2YgZWFjaCBncm91cAoKV1BUMlN1bW1hcnkgPC0gV1BUMiAlPiUgIyB0aGUgbmFtZXMgb2YgdGhlIG5ldyBkYXRhIGZyYW1lIGFuZCB0aGUgZGF0YSBmcmFtZSB0byBiZSBzdW1tYXJpc2VkCiAgZ3JvdXBfYnkoQ29uZGl0aW9uKSAlPiUgICAjIHRoZSBncm91cGluZyB2YXJpYWJsZQogIGRwbHlyOjpzdW1tYXJpc2UobWVhbl9hY2MgPSBtZWFuKGFjYywgbmEucm0gPSBUKSwgICMgY2FsY3VsYXRlcyB0aGUgbWVhbiBvZiBlYWNoIGdyb3VwCiAgICAgICAgICAgIHNkX1BMID0gc2QoYWNjKSwKICAgICAgICAgICAgbl9QTCA9IG4oKSwgICMgY2FsY3VsYXRlcyB0aGUgc2FtcGxlIHNpemUgcGVyIGdyb3VwCiAgICAgICAgICAgIFNFX1BMID0gc2QoYWNjKS9zcXJ0KG4oKSkpICMgY2FsY3VsYXRlcyB0aGUgc3RhbmRhcmQgZXJyb3Igb2YgZWFjaCBncm91cAoKV1BUM1N1bW1hcnkgPC0gV1BUMyAlPiUgIyB0aGUgbmFtZXMgb2YgdGhlIG5ldyBkYXRhIGZyYW1lIGFuZCB0aGUgZGF0YSBmcmFtZSB0byBiZSBzdW1tYXJpc2VkCiAgZ3JvdXBfYnkoQ29uZGl0aW9uKSAlPiUjIHRoZSBncm91cGluZyB2YXJpYWJsZQogIGRwbHlyOjpzdW1tYXJpc2UobWVhbkFjYyA9IG1lYW4oYWNjLCBuYS5ybSA9IFQpLCMgY2FsY3VsYXRlcyB0aGUgbWVhbiBvZiBlYWNoIGdyb3VwCiAgICAgICAgICAgICAgICAgICBzZF9QTCA9IHNkKG1lYW5BY2MpLAogICAgICAgICAgICAgICAgICAgbl9QTCA9IG4oKSwjIGNhbGN1bGF0ZXMgdGhlIHNhbXBsZSBzaXplIHBlciBncm91cAogICAgICAgICAgICAgICAgICAgU0VfUEwgPSAuMDEpICMgY2FsY3VsYXRlcyB0aGUgc3RhbmRhcmQgZXJyb3Igb2YgZWFjaCBncm91cAoKI1N0dWR5IDEgCmdncGxvdChXUFQxU3VtbWFyeSwgYWVzKHg9YXMuZmFjdG9yKENvbmRpdGlvbiksIHk9bWVhbl9hY2MpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGFscGhhPTAuNSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHg9YXMuZmFjdG9yKENvbmRpdGlvbiksIHltaW49bWVhbl9hY2MtU0VfUEwsIHltYXg9bWVhbl9hY2MrU0VfUEwpKSsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMSkpCgojU3R1ZHkgCmdncGxvdChXUFQyU3VtbWFyeSwgYWVzKHg9YXMuZmFjdG9yKENvbmRpdGlvbiksIHk9bWVhbl9hY2MpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGFscGhhPTAuNSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHg9YXMuZmFjdG9yKENvbmRpdGlvbiksIHltaW49bWVhbl9hY2MtU0VfUEwsIHltYXg9bWVhbl9hY2MrU0VfUEwpKSsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMSkpCgojU3R1ZHkgMgpnZ3Bsb3QoV1BUM1N1bW1hcnksIGFlcyh4PWFzLmZhY3RvcihDb25kaXRpb24pLCB5PW1lYW5BY2MpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGFscGhhPTAuNSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHg9YXMuZmFjdG9yKENvbmRpdGlvbiksIHltaW49bWVhbkFjYy1TRV9QTCwgeW1heD1tZWFuQWNjK1NFX1BMKSkrCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDEpKQpgYGAKCnBsb3QgcmF3IGxlYXJuaW5nIHJhdGUgb3ZlciB0aW1lIGZvciBzdHVkeSAxCmBgYHtyfQpXUFQxIDwtIFdQVDEgJT4lCiAgZ3JvdXBfYnkoUGFydGljaXBhbnQpICU+JQogIG11dGF0ZShUcmlhbCA9IHNlcV9sZW4obigpKSkKCiNTdHVkeSAxIApnZ3Bsb3QoV1BUMSwgYWVzKFRyaWFsLCBhY2MsIGNvbG9yID0gQ29uZGl0aW9uKSkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG9lc3MiKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJBY2N1cmFjeSIpIAoKI1N0dWR5MgpnZ3Bsb3QoV1BUMiwgYWVzKFRyaWFsLCBhY2MsIGNvbG9yID0gQ29uZGl0aW9uKSkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG9lc3MiKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJBY2N1cmFjeSIpIAoKI1N0dWR5MwpnZ3Bsb3QoV1BUMywgYWVzKFRyaWFsLCBhY2MsIGNvbG9yID0gQ29uZGl0aW9uKSkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG9lc3MiKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJBY2N1cmFjeSIpIApgYGAKCiMjIyMjIyMjUkwgUmVzdWx0cyMjIyMjIyMKCkxvYWQgUkwgTW9kZWxzCmBgYHtyfQpSTC5NTC4zIDwtIHJlYWQuY3N2KCJmdWxsQklDU3R1ZHkzLk1MLmNzdiIsIGhlYWRlcj1ULCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UsIG5hLnN0cmluZ3M9YygiIiwiTkEiKSkKUkwuTWFwLjMgPC0gcmVhZC5jc3YoImZ1bGxCSUNTdHVkeTMuTUFQLmNzdiIsIGhlYWRlcj1ULCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UsIG5hLnN0cmluZ3M9YygiIiwiTkEiKSkKClJMLk1MLjIgPC0gcmVhZC5jc3YoImZ1bGxCSUNTdHVkeTIuTUwuY3N2IiwgaGVhZGVyPVQsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSwgbmEuc3RyaW5ncz1jKCIiLCJOQSIpKQpSTC5NYXAuMiA8LSByZWFkLmNzdigiZnVsbEJJQ1N0dWR5Mi5NQVAuY3N2IiwgaGVhZGVyPVQsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSwgbmEuc3RyaW5ncz1jKCIiLCJOQSIpKQoKIyNJbmRpdmlkdWFsIERpZmZlcmVuY2VzIGZvciBFVCBERUNBWQpXUFQzTmVnIDwtICByZWFkLmNzdigiTmVnYXRpdmUuRVREZWNheS5NQVAuUGFyYW1EZi5jc3YiLCBoZWFkZXI9VCwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLCBuYS5zdHJpbmdzPWMoIiIsIk5BIikpCldQVDNOZWckQ29uZCA8LSAiTmVnYXRpdmUiCldQVDNOZWcgPC0gV1BUM05lZ1ssLTFdCgpXUFQzUG9zIDwtICByZWFkLmNzdigiUG9zaXRpdmUuRVREZWNheS5NQVAuUGFyYW1EZi5jc3YiLCBoZWFkZXI9VCwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLCBuYS5zdHJpbmdzPWMoIiIsIk5BIikpCldQVDNQb3MkQ29uZCA8LSAiUG9zaXRpdmUiCgpXUFQzRnVsbFJMIDwtIHJiaW5kKFdQVDNOZWcsIFdQVDNQb3MpCldQVDNGdWxsUkwgPC0gV1BUM0Z1bGxSTFshKFdQVDNGdWxsUkwkc3ViSUQgJWluJSBjb3VudF9OQVN0dWR5MyksXSAjcmVtb3ZlIG91dGxpZXJzIHBhcnRpY2lwYW50cwoKV1BUMlN0ZWFsIDwtICByZWFkLmNzdigiU3RlYWwuRVREZWNheS5NQVAuUGFyYW1EZi5jc3YiLCBoZWFkZXI9VCwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLCBuYS5zdHJpbmdzPWMoIiIsIk5BIikpCldQVDJTdGVhbCRDb25kIDwtICJzdGVhbCIKCldQVDJXZWF0aGVyPC0gIHJlYWQuY3N2KCJXZWF0aGVyLkVURGVjYXkuTUFQLlBhcmFtRGYuY3N2IiwgaGVhZGVyPVQsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSwgbmEuc3RyaW5ncz1jKCIiLCJOQSIpKQpXUFQyV2VhdGhlciRDb25kIDwtICJXZWF0aGVyIgoKV1BUMlN0ZWFsQ2xvdWQ8LSAgcmVhZC5jc3YoIlN0ZWFsQ2wuRVREZWNheS5NQVAuUGFyYW1EZi5jc3YiLCBoZWFkZXI9VCwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLCBuYS5zdHJpbmdzPWMoIiIsIk5BIikpCldQVDJTdGVhbENsb3VkJENvbmQgPC0gIlN0ZWFsQ2wiCgpXUFQyV2VhdGhlckZhY2U8LSAgcmVhZC5jc3YoIldlYXRoZXJGYS5FVERlY2F5Lk1BUC5QYXJhbURmLmNzdiIsIGhlYWRlcj1ULCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UsIG5hLnN0cmluZ3M9YygiIiwiTkEiKSkKV1BUMldlYXRoZXJGYWNlJENvbmQgPC0gIldlYXRoZXJGYSIKCldQVDJGdWxsUkwgPC0gcmJpbmQoV1BUMlN0ZWFsLCBXUFQyV2VhdGhlciwgV1BUMlN0ZWFsQ2xvdWQsIFdQVDJXZWF0aGVyRmFjZSkKV1BUMkZ1bGxSTCA8LSBXUFQyRnVsbFJMWyEoV1BUMkZ1bGxSTCRzdWJJRCAlaW4lIGNvdW50X05BU3R1ZHkyKSxdICNyZW1vdmUgb3V0bGllcnMgcGFydGljaXBhbnRzCmBgYAoKUGxvdCBCSUMgU3VtbWVkIERpZmZlcmVuY2UgRnJvbSBCYXNlbGluZSBNb2RlbCAoaS5lLiBtb2RlbCB0aGF0IGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IGV4cGVyaW1lbnRhbCBkZXNpZ24pCmBgYHtyfQpnZ3Bsb3QoUkwuTUwuMiwgYWVzKHggPSBDb25kLCB5ID0gU3VtQklDKSkrCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGFscGhhPTAuNSkgK2ZhY2V0X2dyaWQofm1vZGVsKSsKICBnZW9tX2Vycm9yYmFyKGFlcyh4PWFzLmZhY3RvcihDb25kKSwgeW1pbj1TdW1CSUMtU0VfUEwsIHltYXg9U3VtQklDK1NFX1BMKSkKCmdncGxvdChSTC5NYXAuMiwgYWVzKHggPSBDb25kLCB5ID0gU3VtQklDKSkrCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGFscGhhPTAuNSkgK2ZhY2V0X2dyaWQofm1vZGVsKSsKICBnZW9tX2Vycm9yYmFyKGFlcyh4PWFzLmZhY3RvcihDb25kKSwgeW1pbj1TdW1CSUMtU0VfUEwsIHltYXg9U3VtQklDK1NFX1BMKSkKCmdncGxvdChSTC5NTC4zLCBhZXMoeCA9IENvbmQsIHkgPSBTdW1CSUMpKSsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgYWxwaGE9MC41KSArZmFjZXRfZ3JpZCh+bW9kZWwpKwogIGdlb21fZXJyb3JiYXIoYWVzKHg9YXMuZmFjdG9yKENvbmQpLCB5bWluPVN1bUJJQy1TRV9QTCwgeW1heD1TdW1CSUMrU0VfUEwpKQoKZ2dwbG90KFJMLk1hcC4zLCBhZXMoeCA9IENvbmQsIHkgPSBTdW1CSUMpKSsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgYWxwaGE9MC41KSArZmFjZXRfZ3JpZCh+bW9kZWwpKwogIGdlb21fZXJyb3JiYXIoYWVzKHg9YXMuZmFjdG9yKENvbmQpLCB5bWluPVN1bUJJQy1TRV9QTCwgeW1heD1TdW1CSUMrU0VfUEwpKQoKYGBgClBsb3R0aW5nIGFuZCBUZXN0aW5nIGZvciBFVCBEZWNheSBCSUMgZGlmZmVyZW5jZXMKYGBge3J9CiNzdW1tYXJpemUgc3R1ZHkgMiBCSUMgCkJJQy5TdW0uMi5FVERlY2F5IDwtIFdQVDJGdWxsUkwgJT4lICMgdGhlIG5hbWVzIG9mIHRoZSBuZXcgZGF0YSBmcmFtZSBhbmQgdGhlIGRhdGEgZnJhbWUgdG8gYmUgc3VtbWFyaXNlZAogIGdyb3VwX2J5KENvbmQpICU+JSAgICMgdGhlIGdyb3VwaW5nIHZhcmlhYmxlCiAgZHBseXI6OnN1bW1hcmlzZShTdW1CSUMgPSBzdW0oQklDLCBuYS5ybSA9IFQpLCAgIyBjYWxjdWxhdGVzIHRoZSBtZWFuIG9mIGVhY2ggZ3JvdXAKICAgICAgICAgICAgICAgICAgIHNkX1BMID0gc2QoQklDKSwKICAgICAgICAgICAgICAgICAgIG5fUEwgPSBuKCksICAjIGNhbGN1bGF0ZXMgdGhlIHNhbXBsZSBzaXplIHBlciBncm91cAogICAgICAgICAgICAgICAgICAgU0VfUEwgPSBzZChCSUMpL3NxcnQobigpKSkgIyBjYWxjdWxhdGVzIHRoZSBzdGFuZGFyZCBlcnJvciBvZiBlYWNoIGdyb3VwCgojc3VtbWFyaXplIHN0dWR5IDMgQklDIApCSUMuU3VtLjMuRVREZWNheSA8LSBXUFQzRnVsbFJMICU+JSAjIHRoZSBuYW1lcyBvZiB0aGUgbmV3IGRhdGEgZnJhbWUgYW5kIHRoZSBkYXRhIGZyYW1lIHRvIGJlIHN1bW1hcmlzZWQKICBncm91cF9ieShDb25kKSAlPiUgICAjIHRoZSBncm91cGluZyB2YXJpYWJsZQogIGRwbHlyOjpzdW1tYXJpc2UoU3VtQklDID0gc3VtKEJJQywgbmEucm0gPSBUKSwgICMgY2FsY3VsYXRlcyB0aGUgbWVhbiBvZiBlYWNoIGdyb3VwCiAgICAgICAgICAgICAgICAgICBzZF9QTCA9IHNkKEJJQyksCiAgICAgICAgICAgICAgICAgICBuX1BMID0gbigpLCAgIyBjYWxjdWxhdGVzIHRoZSBzYW1wbGUgc2l6ZSBwZXIgZ3JvdXAKICAgICAgICAgICAgICAgICAgIFNFX1BMID0gc2QoQklDKS9zcXJ0KG4oKSkpICMgY2FsY3VsYXRlcyB0aGUgc3RhbmRhcmQgZXJyb3Igb2YgZWFjaCBncm91cAoKI1J1biBBTk9WQSwgcG9zdCBob2MgdGVzdHMgYW5kIGZvciBzdHVkeSAyIEJJQyAKV1BUMkZ1bGxSTC5BT1YgPC0gYW92KFdQVDJGdWxsUkwkQklDfldQVDJGdWxsUkwkQ29uZCkKc3VtbWFyeShXUFQyRnVsbFJMLkFPVikKVHVrZXlIU0QoV1BUMkZ1bGxSTC5BT1YpCmdncGxvdChCSUMuU3VtLjIuRVREZWNheSwgYWVzKHg9YXMuZmFjdG9yKENvbmQpLCB5PVN1bUJJQykpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgYWxwaGE9MC41KSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeD1hcy5mYWN0b3IoQ29uZCksIHltaW49U3VtQklDLVNFX1BMLCB5bWF4PVN1bUJJQytTRV9QTCkpKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygxMDAsIDI1MDAwKSkKCiNSdW4gVC5UZXN0LCBwb3N0IGhvYyB0ZXN0cyBhbmQgZm9yIHN0dWR5IDMgQklDIAp0LnRlc3QoV1BUM0Z1bGxSTCRCSUN+V1BUM0Z1bGxSTCRDb25kKQpnZ3Bsb3QoQklDLlN1bS4zLkVURGVjYXksIGFlcyh4PWFzLmZhY3RvcihDb25kKSwgeT1TdW1CSUMpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGFscGhhPTAuNSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHg9YXMuZmFjdG9yKENvbmQpLCB5bWluPVN1bUJJQy1TRV9QTCwgeW1heD1TdW1CSUMrU0VfUEwpKSsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMTAwLCAyNTAwMCkpCgojVGVzdCBmb3IgRGlmZmVyZW5jZXMgQmV0d2VlbiBTdHVkaWVzIDIgYW5kIDMgc3RlYWwgY29uZGl0aW9ucwpTdGVhbDMgPC0gV1BUM0Z1bGxSTFt3aGljaChXUFQzRnVsbFJMJENvbmQgPT0gIk5lZ2F0aXZlIiksXQpTdGVhbDIgPC0gV1BUMkZ1bGxSTFt3aGljaChXUFQyRnVsbFJMJENvbmQgPT0gInN0ZWFsIiksXQp0LnRlc3QoU3RlYWwzJEJJQyxTdGVhbDIkQklDLCBwYWlyZWQgPSBGKSAjIE5vdCBzaWcgZGlmZmVyZW50CmBgYApQbG90IEFsbCBDb3JyZWxhdGlvbnMgaW4gc3RlcmVvdHlwZSBjb25ncnVlbmN5IGNvbmRpdGlvbnMKYGBge3J9CiNTZXBlcmF0ZSBTdGVyZW90eXBlIENvbmRpdGlvbnMKU3RlYWwzV1BUIDwtIFdQVDNbd2hpY2goV1BUMyRDb25kaXRpb24gPT0gIm5lZyIpLF0KVG91Y2hkb3duMyA8LSBXUFQzW3doaWNoKFdQVDMkQ29uZGl0aW9uID09ICJwb3MiKSxdClN0ZWFsMldQVCA8LSBXUFQyW3doaWNoKFdQVDIkQ29uZGl0aW9uID09ICJzdGVhbCIpLF0KCiNJc29sYXRlIGluZGl2aWR1YWwgZGlmZmVyZW5jZXMKY29sbmFtZXMoU3RlYWwyV1BUKQpTdGVhbDNXUFQuQ29yciA8LSBTdGVhbDNXUFRbLGMoMTY6MzApXQpUb3VjaGRvd24zLkNvcnIgPC0gVG91Y2hkb3duM1ssYygxNjozMCldClN0ZWFsMldQVC5Db3JyIDwtIFN0ZWFsMldQVFssYygzLDQsNSw2LDI3OjM3KV0KIyBNIDwtIGNvcihTdGVhbDNXUFQuQ29yciwgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlLm9icyIpCiMgY29ycnBsb3QoTSkKUy5jb3JyLkFjYyA8LSBTdGVhbDNXUFQuQ29yciAgJT4lIAogIGNvcnJlbGF0ZSgpICAlPiUgCiAgZm9jdXMoYXZnX2FjYykKClMuY29yci5BY2MgJT4lIAogIG11dGF0ZShyb3duYW1lID0gZmFjdG9yKHJvd25hbWUsIGxldmVscyA9IHJvd25hbWVbb3JkZXIoYXZnX2FjYyldKSkgJT4lICAjIE9yZGVyIGJ5IGNvcnJlbGF0aW9uIHN0cmVuZ3RoCiAgZ2dwbG90KGFlcyh4ID0gcm93bmFtZSwgeSA9IGF2Z19hY2MpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICB5bGFiKCJDb3JyZWxhdGlvbiB3aXRoIEFscGhhIikgKwogIHhsYWIoIlZhcmlhYmxlIikgKyB0aGVtZV9ncmV5KGJhc2Vfc2l6ZSA9IDgpCgpULkNvcnIuQWNjIDwtIFRvdWNoZG93bjMuQ29yciAgJT4lIAogIGNvcnJlbGF0ZSgpICAlPiUgCiAgZm9jdXMoYXZnX2FjYykKClQuQ29yci5BY2MgJT4lIAogIG11dGF0ZShyb3duYW1lID0gZmFjdG9yKHJvd25hbWUsIGxldmVscyA9IHJvd25hbWVbb3JkZXIoYXZnX2FjYyldKSkgJT4lICAjIE9yZGVyIGJ5IGNvcnJlbGF0aW9uIHN0cmVuZ3RoCiAgZ2dwbG90KGFlcyh4ID0gcm93bmFtZSwgeSA9IGF2Z19hY2MpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICB5bGFiKCJDb3JyZWxhdGlvbiB3aXRoIEFscGhhIikgKwogIHhsYWIoIlZhcmlhYmxlIikgKyB0aGVtZV9ncmV5KGJhc2Vfc2l6ZSA9IDgpCgpTMi5jb3JyLkFjYyA8LSBTdGVhbDJXUFQuQ29yciAgJT4lIAogIGNvcnJlbGF0ZSgpICAlPiUgCiAgZm9jdXMoYXZnX2FjYykKClMyLmNvcnIuQWNjICU+JSAKICBtdXRhdGUocm93bmFtZSA9IGZhY3Rvcihyb3duYW1lLCBsZXZlbHMgPSByb3duYW1lW29yZGVyKGF2Z19hY2MpXSkpICU+JSAgIyBPcmRlciBieSBjb3JyZWxhdGlvbiBzdHJlbmd0aAogIGdncGxvdChhZXMoeCA9IHJvd25hbWUsIHkgPSBhdmdfYWNjKSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgeWxhYigiQ29ycmVsYXRpb24gd2l0aCBBbHBoYSIpICsKICB4bGFiKCJWYXJpYWJsZSIpICsgdGhlbWVfZ3JleShiYXNlX3NpemUgPSA4KQpgYGAKCiNTY2FsZSBhbmQgbWVkaWFuIHNwbGl0IGluZGl2aWR1YWwgZGlmZmVyZW5jZXMgZm9yIHZpc3VhbHMKYGBge3J9ClMyIDwtIFN0ZWFsMldQVFssYygyLDUsMTcsMTgsMjEsMjIsMjQsMjUsMjc6MzgpXQpTMyA8LSBTdGVhbDNXUFRbLGMoMiw0LDUsOCw5LDEyLCAxNCwxNjoyNiwyOSwzNildCnN0ZWFsRnVsbCA8LSByYmluZChTMiwgUzMpCgpXUFQyJGRlY2F5IDwtIFdQVDIkQW5uZWFsCldQVDIkc2NEZWNheSA8LSBzY2FsZShXUFQyJGRlY2F5KQpXUFQyJGRlY2F5MiA8LSBXUFQyJHNjRGVjYXleMgpXUFQyJFNET19zY2EgPC0gc2NhbGUoV1BUMiRTRE8pCldQVDIkYmxrX2V4cF9zY2EgPC0gc2NhbGUoV1BUMiRibGtfZXhwKQpXUFQyJGJsa19jb250YWN0X3NjYSA8LSBzY2FsZShXUFQyJGJsa19jb250YWN0KQpXUFQyJGludGVyZ3JvdXBfYW54X3NjYSA8LSBzY2FsZShXUFQyJGludGVyZ3JvdXBfYW54KQpXUFQyJElNU19zY2EgPC0gc2NhbGUoV1BUMiRJTVMpCldQVDIkRU1TX3NjYSA8LSBzY2FsZShXUFQyJEVNUykKCiNzY2FsZSBpbmQgZGlmZiBmb3IgcG9zaXRpdmUgY29uZGl0aW9uCldQVDMkZGVjYXkgPC0gV1BUMyRBbm5lYWwKV1BUMyRTRE9fc2NhIDwtIHNjYWxlKFdQVDMkU0RPKQpXUFQzJGJsa19leHBfc2NhIDwtIHNjYWxlKFdQVDMkYmxrX2V4cCkKV1BUMyRibGtfY29udGFjdF9zY2EgPC0gc2NhbGUoV1BUMyRibGtfY29udGFjdCkKV1BUMyRpbnRlcmdyb3VwX2FueF9zY2EgPC0gc2NhbGUoV1BUMyRpbnRlcmdyb3VwX2FueCkKV1BUMyRJTVNfc2NhIDwtIHNjYWxlKFdQVDMkSU1TKQpXUFQzJEVNU19zY2EgPC0gc2NhbGUoV1BUMyRFTVMpCldQVDMkc2NEZWNheSA8LSBzY2FsZShXUFQzJGRlY2F5KQpXUFQzJGRlY2F5MiA8LSBXUFQzJHNjRGVjYXleMgoKc3RlYWxTdHVkeTIgPC0gUzIKc3RlYWxTdHVkeTIkZGVjYXkgPC0gc3RlYWxTdHVkeTIkQW5uZWFsCnN0ZWFsU3R1ZHkyJFNET19zY2EgPC0gc2NhbGUoc3RlYWxTdHVkeTIkU0RPKQpzdGVhbFN0dWR5MiRibGtfZXhwX3NjYSA8LSBzY2FsZShzdGVhbFN0dWR5MiRibGtfZXhwKQpzdGVhbFN0dWR5MiRibGtfY29udGFjdF9zY2EgPC0gc2NhbGUoc3RlYWxTdHVkeTIkYmxrX2NvbnRhY3QpCnN0ZWFsU3R1ZHkyJGludGVyZ3JvdXBfYW54X3NjYSA8LSBzY2FsZShzdGVhbFN0dWR5MiRpbnRlcmdyb3VwX2FueCkKc3RlYWxTdHVkeTIkSU1TX3NjYSA8LSBzY2FsZShzdGVhbFN0dWR5MiRJTVMpCnN0ZWFsU3R1ZHkyJEVNU19zY2EgPC0gc2NhbGUoc3RlYWxTdHVkeTIkRU1TKQpzdGVhbFN0dWR5MiRzY0RlY2F5IDwtIHNjYWxlKHN0ZWFsU3R1ZHkyJGRlY2F5KQpzdGVhbFN0dWR5MiRkZWNheTIgPC0gc3RlYWxTdHVkeTIkc2NEZWNheV4yCgpzdGVhbFN0dWR5MyA8LSBTMwpzdGVhbFN0dWR5MyRkZWNheSA8LSBzdGVhbFN0dWR5MyRBbm5lYWwKc3RlYWxTdHVkeTMkU0RPX3NjYSA8LSBzY2FsZShzdGVhbFN0dWR5MyRTRE8pCnN0ZWFsU3R1ZHkzJGJsa19leHBfc2NhIDwtIHNjYWxlKHN0ZWFsU3R1ZHkzJGJsa19leHApCnN0ZWFsU3R1ZHkzJGJsa19jb250YWN0X3NjYSA8LSBzY2FsZShzdGVhbFN0dWR5MyRibGtfY29udGFjdCkKc3RlYWxTdHVkeTMkaW50ZXJncm91cF9hbnhfc2NhIDwtIHNjYWxlKHN0ZWFsU3R1ZHkzJGludGVyZ3JvdXBfYW54KQpzdGVhbFN0dWR5MyRJTVNfc2NhIDwtIHNjYWxlKHN0ZWFsU3R1ZHkzJElNUykKc3RlYWxTdHVkeTMkRU1TX3NjYSA8LSBzY2FsZShzdGVhbFN0dWR5MyRFTVMpCnN0ZWFsU3R1ZHkzJHNjRGVjYXkgPC0gc2NhbGUoc3RlYWxTdHVkeTMkZGVjYXkpCnN0ZWFsU3R1ZHkzJGRlY2F5MiA8LSBzdGVhbFN0dWR5MyRzY0RlY2F5XjIKCnBvc1N0dWR5MyA8LSBUb3VjaGRvd24zCnBvc1N0dWR5MyRkZWNheSA8LSBwb3NTdHVkeTMkQW5uZWFsCnBvc1N0dWR5MyRTRE9fc2NhIDwtIHNjYWxlKHBvc1N0dWR5MyRTRE8pCnBvc1N0dWR5MyRibGtfZXhwX3NjYSA8LSBzY2FsZShwb3NTdHVkeTMkYmxrX2V4cCkKcG9zU3R1ZHkzJGJsa19jb250YWN0X3NjYSA8LSBzY2FsZShwb3NTdHVkeTMkYmxrX2NvbnRhY3QpCnBvc1N0dWR5MyRpbnRlcmdyb3VwX2FueF9zY2EgPC0gc2NhbGUocG9zU3R1ZHkzJGludGVyZ3JvdXBfYW54KQpwb3NTdHVkeTMkSU1TX3NjYSA8LSBzY2FsZShwb3NTdHVkeTMkSU1TKQpwb3NTdHVkeTMkRU1TX3NjYSA8LSBzY2FsZShwb3NTdHVkeTMkRU1TKQpwb3NTdHVkeTMkc2NEZWNheSA8LSBzY2FsZShwb3NTdHVkeTMkZGVjYXkpCnBvc1N0dWR5MyRkZWNheTIgPC0gcG9zU3R1ZHkzJHNjRGVjYXleMgoKc3RlYWxGdWxsJGRlY2F5IDwtIHN0ZWFsRnVsbCRBbm5lYWwKc3RlYWxGdWxsJHNjRGVjYXkgPC0gc2NhbGUoc3RlYWxGdWxsJGRlY2F5KQpzdGVhbEZ1bGwkZGVjYXkyIDwtIHN0ZWFsRnVsbCRzY0RlY2F5XjIKc3RlYWxGdWxsJFNET19zY2EgPC0gc2NhbGUoc3RlYWxGdWxsJFNETykKc3RlYWxGdWxsJGJsa19leHBfc2NhIDwtIHNjYWxlKHN0ZWFsRnVsbCRibGtfZXhwKQpzdGVhbEZ1bGwkYmxrX2NvbnRhY3Rfc2NhIDwtIHNjYWxlKHN0ZWFsRnVsbCRibGtfY29udGFjdCkKc3RlYWxGdWxsJGludGVyZ3JvdXBfYW54X3NjYSA8LSBzY2FsZShzdGVhbEZ1bGwkaW50ZXJncm91cF9hbngpCnN0ZWFsRnVsbCRJTVNfc2NhIDwtIHNjYWxlKHN0ZWFsRnVsbCRJTVMpCnN0ZWFsRnVsbCRFTVNfc2NhIDwtIHNjYWxlKHN0ZWFsRnVsbCRFTVMpCgoKI21lZGlhbiBzcGxpdCAKc3RlYWxTdHVkeTIkU0RPRGljaFtzdGVhbFN0dWR5MiRTRE8gPiBtZWRpYW4oc3RlYWxTdHVkeTIkU0RPLCBuYS5ybSA9IFQpIF0gPC0gImhpZ2giCnN0ZWFsU3R1ZHkyJFNET0RpY2hbc3RlYWxTdHVkeTIkU0RPIDwgbWVkaWFuKHN0ZWFsU3R1ZHkyJFNETywgbmEucm0gPSBUKSBdIDwtICJsb3ciCnN0ZWFsU3R1ZHkzJFNET0RpY2hbc3RlYWxTdHVkeTMkU0RPID4gbWVkaWFuKHN0ZWFsU3R1ZHkzJFNETywgbmEucm0gPSBUKSBdIDwtICJoaWdoIgpzdGVhbFN0dWR5MyRTRE9EaWNoW3N0ZWFsU3R1ZHkzJFNETyA8IG1lZGlhbihzdGVhbFN0dWR5MyRTRE8sIG5hLnJtID0gVCkgXSA8LSAibG93IgpXUFQyJFNET0RpY2hbV1BUMiRTRE8gPiBtZWRpYW4oc3RlYWxTdHVkeTIkU0RPLCBuYS5ybSA9IFQpIF0gPC0gImhpZ2giCldQVDIkU0RPRGljaFtXUFQyJFNETyA8IG1lZGlhbihzdGVhbFN0dWR5MiRTRE8sIG5hLnJtID0gVCkgXSA8LSAibG93IgpXUFQzJFNET0RpY2hbV1BUMyRTRE8gPiBtZWRpYW4oc3RlYWxTdHVkeTIkU0RPLCBuYS5ybSA9IFQpIF0gPC0gImhpZ2giCldQVDMkU0RPRGljaFtXUFQzJFNETyA8IG1lZGlhbihzdGVhbFN0dWR5MiRTRE8sIG5hLnJtID0gVCkgXSA8LSAibG93IgpzdGVhbEZ1bGwkU0RPRGljaFtzdGVhbEZ1bGwkU0RPID4gbWVkaWFuKHN0ZWFsRnVsbCRTRE8sIG5hLnJtID0gVCkgXSA8LSAiaGlnaCIKc3RlYWxGdWxsJFNET0RpY2hbc3RlYWxGdWxsJFNETyA8IG1lZGlhbihzdGVhbEZ1bGwkU0RPLCBuYS5ybSA9IFQpIF0gPC0gImxvdyIKdGFibGUoc3RlYWxTdHVkeTIkU0RPRGljaCkKdGFibGUoc3RlYWxTdHVkeTMkaW50ZXJncm91cF9hbngpCmhpc3Qoc3RlYWxTdHVkeTIkU0RPKQpoaXN0KHN0ZWFsU3R1ZHkzJGludGVyZ3JvdXBfYW54KQoKc3RlYWxTdHVkeTIkSW50QW54RGljaFtzdGVhbFN0dWR5MiRpbnRlcmdyb3VwX2FueCA+IG1lZGlhbihzdGVhbFN0dWR5MiRpbnRlcmdyb3VwX2FueCwgbmEucm0gPSBUKSBdIDwtICJoaWdoIgpzdGVhbFN0dWR5MiRJbnRBbnhEaWNoW3N0ZWFsU3R1ZHkyJGludGVyZ3JvdXBfYW54IDwgbWVkaWFuKHN0ZWFsU3R1ZHkyJGludGVyZ3JvdXBfYW54LCBuYS5ybSA9IFQpIF0gPC0gImxvdyIKc3RlYWxTdHVkeTMkSW50QW54RGljaFtzdGVhbFN0dWR5MyRpbnRlcmdyb3VwX2FueCA+IG1lZGlhbihzdGVhbFN0dWR5MyRpbnRlcmdyb3VwX2FueCwgbmEucm0gPSBUKSBdIDwtICJoaWdoIgpzdGVhbFN0dWR5MyRJbnRBbnhEaWNoW3N0ZWFsU3R1ZHkzJGludGVyZ3JvdXBfYW54IDwgbWVkaWFuKHN0ZWFsU3R1ZHkzJGludGVyZ3JvdXBfYW54LCBuYS5ybSA9IFQpIF0gPC0gImxvdyIKcG9zU3R1ZHkzJEludEFueERpY2hbcG9zU3R1ZHkzJGludGVyZ3JvdXBfYW54ID4gbWVkaWFuKHBvc1N0dWR5MyRpbnRlcmdyb3VwX2FueCwgbmEucm0gPSBUKSBdIDwtICJoaWdoIgpwb3NTdHVkeTMkSW50QW54RGljaFtwb3NTdHVkeTMkaW50ZXJncm91cF9hbnggPCBtZWRpYW4ocG9zU3R1ZHkzJGludGVyZ3JvdXBfYW54LCBuYS5ybSA9IFQpIF0gPC0gImxvdyIKV1BUMiRJbnRBbnhEaWNoW1dQVDIkaW50ZXJncm91cF9hbnggPiBtZWRpYW4oc3RlYWxTdHVkeTMkaW50ZXJncm91cF9hbngsIG5hLnJtID0gVCkgXSA8LSAiaGlnaCIKV1BUMiRJbnRBbnhEaWNoW1dQVDIkaW50ZXJncm91cF9hbnggPCBtZWRpYW4oc3RlYWxTdHVkeTMkaW50ZXJncm91cF9hbngsIG5hLnJtID0gVCkgXSA8LSAibG93IgpXUFQzJEludEFueERpY2hbV1BUMyRpbnRlcmdyb3VwX2FueCA+IG1lZGlhbihXUFQzJGludGVyZ3JvdXBfYW54LCBuYS5ybSA9IFQpIF0gPC0gImhpZ2giCldQVDMkSW50QW54RGljaFtXUFQzJGludGVyZ3JvdXBfYW54IDwgbWVkaWFuKFdQVDMkaW50ZXJncm91cF9hbngsIG5hLnJtID0gVCkgXSA8LSAibG93IgpzdGVhbEZ1bGwkSW50QW54RGljaFtzdGVhbEZ1bGwkaW50ZXJncm91cF9hbnggPiBtZWRpYW4oc3RlYWxGdWxsJGludGVyZ3JvdXBfYW54LCBuYS5ybSA9IFQpIF0gPC0gImhpZ2giCnN0ZWFsRnVsbCRJbnRBbnhEaWNoW3N0ZWFsRnVsbCRpbnRlcmdyb3VwX2FueCA8IG1lZGlhbihzdGVhbEZ1bGwkaW50ZXJncm91cF9hbngsIG5hLnJtID0gVCkgXSA8LSAibG93IgoKc3RlYWxTdHVkeTIkSU1TRGljaFtzdGVhbFN0dWR5MiRJTVMgPiBtZWRpYW4oc3RlYWxTdHVkeTIkSU1TLCBuYS5ybSA9IFQpIF0gPC0gImhpZ2giCnN0ZWFsU3R1ZHkyJElNU0RpY2hbc3RlYWxTdHVkeTIkSU1TIDwgbWVkaWFuKHN0ZWFsU3R1ZHkyJElNUywgbmEucm0gPSBUKSBdIDwtICJsb3ciCnN0ZWFsU3R1ZHkzJElNU0RpY2hbc3RlYWxTdHVkeTMkSU1TID4gbWVkaWFuKHN0ZWFsU3R1ZHkzJElNUywgbmEucm0gPSBUKSBdIDwtICJoaWdoIgpzdGVhbFN0dWR5MyRJTVNEaWNoW3N0ZWFsU3R1ZHkzJElNUyA8IG1lZGlhbihzdGVhbFN0dWR5MyRJTVMsIG5hLnJtID0gVCkgXSA8LSAibG93Igpwb3NTdHVkeTMkSU1TRGljaFtwb3NTdHVkeTMkSU1TID4gbWVkaWFuKHBvc1N0dWR5MyRJTVMsIG5hLnJtID0gVCkgXSA8LSAiaGlnaCIKcG9zU3R1ZHkzJElNU0RpY2hbcG9zU3R1ZHkzJElNUyA8IG1lZGlhbihwb3NTdHVkeTMkSU1TLCBuYS5ybSA9IFQpIF0gPC0gImxvdyIKV1BUMiRJTVNEaWNoW1dQVDIkSU1TID4gbWVkaWFuKFdQVDIkSU1TLCBuYS5ybSA9IFQpIF0gPC0gImhpZ2giCldQVDIkSU1TRGljaFtXUFQyJElNUyA8IG1lZGlhbihXUFQyJElNUywgbmEucm0gPSBUKSBdIDwtICJsb3ciCldQVDMkSU1TRGljaFtXUFQzJElNUyA+IG1lZGlhbihXUFQzJElNUywgbmEucm0gPSBUKSBdIDwtICJoaWdoIgpXUFQzJElNU0RpY2hbV1BUMyRJTVMgPCBtZWRpYW4oV1BUMyRJTVMsIG5hLnJtID0gVCkgXSA8LSAibG93IgpzdGVhbEZ1bGwkSU1TRGljaFtzdGVhbEZ1bGwkSU1TID4gbWVkaWFuKHN0ZWFsRnVsbCRJTVMsIG5hLnJtID0gVCkgXSA8LSAiaGlnaCIKc3RlYWxGdWxsJElNU0RpY2hbc3RlYWxGdWxsJElNUyA8IG1lZGlhbihzdGVhbEZ1bGwkSU1TLCBuYS5ybSA9IFQpIF0gPC0gImxvdyIKCnN0ZWFsU3R1ZHkyJEVNU0RpY2hbc3RlYWxTdHVkeTIkRU1TID4gbWVkaWFuKHN0ZWFsU3R1ZHkyJEVNUywgbmEucm0gPSBUKSBdIDwtICJoaWdoIgpzdGVhbFN0dWR5MiRFTVNEaWNoW3N0ZWFsU3R1ZHkyJEVNUyA8IG1lZGlhbihzdGVhbFN0dWR5MiRFTVMsIG5hLnJtID0gVCkgXSA8LSAibG93IgpzdGVhbFN0dWR5MyRFTVNEaWNoW3N0ZWFsU3R1ZHkzJEVNUyA+bWVkaWFuKHN0ZWFsU3R1ZHkzJEVNUywgbmEucm0gPSBUKSBdIDwtICJoaWdoIgpzdGVhbFN0dWR5MyRFTVNEaWNoW3N0ZWFsU3R1ZHkzJEVNUyA8IG1lZGlhbihzdGVhbFN0dWR5MyRFTVMsIG5hLnJtID0gVCkgXSA8LSAibG93IgpXUFQyJEVNU0RpY2hbV1BUMiRFTVMgPiBtZWRpYW4oV1BUMiRFTVMsIG5hLnJtID0gVCkgXSA8LSAiaGlnaCIKV1BUMiRFTVNEaWNoW1dQVDIkRU1TIDwgbWVkaWFuKFdQVDIkRU1TLCBuYS5ybSA9IFQpIF0gPC0gImxvdyIKV1BUMyRFTVNEaWNoW1dQVDMkRU1TID4gbWVkaWFuKFdQVDMkRU1TLCBuYS5ybSA9IFQpIF0gPC0gImhpZ2giCldQVDMkRU1TRGljaFtXUFQzJEVNUyA8IG1lZGlhbihXUFQzJEVNUywgbmEucm0gPSBUKSBdIDwtICJsb3ciCnN0ZWFsRnVsbCRFTVNEaWNoW3N0ZWFsRnVsbCRFTVMgPiBtZWRpYW4oc3RlYWxGdWxsJEVNUywgbmEucm0gPSBUKSBdIDwtICJoaWdoIgpzdGVhbEZ1bGwkRU1TRGljaFtzdGVhbEZ1bGwkRU1TIDwgbWVkaWFuKHN0ZWFsRnVsbCRFTVMsIG5hLnJtID0gVCkgXSA8LSAibG93IgpgYGAKUnVuIGxvZ2lzdGljIG1peGVkIG1vZGVscyBmb3IgYWxsIHRocmVlIHN0dWRpZXMKYGBge3J9CiNTdHVkeTEKU3R1ZHkxTG9naXN0aWM8LSBnbG1lcihhY2N+c2NhbGUoVHJpYWwpKkNvbmRpdGlvbl9lZmYrICgxfFBhcnRpY2lwYW50KSwgZGF0YSA9IFdQVDEsIGZhbWlseSA9ICJiaW5vbWlhbCIpCnN1bW1hcnkoU3R1ZHkxTG9naXN0aWMpCgojU3R1ZHkyClN0dWR5MkxvZ2lzdGljPC0gZ2xtZXIoYWNjfnNjYWxlKFRyaWFsKSpDb25kaXRpb25fZWZmKyAoMXxQYXJ0aWNpcGFudCksIGRhdGEgPSBXUFQyLCBmYW1pbHkgPSAiYmlub21pYWwiKQpzdW1tYXJ5KFN0dWR5MkxvZ2lzdGljKQoKI1N0dWR5MwpQcmVkM0Z1bGwgPC0gUHJlZDNGdWxsWyFpcy5uYShQcmVkM0Z1bGwkUGF0dGVybiksXQpTdHVkeTNMb2dpc3RpYzwtIGdsbWVyKGFjY35zY2FsZShUcmlhbCkqQ29uZGl0aW9uX2VmZisgKDF8UGFydGljaXBhbnQpLCBkYXRhID0gV1BUMywgZmFtaWx5ID0gImJpbm9taWFsIikKc3VtbWFyeShTdHVkeTNMb2dpc3RpYykKYGBgCgojaW5kaXZpZHVhbCBkaWZmZXJlbmNlcyAKYGBge3J9CiNpbmRpdmlkdWFsIGRpZmZlcmVuY2VzIGZvciBTdHVkeSAyIHN0ZWFsClN0ZWFsMkVNUyA8LSBnbG1lcihhY2N+c2NhbGUoVHJpYWwpKkVNU19zY2EgKyAoMXxQYXJ0aWNpcGFudCksIGRhdGEgPSBzdGVhbFN0dWR5MiwgZmFtaWx5ID0gImJpbm9taWFsIikKc3VtbWFyeShTdGVhbDJFTVMpCnBsb3RfbW9kZWwoU3RlYWwyRU1TLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlRyaWFsIiwiRU1TX3NjYSIpKQpTdGVhbDJJTVMgPC0gZ2xtZXIoYWNjfnNjYWxlKFRyaWFsKSpJTVNfc2NhICsgKDF8UGFydGljaXBhbnQpLCBkYXRhID0gc3RlYWxTdHVkeTIsIGZhbWlseSA9ICJiaW5vbWlhbCIpCnN1bW1hcnkoU3RlYWwySU1TKQpTdGVhbDJJbnRBbnggPC0gZ2xtZXIoYWNjfnNjYWxlKFRyaWFsKSppbnRlcmdyb3VwX2FueF9zY2EgKyAoMXxQYXJ0aWNpcGFudCksIGRhdGEgPSBzdGVhbFN0dWR5MiwgZmFtaWx5ID0gImJpbm9taWFsIikKc3VtbWFyeShTdGVhbDJJbnRBbngpClN0ZWFsMmJsa0NvbiA8LSBnbG1lcihhY2N+c2NhbGUoVHJpYWwpKmJsa19jb250YWN0X3NjYSArICgxfFBhcnRpY2lwYW50KSwgZGF0YSA9IHN0ZWFsU3R1ZHkyLCBmYW1pbHkgPSAiYmlub21pYWwiKQpzdW1tYXJ5KFN0ZWFsMmJsa0NvbikKU3RlYWwyYmxrRXh0IDwtIGdsbWVyKGFjY35zY2FsZShUcmlhbCkqYmxrX2V4cF9zY2EgKyAoMXxQYXJ0aWNpcGFudCksIGRhdGEgPSBzdGVhbFN0dWR5MiwgZmFtaWx5ID0gImJpbm9taWFsIikKc3VtbWFyeShTdGVhbDJibGtFeHQpCgojaW5kaXZpZHVhbCBkaWZmZXJlbmNlcyBmb3IgU3R1ZHkgMyBzdGVhbApTdGVhbDNFTVMgPC0gZ2xtZXIoYWNjfnNjYWxlKFRyaWFsKSpFTVNfc2NhICsgKDF8UGFydGljaXBhbnQpLCBkYXRhID0gc3RlYWxTdHVkeTMsIGZhbWlseSA9ICJiaW5vbWlhbCIpCnN1bW1hcnkoU3RlYWwzRU1TKQpTdGVhbDNJTVMgPC0gZ2xtZXIoYWNjfnNjYWxlKFRyaWFsKSpJTVNfc2NhICsgKDF8UGFydGljaXBhbnQpLCBkYXRhID0gc3RlYWxTdHVkeTMsIGZhbWlseSA9ICJiaW5vbWlhbCIpCnN1bW1hcnkoU3RlYWwzSU1TKQpTdGVhbDNJbnRBbnggPC0gZ2xtZXIoYWNjfnNjYWxlKFRyaWFsKSppbnRlcmdyb3VwX2FueF9zY2EgKyAoMXxQYXJ0aWNpcGFudCksIGRhdGEgPSBzdGVhbFN0dWR5MywgZmFtaWx5ID0gImJpbm9taWFsIikKc3VtbWFyeShTdGVhbDNJbnRBbngpClN0ZWFsM2Jsa0NvbiA8LSBnbG1lcihhY2N+c2NhbGUoVHJpYWwpKmJsa19jb250YWN0X3NjYSArICgxfFBhcnRpY2lwYW50KSwgZGF0YSA9IHN0ZWFsU3R1ZHkzLCBmYW1pbHkgPSAiYmlub21pYWwiKQpzdW1tYXJ5KFN0ZWFsM2Jsa0NvbikKU3RlYWwzYmxrRXh0IDwtIGdsbWVyKGFjY35zY2FsZShUcmlhbCkqYmxrX2V4cF9zY2EgKyAoMXxQYXJ0aWNpcGFudCksIGRhdGEgPSBzdGVhbFN0dWR5MywgZmFtaWx5ID0gImJpbm9taWFsIikKc3VtbWFyeShTdGVhbDNibGtFeHQpCgojaW5kaXZpZHVhbCBkaWZmZXJlbmNlcyBmb3IgU3R1ZHkgMyBUb3VjaGRvd24KU3RlYWwzRU1TIDwtIGdsbWVyKGFjY35zY2FsZShUcmlhbCkqRU1TX3NjYSArICgxfFBhcnRpY2lwYW50KSwgZGF0YSA9IHBvc1N0dWR5MywgZmFtaWx5ID0gImJpbm9taWFsIikKc3VtbWFyeShTdGVhbDNFTVMpClN0ZWFsM0lNUyA8LSBnbG1lcihhY2N+c2NhbGUoVHJpYWwpKklNU19zY2EgKyAoMXxQYXJ0aWNpcGFudCksIGRhdGEgPSBwb3NTdHVkeTMsIGZhbWlseSA9ICJiaW5vbWlhbCIpCnN1bW1hcnkoU3RlYWwzSU1TKQpTdGVhbDNJbnRBbnggPC0gZ2xtZXIoYWNjfnNjYWxlKFRyaWFsKSppbnRlcmdyb3VwX2FueF9zY2EgKyAoMXxQYXJ0aWNpcGFudCksIGRhdGEgPSBwb3NTdHVkeTMsIGZhbWlseSA9ICJiaW5vbWlhbCIpCnN1bW1hcnkoU3RlYWwzSW50QW54KQpTdGVhbDNibGtDb24gPC0gZ2xtZXIoYWNjfnNjYWxlKFRyaWFsKSpibGtfY29udGFjdF9zY2EgKyAoMXxQYXJ0aWNpcGFudCksIGRhdGEgPSBwb3NTdHVkeTMsIGZhbWlseSA9ICJiaW5vbWlhbCIpCnN1bW1hcnkoU3RlYWwzYmxrQ29uKQpTdGVhbDNibGtFeHQgPC0gZ2xtZXIoYWNjfnNjYWxlKFRyaWFsKSpibGtfZXhwX3NjYSArICgxfFBhcnRpY2lwYW50KSwgZGF0YSA9IHBvc1N0dWR5MywgZmFtaWx5ID0gImJpbm9taWFsIikKc3VtbWFyeShTdGVhbDNibGtFeHQpCgojc3RlYWwgZnVsbApTdGVhbEZ1bGxFTVMgPC0gZ2xtZXIoYWNjfnNjYWxlKFRyaWFsKSpFTVNfc2NhICsgKDF8UGFydGljaXBhbnQpLCBkYXRhID0gc3RlYWxGdWxsLCBmYW1pbHkgPSAiYmlub21pYWwiKQpzdW1tYXJ5KFN0ZWFsRnVsbEVNUykKU3RlYWxGdWxsSU1TIDwtIGdsbWVyKGFjY35zY2FsZShUcmlhbCkqSU1TX3NjYSArICgxfFBhcnRpY2lwYW50KSwgZGF0YSA9IHN0ZWFsRnVsbCwgZmFtaWx5ID0gImJpbm9taWFsIikKc3VtbWFyeShTdGVhbEZ1bGxJTVMpClN0ZWFsRnVsbEludEFueCA8LSBnbG1lcihhY2N+c2NhbGUoVHJpYWwpKmludGVyZ3JvdXBfYW54X3NjYSArICgxfFBhcnRpY2lwYW50KSwgZGF0YSA9IHN0ZWFsRnVsbCwgZmFtaWx5ID0gImJpbm9taWFsIikKc3VtbWFyeShTdGVhbEZ1bGxJbnRBbngpClN0ZWFsRnVsbGJsa0NvbiA8LSBnbG1lcihhY2N+c2NhbGUoVHJpYWwpKmJsa19jb250YWN0X3NjYSArICgxfFBhcnRpY2lwYW50KSwgZGF0YSA9IHN0ZWFsRnVsbCwgZmFtaWx5ID0gImJpbm9taWFsIikKc3VtbWFyeShTdGVhbEZ1bGxibGtDb24pClN0ZWFsRnVsbGJsa0V4dCA8LSBnbG1lcihhY2N+c2NhbGUoVHJpYWwpKmJsa19leHBfc2NhICsgKDF8UGFydGljaXBhbnQpLCBkYXRhID0gc3RlYWxGdWxsLCBmYW1pbHkgPSAiYmlub21pYWwiKQpzdW1tYXJ5KFN0ZWFsRnVsbGJsa0V4dCkKYGBgCgpSTCBkaWZmZXJlbmNlcyBieSBzdHVkeSAmIGNvbmRpdGlvbgpgYGB7cn0KU3R1ZHkyUkxMb2cgPC0gZ2xtZXIoYWNjfnNjRGVjYXkqQ29uZGl0aW9uX2VmZiArICgxfFBhcnRpY2lwYW50KSwgZGF0YSA9IFdQVDIsIGZhbWlseSA9ICJiaW5vbWlhbCIpCnN1bW1hcnkoU3R1ZHkyUkxMb2cpCgpTdHVkeTJSTFJUIDwtIGxtZXIoUlR+c2NEZWNheSpDb25kaXRpb25fZWZmICsoMXxQYXJ0aWNpcGFudCksIGRhdGEgPSBXUFQyKQpzdW1tYXJ5KFN0dWR5MlJMUlQpCgpTdHVkeTNSTExvZyA8LSBnbG1lcihhY2N+c2NEZWNheSpDb25kaXRpb25fZWZmKyAoMXxQYXJ0aWNpcGFudCksIGRhdGEgPSBXUFQzLCBmYW1pbHkgPSAiYmlub21pYWwiKQpzdW1tYXJ5KFN0dWR5M1JMTG9nKQpgYGAKCgpQbG90IGluZGl2aWR1YWwgZGlmZmVyZW5jZXMgCmBgYHtyfQojc3R1ZHkgMiBpbnRlcmdyb3VwIGFueGlldHkgCnN0ZWFsU3R1ZHkyIDwtIHN0ZWFsU3R1ZHkyWyFpcy5uYShzdGVhbFN0dWR5MiRJbnRBbnhEaWNoKSxdCmdncGxvdChzdGVhbFN0dWR5MiwgYWVzKFRyaWFsLCBhY2MsIGNvbG9yID0gSW50QW54RGljaCkpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxvZXNzIikrCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiQWNjdXJhY3kiKSAKCiNzdHVkeSAzIGludGVyZ3JvdXAgYW54aWV0eSAKc3RlYWxTdHVkeTMgPC0gc3RlYWxTdHVkeTNbIWlzLm5hKHN0ZWFsU3R1ZHkzJEludEFueERpY2gpLF0KZ2dwbG90KHN0ZWFsU3R1ZHkzLCBhZXMoVHJpYWwsIGFjYywgY29sb3IgPSBJbnRBbnhEaWNoKSkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG9lc3MiKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJBY2N1cmFjeSIpIAoKI3N0dWR5IDIgRU1TCnN0ZWFsU3R1ZHkycGxvdCA8LSBzdGVhbFN0dWR5MlshaXMubmEoc3RlYWxTdHVkeTIkRU1TRGljaCksXQpnZ3Bsb3Qoc3RlYWxTdHVkeTJwbG90LCBhZXMoVHJpYWwsIGFjYywgY29sb3IgPSBFTVNEaWNoKSkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG9lc3MiKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJBY2N1cmFjeSIpIAoKI3N0dWR5IDMgRU1TCnN0ZWFsU3R1ZHkzcGxvdCA8LSBzdGVhbFN0dWR5M1shaXMubmEoc3RlYWxTdHVkeTMkRU1TRGljaCksXQpnZ3Bsb3Qoc3RlYWxTdHVkeTNwbG90LCBhZXMoVHJpYWwsIGFjYywgY29sb3IgPSBFTVNEaWNoKSkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG9lc3MiKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJBY2N1cmFjeSIpIAoKI3N0dWR5IDIgSU1TCnN0ZWFsU3R1ZHkycGxvdCA8LSBzdGVhbFN0dWR5MlshaXMubmEoc3RlYWxTdHVkeTIkSU1TRGljaCksXQpnZ3Bsb3Qoc3RlYWxTdHVkeTIsIGFlcyhUcmlhbCwgYWNjLCBjb2xvciA9IElNU0RpY2gpKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsb2VzcyIpKwogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIkFjY3VyYWN5IikgCgojc3R1ZHkgMyBJTVMKc3RlYWxTdHVkeTNwbG90IDwtIHN0ZWFsU3R1ZHkzWyFpcy5uYShzdGVhbFN0dWR5MyRJTVNEaWNoKSxdCmdncGxvdChzdGVhbFN0dWR5M3Bsb3QsIGFlcyhUcmlhbCwgYWNjLCBjb2xvciA9IElNU0RpY2gpKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsb2VzcyIpKwogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIkFjY3VyYWN5IikgCmBgYAoKCg==