Setup

back to TOC

Data preparation

back to TOC

Analysis plan

For all studies we conduct exploratory factor analyses using Pearson correlations to find minimum residual solutions.

For each study, we first examine maximal unrotated and rotated solutions. To determine the maximum number of factors to extract, we use the following rule of thumb: With \(p\) observations per participant, we can extract a maximum of \(k\) factors, where \((p-k)*2 > p+k\), i.e., \(k < p/3\). Thus, with 40 mental capacity items, we can extract a maximum of 13 factors.

To determine how many factors to retain, we use the following preset retention criteria, considering the unrotated maximal solution (unless otherwise noted):

We then examine and interpret varimax-rotated solutions, extracting only the number of factors that meet these criteria.

Note: For Studies 1-2, we initially planned to conduct dimension reduction analyses for each condition (beetle vs. robot) separately. However, we now consider this analysis plan to have been fundamentally flawed: Each of these separate analyses is only capable of surfacing factors that highlight substantial disagreement among participants within that condition thus failing to capture key differences in attributions of mental capacities to beetles vs. robots, with no formal means of synthesizing results across conditions. Nonetheless, the results of these analyses are generally consistent with the findings reported here: The most prominent and reliable finding within each condition is that participants distinguish between emotional and perceptual varieties of experience. See https://osf.io/zd3mu for the preregistered analyses, including analysis scripts.

Study 1

Design: 2 conditions (beetle, robot), between-subjects Date conducted: 2015-12-15

Demographics

NAs introduced by coercion
Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector

back to TOC

Exploratory factor analysis

Step 1: Run maximal EFA (without and with rotation)

