1. General discription

This notebook contains the statistical analyses for the SPPT dataset.

It takes as input the following files:

For additional details we refer to the README.docx file of the repository, and the paper.

2. Import packages and load data

Import packages:

library(readr)
library(tidyverse)
library(tibble)
library(dplyr)
library(readxl)
library(jtools)
library(psych)
library(ggplot2)
library(rstatix)
library(huxtable)
library(caret)

Load beta estimates:

# Load brain data
df_betas <- read_csv("brain/df_betas_repo.csv",col_types = cols())

# Subjects as factor
df_betas$ID <- factor(df_betas$ID)

# Get block + case from trial string
df_betas <- add_column(df_betas, block =sapply(strsplit(as.character(df_betas$case), "\\Case"), `[`, 1))
df_betas$case <- sapply(strsplit(as.character(df_betas$case), "\\Case"), `[`, 2)


# Remove case 51 because of an error with stimulus presentation for this case
remove_case <- c(51)
df_betas <- df_betas[!df_betas$case %in% remove_case, ]

Center estimates per participant per VOI:

center <- function(x, na.rm = TRUE) (x - mean(x, na.rm = na.rm))

df_betas_centered <- df_betas %>% 
  group_by(ID) %>% 
   mutate_at(vars(matches('mask')), center)

Add answers (case, choice, stars - confidence rating):

# Load and concatenate data
ff <- list.files("task-answers", pattern = "NNIPanswers.txt", recursive = TRUE, full.names = TRUE)
star_data <- do.call(rbind, lapply(ff, read.delim))

# Add subject number
sub_nr <- rep(2:37, each=45)
sub_nr <- sprintf("%02d", sub_nr)
ID <- paste("sub-",sub_nr, sep="")
star_data <- cbind(ID,star_data)

# Rename and fix columns
names(star_data)[names(star_data) == "Case"] <- "case"
star_data <- star_data[c("ID","case","Stars")]
star_data <- star_data %>% mutate(case = as.character(case))

# Combine data frames
all_data_df <- star_data %>% right_join(df_betas_centered, by=c("ID","case"))
all_data_df <- all_data_df %>% relocate(Stars, .after=last_col())

Add stock metrics:

# Add case info
Stock_metrics <- read_excel("Stock_metrics.xlsx")

# Convert case to factor
Stock_metrics$case <- factor(Stock_metrics$case)

# Match by case
all_data_df <- cbind(all_data_df, Stock_metrics[match(all_data_df$case, Stock_metrics$case),])
all_data_df <- all_data_df[, !duplicated(colnames(all_data_df))]

# Log-transform CMC because it is highly skewed
all_data_df$log_CMC <- log(all_data_df$CMC)

# Add correct
all_data_df$cor_p1Y <- ifelse(all_data_df$choice==all_data_df$Rel_p1Y_pos, 1, 0) #Correct prediction at 1-year in the future (1 if equal, 0 if not)

And Survey scores: (This also removes subjects 17,18 - these subjects are removed because of excessive head-motion)

# Import data
survey_scores <- read_csv("Survey_scores.csv",col_types = cols())

# Join to all_data
all_data_df <- merge(all_data_df,survey_scores, by="ID")

Make names unique

names(all_data_df)<-make.names(names(all_data_df),unique = TRUE)

3. Descriptive analyses: Participants

Calculate average per participant

Sub_mean <- all_data_df %>%
  group_by(ID) %>%
  summarise_at(vars(-case,-block,-trial), list(~ mean(., na.rm=TRUE)))

#Sub_mean

Calculate age and years of experience:

x=Sub_mean[50:53]
sapply(x, function(x) c( "Stand dev" = sd(x), 
                         "Mean"= mean(x,na.rm=TRUE),
                         "n" = length(x),
                         "Median" = median(x),
                         "CoeffofVariation" = sd(x)/mean(x,na.rm=TRUE),
                         "Minimum" = min(x),
                         "Maximun" = max(x),
                         "Upper Quantile" = quantile(x,1),
                         "LowerQuartile" = quantile(x,0)
                    )
)
                           Age finance_exp  asset_exp equity_exp
Stand dev            9.0894250   9.9644757  9.3608702   9.552195
Mean                47.5588235  19.2205882 12.3676471  14.926471
n                   34.0000000  34.0000000 34.0000000  34.000000
Median              49.0000000  20.0000000 10.0000000  13.500000
CoeffofVariation     0.1911196   0.5184272  0.7568837   0.639950
Minimum             29.0000000   0.0000000  0.0000000   0.000000
Maximun             66.0000000  40.0000000 40.0000000  40.000000
Upper Quantile.100% 66.0000000  40.0000000 40.0000000  40.000000
LowerQuartile.0%    29.0000000   0.0000000  0.0000000   0.000000

Calculate self-reported difficulty/ realism and test if above mid-point of scale:

x=Sub_mean[55:56]
sapply(x, function(x) c( "Stand dev" = sd(x), 
                         "Mean"= mean(x,na.rm=TRUE),
                         "n" = length(x),
                         "Median" = median(x),
                         "CoeffofVariation" = sd(x)/mean(x,na.rm=TRUE),
                         "Minimum" = min(x),
                         "Maximun" = max(x),
                         "Upper Quantile" = quantile(x,1),
                         "LowerQuartile" = quantile(x,0)
                    )
)
                     realistic  difficult
Stand dev            1.4129526  0.9883456
Mean                 4.0588235  4.4117647
n                   34.0000000 34.0000000
Median               4.0000000  5.0000000
CoeffofVariation     0.3481187  0.2240250
Minimum              1.0000000  2.0000000
Maximun              7.0000000  6.0000000
Upper Quantile.100%  7.0000000  6.0000000
LowerQuartile.0%     1.0000000  2.0000000
t.test(Sub_mean$realistic, mu=4, alternative="two.sided")

    One Sample t-test

data:  Sub_mean$realistic
t = 0.24275, df = 33, p-value = 0.8097
alternative hypothesis: true mean is not equal to 4
95 percent confidence interval:
 3.565821 4.551826
sample estimates:
mean of x 
 4.058824 
t.test(Sub_mean$difficult, mu=4, alternative="two.sided")

    One Sample t-test

data:  Sub_mean$difficult
t = 2.4293, df = 33, p-value = 0.02074
alternative hypothesis: true mean is not equal to 4
95 percent confidence interval:
 4.066915 4.756615
sample estimates:
mean of x 
 4.411765 

Self-reported importance of information screens:

x=Sub_mean[61:65]
sapply(x, function(x) c( "Stand dev" = sd(x), 
                         "Mean"= mean(x,na.rm=TRUE),
                         "n" = length(x),
                         "Median" = median(x),
                         "CoeffofVariation" = sd(x)/mean(x,na.rm=TRUE),
                         "Minimum" = min(x),
                         "Maximun" = max(x),
                         "Upper Quantile" = quantile(x,1),
                         "LowerQuartile" = quantile(x,0)
                    )
)
                     prof_imp   fund_imp   rela_imp  graph_imp   news_imp
Stand dev            1.225109  1.0294245  1.1930428  0.9650764  1.2878840
Mean                 1.882353  3.9705882  2.9705882  2.9117647  3.9117647
n                   34.000000 34.0000000 34.0000000 34.0000000 34.0000000
Median               1.000000  4.0000000  3.0000000  3.0000000  4.0000000
CoeffofVariation     0.650839  0.2592625  0.4016184  0.3314404  0.3292335
Minimum              1.000000  2.0000000  1.0000000  1.0000000  1.0000000
Maximun              5.000000  5.0000000  5.0000000  5.0000000  5.0000000
Upper Quantile.100%  5.000000  5.0000000  5.0000000  5.0000000  5.0000000
LowerQuartile.0%     1.000000  2.0000000  1.0000000  1.0000000  1.0000000

Reshape data and conduct pairwise tests:

x=Sub_mean[c(1,61:65)]
importance_scores <- pivot_longer(x, cols=-ID,names_to='Screen',values_to='Importance')

pwc <- importance_scores %>%
  pairwise_t_test(
    Importance ~ Screen, paired = TRUE,
    p.adjust.method = "bonferroni"
    )
pwc

4. Descriptive analyses: Investment cases

Calculate average per case

Case_mean <- all_data_df %>%
  group_by(case) %>%
  summarise_at(vars(-ID,-block,-trial), funs(mean(., na.rm=TRUE)))

Case_mean

Average prediction and correct prediction

x=Case_mean[c(32,49)]
sapply(x, function(x) c( "Stand dev" = sd(x), 
                         "Mean"= mean(x,na.rm=TRUE),
                         "n" = length(x),
                         "Median" = median(x),
                         "CoeffofVariation" = sd(x)/mean(x,na.rm=TRUE),
                         "Minimum" = min(x),
                         "Maximun" = max(x),
                         "Upper Quantile" = quantile(x,1),
                         "LowerQuartile" = quantile(x,0)
                    )
)
                         choice     cor_p1Y
Stand dev            0.24337304  0.24196615
Mean                 0.49547657  0.52622524
n                   44.00000000 44.00000000
Median               0.52941176  0.56684492
CoeffofVariation     0.49118981  0.45981479
Minimum              0.05882353  0.05882353
Maximun              0.88235294  0.88235294
Upper Quantile.100%  0.88235294  0.88235294
LowerQuartile.0%     0.05882353  0.05882353

5. Statistical analyses: Behavior

Logistic regression: predictions to future market performance

Rel_p1Y_pos = Relative performance 1 year in the future (underperforming/overperforming, coded as 0/1)

formula=paste("Rel_p1Y_pos~choice",sep="")
print(formula)
[1] "Rel_p1Y_pos~choice"
out_choice <- glm(formula,data=Case_mean,family = binomial(link = logit))

