Recording Keeping:
There are two master files that we are using for analyses. They are
essentially the same file, though one is in wide format and the other is
in long format.
The wide format dataset is called “Purrble_Master_Wide.” The long
dataset format dataset is called “Purrble_Long_Master.” The wide dataset
has all of the pre and posttest variables calculated, while the long
does not. Otherwise, they do not differ.
This dataset includes the N=153 participants who were included in the
randomized control trial examining Purrble with a population of
university students. All participants were members of the LGTBQ+
community.
These analyses were conducted on February 18-19 by Aubrey Rhodes. We
use the “final” datasets in which we removed participant C72, who had no
information on gender identity.
Descriptive Analyses
Sample Characteristics
These tables report the count of participants by condition, identity
group, and by condition x identity group.
Table 1: Number of Participants by Condition
| Purrble Treatment |
76 |
| Waitlist Control |
77 |
| Total |
153 |
Table 2: Number of Participants by Gender Identity
| Cisgender |
76 |
| Transgender |
77 |
| Total |
153 |
Table 3: Cross-tabulation of Condition by Gender
Identity
| Purrble Treatment |
39 |
37 |
| Waitlist Control |
37 |
40 |
Age: Descriptives and Check for Baseline differences
Summarizes age (Mean, SD, Min, Max) by condition and runs a t-test
comparing age by condition.
Table: Descriptive Statistics for Age by Condition (APA Format)
condition | Mean | SD | Min | Max |
|---|
Purrble Treatment | 20.44 | 2.29 | 16.00 | 25.00 |
Waitlist Control | 20.09 | 2.46 | 16.00 | 25.00 |
Dependent Variable | t | df | p | d | 95% CI |
|---|
age | 0.92 | 151.17 | .361 | 0.15 | [-0.17, 0.46] |
Race, Nationality, and Sexual Orientation
Sexual Orientation- Simplified
Table: Sexual Orientation (so_simplified) by Condition (Counts
and Percentages)
| asexual |
13 (17.1%) |
9 (11.7%) |
22 (14.4%) |
| bisexual |
28 (36.8%) |
25 (32.5%) |
53 (34.6%) |
| demisexual |
2 (2.6%) |
1 (1.3%) |
3 (2%) |
| gay/lesbian |
11 (14.5%) |
18 (23.4%) |
29 (19%) |
| heterosexual |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| pansexual |
8 (10.5%) |
9 (11.7%) |
17 (11.1%) |
| queer |
13 (17.1%) |
15 (19.5%) |
28 (18.3%) |
Sexual Orientation- Not simplified
Table: Sexual Orientation by Condition (Counts and
Percentages)
| aroace |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| aromatic & asexual (aroace) |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| asexual |
9 (11.8%) |
6 (7.8%) |
15 (9.8%) |
| asexual aromantic |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| asexual panromantic |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| asexual, bisexual |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| bi-demisexual |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| bi/pansexual |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| biromantic demisexual |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| biromantic, asexual spectrum. |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| bisexual |
26 (34.2%) |
25 (32.5%) |
51 (33.3%) |
| bisexuality |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| demisexual biromantic |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| gay |
1 (1.3%) |
1 (1.3%) |
2 (1.3%) |
| heterosexual |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| homosexual |
4 (5.3%) |
0 (0%) |
4 (2.6%) |
| homosexual, demiromantic, asexual |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| homosexual, demisexual |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| homosexual/gay |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| lesbian |
5 (6.6%) |
13 (16.9%) |
18 (11.8%) |
| lesbian demisexual |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| pan/demisexual/asexual |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| panromanric asexual |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| pansexual |
5 (6.6%) |
8 (10.4%) |
13 (8.5%) |
| pansexual/queer |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| queer |
13 (17.1%) |
15 (19.5%) |
28 (18.3%) |
| queer or bisexual |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| queer/ pansexual |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| queer/lesbian/gay |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
Nationality
Table: Nationality by Condition (Counts and
Percentages)
| bangladeshi |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| british |
36 (46.8%) |
34 (44.7%) |
70 (45.8%) |
| british-carribean |
1 (1.3%) |
1 (1.3%) |
2 (1.3%) |
| british-indian |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| british-japanese |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| british-pakistani |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| chinese |
5 (6.5%) |
1 (1.3%) |
6 (3.9%) |
| filipino |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| indian |
5 (6.5%) |
3 (3.9%) |
8 (5.2%) |
| indonesian |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| iranian |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| irish |
1 (1.3%) |
1 (1.3%) |
2 (1.3%) |
| irish-american |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| irish-carribean |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| malaysian chinese |
1 (1.3%) |
0 (0%) |
1 (0.7%) |
| mexican |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| nr |
20 (26%) |
29 (38.2%) |
49 (32%) |
| pakistani |
0 (0%) |
1 (1.3%) |
1 (0.7%) |
| polish |
2 (2.6%) |
2 (2.6%) |
4 (2.6%) |
Race
Table: Race Counts and Percentages by Condition
Race |
Purrble Treatment |
Waitlist Control |
Total |
| Race |
count_Purrble Treatment |
percentage_Purrble Treatment |
count_Waitlist Control |
percentage_Waitlist Control |
total_count |
total_percentage |
| Race_Arabic |
0 |
0.0 |
1 |
1.3 |
1 |
0.7 |
| Race_Asian |
10 |
13.2 |
17 |
22.1 |
27 |
17.6 |
| Race_Black |
1 |
1.3 |
3 |
3.9 |
4 |
2.6 |
| Race_Hispanic |
2 |
2.6 |
0 |
0.0 |
2 |
1.3 |
| Race_White |
60 |
78.9 |
55 |
71.4 |
115 |
75.2 |
| Race_unknown |
9 |
11.8 |
5 |
6.5 |
14 |
9.2 |
5 people in the Purrble Treatment condition reported multiple racial identities.
4 people in the Waitlist Control condition reported multiple racial identities.
Participation Over Time and Attrition
Count of Participation by Group Over Time
Participation in Each Week over Time Note: Week 0 was “intake.” Weeks
1-3 were considered “pre-test.” Purrble was given (or not) after week 3.
Weeks 11-13 are considered “Post-test”. For each week (0–13), we count
the number of unique participants overall, and then break down
participation by condition. These summaries help us understand
attendance trends during intake, pre-test, intervention, and post-test
phases.
Table 1: Count of Total Participation by Week
| Week |
n_participants |
| 0 |
151 |
| 1 |
147 |
| 2 |
148 |
| 3 |
149 |
| 4 |
142 |
| 5 |
139 |
| 6 |
138 |
| 7 |
140 |
| 8 |
142 |
| 9 |
128 |
| 10 |
130 |
| 11 |
128 |
| 12 |
117 |
| 13 |
130 |

Table: Count of Participation by Week and Condition
| Week |
Purrble Treatment |
Waitlist Control |
| 0 |
74 |
77 |
| 1 |
74 |
73 |
| 2 |
74 |
74 |
| 3 |
75 |
74 |
| 4 |
72 |
70 |
| 5 |
68 |
71 |
| 6 |
67 |
71 |
| 7 |
68 |
72 |
| 8 |
69 |
73 |
| 9 |
61 |
67 |
| 10 |
63 |
67 |
| 11 |
62 |
66 |
| 12 |
50 |
67 |
| 13 |
62 |
68 |

Number of Sessions Attended
Table 2: Overall Total Sessions Attended
| mean_sessions |
sd_sessions |
| 12.60784 |
2.155883 |
Table 3: Total Sessions Attended by Condition
| condition |
mean_sessions |
sd_sessions |
n |
| 0 |
12.85714 |
2.056532 |
77 |
| 1 |
12.35526 |
2.237284 |
76 |
Table 4: Total Sessions Attended by Gender Identity
| identity_group |
mean_sessions |
sd_sessions |
n |
| 0 |
12.53947 |
2.193571 |
76 |
| 1 |
12.67532 |
2.130243 |
77 |
Table 5: Total Sessions Attended by Condition and Gender Identity
| condition |
identity_group |
mean_sessions |
sd_sessions |
n |
| 0 |
0 |
13.13514 |
1.417395 |
37 |
| 0 |
1 |
12.60000 |
2.499231 |
40 |
| 1 |
0 |
11.97436 |
2.630661 |
39 |
| 1 |
1 |
12.75676 |
1.673410 |
37 |
Attrition Analysis
Attrition is defined here as not having attended any post-test
session (i.e., no attendance during Weeks 11–13). We create a binary
indicator for post-test completion (1 = attended at least one post-test
session, 0 = none) and calculate attrition rates overall, by condition
and by gender identity. We used a chi-square test to determine if
attrition differed by condition; it did not.
Attrition by Condition
Results for Manuscript:
The conditions did not significantly differ on any of the baseline
measures of outcomes or by age. Attrition rates were low across both
conditions, with 9.2% of participants in the Purrble condition and 6.5%
in the Waitlist Control condition not completing the study. Attrition
did not differ by condition, χ²(1) = 0.11, p = .75, or by gender
identity, χ²(1) < 0.01, p = 1.
Chi-square test for differences in attrition by condition:
Pearson's Chi-squared test with Yates' continuity correction
data: attrition_ct
X-squared = 0.10517, df = 1, p-value = 0.7457
Table 7: Attrition Rate by Condition (with Completed and Not Completed counts)
| condition |
n |
Completed |
Not_Completed |
attrition_rate |
attrition_percent |
| 0 |
77 |
72 |
5 |
0.0649351 |
6.5 |
| 1 |
76 |
69 |
7 |
0.0921053 |
9.2 |
Attrition by baseline Outcomes
Two-way ANOVA results for Pre_DERS8_Sum :
Two-way ANOVA for Pre_DERS8_Sum by Condition and Attrition Status
| term |
df |
sumsq |
meansq |
statistic |
p.value |
| condition |
1 |
7.983 |
7.983 |
0.356 |
0.552 |
| attrition_status |
1 |
30.432 |
30.432 |
1.356 |
0.246 |
| condition:attrition_status |
1 |
2.561 |
2.561 |
0.114 |
0.736 |
| Residuals |
148 |
3320.444 |
22.435 |
NA |
NA |
Two-way ANOVA results for Pre_GAD7_Sum :
Two-way ANOVA for Pre_GAD7_Sum by Condition and Attrition Status
| term |
df |
sumsq |
meansq |
statistic |
p.value |
| condition |
1 |
0.658 |
0.658 |
0.041 |
0.841 |
| attrition_status |
1 |
1.190 |
1.190 |
0.073 |
0.787 |
| condition:attrition_status |
1 |
0.001 |
0.001 |
0.000 |
0.994 |
| Residuals |
148 |
2401.630 |
16.227 |
NA |
NA |
Two-way ANOVA results for Pre_PHQ9_Sum :
Two-way ANOVA for Pre_PHQ9_Sum by Condition and Attrition Status
| term |
df |
sumsq |
meansq |
statistic |
p.value |
| condition |
1 |
18.249 |
18.249 |
0.859 |
0.356 |
| attrition_status |
1 |
2.796 |
2.796 |
0.132 |
0.717 |
| condition:attrition_status |
1 |
4.207 |
4.207 |
0.198 |
0.657 |
| Residuals |
148 |
3144.123 |
21.244 |
NA |
NA |
Two-way ANOVA results for Pre_SHS_Pathways :
Two-way ANOVA for Pre_SHS_Pathways by Condition and Attrition Status
| term |
df |
sumsq |
meansq |
statistic |
p.value |
| condition |
1 |
35.106 |
35.106 |
1.907 |
0.169 |
| attrition_status |
1 |
3.918 |
3.918 |
0.213 |
0.645 |
| condition:attrition_status |
1 |
25.587 |
25.587 |
1.390 |
0.240 |
| Residuals |
144 |
2651.435 |
18.413 |
NA |
NA |
Two-way ANOVA results for Pre_SHS_Agency :
Two-way ANOVA for Pre_SHS_Agency by Condition and Attrition Status
| term |
df |
sumsq |
meansq |
statistic |
p.value |
| condition |
1 |
34.935 |
34.935 |
1.450 |
0.231 |
| attrition_status |
1 |
8.541 |
8.541 |
0.354 |
0.553 |
| condition:attrition_status |
1 |
79.905 |
79.905 |
3.315 |
0.071 |
| Residuals |
144 |
3470.489 |
24.101 |
NA |
NA |
Two-way ANOVA results for Pre_SHS_TotalHope :
Two-way ANOVA for Pre_SHS_TotalHope by Condition and Attrition Status
| term |
df |
sumsq |
meansq |
statistic |
p.value |
| condition |
1 |
140.081 |
140.081 |
2.039 |
0.155 |
| attrition_status |
1 |
24.029 |
24.029 |
0.350 |
0.555 |
| condition:attrition_status |
1 |
195.924 |
195.924 |
2.852 |
0.093 |
| Residuals |
144 |
9893.938 |
68.708 |
NA |
NA |
Two-way ANOVA results for Pre_ucla_Sum :
Two-way ANOVA for Pre_ucla_Sum by Condition and Attrition Status
| term |
df |
sumsq |
meansq |
statistic |
p.value |
| condition |
1 |
3.945 |
3.945 |
1.556 |
0.214 |
| attrition_status |
1 |
1.318 |
1.318 |
0.520 |
0.472 |
| condition:attrition_status |
1 |
13.182 |
13.182 |
5.199 |
0.024 |
| Residuals |
143 |
362.575 |
2.535 |
NA |
NA |
Two-way ANOVA results for Pre_pmerq_Focus_Avg :
Two-way ANOVA for Pre_pmerq_Focus_Avg by Condition and Attrition Status
| term |
df |
sumsq |
meansq |
statistic |
p.value |
| condition |
1 |
1.392 |
1.392 |
1.243 |
0.267 |
| attrition_status |
1 |
2.233 |
2.233 |
1.995 |
0.160 |
| condition:attrition_status |
1 |
1.281 |
1.281 |
1.144 |
0.287 |
| Residuals |
144 |
161.212 |
1.120 |
NA |
NA |
Two-way ANOVA results for Pre_pmerq_Distract_Avg :
Two-way ANOVA for Pre_pmerq_Distract_Avg by Condition and Attrition Status
| term |
df |
sumsq |
meansq |
statistic |
p.value |
| condition |
1 |
1.554 |
1.554 |
1.247 |
0.266 |
| attrition_status |
1 |
4.213 |
4.213 |
3.380 |
0.068 |
| condition:attrition_status |
1 |
0.038 |
0.038 |
0.031 |
0.861 |
| Residuals |
144 |
179.482 |
1.246 |
NA |
NA |
Two-way ANOVA results for Pre_pmerq_AD_Avg :
Two-way ANOVA for Pre_pmerq_AD_Avg by Condition and Attrition Status
| term |
df |
sumsq |
meansq |
statistic |
p.value |
| condition |
1 |
1.472 |
1.472 |
1.762 |
0.186 |
| attrition_status |
1 |
3.145 |
3.145 |
3.766 |
0.054 |
| condition:attrition_status |
1 |
0.440 |
0.440 |
0.527 |
0.469 |
| Residuals |
144 |
120.256 |
0.835 |
NA |
NA |
NA
Attrition by baseline Outcomes follow-up/exploraiton
Descriptive Statistics for Pre_ucla_Sum by Condition and Attrition Status |
|---|
condition | attrition_status | N | Mean | SD |
|---|
0 | Attriter | 5 | 8.25 | 0.96 |
0 | Completer | 72 | 7.19 | 1.35 |
1 | Attriter | 7 | 5.67 | 1.51 |
1 | Completer | 69 | 7.03 | 1.83 |
Note. Means and standard deviations for Pre_ucla_Sum across four groups defined by condition (Purrble, Waitlist Control) and attrition status (Completer, Attriter). |
Simple Effects Analysis: Pre_ucla_Sum by Attrition Status within the Purrble Condition
Dependent Variable | t | df | p | d | 95% CI |
|---|
Pre_ucla_Sum | -2.09 | 6.38 | .079 | -0.75 | [-1.60, 0.09] |
Simple Effects Analysis: Pre_ucla_Sum by Attrition Status within the Waitlist Control Condition
Dependent Variable | t | df | p | d | 95% CI |
|---|
Pre_ucla_Sum | 2.10 | 3.73 | .109 | 0.79 | [-0.23, 1.81] |
Attrition by Gender Identity
Chi-square test for differences in attrition by gender identity:
Pearson's Chi-squared test with Yates' continuity correction
data: attrition_ct
X-squared = 1.4323e-30, df = 1, p-value = 1
Table 8: Attrition Rate by Gender Identity (with Completed and Not Completed counts)
| identity_group |
n |
Completed |
Not_Completed |
attrition_rate |
attrition_percent |
| 0 |
76 |
70 |
6 |
0.0789474 |
7.9 |
| 1 |
77 |
71 |
6 |
0.0779221 |
7.8 |
Main Effects Analyses
Dependent Variable | Predictor | df | b | t | p | sr2 | 95% CI |
|---|
Post_DERS8_Sum | condition_num | 135 | -3.04 | -3.20 | .002** | .04 | [0.00, 0.09] |
Pre_DERS8_Sum | 135 | 0.92 | 9.21 | < .001*** | .35 | [0.23, 0.48] |
identity_group_num | 135 | 1.69 | 1.72 | .088 | .01 | [0.00, 0.04] |
age | 135 | 0.13 | 0.60 | .549 | .00 | [0.00, 0.01] |
Post_pmerq_Focus_Avg | condition_num | 121 | 0.31 | 1.96 | .052 | .02 | [0.00, 0.05] |
Pre_pmerq_Focus_Avg | 121 | 0.73 | 9.40 | < .001*** | .39 | [0.26, 0.52] |
identity_group_num | 121 | -0.27 | -1.61 | .110 | .01 | [0.00, 0.04] |
age | 121 | 0.02 | 0.45 | .654 | .00 | [0.00, 0.01] |
Post_pmerq_Distract_Avg | condition_num | 121 | 0.25 | 1.49 | .138 | .01 | [0.00, 0.05] |
Pre_pmerq_Distract_Avg | 121 | 0.48 | 6.48 | < .001*** | .25 | [0.12, 0.38] |
identity_group_num | 121 | 0.20 | 1.19 | .238 | .01 | [0.00, 0.04] |
age | 121 | 0.02 | 0.64 | .526 | .00 | [0.00, 0.02] |
Post_pmerq_AD_Avg | condition_num | 121 | 0.30 | 2.28 | .024* | .02 | [0.00, 0.06] |
Pre_pmerq_AD_Avg | 121 | 0.70 | 9.54 | < .001*** | .42 | [0.29, 0.55] |
identity_group_num | 121 | -0.04 | -0.32 | .747 | .00 | [0.00, 0.01] |
age | 121 | 0.03 | 1.06 | .290 | .01 | [0.00, 0.02] |
Post_GAD7_Sum | condition_num | 135 | -1.35 | -2.04 | .044* | .02 | [0.00, 0.05] |
Pre_GAD7_Sum | 135 | 0.74 | 8.98 | < .001*** | .35 | [0.23, 0.48] |
identity_group_num | 135 | 0.75 | 1.08 | .281 | .01 | [0.00, 0.02] |
age | 135 | 0.27 | 1.84 | .068 | .01 | [0.00, 0.05] |
Post_PHQ9_Sum | condition_num | 135 | -2.60 | -3.64 | < .001*** | .04 | [0.00, 0.09] |
Pre_PHQ9_Sum | 135 | 1.00 | 12.96 | < .001*** | .53 | [0.42, 0.65] |
identity_group_num | 135 | 0.25 | 0.34 | .734 | .00 | [0.00, 0.00] |
age | 135 | 0.29 | 1.86 | .064 | .01 | [0.00, 0.03] |
Post_SHS_Pathways | condition_num | 122 | 0.09 | 0.14 | .889 | .00 | [0.00, 0.00] |
Pre_SHS_Pathways | 122 | 0.46 | 6.04 | < .001*** | .21 | [0.09, 0.34] |
identity_group_num | 122 | -0.84 | -1.19 | .237 | .01 | [0.00, 0.04] |
age | 122 | -0.28 | -1.86 | .065 | .02 | [0.00, 0.06] |
Post_SHS_Agency | condition_num | 122 | 0.44 | 0.53 | .595 | .00 | [0.00, 0.01] |
Pre_SHS_Agency | 122 | 0.53 | 6.57 | < .001*** | .26 | [0.13, 0.39] |
identity_group_num | 122 | -0.47 | -0.55 | .582 | .00 | [0.00, 0.01] |
age | 122 | -0.17 | -0.96 | .337 | .01 | [0.00, 0.03] |
Post_SHS_TotalHope | condition_num | 122 | 0.62 | 0.46 | .648 | .00 | [0.00, 0.01] |
Pre_SHS_TotalHope | 122 | 0.53 | 6.71 | < .001*** | .26 | [0.13, 0.39] |
identity_group_num | 122 | -1.16 | -0.82 | .414 | .00 | [0.00, 0.02] |
age | 122 | -0.43 | -1.45 | .151 | .01 | [0.00, 0.04] |
Post_ucla_Sum | condition_num | 121 | -0.09 | -0.40 | .688 | .00 | [0.00, 0.01] |
Pre_ucla_Sum | 121 | 0.70 | 10.02 | < .001*** | .43 | [0.30, 0.56] |
identity_group_num | 121 | 0.52 | 2.20 | .030* | .02 | [0.00, 0.06] |
age | 121 | 0.11 | 2.12 | .036* | .02 | [0.00, 0.05] |
Emotion Regulation Outcomes: Moderation Models
Dependent Variable | Predictor | df | b* | t | p | sr2 | 95% CI |
|---|
Post_DERS8_Sum | condition_num | 134 | -0.21 | -3.17 | .002** | .04 | [0.00, 0.09] |
Pre_DERS8_Sum | 134 | 0.60 | 9.18 | < .001*** | .35 | [0.23, 0.48] |
identity_group_num | 134 | 0.12 | 1.71 | .089 | .01 | [0.00, 0.04] |
age | 134 | 0.04 | 0.53 | .595 | .00 | [0.00, 0.01] |
condition_num × Pre_DERS8_Sum | 134 | -0.04 | -0.65 | .517 | .00 | [0.00, 0.01] |
Dependent Variable | Predictor | df | b* | t | p | sr2 | 95% CI |
|---|
Post_pmerq_Focus_Avg | condition_num | 120 | 0.13 | 1.93 | .056 | .02 | [0.00, 0.05] |
Pre_pmerq_Focus_Avg | 120 | 0.65 | 9.35 | < .001*** | .39 | [0.26, 0.52] |
identity_group_num | 120 | -0.13 | -1.74 | .085 | .01 | [0.00, 0.04] |
age | 120 | 0.03 | 0.49 | .625 | .00 | [0.00, 0.01] |
condition_num × Pre_pmerq_Focus_Avg | 120 | -0.07 | -1.02 | .309 | .00 | [0.00, 0.02] |
Dependent Variable | Predictor | df | b* | t | p | sr2 | 95% CI |
|---|
Post_pmerq_Distract_Avg | condition_num | 120 | 0.11 | 1.45 | .150 | .01 | [0.00, 0.05] |
Pre_pmerq_Distract_Avg | 120 | 0.52 | 6.50 | < .001*** | .25 | [0.12, 0.38] |
identity_group_num | 120 | 0.10 | 1.18 | .241 | .01 | [0.00, 0.04] |
age | 120 | 0.06 | 0.66 | .510 | .00 | [0.00, 0.02] |
condition_num × Pre_pmerq_Distract_Avg | 120 | -0.05 | -0.67 | .505 | .00 | [0.00, 0.02] |
Dependent Variable | Predictor | df | b* | t | p | sr2 | 95% CI |
|---|
Post_pmerq_AD_Avg | condition_num | 120 | 0.15 | 2.24 | .027* | .02 | [0.00, 0.06] |
Pre_pmerq_AD_Avg | 120 | 0.67 | 9.45 | < .001*** | .42 | [0.29, 0.55] |
identity_group_num | 120 | -0.03 | -0.36 | .722 | .00 | [0.00, 0.01] |
age | 120 | 0.08 | 1.07 | .288 | .01 | [0.00, 0.02] |
condition_num × Pre_pmerq_AD_Avg | 120 | -0.03 | -0.38 | .704 | .00 | [0.00, 0.01] |
Dependent Variable | Predictor | df | b* | t | p | sr2 | 95% CI |
|---|
Post_DERS8_Sum | condition_num | 134 | -0.21 | -3.23 | .002** | .04 | [0.00, 0.09] |
identity_group_num | 134 | 0.12 | 1.75 | .082 | .01 | [0.00, 0.04] |
Pre_DERS8_Sum | 134 | 0.59 | 9.24 | < .001*** | .35 | [0.23, 0.47] |
age | 134 | 0.04 | 0.59 | .558 | .00 | [0.00, 0.01] |
condition_num × identity_group_num | 134 | 0.13 | 2.10 | .038* | .02 | [0.00, 0.05] |
Dependent Variable | Predictor | df | b* | t | p | sr2 | 95% CI |
|---|
Post_pmerq_Focus_Avg | condition_num | 120 | 0.13 | 2.01 | .046* | .02 | [0.00, 0.05] |
identity_group_num | 120 | -0.11 | -1.55 | .124 | .01 | [0.00, 0.04] |
Pre_pmerq_Focus_Avg | 120 | 0.68 | 9.65 | < .001*** | .41 | [0.28, 0.54] |
age | 120 | 0.03 | 0.48 | .630 | .00 | [0.00, 0.01] |
condition_num × identity_group_num | 120 | 0.12 | 1.79 | .076 | .01 | [0.00, 0.04] |
Dependent Variable | Predictor | df | b* | t | p | sr2 | 95% CI |
|---|
Post_pmerq_Distract_Avg | condition_num | 120 | 0.12 | 1.49 | .139 | .01 | [0.00, 0.05] |
identity_group_num | 120 | 0.10 | 1.19 | .238 | .01 | [0.00, 0.04] |
Pre_pmerq_Distract_Avg | 120 | 0.51 | 6.46 | < .001*** | .25 | [0.12, 0.38] |
age | 120 | 0.05 | 0.63 | .528 | .00 | [0.00, 0.02] |
condition_num × identity_group_num | 120 | 0.03 | 0.37 | .708 | .00 | [0.00, 0.01] |
Dependent Variable | Predictor | df | b* | t | p | sr2 | 95% CI |
|---|
Post_pmerq_AD_Avg | condition_num | 120 | 0.16 | 2.31 | .023* | .02 | [0.00, 0.06] |
identity_group_num | 120 | -0.02 | -0.30 | .766 | .00 | [0.00, 0.01] |
Pre_pmerq_AD_Avg | 120 | 0.68 | 9.65 | < .001*** | .43 | [0.30, 0.56] |
age | 120 | 0.08 | 1.09 | .279 | .01 | [0.00, 0.02] |
condition_num × identity_group_num | 120 | 0.09 | 1.30 | .197 | .01 | [0.00, 0.03] |
Follow up: DERS 8
Since the interaction of condition by identity group was signifiacnt,
I have to probe it using simple slopes.
Result:
For cisgender participants, controlling for pre‑test emotion
regulation, condition significantly predicted post‑test scores, with the
intervention yielding lower (i.e., better) scores (b = –4.90, SE = 1.41,
t(67) = –3.47, p = .001, adjusted R² = .47). In contrast, for
transgender/gender diverse participants, condition was not a significant
predictor of post‑test emotion regulation (b = –1.07, SE = 1.23, t(67) =
–0.87, p = .39, adjusted R² = .37). sad.
Call:
lm(formula = Post_DERS8_Sum ~ condition_num + Pre_DERS8_Sum,
data = filter(Purrble_Master_Wide, identity_group == "0"))
Residuals:
Min 1Q Median 3Q Max
-15.085 -3.353 1.433 3.929 14.517
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.8137 4.9268 0.977 0.33206
condition_num -4.9030 1.4137 -3.468 0.00092 ***
Pre_DERS8_Sum 1.0170 0.1502 6.771 3.89e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.885 on 67 degrees of freedom
(6 observations deleted due to missingness)
Multiple R-squared: 0.484, Adjusted R-squared: 0.4686
F-statistic: 31.43 on 2 and 67 DF, p-value: 2.361e-10
Call:
lm(formula = Post_DERS8_Sum ~ condition_num + Pre_DERS8_Sum,
data = filter(Purrble_Master_Wide, identity_group == "1"))
Residuals:
Min 1Q Median 3Q Max
-12.1803 -2.3719 0.0348 3.7168 10.4756
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.1183 4.1405 1.478 0.144
condition_num -1.0671 1.2265 -0.870 0.387
Pre_DERS8_Sum 0.8226 0.1274 6.456 1.41e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.13 on 67 degrees of freedom
(7 observations deleted due to missingness)
Multiple R-squared: 0.3885, Adjusted R-squared: 0.3703
F-statistic: 21.29 on 2 and 67 DF, p-value: 6.971e-08

