At least NWTC-091 - NWTC-100 are recent participants from past few months, probably included in Zoe’s most recent DC request?

Total WTC exposures

First…Total WTC exposures variable doesn’t always match sum(index_a:index_j); participants have NA for WTCexposure_score but do have a value when index vars are summed.

Full sample

Warning: Removed 10 rows containing non-finite values (stat_bin).

By group

Warning: Removed 10 rows containing non-finite values (stat_bin).

NWTC-031 is the participant in the PTSD group who seems to have 0 exposures. In the data center exposures, they have 0 on all indices except i., which is missing. In their exposure interview, they endorsed at least c. (worked at/near pile) and possibly e. (if it includes encountering/seeing covered bodies recovered by others).

Specific WTC exposures (n = 68)

  1.   Arrived WTC 9/11-13
  2.   Worked in Dust Cloud
  3.   Worked on/adjacent to pit/pile
  4.   Worked greater than median hours
  5.   Exposed to human remains
  6.   Worked in search, rescue, recovery sep-oct
  7.   Know someone who died 9/11
  8.   Know someone injured 9/11
  9.   Injured at WTC
  10.   Slept on-site during Sep-Oct 2001

Percent missing per exposure by group

Group comparisons (NO IMPUTATION)

Exposures

Warning: Removed 10 rows containing non-finite values (stat_boxplot).
Warning: Removed 10 rows containing missing values (geom_point).
Warning: Removed 10 rows containing missing values (geom_point).

Warning: Missing values for following ID(s):
NWTC-006, NWTC-014, NWTC-068, NWTC-083, NWTC-084, NWTC-091, NWTC-092, NWTC-093, NWTC-094, NWTC-100
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group
Anova Table (Type 3 tests)

Response: WTCexposure_score
      num Df den Df    MSE     F     ges    Pr(>F)    
group      2     55 2.7197 26.93 0.49476 7.016e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 group       emmean    SE df lower.CL upper.CL
 Low-exposed   1.79 0.441 55    0.902     2.67
 Resilient     5.62 0.306 55    5.007     6.23
 PTSD          5.20 0.426 55    4.347     6.05

Confidence level used: 0.95 

$contrasts
 contrast                  estimate    SE df t.ratio p.value
 (Low-exposed) - Resilient   -3.835 0.537 55  -7.145  <.0001
 (Low-exposed) - PTSD        -3.414 0.613 55  -5.571  <.0001
 Resilient - PTSD             0.421 0.524 55   0.802  1.0000

P value adjustment: bonferroni method for 3 tests 
Warning: Removed 7 rows containing non-finite values (stat_boxplot).
Warning: Removed 7 rows containing missing values (geom_point).
Warning: Removed 7 rows containing missing values (geom_point).

Warning: Missing values for following ID(s):
NWTC-037, NWTC-068, NWTC-083, NWTC-091, NWTC-092, NWTC-094, NWTC-100
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group
Anova Table (Type 3 tests)

Response: index_sum
      num Df den Df    MSE      F     ges    Pr(>F)    
group      2     58 2.4656 33.679 0.53733 1.963e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 group       emmean    SE df lower.CL upper.CL
 Low-exposed   1.80 0.405 58    0.988     2.61
 Resilient     5.67 0.287 58    5.093     6.24
 PTSD          5.56 0.393 58    4.777     6.35

Confidence level used: 0.95 

$contrasts
 contrast                  estimate    SE df t.ratio p.value
 (Low-exposed) - Resilient   -3.867 0.497 58  -7.787  <.0001
 (Low-exposed) - PTSD        -3.763 0.564 58  -6.667  <.0001
 Resilient - PTSD             0.104 0.486 58   0.214  1.0000

P value adjustment: bonferroni method for 3 tests 

Childhood trauma

Warning: Removed 1 rows containing non-finite values (stat_boxplot).
Warning: Removed 1 rows containing missing values (geom_point).
Warning: Removed 1 rows containing missing values (geom_point).

Warning: Missing values for following ID(s):
NWTC-025
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group
Anova Table (Type 3 tests)

Response: CTQ_total
      num Df den Df    MSE      F     ges    Pr(>F)    
group      2     64 90.023 10.322 0.24389 0.0001302 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 group       emmean   SE df lower.CL upper.CL
 Low-exposed   40.5 2.30 64     35.9     45.1
 Resilient     41.4 1.70 64     38.0     44.8
 PTSD          52.7 2.18 64     48.4     57.1

Confidence level used: 0.95 

$contrasts
 contrast                  estimate   SE df t.ratio p.value
 (Low-exposed) - Resilient   -0.949 2.86 64  -0.331  1.0000
 (Low-exposed) - PTSD       -12.266 3.17 64  -3.872  0.0008
 Resilient - PTSD           -11.317 2.76 64  -4.094  0.0004

P value adjustment: bonferroni method for 3 tests 
Warning: Removed 1 rows containing non-finite values (stat_boxplot).
Warning: Removed 1 rows containing missing values (geom_point).
Warning: Removed 1 rows containing missing values (geom_point).

Warning: Missing values for following ID(s):
NWTC-025
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group
Anova Table (Type 3 tests)

Response: CTQ_emoAbuse
      num Df den Df   MSE      F    ges    Pr(>F)    
group      2     64 9.541 9.6723 0.2321 0.0002136 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 group       emmean    SE df lower.CL upper.CL
 Low-exposed   5.82 0.749 64     4.33     7.32
 Resilient     5.77 0.555 64     4.67     6.88
 PTSD          9.47 0.709 64     8.06    10.89

Confidence level used: 0.95 

$contrasts
 contrast                  estimate    SE df t.ratio p.value
 (Low-exposed) - Resilient   0.0493 0.932 64   0.053  1.0000
 (Low-exposed) - PTSD       -3.6502 1.031 64  -3.540  0.0023
 Resilient - PTSD           -3.6995 0.900 64  -4.111  0.0003

P value adjustment: bonferroni method for 3 tests 
Warning: Removed 1 rows containing non-finite values (stat_boxplot).
Warning: Removed 1 rows containing missing values (geom_point).
Warning: Removed 1 rows containing missing values (geom_point).

Warning: Missing values for following ID(s):
NWTC-025
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group
Anova Table (Type 3 tests)

Response: CTQ_emoNeglect
      num Df den Df    MSE      F     ges    Pr(>F)    
group      2     64 13.102 8.3459 0.20686 0.0006015 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 group       emmean    SE df lower.CL upper.CL
 Low-exposed   6.59 0.878 64     4.83     8.34
 Resilient     7.29 0.650 64     5.99     8.59
 PTSD         11.00 0.830 64     9.34    12.66

Confidence level used: 0.95 

$contrasts
 contrast                  estimate   SE df t.ratio p.value
 (Low-exposed) - Resilient   -0.702 1.09 64  -0.643  1.0000
 (Low-exposed) - PTSD        -4.412 1.21 64  -3.651  0.0016
 Resilient - PTSD            -3.710 1.05 64  -3.518  0.0024

P value adjustment: bonferroni method for 3 tests 

Contrasts set to contr.sum for the following variables: group
Anova Table (Type 3 tests)

Response: CTQ_physAbuse
      num Df den Df   MSE      F     ges    Pr(>F)    
group      2     65 2.309 14.207 0.30417 7.609e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 group       emmean    SE df lower.CL upper.CL
 Low-exposed   5.71 0.369 65     4.97     6.44
 Resilient     5.61 0.273 65     5.07     6.16
 PTSD          7.80 0.340 65     7.12     8.48

Confidence level used: 0.95 

$contrasts
 contrast                  estimate    SE df t.ratio p.value
 (Low-exposed) - Resilient    0.093 0.459 65   0.203  1.0000
 (Low-exposed) - PTSD        -2.094 0.501 65  -4.178  0.0003
 Resilient - PTSD            -2.187 0.436 65  -5.018  <.0001

P value adjustment: bonferroni method for 3 tests 

Contrasts set to contr.sum for the following variables: group
Anova Table (Type 3 tests)

Response: CTQ_physNeglect
      num Df den Df    MSE      F     ges    Pr(>F)    
group      2     65 6.6527 9.9464 0.23433 0.0001704 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 group       emmean    SE df lower.CL upper.CL
 Low-exposed   5.65 0.626 65     4.40     6.90
 Resilient     5.48 0.463 65     4.56     6.41
 PTSD          8.60 0.577 65     7.45     9.75

Confidence level used: 0.95 

$contrasts
 contrast                  estimate    SE df t.ratio p.value
 (Low-exposed) - Resilient    0.163 0.778 65   0.210  1.0000
 (Low-exposed) - PTSD        -2.953 0.851 65  -3.471  0.0028
 Resilient - PTSD            -3.116 0.740 65  -4.212  0.0002

P value adjustment: bonferroni method for 3 tests 

Contrasts set to contr.sum for the following variables: group
Anova Table (Type 3 tests)

Response: CTQ_sexAbuse
      num Df den Df    MSE      F     ges Pr(>F)
group      2     65 17.651 2.2642 0.06513 0.1121
$emmeans
 group       emmean    SE df lower.CL upper.CL
 Low-exposed   5.18 1.019 65     3.14     7.21
 Resilient     5.94 0.755 65     4.43     7.44
 PTSD          7.95 0.939 65     6.07     9.83

Confidence level used: 0.95 

$contrasts
 contrast                  estimate   SE df t.ratio p.value
 (Low-exposed) - Resilient   -0.759 1.27 65  -0.599  1.0000
 (Low-exposed) - PTSD        -2.774 1.39 65  -2.001  0.1486
 Resilient - PTSD            -2.015 1.20 65  -1.672  0.2981

P value adjustment: bonferroni method for 3 tests 

Lifetime total excluding childhood trauma (non-weighted)

Warning: Removed 1 rows containing non-finite values (stat_boxplot).
Warning: Removed 1 rows containing missing values (geom_point).

Warning: Missing values for following ID(s):
NWTC-073
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group
Anova Table (Type 3 tests)

Response: TLEQ_totalExclCT_nonW
      num Df den Df    MSE      F      ges Pr(>F)
group      2     64 300.83 1.1065 0.033423  0.337
$emmeans
 group       emmean   SE df lower.CL upper.CL
 Low-exposed   5.24 4.21 64   -3.168     13.6
 Resilient    12.77 3.17 64    6.441     19.1
 PTSD          8.15 3.88 64    0.402     15.9

Confidence level used: 0.95 

$contrasts
 contrast                  estimate   SE df t.ratio p.value
 (Low-exposed) - Resilient    -7.53 5.27 64  -1.430  0.4724
 (Low-exposed) - PTSD         -2.91 5.72 64  -0.509  1.0000
 Resilient - PTSD              4.62 5.01 64   0.922  1.0000