print(summ(out_choice,digits = getOption("jtools-digits", default = 3), scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 0.525, p = 0.469
Pseudo-R² (Cragg-Uhler) = 0.016
Pseudo-R² (McFadden) = 0.009
AIC = 64.472, BIC = 68.041 

Standard errors: MLE
---------------------------------------------------
                      Est.    S.E.   z val.       p
----------------- -------- ------- -------- -------
(Intercept)         -0.000   0.303   -0.000   1.000
choice               0.222   0.308    0.720   0.471
---------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

Correlation between self-reported confidence (Stars) and prediction accuracy

cor.test(Case_mean$Stars, Case_mean$cor_p1Y)

    Pearson's product-moment correlation

data:  Case_mean$Stars and Case_mean$cor_p1Y
t = 0.15821, df = 42, p-value = 0.875
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.2744637  0.3189745
sample estimates:
       cor 
0.02440524 

6. Factor analysis - Brain activity

Select columns:

nacc <- Case_mean[, c(4,9,14,19,24)]
KMO(r=cor(nacc))
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = cor(nacc))
Overall MSA =  0.74
MSA for each item = 
 fund.Bilat_NAcc_mask graph.Bilat_NAcc_mask  news.Bilat_NAcc_mask  prof.Bilat_NAcc_mask  rela.Bilat_NAcc_mask 
                 0.73                  0.80                  0.70                  0.69                  0.77 

Positive correlation accross information screens:

median(cor(nacc))
[1] 0.5581268

Factor analysis:

fit <- factanal(nacc, 2,rotation = "promax", scores='regression')

print(fit, digits=3, cutoff=0.3, sort=TRUE)

Call:
factanal(x = nacc, factors = 2, scores = "regression", rotation = "promax")

Uniquenesses:
 fund.Bilat_NAcc_mask graph.Bilat_NAcc_mask  news.Bilat_NAcc_mask  prof.Bilat_NAcc_mask  rela.Bilat_NAcc_mask 
                0.172                 0.371                 0.396                 0.388                 0.386 

Loadings:
                      Factor1 Factor2
fund.Bilat_NAcc_mask   0.668   0.381 
graph.Bilat_NAcc_mask  0.675         
prof.Bilat_NAcc_mask   0.865         
news.Bilat_NAcc_mask           0.831 
rela.Bilat_NAcc_mask           0.702 

               Factor1 Factor2
SS loadings      1.692   1.432
Proportion Var   0.338   0.286
Cumulative Var   0.338   0.625

Factor Correlations:
        Factor1 Factor2
Factor1   1.000   0.463
Factor2   0.463   1.000

Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 0.36 on 1 degree of freedom.
The p-value is 0.549 

Add factor scores, creating df for regression:

NAcc_factor_scores <- data.frame(fit$scores)
reg_df <- merge(Case_mean,NAcc_factor_scores,by="row.names",all.x=TRUE)

7. Regression analysis: Information screens

Regression analysis per information screen (for Table 2):

formula=paste("Rel_p1Y_pos~log_CMC+prof.Bilat_NAcc_mask+prof.Bilat_MPFC_mask+prof.Bilat_AIns_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~log_CMC+prof.Bilat_NAcc_mask+prof.Bilat_MPFC_mask+prof.Bilat_AIns_mask"
out_prof <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_prof,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(4) = 10.54, p = 0.03
Pseudo-R² (Cragg-Uhler) = 0.28
Pseudo-R² (McFadden) = 0.17
AIC = 60.45, BIC = 69.37 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                   0.01   0.34     0.03   0.98
log_CMC                       0.31   0.35     0.88   0.38
prof.Bilat_NAcc_mask          1.36   0.62     2.20   0.03
prof.Bilat_MPFC_mask          0.28   0.61     0.47   0.64
prof.Bilat_AIns_mask         -0.75   0.55    -1.37   0.17
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~Rel_m3Y_pos+graph.Bilat_NAcc_mask+graph.Bilat_MPFC_mask+graph.Bilat_AIns_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~Rel_m3Y_pos+graph.Bilat_NAcc_mask+graph.Bilat_MPFC_mask+graph.Bilat_AIns_mask"
out_graph <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_graph,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(4) = 12.72, p = 0.01
Pseudo-R² (Cragg-Uhler) = 0.33
Pseudo-R² (McFadden) = 0.21
AIC = 58.28, BIC = 67.20 

Standard errors: MLE
----------------------------------------------------------
                               Est.   S.E.   z val.      p
--------------------------- ------- ------ -------- ------
(Intercept)                   -0.70   0.64    -1.09   0.28
Rel_m3Y_pos                    1.06   0.85     1.25   0.21
graph.Bilat_NAcc_mask          2.14   0.86     2.47   0.01
graph.Bilat_MPFC_mask         -0.83   0.59    -1.41   0.16
graph.Bilat_AIns_mask         -0.30   0.75    -0.39   0.69
----------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~f_s+f_ebit+f_ebitmargin+f_roe+f_roic+fund.Bilat_NAcc_mask+fund.Bilat_MPFC_mask+fund.Bilat_AIns_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~f_s+f_ebit+f_ebitmargin+f_roe+f_roic+fund.Bilat_NAcc_mask+fund.Bilat_MPFC_mask+fund.Bilat_AIns_mask"
out_fund <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_fund,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(8) = 6.98, p = 0.54
Pseudo-R² (Cragg-Uhler) = 0.20
Pseudo-R² (McFadden) = 0.11
AIC = 72.01, BIC = 88.07 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                  -0.00   0.33    -0.01   0.99
f_s                          -0.29   0.47    -0.62   0.54
f_ebit                        0.06   0.43     0.13   0.89
f_ebitmargin                  0.26   0.49     0.52   0.60
f_roe                        -0.29   0.73    -0.40   0.69
f_roic                       -0.15   0.59    -0.25   0.80
fund.Bilat_NAcc_mask          1.46   0.68     2.13   0.03
fund.Bilat_MPFC_mask          0.11   0.51     0.21   0.83
fund.Bilat_AIns_mask         -1.23   0.77    -1.61   0.11
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~rv_evs+rv_ebitda+rv_pe+rv_pb+rela.Bilat_NAcc_mask+rela.Bilat_MPFC_mask+rela.Bilat_AIns_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~rv_evs+rv_ebitda+rv_pe+rv_pb+rela.Bilat_NAcc_mask+rela.Bilat_MPFC_mask+rela.Bilat_AIns_mask"
out_rela <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_rela,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(7) = 8.35, p = 0.30
Pseudo-R² (Cragg-Uhler) = 0.23
Pseudo-R² (McFadden) = 0.14
AIC = 68.65, BIC = 82.92 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                   0.08   0.45     0.19   0.85
rv_evs                        0.27   0.65     0.41   0.68
rv_ebitda                     1.05   0.70     1.51   0.13
rv_pe                        -0.81   0.70    -1.16   0.25
rv_pb                         0.78   1.96     0.40   0.69
rela.Bilat_NAcc_mask          0.65   0.57     1.14   0.26
rela.Bilat_MPFC_mask          0.42   0.50     0.85   0.40
rela.Bilat_AIns_mask         -0.86   0.58    -1.47   0.14
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~news_incgr+news.Bilat_NAcc_mask+news.Bilat_MPFC_mask+news.Bilat_AIns_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~news_incgr+news.Bilat_NAcc_mask+news.Bilat_MPFC_mask+news.Bilat_AIns_mask"
out_news <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_news,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(4) = 4.10, p = 0.39
Pseudo-R² (Cragg-Uhler) = 0.12
Pseudo-R² (McFadden) = 0.07
AIC = 66.90, BIC = 75.82 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                   0.14   0.39     0.37   0.71
news_incgr                    1.16   1.48     0.78   0.43
news.Bilat_NAcc_mask         -0.34   0.49    -0.71   0.48
news.Bilat_MPFC_mask          0.24   0.49     0.49   0.62
news.Bilat_AIns_mask          0.41   0.50     0.82   0.41
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

Output table:

coef_names <- c("Current Market Capitalization" = "log_CMC", "Profile - Nacc" = "prof.Bilat_NAcc_mask", "Profile - MPFC" = "prof.Bilat_MPFC_mask", "Profile - AIns" = "prof.Bilat_AIns_mask",
                "36M Performance"='Rel_m3Y_pos', "Graph - Nacc" = "graph.Bilat_NAcc_mask", "Graph - MPFC" = "graph.Bilat_MPFC_mask", "Graph - AIns" = "graph.Bilat_AIns_mask",
                "Sales" ="f_s", "EBIT" = "f_ebit", "EBIT Margin (%)" = "f_ebitmargin","ROE (%)" = "f_roe","ROIC (%)" = "f_roic",
                "Fundamentals - Nacc" = "fund.Bilat_NAcc_mask", "Fundamentals - MPFC" = "fund.Bilat_MPFC_mask", "Fundamentals - AIns" = "fund.Bilat_AIns_mask",
                "EV/Sales" = "rv_evs","EV/EBITDA" = "rv_ebitda","P/E" = "rv_pe","P/B" = "rv_pb",
                "Relative Valuation - Nacc" = "rela.Bilat_NAcc_mask", "Relative Valuation - MPFC" = "rela.Bilat_MPFC_mask", "Relative Valuation - AIns" = "rela.Bilat_AIns_mask",
                "Income growth" = "news_incgr","News item - Nacc" = "news.Bilat_NAcc_mask", "News item - MPFC" = "news.Bilat_MPFC_mask", "News item - AIns" = "news.Bilat_AIns_mask" )

# Uncomment to create table
# quick_docx(export_summs(out_prof,out_graph,out_fund,out_rela,out_news, scale = TRUE,coefs = coef_names,error_pos = c("same"),
#              model.names=c("Company Profile","Price Graph","Fundamentals","Relative Valuation","News Item"),
#              statistics= c(N = "nobs", AIC = "AIC", "Pseudo R2 (McFadden)" = "pseudo.r.squared.mcfadden")), file='Table-2.docx')

Only neural predictors:

formula=paste("Rel_p1Y_pos~prof.Bilat_NAcc_mask+prof.Bilat_MPFC_mask+prof.Bilat_AIns_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~prof.Bilat_NAcc_mask+prof.Bilat_MPFC_mask+prof.Bilat_AIns_mask"
out_prof_neural <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_prof_neural,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(3) = 9.76, p = 0.02
Pseudo-R² (Cragg-Uhler) = 0.27
Pseudo-R² (McFadden) = 0.16
AIC = 59.24, BIC = 66.38 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                   0.01   0.34     0.02   0.98
prof.Bilat_NAcc_mask          1.37   0.61     2.23   0.03
prof.Bilat_MPFC_mask          0.16   0.59     0.27   0.79
prof.Bilat_AIns_mask         -0.68   0.54    -1.26   0.21
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~graph.Bilat_NAcc_mask+graph.Bilat_MPFC_mask+graph.Bilat_AIns_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~graph.Bilat_NAcc_mask+graph.Bilat_MPFC_mask+graph.Bilat_AIns_mask"
out_graph_neural <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_graph_neural,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(3) = 11.06, p = 0.01
Pseudo-R² (Cragg-Uhler) = 0.30
Pseudo-R² (McFadden) = 0.18
AIC = 57.94, BIC = 65.07 

Standard errors: MLE
----------------------------------------------------------
                               Est.   S.E.   z val.      p
--------------------------- ------- ------ -------- ------
(Intercept)                   -0.03   0.34    -0.10   0.92
graph.Bilat_NAcc_mask          1.80   0.77     2.32   0.02
graph.Bilat_MPFC_mask         -0.89   0.58    -1.53   0.13
graph.Bilat_AIns_mask         -0.19   0.72    -0.26   0.80
----------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~fund.Bilat_NAcc_mask+fund.Bilat_MPFC_mask+fund.Bilat_AIns_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~fund.Bilat_NAcc_mask+fund.Bilat_MPFC_mask+fund.Bilat_AIns_mask"
out_fund_neural <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_fund_neural,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(3) = 5.55, p = 0.14
Pseudo-R² (Cragg-Uhler) = 0.16
Pseudo-R² (McFadden) = 0.09
AIC = 63.45, BIC = 70.59 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                  -0.01   0.32    -0.03   0.98
fund.Bilat_NAcc_mask          1.38   0.65     2.12   0.03
fund.Bilat_MPFC_mask          0.17   0.49     0.34   0.73
fund.Bilat_AIns_mask         -1.11   0.73    -1.52   0.13
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~rela.Bilat_NAcc_mask+rela.Bilat_MPFC_mask+rela.Bilat_AIns_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~rela.Bilat_NAcc_mask+rela.Bilat_MPFC_mask+rela.Bilat_AIns_mask"
out_rela_neural <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_rela_neural,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(3) = 3.93, p = 0.27
Pseudo-R² (Cragg-Uhler) = 0.11
Pseudo-R² (McFadden) = 0.06
AIC = 65.06, BIC = 72.20 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                  -0.00   0.32    -0.02   0.99
rela.Bilat_NAcc_mask          0.79   0.56     1.40   0.16
rela.Bilat_MPFC_mask          0.37   0.48     0.76   0.45
rela.Bilat_AIns_mask         -0.87   0.57    -1.53   0.12
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~news.Bilat_NAcc_mask+news.Bilat_MPFC_mask+news.Bilat_AIns_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~news.Bilat_NAcc_mask+news.Bilat_MPFC_mask+news.Bilat_AIns_mask"
out_news_neural <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_news_neural,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(3) = 2.56, p = 0.46
Pseudo-R² (Cragg-Uhler) = 0.08
Pseudo-R² (McFadden) = 0.04
AIC = 66.43, BIC = 73.57 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                  -0.00   0.31    -0.01   0.99
news.Bilat_NAcc_mask         -0.41   0.48    -0.85   0.39
news.Bilat_MPFC_mask          0.31   0.46     0.67   0.50
news.Bilat_AIns_mask          0.51   0.47     1.10   0.27
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

Reduced models with only NAcc predictors (without MPFC and AIns) and stock metrics for each screen:

formula=paste("Rel_p1Y_pos~log_CMC+prof.Bilat_NAcc_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~log_CMC+prof.Bilat_NAcc_mask"
out_prof_NAcc <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_prof_NAcc,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(2) = 8.57, p = 0.01
Pseudo-R² (Cragg-Uhler) = 0.24
Pseudo-R² (McFadden) = 0.14
AIC = 58.42, BIC = 63.78 

Standard errors: MLE
--------------------------------------------------------
                             Est.   S.E.   z val.      p
-------------------------- ------ ------ -------- ------
(Intercept)                  0.02   0.33     0.05   0.96
log_CMC                      0.26   0.33     0.77   0.44
prof.Bilat_NAcc_mask         0.98   0.38     2.59   0.01
--------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~Rel_m3Y_pos+graph.Bilat_NAcc_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~Rel_m3Y_pos+graph.Bilat_NAcc_mask"
out_graph_NAcc <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_graph_NAcc,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(2) = 9.32, p = 0.01
Pseudo-R² (Cragg-Uhler) = 0.25
Pseudo-R² (McFadden) = 0.15
AIC = 57.68, BIC = 63.03 

Standard errors: MLE
----------------------------------------------------------
                               Est.   S.E.   z val.      p
--------------------------- ------- ------ -------- ------
(Intercept)                   -0.63   0.59    -1.06   0.29
Rel_m3Y_pos                    1.08   0.80     1.34   0.18
graph.Bilat_NAcc_mask          1.23   0.47     2.59   0.01
----------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~f_s+f_ebit+f_ebitmargin+f_roe+f_roic+fund.Bilat_NAcc_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~f_s+f_ebit+f_ebitmargin+f_roe+f_roic+fund.Bilat_NAcc_mask"
out_fund_NAcc <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_fund_NAcc,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(6) = 3.72, p = 0.71
Pseudo-R² (Cragg-Uhler) = 0.11
Pseudo-R² (McFadden) = 0.06
AIC = 71.27, BIC = 83.76 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                   0.00   0.32     0.01   0.99
f_s                          -0.11   0.45    -0.24   0.81
f_ebit                       -0.09   0.41    -0.22   0.82
f_ebitmargin                  0.31   0.47     0.66   0.51
f_roe                        -0.13   0.69    -0.19   0.85
f_roic                       -0.24   0.63    -0.38   0.71
fund.Bilat_NAcc_mask          0.50   0.36     1.40   0.16
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~rv_evs+rv_ebitda+rv_pe+rv_pb+rela.Bilat_NAcc_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~rv_evs+rv_ebitda+rv_pe+rv_pb+rela.Bilat_NAcc_mask"
out_rela_NAcc <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_rela_NAcc,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(5) = 5.87, p = 0.32
Pseudo-R² (Cragg-Uhler) = 0.17
Pseudo-R² (McFadden) = 0.10
AIC = 67.13, BIC = 77.84 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                   0.11   0.49     0.23   0.82
rv_evs                        0.16   0.68     0.23   0.82
rv_ebitda                     0.99   0.65     1.52   0.13
rv_pe                        -0.81   0.64    -1.25   0.21
rv_pb                         0.93   2.38     0.39   0.70
rela.Bilat_NAcc_mask          0.27   0.35     0.78   0.43
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~news_incgr+news.Bilat_NAcc_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~news_incgr+news.Bilat_NAcc_mask"
out_news_NAcc <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_news_NAcc,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(2) = 2.77, p = 0.25
Pseudo-R² (Cragg-Uhler) = 0.08
Pseudo-R² (McFadden) = 0.05
AIC = 64.23, BIC = 69.58 

Standard errors: MLE
--------------------------------------------------------
                             Est.   S.E.   z val.      p
-------------------------- ------ ------ -------- ------
(Intercept)                  0.17   0.38     0.45   0.65
news_incgr                   1.45   1.40     1.03   0.30
news.Bilat_NAcc_mask         0.06   0.32     0.19   0.85
--------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

Reduced models with only NAcc predictors (without MPFC and AIns) and without stock metrics for each screen:

formula=paste("Rel_p1Y_pos~prof.Bilat_NAcc_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~prof.Bilat_NAcc_mask"
out_prof_NAcc2 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_prof_NAcc2,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 7.98, p = 0.00
Pseudo-R² (Cragg-Uhler) = 0.22
Pseudo-R² (McFadden) = 0.13
AIC = 57.02, BIC = 60.59 

Standard errors: MLE
--------------------------------------------------------
                             Est.   S.E.   z val.      p
-------------------------- ------ ------ -------- ------
(Intercept)                  0.01   0.33     0.02   0.99
prof.Bilat_NAcc_mask         0.95   0.37     2.56   0.01
--------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~graph.Bilat_NAcc_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~graph.Bilat_NAcc_mask"
out_graph_NAcc2 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_graph_NAcc2,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 7.37, p = 0.01
Pseudo-R² (Cragg-Uhler) = 0.21
Pseudo-R² (McFadden) = 0.12
AIC = 57.62, BIC = 61.19 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
--------------------------- ------ ------ -------- ------
(Intercept)                   0.02   0.33     0.06   0.96
graph.Bilat_NAcc_mask         0.95   0.39     2.40   0.02
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~fund.Bilat_NAcc_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~fund.Bilat_NAcc_mask"
out_fund_NAcc2 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_fund_NAcc2,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 2.70, p = 0.10
Pseudo-R² (Cragg-Uhler) = 0.08
Pseudo-R² (McFadden) = 0.04
AIC = 62.30, BIC = 65.87 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                  -0.00   0.31    -0.01   0.99
fund.Bilat_NAcc_mask          0.53   0.34     1.55   0.12
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~rela.Bilat_NAcc_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~rela.Bilat_NAcc_mask"
out_rela_NAcc2 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_rela_NAcc2,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 1.31, p = 0.25
Pseudo-R² (Cragg-Uhler) = 0.04
Pseudo-R² (McFadden) = 0.02
AIC = 63.69, BIC = 67.25 

Standard errors: MLE
--------------------------------------------------------
                             Est.   S.E.   z val.      p
-------------------------- ------ ------ -------- ------
(Intercept)                  0.00   0.31     0.01   0.99
rela.Bilat_NAcc_mask         0.36   0.33     1.10   0.27
--------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~news.Bilat_NAcc_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~news.Bilat_NAcc_mask"
out_news_NAcc2 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_news_NAcc2,digits = getOption("jtools-digits", default = 2),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 0.17, p = 0.68
Pseudo-R² (Cragg-Uhler) = 0.01
Pseudo-R² (McFadden) = 0.00
AIC = 64.82, BIC = 68.39 

Standard errors: MLE
---------------------------------------------------------
                              Est.   S.E.   z val.      p
-------------------------- ------- ------ -------- ------
(Intercept)                  -0.00   0.30    -0.00   1.00
news.Bilat_NAcc_mask          0.13   0.31     0.42   0.68
---------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

T-tests for NAcc activity (underperforming/overperforming)

t.test(prof.Bilat_NAcc_mask~Rel_p1Y_pos, data=reg_df,var.equal=TRUE)

    Two Sample t-test

data:  prof.Bilat_NAcc_mask by Rel_p1Y_pos
t = -2.9335, df = 42, p-value = 0.005409
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
 -0.12753448 -0.02357879
sample estimates:
mean in group 0 mean in group 1 
    -0.03770480      0.03785183 
t.test(graph.Bilat_NAcc_mask~Rel_p1Y_pos, data=reg_df,var.equal=TRUE)

    Two Sample t-test

data:  graph.Bilat_NAcc_mask by Rel_p1Y_pos
t = -2.7664, df = 42, p-value = 0.00839
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
 -0.12927029 -0.02021856
sample estimates:
mean in group 0 mean in group 1 
    -0.03707873      0.03766570 
t.test(fund.Bilat_NAcc_mask~Rel_p1Y_pos, data=reg_df,var.equal=TRUE)

    Two Sample t-test

data:  fund.Bilat_NAcc_mask by Rel_p1Y_pos
t = -1.6219, df = 42, p-value = 0.1123
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
 -0.086015229  0.009360935
sample estimates:
mean in group 0 mean in group 1 
    -0.01902793      0.01929922 
t.test(rela.Bilat_NAcc_mask~Rel_p1Y_pos, data=reg_df,var.equal=TRUE)

    Two Sample t-test

data:  rela.Bilat_NAcc_mask by Rel_p1Y_pos
t = -1.1214, df = 42, p-value = 0.2685
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
 -0.06665278  0.01903601
sample estimates:
mean in group 0 mean in group 1 
    -0.01178564      0.01202275 
t.test(news.Bilat_NAcc_mask~Rel_p1Y_pos, data=reg_df,var.equal=TRUE)

    Two Sample t-test

data:  news.Bilat_NAcc_mask by Rel_p1Y_pos
t = -0.40911, df = 42, p-value = 0.6845
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
 -0.05585200  0.03702392
sample estimates:
mean in group 0 mean in group 1 
   -0.004480793     0.004933247 

7. Create NAcc plot

Create data frame for NAcc plot

std <- function(x) sd(x)/sqrt(length(x))

x=Case_mean[c(19,9,4,24,14,35)]

AvgBeta_group = x %>% group_by(Performance = Rel_p1Y_pos) %>%
  summarise("Company Profile" = mean(prof.Bilat_NAcc_mask), 
            "Price Graph" = mean(graph.Bilat_NAcc_mask),
            "Fundamentals" = mean(fund.Bilat_NAcc_mask),
            "Relative Valuation" = mean(rela.Bilat_NAcc_mask),
            "News Item" = mean(news.Bilat_NAcc_mask))

SE_group = x %>% group_by(Performance = Rel_p1Y_pos) %>%
  summarise("Company Profile" = std(prof.Bilat_NAcc_mask), 
            "Price Graph" = std(graph.Bilat_NAcc_mask),
            "Fundamentals" = std(fund.Bilat_NAcc_mask),
            "Relative Valuation" = std(rela.Bilat_NAcc_mask),
            "News Item" = std(news.Bilat_NAcc_mask))

# Make Average dataframe
AvgBeta=AvgBeta_group
AvgBeta <- pivot_longer(AvgBeta, cols=-Performance,names_to='Screen',values_to='AvgBeta')

# Make SE dataframe
SE=SE_group
SE <- pivot_longer(SE, cols=-Performance,names_to='Screen',values_to='SE')

# Combine Average and SE
NAccplot_df <- AvgBeta %>% right_join(SE, by=c("Performance","Screen"))

#NAccplot_df
            

Create NAccplot

NAccplot = NAccplot_df

NAccplot$Performance <- factor(NAccplot$Performance)
NAccplot$Screen <- factor(NAccplot$Screen, levels=unique(NAccplot$Screen), ordered=TRUE)


plot <- ggplot(NAccplot, aes(x=Screen, y=AvgBeta, fill=Performance)) +
    geom_bar(stat='identity', position = position_dodge2(padding = 0)) +
    geom_errorbar(aes(ymin=AvgBeta-SE, ymax=AvgBeta+SE), width=.2, position=position_dodge(0.9))+
    geom_hline(yintercept=0)+
    labs(x = "Information screen", fill="Future stock performance",y=expression(paste("Average ", beta, "-estimate (centered)")))+

    scale_fill_manual(labels = c("Underperforming", "Overperforming"), values = c("#8D8D8D", "#2070B4"))+

    annotate("text", x = 1, y = 0.06, label ="paste(italic(p), \" = 0.005\")",parse=TRUE,size=6)+ # p-value from t-test above
    annotate("text", x = 2, y = 0.06, label ="paste(italic(p), \" = 0.008\")",parse=TRUE,size=6)+ # p-value from t-test above
    theme_classic()+
    scale_y_continuous(expand = expansion(mult = c(0, 0)),limits = c(-0.07, 0.07),breaks=c(-0.06,-0.04,-0.02,0,0.02,0.04,0.06)) +
    theme(legend.position="bottom", legend.box = "horizontal",text = element_text(size = 28,family="Arial"),
          plot.title = element_text(hjust = 0.5))

 
#1. Open jpeg file
jpeg("NAcc_plot.jpg", width = 1200, height = 600)
#2. Create the plot
plot
#3. Close the file
dev.off()
null device 
          1 

8. Regression analysis: Stock performance inflection

#Create stock performance inflection variable
reg_df$Inflection <- ifelse(reg_df$Rel_m3Y_pos==reg_df$Rel_p1Y_pos, 0, 1)


formula=paste("Inflection~log_CMC+prof.Bilat_NAcc_mask+prof.Bilat_MPFC_mask+prof.Bilat_AIns_mask",sep="")
print(formula)
[1] "Inflection~log_CMC+prof.Bilat_NAcc_mask+prof.Bilat_MPFC_mask+prof.Bilat_AIns_mask"
out_prof_inflection <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_prof_inflection,digits = getOption("jtools-digits", default = 3)))
MODEL INFO:
Observations: 44
Dependent Variable: Inflection
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(4) = 6.035, p = 0.197
Pseudo-R² (Cragg-Uhler) = 0.171
Pseudo-R² (McFadden) = 0.099
AIC = 64.962, BIC = 73.883 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                   1.352   2.142    0.631   0.528
log_CMC                      -0.159   0.248   -0.639   0.523
prof.Bilat_NAcc_mask          6.480   5.684    1.140   0.254
prof.Bilat_MPFC_mask         -9.869   4.736   -2.084   0.037
prof.Bilat_AIns_mask         11.286   7.334    1.539   0.124
------------------------------------------------------------
print("No relationship between MPFC activity at profile screen and inflection:")
[1] "No relationship between MPFC activity at profile screen and inflection:"
formula=paste("Inflection~prof.Bilat_MPFC_mask",sep="")
print(formula)
[1] "Inflection~prof.Bilat_MPFC_mask"
out_prof_mpfc_inflection <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_prof_mpfc_inflection,digits = getOption("jtools-digits", default = 3)))
MODEL INFO:
Observations: 44
Dependent Variable: Inflection
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 0.178, p = 0.673
Pseudo-R² (Cragg-Uhler) = 0.005
Pseudo-R² (McFadden) = 0.003
AIC = 64.819, BIC = 68.387 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                   0.000   0.302    0.000   1.000
prof.Bilat_MPFC_mask         -1.002   2.377   -0.421   0.673
------------------------------------------------------------
formula=paste("Inflection~graph.Bilat_NAcc_mask+graph.Bilat_MPFC_mask+graph.Bilat_AIns_mask",sep="")
print(formula)
[1] "Inflection~graph.Bilat_NAcc_mask+graph.Bilat_MPFC_mask+graph.Bilat_AIns_mask"
out_graph_inflection <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_graph_inflection,digits = getOption("jtools-digits", default = 3)))
MODEL INFO:
Observations: 44
Dependent Variable: Inflection
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(3) = 1.274, p = 0.735
Pseudo-R² (Cragg-Uhler) = 0.038
Pseudo-R² (McFadden) = 0.021
AIC = 67.723, BIC = 74.860 

Standard errors: MLE
-------------------------------------------------------------
                                Est.    S.E.   z val.       p
--------------------------- -------- ------- -------- -------
(Intercept)                    0.001   0.306    0.002   0.999
graph.Bilat_NAcc_mask          2.497   5.860    0.426   0.670
graph.Bilat_MPFC_mask          2.701   3.508    0.770   0.441
graph.Bilat_AIns_mask         -3.421   7.584   -0.451   0.652
-------------------------------------------------------------
formula=paste("Inflection~fund.Bilat_NAcc_mask+fund.Bilat_MPFC_mask+fund.Bilat_AIns_mask",sep="")
print(formula)
[1] "Inflection~fund.Bilat_NAcc_mask+fund.Bilat_MPFC_mask+fund.Bilat_AIns_mask"
out_fund_inflection <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_fund_inflection,digits = getOption("jtools-digits", default = 3)))
MODEL INFO:
Observations: 44
Dependent Variable: Inflection
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(3) = 2.863, p = 0.413
Pseudo-R² (Cragg-Uhler) = 0.084
Pseudo-R² (McFadden) = 0.047
AIC = 66.134, BIC = 73.270 

Standard errors: MLE
-------------------------------------------------------------
                               Est.     S.E.   z val.       p
-------------------------- -------- -------- -------- -------
(Intercept)                   0.001    0.312    0.003   0.998
fund.Bilat_NAcc_mask         -5.686    7.394   -0.769   0.442
fund.Bilat_MPFC_mask         -3.191    3.844   -0.830   0.407
fund.Bilat_AIns_mask         16.939   11.142    1.520   0.128
-------------------------------------------------------------
formula=paste("Inflection~rela.Bilat_NAcc_mask+rela.Bilat_MPFC_mask+rela.Bilat_AIns_mask",sep="")
print(formula)
[1] "Inflection~rela.Bilat_NAcc_mask+rela.Bilat_MPFC_mask+rela.Bilat_AIns_mask"
out_rela_inflection <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_rela_inflection,digits = getOption("jtools-digits", default = 3)))
MODEL INFO:
Observations: 44
Dependent Variable: Inflection
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(3) = 1.350, p = 0.717
Pseudo-R² (Cragg-Uhler) = 0.040
Pseudo-R² (McFadden) = 0.022
AIC = 67.647, BIC = 74.783 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                   0.002   0.306    0.006   0.995
rela.Bilat_NAcc_mask          5.972   7.528    0.793   0.428
rela.Bilat_MPFC_mask         -3.913   4.005   -0.977   0.329
rela.Bilat_AIns_mask          1.866   8.161    0.229   0.819
------------------------------------------------------------
formula=paste("Inflection~news.Bilat_NAcc_mask+news.Bilat_MPFC_mask+news.Bilat_AIns_mask",sep="")
print(formula)
[1] "Inflection~news.Bilat_NAcc_mask+news.Bilat_MPFC_mask+news.Bilat_AIns_mask"
out_news_inflection <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_news_inflection,digits = getOption("jtools-digits", default = 3)))
MODEL INFO:
Observations: 44
Dependent Variable: Inflection
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(3) = 4.423, p = 0.219
Pseudo-R² (Cragg-Uhler) = 0.128
Pseudo-R² (McFadden) = 0.073
AIC = 64.574, BIC = 71.711 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                  -0.003   0.317   -0.008   0.994
news.Bilat_NAcc_mask         10.310   6.769    1.523   0.128
news.Bilat_MPFC_mask         -8.348   4.549   -1.835   0.066
news.Bilat_AIns_mask          2.711   6.771    0.400   0.689
------------------------------------------------------------
print("No relationship between MPFC activity at news screen and inflection:")
[1] "No relationship between MPFC activity at news screen and inflection:"
formula=paste("Inflection~news.Bilat_MPFC_mask",sep="")
print(formula)
[1] "Inflection~news.Bilat_MPFC_mask"
out_news_mpfc_inflection <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_news_mpfc_inflection,digits = getOption("jtools-digits", default = 3)))
MODEL INFO:
Observations: 44
Dependent Variable: Inflection
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 0.615, p = 0.433
Pseudo-R² (Cragg-Uhler) = 0.019
Pseudo-R² (McFadden) = 0.010
AIC = 64.382, BIC = 67.950 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                   0.001   0.304    0.004   0.997
news.Bilat_MPFC_mask         -2.221   2.861   -0.776   0.438
------------------------------------------------------------

9. Regression models: NAcc factor

formula=paste("Rel_p1Y_pos~Factor1",sep="")
print(formula)
[1] "Rel_p1Y_pos~Factor1"
out_factor1 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_factor1,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 7.100, p = 0.008
Pseudo-R² (Cragg-Uhler) = 0.199
Pseudo-R² (McFadden) = 0.116
AIC = 57.897, BIC = 61.465 

