Introduction
This document contains the analysis for the dissertation experiment.
The analysis is organized into four main sections:
- Data Wrangling: Importing, cleaning, and preparing
the data
- Analysis: Core analytical procedures
- Statistical Tests: Formal statistical testing
- Visualizations: Data visualization and
plotting
Data Wrangling
## Visual angle range for -200 to +200 pixels: 9.06 degrees
Data Summary
Overall Dataset Summary
|
Participants
|
Total Trials
|
Trials per Participant
|
PSE Min (deg)
|
PSE Max (deg)
|
PSE Mean (deg)
|
PSE SD (deg)
|
|
28
|
21060
|
752.1
|
-5.28
|
1.84
|
-0.98
|
1.17
|
Response Rate Analysis
Data Quality Check
Data Quality Summary
|
Metric
|
Value
|
|
PSE Mean
|
-0.98
|
|
PSE SD
|
1.17
|
|
3 SD Lower Bound
|
-4.50
|
|
3 SD Upper Bound
|
2.50
|
|
Extreme PSE Participants
|
1.00
|
|
Extreme Response Rate Participants
|
3.00
|
Participants with PSE Beyond 3 SD from Mean -4.5 to 2.5
|
participant
|
n_trials
|
mean_pse
|
LR%
|
|
LD_112822
|
765
|
-5.28
|
100
|
Participants with Extreme Response Rates
|
participant
|
n_trials
|
left_responses
|
LR%
|
mean_pse
|
|
LD_112822
|
765
|
765
|
100.00
|
-5.28
|
|
RA_040622
|
765
|
765
|
100.00
|
-0.11
|
|
VG_052722
|
765
|
738
|
96.47
|
-0.07
|
Final Data Filtering
Data Filtering Summary
|
Metric
|
Count
|
|
Original Participants
|
28
|
|
PSE Outliers Removed
|
1
|
|
Extreme Response Rates Removed
|
3
|
|
Final Participants
|
25
|
Descriptive Statistics
Overall Descriptive Statistics
|
Sample Size
|
Mean PSE (deg)
|
SD PSE (deg)
|
Mean LR%
|
SD LR%
|
|
25
|
-0.9
|
NA
|
67.14
|
12.67
|
## PSE Distribution by Participant

## Left Response Rate Distribution by Participant

Analysis
## Group-Level Left Response Rate by SOA

## Individual-Level Left Response Rate by SOA - Participant MT_042022

## Group-Level Left Response Rate by SOA - Detrended

## Group-Level Left Response Rate by SOA - Butterworth Filtered (4-18 Hz)

## 10 Hz Sinusoid Overlay and R^2 Fit

## R^2 (10 Hz sinusoid fit): 0.019
## RFFT of Filtered Left Response Rate

## Peak frequencies from group-level FFT:
## freq amp
## 1 6.862745 0.4950146
## 2 14.705882 0.3463220
## 3 17.647059 0.2255797
## Top 2 peak frequencies: 6.9 Hz and 14.7 Hz
## Frequency analysis
## Permutation test (full, n=1000): p = 0.6230
## Frequency analysis – Full time series permutation test

## Critical value (95th % of permuted R^2): 0.110
## Permutation tests for peak frequencies from group-level FFT
##
## Peak frequency 6.9 Hz permutation test:
## Observed R^2 (6.9 Hz): 0.500
## Permutation test p-value: 0.0000
## Critical value (95th %): 0.130
## Significant: Yes
## Frequency analysis – 6.9 Hz permutation test

##
## Peak frequency 14.7 Hz permutation test:
## Observed R^2 (14.7 Hz): 0.245
## Permutation test p-value: 0.0020
## Critical value (95th %): 0.124
## Significant: Yes
## Frequency analysis – 14.7 Hz permutation test

Individual-Level Frequency Analysis
## Individual-Level Full Time Series RFFT (4–18 Hz filtered residuals)

## Distribution of Power Across 4-18 Hz Frequencies for All Participants

## Summary of Power by Frequency:
## # A tibble: 14 × 4
## freq_rounded mean_amp sd_amp n_participants
## <dbl> <dbl> <dbl> <int>
## 1 4.9 0.189 0.100 25
## 2 5.9 0.253 0.122 25
## 3 6.9 0.263 0.124 25
## 4 7.8 0.236 0.105 25
## 5 8.8 0.264 0.137 25
## 6 9.8 0.293 0.114 25
## 7 10.8 0.250 0.139 25
## 8 11.8 0.251 0.108 25
## 9 12.7 0.220 0.126 25
## 10 13.7 0.213 0.105 25
## 11 14.7 0.204 0.108 25
## 12 15.7 0.185 0.137 25
## 13 16.7 0.163 0.0869 25
## 14 17.6 0.142 0.0763 25
## Bootstrap Analysis of Power Values Across All Frequencies