Factor Analysis using method =  minres
Call: fa(r = d1_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11
happy           0.85 -0.08 -0.12  0.07 -0.21  0.09 -0.10  0.09 -0.03  0.00  0.01
depressed       0.80  0.04 -0.32  0.16 -0.13 -0.11 -0.06 -0.02  0.01 -0.04 -0.09
fear            0.76 -0.38  0.20  0.02  0.03 -0.01  0.10  0.02 -0.07 -0.09  0.11
angry           0.80 -0.13 -0.07  0.11 -0.11 -0.07 -0.02  0.03  0.02 -0.05  0.08
calm            0.77 -0.16  0.11 -0.02 -0.10  0.13  0.10 -0.07 -0.01 -0.04 -0.03
sounds          0.17  0.39  0.48  0.32 -0.05  0.23 -0.04  0.01  0.10 -0.05  0.05
seeing          0.35  0.20  0.60  0.17  0.14 -0.09 -0.08  0.03 -0.05  0.03 -0.02
temperature     0.27  0.33  0.59  0.19  0.08  0.03  0.03  0.22  0.11 -0.03 -0.02
odors           0.41  0.03  0.50  0.23  0.13  0.05 -0.09 -0.10 -0.02 -0.02 -0.20
depth           0.31  0.41  0.38  0.07  0.01 -0.01 -0.04  0.01  0.07  0.11  0.12
computations   -0.25  0.83 -0.14  0.05 -0.15 -0.01  0.06  0.06  0.05 -0.01  0.07
thoughts        0.78  0.03 -0.02 -0.17 -0.02  0.04 -0.15  0.00 -0.03  0.08  0.00
reasoning       0.44  0.61  0.02 -0.17  0.02 -0.02 -0.10  0.04 -0.10  0.04 -0.04
remembering     0.18  0.69  0.28 -0.04 -0.14 -0.01  0.12  0.03 -0.07 -0.07 -0.04
beliefs         0.63  0.28 -0.37  0.00  0.21  0.02  0.01  0.03  0.03  0.04 -0.04
hungry          0.60 -0.62  0.33  0.03  0.17 -0.01 -0.02  0.00 -0.02  0.00 -0.03
tired           0.74 -0.37  0.25  0.00  0.01 -0.06  0.05 -0.03  0.08 -0.04  0.08
pain            0.69 -0.53  0.32  0.02  0.13 -0.02 -0.02  0.01 -0.07  0.02  0.08
nauseated       0.81 -0.19  0.01  0.15 -0.21 -0.03  0.08 -0.19  0.01  0.07 -0.05
safe            0.76 -0.23  0.14 -0.03 -0.07  0.19  0.26  0.06 -0.16 -0.02 -0.01
love            0.82  0.07 -0.32  0.09 -0.05  0.01 -0.06  0.12 -0.01  0.01 -0.01
recognizing     0.20  0.78  0.15  0.05 -0.10 -0.02  0.02 -0.15 -0.08  0.03  0.04
communicating   0.29  0.55  0.28  0.00  0.03 -0.05  0.09 -0.12 -0.16  0.11  0.13
guilt           0.73  0.11 -0.39  0.13  0.08 -0.01  0.00 -0.06  0.04 -0.01 -0.09
disrespected    0.72  0.13 -0.37  0.20  0.08 -0.17  0.18 -0.08  0.06 -0.12 -0.01
free_will       0.75 -0.26  0.11 -0.12 -0.05  0.00 -0.04  0.09 -0.06 -0.07 -0.12
choices         0.46  0.35  0.37 -0.28  0.00 -0.13  0.06  0.10 -0.12 -0.04 -0.16
self_restraint  0.63  0.26 -0.08 -0.16  0.07  0.16  0.02 -0.23  0.07 -0.12 -0.07
intentions      0.68 -0.03  0.16 -0.29 -0.03  0.01  0.11  0.07  0.29 -0.03  0.03
goal            0.35  0.44  0.34 -0.15 -0.04 -0.27 -0.02 -0.03  0.14 -0.01 -0.07
conscious       0.76 -0.23  0.13 -0.06  0.02  0.07 -0.05 -0.09  0.04  0.10  0.01
self_aware      0.74 -0.01  0.03 -0.11  0.01  0.01 -0.11 -0.08  0.05  0.05  0.05
desires         0.78 -0.22  0.09 -0.17 -0.02 -0.08  0.01 -0.02  0.02  0.08  0.05
embarrassed     0.71  0.16 -0.49  0.15  0.17 -0.10  0.10  0.13 -0.04  0.05  0.01
emo_recog       0.61  0.41 -0.25 -0.05  0.21  0.05 -0.07 -0.04  0.01  0.10  0.05
joy             0.86 -0.03 -0.17  0.02 -0.23  0.07 -0.16  0.08  0.00  0.09 -0.05
morality        0.48  0.47 -0.22 -0.15  0.14  0.28  0.09  0.07  0.04  0.04 -0.01
personality     0.70  0.31 -0.15 -0.07  0.06 -0.01 -0.21 -0.01 -0.09 -0.33  0.17
pleasure        0.82 -0.25  0.10 -0.03 -0.07 -0.11  0.04  0.04  0.01  0.07  0.10
pride           0.79  0.14 -0.39  0.11  0.04 -0.05  0.05  0.05 -0.03  0.07 -0.02
                MR12  MR13   h2   u2 com
happy           0.06 -0.15 0.84 0.16 1.4
depressed      -0.05 -0.03 0.81 0.19 1.6
fear            0.02  0.06 0.80 0.20 1.8
angry           0.02  0.08 0.71 0.29 1.2
calm            0.01  0.06 0.68 0.32 1.3
sounds          0.04  0.10 0.60 0.40 3.9
seeing          0.02 -0.04 0.59 0.41 2.3
temperature    -0.06  0.04 0.64 0.36 2.9
odors           0.06  0.02 0.55 0.45 3.2
depth          -0.08 -0.15 0.48 0.52 3.8
computations    0.01  0.04 0.80 0.20 1.4
thoughts        0.03  0.11 0.69 0.31 1.2
reasoning      -0.11  0.04 0.63 0.37 2.3
remembering    -0.03 -0.02 0.62 0.38 1.7
beliefs        -0.03  0.05 0.67 0.33 2.4
hungry         -0.03 -0.07 0.90 0.10 2.7
tired          -0.06 -0.09 0.78 0.22 1.9
pain           -0.03  0.00 0.89 0.11 2.5
nauseated      -0.28  0.06 0.90 0.10 1.8
safe            0.03 -0.05 0.79 0.21 1.8
love            0.07 -0.06 0.82 0.18 1.4
recognizing     0.04  0.05 0.71 0.29 1.4
communicating   0.14 -0.04 0.57 0.43 3.0
guilt           0.08 -0.07 0.75 0.25 1.8
disrespected    0.07  0.00 0.81 0.19 2.2
free_will       0.08  0.16 0.73 0.27 1.6
choices        -0.06 -0.06 0.63 0.37 4.6
self_restraint  0.02 -0.10 0.62 0.38 2.3
intentions      0.02  0.03 0.68 0.32 2.0
goal            0.06 -0.03 0.56 0.44 4.3
conscious       0.01  0.00 0.67 0.33 1.4
self_aware      0.10  0.02 0.60 0.40 1.2
desires         0.01  0.07 0.71 0.29 1.4
embarrassed    -0.04 -0.01 0.86 0.14 2.4
emo_recog      -0.07  0.05 0.68 0.32 2.7
joy             0.01 -0.08 0.87 0.13 1.4
morality       -0.04 -0.04 0.64 0.36 3.7
personality    -0.09 -0.01 0.81 0.19 2.5
pleasure        0.04  0.00 0.79 0.21 1.3
pride           0.02  0.07 0.82 0.18 1.7

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12
SS loadings           16.55 5.24 3.42 0.75 0.51 0.42 0.35 0.31 0.28 0.26 0.24 0.21
Proportion Var         0.41 0.13 0.09 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.41 0.54 0.63 0.65 0.66 0.67 0.68 0.69 0.70 0.70 0.71 0.71
Proportion Explained   0.58 0.18 0.12 0.03 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion  0.58 0.76 0.88 0.90 0.92 0.94 0.95 0.96 0.97 0.98 0.99 0.99
                      MR13
SS loadings           0.18
Proportion Var        0.00
Cumulative Var        0.72
Proportion Explained  0.01
Cumulative Proportion 1.00

Mean item complexity =  2.2
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  36.39 with Chi Square of  14185
The degrees of freedom for the model are 338  and the objective function was  1.03 

The root mean square of the residuals (RMSR) is  0.01 
The df corrected root mean square of the residuals is  0.01 

The harmonic number of observations is  405 with the empirical chi square  57.84  with prob <  1 
The total number of observations was  405  with Likelihood Chi Square =  390.74  with prob <  0.025 

Tucker Lewis Index of factoring reliability =  0.991
RMSEA index =  0.024  and the 90 % confidence intervals are  0.008 0.028
BIC =  -1638.58
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7
Correlation of scores with factors             0.99 0.98 0.96 0.84 0.85 0.76 0.78
Multiple R square of scores with factors       0.99 0.95 0.92 0.71 0.72 0.58 0.61
Minimum correlation of possible factor scores  0.97 0.90 0.85 0.41 0.44 0.17 0.22
                                                MR8   MR9 MR10  MR11 MR12  MR13
Correlation of scores with factors             0.74  0.69 0.73  0.68 0.72  0.65
Multiple R square of scores with factors       0.55  0.48 0.53  0.46 0.52  0.42
Minimum correlation of possible factor scores  0.10 -0.04 0.06 -0.09 0.04 -0.17
[1] 3

Step 2: Run EFA with varimax rotation

Factor Analysis using method =  minres
Call: fa(r = d1_all, nfactors = nfactors_d1_all, rotate = chosenRotType, 
    fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   h2   u2 com
happy           0.57  0.63  0.09 0.74 0.26 2.0
depressed       0.39  0.76  0.03 0.73 0.27 1.5
fear            0.83  0.26  0.06 0.76 0.24 1.2
angry           0.60  0.55  0.08 0.67 0.33 2.0
calm            0.66  0.40  0.17 0.63 0.37 1.8
sounds          0.06 -0.05  0.61 0.38 0.62 1.0
seeing          0.35 -0.08  0.63 0.52 0.48 1.6
temperature     0.21 -0.07  0.68 0.51 0.49 1.2
odors           0.45 -0.02  0.45 0.40 0.60 2.0
depth           0.10  0.11  0.62 0.41 0.59 1.1
computations   -0.73  0.21  0.42 0.76 0.24 1.8
thoughts        0.51  0.55  0.21 0.61 0.39 2.3
reasoning      -0.07  0.49  0.56 0.55 0.45 2.0
remembering    -0.20  0.18  0.71 0.58 0.42 1.3
beliefs         0.11  0.77  0.12 0.61 0.39 1.1
hungry          0.92 -0.01 -0.06 0.86 0.14 1.0
tired           0.83  0.22  0.10 0.75 0.25 1.2
pain            0.92  0.09  0.02 0.86 0.14 1.0
nauseated       0.67  0.48  0.09 0.68 0.32 1.9
safe            0.70  0.35  0.13 0.63 0.37 1.5
love            0.39  0.79  0.06 0.78 0.22 1.5
recognizing    -0.28  0.31  0.70 0.66 0.34 1.7
communicating  -0.03  0.21  0.64 0.46 0.54 1.2
guilt           0.27  0.79  0.01 0.70 0.30 1.2
disrespected    0.27  0.77  0.04 0.66 0.34 1.3
free_will       0.71  0.35  0.09 0.64 0.36 1.5
choices         0.24  0.20  0.60 0.45 0.55 1.6
self_restraint  0.24  0.57  0.30 0.47 0.53 1.9
intentions      0.54  0.35  0.26 0.48 0.52 2.2
goal            0.09  0.17  0.62 0.42 0.58 1.2
conscious       0.71  0.36  0.12 0.64 0.36 1.6
self_aware      0.53  0.48  0.21 0.55 0.45 2.3
desires         0.70  0.40  0.11 0.66 0.34 1.6
embarrassed     0.20  0.85 -0.02 0.76 0.24 1.1
emo_recog       0.06  0.72  0.28 0.60 0.40 1.3
joy             0.53  0.68  0.10 0.75 0.25 1.9
morality       -0.04  0.62  0.31 0.48 0.52 1.5
personality     0.23  0.67  0.30 0.59 0.41 1.6
pleasure        0.75  0.41  0.11 0.75 0.25 1.6
pride           0.29  0.84  0.05 0.79 0.21 1.3

                        MR1  MR2  MR3
SS loadings           10.13 9.69 5.12
Proportion Var         0.25 0.24 0.13
Cumulative Var         0.25 0.50 0.62
Proportion Explained   0.41 0.39 0.21
Cumulative Proportion  0.41 0.79 1.00

Mean item complexity =  1.5
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  36.39 with Chi Square of  14185
The degrees of freedom for the model are 663  and the objective function was  3.83 

The root mean square of the residuals (RMSR) is  0.03 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  405 with the empirical chi square  479.29  with prob <  1 
The total number of observations was  405  with Likelihood Chi Square =  1486.88  with prob <  4.2e-65 

Tucker Lewis Index of factoring reliability =  0.927
RMSEA index =  0.058  and the 90 % confidence intervals are  0.052 0.059
BIC =  -2493.69
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.98 0.97 0.95
Multiple R square of scores with factors       0.97 0.95 0.90
Minimum correlation of possible factor scores  0.93 0.90 0.81

back to TOC

Factor loadings table

Study 2

Design: 2 conditions (beetle, robot), between-subjects (replication of Study 1) Date conducted: 2016-01-12

Demographics

Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector

back to TOC

Exploratory factor analysis

Step 1: Run maximal EFA (without and with rotation)

Factor Analysis using method =  minres
Call: fa(r = d2_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11
happy           0.83 -0.08 -0.18 -0.18  0.15 -0.04 -0.04  0.01 -0.08  0.02  0.00
depressed       0.76 -0.01 -0.37 -0.02  0.13  0.04 -0.01  0.15  0.00  0.02 -0.12
fear            0.76 -0.36  0.21  0.04  0.05 -0.03 -0.06  0.00  0.03  0.00  0.08
angry           0.77 -0.17 -0.06 -0.05  0.19  0.02 -0.06 -0.13  0.13 -0.23 -0.07
calm            0.74 -0.05  0.08 -0.23  0.04 -0.08 -0.03 -0.04 -0.14  0.01  0.03
sounds          0.23  0.46  0.50 -0.11  0.13  0.12  0.02  0.05  0.05 -0.03  0.14
seeing          0.45  0.24  0.55  0.08 -0.05  0.13 -0.12 -0.07  0.01  0.07  0.04
temperature     0.32  0.28  0.53  0.16  0.16  0.02 -0.10  0.11 -0.10 -0.02 -0.08
odors           0.48  0.10  0.51  0.34  0.09 -0.02 -0.16  0.13 -0.16 -0.06 -0.10
depth           0.26  0.47  0.35  0.33  0.25 -0.38  0.34  0.01  0.06  0.02  0.04
computations   -0.26  0.83 -0.12 -0.13  0.13  0.02  0.06  0.08  0.02  0.00 -0.01
thoughts        0.77  0.00 -0.01 -0.11 -0.23 -0.10  0.12  0.07 -0.08  0.01 -0.05
reasoning       0.36  0.59 -0.04  0.03 -0.21 -0.08 -0.03  0.00 -0.08  0.06 -0.07
remembering     0.19  0.69  0.24 -0.19 -0.01  0.08  0.00  0.06 -0.01  0.06  0.10
beliefs         0.53  0.26 -0.33  0.07 -0.08  0.20  0.16  0.00 -0.24  0.06  0.01
hungry          0.61 -0.62  0.31  0.19 -0.02  0.08 -0.04  0.00 -0.02  0.07  0.01
tired           0.73 -0.40  0.26  0.02  0.03  0.04  0.04 -0.08  0.06  0.02  0.04
pain            0.67 -0.52  0.28  0.11 -0.01  0.04 -0.02  0.01  0.07  0.09 -0.01
nauseated       0.70 -0.20 -0.02  0.00  0.12  0.03  0.00 -0.02  0.02  0.13  0.05
safe            0.75 -0.22  0.13 -0.05 -0.02 -0.09 -0.03 -0.14 -0.18 -0.06  0.22
love            0.74  0.00 -0.34 -0.05  0.08  0.09  0.05  0.14  0.02  0.06 -0.05
recognizing     0.20  0.74  0.04 -0.08  0.11  0.02 -0.02  0.02  0.00 -0.02  0.09
communicating   0.36  0.51  0.38 -0.05  0.04  0.20 -0.02  0.02  0.12  0.03 -0.02
guilt           0.64  0.14 -0.55  0.15  0.07  0.10 -0.01  0.01 -0.02 -0.02  0.02
disrespected    0.64  0.09 -0.43  0.17  0.04  0.03 -0.07  0.01  0.09 -0.14  0.09
free_will       0.66 -0.28  0.23 -0.01 -0.17  0.10  0.05  0.16  0.19  0.03 -0.03
choices         0.47  0.43  0.35 -0.10 -0.11  0.05  0.03 -0.04  0.08  0.07 -0.01
self_restraint  0.49  0.35 -0.15  0.09 -0.22 -0.05  0.03 -0.03 -0.04 -0.09 -0.07
intentions      0.67  0.00  0.25  0.00 -0.22  0.12  0.25 -0.13  0.04 -0.15 -0.04
goal            0.40  0.44  0.38 -0.05 -0.02  0.09 -0.03 -0.16 -0.08 -0.15 -0.14
conscious       0.72 -0.27  0.21 -0.10 -0.19 -0.11  0.02  0.14 -0.06 -0.04  0.13
self_aware      0.73  0.06 -0.03 -0.08 -0.20 -0.19 -0.07  0.27  0.08 -0.12  0.02
desires         0.79 -0.16  0.03 -0.02  0.02  0.01  0.18 -0.12  0.02  0.09 -0.12
embarrassed     0.61  0.12 -0.53  0.15  0.06  0.16  0.05  0.08 -0.06 -0.01  0.03
emo_recog       0.57  0.42 -0.27  0.14 -0.08 -0.12 -0.11 -0.14  0.07  0.14  0.03
joy             0.82 -0.07 -0.14 -0.22  0.20 -0.11 -0.08 -0.07 -0.01 -0.02 -0.04
morality        0.40  0.52 -0.27  0.19 -0.21 -0.11 -0.22 -0.12  0.09  0.07  0.01
personality     0.64  0.31 -0.16 -0.14  0.03 -0.13 -0.06 -0.05  0.09  0.03 -0.05
pleasure        0.81 -0.24  0.03 -0.17  0.09 -0.09 -0.01  0.00 -0.01  0.11 -0.12
pride           0.70  0.09 -0.47  0.15  0.03  0.13  0.06 -0.01  0.06 -0.04  0.12
                MR12  MR13   h2    u2 com
happy          -0.02 -0.04 0.80 0.203 1.3
depressed      -0.03  0.01 0.76 0.240 1.7
fear            0.05  0.09 0.77 0.226 1.7
angry           0.08  0.16 0.79 0.214 1.8
calm           -0.04  0.04 0.65 0.353 1.4
sounds          0.11 -0.08 0.61 0.392 3.2
seeing         -0.11  0.05 0.63 0.374 2.9
temperature     0.06 -0.05 0.55 0.448 3.2
odors           0.03 -0.05 0.71 0.294 3.7
depth          -0.08  0.01 0.86 0.141 6.2
computations    0.07 -0.02 0.82 0.179 1.4
thoughts        0.05 -0.04 0.71 0.290 1.4
reasoning       0.10 -0.02 0.56 0.441 2.2
remembering    -0.05 -0.01 0.63 0.375 1.7
beliefs         0.02  0.16 0.61 0.385 3.7
hungry         -0.05  0.00 0.90 0.099 2.8
tired          -0.02  0.04 0.78 0.219 1.9
pain            0.01  0.05 0.83 0.169 2.4
nauseated       0.08  0.05 0.58 0.419 1.4
safe           -0.02 -0.08 0.75 0.254 1.7
love            0.03 -0.02 0.70 0.299 1.6
recognizing     0.03  0.13 0.63 0.369 1.3
communicating  -0.10  0.09 0.61 0.389 3.5
guilt          -0.14  0.00 0.80 0.204 2.4
disrespected    0.10 -0.06 0.69 0.309 2.3
free_will      -0.06 -0.11 0.69 0.308 2.3
choices         0.04 -0.04 0.56 0.435 3.3
self_restraint -0.09  0.12 0.49 0.513 3.0
intentions     -0.04 -0.07 0.68 0.320 2.2
goal           -0.02 -0.07 0.59 0.409 4.0
conscious       0.01  0.03 0.74 0.258 2.0
self_aware      0.02  0.08 0.72 0.277 1.8
desires         0.19 -0.01 0.76 0.244 1.5
embarrassed    -0.08 -0.08 0.74 0.257 2.5
emo_recog       0.02  0.02 0.68 0.319 3.1
joy            -0.08 -0.12 0.84 0.160 1.5
morality        0.06 -0.05 0.67 0.328 4.2
personality    -0.16 -0.03 0.61 0.390 2.1
pleasure        0.01  0.02 0.78 0.217 1.4
pride           0.06 -0.08 0.79 0.211 2.2

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12
SS loadings           14.94 5.37 3.77 0.79 0.68 0.52 0.41 0.36 0.31 0.26 0.25 0.22
Proportion Var         0.37 0.13 0.09 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.37 0.51 0.60 0.62 0.64 0.65 0.66 0.67 0.68 0.69 0.69 0.70
Proportion Explained   0.53 0.19 0.13 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion  0.53 0.72 0.86 0.89 0.91 0.93 0.94 0.96 0.97 0.98 0.99 0.99
                      MR13
SS loadings           0.20
Proportion Var        0.00
Cumulative Var        0.70
Proportion Explained  0.01
Cumulative Proportion 1.00

Mean item complexity =  2.4
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  33.07 with Chi Square of  12924.08
The degrees of freedom for the model are 338  and the objective function was  1.02 

The root mean square of the residuals (RMSR) is  0.01 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  406 with the empirical chi square  64.06  with prob <  1 
The total number of observations was  406  with Likelihood Chi Square =  390.7  with prob <  0.025 

Tucker Lewis Index of factoring reliability =  0.99
RMSEA index =  0.024  and the 90 % confidence intervals are  0.008 0.028
BIC =  -1639.45
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7
Correlation of scores with factors             0.99 0.98 0.96 0.88 0.84 0.82 0.79
Multiple R square of scores with factors       0.98 0.95 0.93 0.77 0.71 0.68 0.62
Minimum correlation of possible factor scores  0.97 0.90 0.86 0.54 0.42 0.36 0.24
                                                MR8  MR9  MR10  MR11  MR12  MR13
Correlation of scores with factors             0.75 0.71  0.69  0.68  0.66  0.64
Multiple R square of scores with factors       0.56 0.50  0.48  0.46  0.44  0.40
Minimum correlation of possible factor scores  0.12 0.00 -0.04 -0.07 -0.12 -0.19
[1] 3

Step 2: Run EFA with varimax rotation

Factor Analysis using method =  minres
Call: fa(r = d2_all, nfactors = nfactors_d2_all, rotate = chosenRotType, 
    fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   h2   u2 com
happy           0.57  0.63  0.08 0.73 0.27 2.0
depressed       0.41  0.73  0.00 0.70 0.30 1.6
fear            0.83  0.21  0.09 0.75 0.25 1.2
angry           0.62  0.47  0.08 0.61 0.39 1.9
calm            0.59  0.39  0.24 0.56 0.44 2.1
sounds          0.07 -0.06  0.71 0.51 0.49 1.0
seeing          0.37 -0.02  0.65 0.56 0.44 1.6
temperature     0.25 -0.07  0.61 0.44 0.56 1.4
odors           0.45 -0.01  0.51 0.46 0.54 2.0
depth           0.03  0.08  0.58 0.34 0.66 1.0
computations   -0.73  0.19  0.45 0.77 0.23 1.8
thoughts        0.55  0.49  0.23 0.60 0.40 2.3
reasoning      -0.11  0.44  0.52 0.48 0.52 2.1
remembering    -0.19  0.18  0.70 0.56 0.44 1.3
beliefs         0.11  0.64  0.15 0.44 0.56 1.2
hungry          0.91 -0.04 -0.07 0.84 0.16 1.0
tired           0.86  0.14  0.09 0.77 0.23 1.1
pain            0.90  0.05  0.00 0.81 0.19 1.0
nauseated       0.62  0.39  0.06 0.54 0.46 1.7
safe            0.71  0.31  0.15 0.62 0.38 1.5
love            0.41  0.70  0.02 0.66 0.34 1.6
recognizing    -0.28  0.34  0.62 0.59 0.41 2.0
communicating   0.09  0.12  0.71 0.53 0.47 1.1
guilt           0.18  0.84 -0.04 0.73 0.27 1.1
disrespected    0.25  0.73 -0.01 0.60 0.40 1.2
free_will       0.72  0.17  0.14 0.56 0.44 1.2
choices         0.21  0.18  0.67 0.53 0.47 1.3
self_restraint  0.09  0.53  0.31 0.38 0.62 1.7
intentions      0.56  0.25  0.35 0.50 0.50 2.1
goal            0.16  0.13  0.67 0.50 0.50 1.2
conscious       0.75  0.22  0.15 0.63 0.37 1.3
self_aware      0.47  0.49  0.25 0.52 0.48 2.5
desires         0.67  0.42  0.14 0.64 0.36 1.8
embarrassed     0.17  0.79 -0.05 0.66 0.34 1.1
emo_recog       0.06  0.69  0.31 0.57 0.43 1.4
joy             0.58  0.59  0.11 0.69 0.31 2.1
morality       -0.11  0.60  0.33 0.47 0.53 1.6
personality     0.21  0.61  0.32 0.52 0.48 1.8
pleasure        0.73  0.41  0.09 0.71 0.29 1.6
pride           0.27  0.80 -0.01 0.71 0.29 1.2

                       MR1  MR2  MR3
SS loadings           9.98 8.28 5.52
Proportion Var        0.25 0.21 0.14
Cumulative Var        0.25 0.46 0.59
Proportion Explained  0.42 0.35 0.23
Cumulative Proportion 0.42 0.77 1.00

Mean item complexity =  1.5
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  33.07 with Chi Square of  12924.08
The degrees of freedom for the model are 663  and the objective function was  3.95 

The root mean square of the residuals (RMSR) is  0.03 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  406 with the empirical chi square  586.55  with prob <  0.98 
The total number of observations was  406  with Likelihood Chi Square =  1534.4  with prob <  6.4e-71 

Tucker Lewis Index of factoring reliability =  0.915
RMSEA index =  0.059  and the 90 % confidence intervals are  0.053 0.061
BIC =  -2447.81
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.98 0.97 0.96
Multiple R square of scores with factors       0.96 0.94 0.91
Minimum correlation of possible factor scores  0.93 0.88 0.83

back to TOC

Factor loadings table

Study 3

Design: 2 conditions (beetle, robot), within-subjects Date conducted: 2016-01-10

Demographics

NAs introduced by coercion

back to TOC

Exploratory factor analysis

Step 1: Run maximal EFA (without and with rotation)

Factor Analysis using method =  minres
Call: fa(r = d3_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11
happy           0.86  0.00 -0.16  0.06 -0.13 -0.12 -0.03 -0.09 -0.09  0.12 -0.12
depressed       0.75  0.07 -0.33  0.20 -0.08  0.02 -0.05 -0.05  0.08 -0.05  0.07
fear            0.80 -0.33  0.09 -0.04 -0.08  0.01 -0.03 -0.04  0.03  0.06  0.00
angry           0.81 -0.08 -0.15  0.03 -0.16  0.01  0.03  0.02 -0.09  0.08 -0.02
calm            0.81 -0.07  0.04 -0.07 -0.12 -0.08 -0.04 -0.13  0.05  0.03 -0.09
sounds          0.32  0.29  0.57  0.24  0.00 -0.19  0.17 -0.13 -0.18 -0.06  0.00
seeing          0.40  0.11  0.52  0.11  0.07 -0.16 -0.01 -0.07 -0.10 -0.08  0.00
temperature     0.42  0.11  0.59  0.21  0.04  0.07  0.05  0.08  0.07  0.17  0.04
odors           0.53 -0.06  0.45  0.20  0.21 -0.05 -0.05  0.14  0.02  0.07 -0.04
depth           0.39  0.30  0.40  0.17  0.03  0.14  0.15  0.01  0.23 -0.14 -0.04
computations   -0.40  0.73 -0.13 -0.03 -0.16  0.03  0.12  0.04  0.10  0.06 -0.02
thoughts        0.81  0.06  0.02 -0.20 -0.05 -0.17  0.11  0.02  0.03 -0.03  0.04
reasoning       0.38  0.63  0.06 -0.14 -0.07 -0.08 -0.04 -0.06  0.09 -0.05  0.11
remembering     0.24  0.60  0.27  0.00 -0.15  0.14 -0.03  0.06 -0.11 -0.02  0.08
beliefs         0.55  0.27 -0.31  0.03  0.23  0.19  0.16 -0.05 -0.09  0.03 -0.07
hungry          0.67 -0.60  0.21  0.07  0.12  0.03 -0.11 -0.03  0.04 -0.01  0.05
tired           0.77 -0.40  0.09  0.04  0.01  0.08 -0.09 -0.06  0.10  0.00 -0.04
pain            0.71 -0.53  0.20  0.05  0.06  0.00 -0.05  0.02 -0.01 -0.06  0.03
nauseated       0.78 -0.22 -0.06  0.12 -0.15  0.08 -0.01 -0.04  0.14 -0.14  0.05
safe            0.75 -0.24  0.10 -0.06  0.00 -0.08 -0.11 -0.02 -0.07  0.05  0.09
love            0.80  0.06 -0.22  0.08 -0.08  0.05 -0.04 -0.03 -0.07 -0.13  0.10
recognizing     0.22  0.71  0.17  0.03 -0.13 -0.18 -0.06 -0.02  0.07  0.00 -0.03
communicating   0.22  0.54  0.26  0.00 -0.01  0.05 -0.18  0.01  0.01  0.03 -0.03
guilt           0.66  0.19 -0.39  0.18  0.06 -0.04  0.02  0.07  0.01  0.07  0.17
disrespected    0.67  0.18 -0.38  0.19  0.07  0.08  0.07  0.01 -0.07  0.00  0.09
free_will       0.79 -0.21  0.07 -0.22  0.10 -0.02  0.11 -0.03 -0.06 -0.08  0.01
choices         0.52  0.29  0.34 -0.25  0.03  0.04 -0.07 -0.04  0.08  0.16  0.09
self_restraint  0.60  0.25 -0.14 -0.14  0.00  0.16 -0.01 -0.20 -0.04 -0.03  0.03
intentions      0.70 -0.02  0.18 -0.28  0.00  0.11  0.05  0.13 -0.06  0.01  0.09
goal            0.43  0.36  0.30 -0.02 -0.10  0.30 -0.11  0.10 -0.15 -0.07 -0.12
conscious       0.80 -0.19  0.08 -0.15  0.06 -0.05  0.10  0.02  0.04 -0.04  0.02
self_aware      0.74  0.00  0.00 -0.19  0.04 -0.12  0.11  0.08  0.08 -0.03 -0.13
desires         0.84 -0.22  0.08 -0.11 -0.06  0.10  0.11  0.12 -0.02  0.03 -0.01
embarrassed     0.63  0.16 -0.42  0.15  0.05 -0.14  0.02  0.17 -0.01  0.05  0.02
emo_recog       0.59  0.40 -0.16 -0.09  0.24 -0.11 -0.13  0.04  0.00 -0.04 -0.01
joy             0.84 -0.01 -0.19  0.10 -0.18 -0.03  0.05 -0.04  0.01  0.12 -0.06
morality        0.40  0.53 -0.15 -0.04  0.37  0.08  0.01 -0.17  0.05  0.08 -0.04
personality     0.68  0.32 -0.09 -0.08  0.00 -0.13 -0.07  0.14 -0.04 -0.12 -0.06
pleasure        0.84 -0.22 -0.02  0.02 -0.12  0.10  0.05 -0.02  0.00  0.06 -0.07
pride           0.71  0.17 -0.39  0.08  0.07  0.01 -0.12  0.07  0.03 -0.07 -0.14
                MR12  MR13   h2   u2 com
happy           0.10 -0.06 0.86 0.14 1.3
depressed      -0.05  0.00 0.75 0.25 1.7
fear            0.01  0.06 0.77 0.23 1.4
angry          -0.01  0.02 0.73 0.27 1.2
calm           -0.06  0.01 0.72 0.28 1.2
sounds          0.02  0.06 0.70 0.30 3.7
seeing         -0.04  0.04 0.50 0.50 2.6
temperature     0.10  0.07 0.65 0.35 2.7
odors          -0.01 -0.03 0.60 0.40 2.9
depth          -0.01 -0.06 0.56 0.44 4.9
computations    0.15  0.07 0.80 0.20 2.0
thoughts       -0.03 -0.03 0.76 0.24 1.3
reasoning       0.04 -0.03 0.60 0.40 2.0
remembering    -0.07 -0.03 0.56 0.44 2.2
beliefs         0.00  0.02 0.60 0.40 3.2
hungry         -0.01 -0.05 0.90 0.10 2.4
tired           0.06  0.05 0.81 0.19 1.7
pain            0.00 -0.05 0.84 0.16 2.1
nauseated       0.04  0.07 0.76 0.24 1.5
safe           -0.03  0.06 0.68 0.32 1.4
love            0.14 -0.02 0.77 0.23 1.4
recognizing    -0.10 -0.03 0.66 0.34 1.6
communicating  -0.03 -0.01 0.44 0.56 2.2
guilt          -0.04 -0.07 0.71 0.29 2.3
disrespected   -0.14  0.06 0.71 0.29 2.3
free_will       0.12  0.09 0.78 0.22 1.5
choices        -0.01  0.12 0.59 0.41 3.6
self_restraint -0.04  0.02 0.53 0.47 2.1
intentions     -0.02  0.02 0.64 0.36 1.7
goal            0.01 -0.05 0.57 0.43 4.7
conscious       0.03 -0.11 0.75 0.25 1.3
self_aware     -0.16  0.04 0.67 0.33 1.5
desires         0.01 -0.03 0.82 0.18 1.3
embarrassed     0.00  0.04 0.68 0.32 2.4
emo_recog       0.09 -0.08 0.66 0.34 2.8
joy             0.07 -0.11 0.83 0.17 1.3
morality        0.01 -0.06 0.66 0.34 3.4
personality     0.06 -0.01 0.64 0.36 1.8
pleasure       -0.10 -0.06 0.81 0.19 1.3
pride           0.00  0.20 0.77 0.23 2.2

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12
SS loadings           16.94 4.54 2.90 0.73 0.58 0.49 0.31 0.28 0.27 0.23 0.20 0.19
Proportion Var         0.42 0.11 0.07 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.00
Cumulative Var         0.42 0.54 0.61 0.63 0.64 0.65 0.66 0.67 0.68 0.68 0.69 0.69
Proportion Explained   0.61 0.16 0.10 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion  0.61 0.77 0.88 0.90 0.92 0.94 0.95 0.96 0.97 0.98 0.99 0.99
                      MR13
SS loadings           0.17
Proportion Var        0.00
Cumulative Var        0.70
Proportion Explained  0.01
Cumulative Proportion 1.00

Mean item complexity =  2.2
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  34.22 with Chi Square of  13170.85
The degrees of freedom for the model are 338  and the objective function was  1.01 

The root mean square of the residuals (RMSR) is  0.01 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  400 with the empirical chi square  61.88  with prob <  1 
The total number of observations was  400  with Likelihood Chi Square =  381  with prob <  0.053 

Tucker Lewis Index of factoring reliability =  0.992
RMSEA index =  0.022  and the 90 % confidence intervals are  0 0.027
BIC =  -1644.12
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7
Correlation of scores with factors             0.99 0.97 0.95 0.84 0.82 0.77 0.72
Multiple R square of scores with factors       0.99 0.94 0.90 0.71 0.67 0.59 0.51
Minimum correlation of possible factor scores  0.97 0.88 0.80 0.41 0.34 0.18 0.02
                                                 MR8   MR9  MR10  MR11  MR12  MR13
Correlation of scores with factors              0.68  0.68  0.67  0.65  0.65  0.63
Multiple R square of scores with factors        0.47  0.46  0.45  0.42  0.43  0.40
Minimum correlation of possible factor scores  -0.06 -0.07 -0.10 -0.16 -0.14 -0.20
[1] 3

Step 2: Run EFA with varimax rotation

Factor Analysis using method =  minres
Call: fa(r = d3_all, nfactors = nfactors_d3_all, rotate = chosenRotType, 
    fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR3   MR1   MR2   h2   u2 com
happy           0.54  0.66  0.17 0.76 0.24 2.1
depressed       0.37  0.73  0.06 0.68 0.32 1.5
fear            0.79  0.34  0.10 0.76 0.24 1.4
angry           0.56  0.60  0.11 0.69 0.31 2.1
calm            0.61  0.48  0.24 0.66 0.34 2.2
sounds          0.20 -0.04  0.65 0.47 0.53 1.2
seeing          0.36 -0.04  0.55 0.44 0.56 1.7
temperature     0.39 -0.07  0.60 0.52 0.48 1.8
odors           0.53  0.03  0.43 0.47 0.53 1.9
depth           0.19  0.11  0.59 0.39 0.61 1.3
computations   -0.79  0.10  0.26 0.70 0.30 1.2
thoughts        0.52  0.55  0.31 0.66 0.34 2.6
reasoning      -0.13  0.43  0.57 0.54 0.46 2.0
remembering    -0.15  0.20  0.65 0.49 0.51 1.3
beliefs         0.11  0.65  0.14 0.46 0.54 1.2
hungry          0.92  0.08 -0.03 0.86 0.14 1.0
tired           0.83  0.30  0.05 0.77 0.23 1.3
pain            0.90  0.14  0.02 0.83 0.17 1.0
nauseated       0.66  0.47  0.07 0.66 0.34 1.8
safe            0.70  0.34  0.16 0.63 0.37 1.6
love            0.44  0.69  0.15 0.69 0.31 1.8
recognizing    -0.26  0.30  0.65 0.58 0.42 1.8
communicating  -0.12  0.17  0.60 0.41 0.59 1.3
guilt           0.21  0.76  0.07 0.63 0.37 1.2
disrespected    0.23  0.75  0.08 0.62 0.38 1.2
free_will       0.70  0.39  0.17 0.67 0.33 1.7
choices         0.27  0.23  0.58 0.46 0.54 1.8
self_restraint  0.20  0.57  0.26 0.44 0.56 1.7
intentions      0.54  0.33  0.33 0.52 0.48 2.4
goal            0.15  0.22  0.57 0.39 0.61 1.5
conscious       0.70  0.40  0.19 0.69 0.31 1.8
self_aware      0.50  0.48  0.24 0.54 0.46 2.4
desires         0.74  0.42  0.18 0.76 0.24 1.7
embarrassed     0.19  0.74  0.02 0.59 0.41 1.1
emo_recog       0.10  0.64  0.34 0.53 0.47 1.6
joy             0.52  0.67  0.14 0.74 0.26 2.0
morality       -0.11  0.54  0.37 0.44 0.56 1.8
personality     0.23  0.62  0.36 0.57 0.43 1.9
pleasure        0.71  0.48  0.11 0.76 0.24 1.8
pride           0.25  0.77  0.07 0.67 0.33 1.2

                        MR3  MR1  MR2
SS loadings           10.13 9.03 4.92
Proportion Var         0.25 0.23 0.12
Cumulative Var         0.25 0.48 0.60
Proportion Explained   0.42 0.38 0.20
Cumulative Proportion  0.42 0.80 1.00

Mean item complexity =  1.6
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  34.22 with Chi Square of  13170.85
The degrees of freedom for the model are 663  and the objective function was  3.61 

The root mean square of the residuals (RMSR) is  0.03 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  400 with the empirical chi square  508.77  with prob <  1 
The total number of observations was  400  with Likelihood Chi Square =  1380.26  with prob <  1.3e-52 

Tucker Lewis Index of factoring reliability =  0.932
RMSEA index =  0.054  and the 90 % confidence intervals are  0.048 0.056
BIC =  -2592.08
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR3  MR1  MR2
Correlation of scores with factors             0.98 0.96 0.94
Multiple R square of scores with factors       0.96 0.93 0.88
Minimum correlation of possible factor scores  0.92 0.86 0.76

back to TOC

Factor loadings table

Study 4

Design: 21 conditions, between-subjects Date conducted: 2016-01-14

Demographics

Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector

back to TOC

Exploratory factor analysis

Step 1: Run maximal EFA (without and with rotation)

Factor Analysis using method =  minres
Call: fa(r = d4_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11
happy          0.88 -0.07 -0.25  0.15 -0.15  0.05 -0.03  0.07 -0.03  0.09  0.05
depressed      0.81  0.17 -0.16  0.15  0.03 -0.24  0.00 -0.06  0.02 -0.07 -0.01
fear           0.84 -0.37 -0.13 -0.07  0.10 -0.01  0.00  0.04 -0.05 -0.01  0.00
angry          0.86 -0.07 -0.15  0.12 -0.04 -0.09 -0.06 -0.05  0.06 -0.07 -0.04
calm           0.85 -0.20 -0.15 -0.03 -0.02  0.03 -0.02  0.11 -0.08  0.09  0.00
sounds         0.71 -0.32  0.41  0.14  0.13  0.13  0.00  0.03  0.03  0.01  0.02
seeing         0.77 -0.33  0.28  0.07  0.12  0.04 -0.05 -0.01  0.03 -0.01 -0.01
temperature    0.65 -0.31  0.41  0.05  0.18  0.05  0.03  0.04 -0.01  0.02 -0.07
odors          0.79 -0.25  0.17  0.03  0.16 -0.04  0.05 -0.15  0.05 -0.02 -0.08
depth          0.71 -0.03  0.39 -0.11  0.03 -0.04 -0.10  0.03  0.11  0.08 -0.05
computations   0.22  0.57  0.46  0.16  0.03  0.06 -0.06  0.06  0.05  0.09  0.05
thoughts       0.85  0.00 -0.10 -0.08 -0.14  0.14  0.21 -0.21  0.05 -0.03  0.01
reasoning      0.73  0.36  0.22 -0.13 -0.10  0.01  0.07 -0.10  0.01  0.05 -0.01
remembering    0.75  0.06  0.42  0.12 -0.12 -0.10 -0.06 -0.08  0.04  0.01  0.02
beliefs        0.66  0.54 -0.11 -0.12  0.07  0.16  0.07  0.00  0.05  0.07 -0.02
hungry         0.78 -0.44 -0.15 -0.13  0.16  0.03 -0.02 -0.02 -0.02 -0.02  0.06
tired          0.85 -0.37 -0.15  0.03  0.06 -0.03  0.00 -0.02 -0.04  0.01  0.03
pain           0.81 -0.43 -0.17 -0.02  0.19  0.03  0.01 -0.08 -0.03 -0.05  0.07
nauseated      0.82 -0.12 -0.18  0.10  0.03 -0.13 -0.02 -0.04  0.05  0.10 -0.03
safe           0.85 -0.22 -0.11 -0.08 -0.04  0.02  0.03  0.21 -0.06  0.04  0.00
love           0.84  0.05 -0.26  0.15 -0.12  0.09 -0.03  0.02  0.00 -0.03 -0.01
recognizing    0.79 -0.04  0.24  0.33 -0.09  0.05 -0.01 -0.02 -0.01  0.02  0.09
communicating  0.75 -0.08  0.40  0.13 -0.15  0.03  0.12  0.12 -0.13 -0.18 -0.01
guilt          0.74  0.47 -0.18  0.09  0.14 -0.03  0.04  0.00  0.05  0.01  0.09
disrespected   0.73  0.43 -0.12  0.02  0.18 -0.04  0.01  0.07 -0.05 -0.11  0.01
free_will      0.82 -0.07 -0.04 -0.28 -0.07  0.02 -0.14 -0.02  0.04 -0.06 -0.04
choices        0.79 -0.03  0.33 -0.16 -0.07 -0.07 -0.08  0.01 -0.04  0.00  0.00
self_restraint 0.75  0.38  0.10 -0.09  0.05 -0.21  0.00 -0.06 -0.23  0.08  0.10
intentions     0.81  0.03  0.06 -0.26 -0.04 -0.07  0.00  0.11  0.13  0.01 -0.01
goal           0.67  0.10  0.32 -0.24 -0.09 -0.11  0.21  0.05  0.01 -0.05  0.05
conscious      0.82 -0.15 -0.06 -0.13 -0.03  0.10  0.08 -0.01 -0.04  0.02  0.06
self_aware     0.77  0.21  0.02 -0.24 -0.07  0.13 -0.23 -0.08 -0.01 -0.07  0.15
desires        0.87 -0.10 -0.12 -0.09 -0.08 -0.08  0.09  0.06  0.06  0.05 -0.10
embarrassed    0.70  0.50 -0.20  0.08  0.21  0.02  0.09  0.11  0.15 -0.03  0.09
emo_recog      0.77  0.34 -0.02  0.09  0.02  0.01 -0.09 -0.01 -0.04 -0.12 -0.05
joy            0.89 -0.04 -0.23  0.14 -0.15  0.02  0.02 -0.01 -0.03  0.10  0.00
morality       0.70  0.53 -0.01 -0.02  0.12  0.11  0.00 -0.08 -0.19  0.07 -0.19
personality    0.89  0.00 -0.12  0.14 -0.17  0.04 -0.02 -0.02  0.04 -0.07 -0.05
pleasure       0.90 -0.22 -0.15  0.03 -0.04 -0.04 -0.03 -0.03  0.05  0.07  0.01
pride          0.81  0.32 -0.16 -0.03 -0.03  0.01 -0.08  0.08  0.03 -0.08 -0.12
                MR12  MR13   h2    u2 com
happy           0.01 -0.05 0.91 0.090 1.4
depressed       0.07  0.11 0.82 0.183 1.5
fear           -0.03  0.06 0.88 0.117 1.5
angry          -0.08 -0.08 0.82 0.181 1.2
calm            0.02  0.08 0.83 0.175 1.3
sounds         -0.04  0.04 0.83 0.170 2.4
seeing         -0.09 -0.06 0.82 0.183 1.8
temperature     0.18 -0.03 0.77 0.229 2.7
odors           0.00 -0.03 0.79 0.213 1.5
depth           0.11 -0.02 0.71 0.290 1.9
computations    0.02  0.05 0.64 0.360 2.6
thoughts        0.03  0.13 0.88 0.116 1.5
reasoning      -0.05 -0.08 0.76 0.241 1.9
remembering    -0.07  0.14 0.82 0.180 1.9
beliefs         0.02  0.01 0.81 0.193 2.3
hungry         -0.05  0.00 0.88 0.120 1.9
tired          -0.01 -0.04 0.90 0.104 1.5
pain            0.01  0.01 0.92 0.078 1.8
nauseated       0.08 -0.01 0.77 0.233 1.3
safe            0.00  0.13 0.86 0.141 1.4
love            0.06 -0.08 0.83 0.167 1.4
recognizing    -0.05 -0.05 0.82 0.180 1.7
communicating   0.00 -0.02 0.85 0.153 2.1
guilt          -0.04  0.01 0.84 0.163 2.0
disrespected   -0.04 -0.06 0.80 0.204 2.0
free_will      -0.03  0.07 0.79 0.206 1.4
choices        -0.12  0.02 0.79 0.213 1.6
self_restraint  0.06 -0.01 0.85 0.153 2.1
intentions     -0.07 -0.04 0.77 0.230 1.4
goal            0.04 -0.07 0.70 0.297 2.3
conscious       0.04 -0.05 0.73 0.266 1.2
self_aware      0.08 -0.04 0.82 0.185 1.8
desires        -0.01 -0.07 0.84 0.163 1.2
embarrassed    -0.04  0.03 0.89 0.109 2.5
emo_recog       0.07  0.00 0.75 0.250 1.6
joy            -0.05 -0.03 0.90 0.103 1.3
morality       -0.09  0.01 0.88 0.117 2.5
personality     0.06  0.03 0.86 0.135 1.2
pleasure       -0.01 -0.02 0.89 0.113 1.2
pride           0.02  0.00 0.81 0.189 1.5

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12
SS loadings           24.49 3.38 2.06 0.74 0.48 0.31 0.27 0.24 0.21 0.17 0.16 0.15
Proportion Var         0.61 0.08 0.05 0.02 0.01 0.01 0.01 0.01 0.01 0.00 0.00 0.00
Cumulative Var         0.61 0.70 0.75 0.77 0.78 0.79 0.79 0.80 0.80 0.81 0.81 0.82
Proportion Explained   0.75 0.10 0.06 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.00
Cumulative Proportion  0.75 0.85 0.91 0.93 0.95 0.96 0.97 0.97 0.98 0.99 0.99 1.00
                      MR13
SS loadings           0.14
Proportion Var        0.00
Cumulative Var        0.82
Proportion Explained  0.00
Cumulative Proportion 1.00

Mean item complexity =  1.7
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  52.07 with Chi Square of  21651.8
The degrees of freedom for the model are 338  and the objective function was  1.29 

The root mean square of the residuals (RMSR) is  0.01 
The df corrected root mean square of the residuals is  0.01 

The harmonic number of observations is  431 with the empirical chi square  34.49  with prob <  1 
The total number of observations was  431  with Likelihood Chi Square =  526.8  with prob <  2e-10 

Tucker Lewis Index of factoring reliability =  0.979
RMSEA index =  0.039  and the 90 % confidence intervals are  0.03 0.042
BIC =  -1523.55
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7
Correlation of scores with factors             1.00 0.98 0.96 0.89 0.88 0.80 0.77
Multiple R square of scores with factors       0.99 0.96 0.92 0.80 0.77 0.64 0.60
Minimum correlation of possible factor scores  0.99 0.91 0.83 0.60 0.55 0.28 0.19
                                                MR8  MR9 MR10 MR11  MR12  MR13
Correlation of scores with factors             0.79 0.76 0.71 0.72  0.66  0.67
Multiple R square of scores with factors       0.62 0.59 0.51 0.51  0.44  0.45
Minimum correlation of possible factor scores  0.24 0.17 0.01 0.03 -0.12 -0.10
[1] 3

Step 2: Run EFA with varimax rotation

Factor Analysis using method =  minres
Call: fa(r = d4_all, nfactors = nfactors_d4_all, rotate = chosenRotType, 
    fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1  MR2  MR3   h2   u2 com
happy           0.74 0.48 0.23 0.84 0.16 1.9
depressed       0.52 0.62 0.23 0.70 0.30 2.2
fear            0.83 0.20 0.37 0.86 0.14 1.5
angry           0.68 0.46 0.31 0.76 0.24 2.2
calm            0.75 0.35 0.32 0.79 0.21 1.8
sounds          0.45 0.08 0.75 0.76 0.24 1.7
seeing          0.56 0.13 0.67 0.78 0.22 2.0
temperature     0.40 0.06 0.71 0.68 0.32 1.6
odors           0.58 0.22 0.58 0.72 0.28 2.3
depth           0.29 0.32 0.68 0.65 0.35 1.8
computations   -0.40 0.51 0.39 0.58 0.42 2.8
thoughts        0.60 0.49 0.33 0.72 0.28 2.5
reasoning       0.17 0.66 0.48 0.70 0.30 2.0
remembering     0.26 0.41 0.71 0.74 0.26 1.9
beliefs         0.19 0.83 0.14 0.74 0.26 1.2
hungry          0.84 0.11 0.33 0.83 0.17 1.3
tired           0.85 0.21 0.36 0.89 0.11 1.5
pain            0.86 0.14 0.33 0.87 0.13 1.3
nauseated       0.70 0.40 0.27 0.71 0.29 1.9
safe            0.74 0.32 0.36 0.78 0.22 1.9
love            0.65 0.56 0.18 0.77 0.23 2.1
recognizing     0.43 0.38 0.59 0.67 0.33 2.6
communicating   0.35 0.30 0.71 0.71 0.29 1.8
guilt           0.31 0.82 0.13 0.79 0.21 1.3
disrespected    0.30 0.78 0.18 0.73 0.27 1.4
free_will       0.60 0.42 0.38 0.68 0.32 2.6
choices         0.38 0.37 0.67 0.73 0.27 2.2
self_restraint  0.24 0.71 0.38 0.70 0.30 1.8
intentions      0.49 0.47 0.44 0.66 0.34 3.0
goal            0.23 0.41 0.57 0.55 0.45 2.2
conscious       0.65 0.35 0.38 0.69 0.31 2.2
self_aware      0.38 0.60 0.35 0.63 0.37 2.4
desires         0.69 0.43 0.34 0.78 0.22 2.2
embarrassed     0.29 0.82 0.09 0.77 0.23 1.3
emo_recog       0.33 0.72 0.30 0.71 0.29 1.8
joy             0.72 0.51 0.25 0.84 0.16 2.1
morality        0.17 0.81 0.25 0.74 0.26 1.3
personality     0.64 0.52 0.33 0.80 0.20 2.5
pleasure        0.79 0.35 0.35 0.87 0.13 1.8
pride           0.43 0.74 0.20 0.78 0.22 1.8

                        MR1   MR2  MR3
SS loadings           12.24 10.06 7.40
Proportion Var         0.31  0.25 0.19
Cumulative Var         0.31  0.56 0.74
Proportion Explained   0.41  0.34 0.25
Cumulative Proportion  0.41  0.75 1.00

Mean item complexity =  1.9
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  52.07 with Chi Square of  21651.8
The degrees of freedom for the model are 663  and the objective function was  5.44 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  431 with the empirical chi square  406.4  with prob <  1 
The total number of observations was  431  with Likelihood Chi Square =  2251.71  with prob <  1e-171 

Tucker Lewis Index of factoring reliability =  0.91
RMSEA index =  0.077  and the 90 % confidence intervals are  0.071 0.078
BIC =  -1770.12
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.98 0.97 0.95
Multiple R square of scores with factors       0.95 0.95 0.91
Minimum correlation of possible factor scores  0.91 0.90 0.81

back to TOC

Factor loadings table

Big factor loadings table for all studies (Studies 1-4)

Joining, by = "mc"
Joining, by = "mc"
Joining, by = "mc"

Figures

Figure 1

Mean ratings of 40 mental capacities for a subset of the 21 entities included in Study 4. (See Fig. S5 for mean ratings for the full set of entities.) Participants responded on a scale from 0 (Not at all capable) to 6 (Highly capable). Error bars are nonparametric bootstrapped 95% confidence intervals. Mental capacities are grouped according to their dominant factor loading in Study 1. Doing computations was the only item to load negatively on its dominant factor in any study (and did so in Studies 1-3); in Study 4, it loaded positively on its dominant factor (Factor 2, “heart”).

Figure S1 (supporting materials)

Factor loadings for the 40 mental capacities on the three rotated factors in Study 1. Items are colored by their dominant factor loading: Items that loaded most strongly on the body factor (physiological states and will) are in red; items that loaded most strongly on the heart factor (social-emotional experiences and morality) are in blue; and items that loaded most strongly on the mind factor (perceptual-cognitive abilities and goal pursuit) are in green.

Joining, by = "item"

Figure S2 (supporting materials)

Mean ratings of 40 mental capacities for the 2 entities included in Studies 1-3. Participants responded on a scale from 0 (Not at all capable) to 6 (Highly capable). Error bars are nonparametric bootstrapped 95% confidence intervals. Mental capacities are grouped according to their dominant factor loading in Study 1.

Figure S3 (supporting materials)

Mean ratings of 40 mental capacities for all 21 entities included in Study 4. Participants responded on a scale from 0 (Not at all capable) to 6 (Highly capable). Error bars are nonparametric bootstrapped 95% confidence intervals. Mental capacities are grouped according to their dominant factor loading in Study 4.

LS0tCnRpdGxlOiAiQm9keSwgSGVhcnQsICYgTWluZCAoV2Vpc21hbiwgRHdlY2ssICYgTWFya21hbiwgc3VibWl0dGVkKSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogZmxhdGx5CiAgICB0b2M6IHllcwogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgojIFNldHVwCgpgYGB7ciB3b3Jrc3BhY2Ugc2V0dXAsIGluY2x1ZGUgPSBGfQojIGxvYWQgbGlicmFyaWVzCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KGxhbmdjb2cpICMgc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vbGFuZ2NvZy9sYW5nY29nCmxpYnJhcnkocm1zKQpsaWJyYXJ5KHNjYXR0ZXJwbG90M2QpCmxpYnJhcnkobGF0dGljZSkKbGlicmFyeShkaXJlY3RsYWJlbHMpCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKCiMgY2xlYXIgd29ya3NwYWNlCiMgcm0obGlzdCA9IGxzKGFsbCA9IFQpKQojIGdyYXBoaWNzLm9mZigpCmBgYAoKYGBge3IgZnVuY3Rpb25zLCBpbmNsdWRlID0gRn0KIyBtYWtlIHJvdW5kaW5nIGZ1bmN0aW9uCnJvdW5kMiA8LSBmdW5jdGlvbih4KSB7Zm9ybWF0KHJvdW5kKHgsIDIpLCBuc21hbGwgPSAyKX0KCiMgbWFrZSBjbGVhbnVwIGZ1bmN0aW9uCmNsZWFudXAgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiKSkgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZF9yYXdfc3R1ZHkxfQogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZF9yYXdfc3R1ZHkyfQogICAgCiAgICAjIGVuYWN0IGV4Y2x1c2lvbmFyeSBjcml0ZXJpYQogICAgZF9jbGVhbl8xIDwtIGQgJT4lCiAgICAgIG11dGF0ZShmaW5pc2hlZF9tb2QgPSBpZmVsc2UoaXMubmEoQ0FUQ0gpLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmaW5pc2hlZCA9PSAxLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUpKSkgJT4lCiAgICAgIGZpbHRlcihDQVRDSCA9PSAxLCAjIGV4Y2x1ZGUgUHMgd2hvIGZhaWwgY2F0Y2ggdHJpYWxzIAogICAgICAgICAgICAgZmluaXNoZWRfbW9kICE9IDApICU+JSAjIGV4Y2x1ZGUgUHMgd2hvIGRpZCBub3QgY29tcGxldGUgdGFzawogICAgICBtdXRhdGUoeW9iX2NvcnJlY3QgPSBhcy5udW1lcmljKAogICAgICAgIGlmZWxzZShhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA+IDE5MDAgJiAKICAgICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA8IDIwMDAsIAogICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSwgTkEpKSwgIyBjb3JyZWN0IGZvcm1hdHRpbmcgaW4geW9iCiAgICAgICAgYWdlX2FwcHJveCA9IDIwMTYgLSB5b2JfY29ycmVjdCkgJT4lICMgY2FsY3VsYXRlIGFwcHJveGltYXRlIGFnZQogICAgICBtdXRhdGUoZ2VuZGVyID0gZmFjdG9yKGdlbmRlciwgbGV2ZWxzID0gYygxLCAyLCAwKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygibSIsICJmIiwgIm90aGVyIikpKSAlPiUKICAgICAgZmlsdGVyKGFnZV9hcHByb3ggPj0gMTgpICMgZXhjbHVkZSBQcyB3aG8gYXJlIHlvdW5nZXIgdGhhbiAxOCB5ZWFycwogICAgCiAgICAjIHJlY29kZSBiYWNrZ3JvdW5kIGFuZCBkZW1vZ3JhcGhpYyB2YXJpYWJsZXMKICAgIGRfY2xlYW4gPC0gZF9jbGVhbl8xICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHN0dWR5IG51bWJlcgogICAgICAgIHN0dWR5ID0gZmFjdG9yKHN0dWR5KSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgZHVyYXRpb24KICAgICAgICBkdXJhdGlvbiA9IGFzLm51bWVyaWMoZGlmZnRpbWUoc3RycHRpbWUoZW5kX3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJwdGltZShzdGFydF90aW1lLCAiJUk6JU06JVMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMgPSAibWlucyIpKSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmFjZQogICAgICAgIHJhY2VfYXNpYW5fZWFzdCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX2Vhc3QpLCAiIiwgImFzaWFuX2Vhc3QgIikpLAogICAgICAgIHJhY2VfYXNpYW5fc291dGggPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9zb3V0aCksICIiLCAiYXNpYW5fc291dGggIikpLAogICAgICAgIHJhY2VfYXNpYW5fb3RoZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9vdGhlciksICIiLCAiYXNpYW5fb3RoZXIgIikpLAogICAgICAgIHJhY2VfYmxhY2sgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9ibGFjayksICIiLCAiYmxhY2sgIikpLAogICAgICAgIHJhY2VfaGlzcGFuaWMgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9oaXNwYW5pYyksICIiLCAiaGlzcGFuaWMgIikpLAogICAgICAgIHJhY2VfbWlkZGxlX2Vhc3Rlcm4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9taWRkbGVfZWFzdGVybiksICIiLCAibWlkZGxlX2Vhc3Rlcm4gIikpLAogICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfbmF0aXZlX2FtZXJpY2FuKSwgIiIsICJuYXRpdmVfYW1lcmljYW4gIikpLAogICAgICAgIHJhY2VfcGFjX2lzbGFuZGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfcGFjX2lzbGFuZGVyKSwgIiIsICJwYWNfaXNsYW5kZXIgIikpLAogICAgICAgIHJhY2Vfd2hpdGUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV93aGl0ZSksICIiLCAid2hpdGUgIikpLAogICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2Vfb3RoZXJfcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJhY2VfY2F0ID0gcGFzdGUwKHJhY2VfYXNpYW5fZWFzdCwgcmFjZV9hc2lhbl9zb3V0aCwgcmFjZV9hc2lhbl9vdGhlciwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX2JsYWNrLCByYWNlX2hpc3BhbmljLCByYWNlX21pZGRsZV9lYXN0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuLCByYWNlX3BhY19pc2xhbmRlciwgcmFjZV93aGl0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX290aGVyX3ByZWZubyksCiAgICAgICAgcmFjZV9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJhY2VfY2F0KSksCiAgICAgICAgcmFjZV9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJhY2VfY2F0MikgPT0gVCwgIm11bHRpcmFjaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmNoYXJhY3RlcihyYWNlX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5LCBzdWJpZDplbmRfdGltZSwgZHVyYXRpb24sIGZpbmlzaGVkOmdlbmRlciwgCiAgICAgICAgICAgICByZWxpZ2lvbl9idWRkaGlzbTphZ2VfYXBwcm94LCByYWNlX2NhdDMpICU+JQogICAgICByZW5hbWUocmFjZV9jYXQgPSByYWNlX2NhdDMpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHJlbGlnaW9uCiAgICAgICAgcmVsaWdpb25fYnVkZGhpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fYnVkZGhpc20pLCAiIiwgImJ1ZGRoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9jaHJpc3RpYW5pdHkgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fY2hyaXN0aWFuaXR5KSwgIiIsICJjaHJpc3RpYW5pdHkgIikpLAogICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2hpbmR1aXNtKSwgIiIsICJoaW5kdWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25faXNsYW0gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faXNsYW0pLCAiIiwgImlzbGFtICIpKSwKICAgICAgICByZWxpZ2lvbl9qYWluaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2phaW5pc20pLCAiIiwgImphaW5pc20gIikpLAogICAgICAgIHJlbGlnaW9uX2p1ZGFpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fanVkYWlzbSksICIiLCAianVkYWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fc2lraGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9zaWtoaXNtKSwgIiIsICJzaWtoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9vdGhlciksICIiLCAib3RoZXIgIikpLAogICAgICAgIHJlbGlnaW9uX25vbmUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fbm9uZSksICIiLCAibm9uZSAiKSksCiAgICAgICAgcmVsaWdpb25fcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3ByZWZubyksICIiLCAib3RoZXJfcHJlZm5vICIpKSwKICAgICAgICByZWxpZ2lvbl9jYXQgPSBwYXN0ZTAocmVsaWdpb25fYnVkZGhpc20sIHJlbGlnaW9uX2NocmlzdGlhbml0eSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtLCByZWxpZ2lvbl9pc2xhbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2phaW5pc20sIHJlbGlnaW9uX2p1ZGFpc20sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxpZ2lvbl9zaWtoaXNtLCByZWxpZ2lvbl9vdGhlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX25vbmUsIHJlbGlnaW9uX3ByZWZubyksCiAgICAgICAgcmVsaWdpb25fY2F0MiA9IGZhY3RvcihzdWIoIiArJCIsICIiLCByZWxpZ2lvbl9jYXQpKSwKICAgICAgICByZWxpZ2lvbl9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJlbGlnaW9uX2NhdDIpID09IFQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXJlbGlnaW91cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJlbGlnaW9uX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5OmdlbmRlciwgZmVlZGJhY2s6cmFjZV9jYXQsIHJlbGlnaW9uX2NhdDMpICU+JQogICAgICByZW5hbWUocmVsaWdpb25fY2F0ID0gcmVsaWdpb25fY2F0MykKICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8xKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIikgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgZCA8LSBkX3Jhd19zdHVkeTMKICAgIAogICAgIyBlbmFjdCBleGNsdXNpb25hcnkgY3JpdGVyaWEKICAgIGRfY2xlYW5fMSA8LSBkICU+JQogICAgICBtdXRhdGUoZmluaXNoZWRfbW9kID0gaWZlbHNlKGlzLm5hKENBVENILi5jaGFyYWN0ZXJMKSB8IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMubmEoQ0FUQ0guLmNoYXJhY3RlclIpLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmaW5pc2hlZCA9PSAxLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUpKSkgJT4lCiAgICAgIGZpbHRlcihDQVRDSC4uY2hhcmFjdGVyTCA9PSA1LCAjIGV4Y2x1ZGUgUHMgd2hvIGZhaWwgY2F0Y2ggdHJpYWxzIAogICAgICAgICAgICAgQ0FUQ0guLmNoYXJhY3RlclIgPT0gNSwKICAgICAgICAgICAgIGZpbmlzaGVkX21vZCAhPSAwKSAlPiUgIyBleGNsdWRlIFBzIHdobyBkaWQgbm90IGNvbXBsZXRlIHRhc2sKICAgICAgbXV0YXRlKHlvYl9jb3JyZWN0ID0gYXMubnVtZXJpYygKICAgICAgICBpZmVsc2UoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPiAxOTAwICYgCiAgICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPCAyMDAwLCAKICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSksIE5BKSksICMgY29ycmVjdCBmb3JtYXR0aW5nIGluIHlvYgogICAgICAgIGFnZV9hcHByb3ggPSAyMDE2IC0geW9iX2NvcnJlY3QpICU+JSAjIGNhbGN1bGF0ZSBhcHByb3hpbWF0ZSBhZ2UKICAgICAgbXV0YXRlKGdlbmRlciA9IGZhY3RvcihnZW5kZXIsIGxldmVscyA9IGMoMSwgMiwgMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIm0iLCAiZiIsICJvdGhlciIpKSkgJT4lCiAgICAgIGZpbHRlcihhZ2VfYXBwcm94ID49IDE4KSAjIGV4Y2x1ZGUgUHMgd2hvIGFyZSB5b3VuZ2VyIHRoYW4gMTggeWVhcnMKICAgIAogICAgIyByZWNvZGUgYmFja2dyb3VuZCBhbmQgZGVtb2dyYXBoaWMgdmFyaWFibGVzCiAgICBkX2NsZWFuXzIgPC0gZF9jbGVhbl8xICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHN0dWR5IG51bWJlcgogICAgICAgIHN0dWR5ID0gZmFjdG9yKHN0dWR5KSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgZHVyYXRpb24KICAgICAgICBkdXJhdGlvbiA9IGFzLm51bWVyaWMoZGlmZnRpbWUoc3RycHRpbWUoZW5kX3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJwdGltZShzdGFydF90aW1lLCAiJUk6JU06JVMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMgPSAibWlucyIpKSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmFjZQogICAgICAgIHJhY2VfYXNpYW5fZWFzdCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX2Vhc3QpLCAiIiwgImFzaWFuX2Vhc3QgIikpLAogICAgICAgIHJhY2VfYXNpYW5fc291dGggPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9zb3V0aCksICIiLCAiYXNpYW5fc291dGggIikpLAogICAgICAgIHJhY2VfYXNpYW5fb3RoZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9vdGhlciksICIiLCAiYXNpYW5fb3RoZXIgIikpLAogICAgICAgIHJhY2VfYmxhY2sgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9ibGFjayksICIiLCAiYmxhY2sgIikpLAogICAgICAgIHJhY2VfaGlzcGFuaWMgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9oaXNwYW5pYyksICIiLCAiaGlzcGFuaWMgIikpLAogICAgICAgIHJhY2VfbWlkZGxlX2Vhc3Rlcm4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9taWRkbGVfZWFzdGVybiksICIiLCAibWlkZGxlX2Vhc3Rlcm4gIikpLAogICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfbmF0aXZlX2FtZXJpY2FuKSwgIiIsICJuYXRpdmVfYW1lcmljYW4gIikpLAogICAgICAgIHJhY2VfcGFjX2lzbGFuZGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfcGFjX2lzbGFuZGVyKSwgIiIsICJwYWNfaXNsYW5kZXIgIikpLAogICAgICAgIHJhY2Vfd2hpdGUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV93aGl0ZSksICIiLCAid2hpdGUgIikpLAogICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2Vfb3RoZXJfcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJhY2VfY2F0ID0gcGFzdGUwKHJhY2VfYXNpYW5fZWFzdCwgcmFjZV9hc2lhbl9zb3V0aCwgcmFjZV9hc2lhbl9vdGhlciwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX2JsYWNrLCByYWNlX2hpc3BhbmljLCByYWNlX21pZGRsZV9lYXN0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuLCByYWNlX3BhY19pc2xhbmRlciwgcmFjZV93aGl0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX290aGVyX3ByZWZubyksCiAgICAgICAgcmFjZV9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJhY2VfY2F0KSksCiAgICAgICAgcmFjZV9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJhY2VfY2F0MikgPT0gVCwgIm11bHRpcmFjaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmNoYXJhY3RlcihyYWNlX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5LCBzdWJpZDplbmRfdGltZSwgZHVyYXRpb24sIGZpbmlzaGVkOmdlbmRlciwgCiAgICAgICAgICAgICByZWxpZ2lvbl9idWRkaGlzbTphZ2VfYXBwcm94LCByYWNlX2NhdDMpICU+JQogICAgICByZW5hbWUocmFjZV9jYXQgPSByYWNlX2NhdDMpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHJlbGlnaW9uCiAgICAgICAgcmVsaWdpb25fYnVkZGhpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fYnVkZGhpc20pLCAiIiwgImJ1ZGRoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9jaHJpc3RpYW5pdHkgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fY2hyaXN0aWFuaXR5KSwgIiIsICJjaHJpc3RpYW5pdHkgIikpLAogICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2hpbmR1aXNtKSwgIiIsICJoaW5kdWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25faXNsYW0gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faXNsYW0pLCAiIiwgImlzbGFtICIpKSwKICAgICAgICByZWxpZ2lvbl9qYWluaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2phaW5pc20pLCAiIiwgImphaW5pc20gIikpLAogICAgICAgIHJlbGlnaW9uX2p1ZGFpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fanVkYWlzbSksICIiLCAianVkYWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fc2lraGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9zaWtoaXNtKSwgIiIsICJzaWtoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9vdGhlciksICIiLCAib3RoZXIgIikpLAogICAgICAgIHJlbGlnaW9uX25vbmUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fbm9uZSksICIiLCAibm9uZSAiKSksCiAgICAgICAgcmVsaWdpb25fcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3ByZWZubyksICIiLCAib3RoZXJfcHJlZm5vICIpKSwKICAgICAgICByZWxpZ2lvbl9jYXQgPSBwYXN0ZTAocmVsaWdpb25fYnVkZGhpc20sIHJlbGlnaW9uX2NocmlzdGlhbml0eSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtLCByZWxpZ2lvbl9pc2xhbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2phaW5pc20sIHJlbGlnaW9uX2p1ZGFpc20sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxpZ2lvbl9zaWtoaXNtLCByZWxpZ2lvbl9vdGhlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX25vbmUsIHJlbGlnaW9uX3ByZWZubyksCiAgICAgICAgcmVsaWdpb25fY2F0MiA9IGZhY3RvcihzdWIoIiArJCIsICIiLCByZWxpZ2lvbl9jYXQpKSwKICAgICAgICByZWxpZ2lvbl9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJlbGlnaW9uX2NhdDIpID09IFQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXJlbGlnaW91cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJlbGlnaW9uX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5OmdlbmRlciwgZmVlZGJhY2s6cmFjZV9jYXQsIHJlbGlnaW9uX2NhdDMpICU+JQogICAgICByZW5hbWUocmVsaWdpb25fY2F0ID0gcmVsaWdpb25fY2F0MykKICAgIAogICAgIyByZW5hbWUgcmVzcG9uc2UgdmFyaWFibGVzCiAgICBkX2NsZWFuXzMgPC0gZF9jbGVhbl8yCiAgICBuYW1lcyhkX2NsZWFuXzMpIDwtIGdzdWIoImdldCIsICIiLCBuYW1lcyhkX2NsZWFuXzMpKQogICAgbmFtZXMoZF9jbGVhbl8zKSA8LSBnc3ViKCJcXC4iLCAiIiwgbmFtZXMoZF9jbGVhbl8zKSkKICAgIG5hbWVzKGRfY2xlYW5fMykgPC0gZ3N1YigiY2hhciIsICJfY2hhciIsIG5hbWVzKGRfY2xlYW5fMykpCiAgICBuYW1lcyhkX2NsZWFuXzMpW25hbWVzKGRfY2xlYW5fMykgJWluJSBjKCJfY2hhcmFjdGVyTCIsICJfY2hhcmFjdGVyUiIpXSA8LSAKICAgICAgYygiY2hhcmFjdGVyTCIsICJjaGFyYWN0ZXJSIikKICAgIAogICAgIyByZWNvZGUgcmVzcG9uc2UgdmFyaWFibGVzIChjZW50ZXIpCiAgICBkX2NsZWFuXzQgPC0gZF9jbGVhbl8zCiAgICBmb3IoaSBpbiAxMTo5MikgewogICAgICBkX2NsZWFuXzRbLGldIDwtIGRfY2xlYW5fNFssaV0gLSA0ICMgdHJhbnNmb3JtIGZyb20gMSB0byA3IC0tPiAtMyB0byAzCiAgICB9CiAgICAKICAgICMgcmVjb2RlIGNoYXJhY3RlckwgdnMuIGNoYXJhY3RlclIgYXMgYmVldGxlIHZzLiByb2JvdAogICAgZF9jbGVhbl81X2RlbW8gPC0gZF9jbGVhbl80ICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5OmNvbmRpdGlvbiwgeW9iOnJlbGlnaW9uX2NhdCkKICAgIAogICAgZF9jbGVhbl81X2NoYXJhY3RlckwgPC0gZF9jbGVhbl80ICU+JQogICAgICBtdXRhdGUodGFyZ2V0ID0gY2hhcmFjdGVyTCkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkLCB0YXJnZXQsIGhhcHB5X2NoYXJhY3Rlckw6Q0FUQ0hfY2hhcmFjdGVyTCkKICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJMKSA8LSBnc3ViKCJfY2hhcmFjdGVyTCIsICIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJMKSkKICAgIAogICAgZF9jbGVhbl81X2NoYXJhY3RlclIgPC0gZF9jbGVhbl80ICU+JQogICAgICBtdXRhdGUodGFyZ2V0ID0gY2hhcmFjdGVyUikgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkLCB0YXJnZXQsIGhhcHB5X2NoYXJhY3RlclI6Q0FUQ0hfY2hhcmFjdGVyUikKICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJSKSA8LSBnc3ViKCJfY2hhcmFjdGVyUiIsICIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJSKSkKICAgIAogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzVfY2hhcmFjdGVyTCAlPiUKICAgICAgZnVsbF9qb2luKGRfY2xlYW5fNV9jaGFyYWN0ZXJSKSAlPiUKICAgICAgZnVsbF9qb2luKGRfY2xlYW5fNV9kZW1vKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQsIGRhdGU6cmVsaWdpb25fY2F0LCB0YXJnZXQ6Q0FUQ0gpCiAgICAKICAgICMgcmVtb3ZlIGV4dHJhbmVvdXMgZGZzIGFuZCB2YXJpYWJsZXMKICAgIHJtKGQsIGRfY2xlYW5fMSwgZF9jbGVhbl8yLCBkX2NsZWFuXzMsIGRfY2xlYW5fNCwgZF9jbGVhbl81X2NoYXJhY3RlckwsIAogICAgICAgZF9jbGVhbl81X2NoYXJhY3RlclIsIGRfY2xlYW5fNV9kZW1vLCBpKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0IikgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgZCA8LSBkX3Jhd19zdHVkeTQKCiAgICAgICAgIyBlbmFjdCBleGNsdXNpb25hcnkgY3JpdGVyaWEKICAgIGRfY2xlYW5fMSA8LSBkICU+JQogICAgICBtdXRhdGUoZmluaXNoZWRfbW9kID0gaWZlbHNlKGlzLm5hKENBVENIKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZmluaXNoZWQgPT0gMSwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC41KSkpICU+JQogICAgICBmaWx0ZXIoQ0FUQ0ggPT0gMSwgIyBleGNsdWRlIFBzIHdobyBmYWlsIGNhdGNoIHRyaWFscyAKICAgICAgICAgICAgIGZpbmlzaGVkX21vZCAhPSAwKSAlPiUgIyBleGNsdWRlIFBzIHdobyBkaWQgbm90IGNvbXBsZXRlIHRhc2sKICAgICAgbXV0YXRlKHlvYl9jb3JyZWN0ID0gYXMubnVtZXJpYygKICAgICAgICBpZmVsc2UoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPiAxOTAwICYgCiAgICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPCAyMDAwLCAKICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSksIE5BKSksICMgY29ycmVjdCBmb3JtYXR0aW5nIGluIHlvYgogICAgICAgIGFnZV9hcHByb3ggPSAyMDE2IC0geW9iX2NvcnJlY3QpICU+JSAjIGNhbGN1bGF0ZSBhcHByb3hpbWF0ZSBhZ2UKICAgICAgbXV0YXRlKGdlbmRlciA9IGZhY3RvcihnZW5kZXIsIGxldmVscyA9IGMoMSwgMiwgMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIm0iLCAiZiIsICJvdGhlciIpKSkgJT4lCiAgICAgIGZpbHRlcihhZ2VfYXBwcm94ID49IDE4KSAjIGV4Y2x1ZGUgUHMgd2hvIGFyZSB5b3VuZ2VyIHRoYW4gMTggeWVhcnMKICAgIAogICAgIyByZWNvZGUgb25lIGNoYXJhY3RlcgogICAgZF9jbGVhbl8yIDwtIGRfY2xlYW5fMSAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3RvcihpZmVsc2UoCiAgICAgICAgZ3JlcGwoInZlZ2V0YXRpdmUiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksICJwdnMiLAogICAgICAgIGlmZWxzZShncmVwbCgiYmx1ZSIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwgImJsdWVqYXkiLAogICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoImNoaW1wIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLCAiY2hpbXAiLAogICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpKSkpKQoKICAgICMgcmVjb2RlIGJhY2tncm91bmQgYW5kIGRlbW9ncmFwaGljIHZhcmlhYmxlcwogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzIgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBkdXJhdGlvbgogICAgICAgIGR1cmF0aW9uID0gYXMubnVtZXJpYyhkaWZmdGltZShzdHJwdGltZShlbmRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnB0aW1lKHN0YXJ0X3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA9ICJtaW5zIikpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCByYWNlCiAgICAgICAgcmFjZV9hc2lhbl9lYXN0ID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fZWFzdCksICIiLCAiYXNpYW5fZWFzdCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9zb3V0aCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX3NvdXRoKSwgIiIsICJhc2lhbl9zb3V0aCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX290aGVyKSwgIiIsICJhc2lhbl9vdGhlciAiKSksCiAgICAgICAgcmFjZV9ibGFjayA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2JsYWNrKSwgIiIsICJibGFjayAiKSksCiAgICAgICAgcmFjZV9oaXNwYW5pYyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2hpc3BhbmljKSwgIiIsICJoaXNwYW5pYyAiKSksCiAgICAgICAgcmFjZV9taWRkbGVfZWFzdGVybiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX21pZGRsZV9lYXN0ZXJuKSwgIiIsICJtaWRkbGVfZWFzdGVybiAiKSksCiAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9uYXRpdmVfYW1lcmljYW4pLCAiIiwgIm5hdGl2ZV9hbWVyaWNhbiAiKSksCiAgICAgICAgcmFjZV9wYWNfaXNsYW5kZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9wYWNfaXNsYW5kZXIpLCAiIiwgInBhY19pc2xhbmRlciAiKSksCiAgICAgICAgcmFjZV93aGl0ZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3doaXRlKSwgIiIsICJ3aGl0ZSAiKSksCiAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9vdGhlcl9wcmVmbm8pLCAiIiwgIm90aGVyX3ByZWZubyAiKSksCiAgICAgICAgcmFjZV9jYXQgPSBwYXN0ZTAocmFjZV9hc2lhbl9lYXN0LCByYWNlX2FzaWFuX3NvdXRoLCByYWNlX2FzaWFuX290aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfYmxhY2ssIHJhY2VfaGlzcGFuaWMsIHJhY2VfbWlkZGxlX2Vhc3Rlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4sIHJhY2VfcGFjX2lzbGFuZGVyLCByYWNlX3doaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vKSwKICAgICAgICByYWNlX2NhdDIgPSBmYWN0b3Ioc3ViKCIgKyQiLCAiIiwgcmFjZV9jYXQpKSwKICAgICAgICByYWNlX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmFjZV9jYXQyKSA9PSBULCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJhY2VfY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkOmVuZF90aW1lLCBkdXJhdGlvbiwgZmluaXNoZWQ6Z2VuZGVyLCAKICAgICAgICAgICAgIGVkdWNhdGlvbjphZ2VfYXBwcm94LCByYWNlX2NhdDMpICU+JQogICAgICByZW5hbWUocmFjZV9jYXQgPSByYWNlX2NhdDMpCiAgICAKICAgICMgZmlsdGVyIGNvbmRpdGlvbnMgaWYgZGVzaXJlZAogICAgaWYoaXMuZWxlbWVudCgibm9uZSIsIGNob3NlbkV4Y2x1ZGUpKSB7fSBlbHNlIHsKICAgICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICAgIGZpbHRlcighY29uZGl0aW9uICVpbiUgY2hvc2VuRXhjbHVkZSkKICAgIH0KICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8xLCBkX2NsZWFuXzIpCiAgfQogIAojICAgIyB0cmFuc2Zvcm0gdG8gMCB0byA2IHNjYWxlCiMgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiMgICAgIGdhdGhlcihtYywgc2NvcmUsIGhhcHB5OnByaWRlKSAlPiUKIyAgICAgbXV0YXRlKHNjb3JlID0gc2NvcmUgKyAzKSAlPiUgIyB0cmFuc2Zvcm0gZnJvbSAtMyB0byAzIC0tPiAwIHRvIDYKIyAgICAgc3ByZWFkKG1jLCBzY29yZSkKICAKICAjIHJlbW92ZSBvdXRsaWVycwogIGlmKGNob3Nlbk91dGxpZXJIYW5kbGluZyA9PSAicmVtb3ZlIikgewogICAgCiAgICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKICAgICAgICBnYXRoZXIobWMsIHNjb3JlLCBoYXBweTpwcmlkZSkgJT4lCiAgICAgICAgZ3JvdXBfYnkoY29uZGl0aW9uLCBtYykgJT4lCiAgICAgICAgZmlsdGVyKCFzY29yZSAlaW4lIGJveHBsb3Quc3RhdHMoc2NvcmUsIDIuNSkkb3V0KSAlPiUKICAgICAgICBzcHJlYWQobWMsIHNjb3JlKSAlPiUKICAgICAgICBhcnJhbmdlKGNvbmRpdGlvbiwgc3ViaWQpCiAgICB9CiAgICAKICAgIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKSB7CiAgICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKICAgICAgICBnYXRoZXIobWMsIHNjb3JlLCBoYXBweTpwcmlkZSkgJT4lCiAgICAgICAgZ3JvdXBfYnkodGFyZ2V0LCBtYykgJT4lCiAgICAgICAgZmlsdGVyKCFzY29yZSAlaW4lIGJveHBsb3Quc3RhdHMoc2NvcmUsIDIuNSkkb3V0KSAlPiUKICAgICAgICBzcHJlYWQobWMsIHNjb3JlKSAlPiUKICAgICAgICBhcnJhbmdlKHRhcmdldCwgc3ViaWQpCiAgICB9CiAgICAKICB9CiAgCiAgIyBmaWx0ZXIgaXRlbXMgaWYgZGVzaXJlZAogIGlmKGlzLmVsZW1lbnQoIm5vbmUiLCBjaG9zZW5FeGNsdWRlSXRlbSkpIHt9IGVsc2UgewogICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICBkcGx5cjo6c2VsZWN0KC1jb250YWlucyhjaG9zZW5FeGNsdWRlSXRlbSkpCiAgfQoKICAjIHJldHVybiBjbGVhbmVkIGRhdGFzZXQKICByZXR1cm4oZF9jbGVhbikKfQoKIyBtYWtlIGZ1bmN0aW9uIGZvciBleGFtaW5pbmcgZXhjbHVzaW9uIG9mIHBhcnRpY2lwYW50cwpleGNsdWRlZENvdW50cyA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CiAgCiAgIyBzZXQgZGF0YXNvdXJjZQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXsKICAgIGQgPC0gZDEKICAgIGRfcmF3IDwtIGRfcmF3X3N0dWR5MQogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7CiAgICBkIDwtIGQyCiAgICBkX3JhdyA8LSBkX3Jhd19zdHVkeTIKICB9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpewogICAgZCA8LSBkMwogICAgZF9yYXcgPC0gZF9yYXdfc3R1ZHkzCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXsKICAgIGQgPC0gZDQKICAgIGRfcmF3IDwtIGRfcmF3X3N0dWR5NAogIH0KICAKICAjIGdldCBzdWJpZHMgb2Ygc3VjY2Vzc2Z1bCBwYXJ0aWNpcGFudHMKICBkX3N1YmlkcyA8LSBsZXZlbHMoZmFjdG9yKGFzLmNoYXJhY3RlcihkJHN1YmlkKSkpCiAgCiAgIyBnZXQgc3ViaWRzIG9mIGV4Y2x1ZGVkIHBhcnRpY2lwYW50cwogIGRfZXhjbHVkZWQgPC0gZF9yYXcgJT4lCiAgICBmaWx0ZXIoaXMuZWxlbWVudChzdWJpZCwgZF9zdWJpZHMpID09IEZBTFNFKSAlPiUKICAgIGRwbHlyOjpzZWxlY3QoY29uZGl0aW9uLCBzdWJpZCwgZmluaXNoZWQsIHN0YXJ0c193aXRoKCJDQVRDSCIpLCB5b2IpCgogICMgY291bnQgZXhjbHVkZWQgcGFydGljaXBhbnRzCiAgZF9leGNsdWRlZF9uIDwtIGxlbmd0aChkX2V4Y2x1ZGVkJHN1YmlkKQogIAogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZGlkIG5vdCBmaW5pc2gKICAgIGRfZXhjbHVkZWRfdW5maW5pc2hlZCA8LSBkX2V4Y2x1ZGVkICU+JQogICAgICBmaWx0ZXIoaXMubmEoQ0FUQ0gpID09IFQsCiAgICAgICAgICAgICBmaW5pc2hlZCAhPSAxKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICAgIGMoKQogICAgCiAgICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZmluaXNoZWQsIGJ1dCBmYWlsZWQgY2F0Y2ggdHJpYWwKICAgIGRfZXhjbHVkZWRfQ0FUQ0ggPC0gZF9leGNsdWRlZCAlPiUKICAgICAgZmlsdGVyKGlzLmVsZW1lbnQoc3ViaWQsIGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCkgPT0gRkFMU0UpICU+JQogICAgICBmaWx0ZXIoQ0FUQ0ggIT0gMSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JQogICAgICBjKCkKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpIHsKICAgICMgY291bnQgcGFydGljaXBhbnRzIHdobyBkaWQgbm90IGZpbmlzaAogICAgZF9leGNsdWRlZF91bmZpbmlzaGVkIDwtIGRfZXhjbHVkZWQgJT4lCiAgICAgIGZpbHRlcihpcy5uYShDQVRDSC4uY2hhcmFjdGVyTCkgPT0gVCwKICAgICAgICAgICAgIGlzLm5hKENBVENILi5jaGFyYWN0ZXJSKSA9PSBULAogICAgICAgICAgICAgZmluaXNoZWQgIT0gMSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JQogICAgICBjKCkKICAgIAogICAgIyBjb3VudCBwYXJ0aWNpcGFudHMgd2hvIGZpbmlzaGVkLCBidXQgZmFpbGVkIGNhdGNoIHRyaWFsCiAgICBkX2V4Y2x1ZGVkX0NBVENIIDwtIGRfZXhjbHVkZWQgJT4lCiAgICAgIGZpbHRlcihpcy5lbGVtZW50KHN1YmlkLCBkX2V4Y2x1ZGVkX3VuZmluaXNoZWQkc3ViaWQpID09IEZBTFNFKSAlPiUKICAgICAgZmlsdGVyKENBVENILi5jaGFyYWN0ZXJMICE9IDUgfCBDQVRDSC4uY2hhcmFjdGVyUiAhPSA1KSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICAgIGMoKQogIH0KICAKICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZmluaXNoZWQgYW5kIHBhc3NlZCBjYXRjaCB0cmlhbCwgCiAgIyBidXQgZGlkIG5vdCBwcm92aWRlIHllYXIgb2YgYmlydGgKICBkX2V4Y2x1ZGVkX25vX3lvYiA8LSBkX2V4Y2x1ZGVkICU+JQogICAgZmlsdGVyKGlzLmVsZW1lbnQoc3ViaWQsIGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCkgPT0gRkFMU0UsCiAgICAgICAgICAgaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF9DQVRDSCRzdWJpZCkgPT0gRkFMU0UpICU+JQogICAgbXV0YXRlKHlvYiA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpKSAlPiUKICAgIGZpbHRlcihpcy5uYSh5b2IpIHwgeW9iIDwgMTg5OSB8IG5jaGFyKGFzLmNoYXJhY3Rlcih5b2IpKSAhPSA0KSAlPiUKICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JQogICAgYygpCiAgCiAgIyBjb3VudCBwYXJ0aWNpcGFudHMgd2hvIGZpbmlzaGVkIGFuZCBwYXNzZWQgY2F0Y2ggdHJpYWwsIAogICMgYnV0IGRpZCBub3QgcHJvdmlkZSB5ZWFyIG9mIGJpcnRoCiAgZF9leGNsdWRlZF95b3VuZyA8LSBkX2V4Y2x1ZGVkICU+JQogICAgZmlsdGVyKGlzLmVsZW1lbnQoc3ViaWQsIGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCkgPT0gRkFMU0UsCiAgICAgICAgICAgaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF9DQVRDSCRzdWJpZCkgPT0gRkFMU0UsCiAgICAgICAgICAgaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF9ub195b2Ikc3ViaWQpID09IEZBTFNFKSAlPiUKICAgIG11dGF0ZSh5b2IgPSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSkgJT4lCiAgICBmaWx0ZXIoaXMubmEoeW9iKSB8IDIwMTYgLSB5b2IgPCAxOCkgJT4lCiAgICBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUKICAgIGMoKQogIAogICMgc3VtIHVwIGV4Y2x1ZGVkIHBhcnRpY2lwYW50cyBieSBjYXRlZ29yeQogIHRvdGFsIDwtIHN1bShsZW5ndGgoZF9leGNsdWRlZF91bmZpbmlzaGVkJHN1YmlkKSwKICAgICAgICAgICAgICAgbGVuZ3RoKGRfZXhjbHVkZWRfQ0FUQ0gkc3ViaWQpLAogICAgICAgICAgICAgICBsZW5ndGgoZF9leGNsdWRlZF9ub195b2Ikc3ViaWQpLAogICAgICAgICAgICAgICBsZW5ndGgoZF9leGNsdWRlZF95b3VuZyRzdWJpZCkpCiAgCiAgIyBjYWxjdWxhdGUgY291bnRzCiAgZXhjbHVkZWRfY291bnRzIDwtIAogICAgZGF0YS5mcmFtZSgiZGlkX25vdF9maW5pc2giID0gbGVuZ3RoKGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCksCiAgICAgICAgICAgICAgICJmYWlsZWRfY2F0Y2hfdHJpYWwiID0gbGVuZ3RoKGRfZXhjbHVkZWRfQ0FUQ0gkc3ViaWQpLAogICAgICAgICAgICAgICAiZGlkX25vdF9wcm92aWRlX3lvYiIgPSBsZW5ndGgoZF9leGNsdWRlZF9ub195b2Ikc3ViaWQpLAogICAgICAgICAgICAgICAidG9vX3lvdW5nIiA9IGxlbmd0aChkX2V4Y2x1ZGVkX3lvdW5nJHN1YmlkKSwKICAgICAgICAgICAgICAgIlRPVEFMX2V4Y2x1ZGVkIiA9IHRvdGFsLAogICAgICAgICAgICAgICAiVE9UQUxfcGFydGljaXBhdGVkIiA9IGxlbmd0aChkJHN1YmlkKSwKICAgICAgICAgICAgICAgIk9WRVJBTExfVE9UQUwiID0gc3VtKHRvdGFsLCBsZW5ndGgoZCRzdWJpZCkpKQogIAogIGlmKHRvdGFsICE9IGRfZXhjbHVkZWRfbikgewogICAgc3RvcCgiRXJyb3I6IDQgc291cmNlcyBvZiBleGNsdXNpb24gZG8gbm90IGFkZCB1cCB0byB0b3RhbC4iKQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuKGV4Y2x1ZGVkX2NvdW50cykKICAgIH0KfQoKIyBtYWtlIGZ1bmN0aW9uIGZvciBzdHJpcHBpbmcgZGF0YWZyYW1lcyBmb3IgZGltZW5zaW9uIHJlZHVjYXRpb24KbWFrZURSREYgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSwgY2hvc2VuQ29uZGl0aW9uKSB7CiAgCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7CiAgICAjIHJlbmFtZSB2YXJpYWJsZXMgZm9yIGVhc2Ugb2YgZnVuY3Rpb24gYXBwbHBpY2F0aW9uCiAgICBkIDwtIGQzICU+JQogICAgICByZW5hbWUob3JkZXIgPSBjb25kaXRpb24sCiAgICAgICAgICAgICBjb25kaXRpb24gPSB0YXJnZXQpCiAgICAKICAgICMgcmVuYW1lIHN1YmlkcyBieSBjb25kaXRpb24gaWYgY29sbGFwc2VzIGFjcm9zcyBjb25kaXRpb25zCiAgICBkIDwtIGQgJT4lCiAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlKGNvbmRpdGlvbiwgc3ViaWQsIHNlcCA9ICJfIikpCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQogIAogICMgZmlsdGVyIGJ5IGNvbmRpdGlvbiBpZiBzcGVjaWZpZWQKICBpZihjaG9zZW5Db25kaXRpb24gJWluJSBjKCJiZWV0bGUiLCAicm9ib3QiKSkgewogICAgZCA8LSBkICU+JSBmaWx0ZXIoY29uZGl0aW9uID09IGNob3NlbkNvbmRpdGlvbikKICB9CiAgCiAgIyBtYWtlIHN0cmlwcGVkIGRhdGFmcmFtZSBmb3IgZGltZW5zaW9uIHJlZHVjYXRpb24gYW5hbHlzZXMKICBkX3N0cmlwIDwtIGQgJT4lCiAgICBkcGx5cjo6c2VsZWN0KHN1YmlkLCBoYXBweTpwcmlkZSkKICBkX3N0cmlwIDwtIGRhdGEuZnJhbWUoZF9zdHJpcFssLTFdLCByb3cubmFtZXMgPSBkX3N0cmlwJHN1YmlkKQogIAogICMgcmV0dXJuIHN0cmlwcGVkIGRhdGFmcmFtZQogIHJldHVybihkX3N0cmlwKQp9CgojIG1ha2UgZGVtb2dyYXBoaWNzIGZ1bmN0aW9ucwpkZW1vU2FtcGxlU2l6ZSA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpewogICAgIyByZW5hbWUgdmFyaWFibGVzIGZvciBlYXNlIG9mIGZ1bmN0aW9uIGFwcGxwaWNhdGlvbgogICAgZCA8LSBkMyAlPiUKICAgICAgcmVuYW1lKG9yZGVyID0gY29uZGl0aW9uLAogICAgICAgICAgICAgY29uZGl0aW9uID0gdGFyZ2V0KQogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNvbmRpdGlvbgogIHNhbXBsZV9zaXplIDwtIHZlY3RvcigpCiAgZm9yKGkgaW4gbGV2ZWxzKGQkY29uZGl0aW9uKSkgewogICAgc2FtcGxlX3NpemVbYXMuY2hhcmFjdGVyKGkpXSA8LSAKICAgICAgYXMubnVtZXJpYyhkICU+JSBmaWx0ZXIoY29uZGl0aW9uID09IGkpICU+JSBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUgCiAgICAgICAgICAgICAgICAgICB1bmlxdWUoKSAlPiUgY291bnQoKSkKICB9CgogICMgYWRkIHRvdGFsIHNhbXBsZSBzaXplICAKICBzYW1wbGVfc2l6ZVsiYWxsIl0gPC0gYXMubnVtZXJpYyhkICU+JSBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUoKSAlPiUgY291bnQoKSkKICAKICAjIG1ha2UgaW50byBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgc2FtcGxlX3NpemUgPC0gZGF0YS5mcmFtZShzYW1wbGVfc2l6ZSkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oKSAlPiUKICAgIHJlbmFtZShjb25kaXRpb24gPSByb3duYW1lLAogICAgICAgICAgIG4gPSBzYW1wbGVfc2l6ZSkKICAKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgcmV0dXJuKHNhbXBsZV9zaXplKQp9CmRlbW9EdXJhdGlvbiA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpewogICAgIyByZWNvZGUgdmFyaWFibGVzIGZvciBlYXNlIG9mIGZ1bmN0aW9uIGFwcGxwaWNhdGlvbgogICAgZCA8LSBkMyAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9ICJ3aXRoaW4tc3ViamVjdHMiKQogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNvbmRpdGlvbgogIGR1cmF0aW9uIDwtIGQgJT4lCiAgICBncm91cF9ieShjb25kaXRpb24pICU+JQogICAgc3VtbWFyaXNlKG1pbl9kdXJhdGlvbiA9IG1pbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgbWF4X2R1cmF0aW9uID0gbWF4KGR1cmF0aW9uKSwKICAgICAgICAgICAgICBtZWRpYW5fZHVyYXRpb24gPSBtZWRpYW4oZHVyYXRpb24pLAogICAgICAgICAgICAgIG1lYW5fZHVyYXRpb24gPSBtZWFuKGR1cmF0aW9uKSwKICAgICAgICAgICAgICBzZF9kdXJhdGlvbiA9IHNkKGR1cmF0aW9uKSkKCiAgIyBhZGQgdG90YWwgZHVyYXRpb24KICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgYWxsIDwtIGQgJT4lCiAgICAgIHN1bW1hcmlzZShtaW5fZHVyYXRpb24gPSBtaW4oZHVyYXRpb24pLAogICAgICAgICAgICAgICAgbWF4X2R1cmF0aW9uID0gbWF4KGR1cmF0aW9uKSwKICAgICAgICAgICAgICAgIG1lZGlhbl9kdXJhdGlvbiA9IG1lZGlhbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgICBtZWFuX2R1cmF0aW9uID0gbWVhbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgICBzZF9kdXJhdGlvbiA9IHNkKGR1cmF0aW9uKSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiYWxsIikKICAgIGR1cmF0aW9uIDwtIHJiaW5kKGR1cmF0aW9uLCBhbGwpICMgbm90IHN1cmUgd2h5IGZ1bGxfam9pbiBkb2Vzbid0IHdvcmsgICAgCiAgfQoKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgcmV0dXJuKGR1cmF0aW9uKQp9CmRlbW9BZ2UgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXsKICAgICMgcmVjb2RlIHZhcmlhYmxlcyBmb3IgZWFzZSBvZiBmdW5jdGlvbiBhcHBscGljYXRpb24KICAgIGQgPC0gZDMgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAid2l0aGluLXN1YmplY3RzIikKICB9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CgogICMgZ2V0IHNhbXBsZSBzaXplIHBlciBjb25kaXRpb24KICBhZ2UgPC0gZCAlPiUKICAgIGdyb3VwX2J5KGNvbmRpdGlvbikgJT4lCiAgICBzdW1tYXJpc2UobWluX2FnZSA9IG1pbihhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICBtYXhfYWdlID0gbWF4KGFnZV9hcHByb3gpLAogICAgICAgICAgICAgIG1lZGlhbl9hZ2UgPSBtZWRpYW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgbWVhbl9hZ2UgPSBtZWFuKGFnZV9hcHByb3gpLAogICAgICAgICAgICAgIHNkX2FnZSA9IHNkKGFnZV9hcHByb3gpKQoKICAjIGFkZCB0b3RhbCBhZ2UKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgYWxsIDwtIGQgJT4lCiAgICAgIHN1bW1hcmlzZShtaW5fYWdlID0gbWluKGFnZV9hcHByb3gpLAogICAgICAgICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICAgIG1lZGlhbl9hZ2UgPSBtZWRpYW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgICBzZF9hZ2UgPSBzZChhZ2VfYXBwcm94KSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiYWxsIikKICAgIGFnZSA8LSBmdWxsX2pvaW4oYWdlLCBhbGwpCiAgfQoKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgcmV0dXJuKGFnZSkKfQpkZW1vR2VuZGVyIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgZ2VuZGVyIHBlciBjb25kaXRpb24gYW5kIG92ZXJhbGwKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgZ2VuZGVyIDwtIGRhdGEuZnJhbWUoYWRkbWFyZ2lucyh3aXRoKGQsIHRhYmxlKGNvbmRpdGlvbiwgZ2VuZGVyKSkpKSAlPiUKICAgICAgZmlsdGVyKGdlbmRlciAhPSAiU3VtIikgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpIHsKICAgIGdlbmRlciA8LSBkYXRhLmZyYW1lKHdpdGgoZCwgdGFibGUoZ2VuZGVyKSkpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gIlN1bSIpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KGNvbmRpdGlvbiwgZ2VuZGVyLCBuKQogIH0KICAKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDMiKSkgewogICAgZ2VuZGVyIDwtIGdlbmRlciAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJiZWV0bGUiLCAicm9ib3QiLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCBnZW5kZXIpICU+JQogICAgc3ByZWFkKGdlbmRlciwgbikKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpIHsKICAgIGdlbmRlciA8LSBnZW5kZXIgJT4lCiAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhsZXZlbHMoZCRjb25kaXRpb24pLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCBnZW5kZXIpICU+JQogICAgc3ByZWFkKGdlbmRlciwgbikKICB9CiAgCiAgIyByZXR1cm4gZGF0YWZyYW1lIGZvciB1c2luZyBrYWJsZQogIHJldHVybihnZW5kZXIpCn0KZGVtb1JhY2UgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGdldCByYWNlIHBlciBjb25kaXRpb24gYW5kIG92ZXJhbGwKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgcmFjZSA8LSBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkLCB0YWJsZShjb25kaXRpb24sIHJhY2VfY2F0KSkpKSAlPiUKICAgICAgZmlsdGVyKHJhY2VfY2F0ICE9ICJTdW0iKSAlPiUKICAgICAgcmVuYW1lKG4gPSBGcmVxKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIikgewogICAgcmFjZSA8LSBkYXRhLmZyYW1lKHdpdGgoZCwgdGFibGUocmFjZV9jYXQpKSkgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiU3VtIikgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoY29uZGl0aW9uLCByYWNlX2NhdCwgbikKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIsICJzdHVkeSAzIikpIHsKICAgIHJhY2UgPC0gcmFjZSAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJiZWV0bGUiLCAicm9ib3QiLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCByYWNlX2NhdCkgJT4lCiAgICBzcHJlYWQocmFjZV9jYXQsIG4pCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKSB7CiAgICByYWNlIDwtIHJhY2UgJT4lCiAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhsZXZlbHMoZCRjb25kaXRpb24pLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCByYWNlX2NhdCkgJT4lCiAgICBzcHJlYWQocmFjZV9jYXQsIG4pCiAgfQogIAogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICByZXR1cm4ocmFjZSkKfQpkZW1vUmVsaWdpb24gPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQoKICAjIGdldCByZWxpZ2lvbiBwZXIgY29uZGl0aW9uIGFuZCBvdmVyYWxsCiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIpKSB7CiAgICByZWxpZ2lvbiA8LSBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkLCB0YWJsZShjb25kaXRpb24sIHJlbGlnaW9uX2NhdCkpKSkgJT4lCiAgICAgIGZpbHRlcihyZWxpZ2lvbl9jYXQgIT0gIlN1bSIpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKSB7CiAgICByZWxpZ2lvbiA8LSBkYXRhLmZyYW1lKHdpdGgoZCwgdGFibGUocmVsaWdpb25fY2F0KSkpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gIlN1bSIpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KGNvbmRpdGlvbiwgcmVsaWdpb25fY2F0LCBuKQogIH0KICAKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDMiKSkgewogICAgcmVsaWdpb24gPC0gcmVsaWdpb24gJT4lCiAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiYmVldGxlIiwgInJvYm90IiwgImFsbCIpKSkgJT4lCiAgICBhcnJhbmdlKGNvbmRpdGlvbiwgcmVsaWdpb25fY2F0KSAlPiUKICAgIHNwcmVhZChyZWxpZ2lvbl9jYXQsIG4pCiAgfQogIAogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7CiAgICBzdG9wKCJSZWxpZ2lvbiBpbmZvcm1hdGlvbiBub3QgYXZhaWxhYmxlIGZvciBTdHVkeSA0IikKICB9IGVsc2Uge3JldHVybihyZWxpZ2lvbil9Cn0KZGVtb0VkdWNhdGlvbiA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CiAgCiAgIyBnZXQgZWR1Y2F0aW9uIHBlciBjb25kaXRpb24gYW5kIG92ZXJhbGwKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0IikgewogICAgZWR1Y2F0aW9uIDwtIAogICAgICBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkLCB0YWJsZShjb25kaXRpb24sIGVkdWNhdGlvbikpKSkgJT4lCiAgICAgIGZpbHRlcihlZHVjYXRpb24gIT0gIlN1bSIpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGwiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhsZXZlbHMoZCRjb25kaXRpb24pLCAiYWxsIikpLAogICAgICAgICAgICAgZWR1Y2F0aW9uID0gZmFjdG9yKGVkdWNhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKDE6NywgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygic29tZV9IUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSFNfZGlwbG9tYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29tZV9jb2xsZWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc3NvY2lhdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNoZWxvcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvbWVfZ3JhZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JhZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlZl9ubyIpKSkgJT4lCiAgICAgIGFycmFuZ2UoY29uZGl0aW9uLCBlZHVjYXRpb24pICU+JQogICAgICBzcHJlYWQoZWR1Y2F0aW9uLCBuKQogIH0KICAKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIsICJzdHVkeSAzIikpewogICAgc3RvcCgiRWR1Y2F0aW9uIGluZm9ybWF0aW9uIG5vdCBhdmFpbGFibGUgZm9yIFN0dWRpZXMgMS0zIikKICB9IGVsc2Uge3JldHVybihlZHVjYXRpb24pfQp9CgojIHBsb3R0aW5nIGZ1bmN0aW9ucwptYWtlRmFjZXRMYWJzIDwtIGZ1bmN0aW9uKGRmX3Bsb3R0aW5nKSB7CiAgZmFjZXRfbGFiZWxzIDwtIGFycmF5KCkKICBkZl9wbG90dGluZyA8LSBkZl9wbG90dGluZyAlPiUgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3Rvcihjb25kaXRpb24pKQogIGZvcihpIGluIDE6bGVuZ3RoKGxldmVscyhkZl9wbG90dGluZyRjb25kaXRpb24pKSkgewogICAgZGYgPC0gZGZfcGxvdHRpbmcgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gbGV2ZWxzKGRmX3Bsb3R0aW5nJGNvbmRpdGlvbilbaV0pICU+JQogICAgICBzZWxlY3QoY29uZGl0aW9uLCBuKSAlPiUgdW5pcXVlKCkKICAgIGZhY2V0X2xhYmVsc1tpXSA8LSBwYXN0ZTAoZGYkY29uZGl0aW9uLCAiIChuID0gIiwgZGYkbiwgIikiKQogIH0KICBuYW1lcyhmYWNldF9sYWJlbHMpIDwtIGxldmVscyhkZl9wbG90dGluZyRjb25kaXRpb24pCiAgcmV0dXJuKGZhY2V0X2xhYmVscykKfQpgYGAKCmBgYHtyIG1vZGVsaW5nIGRlY2lzaW9uc30KIyByZW1vdmUgb3V0bGllcnM/CmNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAia2VlcCIKIyBjaG9zZW5PdXRsaWVySGFuZGxpbmcgPC0gInJlbW92ZSIKCiMgZXhjbHVkZSBhbnkgY29uZGl0aW9ucyBpbiBzdHVkeSA0PwpjaG9zZW5FeGNsdWRlIDwtICJub25lIgojIGNob3NlbkV4Y2x1ZGUgPC0gYygic3RhcGxlciIsICJjYXIiLCAiY29tcHV0ZXIiKQoKIyBleGNsdWRlIGFueSBpdGVtcz8KY2hvc2VuRXhjbHVkZUl0ZW0gPC0gIm5vbmUiCiMgY2hvc2VuRXhjbHVkZUl0ZW0gPC0gImNvbXB1dGF0aW9ucyIKCiMgTk9URTogYWx3YXlzIGNob29zZSBtaW5pbWFsIHJlc2lkdWFsIChmbSA9ICJtaW5yZXMiKSBpbnN0ZWFkIG9mIE1MIGJlY2F1c2Ugb2Ygbm9uLW5vcm1hbGl0eQoKIyBmb3IgRUZBcywgd2hhdCBraW5kIG9mIGNvcnJlbGF0aW9uPwpjaG9zZW5Db3JUeXBlIDwtICJjb3IiICMgcGVhcnNvbiBjb3JyZWxhdGlvbgojIGNob3NlbkNvclR5cGUgPC0gInBvbHkiICMgcG9seWNob3JpYyBjb3JyZWxhdGlvbgoKIyBmb3IgRUZBcywgd2hhdCBraW5kIG9mIHJvdGF0aW9uPwpjaG9zZW5Sb3RUeXBlIDwtICJ2YXJpbWF4IiAjIHZhcmltYXggcm90YXRpb24KIyBjaG9zZW5Sb3RUeXBlIDwtICJvYmxpbWluIiAjIG9ibGltaW4gcm90YXRpb24KIyBjaG9zZW5Sb3RUeXBlIDwtICJub25lIiAjIG5vIHJvdGF0aW9uCgpkYXRhLmZyYW1lKCJjb25kaXRpb25zRXhjbHVkZWQiID0gY2hvc2VuRXhjbHVkZSwKICAgICAgICAgICAib3V0bGllckhhbmRsaW5nIiA9IGNob3Nlbk91dGxpZXJIYW5kbGluZywKICAgICAgICAgICAiRUZBX2NvcnJlbGF0aW9uIiA9IGNob3NlbkNvclR5cGUsCiAgICAgICAgICAgIkVGQV9yb3RhdGlvbiIgPSBjaG9zZW5Sb3RUeXBlKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIERhdGEgcHJlcGFyYXRpb24KCmBgYHtyIGRhdGEgdXBsb2FkLCBpbmNsdWRlID0gRn0KIyBzdHVkeSAxICgyMDE1LTEyLTE1LCAyIGNvbmRpdGlvbnMsIGJldHdlZW4tc3ViamVjdHMpCmRfcmF3X3N0dWR5MSA8LSByZWFkLmNzdigiaHR0cHM6Ly9vc2YuaW8vMjl2bmcvZG93bmxvYWQiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMSIpCgojIHN0dWR5IDIgKDIwMTYtMDEtMTIsIDIgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cyAtIFJFUExJQ0FUSU9OKQpkX3Jhd19zdHVkeTIgPC0gcmVhZC5jc3YoImh0dHBzOi8vb3NmLmlvL2c3NmhqL2Rvd25sb2FkIikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDIiKQoKIyBzdHVkeSAzICgyMDE2LTAxLTEwLCAyIGNvbmRpdGlvbnMsIHdpdGhpbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHkzIDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby9lcHlrZi9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAzIikKCiMgc3R1ZHkgNCAoMjAxNi0wMS0xNCwgMjEgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHk0IDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby9rZHpnZS9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSA0IikKYGBgCgpgYGB7ciBkYXRhIGNsZWFudXAsIGluY2x1ZGUgPSBGLCB3YXJuaW5ncyA9IEYsIGVjaG8gPSBGfQojIGNsZWFuIHVwIGRhdGFzZXRzCmQxIDwtIGNsZWFudXAoInN0dWR5IDEiKQpkMiA8LSBjbGVhbnVwKCJzdHVkeSAyIikKZDMgPC0gY2xlYW51cCgic3R1ZHkgMyIpCmQ0IDwtIGNsZWFudXAoInN0dWR5IDQiKQpgYGAKCmBgYHtyIGRhdGFmcmFtZXMgZm9yIGRpbWVuc2lvbiByZWR1Y2F0aW9uLCBpbmNsdWRlID0gRn0KIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHMxCiMgZDFfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAxIiwgImJlZXRsZSIpCiMgZDFfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDEiLCAicm9ib3QiKQpkMV9hbGwgPC0gbWFrZURSREYoInN0dWR5IDEiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSAyCiMgZDJfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAyIiwgImJlZXRsZSIpCiMgZDJfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDIiLCAicm9ib3QiKQpkMl9hbGwgPC0gbWFrZURSREYoInN0dWR5IDIiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSAzCiMgZDNfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAzIiwgImJlZXRsZSIpCiMgZDNfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDMiLCAicm9ib3QiKQpkM19hbGwgPC0gbWFrZURSREYoInN0dWR5IDMiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSA0CmQ0X2FsbCA8LSBtYWtlRFJERigic3R1ZHkgNCIsICJhbGwiKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIEFuYWx5c2lzIHBsYW4KCkZvciBhbGwgc3R1ZGllcyB3ZSBjb25kdWN0IGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNlcyB1c2luZyBQZWFyc29uIGNvcnJlbGF0aW9ucyB0byBmaW5kIG1pbmltdW0gcmVzaWR1YWwgc29sdXRpb25zLiAKCkZvciBlYWNoIHN0dWR5LCB3ZSBmaXJzdCBleGFtaW5lIG1heGltYWwgdW5yb3RhdGVkIGFuZCByb3RhdGVkIHNvbHV0aW9ucy4gVG8gZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmYWN0b3JzIHRvIGV4dHJhY3QsIHdlIHVzZSB0aGUgZm9sbG93aW5nIHJ1bGUgb2YgdGh1bWI6IFdpdGggJHAkIG9ic2VydmF0aW9ucyBwZXIgcGFydGljaXBhbnQsIHdlIGNhbiBleHRyYWN0IGEgbWF4aW11bSBvZiAkayQgZmFjdG9ycywgd2hlcmUgJChwLWspKjIgPiBwK2skLCBpLmUuLCAkayA8IHAvMyQuIFRodXMsIHdpdGggNDAgbWVudGFsIGNhcGFjaXR5IGl0ZW1zLCB3ZSBjYW4gZXh0cmFjdCBhIG1heGltdW0gb2YgMTMgZmFjdG9ycy4KClRvIGRldGVybWluZSBob3cgbWFueSBmYWN0b3JzIHRvIHJldGFpbiwgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcHJlc2V0IHJldGVudGlvbiBjcml0ZXJpYSwgY29uc2lkZXJpbmcgdGhlIHVucm90YXRlZCBtYXhpbWFsIHNvbHV0aW9uICh1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkKToKCiAgLSBFYWNoIGZhY3RvciBtdXN0IGhhdmUgYW4gZWlnZW52YWx1ZSA+MS4wLgogIC0gRWFjaCBmYWN0b3IgbXVzdCBpbmRpdmlkdWFsbHkgYWNjb3VudCBmb3IgPjUlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiB0aGUgbWF4aW1hbCBtb2RlbC4KICAtIEFmdGVyIHJvdGF0aW9uLCBlYWNoIGZhY3RvciBtdXN0IGJlIHRoZSBkb21pbmFudCBmYWN0b3IgKGkuZS4sIHRoZSBmYWN0b3Igd2l0aCB0aGUgaGlnaGVzdCBmYWN0b3IgbG9hZGluZykgZm9yIOKJpTEgbWVudGFsIGNhcGFjaXR5IGl0ZW0uCgpXZSB0aGVuIGV4YW1pbmUgYW5kIGludGVycHJldCB2YXJpbWF4LXJvdGF0ZWQgc29sdXRpb25zLCBleHRyYWN0aW5nIG9ubHkgdGhlIG51bWJlciBvZiBmYWN0b3JzIHRoYXQgbWVldCB0aGVzZSBjcml0ZXJpYS4KCipOb3RlKjogRm9yIFN0dWRpZXMgMS0yLCB3ZSBpbml0aWFsbHkgcGxhbm5lZCB0byBjb25kdWN0IGRpbWVuc2lvbiByZWR1Y3Rpb24gYW5hbHlzZXMgZm9yIGVhY2ggY29uZGl0aW9uIChiZWV0bGUgdnMuIHJvYm90KSBzZXBhcmF0ZWx5LiBIb3dldmVyLCB3ZSBub3cgY29uc2lkZXIgdGhpcyBhbmFseXNpcyBwbGFuIHRvIGhhdmUgYmVlbiBmdW5kYW1lbnRhbGx5IGZsYXdlZDogRWFjaCBvZiB0aGVzZSBzZXBhcmF0ZSBhbmFseXNlcyBpcyBvbmx5IGNhcGFibGUgb2Ygc3VyZmFjaW5nIGZhY3RvcnMgdGhhdCBoaWdobGlnaHQgc3Vic3RhbnRpYWwgZGlzYWdyZWVtZW50IGFtb25nIHBhcnRpY2lwYW50cyB3aXRoaW4gdGhhdCBjb25kaXRpb24gdGh1cyBmYWlsaW5nIHRvIGNhcHR1cmUga2V5IGRpZmZlcmVuY2VzIGluIGF0dHJpYnV0aW9ucyBvZiBtZW50YWwgY2FwYWNpdGllcyB0byBiZWV0bGVzIHZzLiByb2JvdHMsIHdpdGggbm8gZm9ybWFsIG1lYW5zIG9mIHN5bnRoZXNpemluZyByZXN1bHRzIGFjcm9zcyBjb25kaXRpb25zLiBOb25ldGhlbGVzcywgdGhlIHJlc3VsdHMgb2YgdGhlc2UgYW5hbHlzZXMgYXJlIGdlbmVyYWxseSBjb25zaXN0ZW50IHdpdGggdGhlIGZpbmRpbmdzIHJlcG9ydGVkIGhlcmU6IFRoZSBtb3N0IHByb21pbmVudCBhbmQgcmVsaWFibGUgZmluZGluZyB3aXRoaW4gZWFjaCBjb25kaXRpb24gaXMgdGhhdCBwYXJ0aWNpcGFudHMgZGlzdGluZ3Vpc2ggYmV0d2VlbiBlbW90aW9uYWwgYW5kIHBlcmNlcHR1YWwgdmFyaWV0aWVzIG9mIGV4cGVyaWVuY2UuIFNlZSA8YSBocmVmPSJodHRwczovL29zZi5pby96ZDNtdSIsIHRhcmdldD0iYmxhbmsiPmh0dHBzOi8vb3NmLmlvL3pkM211PC9hPiBmb3IgdGhlIHByZXJlZ2lzdGVyZWQgYW5hbHlzZXMsIGluY2x1ZGluZyBhbmFseXNpcyBzY3JpcHRzLgoKIyBTdHVkeSAxCgpEZXNpZ246IDIgY29uZGl0aW9ucyAoYmVldGxlLCByb2JvdCksIGJldHdlZW4tc3ViamVjdHMKRGF0ZSBjb25kdWN0ZWQ6IDIwMTUtMTItMTUKCiMjIERlbW9ncmFwaGljcwoKYGBge3IgczEgZGVtb2dyYXBoaWNzfQojIGV4YW1pbmUgZXhjbHVzaW9uCmV4Y2x1ZGVkQ291bnRzKCJzdHVkeSAxIikKCiMgbWFrZSBkZW1vZ3JhcGhpY3MgdGFibGVzCmRlbW9TYW1wbGVTaXplKCJzdHVkeSAxIikKZGVtb0R1cmF0aW9uKCJzdHVkeSAxIikKZGVtb0FnZSgic3R1ZHkgMSIpCmRlbW9HZW5kZXIoInN0dWR5IDEiKQpkZW1vUmFjZSgic3R1ZHkgMSIpCmRlbW9SZWxpZ2lvbigic3R1ZHkgMSIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcwoKIyMjIFN0ZXAgMTogUnVuIG1heGltYWwgRUZBICh3aXRob3V0IGFuZCB3aXRoIHJvdGF0aW9uKQoKYGBge3IgczEgYWxsIG5vIHJvdGF0aW9ufQojIGV4YW1pbmUgc2NyZWUgcGxvdAojIGZhLnBhcmFsbGVsKGQxX2FsbCkKCiMgcnVuIEVGQSB3aXRob3V0IHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMV9hbGxfdW5yb3RhdGVkIDwtIGZhKGQxX2FsbCwgMTMsIHJvdGF0ZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QxX2FsbF91bnJvdGF0ZWQpCmBgYAoKYGBge3IgczEgaG93IG1hbnkgZmFjdG9ycywgaW5jbHVkZSA9IEZ9CiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9kMV9hbGxfdW5yb3RhdGVkX2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9kMV9hbGxfdW5yb3RhdGVkKSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY291bnQgZmFjdG9ycyB3aXRoIGVpZ2VudmFsdWVzID4gMSBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUKZWZhX2QxX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMgPC0gZWZhX2QxX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgJT4lCiAgZmlsdGVyKFNTLmxvYWRpbmdzID4gMSwgUHJvcG9ydGlvbi5FeHBsYWluZWQgPiAwLjA1KSAlPiUKICBjb3VudCgpICU+JQogIGFzLm51bWVyaWMoKQplZmFfZDFfYWxsX3Vucm90YXRlZF9uZmFjdG9ycwpgYGAKCmBgYHtyIHMxIGFsbCByb3RhdGlvbn0KZWZhX2QxX2FsbF9yb3RhdGVkX21heCA8LSBmYShkMV9hbGwsIDEzLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQoKZWZhX2QxX2FsbF9yb3RhdGVkIDwtIGZhKGQxX2FsbCwgZWZhX2QxX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgojIGNoZWNrIHRoYXQgZWFjaCBvZiB0aGVzZSBmYWN0b3JzIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGF0IGxlYXN0IG9uZSBtZW50YWwgY2FwYWNpdHkgaXRlbQplZmFfZDFfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgPC0gZmEuc29ydChsb2FkaW5ncyhlZmFfZDFfYWxsX3JvdGF0ZWQpW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBtdXRhdGUobG9hZGluZ19hYnMgPSBhYnMobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBsb2FkaW5nX2FicykgJT4lCiAgdW5ncm91cCgpCmVmYV9kMV9hbGxfcm90YXRlZF9sb2FkaW5ncwoKIyBkcm9wIGFueSBmYWN0b3JzIHdoZXJlIG4gPCAxCmVmYV9kMV9hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKQoKIyBzZXQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZXh0cmFjdApuZmFjdG9yc19kMV9hbGwgPC0gZWZhX2QxX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApICU+JQogIG5yb3coKQpuZmFjdG9yc19kMV9hbGwKYGBgCgojIyMgU3RlcCAyOiBSdW4gRUZBIHdpdGggdmFyaW1heCByb3RhdGlvbgoKYGBge3IgczEgYWxsIHZhcmltYXggcm90YXRpb259CiMgcnVuIEVGQSB3aXRoIHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMV9hbGxfcm90YXRlZE4gPC0gZmEoZDFfYWxsLCBuZmFjdG9yc19kMV9hbGwsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kMV9hbGxfcm90YXRlZE4pCgojIGdldCBsb2FkaW5ncyBmb3IgZWFjaCBmYWN0b3IKZWZhX2QxX2FsbF9yb3RhdGVkTl9sb2FkaW5ncyA8LSBsb2FkaW5ncyhlZmFfZDFfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIyMgRmFjdG9yIGxvYWRpbmdzIHRhYmxlCgpgYGB7ciBzMSBsb2FkaW5ncyB0YWJsZX0KZGF0YS5mcmFtZShsb2FkaW5ncyhmYS5zb3J0KGVmYV9kMV9hbGxfcm90YXRlZE4pKVtdKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIk0iKSksIGZ1bnMocm91bmQyKSkKYGBgCgojIFN0dWR5IDIKCkRlc2lnbjogMiBjb25kaXRpb25zIChiZWV0bGUsIHJvYm90KSwgYmV0d2Vlbi1zdWJqZWN0cyAocmVwbGljYXRpb24gb2YgU3R1ZHkgMSkKRGF0ZSBjb25kdWN0ZWQ6IDIwMTYtMDEtMTIKCiMjIERlbW9ncmFwaGljcwoKYGBge3IgczIgZGVtb2dyYXBoaWNzfQojIGV4YW1pbmUgZXhjbHVzaW9uCmV4Y2x1ZGVkQ291bnRzKCJzdHVkeSAyIikKCiMgbWFrZSBkZW1vZ3JhcGhpY3MgdGFibGVzCmRlbW9TYW1wbGVTaXplKCJzdHVkeSAyIikKZGVtb0R1cmF0aW9uKCJzdHVkeSAyIikKZGVtb0FnZSgic3R1ZHkgMiIpCmRlbW9HZW5kZXIoInN0dWR5IDIiKQpkZW1vUmFjZSgic3R1ZHkgMiIpCmRlbW9SZWxpZ2lvbigic3R1ZHkgMiIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcwoKIyMjIFN0ZXAgMTogUnVuIG1heGltYWwgRUZBICh3aXRob3V0IGFuZCB3aXRoIHJvdGF0aW9uKQoKYGBge3IgczIgYWxsIG5vIHJvdGF0aW9ufQojIGV4YW1pbmUgc2NyZWUgcGxvdAojIGZhLnBhcmFsbGVsKGQyX2FsbCkKCiMgcnVuIEVGQSB3aXRob3V0IHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMl9hbGxfdW5yb3RhdGVkIDwtIGZhKGQyX2FsbCwgMTMsIHJvdGF0ZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QyX2FsbF91bnJvdGF0ZWQpCmBgYAoKYGBge3IgczIgaG93IG1hbnkgZmFjdG9ycywgaW5jbHVkZSA9IEZ9CiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9kMl9hbGxfdW5yb3RhdGVkX2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9kMl9hbGxfdW5yb3RhdGVkKSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY291bnQgZmFjdG9ycyB3aXRoIGVpZ2VudmFsdWVzID4gMSBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUKZWZhX2QyX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMgPC0gZWZhX2QyX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgJT4lCiAgZmlsdGVyKFNTLmxvYWRpbmdzID4gMSwgUHJvcG9ydGlvbi5FeHBsYWluZWQgPiAwLjA1KSAlPiUKICBjb3VudCgpICU+JQogIGFzLm51bWVyaWMoKQplZmFfZDJfYWxsX3Vucm90YXRlZF9uZmFjdG9ycwpgYGAKCmBgYHtyIHMyIGFsbCByb3RhdGlvbn0KZWZhX2QyX2FsbF9yb3RhdGVkX21heCA8LSBmYShkMl9hbGwsIDEzLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQoKZWZhX2QyX2FsbF9yb3RhdGVkIDwtIGZhKGQyX2FsbCwgZWZhX2QyX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgojIGNoZWNrIHRoYXQgZWFjaCBvZiB0aGVzZSBmYWN0b3JzIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGF0IGxlYXN0IG9uZSBtZW50YWwgY2FwYWNpdHkgaXRlbQplZmFfZDJfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgPC0gZmEuc29ydChsb2FkaW5ncyhlZmFfZDJfYWxsX3JvdGF0ZWQpW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBtdXRhdGUobG9hZGluZ19hYnMgPSBhYnMobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBsb2FkaW5nX2FicykgJT4lCiAgdW5ncm91cCgpCmVmYV9kMl9hbGxfcm90YXRlZF9sb2FkaW5ncwoKIyBkcm9wIGFueSBmYWN0b3JzIHdoZXJlIG4gPCAxCmVmYV9kMl9hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKQoKIyBzZXQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZXh0cmFjdApuZmFjdG9yc19kMl9hbGwgPC0gZWZhX2QyX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApICU+JQogIG5yb3coKQpuZmFjdG9yc19kMl9hbGwKYGBgCgojIyMgU3RlcCAyOiBSdW4gRUZBIHdpdGggdmFyaW1heCByb3RhdGlvbgoKYGBge3IgczIgYWxsIHZhcmltYXggcm90YXRpb259CiMgcnVuIEVGQSB3aXRoIHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMl9hbGxfcm90YXRlZE4gPC0gZmEoZDJfYWxsLCBuZmFjdG9yc19kMl9hbGwsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kMl9hbGxfcm90YXRlZE4pCgojIGdldCBsb2FkaW5ncyBmb3IgZWFjaCBmYWN0b3IKZWZhX2QyX2FsbF9yb3RhdGVkTl9sb2FkaW5ncyA8LSBsb2FkaW5ncyhlZmFfZDJfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIyMgRmFjdG9yIGxvYWRpbmdzIHRhYmxlCgpgYGB7ciBzMiBsb2FkaW5ncyB0YWJsZX0KZGF0YS5mcmFtZShsb2FkaW5ncyhmYS5zb3J0KGVmYV9kMl9hbGxfcm90YXRlZE4pKVtdKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIk0iKSksIGZ1bnMocm91bmQyKSkKYGBgCgojIFN0dWR5IDMgCgpEZXNpZ246IDIgY29uZGl0aW9ucyAoYmVldGxlLCByb2JvdCksIHdpdGhpbi1zdWJqZWN0cwpEYXRlIGNvbmR1Y3RlZDogMjAxNi0wMS0xMAoKIyMgRGVtb2dyYXBoaWNzCgpgYGB7ciBzMyBkZW1vZ3JhcGhpY3N9CiMgZXhhbWluZSBleGNsdXNpb24KZXhjbHVkZWRDb3VudHMoInN0dWR5IDMiKQoKIyBtYWtlIGRlbW9ncmFwaGljcyB0YWJsZXMKZGVtb1NhbXBsZVNpemUoInN0dWR5IDMiKQpkZW1vRHVyYXRpb24oInN0dWR5IDMiKQpkZW1vQWdlKCJzdHVkeSAzIikKZGVtb0dlbmRlcigic3R1ZHkgMyIpCmRlbW9SYWNlKCJzdHVkeSAzIikKZGVtb1JlbGlnaW9uKCJzdHVkeSAzIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgU3RlcCAxOiBSdW4gbWF4aW1hbCBFRkEgKHdpdGhvdXQgYW5kIHdpdGggcm90YXRpb24pCgpgYGB7ciBzMyBhbGwgbm8gcm90YXRpb259CiMgZXhhbWluZSBzY3JlZSBwbG90CiMgZmEucGFyYWxsZWwoZDNfYWxsKQoKIyBydW4gRUZBIHdpdGhvdXQgcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QzX2FsbF91bnJvdGF0ZWQgPC0gZmEoZDNfYWxsLCAxMywgcm90YXRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDNfYWxsX3Vucm90YXRlZCkKYGBgCgpgYGB7ciBzMyBob3cgbWFueSBmYWN0b3JzLCBpbmNsdWRlID0gRn0KIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2QzX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2QzX2FsbF91bnJvdGF0ZWQpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQoKIyBjb3VudCBmYWN0b3JzIHdpdGggZWlnZW52YWx1ZXMgPiAxIGFuZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JQplZmFfZDNfYWxsX3Vucm90YXRlZF9uZmFjdG9ycyA8LSBlZmFfZDNfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9kM19hbGxfdW5yb3RhdGVkX25mYWN0b3JzCmBgYAoKYGBge3IgczMgYWxsIHJvdGF0aW9ufQplZmFfZDNfYWxsX3JvdGF0ZWRfbWF4IDwtIGZhKGQzX2FsbCwgMTMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgplZmFfZDNfYWxsX3JvdGF0ZWQgPC0gZmEoZDNfYWxsLCBlZmFfZDNfYWxsX3Vucm90YXRlZF9uZmFjdG9ycywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCiMgY2hlY2sgdGhhdCBlYWNoIG9mIHRoZXNlIGZhY3RvcnMgaXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYXQgbGVhc3Qgb25lIG1lbnRhbCBjYXBhY2l0eSBpdGVtCmVmYV9kM19hbGxfcm90YXRlZF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9kM19hbGxfcm90YXRlZClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShsb2FkaW5nX2FicyA9IGFicyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGxvYWRpbmdfYWJzKSAlPiUKICB1bmdyb3VwKCkKZWZhX2QzX2FsbF9yb3RhdGVkX2xvYWRpbmdzCgojIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKZWZhX2QzX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApCgojIHNldCBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0Cm5mYWN0b3JzX2QzX2FsbCA8LSBlZmFfZDNfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkgJT4lCiAgbnJvdygpCm5mYWN0b3JzX2QzX2FsbApgYGAKCiMjIyBTdGVwIDI6IFJ1biBFRkEgd2l0aCB2YXJpbWF4IHJvdGF0aW9uCgpgYGB7ciBzMyBhbGwgdmFyaW1heCByb3RhdGlvbn0KIyBydW4gRUZBIHdpdGggcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QzX2FsbF9yb3RhdGVkTiA8LSBmYShkM19hbGwsIG5mYWN0b3JzX2QzX2FsbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gY2hvc2VuUm90VHlwZSwgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QzX2FsbF9yb3RhdGVkTikKCiMgZ2V0IGxvYWRpbmdzIGZvciBlYWNoIGZhY3RvcgplZmFfZDNfYWxsX3JvdGF0ZWROX2xvYWRpbmdzIDwtIGxvYWRpbmdzKGVmYV9kM19hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JSAKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm1jIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMjIyBGYWN0b3IgbG9hZGluZ3MgdGFibGUKCmBgYHtyIHMzIGxvYWRpbmdzIHRhYmxlfQpkYXRhLmZyYW1lKGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QzX2FsbF9yb3RhdGVkTikpW10pICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTSIpKSwgZnVucyhyb3VuZDIpKQpgYGAKCiMgU3R1ZHkgNAoKRGVzaWduOiAyMSBjb25kaXRpb25zLCBiZXR3ZWVuLXN1YmplY3RzCkRhdGUgY29uZHVjdGVkOiAyMDE2LTAxLTE0CgojIyBEZW1vZ3JhcGhpY3MKCmBgYHtyIHM0IGRlbW9ncmFwaGljc30KIyBleGFtaW5lIGV4Y2x1c2lvbgpleGNsdWRlZENvdW50cygic3R1ZHkgNCIpCgojIG1ha2UgZGVtb2dyYXBoaWNzIHRhYmxlcwpkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgNCIpCmRlbW9EdXJhdGlvbigic3R1ZHkgNCIpCmRlbW9BZ2UoInN0dWR5IDQiKQpkZW1vR2VuZGVyKCJzdHVkeSA0IikKZGVtb1JhY2UoInN0dWR5IDQiKQpkZW1vRWR1Y2F0aW9uKCJzdHVkeSA0IikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgU3RlcCAxOiBSdW4gbWF4aW1hbCBFRkEgKHdpdGhvdXQgYW5kIHdpdGggcm90YXRpb24pCgpgYGB7ciBzNCBhbGwgbm8gcm90YXRpb259CiMgZXhhbWluZSBzY3JlZSBwbG90CiMgZmEucGFyYWxsZWwoZDRfYWxsKQoKIyBydW4gRUZBIHdpdGhvdXQgcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2Q0X2FsbF91bnJvdGF0ZWQgPC0gZmEoZDRfYWxsLCAxMywgcm90YXRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDRfYWxsX3Vucm90YXRlZCkKYGBgCgpgYGB7ciBzNCBob3cgbWFueSBmYWN0b3JzLCBpbmNsdWRlID0gRn0KIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2Q0X2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2Q0X2FsbF91bnJvdGF0ZWQpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQoKIyBjb3VudCBmYWN0b3JzIHdpdGggZWlnZW52YWx1ZXMgPiAxIGFuZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JQplZmFfZDRfYWxsX3Vucm90YXRlZF9uZmFjdG9ycyA8LSBlZmFfZDRfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9kNF9hbGxfdW5yb3RhdGVkX25mYWN0b3JzCmBgYAoKYGBge3IgczQgYWxsIHJvdGF0aW9ufQplZmFfZDRfYWxsX3JvdGF0ZWRfbWF4IDwtIGZhKGQ0X2FsbCwgMTMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgplZmFfZDRfYWxsX3JvdGF0ZWQgPC0gZmEoZDRfYWxsLCBlZmFfZDRfYWxsX3Vucm90YXRlZF9uZmFjdG9ycywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCiMgY2hlY2sgdGhhdCBlYWNoIG9mIHRoZXNlIGZhY3RvcnMgaXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYXQgbGVhc3Qgb25lIG1lbnRhbCBjYXBhY2l0eSBpdGVtCmVmYV9kNF9hbGxfcm90YXRlZF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9kNF9hbGxfcm90YXRlZClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShsb2FkaW5nX2FicyA9IGFicyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGxvYWRpbmdfYWJzKSAlPiUKICB1bmdyb3VwKCkKZWZhX2Q0X2FsbF9yb3RhdGVkX2xvYWRpbmdzCgojIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKZWZhX2Q0X2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApCgojIHNldCBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0Cm5mYWN0b3JzX2Q0X2FsbCA8LSBlZmFfZDRfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkgJT4lCiAgbnJvdygpCm5mYWN0b3JzX2Q0X2FsbApgYGAKCiMjIyBTdGVwIDI6IFJ1biBFRkEgd2l0aCB2YXJpbWF4IHJvdGF0aW9uCgpgYGB7ciBzNCBhbGwgdmFyaW1heCByb3RhdGlvbn0KIyBydW4gRUZBIHdpdGggcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2Q0X2FsbF9yb3RhdGVkTiA8LSBmYShkNF9hbGwsIG5mYWN0b3JzX2Q0X2FsbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gY2hvc2VuUm90VHlwZSwgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2Q0X2FsbF9yb3RhdGVkTikKCiMgZ2V0IGxvYWRpbmdzIGZvciBlYWNoIGZhY3RvcgplZmFfZDRfYWxsX3JvdGF0ZWROX2xvYWRpbmdzIDwtIGxvYWRpbmdzKGVmYV9kNF9hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JSAKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm1jIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMjIyBGYWN0b3IgbG9hZGluZ3MgdGFibGUKCmBgYHtyIHM0IGxvYWRpbmdzIHRhYmxlfQpkYXRhLmZyYW1lKGxvYWRpbmdzKGZhLnNvcnQoZWZhX2Q0X2FsbF9yb3RhdGVkTikpW10pICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTSIpKSwgZnVucyhyb3VuZDIpKQpgYGAKCiMgQmlnIGZhY3RvciBsb2FkaW5ncyB0YWJsZSBmb3IgYWxsIHN0dWRpZXMgKFN0dWRpZXMgMS00KQoKYGBge3IgYWxsIHN0dWRpZXMgbG9hZGluZ3MgdGFibGV9Cm9yZGVyX3MxIDwtIGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QxX2FsbF9yb3RhdGVkTikpW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAibWMiKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm9yZGVyMSIpICU+JQogIHJlbmFtZShzMV9NUjEgPSBNUjEsIHMxX01SMiA9IE1SMiwgczFfTVIzID0gTVIzKQoKb3JkZXJfczIgPC0gbG9hZGluZ3MoZmEuc29ydChlZmFfZDJfYWxsX3JvdGF0ZWROKSlbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpICU+JQogIHJlbmFtZShzMl9NUjEgPSBNUjEsIHMyX01SMiA9IE1SMiwgczJfTVIzID0gTVIzKQoKb3JkZXJfczMgPC0gbG9hZGluZ3MoZmEuc29ydChlZmFfZDNfYWxsX3JvdGF0ZWROKSlbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpICU+JQogIHJlbmFtZShzM19NUjEgPSBNUjMsIHMzX01SMiA9IE1SMSwgczNfTVIzID0gTVIyKSAjIG5vdGUgZGlzY3JlcGFuY3kKCm9yZGVyX3M0IDwtIGxvYWRpbmdzKGZhLnNvcnQoZWZhX2Q0X2FsbF9yb3RhdGVkTikpW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAibWMiKSAlPiUKICByZW5hbWUoczRfTVIxID0gTVIxLCBzNF9NUjIgPSBNUjIsIHM0X01SMyA9IE1SMykKCmJpZ1RhYmxlIDwtIG9yZGVyX3MxICU+JQogIGZ1bGxfam9pbihvcmRlcl9zMikgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3MzKSAlPiUKICBmdWxsX2pvaW4ob3JkZXJfczQpICU+JQogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJzIikpLCBmdW5zKHJvdW5kMikpICU+JQogIHNlbGVjdChvcmRlcjEsIG1jLCBlbmRzX3dpdGgoIk1SMSIpLCBlbmRzX3dpdGgoIk1SMiIpLCBlbmRzX3dpdGgoIk1SMyIpKQoKYmlnVGFibGUKYGBgCgojIEZpZ3VyZXMKCmBgYHtyIHBsb3R0aW5nIHNldHVwIGNoYXJhY3RlciBtZWFucywgaW5jbHVkZSA9IEZ9CiMgYm9vdHN0cmFwIDk1JSBDSXMgZm9yIHJhdGluZ3MgYnkgY2hhcmFjdGVyIChub25wYXJhbWV0cmljKQojIHN0dWR5IDEKY2hhcl9wbG90dGluZ19yYXRpbmdzX3MxIDwtIGQxICU+JSAKICBzZWxlY3QoY29uZGl0aW9uLCBzdWJpZCwgaGFwcHk6cHJpZGUpICU+JQogIGdhdGhlcihtYywgcmVzcG9uc2UsIC1zdWJpZCwgLWNvbmRpdGlvbikgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gYXMubnVtZXJpYyhyZXNwb25zZSkpICU+JQogIGdyb3VwX2J5KGNvbmRpdGlvbiwgbWMpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHJlc3BvbnNlKSkpKSAlPiUKICBmdWxsX2pvaW4oZGVtb1NhbXBsZVNpemUoInN0dWR5IDEiKSAlPiUgZmlsdGVyKGNvbmRpdGlvbiAhPSAiYWxsIikpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAxIikKCiMgc3R1ZHkgMgpjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczIgPC0gZDIgJT4lIAogIHNlbGVjdChjb25kaXRpb24sIHN1YmlkLCBoYXBweTpwcmlkZSkgJT4lCiAgZ2F0aGVyKG1jLCByZXNwb25zZSwgLXN1YmlkLCAtY29uZGl0aW9uKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkoY29uZGl0aW9uLCBtYykgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kcmVzcG9uc2UpKSkpICU+JQogIGZ1bGxfam9pbihkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgMiIpICU+JSBmaWx0ZXIoY29uZGl0aW9uICE9ICJhbGwiKSkgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDIiKQoKCiMgc3R1ZHkgMwpjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczMgPC0gZDMgJT4lIAogIHNlbGVjdCh0YXJnZXQsIHN1YmlkLCBoYXBweTpwcmlkZSkgJT4lCiAgcmVuYW1lKGNvbmRpdGlvbiA9IHRhcmdldCkgJT4lCiAgZ2F0aGVyKG1jLCByZXNwb25zZSwgLXN1YmlkLCAtY29uZGl0aW9uKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkoY29uZGl0aW9uLCBtYykgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kcmVzcG9uc2UpKSkpICU+JQogIGZ1bGxfam9pbihkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgMyIpICU+JSBmaWx0ZXIoY29uZGl0aW9uICE9ICJhbGwiKSkgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDMiKQoKIyBzdHVkeSA0CmNoYXJfcGxvdHRpbmdfcmF0aW5nc19zNCA8LSBkNCAlPiUgCiAgc2VsZWN0KGNvbmRpdGlvbiwgc3ViaWQsIGhhcHB5OnByaWRlKSAlPiUKICBnYXRoZXIobWMsIHJlc3BvbnNlLCAtc3ViaWQsIC1jb25kaXRpb24pICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGFzLm51bWVyaWMocmVzcG9uc2UpKSAlPiUKICBncm91cF9ieShjb25kaXRpb24sIG1jKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRyZXNwb25zZSkpKSkgJT4lCiAgZnVsbF9qb2luKGRlbW9TYW1wbGVTaXplKCJzdHVkeSA0IikgJT4lIGZpbHRlcihjb25kaXRpb24gIT0gImFsbCIpKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgNCIpCmBgYAoKYGBge3IgcGxvdHRpbmcgc2V0dXAgY2hhcmFjdGVyIG1lYW5zIG1lcmdlLCBpbmNsdWRlID0gRn0KY2hhcl9wbG90dGluZ19yYXRpbmdzX2FsbCA8LSBjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczEgJT4lCiAgZnVsbF9qb2luKGNoYXJfcGxvdHRpbmdfcmF0aW5nc19zMikgJT4lCiAgZnVsbF9qb2luKGNoYXJfcGxvdHRpbmdfcmF0aW5nc19zMykgJT4lCiAgZnVsbF9qb2luKGNoYXJfcGxvdHRpbmdfcmF0aW5nc19zNCkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShzdHVkeSA9IGZhY3RvcihzdHVkeSksCiAgICAgICAgIGNvbmRpdGlvbiA9IGZhY3Rvcihjb25kaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJzdGFwbGVyIiwgImNhciIsICJjb21wdXRlciIsICJyb2JvdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaWNyb2JlIiwgImJlZXRsZSIsICJmaXNoIiwgImJsdWVqYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvZyIsICJtb3VzZSIsICJnb2F0IiwgImRvZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWFyIiwgImRvbHBoaW4iLCAiZWxlcGhhbnQiLCAiY2hpbXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmV0dXMiLCAicHZzIiwgImluZmFudCIsICJjaGlsZCIsICJhZHVsdCIpKSkKYGBgCgpgYGB7ciBwbG90dGluZyBzZXR1cCBjYXBhY2l0eSB3b3JkaW5ncywgaW5jbHVkZSA9IEZ9CmNoYXJfcGxvdHRpbmdfd29yZGluZ3MgPC0gY2hhcl9wbG90dGluZ19yYXRpbmdzX2FsbCAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KG1jKSAlPiUKICBkaXN0aW5jdCgpICU+JSAKICBtdXRhdGUod29yZGluZyA9IGZhY3RvcigKICAgIHJlY29kZShtYywKICAgICAgICAgICBodW5ncnkgPSAiZ2V0dGluZyBodW5ncnkiLCBwYWluID0gImV4cGVyaWVuY2luZyBwYWluIiwKICAgICAgICAgICB0aXJlZCA9ICJmZWVsaW5nIHRpcmVkIiwgZmVhciA9ICJleHBlcmllbmNpbmcgZmVhciIsCiAgICAgICAgICAgY29tcHV0YXRpb25zID0gImRvaW5nIGNvbXB1dGF0aW9ucyIsIHBsZWFzdXJlID0gImV4cGVyaWVuY2luZyBwbGVhc3VyZSIsCiAgICAgICAgICAgY29uc2Npb3VzID0gImJlaW5nIGNvbnNjaW91cyIsIGZyZWVfd2lsbCA9ICJoYXZpbmcgZnJlZSB3aWxsIiwKICAgICAgICAgICBzYWZlID0gImZlZWxpbmcgc2FmZSIsIGRlc2lyZXMgPSAiaGF2aW5nIGRlc2lyZXMiLAogICAgICAgICAgIGNhbG0gPSAiZmVlbGluZyBjYWxtIiwgbmF1c2VhdGVkID0gImZlZWxpbmcgbmF1c2VhdGVkIiwKICAgICAgICAgICBhbmdyeSA9ICJnZXR0aW5nIGFuZ3J5IiwgaW50ZW50aW9ucyA9ICJoYXZpbmcgaW50ZW50aW9ucyIsCiAgICAgICAgICAgc2VsZl9hd2FyZSA9ICJiZWluZyBzZWxmLWF3YXJlIiwgb2RvcnMgPSAiZGV0ZWN0aW5nIG9kb3JzIiwKICAgICAgICAgICBlbWJhcnJhc3NlZCA9ICJmZWVsaW5nIGVtYmFycmFzc2VkIiwgcHJpZGUgPSAiZXhwZXJpZW5jaW5nIHByaWRlIiwKICAgICAgICAgICBsb3ZlID0gImZlZWxpbmcgbG92ZSIsIGd1aWx0ID0gImV4cGVyaWVuY2luZyBndWlsdCIsCiAgICAgICAgICAgZGVwcmVzc2VkID0gImZlZWxpbmcgZGVwcmVzc2VkIiwgZGlzcmVzcGVjdGVkID0gImZlZWxpbmcgZGlzcmVzcGVjdGVkIiwKICAgICAgICAgICBiZWxpZWZzID0gImhvbGRpbmcgYmVsaWVmcyIsIGVtb19yZWNvZyA9ICJ1bmRlcnN0YW5kaW5nIC4uLiBmZWVsaW5nIiwKICAgICAgICAgICBqb3kgPSAiZXhwZXJpZW5jaW5nIGpveSIsIHBlcnNvbmFsaXR5ID0gImhhdmluZyBhIHBlcnNvbmFsaXR5IiwKICAgICAgICAgICBoYXBweSA9ICJmZWVsaW5nIGhhcHB5IiwgbW9yYWxpdHkgPSAidGVsbGluZyByaWdodCBmcm9tIHdyb25nIiwKICAgICAgICAgICB0aG91Z2h0cyA9ICJoYXZpbmcgdGhvdWdodHMiLCBzZWxmX3Jlc3RyYWludCA9ICJleGVyY2lzaW5nIHNlbGYtcmVzdHJhaW50IiwKICAgICAgICAgICByZW1lbWJlcmluZyA9ICJyZW1lbWJlcmluZyB0aGluZ3MiLCByZWNvZ25pemluZyA9ICJyZWNvZ25pemluZyBvdGhlcnMiLAogICAgICAgICAgIHRlbXBlcmF0dXJlID0gInNlbnNpbmcgdGVtcGVyYXR1cmVzIiwgY29tbXVuaWNhdGluZyA9ICJjb21tdW5pY2F0aW5nIC4uLiIsCiAgICAgICAgICAgZ29hbCA9ICJ3b3JraW5nIHRvd2FyZCBhIGdvYWwiLCBkZXB0aCA9ICJwZXJjZWl2aW5nIGRlcHRoIiwKICAgICAgICAgICBzb3VuZHMgPSAiZGV0ZWN0aW5nIHNvdW5kcyIsIHNlZWluZyA9ICJzZWVpbmcgdGhpbmdzIiwKICAgICAgICAgICBjaG9pY2VzID0gIm1ha2luZyBjaG9pY2VzIiwgcmVhc29uaW5nID0gInJlYXNvbmluZyBhYm91dCB0aGluZ3MiKSkpCmBgYAoKYGBge3IgcGxvdHRpbmcgc2V0dXAgbG9hZGluZ3MsIGluY2x1ZGUgPSBGfQojIG1lcmdlIHdpdGggbG9hZGluZ3MsIG9yZGVyaW5ncywgYW5kIGRvbWluYW50IGZhY3RvcnMgZnJvbSBlYWNoIHN0dWR5IApjaGFyX3Bsb3R0aW5nIDwtIGNoYXJfcGxvdHRpbmdfcmF0aW5nc19hbGwgJT4lCiAgZnVsbF9qb2luKGNoYXJfcGxvdHRpbmdfd29yZGluZ3MpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zMSAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczFfTVIxX2FicyA9IGFicyhzMV9NUjEpLAogICAgICAgICAgICAgICAgICAgICBzMV9NUjJfYWJzID0gYWJzKHMxX01SMiksCiAgICAgICAgICAgICAgICAgICAgIHMxX01SM19hYnMgPSBhYnMoczFfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczFfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMxX01SMV9hYnMgPiBzMV9NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMV9NUjFfYWJzID4gczFfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczFfTVIyX2FicyA+IHMxX01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMV9NUjJfYWJzID4gczFfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzMV9NUjNfYWJzID4gczFfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMV9NUjNfYWJzID4gczFfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzMV9jb2xvciA9IHJlY29kZShzMV9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSwKICAgICAgICAgICAgICAgICAgICAgczFfb3JkZXIgPSBhcy5udW1lcmljKG9yZGVyMSkpICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtczFfTVIxX2FicywgLXMxX01SMl9hYnMsIC1zMV9NUjNfYWJzKSkgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3MyICU+JQogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczJfTVIxX2FicyA9IGFicyhzMl9NUjEpLAogICAgICAgICAgICAgICAgICAgICBzMl9NUjJfYWJzID0gYWJzKHMyX01SMiksCiAgICAgICAgICAgICAgICAgICAgIHMyX01SM19hYnMgPSBhYnMoczJfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczJfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMyX01SMV9hYnMgPiBzMl9NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjFfYWJzID4gczJfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczJfTVIyX2FicyA+IHMyX01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjJfYWJzID4gczJfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzMl9NUjNfYWJzID4gczJfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjNfYWJzID4gczJfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzMl9jb2xvciA9IHJlY29kZShzMl9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzMl9vcmRlciIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzMl9vcmRlciA9IGFzLm51bWVyaWMoczJfb3JkZXIpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXMyX01SMV9hYnMsIC1zMl9NUjJfYWJzLCAtczJfTVIzX2FicykpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zMyAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczNfTVIxX2FicyA9IGFicyhzM19NUjEpLAogICAgICAgICAgICAgICAgICAgICBzM19NUjJfYWJzID0gYWJzKHMzX01SMiksCiAgICAgICAgICAgICAgICAgICAgIHMzX01SM19hYnMgPSBhYnMoczNfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczNfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMzX01SMV9hYnMgPiBzM19NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19NUjFfYWJzID4gczNfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczNfTVIyX2FicyA+IHMzX01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19NUjJfYWJzID4gczNfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzM19NUjNfYWJzID4gczNfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19NUjNfYWJzID4gczNfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzM19jb2xvciA9IHJlY29kZShzM19mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzM19vcmRlciIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzM19vcmRlciA9IGFzLm51bWVyaWMoczNfb3JkZXIpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXMzX01SMV9hYnMsIC1zM19NUjJfYWJzLCAtczNfTVIzX2FicykpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zNCAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczRfTVIxX2FicyA9IGFicyhzNF9NUjEpLAogICAgICAgICAgICAgICAgICAgICBzNF9NUjJfYWJzID0gYWJzKHM0X01SMiksCiAgICAgICAgICAgICAgICAgICAgIHM0X01SM19hYnMgPSBhYnMoczRfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczRfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHM0X01SMV9hYnMgPiBzNF9NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNF9NUjFfYWJzID4gczRfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczRfTVIyX2FicyA+IHM0X01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNF9NUjJfYWJzID4gczRfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzNF9NUjNfYWJzID4gczRfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNF9NUjNfYWJzID4gczRfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzNF9jb2xvciA9IHJlY29kZShzNF9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzNF9vcmRlciIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzNF9vcmRlciA9IGFzLm51bWVyaWMoczRfb3JkZXIpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXM0X01SMV9hYnMsIC1zNF9NUjJfYWJzLCAtczRfTVIzX2FicykpCgojIGNvbmZpZ3VyZSBwbG90IGxhYmVscwpsYWJlbF9kZl9zMSA8LSBjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDEiKSAlPiUgc2VsZWN0KGNvbmRpdGlvbiwgbikgJT4lIHVuaXF1ZSgpCmxhYmVsX2RmX3MyIDwtIGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgMiIpICU+JSBzZWxlY3QoY29uZGl0aW9uLCBuKSAlPiUgdW5pcXVlKCkKbGFiZWxfZGZfczMgPC0gY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSAzIikgJT4lIHNlbGVjdChjb25kaXRpb24sIG4pICU+JSB1bmlxdWUoKQpsYWJlbF9kZl9zNCA8LSBjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDQiKSAlPiUgc2VsZWN0KGNvbmRpdGlvbiwgbikgJT4lIHVuaXF1ZSgpCgpmYWNldExhYnNfczEgPC0gZ3N1YigiIFxcKCIsICJcbigiLCBtYWtlRmFjZXRMYWJzKGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgMSIpKSkKZmFjZXRMYWJzX3MyIDwtIGdzdWIoIiBcXCgiLCAiXG4oIiwgbWFrZUZhY2V0TGFicyhjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDIiKSkpCmZhY2V0TGFic19zMyA8LSBnc3ViKCIgXFwoIiwgIlxuKCIsIG1ha2VGYWNldExhYnMoY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSAzIikpKQpmYWNldExhYnNfczQgPC0gZ3N1YigiIFxcKCIsICJcbigiLCBtYWtlRmFjZXRMYWJzKGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgNCIpKSkKCiMgY29uZmlndXJlIGN1c3RvbSBwYWxldHRlCm15UGFsZXR0ZSA8LSBicmV3ZXIucGFsKDMsICJTZXQxIik7IG5hbWVzKG15UGFsZXR0ZSkgPC0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikKCnBhbGV0dGVfYmFzZSA8LSBjaGFyX3Bsb3R0aW5nICU+JSAKICBzZWxlY3QobWMsIGVuZHNfd2l0aCgiX2ZhY3RvciIpKSAlPiUKICBkaXN0aW5jdCgpCnBhbGV0dGVfczEgPC0gYyhyZXAobXlQYWxldHRlWyJNSU5EIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMxX2ZhY3RvciA9PSAiTUlORCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkhFQVJUIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMxX2ZhY3RvciA9PSAiSEVBUlQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJCT0RZIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMxX2ZhY3RvciA9PSAiQk9EWSIpICU+JSBjb3VudCgpKSkKcGFsZXR0ZV9zMiA8LSBjKHJlcChteVBhbGV0dGVbIk1JTkQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczJfZmFjdG9yID09ICJNSU5EIikgJT4lIGNvdW50KCkpLAogICAgICAgICAgICAgICAgcmVwKG15UGFsZXR0ZVsiSEVBUlQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczJfZmFjdG9yID09ICJIRUFSVCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkJPRFkiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczJfZmFjdG9yID09ICJCT0RZIikgJT4lIGNvdW50KCkpKQpwYWxldHRlX3MzIDwtIGMocmVwKG15UGFsZXR0ZVsiTUlORCJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzM19mYWN0b3IgPT0gIk1JTkQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJIRUFSVCJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzM19mYWN0b3IgPT0gIkhFQVJUIikgJT4lIGNvdW50KCkpLAogICAgICAgICAgICAgICAgcmVwKG15UGFsZXR0ZVsiQk9EWSJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzM19mYWN0b3IgPT0gIkJPRFkiKSAlPiUgY291bnQoKSkpCnBhbGV0dGVfczQgPC0gYyhyZXAobXlQYWxldHRlWyJNSU5EIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHM0X2ZhY3RvciA9PSAiTUlORCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkhFQVJUIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHM0X2ZhY3RvciA9PSAiSEVBUlQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJCT0RZIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHM0X2ZhY3RvciA9PSAiQk9EWSIpICU+JSBjb3VudCgpKSkKYGBgCgojIyBGaWd1cmUgMQoKTWVhbiByYXRpbmdzIG9mIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciBhIHN1YnNldCBvZiB0aGUgMjEgZW50aXRpZXMgaW5jbHVkZWQgaW4gU3R1ZHkgNC4gKFNlZSBGaWcuIFM1IGZvciBtZWFuIHJhdGluZ3MgZm9yIHRoZSBmdWxsIHNldCBvZiBlbnRpdGllcy4pIFBhcnRpY2lwYW50cyByZXNwb25kZWQgb24gYSBzY2FsZSBmcm9tIDAgKE5vdCBhdCBhbGwgY2FwYWJsZSkgdG8gNiAoSGlnaGx5IGNhcGFibGUpLiBFcnJvciBiYXJzIGFyZSBub25wYXJhbWV0cmljIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE1lbnRhbCBjYXBhY2l0aWVzIGFyZSBncm91cGVkIGFjY29yZGluZyB0byB0aGVpciBkb21pbmFudCBmYWN0b3IgbG9hZGluZyBpbiBTdHVkeSAxLiAqRG9pbmcgY29tcHV0YXRpb25zKiB3YXMgdGhlIG9ubHkgaXRlbSB0byBsb2FkIG5lZ2F0aXZlbHkgb24gaXRzIGRvbWluYW50IGZhY3RvciBpbiBhbnkgc3R1ZHkgKGFuZCBkaWQgc28gaW4gU3R1ZGllcyAxLTMpOyBpbiBTdHVkeSA0LCBpdCBsb2FkZWQgcG9zaXRpdmVseSBvbiBpdHMgZG9taW5hbnQgZmFjdG9yIChGYWN0b3IgMiwg4oCcaGVhcnTigJ0pLgoKYGBge3IgZmlndXJlIDEsIGZpZy53aWR0aCA9IDYsIGZpZy5oZWlnaHQgPSA2fQojIG1ha2UgZGF0YWZyYW1lCnM0X3N1YnNldF9wbG90dGluZyA8LSBjaGFyX3Bsb3R0aW5nICU+JSAKICBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDQiLAogICAgICAgICBjb25kaXRpb24gJWluJSBjKCJzdGFwbGVyIiwgInJvYm90IiwgImJlZXRsZSIsICJnb2F0IiwgImVsZXBoYW50IiwgImFkdWx0IikpICU+JQogIGRpc3RpbmN0KCkKCiMgcGxvdCEgKG9yZGVyZWQgYnkgc3R1ZHkgMSBmYWN0b3IgbG9hZGluZ3MpCnM0X3N1YnNldCA8LSBnZ3Bsb3QoczRfc3Vic2V0X3Bsb3R0aW5nLCAKICAgICAgICAgICAgICAgYWVzKHggPSBNZWFuLCB5ID0gcmVvcmRlcih3b3JkaW5nLCBkZXNjKHMxX29yZGVyKSksIGNvbG91ciA9IHMxX2NvbG9yKSkgKwogIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2l6ZSA9IDQpICsKICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyLCB4bWF4ID0gVXBwZXIpLCBoZWlnaHQgPSAwLCBzaXplID0gMSkgKwogIGZhY2V0X3dyYXAofiBjb25kaXRpb24sIG5jb2wgPSA2LAogICAgICAgICAgICAgbGFiZWxsZXIgPSBsYWJlbGxlcihjb25kaXRpb24gPSBmYWNldExhYnNfczQpKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChmYWNlID0gIml0YWxpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gcGFsZXR0ZV9zMSksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJcbk1lYW4gcmF0aW5nIiwKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMywgMyksCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgtMywgMywgMSksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNlcSgwLCA2LCAxKSkgKwogIHNjYWxlX2NvbG91cl9icmV3ZXIobmFtZSA9ICJGYWN0b3I6IiwKICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAicXVhbCIsIHBhbGV0dGUgPSA2KQoKczRfc3Vic2V0CmBgYAoKIyMgRmlndXJlIFMxIChzdXBwb3J0aW5nIG1hdGVyaWFscykKCkZhY3RvciBsb2FkaW5ncyBmb3IgdGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIG9uIHRoZSB0aHJlZSByb3RhdGVkIGZhY3RvcnMgaW4gU3R1ZHkgMS4gSXRlbXMgYXJlIGNvbG9yZWQgYnkgdGhlaXIgZG9taW5hbnQgZmFjdG9yIGxvYWRpbmc6IEl0ZW1zIHRoYXQgbG9hZGVkIG1vc3Qgc3Ryb25nbHkgb24gdGhlIGJvZHkgZmFjdG9yIChwaHlzaW9sb2dpY2FsIHN0YXRlcyBhbmQgd2lsbCkgYXJlIGluIHJlZDsgaXRlbXMgdGhhdCBsb2FkZWQgbW9zdCBzdHJvbmdseSBvbiB0aGUgaGVhcnQgZmFjdG9yIChzb2NpYWwtZW1vdGlvbmFsIGV4cGVyaWVuY2VzIGFuZCBtb3JhbGl0eSkgYXJlIGluIGJsdWU7IGFuZCBpdGVtcyB0aGF0IGxvYWRlZCBtb3N0IHN0cm9uZ2x5IG9uIHRoZSBtaW5kIGZhY3RvciAocGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIGFuZCBnb2FsIHB1cnN1aXQpIGFyZSBpbiBncmVlbi4KCmBgYHtyIGZpZ3VyZSBTMSwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSA2fQojIHNldCB1cCBsYWJlbHMgZm9yIHBsb3QgKHNob3J0ZW5lZCB2ZXJzaW9uIG9mIG1lbnRhbCBjYXBhY2l0eSBpdGVtcykKd29yZGluZyA8LSBsb2FkaW5ncyhlZmFfZDFfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIml0ZW0iKSAlPiUKICBzZWxlY3QoaXRlbSkgJT4lCiAgbXV0YXRlKHdvcmRpbmcgPSBjKCJmZWVsaW5nIGhhcHB5IiwgImZlZWxpbmcgZGVwcmVzc2VkIiwgImV4cGVyaWVuY2luZyBmZWFyIiwKICAgICAgICAgICAgICAgICAgICAgImdldHRpbmcgYW5ncnkiLCAiZmVlbGluZyBjYWxtIiwgImRldGVjdGluZyBzb3VuZHMiLAogICAgICAgICAgICAgICAgICAgICAic2VlaW5nIHRoaW5ncyIsICJzZW5zaW5nIHRlbXBlcmF0dXJlcyIsICJkZXRlY3Rpbmcgb2RvcnMiLAogICAgICAgICAgICAgICAgICAgICAicGVyY2VpdmluZyBkZXB0aCIsICJkb2luZyBjb21wdXRhdGlvbnMiLCAiaGF2aW5nIHRob3VnaHRzIiwKICAgICAgICAgICAgICAgICAgICAgInJlYXNvbmluZyBhYm91dCB0aGluZ3MiLCAicmVtZW1iZXJpbmcgdGhpbmdzIiwgImhvbGRpbmcgYmVsaWVmcyIsCiAgICAgICAgICAgICAgICAgICAgICJnZXR0aW5nIGh1bmdyeSIsICJmZWVsaW5nIHRpcmVkIiwgImV4cGVyaWVuY2luZyBwYWluIiwKICAgICAgICAgICAgICAgICAgICAgImZlZWxpbmcgbmF1c2VhdGVkIiwgImZlZWxpbmcgc2FmZSIsICJmZWVsaW5nIGxvdmUiLAogICAgICAgICAgICAgICAgICAgICAicmVjb2duaXppbmcgc29tZW9uZSIsICJjb21tdW5pY2F0aW5nIHdpdGggb3RoZXJzIiwgImV4cGVyaWVuY2luZyBndWlsdCIsCiAgICAgICAgICAgICAgICAgICAgICJmZWVsaW5nIGRpc3Jlc3BlY3RlZCIsICJoYXZpbmcgZnJlZSB3aWxsIiwgIm1ha2luZyBjaG9pY2VzIiwKICAgICAgICAgICAgICAgICAgICAgImV4ZXJjaXNpbmcgc2VsZi1yZXN0cmFpbnQiLCAiaGF2aW5nIGludGVudGlvbnMiLCAid29ya2luZyB0b3dhcmQgYSBnb2FsIiwKICAgICAgICAgICAgICAgICAgICAgImJlaW5nIGNvbnNjaW91cyIsICJiZWluZyBzZWxmLWF3YXJlIiwgImhhdmluZyBkZXNpcmVzIiwKICAgICAgICAgICAgICAgICAgICAgImZlZWxpbmcgZW1iYXJyYXNzZWQiLCAidW5kZXJzdGFuZGluZyBob3cgb3RoZXJzIGFyZSBmZWVsaW5nIiwgCiAgICAgICAgICAgICAgICAgICAgICJleHBlcmllbmNpbmcgam95IiwgInRlbGxpbmcgcmlnaHQgZnJvbSB3cm9uZyIsICJoYXZpbmcgYSBwZXJzb25hbGl0eSIsCiAgICAgICAgICAgICAgICAgICAgICJleHBlcmllbmNpbmcgcGxlYXN1cmUiLCAiZXhwZXJpZW5jaW5nIHByaWRlIiksCiAgICAgICAgIHNob3J0ID0gYygiaGFwcGluZXNzIiwgImRlcHJlc3Npb24iLCAiZmVhciIsCiAgICAgICAgICAgICAgICAgICAiYW5nZXIiLCAiY2FsbSIsICJzb3VuZCIsCiAgICAgICAgICAgICAgICAgICAic2lnaHQiLCAidGVtcGVyYXR1cmUiLCAib2RvciIsCiAgICAgICAgICAgICAgICAgICAiZGVwdGgiLCAiY29tcHV0YXRpb24iLCAidGhvdWdodCIsCiAgICAgICAgICAgICAgICAgICAicmVhc29uaW5nIiwgIm1lbW9yeSIsICJiZWxpZWYiLAogICAgICAgICAgICAgICAgICAgImh1bmdlciIsICJ0aXJlZG5lc3MiLCAicGFpbiIsCiAgICAgICAgICAgICAgICAgICAibmF1c2VhIiwgInNhZmV0eSIsICJsb3ZlIiwKICAgICAgICAgICAgICAgICAgICJyZWNvZ25pdGlvbiIsICJjb21tdW5pY2F0aW9uIiwgImd1aWx0IiwKICAgICAgICAgICAgICAgICAgICJkaXNyZXNwZWN0IiwgImZyZWUgd2lsbCIsICJjaG9pY2UiLAogICAgICAgICAgICAgICAgICAgInNlbGYtcmVzdHJhaW50IiwgImludGVudGlvbiIsICJnb2FsIiwKICAgICAgICAgICAgICAgICAgICJjb25zY2lvdXNuZXNzIiwgInNlbGYtYXdhcmVuZXNzIiwgImRlc2lyZSIsCiAgICAgICAgICAgICAgICAgICAiZW1iYXJyYXNzbWVudCIsICJlbXBhdGh5IiwgCiAgICAgICAgICAgICAgICAgICAiam95IiwgIm1vcmFsaXR5IiwgInBlcnNvbmFsaXR5IiwKICAgICAgICAgICAgICAgICAgICJwbGVhc3VyZSIsICJwcmlkZSIpKQoKIyBtYWtlIGRhdGFmcmFtZSBmb3IgcGxvdHRpbmcKc2NhdHRlcl9wbG90dGluZyA8LSBsb2FkaW5ncyhlZmFfZDFfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIml0ZW0iKSAlPiUKICByZW5hbWUoQk9EWSA9IE1SMSwKICAgICAgICAgSEVBUlQgPSBNUjIsCiAgICAgICAgIE1JTkQgPSBNUjMpICU+JQogIGZ1bGxfam9pbih3b3JkaW5nKSAlPiUKICBtdXRhdGUoZG9taW5hbnQgPSBmYWN0b3IoCiAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKEJPRFkpLCAiQk9EWSIsCiAgICAgICAgICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhIRUFSVCksICJIRUFSVCIsCiAgICAgICAgICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoTUlORCksICJNSU5EIiwKICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKSwKICAgIHNpemUgPSBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKEJPRFkpLCBhYnMoQk9EWSksCiAgICAgICAgICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoSEVBUlQpLCBhYnMoSEVBUlQpLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhNSU5EKSwgYWJzKE1JTkQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgY29sb3IgPSBpZmVsc2UoZG9taW5hbnQgPT0gIkJPRFkiLCAiI2U0MWExYyIsCiAgICAgICAgICAgICAgICAgICBpZmVsc2UoZG9taW5hbnQgPT0gIkhFQVJUIiwgIiMzNzdlYjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShkb21pbmFudCA9PSAiTUlORCIsICIjNGRhZjRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpCgojIHBsb3QhCmZpZ1MxIDwtIHBsb3RfbHkoZGF0YSA9IHNjYXR0ZXJfcGxvdHRpbmcsCiAgICAgICAgICAgICAgICAgeCA9IH5IRUFSVCwgeSA9IH5CT0RZLCB6ID0gfk1JTkQsCiAgICAgICAgICAgICAgICAgdHlwZSA9ICdzY2F0dGVyM2QnLAogICAgICAgICAgICAgICAgIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChvcGFjaXR5ID0gMC44LCBzaXplID0gNiksCiAgICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLAogICAgICAgICAgICAgICAgIGNvbG9yID0gfmRvbWluYW50LCBjb2xvcnMgPSBjKCIjZTQxYTFjIiwgIiMzNzdlYjgiLCAiIzRkYWY0YSIpLAogICAgICAgICAgICAgICAgIHRleHQgPSB+d29yZGluZykKZmlnUzEKYGBgCgojIyBGaWd1cmUgUzIgKHN1cHBvcnRpbmcgbWF0ZXJpYWxzKQoKTWVhbiByYXRpbmdzIG9mIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciB0aGUgMiBlbnRpdGllcyBpbmNsdWRlZCBpbiBTdHVkaWVzIDEtMy4gUGFydGljaXBhbnRzIHJlc3BvbmRlZCBvbiBhIHNjYWxlIGZyb20gMCAoTm90IGF0IGFsbCBjYXBhYmxlKSB0byA2IChIaWdobHkgY2FwYWJsZSkuIEVycm9yIGJhcnMgYXJlIG5vbnBhcmFtZXRyaWMgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscy4gTWVudGFsIGNhcGFjaXRpZXMgYXJlIGdyb3VwZWQgYWNjb3JkaW5nIHRvIHRoZWlyIGRvbWluYW50IGZhY3RvciBsb2FkaW5nIGluIFN0dWR5IDEuCgpgYGB7ciBmaWd1cmUgUzIsIGZpZy53aWR0aCA9IDYsIGZpZy5oZWlnaHQgPSAxMn0KIyBtYWtlIGRhdGFmcmFtZQpzMTIzX3Bsb3R0aW5nIDwtIGNoYXJfcGxvdHRpbmcgJT4lIAogIGZpbHRlcihzdHVkeSAhPSAic3R1ZHkgNCIpICU+JQogIGRpc3RpbmN0KCkKCiMgcGxvdCEgKG9yZGVyZWQgYnkgc3R1ZHkgMyBmYWN0b3IgbG9hZGluZ3MpCnMxMjMgPC0gZ2dwbG90KHMxMjNfcGxvdHRpbmcsIAogICAgICAgICAgICAgICBhZXMoeSA9IE1lYW4sIHggPSByZW9yZGVyKHdvcmRpbmcsIGRlc2MoczFfb3JkZXIpKSwgY29sb3VyID0gczFfY29sb3IsCiAgICAgICAgICAgICAgICAgICBzaGFwZSA9IHN0dWR5KSkgKwogIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCBzaXplID0gNCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyKSwgd2lkdGggPSAwLCBzaXplID0gMSwKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpKSArCiAgZmFjZXRfd3JhcCh+IGNvbmRpdGlvbikgKwogIHRoZW1lX2J3KCkgKwogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlxuTWVhbiByYXRpbmciLAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0zLCAzKSwKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKC0zLCAzLCAxKSwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2VxKDAsIDYsIDEpKSArCiAgc2NhbGVfc2hhcGVfZGlzY3JldGUobmFtZSA9ICJTdHVkeToiKSArCiAgc2NhbGVfY29sb3VyX2JyZXdlcihuYW1lID0gIkZhY3RvcjoiLAogICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJxdWFsIiwgcGFsZXR0ZSA9IDYsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IEZBTFNFKSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCksCiAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJpdGFsaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSBwYWxldHRlX3MxKSwKICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpCgpzMTIzCmBgYAoKIyMgRmlndXJlIFMzIChzdXBwb3J0aW5nIG1hdGVyaWFscykKCk1lYW4gcmF0aW5ncyBvZiA0MCBtZW50YWwgY2FwYWNpdGllcyBmb3IgYWxsIDIxIGVudGl0aWVzIGluY2x1ZGVkIGluIFN0dWR5IDQuIFBhcnRpY2lwYW50cyByZXNwb25kZWQgb24gYSBzY2FsZSBmcm9tIDAgKE5vdCBhdCBhbGwgY2FwYWJsZSkgdG8gNiAoSGlnaGx5IGNhcGFibGUpLiBFcnJvciBiYXJzIGFyZSBub25wYXJhbWV0cmljIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE1lbnRhbCBjYXBhY2l0aWVzIGFyZSBncm91cGVkIGFjY29yZGluZyB0byB0aGVpciBkb21pbmFudCBmYWN0b3IgbG9hZGluZyBpbiBTdHVkeSA0LgoKYGBge3IgZmlndXJlIFMzLCBmaWcud2lkdGggPSAxOCwgZmlnLmhlaWdodCA9IDZ9CiMgbWFrZSBkYXRhZnJhbWUKczRfcGxvdHRpbmcgPC0gY2hhcl9wbG90dGluZyAlPiUgCiAgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSA0IikgJT4lCiAgZGlzdGluY3QoKQoKIyBwbG90ISAob3JkZXJlZCBieSBzdHVkeSA0IGZhY3RvciBsb2FkaW5ncykKczQgPC0gZ2dwbG90KHM0X3Bsb3R0aW5nLCAKICAgICAgICAgICAgICAgYWVzKHggPSBNZWFuLCB5ID0gcmVvcmRlcih3b3JkaW5nLCBkZXNjKHM0X29yZGVyKSksIGNvbG91ciA9IHM0X2NvbG9yKSkgKwogIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2l6ZSA9IDQpICsKICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyLCB4bWF4ID0gVXBwZXIpLCBoZWlnaHQgPSAwLCBzaXplID0gMSkgKwogIGZhY2V0X3dyYXAofiBjb25kaXRpb24sIG5jb2wgPSAyMSwKICAgICAgICAgICAgIGxhYmVsbGVyID0gbGFiZWxsZXIoY29uZGl0aW9uID0gZmFjZXRMYWJzX3M0KSkgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJpdGFsaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9IHBhbGV0dGVfczQpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiXG5NZWFuIHJhdGluZyIsCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTMsIDMpLAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzZXEoLTMsIDMsIDEpLAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBzZXEoMCwgNiwgMSkpICsKICBzY2FsZV9jb2xvdXJfYnJld2VyKG5hbWUgPSAiRmFjdG9yOiIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gInF1YWwiLCBwYWxldHRlID0gNikKCnM0CmBgYAoK