Standard errors: MLE
--------------------------------------------------
                     Est.    S.E.   z val.       p
----------------- ------- ------- -------- -------
(Intercept)         0.010   0.327    0.030   0.976
Factor1             0.913   0.382    2.388   0.017
--------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~Factor2",sep="")
print(formula)
[1] "Rel_p1Y_pos~Factor2"
out_factor2 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_factor2,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 0.113, p = 0.737
Pseudo-R² (Cragg-Uhler) = 0.003
Pseudo-R² (McFadden) = 0.002
AIC = 64.884, BIC = 68.452 

Standard errors: MLE
---------------------------------------------------
                      Est.    S.E.   z val.       p
----------------- -------- ------- -------- -------
(Intercept)         -0.000   0.302   -0.000   1.000
Factor2             -0.103   0.307   -0.335   0.737
---------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

10. Regression models: Market, Market + Behavior, Market + Behavior + Brain

formula=paste("Rel_p1Y_pos~log_CMC+Rel_m3Y_pos+f_s+f_ebit+f_ebitmargin+f_roe+f_roic+rv_evs+rv_ebitda+rv_pe+rv_pb+news_incgr",sep="")
print(formula)
[1] "Rel_p1Y_pos~log_CMC+Rel_m3Y_pos+f_s+f_ebit+f_ebitmargin+f_roe+f_roic+rv_evs+rv_ebitda+rv_pe+rv_pb+news_incgr"
out_market <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_market,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(12) = 13.099, p = 0.362
Pseudo-R² (Cragg-Uhler) = 0.343
Pseudo-R² (McFadden) = 0.215
AIC = 73.898, BIC = 97.093 

Standard errors: MLE
----------------------------------------------------
                       Est.    S.E.   z val.       p
------------------ -------- ------- -------- -------
(Intercept)           0.309   0.813    0.380   0.704
log_CMC               0.751   0.766    0.981   0.327
Rel_m3Y_pos           0.194   0.847    0.229   0.819
f_s                  -0.360   0.485   -0.743   0.457
f_ebit               -0.294   0.577   -0.510   0.610
f_ebitmargin         -0.147   0.731   -0.201   0.841
f_roe                -0.408   0.940   -0.434   0.664
f_roic               -1.005   0.833   -1.207   0.228
rv_evs                0.004   0.887    0.004   0.997
rv_ebitda             1.989   1.210    1.644   0.100
rv_pe                -1.225   0.775   -1.581   0.114
rv_pb                 1.252   3.684    0.340   0.734
news_incgr            1.267   1.520    0.834   0.404
----------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~log_CMC+Rel_m3Y_pos+f_s+f_ebit+f_ebitmargin+f_roe+f_roic+rv_evs+rv_ebitda+rv_pe+rv_pb+news_incgr+choice",sep="")
print(formula)
[1] "Rel_p1Y_pos~log_CMC+Rel_m3Y_pos+f_s+f_ebit+f_ebitmargin+f_roe+f_roic+rv_evs+rv_ebitda+rv_pe+rv_pb+news_incgr+choice"
out_market_choice <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_market_choice,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(13) = 14.440, p = 0.344
Pseudo-R² (Cragg-Uhler) = 0.373
Pseudo-R² (McFadden) = 0.237
AIC = 74.557, BIC = 99.535 

Standard errors: MLE
----------------------------------------------------
                       Est.    S.E.   z val.       p
------------------ -------- ------- -------- -------
(Intercept)           0.285   0.789    0.362   0.718
log_CMC               0.864   0.763    1.132   0.258
Rel_m3Y_pos          -0.068   0.896   -0.076   0.939
f_s                  -0.204   0.498   -0.410   0.682
f_ebit               -0.577   0.616   -0.938   0.348
f_ebitmargin         -0.035   0.796   -0.044   0.965
f_roe                -0.370   0.961   -0.386   0.700
f_roic               -1.298   0.971   -1.336   0.182
rv_evs                0.047   0.893    0.053   0.958
rv_ebitda             1.980   1.243    1.593   0.111
rv_pe                -1.256   0.724   -1.735   0.083
rv_pb                 1.032   3.297    0.313   0.754
news_incgr            0.547   1.568    0.349   0.727
choice                0.565   0.500    1.131   0.258
----------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~log_CMC+Rel_m3Y_pos+f_s+f_ebit+f_ebitmargin+f_roe+f_roic+rv_evs+rv_ebitda+rv_pe+rv_pb+news_incgr+choice+Factor1",sep="")
print(formula)
[1] "Rel_p1Y_pos~log_CMC+Rel_m3Y_pos+f_s+f_ebit+f_ebitmargin+f_roe+f_roic+rv_evs+rv_ebitda+rv_pe+rv_pb+news_incgr+choice+Factor1"
out_all <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_all,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(14) = 25.334, p = 0.031
Pseudo-R² (Cragg-Uhler) = 0.584
Pseudo-R² (McFadden) = 0.415
AIC = 65.663, BIC = 92.426 

Standard errors: MLE
----------------------------------------------------
                       Est.    S.E.   z val.       p
------------------ -------- ------- -------- -------
(Intercept)           0.165   0.811    0.204   0.839
log_CMC               1.195   1.082    1.105   0.269
Rel_m3Y_pos           0.357   1.083    0.330   0.742
f_s                   0.934   0.741    1.261   0.207
f_ebit               -1.374   0.920   -1.494   0.135
f_ebitmargin          0.388   1.107    0.350   0.726
f_roe                -1.149   1.577   -0.729   0.466
f_roic               -1.037   1.122   -0.924   0.356
rv_evs                0.986   1.010    0.976   0.329
rv_ebitda             2.539   1.495    1.699   0.089
rv_pe                -1.844   0.911   -2.024   0.043
rv_pb                 0.199   1.176    0.169   0.866
news_incgr            2.326   1.866    1.247   0.212
choice                1.299   0.764    1.699   0.089
Factor1               1.879   0.741    2.534   0.011
----------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

Create Table 3:

coef_names <- c("Current Market Capitalization" = "log_CMC",
                "36M Performance"='Rel_m3Y_pos',
                "Sales" ="f_s", "EBIT" = "f_ebit", "EBIT Margin (%)" = "f_ebitmargin","ROE (%)" = "f_roe","ROIC (%)" = "f_roic",
                "EV/Sales" = "rv_evs","EV/EBITDA" = "rv_ebitda","P/E" = "rv_pe","P/B" = "rv_pb",
               
                "Income growth" = "news_incgr","Prediction" = "choice","NAcc - Profile, Graph" = "Factor1")
# Uncomment to create table
#quick_docx(export_summs(out_market,out_market_choice,out_all, scale = TRUE,coefs = coef_names,error_pos = c("same"),
#             model.names=c("Market","Market + Behavior","Market + Behavior + Brain"),
#             statistics= c(N = "nobs", AIC = "AIC", "Pseudo R2 (McFadden)" = "pseudo.r.squared.mcfadden")),file='Table-3.docx')

Control stock metric: rv_pe

formula=paste("Rel_p1Y_pos~rv_pe",sep="")
print(formula)
[1] "Rel_p1Y_pos~rv_pe"
out_rvpe <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_rvpe,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 0.029, p = 0.866
Pseudo-R² (Cragg-Uhler) = 0.001
Pseudo-R² (McFadden) = 0.000
AIC = 64.968, BIC = 68.537 

Standard errors: MLE
---------------------------------------------------
                      Est.    S.E.   z val.       p
----------------- -------- ------- -------- -------
(Intercept)         -0.000   0.302   -0.000   1.000
rv_pe               -0.052   0.306   -0.169   0.866
---------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

Model comparison:

anova(out_market, out_all, test = "LRT")
Analysis of Deviance Table

Model 1: Rel_p1Y_pos ~ log_CMC + Rel_m3Y_pos + f_s + f_ebit + f_ebitmargin + 
    f_roe + f_roic + rv_evs + rv_ebitda + rv_pe + rv_pb + news_incgr
Model 2: Rel_p1Y_pos ~ log_CMC + Rel_m3Y_pos + f_s + f_ebit + f_ebitmargin + 
    f_roe + f_roic + rv_evs + rv_ebitda + rv_pe + rv_pb + news_incgr + 
    choice + Factor1
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)   
1        31     47.898                        
2        29     35.663  2   12.236 0.002203 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
anova(out_market_choice, out_all, test = "LRT")
Analysis of Deviance Table

Model 1: Rel_p1Y_pos ~ log_CMC + Rel_m3Y_pos + f_s + f_ebit + f_ebitmargin + 
    f_roe + f_roic + rv_evs + rv_ebitda + rv_pe + rv_pb + news_incgr + 
    choice
Model 2: Rel_p1Y_pos ~ log_CMC + Rel_m3Y_pos + f_s + f_ebit + f_ebitmargin + 
    f_roe + f_roic + rv_evs + rv_ebitda + rv_pe + rv_pb + news_incgr + 
    choice + Factor1
  Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
1        30     46.557                          
2        29     35.663  1   10.894 0.0009647 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

11. Prediction analysis

Set input for prediction analysis:

crossval_df = reg_df[, c("Rel_p1Y_pos",
                         "choice",
                         "log_CMC","Rel_m3Y_pos","f_s","f_ebit","f_ebitmargin","f_roe","f_roic","rv_evs","rv_ebitda","rv_pe","rv_pb","news_incgr",
                         "Factor1")]

crossval_df$Rel_m3Y_pos <- as.factor(crossval_df$Rel_m3Y_pos)
crossval_df$Rel_p1Y_pos <- as.factor(crossval_df$Rel_p1Y_pos)

crossval_df

K-fold cross-validation with the caret package:

K-fold: Brain (NAcc)

braindat = crossval_df[,c("Rel_p1Y_pos","Factor1")]
choicedat = crossval_df[,c("Rel_p1Y_pos","choice")]
marketdat = crossval_df[,-c(2,15)]

set.seed(0)

kfold = function(data, nfolds){
folds <- createFolds(factor(data$Rel_p1Y_pos), nfolds, returnTrain = T)

train_model<- trainControl(method="cv", number=nfolds, index = folds, savePredictions = TRUE)

# Model
model <- train(
    Rel_p1Y_pos~ .,
    data = data, 
    method = "glm", # logistic regression
    family = "binomial",
    trControl = train_model)

return(confusionMatrix(model$pred$pred,model$pred$obs,positive="1"))

}

print(kfold(braindat,5))
Confusion Matrix and Statistics

          Reference
Prediction  0  1
         0 16  8
         1  6 14
                                          
               Accuracy : 0.6818          
                 95% CI : (0.5242, 0.8139)
    No Information Rate : 0.5             
    P-Value [Acc > NIR] : 0.01131         
                                          
                  Kappa : 0.3636          
                                          
 Mcnemar's Test P-Value : 0.78927         
                                          
            Sensitivity : 0.6364          
            Specificity : 0.7273          
         Pos Pred Value : 0.7000          
         Neg Pred Value : 0.6667          
             Prevalence : 0.5000          
         Detection Rate : 0.3182          
   Detection Prevalence : 0.4545          
      Balanced Accuracy : 0.6818          
                                          
       'Positive' Class : 1               
                                          

K-fold: Behavior (choice)

print(kfold(choicedat,5))
Confusion Matrix and Statistics

          Reference
Prediction  0  1
         0 10 13
         1 12  9
                                          
               Accuracy : 0.4318          
                 95% CI : (0.2835, 0.5897)
    No Information Rate : 0.5             
    P-Value [Acc > NIR] : 0.8544          
                                          
                  Kappa : -0.1364         
                                          
 Mcnemar's Test P-Value : 1.0000          
                                          
            Sensitivity : 0.4091          
            Specificity : 0.4545          
         Pos Pred Value : 0.4286          
         Neg Pred Value : 0.4348          
             Prevalence : 0.5000          
         Detection Rate : 0.2045          
   Detection Prevalence : 0.4773          
      Balanced Accuracy : 0.4318          
                                          
       'Positive' Class : 1               
                                          

K-fold: Market (Stock metrics)

print(kfold(marketdat,5))
Confusion Matrix and Statistics

          Reference
Prediction  0  1
         0  8 11
         1 14 11
                                          
               Accuracy : 0.4318          
                 95% CI : (0.2835, 0.5897)
    No Information Rate : 0.5             
    P-Value [Acc > NIR] : 0.8544          
                                          
                  Kappa : -0.1364         
                                          
 Mcnemar's Test P-Value : 0.6892          
                                          
            Sensitivity : 0.5000          
            Specificity : 0.3636          
         Pos Pred Value : 0.4400          
         Neg Pred Value : 0.4211          
             Prevalence : 0.5000          
         Detection Rate : 0.2500          
   Detection Prevalence : 0.5682          
      Balanced Accuracy : 0.4318          
                                          
       'Positive' Class : 1               
                                          

Leave-one-out cross-validation analyses:

Leave-one-out: Brain

set.seed(0)
# LOOCV
train_model<- trainControl(method="loocv", savePredictions = TRUE)

# Model
model <- train(
    Rel_p1Y_pos ~ ., 
    data = braindat, 
    method = "glm", # logistic regression
    family = "binomial",
    trControl = train_model)

model #to print model result
Generalized Linear Model 

44 samples
 1 predictor
 2 classes: '0', '1' 

No pre-processing
Resampling: Leave-One-Out Cross-Validation 
Summary of sample sizes: 43, 43, 43, 43, 43, 43, ... 
Resampling results:

  Accuracy   Kappa
  0.6363636  0    
confusionMatrix(model$pred$pred,model$pred$obs,positive="1")
Confusion Matrix and Statistics

          Reference
Prediction  0  1
         0 15  9
         1  7 13
                                          
               Accuracy : 0.6364          
                 95% CI : (0.4777, 0.7759)
    No Information Rate : 0.5             
    P-Value [Acc > NIR] : 0.04807         
                                          
                  Kappa : 0.2727          
                                          
 Mcnemar's Test P-Value : 0.80259         
                                          
            Sensitivity : 0.5909          
            Specificity : 0.6818          
         Pos Pred Value : 0.6500          
         Neg Pred Value : 0.6250          
             Prevalence : 0.5000          
         Detection Rate : 0.2955          
   Detection Prevalence : 0.4545          
      Balanced Accuracy : 0.6364          
                                          
       'Positive' Class : 1               
                                          

Leave-one-out: Behavior (choice)

set.seed(0)
# LOOCV
train_model<- trainControl(method="loocv", savePredictions = TRUE)

# Model
model <- train(
    Rel_p1Y_pos ~ ., 
    data = choicedat, 
    method = "glm", # logistic regression
    family = "binomial",
    trControl = train_model)

model #to print model result
Generalized Linear Model 

44 samples
 1 predictor
 2 classes: '0', '1' 

No pre-processing
Resampling: Leave-One-Out Cross-Validation 
Summary of sample sizes: 43, 43, 43, 43, 43, 43, ... 
Resampling results:

  Accuracy  Kappa
  0.5       0    
confusionMatrix(model$pred$pred,model$pred$obs,positive="1")
Confusion Matrix and Statistics

          Reference
Prediction  0  1
         0 10 10
         1 12 12
                                          
               Accuracy : 0.5             
                 95% CI : (0.3456, 0.6544)
    No Information Rate : 0.5             
    P-Value [Acc > NIR] : 0.5598          
                                          
                  Kappa : 0               
                                          
 Mcnemar's Test P-Value : 0.8312          
                                          
            Sensitivity : 0.5455          
            Specificity : 0.4545          
         Pos Pred Value : 0.5000          
         Neg Pred Value : 0.5000          
             Prevalence : 0.5000          
         Detection Rate : 0.2727          
   Detection Prevalence : 0.5455          
      Balanced Accuracy : 0.5000          
                                          
       'Positive' Class : 1               
                                          

Leave-one-out: Market (Stock metrics)

set.seed(0)
# LOOCV
train_model<- trainControl(method="loocv", savePredictions = TRUE)

# Model
model <- train(
    Rel_p1Y_pos ~ ., 
    data = marketdat, 
    method = "glm", # logistic regression
    family = "binomial",
    trControl = train_model)

model #to print model result
Generalized Linear Model 

44 samples
12 predictors
 2 classes: '0', '1' 

No pre-processing
Resampling: Leave-One-Out Cross-Validation 
Summary of sample sizes: 43, 43, 43, 43, 43, 43, ... 
Resampling results:

  Accuracy   Kappa
  0.4318182  0    
confusionMatrix(model$pred$pred,model$pred$obs,positive="1")
Confusion Matrix and Statistics

          Reference
Prediction  0  1
         0 10 13
         1 12  9
                                          
               Accuracy : 0.4318          
                 95% CI : (0.2835, 0.5897)
    No Information Rate : 0.5             
    P-Value [Acc > NIR] : 0.8544          
                                          
                  Kappa : -0.1364         
                                          
 Mcnemar's Test P-Value : 1.0000          
                                          
            Sensitivity : 0.4091          
            Specificity : 0.4545          
         Pos Pred Value : 0.4286          
         Neg Pred Value : 0.4348          
             Prevalence : 0.5000          
         Detection Rate : 0.2045          
   Detection Prevalence : 0.4773          
      Balanced Accuracy : 0.4318          
                                          
       'Positive' Class : 1               
                                          

S. Supplementary material: Appendix 4

Table S1: Logistic regression model for control regions