P value adjustment: bonferroni method for 3 tests 
Warning: Removed 1 rows containing non-finite values (stat_boxplot).
Warning: Removed 1 rows containing missing values (geom_point).

Warning: Missing values for following ID(s):
NWTC-073
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group
Anova Table (Type 3 tests)

Response: TLEQ_totalExclCT_nonW
      num Df den Df    MSE      F      ges Pr(>F)
group      2     64 300.83 1.1065 0.033423  0.337
$emmeans
 group       emmean   SE df lower.CL upper.CL
 Low-exposed   5.24 4.21 64   -3.168     13.6
 Resilient    12.77 3.17 64    6.441     19.1
 PTSD          8.15 3.88 64    0.402     15.9

Confidence level used: 0.95 

$contrasts
 contrast                  estimate   SE df t.ratio p.value
 (Low-exposed) - Resilient    -7.53 5.27 64  -1.430  0.4724
 (Low-exposed) - PTSD         -2.91 5.72 64  -0.509  1.0000
 Resilient - PTSD              4.62 5.01 64   0.922  1.0000

P value adjustment: bonferroni method for 3 tests 

Group comparisons (AFTER IMPUTATION)

Exposures

Childhood trauma

Lifetime total excluding childhood trauma (non-weighted)

LS0tCnRpdGxlOiAiTWVldGluZyAwMy0wMS0yMiIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKLS0tCgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UpCmtuaXRyOjpvcHRzX2tuaXQkc2V0KHJvb3QuZGlyID0gIi9Wb2x1bWVzL0V4dGVybmFsL1dUQ19yZXNpbGllbmNlX2ltYWdpbmcvYW5hbHlzaXMvTWVldGluZyAwMi0yMy0yMiIpCmBgYAoKYGBge3IsIGVjaG89RkFMU0V9CiNzZXR1cApsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KG1pY2UpCmxpYnJhcnkoZ2xtbmV0KQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZ2djb3JycGxvdCkKbGlicmFyeShzdHJpbmdyKQpsaWJyYXJ5KGZvcmVpZ24pCmxpYnJhcnkoc3RhcmdhemVyKQpsaWJyYXJ5KGNvd3Bsb3QpCgpybShsaXN0ID0gbHMoKSkKCiNsb2FkIGRlbW9ncmFwaGljIGFuZCBzZWxmLXJlcG9ydCBkYXRhIGZvciBOV1RDIHBhcnRpY2lwYW50cyBzbyBmYXIgCmRzRGF0YTwtcmVhZC5jc3YoIlN0dWR5TWVhc3VyZXMtQWduZXNOV1RDaW5pdGlhbGFuYWxfREFUQV8yMDIyLTAyLTIzXzEwMzEuY3N2Iiwgc3RyaXAud2hpdGU9VFJVRSwgbmEuc3RyaW5ncz0iIikKI2xvYWQgY2xpbmljaWFuLWRldGVybWluZWQgZGF0YSBmb3IgTldUQyBwYXJ0aWNpcGFudHMgc28gZmFyCmNsRGF0YTwtcmVhZC5jc3YoIkNsaW5pY2lhbk1lYXN1cmVzLUFnbmVzTldUQ2NsaW5pY2FsaW5pX0RBVEFfMjAyMi0wMi0yM18xMDMzLmNzdiIsIHN0cmlwLndoaXRlPVRSVUUsIG5hLnN0cmluZ3M9IiIpCnYyRGF0YTwtcmVhZC5jc3YoIkNVUlJFTlRTdWJqZWN0RW5yb2xsLVZpc2l0MkNvbXBsZXRlcnNGb3JTX0RBVEFfMjAyMi0wMi0yM18xMDM2LmNzdiIsIHN0cmlwLndoaXRlPVRSVUUsIG5hLnN0cmluZ3M9IiIpCmJpZHNfaWQ8LXJlYWQuY3N2KCIvVm9sdW1lcy9FeHRlcm5hbC9XVENfcmVzaWxpZW5jZV9pbWFnaW5nL3BwdF9jb2RpbmdfY3VycmVudF9ub1BISS5jc3YiLCBzdHJpcC53aGl0ZT1UUlVFLCBuYS5zdHJpbmdzPSIiKQoKIyBnZXQgc3BlY2lmaWMgZXhwb3N1cmVzCiMgMTAgV1RDIGV4cG9zdXJlIHZhcmlhYmxlcyBhcmUgbGFiZWxlZCBpbmRleF9hIHRvIGluZGV4X2ouCiNhLiAgICAgICBBcnJpdmVkIFdUQyA5LzExLTEzCiNiLiAgICAgICBXb3JrZWQgaW4gRHVzdCBDbG91ZAojYy4gICAgICAgV29ya2VkIG9uL2FkamFjZW50IHRvIHBpdC9waWxlCiNkLiAgICAgICBXb3JrZWQgZ3JlYXRlciB0aGFuIG1lZGlhbiBob3VycwojZS4gICAgICAgRXhwb3NlZCB0byBodW1hbiByZW1haW5zCiNmLiAgICAgICAgV29ya2VkIGluIHNlYXJjaCwgcmVzY3VlLCByZWNvdmVyeSBzZXAtb2N0CiNnLiAgICAgICBLbm93IHNvbWVvbmUgd2hvIGRpZWQgOS8xMQojaC4gICAgICAgS25vdyBzb21lb25lIGluanVyZWQgOS8xMQojaS4gICAgICAgICBJbmp1cmVkIGF0IFdUQwojai4gICAgICAgICBTbGVwdCBvbi1zaXRlIGR1cmluZyBTZXAtT2N0IDIwMDEKCmV4cG9zdXJlczwtcmVhZC5jc3YoInd0Y19tcmlfc3R1ZHlfcGFydGljaXBhbnRzX3dpdGhfaW5kaWNlcy5jc3YiLCBzdHJpcC53aGl0ZT1UUlVFLCBuYS5zdHJpbmdzPSIiKQoKIyMjIwogCiNyZW5hbWUgSUQgdmFyaWFibGUgdG8gbWF0Y2ggdmFyaWFibGUgaW4gY2xpbmljaWFuICYgc3R1ZHkgbWVhc3VyZXMgJiBkcm9wIHZhcnMgYXMgbmVlZGVkCnYyRGF0YSA8LSBkcGx5cjo6cmVuYW1lKHYyRGF0YSwgcmVjb3JkX2lkID0gbnd0Y19pZCwgYmlvbWFya2Vyc19pZCA9IGJpb21faWQsIGV4dHJhY3RfaWQgPSBkY19leHRyYWN0aWQpIApiaWRzX2lkIDwtIGRwbHlyOjpyZW5hbWUoYmlkc19pZCwgcmVjb3JkX2lkID0gTldUQ19JRCwgYmlkc19pZCA9IEJJRFNfSUQpIApiaWRzX2lkIDwtIGRwbHlyOjpzZWxlY3QoYmlkc19pZCwgYyhyZWNvcmRfaWQsIGJpZHNfaWQsIHRyYWRpdGlvbmFsX3Jlc3BvbmRlciwgaGFuZGVkX0wsIG1lZF9wc3ljaG9hY3RpdmVfY3VycikpCgojIHJlbW92ZSBzdWJqZWN0cyAiVEVTVCIgZnJvbSB2MkRhdGEsIGFuZCAiTldUQy0wNTMgSW50ZXJ2YWwiIGZyb20gZHNEYXRhCmRzRGF0YSA8LSBkcGx5cjo6ZmlsdGVyKGRzRGF0YSwgIWdyZXBsKCJOV1RDLTA1MyBJbnRlcnZhbCBEYXRhIHByZSBWMyIscmVjb3JkX2lkKSkKdjJEYXRhIDwtIGRwbHlyOjpmaWx0ZXIodjJEYXRhLCAhZ3JlcGwoIlRFU1QiLHJlY29yZF9pZCkpCgojbWVyZ2UgdG9nZXRoZXIKZGF0YTE8LW1lcmdlKGNsRGF0YSxkc0RhdGEsYnk9InJlY29yZF9pZCIpCmRhdGE8LW1lcmdlKGRhdGExLHYyRGF0YSxieT0icmVjb3JkX2lkIikgJT4lIGRwbHlyOjpmaWx0ZXIoZm1yaV9zY2FuID09IDEpICNzZWxlY3Qgb25seSBwYXJ0aWNpcGFudHMgd2hvIChzbyBmYXIpIGNvbXBsZXRlZCB0aGUgc2NhbiAodmlzaXQgMikKZGF0YTwtbWVyZ2UoZGF0YSxiaWRzX2lkLCBieT0icmVjb3JkX2lkIikKCiMgcmVjb2RlIDUtY2F0ZWdvcnkgYGdyb3VwYCB2YXJpYWJsZSBpbnRvIDMgZ3JvdXBzCiMgMSA9IEhpZ2hseSBSZXNpbGllbnQgKDEpCiMgMiA9IFN5bXB0b21hdGljIChQVFNEKSAoMikKIyAzID0gTG93LUV4cG9zZWQgQ29udHJvbCAoMykKIyA0ID0gSW50ZXJtZWRpYXRlLUxvdyAoUmVzaWxpZW50KSAoNCkKIyA1ID0gSW50ZXJtZWRpYXRlLUhpZ2ggKFJlc2lsaWVudCkKZGF0YSA8LSBkYXRhICU+JSBkcGx5cjo6bXV0YXRlKGdyb3VwID0gcmVjb2RlX2ZhY3Rvcihncm91cCwgYDNgID0gMCwgYDFgID0gMSwgYDJgID0gMiwgYDRgID0gMSwgYDVgPTEpKQoKIyMgRklYIEdST1VQCmRhdGEkZ3JvdXBbZGF0YSRyZWNvcmRfaWQ9PSJOV1RDLTA3MiJdPC0wCmRhdGEkZ3JvdXBbZGF0YSRyZWNvcmRfaWQ9PSJOV1RDLTA3NiJdPC0wCmRhdGEkZ3JvdXBbZGF0YSRyZWNvcmRfaWQ9PSJOV1RDLTAzMiJdPC0wCmRhdGEkZ3JvdXBbZGF0YSRyZWNvcmRfaWQ9PSJOV1RDLTA2OSJdPC0wCmRhdGEgPC0gZGF0YSAlPiUgZHBseXI6Om11dGF0ZShncm91cCA9IHJlY29kZV9mYWN0b3IoZ3JvdXAsICIwIiA9ICJMb3ctZXhwb3NlZCIsICIxIiA9ICJSZXNpbGllbnQiLCAiMiIgPSAiUFRTRCIpKQoKIyBub3cgMCA9IGxvdy1leHBvc2VkIGNvbnRyb2wsIDEgPSByZXNpbGllbnQsIDIgPSBQVFNECgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMtU0VMRiBSRVBPUlRFRCBUUkFVTUEgSElTVE9SWQojY2FsY3VsYXRlIHNlbGYtcmVwb3J0ZWQgY2hpbGRob29kIHRyYXVtYSBleHBvc3VyZSAoQ1RRKQpjdHE8LWRhdGFbLCBncmVwKHBhdHRlcm4gPSdeY3RxXy4qJywgbmFtZXMoZGF0YSkpXQpjdHFbYygyLDUsNywxMywxOSwyNiwyOCldPC1sYXBwbHkoY3RxW2MoMiw1LDcsMTMsMTksMjYsMjgpXSwgRlVOPWZ1bmN0aW9uKHgpICNyZXZlcnNlIGNvZGVkIGl0ZW1zCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29kZSh4LCcxJz01LCcyJz00LCczJz0zLCczLjUnPTMsJzQnPTIsJzUnPTEpKQpkYXRhJENUUV9lbW9BYnVzZTwtcm93U3VtcyhjdHFbYygzLDgsMTQsMTgsMjUpXSkKZGF0YSRDVFFfcGh5c0FidXNlPC1yb3dTdW1zKGN0cVtjKDksMTEsMTIsMTUsMTcpXSkKZGF0YSRDVFFfc2V4QWJ1c2U8LXJvd1N1bXMoY3RxW2MoMjAsMjEsMjMsMjQsMjcpXSkKZGF0YSRDVFFfZW1vTmVnbGVjdDwtcm93U3VtcyhjdHFbYyg1LDcsMTMsMTksMjgpXSkgIApkYXRhJENUUV9waHlzTmVnbGVjdDwtcm93U3VtcyhjdHFbYygxLDIsNCw2LDI2KV0pCmRhdGEkQ1RRX3RvdGFsPC1yb3dTdW1zKGN0cSkKCmNvbG5hbWVzKGN0cSk8LXBhc3RlMCgndXNlLicsIG5hbWVzKGN0cSkpCmRhdGE8LWNiaW5kKGRhdGEsIGN0cSkKCiNjYWxjdWxhdGUgc2VsZi1yZXBvcnRlZCBsaWZldGltZSB0cmF1bWF0aWMgZXZlbnRzIChUTEVRKQojMS4gRm9yIHBhcnRpY2lwYW50cyB3aG8gYXJlbid0IGZyb20gdGhlIGJpb21hcmtlcnMgc28gaGF2ZSBmdWxsIFRMRVE6CiNmcmVxdWVuY3kgd2VpZ2h0ZWQgc2NvcmVzOgp0bGVxPC1kYXRhW2RhdGEkYmlvbWFya2Vyc19jb21wbGV0ZXI9PTAsIGdyZXAocGF0dGVybiA9J150bGVxXy4qJywgbmFtZXMoZGF0YSkpXQp0bGVxPC10bGVxW2MoMToyMyldICN0cmltICszbSBkYXRhCmRhdGEkVExFUV90b3RhbFtkYXRhJGJpb21hcmtlcnNfY29tcGxldGVyPT0wXTwtcm93U3Vtcyh0bGVxWzE6MjNdKQojZXhjbHVkaW5nIGNoaWxkaG9vZCBhZ2VkIHRyYXVtYSBpdGVtcyAoZm9yIGNvbWJpbmF0aW9uIHdpdGggQ1RRIHNjb3JlcykKdGxlcVtjKDEyLDEzLDE1LDE2LDE3KV08LTAgI3RoZXNlIGl0ZW1zIG9uIHRoZSB0bGVxIGFzayBhYm91dCBwaHlzaWNhbC9zZXh1YWwgYWJ1c2UgPDE4eWVhcnMgb2YgYWdlCmRhdGEkVExFUV90b3RhbEV4Y2xDVFtkYXRhJGJpb21hcmtlcnNfY29tcGxldGVyPT0wXTwtcm93U3Vtcyh0bGVxWzE6MjNdKQojbm9uLWZyZXF1ZW5jeSB3ZWlnaHRlZCBzY29yZXM6CnRsZXE8LWRhdGFbZGF0YSRiaW9tYXJrZXJzX2NvbXBsZXRlcj09MCwgZ3JlcChwYXR0ZXJuID0nXnRsZXFfLionLCBuYW1lcyhkYXRhKSldCnRsZXE8LXRsZXFbYygxOjIzKV0gI3RyaW0gKzNtIGRhdGEKdGxlcVssXTwtbGFwcGx5KHRsZXFbLF0sIEZVTj1mdW5jdGlvbih4KSAKICAgICAgICAgcmVjb2RlKHgsJzAnPTAsJzEnPTEsJzInPTEsJzMnPTEpKSAjYmluYXJpc2UKZGF0YSRUTEVRX3RvdGFsX25vbldbZGF0YSRiaW9tYXJrZXJzX2NvbXBsZXRlcj09MF08LXJvd1N1bXModGxlcVsxOjIzXSkKZGF0YSRUTEVRX3NleHVhbFZpb2xlbmNlUG9zdDE4X25vbldbZGF0YSRiaW9tYXJrZXJzX2NvbXBsZXRlcj09MF08LXRsZXEkdGxlcV8xOAp0bGVxW2MoMTIsMTMsMTUsMTYsMTcpXTwtMCAjdGhlc2UgaXRlbXMgb24gdGhlIHRsZXEgYXNrIGFib3V0IHBoeXNpY2FsL3NleHVhbCBhYnVzZSA8MTh5ZWFycyBvZiBhZ2UKZGF0YSRUTEVRX3RvdGFsRXhjbENUX25vbldbZGF0YSRiaW9tYXJrZXJzX2NvbXBsZXRlcj09MF08LXJvd1N1bXModGxlcVsxOjIzXSkKCiMyLiBGb3IgcGFydGljaXBhbnRzIHdobyB3ZXJlIGZyb20gdGhlIGJpb21hcmtlcnMgc3R1ZHkgbmVlZCB0byBmaXJzdCBleHRyYWN0IHRvCiNvbGQgVExFUSB2YWx1ZXMgZnJvbSBiaW9tYXJrZXJzIGRhdGFiYXNlIGZpbGU6CmJpb01kYXRhPC1yZWFkLnNwc3MoIi9Wb2x1bWVzL0V4dGVybmFsL1dUQ19yZXNpbGllbmNlX2ltYWdpbmcvZGF0YS9jbGluaWNhbF9kYXRhL3JlZl9kYXRhL21lcmdlZF9iaW9tYXJrZXJzXzZub3YyMDE5X0NMRUFOXzEuc2F2IiwgdG8uZGF0YS5mcmFtZT1UUlVFLCBtYXgudmFsdWUubGFiZWxzPTEpCnRsZXFCaW88LWJpb01kYXRhWyxncmVwKHBhdHRlcm4gPSdedGxlcS4qJywgbmFtZXMoYmlvTWRhdGEpKV0KdGxlcUJpbzwtdGxlcUJpb1tjKDgsMTEsMTQsMTgsMjEsMjQsMjcsMzAsMzMsMzYsMzksNDIsNDUsNDgsNTEsNTQsNTcsNjAsNjMsNjYsNjksNzIsNzUpXSAjb25seSBmcmVxIGl0ZW1zCiNub3cgbWVyZ2UgdGhlc2UgdmFsdWVzIGludG8gdGhlIE5XVEMgZGF0YXNldCB1c2luZyBXVEMgZGF0YWNlbnRlciAnZXh0cmFjdElEcycKY29sbmFtZXModGxlcUJpbyk8LXBhc3RlKCJiaW9NZGF0YSIsIGNvbG5hbWVzKHRsZXFCaW8pLCBzZXAgPSAiXyIpICNjaGFuZ2UgY29sdW1uIG5hbWVzIHRvIGFsbG93IGRpc3RpbmN0aW9uIGZyb20gZXhpc3RpbmcgVExFUXMKdGxlcUJpbyRiaW9tYXJrZXJzX2lkPC1iaW9NZGF0YSRzdWJqZWN0aWQgI2FkZCBOV1RDIHN1YiBudW1iZXJzIHRvIGFsbG93IG1lcmdpbmcKZGF0YTwtbWVyZ2UoZGF0YSwgdGxlcUJpbywgYnk9ImJpb21hcmtlcnNfaWQiLCBhbGwueD1UUlVFKQojdGhlbiBhdHRlbXB0IHRvIGFkZCBuZXcgKHNpbmNlIGJpb21hcmtlcnMpIHNjb3JlcyB0byBiaW9tYXJrZXJzIHNjb3JlczoKdGxlcUJpbzwtZGF0YVtkYXRhJGJpb21hcmtlcnNfY29tcGxldGVyPT0xLCBncmVwKHBhdHRlcm4gPSdeYmlvTWRhdGFfdGxlcS4qJywgbmFtZXMoZGF0YSkpXQp0bGVxU2luY2VCaW88LWRhdGFbZGF0YSRiaW9tYXJrZXJzX2NvbXBsZXRlcj09MSwgZ3JlcChwYXR0ZXJuID0nXnRsZXFfYmlvXy4qJywgbmFtZXMoZGF0YSkpXQp0bGVxQmlvVG90YWw8LXRsZXFCaW8gKyB0bGVxU2luY2VCaW8KI2ZvciBmcmVxdWVuY3kgd2VpZ2h0ZWQgc2NvcmVzOgp0bGVxQmlvVG90YWxbLF08LWxhcHBseSh0bGVxQmlvVG90YWxbLF0sIEZVTj1mdW5jdGlvbih4KSAKICAgICAgICAgICAgICAgICByZWNvZGUoeCwnMCc9MCwnMSc9MSwnMic9MiwnMyc9MywnNCc9MywnNSc9MywnNic9MykpICNzdG9wIGFueSBpbmRpdmlkdWFsIGl0ZW0gbWF4aW5nIG91dCAoPjMpCmRhdGEkVExFUV90b3RhbFtkYXRhJGJpb21hcmtlcnNfY29tcGxldGVyPT0xXTwtcm93U3Vtcyh0bGVxQmlvVG90YWxbMToyM10pICNOQiBjYW4ndCBjb21wbGV0ZWx5IGFjY3VyYXRlbHkgbWVyZ2UgY2F0ZWdvcmllcyBzbyB0aGVzZSBzY29yZXMgbWF5IHJlcHJlc2VudCBhbiBvdmVyZXN0aW1hdGUgaW4gYmlvbWFya2VycyBwcHRzCnRsZXFCaW9Ub3RhbFtjKDEyLDEzLDE1LDE2LDE3KV08LTAgI3RoZXNlIGl0ZW1zIG9uIHRoZSB0bGVxIGFzayBhYm91dCBwaHlzaWNhbC9zZXh1YWwgYWJ1c2UgPDE4eWVhcnMgb2YgYWdlCmRhdGEkVExFUV90b3RhbEV4Y2xDVFtkYXRhJGJpb21hcmtlcnNfY29tcGxldGVyPT0xXTwtcm93U3Vtcyh0bGVxQmlvVG90YWxbMToyM10pCiNmb3Igbm9uIGZyZXF1ZW5jeSB3ZWlnaHRlZCBzY29yZXM6CnRsZXFCaW9Ub3RhbDwtdGxlcUJpbyArIHRsZXFTaW5jZUJpbwp0bGVxQmlvVG90YWxbLF08LWxhcHBseSh0bGVxQmlvVG90YWxbLF0sIEZVTj1mdW5jdGlvbih4KSAKICAgICAgICAgICAgICAgICAgcmVjb2RlKHgsJzAnPTAsJzEnPTEsJzInPTEsJzMnPTEsJzQnPTEsJzUnPTEsJzYnPTEpKSAjYmluYXJpc2UKZGF0YSRUTEVRX3RvdGFsX25vbldbZGF0YSRiaW9tYXJrZXJzX2NvbXBsZXRlcj09MV08LXJvd1N1bXModGxlcUJpb1RvdGFsWzE6MjNdKSAjbm9uV2VpZ2h0ZWQgc2NvcmVzIHNob3VsZCBiZSBhY2N1cmF0ZSB0aG91Z2ggOi0pCmRhdGEkVExFUV9zZXh1YWxWaW9sZW5jZVBvc3QxOF9ub25XW2RhdGEkYmlvbWFya2Vyc19jb21wbGV0ZXI9PTFdPC10bGVxQmlvVG90YWwkYmlvTWRhdGFfdGxlcTE4X3RvdWNoMThub2NvbnNlbnQKdGxlcUJpb1RvdGFsW2MoMTIsMTMsMTUsMTYsMTcpXTwtMCAjdGhlc2UgaXRlbXMgb24gdGhlIHRsZXEgYXNrIGFib3V0IHBoeXNpY2FsL3NleHVhbCBhYnVzZSA8MTh5ZWFycyBvZiBhZ2UKZGF0YSRUTEVRX3RvdGFsRXhjbENUX25vbldbZGF0YSRiaW9tYXJrZXJzX2NvbXBsZXRlcj09MV08LXJvd1N1bXModGxlcUJpb1RvdGFsWzE6MjNdKQoKCiNyZXRyaWV2ZSBudW1iZXIgb2YgV1RDLXNwZWNpZmljIHRyYXVtYXRpYyBleHBvc3VyZXMgKGZyb20gV1RDIGRhdGFjZW50ZXIgZGF0YSkKZGF0YUNkYXRhPC1yZWFkLnNwc3MoIi9Wb2x1bWVzL0V4dGVybmFsL1dUQ19yZXNpbGllbmNlX2ltYWdpbmcvZGF0YS9jbGluaWNhbF9kYXRhL3JlZl9kYXRhL21lcmdlZF9zY3JlZW5pbmdfZGF0YV9mb3JfTkkuc2F2IiwgdG8uZGF0YS5mcmFtZT1UUlVFKQp0bXA8LWRhdGEuZnJhbWUobWF0cml4KG5jb2w9Mixucm93PW5yb3coZGF0YUNkYXRhKSkpCmNvbG5hbWVzKHRtcCk8LWMoImV4dHJhY3RfaWQiLCJXVENleHBvc3VyZV9zY29yZSIpCnRtcCRleHRyYWN0X2lkPC1kYXRhQ2RhdGEkZXh0cmFjdGlkCnRtcCRXVENleHBvc3VyZV9zY29yZTwtZGF0YUNkYXRhJHRyYXVtYXRpY19leHBvc3VyZV9pbmRleApkYXRhPC1tZXJnZShkYXRhLCB0bXAsIGJ5PSJleHRyYWN0X2lkIiwgYWxsLng9VFJVRSkKCiMjIG1hbnVhbGx5IGlucHV0IHRoZSBleHBvc3VyZSBzY29yZXMgZm9yIHBlb3BsZSB3aG8gZGlkbid0IGhhdmUgdGhlbSBpbiB0aGUgZmlsZQojZGF0YSRXVENleHBvc3VyZV9zY29yZVtkYXRhJHJlY29yZF9pZD09Ik5XVEMtMDM0Il08LTIgI3RoaXMgc3ViIG5vdCBpbiBkcywgbm8gZm1yaQojZGF0YSRXVENleHBvc3VyZV9zY29yZVtkYXRhJHJlY29yZF9pZD09Ik5XVEMtMDY4Il08LTQKI2RhdGEkV1RDZXhwb3N1cmVfc2NvcmVbZGF0YSRyZWNvcmRfaWQ9PSJOV1RDLTA3MyJdPC01CiNkYXRhJFdUQ2V4cG9zdXJlX3Njb3JlW2RhdGEkcmVjb3JkX2lkPT0iTldUQy0wNzQiXTwtNAojZGF0YSRXVENleHBvc3VyZV9zY29yZVtkYXRhJHJlY29yZF9pZD09Ik5XVEMtMDc2Il08LTMKI2RhdGEkV1RDZXhwb3N1cmVfc2NvcmVbZGF0YSRyZWNvcmRfaWQ9PSJOV1RDLTA3OCJdPC00CiNkYXRhJFdUQ2V4cG9zdXJlX3Njb3JlW2RhdGEkcmVjb3JkX2lkPT0iTldUQy0wODMiXTwtMgojaGFjayBmb3IgcHB0IHdobyBzZWVtcyB1bmRlci1zY29yZWQgYmFzZWQgb24gdGhlaXIgaW50ZXJ2aWV3IGZvciB0aGlzIHN0dWR5OgojZGF0YSRXVENleHBvc3VyZV9zY29yZVtkYXRhJHJlY29yZF9pZD09J05XVEMtMDMxJ108LTMKCiMgZG9uJ3QgaGF2ZSB0aGVzZToKI05XVEMtMDg0CiNOV1RDLTA5NAojTldUQy0wOTMKI05XVEMtMDkxCgoKIyMgbWFudWFsbHkgaW5wdXQgdHJhZGl0aW9uYWwgcmVzcG9uZGVyIHN0YXR1cyBmb3IgcGVvcGxlIG1pc3NpbmcKZGF0YSR0cmFkaXRpb25hbF9yZXNwb25kZXJbZGF0YSRyZWNvcmRfaWQ9PSJOV1RDLTA5MyJdPC0xCmRhdGEkdHJhZGl0aW9uYWxfcmVzcG9uZGVyW2RhdGEkcmVjb3JkX2lkPT0iTldUQy0wOTQiXTwtMApkYXRhJHRyYWRpdGlvbmFsX3Jlc3BvbmRlcltkYXRhJHJlY29yZF9pZD09Ik5XVEMtMDYwIl08LTAKIyBkb24ndCBoYXZlIE5XVEMtMDkxCgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojLUNMSU5JQ0FOLVJBVEVEIFBTWUNIT1BBVEhPTE9HWQojY2FsY3VsYXRlIGNsaW5pY2lhbi1yYXRlZCBQVFNEIHN5bXB0b20gc2V2ZXJpdHkgKENBUFMtNSBwYXN0IG1vbnRoIGludGVydmlldykKI3Njb3JlIGFjY29yZGluZyB0byBSb2IgUGlldHJ6Y2sncyA3IHN5bXB0b20gZGltZW5zaW9ucywgd2hpY2ggcHJvdmlkZWQgdGhlCiNiZXN0IGZpdCB0byB0aGUgZGF0YSBpbiB0d28gaW5kZXBlZGVudCBzYW1wbGVzIG9mIGRpdmVyc2UgdHJhdW1hLWV4cG9zZWQgaW5kaXZpZHVhbHMsCiNzZWUgQXJtb3VyIGV0IGFsLiAyMDE1OgojaHR0cHM6Ly93d3cuc2NpZW5jZWRpcmVjdC5jb20vc2NpZW5jZS9hcnRpY2xlL3BpaS9TMDAyMjM5NTYxNDAwMzE4NSkKZGF0YSRDQVBTNV9QTV90b3RhbDwtZGF0YSRwdHNkX3RvdF9zZXZfcGFzdF9tb250aAojQi4gaW50cnVzaW9uIChyZS1leHBlcmllbmNpbmcpIHN5bXB0b21zCmNhcHNfYjwtZGF0YVssIGdyZXAocGF0dGVybiA9J15iLiouX3Bhc3RfbW9udGgnLCBuYW1lcyhkYXRhKSldCmRhdGEkQ0FQUzVfUE1fcmVFeHA8LXJvd1N1bXMoY2Fwc19iKQojQy4gYXZvaWRhbmNlIHN5bXB0b21zCmNhcHNfYzwtZGF0YVssIGdyZXAocGF0dGVybiA9J15jLiouX3Bhc3RfbW9udGgnLCBuYW1lcyhkYXRhKSldCmRhdGEkQ0FQUzVfUE1fYXZvaWQ8LXJvd1N1bXMoY2Fwc19jKQojRC4gY29nbml0aW9uIGFuZCBtb29kIHN5bXB0b21zIFtSb2Igc3ViZGl2aWRlcyBpbnRvIG5lZ2F0aXZlIGFmZmVjdCBhbmQgYW5oZWRvbmlhXQpjYXBzX2Q8LWRhdGFbLCBncmVwKHBhdHRlcm4gPSdeZC4qLl9wYXN0X21vbnRoJywgbmFtZXMoZGF0YSkpXQpkYXRhJENBUFM1X1BNX25lZ0FmZjwtcm93U3VtcyhjYXBzX2RbMTo0XSkKZGF0YSRDQVBTNV9QTV9hbmhlZDwtcm93U3VtcyhjYXBzX2RbNTo3XSkKI0UuIGFyb3VzYWwgYW5kIHJlYWN0aXZpdHkgc3ltcHRvbXMgW1JvYiBzdWJkaXZpZGVzIGludG8gZXh0ZXJuYWxpemluZwojYmVoYXZpb3VyLCBhbnhpb3VzIGFyb3VzYWwsIGFuZCBkeXNwaG9yaWMgYXJvdXNhbF0KY2Fwc19lPC1kYXRhWywgZ3JlcChwYXR0ZXJuID0nXmUuKi5fcGFzdF9tb250aCcsIG5hbWVzKGRhdGEpKV0KZGF0YSRDQVBTNV9QTV9leHRCZWg8LXJvd1N1bXMoY2Fwc19lWzE6Ml0pCmRhdGEkQ0FQUzVfUE1fYW54QXJvdTwtcm93U3VtcyhjYXBzX2VbMzo0XSkKZGF0YSRDQVBTNV9QTV9keXNBcm91PC1yb3dTdW1zKGNhcHNfZVs1OjZdKQoKI2N1cnJlbnRvdGhlciBwc3ljaGlhdHJpYyBkaWFnbm9zZXMgZW5kb3JzZWQgKGFjY29yZGluZyB0byBTQ0lELVYgaW50ZXJ2aWV3KQpkYXRhJG1kZF9jdXJyZW50W2lzLm5hKGRhdGEkbWRkX2N1cnJlbnQpXTwtMCAjbWFqb3IgZGVwcmVzc2l2ZSBkaXNvcmRlcgpkYXRhJHBkZF9jdXJyZW50W2lzLm5hKGRhdGEkcGRkX2N1cnJlbnQpXTwtMCAjcGVyc2lzdGVudCBkeXN0aHltaWMgZGlzb3JkZXIKZGF0YSRwYW5pY19jdXJyZW50W2lzLm5hKGRhdGEkcGFuaWNfY3VycmVudCldPC0wICNwYW5pYyBkaXNvcmRlcgpkYXRhJGdhZF9jdXJyZW50W2lzLm5hKGRhdGEkZ2FkX2N1cnJlbnQpXTwtMCAjZ2VuZXJhbGl6ZWQgYW54aWV0eSBkaXNvcmRlcgoKIyMgbWFudWFsbHkgaW5wdXQgdHJhZGl0aW9uYWwgcmVzcG9uZGVyIHN0YXR1cyBmb3IgcGVvcGxlIG1pc3NpbmcKZGF0YSR0cmFkaXRpb25hbF9yZXNwb25kZXJbZGF0YSRyZWNvcmRfaWQ9PSJOV1RDLTA5MyJdPC0xCmRhdGEkdHJhZGl0aW9uYWxfcmVzcG9uZGVyW2RhdGEkcmVjb3JkX2lkPT0iTldUQy0wOTQiXTwtMApkYXRhJHRyYWRpdGlvbmFsX3Jlc3BvbmRlcltkYXRhJHJlY29yZF9pZD09Ik5XVEMtMDYwIl08LTAKIyBkb24ndCBoYXZlIE5XVEMtMDkxCgoKCgoKCgojIHN1YnNldCBkYXRhIGZvciBjdXJyZW50IGFuYWx5c2VzCmhpc3RfZGF0YSA8LSBkYXRhICU+JSBkcGx5cjo6c2VsZWN0KAogIHJlY29yZF9pZCwKICBncm91cCwKICBiaWRzX2lkLAogIG1kZF9jdXJyZW50LAogIHBkZF9jdXJyZW50LAogIGdhZF9jdXJyZW50LAogIHBhbmljX2N1cnJlbnQsCiAgQ0FQUzVfUE1fdG90YWwsCiAgQ1RRX2Vtb05lZ2xlY3QsCiAgQ1RRX3BoeXNOZWdsZWN0LAogIENUUV9lbW9BYnVzZSwKICBDVFFfcGh5c0FidXNlLAogIENUUV9zZXhBYnVzZSwKICBDVFFfdG90YWwsCiAgVExFUV90b3RhbEV4Y2xDVF9ub25XLAogIFRMRVFfc2V4dWFsVmlvbGVuY2VQb3N0MThfbm9uVywKICBXVENleHBvc3VyZV9zY29yZSwKICB0cmFkaXRpb25hbF9yZXNwb25kZXIpICU+JSBkcGx5cjo6bXV0YXRlKG1kZF9jdXJyZW50ID0gYXMuZmFjdG9yKG1kZF9jdXJyZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZF9jdXJyZW50ID0gYXMuZmFjdG9yKHBkZF9jdXJyZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZF9jdXJyZW50ID0gYXMuZmFjdG9yKGdhZF9jdXJyZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmljX2N1cnJlbnQgPSBhcy5mYWN0b3IocGFuaWNfY3VycmVudCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFkaXRpb25hbF9yZXNwb25kZXIgPSBhcy5mYWN0b3IodHJhZGl0aW9uYWxfcmVzcG9uZGVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gcmVjb2RlX2ZhY3Rvcihncm91cCwgIjAiID0gIkxvdy1leHBvc2VkIiwgIjEiID0gIlJlc2lsaWVudCIsICIyIiA9ICJQVFNEIikpCgoKCgpgYGAKCmBgYHtyfQojIyBtZXJnZSBpbiBzcGVjaWZpYyBleHBvc3VyZXMKZXhwb3N1cmVzIDwtIGV4cG9zdXJlcyAlPiUgZHBseXI6OnJlbmFtZShyZWNvcmRfaWQgPSBud3RjX2lkKSMgJT4lIG11dGF0ZV9lYWNoKGZ1bnMoZmFjdG9yKSwgc3RhcnRzX3dpdGgoImluZGV4IikpCgpoaXN0X2RhdGEgPC0gbGVmdF9qb2luKGhpc3RfZGF0YSwgZXhwb3N1cmVzLCBieT0icmVjb3JkX2lkIikKaGlzdF9kYXRhIDwtIGhpc3RfZGF0YSAlPiUgbXV0YXRlKFRMRVFfc2V4dWFsVmlvbGVuY2VQb3N0MThfbm9uVyA9IGFzLmludGVnZXIoVExFUV9zZXh1YWxWaW9sZW5jZVBvc3QxOF9ub25XKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMRVFfdG90YWxFeGNsQ1Rfbm9uVyA9IGFzLmludGVnZXIoVExFUV90b3RhbEV4Y2xDVF9ub25XKSkKCmhpc3RfZGF0YSA8LSBoaXN0X2RhdGEgJT4lIG11dGF0ZSgiaW5kZXhfc3VtIiA9IHJvd1N1bXMoKGhpc3RfZGF0YVssMTk6MjhdKSwgbmEucm0gPSBUUlVFKSkKaGlzdF9kYXRhICU+JSBzZWxlY3QocmVjb3JkX2lkLGluZGV4X2E6aW5kZXhfaikgJT4lIGZpbHRlcihyb3dTdW1zKGlzLm5hKC4pKSA+PSAzKSAjIGNoZWNrIHdobyBoYXMgPj0zIGl0ZW1zIG1pc3NpbmcKIyBtYW51YWxseSBmaXggZXhwb3N1cmUgc2NvcmUgdG8gTkEgdnMuIDAKaGlzdF9kYXRhJGluZGV4X3N1bVtoaXN0X2RhdGEkcmVjb3JkX2lkPT0iTldUQy0wMzciXTwtTkEKaGlzdF9kYXRhJGluZGV4X3N1bVtoaXN0X2RhdGEkcmVjb3JkX2lkPT0iTldUQy0wNjgiXTwtTkEKaGlzdF9kYXRhJGluZGV4X3N1bVtoaXN0X2RhdGEkcmVjb3JkX2lkPT0iTldUQy0wODMiXTwtTkEKaGlzdF9kYXRhJGluZGV4X3N1bVtoaXN0X2RhdGEkcmVjb3JkX2lkPT0iTldUQy0wOTEiXTwtTkEgI25ldywgbmVlZCBEQyBkYXRhCmhpc3RfZGF0YSRpbmRleF9zdW1baGlzdF9kYXRhJHJlY29yZF9pZD09Ik5XVEMtMDkyIl08LU5BICNuZXcsIG5lZWQgREMgZGF0YQpoaXN0X2RhdGEkaW5kZXhfc3VtW2hpc3RfZGF0YSRyZWNvcmRfaWQ9PSJOV1RDLTA5NCJdPC1OQSAjbmV3LCBuZWVkIERDIGRhdGEKaGlzdF9kYXRhJGluZGV4X3N1bVtoaXN0X2RhdGEkcmVjb3JkX2lkPT0iTldUQy0xMDAiXTwtTkEgI25ldywgbmVlZCBEQyBkYXRhCgoKYGBgCkF0IGxlYXN0IE5XVEMtMDkxIC0gTldUQy0xMDAgYXJlIHJlY2VudCBwYXJ0aWNpcGFudHMgZnJvbSBwYXN0IGZldyBtb250aHMsIHByb2JhYmx5IGluY2x1ZGVkIGluIFpvZSdzIG1vc3QgcmVjZW50IERDIHJlcXVlc3Q/CgoKIyMjIFRvdGFsIFdUQyBleHBvc3VyZXMKCkZpcnN0Li4uVG90YWwgV1RDIGV4cG9zdXJlcyB2YXJpYWJsZSBkb2Vzbid0IGFsd2F5cyBtYXRjaCBgc3VtKGluZGV4X2E6aW5kZXhfailgOyBwYXJ0aWNpcGFudHMgaGF2ZSBOQSBmb3IgYFdUQ2V4cG9zdXJlX3Njb3JlYCBidXQgZG8gaGF2ZSBhIHZhbHVlIHdoZW4gaW5kZXggdmFycyBhcmUgc3VtbWVkLgoKYGBge3J9Cmhpc3RfZGF0YSAlPiUgc2VsZWN0KHJlY29yZF9pZCxncm91cCxXVENleHBvc3VyZV9zY29yZSxpbmRleF9zdW0pICU+JSBtdXRhdGUoIm1hdGNoIiA9IGlmZWxzZShXVENleHBvc3VyZV9zY29yZSA9PSBpbmRleF9zdW0sIDEsIDApKQpgYGAKCgojIyMjIEZ1bGwgc2FtcGxlCmBgYHtyfQpnZ3Bsb3QoaGlzdF9kYXRhLCBhZXMoV1RDZXhwb3N1cmVfc2NvcmUpKSArIAogICAgICAgZ2VvbV9oaXN0b2dyYW0oYmlucz0yMCwgY29sb3VyPSdibGFjaycsc2l6ZT0uNSwgZmlsbD0iZGFya3Zpb2xldCIpICsKICAgIHhsYWIoIldUQyBleHBvc3VyZXMiKSArIHRoZW1lX2J3KCkgKyBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEwLCBieSA9IDEpKQoKZXhwIDwtIGhpc3RfZGF0YSAlPiUgCiAgY291bnQoZ3JvdXAsV1RDZXhwb3N1cmVfc2NvcmUsIG5hbWU9Im4iKSAlPiUKICAgIGdyb3VwX2J5KGdyb3VwKSAlPiUKICAgIG11dGF0ZShwY3Q9IHJvdW5kKG4gLyBzdW0obiksMikpICAlPiUKICAgIHVuZ3JvdXAoKQoKZXhwCgpgYGAKCiMjIyMgQnkgZ3JvdXAKYGBge3J9CgpnZ3Bsb3QoaGlzdF9kYXRhLCBhZXMoV1RDZXhwb3N1cmVfc2NvcmUsIGZpbGw9Z3JvdXApKSArICBnZW9tX2hpc3RvZ3JhbShjb2xvdXI9J2JsYWNrJyxzaXplPS41LCBhbHBoYT0uNSwgYmlucz0xMCwgcG9zaXRpb24gPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJMb3ctZXhwb3NlZCIsICJSZXNpbGllbnQiLCAiUFRTRCIpKSArIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTAsIGJ5ID0gMSkpCmBgYApOV1RDLTAzMSBpcyB0aGUgcGFydGljaXBhbnQgaW4gdGhlIFBUU0QgZ3JvdXAgd2hvIHNlZW1zIHRvIGhhdmUgMCBleHBvc3VyZXMuIEluIHRoZSBkYXRhIGNlbnRlciBleHBvc3VyZXMsIHRoZXkgaGF2ZSAwIG9uIGFsbCBpbmRpY2VzIGV4Y2VwdCAqKmkuKiosIHdoaWNoIGlzIG1pc3NpbmcuIEluIHRoZWlyIGV4cG9zdXJlIGludGVydmlldywgdGhleSBlbmRvcnNlZCBhdCBsZWFzdCAqKmMuKiogKHdvcmtlZCBhdC9uZWFyIHBpbGUpIGFuZCBwb3NzaWJseSAqKmUuKiogKGlmIGl0IGluY2x1ZGVzIGVuY291bnRlcmluZy9zZWVpbmcgY292ZXJlZCBib2RpZXMgcmVjb3ZlcmVkIGJ5IG90aGVycykuIAoKCgojIyMgU3BlY2lmaWMgV1RDIGV4cG9zdXJlcyAobiA9IDY4KQoKYGBge3J9CgojIyBtdXRhdGUgYmFjayB0byBmYWN0b3JzIGZvciBpbmRleCogdmFycwoKaGlzdF9kYXRhX3RtcCA8LSBoaXN0X2RhdGEgJT4lIG11dGF0ZV9lYWNoKGZ1bnMoZmFjdG9yKSwgc3RhcnRzX3dpdGgoImluZGV4IikpCgppbmRleF9hIDwtIGhpc3RfZGF0YV90bXAgJT4lIGNvdW50KGdyb3VwLGluZGV4X2EsIG5hbWU9Im4iKSAlPiUKICAgIGdyb3VwX2J5KGdyb3VwKSAlPiUKICAgIG11dGF0ZShwY3Q9IHJvdW5kKG4gLyBzdW0obiksMikpICAlPiUKICAgIHVuZ3JvdXAoKQoKcF9hPC1nZ3Bsb3QoaW5kZXhfYSwgYWVzKGdyb3VwLHBjdCwgZmlsbD1pbmRleF9hKSkgKwogICBnZW9tX2Jhcihwb3NpdGlvbj0ic3RhY2siLCBzdGF0PSJpZGVudGl0eSIsIGNvbG9yPSJibGFjayIpICsgc2NhbGVfZmlsbF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJObyIsICJZZXMiLCAiTWlzc2luZyIpKSArCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSkKCgppbmRleF9iIDwtIGhpc3RfZGF0YV90bXAgJT4lIGNvdW50KGdyb3VwLGluZGV4X2IsIG5hbWU9Im4iKSAlPiUKICAgIGdyb3VwX2J5KGdyb3VwKSAlPiUKICAgIG11dGF0ZShwY3Q9IHJvdW5kKG4gLyBzdW0obiksMikpICAlPiUKICAgIHVuZ3JvdXAoKQoKcF9iPC1nZ3Bsb3QoaW5kZXhfYiwgYWVzKGdyb3VwLHBjdCwgZmlsbD1pbmRleF9iKSkgKwogICBnZW9tX2Jhcihwb3NpdGlvbj0ic3RhY2siLCBzdGF0PSJpZGVudGl0eSIsIGNvbG9yPSJibGFjayIpICsgc2NhbGVfZmlsbF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJObyIsICJZZXMiLCAiTWlzc2luZyIpKSArCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSkKCgppbmRleF9jIDwtIGhpc3RfZGF0YV90bXAgJT4lIGNvdW50KGdyb3VwLGluZGV4X2MsIG5hbWU9Im4iKSAlPiUKICAgIGdyb3VwX2J5KGdyb3VwKSAlPiUKICAgIG11dGF0ZShwY3Q9IHJvdW5kKG4gLyBzdW0obiksMikpICAlPiUKICAgIHVuZ3JvdXAoKQoKcF9jPC1nZ3Bsb3QoaW5kZXhfYywgYWVzKGdyb3VwLHBjdCwgZmlsbD1pbmRleF9jKSkgKwogICBnZW9tX2Jhcihwb3NpdGlvbj0ic3RhY2siLCBzdGF0PSJpZGVudGl0eSIsIGNvbG9yPSJibGFjayIpICsgc2NhbGVfZmlsbF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJObyIsICJZZXMiLCAiTWlzc2luZyIpKSArCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSkKCgppbmRleF9kIDwtIGhpc3RfZGF0YV90bXAgJT4lIGNvdW50KGdyb3VwLGluZGV4X2QsIG5hbWU9Im4iKSAlPiUKICAgIGdyb3VwX2J5KGdyb3VwKSAlPiUKICAgIG11dGF0ZShwY3Q9IHJvdW5kKG4gLyBzdW0obiksMikpICAlPiUKICAgIHVuZ3JvdXAoKQoKcF9kPC1nZ3Bsb3QoaW5kZXhfZCwgYWVzKGdyb3VwLHBjdCwgZmlsbD1pbmRleF9kKSkgKwogICBnZW9tX2Jhcihwb3NpdGlvbj0ic3RhY2siLCBzdGF0PSJpZGVudGl0eSIsIGNvbG9yPSJibGFjayIpICsgc2NhbGVfZmlsbF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJObyIsICJZZXMiLCAiTWlzc2luZyIpKSArCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSkKCgppbmRleF9lIDwtIGhpc3RfZGF0YV90bXAgJT4lIGNvdW50KGdyb3VwLGluZGV4X2UsIG5hbWU9Im4iKSAlPiUKICAgIGdyb3VwX2J5KGdyb3VwKSAlPiUKICAgIG11dGF0ZShwY3Q9IHJvdW5kKG4gLyBzdW0obiksMikpICAlPiUKICAgIHVuZ3JvdXAoKQoKcF9lPC1nZ3Bsb3QoaW5kZXhfZSwgYWVzKGdyb3VwLHBjdCwgZmlsbD1pbmRleF9lKSkgKwogICBnZW9tX2Jhcihwb3NpdGlvbj0ic3RhY2siLCBzdGF0PSJpZGVudGl0eSIsIGNvbG9yPSJibGFjayIpICsgc2NhbGVfZmlsbF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJObyIsICJZZXMiLCAiTWlzc2luZyIpKSArCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSkKCgppbmRleF9mIDwtIGhpc3RfZGF0YV90bXAgJT4lIGNvdW50KGdyb3VwLGluZGV4X2YsIG5hbWU9Im4iKSAlPiUKICAgIGdyb3VwX2J5KGdyb3VwKSAlPiUKICAgIG11dGF0ZShwY3Q9IHJvdW5kKG4gLyBzdW0obiksMikpICAlPiUKICAgIHVuZ3JvdXAoKQoKcF9mPC1nZ3Bsb3QoaW5kZXhfZiwgYWVzKGdyb3VwLHBjdCwgZmlsbD1pbmRleF9mKSkgKwogICBnZW9tX2Jhcihwb3NpdGlvbj0ic3RhY2siLCBzdGF0PSJpZGVudGl0eSIsIGNvbG9yPSJibGFjayIpICsgc2NhbGVfZmlsbF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJObyIsICJZZXMiLCAiTWlzc2luZyIpKSArCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSkKCgppbmRleF9nIDwtIGhpc3RfZGF0YV90bXAgJT4lIGNvdW50KGdyb3VwLGluZGV4X2csIG5hbWU9Im4iKSAlPiUKICAgIGdyb3VwX2J5KGdyb3VwKSAlPiUKICAgIG11dGF0ZShwY3Q9IHJvdW5kKG4gLyBzdW0obiksMikpICAlPiUKICAgIHVuZ3JvdXAoKQoKcF9nPC1nZ3Bsb3QoaW5kZXhfZywgYWVzKGdyb3VwLHBjdCwgZmlsbD1pbmRleF9nKSkgKwogICBnZW9tX2Jhcihwb3NpdGlvbj0ic3RhY2siLCBzdGF0PSJpZGVudGl0eSIsIGNvbG9yPSJibGFjayIpICsgc2NhbGVfZmlsbF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJObyIsICJZZXMiLCAiTWlzc2luZyIpKSArCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSkKCgppbmRleF9oIDwtIGhpc3RfZGF0YV90bXAgJT4lIGNvdW50KGdyb3VwLGluZGV4X2gsIG5hbWU9Im4iKSAlPiUKICAgIGdyb3VwX2J5KGdyb3VwKSAlPiUKICAgIG11dGF0ZShwY3Q9IHJvdW5kKG4gLyBzdW0obiksMikpICAlPiUKICAgIHVuZ3JvdXAoKQoKcF9oPC1nZ3Bsb3QoaW5kZXhfaCwgYWVzKGdyb3VwLHBjdCwgZmlsbD1pbmRleF9oKSkgKwogICBnZW9tX2Jhcihwb3NpdGlvbj0ic3RhY2siLCBzdGF0PSJpZGVudGl0eSIsIGNvbG9yPSJibGFjayIpICsgc2NhbGVfZmlsbF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJObyIsICJZZXMiLCAiTWlzc2luZyIpKSArCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSkKCgppbmRleF9pIDwtIGhpc3RfZGF0YV90bXAgJT4lIGNvdW50KGdyb3VwLGluZGV4X2ksIG5hbWU9Im4iKSAlPiUKICAgIGdyb3VwX2J5KGdyb3VwKSAlPiUKICAgIG11dGF0ZShwY3Q9IHJvdW5kKG4gLyBzdW0obiksMikpICAlPiUKICAgIHVuZ3JvdXAoKQoKcF9pPC1nZ3Bsb3QoaW5kZXhfaSwgYWVzKGdyb3VwLHBjdCwgZmlsbD1pbmRleF9pKSkgKwogICBnZW9tX2Jhcihwb3NpdGlvbj0ic3RhY2siLCBzdGF0PSJpZGVudGl0eSIsIGNvbG9yPSJibGFjayIpICsgc2NhbGVfZmlsbF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJObyIsICJZZXMiLCAiTWlzc2luZyIpKSArCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSkKCmluZGV4X2ogPC0gaGlzdF9kYXRhX3RtcCAlPiUgY291bnQoZ3JvdXAsaW5kZXhfaiwgbmFtZT0ibiIpICU+JQogICAgZ3JvdXBfYnkoZ3JvdXApICU+JQogICAgbXV0YXRlKHBjdD0gcm91bmQobiAvIHN1bShuKSwyKSkgICU+JQogICAgdW5ncm91cCgpCgpwX2o8LWdncGxvdChpbmRleF9qLCBhZXMoZ3JvdXAscGN0LCBmaWxsPWluZGV4X2opKSArCiAgIGdlb21fYmFyKHBvc2l0aW9uPSJzdGFjayIsIHN0YXQ9ImlkZW50aXR5IiwgY29sb3I9ImJsYWNrIikgKyBzY2FsZV9maWxsX2Rpc2NyZXRlKGxhYmVscyA9IGMoIk5vIiwgIlllcyIsICJNaXNzaW5nIikpICsKICB0aGVtZShheGlzLnRpdGxlLng9ZWxlbWVudF9ibGFuaygpKSAKCmBgYAoKCj5hLiAgICAgICBBcnJpdmVkIFdUQyA5LzExLTEzCmIuICAgICAgIFdvcmtlZCBpbiBEdXN0IENsb3VkCmMuICAgICAgIFdvcmtlZCBvbi9hZGphY2VudCB0byBwaXQvcGlsZQpkLiAgICAgICBXb3JrZWQgZ3JlYXRlciB0aGFuIG1lZGlhbiBob3VycwplLiAgICAgICBFeHBvc2VkIHRvIGh1bWFuIHJlbWFpbnMKZi4gICAgICAgV29ya2VkIGluIHNlYXJjaCwgcmVzY3VlLCByZWNvdmVyeSBzZXAtb2N0CmcuICAgICAgIEtub3cgc29tZW9uZSB3aG8gZGllZCA5LzExCmguICAgICAgIEtub3cgc29tZW9uZSBpbmp1cmVkIDkvMTEKaS4gICAgICAgSW5qdXJlZCBhdCBXVEMKai4gICAgICAgU2xlcHQgb24tc2l0ZSBkdXJpbmcgU2VwLU9jdCAyMDAxCgpgYGB7ciBmaWcuaGVpZ2h0PTR9CiBwbG90X2dyaWQocF9hLCBwX2IsIHBfYywgcF9kLCBwX2UsIHBfZiwgcF9nLCBwX2gsIHBfaSwgcF9qLCBsYWJlbHMgPSAiQVVUTyIsICNncmVlZHk9VFJVRSwgCiAgICAgICAgICAgc2NhbGU9MSwgbmNvbD0yLCBucm93PTUpCmBgYAojIyMjIyBQZXJjZW50IG1pc3NpbmcgcGVyIGV4cG9zdXJlIGJ5IGdyb3VwCgpgYGB7cn0KaW5kZXhfYSAlPiUgZHBseXI6OmZpbHRlcihpcy5uYShpbmRleF9hKSkKaW5kZXhfYiAlPiUgZHBseXI6OmZpbHRlcihpcy5uYShpbmRleF9iKSkKaW5kZXhfYyAlPiUgZHBseXI6OmZpbHRlcihpcy5uYShpbmRleF9jKSkKaW5kZXhfZCAlPiUgZHBseXI6OmZpbHRlcihpcy5uYShpbmRleF9kKSkKaW5kZXhfZSAlPiUgZHBseXI6OmZpbHRlcihpcy5uYShpbmRleF9lKSkKaW5kZXhfZiAlPiUgZHBseXI6OmZpbHRlcihpcy5uYShpbmRleF9mKSkKaW5kZXhfZyAlPiUgZHBseXI6OmZpbHRlcihpcy5uYShpbmRleF9nKSkKaW5kZXhfaCAlPiUgZHBseXI6OmZpbHRlcihpcy5uYShpbmRleF9oKSkKaW5kZXhfaSAlPiUgZHBseXI6OmZpbHRlcihpcy5uYShpbmRleF9pKSkKaW5kZXhfaiAlPiUgZHBseXI6OmZpbHRlcihpcy5uYShpbmRleF9qKSkKYGBgCgoKIyMgR3JvdXAgY29tcGFyaXNvbnMgKE5PIElNUFVUQVRJT04pCgoKIyMjIEV4cG9zdXJlcwpgYGB7cn0KCmxpYnJhcnkoYWZleCkKbGlicmFyeShlbW1lYW5zKQphZmV4X29wdGlvbnMoZW1tZWFuc19tb2RlbCA9ICJtdWx0aXZhcmlhdGUiKQoKCiMgUk0tQU5PVkEKZ2dwbG90KGhpc3RfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PVdUQ2V4cG9zdXJlX3Njb3JlLCB4PWdyb3VwKSkgKyAKICAgICAgIGdlb21fYm94cGxvdCgpICsgZ2VvbV9wb2ludCgpICsgIGdlb21faml0dGVyKHdpZHRoID0gMC4wMSwgaGVpZ2h0PS4wMSkgKyB4bGFiKCJHcm91cCIpCnExPC1hb3ZfZXooaWQgPSAicmVjb3JkX2lkIiwgZHYgPSAiV1RDZXhwb3N1cmVfc2NvcmUiLCBkYXRhLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCiMgcGFpcndpc2UgY29tcGFyaXNvbnM6CmVtbWVhbnMocTEsIH5ncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImJvbmZlcnJvbmkiKQoKIyBSTS1BTk9WQQpnZ3Bsb3QoaGlzdF9kYXRhLCBhZXMoY29sb3I9Z3JvdXAsIHk9aW5kZXhfc3VtLCB4PWdyb3VwKSkgKyAKICAgICAgIGdlb21fYm94cGxvdCgpICsgZ2VvbV9wb2ludCgpICsgIGdlb21faml0dGVyKHdpZHRoID0gMC4wMSwgaGVpZ2h0PS4wMSkgKyB4bGFiKCJHcm91cCIpCnExPC1hb3ZfZXooaWQgPSAicmVjb3JkX2lkIiwgZHYgPSAiaW5kZXhfc3VtIiwgaGlzdF9kYXRhLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCiMgcGFpcndpc2UgY29tcGFyaXNvbnM6CmVtbWVhbnMocTEsIH5ncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImJvbmZlcnJvbmkiKQpgYGAKCiMjIyBDaGlsZGhvb2QgdHJhdW1hCgpgYGB7cn0KCiMgdG90YWwKZ2dwbG90KGhpc3RfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PUNUUV90b3RhbCwgeD1ncm91cCkpICsgCiAgICAgICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMDEsIGhlaWdodD0uMDEpICsgeGxhYigiR3JvdXAiKQpxMTwtYW92X2V6KGlkID0gInJlY29yZF9pZCIsIGR2ID0gIkNUUV90b3RhbCIsIGRhdGEsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKIyBwYWlyd2lzZSBjb21wYXJpc29uczoKZW1tZWFucyhxMSwgfmdyb3VwLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iYm9uZmVycm9uaSIpCgojIGVtb3Rpb25hbCBhYnVzZQpnZ3Bsb3QoaGlzdF9kYXRhLCBhZXMoY29sb3I9Z3JvdXAsIHk9Q1RRX2Vtb0FidXNlLCB4PWdyb3VwKSkgKyAKICAgICAgIGdlb21fYm94cGxvdCgpICsgZ2VvbV9wb2ludCgpICsgIGdlb21faml0dGVyKHdpZHRoID0gMC4wMSwgaGVpZ2h0PS4wMSkgKyB4bGFiKCJHcm91cCIpCnExPC1hb3ZfZXooaWQgPSAicmVjb3JkX2lkIiwgZHYgPSAiQ1RRX2Vtb0FidXNlIiwgZGF0YSwgYmV0d2Vlbj0iZ3JvdXAiKQpzdW1tYXJ5KHExKQojIHBhaXJ3aXNlIGNvbXBhcmlzb25zOgplbW1lYW5zKHExLCB+Z3JvdXAsIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJib25mZXJyb25pIikKCiMgZW1vdGlvbmFsIG5lZ2xlY3QKZ2dwbG90KGhpc3RfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PUNUUV9lbW9OZWdsZWN0LCB4PWdyb3VwKSkgKyAKICAgICAgIGdlb21fYm94cGxvdCgpICsgZ2VvbV9wb2ludCgpICsgIGdlb21faml0dGVyKHdpZHRoID0gMC4wMSwgaGVpZ2h0PS4wMSkgKyB4bGFiKCJHcm91cCIpCnExPC1hb3ZfZXooaWQgPSAicmVjb3JkX2lkIiwgZHYgPSAiQ1RRX2Vtb05lZ2xlY3QiLCBkYXRhLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCiMgcGFpcndpc2UgY29tcGFyaXNvbnM6CmVtbWVhbnMocTEsIH5ncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImJvbmZlcnJvbmkiKQoKIyBwaHlzaWNhbCBhYnVzZQpnZ3Bsb3QoaGlzdF9kYXRhLCBhZXMoY29sb3I9Z3JvdXAsIHk9Q1RRX3BoeXNBYnVzZSwgeD1ncm91cCkpICsgCiAgICAgICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMDEsIGhlaWdodD0uMDEpICsgeGxhYigiR3JvdXAiKQpxMTwtYW92X2V6KGlkID0gInJlY29yZF9pZCIsIGR2ID0gIkNUUV9waHlzQWJ1c2UiLCBkYXRhLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCiMgcGFpcndpc2UgY29tcGFyaXNvbnM6CmVtbWVhbnMocTEsIH5ncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImJvbmZlcnJvbmkiKQoKIyBwaHlzaWNhbCBuZWdsZWN0CmdncGxvdChoaXN0X2RhdGEsIGFlcyhjb2xvcj1ncm91cCwgeT1DVFFfcGh5c05lZ2xlY3QsIHg9Z3JvdXApKSArIAogICAgICAgZ2VvbV9ib3hwbG90KCkgKyBnZW9tX3BvaW50KCkgKyAgZ2VvbV9qaXR0ZXIod2lkdGggPSAwLjAxLCBoZWlnaHQ9LjAxKSArIHhsYWIoIkdyb3VwIikKcTE8LWFvdl9leihpZCA9ICJyZWNvcmRfaWQiLCBkdiA9ICJDVFFfcGh5c05lZ2xlY3QiLCBkYXRhLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCiMgcGFpcndpc2UgY29tcGFyaXNvbnM6CmVtbWVhbnMocTEsIH5ncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImJvbmZlcnJvbmkiKQoKIyBzZXh1YWwgYWJ1c2UKZ2dwbG90KGhpc3RfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PUNUUV9zZXhBYnVzZSwgeD1ncm91cCkpICsgCiAgICAgICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMDEsIGhlaWdodD0uMDEpICsgeGxhYigiR3JvdXAiKQpxMTwtYW92X2V6KGlkID0gInJlY29yZF9pZCIsIGR2ID0gIkNUUV9zZXhBYnVzZSIsIGRhdGEsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKIyBwYWlyd2lzZSBjb21wYXJpc29uczoKZW1tZWFucyhxMSwgfmdyb3VwLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iYm9uZmVycm9uaSIpCgpgYGAKCiMjIyBMaWZldGltZSB0b3RhbCBleGNsdWRpbmcgY2hpbGRob29kIHRyYXVtYSAobm9uLXdlaWdodGVkKQpgYGB7cn0KCiMjIExpZmV0aW1lICh3aXRob3V0IGNoaWxkaG9vZCB0cmF1bWEpCmdncGxvdChoaXN0X2RhdGEsIGFlcyhjb2xvcj1ncm91cCwgeT1UTEVRX3RvdGFsRXhjbENUX25vblcsIHg9Z3JvdXApKSArIAogICAgICAgZ2VvbV9ib3hwbG90KCkgKyBnZW9tX3BvaW50KGFscGhhPS4yNSkgKyB4bGFiKCJHcm91cCIpCnExPC1hb3ZfZXooaWQgPSAicmVjb3JkX2lkIiwgZHYgPSAiVExFUV90b3RhbEV4Y2xDVF9ub25XIiwgZGF0YSwgYmV0d2Vlbj0iZ3JvdXAiKQpzdW1tYXJ5KHExKQojIHBhaXJ3aXNlIGNvbXBhcmlzb25zOgplbW1lYW5zKHExLCB+Z3JvdXAsIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJib25mZXJyb25pIikKCgoKIyMgU2V4dWFsIHZpb2xlbmNlID4xOCB5L28KZ2dwbG90KGhpc3RfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PVRMRVFfc2V4dWFsVmlvbGVuY2VQb3N0MThfbm9uVywgeD1ncm91cCkpICsgCiAgICAgICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoYWxwaGE9LjI1KSArIHhsYWIoIkdyb3VwIikKcTE8LWFvdl9leihpZCA9ICJyZWNvcmRfaWQiLCBkdiA9ICJUTEVRX3RvdGFsRXhjbENUX25vblciLCBkYXRhLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCiMgcGFpcndpc2UgY29tcGFyaXNvbnM6CmVtbWVhbnMocTEsIH5ncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImJvbmZlcnJvbmkiKQoKYGBgCgoKIyMgR3JvdXAgY29tcGFyaXNvbnMgKEFGVEVSIElNUFVUQVRJT04pCgpgYGB7cn0KI2ltcHV0ZSBtaXNzaW5nIGRhdGE6IAp0bXA8LW1pY2UoZGF0YSxtPTUsbWF4aXQ9NTAsbWV0aD0ncG1tJyxzZWVkPTUwMCkKZGF0YTI8LWNvbXBsZXRlKHRtcCwxKQoKYGBgCgojIyMgRXhwb3N1cmVzCmBgYHtyfQoKbGlicmFyeShhZmV4KQpsaWJyYXJ5KGVtbWVhbnMpCmFmZXhfb3B0aW9ucyhlbW1lYW5zX21vZGVsID0gIm11bHRpdmFyaWF0ZSIpCgoKIyBSTS1BTk9WQQpxMTwtYW92X2V6KGlkID0gInJlY29yZF9pZCIsIGR2ID0gIldUQ2V4cG9zdXJlX3Njb3JlIiwgZGF0YSwgYmV0d2Vlbj0iZ3JvdXAiKQpzdW1tYXJ5KHExKQojIHBhaXJ3aXNlIGNvbXBhcmlzb25zOgplbW1lYW5zKHExLCB+Z3JvdXAsIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJib25mZXJyb25pIikKCiMgUk0tQU5PVkEKcTE8LWFvdl9leihpZCA9ICJyZWNvcmRfaWQiLCBkdiA9ICJpbmRleF9zdW0iLCBoaXN0X2RhdGEsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKIyBwYWlyd2lzZSBjb21wYXJpc29uczoKZW1tZWFucyhxMSwgfmdyb3VwLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iYm9uZmVycm9uaSIpCmBgYAoKIyMjIENoaWxkaG9vZCB0cmF1bWEKCmBgYHtyfQojIGVtb3Rpb25hbCBhYnVzZQpnZ3Bsb3QoaGlzdF9kYXRhLCBhZXMoY29sb3I9Z3JvdXAsIHk9Q1RRX2Vtb0FidXNlLCB4PWdyb3VwKSkgKyAKICAgICAgIGdlb21fYm94cGxvdCgpICsgZ2VvbV9wb2ludCgpICsgIGdlb21faml0dGVyKHdpZHRoID0gMC4wMSwgaGVpZ2h0PS4wMSkgKyB4bGFiKCJHcm91cCIpCnExPC1hb3ZfZXooaWQgPSAicmVjb3JkX2lkIiwgZHYgPSAiQ1RRX2Vtb0FidXNlIiwgZGF0YSwgYmV0d2Vlbj0iZ3JvdXAiKQpzdW1tYXJ5KHExKQojIHBhaXJ3aXNlIGNvbXBhcmlzb25zOgplbW1lYW5zKHExLCB+Z3JvdXAsIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJib25mZXJyb25pIikKCiMgZW1vdGlvbmFsIG5lZ2xlY3QKZ2dwbG90KGhpc3RfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PUNUUV9lbW9OZWdsZWN0LCB4PWdyb3VwKSkgKyAKICAgICAgIGdlb21fYm94cGxvdCgpICsgZ2VvbV9wb2ludCgpICsgIGdlb21faml0dGVyKHdpZHRoID0gMC4wMSwgaGVpZ2h0PS4wMSkgKyB4bGFiKCJHcm91cCIpCnExPC1hb3ZfZXooaWQgPSAicmVjb3JkX2lkIiwgZHYgPSAiQ1RRX2Vtb05lZ2xlY3QiLCBkYXRhLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCiMgcGFpcndpc2UgY29tcGFyaXNvbnM6CmVtbWVhbnMocTEsIH5ncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImJvbmZlcnJvbmkiKQoKIyBwaHlzaWNhbCBhYnVzZQpnZ3Bsb3QoaGlzdF9kYXRhLCBhZXMoY29sb3I9Z3JvdXAsIHk9Q1RRX3BoeXNBYnVzZSwgeD1ncm91cCkpICsgCiAgICAgICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMDEsIGhlaWdodD0uMDEpICsgeGxhYigiR3JvdXAiKQpxMTwtYW92X2V6KGlkID0gInJlY29yZF9pZCIsIGR2ID0gIkNUUV9waHlzQWJ1c2UiLCBkYXRhLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCiMgcGFpcndpc2UgY29tcGFyaXNvbnM6CmVtbWVhbnMocTEsIH5ncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImJvbmZlcnJvbmkiKQoKIyBwaHlzaWNhbCBuZWdsZWN0CmdncGxvdChoaXN0X2RhdGEsIGFlcyhjb2xvcj1ncm91cCwgeT1DVFFfcGh5c05lZ2xlY3QsIHg9Z3JvdXApKSArIAogICAgICAgZ2VvbV9ib3hwbG90KCkgKyBnZW9tX3BvaW50KCkgKyAgZ2VvbV9qaXR0ZXIod2lkdGggPSAwLjAxLCBoZWlnaHQ9LjAxKSArIHhsYWIoIkdyb3VwIikKcTE8LWFvdl9leihpZCA9ICJyZWNvcmRfaWQiLCBkdiA9ICJDVFFfcGh5c05lZ2xlY3QiLCBkYXRhLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCiMgcGFpcndpc2UgY29tcGFyaXNvbnM6CmVtbWVhbnMocTEsIH5ncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImJvbmZlcnJvbmkiKQoKIyBzZXh1YWwgYWJ1c2UKZ2dwbG90KGhpc3RfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PUNUUV9zZXhBYnVzZSwgeD1ncm91cCkpICsgCiAgICAgICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMDEsIGhlaWdodD0uMDEpICsgeGxhYigiR3JvdXAiKQpxMTwtYW92X2V6KGlkID0gInJlY29yZF9pZCIsIGR2ID0gIkNUUV9zZXhBYnVzZSIsIGRhdGEsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKIyBwYWlyd2lzZSBjb21wYXJpc29uczoKZW1tZWFucyhxMSwgfmdyb3VwLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iYm9uZmVycm9uaSIpCgpgYGAKCiMjIyBMaWZldGltZSB0b3RhbCBleGNsdWRpbmcgY2hpbGRob29kIHRyYXVtYSAobm9uLXdlaWdodGVkKQpgYGB7cn0KCiMjIExpZmV0aW1lICh3aXRob3V0IGNoaWxkaG9vZCB0cmF1bWEpCmdncGxvdChoaXN0X2RhdGEsIGFlcyhjb2xvcj1ncm91cCwgeT1UTEVRX3RvdGFsRXhjbENUX25vblcsIHg9Z3JvdXApKSArIAogICAgICAgZ2VvbV9ib3hwbG90KCkgKyBnZW9tX3BvaW50KGFscGhhPS4yNSkgKyB4bGFiKCJHcm91cCIpCnExPC1hb3ZfZXooaWQgPSAicmVjb3JkX2lkIiwgZHYgPSAiVExFUV90b3RhbEV4Y2xDVF9ub25XIiwgZGF0YSwgYmV0d2Vlbj0iZ3JvdXAiKQpzdW1tYXJ5KHExKQojIHBhaXJ3aXNlIGNvbXBhcmlzb25zOgplbW1lYW5zKHExLCB+Z3JvdXAsIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJib25mZXJyb25pIikKCgoKIyMgU2V4dWFsIHZpb2xlbmNlID4xOCB5L28KZ2dwbG90KGhpc3RfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PVRMRVFfc2V4dWFsVmlvbGVuY2VQb3N0MThfbm9uVywgeD1ncm91cCkpICsgCiAgICAgICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoYWxwaGE9LjI1KSArIHhsYWIoIkdyb3VwIikKcTE8LWFvdl9leihpZCA9ICJyZWNvcmRfaWQiLCBkdiA9ICJUTEVRX3RvdGFsRXhjbENUX25vblciLCBkYXRhLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCiMgcGFpcndpc2UgY29tcGFyaXNvbnM6CmVtbWVhbnMocTEsIH5ncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImJvbmZlcnJvbmkiKQoKYGBgCgo=