Dependent Variable | Predictor | df | b | t | p | sr2 | 95% CI |
|---|
Post_DERS8_Sum | condition_num | 135 | -3.04 | -3.20 | .002** | .04 | [0.00, 0.09] |
Pre_DERS8_Sum | 135 | 0.92 | 9.21 | < .001*** | .35 | [0.23, 0.48] |
identity_group_num | 135 | 1.69 | 1.72 | .088 | .01 | [0.00, 0.04] |
age | 135 | 0.13 | 0.60 | .549 | .00 | [0.00, 0.01] |
Post_pmerq_Focus_Avg | condition_num | 121 | 0.31 | 1.96 | .052 | .02 | [0.00, 0.05] |
Pre_pmerq_Focus_Avg | 121 | 0.73 | 9.40 | < .001*** | .39 | [0.26, 0.52] |
identity_group_num | 121 | -0.27 | -1.61 | .110 | .01 | [0.00, 0.04] |
age | 121 | 0.02 | 0.45 | .654 | .00 | [0.00, 0.01] |
Post_pmerq_Distract_Avg | condition_num | 121 | 0.25 | 1.49 | .138 | .01 | [0.00, 0.05] |
Pre_pmerq_Distract_Avg | 121 | 0.48 | 6.48 | < .001*** | .25 | [0.12, 0.38] |
identity_group_num | 121 | 0.20 | 1.19 | .238 | .01 | [0.00, 0.04] |
age | 121 | 0.02 | 0.64 | .526 | .00 | [0.00, 0.02] |
Post_pmerq_AD_Avg | condition_num | 121 | 0.30 | 2.28 | .024* | .02 | [0.00, 0.06] |
Pre_pmerq_AD_Avg | 121 | 0.70 | 9.54 | < .001*** | .42 | [0.29, 0.55] |
identity_group_num | 121 | -0.04 | -0.32 | .747 | .00 | [0.00, 0.01] |
age | 121 | 0.03 | 1.06 | .290 | .01 | [0.00, 0.02] |
Post_GAD7_Sum | condition_num | 135 | -1.35 | -2.04 | .044* | .02 | [0.00, 0.05] |
Pre_GAD7_Sum | 135 | 0.74 | 8.98 | < .001*** | .35 | [0.23, 0.48] |
identity_group_num | 135 | 0.75 | 1.08 | .281 | .01 | [0.00, 0.02] |
age | 135 | 0.27 | 1.84 | .068 | .01 | [0.00, 0.05] |
Post_PHQ9_Sum | condition_num | 135 | -2.60 | -3.64 | < .001*** | .04 | [0.00, 0.09] |
Pre_PHQ9_Sum | 135 | 1.00 | 12.96 | < .001*** | .53 | [0.42, 0.65] |
identity_group_num | 135 | 0.25 | 0.34 | .734 | .00 | [0.00, 0.00] |
age | 135 | 0.29 | 1.86 | .064 | .01 | [0.00, 0.03] |
Post_SHS_Pathways | condition_num | 122 | 0.09 | 0.14 | .889 | .00 | [0.00, 0.00] |
Pre_SHS_Pathways | 122 | 0.46 | 6.04 | < .001*** | .21 | [0.09, 0.34] |
identity_group_num | 122 | -0.84 | -1.19 | .237 | .01 | [0.00, 0.04] |
age | 122 | -0.28 | -1.86 | .065 | .02 | [0.00, 0.06] |
Post_SHS_Agency | condition_num | 122 | 0.44 | 0.53 | .595 | .00 | [0.00, 0.01] |
Pre_SHS_Agency | 122 | 0.53 | 6.57 | < .001*** | .26 | [0.13, 0.39] |
identity_group_num | 122 | -0.47 | -0.55 | .582 | .00 | [0.00, 0.01] |
age | 122 | -0.17 | -0.96 | .337 | .01 | [0.00, 0.03] |
Post_SHS_TotalHope | condition_num | 122 | 0.62 | 0.46 | .648 | .00 | [0.00, 0.01] |
Pre_SHS_TotalHope | 122 | 0.53 | 6.71 | < .001*** | .26 | [0.13, 0.39] |
identity_group_num | 122 | -1.16 | -0.82 | .414 | .00 | [0.00, 0.02] |
age | 122 | -0.43 | -1.45 | .151 | .01 | [0.00, 0.04] |
Post_ucla_Sum | condition_num | 121 | -0.09 | -0.40 | .688 | .00 | [0.00, 0.01] |
Pre_ucla_Sum | 121 | 0.70 | 10.02 | < .001*** | .43 | [0.30, 0.56] |
identity_group_num | 121 | 0.52 | 2.20 | .030* | .02 | [0.00, 0.06] |
age | 121 | 0.11 | 2.12 | .036* | .02 | [0.00, 0.05] |
Linear Mixed Effects Models
### Outcome: DERS8_Sum
Mixed-Effects Model for DERS8_Sum controlling for identity_group and age
| effect |
group |
term |
estimate |
std.error |
statistic |
| fixed |
NA |
(Intercept) |
22.165 |
3.733 |
5.937 |
| fixed |
NA |
Week |
-0.265 |
0.064 |
-4.120 |
| fixed |
NA |
conditionWaitlist Control |
-0.105 |
0.828 |
-0.127 |
| fixed |
NA |
identity_groupTGD |
0.930 |
0.824 |
1.129 |
| fixed |
NA |
age |
0.277 |
0.174 |
1.588 |
| fixed |
NA |
Week:conditionWaitlist Control |
0.284 |
0.090 |
3.152 |
| ran_pars |
psid |
sd__(Intercept) |
4.594 |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.103 |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.468 |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
3.608 |
NA |
NA |
### Outcome: pmerq_Focus_Avg
Mixed-Effects Model for pmerq_Focus_Avg controlling for identity_group and age
| effect |
group |
term |
estimate |
std.error |
statistic |
| fixed |
NA |
(Intercept) |
3.943 |
0.738 |
5.345 |
| fixed |
NA |
Week |
0.048 |
0.012 |
4.139 |
| fixed |
NA |
conditionWaitlist Control |
0.258 |
0.188 |
1.372 |
| fixed |
NA |
identity_groupTGD |
-0.476 |
0.163 |
-2.927 |
| fixed |
NA |
age |
-0.059 |
0.034 |
-1.705 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.035 |
0.016 |
-2.192 |
| ran_pars |
psid |
sd__(Intercept) |
0.799 |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
0.454 |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.021 |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
0.640 |
NA |
NA |
### Outcome: pmerq_Distract_Avg
Mixed-Effects Model for pmerq_Distract_Avg controlling for identity_group and age
| effect |
group |
term |
estimate |
std.error |
statistic |
| fixed |
NA |
(Intercept) |
5.349 |
0.709 |
7.543 |
| fixed |
NA |
Week |
0.031 |
0.013 |
2.307 |
| fixed |
NA |
conditionWaitlist Control |
0.265 |
0.202 |
1.310 |
| fixed |
NA |
identity_groupTGD |
0.086 |
0.156 |
0.552 |
| fixed |
NA |
age |
-0.066 |
0.033 |
-2.006 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.035 |
0.019 |
-1.849 |
| ran_pars |
psid |
sd__(Intercept) |
0.906 |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.412 |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.057 |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
0.648 |
NA |
NA |
### Outcome: pmerq_AD_Avg
Mixed-Effects Model for pmerq_AD_Avg controlling for identity_group and age
| effect |
group |
term |
estimate |
std.error |
statistic |
| fixed |
NA |
(Intercept) |
4.685 |
0.625 |
7.501 |
| fixed |
NA |
Week |
0.040 |
0.010 |
4.079 |
| fixed |
NA |
conditionWaitlist Control |
0.261 |
0.161 |
1.622 |
| fixed |
NA |
identity_groupTGD |
-0.202 |
0.138 |
-1.465 |
| fixed |
NA |
age |
-0.064 |
0.029 |
-2.205 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.035 |
0.014 |
-2.568 |
| ran_pars |
psid |
sd__(Intercept) |
0.674 |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
0.999 |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.009 |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
0.552 |
NA |
NA |
### Outcome: GAD7_Sum
Mixed-Effects Model for GAD7_Sum controlling for identity_group and age
| effect |
group |
term |
estimate |
std.error |
statistic |
| fixed |
NA |
(Intercept) |
10.890 |
2.892 |
3.766 |
| fixed |
NA |
Week |
-0.156 |
0.046 |
-3.411 |
| fixed |
NA |
conditionWaitlist Control |
-0.065 |
0.681 |
-0.095 |
| fixed |
NA |
identity_groupTGD |
1.253 |
0.637 |
1.967 |
| fixed |
NA |
age |
0.110 |
0.135 |
0.815 |
| fixed |
NA |
Week:conditionWaitlist Control |
0.103 |
0.064 |
1.608 |
| ran_pars |
psid |
sd__(Intercept) |
3.702 |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.240 |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.293 |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
3.220 |
NA |
NA |
### Outcome: PHQ9_Sum
Mixed-Effects Model for PHQ9_Sum controlling for identity_group and age
| effect |
group |
term |
estimate |
std.error |
statistic |
| fixed |
NA |
(Intercept) |
14.141 |
3.462 |
4.085 |
| fixed |
NA |
Week |
-0.177 |
0.048 |
-3.705 |
| fixed |
NA |
conditionWaitlist Control |
-1.216 |
0.753 |
-1.614 |
| fixed |
NA |
identity_groupTGD |
1.630 |
0.764 |
2.133 |
| fixed |
NA |
age |
0.038 |
0.162 |
0.234 |
| fixed |
NA |
Week:conditionWaitlist Control |
0.222 |
0.067 |
3.320 |
| ran_pars |
psid |
sd__(Intercept) |
4.187 |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
0.056 |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.313 |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
3.262 |
NA |
NA |
### Outcome: SHS_Pathways
Mixed-Effects Model for SHS_Pathways controlling for identity_group and age
| effect |
group |
term |
estimate |
std.error |
statistic |
| fixed |
NA |
(Intercept) |
18.228 |
2.760 |
6.604 |
| fixed |
NA |
Week |
0.180 |
0.053 |
3.423 |
| fixed |
NA |
conditionWaitlist Control |
0.879 |
0.807 |
1.088 |
| fixed |
NA |
identity_groupTGD |
-1.888 |
0.605 |
-3.122 |
| fixed |
NA |
age |
-0.246 |
0.128 |
-1.924 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.058 |
0.074 |
-0.783 |
| ran_pars |
psid |
sd__(Intercept) |
3.517 |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.431 |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.201 |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
2.669 |
NA |
NA |
### Outcome: SHS_Agency
Mixed-Effects Model for SHS_Agency controlling for identity_group and age
| effect |
group |
term |
estimate |
std.error |
statistic |
| fixed |
NA |
(Intercept) |
11.036 |
3.221 |
3.426 |
| fixed |
NA |
Week |
0.239 |
0.063 |
3.810 |
| fixed |
NA |
conditionWaitlist Control |
0.986 |
0.897 |
1.099 |
| fixed |
NA |
identity_groupTGD |
-1.511 |
0.707 |
-2.136 |
| fixed |
NA |
age |
-0.045 |
0.150 |
-0.300 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.069 |
0.088 |
-0.782 |
| ran_pars |
psid |
sd__(Intercept) |
3.946 |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.349 |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.294 |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
2.928 |
NA |
NA |
### Outcome: SHS_TotalHope
Mixed-Effects Model for SHS_TotalHope controlling for identity_group and age
| effect |
group |
term |
estimate |
std.error |
statistic |
| fixed |
NA |
(Intercept) |
29.159 |
5.488 |
5.313 |
| fixed |
NA |
Week |
0.419 |
0.103 |
4.076 |
| fixed |
NA |
conditionWaitlist Control |
1.843 |
1.525 |
1.209 |
| fixed |
NA |
identity_groupTGD |
-3.422 |
1.205 |
-2.840 |
| fixed |
NA |
age |
-0.285 |
0.255 |
-1.118 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.125 |
0.144 |
-0.869 |
| ran_pars |
psid |
sd__(Intercept) |
7.134 |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.419 |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.522 |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
4.604 |
NA |
NA |
### Outcome: ucla_Sum
Mixed-Effects Model for ucla_Sum controlling for identity_group and age
| effect |
group |
term |
estimate |
std.error |
statistic |
| fixed |
NA |
(Intercept) |
6.511 |
1.162 |
5.602 |
| fixed |
NA |
Week |
-0.028 |
0.017 |
-1.668 |
| fixed |
NA |
conditionWaitlist Control |
0.301 |
0.295 |
1.019 |
| fixed |
NA |
identity_groupTGD |
0.498 |
0.256 |
1.948 |
| fixed |
NA |
age |
0.013 |
0.054 |
0.240 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.008 |
0.023 |
-0.366 |
| ran_pars |
psid |
sd__(Intercept) |
1.389 |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.052 |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.045 |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
0.888 |
NA |
NA |
NA
Mixed-Effects Model for DERS8_Sum with 95% CI
| effect |
group |
term |
estimate |
std.error |
statistic |
2.5 % |
97.5 % |
| fixed |
NA |
(Intercept) |
22.165 |
3.733 |
5.937 |
14.848 |
29.481 |
| fixed |
NA |
Week |
-0.265 |
0.064 |
-4.120 |
-0.391 |
-0.139 |
| fixed |
NA |
conditionWaitlist Control |
-0.105 |
0.828 |
-0.127 |
-1.729 |
1.518 |
| fixed |
NA |
identity_groupTGD |
0.930 |
0.824 |
1.129 |
-0.685 |
2.545 |
| fixed |
NA |
age |
0.277 |
0.174 |
1.588 |
-0.065 |
0.619 |
| fixed |
NA |
Week:conditionWaitlist Control |
0.284 |
0.090 |
3.152 |
0.108 |
0.461 |
| ran_pars |
psid |
sd__(Intercept) |
4.594 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.103 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.468 |
NA |
NA |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
3.608 |
NA |
NA |
NA |
NA |
NULL
# R2 for Mixed Models
Conditional R2: 0.717
Marginal R2: 0.037
Mixed-Effects Model for DERS8_Sum with 95% CI
| effect |
group |
term |
estimate |
std.error |
statistic |
2.5 % |
97.5 % |
| fixed |
NA |
(Intercept) |
22.165 |
3.733 |
5.937 |
14.848 |
29.481 |
| fixed |
NA |
Week |
-0.265 |
0.064 |
-4.120 |
-0.391 |
-0.139 |
| fixed |
NA |
conditionWaitlist Control |
-0.105 |
0.828 |
-0.127 |
-1.729 |
1.518 |
| fixed |
NA |
identity_groupTGD |
0.930 |
0.824 |
1.129 |
-0.685 |
2.545 |
| fixed |
NA |
age |
0.277 |
0.174 |
1.588 |
-0.065 |
0.619 |
| fixed |
NA |
Week:conditionWaitlist Control |
0.284 |
0.090 |
3.152 |
0.108 |
0.461 |
| ran_pars |
psid |
sd__(Intercept) |
4.594 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.103 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.468 |
NA |
NA |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
3.608 |
NA |
NA |
NA |
NA |
# R2 for Mixed Models
Conditional R2: 0.717
Marginal R2: 0.037
Mixed-Effects Model for pmerq_Focus_Avg with 95% CI
| effect |
group |
term |
estimate |
std.error |
statistic |
2.5 % |
97.5 % |
| fixed |
NA |
(Intercept) |
3.943 |
0.738 |
5.345 |
2.497 |
5.389 |
| fixed |
NA |
Week |
0.048 |
0.012 |
4.139 |
0.025 |
0.070 |
| fixed |
NA |
conditionWaitlist Control |
0.258 |
0.188 |
1.372 |
-0.111 |
0.628 |
| fixed |
NA |
identity_groupTGD |
-0.476 |
0.163 |
-2.927 |
-0.794 |
-0.157 |
| fixed |
NA |
age |
-0.059 |
0.034 |
-1.705 |
-0.126 |
0.009 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.035 |
0.016 |
-2.192 |
-0.067 |
-0.004 |
| ran_pars |
psid |
sd__(Intercept) |
0.799 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
0.454 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.021 |
NA |
NA |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
0.640 |
NA |
NA |
NA |
NA |
# R2 for Mixed Models
Conditional R2: 0.680
Marginal R2: 0.060
Mixed-Effects Model for pmerq_Distract_Avg with 95% CI
| effect |
group |
term |
estimate |
std.error |
statistic |
2.5 % |
97.5 % |
| fixed |
NA |
(Intercept) |
5.349 |
0.709 |
7.543 |
3.959 |
6.739 |
| fixed |
NA |
Week |
0.031 |
0.013 |
2.307 |
0.005 |
0.057 |
| fixed |
NA |
conditionWaitlist Control |
0.265 |
0.202 |
1.310 |
-0.132 |
0.662 |
| fixed |
NA |
identity_groupTGD |
0.086 |
0.156 |
0.552 |
-0.219 |
0.391 |
| fixed |
NA |
age |
-0.066 |
0.033 |
-2.006 |
-0.131 |
-0.002 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.035 |
0.019 |
-1.849 |
-0.071 |
0.002 |
| ran_pars |
psid |
sd__(Intercept) |
0.906 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.412 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.057 |
NA |
NA |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
0.648 |
NA |
NA |
NA |
NA |
# R2 for Mixed Models
Conditional R2: 0.650
Marginal R2: 0.031
Mixed-Effects Model for pmerq_AD_Avg with 95% CI
| effect |
group |
term |
estimate |
std.error |
statistic |
2.5 % |
97.5 % |
| fixed |
NA |
(Intercept) |
4.685 |
0.625 |
7.501 |
3.461 |
5.909 |
| fixed |
NA |
Week |
0.040 |
0.010 |
4.079 |
0.021 |
0.059 |
| fixed |
NA |
conditionWaitlist Control |
0.261 |
0.161 |
1.622 |
-0.054 |
0.576 |
| fixed |
NA |
identity_groupTGD |
-0.202 |
0.138 |
-1.465 |
-0.471 |
0.068 |
| fixed |
NA |
age |
-0.064 |
0.029 |
-2.205 |
-0.121 |
-0.007 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.035 |
0.014 |
-2.568 |
-0.062 |
-0.008 |
| ran_pars |
psid |
sd__(Intercept) |
0.674 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
0.999 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.009 |
NA |
NA |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
0.552 |
NA |
NA |
NA |
NA |
# R2 for Mixed Models
Conditional R2: 0.661
Marginal R2: 0.042
Mixed-Effects Model for GAD7_Sum with 95% CI
| effect |
group |
term |
estimate |
std.error |
statistic |
2.5 % |
97.5 % |
| fixed |
NA |
(Intercept) |
10.890 |
2.892 |
3.766 |
5.222 |
16.558 |
| fixed |
NA |
Week |
-0.156 |
0.046 |
-3.411 |
-0.246 |
-0.066 |
| fixed |
NA |
conditionWaitlist Control |
-0.065 |
0.681 |
-0.095 |
-1.400 |
1.270 |
| fixed |
NA |
identity_groupTGD |
1.253 |
0.637 |
1.967 |
0.004 |
2.502 |
| fixed |
NA |
age |
0.110 |
0.135 |
0.815 |
-0.154 |
0.374 |
| fixed |
NA |
Week:conditionWaitlist Control |
0.103 |
0.064 |
1.608 |
-0.023 |
0.228 |
| ran_pars |
psid |
sd__(Intercept) |
3.702 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.240 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.293 |
NA |
NA |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
3.220 |
NA |
NA |
NA |
NA |
# R2 for Mixed Models
Conditional R2: 0.606
Marginal R2: 0.024
Mixed-Effects Model for PHQ9_Sum with 95% CI
| effect |
group |
term |
estimate |
std.error |
statistic |
2.5 % |
97.5 % |
| fixed |
NA |
(Intercept) |
14.141 |
3.462 |
4.085 |
7.356 |
20.926 |
| fixed |
NA |
Week |
-0.177 |
0.048 |
-3.705 |
-0.271 |
-0.083 |
| fixed |
NA |
conditionWaitlist Control |
-1.216 |
0.753 |
-1.614 |
-2.692 |
0.261 |
| fixed |
NA |
identity_groupTGD |
1.630 |
0.764 |
2.133 |
0.132 |
3.127 |
| fixed |
NA |
age |
0.038 |
0.162 |
0.234 |
-0.279 |
0.355 |
| fixed |
NA |
Week:conditionWaitlist Control |
0.222 |
0.067 |
3.320 |
0.091 |
0.353 |
| ran_pars |
psid |
sd__(Intercept) |
4.187 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
0.056 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.313 |
NA |
NA |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
3.262 |
NA |
NA |
NA |
NA |
# R2 for Mixed Models
Conditional R2: 0.703
Marginal R2: 0.024
Mixed-Effects Model for SHS_Pathways with 95% CI
| effect |
group |
term |
estimate |
std.error |
statistic |
2.5 % |
97.5 % |
| fixed |
NA |
(Intercept) |
18.228 |
2.760 |
6.604 |
12.818 |
23.638 |
| fixed |
NA |
Week |
0.180 |
0.053 |
3.423 |
0.077 |
0.283 |
| fixed |
NA |
conditionWaitlist Control |
0.879 |
0.807 |
1.088 |
-0.704 |
2.461 |
| fixed |
NA |
identity_groupTGD |
-1.888 |
0.605 |
-3.122 |
-3.074 |
-0.703 |
| fixed |
NA |
age |
-0.246 |
0.128 |
-1.924 |
-0.497 |
0.005 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.058 |
0.074 |
-0.783 |
-0.202 |
0.087 |
| ran_pars |
psid |
sd__(Intercept) |
3.517 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.431 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.201 |
NA |
NA |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
2.669 |
NA |
NA |
NA |
NA |
# R2 for Mixed Models
Conditional R2: 0.630
Marginal R2: 0.072
Mixed-Effects Model for SHS_Agency with 95% CI
| effect |
group |
term |
estimate |
std.error |
statistic |
2.5 % |
97.5 % |
| fixed |
NA |
(Intercept) |
11.036 |
3.221 |
3.426 |
4.723 |
17.350 |
| fixed |
NA |
Week |
0.239 |
0.063 |
3.810 |
0.116 |
0.361 |
| fixed |
NA |
conditionWaitlist Control |
0.986 |
0.897 |
1.099 |
-0.773 |
2.745 |
| fixed |
NA |
identity_groupTGD |
-1.511 |
0.707 |
-2.136 |
-2.897 |
-0.124 |
| fixed |
NA |
age |
-0.045 |
0.150 |
-0.300 |
-0.338 |
0.249 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.069 |
0.088 |
-0.782 |
-0.240 |
0.103 |
| ran_pars |
psid |
sd__(Intercept) |
3.946 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.349 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.294 |
NA |
NA |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
2.928 |
NA |
NA |
NA |
NA |
# R2 for Mixed Models
Conditional R2: 0.669
Marginal R2: 0.051
Mixed-Effects Model for SHS_TotalHope with 95% CI
| effect |
group |
term |
estimate |
std.error |
statistic |
2.5 % |
97.5 % |
| fixed |
NA |
(Intercept) |
29.159 |
5.488 |
5.313 |
18.402 |
39.915 |
| fixed |
NA |
Week |
0.419 |
0.103 |
4.076 |
0.217 |
0.620 |
| fixed |
NA |
conditionWaitlist Control |
1.843 |
1.525 |
1.209 |
-1.146 |
4.831 |
| fixed |
NA |
identity_groupTGD |
-3.422 |
1.205 |
-2.840 |
-5.784 |
-1.060 |
| fixed |
NA |
age |
-0.285 |
0.255 |
-1.118 |
-0.785 |
0.215 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.125 |
0.144 |
-0.869 |
-0.406 |
0.157 |
| ran_pars |
psid |
sd__(Intercept) |
7.134 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.419 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.522 |
NA |
NA |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
4.604 |
NA |
NA |
NA |
NA |
# R2 for Mixed Models
Conditional R2: 0.714
Marginal R2: 0.070
Mixed-Effects Model for ucla_Sum with 95% CI
| effect |
group |
term |
estimate |
std.error |
statistic |
2.5 % |
97.5 % |
| fixed |
NA |
(Intercept) |
6.511 |
1.162 |
5.602 |
4.232 |
8.789 |
| fixed |
NA |
Week |
-0.028 |
0.017 |
-1.668 |
-0.060 |
0.005 |
| fixed |
NA |
conditionWaitlist Control |
0.301 |
0.295 |
1.019 |
-0.278 |
0.880 |
| fixed |
NA |
identity_groupTGD |
0.498 |
0.256 |
1.948 |
-0.003 |
1.000 |
| fixed |
NA |
age |
0.013 |
0.054 |
0.240 |
-0.093 |
0.119 |
| fixed |
NA |
Week:conditionWaitlist Control |
-0.008 |
0.023 |
-0.366 |
-0.054 |
0.037 |
| ran_pars |
psid |
sd__(Intercept) |
1.389 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
cor__(Intercept).Week |
-0.052 |
NA |
NA |
NA |
NA |
| ran_pars |
psid |
sd__Week |
0.045 |
NA |
NA |
NA |
NA |
| ran_pars |
Residual |
sd__Observation |
0.888 |
NA |
NA |
NA |
NA |
# R2 for Mixed Models
Conditional R2: 0.729
Marginal R2: 0.030
LS0tCnRpdGxlOiAiUHVycmJsZSBSQ1QgQW5hbHlzZXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCgojIFJlY29yZGluZyBLZWVwaW5nOiAKClRoZXJlIGFyZSB0d28gbWFzdGVyIGZpbGVzIHRoYXQgd2UgYXJlIHVzaW5nIGZvciBhbmFseXNlcy4gVGhleSBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgZmlsZSwgdGhvdWdoIG9uZSBpcyBpbiB3aWRlIGZvcm1hdCBhbmQgdGhlIG90aGVyIGlzIGluIGxvbmcgZm9ybWF0LgoKVGhlIHdpZGUgZm9ybWF0IGRhdGFzZXQgaXMgY2FsbGVkIOKAnFB1cnJibGVfTWFzdGVyX1dpZGUu4oCdIFRoZSBsb25nIGRhdGFzZXQgZm9ybWF0IGRhdGFzZXQgaXMgY2FsbGVkIOKAnFB1cnJibGVfTG9uZ19NYXN0ZXIu4oCdIFRoZSB3aWRlIGRhdGFzZXQgaGFzIGFsbCBvZiB0aGUgcHJlIGFuZCBwb3N0dGVzdCB2YXJpYWJsZXMgY2FsY3VsYXRlZCwgd2hpbGUgdGhlIGxvbmcgZG9lcyBub3QuIE90aGVyd2lzZSwgdGhleSBkbyBub3QgZGlmZmVyLiAKClRoaXMgZGF0YXNldCBpbmNsdWRlcyB0aGUgTj0xNTMgcGFydGljaXBhbnRzIHdobyB3ZXJlIGluY2x1ZGVkIGluIHRoZSByYW5kb21pemVkIGNvbnRyb2wgdHJpYWwgZXhhbWluaW5nIFB1cnJibGUgd2l0aCBhIHBvcHVsYXRpb24gb2YgdW5pdmVyc2l0eSBzdHVkZW50cy4gQWxsIHBhcnRpY2lwYW50cyB3ZXJlIG1lbWJlcnMgb2YgdGhlIExHVEJRKyBjb21tdW5pdHkuCgpUaGVzZSBhbmFseXNlcyB3ZXJlIGNvbmR1Y3RlZCBvbiBGZWJydWFyeSAxOC0xOSBieSBBdWJyZXkgUmhvZGVzLiBXZSB1c2UgdGhlICJmaW5hbCIgZGF0YXNldHMgaW4gd2hpY2ggd2UgcmVtb3ZlZCBwYXJ0aWNpcGFudCBDNzIsIHdobyBoYWQgbm8gaW5mb3JtYXRpb24gb24gZ2VuZGVyIGlkZW50aXR5LgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIGluY2x1ZGUgPSBUUlVFLCAgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpCgpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShncmlkRXh0cmEpIApsaWJyYXJ5KHBhdGNod29yaykgICAgICAKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkobG1lNCkKbGlicmFyeShtYXJrZG93bikKbGlicmFyeShzdGFyZ2F6ZXIpCmxpYnJhcnkoTU9URSkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KHNjYWxlcykKbGlicmFyeShicm9vbSkKbGlicmFyeShicm9vbS5taXhlZCkgCmxpYnJhcnkodGlkeW1vZGVscykgCmxpYnJhcnkobXVsdGlsZXZlbG1vZCkgCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZWZmZWN0c2l6ZSkKbGlicmFyeShndCkKbGlicmFyeShyZW1wc3ljKSAKCgojI1JlYWQgaW4gdGhlIGRhdGFzZXRzCmBgYAoKCiMgRGVzY3JpcHRpdmUgQW5hbHlzZXMgCgojIyBTYW1wbGUgQ2hhcmFjdGVyaXN0aWNzCgpUaGVzZSB0YWJsZXMgcmVwb3J0IHRoZSBjb3VudCBvZiBwYXJ0aWNpcGFudHMgYnkgY29uZGl0aW9uLCBpZGVudGl0eSBncm91cCwgYW5kIGJ5IGNvbmRpdGlvbiB4IGlkZW50aXR5IGdyb3VwLgoKYGBge3J9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkodGlkeXIpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKCiMgVGFibGUgMTogTnVtYmVyIG9mIFBhcnRpY2lwYW50cyBieSBDb25kaXRpb24KY29uZGl0aW9uX2NvdW50cyA8LSBQdXJyYmxlX0xvbmdfTWFzdGVyICU+JQogIGRpc3RpbmN0KHBzaWQsIGNvbmRpdGlvbikgJT4lCiAgY291bnQoY29uZGl0aW9uLCBuYW1lID0gIkNvdW50IikgJT4lCiAgYXJyYW5nZShjb25kaXRpb24pICU+JQogIGFkZF9yb3coY29uZGl0aW9uID0gIlRvdGFsIiwgQ291bnQgPSBzdW0oLiRDb3VudCkpCgojIFRhYmxlIDI6IE51bWJlciBvZiBQYXJ0aWNpcGFudHMgYnkgR2VuZGVyIElkZW50aXR5CmlkZW50aXR5X2NvdW50cyA8LSBQdXJyYmxlX0xvbmdfTWFzdGVyICU+JQogIGRpc3RpbmN0KHBzaWQsIGlkZW50aXR5X2dyb3VwKSAlPiUKICBtdXRhdGUoaWRlbnRpdHlfZ3JvdXAgPSByZWNvZGUoaWRlbnRpdHlfZ3JvdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDIiA9ICJDaXNnZW5kZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVEdEIiA9ICJUcmFuc2dlbmRlciIpKSAlPiUKICBjb3VudChpZGVudGl0eV9ncm91cCwgbmFtZSA9ICJDb3VudCIpICU+JQogIGFycmFuZ2UoaWRlbnRpdHlfZ3JvdXApICU+JQogIGFkZF9yb3coaWRlbnRpdHlfZ3JvdXAgPSAiVG90YWwiLCBDb3VudCA9IHN1bSguJENvdW50KSkKCiMgVGFibGUgMzogQ3Jvc3MtdGFidWxhdGlvbiBvZiBDb25kaXRpb24gYnkgR2VuZGVyIElkZW50aXR5CmNyb3NzX3RhYiA8LSBQdXJyYmxlX0xvbmdfTWFzdGVyICU+JQogIGRpc3RpbmN0KHBzaWQsIGNvbmRpdGlvbiwgaWRlbnRpdHlfZ3JvdXApICU+JQogIG11dGF0ZShpZGVudGl0eV9ncm91cCA9IHJlY29kZShpZGVudGl0eV9ncm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkMiID0gIkNpc2dlbmRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUR0IiID0gIlRyYW5zZ2VuZGVyIikpICU+JQogIGNvdW50KGNvbmRpdGlvbiwgaWRlbnRpdHlfZ3JvdXApICU+JQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBpZGVudGl0eV9ncm91cCwgdmFsdWVzX2Zyb20gPSBuLCB2YWx1ZXNfZmlsbCA9IGxpc3QobiA9IDApKQoKIyBEaXNwbGF5IHRoZSB0YWJsZXMgdXNpbmcga2FibGUKa2FibGUoY29uZGl0aW9uX2NvdW50cywgY2FwdGlvbiA9ICJUYWJsZSAxOiBOdW1iZXIgb2YgUGFydGljaXBhbnRzIGJ5IENvbmRpdGlvbiIsIGZvcm1hdCA9ICJtYXJrZG93biIpCmthYmxlKGlkZW50aXR5X2NvdW50cywgY2FwdGlvbiA9ICJUYWJsZSAyOiBOdW1iZXIgb2YgUGFydGljaXBhbnRzIGJ5IEdlbmRlciBJZGVudGl0eSIsIGZvcm1hdCA9ICJtYXJrZG93biIpCmthYmxlKGNyb3NzX3RhYiwgY2FwdGlvbiA9ICJUYWJsZSAzOiBDcm9zcy10YWJ1bGF0aW9uIG9mIENvbmRpdGlvbiBieSBHZW5kZXIgSWRlbnRpdHkiLCBmb3JtYXQgPSAibWFya2Rvd24iKQpgYGAKCgojIyBBZ2U6IERlc2NyaXB0aXZlcyBhbmQgQ2hlY2sgZm9yIEJhc2VsaW5lIGRpZmZlcmVuY2VzIAoKU3VtbWFyaXplcyBhZ2UgKE1lYW4sIFNELCBNaW4sIE1heCkgYnkgY29uZGl0aW9uIGFuZCBydW5zIGEgdC10ZXN0IGNvbXBhcmluZyBhZ2UgYnkgY29uZGl0aW9uLgoKYGBge3J9CiMgTG9hZCByZXF1aXJlZCBwYWNrYWdlcwpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KHJlbXBzeWMpIAojIGlmIG5vdCBpbnN0YWxsZWQsIHJ1bjogaW5zdGFsbC5wYWNrYWdlcygicmVtcHN5YyIpCgojIFByZXBhcmUgZGF0YTogZW5zdXJlIG9uZSBvYnNlcnZhdGlvbiBwZXIgcGFydGljaXBhbnQKYWdlX2RhdGEgPC0gUHVycmJsZV9Mb25nX01hc3RlciAlPiUgCiAgZGlzdGluY3QocHNpZCwgY29uZGl0aW9uLCBhZ2UpCgojIENvbXB1dGUgZGVzY3JpcHRpdmUgc3RhdGlzdGljcyAoTWVhbiwgU0QsIE1pbiwgTWF4KSBieSBjb25kaXRpb24KZGVzY3JpcHRpdmVfc3RhdHMgPC0gYWdlX2RhdGEgJT4lCiAgZ3JvdXBfYnkoY29uZGl0aW9uKSAlPiUKICBzdW1tYXJpc2UoCiAgICBNZWFuID0gbWVhbihhZ2UsIG5hLnJtID0gVFJVRSksCiAgICBTRCAgID0gc2QoYWdlLCBuYS5ybSA9IFRSVUUpLAogICAgTWluICA9IG1pbihhZ2UsIG5hLnJtID0gVFJVRSksCiAgICBNYXggID0gbWF4KGFnZSwgbmEucm0gPSBUUlVFKQogICkgJT4lIAogIHVuZ3JvdXAoKQoKY2F0KCJUYWJsZTogRGVzY3JpcHRpdmUgU3RhdGlzdGljcyBmb3IgQWdlIGJ5IENvbmRpdGlvbiAoQVBBIEZvcm1hdClcblxuIikKIyBEaXNwbGF5IHRoZSBBUEEtZm9ybWF0dGVkIGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgdGFibGUKbmljZV90YWJsZShkZXNjcmlwdGl2ZV9zdGF0cykKCiMgRW5zdXJlIG9uZSBvYnNlcnZhdGlvbiBwZXIgcGFydGljaXBhbnQgZm9yIGFnZQphZ2VfZGF0YSA8LSBQdXJyYmxlX0xvbmdfTWFzdGVyICU+JSAKICBkaXN0aW5jdChwc2lkLCBjb25kaXRpb24sIGFnZSkKCiMgUnVuIHRoZSB0LXRlc3QgdXNpbmcgcmVtcHN5YydzIG5pY2VfdF90ZXN0KCkgZnVuY3Rpb24KYWdlX3R0ZXN0X3Jlc3VsdHMgPC0gbmljZV90X3Rlc3QoCiAgZGF0YSA9IGFnZV9kYXRhLAogIHJlc3BvbnNlID0gImFnZSIsCiAgZ3JvdXAgPSAiY29uZGl0aW9uIiwKICB3YXJuaW5nID0gRkFMU0UKKQoKIyBEaXNwbGF5IGEgcHVibGljYXRpb24tcmVhZHkgdC10ZXN0IHRhYmxlCm5pY2VfdGFibGUoYWdlX3R0ZXN0X3Jlc3VsdHMpCmBgYAoKCgojIyBSYWNlLCBOYXRpb25hbGl0eSwgYW5kIFNleHVhbCBPcmllbnRhdGlvbgoKIyMjIFNleHVhbCBPcmllbnRhdGlvbi0gU2ltcGxpZmllZApgYGB7cn0KbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQoKIyMjIFNleHVhbCBPcmllbnRhdGlvbiAoc29fc2ltcGxpZmllZCkgYnkgQ29uZGl0aW9uCgojIDEuIENyZWF0ZSBhIGNvdW50cyB0YWJsZTogb25lIHJvdyBwZXIgdW5pcXVlIHNvX3NpbXBsaWZpZWQgcmVzcG9uc2UsIHdpdGggc2VwYXJhdGUgY29sdW1ucyBmb3IgZWFjaCBjb25kaXRpb24uCnNvX2NvdW50cyA8LSBQdXJyYmxlX0xvbmdfTWFzdGVyICU+JQogIGRpc3RpbmN0KHBzaWQsIGNvbmRpdGlvbiwgc29fc2ltcGxpZmllZCkgJT4lICAgICAgICAjIG9uZSByZWNvcmQgcGVyIHBhcnRpY2lwYW50CiAgbXV0YXRlKHNvX3NpbXBsaWZpZWQgPSB0b2xvd2VyKHNvX3NpbXBsaWZpZWQpKSAlPiUgICAjIGNvbnZlcnQgdG8gbG93ZXJjYXNlCiAgY291bnQoc29fc2ltcGxpZmllZCwgY29uZGl0aW9uKSAlPiUgICAgICAgICAgICAgICAgICMgY291bnQgcGVyIHNvX3NpbXBsaWZpZWQgeCBjb25kaXRpb24KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY29uZGl0aW9uLCAKICAgICAgICAgICAgICB2YWx1ZXNfZnJvbSA9IG4sIAogICAgICAgICAgICAgIHZhbHVlc19maWxsID0gbGlzdChuID0gMCkpICU+JQogIGFycmFuZ2Uoc29fc2ltcGxpZmllZCkKCiMgMi4gQWRkIGEgVG90YWwgY29sdW1uIChzdW1taW5nIGFjcm9zcyBjb25kaXRpb25zIGZvciBlYWNoIHNvX3NpbXBsaWZpZWQgcmVzcG9uc2UpCnNvX2NvdW50cyA8LSBzb19jb3VudHMgJT4lCiAgbXV0YXRlKFRvdGFsID0gcm93U3VtcyhzZWxlY3QoLiwgLXNvX3NpbXBsaWZpZWQpKSkKCiMgMy4gQ29tcHV0ZSBkZW5vbWluYXRvcnMgKGkuZS4sIHRvdGFsIG51bWJlciBvZiBwYXJ0aWNpcGFudHMgcGVyIGNvbmRpdGlvbikgZm9yIHBlcmNlbnRhZ2VzCmRlbm9tX3NvIDwtIFB1cnJibGVfTG9uZ19NYXN0ZXIgJT4lCiAgZGlzdGluY3QocHNpZCwgY29uZGl0aW9uKSAlPiUKICBjb3VudChjb25kaXRpb24sIG5hbWUgPSAidG90YWwiKQoKb3ZlcmFsbF9kZW5vbSA8LSBucm93KFB1cnJibGVfTG9uZ19NYXN0ZXIgJT4lIGRpc3RpbmN0KHBzaWQpKQoKIyA0LiBDb252ZXJ0IGNvdW50cyB0byBhIGNvbWJpbmVkIHN0cmluZyAiY291bnQgKHBlcmNlbnRhZ2UlKSIgZm9yIGVhY2ggY29uZGl0aW9uIGNvbHVtbiBhbmQgZm9yIFRvdGFsLgpzb190YWJsZV9maW5hbCA8LSBzb19jb3VudHMKZm9yKGNvbCBpbiBzZXRkaWZmKG5hbWVzKHNvX2NvdW50cyksICJzb19zaW1wbGlmaWVkIikpewogIGlmKGNvbCAhPSAiVG90YWwiKXsKICAgICMgTG9vayB1cCBkZW5vbWluYXRvciBmb3IgdGhlIGNvbmRpdGlvbiBjb2x1bW4KICAgIGRlbm9tX3ZhbCA8LSBkZW5vbV9zbyR0b3RhbFtkZW5vbV9zbyRjb25kaXRpb24gPT0gY29sXQogICAgc29fdGFibGVfZmluYWxbW2NvbF1dIDwtIHBhc3RlMChzb19jb3VudHNbW2NvbF1dLCAiICgiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmQoc29fY291bnRzW1tjb2xdXSAvIGRlbm9tX3ZhbCAqIDEwMCwgMSksICIlKSIpCiAgfSBlbHNlIHsKICAgIHNvX3RhYmxlX2ZpbmFsW1tjb2xdXSA8LSBwYXN0ZTAoc29fY291bnRzW1tjb2xdXSwgIiAoIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKGFzLm51bWVyaWMoc29fY291bnRzW1tjb2xdXSkgLyBvdmVyYWxsX2Rlbm9tICogMTAwLCAxKSwgIiUpIikKICB9Cn0KCnByaW50KGthYmxlKHNvX3RhYmxlX2ZpbmFsLCBjYXB0aW9uID0gIlRhYmxlOiBTZXh1YWwgT3JpZW50YXRpb24gKHNvX3NpbXBsaWZpZWQpIGJ5IENvbmRpdGlvbiAoQ291bnRzIGFuZCBQZXJjZW50YWdlcykiLCBmb3JtYXQgPSAibWFya2Rvd24iKSkKCmBgYAoKIyMjIFNleHVhbCBPcmllbnRhdGlvbi0gTm90IHNpbXBsaWZpZWQKYGBge3J9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkodGlkeXIpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKCiMjIyBTZXh1YWwgT3JpZW50YXRpb24gKHNvKSBieSBDb25kaXRpb24tIENvbXBsZXgKCiMgMS4gQ3JlYXRlIGEgY291bnRzIHRhYmxlOiBvbmUgcm93IHBlciB1bmlxdWUgc28gcmVzcG9uc2UsIHdpdGggc2VwYXJhdGUgY29sdW1ucyBmb3IgZWFjaCBjb25kaXRpb24uCnNvX2NvdW50cyA8LSBQdXJyYmxlX0xvbmdfTWFzdGVyICU+JQogIGRpc3RpbmN0KHBzaWQsIGNvbmRpdGlvbiwgc28pICU+JSAgICAgICAgIyBvbmUgcmVjb3JkIHBlciBwYXJ0aWNpcGFudAogIG11dGF0ZShzbyA9IHRvbG93ZXIoc28pKSAlPiUgICAgICAgICAgICAgIyBjb252ZXJ0IHRvIGxvd2VyY2FzZQogIGNvdW50KHNvLCBjb25kaXRpb24pICU+JSAgICAgICAgICAgICAgICAgIyBjb3VudCBwZXIgc28geCBjb25kaXRpb24KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY29uZGl0aW9uLCAKICAgICAgICAgICAgICB2YWx1ZXNfZnJvbSA9IG4sIAogICAgICAgICAgICAgIHZhbHVlc19maWxsID0gbGlzdChuID0gMCkpICU+JQogIGFycmFuZ2Uoc28pCgojIDIuIEFkZCBhIFRvdGFsIGNvbHVtbiAoc3VtbWluZyBhY3Jvc3MgY29uZGl0aW9ucyBmb3IgZWFjaCBzbyByZXNwb25zZSkKc29fY291bnRzIDwtIHNvX2NvdW50cyAlPiUKICBtdXRhdGUoVG90YWwgPSByb3dTdW1zKHNlbGVjdCguLCAtc28pKSkKCiMgMy4gQ29tcHV0ZSBkZW5vbWluYXRvcnMgKGkuZS4sIHRvdGFsIG51bWJlciBvZiBwYXJ0aWNpcGFudHMgcGVyIGNvbmRpdGlvbikgZm9yIHBlcmNlbnRhZ2VzCmRlbm9tX3NvIDwtIFB1cnJibGVfTG9uZ19NYXN0ZXIgJT4lCiAgZGlzdGluY3QocHNpZCwgY29uZGl0aW9uKSAlPiUKICBjb3VudChjb25kaXRpb24sIG5hbWUgPSAidG90YWwiKQoKb3ZlcmFsbF9kZW5vbSA8LSBucm93KFB1cnJibGVfTG9uZ19NYXN0ZXIgJT4lIGRpc3RpbmN0KHBzaWQpKQoKIyA0LiBDb252ZXJ0IGNvdW50cyB0byBhIGNvbWJpbmVkIHN0cmluZyAiY291bnQgKHBlcmNlbnRhZ2UlKSIgZm9yIGVhY2ggY29uZGl0aW9uIGNvbHVtbiBhbmQgZm9yIFRvdGFsLgpzb190YWJsZV9maW5hbCA8LSBzb19jb3VudHMKZm9yKGNvbCBpbiBzZXRkaWZmKG5hbWVzKHNvX2NvdW50cyksICJzbyIpKXsKICBpZihjb2wgIT0gIlRvdGFsIil7CiAgICAjIExvb2sgdXAgZGVub21pbmF0b3IgZm9yIHRoZSBjb25kaXRpb24gY29sdW1uCiAgICBkZW5vbV92YWwgPC0gZGVub21fc28kdG90YWxbZGVub21fc28kY29uZGl0aW9uID09IGNvbF0KICAgIHNvX3RhYmxlX2ZpbmFsW1tjb2xdXSA8LSBwYXN0ZTAoc29fY291bnRzW1tjb2xdXSwgIiAoIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKHNvX2NvdW50c1tbY29sXV0gLyBkZW5vbV92YWwgKiAxMDAsIDEpLCAiJSkiKQogIH0gZWxzZSB7CiAgICBzb190YWJsZV9maW5hbFtbY29sXV0gPC0gcGFzdGUwKHNvX2NvdW50c1tbY29sXV0sICIgKCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZChhcy5udW1lcmljKHNvX2NvdW50c1tbY29sXV0pIC8gb3ZlcmFsbF9kZW5vbSAqIDEwMCwgMSksICIlKSIpCiAgfQp9CgpwcmludChrYWJsZShzb190YWJsZV9maW5hbCwgY2FwdGlvbiA9ICJUYWJsZTogU2V4dWFsIE9yaWVudGF0aW9uIGJ5IENvbmRpdGlvbiAoQ291bnRzIGFuZCBQZXJjZW50YWdlcykiLCBmb3JtYXQgPSAibWFya2Rvd24iKSkKYGBgCiMjIyBOYXRpb25hbGl0eQpgYGB7cn0KIyMjIE5hdGlvbmFsaXR5IGJ5IENvbmRpdGlvbgoKIyAxLiBDcmVhdGUgYSBjb3VudHMgdGFibGU6IG9uZSByb3cgcGVyIHVuaXF1ZSBOYXRpb25hbGl0eSwgd2l0aCBjb2x1bW5zIGZvciBlYWNoIGNvbmRpdGlvbi4KbmF0aW9uYWxpdHlfY291bnRzIDwtIFB1cnJibGVfTG9uZ19NYXN0ZXIgJT4lCiAgZGlzdGluY3QocHNpZCwgY29uZGl0aW9uLCBOYXRpb25hbGl0eSkgJT4lICAjIG9uZSByZWNvcmQgcGVyIHBhcnRpY2lwYW50CiAgbXV0YXRlKE5hdGlvbmFsaXR5ID0gdG9sb3dlcihOYXRpb25hbGl0eSkpICU+JSAgIyBjb252ZXJ0IHRvIGxvd2VyY2FzZQogIGNvdW50KE5hdGlvbmFsaXR5LCBjb25kaXRpb24pICU+JQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBjb25kaXRpb24sIAogICAgICAgICAgICAgIHZhbHVlc19mcm9tID0gbiwgCiAgICAgICAgICAgICAgdmFsdWVzX2ZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgYXJyYW5nZShOYXRpb25hbGl0eSkKCiMgMi4gQWRkIGEgVG90YWwgY29sdW1uLgpuYXRpb25hbGl0eV9jb3VudHMgPC0gbmF0aW9uYWxpdHlfY291bnRzICU+JQogIG11dGF0ZShUb3RhbCA9IHJvd1N1bXMoc2VsZWN0KC4sIC1OYXRpb25hbGl0eSkpKQoKIyAzLiBHZXQgZGVub21pbmF0b3JzIChzYW1lIGFzIGZvciBzbykKZGVub21fbmF0IDwtIFB1cnJibGVfTG9uZ19NYXN0ZXIgJT4lCiAgZGlzdGluY3QocHNpZCwgY29uZGl0aW9uKSAlPiUKICBjb3VudChjb25kaXRpb24sIG5hbWUgPSAidG90YWwiKQpvdmVyYWxsX2Rlbm9tX25hdCA8LSBvdmVyYWxsX2Rlbm9tICAjIHNhbWUgb3ZlcmFsbCBkZW5vbWluYXRvcgoKIyA0LiBDb252ZXJ0IGNvdW50cyB0byAiY291bnQgKHBlcmNlbnRhZ2UlKSIgZm9ybWF0LgpuYXRpb25hbGl0eV90YWJsZV9maW5hbCA8LSBuYXRpb25hbGl0eV9jb3VudHMKZm9yKGNvbCBpbiBzZXRkaWZmKG5hbWVzKG5hdGlvbmFsaXR5X2NvdW50cyksICJOYXRpb25hbGl0eSIpKXsKICBpZihjb2wgIT0gIlRvdGFsIil7CiAgICBkZW5vbV92YWwgPC0gZGVub21fbmF0JHRvdGFsW2Rlbm9tX25hdCRjb25kaXRpb24gPT0gY29sXQogICAgbmF0aW9uYWxpdHlfdGFibGVfZmluYWxbW2NvbF1dIDwtIHBhc3RlMChuYXRpb25hbGl0eV9jb3VudHNbW2NvbF1dLCAiICgiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmQobmF0aW9uYWxpdHlfY291bnRzW1tjb2xdXSAvIGRlbm9tX3ZhbCAqIDEwMCwgMSksICIlKSIpCiAgfSBlbHNlIHsKICAgIG5hdGlvbmFsaXR5X3RhYmxlX2ZpbmFsW1tjb2xdXSA8LSBwYXN0ZTAobmF0aW9uYWxpdHlfY291bnRzW1tjb2xdXSwgIiAoIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKGFzLm51bWVyaWMobmF0aW9uYWxpdHlfY291bnRzW1tjb2xdXSkgLyBvdmVyYWxsX2Rlbm9tX25hdCAqIDEwMCwgMSksICIlKSIpCiAgfQp9CgpwcmludChrYWJsZShuYXRpb25hbGl0eV90YWJsZV9maW5hbCwgY2FwdGlvbiA9ICJUYWJsZTogTmF0aW9uYWxpdHkgYnkgQ29uZGl0aW9uIChDb3VudHMgYW5kIFBlcmNlbnRhZ2VzKSIsIGZvcm1hdCA9ICJtYXJrZG93biIpKQoKYGBgCiMjIyBSYWNlCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGthYmxlRXh0cmEpCgojIERlZmluZSByYWNlIHZhcmlhYmxlcwpyYWNlX3ZhcnMgPC0gYygiUmFjZV9Bc2lhbiIsICJSYWNlX0FyYWJpYyIsICJSYWNlX0JsYWNrIiwgIlJhY2VfSGlzcGFuaWMiLCAKICAgICAgICAgICAgICAgIlJhY2VfUGFjaWZpYyIsICJSYWNlX1doaXRlIiwgIlJhY2VfdW5rbm93biIpCgojIFN0ZXAgMTogQ3JlYXRlIHBhcnRpY2lwYW50LWxldmVsIHJhY2UgZGF0YQpyYWNlX2RhdGEgPC0gUHVycmJsZV9Mb25nX01hc3RlciAlPiUKICBzZWxlY3QocHNpZCwgY29uZGl0aW9uLCBhbGxfb2YocmFjZV92YXJzKSkgJT4lICAjIHNlbGVjdCBuZWVkZWQgY29sdW1ucyBmaXJzdAogIGRpc3RpbmN0KCkKCiMgU3RlcCAyOiBQaXZvdCB0byBsb25nIGZvcm1hdCBzbyB0aGF0IGVhY2ggcm93IGlzIG9uZSByYWNlIG9wdGlvbiBwZXIgcGFydGljaXBhbnQsIHRoZW4gZmlsdGVyIGZvciBpbmRpY2F0b3IgPT0gMQpyYWNlX2xvbmcgPC0gcmFjZV9kYXRhICU+JQogIHBpdm90X2xvbmdlcihjb2xzID0gYWxsX29mKHJhY2VfdmFycyksIG5hbWVzX3RvID0gIlJhY2UiLCB2YWx1ZXNfdG8gPSAiaW5kaWNhdG9yIikgJT4lCiAgZmlsdGVyKGluZGljYXRvciA9PSAxKQoKIyBTdGVwIDM6IENvbXB1dGUgY291bnRzIGJ5IGNvbmRpdGlvbiBmb3IgZWFjaCBSYWNlIG9wdGlvbgpyYWNlX2NvdW50cyA8LSByYWNlX2xvbmcgJT4lCiAgZ3JvdXBfYnkoUmFjZSwgY29uZGl0aW9uKSAlPiUKICBzdW1tYXJpc2UoY291bnQgPSBuKCksIC5ncm91cHMgPSAiZHJvcCIpCgojIFN0ZXAgNDogQ29tcHV0ZSBkZW5vbWluYXRvcnMgKHRvdGFsIHBhcnRpY2lwYW50cykgcGVyIGNvbmRpdGlvbgpkZW5vbSA8LSBQdXJyYmxlX0xvbmdfTWFzdGVyICU+JQogIGRpc3RpbmN0KHBzaWQsIGNvbmRpdGlvbikgJT4lCiAgY291bnQoY29uZGl0aW9uLCBuYW1lID0gImRlbm9tIikKCiMgU3RlcCA1OiBKb2luIGRlbm9taW5hdG9ycyBhbmQgY29tcHV0ZSBwZXJjZW50YWdlcyBmb3IgZWFjaCBSYWNlIG9wdGlvbiBwZXIgY29uZGl0aW9uCnJhY2VfY291bnRzIDwtIHJhY2VfY291bnRzICU+JQogIGxlZnRfam9pbihkZW5vbSwgYnkgPSAiY29uZGl0aW9uIikgJT4lCiAgbXV0YXRlKHBlcmNlbnRhZ2UgPSByb3VuZChjb3VudCAvIGRlbm9tICogMTAwLCAxKSkKCiMgU3RlcCA2OiBQaXZvdCB3aWRlciBzbyB0aGF0IGVhY2ggcmFjZSBvcHRpb24gaXMgb25lIHJvdy4KcmFjZV93aWRlIDwtIHJhY2VfY291bnRzICU+JQogIHBpdm90X3dpZGVyKGlkX2NvbHMgPSBSYWNlLCAKICAgICAgICAgICAgICBuYW1lc19mcm9tID0gY29uZGl0aW9uLCAKICAgICAgICAgICAgICB2YWx1ZXNfZnJvbSA9IGMoY291bnQsIHBlcmNlbnRhZ2UpLAogICAgICAgICAgICAgIHZhbHVlc19maWxsID0gbGlzdChjb3VudCA9IDAsIHBlcmNlbnRhZ2UgPSAwKSwKICAgICAgICAgICAgICB2YWx1ZXNfZm4gPSBsaXN0KGNvdW50ID0gc3VtLCBwZXJjZW50YWdlID0gc3VtKSkKCiMgU3RlcCA3OiBDb21wdXRlIG92ZXJhbGwgdG90YWxzIGZvciBlYWNoIFJhY2Ugb3B0aW9uCm92ZXJhbGxfZGVub20gPC0gbnJvdyhQdXJyYmxlX0xvbmdfTWFzdGVyICU+JSBkaXN0aW5jdChwc2lkKSkKb3ZlcmFsbF9jb3VudHMgPC0gcmFjZV9sb25nICU+JQogIGdyb3VwX2J5KFJhY2UpICU+JQogIHN1bW1hcmlzZSh0b3RhbF9jb3VudCA9IG4oKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lCiAgbXV0YXRlKHRvdGFsX3BlcmNlbnRhZ2UgPSByb3VuZCh0b3RhbF9jb3VudCAvIG92ZXJhbGxfZGVub20gKiAxMDAsIDEpKQoKIyBTdGVwIDg6IE1lcmdlIG92ZXJhbGwgdG90YWxzIHdpdGggdGhlIHdpZGUgdGFibGUKcmFjZV90YWJsZSA8LSByYWNlX3dpZGUgJT4lCiAgbGVmdF9qb2luKG92ZXJhbGxfY291bnRzLCBieSA9ICJSYWNlIikKCiMgU3RlcCA5OiBSZW9yZGVyIGNvbHVtbnMgc28gdGhhdCBmb3IgZWFjaCBjb25kaXRpb24gdGhlIGNvdW50IGFuZCBwZXJjZW50YWdlIGNvbHVtbnMgYXBwZWFyIHNpZGUtYnktc2lkZSwKIyBhbmQgdGhlbiBhZGQgb3ZlcmFsbCAoVG90YWwpIGNvbHVtbnMuCmNvbmRpdGlvbnMgPC0gc29ydCh1bmlxdWUoUHVycmJsZV9Mb25nX01hc3RlciRjb25kaXRpb24pKQpvcmRlcmVkX2NvbHMgPC0gYygiUmFjZSIpCmZvciAoY29uZCBpbiBjb25kaXRpb25zKSB7CiAgb3JkZXJlZF9jb2xzIDwtIGMob3JkZXJlZF9jb2xzLCBwYXN0ZTAoImNvdW50XyIsIGNvbmQpLCBwYXN0ZTAoInBlcmNlbnRhZ2VfIiwgY29uZCkpCn0Kb3JkZXJlZF9jb2xzIDwtIGMob3JkZXJlZF9jb2xzLCAidG90YWxfY291bnQiLCAidG90YWxfcGVyY2VudGFnZSIpCnJhY2VfdGFibGUgPC0gcmFjZV90YWJsZSAlPiUgc2VsZWN0KGFsbF9vZihvcmRlcmVkX2NvbHMpKQoKIyBTdGVwIDEwOiBDcmVhdGUgYSBzcGFubmluZyBoZWFkZXI6CiMgRmlyc3QgY29sdW1uOiAiUmFjZSIsIHRoZW4gZWFjaCBjb25kaXRpb24gc3BhbnMgMiBjb2x1bW5zIChDb3VudCBhbmQgUGVyY2VudCksIHRoZW4gIlRvdGFsIiBzcGFucyAyIGNvbHVtbnMuCmhlYWRlcl92ZWMgPC0gYygiUmFjZSIgPSAxKQpmb3IgKGNvbmQgaW4gY29uZGl0aW9ucykgewogIGhlYWRlcl92ZWMgPC0gYyhoZWFkZXJfdmVjLCBzZXROYW1lcygyLCBjb25kKSkKfQpoZWFkZXJfdmVjIDwtIGMoaGVhZGVyX3ZlYywgIlRvdGFsIiA9IDIpCgojIERpc3BsYXkgdGhlIGZpbmFsIHJhY2UgdGFibGUgd2l0aCB0aGUgc3Bhbm5pbmcgaGVhZGVyLgprYWJsZShyYWNlX3RhYmxlLCBjYXB0aW9uID0gIlRhYmxlOiBSYWNlIENvdW50cyBhbmQgUGVyY2VudGFnZXMgYnkgQ29uZGl0aW9uIiwgZm9ybWF0ID0gIm1hcmtkb3duIikgJT4lCiAga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRkFMU0UpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoaGVhZGVyX3ZlYykKCgojIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHBhcnRpY2lwYW50cyB3aXRoIG11bHRpcGxlIHJhY2lhbCBpZGVudGl0aWVzIHBlciBjb25kaXRpb24KbXVsdGlwbGVfcmFjZV9jb3VudHMgPC0gUHVycmJsZV9Mb25nX01hc3RlciAlPiUKICBzZWxlY3QocHNpZCwgY29uZGl0aW9uLCBvbmVfb2YocmFjZV92YXJzKSkgJT4lICAjIHNlbGVjdCBuZWNlc3NhcnkgY29sdW1ucyBmaXJzdAogIGRpc3RpbmN0KCkgJT4lCiAgbXV0YXRlKG11bHRpcGxlID0gcm93U3VtcyhhY3Jvc3Mob25lX29mKHJhY2VfdmFycykpLCBuYS5ybSA9IFRSVUUpID4gMSkgJT4lCiAgZ3JvdXBfYnkoY29uZGl0aW9uKSAlPiUKICBzdW1tYXJpemUobXVsdGlwbGVfY291bnQgPSBzdW0obXVsdGlwbGUpLCAuZ3JvdXBzID0gImRyb3AiKQoKIyBQcmludCBvdXRwdXQgbWVzc2FnZXMgZm9yIGVhY2ggY29uZGl0aW9uCm11bHRpcGxlX3JhY2VfY291bnRzICU+JQogIHJvd3dpc2UoKSAlPiUKICBtdXRhdGUobWVzc2FnZSA9IHBhc3RlMChtdWx0aXBsZV9jb3VudCwgIiBwZW9wbGUgaW4gdGhlICIsIGNvbmRpdGlvbiwgIiBjb25kaXRpb24gcmVwb3J0ZWQgbXVsdGlwbGUgcmFjaWFsIGlkZW50aXRpZXMuIikpICU+JQogIHB1bGwobWVzc2FnZSkgJT4lCiAgcGFzdGUoY29sbGFwc2UgPSAiXG4iKSAlPiUKICBjYXQoKQoKYGBgCgojIFBhcnRpY2lwYXRpb24gT3ZlciBUaW1lIGFuZCBBdHRyaXRpb24KCiMjIENvdW50IG9mIFBhcnRpY2lwYXRpb24gYnkgR3JvdXAgT3ZlciBUaW1lClBhcnRpY2lwYXRpb24gaW4gRWFjaCBXZWVrIG92ZXIgVGltZSBOb3RlOiBXZWVrIDAgd2FzICJpbnRha2UuIiBXZWVrcyAxLTMgd2VyZSBjb25zaWRlcmVkIOKAnHByZS10ZXN0LuKAnSBQdXJyYmxlIHdhcyBnaXZlbiAob3Igbm90KSBhZnRlciB3ZWVrIDMuIFdlZWtzIDExLTEzIGFyZSBjb25zaWRlcmVkIOKAnFBvc3QtdGVzdOKAnS4KRm9yIGVhY2ggd2VlayAoMOKAkzEzKSwgd2UgY291bnQgdGhlIG51bWJlciBvZiB1bmlxdWUgcGFydGljaXBhbnRzIG92ZXJhbGwsIGFuZCB0aGVuIGJyZWFrIGRvd24gcGFydGljaXBhdGlvbiBieSBjb25kaXRpb24uIFRoZXNlIHN1bW1hcmllcyBoZWxwIHVzIHVuZGVyc3RhbmQgYXR0ZW5kYW5jZSB0cmVuZHMgZHVyaW5nIGludGFrZSwgcHJlLXRlc3QsIGludGVydmVudGlvbiwgYW5kIHBvc3QtdGVzdCBwaGFzZXMuCgpgYGB7cn0KbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGthYmxlRXh0cmEpCgojIyBPdmVyYWxsIFBhcnRpY2lwYXRpb24gYnkgV2VlawpvdmVyYWxsX3BhcnRpY2lwYXRpb24gPC0gUHVycmJsZV9Mb25nX01hc3RlciAlPiUKICBncm91cF9ieShXZWVrKSAlPiUKICBzdW1tYXJpemUobl9wYXJ0aWNpcGFudHMgPSBuX2Rpc3RpbmN0KHBzaWQpKSAlPiUKICB1bmdyb3VwKCkKCiMjIFBhcnRpY2lwYXRpb24gYnkgQ29uZGl0aW9uCnBhcnRpY2lwYXRpb25fYnlfY29uZGl0aW9uIDwtIFB1cnJibGVfTG9uZ19NYXN0ZXIgJT4lCiAgZ3JvdXBfYnkoV2VlaywgY29uZGl0aW9uKSAlPiUKICBzdW1tYXJpemUobl9wYXJ0aWNpcGFudHMgPSBuX2Rpc3RpbmN0KHBzaWQpKSAlPiUKICB1bmdyb3VwKCkKCiMjIFBhcnRpY2lwYXRpb24gYnkgR2VuZGVyIElkZW50aXR5CnBhcnRpY2lwYXRpb25fYnlfaWRlbnRpdHkgPC0gUHVycmJsZV9Mb25nX01hc3RlciAlPiUKICBncm91cF9ieShXZWVrLCBpZGVudGl0eV9ncm91cCkgJT4lCiAgc3VtbWFyaXplKG5fcGFydGljaXBhbnRzID0gbl9kaXN0aW5jdChwc2lkKSkgJT4lCiAgdW5ncm91cCgpCgojIyBQYXJ0aWNpcGF0aW9uIGJ5IENvbmRpdGlvbiBhbmQgR2VuZGVyIElkZW50aXR5CnBhcnRpY2lwYXRpb25fYnlfYm90aCA8LSBQdXJyYmxlX0xvbmdfTWFzdGVyICU+JQogIGdyb3VwX2J5KFdlZWssIGNvbmRpdGlvbiwgaWRlbnRpdHlfZ3JvdXApICU+JQogIHN1bW1hcml6ZShuX3BhcnRpY2lwYW50cyA9IG5fZGlzdGluY3QocHNpZCkpICU+JQogIHVuZ3JvdXAoKQoKIyBBUEEtZm9ybWF0dGVkIHRhYmxlIGZvciBvdmVyYWxsIHBhcnRpY2lwYXRpb24Kb3ZlcmFsbF9wYXJ0aWNpcGF0aW9uICU+JQogIGthYmxlKGNhcHRpb24gPSAiVGFibGUgMTogQ291bnQgb2YgVG90YWwgUGFydGljaXBhdGlvbiBieSBXZWVrIikgJT4lCiAga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRkFMU0UpCgojIFBsb3Qgb3ZlcmFsbCBwYXJ0aWNpcGF0aW9uIG92ZXIgdGltZQpnZ3Bsb3Qob3ZlcmFsbF9wYXJ0aWNpcGF0aW9uLCBhZXMoeCA9IFdlZWssIHkgPSBuX3BhcnRpY2lwYW50cykpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIsIHNpemUgPSAxKSArCiAgZ2VvbV9wb2ludChjb2xvciA9ICJkYXJrYmx1ZSIsIHNpemUgPSAyKSArCiAgbGFicyh0aXRsZSA9ICJDb3VudCBvZiBUb3RhbCBQYXJ0aWNpcGF0aW9uIG92ZXIgVGltZSIsCiAgICAgICB4ID0gIldlZWsiLAogICAgICAgeSA9ICJOdW1iZXIgb2YgUGFydGljaXBhbnRzIikgKwogIHRoZW1lX21pbmltYWwoKQoKIyMjIFBhcnRpY2lwYXRpb24gYnkgQ29uZGl0aW9uIEJyZWFrZG93bgoKIyBDYWxjdWxhdGUgcGFydGljaXBhdGlvbiBjb3VudHMgYnkgV2VlayBhbmQgQ29uZGl0aW9uCnBhcnRpY2lwYXRpb25fYnlfY29uZGl0aW9uIDwtIFB1cnJibGVfTG9uZ19NYXN0ZXIgJT4lCiAgZ3JvdXBfYnkoV2VlaywgY29uZGl0aW9uKSAlPiUKICBzdW1tYXJpemUobl9wYXJ0aWNpcGFudHMgPSBuX2Rpc3RpbmN0KHBzaWQpLCAuZ3JvdXBzID0gImRyb3AiKQoKIyBQaXZvdCB0aGUgdGFibGUgc28gZWFjaCB3ZWVrIGlzIGEgcm93IGFuZCBlYWNoIGNvbmRpdGlvbiBpcyBhIGNvbHVtbgpwYXJ0aWNpcGF0aW9uX3RhYmxlIDwtIHBhcnRpY2lwYXRpb25fYnlfY29uZGl0aW9uICU+JQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBjb25kaXRpb24sIHZhbHVlc19mcm9tID0gbl9wYXJ0aWNpcGFudHMsIHZhbHVlc19maWxsID0gbGlzdChuX3BhcnRpY2lwYW50cyA9IDApKSAlPiUKICBhcnJhbmdlKFdlZWspCgojIERpc3BsYXkgdGhlIEFQQS1mb3JtYXR0ZWQgdGFibGUKcGFydGljaXBhdGlvbl90YWJsZSAlPiUKICBrYWJsZShjYXB0aW9uID0gIlRhYmxlOiBDb3VudCBvZiBQYXJ0aWNpcGF0aW9uIGJ5IFdlZWsgYW5kIENvbmRpdGlvbiIsIGZvcm1hdCA9ICJtYXJrZG93biIpICU+JQogIGthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFKQoKIyBQbG90IHBhcnRpY2lwYXRpb24gY291bnRzIG92ZXIgdGltZSB3aXRoIGRpZmZlcmVudCBjb2xvcmVkIGxpbmVzIGJ5IGNvbmRpdGlvbgpnZ3Bsb3QocGFydGljaXBhdGlvbl9ieV9jb25kaXRpb24sIGFlcyh4ID0gV2VlaywgeSA9IG5fcGFydGljaXBhbnRzLCBjb2xvciA9IGNvbmRpdGlvbikpICsKICBnZW9tX2xpbmUoc2l6ZSA9IDEpICsKICBnZW9tX3BvaW50KHNpemUgPSAyKSArCiAgbGFicyh0aXRsZSA9ICJDb3VudCBvZiBUb3RhbCBQYXJ0aWNpcGF0aW9uIG92ZXIgVGltZSBieSBDb25kaXRpb24iLAogICAgICAgeCA9ICJXZWVrIiwKICAgICAgIHkgPSAiTnVtYmVyIG9mIFBhcnRpY2lwYW50cyIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiKQpgYGAKCiMjIE51bWJlciBvZiBTZXNzaW9ucyBBdHRlbmRlZAoKYGBge3J9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKCiMgSWRlbnRpZnkgYXR0ZW5kYW5jZSBjb2x1bW5zICh0aG9zZSBzdGFydGluZyB3aXRoICJXZWVrXyIpCmF0dGVuZGFuY2VfY29scyA8LSBncmVwKCJeV2Vla18iLCBuYW1lcyhQdXJyYmxlX01hc3Rlcl9XaWRlKSwgdmFsdWUgPSBUUlVFKQoKIyBDYWxjdWxhdGUgdG90YWwgc2Vzc2lvbnMgYXR0ZW5kZWQgcGVyIHBhcnRpY2lwYW50ClB1cnJibGVfTWFzdGVyX1dpZGUgPC0gUHVycmJsZV9NYXN0ZXJfV2lkZSAlPiUKICBtdXRhdGUodG90YWxfc2Vzc2lvbnMgPSByb3dTdW1zKGFjcm9zcyhhbGxfb2YoYXR0ZW5kYW5jZV9jb2xzKSkpKQoKIyBPdmVyYWxsIHNlc3Npb25zIGF0dGVuZGVkCm92ZXJhbGxfc2Vzc2lvbnMgPC0gUHVycmJsZV9NYXN0ZXJfV2lkZSAlPiUKICBzdW1tYXJpemUobWVhbl9zZXNzaW9ucyA9IG1lYW4odG90YWxfc2Vzc2lvbnMsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIHNkX3Nlc3Npb25zID0gc2QodG90YWxfc2Vzc2lvbnMsIG5hLnJtID0gVFJVRSkpCgojIFNlc3Npb25zIGF0dGVuZGVkIGJ5IENvbmRpdGlvbgpzZXNzaW9uc19ieV9jb25kaXRpb24gPC0gUHVycmJsZV9NYXN0ZXJfV2lkZSAlPiUKICBncm91cF9ieShjb25kaXRpb24pICU+JQogIHN1bW1hcml6ZShtZWFuX3Nlc3Npb25zID0gbWVhbih0b3RhbF9zZXNzaW9ucywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgc2Rfc2Vzc2lvbnMgPSBzZCh0b3RhbF9zZXNzaW9ucywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgbiA9IG4oKSkKCiMgU2Vzc2lvbnMgYXR0ZW5kZWQgYnkgR2VuZGVyIElkZW50aXR5CnNlc3Npb25zX2J5X2lkZW50aXR5IDwtIFB1cnJibGVfTWFzdGVyX1dpZGUgJT4lCiAgZ3JvdXBfYnkoaWRlbnRpdHlfZ3JvdXApICU+JQogIHN1bW1hcml6ZShtZWFuX3Nlc3Npb25zID0gbWVhbih0b3RhbF9zZXNzaW9ucywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgc2Rfc2Vzc2lvbnMgPSBzZCh0b3RhbF9zZXNzaW9ucywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgbiA9IG4oKSkKCiMgU2Vzc2lvbnMgYXR0ZW5kZWQgYnkgQ29uZGl0aW9uIGFuZCBHZW5kZXIgSWRlbnRpdHkKc2Vzc2lvbnNfYnlfYm90aCA8LSBQdXJyYmxlX01hc3Rlcl9XaWRlICU+JQogIGdyb3VwX2J5KGNvbmRpdGlvbiwgaWRlbnRpdHlfZ3JvdXApICU+JQogIHN1bW1hcml6ZShtZWFuX3Nlc3Npb25zID0gbWVhbih0b3RhbF9zZXNzaW9ucywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgc2Rfc2Vzc2lvbnMgPSBzZCh0b3RhbF9zZXNzaW9ucywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgbiA9IG4oKSkKCiMgQVBBLWZvcm1hdHRlZCB0YWJsZXMKb3ZlcmFsbF9zZXNzaW9ucyAlPiUKICBrYWJsZShjYXB0aW9uID0gIlRhYmxlIDI6IE92ZXJhbGwgVG90YWwgU2Vzc2lvbnMgQXR0ZW5kZWQiKSAlPiUKICBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBGQUxTRSkKCnNlc3Npb25zX2J5X2NvbmRpdGlvbiAlPiUKICBrYWJsZShjYXB0aW9uID0gIlRhYmxlIDM6IFRvdGFsIFNlc3Npb25zIEF0dGVuZGVkIGJ5IENvbmRpdGlvbiIpICU+JQogIGthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFKQoKc2Vzc2lvbnNfYnlfaWRlbnRpdHkgJT4lCiAga2FibGUoY2FwdGlvbiA9ICJUYWJsZSA0OiBUb3RhbCBTZXNzaW9ucyBBdHRlbmRlZCBieSBHZW5kZXIgSWRlbnRpdHkiKSAlPiUKICBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBGQUxTRSkKCnNlc3Npb25zX2J5X2JvdGggJT4lCiAga2FibGUoY2FwdGlvbiA9ICJUYWJsZSA1OiBUb3RhbCBTZXNzaW9ucyBBdHRlbmRlZCBieSBDb25kaXRpb24gYW5kIEdlbmRlciBJZGVudGl0eSIpICU+JQogIGthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFKQoKYGBgCgoKCgoKIyMgQXR0cml0aW9uIEFuYWx5c2lzCkF0dHJpdGlvbiBpcyBkZWZpbmVkIGhlcmUgYXMgbm90IGhhdmluZyBhdHRlbmRlZCBhbnkgcG9zdC10ZXN0IHNlc3Npb24gKGkuZS4sIG5vIGF0dGVuZGFuY2UgZHVyaW5nIFdlZWtzIDEx4oCTMTMpLiBXZSBjcmVhdGUgYSBiaW5hcnkgaW5kaWNhdG9yIGZvciBwb3N0LXRlc3QgY29tcGxldGlvbiAoMSA9IGF0dGVuZGVkIGF0IGxlYXN0IG9uZSBwb3N0LXRlc3Qgc2Vzc2lvbiwgMCA9IG5vbmUpIGFuZCBjYWxjdWxhdGUgYXR0cml0aW9uIHJhdGVzIG92ZXJhbGwsIGJ5IGNvbmRpdGlvbiBhbmQgYnkgZ2VuZGVyIGlkZW50aXR5LiBXZSB1c2VkIGEgY2hpLXNxdWFyZSB0ZXN0IHRvIGRldGVybWluZSBpZiBhdHRyaXRpb24gZGlmZmVyZWQgYnkgY29uZGl0aW9uOyBpdCBkaWQgbm90LiAKCgojIyMgQXR0cml0aW9uIGJ5IENvbmRpdGlvbgoKIyMjIyBSZXN1bHRzIGZvciBNYW51c2NyaXB0OgpUaGUgY29uZGl0aW9ucyBkaWQgbm90IHNpZ25pZmljYW50bHkgZGlmZmVyIG9uIGFueSBvZiB0aGUgYmFzZWxpbmUgbWVhc3VyZXMgb2Ygb3V0Y29tZXMgb3IgYnkgYWdlLiBBdHRyaXRpb24gcmF0ZXMgd2VyZSBsb3cgYWNyb3NzIGJvdGggY29uZGl0aW9ucywgd2l0aCA5LjIlIG9mIHBhcnRpY2lwYW50cyBpbiB0aGUgUHVycmJsZSBjb25kaXRpb24gYW5kIDYuNSUgaW4gdGhlIFdhaXRsaXN0IENvbnRyb2wgY29uZGl0aW9uIG5vdCBjb21wbGV0aW5nIHRoZSBzdHVkeS4gIEF0dHJpdGlvbiBkaWQgbm90IGRpZmZlciBieSBjb25kaXRpb24sIM+HwrIoMSkgPSAwLjExLCBwID0gLjc1LCBvciBieSBnZW5kZXIgaWRlbnRpdHksIM+HwrIoMSkgPCAwLjAxLCBwID0gMS4KCmBgYHtyfQojIExvYWQgcmVxdWlyZWQgbGlicmFyaWVzCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKCiMjIFJldmlzZWQgQXR0cml0aW9uIEFuYWx5c2lzIHdpdGggQ29tcGxldGVkIGFuZCBOb3QgQ29tcGxldGVkIENvdW50cwoKIyBEZWZpbmUgcG9zdC10ZXN0IGF0dGVuZGFuY2UgY29sdW1ucyAoV2Vla3MgMTEsIDEyLCAxMykKcG9zdF90ZXN0X2NvbHMgPC0gYygiV2Vla18xMSIsICJXZWVrXzEyIiwgIldlZWtfMTMiKQoKIyBDcmVhdGUgYXR0cml0aW9uIGluZGljYXRvcjogcG9zdF90ZXN0X2NvbXBsZXRlID0gMSBpZiBhbnkgcG9zdC10ZXN0IHNlc3Npb24gYXR0ZW5kZWQsIDAgb3RoZXJ3aXNlClB1cnJibGVfTWFzdGVyX1dpZGUgPC0gUHVycmJsZV9NYXN0ZXJfV2lkZSAlPiUKICBtdXRhdGUocG9zdF90ZXN0X2NvbXBsZXRlID0gaWZfZWxzZShyb3dTdW1zKGFjcm9zcyhhbGxfb2YocG9zdF90ZXN0X2NvbHMpKSkgPiAwLCAxLCAwKSkKCiMgLS0tIFN0YXRpc3RpY2FsIFRlc3RzIGZvciBBdHRyaXRpb24gYnkgQ29uZGl0aW9uIC0tLQoKIyBDcmVhdGUgYSBjb250aW5nZW5jeSB0YWJsZSBmb3IgY29uZGl0aW9uIGJ5IHBvc3QtdGVzdCBjb21wbGV0aW9uIHN0YXR1cwphdHRyaXRpb25fY3QgPC0gdGFibGUoUHVycmJsZV9NYXN0ZXJfV2lkZSRjb25kaXRpb24sIFB1cnJibGVfTWFzdGVyX1dpZGUkcG9zdF90ZXN0X2NvbXBsZXRlKQoKIyBDaGktc3F1YXJlIHRlc3QgZm9yIGRpZmZlcmVuY2VzIGluIGF0dHJpdGlvbiBieSBjb25kaXRpb24KY2hpX3Jlc3VsdCA8LSBjaGlzcS50ZXN0KGF0dHJpdGlvbl9jdCkKY2F0KCJDaGktc3F1YXJlIHRlc3QgZm9yIGRpZmZlcmVuY2VzIGluIGF0dHJpdGlvbiBieSBjb25kaXRpb246XG4iKQpwcmludChjaGlfcmVzdWx0KQoKIyBBdHRyaXRpb24gYnkgQ29uZGl0aW9uIHdpdGggYWRkaXRpb25hbCBjb2x1bW5zIGZvciBDb21wbGV0ZWQgYW5kIE5vdCBDb21wbGV0ZWQgY291bnRzCmF0dHJpdGlvbl9ieV9jb25kaXRpb24gPC0gUHVycmJsZV9NYXN0ZXJfV2lkZSAlPiUKICBncm91cF9ieShjb25kaXRpb24pICU+JQogIHN1bW1hcml6ZSgKICAgIG4gPSBuKCksCiAgICBDb21wbGV0ZWQgPSBzdW0ocG9zdF90ZXN0X2NvbXBsZXRlLCBuYS5ybSA9IFRSVUUpLAogICAgTm90X0NvbXBsZXRlZCA9IG4gLSBDb21wbGV0ZWQsCiAgICBhdHRyaXRpb25fcmF0ZSA9IDEgLSBtZWFuKHBvc3RfdGVzdF9jb21wbGV0ZSwgbmEucm0gPSBUUlVFKSwKICAgIGF0dHJpdGlvbl9wZXJjZW50ID0gcm91bmQoYXR0cml0aW9uX3JhdGUgKiAxMDAsIDEpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICkKCgojIERpc3BsYXkgdGhlIEFQQS1mb3JtYXR0ZWQgdGFibGVzIGZvciB0aGUgcmV2aXNlZCBhdHRyaXRpb24gYW5hbHlzZXMKYXR0cml0aW9uX2J5X2NvbmRpdGlvbiAlPiUKICBrYWJsZShjYXB0aW9uID0gIlRhYmxlIDc6IEF0dHJpdGlvbiBSYXRlIGJ5IENvbmRpdGlvbiAod2l0aCBDb21wbGV0ZWQgYW5kIE5vdCBDb21wbGV0ZWQgY291bnRzKSIsIGZvcm1hdCA9ICJtYXJrZG93biIpICU+JQogIGthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFKQpgYGAKCiMjIyBBdHRyaXRpb24gYnkgYmFzZWxpbmUgT3V0Y29tZXMKYGBge3J9CiMgTG9hZCByZXF1aXJlZCBsaWJyYXJpZXMKbGlicmFyeShkcGx5cikKbGlicmFyeShicm9vbSkKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQoKIyBFbnN1cmUgdGhhdCB0aGUgYXR0cml0aW9uIGluZGljYXRvciBpcyBhbHJlYWR5IGluIHRoZSBkYXRhc2V0OgojIChwb3N0X3Rlc3RfY29tcGxldGUgPSAxIGlmIGF0dGVuZGVkIGFueSBwb3N0LXRlc3Qgc2Vzc2lvbiwgMCBvdGhlcndpc2UpCiMgQ3JlYXRlIGFuIGF0dHJpdGlvbl9zdGF0dXMgdmFyaWFibGU6ICJDb21wbGV0ZXIiIGlmIHBvc3RfdGVzdF9jb21wbGV0ZSBpcyAxLCBlbHNlICJBdHRyaXRlciIKUHVycmJsZV9NYXN0ZXJfV2lkZSA8LSBQdXJyYmxlX01hc3Rlcl9XaWRlICU+JQogIG11dGF0ZShhdHRyaXRpb25fc3RhdHVzID0gaWZfZWxzZShwb3N0X3Rlc3RfY29tcGxldGUgPT0gMSwgIkNvbXBsZXRlciIsICJBdHRyaXRlciIpKQoKIyBDb252ZXJ0ICdjb25kaXRpb24nIGFuZCAnYXR0cml0aW9uX3N0YXR1cycgdG8gZmFjdG9ycwpQdXJyYmxlX01hc3Rlcl9XaWRlIDwtIFB1cnJibGVfTWFzdGVyX1dpZGUgJT4lCiAgbXV0YXRlKGNvbmRpdGlvbiA9IGFzLmZhY3Rvcihjb25kaXRpb24pLAogICAgICAgICBhdHRyaXRpb25fc3RhdHVzID0gYXMuZmFjdG9yKGF0dHJpdGlvbl9zdGF0dXMpKQoKIyBEZWZpbmUgcHJl4oCRdGVzdCB2YXJpYWJsZSBuYW1lcwpwcmVfdmFycyAgPC0gYygiUHJlX0RFUlM4X1N1bSIsICJQcmVfR0FEN19TdW0iLCAiUHJlX1BIUTlfU3VtIiwKICAgICAgICAgICAgICAgIlByZV9TSFNfUGF0aHdheXMiLCAiUHJlX1NIU19BZ2VuY3kiLCAiUHJlX1NIU19Ub3RhbEhvcGUiLAogICAgICAgICAgICAgICAiUHJlX3VjbGFfU3VtIiwgIlByZV9wbWVycV9Gb2N1c19BdmciLCAiUHJlX3BtZXJxX0Rpc3RyYWN0X0F2ZyIsICJQcmVfcG1lcnFfQURfQXZnIikKCiMgUnVuIHR3by13YXkgQU5PVkFzIGZvciBlYWNoIHByZS10ZXN0IHZhcmlhYmxlIHVzaW5nIGNvbmRpdGlvbiBhbmQgYXR0cml0aW9uX3N0YXR1cyBhcyBmYWN0b3JzLAojIHRoZW4gdGlkeSBhbmQgZGlzcGxheSB0aGUgcmVzdWx0cy4KYW5vdmFfdGFibGVfbGlzdCA8LSBsYXBwbHkocHJlX3ZhcnMsIGZ1bmN0aW9uKHZhcikgewogICMgQ3JlYXRlIHRoZSBmb3JtdWxhOiBlLmcuLCBQcmVfUEhROV9TdW0gfiBjb25kaXRpb24gKiBhdHRyaXRpb25fc3RhdHVzCiAgbW9kZWwgPC0gYW92KGFzLmZvcm11bGEocGFzdGUodmFyLCAifiBjb25kaXRpb24gKiBhdHRyaXRpb25fc3RhdHVzIikpLCBkYXRhID0gUHVycmJsZV9NYXN0ZXJfV2lkZSkKICB0aWR5KG1vZGVsKQp9KQpuYW1lcyhhbm92YV90YWJsZV9saXN0KSA8LSBwcmVfdmFycwoKIyBQcmludCBhIHNlcGFyYXRlIEFQQS1zdHlsZWQgdGFibGUgZm9yIGVhY2ggcHJlLXRlc3QgdmFyaWFibGUncyBBTk9WQSByZXN1bHRzCmZvciAodmFyIGluIHByZV92YXJzKSB7CiAgY2F0KCJUd28td2F5IEFOT1ZBIHJlc3VsdHMgZm9yIiwgdmFyLCAiOlxuIikKICBwcmludChrYWJsZShhbm92YV90YWJsZV9saXN0W1t2YXJdXSwgZGlnaXRzID0gMywKICAgICAgICAgICAgICBjYXB0aW9uID0gcGFzdGUoIlR3by13YXkgQU5PVkEgZm9yIiwgdmFyLCAiYnkgQ29uZGl0aW9uIGFuZCBBdHRyaXRpb24gU3RhdHVzIiksCiAgICAgICAgICAgICAgZm9ybWF0ID0gIm1hcmtkb3duIikgJT4lCiAgICAgICAgICBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBGQUxTRSkpCiAgY2F0KCJcblxuIikKfQoKYGBgCgoKCgojIyMjIEF0dHJpdGlvbiBieSBiYXNlbGluZSBPdXRjb21lcyBmb2xsb3ctdXAvZXhwbG9yYWl0b24KCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHJlbXBzeWMpICAgIyBmb3IgbmljZV90YWJsZQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGthYmxlRXh0cmEpCgojIEVuc3VyZSB0aGF0IGNvbmRpdGlvbiBhbmQgYXR0cml0aW9uX3N0YXR1cyBhcmUgZmFjdG9ycwpQdXJyYmxlX01hc3Rlcl9XaWRlIDwtIFB1cnJibGVfTWFzdGVyX1dpZGUgJT4lCiAgbXV0YXRlKGNvbmRpdGlvbiA9IGFzLmZhY3Rvcihjb25kaXRpb24pLAogICAgICAgICBhdHRyaXRpb25fc3RhdHVzID0gYXMuZmFjdG9yKGF0dHJpdGlvbl9zdGF0dXMpKQoKIyBDb21wdXRlIGRlc2NyaXB0aXZlcyBmb3IgUHJlX3VjbGFfU3VtIGJ5IGNvbmRpdGlvbiBhbmQgYXR0cml0aW9uX3N0YXR1cwpncm91cF9kZXNjIDwtIFB1cnJibGVfTWFzdGVyX1dpZGUgJT4lCiAgZ3JvdXBfYnkoY29uZGl0aW9uLCBhdHRyaXRpb25fc3RhdHVzKSAlPiUKICBzdW1tYXJpc2UoCiAgICBOID0gbigpLAogICAgTWVhbiA9IHJvdW5kKG1lYW4oUHJlX3VjbGFfU3VtLCBuYS5ybSA9IFRSVUUpLCAyKSwKICAgIFNEID0gcm91bmQoc2QoUHJlX3VjbGFfU3VtLCBuYS5ybSA9IFRSVUUpLCAyKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICApCgojIERpc3BsYXkgdGhlIGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgdGFibGUgdXNpbmcgcmVtcHN5YydzIG5pY2VfdGFibGUKbmljZV90YWJsZShncm91cF9kZXNjLCAKICAgICAgICAgICB0aXRsZSA9ICJEZXNjcmlwdGl2ZSBTdGF0aXN0aWNzIGZvciBQcmVfdWNsYV9TdW0gYnkgQ29uZGl0aW9uIGFuZCBBdHRyaXRpb24gU3RhdHVzIiwgCiAgICAgICAgICAgbm90ZSA9ICJNZWFucyBhbmQgc3RhbmRhcmQgZGV2aWF0aW9ucyBmb3IgUHJlX3VjbGFfU3VtIGFjcm9zcyBmb3VyIGdyb3VwcyBkZWZpbmVkIGJ5IGNvbmRpdGlvbiAoUHVycmJsZSwgV2FpdGxpc3QgQ29udHJvbCkgYW5kIGF0dHJpdGlvbiBzdGF0dXMgKENvbXBsZXRlciwgQXR0cml0ZXIpLiIpCgpgYGAKCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHJlbXBzeWMpICAgIyBmb3IgbmljZV90X3Rlc3QgYW5kIG5pY2VfdGFibGUKCiMgRW5zdXJlIHRoYXQgY29uZGl0aW9uIGFuZCBhdHRyaXRpb25fc3RhdHVzIGFyZSBmYWN0b3JzClB1cnJibGVfTWFzdGVyX1dpZGUgPC0gUHVycmJsZV9NYXN0ZXJfV2lkZSAlPiUKICBtdXRhdGUoY29uZGl0aW9uID0gYXMuZmFjdG9yKGNvbmRpdGlvbiksCiAgICAgICAgIGF0dHJpdGlvbl9zdGF0dXMgPSBhcy5mYWN0b3IoYXR0cml0aW9uX3N0YXR1cykpCgojIFNpbXBsZSBFZmZlY3RzIEFuYWx5c2lzIGZvciBQcmVfdWNsYV9TdW0gYnkgYXR0cml0aW9uX3N0YXR1cyB3aXRoaW4gdGhlIFB1cnJibGUgY29uZGl0aW9uCnB1cnJibGVfdHRlc3QgPC0gbmljZV90X3Rlc3QoCiAgZGF0YSA9IFB1cnJibGVfTWFzdGVyX1dpZGUgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gIjEiKSwKICByZXNwb25zZSA9ICJQcmVfdWNsYV9TdW0iLAogIGdyb3VwID0gImF0dHJpdGlvbl9zdGF0dXMiLAogIHdhcm5pbmcgPSBGQUxTRQopCgojIFNpbXBsZSBFZmZlY3RzIEFuYWx5c2lzIGZvciBQcmVfdWNsYV9TdW0gYnkgYXR0cml0aW9uX3N0YXR1cyB3aXRoaW4gdGhlIFdhaXRsaXN0IENvbnRyb2wgY29uZGl0aW9uCndhaXRsaXN0X3R0ZXN0IDwtIG5pY2VfdF90ZXN0KAogIGRhdGEgPSBQdXJyYmxlX01hc3Rlcl9XaWRlICU+JSBmaWx0ZXIoY29uZGl0aW9uID09ICIwIiksCiAgcmVzcG9uc2UgPSAiUHJlX3VjbGFfU3VtIiwKICBncm91cCA9ICJhdHRyaXRpb25fc3RhdHVzIiwKICB3YXJuaW5nID0gRkFMU0UKKQoKIyBEaXNwbGF5IHRoZSByZXN1bHRzIHVzaW5nIHJlbXBzeWMncyBuaWNlX3RhYmxlCmNhdCgiU2ltcGxlIEVmZmVjdHMgQW5hbHlzaXM6IFByZV91Y2xhX1N1bSBieSBBdHRyaXRpb24gU3RhdHVzIHdpdGhpbiB0aGUgUHVycmJsZSBDb25kaXRpb25cbiIpCm5pY2VfdGFibGUocHVycmJsZV90dGVzdCkKCmNhdCgiXG5TaW1wbGUgRWZmZWN0cyBBbmFseXNpczogUHJlX3VjbGFfU3VtIGJ5IEF0dHJpdGlvbiBTdGF0dXMgd2l0aGluIHRoZSBXYWl0bGlzdCBDb250cm9sIENvbmRpdGlvblxuIikKbmljZV90YWJsZSh3YWl0bGlzdF90dGVzdCkKCmBgYAoKCiMjIyBBdHRyaXRpb24gYnkgR2VuZGVyIElkZW50aXR5CgpgYGB7cn0KIyBMb2FkIHJlcXVpcmVkIGxpYnJhcmllcwpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGthYmxlRXh0cmEpCgojIyBSZXZpc2VkIEF0dHJpdGlvbiBBbmFseXNpcyB3aXRoIENvbXBsZXRlZCBhbmQgTm90IENvbXBsZXRlZCBDb3VudHMKCiMgRGVmaW5lIHBvc3QtdGVzdCBhdHRlbmRhbmNlIGNvbHVtbnMgKFdlZWtzIDExLCAxMiwgMTMpCnBvc3RfdGVzdF9jb2xzIDwtIGMoIldlZWtfMTEiLCAiV2Vla18xMiIsICJXZWVrXzEzIikKCiMgQ3JlYXRlIGF0dHJpdGlvbiBpbmRpY2F0b3I6IHBvc3RfdGVzdF9jb21wbGV0ZSA9IDEgaWYgYW55IHBvc3QtdGVzdCBzZXNzaW9uIGF0dGVuZGVkLCAwIG90aGVyd2lzZQpQdXJyYmxlX01hc3Rlcl9XaWRlIDwtIFB1cnJibGVfTWFzdGVyX1dpZGUgJT4lCiAgbXV0YXRlKHBvc3RfdGVzdF9jb21wbGV0ZSA9IGlmX2Vsc2Uocm93U3VtcyhhY3Jvc3MoYWxsX29mKHBvc3RfdGVzdF9jb2xzKSkpID4gMCwgMSwgMCkpCgojIC0tLSBTdGF0aXN0aWNhbCBUZXN0cyBmb3IgQXR0cml0aW9uIGJ5IENvbmRpdGlvbiAtLS0KCiMgQ3JlYXRlIGEgY29udGluZ2VuY3kgdGFibGUgZm9yIGNvbmRpdGlvbiBieSBwb3N0LXRlc3QgY29tcGxldGlvbiBzdGF0dXMKYXR0cml0aW9uX2N0IDwtIHRhYmxlKFB1cnJibGVfTWFzdGVyX1dpZGUkaWRlbnRpdHlfZ3JvdXAsIFB1cnJibGVfTWFzdGVyX1dpZGUkcG9zdF90ZXN0X2NvbXBsZXRlKQoKIyBDaGktc3F1YXJlIHRlc3QgZm9yIGRpZmZlcmVuY2VzIGluIGF0dHJpdGlvbiBieSBkbwpjaGlfcmVzdWx0IDwtIGNoaXNxLnRlc3QoYXR0cml0aW9uX2N0KQpjYXQoIkNoaS1zcXVhcmUgdGVzdCBmb3IgZGlmZmVyZW5jZXMgaW4gYXR0cml0aW9uIGJ5IGdlbmRlciBpZGVudGl0eTpcbiIpCnByaW50KGNoaV9yZXN1bHQpCgojIEF0dHJpdGlvbiBieSBHZW5kZXIgSWRlbnRpdHkgd2l0aCBhZGRpdGlvbmFsIGNvdW50cwphdHRyaXRpb25fYnlfaWRlbnRpdHkgPC0gUHVycmJsZV9NYXN0ZXJfV2lkZSAlPiUKICBncm91cF9ieShpZGVudGl0eV9ncm91cCkgJT4lCiAgc3VtbWFyaXplKAogICAgbiA9IG4oKSwKICAgIENvbXBsZXRlZCA9IHN1bShwb3N0X3Rlc3RfY29tcGxldGUsIG5hLnJtID0gVFJVRSksCiAgICBOb3RfQ29tcGxldGVkID0gbiAtIENvbXBsZXRlZCwKICAgIGF0dHJpdGlvbl9yYXRlID0gMSAtIG1lYW4ocG9zdF90ZXN0X2NvbXBsZXRlLCBuYS5ybSA9IFRSVUUpLAogICAgYXR0cml0aW9uX3BlcmNlbnQgPSByb3VuZChhdHRyaXRpb25fcmF0ZSAqIDEwMCwgMSksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgKQoKYXR0cml0aW9uX2J5X2lkZW50aXR5ICU+JQogIGthYmxlKGNhcHRpb24gPSAiVGFibGUgODogQXR0cml0aW9uIFJhdGUgYnkgR2VuZGVyIElkZW50aXR5ICh3aXRoIENvbXBsZXRlZCBhbmQgTm90IENvbXBsZXRlZCBjb3VudHMpIiwgZm9ybWF0ID0gIm1hcmtkb3duIikgJT4lCiAga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gRkFMU0UpCmBgYAoKIyBQcmVsaW1pbmFyeSBBbmFseXNpcyAKCgoKCiMjIEJhc2VsaW5lIERpZmZlcmVuY2VzIGluIE91dGNvbWVzIGJ5IENvbmRpdGlvbgoKIyMjIE91dGxpZXIgRGV0ZWN0aW9uIGFuZCBWaXN1YWxpemF0aW9uIDoKV2UgZmlyc3QgY29udmVydCBlYWNoIHByZeKAkXRlc3QgdmFyaWFibGUgdG8geuKAkXNjb3JlcyBhbmQgZmxhZyBhbnkgb2JzZXJ2YXRpb25zIHdpdGggYW4gYWJzb2x1dGUgeuKAkXNjb3JlIGdyZWF0ZXIgdGhhbiAzIGFzIHBvdGVudGlhbCBvdXRsaWVycy4gQSBzdW1tYXJ5IHRhYmxlIGlzIGNyZWF0ZWQgdGhhdCBsaXN0cyB0aGUgbnVtYmVyIG9mIG91dGxpZXJzIGZvciBlYWNoIHZhcmlhYmxlLiBXZSB0aGVuIHNwZWNpZmljYWxseSBpbnNwZWN0IHRoZSBvdXRsaWVycyBmb3IgdGhlIFByZV9wbWVycV9Gb2N1c19BdmcgdmFyaWFibGUsIHdoaWNoIGFwcGVhcnMgdG8gaGF2ZSB0d28gY2FzZXMgZXhjZWVkaW5nIG91ciB0aHJlc2hvbGQuClRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBkaXN0cmlidXRpb24gb2YgUHJlX3BtZXJxX0ZvY3VzX0F2Zywgd2UgZ2VuZXJhdGUgYSBib3hwbG90ICh3aXRoIGppdHRlcmVkIGRhdGEgcG9pbnRzKSB0aGF0IHZpc3VhbGx5IGhpZ2hsaWdodHMgdGhlIGV4dHJlbWUgdmFsdWVzLgoKYGBge3J9CmxpYnJhcnkocmVtcHN5YykKbGlicmFyeShkcGx5cikKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQoKIyBEZWZpbmUgcHJl4oCRdGVzdCB2YXJpYWJsZSBuYW1lcyAKcHJlX3ZhcnMgIDwtIGMoIlByZV9ERVJTOF9TdW0iLCAiUHJlX0dBRDdfU3VtIiwgIlByZV9QSFE5X1N1bSIsCiAgICAgICAgICAgICAgICJQcmVfU0hTX1BhdGh3YXlzIiwgIlByZV9TSFNfQWdlbmN5IiwgIlByZV9TSFNfVG90YWxIb3BlIiwKICAgICAgICAgICAgICAgIlByZV91Y2xhX1N1bSIsICJQcmVfcG1lcnFfRm9jdXNfQXZnIiwgIlByZV9wbWVycV9EaXN0cmFjdF9BdmciLCAiUHJlX3BtZXJxX0FEX0F2ZyIpCgojIFNldCB0aHJlc2hvbGQgZm9yIG91dGxpZXJzIChjb21tb25seSB8enwgPiAzKQp0aHJlc2hvbGQgPC0gMwoKIyBDb21wdXRlIHotc2NvcmVzIGFuZCBpZGVudGlmeSBvdXRsaWVycyBmb3IgZWFjaCBwcmUtdGVzdCB2YXJpYWJsZQpvdXRsaWVyX2xpc3QgPC0gbGFwcGx5KHByZV92YXJzLCBmdW5jdGlvbih2YXIpIHsKICBQdXJyYmxlX01hc3Rlcl9XaWRlICU+JQogICAgc2VsZWN0KHBzaWQsIGFsbF9vZih2YXIpKSAlPiUKICAgIG11dGF0ZSh6ID0gYXMubnVtZXJpYyhzY2FsZShnZXQodmFyKSkpKSAlPiUKICAgIGZpbHRlcihhYnMoeikgPiB0aHJlc2hvbGQpCn0pCm5hbWVzKG91dGxpZXJfbGlzdCkgPC0gcHJlX3ZhcnMKCiMgQ3JlYXRlIGEgc3VtbWFyeSB0YWJsZSBvZiB0aGUgbnVtYmVyIG9mIG91dGxpZXJzIHBlciB2YXJpYWJsZQpvdXRsaWVyX3N1bW1hcnkgPC0gc2FwcGx5KG91dGxpZXJfbGlzdCwgbnJvdykKb3V0bGllcl9zdW1tYXJ5X2RmIDwtIGRhdGEuZnJhbWUoVmFyaWFibGUgPSBuYW1lcyhvdXRsaWVyX3N1bW1hcnkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0bGllcl9Db3VudCA9IGFzLnZlY3RvcihvdXRsaWVyX3N1bW1hcnkpKQoKY2F0KCJTdW1tYXJ5IG9mIFBvdGVudGlhbCBPdXRsaWVycyAofHp8ID4gMykgZm9yIFByZS1UZXN0IFZhcmlhYmxlczpcbiIpCnByaW50KGthYmxlKG91dGxpZXJfc3VtbWFyeV9kZiwgY2FwdGlvbiA9ICJTdW1tYXJ5IG9mIE91dGxpZXJzIGZvciBQcmUtVGVzdCBWYXJpYWJsZXMgKHx6fCA+IDMpIiwgZm9ybWF0ID0gIm1hcmtkb3duIikpCgoKY2F0KCJcbk91dGxpZXJzIGZvciBQcmVfcG1lcnFfRm9jdXNfQXZnICh8enwgPiAzKTpcbiIpCnByaW50KGthYmxlKG91dGxpZXJfbGlzdFtbIlByZV9wbWVycV9Gb2N1c19BdmciXV0sIGNhcHRpb24gPSAiT3V0bGllcnMgZm9yIFByZV9wbWVycV9Gb2N1c19BdmciLCBmb3JtYXQgPSAibWFya2Rvd24iKSkKCmxpYnJhcnkoZ2dwbG90MikKCiMgQm94cGxvdCBmb3IgUHJlX3BtZXJxX0ZvY3VzX0F2ZwpnZ3Bsb3QoUHVycmJsZV9NYXN0ZXJfV2lkZSwgYWVzKHggPSAiIiwgeSA9IFByZV9wbWVycV9Gb2N1c19BdmcpKSArCiAgZ2VvbV9ib3hwbG90KG91dGxpZXIuY29sb3VyID0gInJlZCIsIG91dGxpZXIuc2hhcGUgPSAxNiwgb3V0bGllci5zaXplID0gMykgKwogIGdlb21faml0dGVyKHdpZHRoID0gMC4xLCBhbHBoYSA9IDAuNiwgY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHRpdGxlID0gIkJveHBsb3Qgb2YgUHJlX3BtZXJxX0ZvY3VzX0F2ZyIsCiAgICAgICB4ID0gIiIsCiAgICAgICB5ID0gIlByZV9wbWVycV9Gb2N1c19BdmciKSArCiAgdGhlbWVfbWluaW1hbCgpCmBgYAoKCiMjIyBEZXNjcmlwdGl2ZSBTdGF0aXN0aWNzIG9mIEJhc2VsaW5lIE91dGNvbWVzOgpXZSBjb21wdXRlIGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgKG1lYW4sIHN0YW5kYXJkIGRldmlhdGlvbiwgbWluaW11bSwgbWF4aW11bSwgc2tld25lc3MsIGFuZCBrdXJ0b3NpcykgZm9yIGFsbCBwcmXigJF0ZXN0IHZhcmlhYmxlcyB1c2luZyB0aGUgcHN5Y2ggcGFja2FnZS4gVGhlIHJlc3VsdGluZyBzdW1tYXJ5IGlzIHRoZW4gZm9ybWF0dGVkIGludG8gYW4gQVBB4oCRc3R5bGUgdGFibGUgdXNpbmcgdGhlIG5pY2VfdGFibGUgZnVuY3Rpb24gZnJvbSB0aGUgcmVtcHN5YyBwYWNrYWdlLgoKYGBge3J9CmxpYnJhcnkocmVtcHN5YykKbGlicmFyeShkcGx5cikKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQoKIyBEZWZpbmUgcHJl4oCRdGVzdCB2YXJpYWJsZSBuYW1lcyAKcHJlX3ZhcnMgIDwtIGMoIlByZV9ERVJTOF9TdW0iLCAiUHJlX0dBRDdfU3VtIiwgIlByZV9QSFE5X1N1bSIsCiAgICAgICAgICAgICAgICJQcmVfU0hTX1BhdGh3YXlzIiwgIlByZV9TSFNfQWdlbmN5IiwgIlByZV9TSFNfVG90YWxIb3BlIiwKICAgICAgICAgICAgICAgIlByZV91Y2xhX1N1bSIsICJQcmVfcG1lcnFfRm9jdXNfQXZnIiwgIlByZV9wbWVycV9EaXN0cmFjdF9BdmciLCAiUHJlX3BtZXJxX0FEX0F2ZyIpCgojIENvbXB1dGUgZGVzY3JpcHRpdmUgc3RhdGlzdGljcyB1c2luZyBwc3ljaDo6ZGVzY3JpYmUgZm9yIHRoZSBwcmUtdGVzdCB2YXJpYWJsZXMKZGVzY19wcmUgPC0gZGVzY3JpYmUoUHVycmJsZV9NYXN0ZXJfV2lkZVssIHByZV92YXJzXSkKCiMgQ29udmVydCB0aGUgb3V0cHV0IHRvIGEgbmVhdCBkYXRhIGZyYW1lIHdpdGggZGVzaXJlZCBjb2x1bW5zLgojICdkZXNjcmliZScgcmV0dXJucyByb3duYW1lcyBhcyB2YXJpYWJsZSBuYW1lcy4KZGVzY190YWJsZSA8LSBkYXRhLmZyYW1lKAogIFZhcmlhYmxlID0gcm93bmFtZXMoZGVzY19wcmUpLAogIE1lYW4gPSByb3VuZChkZXNjX3ByZSRtZWFuLCAyKSwKICBTRCA9IHJvdW5kKGRlc2NfcHJlJHNkLCAyKSwKICBNaW4gPSBkZXNjX3ByZSRtaW4sCiAgTWF4ID0gZGVzY19wcmUkbWF4LAogIFNrZXcgPSByb3VuZChkZXNjX3ByZSRza2V3LCAyKSwKICBLdXJ0b3NpcyA9IHJvdW5kKGRlc2NfcHJlJGt1cnRvc2lzLCAyKQopCgojIERpc3BsYXkgdGhlIHRhYmxlIGluIEFQQSBzdHlsZSB1c2luZyByZW1wc3ljJ3MgbmljZV90YWJsZQpuaWNlX3RhYmxlKGRlc2NfdGFibGUpCgpgYGAKCiMjIyBCYXNlbGluZSBFcXVpdmFsZW5jZSBvZiBCYXNlbGluZSBPdXRjb21lcyAodOKAkVRlc3RzKToKRmluYWxseSwgd2UgcnVuIGluZGVwZW5kZW50IHNhbXBsZXMgdOKAkXRlc3RzIGNvbXBhcmluZyB0aGUgdHdvIGV4cGVyaW1lbnRhbCBjb25kaXRpb25zIG9uIGVhY2ggcHJl4oCRdGVzdCB2YXJpYWJsZSB1c2luZyBuaWNlX3RfdGVzdCBmcm9tIHJlbXBzeWMuIFRoaXMgcHJvdmlkZXMgdOKAkXN0YXRpc3RpY3MsIGRlZ3JlZXMgb2YgZnJlZWRvbSwgcOKAkXZhbHVlcywgZWZmZWN0IHNpemVzIChDb2hlbidzIGQpLCBhbmQgY29uZmlkZW5jZSBpbnRlcnZhbHMsIGFsbCBmb3JtYXR0ZWQgaW50byBhbiBBUEHigJFzdHlsZSB0YWJsZS4KCiMjIyMjIFJlc3VsdDogTm8gZGlmZmVyZW5jZXMgYnkgY2hhbmNlLgoKYGBge3J9CmxpYnJhcnkocmVtcHN5YykKbGlicmFyeShkcGx5cikKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQoKIyBEZWZpbmUgcHJl4oCRdGVzdCB2YXJpYWJsZSBuYW1lcyAKcHJlX3ZhcnMgIDwtIGMoIlByZV9ERVJTOF9TdW0iLCAiUHJlX0dBRDdfU3VtIiwgIlByZV9QSFE5X1N1bSIsCiAgICAgICAgICAgICAgICJQcmVfU0hTX1BhdGh3YXlzIiwgIlByZV9TSFNfQWdlbmN5IiwgIlByZV9TSFNfVG90YWxIb3BlIiwKICAgICAgICAgICAgICAgIlByZV91Y2xhX1N1bSIsICJQcmVfcG1lcnFfRm9jdXNfQXZnIiwgIlByZV9wbWVycV9EaXN0cmFjdF9BdmciLCAiUHJlX3BtZXJxX0FEX0F2ZyIpCgoKIyBSdW4gdC10ZXN0cyBmb3IgYWxsIHByZeKAkXRlc3Qgb3V0Y29tZXMgYnkgY29uZGl0aW9uCnN0YXRzLnRhYmxlLnByZSA8LSBuaWNlX3RfdGVzdCgKICBkYXRhID0gUHVycmJsZV9NYXN0ZXJfV2lkZSwKICByZXNwb25zZSA9IHByZV92YXJzLAogIGdyb3VwID0gImNvbmRpdGlvbiIsCiAgd2FybmluZyA9IEZBTFNFCikKCiMgRGlzcGxheSB0aGUgcHJl4oCRdGVzdCB0LXRlc3QgdGFibGUgaW4gQVBBIHN0eWxlCm5pY2VfdGFibGUoc3RhdHMudGFibGUucHJlKQpgYGAKCiMgTWFpbiBFZmZlY3RzIEFuYWx5c2VzCgpgYGB7cn0KbGlicmFyeShkcGx5cikKbGlicmFyeShyZW1wc3ljKSAgICMgZm9yIG5pY2VfbG0gYW5kIG5pY2VfdGFibGUKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQoKIyBEZWZpbmUgcG9zdOKAkXRlc3Qgb3V0Y29tZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgcHJl4oCRdGVzdCBjb3ZhcmlhdGVzCnBvc3RfdmFycyA8LSBjKCJQb3N0X0RFUlM4X1N1bSIsICJQb3N0X3BtZXJxX0ZvY3VzX0F2ZyIsICJQb3N0X3BtZXJxX0Rpc3RyYWN0X0F2ZyIsIAogICAgICAgICAgICAgICAiUG9zdF9wbWVycV9BRF9BdmciLCAiUG9zdF9HQUQ3X1N1bSIsICJQb3N0X1BIUTlfU3VtIiwgCiAgICAgICAgICAgICAgICJQb3N0X1NIU19QYXRod2F5cyIsICJQb3N0X1NIU19BZ2VuY3kiLCAiUG9zdF9TSFNfVG90YWxIb3BlIiwgIlBvc3RfdWNsYV9TdW0iKQpwcmVfdmFycyAgPC0gc3ViKCJeUG9zdF8iLCAiUHJlXyIsIHBvc3RfdmFycykKCiMgQ3JlYXRlIGFuIGVtcHR5IGxpc3QgdG8gc3RvcmUgcmVncmVzc2lvbiBtb2RlbHMKbW9kZWxfbGlzdCA8LSBsaXN0KCkKCiMgTG9vcCB0aHJvdWdoIGVhY2ggb3V0Y29tZSBwYWlyCmZvciAoaSBpbiBzZXFfYWxvbmcocG9zdF92YXJzKSkgewogIG91dGNvbWUgPC0gcG9zdF92YXJzW2ldCiAgcHJlX3ZhciA8LSBwcmVfdmFyc1tpXQogIAogICMgRml0IHRoZSByZWdyZXNzaW9uIG1vZGVsOgogICMgT3V0Y29tZSB+IGNvbmRpdGlvbl9udW0gKyBjb3JyZXNwb25kaW5nIHByZS10ZXN0IG91dGNvbWUgKyBpZGVudGl0eV9ncm91cF9udW0gKyBhZ2UKICBmb3JtdWxhX3N0ciA8LSBwYXN0ZShvdXRjb21lLCAifiBjb25kaXRpb25fbnVtICsiLCBwcmVfdmFyLCAiKyBpZGVudGl0eV9ncm91cF9udW0gKyBhZ2UiKQogIG1vZGVsX2xpc3RbW291dGNvbWVdXSA8LSBsbShhcy5mb3JtdWxhKGZvcm11bGFfc3RyKSwgZGF0YSA9IFB1cnJibGVfTWFzdGVyX1dpZGUpCn0KCiMgRm9ybWF0IHRoZSBsaXN0IG9mIG1vZGVscyB1c2luZyByZW1wc3ljJ3MgbmljZV9sbSgpIGZ1bmN0aW9uCiMgVGhpcyB3aWxsIHByb2R1Y2UgYSBjb21iaW5lZCB0YWJsZSBmb3IgYWxsIG1vZGVscywgaGlnaGxpZ2h0aW5nIHRoZSBlZmZlY3Qgb2YgY29uZGl0aW9uX251bS4KcmVzdWx0c190YWJsZSA8LSBuaWNlX2xtKG1vZGVsX2xpc3QpCgojIERpc3BsYXkgdGhlIHRhYmxlIGluIEFQQSBmb3JtYXQgdXNpbmcgbmljZV90YWJsZQpuaWNlX3RhYmxlKHJlc3VsdHNfdGFibGUsIGhpZ2hsaWdodCA9IFRSVUUpCgpgYGAKCgojIyBFbW90aW9uIFJlZ3VsYXRpb24gT3V0Y29tZXM6IE1vZGVyYXRpb24gTW9kZWxzCgpgYGB7cn0KbGlicmFyeShyZW1wc3ljKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGthYmxlRXh0cmEpCmxpYnJhcnkoZHBseXIpCgojIENvbnZlcnQgaWRlbnRpdHlfZ3JvdXAgZmFjdG9yIHRvIG51bWVyaWMgY29kZXMKUHVycmJsZV9NYXN0ZXJfV2lkZSA8LSBQdXJyYmxlX01hc3Rlcl9XaWRlICU+JQogIG11dGF0ZShpZGVudGl0eV9ncm91cF9udW0gPSBhcy5udW1lcmljKGlkZW50aXR5X2dyb3VwKSkKCiMgTW9kZWwgMTogTW9kZXJhdGlvbiBieSBCYXNlbGluZSBjb250cm9sbGluZyBmb3IgaWRlbnRpdHlfZ3JvdXAKbmljZV9tb2QoCiAgZGF0YSA9IFB1cnJibGVfTWFzdGVyX1dpZGUsCiAgcmVzcG9uc2UgPSAiUG9zdF9ERVJTOF9TdW0iLAogIHByZWRpY3RvciA9ICJjb25kaXRpb25fbnVtIiwKICBtb2RlcmF0b3IgPSAiUHJlX0RFUlM4X1N1bSIsCiAgY292YXJpYXRlcyA9IGMoImlkZW50aXR5X2dyb3VwX251bSIsICJhZ2UiKQopIHw+CiAgbmljZV90YWJsZShoaWdobGlnaHQgPSBUUlVFKQoKbmljZV9tb2QoCiAgZGF0YSA9IFB1cnJibGVfTWFzdGVyX1dpZGUsCiAgcmVzcG9uc2UgPSAiUG9zdF9wbWVycV9Gb2N1c19BdmciLAogIHByZWRpY3RvciA9ICJjb25kaXRpb25fbnVtIiwKICBtb2RlcmF0b3IgPSAiUHJlX3BtZXJxX0ZvY3VzX0F2ZyIsCiAgY292YXJpYXRlcyA9IGMoImlkZW50aXR5X2dyb3VwX251bSIsICJhZ2UiKQopIHw+CiAgbmljZV90YWJsZShoaWdobGlnaHQgPSBUUlVFKQoKbmljZV9tb2QoCiAgZGF0YSA9IFB1cnJibGVfTWFzdGVyX1dpZGUsCiAgcmVzcG9uc2UgPSAiUG9zdF9wbWVycV9EaXN0cmFjdF9BdmciLAogIHByZWRpY3RvciA9ICJjb25kaXRpb25fbnVtIiwKICBtb2RlcmF0b3IgPSAiUHJlX3BtZXJxX0Rpc3RyYWN0X0F2ZyIsCiAgY292YXJpYXRlcyA9IGMoImlkZW50aXR5X2dyb3VwX251bSIsICJhZ2UiKQopIHw+CiAgbmljZV90YWJsZShoaWdobGlnaHQgPSBUUlVFKQoKbmljZV9tb2QoCiAgZGF0YSA9IFB1cnJibGVfTWFzdGVyX1dpZGUsCiAgcmVzcG9uc2UgPSAiUG9zdF9wbWVycV9BRF9BdmciLAogIHByZWRpY3RvciA9ICJjb25kaXRpb25fbnVtIiwKICBtb2RlcmF0b3IgPSAiUHJlX3BtZXJxX0FEX0F2ZyIsCiAgY292YXJpYXRlcyA9IGMoImlkZW50aXR5X2dyb3VwX251bSIsICJhZ2UiKQopIHw+CiAgbmljZV90YWJsZShoaWdobGlnaHQgPSBUUlVFKQoKCgojIE1vZGVsIDI6IE1vZGVyYXRpb24gYnkgR2VuZGVyIElkZW50aXR5IGNvbnRyb2xsaW5nIGZvciBiYXNlbGluZQpuaWNlX21vZCgKICBkYXRhID0gUHVycmJsZV9NYXN0ZXJfV2lkZSwKICByZXNwb25zZSA9ICJQb3N0X0RFUlM4X1N1bSIsCiAgcHJlZGljdG9yID0gImNvbmRpdGlvbl9udW0iLAogIG1vZGVyYXRvciA9ICJpZGVudGl0eV9ncm91cF9udW0iLAogIGNvdmFyaWF0ZXMgPSBjKCJQcmVfREVSUzhfU3VtIiwgImFnZSIpCikgfD4KICBuaWNlX3RhYmxlKGhpZ2hsaWdodCA9IFRSVUUpCgpuaWNlX21vZCgKICBkYXRhID0gUHVycmJsZV9NYXN0ZXJfV2lkZSwKICByZXNwb25zZSA9ICJQb3N0X3BtZXJxX0ZvY3VzX0F2ZyIsCiAgcHJlZGljdG9yID0gImNvbmRpdGlvbl9udW0iLAogIG1vZGVyYXRvciA9ICJpZGVudGl0eV9ncm91cF9udW0iLAogIGNvdmFyaWF0ZXMgPSBjKCJQcmVfcG1lcnFfRm9jdXNfQXZnIiwgImFnZSIpCikgfD4KICBuaWNlX3RhYmxlKGhpZ2hsaWdodCA9IFRSVUUpCgpuaWNlX21vZCgKICBkYXRhID0gUHVycmJsZV9NYXN0ZXJfV2lkZSwKICByZXNwb25zZSA9ICJQb3N0X3BtZXJxX0Rpc3RyYWN0X0F2ZyIsCiAgcHJlZGljdG9yID0gImNvbmRpdGlvbl9udW0iLAogIG1vZGVyYXRvciA9ICJpZGVudGl0eV9ncm91cF9udW0iLAogIGNvdmFyaWF0ZXMgPSBjKCJQcmVfcG1lcnFfRGlzdHJhY3RfQXZnIiwgImFnZSIpCikgfD4KICBuaWNlX3RhYmxlKGhpZ2hsaWdodCA9IFRSVUUpCgpuaWNlX21vZCgKICBkYXRhID0gUHVycmJsZV9NYXN0ZXJfV2lkZSwKICByZXNwb25zZSA9ICJQb3N0X3BtZXJxX0FEX0F2ZyIsCiAgcHJlZGljdG9yID0gImNvbmRpdGlvbl9udW0iLAogIG1vZGVyYXRvciA9ICJpZGVudGl0eV9ncm91cF9udW0iLAogIGNvdmFyaWF0ZXMgPSBjKCJQcmVfcG1lcnFfQURfQXZnIiwgImFnZSIpCikgfD4KICBuaWNlX3RhYmxlKGhpZ2hsaWdodCA9IFRSVUUpCmBgYAojIyMgRm9sbG93IHVwOiBERVJTIDggClNpbmNlIHRoZSBpbnRlcmFjdGlvbiBvZiBjb25kaXRpb24gYnkgaWRlbnRpdHkgZ3JvdXAgd2FzIHNpZ25pZmlhY250LCBJIGhhdmUgdG8gcHJvYmUgaXQgdXNpbmcgc2ltcGxlIHNsb3Blcy4gCgojIyMjIFJlc3VsdDogCgpGb3IgY2lzZ2VuZGVyIHBhcnRpY2lwYW50cywgY29udHJvbGxpbmcgZm9yIHByZeKAkXRlc3QgZW1vdGlvbiByZWd1bGF0aW9uLCBjb25kaXRpb24gc2lnbmlmaWNhbnRseSBwcmVkaWN0ZWQgcG9zdOKAkXRlc3Qgc2NvcmVzLCB3aXRoIHRoZSBpbnRlcnZlbnRpb24geWllbGRpbmcgbG93ZXIgKGkuZS4sIGJldHRlcikgc2NvcmVzIChiID0g4oCTNC45MCwgU0UgPSAxLjQxLCB0KDY3KSA9IOKAkzMuNDcsIHAgPSAuMDAxLCBhZGp1c3RlZCBSwrIgPSAuNDcpLiBJbiBjb250cmFzdCwgZm9yIHRyYW5zZ2VuZGVyL2dlbmRlciBkaXZlcnNlIHBhcnRpY2lwYW50cywgY29uZGl0aW9uIHdhcyBub3QgYSBzaWduaWZpY2FudCBwcmVkaWN0b3Igb2YgcG9zdOKAkXRlc3QgZW1vdGlvbiByZWd1bGF0aW9uIChiID0g4oCTMS4wNywgU0UgPSAxLjIzLCB0KDY3KSA9IOKAkzAuODcsIHAgPSAuMzksIGFkanVzdGVkIFLCsiA9IC4zNykuCnNhZC4KCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCgojIEVuc3VyZSB0aGF0IGlkZW50aXR5X2dyb3VwIGlzIGEgZmFjdG9yICh3aXRoIGxldmVscyAiMCIgZm9yIENpc2dlbmRlciBhbmQgIjEiIGZvciBUR0QpClB1cnJibGVfTWFzdGVyX1dpZGUgPC0gUHVycmJsZV9NYXN0ZXJfV2lkZSAlPiUKICBtdXRhdGUoaWRlbnRpdHlfZ3JvdXAgPSBhcy5mYWN0b3IoaWRlbnRpdHlfZ3JvdXApKQoKIyBSdW4gc2VwYXJhdGUgcmVncmVzc2lvbnMgZm9yIGVhY2ggbGV2ZWwgb2YgaWRlbnRpdHlfZ3JvdXA6CiMgTW9kZWw6IFBvc3RfREVSUzhfU3VtIH4gY29uZGl0aW9uX251bSArIFByZV9ERVJTOF9TdW0KCiMgRm9yIENpc2dlbmRlciAoaWRlbnRpdHlfZ3JvdXAgPT0gMCkKbW9kZWxfY2lzIDwtIGxtKFBvc3RfREVSUzhfU3VtIH4gY29uZGl0aW9uX251bSArIFByZV9ERVJTOF9TdW0sCiAgICAgICAgICAgICAgICBkYXRhID0gZmlsdGVyKFB1cnJibGVfTWFzdGVyX1dpZGUsIGlkZW50aXR5X2dyb3VwID09ICIwIikpCiMgUHJpbnQgc3VtbWFyeSBmb3IgQ2lzZ2VuZGVyIG1vZGVsCnN1bW1hcnkobW9kZWxfY2lzKQoKIyBGb3IgVEdEIChpZGVudGl0eV9ncm91cCA9PSAxKQptb2RlbF90Z2QgPC0gbG0oUG9zdF9ERVJTOF9TdW0gfiBjb25kaXRpb25fbnVtICsgUHJlX0RFUlM4X1N1bSwKICAgICAgICAgICAgICAgIGRhdGEgPSBmaWx0ZXIoUHVycmJsZV9NYXN0ZXJfV2lkZSwgaWRlbnRpdHlfZ3JvdXAgPT0gIjEiKSkKIyBQcmludCBzdW1tYXJ5IGZvciBUR0QgbW9kZWwKc3VtbWFyeShtb2RlbF90Z2QpCgpgYGAKCgpgYGB7cn0KbGlicmFyeShkcGx5cikKbGlicmFyeShpbnRlcmFjdGlvbnMpCmxpYnJhcnkoZ2dwbG90MikKCiMgRml0IHRoZSBtb2RlbCB1c2luZyB0aGUgZmFjdG9yIHZhcmlhYmxlcwptb2RlbF9pZGVudGl0eSA8LSBsbShQb3N0X0RFUlM4X1N1bSB+IGNvbmRpdGlvbl9mYWN0b3IgKiBpZGVudGl0eV9ncm91cF9mYWN0b3IgKyBQcmVfREVSUzhfU3VtLCAKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFB1cnJibGVfTWFzdGVyX1dpZGUpCgojIENyZWF0ZSB0aGUgaW50ZXJhY3Rpb24gcGxvdCB1c2luZyB0aGUgbmV3IGZhY3RvciB2YXJpYWJsZXMKaW50ZXJhY3RfcGxvdChtb2RlbF9pZGVudGl0eSwgCiAgICAgICAgICAgICAgcHJlZCA9IGNvbmRpdGlvbl9mYWN0b3IsIAogICAgICAgICAgICAgIG1vZHggPSBpZGVudGl0eV9ncm91cF9mYWN0b3IsIAogICAgICAgICAgICAgIGludGVydmFsID0gVFJVRSwgCiAgICAgICAgICAgICAgcGxvdC5wb2ludHMgPSBUUlVFKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHJlbXBzeWMpICAgIyBmb3IgbmljZV9sbSBhbmQgbmljZV90YWJsZQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGthYmxlRXh0cmEpCgojIERlZmluZSB0aGUgcG9zdC10ZXN0IG91dGNvbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHByZS10ZXN0IGNvdmFyaWF0ZXMKcG9zdF92YXJzIDwtIGMoIlBvc3RfREVSUzhfU3VtIiwgIlBvc3RfcG1lcnFfRm9jdXNfQXZnIiwgIlBvc3RfcG1lcnFfRGlzdHJhY3RfQXZnIiwgCiAgICAgICAgICAgICAgICJQb3N0X3BtZXJxX0FEX0F2ZyIsICJQb3N0X0dBRDdfU3VtIiwgIlBvc3RfUEhROV9TdW0iLCAKICAgICAgICAgICAgICAgIlBvc3RfU0hTX1BhdGh3YXlzIiwgIlBvc3RfU0hTX0FnZW5jeSIsICJQb3N0X1NIU19Ub3RhbEhvcGUiLCAiUG9zdF91Y2xhX1N1bSIpCnByZV92YXJzICA8LSBzdWIoIl5Qb3N0XyIsICJQcmVfIiwgcG9zdF92YXJzKQoKIyBDcmVhdGUgYW4gZW1wdHkgbGlzdCB0byBzdG9yZSByZWdyZXNzaW9uIG1vZGVscwptb2RlbF9saXN0IDwtIGxpc3QoKQoKIyBMb29wIHRocm91Z2ggZWFjaCBvdXRjb21lIHBhaXIgYW5kIGZpdCBhIHN0YW5kYXJkIGxpbmVhciBtb2RlbApmb3IgKGkgaW4gc2VxX2Fsb25nKHBvc3RfdmFycykpIHsKICBvdXRjb21lIDwtIHBvc3RfdmFyc1tpXQogIHByZV92YXIgPC0gcHJlX3ZhcnNbaV0KICAKICAjIEZpdCB0aGUgcmVncmVzc2lvbiBtb2RlbDoKICAjIE91dGNvbWUgfiBjb25kaXRpb25fbnVtICsgY29ycmVzcG9uZGluZyBwcmUtdGVzdCBvdXRjb21lICsgaWRlbnRpdHlfZ3JvdXBfbnVtICsgYWdlCiAgZm9ybXVsYV9zdHIgPC0gcGFzdGUob3V0Y29tZSwgIn4gY29uZGl0aW9uX251bSArIiwgcHJlX3ZhciwgIisgaWRlbnRpdHlfZ3JvdXBfbnVtICsgYWdlIikKICBtb2RlbF9saXN0W1tvdXRjb21lXV0gPC0gbG0oYXMuZm9ybXVsYShmb3JtdWxhX3N0ciksIGRhdGEgPSBQdXJyYmxlX01hc3Rlcl9XaWRlKQp9CgojIEZvcm1hdCB0aGUgbGlzdCBvZiBtb2RlbHMgdXNpbmcgcmVtcHN5YydzIG5pY2VfbG0oKSBmdW5jdGlvbgpyZXN1bHRzX3RhYmxlIDwtIG5pY2VfbG0obW9kZWxfbGlzdCkKCiMgRGlzcGxheSB0aGUgY29tYmluZWQgdGFibGUgaW4gQVBBIGZvcm1hdCB1c2luZyBuaWNlX3RhYmxlCm5pY2VfdGFibGUocmVzdWx0c190YWJsZSwgaGlnaGxpZ2h0ID0gVFJVRSkKYGBgCiMjIExpbmVhciBNaXhlZCBFZmZlY3RzIE1vZGVscyAKCmBgYHtyfQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkoYnJvb20ubWl4ZWQpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKCiMgRGVmaW5lIHRoZSB2ZWN0b3Igb2Ygb3V0Y29tZXMgKGFzIHRoZXkgYXBwZWFyIGluIHRoZSBsb25nIGRhdGFzZXQpCm91dGNvbWVzIDwtIGMoIkRFUlM4X1N1bSIsICJwbWVycV9Gb2N1c19BdmciLCAicG1lcnFfRGlzdHJhY3RfQXZnIiwgInBtZXJxX0FEX0F2ZyIsIAogICAgICAgICAgICAgICJHQUQ3X1N1bSIsICJQSFE5X1N1bSIsICJTSFNfUGF0aHdheXMiLCAiU0hTX0FnZW5jeSIsICJTSFNfVG90YWxIb3BlIiwgInVjbGFfU3VtIikKCiMgSW5pdGlhbGl6ZSBhbiBlbXB0eSBsaXN0IHRvIHN0b3JlIG1vZGVsIHN1bW1hcmllcwpyZXN1bHRzX2xpc3QgPC0gbGlzdCgpCgojIExvb3Agb3ZlciBlYWNoIG91dGNvbWUgYW5kIGZpdCB0aGUgbWl4ZWQtZWZmZWN0cyBtb2RlbCBjb250cm9sbGluZyBmb3IgaWRlbnRpdHlfZ3JvdXBfbnVtIGFuZCBhZ2UKZm9yIChvdXRjb21lIGluIG91dGNvbWVzKSB7CiAgbW9kZWwgPC0gbG1lcihhcy5mb3JtdWxhKHBhc3RlKG91dGNvbWUsICJ+IFdlZWsgKiBjb25kaXRpb24gKyBpZGVudGl0eV9ncm91cCArIGFnZSArIChXZWVrIHwgcHNpZCkiKSksCiAgICAgICAgICAgICAgICBkYXRhID0gUHVycmJsZV9Mb25nX01hc3RlcikKICAjIFRpZHkgdGhlIG1vZGVsIG91dHB1dCBhbmQgc3RvcmUgaXQgaW4gdGhlIGxpc3QKICByZXN1bHRzX2xpc3RbW291dGNvbWVdXSA8LSB0aWR5KG1vZGVsKQp9CgojIExvb3AgdG8gcHJpbnQgZWFjaCBtb2RlbCBzdW1tYXJ5IGluIEFQQS1zdHlsZSB0YWJsZXMKZm9yIChvdXRjb21lIGluIG5hbWVzKHJlc3VsdHNfbGlzdCkpIHsKICBjYXQoIiMjIyBPdXRjb21lOiIsIG91dGNvbWUsICJcblxuIikKICBrYWJsZShyZXN1bHRzX2xpc3RbW291dGNvbWVdXSwgCiAgICAgICAgY2FwdGlvbiA9IHBhc3RlKCJNaXhlZC1FZmZlY3RzIE1vZGVsIGZvciIsIG91dGNvbWUsICJjb250cm9sbGluZyBmb3IgaWRlbnRpdHlfZ3JvdXAgYW5kIGFnZSIpLCAKICAgICAgICBkaWdpdHMgPSAzKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFKSAlPiUKICAgIHByaW50KCkKICBjYXQoIlxuXG4iKQp9CgpgYGAKCmBgYHtyfQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkoYnJvb20ubWl4ZWQpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShwZXJmb3JtYW5jZSkgICMgRm9yIHIyKCkKCiMgRGVmaW5lIHRoZSB2ZWN0b3Igb2Ygb3V0Y29tZXMgKGFzIHRoZXkgYXBwZWFyIGluIHRoZSBsb25nIGRhdGFzZXQpCm91dGNvbWVzIDwtIGMoIkRFUlM4X1N1bSIsICJwbWVycV9Gb2N1c19BdmciLCAicG1lcnFfRGlzdHJhY3RfQXZnIiwgInBtZXJxX0FEX0F2ZyIsIAogICAgICAgICAgICAgICJHQUQ3X1N1bSIsICJQSFE5X1N1bSIsICJTSFNfUGF0aHdheXMiLCAiU0hTX0FnZW5jeSIsICJTSFNfVG90YWxIb3BlIiwgInVjbGFfU3VtIikKCiMgSW5pdGlhbGl6ZSBhIGxpc3QgdG8gc3RvcmUgbW9kZWwgc3VtbWFyaWVzIHdpdGggY29uZmlkZW5jZSBpbnRlcnZhbHMgYW5kIGVmZmVjdCBzaXplcwpyZXN1bHRzX2xpc3QgPC0gbGlzdCgpCgojIExvb3Agb3ZlciBlYWNoIG91dGNvbWUgYW5kIGZpdCB0aGUgbWl4ZWQtZWZmZWN0cyBtb2RlbCBjb250cm9sbGluZyBmb3IgaWRlbnRpdHlfZ3JvdXBfbnVtIGFuZCBhZ2UKZm9yIChvdXRjb21lIGluIG91dGNvbWVzKSB7CiAgbW9kZWwgPC0gbG1lcihhcy5mb3JtdWxhKHBhc3RlKG91dGNvbWUsICJ+IFdlZWsgKiBjb25kaXRpb24gKyBpZGVudGl0eV9ncm91cCArIGFnZSArIChXZWVrIHwgcHNpZCkiKSksCiAgICAgICAgICAgICAgICBkYXRhID0gUHVycmJsZV9Mb25nX01hc3RlcikKICAKICAjIFRpZHkgdGhlIGZpeGVkIGVmZmVjdHMgZXN0aW1hdGVzCiAgdGlkeV9tb2RlbCA8LSB0aWR5KG1vZGVsKQogIAogICMgT2J0YWluIDk1JSBjb25maWRlbmNlIGludGVydmFscyBmb3IgZml4ZWQgZWZmZWN0cyB1c2luZyB0aGUgV2FsZCBtZXRob2QKICBjaV9tb2RlbCA8LSBjb25maW50KG1vZGVsLCBtZXRob2QgPSAiV2FsZCIsIGxldmVsID0gMC45NSkKICBjaV9kZiA8LSBhcy5kYXRhLmZyYW1lKGNpX21vZGVsKQogIGNpX2RmJHRlcm0gPC0gcm93bmFtZXMoY2lfZGYpCiAgCiAgIyBNZXJnZSB0aGUgdGlkeSBvdXRwdXQgd2l0aCBjb25maWRlbmNlIGludGVydmFscwogIHRpZHlfbW9kZWwgPC0gbGVmdF9qb2luKHRpZHlfbW9kZWwsIGNpX2RmLCBieSA9ICJ0ZXJtIikKICAKICAjIENhbGN1bGF0ZSBtYXJnaW5hbCBhbmQgY29uZGl0aW9uYWwgUsKyIGFzIGVmZmVjdCBzaXplcwogIHIyX3ZhbHMgPC0gcjIobW9kZWwpCiAgCiAgIyBTdG9yZSB0aGUgcmVzdWx0cyBpbiB0aGUgbGlzdAogIHJlc3VsdHNfbGlzdFtbb3V0Y29tZV1dIDwtIGxpc3QoCiAgICBtb2RlbF9zdW1tYXJ5ID0gdGlkeV9tb2RlbCwKICAgIHIyID0gcjJfdmFscwogICkKfQoKIyBOb3csIGZvciBkZW1vbnN0cmF0aW9uLCBsZXQncyBwcmludCB0aGUgc3VtbWFyeSBmb3Igb25lIG91dGNvbWUgKGUuZy4sIERFUlM4X1N1bSkKcHJpbnQoa2FibGUocmVzdWx0c19saXN0W1siREVSUzhfU3VtIl1dW1sibW9kZWxfc3VtbWFyeSJdXSwgCiAgICAgICAgICAgIGNhcHRpb24gPSAiTWl4ZWQtRWZmZWN0cyBNb2RlbCBmb3IgREVSUzhfU3VtIHdpdGggOTUlIENJIiwgCiAgICAgICAgICAgIGRpZ2l0cyA9IDMpICU+JSBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBGQUxTRSkpCmNhdCgiXG4iKQpwcmludChyZXN1bHRzX2xpc3RbWyJERVJTOF9TdW0iXV1bWyJyMiJdXSkKCmZvciAob3V0Y29tZSBpbiBuYW1lcyhyZXN1bHRzX2xpc3QpKSB7CiAgIyBDcmVhdGUgYSBjYXB0aW9uIHRoYXQgaW5jbHVkZXMgdGhlIG91dGNvbWUgbmFtZQogIGNhcHRpb25fdGV4dCA8LSBwYXN0ZSgiTWl4ZWQtRWZmZWN0cyBNb2RlbCBmb3IiLCBvdXRjb21lLCAid2l0aCA5NSUgQ0kiKQogIAogICMgUHJpbnQgdGhlIG1vZGVsIHN1bW1hcnkgd2l0aCBhIGNhcHRpb24gYW5kIGZvcm1hdHRlZCB0YWJsZQogIHByaW50KGthYmxlKHJlc3VsdHNfbGlzdFtbb3V0Y29tZV1dW1sibW9kZWxfc3VtbWFyeSJdXSwgCiAgICAgICAgICAgICAgY2FwdGlvbiA9IGNhcHRpb25fdGV4dCwgCiAgICAgICAgICAgICAgZGlnaXRzID0gMykgJT4lIGthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFKSkKICBjYXQoIlxuIikKICAKICAjIFByaW50IHRoZSBjb3JyZXNwb25kaW5nIFLCsiB2YWx1ZShzKQogIHByaW50KHJlc3VsdHNfbGlzdFtbb3V0Y29tZV1dW1sicjIiXV0pCiAgY2F0KCJcblxuIikgICMgZXh0cmEgc3BhY2luZyBiZXR3ZWVuIG91dGNvbWVzCn0KCmBgYAoKCg==