## Bootstrap Summary Statistics (95% CI):
## # A tibble: 14 × 5
## frequency mean_bootstrap sd_bootstrap ci_lower ci_upper
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4.9 0.189 0.0195 0.152 0.228
## 2 5.9 0.253 0.0239 0.206 0.300
## 3 6.9 0.263 0.0242 0.216 0.309
## 4 7.8 0.236 0.0204 0.195 0.275
## 5 8.8 0.264 0.0265 0.214 0.317
## 6 9.8 0.293 0.0220 0.251 0.336
## 7 10.8 0.249 0.0270 0.197 0.302
## 8 11.8 0.250 0.0211 0.209 0.291
## 9 12.7 0.220 0.0247 0.173 0.269
## 10 13.7 0.213 0.0205 0.174 0.254
## 11 14.7 0.204 0.0212 0.164 0.246
## 12 15.7 0.185 0.0265 0.137 0.239
## 13 16.7 0.163 0.0171 0.129 0.197
## 14 17.6 0.142 0.0149 0.114 0.172
LS0tCnRpdGxlOiAiRGlzc2VydGF0aW9uIEV4cGVyaW1lbnQgQW5hbHlzaXMiCmF1dGhvcjogIllvdXIgTmFtZSIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICB0aGVtZTogY29zbW8KICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIGRmX3ByaW50OiBwYWdlZAogICAgY3NzOiBudWxsCiAgICBrZWVwX21kOiB0cnVlCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBlY2hvID0gRkFMU0UsCiAgd2FybmluZyA9IEZBTFNFLAogIG1lc3NhZ2UgPSBGQUxTRSwKICBmaWcud2lkdGggPSAxMCwKICBmaWcuaGVpZ2h0ID0gNiwKICBmaWcuYWxpZ24gPSAiY2VudGVyIiwKICBjYWNoZSA9IEZBTFNFCikKYGBgCgojIyBJbnRyb2R1Y3Rpb24KClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIGFuYWx5c2lzIGZvciB0aGUgZGlzc2VydGF0aW9uIGV4cGVyaW1lbnQuIFRoZSBhbmFseXNpcyBpcyBvcmdhbml6ZWQgaW50byBmb3VyIG1haW4gc2VjdGlvbnM6CgoxLiAqKkRhdGEgV3JhbmdsaW5nKio6IEltcG9ydGluZywgY2xlYW5pbmcsIGFuZCBwcmVwYXJpbmcgdGhlIGRhdGEKMi4gKipBbmFseXNpcyoqOiBDb3JlIGFuYWx5dGljYWwgcHJvY2VkdXJlcwozLiAqKlN0YXRpc3RpY2FsIFRlc3RzKio6IEZvcm1hbCBzdGF0aXN0aWNhbCB0ZXN0aW5nCjQuICoqVmlzdWFsaXphdGlvbnMqKjogRGF0YSB2aXN1YWxpemF0aW9uIGFuZCBwbG90dGluZwoKIyMgRGF0YSBXcmFuZ2xpbmcKCmBgYHtyIGRhdGEtd3JhbmdsaW5nfQojIExvYWQgcmVxdWlyZWQgbGlicmFyaWVzCmxpYnJhcnkocmlvKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShzaWduYWwpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHpvbykKbGlicmFyeShwdXJycikKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQoKIyBJbXBvcnQgYW5kIHByZXBhcmUgZGF0YQpkYXRhX2ZpbGUgPC0gImV4cDFfcmF3ZGF0YS54bHN4IgphbGxfZGF0YSA8LSByZWFkX2V4Y2VsKGRhdGFfZmlsZSwgc2hlZXQgPSAzKQoKIyBQU0UgY29udmVyc2lvbiBwYXJhbWV0ZXJzCnNjcmVlbl93aWR0aF9weCA8LSAxMDI0CnNjcmVlbl9oZWlnaHRfcHggPC0gNzY4CiMgU2NyZWVuIGlzIDExIGluY2hlcyB3aWRlCnNjcmVlbl93aWR0aF9jbSA8LSAxMSAqIDIuNTQgICMgQ29udmVydCBpbmNoZXMgdG8gY20Kc2NyZWVuX2hlaWdodF9jbSA8LSBzY3JlZW5fd2lkdGhfY20gKiAoNzY4LzEwMjQpICAjIENhbGN1bGF0ZSBoZWlnaHQgYmFzZWQgb24gYXNwZWN0IHJhdGlvCnZpZXdpbmdfZGlzdGFuY2VfY20gPC0gNjkKCiMgQ2FsY3VsYXRlIHZpc3VhbCBhbmdsZSBmb3IgMSBwaXhlbCAoaW4gcmFkaWFucykKcGl4ZWxzX3Blcl9jbSA8LSBzY3JlZW5fd2lkdGhfcHggLyBzY3JlZW5fd2lkdGhfY20KdmlzdWFsX2FuZ2xlXzFweF9yYWQgPC0gMiAqIGF0YW4oKDEgLyBwaXhlbHNfcGVyX2NtKSAvICgyICogdmlld2luZ19kaXN0YW5jZV9jbSkpCgojIENvbnZlcnQgdG8gZGVncmVlcwp2aXN1YWxfYW5nbGVfMXB4X2RlZyA8LSB2aXN1YWxfYW5nbGVfMXB4X3JhZCAqICgxODAvcGkpCgojIENhbGN1bGF0ZSB2aXN1YWwgYW5nbGUgcmFuZ2UgZm9yIC0yMDAgdG8gMjAwIHBpeGVscwpwaXhlbF9yYW5nZV9kZWcgPC0gNDAwICogdmlzdWFsX2FuZ2xlXzFweF9kZWcgICMgNDAwIHBpeGVscyB0b3RhbCByYW5nZSAoLTIwMCB0byArMjAwKQpjYXQoc3ByaW50ZigiVmlzdWFsIGFuZ2xlIHJhbmdlIGZvciAtMjAwIHRvICsyMDAgcGl4ZWxzOiAlLjJmIGRlZ3JlZXNcbiIsIHBpeGVsX3JhbmdlX2RlZykpCgojIFRyYW5zZm9ybSBhbmQgY2xlYW4gZGF0YQphbGxfZGF0YSA8LSBhbGxfZGF0YSAlPiUKICBtdXRhdGUoCiAgICBjb3JyZWN0ZWRfTFJkYXRhID0gaWZlbHNlKGNvcnJlY3RlZF9MUmRhdGEgPT0gMCwgLTEsIDEpLAogICAgbG9jb19yZXBvcnRfMi5rZXlzID0gY29ycmVjdGVkX0xSZGF0YSwKICAgIHRhcmdldFkgPSAwLAogICAgdGhpc04gPSB0cmlhbHMudGhpc1RyaWFsTiwKICAgIHRoaXNUcmlhbE4gPSB0cmlhbHMudGhpc1RyaWFsTiwKICAgIHRoaXNSZXBOID0gMSwKICAgICMgQ29udmVydCBQU0UgZnJvbSBwaXhlbHMgdG8gZGVncmVlcyBvZiB2aXN1YWwgYW5nbGUKICAgIFBTRV9kZWcgPSBQU0UgKiB2aXN1YWxfYW5nbGVfMXB4X2RlZywKICAgICMgQ29udmVydCBTT0EgZnJvbSBmcmFtZXMgdG8gbWlsbGlzZWNvbmRzICgxIGZyYW1lID0gMTBtcyBhdCAxMDBIeikKICAgIFNPQV9tcyA9IFNPQSAqIDEwCiAgKQoKIyBSZW1vdmUgY29udHJvbCB0cmlhbHMgKFNPQSA9IDEwIHdpdGggUFNFID0gwrEyMDApCmFsbF9kYXRhIDwtIGFsbF9kYXRhICU+JQogIGZpbHRlcighKFNPQSA9PSAxMCAmIChQU0UgPT0gLTIwMCB8IFBTRSA9PSAyMDApKSkKCiMgQ3JlYXRlIHBhcnRpY2lwYW50IHN1bW1hcnkKcGFydGljaXBhbnRfc3VtbWFyeSA8LSBhbGxfZGF0YSAlPiUKICBncm91cF9ieShwYXJ0aWNpcGFudCkgJT4lCiAgc3VtbWFyaXNlKAogICAgbl90cmlhbHMgPSBuKCksCiAgICBtZWFuX3BzZSA9IG1lYW4oUFNFX2RlZywgbmEucm0gPSBUUlVFKSwKICAgIG1pbl9wc2UgPSBtaW4oUFNFX2RlZywgbmEucm0gPSBUUlVFKSwKICAgIG1heF9wc2UgPSBtYXgoUFNFX2RlZywgbmEucm0gPSBUUlVFKQogICkgJT4lCiAgdW5ncm91cCgpCgojIE92ZXJhbGwgZGF0YXNldCBzdW1tYXJ5CmRhdGFzZXRfc3VtbWFyeSA8LSBhbGxfZGF0YSAlPiUKICBzdW1tYXJpc2UoCiAgICBuX3BhcnRpY2lwYW50cyA9IG5fZGlzdGluY3QocGFydGljaXBhbnQpLAogICAgbl90cmlhbHMgPSBuKCksCiAgICB0cmlhbHNfcGVyX3BhcnRpY2lwYW50ID0gcm91bmQobigpIC8gbl9kaXN0aW5jdChwYXJ0aWNpcGFudCksIDEpLAogICAgcHNlX3JhbmdlX21pbiA9IG1pbihQU0VfZGVnLCBuYS5ybSA9IFRSVUUpLAogICAgcHNlX3JhbmdlX21heCA9IG1heChQU0VfZGVnLCBuYS5ybSA9IFRSVUUpLAogICAgcHNlX21lYW4gPSBtZWFuKFBTRV9kZWcsIG5hLnJtID0gVFJVRSksCiAgICBwc2Vfc2QgPSBzZChQU0VfZGVnLCBuYS5ybSA9IFRSVUUpCiAgKQoKIyBJZGVudGlmeSBhbmQgZmlsdGVyIG91dCBvdXRsaWVycyBmb3Igc3Vic2VxdWVudCBhbmFseXNlcwpwc2Vfc3RhdHMgPC0gYWxsX2RhdGEgJT4lCiAgc3VtbWFyaXNlKAogICAgbWVhbl9wc2UgPSBtZWFuKFBTRV9kZWcsIG5hLnJtID0gVFJVRSksCiAgICBzZF9wc2UgPSBzZChQU0VfZGVnLCBuYS5ybSA9IFRSVUUpCiAgKQoKb3V0bGllcl90aHJlc2hvbGRfbG93ZXIgPC0gcHNlX3N0YXRzJG1lYW5fcHNlIC0gKDMgKiBwc2Vfc3RhdHMkc2RfcHNlKQpvdXRsaWVyX3RocmVzaG9sZF91cHBlciA8LSBwc2Vfc3RhdHMkbWVhbl9wc2UgKyAoMyAqIHBzZV9zdGF0cyRzZF9wc2UpCgpvdXRsaWVyX3BhcnRpY2lwYW50cyA8LSBwYXJ0aWNpcGFudF9zdW1tYXJ5ICU+JQogIGZpbHRlcihtZWFuX3BzZSA8IG91dGxpZXJfdGhyZXNob2xkX2xvd2VyIHwgbWVhbl9wc2UgPiBvdXRsaWVyX3RocmVzaG9sZF91cHBlcikKCiMgQ3JlYXRlIGZpbHRlcmVkIGRhdGFzZXRzIGZvciBzdWJzZXF1ZW50IGFuYWx5c2VzCiMgTm90ZTogV2UnbGwgZmlsdGVyIG91dCBleHRyZW1lIHJlc3BvbnNlIHJhdGUgcGFydGljaXBhbnRzIGluIHRoZSBkYXRhIHF1YWxpdHkgY2hlY2sgc2VjdGlvbgpleGNsdWRlZF9wYXJ0aWNpcGFudHMgPC0gb3V0bGllcl9wYXJ0aWNpcGFudHMkcGFydGljaXBhbnQKZmlsdGVyZWRfZGF0YSA8LSBhbGxfZGF0YSAlPiUKICBmaWx0ZXIoIXBhcnRpY2lwYW50ICVpbiUgZXhjbHVkZWRfcGFydGljaXBhbnRzKQoKZmlsdGVyZWRfcGFydGljaXBhbnRfc3VtbWFyeSA8LSBmaWx0ZXJlZF9kYXRhICU+JQogIGdyb3VwX2J5KHBhcnRpY2lwYW50KSAlPiUKICBzdW1tYXJpc2UoCiAgICBuX3RyaWFscyA9IG4oKSwKICAgIG1lYW5fcHNlID0gbWVhbihQU0VfZGVnLCBuYS5ybSA9IFRSVUUpLAogICAgbWluX3BzZSA9IG1pbihQU0VfZGVnLCBuYS5ybSA9IFRSVUUpLAogICAgbWF4X3BzZSA9IG1heChQU0VfZGVnLCBuYS5ybSA9IFRSVUUpCiAgKSAlPiUKICB1bmdyb3VwKCkKYGBgCgojIyBEYXRhIFN1bW1hcnkKCmBgYHtyIGRhdGEtc3VtbWFyeX0KIyBEaXNwbGF5IG92ZXJhbGwgZGF0YXNldCBzdW1tYXJ5CmthYmxlKGRhdGFzZXRfc3VtbWFyeSwgCiAgICAgIGNhcHRpb24gPSAiT3ZlcmFsbCBEYXRhc2V0IFN1bW1hcnkiLAogICAgICBjb2wubmFtZXMgPSBjKCJQYXJ0aWNpcGFudHMiLCAiVG90YWwgVHJpYWxzIiwgIlRyaWFscyBwZXIgUGFydGljaXBhbnQiLCAKICAgICAgICAgICAgICAgICAgICJQU0UgTWluIChkZWcpIiwgIlBTRSBNYXggKGRlZykiLCAiUFNFIE1lYW4gKGRlZykiLCAiUFNFIFNEIChkZWcpIiksCiAgICAgIGRpZ2l0cyA9IDIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIikpCmBgYAoKIyMgUmVzcG9uc2UgUmF0ZSBBbmFseXNpcwoKYGBge3IgcmVzcG9uc2UtcmF0ZS1hbmFseXNpc30KIyBDYWxjdWxhdGUgbGVmdCByZXNwb25zZSByYXRlIGZvciBlYWNoIHBhcnRpY2lwYW50IChiZWZvcmUgZmlsdGVyaW5nKQpsZWZ0X3Jlc3BvbnNlX3N1bW1hcnlfZnVsbCA8LSBhbGxfZGF0YSAlPiUKICBncm91cF9ieShwYXJ0aWNpcGFudCkgJT4lCiAgc3VtbWFyaXNlKAogICAgbl90cmlhbHMgPSBuKCksCiAgICBsZWZ0X3Jlc3BvbnNlcyA9IHN1bShjb3JyZWN0ZWRfTFJkYXRhID09IDEsIG5hLnJtID0gVFJVRSksCiAgICBsZWZ0X3Jlc3BvbnNlX3JhdGUgPSBtZWFuKGNvcnJlY3RlZF9MUmRhdGEgPT0gMSwgbmEucm0gPSBUUlVFKSAqIDEwMCwgICMgQ29udmVydCB0byBwZXJjZW50YWdlCiAgICBtZWFuX3BzZSA9IG1lYW4oUFNFX2RlZywgbmEucm0gPSBUUlVFKQogICkgJT4lCiAgdW5ncm91cCgpCmBgYAoKIyMgRGF0YSBRdWFsaXR5IENoZWNrCgpgYGB7ciBkYXRhLXF1YWxpdHl9CiMgSWRlbnRpZnkgcGFydGljaXBhbnRzIHdpdGggZXh0cmVtZSByZXNwb25zZSByYXRlcyAoMTAwJSBvciBjbG9zZSB0byAxMDAlKQpleHRyZW1lX3Jlc3BvbnNlX3BhcnRpY2lwYW50cyA8LSBsZWZ0X3Jlc3BvbnNlX3N1bW1hcnlfZnVsbCAlPiUKICBmaWx0ZXIobGVmdF9yZXNwb25zZV9yYXRlID49IDk1IHwgbGVmdF9yZXNwb25zZV9yYXRlIDw9IDUpICU+JQogIG11dGF0ZSgKICAgIHJlc3BvbnNlX2lzc3VlID0gY2FzZV93aGVuKAogICAgICBsZWZ0X3Jlc3BvbnNlX3JhdGUgPj0gOTUgfiAiTmVhciAxMDAlIExlZnQiLAogICAgICBsZWZ0X3Jlc3BvbnNlX3JhdGUgPD0gNSB+ICJOZWFyIDEwMCUgUmlnaHQiCiAgICApCiAgKQoKIyBDcmVhdGUgY29tcHJlaGVuc2l2ZSBkYXRhIHF1YWxpdHkgc3VtbWFyeSB0YWJsZQpkYXRhX3F1YWxpdHlfc3VtbWFyeSA8LSBkYXRhLmZyYW1lKAogIE1ldHJpYyA9IGMoIlBTRSBNZWFuIiwgIlBTRSBTRCIsICIzIFNEIExvd2VyIEJvdW5kIiwgIjMgU0QgVXBwZXIgQm91bmQiLCAKICAgICAgICAgICAgICJFeHRyZW1lIFBTRSBQYXJ0aWNpcGFudHMiLCAiRXh0cmVtZSBSZXNwb25zZSBSYXRlIFBhcnRpY2lwYW50cyIpLAogIFZhbHVlID0gYygKICAgIHJvdW5kKHBzZV9zdGF0cyRtZWFuX3BzZSwgMiksCiAgICByb3VuZChwc2Vfc3RhdHMkc2RfcHNlLCAyKSwKICAgIHJvdW5kKG91dGxpZXJfdGhyZXNob2xkX2xvd2VyLCAxKSwKICAgIHJvdW5kKG91dGxpZXJfdGhyZXNob2xkX3VwcGVyLCAxKSwKICAgIG5yb3cob3V0bGllcl9wYXJ0aWNpcGFudHMpLAogICAgbnJvdyhleHRyZW1lX3Jlc3BvbnNlX3BhcnRpY2lwYW50cykKICApCikKCiMgRGlzcGxheSBkYXRhIHF1YWxpdHkgc3VtbWFyeQprYWJsZShkYXRhX3F1YWxpdHlfc3VtbWFyeSwgCiAgICAgIGNhcHRpb24gPSAiRGF0YSBRdWFsaXR5IFN1bW1hcnkiLAogICAgICBjb2wubmFtZXMgPSBjKCJNZXRyaWMiLCAiVmFsdWUiKSwKICAgICAgZGlnaXRzID0gMikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiKSwgCiAgICAgICAgICAgICAgICBmdWxsX3dpZHRoID0gRkFMU0UpCgojIERpc3BsYXkgb3V0bGllciBwYXJ0aWNpcGFudHMgaWYgYW55IGV4aXN0CmlmKG5yb3cob3V0bGllcl9wYXJ0aWNpcGFudHMpID4gMCkgewogICMgR2V0IExSJSBmb3Igb3V0bGllciBwYXJ0aWNpcGFudHMKICBvdXRsaWVyX3dpdGhfbHIgPC0gb3V0bGllcl9wYXJ0aWNpcGFudHMgJT4lCiAgICBsZWZ0X2pvaW4obGVmdF9yZXNwb25zZV9zdW1tYXJ5X2Z1bGwgJT4lIAogICAgICAgICAgICAgICAgc2VsZWN0KHBhcnRpY2lwYW50LCBsZWZ0X3Jlc3BvbnNlX3JhdGUpLCAKICAgICAgICAgICAgICBieSA9ICJwYXJ0aWNpcGFudCIpCiAgCiAga2FibGUob3V0bGllcl93aXRoX2xyICU+JSAKICAgICAgICAgIHNlbGVjdChwYXJ0aWNpcGFudCwgbl90cmlhbHMsIG1lYW5fcHNlLCBsZWZ0X3Jlc3BvbnNlX3JhdGUpICU+JQogICAgICAgICAgcmVuYW1lKCJMUiUiID0gbGVmdF9yZXNwb25zZV9yYXRlKSwgCiAgICAgICAgY2FwdGlvbiA9IHBhc3RlKCJQYXJ0aWNpcGFudHMgd2l0aCBQU0UgQmV5b25kIDMgU0QgZnJvbSBNZWFuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgcm91bmQob3V0bGllcl90aHJlc2hvbGRfbG93ZXIsIDEpLCAidG8iLCAKICAgICAgICAgICAgICAgICAgICAgICByb3VuZChvdXRsaWVyX3RocmVzaG9sZF91cHBlciwgMSkpLAogICAgICAgIGRpZ2l0cyA9IDIpICU+JQogICAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiKSwgCiAgICAgICAgICAgICAgICAgIGZ1bGxfd2lkdGggPSBGQUxTRSkKfQoKIyBEaXNwbGF5IGV4dHJlbWUgcmVzcG9uc2UgcmF0ZSBwYXJ0aWNpcGFudHMgaWYgYW55IGV4aXN0CmlmKG5yb3coZXh0cmVtZV9yZXNwb25zZV9wYXJ0aWNpcGFudHMpID4gMCkgewogIGthYmxlKGV4dHJlbWVfcmVzcG9uc2VfcGFydGljaXBhbnRzICU+JQogICAgICAgICAgc2VsZWN0KC1yZXNwb25zZV9pc3N1ZSkgJT4lCiAgICAgICAgICByZW5hbWUoIkxSJSIgPSBsZWZ0X3Jlc3BvbnNlX3JhdGUpLAogICAgICAgIGNhcHRpb24gPSAiUGFydGljaXBhbnRzIHdpdGggRXh0cmVtZSBSZXNwb25zZSBSYXRlcyIsCiAgICAgICAgZGlnaXRzID0gMikgJT4lCiAgICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLAogICAgICAgICAgICAgICAgICBmdWxsX3dpZHRoID0gRkFMU0UpCn0KYGBgCgojIyBGaW5hbCBEYXRhIEZpbHRlcmluZwoKYGBge3IgZmluYWwtZmlsdGVyaW5nfQojIENvbWJpbmUgYWxsIHBhcnRpY2lwYW50cyB0byBleGNsdWRlIChQU0Ugb3V0bGllcnMgKyBleHRyZW1lIHJlc3BvbnNlIHJhdGVzKQphbGxfZXhjbHVkZWRfcGFydGljaXBhbnRzIDwtIGMoCiAgb3V0bGllcl9wYXJ0aWNpcGFudHMkcGFydGljaXBhbnQsCiAgZXh0cmVtZV9yZXNwb25zZV9wYXJ0aWNpcGFudHMkcGFydGljaXBhbnQKKSAlPiUgdW5pcXVlKCkKCiMgQ3JlYXRlIGZpbmFsIGZpbHRlcmVkIGRhdGFzZXQKZmluYWxfZmlsdGVyZWRfZGF0YSA8LSBhbGxfZGF0YSAlPiUKICBmaWx0ZXIoIXBhcnRpY2lwYW50ICVpbiUgYWxsX2V4Y2x1ZGVkX3BhcnRpY2lwYW50cykKCmZpbmFsX3BhcnRpY2lwYW50X3N1bW1hcnkgPC0gZmluYWxfZmlsdGVyZWRfZGF0YSAlPiUKICBncm91cF9ieShwYXJ0aWNpcGFudCkgJT4lCiAgc3VtbWFyaXNlKAogICAgbl90cmlhbHMgPSBuKCksCiAgICBtZWFuX3BzZSA9IG1lYW4oUFNFX2RlZywgbmEucm0gPSBUUlVFKSwKICAgIG1pbl9wc2UgPSBtaW4oUFNFX2RlZywgbmEucm0gPSBUUlVFKSwKICAgIG1heF9wc2UgPSBtYXgoUFNFX2RlZywgbmEucm0gPSBUUlVFKQogICkgJT4lCiAgdW5ncm91cCgpCgojIFN1bW1hcnkgb2YgZmlsdGVyaW5nCmZpbHRlcmluZ19zdW1tYXJ5IDwtIGRhdGEuZnJhbWUoCiAgTWV0cmljID0gYygiT3JpZ2luYWwgUGFydGljaXBhbnRzIiwgIlBTRSBPdXRsaWVycyBSZW1vdmVkIiwgIkV4dHJlbWUgUmVzcG9uc2UgUmF0ZXMgUmVtb3ZlZCIsICJGaW5hbCBQYXJ0aWNpcGFudHMiKSwKICBDb3VudCA9IGMoCiAgICBsZW5ndGgodW5pcXVlKGFsbF9kYXRhJHBhcnRpY2lwYW50KSksCiAgICBucm93KG91dGxpZXJfcGFydGljaXBhbnRzKSwKICAgIG5yb3coZXh0cmVtZV9yZXNwb25zZV9wYXJ0aWNpcGFudHMpLAogICAgbGVuZ3RoKHVuaXF1ZShmaW5hbF9maWx0ZXJlZF9kYXRhJHBhcnRpY2lwYW50KSkKICApCikKCmthYmxlKGZpbHRlcmluZ19zdW1tYXJ5LCAKICAgICAgY2FwdGlvbiA9ICJEYXRhIEZpbHRlcmluZyBTdW1tYXJ5IiwKICAgICAgY29sLm5hbWVzID0gYygiTWV0cmljIiwgIkNvdW50IiksCiAgICAgIGRpZ2l0cyA9IDApICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksIAogICAgICAgICAgICAgICAgZnVsbF93aWR0aCA9IEZBTFNFKQpgYGAKCiMjIERlc2NyaXB0aXZlIFN0YXRpc3RpY3MKCmBgYHtyIGRlc2NyaXB0aXZlc30KIyBDYWxjdWxhdGUgbGVmdCByZXNwb25zZSByYXRlIGZvciBlYWNoIHBhcnRpY2lwYW50ICh1c2luZyBmaW5hbCBmaWx0ZXJlZCBkYXRhKQpsZWZ0X3Jlc3BvbnNlX3N1bW1hcnkgPC0gZmluYWxfZmlsdGVyZWRfZGF0YSAlPiUKICBncm91cF9ieShwYXJ0aWNpcGFudCkgJT4lCiAgc3VtbWFyaXNlKAogICAgbl90cmlhbHMgPSBuKCksCiAgICAjIENvbnZlcnQgYmFjayB0byAwLzEgZm9yIHJhdGUgY2FsY3VsYXRpb24gKDEgPSBsZWZ0LCAwID0gcmlnaHQpCiAgICBsZWZ0X3Jlc3BvbnNlcyA9IHN1bShjb3JyZWN0ZWRfTFJkYXRhID09IDEsIG5hLnJtID0gVFJVRSksCiAgICBsZWZ0X3Jlc3BvbnNlX3JhdGUgPSBtZWFuKGNvcnJlY3RlZF9MUmRhdGEgPT0gMSwgbmEucm0gPSBUUlVFKSAqIDEwMCwgICMgQ29udmVydCB0byBwZXJjZW50YWdlCiAgICBtZWFuX3BzZSA9IG1lYW4oUFNFX2RlZywgbmEucm0gPSBUUlVFKQogICkgJT4lCiAgdW5ncm91cCgpCgojIE92ZXJhbGwgZGVzY3JpcHRpdmUgc3RhdGlzdGljcwpvdmVyYWxsX2Rlc2NyaXB0aXZlcyA8LSBsZWZ0X3Jlc3BvbnNlX3N1bW1hcnkgJT4lCiAgc3VtbWFyaXNlKAogICAgc2FtcGxlX3NpemUgPSBuKCksCiAgICBtZWFuX3BzZSA9IG1lYW4obWVhbl9wc2UsIG5hLnJtID0gVFJVRSksCiAgICBzZF9wc2UgPSBpZmVsc2UobigpID4gMSwgc2QobWVhbl9wc2UsIG5hLnJtID0gVFJVRSksIDApLCAgIyBTRCBhY3Jvc3MgcGFydGljaXBhbnRzJyBtZWFuIFBTRSB2YWx1ZXMKICAgIG1lYW5fbHJfcmF0ZSA9IG1lYW4obGVmdF9yZXNwb25zZV9yYXRlLCBuYS5ybSA9IFRSVUUpLAogICAgc2RfbHJfcmF0ZSA9IGlmZWxzZShuKCkgPiAxLCBzZChsZWZ0X3Jlc3BvbnNlX3JhdGUsIG5hLnJtID0gVFJVRSksIDApICAjIFNEIGFjcm9zcyBwYXJ0aWNpcGFudHMnIHJlc3BvbnNlIHJhdGVzCiAgKQoKIyBEaXNwbGF5IG92ZXJhbGwgZGVzY3JpcHRpdmUgc3RhdGlzdGljcwprYWJsZShvdmVyYWxsX2Rlc2NyaXB0aXZlcywgCiAgICAgIGNhcHRpb24gPSAiT3ZlcmFsbCBEZXNjcmlwdGl2ZSBTdGF0aXN0aWNzIiwKICAgICAgY29sLm5hbWVzID0gYygiU2FtcGxlIFNpemUiLCAiTWVhbiBQU0UgKGRlZykiLCAiU0QgUFNFIChkZWcpIiwgIk1lYW4gTFIlIiwgIlNEIExSJSIpLAogICAgICBkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpKQoKIyBQU0UgRGlzdHJpYnV0aW9uIGJ5IFBhcnRpY2lwYW50CmxpYnJhcnkoZ2dwbG90MikKCmNhdCgiUFNFIERpc3RyaWJ1dGlvbiBieSBQYXJ0aWNpcGFudFxuIikKCiMgVXNlIHRoZSB2aXN1YWwgYW5nbGUgcmFuZ2UgZm9yIC0yMDAgdG8gKzIwMCBwaXhlbHMgKGFscmVhZHkgY2FsY3VsYXRlZCBhYm92ZSkKaGlzdF9yYW5nZSA8LSBwaXhlbF9yYW5nZV9kZWcgLyAyICAjIEhhbGYgdGhlIHJhbmdlIGZvciAtMjAwIHRvICsyMDAKCnBzZV9oaXN0b2dyYW0gPC0gZ2dwbG90KGxlZnRfcmVzcG9uc2Vfc3VtbWFyeSwgYWVzKHggPSBtZWFuX3BzZSkpICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDAuMiwgZmlsbCA9ICIjNEU3OUE3IiwgYWxwaGEgPSAwLjcsIGNvbG9yID0gImJsYWNrIikgKwogIGxhYnMoeCA9ICJQU0UgKGRlZ3JlZXMpIiwgeSA9ICJOdW1iZXIgb2YgUGFydGljaXBhbnRzIikgKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKC1oaXN0X3JhbmdlLCBoaXN0X3JhbmdlKSwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgtNiwgNiwgYnkgPSAyKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSkKCnByaW50KHBzZV9oaXN0b2dyYW0pCgojIFJlc3BvbnNlIFJhdGUgRGlzdHJpYnV0aW9uIGJ5IFBhcnRpY2lwYW50CmNhdCgiTGVmdCBSZXNwb25zZSBSYXRlIERpc3RyaWJ1dGlvbiBieSBQYXJ0aWNpcGFudFxuIikKCmxyX2hpc3RvZ3JhbSA8LSBnZ3Bsb3QobGVmdF9yZXNwb25zZV9zdW1tYXJ5LCBhZXMoeCA9IGxlZnRfcmVzcG9uc2VfcmF0ZSkpICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDEwLCBmaWxsID0gIiNGMjhFMkIiLCBhbHBoYSA9IDAuNywgY29sb3IgPSAiYmxhY2siKSArCiAgbGFicyh4ID0gIkxlZnQgUmVzcG9uc2UgUmF0ZSAoJSkiLCB5ID0gIk51bWJlciBvZiBQYXJ0aWNpcGFudHMiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSkKCnByaW50KGxyX2hpc3RvZ3JhbSkKYGBgCgojIyBBbmFseXNpcwoKYGBge3IgYW5hbHlzaXN9CiMgR3JvdXAtbGV2ZWwgTFIlIGFjcm9zcyBTT0FzCmdyb3VwX2xyX2J5X3NvYSA8LSBmaW5hbF9maWx0ZXJlZF9kYXRhICU+JQogIGdyb3VwX2J5KFNPQV9tcykgJT4lCiAgc3VtbWFyaXNlKAogICAgbl90cmlhbHMgPSBuKCksCiAgICBsZWZ0X3Jlc3BvbnNlcyA9IHN1bShjb3JyZWN0ZWRfTFJkYXRhID09IDEsIG5hLnJtID0gVFJVRSksCiAgICBsZWZ0X3Jlc3BvbnNlX3JhdGUgPSBtZWFuKGNvcnJlY3RlZF9MUmRhdGEgPT0gMSwgbmEucm0gPSBUUlVFKSAqIDEwMCwKICAgIHNlX2xyID0gc2QoY29ycmVjdGVkX0xSZGF0YSA9PSAxLCBuYS5ybSA9IFRSVUUpIC8gc3FydChuKCkpICogMTAwCiAgKSAlPiUKICB1bmdyb3VwKCkKCiMgQ2FsY3VsYXRlIHktYXhpcyBsaW1pdHMgZm9yIGdyb3VwLWxldmVsIFNPQSBwbG90IChwcm9wZXIgc2NhbGluZyBmb3IgcHJvcG9ydGlvbnMpCmdyb3VwX3JhbmdlIDwtIHJhbmdlKGdyb3VwX2xyX2J5X3NvYSRsZWZ0X3Jlc3BvbnNlX3JhdGUsIG5hLnJtID0gVFJVRSkKUiA8LSBncm91cF9yYW5nZVsyXSAtIGdyb3VwX3JhbmdlWzFdCmdyb3VwX3lfbWluIDwtIG1heCgwLCBncm91cF9yYW5nZVsxXSAtIDAuMDIgKiAxMDApICAjIEFsbG93IC0yJSBidWZmZXIgZm9yIHByb3BvcnRpb25zCmdyb3VwX3lfbWF4IDwtIG1pbigxMDAsIGdyb3VwX3JhbmdlWzJdICsgMC4wMiAqIDEwMCkgICMgQWxsb3cgKzIlIGJ1ZmZlciBmb3IgcHJvcG9ydGlvbnMKCiMgR3JvdXAtbGV2ZWwgTFIlIGFjcm9zcyBTT0FzIHZpc3VhbGl6YXRpb24KY2F0KCJHcm91cC1MZXZlbCBMZWZ0IFJlc3BvbnNlIFJhdGUgYnkgU09BXG4iKQoKbHJfYnlfc29hX3Bsb3QgPC0gZ2dwbG90KGdyb3VwX2xyX2J5X3NvYSwgYWVzKHggPSBTT0FfbXMsIHkgPSBsZWZ0X3Jlc3BvbnNlX3JhdGUpKSArCiAgZ2VvbV9yaWJib24oYWVzKHltaW4gPSBsZWZ0X3Jlc3BvbnNlX3JhdGUgLSBzZV9sciwgCiAgICAgICAgICAgICAgICAgIHltYXggPSBsZWZ0X3Jlc3BvbnNlX3JhdGUgKyBzZV9sciksIAogICAgICAgICAgICAgIGFscGhhID0gMC4zLCBmaWxsID0gIiM0RTc5QTciKSArCiAgZ2VvbV9saW5lKHNpemUgPSAxLjIsIGNvbG9yID0gIiM0RTc5QTciKSArCiAgZ2VvbV9wb2ludChzaXplID0gMywgY29sb3IgPSAiIzRFNzlBNyIpICsKICBsYWJzKHggPSAiU09BIChtcykiLCB5ID0gIkxlZnQgUmVzcG9uc2UgUmF0ZSAoJSkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoZ3JvdXBfeV9taW4sIGdyb3VwX3lfbWF4KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSkKCnByaW50KGxyX2J5X3NvYV9wbG90KQoKIyBGaW5kIHBhcnRpY2lwYW50IGNsb3Nlc3QgdG8gZ3JvdXAgbWVhbiBhbmQgU0QKZ3JvdXBfbWVhbl9wc2UgPC0gbWVhbihsZWZ0X3Jlc3BvbnNlX3N1bW1hcnkkbWVhbl9wc2UsIG5hLnJtID0gVFJVRSkKZ3JvdXBfc2RfcHNlIDwtIHNkKGxlZnRfcmVzcG9uc2Vfc3VtbWFyeSRtZWFuX3BzZSwgbmEucm0gPSBUUlVFKQoKIyBDYWxjdWxhdGUgZGlzdGFuY2UgZnJvbSBncm91cCBtZWFuIGZvciBlYWNoIHBhcnRpY2lwYW50CnJlcHJlc2VudGF0aXZlX3BhcnRpY2lwYW50IDwtIGxlZnRfcmVzcG9uc2Vfc3VtbWFyeSAlPiUKICBtdXRhdGUoZGlzdGFuY2VfZnJvbV9tZWFuID0gYWJzKG1lYW5fcHNlIC0gZ3JvdXBfbWVhbl9wc2UpKSAlPiUKICBhcnJhbmdlKGRpc3RhbmNlX2Zyb21fbWVhbikgJT4lCiAgc2xpY2UoMSkgJT4lCiAgcHVsbChwYXJ0aWNpcGFudCkKCiMgSW5kaXZpZHVhbC1sZXZlbCBMUiUgYWNyb3NzIFNPQXMgZm9yIHJlcHJlc2VudGF0aXZlIHBhcnRpY2lwYW50CmluZGl2aWR1YWxfbHJfYnlfc29hIDwtIGZpbmFsX2ZpbHRlcmVkX2RhdGEgJT4lCiAgZmlsdGVyKHBhcnRpY2lwYW50ID09IHJlcHJlc2VudGF0aXZlX3BhcnRpY2lwYW50KSAlPiUKICBncm91cF9ieShTT0FfbXMpICU+JQogIHN1bW1hcmlzZSgKICAgIG5fdHJpYWxzID0gbigpLAogICAgbGVmdF9yZXNwb25zZXMgPSBzdW0oY29ycmVjdGVkX0xSZGF0YSA9PSAxLCBuYS5ybSA9IFRSVUUpLAogICAgbGVmdF9yZXNwb25zZV9yYXRlID0gbWVhbihjb3JyZWN0ZWRfTFJkYXRhID09IDEsIG5hLnJtID0gVFJVRSkgKiAxMDAKICApICU+JQogIHVuZ3JvdXAoKQoKIyBDYWxjdWxhdGUgeS1heGlzIGxpbWl0cyBmb3IgaW5kaXZpZHVhbC1sZXZlbCBTT0EgcGxvdCAocHJvcGVyIHNjYWxpbmcgZm9yIHByb3BvcnRpb25zKQppbmRpdmlkdWFsX3JhbmdlIDwtIHJhbmdlKGluZGl2aWR1YWxfbHJfYnlfc29hJGxlZnRfcmVzcG9uc2VfcmF0ZSwgbmEucm0gPSBUUlVFKQppbmRpdmlkdWFsX3lfbWluIDwtIG1heCgwLCBpbmRpdmlkdWFsX3JhbmdlWzFdIC0gMC4wMiAqIDEwMCkgICMgQWxsb3cgLTIlIGJ1ZmZlciBmb3IgcHJvcG9ydGlvbnMKaW5kaXZpZHVhbF95X21heCA8LSBtaW4oMTAwLCBpbmRpdmlkdWFsX3JhbmdlWzJdICsgMC4wMiAqIDEwMCkgICMgQWxsb3cgKzIlIGJ1ZmZlciBmb3IgcHJvcG9ydGlvbnMKCiMgSW5kaXZpZHVhbC1sZXZlbCBMUiUgYWNyb3NzIFNPQXMgdmlzdWFsaXphdGlvbgpjYXQocGFzdGUoIkluZGl2aWR1YWwtTGV2ZWwgTGVmdCBSZXNwb25zZSBSYXRlIGJ5IFNPQSAtIFBhcnRpY2lwYW50IiwgcmVwcmVzZW50YXRpdmVfcGFydGljaXBhbnQsICJcbiIpKQoKaW5kaXZpZHVhbF9scl9wbG90IDwtIGdncGxvdChpbmRpdmlkdWFsX2xyX2J5X3NvYSwgYWVzKHggPSBTT0FfbXMsIHkgPSBsZWZ0X3Jlc3BvbnNlX3JhdGUpKSArCiAgZ2VvbV9saW5lKHNpemUgPSAxLjIsIGNvbG9yID0gIiNFMTU3NTkiKSArCiAgZ2VvbV9wb2ludChzaXplID0gMywgY29sb3IgPSAiI0UxNTc1OSIpICsKICBsYWJzKHggPSAiU09BIChtcykiLCB5ID0gIkxlZnQgUmVzcG9uc2UgUmF0ZSAoJSkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoaW5kaXZpZHVhbF95X21pbiwgaW5kaXZpZHVhbF95X21heCkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIikpCgpwcmludChpbmRpdmlkdWFsX2xyX3Bsb3QpCgojIERldHJlbmQgYW5kIGZpbHRlciB0aGUgZ3JvdXAtbGV2ZWwgdGltZSBzZXJpZXMKbGlicmFyeShzaWduYWwpCgojIENyZWF0ZSB0aW1lIHNlcmllcyBkYXRhIGZvciBmaWx0ZXJpbmcgKFNPQSBpbiBtcyByZXByZXNlbnRzIHRpbWUpCmdyb3VwX3RpbWVfc2VyaWVzIDwtIGdyb3VwX2xyX2J5X3NvYSAlPiUKICBhcnJhbmdlKFNPQV9tcykgJT4lCiAgbXV0YXRlKAogICAgdGltZV9tcyA9IFNPQV9tcywKICAgIGxlZnRfcmVzcG9uc2VfcmF0ZV9yYXcgPSBsZWZ0X3Jlc3BvbnNlX3JhdGUKICApCgojIERldHJlbmQgdGhlIGRhdGEgdXNpbmcgc3BsaW5lIGRldHJlbmRpbmcKZGV0cmVuZGVkX2RhdGEgPC0gZ3JvdXBfdGltZV9zZXJpZXMgJT4lCiAgbXV0YXRlKAogICAgbGVmdF9yZXNwb25zZV9yYXRlX2RldHJlbmRlZCA9IHJlc2lkdWFscyhsbShsZWZ0X3Jlc3BvbnNlX3JhdGVfcmF3IH4gc3BsaW5lczo6bnModGltZV9tcywgZGYgPSAzKSkpCiAgKQoKIyBEZXNpZ24gQnV0dGVyd29ydGggZmlsdGVyICg0LTE4IEh6IGJhbmRwYXNzKQojIENvbnZlcnQgU09BIHRvIHRpbWUgc2VyaWVzIHdpdGggYXBwcm9wcmlhdGUgc2FtcGxpbmcgcmF0ZQojIEFzc3VtaW5nIFNPQSByZXByZXNlbnRzIHRpbWUgcG9pbnRzLCB3ZSBuZWVkIHRvIGVzdGltYXRlIHNhbXBsaW5nIHJhdGUKdGltZV9yYW5nZV9tcyA8LSBtYXgoZ3JvdXBfdGltZV9zZXJpZXMkdGltZV9tcykgLSBtaW4oZ3JvdXBfdGltZV9zZXJpZXMkdGltZV9tcykKbl9wb2ludHMgPC0gbnJvdyhncm91cF90aW1lX3NlcmllcykKZXN0aW1hdGVkX3NhbXBsaW5nX3JhdGUgPC0gKG5fcG9pbnRzIC0gMSkgLyAodGltZV9yYW5nZV9tcyAvIDEwMDApICAjIEh6CgojIFVzZSBhIHJlYXNvbmFibGUgc2FtcGxpbmcgcmF0ZSBmb3IgdGhlIHRpbWUgc2VyaWVzCnNhbXBsaW5nX3JhdGUgPC0gMTAwICAjIEh6IChhZGp1c3QgaWYgbmVlZGVkKQpueXF1aXN0X2ZyZXEgPC0gc2FtcGxpbmdfcmF0ZSAvIDIKbG93X2ZyZXEgPC0gNCAvIG55cXVpc3RfZnJlcQpoaWdoX2ZyZXEgPC0gMTggLyBueXF1aXN0X2ZyZXEKCiMgQ3JlYXRlIGJhbmRwYXNzIGZpbHRlciAob3JkZXIgMikKYnV0dGVyX2ZpbHRlciA8LSBidXR0ZXIoMiwgYyhsb3dfZnJlcSwgaGlnaF9mcmVxKSwgdHlwZSA9ICJwYXNzIikKCiMgQXBwbHkgZmlsdGVyIHRvIGRldHJlbmRlZCBkYXRhCmdyb3VwX3RpbWVfc2VyaWVzX2ZpbHRlcmVkIDwtIGRldHJlbmRlZF9kYXRhICU+JQogIG11dGF0ZSgKICAgIGxlZnRfcmVzcG9uc2VfcmF0ZV9maWx0ZXJlZCA9IGZpbHRmaWx0KGJ1dHRlcl9maWx0ZXIsIGxlZnRfcmVzcG9uc2VfcmF0ZV9kZXRyZW5kZWQpCiAgKQoKIyBVc2UgZnVsbCB0aW1lIHNlcmllcyBmb3IgYWxsIGFuYWx5c2VzCmZ1bGxfdHMgPC0gZ3JvdXBfdGltZV9zZXJpZXNfZmlsdGVyZWQgJT4lCiAgZHBseXI6OmFycmFuZ2UodGltZV9tcykKCiMgRGV0cmVuZGVkIGdyb3VwLWxldmVsIExSJSBhY3Jvc3MgU09BcwpjYXQoIkdyb3VwLUxldmVsIExlZnQgUmVzcG9uc2UgUmF0ZSBieSBTT0EgLSBEZXRyZW5kZWRcbiIpCgojIENhbGN1bGF0ZSB5LWF4aXMgbGltaXRzIGZvciBkZXRyZW5kZWQgcGxvdCAoc3ltbWV0cmljIGFyb3VuZCAwIGZvciByZXNpZHVhbHMpCmRldHJlbmRlZF9yYW5nZSA8LSByYW5nZShncm91cF90aW1lX3Nlcmllc19maWx0ZXJlZCRsZWZ0X3Jlc3BvbnNlX3JhdGVfZGV0cmVuZGVkLCBuYS5ybSA9IFRSVUUpCmRldHJlbmRlZF95X2xpbWl0IDwtIG1heChhYnMoZGV0cmVuZGVkX3JhbmdlKSkgKiAxLjA1ICAjIMKxMS4wNcOXbWF4KHx5fCkgZm9yIHJlc2lkdWFscwoKZGV0cmVuZGVkX3Bsb3QgPC0gZ2dwbG90KGdyb3VwX3RpbWVfc2VyaWVzX2ZpbHRlcmVkLCBhZXMoeCA9IHRpbWVfbXMpKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gbGVmdF9yZXNwb25zZV9yYXRlX2RldHJlbmRlZCksIHNpemUgPSAxLjIsIGNvbG9yID0gIiM0RTc5QTciKSArCiAgZ2VvbV9wb2ludChhZXMoeSA9IGxlZnRfcmVzcG9uc2VfcmF0ZV9kZXRyZW5kZWQpLCBzaXplID0gMywgY29sb3IgPSAiIzRFNzlBNyIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsaW5ldHlwZSA9ICJkb3R0ZWQiLCBjb2xvciA9ICJncmF5NTAiKSArCiAgbGFicyh4ID0gIlNPQSAobXMpIiwgeSA9ICJMZWZ0IFJlc3BvbnNlIFJhdGUgUmVzaWR1YWxzICglKSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygtZGV0cmVuZGVkX3lfbGltaXQsIGRldHJlbmRlZF95X2xpbWl0KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSkKCnByaW50KGRldHJlbmRlZF9wbG90KQoKIyBDYWxjdWxhdGUgeS1heGlzIGxpbWl0cyBmb3IgZmlsdGVyZWQgcGxvdCAoc3ltbWV0cmljIGFyb3VuZCAwIGZvciByZXNpZHVhbHMpCmZpbHRlcmVkX3JhbmdlIDwtIHJhbmdlKGdyb3VwX3RpbWVfc2VyaWVzX2ZpbHRlcmVkJGxlZnRfcmVzcG9uc2VfcmF0ZV9maWx0ZXJlZCwgbmEucm0gPSBUUlVFKQpmaWx0ZXJlZF95X2xpbWl0IDwtIG1heChhYnMoZmlsdGVyZWRfcmFuZ2UpKSAqIDEuMDUgICMgwrExLjA1w5dtYXgofHl8KSBmb3IgcmVzaWR1YWxzCgojIEJ1dHRlcndvcnRoIGZpbHRlcmVkIGdyb3VwLWxldmVsIExSJSBhY3Jvc3MgU09BcwpjYXQoIkdyb3VwLUxldmVsIExlZnQgUmVzcG9uc2UgUmF0ZSBieSBTT0EgLSBCdXR0ZXJ3b3J0aCBGaWx0ZXJlZCAoNC0xOCBIeilcbiIpCgpmaWx0ZXJlZF9wbG90IDwtIGdncGxvdChncm91cF90aW1lX3Nlcmllc19maWx0ZXJlZCwgYWVzKHggPSB0aW1lX21zKSkgKwogIGdlb21fbGluZShhZXMoeSA9IGxlZnRfcmVzcG9uc2VfcmF0ZV9maWx0ZXJlZCksIHNpemUgPSAxLjIsIGNvbG9yID0gIiNFMTU3NTkiKSArCiAgZ2VvbV9wb2ludChhZXMoeSA9IGxlZnRfcmVzcG9uc2VfcmF0ZV9maWx0ZXJlZCksIHNpemUgPSAzLCBjb2xvciA9ICIjRTE1NzU5IikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGxpbmV0eXBlID0gImRvdHRlZCIsIGNvbG9yID0gImdyYXk1MCIpICsKICBsYWJzKHggPSAiU09BIChtcykiLCB5ID0gIkxlZnQgUmVzcG9uc2UgUmF0ZSBGaWx0ZXJlZCAoJSkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoLWZpbHRlcmVkX3lfbGltaXQsIGZpbHRlcmVkX3lfbGltaXQpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpKQoKcHJpbnQoZmlsdGVyZWRfcGxvdCkKCiMgT3ZlcmxheSAxMCBIeiBzaW51c29pZCBhbmQgY29tcHV0ZSBSXjIgZ29vZG5lc3Mtb2YtZml0CmNhdCgiMTAgSHogU2ludXNvaWQgT3ZlcmxheSBhbmQgUl4yIEZpdFxuIikKCiMgVGltZSB2ZWN0b3IgaW4gc2Vjb25kcwp0X3NlYyA8LSBncm91cF90aW1lX3Nlcmllc19maWx0ZXJlZCR0aW1lX21zIC8gMTAwMApmMCA8LSAxMCAgIyBIegoKIyBCdWlsZCByZWdyZXNzb3JzIGZvciBhIGZpeGVkLWZyZXF1ZW5jeSBzaW51c29pZDogeSB+IGEqc2luKDLPgGZ0KSArIGIqY29zKDLPgGZ0KQpzaW5fMTAgPC0gc2luKDIgKiBwaSAqIGYwICogdF9zZWMpCmNvc18xMCA8LSBjb3MoMiAqIHBpICogZjAgKiB0X3NlYykKCiMgUmVzcG9uc2UgaXMgdGhlIGZpbHRlcmVkIHJlc2lkdWFsIHNlcmllcyAoY2VudGVyZWQgYXJvdW5kIDApCnkgPC0gZ3JvdXBfdGltZV9zZXJpZXNfZmlsdGVyZWQkbGVmdF9yZXNwb25zZV9yYXRlX2ZpbHRlcmVkCgojIEZpdCBsaW5lYXIgbW9kZWwgdG8gb2J0YWluIGJlc3QtZml0dGluZyBhbXBsaXR1ZGUvcGhhc2UgYXQgMTAgSHoKc2ludXNvaWRfZml0IDwtIGxtKHkgfiBzaW5fMTAgKyBjb3NfMTApCnlfaGF0IDwtIGZpdHRlZChzaW51c29pZF9maXQpCgojIFJeMiBnb29kbmVzcyBvZiBmaXQKcnNzIDwtIHN1bSgoeSAtIHlfaGF0KV4yLCBuYS5ybSA9IFRSVUUpCnRzcyA8LSBzdW0oKHkgLSBtZWFuKHksIG5hLnJtID0gVFJVRSkpXjIsIG5hLnJtID0gVFJVRSkKcl9zcXVhcmVkXzEwaHogPC0gaWZlbHNlKHRzcyA+IDAsIDEgLSByc3MvdHNzLCBOQV9yZWFsXykKCiMgUGxvdCBvdmVybGF5Cm92ZXJsYXlfZGYgPC0gZGF0YS5mcmFtZSh0aW1lX21zID0gZ3JvdXBfdGltZV9zZXJpZXNfZmlsdGVyZWQkdGltZV9tcywKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkID0geSwKICAgICAgICAgICAgICAgICAgICAgICAgIGZpdF8xMGh6ID0geV9oYXQpCgpvdmVybGF5X3Bsb3QgPC0gZ2dwbG90KG92ZXJsYXlfZGYsIGFlcyh4ID0gdGltZV9tcykpICsKICBnZW9tX2xpbmUoYWVzKHkgPSBmaWx0ZXJlZCksIGNvbG9yID0gIiNFMTU3NTkiLCBsaW5ld2lkdGggPSAxLjEpICsKICBnZW9tX2xpbmUoYWVzKHkgPSBmaXRfMTBoeiksIGNvbG9yID0gIiM1OUExNEYiLCBsaW5ld2lkdGggPSAxLCBsaW5ldHlwZSA9ICJzb2xpZCIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsaW5ldHlwZSA9ICJkb3R0ZWQiLCBjb2xvciA9ICJncmF5NTAiKSArCiAgbGFicyh4ID0gIlNPQSAobXMpIiwgeSA9ICJMZWZ0IFJlc3BvbnNlIFJhdGUgRmlsdGVyZWQgKCUpIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSkKCnByaW50KG92ZXJsYXlfcGxvdCkKCiMgUHJpbnQgUl4yIHZhbHVlIGZvciByZWZlcmVuY2UKY2F0KHNwcmludGYoIlJeMiAoMTAgSHogc2ludXNvaWQgZml0KTogJS4zZlxuIiwgcl9zcXVhcmVkXzEwaHopKQoKIyBSRkZUIG9mIHRoZSBmaWx0ZXJlZCB0aW1lIHNlcmllcyAod2l0aCB6ZXJvIHBhZGRpbmcgZm9yIGJldHRlciByZXNvbHV0aW9uKQpjYXQoIlJGRlQgb2YgRmlsdGVyZWQgTGVmdCBSZXNwb25zZSBSYXRlXG4iKQoKIyBQcmVwYXJlIHNpZ25hbCBhbmQgY29tcHV0ZSBGRlQgKG5vcm1hbGl6ZSB0byB1bml0IHZhcmlhbmNlKQpzaWduYWxfdHMgPC0gZ3JvdXBfdGltZV9zZXJpZXNfZmlsdGVyZWQkbGVmdF9yZXNwb25zZV9yYXRlX2ZpbHRlcmVkCnNpZ25hbF90cyA8LSBhcy5udW1lcmljKHNjYWxlKHNpZ25hbF90cywgY2VudGVyID0gVFJVRSwgc2NhbGUgPSBUUlVFKSkKTiA8LSBsZW5ndGgoc2lnbmFsX3RzKQoKIyBBcHBseSB6ZXJvIHBhZGRpbmcgKGRvdWJsZSB0aGUgbGVuZ3RoIGZvciBiZXR0ZXIgZnJlcXVlbmN5IHJlc29sdXRpb24pCk5fcGFkZGVkIDwtIDIgKiBOCnNpZ25hbF9wYWRkZWQgPC0gYyhzaWduYWxfdHMsIHJlcCgwLCBOKSkKZmZ0X3ZhbHMgPC0gZmZ0KHNpZ25hbF9wYWRkZWQpICAjIGNvbXBsZXggRkZUCgojIEZyZXF1ZW5jaWVzIGNvcnJlc3BvbmRpbmcgdG8gRkZUIGJpbnMKZnJlcXMgPC0gKDA6KE5fcGFkZGVkIC0gMSkpICogKHNhbXBsaW5nX3JhdGUgLyBOX3BhZGRlZCkKbnlxIDwtIHNhbXBsaW5nX3JhdGUgLyAyCgojIEtlZXAgbm9uLXJlZHVuZGFudCBwb3NpdGl2ZSBmcmVxdWVuY2llcyAocmVhbCBGRlQgcG9ydGlvbikKaGFsZl9uIDwtIGZsb29yKE5fcGFkZGVkIC8gMikgKyAxCmZyZXFzX2hhbGYgPC0gZnJlcXNbMTpoYWxmX25dCmZmdF9oYWxmIDwtIGZmdF92YWxzWzE6aGFsZl9uXQoKIyBDb252ZXJ0IHRvIHNpbmdsZS1zaWRlZCBhbXBsaXR1ZGUgc3BlY3RydW0KYW1wbGl0dWRlIDwtICgyIC8gTl9wYWRkZWQpICogTW9kKGZmdF9oYWxmKQphbXBsaXR1ZGVbMV0gPC0gYW1wbGl0dWRlWzFdIC8gMiAgIyBEQyBjb21wb25lbnQgc2hvdWxkIG5vdCBiZSBkb3VibGVkCgojIFBsb3QgYW1wbGl0dWRlIHNwZWN0cnVtCnJmZnRfcGxvdCA8LSBnZ3Bsb3QoZGF0YS5mcmFtZShmcmVxPWZyZXFzX2hhbGYsIGFtcD1hbXBsaXR1ZGUpLCBhZXMoeCA9IGZyZXEsIHkgPSBhbXApKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gIiM0RTc5QTciLCBsaW5ld2lkdGggPSAxLjEpICsKICBnZW9tX3BvaW50KGNvbG9yID0gIiM0RTc5QTciLCBzaXplID0gMS41LCBhbHBoYSA9IDAuNykgKwogIGxhYnMoeCA9ICJGcmVxdWVuY3kgKEh6KSIsIHkgPSAiQW1wbGl0dWRlIikgKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDIwKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSkKCnByaW50KHJmZnRfcGxvdCkKCiMgRmluZCBwZWFrIGZyZXF1ZW5jaWVzIGZyb20gZ3JvdXAtbGV2ZWwgRkZUCmZmdF9kYXRhIDwtIGRhdGEuZnJhbWUoZnJlcSA9IGZyZXFzX2hhbGYsIGFtcCA9IGFtcGxpdHVkZSkKIyBGaWx0ZXIgdG8gNC0xOCBIeiByYW5nZSB0byBtYXRjaCBvdXIgYW5hbHlzaXMKZmZ0X2ZpbHRlcmVkIDwtIGZmdF9kYXRhICU+JQogIGZpbHRlcihmcmVxID49IDQsIGZyZXEgPD0gMTgpCgojIEZpbmQgbG9jYWwgbWF4aW1hIChwZWFrcykKcGVha3MgPC0gZmZ0X2ZpbHRlcmVkICU+JQogIG11dGF0ZSgKICAgIGlzX3BlYWsgPSBhbXAgPiBsYWcoYW1wLCBkZWZhdWx0ID0gMCkgJiBhbXAgPiBsZWFkKGFtcCwgZGVmYXVsdCA9IDApCiAgKSAlPiUKICBmaWx0ZXIoaXNfcGVhaykgJT4lCiAgYXJyYW5nZShkZXNjKGFtcCkpICU+JQogIHNsaWNlX2hlYWQobiA9IDMpICAjIEdldCB0b3AgMyBwZWFrcwoKY2F0KCJQZWFrIGZyZXF1ZW5jaWVzIGZyb20gZ3JvdXAtbGV2ZWwgRkZUOlxuIikKcHJpbnQocGVha3MgJT4lIHNlbGVjdChmcmVxLCBhbXApKQoKIyBHZXQgdGhlIHR3byBoaWdoZXN0IHBlYWtzCnBlYWtfZnJlcXMgPC0gcGVha3MkZnJlcVsxOjJdCmNhdChzcHJpbnRmKCJUb3AgMiBwZWFrIGZyZXF1ZW5jaWVzOiAlLjFmIEh6IGFuZCAlLjFmIEh6XG4iLCBwZWFrX2ZyZXFzWzFdLCBwZWFrX2ZyZXFzWzJdKSkKCiMgRnJlcXVlbmN5IGFuYWx5c2lzCmNhdCgiRnJlcXVlbmN5IGFuYWx5c2lzXG4iKQoKIyBQZXJtdXRhdGlvbiB0ZXN0OiBzaHVmZmxlIHRpbWUgKHgpIDEwMDAgdGltZXMgYW5kIHJlY29tcHV0ZSBSXjIgYXQgMTAgSHogKGZ1bGwgc2VyaWVzKQpzZXQuc2VlZCgxMjMpCm5fcGVybSA8LSAxMDAwCnIyX3Blcm0gPC0gcmVwbGljYXRlKG5fcGVybSwgewogIHRfcGVybSA8LSBzYW1wbGUodF9zZWMpCiAgc2lucCA8LSBzaW4oMiAqIHBpICogZjAgKiB0X3Blcm0pCiAgY29zcCA8LSBjb3MoMiAqIHBpICogZjAgKiB0X3Blcm0pCiAgZml0cCA8LSBsbSh5IH4gc2lucCArIGNvc3ApCiAgeWhhdHAgPC0gZml0dGVkKGZpdHApCiAgcnNzcCA8LSBzdW0oKHkgLSB5aGF0cCleMiwgbmEucm0gPSBUUlVFKQogIHRzc3AgPC0gc3VtKCh5IC0gbWVhbih5LCBuYS5ybSA9IFRSVUUpKV4yLCBuYS5ybSA9IFRSVUUpCiAgaWYgKHRzc3AgPiAwKSAxIC0gcnNzcC90c3NwIGVsc2UgTkFfcmVhbF8KfSkKCiMgRW1waXJpY2FsIHAtdmFsdWVzCnBfdmFsIDwtIG1lYW4ocjJfcGVybSA+PSByX3NxdWFyZWRfMTBoeiwgbmEucm0gPSBUUlVFKQpjYXQoc3ByaW50ZigiUGVybXV0YXRpb24gdGVzdCAoZnVsbCwgbj0lZCk6IHAgPSAlLjRmXG4iLCBuX3Blcm0sIHBfdmFsKSkKCiMgUGVybXV0YXRpb24gaGlzdG9ncmFtIHdpdGggY3JpdGljYWwgdmFsdWUKY3JpdF92YWwgPC0gcXVhbnRpbGUocjJfcGVybSwgMC45NSwgbmEucm0gPSBUUlVFKQpjYXQoIkZyZXF1ZW5jeSBhbmFseXNpcyDigJMgRnVsbCB0aW1lIHNlcmllcyBwZXJtdXRhdGlvbiB0ZXN0XG4iKQpwZXJtX2RmIDwtIGRhdGEuZnJhbWUocjIgPSByMl9wZXJtKQpwZXJtX2hpc3QgPC0gZ2dwbG90KHBlcm1fZGYsIGFlcyh4ID0gcjIpKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlucyA9IDQwLCBmaWxsID0gIiM0RTc5QTciLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC43KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gcl9zcXVhcmVkXzEwaHosIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gIiNFMTU3NTkiLCBsaW5ld2lkdGggPSAxKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gY3JpdF92YWwsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gIiM1OUExNEYiLCBsaW5ld2lkdGggPSAxKSArCiAgbGFicyh4ID0gIlJeMiAoMTAgSHogZml0LCBzaHVmZmxlZCB0aW1lcykiLCB5ID0gIkNvdW50IikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSkKcHJpbnQocGVybV9oaXN0KQpjYXQoc3ByaW50ZigiQ3JpdGljYWwgdmFsdWUgKDk1dGggJSUgb2YgcGVybXV0ZWQgUl4yKTogJS4zZlxuIiwgY3JpdF92YWwpKQoKIyBQZXJtdXRhdGlvbiB0ZXN0cyBmb3IgcGVhayBmcmVxdWVuY2llcyBmcm9tIGdyb3VwLWxldmVsIEZGVApjYXQoIlBlcm11dGF0aW9uIHRlc3RzIGZvciBwZWFrIGZyZXF1ZW5jaWVzIGZyb20gZ3JvdXAtbGV2ZWwgRkZUXG4iKQoKIyBGdW5jdGlvbiB0byBjb21wdXRlIFJeMiBmb3IgYSBnaXZlbiBmcmVxdWVuY3kKY29tcHV0ZV9yMiA8LSBmdW5jdGlvbihmcmVxLCB0X3NlYywgeSkgewogIHNpbl9mcmVxIDwtIHNpbigyICogcGkgKiBmcmVxICogdF9zZWMpCiAgY29zX2ZyZXEgPC0gY29zKDIgKiBwaSAqIGZyZXEgKiB0X3NlYykKICBmaXQgPC0gbG0oeSB+IHNpbl9mcmVxICsgY29zX2ZyZXEpCiAgeV9oYXQgPC0gZml0dGVkKGZpdCkKICByc3MgPC0gc3VtKCh5IC0geV9oYXQpXjIsIG5hLnJtID0gVFJVRSkKICB0c3MgPC0gc3VtKCh5IC0gbWVhbih5LCBuYS5ybSA9IFRSVUUpKV4yLCBuYS5ybSA9IFRSVUUpCiAgaWYgKHRzcyA+IDApIDEgLSByc3MvdHNzIGVsc2UgTkFfcmVhbF8KfQoKIyBSdW4gcGVybXV0YXRpb24gdGVzdHMgZm9yIGVhY2ggcGVhayBmcmVxdWVuY3kKZm9yIChpIGluIDE6bGVuZ3RoKHBlYWtfZnJlcXMpKSB7CiAgY3VycmVudF9mcmVxIDwtIHBlYWtfZnJlcXNbaV0KICBjYXQoc3ByaW50ZigiXG5QZWFrIGZyZXF1ZW5jeSAlLjFmIEh6IHBlcm11dGF0aW9uIHRlc3Q6XG4iLCBjdXJyZW50X2ZyZXEpKQogIAogICMgQ29tcHV0ZSBvYnNlcnZlZCBSXjIKICByMl9vYnNlcnZlZCA8LSBjb21wdXRlX3IyKGN1cnJlbnRfZnJlcSwgdF9zZWMsIHkpCiAgY2F0KHNwcmludGYoIk9ic2VydmVkIFJeMiAoJS4xZiBIeik6ICUuM2ZcbiIsIGN1cnJlbnRfZnJlcSwgcjJfb2JzZXJ2ZWQpKQogIAogICMgUGVybXV0YXRpb24gdGVzdAogIHNldC5zZWVkKDEyMyArIGkpICAjIERpZmZlcmVudCBzZWVkIGZvciBlYWNoIGZyZXF1ZW5jeQogIHIyX3Blcm1fcGVhayA8LSByZXBsaWNhdGUobl9wZXJtLCB7CiAgICB0X3Blcm0gPC0gc2FtcGxlKHRfc2VjKQogICAgY29tcHV0ZV9yMihjdXJyZW50X2ZyZXEsIHRfcGVybSwgeSkKICB9KQogIAogICMgRW1waXJpY2FsIHAtdmFsdWUKICBwX3ZhbF9wZWFrIDwtIG1lYW4ocjJfcGVybV9wZWFrID49IHIyX29ic2VydmVkLCBuYS5ybSA9IFRSVUUpCiAgY2F0KHNwcmludGYoIlBlcm11dGF0aW9uIHRlc3QgcC12YWx1ZTogJS40ZlxuIiwgcF92YWxfcGVhaykpCiAgCiAgIyBDcml0aWNhbCB2YWx1ZQogIGNyaXRfdmFsX3BlYWsgPC0gcXVhbnRpbGUocjJfcGVybV9wZWFrLCAwLjk1LCBuYS5ybSA9IFRSVUUpCiAgY2F0KHNwcmludGYoIkNyaXRpY2FsIHZhbHVlICg5NXRoICUlKTogJS4zZlxuIiwgY3JpdF92YWxfcGVhaykpCiAgCiAgIyBTaWduaWZpY2FuY2UgaW5kaWNhdG9yCiAgc2lnX2ZsYWcgPC0gcjJfb2JzZXJ2ZWQgPiBjcml0X3ZhbF9wZWFrCiAgY2F0KHNwcmludGYoIlNpZ25pZmljYW50OiAlc1xuIiwgaWZlbHNlKHNpZ19mbGFnLCAiWWVzIiwgIk5vIikpKQogIAogICMgUGxvdCBwZXJtdXRhdGlvbiBoaXN0b2dyYW0gZm9yIHRoaXMgcGVhayBmcmVxdWVuY3kKICBwZXJtX2RmX3BlYWsgPC0gZGF0YS5mcmFtZShyMiA9IHIyX3Blcm1fcGVhaykKICBwZXJtX2hpc3RfcGVhayA8LSBnZ3Bsb3QocGVybV9kZl9wZWFrLCBhZXMoeCA9IHIyKSkgKwogICAgZ2VvbV9oaXN0b2dyYW0oYmlucyA9IDQwLCBmaWxsID0gIiM0RTc5QTciLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC43KSArCiAgICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSByMl9vYnNlcnZlZCwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAiI0UxNTc1OSIsIGxpbmV3aWR0aCA9IDEpICsKICAgIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGNyaXRfdmFsX3BlYWssIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gIiM1OUExNEYiLCBsaW5ld2lkdGggPSAxKSArCiAgICBsYWJzKHggPSBzcHJpbnRmKCJSXjIgKCUuMWYgSHogZml0LCBzaHVmZmxlZCB0aW1lcykiLCBjdXJyZW50X2ZyZXEpLCB5ID0gIkNvdW50IikgKwogICAgdGhlbWVfbWluaW1hbCgpICsKICAgIHRoZW1lKHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIikpCiAgCiAgY2F0KHNwcmludGYoIkZyZXF1ZW5jeSBhbmFseXNpcyDigJMgJS4xZiBIeiBwZXJtdXRhdGlvbiB0ZXN0XG4iLCBjdXJyZW50X2ZyZXEpKQogIHByaW50KHBlcm1faGlzdF9wZWFrKQp9CmBgYAoKIyMgSW5kaXZpZHVhbC1MZXZlbCBGcmVxdWVuY3kgQW5hbHlzaXMKCmBgYHtyIGluZGl2aWR1YWwtZnJlcXVlbmN5fQoKIyBQcmVwYXJlIGhlbHBlciB0byBidWlsZCBwZXItcGFydGljaXBhbnQgZmlsdGVyZWQgcmVzaWR1YWwgc2VyaWVzCmZzIDwtIDEwMApueXEgPC0gZnMgLyAyCmxvdyA8LSA0IC8gbnlxCmhpZ2ggPC0gMTggLyBueXEKYnV0dGVyX2ZpbHRlcl9pbmQgPC0gc2lnbmFsOjpidXR0ZXIoMiwgYyhsb3csIGhpZ2gpLCB0eXBlID0gInBhc3MiKQoKcGFydGljaXBhbnRzIDwtIHNvcnQodW5pcXVlKGZpbmFsX2ZpbHRlcmVkX2RhdGEkcGFydGljaXBhbnQpKQoKaW5kX2ZmdF9kZiA8LSBwdXJycjo6bWFwX2RmcihwYXJ0aWNpcGFudHMsIGZ1bmN0aW9uKHBpZCkgewogIHRzX3AgPC0gZmluYWxfZmlsdGVyZWRfZGF0YSAlPiUKICAgIGRwbHlyOjpmaWx0ZXIocGFydGljaXBhbnQgPT0gcGlkKSAlPiUKICAgIGRwbHlyOjpncm91cF9ieShTT0FfbXMpICU+JQogICAgZHBseXI6OnN1bW1hcmlzZShsZWZ0X3Jlc3BvbnNlX3JhdGUgPSBtZWFuKGNvcnJlY3RlZF9MUmRhdGEgPT0gMSwgbmEucm0gPSBUUlVFKSAqIDEwMCwgLmdyb3VwcyA9ICJkcm9wIikgJT4lCiAgICBkcGx5cjo6YXJyYW5nZShTT0FfbXMpCgogIGlmIChucm93KHRzX3ApIDwgMykgcmV0dXJuKE5VTEwpCgogICMgRGV0cmVuZCAoc3BsaW5lKSBhbmQgZmlsdGVyCiAgbSA8LSBsbShsZWZ0X3Jlc3BvbnNlX3JhdGUgfiBzcGxpbmVzOjpucyhTT0FfbXMsIGRmID0gMyksIGRhdGEgPSB0c19wKQogIHJlc2lkX3AgPC0gcmVzaWR1YWxzKG0pCiAgZmlsdF9wIDwtIGFzLm51bWVyaWMoc2lnbmFsOjpmaWx0ZmlsdChidXR0ZXJfZmlsdGVyX2luZCwgcmVzaWRfcCkpCgogICMgVXNlIGZ1bGwgZmlsdGVyZWQgdGltZSBzZXJpZXMgd2l0aCB6ZXJvIHBhZGRpbmcKICB5X2Z1bGwgPC0gZmlsdF9wCiAgIyBub3JtYWxpemUgdG8gdW5pdCB2YXJpYW5jZSBmb3IgY29tcGFyYWJsZSBGRlQgYW1wbGl0dWRlcwogIHlfZnVsbCA8LSBhcy5udW1lcmljKHNjYWxlKHlfZnVsbCwgY2VudGVyID0gVFJVRSwgc2NhbGUgPSBUUlVFKSkKCiAgIyBBcHBseSB6ZXJvIHBhZGRpbmcgKGRvdWJsZSB0aGUgbGVuZ3RoIGZvciBiZXR0ZXIgZnJlcXVlbmN5IHJlc29sdXRpb24pCiAgTiA8LSBsZW5ndGgoeV9mdWxsKQogIE5fcGFkZGVkIDwtIDIgKiBOCiAgeV9wYWRkZWQgPC0gYyh5X2Z1bGwsIHJlcCgwLCBOKSkKICAKICBmcmVxcyA8LSAoMDooTl9wYWRkZWQgLSAxKSkgKiAoZnMgLyBOX3BhZGRlZCkKICBoYWxmIDwtIGZsb29yKE5fcGFkZGVkIC8gMikgKyAxCiAgZnJlcXNfaCA8LSBmcmVxc1sxOmhhbGZdCiAgYW1wIDwtICgyIC8gTl9wYWRkZWQpICogTW9kKGZmdCh5X3BhZGRlZCkpWzE6aGFsZl0KICBhbXBbMV0gPC0gYW1wWzFdIC8gMgoKICB0aWJibGU6OnRpYmJsZShwYXJ0aWNpcGFudCA9IHBpZCwgZnJlcSA9IGZyZXFzX2gsIGFtcCA9IGFtcCkKfSkKCiMgUGxvdCBpbmRpdmlkdWFsIHNwZWN0cmEgKG92ZXJsYXksIGNvbG9yLWNvZGVkKSwgbGltaXRlZCB0byAw4oCTMjAgSHoKaWYgKG5yb3coaW5kX2ZmdF9kZikgPiAwKSB7CiAgaW5kX2ZmdF9wbG90IDwtIGdncGxvdChpbmRfZmZ0X2RmLCBhZXMoeCA9IGZyZXEsIHkgPSBhbXAsIGdyb3VwID0gcGFydGljaXBhbnQsIGNvbG9yID0gcGFydGljaXBhbnQpKSArCiAgICBnZW9tX2xpbmUoYWxwaGEgPSAwLjgpICsKICAgIGxhYnMoeCA9ICJGcmVxdWVuY3kgKEh6KSIsIHkgPSAiQW1wbGl0dWRlIikgKwogICAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMjApKSArCiAgICB0aGVtZV9taW5pbWFsKCkgKwogICAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQogIGNhdCgiSW5kaXZpZHVhbC1MZXZlbCBGdWxsIFRpbWUgU2VyaWVzIFJGRlQgKDTigJMxOCBIeiBmaWx0ZXJlZCByZXNpZHVhbHMpXG4iKQogIHByaW50KGluZF9mZnRfcGxvdCkKCiAgIyBEaXN0cmlidXRpb24gb2YgcG93ZXIgYWNyb3NzIDQtMTggSHogZnJlcXVlbmNpZXMgZm9yIGFsbCBwYXJ0aWNpcGFudHMKICBjYXQoIkRpc3RyaWJ1dGlvbiBvZiBQb3dlciBBY3Jvc3MgNC0xOCBIeiBGcmVxdWVuY2llcyBmb3IgQWxsIFBhcnRpY2lwYW50c1xuIikKCiAgIyBDcmVhdGUgYSBjb21wcmVoZW5zaXZlIHBvd2VyIGRpc3RyaWJ1dGlvbiBwbG90CiAgaWYgKG5yb3coaW5kX2ZmdF9kZikgPiAwKSB7CiAgICAjIEZpbHRlciB0byA0LTE4IEh6IHJhbmdlIGFuZCByb3VuZCBmcmVxdWVuY2llcyB0byAxIGRlY2ltYWwgZm9yIGNsZWFuZXIgbGFiZWxzCiAgICBpbmRfZmZ0X2RmX3JvdW5kZWQgPC0gaW5kX2ZmdF9kZiAlPiUKICAgICAgZmlsdGVyKGZyZXEgPj0gNCwgZnJlcSA8PSAxOCkgJT4lCiAgICAgIG11dGF0ZShmcmVxX3JvdW5kZWQgPSByb3VuZChmcmVxLCAxKSkKICAgIAogICAgIyBDcmVhdGUgZmFjZXRlZCBmcmVxdWVuY3kgZGlzdHJpYnV0aW9uIHBsb3QgKHNpbWlsYXIgdG8gcGVybXV0YXRpb24gRkZUIGFuYWx5c2lzKQogICAgYWxsX2ZyZXFfcG93ZXJfcGxvdCA8LSBnZ3Bsb3QoaW5kX2ZmdF9kZl9yb3VuZGVkLCBhZXMoeCA9IGFtcCwgZmlsbCA9IGZhY3RvcihmcmVxX3JvdW5kZWQpKSkgKwogICAgICBnZW9tX2hpc3RvZ3JhbShiaW5zID0gMzAsIGFscGhhID0gMC43LCBwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsKICAgICAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAiZ3JheTQwIiwgc2l6ZSA9IDEpICsKICAgICAgZmFjZXRfd3JhcCh+ZnJlcV9yb3VuZGVkLCBzY2FsZXMgPSAiZnJlZV94IiwgbmNvbCA9IDMpICsKICAgICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzRFNzlBNyIsICIjRjI4RTJCIiwgIiNFMTU3NTkiLCAiIzU5QTE0RiIsICIjNzZCN0IyIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI0IwN0FBMSIsICIjRkY5REE3IiwgIiM5Qzc1NUYiLCAiI0JBQjBBQyIsICIjRkZDMENCIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjRERBMEREIiwgIiM5OEZCOTgiLCAiI0YwRTY4QyIsICIjRkZCNkMxIiwgIiM4N0NFRUIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNEMjY5MUUiLCAiI0RDMTQzQyIsICIjMzJDRDMyIiwgIiNGRkQ3MDAiLCAiIzkzNzBEQiIpKSArCiAgICAgIGxhYnMoeCA9ICJBbXBsaXR1ZGUiLCB5ID0gIkNvdW50IikgKwogICAgICB0aGVtZV9taW5pbWFsKCkgKwogICAgICB0aGVtZShwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpLAogICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJsaWdodGdyYXkiKSwKICAgICAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiKSkKICAgIAogICAgcHJpbnQoYWxsX2ZyZXFfcG93ZXJfcGxvdCkKICAgIAogICAgIyBBbHNvIGNyZWF0ZSBhIHN1bW1hcnkgdGFibGUgb2YgbWVhbiBwb3dlciBieSBmcmVxdWVuY3kKICAgIGZyZXFfc3VtbWFyeSA8LSBpbmRfZmZ0X2RmX3JvdW5kZWQgJT4lCiAgICAgIGdyb3VwX2J5KGZyZXFfcm91bmRlZCkgJT4lCiAgICAgIHN1bW1hcmlzZSgKICAgICAgICBtZWFuX2FtcCA9IG1lYW4oYW1wLCBuYS5ybSA9IFRSVUUpLAogICAgICAgIHNkX2FtcCA9IHNkKGFtcCwgbmEucm0gPSBUUlVFKSwKICAgICAgICBuX3BhcnRpY2lwYW50cyA9IG4oKSwKICAgICAgICAuZ3JvdXBzID0gImRyb3AiCiAgICAgICkgJT4lCiAgICAgIGFycmFuZ2UoZnJlcV9yb3VuZGVkKQogICAgCiAgICBjYXQoIlN1bW1hcnkgb2YgUG93ZXIgYnkgRnJlcXVlbmN5OlxuIikKICAgIHByaW50KGZyZXFfc3VtbWFyeSkKICAgIAogICAgIyBCb290c3RyYXAgYW5hbHlzaXMgZm9yIGFsbCBmcmVxdWVuY2llcyAoNTAwMCBpdGVyYXRpb25zKQogICAgY2F0KCJCb290c3RyYXAgQW5hbHlzaXMgb2YgUG93ZXIgVmFsdWVzIEFjcm9zcyBBbGwgRnJlcXVlbmNpZXNcbiIpCiAgICAKICAgICMgR2V0IHVuaXF1ZSBmcmVxdWVuY2llcyAtIHVzZSB0aGUgYWN0dWFsIGZyZXF1ZW5jaWVzLCBub3Qgcm91bmRlZCBvbmVzCiAgICB1bmlxdWVfZnJlcXMgPC0gdW5pcXVlKGluZF9mZnRfZGYkZnJlcSkKICAgICMgRmlsdGVyIHRvIDQtMTggSHogcmFuZ2UKICAgIHVuaXF1ZV9mcmVxcyA8LSB1bmlxdWVfZnJlcXNbdW5pcXVlX2ZyZXFzID49IDQgJiB1bmlxdWVfZnJlcXMgPD0gMThdCiAgICBuX3BhcnRpY2lwYW50cyA8LSBsZW5ndGgodW5pcXVlKGluZF9mZnRfZGYkcGFydGljaXBhbnQpKQogICAgCiAgICAjIEluaXRpYWxpemUgcmVzdWx0cyBzdG9yYWdlCiAgICBib290c3RyYXBfcmVzdWx0cyA8LSBkYXRhLmZyYW1lKCkKICAgIAogICAgIyBQZXJmb3JtIGJvb3RzdHJhcCBmb3IgZWFjaCBmcmVxdWVuY3kKICAgIGZvciAoY3VycmVudF9mcmVxIGluIHVuaXF1ZV9mcmVxcykgewogICAgICAjIEdldCBhbXBsaXR1ZGUgdmFsdWVzIGZvciB0aGlzIGZyZXF1ZW5jeSAtIHVzZSBhY3R1YWwgZnJlcXVlbmNpZXMKICAgICAgZnJlcV9kYXRhIDwtIGluZF9mZnRfZGYgJT4lCiAgICAgICAgZmlsdGVyKGFicyhmcmVxIC0gY3VycmVudF9mcmVxKSA8IDAuMDEpICU+JSAgIyBVc2Ugc21hbGwgdG9sZXJhbmNlIGZvciBmbG9hdGluZyBwb2ludCBjb21wYXJpc29uCiAgICAgICAgcHVsbChhbXApCiAgICAgIAogICAgICAjIENoZWNrIGlmIHdlIGhhdmUgdmFsaWQgZGF0YSBmb3IgdGhpcyBmcmVxdWVuY3kKICAgICAgaWYgKGxlbmd0aChmcmVxX2RhdGEpID4gMCAmJiAhYWxsKGlzLm5hKGZyZXFfZGF0YSkpKSB7CiAgICAgICAgIyBVc2UgdGhlIGFjdHVhbCBudW1iZXIgb2YgcGFydGljaXBhbnRzIGZvciB0aGlzIGZyZXF1ZW5jeQogICAgICAgIHNhbXBsZV9zaXplIDwtIGxlbmd0aChmcmVxX2RhdGEpCiAgICAgICAgCiAgICAgICAgIyBCb290c3RyYXAgd2l0aCA1MDAwIGl0ZXJhdGlvbnMsIHVzaW5nIGF2YWlsYWJsZSBzYW1wbGUgc2l6ZQogICAgICAgIHNldC5zZWVkKDEyMykgICMgRm9yIHJlcHJvZHVjaWJpbGl0eQogICAgICAgIGJvb3RzdHJhcF9tZWFucyA8LSByZXBsaWNhdGUoNTAwMCwgewogICAgICAgICAgc2FtcGxlKGZyZXFfZGF0YSwgc2l6ZSA9IHNhbXBsZV9zaXplLCByZXBsYWNlID0gVFJVRSkgJT4lIG1lYW4obmEucm0gPSBUUlVFKQogICAgICAgIH0pCiAgICAgICAgCiAgICAgICAgIyBTdG9yZSByZXN1bHRzIHdpdGggcm91bmRlZCBmcmVxdWVuY3kKICAgICAgICBmcmVxX3Jlc3VsdHMgPC0gZGF0YS5mcmFtZSgKICAgICAgICAgIGZyZXF1ZW5jeSA9IHJvdW5kKGN1cnJlbnRfZnJlcSwgMSksCiAgICAgICAgICBib290c3RyYXBwZWRfbWVhbiA9IGJvb3RzdHJhcF9tZWFucwogICAgICAgICkKICAgICAgICAKICAgICAgICBib290c3RyYXBfcmVzdWx0cyA8LSByYmluZChib290c3RyYXBfcmVzdWx0cywgZnJlcV9yZXN1bHRzKQogICAgICB9CiAgICB9CiAgICAKICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSB2YWxpZCBib290c3RyYXAgcmVzdWx0cyBiZWZvcmUgcGxvdHRpbmcKICAgIGlmIChucm93KGJvb3RzdHJhcF9yZXN1bHRzKSA+IDApIHsKICAgICAgIyBDcmVhdGUgb3ZlcmxhaWQgZGVuc2l0eSBwbG90IChtb3VudGFpbiBwbG90KSBvZiBib290c3RyYXAgZGlzdHJpYnV0aW9ucwogICAgICBib290c3RyYXBfcGxvdCA8LSBnZ3Bsb3QoYm9vdHN0cmFwX3Jlc3VsdHMsIGFlcyh4ID0gYm9vdHN0cmFwcGVkX21lYW4sIGZpbGwgPSBmYWN0b3IoZnJlcXVlbmN5KSwgY29sb3IgPSBmYWN0b3IoZnJlcXVlbmN5KSkpICsKICAgICAgICBnZW9tX2RlbnNpdHkoYWxwaGEgPSAwLjQsIGxpbmV3aWR0aCA9IDAuOCkgKwogICAgICAgIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gImdyYXk0MCIsIHNpemUgPSAwLjUpICsKICAgICAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWY3N2I0IiwgIiNmZjdmMGUiLCAiIzJjYTAyYyIsICIjZDYyNzI4IiwgIiM5NDY3YmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzhjNTY0YiIsICIjZTM3N2MyIiwgIiM3ZjdmN2YiLCAiI2JjYmQyMiIsICIjMTdiZWNmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNhZWM3ZTgiLCAiI2ZmYmI3OCIsICIjOThkZjhhIiwgIiNmZjk4OTYiLCAiI2M1YjBkNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjYzQ5Yzk0IiwgIiNmN2I2ZDIiLCAiI2M3YzdjNyIsICIjZGJkYjhkIiwgIiM5ZWRhZTUiKSkgKwogICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWY3N2I0IiwgIiNmZjdmMGUiLCAiIzJjYTAyYyIsICIjZDYyNzI4IiwgIiM5NDY3YmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM4YzU2NGIiLCAiI2UzNzdjMiIsICIjN2Y3ZjdmIiwgIiNiY2JkMjIiLCAiIzE3YmVjZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2FlYzdlOCIsICIjZmZiYjc4IiwgIiM5OGRmOGEiLCAiI2ZmOTg5NiIsICIjYzViMGQ1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjYzQ5Yzk0IiwgIiNmN2I2ZDIiLCAiI2M3YzdjNyIsICIjZGJkYjhkIiwgIiM5ZWRhZTUiKSkgKwogICAgICAgIGxhYnMoeCA9ICJCb290c3RyYXBwZWQgTWVhbiBBbXBsaXR1ZGUiLCB5ID0gIkRlbnNpdHkiLCBmaWxsID0gIkZyZXF1ZW5jeSAoSHopIiwgY29sb3IgPSAiRnJlcXVlbmN5IChIeikiKSArCiAgICAgICAgdGhlbWVfbWluaW1hbCgpICsKICAgICAgICB0aGVtZShwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpLAogICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLAogICAgICAgICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkKICAgICAgCiAgICAgIHByaW50KGJvb3RzdHJhcF9wbG90KQogICAgfSBlbHNlIHsKICAgICAgY2F0KCJObyB2YWxpZCBib290c3RyYXAgcmVzdWx0cyB0byBwbG90LlxuIikKICAgIH0KICAgIAogICAgIyBDaGVjayBpZiB3ZSBoYXZlIGJvb3RzdHJhcCByZXN1bHRzIGFuZCBjcmVhdGUgc3VtbWFyeQogICAgaWYgKG5yb3coYm9vdHN0cmFwX3Jlc3VsdHMpID4gMCkgewogICAgICAjIFN1bW1hcnkgc3RhdGlzdGljcyBmb3IgYm9vdHN0cmFwIHJlc3VsdHMKICAgICAgYm9vdHN0cmFwX3N1bW1hcnkgPC0gYm9vdHN0cmFwX3Jlc3VsdHMgJT4lCiAgICAgICAgZ3JvdXBfYnkoZnJlcXVlbmN5KSAlPiUKICAgICAgICBzdW1tYXJpc2UoCiAgICAgICAgICBtZWFuX2Jvb3RzdHJhcCA9IG1lYW4oYm9vdHN0cmFwcGVkX21lYW4sIG5hLnJtID0gVFJVRSksCiAgICAgICAgICBzZF9ib290c3RyYXAgPSBzZChib290c3RyYXBwZWRfbWVhbiwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgIGNpX2xvd2VyID0gcXVhbnRpbGUoYm9vdHN0cmFwcGVkX21lYW4sIDAuMDI1LCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgY2lfdXBwZXIgPSBxdWFudGlsZShib290c3RyYXBwZWRfbWVhbiwgMC45NzUsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAuZ3JvdXBzID0gImRyb3AiCiAgICAgICAgKSAlPiUKICAgICAgICBhcnJhbmdlKGZyZXF1ZW5jeSkKICAgICAgCiAgICAgIGNhdCgiQm9vdHN0cmFwIFN1bW1hcnkgU3RhdGlzdGljcyAoOTUlIENJKTpcbiIpCiAgICAgIHByaW50KGJvb3RzdHJhcF9zdW1tYXJ5KQogICAgfSBlbHNlIHsKICAgICAgY2F0KCJObyBib290c3RyYXAgcmVzdWx0cyBhdmFpbGFibGUgZm9yIHN1bW1hcnkgc3RhdGlzdGljcy5cbiIpCiAgICB9CiAgfQp9IGVsc2UgewogIGNhdCgiTm8gcGFydGljaXBhbnRzIHdpdGggc3VmZmljaWVudCBzYW1wbGVzIGluIGZ1bGwgdGltZSBzZXJpZXMuXG4iKQp9CmBgYAo=