formula=paste("Rel_p1Y_pos~prof.Left_PIns_mask+prof.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~prof.Left_PIns_mask+prof.Left_PVis_mask"
out_prof_control <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_prof_control,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(2) = 0.037, p = 0.982
Pseudo-R² (Cragg-Uhler) = 0.001
Pseudo-R² (McFadden) = 0.001
AIC = 66.960, BIC = 72.313 

Standard errors: MLE
-----------------------------------------------------------
                              Est.    S.E.   z val.       p
------------------------- -------- ------- -------- -------
(Intercept)                 -0.000   0.302   -0.000   1.000
prof.Left_PIns_mask         -0.071   0.375   -0.191   0.849
prof.Left_PVis_mask          0.036   0.375    0.097   0.923
-----------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~graph.Left_PIns_mask+graph.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~graph.Left_PIns_mask+graph.Left_PVis_mask"
out_graph_control <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_graph_control,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(2) = 2.846, p = 0.241
Pseudo-R² (Cragg-Uhler) = 0.084
Pseudo-R² (McFadden) = 0.047
AIC = 64.151, BIC = 69.504 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                   0.001   0.311    0.002   0.999
graph.Left_PIns_mask         -0.159   0.412   -0.387   0.699
graph.Left_PVis_mask          0.628   0.429    1.461   0.144
------------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~fund.Left_PIns_mask+fund.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~fund.Left_PIns_mask+fund.Left_PVis_mask"
out_fund_control <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_fund_control,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(2) = 4.368, p = 0.113
Pseudo-R² (Cragg-Uhler) = 0.126
Pseudo-R² (McFadden) = 0.072
AIC = 62.629, BIC = 67.982 

Standard errors: MLE
-----------------------------------------------------------
                              Est.    S.E.   z val.       p
------------------------- -------- ------- -------- -------
(Intercept)                  0.003   0.317    0.011   0.991
fund.Left_PIns_mask         -0.728   0.423   -1.722   0.085
fund.Left_PVis_mask          0.816   0.450    1.813   0.070
-----------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~rela.Left_PIns_mask+rela.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~rela.Left_PIns_mask+rela.Left_PVis_mask"
out_rela_control <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_rela_control,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(2) = 0.533, p = 0.766
Pseudo-R² (Cragg-Uhler) = 0.016
Pseudo-R² (McFadden) = 0.009
AIC = 66.464, BIC = 71.817 

Standard errors: MLE
-----------------------------------------------------------
                              Est.    S.E.   z val.       p
------------------------- -------- ------- -------- -------
(Intercept)                 -0.000   0.303   -0.001   0.999
rela.Left_PIns_mask         -0.104   0.402   -0.259   0.795
rela.Left_PVis_mask          0.278   0.409    0.680   0.497
-----------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~news.Left_PIns_mask+news.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~news.Left_PIns_mask+news.Left_PVis_mask"
out_news_control <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_news_control,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(2) = 0.085, p = 0.958
Pseudo-R² (Cragg-Uhler) = 0.003
Pseudo-R² (McFadden) = 0.001
AIC = 66.912, BIC = 72.264 

Standard errors: MLE
----------------------------------------------------------
                             Est.    S.E.   z val.       p
------------------------- ------- ------- -------- -------
(Intercept)                 0.000   0.302    0.000   1.000
news.Left_PIns_mask         0.019   0.339    0.055   0.956
news.Left_PVis_mask         0.079   0.340    0.234   0.815
----------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
coef_names <- c("Profile - PVis" = "prof.Left_PVis_mask","Profile - PIns" = "prof.Left_PIns_mask",
                "Graph - PVis" = "graph.Left_PVis_mask","Graph - PIns" = "graph.Left_PIns_mask",
                "Fundamentals - PVis" = "fund.Left_PVis_mask","Fundamentals - PIns" = "fund.Left_PIns_mask",
                "Relative Valuation - PVis" = "rela.Left_PVis_mask","Relative Valuation - PIns" = "rela.Left_PIns_mask",
                "News Item - PVis" = "news.Left_PVis_mask","News Item - PIns" = "news.Left_PIns_mask")

# Uncomment to create table
#quick_docx(export_summs(out_prof_control,out_graph_control,out_fund_control,out_rela_control,out_news_control, scale = TRUE,coefs = coef_names,error_pos = c("same"),
#             model.names=c("Company Profile","Price Graph","Fundamentals","Relative Valuation","News Item"),
#             statistics= c(N = "nobs", AIC = "AIC", "Pseudo R2 (McFadden)" = "pseudo.r.squared.mcfadden")), file='Table-S1.docx')

Table S2: Correlation matrix:

prof_data <- reg_df[, c(18,19,20,21,22)]
names(prof_data) <- substring(names(prof_data), 6)

graph_data <- reg_df[, c(8,9,10,11,12)]
names(graph_data) <- substring(names(graph_data), 7)

fund_data <- reg_df[, c(3,4,5,6,7)]
names(fund_data) <- substring(names(fund_data), 6)

rela_data <- reg_df[, c(23,24,25,26,27)]
names(rela_data) <- substring(names(rela_data), 6)

news_data <- reg_df[, c(13,14,15,16,17)]
names(news_data) <- substring(names(news_data), 6)


res_prof <- cor(prof_data)

res_graph <-cor(graph_data)

res_fund <-cor(fund_data)

res_rela <-cor(rela_data)

res_news <-cor(news_data)

cor_matrices <-list(res_prof,res_graph,res_fund,res_rela,res_news)

Reduce("+", cor_matrices) / length(cor_matrices)
                Bilat_MPFC_mask Bilat_AIns_mask Bilat_NAcc_mask Left_PVis_mask Left_PIns_mask
Bilat_MPFC_mask       1.0000000       0.7104264       0.6892672      0.4125912      0.4929137
Bilat_AIns_mask       0.7104264       1.0000000       0.7615776      0.4339454      0.4942590
Bilat_NAcc_mask       0.6892672       0.7615776       1.0000000      0.5142567      0.5206732
Left_PVis_mask        0.4125912       0.4339454       0.5142567      1.0000000      0.5825221
Left_PIns_mask        0.4929137       0.4942590       0.5206732      0.5825221      1.0000000

Table S3: VOIs and Control regions

formula=paste("Rel_p1Y_pos~prof.Bilat_NAcc_mask+prof.Bilat_MPFC_mask+prof.Bilat_AIns_mask+prof.Left_PIns_mask+prof.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~prof.Bilat_NAcc_mask+prof.Bilat_MPFC_mask+prof.Bilat_AIns_mask+prof.Left_PIns_mask+prof.Left_PVis_mask"
out_prof_control2 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_prof_control2,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(5) = 12.224, p = 0.032
Pseudo-R² (Cragg-Uhler) = 0.323
Pseudo-R² (McFadden) = 0.200
AIC = 60.773, BIC = 71.478 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                   0.028   0.352    0.079   0.937
prof.Bilat_NAcc_mask          1.634   0.683    2.393   0.017
prof.Bilat_MPFC_mask          0.186   0.587    0.317   0.751
prof.Bilat_AIns_mask         -0.583   0.576   -1.013   0.311
prof.Left_PIns_mask           0.007   0.452    0.015   0.988
prof.Left_PVis_mask          -0.634   0.478   -1.327   0.185
------------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~graph.Bilat_NAcc_mask+graph.Bilat_MPFC_mask+graph.Bilat_AIns_mask+graph.Left_PIns_mask+graph.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~graph.Bilat_NAcc_mask+graph.Bilat_MPFC_mask+graph.Bilat_AIns_mask+graph.Left_PIns_mask+graph.Left_PVis_mask"
out_graph_control2 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_graph_control2,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(5) = 11.423, p = 0.044
Pseudo-R² (Cragg-Uhler) = 0.305
Pseudo-R² (McFadden) = 0.187
AIC = 61.573, BIC = 72.279 

Standard errors: MLE
-------------------------------------------------------------
                                Est.    S.E.   z val.       p
--------------------------- -------- ------- -------- -------
(Intercept)                   -0.011   0.347   -0.033   0.974
graph.Bilat_NAcc_mask          1.784   0.808    2.208   0.027
graph.Bilat_MPFC_mask         -0.835   0.589   -1.418   0.156
graph.Bilat_AIns_mask         -0.222   0.730   -0.304   0.761
graph.Left_PIns_mask          -0.249   0.467   -0.535   0.593
graph.Left_PVis_mask           0.258   0.522    0.494   0.621
-------------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~fund.Bilat_NAcc_mask+fund.Bilat_MPFC_mask+fund.Bilat_AIns_mask+fund.Left_PIns_mask+fund.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~fund.Bilat_NAcc_mask+fund.Bilat_MPFC_mask+fund.Bilat_AIns_mask+fund.Left_PIns_mask+fund.Left_PVis_mask"
out_fund_control2 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_fund_control2,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(5) = 12.780, p = 0.026
Pseudo-R² (Cragg-Uhler) = 0.336
Pseudo-R² (McFadden) = 0.210
AIC = 60.217, BIC = 70.922 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                  -0.043   0.353   -0.123   0.902
fund.Bilat_NAcc_mask          2.114   0.880    2.403   0.016
fund.Bilat_MPFC_mask          0.401   0.560    0.716   0.474
fund.Bilat_AIns_mask         -1.521   0.849   -1.792   0.073
fund.Left_PIns_mask          -1.333   0.554   -2.406   0.016
fund.Left_PVis_mask           0.689   0.492    1.399   0.162
------------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~rela.Bilat_NAcc_mask+rela.Bilat_MPFC_mask+rela.Bilat_AIns_mask+rela.Left_PIns_mask+rela.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~rela.Bilat_NAcc_mask+rela.Bilat_MPFC_mask+rela.Bilat_AIns_mask+rela.Left_PIns_mask+rela.Left_PVis_mask"
out_rela_control2 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_rela_control2,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(5) = 5.191, p = 0.393
Pseudo-R² (Cragg-Uhler) = 0.148
Pseudo-R² (McFadden) = 0.085
AIC = 67.806, BIC = 78.511 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                  -0.007   0.320   -0.023   0.982
rela.Bilat_NAcc_mask          0.949   0.603    1.575   0.115
rela.Bilat_MPFC_mask          0.648   0.566    1.144   0.253
rela.Bilat_AIns_mask         -0.888   0.574   -1.545   0.122
rela.Left_PIns_mask          -0.625   0.565   -1.106   0.269
rela.Left_PVis_mask           0.172   0.427    0.404   0.687
------------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~news.Bilat_NAcc_mask+news.Bilat_MPFC_mask+news.Bilat_AIns_mask+news.Left_PIns_mask+news.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~news.Bilat_NAcc_mask+news.Bilat_MPFC_mask+news.Bilat_AIns_mask+news.Left_PIns_mask+news.Left_PVis_mask"
out_news_control2 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_news_control2,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(5) = 3.080, p = 0.688
Pseudo-R² (Cragg-Uhler) = 0.090
Pseudo-R² (McFadden) = 0.050
AIC = 69.917, BIC = 80.622 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                  -0.003   0.312   -0.008   0.994
news.Bilat_NAcc_mask         -0.345   0.505   -0.683   0.495
news.Bilat_MPFC_mask          0.415   0.498    0.835   0.404
news.Bilat_AIns_mask          0.573   0.472    1.214   0.225
news.Left_PIns_mask          -0.310   0.437   -0.710   0.478
news.Left_PVis_mask           0.018   0.368    0.049   0.961
------------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
coef_names <- c("Profile - PVis" = "prof.Left_PVis_mask","Profile - PIns" = "prof.Left_PIns_mask","Profile - NAcc" = "prof.Bilat_NAcc_mask", "Profile - MPFC" = "prof.Bilat_MPFC_mask", "Profile - AIns" = "prof.Bilat_AIns_mask",
                "Graph - PVis" = "graph.Left_PVis_mask","Graph - PIns" = "graph.Left_PIns_mask","Graph - NAcc" = "graph.Bilat_NAcc_mask", "Graph - MPFC" = "graph.Bilat_MPFC_mask", "Graph - AIns" = "graph.Bilat_AIns_mask",
                "Fundamentals - PVis" = "fund.Left_PVis_mask","Fundamentals - PIns" = "fund.Left_PIns_mask","Fundamentals - NAcc" = "fund.Bilat_NAcc_mask", "Fundamentals - MPFC" = "fund.Bilat_MPFC_mask", "Fundamentals - AIns" = "fund.Bilat_AIns_mask",
                "Relative Valuation - PVis" = "rela.Left_PVis_mask","Relative Valuation - PIns" = "rela.Left_PIns_mask","Relative Valuation - NAcc" = "rela.Bilat_NAcc_mask", "Relative Valuation - MPFC" = "rela.Bilat_MPFC_mask", "Relative Valuation - AIns" = "rela.Bilat_AIns_mask",
                "News item - PVis" = "news.Left_PVis_mask","News item - PIns" = "news.Left_PIns_mask","News item - NAcc" = "news.Bilat_NAcc_mask", "News item - MPFC" = "news.Bilat_MPFC_mask", "News item - AIns" = "news.Bilat_AIns_mask" )

# Uncomment to create table
#quick_docx(export_summs(out_prof_control2,out_graph_control2,out_fund_control2,out_rela_control2,out_news_control2, scale = TRUE,coefs = coef_names,error_pos = c("same"),
#             model.names=c("Company Profile","Price Graph","Fundamentals","Relative Valuation","News Item"),
#             statistics= c(N = "nobs", AIC = "AIC", "Pseudo R2 (McFadden)" = "pseudo.r.squared.mcfadden")), file='Table-S3.docx')

Table S4: VOIs, Control regions and stock metrics:

formula=paste("Rel_p1Y_pos~log_CMC+prof.Bilat_NAcc_mask+prof.Bilat_MPFC_mask+prof.Bilat_AIns_mask+prof.Left_PIns_mask+prof.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~log_CMC+prof.Bilat_NAcc_mask+prof.Bilat_MPFC_mask+prof.Bilat_AIns_mask+prof.Left_PIns_mask+prof.Left_PVis_mask"
out_prof_control3 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_prof_control3,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(6) = 12.484, p = 0.052
Pseudo-R² (Cragg-Uhler) = 0.329
Pseudo-R² (McFadden) = 0.205
AIC = 62.513, BIC = 75.002 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                   0.026   0.353    0.074   0.941
log_CMC                       0.190   0.372    0.510   0.610
prof.Bilat_NAcc_mask          1.601   0.686    2.334   0.020
prof.Bilat_MPFC_mask          0.265   0.611    0.433   0.665
prof.Bilat_AIns_mask         -0.630   0.588   -1.071   0.284
prof.Left_PIns_mask          -0.017   0.461   -0.038   0.970
prof.Left_PVis_mask          -0.567   0.497   -1.139   0.255
------------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~Rel_m3Y_pos+graph.Bilat_NAcc_mask+graph.Bilat_MPFC_mask+graph.Bilat_AIns_mask+graph.Left_PIns_mask+graph.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~Rel_m3Y_pos+graph.Bilat_NAcc_mask+graph.Bilat_MPFC_mask+graph.Bilat_AIns_mask+graph.Left_PIns_mask+graph.Left_PVis_mask"
out_graph_control3 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_graph_control3,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(6) = 13.089, p = 0.042
Pseudo-R² (Cragg-Uhler) = 0.343
Pseudo-R² (McFadden) = 0.215
AIC = 61.908, BIC = 74.398 

Standard errors: MLE
-------------------------------------------------------------
                                Est.    S.E.   z val.       p
--------------------------- -------- ------- -------- -------
(Intercept)                   -0.679   0.642   -1.057   0.291
Rel_m3Y_pos                    1.069   0.855    1.250   0.211
graph.Bilat_NAcc_mask          2.153   0.900    2.391   0.017
graph.Bilat_MPFC_mask         -0.757   0.599   -1.265   0.206
graph.Bilat_AIns_mask         -0.342   0.762   -0.449   0.653
graph.Left_PIns_mask          -0.275   0.472   -0.583   0.560
graph.Left_PVis_mask           0.225   0.530    0.424   0.672
-------------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~f_s+f_ebit+f_ebitmargin+f_roe+f_roic+fund.Bilat_NAcc_mask+fund.Bilat_MPFC_mask+fund.Bilat_AIns_mask+fund.Left_PIns_mask+fund.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~f_s+f_ebit+f_ebitmargin+f_roe+f_roic+fund.Bilat_NAcc_mask+fund.Bilat_MPFC_mask+fund.Bilat_AIns_mask+fund.Left_PIns_mask+fund.Left_PVis_mask"
out_fund_control3 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_fund_control3,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(10) = 14.925, p = 0.135
Pseudo-R² (Cragg-Uhler) = 0.384
Pseudo-R² (McFadden) = 0.245
AIC = 68.072, BIC = 87.698 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                   0.024   0.370    0.066   0.947
f_s                          -0.294   0.506   -0.581   0.561
f_ebit                        0.179   0.451    0.398   0.690
f_ebitmargin                  0.767   0.600    1.278   0.201
f_roe                        -0.604   0.872   -0.693   0.488
f_roic                        0.103   0.634    0.163   0.871
fund.Bilat_NAcc_mask          2.183   0.946    2.308   0.021
fund.Bilat_MPFC_mask          0.393   0.597    0.659   0.510
fund.Bilat_AIns_mask         -1.651   0.926   -1.782   0.075
fund.Left_PIns_mask          -1.620   0.669   -2.420   0.016
fund.Left_PVis_mask           0.893   0.549    1.626   0.104
------------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~rv_evs+rv_ebitda+rv_pe+rv_pb+rela.Bilat_NAcc_mask+rela.Bilat_MPFC_mask+rela.Bilat_AIns_mask+rela.Left_PIns_mask+rela.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~rv_evs+rv_ebitda+rv_pe+rv_pb+rela.Bilat_NAcc_mask+rela.Bilat_MPFC_mask+rela.Bilat_AIns_mask+rela.Left_PIns_mask+rela.Left_PVis_mask"
out_rela_control3 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_rela_control3,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(9) = 10.149, p = 0.339
Pseudo-R² (Cragg-Uhler) = 0.275
Pseudo-R² (McFadden) = 0.166
AIC = 70.848, BIC = 88.690 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                   0.102   0.437    0.233   0.816
rv_evs                        0.262   0.647    0.406   0.685
rv_ebitda                     1.199   0.747    1.605   0.108
rv_pe                        -0.729   0.699   -1.043   0.297
rv_pb                         0.703   1.769    0.397   0.691
rela.Bilat_NAcc_mask          0.865   0.613    1.410   0.159
rela.Bilat_MPFC_mask          0.832   0.610    1.363   0.173
rela.Bilat_AIns_mask         -0.852   0.588   -1.448   0.148
rela.Left_PIns_mask          -0.799   0.632   -1.265   0.206
rela.Left_PVis_mask           0.069   0.494    0.140   0.888
------------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
formula=paste("Rel_p1Y_pos~news_incgr+news.Bilat_NAcc_mask+news.Bilat_MPFC_mask+news.Bilat_AIns_mask+news.Left_PIns_mask+news.Left_PVis_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~news_incgr+news.Bilat_NAcc_mask+news.Bilat_MPFC_mask+news.Bilat_AIns_mask+news.Left_PIns_mask+news.Left_PVis_mask"
out_news_control3 <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_news_control3,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(6) = 4.569, p = 0.600
Pseudo-R² (Cragg-Uhler) = 0.131
Pseudo-R² (McFadden) = 0.075
AIC = 70.428, BIC = 82.918 

Standard errors: MLE
------------------------------------------------------------
                               Est.    S.E.   z val.       p
-------------------------- -------- ------- -------- -------
(Intercept)                   0.159   0.400    0.399   0.690
news_incgr                    1.241   1.523    0.815   0.415
news.Bilat_NAcc_mask         -0.280   0.505   -0.555   0.579
news.Bilat_MPFC_mask          0.359   0.531    0.677   0.498
news.Bilat_AIns_mask          0.449   0.505    0.888   0.375
news.Left_PIns_mask          -0.297   0.442   -0.671   0.502
news.Left_PVis_mask           0.002   0.375    0.006   0.995
------------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.
coef_names <- c("Current Market Capitalization" = "log_CMC","Profile - PVis" = "prof.Left_PVis_mask","Profile - PIns" = "prof.Left_PIns_mask","Profile - NAcc" = "prof.Bilat_NAcc_mask", "Profile - MPFC" = "prof.Bilat_MPFC_mask", "Profile - AIns" = "prof.Bilat_AIns_mask",
                "36M Performance"='Rel_m3Y_pos',"Graph - PVis" = "graph.Left_PVis_mask","Graph - PIns" = "graph.Left_PIns_mask","Graph - NAcc" = "graph.Bilat_NAcc_mask", "Graph - MPFC" = "graph.Bilat_MPFC_mask", "Graph - AIns" = "graph.Bilat_AIns_mask",
                "Sales" ="f_s", "EBIT" = "f_ebit", "EBIT Margin (%)" = "f_ebitmargin","ROE (%)" = "f_roe","ROIC (%)" = "f_roic",
                "Fundamentals - PVis" = "fund.Left_PVis_mask","Fundamentals - PIns" = "fund.Left_PIns_mask","Fundamentals - NAcc" = "fund.Bilat_NAcc_mask", "Fundamentals - MPFC" = "fund.Bilat_MPFC_mask", "Fundamentals - AIns" = "fund.Bilat_AIns_mask",
                "EV/Sales" = "rv_evs","EV/EBITDA" = "rv_ebitda","P/E" = "rv_pe","P/B" = "rv_pb",
                "Relative Valuation - PVis" = "rela.Left_PVis_mask","Relative Valuation - PIns" = "rela.Left_PIns_mask","Relative Valuation - NAcc" = "rela.Bilat_NAcc_mask", "Relative Valuation - MPFC" = "rela.Bilat_MPFC_mask", "Relative Valuation - AIns" = "rela.Bilat_AIns_mask",
                "Income growth" = "news_incgr", "News item - PVis" = "news.Left_PVis_mask","News item - PIns" = "news.Left_PIns_mask","News item - NAcc" = "news.Bilat_NAcc_mask", "News item - MPFC" = "news.Bilat_MPFC_mask", "News item - AIns" = "news.Bilat_AIns_mask"
                )

# Uncomment to create table
#quick_docx(export_summs(out_prof_control3,out_graph_control3,out_fund_control3,out_rela_control3,out_news_control3, scale = TRUE,coefs = coef_names,error_pos = c("same"),
#             model.names=c("Company Profile","Price Graph","Fundamentals","Relative Valuation","News Item"),
#             statistics= c(N = "nobs", AIC = "AIC", "Pseudo R2 (McFadden)" = "pseudo.r.squared.mcfadden")), file='Table-S4.docx')

Testing if there is a true relationship between PIns activity at fundamentals screen and future stock performance:

formula=paste("Rel_p1Y_pos~fund.Left_PIns_mask",sep="")
print(formula)
[1] "Rel_p1Y_pos~fund.Left_PIns_mask"
out_fund_pins <- glm(formula,data=reg_df,family = binomial(link = logit))

print(summ(out_fund_pins,digits = getOption("jtools-digits", default = 3),scale=TRUE))
MODEL INFO:
Observations: 44
Dependent Variable: Rel_p1Y_pos
Type: Generalized linear model
  Family: binomial 
  Link function: logit 

MODEL FIT:
χ²(1) = 0.535, p = 0.464
Pseudo-R² (Cragg-Uhler) = 0.016
Pseudo-R² (McFadden) = 0.009
AIC = 64.462, BIC = 68.030 

Standard errors: MLE
-----------------------------------------------------------
                              Est.    S.E.   z val.       p
------------------------- -------- ------- -------- -------
(Intercept)                  0.000   0.303    0.000   1.000
fund.Left_PIns_mask         -0.225   0.310   -0.726   0.468
-----------------------------------------------------------

Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

Compare models:

anova(out_prof, out_prof_control3, test = "LRT")
Analysis of Deviance Table

Model 1: Rel_p1Y_pos ~ log_CMC + prof.Bilat_NAcc_mask + prof.Bilat_MPFC_mask + 
    prof.Bilat_AIns_mask
Model 2: Rel_p1Y_pos ~ log_CMC + prof.Bilat_NAcc_mask + prof.Bilat_MPFC_mask + 
    prof.Bilat_AIns_mask + prof.Left_PIns_mask + prof.Left_PVis_mask
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1        39     50.454                     
2        37     48.513  2   1.9408   0.3789
anova(out_graph, out_graph_control3, test = "LRT")
Analysis of Deviance Table

Model 1: Rel_p1Y_pos ~ Rel_m3Y_pos + graph.Bilat_NAcc_mask + graph.Bilat_MPFC_mask + 
    graph.Bilat_AIns_mask
Model 2: Rel_p1Y_pos ~ Rel_m3Y_pos + graph.Bilat_NAcc_mask + graph.Bilat_MPFC_mask + 
    graph.Bilat_AIns_mask + graph.Left_PIns_mask + graph.Left_PVis_mask
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1        39     48.281                     
2        37     47.908  2  0.37255     0.83
anova(out_fund, out_fund_control3, test = "LRT")
Analysis of Deviance Table

Model 1: Rel_p1Y_pos ~ f_s + f_ebit + f_ebitmargin + f_roe + f_roic + 
    fund.Bilat_NAcc_mask + fund.Bilat_MPFC_mask + fund.Bilat_AIns_mask
Model 2: Rel_p1Y_pos ~ f_s + f_ebit + f_ebitmargin + f_roe + f_roic + 
    fund.Bilat_NAcc_mask + fund.Bilat_MPFC_mask + fund.Bilat_AIns_mask + 
    fund.Left_PIns_mask + fund.Left_PVis_mask
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
1        35     54.013                       
2        33     46.072  2   7.9408  0.01887 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
anova(out_rela, out_rela_control3, test = "LRT")
Analysis of Deviance Table

Model 1: Rel_p1Y_pos ~ rv_evs + rv_ebitda + rv_pe + rv_pb + rela.Bilat_NAcc_mask + 
    rela.Bilat_MPFC_mask + rela.Bilat_AIns_mask
Model 2: Rel_p1Y_pos ~ rv_evs + rv_ebitda + rv_pe + rv_pb + rela.Bilat_NAcc_mask + 
    rela.Bilat_MPFC_mask + rela.Bilat_AIns_mask + rela.Left_PIns_mask + 
    rela.Left_PVis_mask
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1        36     52.646                     
2        34     50.848  2   1.7978    0.407
anova(out_news, out_news_control3, test = "LRT")
Analysis of Deviance Table

Model 1: Rel_p1Y_pos ~ news_incgr + news.Bilat_NAcc_mask + news.Bilat_MPFC_mask + 
    news.Bilat_AIns_mask
Model 2: Rel_p1Y_pos ~ news_incgr + news.Bilat_NAcc_mask + news.Bilat_MPFC_mask + 
    news.Bilat_AIns_mask + news.Left_PIns_mask + news.Left_PVis_mask
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1        39     56.896                     
2        37     56.428  2  0.46731   0.7916
LS0tCnRpdGxlOiAiU1BQVCBhbmFseXNlcyAtIENvcHkgZm9yIEZpZ3NoYXJlIgpkYXRlOiAiRmVicnVhcnkgMjAyNCIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKLS0tCiMgMS4gR2VuZXJhbCBkaXNjcmlwdGlvbgoKVGhpcyBub3RlYm9vayBjb250YWlucyB0aGUgc3RhdGlzdGljYWwgYW5hbHlzZXMgZm9yIHRoZSBTUFBUIGRhdGFzZXQuCgpJdCB0YWtlcyBhcyBpbnB1dCB0aGUgZm9sbG93aW5nIGZpbGVzOgoKKiBTdG9ja19tZXRyaWNzLnhsc3g6IEFuIEV4Y2VsIHRhYmxlIGNvbnRhaW5pbmcgdGhlIHN0b2NrIG1ldHJpY3MgdGhhdCBhcmUgZGlzcGxheWVkIG9uIHRoZSBpbmZvcm1hdGlvbiBzY3JlZW5zIG9mIHRoZSBpbnZlc3RtZW50IGNhc2VzLiAKKiBTdXJ2ZXlfc2NvcmVzLmNzdjogQSAuY3N2IHRhYmxlIGNvbnRhaW5pbmcgcGFydGljaXBhbnRz4oCZIHJlc3BvbnNlcyB0byB0aGUgc3VydmV5IGF0IHRoZSBlbmQgb2YgdGhlIGV4cGVyaW1lbnQuCiogTk5JUGFuc3dlcnMudHh0IGZpbGVzOiBUaGVzZSBmaWxlcyBhcmUgYXJjaGl2ZWQgaW4gVGFza19hbnN3ZXJzLnppcC4gVGhlIHRleHQgZmlsZXMgY29udGFpbiB0aGUgcHJlZGljdGlvbnMgYW5kIGNvbmZpZGVuY2UgcmF0aW5ncy4KKiBEZl9iZXRhc19yZXBvLmNzdjogQSAuY3N2IHRhYmxlIGNvbnRhaW5pbmcgYmV0YS1lc3RpbWF0ZXMgKGJyYWluIGFjdGl2aXR5KSBwZXIgVk9JLCBwZXIgcGFydGljaXBhbnQsIHBlciBpbmZvcm1hdGlvbiBzY3JlZW4uIAoKCkZvciBhZGRpdGlvbmFsIGRldGFpbHMgd2UgcmVmZXIgdG8gdGhlIFJFQURNRS5kb2N4IGZpbGUgb2YgdGhlIHJlcG9zaXRvcnksIGFuZCB0aGUgcGFwZXIuCgojIDIuIEltcG9ydCBwYWNrYWdlcyBhbmQgbG9hZCBkYXRhCgpJbXBvcnQgcGFja2FnZXM6CmBgYHtyfQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeSh0aWJibGUpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KGp0b29scykKbGlicmFyeShwc3ljaCkKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHJzdGF0aXgpCmxpYnJhcnkoaHV4dGFibGUpCmxpYnJhcnkoY2FyZXQpCmBgYAoKTG9hZCBiZXRhIGVzdGltYXRlczoKYGBge3J9CiMgTG9hZCBicmFpbiBkYXRhCmRmX2JldGFzIDwtIHJlYWRfY3N2KCJicmFpbi9kZl9iZXRhc19yZXBvLmNzdiIsY29sX3R5cGVzID0gY29scygpKQoKIyBTdWJqZWN0cyBhcyBmYWN0b3IKZGZfYmV0YXMkSUQgPC0gZmFjdG9yKGRmX2JldGFzJElEKQoKIyBHZXQgYmxvY2sgKyBjYXNlIGZyb20gdHJpYWwgc3RyaW5nCmRmX2JldGFzIDwtIGFkZF9jb2x1bW4oZGZfYmV0YXMsIGJsb2NrID1zYXBwbHkoc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKGRmX2JldGFzJGNhc2UpLCAiXFxDYXNlIiksIGBbYCwgMSkpCmRmX2JldGFzJGNhc2UgPC0gc2FwcGx5KHN0cnNwbGl0KGFzLmNoYXJhY3RlcihkZl9iZXRhcyRjYXNlKSwgIlxcQ2FzZSIpLCBgW2AsIDIpCgoKIyBSZW1vdmUgY2FzZSA1MSBiZWNhdXNlIG9mIGFuIGVycm9yIHdpdGggc3RpbXVsdXMgcHJlc2VudGF0aW9uIGZvciB0aGlzIGNhc2UKcmVtb3ZlX2Nhc2UgPC0gYyg1MSkKZGZfYmV0YXMgPC0gZGZfYmV0YXNbIWRmX2JldGFzJGNhc2UgJWluJSByZW1vdmVfY2FzZSwgXQpgYGAKCkNlbnRlciBlc3RpbWF0ZXMgcGVyIHBhcnRpY2lwYW50IHBlciBWT0k6CmBgYHtyfQpjZW50ZXIgPC0gZnVuY3Rpb24oeCwgbmEucm0gPSBUUlVFKSAoeCAtIG1lYW4oeCwgbmEucm0gPSBuYS5ybSkpCgpkZl9iZXRhc19jZW50ZXJlZCA8LSBkZl9iZXRhcyAlPiUgCiAgZ3JvdXBfYnkoSUQpICU+JSAKICAgbXV0YXRlX2F0KHZhcnMobWF0Y2hlcygnbWFzaycpKSwgY2VudGVyKQpgYGAKCkFkZCBhbnN3ZXJzIChjYXNlLCBjaG9pY2UsIHN0YXJzIC0gY29uZmlkZW5jZSByYXRpbmcpOgpgYGB7cn0KIyBMb2FkIGFuZCBjb25jYXRlbmF0ZSBkYXRhCmZmIDwtIGxpc3QuZmlsZXMoInRhc2stYW5zd2VycyIsIHBhdHRlcm4gPSAiTk5JUGFuc3dlcnMudHh0IiwgcmVjdXJzaXZlID0gVFJVRSwgZnVsbC5uYW1lcyA9IFRSVUUpCnN0YXJfZGF0YSA8LSBkby5jYWxsKHJiaW5kLCBsYXBwbHkoZmYsIHJlYWQuZGVsaW0pKQoKIyBBZGQgc3ViamVjdCBudW1iZXIKc3ViX25yIDwtIHJlcCgyOjM3LCBlYWNoPTQ1KQpzdWJfbnIgPC0gc3ByaW50ZigiJTAyZCIsIHN1Yl9ucikKSUQgPC0gcGFzdGUoInN1Yi0iLHN1Yl9uciwgc2VwPSIiKQpzdGFyX2RhdGEgPC0gY2JpbmQoSUQsc3Rhcl9kYXRhKQoKIyBSZW5hbWUgYW5kIGZpeCBjb2x1bW5zCm5hbWVzKHN0YXJfZGF0YSlbbmFtZXMoc3Rhcl9kYXRhKSA9PSAiQ2FzZSJdIDwtICJjYXNlIgpzdGFyX2RhdGEgPC0gc3Rhcl9kYXRhW2MoIklEIiwiY2FzZSIsIlN0YXJzIildCnN0YXJfZGF0YSA8LSBzdGFyX2RhdGEgJT4lIG11dGF0ZShjYXNlID0gYXMuY2hhcmFjdGVyKGNhc2UpKQoKIyBDb21iaW5lIGRhdGEgZnJhbWVzCmFsbF9kYXRhX2RmIDwtIHN0YXJfZGF0YSAlPiUgcmlnaHRfam9pbihkZl9iZXRhc19jZW50ZXJlZCwgYnk9YygiSUQiLCJjYXNlIikpCmFsbF9kYXRhX2RmIDwtIGFsbF9kYXRhX2RmICU+JSByZWxvY2F0ZShTdGFycywgLmFmdGVyPWxhc3RfY29sKCkpCmBgYAoKQWRkIHN0b2NrIG1ldHJpY3M6CgpgYGB7cn0KIyBBZGQgY2FzZSBpbmZvClN0b2NrX21ldHJpY3MgPC0gcmVhZF9leGNlbCgiU3RvY2tfbWV0cmljcy54bHN4IikKCiMgQ29udmVydCBjYXNlIHRvIGZhY3RvcgpTdG9ja19tZXRyaWNzJGNhc2UgPC0gZmFjdG9yKFN0b2NrX21ldHJpY3MkY2FzZSkKCiMgTWF0Y2ggYnkgY2FzZQphbGxfZGF0YV9kZiA8LSBjYmluZChhbGxfZGF0YV9kZiwgU3RvY2tfbWV0cmljc1ttYXRjaChhbGxfZGF0YV9kZiRjYXNlLCBTdG9ja19tZXRyaWNzJGNhc2UpLF0pCmFsbF9kYXRhX2RmIDwtIGFsbF9kYXRhX2RmWywgIWR1cGxpY2F0ZWQoY29sbmFtZXMoYWxsX2RhdGFfZGYpKV0KCiMgTG9nLXRyYW5zZm9ybSBDTUMgYmVjYXVzZSBpdCBpcyBoaWdobHkgc2tld2VkCmFsbF9kYXRhX2RmJGxvZ19DTUMgPC0gbG9nKGFsbF9kYXRhX2RmJENNQykKCiMgQWRkIGNvcnJlY3QKYWxsX2RhdGFfZGYkY29yX3AxWSA8LSBpZmVsc2UoYWxsX2RhdGFfZGYkY2hvaWNlPT1hbGxfZGF0YV9kZiRSZWxfcDFZX3BvcywgMSwgMCkgI0NvcnJlY3QgcHJlZGljdGlvbiBhdCAxLXllYXIgaW4gdGhlIGZ1dHVyZSAoMSBpZiBlcXVhbCwgMCBpZiBub3QpCmBgYAoKCkFuZCBTdXJ2ZXkgc2NvcmVzOgooVGhpcyBhbHNvIHJlbW92ZXMgc3ViamVjdHMgMTcsMTggLSB0aGVzZSBzdWJqZWN0cyBhcmUgcmVtb3ZlZCBiZWNhdXNlIG9mIGV4Y2Vzc2l2ZSBoZWFkLW1vdGlvbikKCmBgYHtyfQojIEltcG9ydCBkYXRhCnN1cnZleV9zY29yZXMgPC0gcmVhZF9jc3YoIlN1cnZleV9zY29yZXMuY3N2Iixjb2xfdHlwZXMgPSBjb2xzKCkpCgojIEpvaW4gdG8gYWxsX2RhdGEKYWxsX2RhdGFfZGYgPC0gbWVyZ2UoYWxsX2RhdGFfZGYsc3VydmV5X3Njb3JlcywgYnk9IklEIikKYGBgCgpNYWtlIG5hbWVzIHVuaXF1ZQpgYGB7cn0KbmFtZXMoYWxsX2RhdGFfZGYpPC1tYWtlLm5hbWVzKG5hbWVzKGFsbF9kYXRhX2RmKSx1bmlxdWUgPSBUUlVFKQpgYGAKCgoKIyAzLiBEZXNjcmlwdGl2ZSBhbmFseXNlczogUGFydGljaXBhbnRzCgpDYWxjdWxhdGUgYXZlcmFnZSBwZXIgcGFydGljaXBhbnQKCmBgYHtyfQpTdWJfbWVhbiA8LSBhbGxfZGF0YV9kZiAlPiUKICBncm91cF9ieShJRCkgJT4lCiAgc3VtbWFyaXNlX2F0KHZhcnMoLWNhc2UsLWJsb2NrLC10cmlhbCksIGxpc3QofiBtZWFuKC4sIG5hLnJtPVRSVUUpKSkKCiNTdWJfbWVhbgpgYGAKCkNhbGN1bGF0ZSBhZ2UgYW5kIHllYXJzIG9mIGV4cGVyaWVuY2U6CgpgYGB7cn0KeD1TdWJfbWVhbls1MDo1M10Kc2FwcGx5KHgsIGZ1bmN0aW9uKHgpIGMoICJTdGFuZCBkZXYiID0gc2QoeCksIAogICAgICAgICAgICAgICAgICAgICAgICAgIk1lYW4iPSBtZWFuKHgsbmEucm09VFJVRSksCiAgICAgICAgICAgICAgICAgICAgICAgICAibiIgPSBsZW5ndGgoeCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTWVkaWFuIiA9IG1lZGlhbih4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb2VmZm9mVmFyaWF0aW9uIiA9IHNkKHgpL21lYW4oeCxuYS5ybT1UUlVFKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJNaW5pbXVtIiA9IG1pbih4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICJNYXhpbXVuIiA9IG1heCh4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICJVcHBlciBRdWFudGlsZSIgPSBxdWFudGlsZSh4LDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkxvd2VyUXVhcnRpbGUiID0gcXVhbnRpbGUoeCwwKQogICAgICAgICAgICAgICAgICAgICkKKQpgYGAKCkNhbGN1bGF0ZSBzZWxmLXJlcG9ydGVkIGRpZmZpY3VsdHkvIHJlYWxpc20gYW5kIHRlc3QgaWYgYWJvdmUgbWlkLXBvaW50IG9mIHNjYWxlOgoKYGBge3J9Cng9U3ViX21lYW5bNTU6NTZdCnNhcHBseSh4LCBmdW5jdGlvbih4KSBjKCAiU3RhbmQgZGV2IiA9IHNkKHgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICJNZWFuIj0gbWVhbih4LG5hLnJtPVRSVUUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIm4iID0gbGVuZ3RoKHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIk1lZGlhbiIgPSBtZWRpYW4oeCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29lZmZvZlZhcmlhdGlvbiIgPSBzZCh4KS9tZWFuKHgsbmEucm09VFJVRSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTWluaW11bSIgPSBtaW4oeCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTWF4aW11biIgPSBtYXgoeCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiVXBwZXIgUXVhbnRpbGUiID0gcXVhbnRpbGUoeCwxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJMb3dlclF1YXJ0aWxlIiA9IHF1YW50aWxlKHgsMCkKICAgICAgICAgICAgICAgICAgICApCikKYGBgCgpgYGB7cn0KdC50ZXN0KFN1Yl9tZWFuJHJlYWxpc3RpYywgbXU9NCwgYWx0ZXJuYXRpdmU9InR3by5zaWRlZCIpCmBgYApgYGB7cn0KdC50ZXN0KFN1Yl9tZWFuJGRpZmZpY3VsdCwgbXU9NCwgYWx0ZXJuYXRpdmU9InR3by5zaWRlZCIpCmBgYAoKU2VsZi1yZXBvcnRlZCBpbXBvcnRhbmNlIG9mIGluZm9ybWF0aW9uIHNjcmVlbnM6CgpgYGB7cn0KeD1TdWJfbWVhbls2MTo2NV0Kc2FwcGx5KHgsIGZ1bmN0aW9uKHgpIGMoICJTdGFuZCBkZXYiID0gc2QoeCksIAogICAgICAgICAgICAgICAgICAgICAgICAgIk1lYW4iPSBtZWFuKHgsbmEucm09VFJVRSksCiAgICAgICAgICAgICAgICAgICAgICAgICAibiIgPSBsZW5ndGgoeCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTWVkaWFuIiA9IG1lZGlhbih4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb2VmZm9mVmFyaWF0aW9uIiA9IHNkKHgpL21lYW4oeCxuYS5ybT1UUlVFKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJNaW5pbXVtIiA9IG1pbih4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICJNYXhpbXVuIiA9IG1heCh4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICJVcHBlciBRdWFudGlsZSIgPSBxdWFudGlsZSh4LDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkxvd2VyUXVhcnRpbGUiID0gcXVhbnRpbGUoeCwwKQogICAgICAgICAgICAgICAgICAgICkKKQpgYGAKUmVzaGFwZSBkYXRhIGFuZCBjb25kdWN0IHBhaXJ3aXNlIHRlc3RzOgoKYGBge3J9Cng9U3ViX21lYW5bYygxLDYxOjY1KV0KaW1wb3J0YW5jZV9zY29yZXMgPC0gcGl2b3RfbG9uZ2VyKHgsIGNvbHM9LUlELG5hbWVzX3RvPSdTY3JlZW4nLHZhbHVlc190bz0nSW1wb3J0YW5jZScpCgpwd2MgPC0gaW1wb3J0YW5jZV9zY29yZXMgJT4lCiAgcGFpcndpc2VfdF90ZXN0KAogICAgSW1wb3J0YW5jZSB+IFNjcmVlbiwgcGFpcmVkID0gVFJVRSwKICAgIHAuYWRqdXN0Lm1ldGhvZCA9ICJib25mZXJyb25pIgogICAgKQpwd2MKYGBgCgojIDQuIERlc2NyaXB0aXZlIGFuYWx5c2VzOiBJbnZlc3RtZW50IGNhc2VzCgpDYWxjdWxhdGUgYXZlcmFnZSBwZXIgY2FzZSAKCmBgYHtyfQpDYXNlX21lYW4gPC0gYWxsX2RhdGFfZGYgJT4lCiAgZ3JvdXBfYnkoY2FzZSkgJT4lCiAgc3VtbWFyaXNlX2F0KHZhcnMoLUlELC1ibG9jaywtdHJpYWwpLCBmdW5zKG1lYW4oLiwgbmEucm09VFJVRSkpKQoKQ2FzZV9tZWFuCmBgYAoKQXZlcmFnZSBwcmVkaWN0aW9uIGFuZCBjb3JyZWN0IHByZWRpY3Rpb24KCiogY2hvaWNlID0gSW52ZXN0b3IncyBwcmVkaWN0aW9uICh1bmRlcnBlcmZvcm1pbmcvb3ZlcnBlcmZvcm1pbmcsIGNvZGVkIGFzIDAvMSkKKiBjb3JyZWN0ID0gSXMgdGhlIHByZWRpY3Rpb24gY29ycmVjdCBvciBub3Q/IChpbmNvcnJlY3QvY29ycmVjdCwgY29kZWQgYXMgMC8xKQoKCgpgYGB7cn0KeD1DYXNlX21lYW5bYygzMiw0OSldCnNhcHBseSh4LCBmdW5jdGlvbih4KSBjKCAiU3RhbmQgZGV2IiA9IHNkKHgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICJNZWFuIj0gbWVhbih4LG5hLnJtPVRSVUUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIm4iID0gbGVuZ3RoKHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIk1lZGlhbiIgPSBtZWRpYW4oeCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29lZmZvZlZhcmlhdGlvbiIgPSBzZCh4KS9tZWFuKHgsbmEucm09VFJVRSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTWluaW11bSIgPSBtaW4oeCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTWF4aW11biIgPSBtYXgoeCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiVXBwZXIgUXVhbnRpbGUiID0gcXVhbnRpbGUoeCwxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJMb3dlclF1YXJ0aWxlIiA9IHF1YW50aWxlKHgsMCkKICAgICAgICAgICAgICAgICAgICApCikKYGBgCgojIDUuIFN0YXRpc3RpY2FsIGFuYWx5c2VzOiBCZWhhdmlvciAKCkxvZ2lzdGljIHJlZ3Jlc3Npb246IHByZWRpY3Rpb25zIHRvIGZ1dHVyZSBtYXJrZXQgcGVyZm9ybWFuY2UKClJlbF9wMVlfcG9zID0gUmVsYXRpdmUgcGVyZm9ybWFuY2UgMSB5ZWFyIGluIHRoZSBmdXR1cmUgKHVuZGVycGVyZm9ybWluZy9vdmVycGVyZm9ybWluZywgY29kZWQgYXMgMC8xKQoKYGBge3J9CmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfmNob2ljZSIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfY2hvaWNlIDwtIGdsbShmb3JtdWxhLGRhdGE9Q2FzZV9tZWFuLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9jaG9pY2UsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDMpLCBzY2FsZT1UUlVFKSkKYGBgCgpDb3JyZWxhdGlvbiBiZXR3ZWVuIHNlbGYtcmVwb3J0ZWQgY29uZmlkZW5jZSAoU3RhcnMpIGFuZCBwcmVkaWN0aW9uIGFjY3VyYWN5CgpgYGB7cn0KY29yLnRlc3QoQ2FzZV9tZWFuJFN0YXJzLCBDYXNlX21lYW4kY29yX3AxWSkKYGBgCgojIDYuIEZhY3RvciBhbmFseXNpcyAtIEJyYWluIGFjdGl2aXR5CgpTZWxlY3QgY29sdW1uczoKCmBgYHtyfQpuYWNjIDwtIENhc2VfbWVhblssIGMoNCw5LDE0LDE5LDI0KV0KS01PKHI9Y29yKG5hY2MpKQpgYGAKClBvc2l0aXZlIGNvcnJlbGF0aW9uIGFjY3Jvc3MgaW5mb3JtYXRpb24gc2NyZWVuczoKCmBgYHtyfQptZWRpYW4oY29yKG5hY2MpKQpgYGAKCkZhY3RvciBhbmFseXNpczoKCmBgYHtyfQpmaXQgPC0gZmFjdGFuYWwobmFjYywgMixyb3RhdGlvbiA9ICJwcm9tYXgiLCBzY29yZXM9J3JlZ3Jlc3Npb24nKQoKcHJpbnQoZml0LCBkaWdpdHM9MywgY3V0b2ZmPTAuMywgc29ydD1UUlVFKQpgYGAKCkFkZCBmYWN0b3Igc2NvcmVzLCBjcmVhdGluZyBkZiBmb3IgcmVncmVzc2lvbjoKCmBgYHtyfQpOQWNjX2ZhY3Rvcl9zY29yZXMgPC0gZGF0YS5mcmFtZShmaXQkc2NvcmVzKQpyZWdfZGYgPC0gbWVyZ2UoQ2FzZV9tZWFuLE5BY2NfZmFjdG9yX3Njb3JlcyxieT0icm93Lm5hbWVzIixhbGwueD1UUlVFKQpgYGAKCiMgNy4gUmVncmVzc2lvbiBhbmFseXNpczogSW5mb3JtYXRpb24gc2NyZWVucwoKUmVncmVzc2lvbiBhbmFseXNpcyBwZXIgaW5mb3JtYXRpb24gc2NyZWVuIChmb3IgVGFibGUgMik6CgpgYGB7cn0KZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+bG9nX0NNQytwcm9mLkJpbGF0X05BY2NfbWFzaytwcm9mLkJpbGF0X01QRkNfbWFzaytwcm9mLkJpbGF0X0FJbnNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfcHJvZiA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfcHJvZixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMiksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35SZWxfbTNZX3BvcytncmFwaC5CaWxhdF9OQWNjX21hc2srZ3JhcGguQmlsYXRfTVBGQ19tYXNrK2dyYXBoLkJpbGF0X0FJbnNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfZ3JhcGggPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X2dyYXBoLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAyKSxzY2FsZT1UUlVFKSkKCmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfmZfcytmX2ViaXQrZl9lYml0bWFyZ2luK2Zfcm9lK2Zfcm9pYytmdW5kLkJpbGF0X05BY2NfbWFzaytmdW5kLkJpbGF0X01QRkNfbWFzaytmdW5kLkJpbGF0X0FJbnNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfZnVuZCA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfZnVuZCxkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMiksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35ydl9ldnMrcnZfZWJpdGRhK3J2X3BlK3J2X3BiK3JlbGEuQmlsYXRfTkFjY19tYXNrK3JlbGEuQmlsYXRfTVBGQ19tYXNrK3JlbGEuQmlsYXRfQUluc19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9yZWxhIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9yZWxhLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAyKSxzY2FsZT1UUlVFKSkKCmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfm5ld3NfaW5jZ3IrbmV3cy5CaWxhdF9OQWNjX21hc2srbmV3cy5CaWxhdF9NUEZDX21hc2srbmV3cy5CaWxhdF9BSW5zX21hc2siLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X25ld3MgPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X25ld3MsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDIpLHNjYWxlPVRSVUUpKQoKYGBgCgpPdXRwdXQgdGFibGU6CgpgYGB7cn0KY29lZl9uYW1lcyA8LSBjKCJDdXJyZW50IE1hcmtldCBDYXBpdGFsaXphdGlvbiIgPSAibG9nX0NNQyIsICJQcm9maWxlIC0gTmFjYyIgPSAicHJvZi5CaWxhdF9OQWNjX21hc2siLCAiUHJvZmlsZSAtIE1QRkMiID0gInByb2YuQmlsYXRfTVBGQ19tYXNrIiwgIlByb2ZpbGUgLSBBSW5zIiA9ICJwcm9mLkJpbGF0X0FJbnNfbWFzayIsCiAgICAgICAgICAgICAgICAiMzZNIFBlcmZvcm1hbmNlIj0nUmVsX20zWV9wb3MnLCAiR3JhcGggLSBOYWNjIiA9ICJncmFwaC5CaWxhdF9OQWNjX21hc2siLCAiR3JhcGggLSBNUEZDIiA9ICJncmFwaC5CaWxhdF9NUEZDX21hc2siLCAiR3JhcGggLSBBSW5zIiA9ICJncmFwaC5CaWxhdF9BSW5zX21hc2siLAogICAgICAgICAgICAgICAgIlNhbGVzIiA9ImZfcyIsICJFQklUIiA9ICJmX2ViaXQiLCAiRUJJVCBNYXJnaW4gKCUpIiA9ICJmX2ViaXRtYXJnaW4iLCJST0UgKCUpIiA9ICJmX3JvZSIsIlJPSUMgKCUpIiA9ICJmX3JvaWMiLAogICAgICAgICAgICAgICAgIkZ1bmRhbWVudGFscyAtIE5hY2MiID0gImZ1bmQuQmlsYXRfTkFjY19tYXNrIiwgIkZ1bmRhbWVudGFscyAtIE1QRkMiID0gImZ1bmQuQmlsYXRfTVBGQ19tYXNrIiwgIkZ1bmRhbWVudGFscyAtIEFJbnMiID0gImZ1bmQuQmlsYXRfQUluc19tYXNrIiwKICAgICAgICAgICAgICAgICJFVi9TYWxlcyIgPSAicnZfZXZzIiwiRVYvRUJJVERBIiA9ICJydl9lYml0ZGEiLCJQL0UiID0gInJ2X3BlIiwiUC9CIiA9ICJydl9wYiIsCiAgICAgICAgICAgICAgICAiUmVsYXRpdmUgVmFsdWF0aW9uIC0gTmFjYyIgPSAicmVsYS5CaWxhdF9OQWNjX21hc2siLCAiUmVsYXRpdmUgVmFsdWF0aW9uIC0gTVBGQyIgPSAicmVsYS5CaWxhdF9NUEZDX21hc2siLCAiUmVsYXRpdmUgVmFsdWF0aW9uIC0gQUlucyIgPSAicmVsYS5CaWxhdF9BSW5zX21hc2siLAogICAgICAgICAgICAgICAgIkluY29tZSBncm93dGgiID0gIm5ld3NfaW5jZ3IiLCJOZXdzIGl0ZW0gLSBOYWNjIiA9ICJuZXdzLkJpbGF0X05BY2NfbWFzayIsICJOZXdzIGl0ZW0gLSBNUEZDIiA9ICJuZXdzLkJpbGF0X01QRkNfbWFzayIsICJOZXdzIGl0ZW0gLSBBSW5zIiA9ICJuZXdzLkJpbGF0X0FJbnNfbWFzayIgKQoKIyBVbmNvbW1lbnQgdG8gY3JlYXRlIHRhYmxlCiMgcXVpY2tfZG9jeChleHBvcnRfc3VtbXMob3V0X3Byb2Ysb3V0X2dyYXBoLG91dF9mdW5kLG91dF9yZWxhLG91dF9uZXdzLCBzY2FsZSA9IFRSVUUsY29lZnMgPSBjb2VmX25hbWVzLGVycm9yX3BvcyA9IGMoInNhbWUiKSwKIyAgICAgICAgICAgICAgbW9kZWwubmFtZXM9YygiQ29tcGFueSBQcm9maWxlIiwiUHJpY2UgR3JhcGgiLCJGdW5kYW1lbnRhbHMiLCJSZWxhdGl2ZSBWYWx1YXRpb24iLCJOZXdzIEl0ZW0iKSwKIyAgICAgICAgICAgICAgc3RhdGlzdGljcz0gYyhOID0gIm5vYnMiLCBBSUMgPSAiQUlDIiwgIlBzZXVkbyBSMiAoTWNGYWRkZW4pIiA9ICJwc2V1ZG8uci5zcXVhcmVkLm1jZmFkZGVuIikpLCBmaWxlPSdUYWJsZS0yLmRvY3gnKQpgYGAKCk9ubHkgbmV1cmFsIHByZWRpY3RvcnM6CgpgYGB7cn0KZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+cHJvZi5CaWxhdF9OQWNjX21hc2srcHJvZi5CaWxhdF9NUEZDX21hc2srcHJvZi5CaWxhdF9BSW5zX21hc2siLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X3Byb2ZfbmV1cmFsIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9wcm9mX25ldXJhbCxkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMiksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35ncmFwaC5CaWxhdF9OQWNjX21hc2srZ3JhcGguQmlsYXRfTVBGQ19tYXNrK2dyYXBoLkJpbGF0X0FJbnNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfZ3JhcGhfbmV1cmFsIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9ncmFwaF9uZXVyYWwsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDIpLHNjYWxlPVRSVUUpKQoKZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+ZnVuZC5CaWxhdF9OQWNjX21hc2srZnVuZC5CaWxhdF9NUEZDX21hc2srZnVuZC5CaWxhdF9BSW5zX21hc2siLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X2Z1bmRfbmV1cmFsIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9mdW5kX25ldXJhbCxkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMiksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35yZWxhLkJpbGF0X05BY2NfbWFzaytyZWxhLkJpbGF0X01QRkNfbWFzaytyZWxhLkJpbGF0X0FJbnNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfcmVsYV9uZXVyYWwgPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X3JlbGFfbmV1cmFsLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAyKSxzY2FsZT1UUlVFKSkKCmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfm5ld3MuQmlsYXRfTkFjY19tYXNrK25ld3MuQmlsYXRfTVBGQ19tYXNrK25ld3MuQmlsYXRfQUluc19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9uZXdzX25ldXJhbCA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfbmV3c19uZXVyYWwsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDIpLHNjYWxlPVRSVUUpKQoKYGBgCgoKUmVkdWNlZCBtb2RlbHMgd2l0aCBvbmx5IE5BY2MgcHJlZGljdG9ycyAod2l0aG91dCBNUEZDIGFuZCBBSW5zKSBhbmQgc3RvY2sgbWV0cmljcyBmb3IgZWFjaCBzY3JlZW46CgpgYGB7cn0KZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+bG9nX0NNQytwcm9mLkJpbGF0X05BY2NfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfcHJvZl9OQWNjIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9wcm9mX05BY2MsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDIpLHNjYWxlPVRSVUUpKQoKZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+UmVsX20zWV9wb3MrZ3JhcGguQmlsYXRfTkFjY19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9ncmFwaF9OQWNjIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9ncmFwaF9OQWNjLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAyKSxzY2FsZT1UUlVFKSkKCmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfmZfcytmX2ViaXQrZl9lYml0bWFyZ2luK2Zfcm9lK2Zfcm9pYytmdW5kLkJpbGF0X05BY2NfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfZnVuZF9OQWNjIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9mdW5kX05BY2MsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDIpLHNjYWxlPVRSVUUpKQoKZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+cnZfZXZzK3J2X2ViaXRkYStydl9wZStydl9wYityZWxhLkJpbGF0X05BY2NfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfcmVsYV9OQWNjIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9yZWxhX05BY2MsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDIpLHNjYWxlPVRSVUUpKQoKZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+bmV3c19pbmNncituZXdzLkJpbGF0X05BY2NfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfbmV3c19OQWNjIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9uZXdzX05BY2MsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDIpLHNjYWxlPVRSVUUpKQoKYGBgCgoKUmVkdWNlZCBtb2RlbHMgd2l0aCBvbmx5IE5BY2MgcHJlZGljdG9ycyAod2l0aG91dCBNUEZDIGFuZCBBSW5zKSBhbmQgd2l0aG91dCBzdG9jayBtZXRyaWNzIGZvciBlYWNoIHNjcmVlbjoKCmBgYHtyfQpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35wcm9mLkJpbGF0X05BY2NfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfcHJvZl9OQWNjMiA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfcHJvZl9OQWNjMixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMiksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35ncmFwaC5CaWxhdF9OQWNjX21hc2siLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X2dyYXBoX05BY2MyIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9ncmFwaF9OQWNjMixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMiksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35mdW5kLkJpbGF0X05BY2NfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfZnVuZF9OQWNjMiA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfZnVuZF9OQWNjMixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMiksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35yZWxhLkJpbGF0X05BY2NfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfcmVsYV9OQWNjMiA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfcmVsYV9OQWNjMixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMiksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35uZXdzLkJpbGF0X05BY2NfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfbmV3c19OQWNjMiA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfbmV3c19OQWNjMixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMiksc2NhbGU9VFJVRSkpCgpgYGAKCgpULXRlc3RzIGZvciBOQWNjIGFjdGl2aXR5ICh1bmRlcnBlcmZvcm1pbmcvb3ZlcnBlcmZvcm1pbmcpCgpgYGB7cn0KdC50ZXN0KHByb2YuQmlsYXRfTkFjY19tYXNrflJlbF9wMVlfcG9zLCBkYXRhPXJlZ19kZix2YXIuZXF1YWw9VFJVRSkKCnQudGVzdChncmFwaC5CaWxhdF9OQWNjX21hc2t+UmVsX3AxWV9wb3MsIGRhdGE9cmVnX2RmLHZhci5lcXVhbD1UUlVFKQoKdC50ZXN0KGZ1bmQuQmlsYXRfTkFjY19tYXNrflJlbF9wMVlfcG9zLCBkYXRhPXJlZ19kZix2YXIuZXF1YWw9VFJVRSkKCnQudGVzdChyZWxhLkJpbGF0X05BY2NfbWFza35SZWxfcDFZX3BvcywgZGF0YT1yZWdfZGYsdmFyLmVxdWFsPVRSVUUpCgp0LnRlc3QobmV3cy5CaWxhdF9OQWNjX21hc2t+UmVsX3AxWV9wb3MsIGRhdGE9cmVnX2RmLHZhci5lcXVhbD1UUlVFKQpgYGAKCiMgNy4gQ3JlYXRlIE5BY2MgcGxvdAoKQ3JlYXRlIGRhdGEgZnJhbWUgZm9yIE5BY2MgcGxvdAoKYGBge3J9CnN0ZCA8LSBmdW5jdGlvbih4KSBzZCh4KS9zcXJ0KGxlbmd0aCh4KSkKCng9Q2FzZV9tZWFuW2MoMTksOSw0LDI0LDE0LDM1KV0KCkF2Z0JldGFfZ3JvdXAgPSB4ICU+JSBncm91cF9ieShQZXJmb3JtYW5jZSA9IFJlbF9wMVlfcG9zKSAlPiUKICBzdW1tYXJpc2UoIkNvbXBhbnkgUHJvZmlsZSIgPSBtZWFuKHByb2YuQmlsYXRfTkFjY19tYXNrKSwgCiAgICAgICAgICAgICJQcmljZSBHcmFwaCIgPSBtZWFuKGdyYXBoLkJpbGF0X05BY2NfbWFzayksCiAgICAgICAgICAgICJGdW5kYW1lbnRhbHMiID0gbWVhbihmdW5kLkJpbGF0X05BY2NfbWFzayksCiAgICAgICAgICAgICJSZWxhdGl2ZSBWYWx1YXRpb24iID0gbWVhbihyZWxhLkJpbGF0X05BY2NfbWFzayksCiAgICAgICAgICAgICJOZXdzIEl0ZW0iID0gbWVhbihuZXdzLkJpbGF0X05BY2NfbWFzaykpCgpTRV9ncm91cCA9IHggJT4lIGdyb3VwX2J5KFBlcmZvcm1hbmNlID0gUmVsX3AxWV9wb3MpICU+JQogIHN1bW1hcmlzZSgiQ29tcGFueSBQcm9maWxlIiA9IHN0ZChwcm9mLkJpbGF0X05BY2NfbWFzayksIAogICAgICAgICAgICAiUHJpY2UgR3JhcGgiID0gc3RkKGdyYXBoLkJpbGF0X05BY2NfbWFzayksCiAgICAgICAgICAgICJGdW5kYW1lbnRhbHMiID0gc3RkKGZ1bmQuQmlsYXRfTkFjY19tYXNrKSwKICAgICAgICAgICAgIlJlbGF0aXZlIFZhbHVhdGlvbiIgPSBzdGQocmVsYS5CaWxhdF9OQWNjX21hc2spLAogICAgICAgICAgICAiTmV3cyBJdGVtIiA9IHN0ZChuZXdzLkJpbGF0X05BY2NfbWFzaykpCgojIE1ha2UgQXZlcmFnZSBkYXRhZnJhbWUKQXZnQmV0YT1BdmdCZXRhX2dyb3VwCkF2Z0JldGEgPC0gcGl2b3RfbG9uZ2VyKEF2Z0JldGEsIGNvbHM9LVBlcmZvcm1hbmNlLG5hbWVzX3RvPSdTY3JlZW4nLHZhbHVlc190bz0nQXZnQmV0YScpCgojIE1ha2UgU0UgZGF0YWZyYW1lClNFPVNFX2dyb3VwClNFIDwtIHBpdm90X2xvbmdlcihTRSwgY29scz0tUGVyZm9ybWFuY2UsbmFtZXNfdG89J1NjcmVlbicsdmFsdWVzX3RvPSdTRScpCgojIENvbWJpbmUgQXZlcmFnZSBhbmQgU0UKTkFjY3Bsb3RfZGYgPC0gQXZnQmV0YSAlPiUgcmlnaHRfam9pbihTRSwgYnk9YygiUGVyZm9ybWFuY2UiLCJTY3JlZW4iKSkKCiNOQWNjcGxvdF9kZgogICAgICAgICAgICAKYGBgCgpDcmVhdGUgTkFjY3Bsb3QKCmBgYHtyfQpOQWNjcGxvdCA9IE5BY2NwbG90X2RmCgpOQWNjcGxvdCRQZXJmb3JtYW5jZSA8LSBmYWN0b3IoTkFjY3Bsb3QkUGVyZm9ybWFuY2UpCk5BY2NwbG90JFNjcmVlbiA8LSBmYWN0b3IoTkFjY3Bsb3QkU2NyZWVuLCBsZXZlbHM9dW5pcXVlKE5BY2NwbG90JFNjcmVlbiksIG9yZGVyZWQ9VFJVRSkKCgpwbG90IDwtIGdncGxvdChOQWNjcGxvdCwgYWVzKHg9U2NyZWVuLCB5PUF2Z0JldGEsIGZpbGw9UGVyZm9ybWFuY2UpKSArCiAgICBnZW9tX2JhcihzdGF0PSdpZGVudGl0eScsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHBhZGRpbmcgPSAwKSkgKwogICAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1BdmdCZXRhLVNFLCB5bWF4PUF2Z0JldGErU0UpLCB3aWR0aD0uMiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMC45KSkrCiAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MCkrCiAgICBsYWJzKHggPSAiSW5mb3JtYXRpb24gc2NyZWVuIiwgZmlsbD0iRnV0dXJlIHN0b2NrIHBlcmZvcm1hbmNlIix5PWV4cHJlc3Npb24ocGFzdGUoIkF2ZXJhZ2UgIiwgYmV0YSwgIi1lc3RpbWF0ZSAoY2VudGVyZWQpIikpKSsKCiAgICBzY2FsZV9maWxsX21hbnVhbChsYWJlbHMgPSBjKCJVbmRlcnBlcmZvcm1pbmciLCAiT3ZlcnBlcmZvcm1pbmciKSwgdmFsdWVzID0gYygiIzhEOEQ4RCIsICIjMjA3MEI0IikpKwoKICAgIGFubm90YXRlKCJ0ZXh0IiwgeCA9IDEsIHkgPSAwLjA2LCBsYWJlbCA9InBhc3RlKGl0YWxpYyhwKSwgXCIgPSAwLjAwNVwiKSIscGFyc2U9VFJVRSxzaXplPTYpKyAjIHAtdmFsdWUgZnJvbSB0LXRlc3QgYWJvdmUKICAgIGFubm90YXRlKCJ0ZXh0IiwgeCA9IDIsIHkgPSAwLjA2LCBsYWJlbCA9InBhc3RlKGl0YWxpYyhwKSwgXCIgPSAwLjAwOFwiKSIscGFyc2U9VFJVRSxzaXplPTYpKyAjIHAtdmFsdWUgZnJvbSB0LXRlc3QgYWJvdmUKICAgIHRoZW1lX2NsYXNzaWMoKSsKICAgIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBleHBhbnNpb24obXVsdCA9IGMoMCwgMCkpLGxpbWl0cyA9IGMoLTAuMDcsIDAuMDcpLGJyZWFrcz1jKC0wLjA2LC0wLjA0LC0wLjAyLDAsMC4wMiwwLjA0LDAuMDYpKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIsIGxlZ2VuZC5ib3ggPSAiaG9yaXpvbnRhbCIsdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgsZmFtaWx5PSJBcmlhbCIpLAogICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCgogCiMxLiBPcGVuIGpwZWcgZmlsZQpqcGVnKCJOQWNjX3Bsb3QuanBnIiwgd2lkdGggPSAxMjAwLCBoZWlnaHQgPSA2MDApCiMyLiBDcmVhdGUgdGhlIHBsb3QKcGxvdAojMy4gQ2xvc2UgdGhlIGZpbGUKZGV2Lm9mZigpCmBgYAoKCiMgOC4gUmVncmVzc2lvbiBhbmFseXNpczogU3RvY2sgcGVyZm9ybWFuY2UgaW5mbGVjdGlvbgoKYGBge3J9CiNDcmVhdGUgc3RvY2sgcGVyZm9ybWFuY2UgaW5mbGVjdGlvbiB2YXJpYWJsZQpyZWdfZGYkSW5mbGVjdGlvbiA8LSBpZmVsc2UocmVnX2RmJFJlbF9tM1lfcG9zPT1yZWdfZGYkUmVsX3AxWV9wb3MsIDAsIDEpCgoKZm9ybXVsYT1wYXN0ZSgiSW5mbGVjdGlvbn5sb2dfQ01DK3Byb2YuQmlsYXRfTkFjY19tYXNrK3Byb2YuQmlsYXRfTVBGQ19tYXNrK3Byb2YuQmlsYXRfQUluc19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9wcm9mX2luZmxlY3Rpb24gPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X3Byb2ZfaW5mbGVjdGlvbixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMykpKQoKcHJpbnQoIk5vIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIE1QRkMgYWN0aXZpdHkgYXQgcHJvZmlsZSBzY3JlZW4gYW5kIGluZmxlY3Rpb246IikKCmZvcm11bGE9cGFzdGUoIkluZmxlY3Rpb25+cHJvZi5CaWxhdF9NUEZDX21hc2siLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X3Byb2ZfbXBmY19pbmZsZWN0aW9uIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9wcm9mX21wZmNfaW5mbGVjdGlvbixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMykpKQoKZm9ybXVsYT1wYXN0ZSgiSW5mbGVjdGlvbn5ncmFwaC5CaWxhdF9OQWNjX21hc2srZ3JhcGguQmlsYXRfTVBGQ19tYXNrK2dyYXBoLkJpbGF0X0FJbnNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfZ3JhcGhfaW5mbGVjdGlvbiA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfZ3JhcGhfaW5mbGVjdGlvbixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMykpKQoKZm9ybXVsYT1wYXN0ZSgiSW5mbGVjdGlvbn5mdW5kLkJpbGF0X05BY2NfbWFzaytmdW5kLkJpbGF0X01QRkNfbWFzaytmdW5kLkJpbGF0X0FJbnNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfZnVuZF9pbmZsZWN0aW9uIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9mdW5kX2luZmxlY3Rpb24sZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDMpKSkKCmZvcm11bGE9cGFzdGUoIkluZmxlY3Rpb25+cmVsYS5CaWxhdF9OQWNjX21hc2srcmVsYS5CaWxhdF9NUEZDX21hc2srcmVsYS5CaWxhdF9BSW5zX21hc2siLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X3JlbGFfaW5mbGVjdGlvbiA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfcmVsYV9pbmZsZWN0aW9uLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAzKSkpCgpmb3JtdWxhPXBhc3RlKCJJbmZsZWN0aW9ufm5ld3MuQmlsYXRfTkFjY19tYXNrK25ld3MuQmlsYXRfTVBGQ19tYXNrK25ld3MuQmlsYXRfQUluc19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9uZXdzX2luZmxlY3Rpb24gPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X25ld3NfaW5mbGVjdGlvbixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMykpKQoKcHJpbnQoIk5vIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIE1QRkMgYWN0aXZpdHkgYXQgbmV3cyBzY3JlZW4gYW5kIGluZmxlY3Rpb246IikKCmZvcm11bGE9cGFzdGUoIkluZmxlY3Rpb25+bmV3cy5CaWxhdF9NUEZDX21hc2siLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X25ld3NfbXBmY19pbmZsZWN0aW9uIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9uZXdzX21wZmNfaW5mbGVjdGlvbixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMykpKQoKYGBgCgojIDkuIFJlZ3Jlc3Npb24gbW9kZWxzOiBOQWNjIGZhY3RvcgoKYGBge3J9CmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfkZhY3RvcjEiLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X2ZhY3RvcjEgPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X2ZhY3RvcjEsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDMpLHNjYWxlPVRSVUUpKQoKZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+RmFjdG9yMiIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfZmFjdG9yMiA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfZmFjdG9yMixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMyksc2NhbGU9VFJVRSkpCmBgYAoKCiMgMTAuIFJlZ3Jlc3Npb24gbW9kZWxzOiBNYXJrZXQsIE1hcmtldCArIEJlaGF2aW9yLCBNYXJrZXQgKyBCZWhhdmlvciArIEJyYWluCgpgYGB7cn0KZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+bG9nX0NNQytSZWxfbTNZX3BvcytmX3MrZl9lYml0K2ZfZWJpdG1hcmdpbitmX3JvZStmX3JvaWMrcnZfZXZzK3J2X2ViaXRkYStydl9wZStydl9wYituZXdzX2luY2dyIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9tYXJrZXQgPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X21hcmtldCxkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMyksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35sb2dfQ01DK1JlbF9tM1lfcG9zK2ZfcytmX2ViaXQrZl9lYml0bWFyZ2luK2Zfcm9lK2Zfcm9pYytydl9ldnMrcnZfZWJpdGRhK3J2X3BlK3J2X3BiK25ld3NfaW5jZ3IrY2hvaWNlIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9tYXJrZXRfY2hvaWNlIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9tYXJrZXRfY2hvaWNlLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAzKSxzY2FsZT1UUlVFKSkKCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35sb2dfQ01DK1JlbF9tM1lfcG9zK2ZfcytmX2ViaXQrZl9lYml0bWFyZ2luK2Zfcm9lK2Zfcm9pYytydl9ldnMrcnZfZWJpdGRhK3J2X3BlK3J2X3BiK25ld3NfaW5jZ3IrY2hvaWNlK0ZhY3RvcjEiLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X2FsbCA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfYWxsLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAzKSxzY2FsZT1UUlVFKSkKYGBgCgpDcmVhdGUgVGFibGUgMzoKCmBgYHtyfQpjb2VmX25hbWVzIDwtIGMoIkN1cnJlbnQgTWFya2V0IENhcGl0YWxpemF0aW9uIiA9ICJsb2dfQ01DIiwKICAgICAgICAgICAgICAgICIzNk0gUGVyZm9ybWFuY2UiPSdSZWxfbTNZX3BvcycsCiAgICAgICAgICAgICAgICAiU2FsZXMiID0iZl9zIiwgIkVCSVQiID0gImZfZWJpdCIsICJFQklUIE1hcmdpbiAoJSkiID0gImZfZWJpdG1hcmdpbiIsIlJPRSAoJSkiID0gImZfcm9lIiwiUk9JQyAoJSkiID0gImZfcm9pYyIsCiAgICAgICAgICAgICAgICAiRVYvU2FsZXMiID0gInJ2X2V2cyIsIkVWL0VCSVREQSIgPSAicnZfZWJpdGRhIiwiUC9FIiA9ICJydl9wZSIsIlAvQiIgPSAicnZfcGIiLAogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICJJbmNvbWUgZ3Jvd3RoIiA9ICJuZXdzX2luY2dyIiwiUHJlZGljdGlvbiIgPSAiY2hvaWNlIiwiTkFjYyAtIFByb2ZpbGUsIEdyYXBoIiA9ICJGYWN0b3IxIikKIyBVbmNvbW1lbnQgdG8gY3JlYXRlIHRhYmxlCiNxdWlja19kb2N4KGV4cG9ydF9zdW1tcyhvdXRfbWFya2V0LG91dF9tYXJrZXRfY2hvaWNlLG91dF9hbGwsIHNjYWxlID0gVFJVRSxjb2VmcyA9IGNvZWZfbmFtZXMsZXJyb3JfcG9zID0gYygic2FtZSIpLAojICAgICAgICAgICAgIG1vZGVsLm5hbWVzPWMoIk1hcmtldCIsIk1hcmtldCArIEJlaGF2aW9yIiwiTWFya2V0ICsgQmVoYXZpb3IgKyBCcmFpbiIpLAojICAgICAgICAgICAgIHN0YXRpc3RpY3M9IGMoTiA9ICJub2JzIiwgQUlDID0gIkFJQyIsICJQc2V1ZG8gUjIgKE1jRmFkZGVuKSIgPSAicHNldWRvLnIuc3F1YXJlZC5tY2ZhZGRlbiIpKSxmaWxlPSdUYWJsZS0zLmRvY3gnKQpgYGAKCkNvbnRyb2wgc3RvY2sgbWV0cmljOiBydl9wZQoKYGBge3J9CmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfnJ2X3BlIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9ydnBlIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9ydnBlLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAzKSxzY2FsZT1UUlVFKSkKYGBgCgpNb2RlbCBjb21wYXJpc29uOgoKYGBge3J9CmFub3ZhKG91dF9tYXJrZXQsIG91dF9hbGwsIHRlc3QgPSAiTFJUIikKCmFub3ZhKG91dF9tYXJrZXRfY2hvaWNlLCBvdXRfYWxsLCB0ZXN0ID0gIkxSVCIpCmBgYAoKCiMgMTEuIFByZWRpY3Rpb24gYW5hbHlzaXMKClNldCBpbnB1dCBmb3IgcHJlZGljdGlvbiBhbmFseXNpczoKCmBgYHtyfQpjcm9zc3ZhbF9kZiA9IHJlZ19kZlssIGMoIlJlbF9wMVlfcG9zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJjaG9pY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgImxvZ19DTUMiLCJSZWxfbTNZX3BvcyIsImZfcyIsImZfZWJpdCIsImZfZWJpdG1hcmdpbiIsImZfcm9lIiwiZl9yb2ljIiwicnZfZXZzIiwicnZfZWJpdGRhIiwicnZfcGUiLCJydl9wYiIsIm5ld3NfaW5jZ3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgIkZhY3RvcjEiKV0KCmNyb3NzdmFsX2RmJFJlbF9tM1lfcG9zIDwtIGFzLmZhY3Rvcihjcm9zc3ZhbF9kZiRSZWxfbTNZX3BvcykKY3Jvc3N2YWxfZGYkUmVsX3AxWV9wb3MgPC0gYXMuZmFjdG9yKGNyb3NzdmFsX2RmJFJlbF9wMVlfcG9zKQoKY3Jvc3N2YWxfZGYKYGBgCgoKSy1mb2xkIGNyb3NzLXZhbGlkYXRpb24gd2l0aCB0aGUgYGNhcmV0YCBwYWNrYWdlOgoKSy1mb2xkOiBCcmFpbiAoTkFjYykKCmBgYHtyfQpicmFpbmRhdCA9IGNyb3NzdmFsX2RmWyxjKCJSZWxfcDFZX3BvcyIsIkZhY3RvcjEiKV0KY2hvaWNlZGF0ID0gY3Jvc3N2YWxfZGZbLGMoIlJlbF9wMVlfcG9zIiwiY2hvaWNlIildCm1hcmtldGRhdCA9IGNyb3NzdmFsX2RmWywtYygyLDE1KV0KCnNldC5zZWVkKDApCgprZm9sZCA9IGZ1bmN0aW9uKGRhdGEsIG5mb2xkcyl7CmZvbGRzIDwtIGNyZWF0ZUZvbGRzKGZhY3RvcihkYXRhJFJlbF9wMVlfcG9zKSwgbmZvbGRzLCByZXR1cm5UcmFpbiA9IFQpCgp0cmFpbl9tb2RlbDwtIHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPW5mb2xkcywgaW5kZXggPSBmb2xkcywgc2F2ZVByZWRpY3Rpb25zID0gVFJVRSkKCiMgTW9kZWwKbW9kZWwgPC0gdHJhaW4oCiAgICBSZWxfcDFZX3Bvc34gLiwKICAgIGRhdGEgPSBkYXRhLCAKICAgIG1ldGhvZCA9ICJnbG0iLCAjIGxvZ2lzdGljIHJlZ3Jlc3Npb24KICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsCiAgICB0ckNvbnRyb2wgPSB0cmFpbl9tb2RlbCkKCnJldHVybihjb25mdXNpb25NYXRyaXgobW9kZWwkcHJlZCRwcmVkLG1vZGVsJHByZWQkb2JzLHBvc2l0aXZlPSIxIikpCgp9CgpwcmludChrZm9sZChicmFpbmRhdCw1KSkKYGBgCgoKSy1mb2xkOiBCZWhhdmlvciAoY2hvaWNlKQoKYGBge3J9CnByaW50KGtmb2xkKGNob2ljZWRhdCw1KSkKYGBgCgpLLWZvbGQ6IE1hcmtldCAoU3RvY2sgbWV0cmljcykKCmBgYHtyfQpwcmludChrZm9sZChtYXJrZXRkYXQsNSkpCmBgYAoKTGVhdmUtb25lLW91dCBjcm9zcy12YWxpZGF0aW9uIGFuYWx5c2VzOgoKTGVhdmUtb25lLW91dDogQnJhaW4KCmBgYHtyfQpzZXQuc2VlZCgwKQojIExPT0NWCnRyYWluX21vZGVsPC0gdHJhaW5Db250cm9sKG1ldGhvZD0ibG9vY3YiLCBzYXZlUHJlZGljdGlvbnMgPSBUUlVFKQoKIyBNb2RlbAptb2RlbCA8LSB0cmFpbigKICAgIFJlbF9wMVlfcG9zIH4gLiwgCiAgICBkYXRhID0gYnJhaW5kYXQsIAogICAgbWV0aG9kID0gImdsbSIsICMgbG9naXN0aWMgcmVncmVzc2lvbgogICAgZmFtaWx5ID0gImJpbm9taWFsIiwKICAgIHRyQ29udHJvbCA9IHRyYWluX21vZGVsKQoKbW9kZWwgI3RvIHByaW50IG1vZGVsIHJlc3VsdAoKY29uZnVzaW9uTWF0cml4KG1vZGVsJHByZWQkcHJlZCxtb2RlbCRwcmVkJG9icyxwb3NpdGl2ZT0iMSIpCmBgYAoKTGVhdmUtb25lLW91dDogQmVoYXZpb3IgKGNob2ljZSkKCmBgYHtyfQpzZXQuc2VlZCgwKQojIExPT0NWCnRyYWluX21vZGVsPC0gdHJhaW5Db250cm9sKG1ldGhvZD0ibG9vY3YiLCBzYXZlUHJlZGljdGlvbnMgPSBUUlVFKQoKIyBNb2RlbAptb2RlbCA8LSB0cmFpbigKICAgIFJlbF9wMVlfcG9zIH4gLiwgCiAgICBkYXRhID0gY2hvaWNlZGF0LCAKICAgIG1ldGhvZCA9ICJnbG0iLCAjIGxvZ2lzdGljIHJlZ3Jlc3Npb24KICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsCiAgICB0ckNvbnRyb2wgPSB0cmFpbl9tb2RlbCkKCm1vZGVsICN0byBwcmludCBtb2RlbCByZXN1bHQKCmNvbmZ1c2lvbk1hdHJpeChtb2RlbCRwcmVkJHByZWQsbW9kZWwkcHJlZCRvYnMscG9zaXRpdmU9IjEiKQpgYGAKCkxlYXZlLW9uZS1vdXQ6IE1hcmtldCAoU3RvY2sgbWV0cmljcykKCmBgYHtyfQpzZXQuc2VlZCgwKQojIExPT0NWCnRyYWluX21vZGVsPC0gdHJhaW5Db250cm9sKG1ldGhvZD0ibG9vY3YiLCBzYXZlUHJlZGljdGlvbnMgPSBUUlVFKQoKIyBNb2RlbAptb2RlbCA8LSB0cmFpbigKICAgIFJlbF9wMVlfcG9zIH4gLiwgCiAgICBkYXRhID0gbWFya2V0ZGF0LCAKICAgIG1ldGhvZCA9ICJnbG0iLCAjIGxvZ2lzdGljIHJlZ3Jlc3Npb24KICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsCiAgICB0ckNvbnRyb2wgPSB0cmFpbl9tb2RlbCkKCm1vZGVsICN0byBwcmludCBtb2RlbCByZXN1bHQKCmNvbmZ1c2lvbk1hdHJpeChtb2RlbCRwcmVkJHByZWQsbW9kZWwkcHJlZCRvYnMscG9zaXRpdmU9IjEiKQpgYGAKCgoKIyBTLiBTdXBwbGVtZW50YXJ5IG1hdGVyaWFsOiBBcHBlbmRpeCA0CgpUYWJsZSBTMTogTG9naXN0aWMgcmVncmVzc2lvbiBtb2RlbCBmb3IgY29udHJvbCByZWdpb25zCgpgYGB7cn0KZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+cHJvZi5MZWZ0X1BJbnNfbWFzaytwcm9mLkxlZnRfUFZpc19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9wcm9mX2NvbnRyb2wgPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X3Byb2ZfY29udHJvbCxkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMyksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35ncmFwaC5MZWZ0X1BJbnNfbWFzaytncmFwaC5MZWZ0X1BWaXNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfZ3JhcGhfY29udHJvbCA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfZ3JhcGhfY29udHJvbCxkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMyksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35mdW5kLkxlZnRfUEluc19tYXNrK2Z1bmQuTGVmdF9QVmlzX21hc2siLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X2Z1bmRfY29udHJvbCA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfZnVuZF9jb250cm9sLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAzKSxzY2FsZT1UUlVFKSkKCmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfnJlbGEuTGVmdF9QSW5zX21hc2srcmVsYS5MZWZ0X1BWaXNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfcmVsYV9jb250cm9sIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9yZWxhX2NvbnRyb2wsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDMpLHNjYWxlPVRSVUUpKQoKZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+bmV3cy5MZWZ0X1BJbnNfbWFzaytuZXdzLkxlZnRfUFZpc19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9uZXdzX2NvbnRyb2wgPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X25ld3NfY29udHJvbCxkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMyksc2NhbGU9VFJVRSkpCgpgYGAKCmBgYHtyfQpjb2VmX25hbWVzIDwtIGMoIlByb2ZpbGUgLSBQVmlzIiA9ICJwcm9mLkxlZnRfUFZpc19tYXNrIiwiUHJvZmlsZSAtIFBJbnMiID0gInByb2YuTGVmdF9QSW5zX21hc2siLAogICAgICAgICAgICAgICAgIkdyYXBoIC0gUFZpcyIgPSAiZ3JhcGguTGVmdF9QVmlzX21hc2siLCJHcmFwaCAtIFBJbnMiID0gImdyYXBoLkxlZnRfUEluc19tYXNrIiwKICAgICAgICAgICAgICAgICJGdW5kYW1lbnRhbHMgLSBQVmlzIiA9ICJmdW5kLkxlZnRfUFZpc19tYXNrIiwiRnVuZGFtZW50YWxzIC0gUElucyIgPSAiZnVuZC5MZWZ0X1BJbnNfbWFzayIsCiAgICAgICAgICAgICAgICAiUmVsYXRpdmUgVmFsdWF0aW9uIC0gUFZpcyIgPSAicmVsYS5MZWZ0X1BWaXNfbWFzayIsIlJlbGF0aXZlIFZhbHVhdGlvbiAtIFBJbnMiID0gInJlbGEuTGVmdF9QSW5zX21hc2siLAogICAgICAgICAgICAgICAgIk5ld3MgSXRlbSAtIFBWaXMiID0gIm5ld3MuTGVmdF9QVmlzX21hc2siLCJOZXdzIEl0ZW0gLSBQSW5zIiA9ICJuZXdzLkxlZnRfUEluc19tYXNrIikKCiMgVW5jb21tZW50IHRvIGNyZWF0ZSB0YWJsZQojcXVpY2tfZG9jeChleHBvcnRfc3VtbXMob3V0X3Byb2ZfY29udHJvbCxvdXRfZ3JhcGhfY29udHJvbCxvdXRfZnVuZF9jb250cm9sLG91dF9yZWxhX2NvbnRyb2wsb3V0X25ld3NfY29udHJvbCwgc2NhbGUgPSBUUlVFLGNvZWZzID0gY29lZl9uYW1lcyxlcnJvcl9wb3MgPSBjKCJzYW1lIiksCiMgICAgICAgICAgICAgbW9kZWwubmFtZXM9YygiQ29tcGFueSBQcm9maWxlIiwiUHJpY2UgR3JhcGgiLCJGdW5kYW1lbnRhbHMiLCJSZWxhdGl2ZSBWYWx1YXRpb24iLCJOZXdzIEl0ZW0iKSwKIyAgICAgICAgICAgICBzdGF0aXN0aWNzPSBjKE4gPSAibm9icyIsIEFJQyA9ICJBSUMiLCAiUHNldWRvIFIyIChNY0ZhZGRlbikiID0gInBzZXVkby5yLnNxdWFyZWQubWNmYWRkZW4iKSksIGZpbGU9J1RhYmxlLVMxLmRvY3gnKQpgYGAKCgoKVGFibGUgUzI6IENvcnJlbGF0aW9uIG1hdHJpeDoKCmBgYHtyfQpwcm9mX2RhdGEgPC0gcmVnX2RmWywgYygxOCwxOSwyMCwyMSwyMildCm5hbWVzKHByb2ZfZGF0YSkgPC0gc3Vic3RyaW5nKG5hbWVzKHByb2ZfZGF0YSksIDYpCgpncmFwaF9kYXRhIDwtIHJlZ19kZlssIGMoOCw5LDEwLDExLDEyKV0KbmFtZXMoZ3JhcGhfZGF0YSkgPC0gc3Vic3RyaW5nKG5hbWVzKGdyYXBoX2RhdGEpLCA3KQoKZnVuZF9kYXRhIDwtIHJlZ19kZlssIGMoMyw0LDUsNiw3KV0KbmFtZXMoZnVuZF9kYXRhKSA8LSBzdWJzdHJpbmcobmFtZXMoZnVuZF9kYXRhKSwgNikKCnJlbGFfZGF0YSA8LSByZWdfZGZbLCBjKDIzLDI0LDI1LDI2LDI3KV0KbmFtZXMocmVsYV9kYXRhKSA8LSBzdWJzdHJpbmcobmFtZXMocmVsYV9kYXRhKSwgNikKCm5ld3NfZGF0YSA8LSByZWdfZGZbLCBjKDEzLDE0LDE1LDE2LDE3KV0KbmFtZXMobmV3c19kYXRhKSA8LSBzdWJzdHJpbmcobmFtZXMobmV3c19kYXRhKSwgNikKCgpyZXNfcHJvZiA8LSBjb3IocHJvZl9kYXRhKQoKcmVzX2dyYXBoIDwtY29yKGdyYXBoX2RhdGEpCgpyZXNfZnVuZCA8LWNvcihmdW5kX2RhdGEpCgpyZXNfcmVsYSA8LWNvcihyZWxhX2RhdGEpCgpyZXNfbmV3cyA8LWNvcihuZXdzX2RhdGEpCgpjb3JfbWF0cmljZXMgPC1saXN0KHJlc19wcm9mLHJlc19ncmFwaCxyZXNfZnVuZCxyZXNfcmVsYSxyZXNfbmV3cykKClJlZHVjZSgiKyIsIGNvcl9tYXRyaWNlcykgLyBsZW5ndGgoY29yX21hdHJpY2VzKQoKYGBgCgpUYWJsZSBTMzogVk9JcyBhbmQgQ29udHJvbCByZWdpb25zCgoKYGBge3J9CmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfnByb2YuQmlsYXRfTkFjY19tYXNrK3Byb2YuQmlsYXRfTVBGQ19tYXNrK3Byb2YuQmlsYXRfQUluc19tYXNrK3Byb2YuTGVmdF9QSW5zX21hc2srcHJvZi5MZWZ0X1BWaXNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfcHJvZl9jb250cm9sMiA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfcHJvZl9jb250cm9sMixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMyksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35ncmFwaC5CaWxhdF9OQWNjX21hc2srZ3JhcGguQmlsYXRfTVBGQ19tYXNrK2dyYXBoLkJpbGF0X0FJbnNfbWFzaytncmFwaC5MZWZ0X1BJbnNfbWFzaytncmFwaC5MZWZ0X1BWaXNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfZ3JhcGhfY29udHJvbDIgPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X2dyYXBoX2NvbnRyb2wyLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAzKSxzY2FsZT1UUlVFKSkKCmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfmZ1bmQuQmlsYXRfTkFjY19tYXNrK2Z1bmQuQmlsYXRfTVBGQ19tYXNrK2Z1bmQuQmlsYXRfQUluc19tYXNrK2Z1bmQuTGVmdF9QSW5zX21hc2srZnVuZC5MZWZ0X1BWaXNfbWFzayIsc2VwPSIiKQpwcmludChmb3JtdWxhKQpvdXRfZnVuZF9jb250cm9sMiA8LSBnbG0oZm9ybXVsYSxkYXRhPXJlZ19kZixmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gbG9naXQpKQoKcHJpbnQoc3VtbShvdXRfZnVuZF9jb250cm9sMixkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMyksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35yZWxhLkJpbGF0X05BY2NfbWFzaytyZWxhLkJpbGF0X01QRkNfbWFzaytyZWxhLkJpbGF0X0FJbnNfbWFzaytyZWxhLkxlZnRfUEluc19tYXNrK3JlbGEuTGVmdF9QVmlzX21hc2siLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X3JlbGFfY29udHJvbDIgPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X3JlbGFfY29udHJvbDIsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDMpLHNjYWxlPVRSVUUpKQoKZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+bmV3cy5CaWxhdF9OQWNjX21hc2srbmV3cy5CaWxhdF9NUEZDX21hc2srbmV3cy5CaWxhdF9BSW5zX21hc2srbmV3cy5MZWZ0X1BJbnNfbWFzaytuZXdzLkxlZnRfUFZpc19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9uZXdzX2NvbnRyb2wyIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9uZXdzX2NvbnRyb2wyLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAzKSxzY2FsZT1UUlVFKSkKCmBgYAoKCmBgYHtyfQpjb2VmX25hbWVzIDwtIGMoIlByb2ZpbGUgLSBQVmlzIiA9ICJwcm9mLkxlZnRfUFZpc19tYXNrIiwiUHJvZmlsZSAtIFBJbnMiID0gInByb2YuTGVmdF9QSW5zX21hc2siLCJQcm9maWxlIC0gTkFjYyIgPSAicHJvZi5CaWxhdF9OQWNjX21hc2siLCAiUHJvZmlsZSAtIE1QRkMiID0gInByb2YuQmlsYXRfTVBGQ19tYXNrIiwgIlByb2ZpbGUgLSBBSW5zIiA9ICJwcm9mLkJpbGF0X0FJbnNfbWFzayIsCiAgICAgICAgICAgICAgICAiR3JhcGggLSBQVmlzIiA9ICJncmFwaC5MZWZ0X1BWaXNfbWFzayIsIkdyYXBoIC0gUElucyIgPSAiZ3JhcGguTGVmdF9QSW5zX21hc2siLCJHcmFwaCAtIE5BY2MiID0gImdyYXBoLkJpbGF0X05BY2NfbWFzayIsICJHcmFwaCAtIE1QRkMiID0gImdyYXBoLkJpbGF0X01QRkNfbWFzayIsICJHcmFwaCAtIEFJbnMiID0gImdyYXBoLkJpbGF0X0FJbnNfbWFzayIsCiAgICAgICAgICAgICAgICAiRnVuZGFtZW50YWxzIC0gUFZpcyIgPSAiZnVuZC5MZWZ0X1BWaXNfbWFzayIsIkZ1bmRhbWVudGFscyAtIFBJbnMiID0gImZ1bmQuTGVmdF9QSW5zX21hc2siLCJGdW5kYW1lbnRhbHMgLSBOQWNjIiA9ICJmdW5kLkJpbGF0X05BY2NfbWFzayIsICJGdW5kYW1lbnRhbHMgLSBNUEZDIiA9ICJmdW5kLkJpbGF0X01QRkNfbWFzayIsICJGdW5kYW1lbnRhbHMgLSBBSW5zIiA9ICJmdW5kLkJpbGF0X0FJbnNfbWFzayIsCiAgICAgICAgICAgICAgICAiUmVsYXRpdmUgVmFsdWF0aW9uIC0gUFZpcyIgPSAicmVsYS5MZWZ0X1BWaXNfbWFzayIsIlJlbGF0aXZlIFZhbHVhdGlvbiAtIFBJbnMiID0gInJlbGEuTGVmdF9QSW5zX21hc2siLCJSZWxhdGl2ZSBWYWx1YXRpb24gLSBOQWNjIiA9ICJyZWxhLkJpbGF0X05BY2NfbWFzayIsICJSZWxhdGl2ZSBWYWx1YXRpb24gLSBNUEZDIiA9ICJyZWxhLkJpbGF0X01QRkNfbWFzayIsICJSZWxhdGl2ZSBWYWx1YXRpb24gLSBBSW5zIiA9ICJyZWxhLkJpbGF0X0FJbnNfbWFzayIsCiAgICAgICAgICAgICAgICAiTmV3cyBpdGVtIC0gUFZpcyIgPSAibmV3cy5MZWZ0X1BWaXNfbWFzayIsIk5ld3MgaXRlbSAtIFBJbnMiID0gIm5ld3MuTGVmdF9QSW5zX21hc2siLCJOZXdzIGl0ZW0gLSBOQWNjIiA9ICJuZXdzLkJpbGF0X05BY2NfbWFzayIsICJOZXdzIGl0ZW0gLSBNUEZDIiA9ICJuZXdzLkJpbGF0X01QRkNfbWFzayIsICJOZXdzIGl0ZW0gLSBBSW5zIiA9ICJuZXdzLkJpbGF0X0FJbnNfbWFzayIgKQoKIyBVbmNvbW1lbnQgdG8gY3JlYXRlIHRhYmxlCiNxdWlja19kb2N4KGV4cG9ydF9zdW1tcyhvdXRfcHJvZl9jb250cm9sMixvdXRfZ3JhcGhfY29udHJvbDIsb3V0X2Z1bmRfY29udHJvbDIsb3V0X3JlbGFfY29udHJvbDIsb3V0X25ld3NfY29udHJvbDIsIHNjYWxlID0gVFJVRSxjb2VmcyA9IGNvZWZfbmFtZXMsZXJyb3JfcG9zID0gYygic2FtZSIpLAojICAgICAgICAgICAgIG1vZGVsLm5hbWVzPWMoIkNvbXBhbnkgUHJvZmlsZSIsIlByaWNlIEdyYXBoIiwiRnVuZGFtZW50YWxzIiwiUmVsYXRpdmUgVmFsdWF0aW9uIiwiTmV3cyBJdGVtIiksCiMgICAgICAgICAgICAgc3RhdGlzdGljcz0gYyhOID0gIm5vYnMiLCBBSUMgPSAiQUlDIiwgIlBzZXVkbyBSMiAoTWNGYWRkZW4pIiA9ICJwc2V1ZG8uci5zcXVhcmVkLm1jZmFkZGVuIikpLCBmaWxlPSdUYWJsZS1TMy5kb2N4JykKYGBgCgoKVGFibGUgUzQ6IFZPSXMsIENvbnRyb2wgcmVnaW9ucyBhbmQgc3RvY2sgbWV0cmljczoKCgpgYGB7cn0KZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+bG9nX0NNQytwcm9mLkJpbGF0X05BY2NfbWFzaytwcm9mLkJpbGF0X01QRkNfbWFzaytwcm9mLkJpbGF0X0FJbnNfbWFzaytwcm9mLkxlZnRfUEluc19tYXNrK3Byb2YuTGVmdF9QVmlzX21hc2siLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X3Byb2ZfY29udHJvbDMgPC0gZ2xtKGZvcm11bGEsZGF0YT1yZWdfZGYsZmFtaWx5ID0gYmlub21pYWwobGluayA9IGxvZ2l0KSkKCnByaW50KHN1bW0ob3V0X3Byb2ZfY29udHJvbDMsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDMpLHNjYWxlPVRSVUUpKQoKZm9ybXVsYT1wYXN0ZSgiUmVsX3AxWV9wb3N+UmVsX20zWV9wb3MrZ3JhcGguQmlsYXRfTkFjY19tYXNrK2dyYXBoLkJpbGF0X01QRkNfbWFzaytncmFwaC5CaWxhdF9BSW5zX21hc2srZ3JhcGguTGVmdF9QSW5zX21hc2srZ3JhcGguTGVmdF9QVmlzX21hc2siLHNlcD0iIikKcHJpbnQoZm9ybXVsYSkKb3V0X2dyYXBoX2NvbnRyb2wzIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9ncmFwaF9jb250cm9sMyxkaWdpdHMgPSBnZXRPcHRpb24oImp0b29scy1kaWdpdHMiLCBkZWZhdWx0ID0gMyksc2NhbGU9VFJVRSkpCgpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35mX3MrZl9lYml0K2ZfZWJpdG1hcmdpbitmX3JvZStmX3JvaWMrZnVuZC5CaWxhdF9OQWNjX21hc2srZnVuZC5CaWxhdF9NUEZDX21hc2srZnVuZC5CaWxhdF9BSW5zX21hc2srZnVuZC5MZWZ0X1BJbnNfbWFzaytmdW5kLkxlZnRfUFZpc19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9mdW5kX2NvbnRyb2wzIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9mdW5kX2NvbnRyb2wzLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAzKSxzY2FsZT1UUlVFKSkKCmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfnJ2X2V2cytydl9lYml0ZGErcnZfcGUrcnZfcGIrcmVsYS5CaWxhdF9OQWNjX21hc2srcmVsYS5CaWxhdF9NUEZDX21hc2srcmVsYS5CaWxhdF9BSW5zX21hc2srcmVsYS5MZWZ0X1BJbnNfbWFzaytyZWxhLkxlZnRfUFZpc19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9yZWxhX2NvbnRyb2wzIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9yZWxhX2NvbnRyb2wzLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAzKSxzY2FsZT1UUlVFKSkKCmZvcm11bGE9cGFzdGUoIlJlbF9wMVlfcG9zfm5ld3NfaW5jZ3IrbmV3cy5CaWxhdF9OQWNjX21hc2srbmV3cy5CaWxhdF9NUEZDX21hc2srbmV3cy5CaWxhdF9BSW5zX21hc2srbmV3cy5MZWZ0X1BJbnNfbWFzaytuZXdzLkxlZnRfUFZpc19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCm91dF9uZXdzX2NvbnRyb2wzIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9uZXdzX2NvbnRyb2wzLGRpZ2l0cyA9IGdldE9wdGlvbigianRvb2xzLWRpZ2l0cyIsIGRlZmF1bHQgPSAzKSxzY2FsZT1UUlVFKSkKCmBgYAoKCmBgYHtyfQpjb2VmX25hbWVzIDwtIGMoIkN1cnJlbnQgTWFya2V0IENhcGl0YWxpemF0aW9uIiA9ICJsb2dfQ01DIiwiUHJvZmlsZSAtIFBWaXMiID0gInByb2YuTGVmdF9QVmlzX21hc2siLCJQcm9maWxlIC0gUElucyIgPSAicHJvZi5MZWZ0X1BJbnNfbWFzayIsIlByb2ZpbGUgLSBOQWNjIiA9ICJwcm9mLkJpbGF0X05BY2NfbWFzayIsICJQcm9maWxlIC0gTVBGQyIgPSAicHJvZi5CaWxhdF9NUEZDX21hc2siLCAiUHJvZmlsZSAtIEFJbnMiID0gInByb2YuQmlsYXRfQUluc19tYXNrIiwKICAgICAgICAgICAgICAgICIzNk0gUGVyZm9ybWFuY2UiPSdSZWxfbTNZX3BvcycsIkdyYXBoIC0gUFZpcyIgPSAiZ3JhcGguTGVmdF9QVmlzX21hc2siLCJHcmFwaCAtIFBJbnMiID0gImdyYXBoLkxlZnRfUEluc19tYXNrIiwiR3JhcGggLSBOQWNjIiA9ICJncmFwaC5CaWxhdF9OQWNjX21hc2siLCAiR3JhcGggLSBNUEZDIiA9ICJncmFwaC5CaWxhdF9NUEZDX21hc2siLCAiR3JhcGggLSBBSW5zIiA9ICJncmFwaC5CaWxhdF9BSW5zX21hc2siLAogICAgICAgICAgICAgICAgIlNhbGVzIiA9ImZfcyIsICJFQklUIiA9ICJmX2ViaXQiLCAiRUJJVCBNYXJnaW4gKCUpIiA9ICJmX2ViaXRtYXJnaW4iLCJST0UgKCUpIiA9ICJmX3JvZSIsIlJPSUMgKCUpIiA9ICJmX3JvaWMiLAogICAgICAgICAgICAgICAgIkZ1bmRhbWVudGFscyAtIFBWaXMiID0gImZ1bmQuTGVmdF9QVmlzX21hc2siLCJGdW5kYW1lbnRhbHMgLSBQSW5zIiA9ICJmdW5kLkxlZnRfUEluc19tYXNrIiwiRnVuZGFtZW50YWxzIC0gTkFjYyIgPSAiZnVuZC5CaWxhdF9OQWNjX21hc2siLCAiRnVuZGFtZW50YWxzIC0gTVBGQyIgPSAiZnVuZC5CaWxhdF9NUEZDX21hc2siLCAiRnVuZGFtZW50YWxzIC0gQUlucyIgPSAiZnVuZC5CaWxhdF9BSW5zX21hc2siLAogICAgICAgICAgICAgICAgIkVWL1NhbGVzIiA9ICJydl9ldnMiLCJFVi9FQklUREEiID0gInJ2X2ViaXRkYSIsIlAvRSIgPSAicnZfcGUiLCJQL0IiID0gInJ2X3BiIiwKICAgICAgICAgICAgICAgICJSZWxhdGl2ZSBWYWx1YXRpb24gLSBQVmlzIiA9ICJyZWxhLkxlZnRfUFZpc19tYXNrIiwiUmVsYXRpdmUgVmFsdWF0aW9uIC0gUElucyIgPSAicmVsYS5MZWZ0X1BJbnNfbWFzayIsIlJlbGF0aXZlIFZhbHVhdGlvbiAtIE5BY2MiID0gInJlbGEuQmlsYXRfTkFjY19tYXNrIiwgIlJlbGF0aXZlIFZhbHVhdGlvbiAtIE1QRkMiID0gInJlbGEuQmlsYXRfTVBGQ19tYXNrIiwgIlJlbGF0aXZlIFZhbHVhdGlvbiAtIEFJbnMiID0gInJlbGEuQmlsYXRfQUluc19tYXNrIiwKICAgICAgICAgICAgICAgICJJbmNvbWUgZ3Jvd3RoIiA9ICJuZXdzX2luY2dyIiwgIk5ld3MgaXRlbSAtIFBWaXMiID0gIm5ld3MuTGVmdF9QVmlzX21hc2siLCJOZXdzIGl0ZW0gLSBQSW5zIiA9ICJuZXdzLkxlZnRfUEluc19tYXNrIiwiTmV3cyBpdGVtIC0gTkFjYyIgPSAibmV3cy5CaWxhdF9OQWNjX21hc2siLCAiTmV3cyBpdGVtIC0gTVBGQyIgPSAibmV3cy5CaWxhdF9NUEZDX21hc2siLCAiTmV3cyBpdGVtIC0gQUlucyIgPSAibmV3cy5CaWxhdF9BSW5zX21hc2siCiAgICAgICAgICAgICAgICApCgojIFVuY29tbWVudCB0byBjcmVhdGUgdGFibGUKI3F1aWNrX2RvY3goZXhwb3J0X3N1bW1zKG91dF9wcm9mX2NvbnRyb2wzLG91dF9ncmFwaF9jb250cm9sMyxvdXRfZnVuZF9jb250cm9sMyxvdXRfcmVsYV9jb250cm9sMyxvdXRfbmV3c19jb250cm9sMywgc2NhbGUgPSBUUlVFLGNvZWZzID0gY29lZl9uYW1lcyxlcnJvcl9wb3MgPSBjKCJzYW1lIiksCiMgICAgICAgICAgICAgbW9kZWwubmFtZXM9YygiQ29tcGFueSBQcm9maWxlIiwiUHJpY2UgR3JhcGgiLCJGdW5kYW1lbnRhbHMiLCJSZWxhdGl2ZSBWYWx1YXRpb24iLCJOZXdzIEl0ZW0iKSwKIyAgICAgICAgICAgICBzdGF0aXN0aWNzPSBjKE4gPSAibm9icyIsIEFJQyA9ICJBSUMiLCAiUHNldWRvIFIyIChNY0ZhZGRlbikiID0gInBzZXVkby5yLnNxdWFyZWQubWNmYWRkZW4iKSksIGZpbGU9J1RhYmxlLVM0LmRvY3gnKQpgYGAKCgpUZXN0aW5nIGlmIHRoZXJlIGlzIGEgdHJ1ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBQSW5zIGFjdGl2aXR5IGF0IGZ1bmRhbWVudGFscyBzY3JlZW4gYW5kIGZ1dHVyZSBzdG9jayBwZXJmb3JtYW5jZToKCmBgYHtyfQpmb3JtdWxhPXBhc3RlKCJSZWxfcDFZX3Bvc35mdW5kLkxlZnRfUEluc19tYXNrIixzZXA9IiIpCnByaW50KGZvcm11bGEpCgpvdXRfZnVuZF9waW5zIDwtIGdsbShmb3JtdWxhLGRhdGE9cmVnX2RmLGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSBsb2dpdCkpCgpwcmludChzdW1tKG91dF9mdW5kX3BpbnMsZGlnaXRzID0gZ2V0T3B0aW9uKCJqdG9vbHMtZGlnaXRzIiwgZGVmYXVsdCA9IDMpLHNjYWxlPVRSVUUpKQpgYGAKCgpDb21wYXJlIG1vZGVsczoKCgpgYGB7cn0KYW5vdmEob3V0X3Byb2YsIG91dF9wcm9mX2NvbnRyb2wzLCB0ZXN0ID0gIkxSVCIpCmBgYAoKYGBge3J9CmFub3ZhKG91dF9ncmFwaCwgb3V0X2dyYXBoX2NvbnRyb2wzLCB0ZXN0ID0gIkxSVCIpCmBgYAoKYGBge3J9CmFub3ZhKG91dF9mdW5kLCBvdXRfZnVuZF9jb250cm9sMywgdGVzdCA9ICJMUlQiKQpgYGAKCmBgYHtyfQphbm92YShvdXRfcmVsYSwgb3V0X3JlbGFfY29udHJvbDMsIHRlc3QgPSAiTFJUIikKYGBgCgpgYGB7cn0KYW5vdmEob3V0X25ld3MsIG91dF9uZXdzX2NvbnRyb2wzLCB0ZXN0ID0gIkxSVCIpCmBgYAoKCg==