Reading Data
Semi-finals
-Competitors = n.semis
-
#####_ Elo History _
Elo Accumulated Chamonix Semis
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
sorato ANRAKU |
JPN |
2237.00 |
NA |
NA |
toby ROBERTS |
GBR |
2185.23 |
83.6 % |
69.4 % |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2156.74 |
81.2 % |
65.9 % |
taisei HOMMA |
JPN |
2097.41 |
75.5 % |
57.8 % |
dohyun LEE |
KOR |
2054.00 |
NA |
NA |
adam ONDRA |
CZE |
2042.60 |
69.2 % |
50 % |
colin DUFFY |
USA |
1989.55 |
62.3 % |
42.4 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
sascha LEHMANN |
SUI |
1977.18 |
60.6 % |
40.7 % |
jesse GRUPPER |
USA |
1956.83 |
57.8 % |
37.9 % |
shion OMATA |
JPN |
1910.21 |
51.1 % |
31.8 % |
sam AVEZOU |
FRA |
1902.25 |
50 % |
30.8 % |
guillermo PEINADO FRANGANILLO |
ESP |
1901.34 |
49.9 % |
30.7 % |
kibeom KWON |
KOR |
1888.54 |
48 % |
29.2 % |
max BERTONE |
FRA |
1885.98 |
47.7 % |
28.9 % |
stefan SCHERZ |
AUT |
1883.42 |
47.3 % |
28.6 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
satone YOSHIDA |
JPN |
1874.24 |
46 % |
27.5 % |
ties VANCRAEYNEST |
BEL |
1873.18 |
45.8 % |
27.4 % |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
giorgio TOMATIS |
ITA |
1865.50 |
44.7 % |
26.5 % |
ao YURIKUSA |
JPN |
1857.89 |
43.6 % |
25.7 % |
yannick FLOH<U+00C9> |
GER |
1849.00 |
NA |
NA |
masahiro HIGUCHI |
JPN |
1837.13 |
40.7 % |
23.5 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
stefano GHISOLFI |
ITA |
1826.61 |
39.3 % |
22.4 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
mejdi SCHALCK |
FRA |
1795.00 |
NA |
NA |
yoshiyuki OGATA |
JPN |
1783.00 |
NA |
NA |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
zento MURASHITA |
JPN |
1770.43 |
31.9 % |
17.3 % |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
luka POTOCAR |
SLO |
1767.31 |
31.5 % |
17 % |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
shuta TANAKA |
JPN |
1760.00 |
NA |
NA |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
paul JENFT |
FRA |
1743.41 |
28.6 % |
15.2 % |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
martin STRANIK |
CZE |
1723.00 |
NA |
NA |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
jonas UTELLI |
SUI |
1700.73 |
23.9 % |
12.3 % |
jules MARCHALAND |
FRA |
1698.45 |
23.6 % |
12.1 % |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
ravianto RAMADHAN |
INA |
1655.00 |
NA |
NA |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
filip SCHENK |
ITA |
1616.46 |
16.2 % |
7.9 % |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
Finals
-Competitors = n.final
-
#####_ Elo History _
Elo Accumulated Chamonix Final
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
sorato ANRAKU |
JPN |
2237.00 |
NA |
NA |
toby ROBERTS |
GBR |
2201.39 |
77.9 % |
74.3 % |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2168.52 |
74.4 % |
70.6 % |
taisei HOMMA |
JPN |
2097.41 |
75.5 % |
57.8 % |
dohyun LEE |
KOR |
2054.00 |
NA |
NA |
adam ONDRA |
CZE |
2046.20 |
59 % |
54.3 % |
colin DUFFY |
USA |
2016.56 |
54.8 % |
50 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
sascha LEHMANN |
SUI |
1976.89 |
49.1 % |
44.3 % |
jesse GRUPPER |
USA |
1956.83 |
57.8 % |
37.9 % |
sam AVEZOU |
FRA |
1925.67 |
41.8 % |
37.2 % |
shion OMATA |
JPN |
1919.82 |
41 % |
36.4 % |
guillermo PEINADO FRANGANILLO |
ESP |
1897.34 |
37.9 % |
33.5 % |
kibeom KWON |
KOR |
1888.54 |
48 % |
29.2 % |
max BERTONE |
FRA |
1885.98 |
47.7 % |
28.9 % |
stefan SCHERZ |
AUT |
1883.42 |
47.3 % |
28.6 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
satone YOSHIDA |
JPN |
1874.24 |
46 % |
27.5 % |
ties VANCRAEYNEST |
BEL |
1873.18 |
45.8 % |
27.4 % |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
giorgio TOMATIS |
ITA |
1865.50 |
44.7 % |
26.5 % |
ao YURIKUSA |
JPN |
1857.89 |
43.6 % |
25.7 % |
yannick FLOH<U+00C9> |
GER |
1849.00 |
NA |
NA |
masahiro HIGUCHI |
JPN |
1837.13 |
40.7 % |
23.5 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
stefano GHISOLFI |
ITA |
1826.61 |
39.3 % |
22.4 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
mejdi SCHALCK |
FRA |
1795.00 |
NA |
NA |
yoshiyuki OGATA |
JPN |
1783.00 |
NA |
NA |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
zento MURASHITA |
JPN |
1770.43 |
31.9 % |
17.3 % |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
luka POTOCAR |
SLO |
1767.31 |
31.5 % |
17 % |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
shuta TANAKA |
JPN |
1760.00 |
NA |
NA |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
paul JENFT |
FRA |
1743.41 |
28.6 % |
15.2 % |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
martin STRANIK |
CZE |
1723.00 |
NA |
NA |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
jonas UTELLI |
SUI |
1700.73 |
23.9 % |
12.3 % |
jules MARCHALAND |
FRA |
1698.45 |
23.6 % |
12.1 % |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
ravianto RAMADHAN |
INA |
1655.00 |
NA |
NA |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
filip SCHENK |
ITA |
1616.46 |
16.2 % |
7.9 % |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
Semi-finals
-Competitors = n.semis
-
#####_ Elo History _
Elo Accumulated Brianc Semis
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
sorato ANRAKU |
JPN |
2237.00 |
NA |
NA |
toby ROBERTS |
GBR |
2201.39 |
77.9 % |
74.3 % |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2168.52 |
74.4 % |
70.6 % |
taisei HOMMA |
JPN |
2087.71 |
80.9 % |
74.5 % |
dohyun LEE |
KOR |
2054.00 |
NA |
NA |
adam ONDRA |
CZE |
2046.20 |
59 % |
54.3 % |
colin DUFFY |
USA |
2016.56 |
54.8 % |
50 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
sascha LEHMANN |
SUI |
1976.89 |
49.1 % |
44.3 % |
jesse GRUPPER |
USA |
1956.83 |
57.8 % |
37.9 % |
shion OMATA |
JPN |
1949.31 |
65.7 % |
56.8 % |
sam AVEZOU |
FRA |
1925.67 |
41.8 % |
37.2 % |
max BERTONE |
FRA |
1905.41 |
59.8 % |
50.6 % |
satone YOSHIDA |
JPN |
1901.42 |
59.2 % |
50 % |
guillermo PEINADO FRANGANILLO |
ESP |
1897.34 |
37.9 % |
33.5 % |
kibeom KWON |
KOR |
1892.60 |
58 % |
48.7 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
ao YURIKUSA |
JPN |
1857.00 |
53 % |
43.6 % |
stefan SCHERZ |
AUT |
1849.11 |
51.8 % |
42.5 % |
yannick FLOH<U+00C9> |
GER |
1849.00 |
NA |
NA |
ties VANCRAEYNEST |
BEL |
1846.60 |
51.5 % |
42.2 % |
mototaka ISHIZU |
JPN |
1845.84 |
51.4 % |
42.1 % |
yuta IMAIZUMI |
JPN |
1843.28 |
51 % |
41.7 % |
sebastian HALENKE |
GER |
1840.72 |
50.6 % |
41.4 % |
masahiro HIGUCHI |
JPN |
1837.13 |
40.7 % |
23.5 % |
giorgio TOMATIS |
ITA |
1836.41 |
50 % |
40.8 % |
stefano GHISOLFI |
ITA |
1833.58 |
49.6 % |
40.4 % |
giovanni PLACCI |
ITA |
1830.48 |
49.1 % |
39.9 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
christoph HANKE |
GER |
1825.36 |
48.4 % |
39.2 % |
philipp MARTIN |
GER |
1822.80 |
48 % |
38.9 % |
yuval SHEMLA |
ISR |
1815.12 |
46.9 % |
37.8 % |
raviandi RAMADHAN |
INA |
1812.56 |
46.6 % |
37.5 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
nino GR<U+00DC>NENFELDER |
SUI |
1804.88 |
45.5 % |
36.5 % |
jordi POLES |
FRA |
1797.20 |
44.4 % |
35.4 % |
zento MURASHITA |
JPN |
1795.64 |
44.2 % |
35.2 % |
mejdi SCHALCK |
FRA |
1795.00 |
NA |
NA |
yoshiyuki OGATA |
JPN |
1792.78 |
43.8 % |
34.9 % |
shuta TANAKA |
JPN |
1782.71 |
42.3 % |
33.6 % |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
luka POTOCAR |
SLO |
1767.31 |
31.5 % |
17 % |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
paul JENFT |
FRA |
1743.41 |
28.6 % |
15.2 % |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
martin STRANIK |
CZE |
1723.00 |
NA |
NA |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
jules MARCHALAND |
FRA |
1698.45 |
23.6 % |
12.1 % |
jonas UTELLI |
SUI |
1682.79 |
29.2 % |
22.1 % |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
ravianto RAMADHAN |
INA |
1634.72 |
23.8 % |
17.7 % |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
filip SCHENK |
ITA |
1606.59 |
21 % |
15.5 % |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
Finals
-Competitors = n.final
-
#####_ Elo History _
Elo Accumulated Brianc Final
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
sorato ANRAKU |
JPN |
2237.00 |
NA |
NA |
toby ROBERTS |
GBR |
2201.39 |
77.9 % |
74.3 % |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2168.52 |
74.4 % |
70.6 % |
taisei HOMMA |
JPN |
2087.71 |
80.9 % |
74.5 % |
dohyun LEE |
KOR |
2054.00 |
NA |
NA |
adam ONDRA |
CZE |
2046.20 |
59 % |
54.3 % |
colin DUFFY |
USA |
2016.56 |
54.8 % |
50 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
sascha LEHMANN |
SUI |
1976.89 |
49.1 % |
44.3 % |
shion OMATA |
JPN |
1966.38 |
47.6 % |
66.1 % |
jesse GRUPPER |
USA |
1956.83 |
57.8 % |
37.9 % |
sam AVEZOU |
FRA |
1925.67 |
41.8 % |
37.2 % |
satone YOSHIDA |
JPN |
1923.53 |
41.5 % |
60.4 % |
max BERTONE |
FRA |
1918.34 |
40.8 % |
59.7 % |
guillermo PEINADO FRANGANILLO |
ESP |
1897.34 |
37.9 % |
33.5 % |
kibeom KWON |
KOR |
1892.60 |
58 % |
48.7 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
ao YURIKUSA |
JPN |
1857.00 |
53 % |
43.6 % |
mototaka ISHIZU |
JPN |
1850.26 |
31.8 % |
50 % |
sebastian HALENKE |
GER |
1849.77 |
31.7 % |
49.9 % |
stefan SCHERZ |
AUT |
1849.11 |
51.8 % |
42.5 % |
yannick FLOH<U+00C9> |
GER |
1849.00 |
NA |
NA |
ties VANCRAEYNEST |
BEL |
1846.60 |
51.5 % |
42.2 % |
yuta IMAIZUMI |
JPN |
1838.59 |
30.3 % |
48.3 % |
masahiro HIGUCHI |
JPN |
1837.13 |
40.7 % |
23.5 % |
giorgio TOMATIS |
ITA |
1836.41 |
50 % |
40.8 % |
stefano GHISOLFI |
ITA |
1833.58 |
49.6 % |
40.4 % |
giovanni PLACCI |
ITA |
1830.48 |
49.1 % |
39.9 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
christoph HANKE |
GER |
1825.36 |
48.4 % |
39.2 % |
zento MURASHITA |
JPN |
1823.49 |
28.5 % |
46.2 % |
philipp MARTIN |
GER |
1822.80 |
48 % |
38.9 % |
yuval SHEMLA |
ISR |
1815.12 |
46.9 % |
37.8 % |
raviandi RAMADHAN |
INA |
1812.56 |
46.6 % |
37.5 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
nino GR<U+00DC>NENFELDER |
SUI |
1804.88 |
45.5 % |
36.5 % |
jordi POLES |
FRA |
1797.20 |
44.4 % |
35.4 % |
mejdi SCHALCK |
FRA |
1795.00 |
NA |
NA |
yoshiyuki OGATA |
JPN |
1792.78 |
43.8 % |
34.9 % |
shuta TANAKA |
JPN |
1783.28 |
24.1 % |
40.5 % |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
luka POTOCAR |
SLO |
1767.31 |
31.5 % |
17 % |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
paul JENFT |
FRA |
1743.41 |
28.6 % |
15.2 % |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
martin STRANIK |
CZE |
1723.00 |
NA |
NA |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
jules MARCHALAND |
FRA |
1698.45 |
23.6 % |
12.1 % |
jonas UTELLI |
SUI |
1682.79 |
29.2 % |
22.1 % |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
ravianto RAMADHAN |
INA |
1634.72 |
23.8 % |
17.7 % |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
filip SCHENK |
ITA |
1606.59 |
21 % |
15.5 % |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
Semi-finals
-Competitors = n.semis
-
#####_ Elo History _
Elo Accumulated Koper Semis
sorato ANRAKU |
JPN |
2266.73 |
88.9 % |
77.1 % |
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
toby ROBERTS |
GBR |
2228.61 |
86.5 % |
72.9 % |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2168.52 |
74.4 % |
70.6 % |
dohyun LEE |
KOR |
2066.20 |
71.6 % |
51.4 % |
taisei HOMMA |
JPN |
2056.30 |
70.4 % |
50 % |
adam ONDRA |
CZE |
2046.20 |
59 % |
54.3 % |
colin DUFFY |
USA |
2016.56 |
54.8 % |
50 % |
shion OMATA |
JPN |
1991.66 |
62.2 % |
40.8 % |
sascha LEHMANN |
SUI |
1986.78 |
61.5 % |
40.1 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
jesse GRUPPER |
USA |
1956.83 |
57.8 % |
37.9 % |
sam AVEZOU |
FRA |
1945.98 |
55.8 % |
34.6 % |
max BERTONE |
FRA |
1933.55 |
54 % |
33 % |
satone YOSHIDA |
JPN |
1905.44 |
50 % |
29.6 % |
kibeom KWON |
KOR |
1897.67 |
48.9 % |
28.6 % |
guillermo PEINADO FRANGANILLO |
ESP |
1897.34 |
37.9 % |
33.5 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
ao YURIKUSA |
JPN |
1875.00 |
45.6 % |
26 % |
yannick FLOH<U+00C9> |
GER |
1872.15 |
45.2 % |
25.7 % |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
ross FULKERSON |
USA |
1855.30 |
42.8 % |
23.9 % |
mototaka ISHIZU |
JPN |
1850.26 |
31.8 % |
50 % |
sebastian HALENKE |
GER |
1849.77 |
31.7 % |
49.9 % |
stefan SCHERZ |
AUT |
1849.11 |
51.8 % |
42.5 % |
yuta IMAIZUMI |
JPN |
1841.30 |
40.9 % |
22.5 % |
stefano GHISOLFI |
ITA |
1833.58 |
49.6 % |
40.4 % |
zento MURASHITA |
JPN |
1831.37 |
39.5 % |
21.5 % |
ties VANCRAEYNEST |
BEL |
1831.36 |
39.5 % |
21.5 % |
giovanni PLACCI |
ITA |
1830.48 |
49.1 % |
39.9 % |
masahiro HIGUCHI |
JPN |
1829.60 |
39.3 % |
21.3 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
christoph HANKE |
GER |
1825.36 |
48.4 % |
39.2 % |
philipp MARTIN |
GER |
1822.80 |
48 % |
38.9 % |
yuval SHEMLA |
ISR |
1815.12 |
46.9 % |
37.8 % |
raviandi RAMADHAN |
INA |
1812.56 |
46.6 % |
37.5 % |
giorgio TOMATIS |
ITA |
1810.96 |
36.7 % |
19.6 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
jordi POLES |
FRA |
1797.20 |
44.4 % |
35.4 % |
yoshiyuki OGATA |
JPN |
1780.29 |
32.7 % |
17 % |
mejdi SCHALCK |
FRA |
1774.82 |
32 % |
16.5 % |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
shuta TANAKA |
JPN |
1773.38 |
31.9 % |
16.4 % |
nino GR<U+00DC>NENFELDER |
SUI |
1771.87 |
31.7 % |
16.3 % |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
luka POTOCAR |
SLO |
1767.31 |
31.5 % |
17 % |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
paul JENFT |
FRA |
1743.41 |
28.6 % |
15.2 % |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
martin STRANIK |
CZE |
1720.98 |
25.7 % |
12.7 % |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
jonas UTELLI |
SUI |
1678.32 |
21.3 % |
10.2 % |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
jules MARCHALAND |
FRA |
1670.90 |
20.6 % |
9.8 % |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
ravianto RAMADHAN |
INA |
1634.72 |
23.8 % |
17.7 % |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
filip SCHENK |
ITA |
1607.43 |
15.2 % |
7 % |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
Finals
-Competitors = n.final
-
#####_ Elo History _
Elo Accumulated Koper Final
sorato ANRAKU |
JPN |
2286.91 |
84.5 % |
83.5 % |
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
toby ROBERTS |
GBR |
2253.52 |
81.9 % |
80.7 % |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2168.52 |
74.4 % |
70.6 % |
dohyun LEE |
KOR |
2060.17 |
59.7 % |
57.9 % |
taisei HOMMA |
JPN |
2056.30 |
70.4 % |
50 % |
adam ONDRA |
CZE |
2046.20 |
59 % |
54.3 % |
colin DUFFY |
USA |
2016.56 |
54.8 % |
50 % |
shion OMATA |
JPN |
2004.62 |
51.9 % |
50 % |
sascha LEHMANN |
SUI |
1986.78 |
61.5 % |
40.1 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
sam AVEZOU |
FRA |
1964.00 |
46 % |
44.2 % |
jesse GRUPPER |
USA |
1956.83 |
57.8 % |
37.9 % |
max BERTONE |
FRA |
1937.99 |
42.3 % |
40.5 % |
satone YOSHIDA |
JPN |
1905.44 |
50 % |
29.6 % |
kibeom KWON |
KOR |
1897.67 |
48.9 % |
28.6 % |
guillermo PEINADO FRANGANILLO |
ESP |
1897.34 |
37.9 % |
33.5 % |
yannick FLOH<U+00C9> |
GER |
1881.86 |
34.7 % |
33 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
ao YURIKUSA |
JPN |
1875.54 |
33.9 % |
32.2 % |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
ross FULKERSON |
USA |
1855.30 |
42.8 % |
23.9 % |
mototaka ISHIZU |
JPN |
1850.26 |
31.8 % |
50 % |
sebastian HALENKE |
GER |
1849.77 |
31.7 % |
49.9 % |
stefan SCHERZ |
AUT |
1849.11 |
51.8 % |
42.5 % |
yuta IMAIZUMI |
JPN |
1841.30 |
40.9 % |
22.5 % |
stefano GHISOLFI |
ITA |
1833.58 |
49.6 % |
40.4 % |
zento MURASHITA |
JPN |
1831.37 |
39.5 % |
21.5 % |
ties VANCRAEYNEST |
BEL |
1831.36 |
39.5 % |
21.5 % |
giovanni PLACCI |
ITA |
1830.48 |
49.1 % |
39.9 % |
masahiro HIGUCHI |
JPN |
1829.60 |
39.3 % |
21.3 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
christoph HANKE |
GER |
1825.36 |
48.4 % |
39.2 % |
philipp MARTIN |
GER |
1822.80 |
48 % |
38.9 % |
yuval SHEMLA |
ISR |
1815.12 |
46.9 % |
37.8 % |
raviandi RAMADHAN |
INA |
1812.56 |
46.6 % |
37.5 % |
giorgio TOMATIS |
ITA |
1810.96 |
36.7 % |
19.6 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
jordi POLES |
FRA |
1797.20 |
44.4 % |
35.4 % |
yoshiyuki OGATA |
JPN |
1780.29 |
32.7 % |
17 % |
mejdi SCHALCK |
FRA |
1774.82 |
32 % |
16.5 % |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
shuta TANAKA |
JPN |
1773.38 |
31.9 % |
16.4 % |
nino GR<U+00DC>NENFELDER |
SUI |
1771.87 |
31.7 % |
16.3 % |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
luka POTOCAR |
SLO |
1767.31 |
31.5 % |
17 % |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
paul JENFT |
FRA |
1743.41 |
28.6 % |
15.2 % |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
martin STRANIK |
CZE |
1720.98 |
25.7 % |
12.7 % |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
jonas UTELLI |
SUI |
1678.32 |
21.3 % |
10.2 % |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
jules MARCHALAND |
FRA |
1670.90 |
20.6 % |
9.8 % |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
ravianto RAMADHAN |
INA |
1634.72 |
23.8 % |
17.7 % |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
filip SCHENK |
ITA |
1607.43 |
15.2 % |
7 % |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
Seoul
Semi-finals
-Competitors = n.semis
-
#####_ Elo History _
Elo Accumulated Seoul Semis
sorato ANRAKU |
JPN |
2316.37 |
91.9 % |
83.9 % |
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
toby ROBERTS |
GBR |
2253.52 |
81.9 % |
80.7 % |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2168.52 |
74.4 % |
70.6 % |
taisei HOMMA |
JPN |
2083.69 |
74.8 % |
57.7 % |
dohyun LEE |
KOR |
2082.42 |
74.6 % |
57.5 % |
adam ONDRA |
CZE |
2046.20 |
59 % |
54.3 % |
shion OMATA |
JPN |
2029.62 |
68.5 % |
50 % |
colin DUFFY |
USA |
2016.56 |
54.8 % |
50 % |
sascha LEHMANN |
SUI |
1986.24 |
62.8 % |
43.8 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
sam AVEZOU |
FRA |
1976.34 |
61.5 % |
42.4 % |
jesse GRUPPER |
USA |
1956.83 |
57.8 % |
37.9 % |
max BERTONE |
FRA |
1919.71 |
53.6 % |
34.7 % |
satone YOSHIDA |
JPN |
1912.89 |
52.6 % |
33.8 % |
guillermo PEINADO FRANGANILLO |
ESP |
1897.34 |
37.9 % |
33.5 % |
kibeom KWON |
KOR |
1894.91 |
50 % |
31.5 % |
ao YURIKUSA |
JPN |
1885.67 |
48.7 % |
30.4 % |
yannick FLOH<U+00C9> |
GER |
1881.86 |
34.7 % |
33 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
shinyeong YUN |
KOR |
1868.29 |
46.2 % |
28.3 % |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
oscar BAUDRAND |
CAN |
1865.73 |
45.8 % |
28 % |
yuta IMAIZUMI |
JPN |
1861.81 |
45.3 % |
27.6 % |
ross FULKERSON |
USA |
1855.30 |
42.8 % |
23.9 % |
sebastian HALENKE |
GER |
1849.77 |
31.7 % |
49.9 % |
stefan SCHERZ |
AUT |
1849.11 |
51.8 % |
42.5 % |
hyunbin MIN |
KOR |
1845.25 |
42.9 % |
25.7 % |
mototaka ISHIZU |
JPN |
1837.45 |
41.8 % |
24.9 % |
zento MURASHITA |
JPN |
1836.56 |
41.7 % |
24.8 % |
stefano GHISOLFI |
ITA |
1833.58 |
49.6 % |
40.4 % |
ties VANCRAEYNEST |
BEL |
1831.36 |
39.5 % |
21.5 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
christoph HANKE |
GER |
1825.36 |
48.4 % |
39.2 % |
yuval SHEMLA |
ISR |
1815.12 |
46.9 % |
37.8 % |
raviandi RAMADHAN |
INA |
1812.56 |
46.6 % |
37.5 % |
masahiro HIGUCHI |
JPN |
1809.19 |
37.9 % |
21.9 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
giovanni PLACCI |
ITA |
1804.95 |
37.3 % |
21.5 % |
jordi POLES |
FRA |
1797.20 |
44.4 % |
35.4 % |
yoshiyuki OGATA |
JPN |
1795.91 |
36.1 % |
20.7 % |
philipp MARTIN |
GER |
1794.74 |
36 % |
20.6 % |
giorgio TOMATIS |
ITA |
1788.07 |
35.1 % |
19.9 % |
shuta TANAKA |
JPN |
1776.23 |
33.6 % |
18.9 % |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
nino GR<U+00DC>NENFELDER |
SUI |
1771.87 |
31.7 % |
16.3 % |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
luka POTOCAR |
SLO |
1767.31 |
31.5 % |
17 % |
paul JENFT |
FRA |
1761.73 |
31.7 % |
17.6 % |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
mejdi SCHALCK |
FRA |
1759.74 |
31.5 % |
17.5 % |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
martin STRANIK |
CZE |
1720.98 |
25.7 % |
12.7 % |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
jules MARCHALAND |
FRA |
1670.90 |
20.6 % |
9.8 % |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
jonas UTELLI |
SUI |
1645.64 |
19.2 % |
9.9 % |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
ravianto RAMADHAN |
INA |
1634.72 |
23.8 % |
17.7 % |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
filip SCHENK |
ITA |
1603.10 |
15.7 % |
7.9 % |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
Finals
-Competitors = n.final
-
#####_ Elo History _
Elo Accumulated Seoul Final
sorato ANRAKU |
JPN |
2340.69 |
86.6 % |
84.5 % |
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
toby ROBERTS |
GBR |
2253.52 |
81.9 % |
80.7 % |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2168.52 |
74.4 % |
70.6 % |
dohyun LEE |
KOR |
2102.94 |
62.2 % |
58.1 % |
taisei HOMMA |
JPN |
2076.77 |
58.6 % |
54.4 % |
adam ONDRA |
CZE |
2046.20 |
59 % |
54.3 % |
shion OMATA |
JPN |
2045.89 |
54.2 % |
50 % |
colin DUFFY |
USA |
2016.56 |
54.8 % |
50 % |
sascha LEHMANN |
SUI |
1986.24 |
62.8 % |
43.8 % |
sam AVEZOU |
FRA |
1983.86 |
45.3 % |
41.2 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
jesse GRUPPER |
USA |
1956.83 |
57.8 % |
37.9 % |
max BERTONE |
FRA |
1919.71 |
53.6 % |
34.7 % |
satone YOSHIDA |
JPN |
1912.89 |
52.6 % |
33.8 % |
guillermo PEINADO FRANGANILLO |
ESP |
1897.34 |
37.9 % |
33.5 % |
kibeom KWON |
KOR |
1894.91 |
50 % |
31.5 % |
ao YURIKUSA |
JPN |
1885.67 |
48.7 % |
30.4 % |
yannick FLOH<U+00C9> |
GER |
1881.86 |
34.7 % |
33 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
shinyeong YUN |
KOR |
1868.29 |
46.2 % |
28.3 % |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
oscar BAUDRAND |
CAN |
1865.73 |
45.8 % |
28 % |
yuta IMAIZUMI |
JPN |
1861.26 |
29 % |
25.7 % |
ross FULKERSON |
USA |
1855.30 |
42.8 % |
23.9 % |
sebastian HALENKE |
GER |
1849.77 |
31.7 % |
49.9 % |
stefan SCHERZ |
AUT |
1849.11 |
51.8 % |
42.5 % |
hyunbin MIN |
KOR |
1845.25 |
42.9 % |
25.7 % |
mototaka ISHIZU |
JPN |
1837.45 |
41.8 % |
24.9 % |
zento MURASHITA |
JPN |
1836.56 |
41.7 % |
24.8 % |
stefano GHISOLFI |
ITA |
1833.58 |
49.6 % |
40.4 % |
ties VANCRAEYNEST |
BEL |
1831.36 |
39.5 % |
21.5 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
christoph HANKE |
GER |
1825.36 |
48.4 % |
39.2 % |
yuval SHEMLA |
ISR |
1815.12 |
46.9 % |
37.8 % |
raviandi RAMADHAN |
INA |
1812.56 |
46.6 % |
37.5 % |
masahiro HIGUCHI |
JPN |
1809.19 |
37.9 % |
21.9 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
giovanni PLACCI |
ITA |
1804.95 |
37.3 % |
21.5 % |
yoshiyuki OGATA |
JPN |
1800.66 |
22.4 % |
19.6 % |
jordi POLES |
FRA |
1797.20 |
44.4 % |
35.4 % |
philipp MARTIN |
GER |
1794.74 |
36 % |
20.6 % |
giorgio TOMATIS |
ITA |
1788.07 |
35.1 % |
19.9 % |
shuta TANAKA |
JPN |
1776.23 |
33.6 % |
18.9 % |
paul JENFT |
FRA |
1776.02 |
20 % |
17.5 % |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
nino GR<U+00DC>NENFELDER |
SUI |
1771.87 |
31.7 % |
16.3 % |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
luka POTOCAR |
SLO |
1767.31 |
31.5 % |
17 % |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
mejdi SCHALCK |
FRA |
1759.74 |
31.5 % |
17.5 % |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
martin STRANIK |
CZE |
1720.98 |
25.7 % |
12.7 % |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
jules MARCHALAND |
FRA |
1670.90 |
20.6 % |
9.8 % |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
jonas UTELLI |
SUI |
1645.64 |
19.2 % |
9.9 % |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
ravianto RAMADHAN |
INA |
1634.72 |
23.8 % |
17.7 % |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
filip SCHENK |
ITA |
1603.10 |
15.7 % |
7.9 % |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
Wujiang
Semi-finals
-Competitors = n.semis
-
#####_ Elo History _
Elo Accumulated Wujiang Semis
sorato ANRAKU |
JPN |
2369.47 |
91.6 % |
83.3 % |
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
toby ROBERTS |
GBR |
2243.52 |
84.1 % |
70.7 % |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2197.73 |
80.3 % |
64.9 % |
dohyun LEE |
KOR |
2090.67 |
68.8 % |
50 % |
taisei HOMMA |
JPN |
2078.52 |
67.2 % |
48.3 % |
adam ONDRA |
CZE |
2046.20 |
59 % |
54.3 % |
shion OMATA |
JPN |
2039.44 |
62.1 % |
42.7 % |
colin DUFFY |
USA |
2016.56 |
54.8 % |
50 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
sascha LEHMANN |
SUI |
1971.73 |
52.6 % |
33.5 % |
neo SUZUKI |
JPN |
1966.91 |
51.9 % |
32.9 % |
yufei PAN |
CHN |
1961.35 |
51.1 % |
32.2 % |
sam AVEZOU |
FRA |
1961.01 |
51.1 % |
32.2 % |
jesse GRUPPER |
USA |
1953.60 |
50 % |
31.2 % |
hannes VAN DUYSEN |
BEL |
1950.22 |
49.5 % |
30.8 % |
satone YOSHIDA |
JPN |
1934.93 |
47.3 % |
29 % |
hiroto SHIMIZU |
JPN |
1919.61 |
45.1 % |
27.2 % |
yannick NAGEL |
GER |
1916.82 |
44.7 % |
26.9 % |
joonha SHIN |
KOR |
1914.04 |
44.3 % |
26.6 % |
max BERTONE |
FRA |
1902.76 |
42.7 % |
25.3 % |
guillermo PEINADO FRANGANILLO |
ESP |
1897.34 |
37.9 % |
33.5 % |
kibeom KWON |
KOR |
1894.91 |
50 % |
31.5 % |
yannick FLOH<U+00C9> |
GER |
1892.92 |
41.4 % |
24.3 % |
ao YURIKUSA |
JPN |
1885.67 |
48.7 % |
30.4 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
shinyeong YUN |
KOR |
1868.29 |
46.2 % |
28.3 % |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
oscar BAUDRAND |
CAN |
1865.73 |
45.8 % |
28 % |
yuta IMAIZUMI |
JPN |
1861.26 |
29 % |
25.7 % |
ross FULKERSON |
USA |
1855.30 |
42.8 % |
23.9 % |
sebastian HALENKE |
GER |
1849.77 |
31.7 % |
49.9 % |
stefan SCHERZ |
AUT |
1849.11 |
51.8 % |
42.5 % |
hyunbin MIN |
KOR |
1845.25 |
42.9 % |
25.7 % |
mototaka ISHIZU |
JPN |
1837.45 |
41.8 % |
24.9 % |
zento MURASHITA |
JPN |
1836.56 |
41.7 % |
24.8 % |
stefano GHISOLFI |
ITA |
1833.58 |
49.6 % |
40.4 % |
ties VANCRAEYNEST |
BEL |
1831.36 |
39.5 % |
21.5 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
christoph HANKE |
GER |
1825.36 |
48.4 % |
39.2 % |
yuval SHEMLA |
ISR |
1815.12 |
46.9 % |
37.8 % |
raviandi RAMADHAN |
INA |
1812.56 |
46.6 % |
37.5 % |
masahiro HIGUCHI |
JPN |
1809.19 |
37.9 % |
21.9 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
giovanni PLACCI |
ITA |
1805.24 |
29.9 % |
16.2 % |
yoshiyuki OGATA |
JPN |
1800.66 |
22.4 % |
19.6 % |
jordi POLES |
FRA |
1797.20 |
44.4 % |
35.4 % |
philipp MARTIN |
GER |
1794.74 |
36 % |
20.6 % |
luka POTOCAR |
SLO |
1781.67 |
27.1 % |
14.4 % |
shuta TANAKA |
JPN |
1776.23 |
33.6 % |
18.9 % |
paul JENFT |
FRA |
1776.02 |
20 % |
17.5 % |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
giorgio TOMATIS |
ITA |
1768.96 |
25.7 % |
13.6 % |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
mejdi SCHALCK |
FRA |
1759.74 |
31.5 % |
17.5 % |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
nino GR<U+00DC>NENFELDER |
SUI |
1738.91 |
22.5 % |
11.7 % |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
martin STRANIK |
CZE |
1720.98 |
25.7 % |
12.7 % |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
jules MARCHALAND |
FRA |
1670.90 |
20.6 % |
9.8 % |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
jonas UTELLI |
SUI |
1654.84 |
15.2 % |
7.5 % |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
ravianto RAMADHAN |
INA |
1634.72 |
23.8 % |
17.7 % |
filip SCHENK |
ITA |
1629.10 |
13.4 % |
6.6 % |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
Finals
-Competitors = n.final
-
#####_ Elo History _
Elo Accumulated Wujiang Final
sorato ANRAKU |
JPN |
2393.58 |
89.8 % |
92.1 % |
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
toby ROBERTS |
GBR |
2243.52 |
84.1 % |
70.7 % |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2212.88 |
75.6 % |
80.4 % |
dohyun LEE |
KOR |
2090.67 |
68.8 % |
50 % |
taisei HOMMA |
JPN |
2078.52 |
67.2 % |
48.3 % |
adam ONDRA |
CZE |
2046.20 |
59 % |
54.3 % |
shion OMATA |
JPN |
2039.44 |
62.1 % |
42.7 % |
colin DUFFY |
USA |
2016.56 |
54.8 % |
50 % |
neo SUZUKI |
JPN |
1987.34 |
45.8 % |
52.8 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
sascha LEHMANN |
SUI |
1971.73 |
52.6 % |
33.5 % |
yufei PAN |
CHN |
1968.09 |
43.1 % |
50 % |
sam AVEZOU |
FRA |
1961.01 |
51.1 % |
32.2 % |
jesse GRUPPER |
USA |
1953.60 |
50 % |
31.2 % |
hannes VAN DUYSEN |
BEL |
1950.22 |
49.5 % |
30.8 % |
satone YOSHIDA |
JPN |
1946.39 |
40 % |
46.9 % |
hiroto SHIMIZU |
JPN |
1919.61 |
45.1 % |
27.2 % |
yannick NAGEL |
GER |
1916.82 |
44.7 % |
26.9 % |
joonha SHIN |
KOR |
1914.04 |
44.3 % |
26.6 % |
max BERTONE |
FRA |
1902.76 |
42.7 % |
25.3 % |
guillermo PEINADO FRANGANILLO |
ESP |
1897.34 |
37.9 % |
33.5 % |
kibeom KWON |
KOR |
1894.91 |
50 % |
31.5 % |
yannick FLOH<U+00C9> |
GER |
1886.36 |
32.1 % |
38.4 % |
ao YURIKUSA |
JPN |
1885.67 |
48.7 % |
30.4 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
shinyeong YUN |
KOR |
1868.29 |
46.2 % |
28.3 % |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
oscar BAUDRAND |
CAN |
1865.73 |
45.8 % |
28 % |
yuta IMAIZUMI |
JPN |
1861.26 |
29 % |
25.7 % |
ross FULKERSON |
USA |
1855.30 |
42.8 % |
23.9 % |
sebastian HALENKE |
GER |
1849.77 |
31.7 % |
49.9 % |
stefan SCHERZ |
AUT |
1849.11 |
51.8 % |
42.5 % |
hyunbin MIN |
KOR |
1845.25 |
42.9 % |
25.7 % |
mototaka ISHIZU |
JPN |
1837.45 |
41.8 % |
24.9 % |
zento MURASHITA |
JPN |
1836.56 |
41.7 % |
24.8 % |
stefano GHISOLFI |
ITA |
1833.58 |
49.6 % |
40.4 % |
ties VANCRAEYNEST |
BEL |
1831.36 |
39.5 % |
21.5 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
christoph HANKE |
GER |
1825.36 |
48.4 % |
39.2 % |
yuval SHEMLA |
ISR |
1815.12 |
46.9 % |
37.8 % |
raviandi RAMADHAN |
INA |
1812.56 |
46.6 % |
37.5 % |
masahiro HIGUCHI |
JPN |
1809.19 |
37.9 % |
21.9 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
giovanni PLACCI |
ITA |
1805.24 |
29.9 % |
16.2 % |
yoshiyuki OGATA |
JPN |
1800.66 |
22.4 % |
19.6 % |
jordi POLES |
FRA |
1797.20 |
44.4 % |
35.4 % |
philipp MARTIN |
GER |
1794.74 |
36 % |
20.6 % |
luka POTOCAR |
SLO |
1785.16 |
20.9 % |
25.9 % |
shuta TANAKA |
JPN |
1776.23 |
33.6 % |
18.9 % |
paul JENFT |
FRA |
1776.02 |
20 % |
17.5 % |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
giorgio TOMATIS |
ITA |
1768.96 |
25.7 % |
13.6 % |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
mejdi SCHALCK |
FRA |
1759.74 |
31.5 % |
17.5 % |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
nino GR<U+00DC>NENFELDER |
SUI |
1738.91 |
22.5 % |
11.7 % |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
martin STRANIK |
CZE |
1720.98 |
25.7 % |
12.7 % |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
jules MARCHALAND |
FRA |
1670.90 |
20.6 % |
9.8 % |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
jonas UTELLI |
SUI |
1654.84 |
15.2 % |
7.5 % |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
ravianto RAMADHAN |
INA |
1634.72 |
23.8 % |
17.7 % |
filip SCHENK |
ITA |
1629.67 |
9.7 % |
12.5 % |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
Bali
Semi-finals
-Competitors = n.semis
-
#####_ Elo History _
Elo Accumulated Bali Semis
sorato ANRAKU |
JPN |
2380.84 |
92.3 % |
84.7 % |
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
toby ROBERTS |
GBR |
2243.52 |
84.1 % |
70.7 % |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2236.62 |
83.9 % |
70.7 % |
dohyun LEE |
KOR |
2109.22 |
71.4 % |
53.7 % |
taisei HOMMA |
JPN |
2083.20 |
68.2 % |
50 % |
shion OMATA |
JPN |
2055.40 |
64.7 % |
46 % |
adam ONDRA |
CZE |
2046.20 |
59 % |
54.3 % |
colin DUFFY |
USA |
2016.56 |
54.8 % |
50 % |
neo SUZUKI |
JPN |
2009.09 |
58.4 % |
39.5 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
satone YOSHIDA |
JPN |
1976.67 |
53.8 % |
35.1 % |
yufei PAN |
CHN |
1968.09 |
43.1 % |
50 % |
sascha LEHMANN |
SUI |
1962.94 |
51.8 % |
33.4 % |
sam AVEZOU |
FRA |
1961.01 |
51.1 % |
32.2 % |
jesse GRUPPER |
USA |
1950.46 |
50 % |
31.8 % |
hannes VAN DUYSEN |
BEL |
1950.22 |
49.5 % |
30.8 % |
muhammad RIZKY SYAHRAFLI SIMATUPANG |
INA |
1935.01 |
47.8 % |
29.9 % |
hiroto SHIMIZU |
JPN |
1922.19 |
45.9 % |
28.4 % |
hyunseung NOH |
KOR |
1921.10 |
45.8 % |
28.2 % |
yannick NAGEL |
GER |
1916.82 |
44.7 % |
26.9 % |
yannick FLOH<U+00C9> |
GER |
1914.14 |
44.8 % |
27.4 % |
joonha SHIN |
KOR |
1914.04 |
44.3 % |
26.6 % |
max BERTONE |
FRA |
1913.77 |
44.7 % |
27.4 % |
putra TRI RAMADANI |
INA |
1907.19 |
43.8 % |
26.6 % |
victor GUILLERMIN |
FRA |
1901.62 |
43 % |
26 % |
guillermo PEINADO FRANGANILLO |
ESP |
1897.34 |
37.9 % |
33.5 % |
kibeom KWON |
KOR |
1894.91 |
50 % |
31.5 % |
ao YURIKUSA |
JPN |
1885.67 |
48.7 % |
30.4 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
shinyeong YUN |
KOR |
1868.29 |
46.2 % |
28.3 % |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
oscar BAUDRAND |
CAN |
1865.73 |
45.8 % |
28 % |
yuta IMAIZUMI |
JPN |
1861.26 |
29 % |
25.7 % |
ross FULKERSON |
USA |
1855.30 |
42.8 % |
23.9 % |
stefan SCHERZ |
AUT |
1849.11 |
51.8 % |
42.5 % |
hyunbin MIN |
KOR |
1845.25 |
42.9 % |
25.7 % |
mototaka ISHIZU |
JPN |
1837.45 |
41.8 % |
24.9 % |
zento MURASHITA |
JPN |
1836.56 |
41.7 % |
24.8 % |
stefano GHISOLFI |
ITA |
1833.58 |
49.6 % |
40.4 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
christoph HANKE |
GER |
1825.36 |
48.4 % |
39.2 % |
sebastian HALENKE |
GER |
1816.49 |
31.6 % |
17.7 % |
yuval SHEMLA |
ISR |
1815.12 |
46.9 % |
37.8 % |
ties VANCRAEYNEST |
BEL |
1809.30 |
30.7 % |
17.1 % |
masahiro HIGUCHI |
JPN |
1809.19 |
37.9 % |
21.9 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
yoshiyuki OGATA |
JPN |
1800.66 |
22.4 % |
19.6 % |
giovanni PLACCI |
ITA |
1799.98 |
29.6 % |
16.4 % |
jordi POLES |
FRA |
1797.20 |
44.4 % |
35.4 % |
raviandi RAMADHAN |
INA |
1796.14 |
29.1 % |
16.1 % |
philipp MARTIN |
GER |
1794.74 |
36 % |
20.6 % |
luka POTOCAR |
SLO |
1785.16 |
20.9 % |
25.9 % |
shuta TANAKA |
JPN |
1776.23 |
33.6 % |
18.9 % |
paul JENFT |
FRA |
1776.02 |
20 % |
17.5 % |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
giorgio TOMATIS |
ITA |
1768.96 |
25.7 % |
13.6 % |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
mejdi SCHALCK |
FRA |
1759.74 |
31.5 % |
17.5 % |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
nino GR<U+00DC>NENFELDER |
SUI |
1708.86 |
19.9 % |
10.4 % |
martin STRANIK |
CZE |
1693.78 |
18.6 % |
9.6 % |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
jules MARCHALAND |
FRA |
1670.90 |
20.6 % |
9.8 % |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
filip SCHENK |
ITA |
1638.91 |
14.3 % |
7.2 % |
ravianto RAMADHAN |
INA |
1634.72 |
23.8 % |
17.7 % |
jonas UTELLI |
SUI |
1630.62 |
13.7 % |
6.9 % |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
Finals
-Competitors = n.final
-
#####_ Elo History _
Elo Accumulated Bali Final
sorato ANRAKU |
JPN |
2380.84 |
92.3 % |
84.7 % |
Jakob Schubert |
AUT |
2262.00 |
NA |
NA |
alberto GIN<U+00C9>S L<U+00D3>PEZ |
ESP |
2252.56 |
79.6 % |
79.9 % |
toby ROBERTS |
GBR |
2243.52 |
84.1 % |
70.7 % |
dohyun LEE |
KOR |
2116.89 |
64.1 % |
64.5 % |
taisei HOMMA |
JPN |
2083.20 |
68.2 % |
50 % |
shion OMATA |
JPN |
2054.43 |
55.4 % |
55.9 % |
adam ONDRA |
CZE |
2046.20 |
59 % |
54.3 % |
colin DUFFY |
USA |
2016.56 |
54.8 % |
50 % |
neo SUZUKI |
JPN |
2013.16 |
49.5 % |
50 % |
satone YOSHIDA |
JPN |
2003.95 |
48.2 % |
48.7 % |
Alexander Megos |
GER |
1983.00 |
NA |
NA |
yufei PAN |
CHN |
1968.09 |
43.1 % |
50 % |
sascha LEHMANN |
SUI |
1962.94 |
51.8 % |
33.4 % |
sam AVEZOU |
FRA |
1961.01 |
51.1 % |
32.2 % |
jesse GRUPPER |
USA |
1950.46 |
50 % |
31.8 % |
hannes VAN DUYSEN |
BEL |
1950.22 |
49.5 % |
30.8 % |
max BERTONE |
FRA |
1937.20 |
38.8 % |
39.2 % |
muhammad RIZKY SYAHRAFLI SIMATUPANG |
INA |
1930.77 |
37.9 % |
38.4 % |
yannick FLOH<U+00C9> |
GER |
1928.42 |
37.6 % |
38 % |
hiroto SHIMIZU |
JPN |
1922.19 |
45.9 % |
28.4 % |
hyunseung NOH |
KOR |
1921.10 |
45.8 % |
28.2 % |
yannick NAGEL |
GER |
1916.82 |
44.7 % |
26.9 % |
joonha SHIN |
KOR |
1914.04 |
44.3 % |
26.6 % |
putra TRI RAMADANI |
INA |
1907.19 |
43.8 % |
26.6 % |
victor GUILLERMIN |
FRA |
1901.62 |
43 % |
26 % |
guillermo PEINADO FRANGANILLO |
ESP |
1897.34 |
37.9 % |
33.5 % |
kibeom KWON |
KOR |
1894.91 |
50 % |
31.5 % |
ao YURIKUSA |
JPN |
1885.67 |
48.7 % |
30.4 % |
Tomoa Narasaki |
JPN |
1877.00 |
NA |
NA |
shinyeong YUN |
KOR |
1868.29 |
46.2 % |
28.3 % |
timo UZNIK |
AUT |
1868.06 |
45.1 % |
26.8 % |
oscar BAUDRAND |
CAN |
1865.73 |
45.8 % |
28 % |
yuta IMAIZUMI |
JPN |
1861.26 |
29 % |
25.7 % |
ross FULKERSON |
USA |
1855.30 |
42.8 % |
23.9 % |
stefan SCHERZ |
AUT |
1849.11 |
51.8 % |
42.5 % |
hyunbin MIN |
KOR |
1845.25 |
42.9 % |
25.7 % |
mototaka ISHIZU |
JPN |
1837.45 |
41.8 % |
24.9 % |
zento MURASHITA |
JPN |
1836.56 |
41.7 % |
24.8 % |
stefano GHISOLFI |
ITA |
1833.58 |
49.6 % |
40.4 % |
Hannes Van Duysen |
BEL |
1827.00 |
NA |
NA |
christoph HANKE |
GER |
1825.36 |
48.4 % |
39.2 % |
sebastian HALENKE |
GER |
1816.49 |
31.6 % |
17.7 % |
yuval SHEMLA |
ISR |
1815.12 |
46.9 % |
37.8 % |
ties VANCRAEYNEST |
BEL |
1809.30 |
30.7 % |
17.1 % |
masahiro HIGUCHI |
JPN |
1809.19 |
37.9 % |
21.9 % |
Sean Bailey |
USA |
1807.00 |
NA |
NA |
yoshiyuki OGATA |
JPN |
1800.66 |
22.4 % |
19.6 % |
giovanni PLACCI |
ITA |
1799.98 |
29.6 % |
16.4 % |
jordi POLES |
FRA |
1797.20 |
44.4 % |
35.4 % |
raviandi RAMADHAN |
INA |
1796.14 |
29.1 % |
16.1 % |
philipp MARTIN |
GER |
1794.74 |
36 % |
20.6 % |
luka POTOCAR |
SLO |
1785.16 |
20.9 % |
25.9 % |
shuta TANAKA |
JPN |
1776.23 |
33.6 % |
18.9 % |
paul JENFT |
FRA |
1776.02 |
20 % |
17.5 % |
Hidemasa Nishida |
JPN |
1774.00 |
NA |
NA |
giorgio TOMATIS |
ITA |
1768.96 |
25.7 % |
13.6 % |
Neo Suzuki |
JPN |
1768.00 |
NA |
NA |
Hyunbin Min |
KOR |
1761.00 |
NA |
NA |
mejdi SCHALCK |
FRA |
1759.74 |
31.5 % |
17.5 % |
Hamish Mcarthur |
GBR |
1751.00 |
NA |
NA |
Yunchan Song |
KOR |
1745.00 |
NA |
NA |
nao MONCHOIS |
FRA |
1734.00 |
NA |
NA |
Meichi Narasaki |
JPN |
1716.00 |
NA |
NA |
Sebastian Halenke |
GER |
1714.00 |
NA |
NA |
nino GR<U+00DC>NENFELDER |
SUI |
1708.86 |
19.9 % |
10.4 % |
martin STRANIK |
CZE |
1693.78 |
18.6 % |
9.6 % |
Yufei Pan |
CHN |
1682.00 |
NA |
NA |
hannes PUMAN |
SWE |
1676.00 |
NA |
NA |
jules MARCHALAND |
FRA |
1670.90 |
20.6 % |
9.8 % |
Hanwool Kim |
KOR |
1660.00 |
NA |
NA |
Sean Mccoll |
CAN |
1650.00 |
NA |
NA |
Simon Lorenzi |
BEL |
1646.00 |
NA |
NA |
Nino Grunenfelder |
SUI |
1644.00 |
NA |
NA |
filip SCHENK |
ITA |
1638.91 |
14.3 % |
7.2 % |
ravianto RAMADHAN |
INA |
1634.72 |
23.8 % |
17.7 % |
jonas UTELLI |
SUI |
1630.62 |
13.7 % |
6.9 % |
Nicolas Collin |
BEL |
1617.00 |
NA |
NA |
marcello BOMBARDI |
ITA |
1614.00 |
NA |
NA |
ars<U+00E8>ne DUVAL |
FRA |
1600.00 |
NA |
NA |
Dillon Countryman |
USA |
1597.00 |
NA |
NA |
LS0tDQp0aXRsZTogIklGU0NfRWxvX0xFQURfTWVuXzIwMjQiDQphdXRob3I6ICJGZWRlcmljbyBKLiBWaWxsYXRvcm8iDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2RlcHRoOiA0DQogICAgdG9jX2Zsb2F0OiB0cnVlDQotLS0NCg0KIyMjIyMgRnVlbnRlOiBbXSgpDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShmbGV4ZGFzaGJvYXJkKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBlY2hvID0gRkFMU0UsDQoJbWVzc2FnZSA9IEZBTFNFLA0KICB3YXJuaW5nID0gRkFMU0UsDQoJaW5jbHVkZSA9IFRSVUUNCikNCmBgYCAgDQoNCmBgYHtyIHBhY2thZ2VzLCBtZXNzYWdlPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KaWYoIXJlcXVpcmUodGlkeXZlcnNlKSl7aW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIixyZXBvcyA9ICJodHRwOi8vY3Jhbi51cy5yLXByb2plY3Qub3JnIil9DQppZighcmVxdWlyZShnb29nbGVzaGVldHM0KSl7aW5zdGFsbC5wYWNrYWdlcygiZ29vZ2xlc2hlZXRzNCIpfQ0KaWYoIXJlcXVpcmUoZ29vZ2xlZHJpdmUpKXtpbnN0YWxsLnBhY2thZ2VzKCJnb29nbGVkcml2ZSIpfQ0KaWYoIXJlcXVpcmUoZHBseXIpKXtpbnN0YWxsLnBhY2thZ2VzKCJkcGx5ciIpfQ0KaWYoIXJlcXVpcmUoaHR0cjIpKXtpbnN0YWxsLnBhY2thZ2VzKCJodHRyMiIpfQ0KaWYoIXJlcXVpcmUoanNvbmxpdGUpKXtpbnN0YWxsLnBhY2thZ2VzKCJqc29ubGl0ZSIpfQ0KaWYoIXJlcXVpcmUoUnNlbGVuaXVtKSl7aW5zdGFsbC5wYWNrYWdlcygiUnNlbGVuaXVtIil9DQppZighcmVxdWlyZShjaHJvbW90ZSkpe2luc3RhbGwucGFja2FnZXMoImNocm9tb3RlIil9DQppZighcmVxdWlyZShwdXJycikpe2luc3RhbGwucGFja2FnZXMoInB1cnJyIil9DQppZighcmVxdWlyZSh3ZG1hbikpe2luc3RhbGwucGFja2FnZXMoIndkbWFuIil9DQppZighcmVxdWlyZShEVCkpe2luc3RhbGwucGFja2FnZXMoIkRUIil9DQppZighcmVxdWlyZShwbG90bHkpKXtpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiKX0NCiMjDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KGNocm9tb3RlKQ0KbGlicmFyeShwdXJycikNCmxpYnJhcnkod2RtYW4pDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShydmVzdCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGpzb25saXRlKQ0KbGlicmFyeShSU2VsZW5pdW0pDQoNCmxpYnJhcnkoZ29vZ2xlc2hlZXRzNCkNCmxpYnJhcnkoZ29vZ2xlZHJpdmUpDQoNCmBgYCAgDQoNCg0KIyMjIyMgUmVhZGluZyBEYXRhDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCg0Kb3B0aW9ucyhnYXJnbGVfb2F1dGhfZW1haWwgPSAidmlsbGF0b3JvcGF6ZmpAZGF0YWFuYWx5c2lzbGFiLmNvbSIpDQojDQpzcyA8LSAiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMUpoQnM3eWNlRVhVcm5uY1lEV2tXVDE2bktZMU1DeF9aVHB4Z09PVVJKNk0vZWRpdD91c3A9c2hhcmluZyINCmhvamEgPSAxDQpyYW5nbyA9ICJBMTpJNTU4Ig0KcmFua3MgPC0gcmVhZF9zaGVldChzcywNCiAgICAgICAgICAgICAgICBzaGVldD1ob2phLA0KICAgICAgICAgICAgICAgIHJhbmdlPSByYW5nbywgDQogICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gVFJVRQ0KICAgICAgICAgICAgICAgICMsDQogICAgICAgICAgICAgICAgI2NvbF90eXBlcyA9ICJjIg0KICAgICAgICAgICAgICAgICkNCg0KcmFua3MgPC0gIHJhbmtzICU+JQ0KICBtdXRhdGVfaWYoaXMuY2hhcmFjdGVyLCBhcy5mYWN0b3IpDQojIyMgRWxvIGxlYWQgSnVuZS0yMDI0DQpzcyA8LSAiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMWNpNWVXc3BjeDZhR2htaTdPMmp6ZUR4Q1FaOHVTVWJ2WVBDQmhpWXBmRGcvZWRpdD91c3A9c2hhcmluZyINCmhvamEgPSAiRWxvX01lbidzX0xlYWRfSnVuZV8yMDI0Ig0KcmFuZ28gPSAiQTE6QzUxIg0KZWxvLmFjY3VtIDwtIHJlYWRfc2hlZXQoc3MsDQogICAgICAgICAgICAgICAgc2hlZXQ9aG9qYSwNCiAgICAgICAgICAgICAgICByYW5nZT0gcmFuZ28sIA0KICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IFRSVUUNCiAgICAgICAgICAgICAgICAjLA0KICAgICAgICAgICAgICAgICNjb2xfdHlwZXMgPSAiYyINCiAgICAgICAgICAgICAgICApDQoNCmVsby5hY2N1bSA8LSAgZWxvLmFjY3VtICU+JQ0KICBtdXRhdGVfaWYoaXMuY2hhcmFjdGVyLCBhcy5mYWN0b3IpDQplbG8ubGVhZC5tZW4uYWNjdW0gPC0gZWxvLmFjY3VtIA0KDQpgYGAgIA0KDQojIyMgQ2hhbW9uaXgNCmBgYHtyIGluY2x1ZGU9VFJVRSwgcm93cy5wcmludD0gOH0NCmxlYWRfbWVuIDwtIHJhbmtzICU+JQ0KICBmaWx0ZXIoY29tcGU9PSJDaGFtb25peCIpICU+JQ0KICBncm91cF9ieShjb21wZXRpdG9yPSBOYW1lLA0KICAgICAgIyAgICAgWWVhcj0geWVhciwNCiAgICAgICAgICAgQ29tcGU9IGNvbXBlLA0KICAgICAgU3RhZ2UgPSBTdGFnZSwNCiAgICAgICAgICAgQ291bnRyeSA9IENvdW50cnksDQogICAgICAgICAgIERhdGU9IERhdGUsDQogICAgICBSYW5rID0gUmFuaykgJT4lDQojICByZWZyYW1lKHJhbms9IFJhbmspICU+JQ0KICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3IgKyBDb3VudHJ5ICsgQ29tcGUgfiBTdGFnZSwNCiAgICAgICAgICAgICAgICAgIHZhbHVlLnZhciA9ICJSYW5rIiwNCiAgICAgICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkNCg0KbGVhZF9tZW4gPC0gYXNfdGliYmxlKGxlYWRfbWVuKQ0KIyMNCmxlYWRfbWVuW29yZGVyKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCksXSANCiMjDQpuLnNlbWlzIDwtIG5yb3cobGVhZF9tZW5bIWlzLm5hKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCksXSkNCm4uZmluYWxzIDwtIG5yb3cobGVhZF9tZW5bIWlzLm5hKGxlYWRfbWVuJEZpbmFsKSxdKQ0KDQpgYGAgIA0KDQojIyMgQ2hhbW9uaXg6IFNlbWktZmluYWxzDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmxlYWRfbWVuW29yZGVyKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCksIGMoMSwyLDYpXSAlPiUgcHJpbnQobj02MCkNCmBgYCAgDQoNCiMjIyBTZW1pLWZpbmFscyANCiotQ29tcGV0aXRvcnMgPSBgbi5zZW1pc2AtKg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbGVhZF9tZW4uY2hhbW9uaXguc2VtaXMgPC0gbGVhZF9tZW5bLGMoMSwyLDYpXSAlPiUgZmlsdGVyKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCE9Ik5BIikgDQojDQpsYXN0LmNvbXAuZGVidXQgPC0gbGVhZF9tZW4uY2hhbW9uaXguc2VtaXMgJT4lIGFudGlfam9pbihlbG8ubGVhZC5tZW4uYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3QuY29tcC5kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQpsYXN0LmNvbXAuY2FsYyA8LSBsZWFkX21lbi5jaGFtb25peC5zZW1pcyAlPiUgcmlnaHRfam9pbihlbG8ubGVhZC5tZW4uYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0pDQpSIDwtIGxhc3QuY29tcC5jYWxjJEVsb1shaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApLDFdDQpjb3VudHJ5IDwtIGxhc3QuY29tcC5jYWxjJENvdW50cnlbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgDQpzdGRldiA8LSBzZChyZXN1bHRzLCBuYS5ybSA9IFRSVUUpDQojDQphdmcucGxheWVyIDwtIG1lYW4oYyhSLCByZXAobWVhbihSKSwgbi5kZWJ1dCApKSkNCm1lZGlhbmEgPC0gbWVkaWFuKGxlYWRfbWVuJGBTZW1pLWZpbmFsYFshaXMubmEobGVhZF9tZW4kYFNlbWktZmluYWxgKV0pDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gbGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCg0KZWxvLkNoYW1vbml4LnNlbWlzIDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBDdHJ5PSBjb3VudHJ5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gbGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5DaGFtb25peC5zZW1pcyA8LSBhc190aWJibGUoZWxvLkNoYW1vbml4LnNlbWlzKQ0KDQojIyMjIyMjIyMjIw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0LmNvbXAuZGVidXQkYFNlbWktZmluYWxgKQ0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXSkNClIuZGVidXQgPC0gcmVwKG1lYW4oUiksIG4pDQpuYW1lcyA8LSBsYXN0LmNvbXAuZGVidXRbLDFdDQpjb3VudHJ5IDwtIGxhc3QuY29tcC5kZWJ1dCRDb3VudHJ5DQojY2F0ZWcgPC0gbGVhZF9tZW4uYV9iDQpTIDwtICgobWVkaWFuYS0gbGFzdC5jb21wLmRlYnV0JGBTZW1pLWZpbmFsYCkgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8uQ2hhbW9uaXguc2VtaXMkUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8uQ2hhbW9uaXguc2VtaXMkUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZWxvLkNoYW1vbml4LmRlYnV0IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBDdHJ5PSBjb3VudHJ5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gbGFzdC5jb21wLmRlYnV0JGBTZW1pLWZpbmFsYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLkNoYW1vbml4LmRlYnV0IDwtIGFzX3RpYmJsZShlbG8uQ2hhbW9uaXguZGVidXQpDQoNCmVsby5DaGFtb25peC5zZW1pcyA8LSBlbG8uQ2hhbW9uaXguc2VtaXMgJT4lIHJiaW5kKGVsby5DaGFtb25peC5kZWJ1dCkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLkNoYW1vbml4LnNlbWlzW29yZGVyKGVsby5DaGFtb25peC5zZW1pcyRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgICANCg0KDQojIyMjI18gRWxvIEhpc3RvcnkgXw0KYGBge3IgZXZhbD1UUlVFfQ0KIw0KIyBTYWNhbmRvIHN1YjE2DQpjb21wZSA8LSAiQ2hhbW9uaXguc2VtaXMiDQojZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8uMjIuYWNjdW0udG9fc3ViMTYgJT4lIA0KIyAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8uMjIuYWNjdW0udG9fc3ViMTYkY29tcGV0aXRvcikpLA0KICMgICAgICAgIGNhdGVnID0gcmVwKCJTdWIxNk0iLCBsZW5ndGgoZWxvLjIyLmFjY3VtLnRvX3N1YjE2JGNvbXBldGl0b3IpKSkNCiMNCiNlbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCiMjIA0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8uQ2hhbW9uaXguc2VtaXMgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5DaGFtb25peC5zZW1pcyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5Lmxhc3QNCg0KYGBgICANCg0KDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBDaGFtb25peCBTZW1pcyoqDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCiMjDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5hY2N1bSAlPiUgDQogIHJlbmFtZShSLm5ldz0gRWxvKQ0KZWxvLmxhc3QuY29tcCA8LSBlbG8uQ2hhbW9uaXguc2VtaXMNCiMjIw0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAsIGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcCAlPiUgZnVsbF9qb2luKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgICANCg0KDQoNCiMjIyBDaGFtb25peDogRmluYWwNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KbGVhZF9tZW5bb3JkZXIobGVhZF9tZW4kRmluYWwpLCBjKDEsMiw0KV0gJT4lIHByaW50KG49NjApDQpgYGAgIA0KDQojIyMgRmluYWxzIA0KKi1Db21wZXRpdG9ycyA9IGBuLmZpbmFsYC0qDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpsZWFkX21lbi5jaGFtb25peC5maW5hbCA8LSBsZWFkX21lblssYygxLDIsNCldICU+JSBmaWx0ZXIobGVhZF9tZW4kRmluYWwhPSJOQSIpIA0KIw0KI2xhc3QuY29tcC5kZWJ1dCA8LSBsZWFkX21lbi5jaGFtb25peC5maW5hbCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KI24uZGVidXQgPSBsZW5ndGgobGFzdC5jb21wLmRlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxlYWRfbWVuLmNoYW1vbml4LmZpbmFsICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKV0pDQpSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpLDFdDQpjb3VudHJ5IDwtIGxhc3QuY29tcC5jYWxjJENvdW50cnlbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpyZXN1bHRzIDwtIGxhc3QuY29tcC5jYWxjJEZpbmFsDQpzdGRldiA8LSBzZChyZXN1bHRzLCBuYS5ybSA9IFRSVUUpDQojDQphdmcucGxheWVyIDwtIG1lYW4oYyhSDQogICAgICAgICAgICAgICAgICAgICAjLCByZXAobWVhbihSKSwgbi5kZWJ1dCApDQogICAgICAgICAgICAgICAgICAgICApKQ0KI21lZGlhbmEgPC0gbWVkaWFuKGxlYWRfbWVuJEZpbmFsWyFpcy5uYShsZWFkX21lbiRGaW5hbCldKQ0KbWVkaWFuYSA8LSA4DQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gbGFzdC5jb21wLmNhbGMkRmluYWxbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKV0gKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KI0UgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KRSA8LSAxLygxKygxMF4oICggc29ydChSLCBkZWNyZWFzaW5nID0gVFJVRSlbOF0gLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCiNtYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KI21heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCg0KZWxvLkNoYW1vbml4LmZpbmFsIDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBDdHJ5PSBjb3VudHJ5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gbGFzdC5jb21wLmNhbGMkRmluYWxbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8uQ2hhbW9uaXguZmluYWwgPC0gYXNfdGliYmxlKGVsby5DaGFtb25peC5maW5hbCkNCg0KYGBgICANCg0KDQojIyMjI18gRWxvIEhpc3RvcnkgXw0KYGBge3IgZXZhbD1UUlVFfQ0KIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLkNoYW1vbml4LmZpbmFsDQojIFNhY2FuZG8gc3ViMTYNCmNvbXBlIDwtICJDaGFtb25peC5maW5hbCINCiMNCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lDQogIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCmBgYCAgDQoNCg0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgQ2hhbW9uaXggRmluYWwqKg0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQojIw0KDQojZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmFjY3VtICU+JSANCiMgIHJlbmFtZShSLm5ldz0gRWxvKQ0KZWxvLmxhc3QuY29tcCA8LSBlbG8uQ2hhbW9uaXguZmluYWwNCiMjIw0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAsIGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcCAlPiUgZnVsbF9qb2luKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgICANCg0KDQojIyMgQnJpYW5jICANCg0KYGBge3IgaW5jbHVkZT1UUlVFLCByb3dzLnByaW50PSA4fQ0KbGVhZF9tZW4gPC0gcmFua3MgJT4lDQogIGZpbHRlcihjb21wZT09IkJyaWFuYyIpICU+JQ0KICBncm91cF9ieShjb21wZXRpdG9yPSBOYW1lLA0KICAgICAgIyAgICAgWWVhcj0geWVhciwNCiAgICAgICAgICAgQ29tcGU9IGNvbXBlLA0KICAgICAgU3RhZ2UgPSBTdGFnZSwNCiAgICAgICAgICAgQ291bnRyeSA9IENvdW50cnksDQogICAgICAgICAgIERhdGU9IERhdGUsDQogICAgICBSYW5rID0gUmFuaykgJT4lDQojICByZWZyYW1lKHJhbms9IFJhbmspICU+JQ0KICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3IgKyBDb3VudHJ5ICsgQ29tcGUgfiBTdGFnZSwNCiAgICAgICAgICAgICAgICAgIHZhbHVlLnZhciA9ICJSYW5rIiwNCiAgICAgICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkNCg0KbGVhZF9tZW4gPC0gYXNfdGliYmxlKGxlYWRfbWVuKQ0KIyMNCmxlYWRfbWVuW29yZGVyKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCksXSANCiMjDQpuLnNlbWlzIDwtIG5yb3cobGVhZF9tZW5bIWlzLm5hKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCksXSkNCm4uZmluYWxzIDwtIG5yb3cobGVhZF9tZW5bIWlzLm5hKGxlYWRfbWVuJEZpbmFsKSxdKQ0KDQpgYGAgIA0KDQoNCg0KDQoNCg0KIyMjIEJyaWFuYzogU2VtaS1maW5hbHMNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KbGVhZF9tZW5bb3JkZXIobGVhZF9tZW4kYFNlbWktZmluYWxgKSwgYygxLDIsNildICU+JSBwcmludChuPTYwKQ0KYGBgICANCg0KIyMjIFNlbWktZmluYWxzIA0KKi1Db21wZXRpdG9ycyA9IGBuLnNlbWlzYC0qDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpsZWFkX21lbi5CcmlhbmMuc2VtaXMgPC0gbGVhZF9tZW5bLGMoMSwyLDYpXSAlPiUgZmlsdGVyKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCE9Ik5BIikgDQojDQpsYXN0LmNvbXAuZGVidXQgPC0gbGVhZF9tZW4uQnJpYW5jLnNlbWlzICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3QuY29tcC5kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQpsYXN0LmNvbXAuY2FsYyA8LSBsZWFkX21lbi5CcmlhbmMuc2VtaXMgJT4lIHJpZ2h0X2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0pDQpSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCksMV0NCmNvdW50cnkgPC0gbGFzdC5jb21wLmNhbGMkQ291bnRyeVshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGBbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldDQpzdGRldiA8LSBzZChyZXN1bHRzLCBuYS5ybSA9IFRSVUUpDQojDQphdmcucGxheWVyIDwtIG1lYW4oYyhSLCByZXAobWVhbihSKSwgbi5kZWJ1dCApKSkNCm1lZGlhbmEgPC0gbWVkaWFuKGxlYWRfbWVuJGBTZW1pLWZpbmFsYFshaXMubmEobGVhZF9tZW4kYFNlbWktZmluYWxgKV0pDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gbGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCg0KZWxvLkJyaWFuYy5zZW1pcyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3RyeT0gY291bnRyeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYFshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8uQnJpYW5jLnNlbWlzIDwtIGFzX3RpYmJsZShlbG8uQnJpYW5jLnNlbWlzKQ0KDQojIyMjIyMjIyMjIw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0LmNvbXAuZGVidXQkYFNlbWktZmluYWxgKQ0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXSkNClIuZGVidXQgPC0gcmVwKG1lYW4oUiksIG4pDQpuYW1lcyA8LSBsYXN0LmNvbXAuZGVidXRbLDFdDQpjb3VudHJ5IDwtIGxhc3QuY29tcC5kZWJ1dCRDb3VudHJ5DQojY2F0ZWcgPC0gbGVhZF9tZW4uYV9iDQpTIDwtICgobWVkaWFuYS0gbGFzdC5jb21wLmRlYnV0JGBTZW1pLWZpbmFsYCkgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8uQnJpYW5jLnNlbWlzJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLkJyaWFuYy5zZW1pcyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8uQnJpYW5jLmRlYnV0IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBDdHJ5PSBjb3VudHJ5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gbGFzdC5jb21wLmRlYnV0JGBTZW1pLWZpbmFsYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLkJyaWFuYy5kZWJ1dCA8LSBhc190aWJibGUoZWxvLkJyaWFuYy5kZWJ1dCkNCg0KZWxvLkJyaWFuYy5zZW1pcyA8LSBlbG8uQnJpYW5jLnNlbWlzICU+JSByYmluZChlbG8uQnJpYW5jLmRlYnV0KQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8uQnJpYW5jLnNlbWlzW29yZGVyKGVsby5CcmlhbmMuc2VtaXMkcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYCAgDQoNCg0KIyMjIyNfIEVsbyBIaXN0b3J5IF8NCmBgYHtyIGV2YWw9VFJVRX0NCiMNCiMgU2FjYW5kbyBzdWIxNg0KY29tcGUgPC0gIkJyaWFuYy5zZW1pcyINCiNlbG8uaGlzdG9yeS5sYXN0IDwtIGVsby4yMi5hY2N1bS50b19zdWIxNiAlPiUgDQojICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby4yMi5hY2N1bS50b19zdWIxNiRjb21wZXRpdG9yKSksDQogIyAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE2TSIsIGxlbmd0aChlbG8uMjIuYWNjdW0udG9fc3ViMTYkY29tcGV0aXRvcikpKQ0KIw0KI2Vsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KIyMgDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5CcmlhbmMuc2VtaXMgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5CcmlhbmMuc2VtaXMkY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUNCiAgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KDQpgYGAgIA0KDQoNCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEJyaWFuYyBTZW1pcyoqDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCiMjDQoNCiNlbG8ubGFzdC5hY2N1bSA8LSBlbG8uYWNjdW0gJT4lIA0KIyAgcmVuYW1lKFIubmV3PSBFbG8pDQplbG8ubGFzdC5jb21wIDwtIGVsby5CcmlhbmMuc2VtaXMNCiMjIw0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAsIGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcCAlPiUgZnVsbF9qb2luKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgICANCg0KDQoNCiMjIyBCcmlhbmM6IEZpbmFsDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmxlYWRfbWVuW29yZGVyKGxlYWRfbWVuJEZpbmFsKSwgYygxLDIsNCldICU+JSBwcmludChuPTYwKQ0KYGBgICANCg0KIyMjIEZpbmFscyANCiotQ29tcGV0aXRvcnMgPSBgbi5maW5hbGAtKg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbGVhZF9tZW4uQnJpYW5jLmZpbmFsIDwtIGxlYWRfbWVuWyxjKDEsMiw0KV0gJT4lIGZpbHRlcihsZWFkX21lbiRGaW5hbCE9Ik5BIikgDQojDQojbGFzdC5jb21wLmRlYnV0IDwtIGxlYWRfbWVuLkJyaWFuYy5maW5hbCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KI24uZGVidXQgPSBsZW5ndGgobGFzdC5jb21wLmRlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxlYWRfbWVuLkJyaWFuYy5maW5hbCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKSwxXQ0KY291bnRyeSA8LSBsYXN0LmNvbXAuY2FsYyRDb3VudHJ5WyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsYyRGaW5hbFshaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXQ0Kc3RkZXYgPC0gc2QocmVzdWx0cywgbmEucm0gPSBUUlVFKQ0KIw0KYXZnLnBsYXllciA8LSBtZWFuKGMoUg0KICAgICAgICAgICAgICAgICAgICAgIywgcmVwKG1lYW4oUiksIG4uZGVidXQgKQ0KICAgICAgICAgICAgICAgICAgICAgKSkNCiNtZWRpYW5hIDwtIG1lZGlhbihsZWFkX21lbiRGaW5hbFshaXMubmEobGVhZF9tZW4kRmluYWwpXSkNCm1lZGlhbmEgPC0gOA0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIGxhc3QuY29tcC5jYWxjJEZpbmFsWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCiNFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNCkUgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUiwgZGVjcmVhc2luZyA9IFRSVUUpWzhdIC1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQojbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCiNtYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQoNCmVsby5CcmlhbmMuZmluYWwgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEN0cnk9IGNvdW50cnksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBsYXN0LmNvbXAuY2FsYyRGaW5hbFshaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5CcmlhbmMuZmluYWwgPC0gYXNfdGliYmxlKGVsby5CcmlhbmMuZmluYWwpDQoNCmBgYCAgDQoNCg0KIyMjIyNfIEVsbyBIaXN0b3J5IF8NCmBgYHtyIGV2YWw9VFJVRX0NCiMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGVsby5CcmlhbmMuZmluYWwNCiMgU2FjYW5kbyBzdWIxNg0KY29tcGUgPC0gIkJyaWFuYy5maW5hbCINCiMNCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lDQogIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCmBgYCAgDQoNCg0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgQnJpYW5jIEZpbmFsKioNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMNCg0KI2Vsby5sYXN0LmFjY3VtIDwtIGVsby5hY2N1bSAlPiUgDQojICByZW5hbWUoUi5uZXc9IEVsbykNCmVsby5sYXN0LmNvbXAgPC0gZWxvLkJyaWFuYy5maW5hbA0KIyMjDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcCwgYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wICU+JSBmdWxsX2pvaW4oZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGAgIA0KDQojIyMgS29wZXIgIA0KDQpgYGB7ciBpbmNsdWRlPVRSVUUsIHJvd3MucHJpbnQ9IDh9DQpsZWFkX21lbiA8LSByYW5rcyAlPiUNCiAgZmlsdGVyKGNvbXBlPT0iS29wZXIiKSAlPiUNCiAgZ3JvdXBfYnkoY29tcGV0aXRvcj0gTmFtZSwNCiAgICAgICMgICAgIFllYXI9IHllYXIsDQogICAgICAgICAgIENvbXBlPSBjb21wZSwNCiAgICAgIFN0YWdlID0gU3RhZ2UsDQogICAgICAgICAgIENvdW50cnkgPSBDb3VudHJ5LA0KICAgICAgICAgICBEYXRlPSBEYXRlLA0KICAgICAgUmFuayA9IFJhbmspICU+JQ0KIyAgcmVmcmFtZShyYW5rPSBSYW5rKSAlPiUNCiAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yICsgQ291bnRyeSArIENvbXBlIH4gU3RhZ2UsDQogICAgICAgICAgICAgICAgICB2YWx1ZS52YXIgPSAiUmFuayIsDQogICAgICAgICAgICAgICAgICBuYS5ybSA9IFRSVUUpDQoNCmxlYWRfbWVuIDwtIGFzX3RpYmJsZShsZWFkX21lbikNCiMjDQpsZWFkX21lbltvcmRlcihsZWFkX21lbiRgU2VtaS1maW5hbGApLF0gDQojIw0Kbi5zZW1pcyA8LSBucm93KGxlYWRfbWVuWyFpcy5uYShsZWFkX21lbiRgU2VtaS1maW5hbGApLF0pDQpuLmZpbmFscyA8LSBucm93KGxlYWRfbWVuWyFpcy5uYShsZWFkX21lbiRGaW5hbCksXSkNCg0KYGBgICANCg0KDQojIyMgS29wZXI6IFNlbWktZmluYWxzDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmxlYWRfbWVuW29yZGVyKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCksIGMoMSwyLDYpXSAlPiUgcHJpbnQobj02MCkNCmBgYCAgDQoNCiMjIyBTZW1pLWZpbmFscyANCiotQ29tcGV0aXRvcnMgPSBgbi5zZW1pc2AtKg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbGVhZF9tZW4uS29wZXIuc2VtaXMgPC0gbGVhZF9tZW5bLGMoMSwyLDYpXSAlPiUgZmlsdGVyKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCE9Ik5BIikgDQojDQpsYXN0LmNvbXAuZGVidXQgPC0gbGVhZF9tZW4uS29wZXIuc2VtaXMgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCg0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdC5jb21wLmRlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxlYWRfbWVuLktvcGVyLnNlbWlzICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApLDFdDQpjb3VudHJ5IDwtIGxhc3QuY29tcC5jYWxjJENvdW50cnlbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXQ0Kc3RkZXYgPC0gc2QocmVzdWx0cywgbmEucm0gPSBUUlVFKQ0KIw0KYXZnLnBsYXllciA8LSBtZWFuKGMoUiwgcmVwKG1lYW4oUiksIG4uZGVidXQgKSkpDQptZWRpYW5hIDwtIG1lZGlhbihsZWFkX21lbiRgU2VtaS1maW5hbGBbIWlzLm5hKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCldKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYFshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0gKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQoNCmVsby5Lb3Blci5zZW1pcyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3RyeT0gY291bnRyeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYFshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8uS29wZXIuc2VtaXMgPC0gYXNfdGliYmxlKGVsby5Lb3Blci5zZW1pcykNCg0KIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4gPSBsZW5ndGgobGFzdC5jb21wLmRlYnV0JGBTZW1pLWZpbmFsYCkNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYFshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0pDQpSLmRlYnV0IDwtIHJlcChtZWFuKFIpLCBuKQ0KbmFtZXMgPC0gbGFzdC5jb21wLmRlYnV0WywxXQ0KY291bnRyeSA8LSBsYXN0LmNvbXAuZGVidXQkQ291bnRyeQ0KI2NhdGVnIDwtIGxlYWRfbWVuLmFfYg0KUyA8LSAoKG1lZGlhbmEtIGxhc3QuY29tcC5kZWJ1dCRgU2VtaS1maW5hbGApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLktvcGVyLnNlbWlzJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLktvcGVyLnNlbWlzJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5Lb3Blci5kZWJ1dCA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3RyeT0gY291bnRyeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGxhc3QuY29tcC5kZWJ1dCRgU2VtaS1maW5hbGAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5Lb3Blci5kZWJ1dCA8LSBhc190aWJibGUoZWxvLktvcGVyLmRlYnV0KQ0KDQplbG8uS29wZXIuc2VtaXMgPC0gZWxvLktvcGVyLnNlbWlzICU+JSByYmluZChlbG8uS29wZXIuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5Lb3Blci5zZW1pc1tvcmRlcihlbG8uS29wZXIuc2VtaXMkcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYCAgDQoNCg0KIyMjIyNfIEVsbyBIaXN0b3J5IF8NCmBgYHtyIGV2YWw9VFJVRX0NCiMNCiMgU2FjYW5kbyBzdWIxNg0KY29tcGUgPC0gIktvcGVyLnNlbWlzIg0KI2Vsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLjIyLmFjY3VtLnRvX3N1YjE2ICU+JSANCiMgIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLjIyLmFjY3VtLnRvX3N1YjE2JGNvbXBldGl0b3IpKSwNCiAjICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMTZNIiwgbGVuZ3RoKGVsby4yMi5hY2N1bS50b19zdWIxNiRjb21wZXRpdG9yKSkpDQojDQojZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQojIyANCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLktvcGVyLnNlbWlzICU+JSANCiAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8uS29wZXIuc2VtaXMkY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUNCiAgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KDQpgYGAgIA0KDQoNCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEtvcGVyIFNlbWlzKioNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMNCg0KI2Vsby5sYXN0LmFjY3VtIDwtIGVsby5hY2N1bSAlPiUgDQojICByZW5hbWUoUi5uZXc9IEVsbykNCmVsby5sYXN0LmNvbXAgPC0gZWxvLktvcGVyLnNlbWlzDQojIyMNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLCBieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAgJT4lIGZ1bGxfam9pbihlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYCAgDQoNCg0KDQojIyMgS29wZXI6IEZpbmFsDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmxlYWRfbWVuW29yZGVyKGxlYWRfbWVuJEZpbmFsKSwgYygxLDIsNCldICU+JSBwcmludChuPTYwKQ0KYGBgICANCg0KIyMjIEZpbmFscyANCiotQ29tcGV0aXRvcnMgPSBgbi5maW5hbGAtKg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbGVhZF9tZW4uS29wZXIuZmluYWwgPC0gbGVhZF9tZW5bLGMoMSwyLDQpXSAlPiUgZmlsdGVyKGxlYWRfbWVuJEZpbmFsIT0iTkEiKSANCiMNCiNsYXN0LmNvbXAuZGVidXQgPC0gbGVhZF9tZW4uS29wZXIuZmluYWwgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCg0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCiNuLmRlYnV0ID0gbGVuZ3RoKGxhc3QuY29tcC5kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQpsYXN0LmNvbXAuY2FsYyA8LSBsZWFkX21lbi5Lb3Blci5maW5hbCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKSwxXQ0KY291bnRyeSA8LSBsYXN0LmNvbXAuY2FsYyRDb3VudHJ5WyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsYyRGaW5hbFshaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXQ0Kc3RkZXYgPC0gc2QocmVzdWx0cywgbmEucm0gPSBUUlVFKQ0KIw0KYXZnLnBsYXllciA8LSBtZWFuKGMoUg0KICAgICAgICAgICAgICAgICAgICAgIywgcmVwKG1lYW4oUiksIG4uZGVidXQgKQ0KICAgICAgICAgICAgICAgICAgICAgKSkNCiNtZWRpYW5hIDwtIG1lZGlhbihsZWFkX21lbiRGaW5hbFshaXMubmEobGVhZF9tZW4kRmluYWwpXSkNCm1lZGlhbmEgPC0gOA0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIGxhc3QuY29tcC5jYWxjJEZpbmFsWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCiNFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNCkUgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUiwgZGVjcmVhc2luZyA9IFRSVUUpWzhdIC1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQojbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCiNtYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQoNCmVsby5Lb3Blci5maW5hbCA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3RyeT0gY291bnRyeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGxhc3QuY29tcC5jYWxjJEZpbmFsWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLktvcGVyLmZpbmFsIDwtIGFzX3RpYmJsZShlbG8uS29wZXIuZmluYWwpDQoNCmBgYCAgDQoNCg0KIyMjIyNfIEVsbyBIaXN0b3J5IF8NCmBgYHtyIGV2YWw9VFJVRX0NCiMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGVsby5Lb3Blci5maW5hbA0KIyBTYWNhbmRvIHN1YjE2DQpjb21wZSA8LSAiS29wZXIuZmluYWwiDQojDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSANCiAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JQ0KICByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQpgYGAgIA0KDQoNCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEtvcGVyIEZpbmFsKioNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMNCg0KI2Vsby5sYXN0LmFjY3VtIDwtIGVsby5hY2N1bSAlPiUgDQojICByZW5hbWUoUi5uZXc9IEVsbykNCmVsby5sYXN0LmNvbXAgPC0gZWxvLktvcGVyLmZpbmFsDQojIyMNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLCBieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAgJT4lIGZ1bGxfam9pbihlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYCAgDQoNCiMjIFNlb3VsICANCg0KYGBge3IgaW5jbHVkZT1UUlVFLCByb3dzLnByaW50PSA4fQ0KbGVhZF9tZW4gPC0gcmFua3MgJT4lDQogIGZpbHRlcihjb21wZT09IlNlb3VsIikgJT4lDQogIGdyb3VwX2J5KGNvbXBldGl0b3I9IE5hbWUsDQogICAgICAjICAgICBZZWFyPSB5ZWFyLA0KICAgICAgICAgICBDb21wZT0gY29tcGUsDQogICAgICBTdGFnZSA9IFN0YWdlLA0KICAgICAgICAgICBDb3VudHJ5ID0gQ291bnRyeSwNCiAgICAgICAgICAgRGF0ZT0gRGF0ZSwNCiAgICAgIFJhbmsgPSBSYW5rKSAlPiUNCiMgIHJlZnJhbWUocmFuaz0gUmFuaykgJT4lDQogIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvciArIENvdW50cnkgKyBDb21wZSB+IFN0YWdlLA0KICAgICAgICAgICAgICAgICAgdmFsdWUudmFyID0gIlJhbmsiLA0KICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKQ0KDQpsZWFkX21lbiA8LSBhc190aWJibGUobGVhZF9tZW4pDQojIw0KbGVhZF9tZW5bb3JkZXIobGVhZF9tZW4kYFNlbWktZmluYWxgKSxdIA0KIyMNCm4uc2VtaXMgPC0gbnJvdyhsZWFkX21lblshaXMubmEobGVhZF9tZW4kYFNlbWktZmluYWxgKSxdKQ0Kbi5maW5hbHMgPC0gbnJvdyhsZWFkX21lblshaXMubmEobGVhZF9tZW4kRmluYWwpLF0pDQoNCmBgYCAgDQoNCg0KIyMjIFNlb3VsOiBTZW1pLWZpbmFscw0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpsZWFkX21lbltvcmRlcihsZWFkX21lbiRgU2VtaS1maW5hbGApLCBjKDEsMiw2KV0gJT4lIHByaW50KG49NjApDQpgYGAgIA0KDQojIyMgU2VtaS1maW5hbHMgDQoqLUNvbXBldGl0b3JzID0gYG4uc2VtaXNgLSoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxlYWRfbWVuLlNlb3VsLnNlbWlzIDwtIGxlYWRfbWVuWyxjKDEsMiw2KV0gJT4lIGZpbHRlcihsZWFkX21lbiRgU2VtaS1maW5hbGAhPSJOQSIpIA0KIw0KbGFzdC5jb21wLmRlYnV0IDwtIGxlYWRfbWVuLlNlb3VsLnNlbWlzICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3QuY29tcC5kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQpsYXN0LmNvbXAuY2FsYyA8LSBsZWFkX21lbi5TZW91bC5zZW1pcyAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKSwxXQ0KY291bnRyeSA8LSBsYXN0LmNvbXAuY2FsYyRDb3VudHJ5WyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYFshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0NCnN0ZGV2IDwtIHNkKHJlc3VsdHMsIG5hLnJtID0gVFJVRSkNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVhbihjKFIsIHJlcChtZWFuKFIpLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4obGVhZF9tZW4kYFNlbWktZmluYWxgWyFpcy5uYShsZWFkX21lbiRgU2VtaS1maW5hbGApXSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGBbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KDQplbG8uU2VvdWwuc2VtaXMgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEN0cnk9IGNvdW50cnksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGBbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLlNlb3VsLnNlbWlzIDwtIGFzX3RpYmJsZShlbG8uU2VvdWwuc2VtaXMpDQoNCiMjIyMjIyMjIyMjDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuID0gbGVuZ3RoKGxhc3QuY29tcC5kZWJ1dCRgU2VtaS1maW5hbGApDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGBbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldKQ0KUi5kZWJ1dCA8LSByZXAobWVhbihSKSwgbikNCm5hbWVzIDwtIGxhc3QuY29tcC5kZWJ1dFssMV0NCmNvdW50cnkgPC0gbGFzdC5jb21wLmRlYnV0JENvdW50cnkNCiNjYXRlZyA8LSBsZWFkX21lbi5hX2INClMgPC0gKChtZWRpYW5hLSBsYXN0LmNvbXAuZGVidXQkYFNlbWktZmluYWxgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5TZW91bC5zZW1pcyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5TZW91bC5zZW1pcyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8uU2VvdWwuZGVidXQgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEN0cnk9IGNvdW50cnksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBsYXN0LmNvbXAuZGVidXQkYFNlbWktZmluYWxgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8uU2VvdWwuZGVidXQgPC0gYXNfdGliYmxlKGVsby5TZW91bC5kZWJ1dCkNCg0KZWxvLlNlb3VsLnNlbWlzIDwtIGVsby5TZW91bC5zZW1pcyAlPiUgcmJpbmQoZWxvLlNlb3VsLmRlYnV0KQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8uU2VvdWwuc2VtaXNbb3JkZXIoZWxvLlNlb3VsLnNlbWlzJHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGAgIA0KDQoNCiMjIyMjXyBFbG8gSGlzdG9yeSBfDQpgYGB7ciBldmFsPVRSVUV9DQojDQojIFNhY2FuZG8gc3ViMTYNCmNvbXBlIDwtICJTZW91bC5zZW1pcyINCiNlbG8uaGlzdG9yeS5sYXN0IDwtIGVsby4yMi5hY2N1bS50b19zdWIxNiAlPiUgDQojICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby4yMi5hY2N1bS50b19zdWIxNiRjb21wZXRpdG9yKSksDQogIyAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE2TSIsIGxlbmd0aChlbG8uMjIuYWNjdW0udG9fc3ViMTYkY29tcGV0aXRvcikpKQ0KIw0KI2Vsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KIyMgDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5TZW91bC5zZW1pcyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLlNlb3VsLnNlbWlzJGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lDQogIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCg0KYGBgICANCg0KDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBTZW91bCBTZW1pcyoqDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCiMjDQoNCiNlbG8ubGFzdC5hY2N1bSA8LSBlbG8uYWNjdW0gJT4lIA0KIyAgcmVuYW1lKFIubmV3PSBFbG8pDQplbG8ubGFzdC5jb21wIDwtIGVsby5TZW91bC5zZW1pcw0KIyMjDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcCwgYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wICU+JSBmdWxsX2pvaW4oZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGAgIA0KDQoNCg0KIyMjIFNlb3VsOiBGaW5hbA0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpsZWFkX21lbltvcmRlcihsZWFkX21lbiRGaW5hbCksIGMoMSwyLDQpXSAlPiUgcHJpbnQobj02MCkNCmBgYCAgDQoNCiMjIyBGaW5hbHMgDQoqLUNvbXBldGl0b3JzID0gYG4uZmluYWxgLSoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxlYWRfbWVuLlNlb3VsLmZpbmFsIDwtIGxlYWRfbWVuWyxjKDEsMiw0KV0gJT4lIGZpbHRlcihsZWFkX21lbiRGaW5hbCE9Ik5BIikgDQojDQojbGFzdC5jb21wLmRlYnV0IDwtIGxlYWRfbWVuLlNlb3VsLmZpbmFsICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQojbi5kZWJ1dCA9IGxlbmd0aChsYXN0LmNvbXAuZGVidXQkY29tcGV0aXRvcikNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGVhZF9tZW4uU2VvdWwuZmluYWwgJT4lIHJpZ2h0X2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCksMV0NCmNvdW50cnkgPC0gbGFzdC5jb21wLmNhbGMkQ291bnRyeVshaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGMkRmluYWxbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKV0NCnN0ZGV2IDwtIHNkKHJlc3VsdHMsIG5hLnJtID0gVFJVRSkNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVhbihjKFINCiAgICAgICAgICAgICAgICAgICAgICMsIHJlcChtZWFuKFIpLCBuLmRlYnV0ICkNCiAgICAgICAgICAgICAgICAgICAgICkpDQojbWVkaWFuYSA8LSBtZWRpYW4obGVhZF9tZW4kRmluYWxbIWlzLm5hKGxlYWRfbWVuJEZpbmFsKV0pDQptZWRpYW5hIDwtIDgNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0LmNvbXAuY2FsYyRGaW5hbFshaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQojRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpFIDwtIDEvKDErKDEwXiggKCBzb3J0KFIsIGRlY3JlYXNpbmcgPSBUUlVFKVs4XSAtUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KI21heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQojbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KDQplbG8uU2VvdWwuZmluYWwgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEN0cnk9IGNvdW50cnksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBsYXN0LmNvbXAuY2FsYyRGaW5hbFshaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5TZW91bC5maW5hbCA8LSBhc190aWJibGUoZWxvLlNlb3VsLmZpbmFsKQ0KDQpgYGAgIA0KDQoNCiMjIyMjXyBFbG8gSGlzdG9yeSBfDQpgYGB7ciBldmFsPVRSVUV9DQojDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8uU2VvdWwuZmluYWwNCiMgU2FjYW5kbyBzdWIxNg0KY29tcGUgPC0gIlNlb3VsLmZpbmFsIg0KIw0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUNCiAgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KYGBgICANCg0KDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBTZW91bCBGaW5hbCoqDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCiMjDQoNCiNlbG8ubGFzdC5hY2N1bSA8LSBlbG8uYWNjdW0gJT4lIA0KIyAgcmVuYW1lKFIubmV3PSBFbG8pDQplbG8ubGFzdC5jb21wIDwtIGVsby5TZW91bC5maW5hbA0KIyMjDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcCwgYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wICU+JSBmdWxsX2pvaW4oZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGAgIA0KDQoNCiMjIFd1amlhbmcgIA0KDQpgYGB7ciBpbmNsdWRlPVRSVUUsIHJvd3MucHJpbnQ9IDh9DQpsZWFkX21lbiA8LSByYW5rcyAlPiUNCiAgZmlsdGVyKGNvbXBlPT0iV3VqaWFuZyIpICU+JQ0KICBncm91cF9ieShjb21wZXRpdG9yPSBOYW1lLA0KICAgICAgIyAgICAgWWVhcj0geWVhciwNCiAgICAgICAgICAgQ29tcGU9IGNvbXBlLA0KICAgICAgU3RhZ2UgPSBTdGFnZSwNCiAgICAgICAgICAgQ291bnRyeSA9IENvdW50cnksDQogICAgICAgICAgIERhdGU9IERhdGUsDQogICAgICBSYW5rID0gUmFuaykgJT4lDQojICByZWZyYW1lKHJhbms9IFJhbmspICU+JQ0KICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3IgKyBDb3VudHJ5ICsgQ29tcGUgfiBTdGFnZSwNCiAgICAgICAgICAgICAgICAgIHZhbHVlLnZhciA9ICJSYW5rIiwNCiAgICAgICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkNCg0KbGVhZF9tZW4gPC0gYXNfdGliYmxlKGxlYWRfbWVuKQ0KIyMNCmxlYWRfbWVuW29yZGVyKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCksXSANCiMjDQpuLnNlbWlzIDwtIG5yb3cobGVhZF9tZW5bIWlzLm5hKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCksXSkNCm4uZmluYWxzIDwtIG5yb3cobGVhZF9tZW5bIWlzLm5hKGxlYWRfbWVuJEZpbmFsKSxdKQ0KDQpgYGAgIA0KDQoNCiMjIyBXdWppYW5nOiBTZW1pLWZpbmFscw0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpsZWFkX21lbltvcmRlcihsZWFkX21lbiRgU2VtaS1maW5hbGApLCBjKDEsMiw2KV0gJT4lIHByaW50KG49NjApDQpgYGAgIA0KDQojIyMgU2VtaS1maW5hbHMgDQoqLUNvbXBldGl0b3JzID0gYG4uc2VtaXNgLSoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxlYWRfbWVuLld1amlhbmcuc2VtaXMgPC0gbGVhZF9tZW5bLGMoMSwyLDYpXSAlPiUgZmlsdGVyKGxlYWRfbWVuJGBTZW1pLWZpbmFsYCE9Ik5BIikgDQojDQpsYXN0LmNvbXAuZGVidXQgPC0gbGVhZF9tZW4uV3VqaWFuZy5zZW1pcyAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0Kbi5kZWJ1dCA9IGxlbmd0aChsYXN0LmNvbXAuZGVidXQkY29tcGV0aXRvcikNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGVhZF9tZW4uV3VqaWFuZy5zZW1pcyAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKSwxXQ0KY291bnRyeSA8LSBsYXN0LmNvbXAuY2FsYyRDb3VudHJ5WyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYFshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0NCnN0ZGV2IDwtIHNkKHJlc3VsdHMsIG5hLnJtID0gVFJVRSkNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVhbihjKFIsIHJlcChtZWFuKFIpLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4obGVhZF9tZW4kYFNlbWktZmluYWxgWyFpcy5uYShsZWFkX21lbiRgU2VtaS1maW5hbGApXSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGBbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KDQplbG8uV3VqaWFuZy5zZW1pcyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3RyeT0gY291bnRyeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYFshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8uV3VqaWFuZy5zZW1pcyA8LSBhc190aWJibGUoZWxvLld1amlhbmcuc2VtaXMpDQoNCiMjIyMjIyMjIyMjDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuID0gbGVuZ3RoKGxhc3QuY29tcC5kZWJ1dCRgU2VtaS1maW5hbGApDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGBbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldKQ0KUi5kZWJ1dCA8LSByZXAobWVhbihSKSwgbikNCm5hbWVzIDwtIGxhc3QuY29tcC5kZWJ1dFssMV0NCmNvdW50cnkgPC0gbGFzdC5jb21wLmRlYnV0JENvdW50cnkNCiNjYXRlZyA8LSBsZWFkX21lbi5hX2INClMgPC0gKChtZWRpYW5hLSBsYXN0LmNvbXAuZGVidXQkYFNlbWktZmluYWxgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5XdWppYW5nLnNlbWlzJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLld1amlhbmcuc2VtaXMkUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZWxvLld1amlhbmcuZGVidXQgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEN0cnk9IGNvdW50cnksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBsYXN0LmNvbXAuZGVidXQkYFNlbWktZmluYWxgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8uV3VqaWFuZy5kZWJ1dCA8LSBhc190aWJibGUoZWxvLld1amlhbmcuZGVidXQpDQoNCmVsby5XdWppYW5nLnNlbWlzIDwtIGVsby5XdWppYW5nLnNlbWlzICU+JSByYmluZChlbG8uV3VqaWFuZy5kZWJ1dCkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLld1amlhbmcuc2VtaXNbb3JkZXIoZWxvLld1amlhbmcuc2VtaXMkcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYCAgDQoNCg0KIyMjIyNfIEVsbyBIaXN0b3J5IF8NCmBgYHtyIGV2YWw9VFJVRX0NCiMNCiMgU2FjYW5kbyBzdWIxNg0KY29tcGUgPC0gIld1amlhbmcuc2VtaXMiDQojZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8uMjIuYWNjdW0udG9fc3ViMTYgJT4lIA0KIyAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8uMjIuYWNjdW0udG9fc3ViMTYkY29tcGV0aXRvcikpLA0KICMgICAgICAgIGNhdGVnID0gcmVwKCJTdWIxNk0iLCBsZW5ndGgoZWxvLjIyLmFjY3VtLnRvX3N1YjE2JGNvbXBldGl0b3IpKSkNCiMNCiNlbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCiMjIA0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8uV3VqaWFuZy5zZW1pcyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLld1amlhbmcuc2VtaXMkY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUNCiAgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KDQpgYGAgIA0KDQoNCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIFd1amlhbmcgU2VtaXMqKg0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQojIw0KDQojZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmFjY3VtICU+JSANCiMgIHJlbmFtZShSLm5ldz0gRWxvKQ0KZWxvLmxhc3QuY29tcCA8LSBlbG8uV3VqaWFuZy5zZW1pcw0KIyMjDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcCwgYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wICU+JSBmdWxsX2pvaW4oZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGAgIA0KDQoNCg0KIyMjIFd1amlhbmc6IEZpbmFsDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmxlYWRfbWVuW29yZGVyKGxlYWRfbWVuJEZpbmFsKSwgYygxLDIsNCldICU+JSBwcmludChuPTYwKQ0KYGBgICANCg0KIyMjIEZpbmFscyANCiotQ29tcGV0aXRvcnMgPSBgbi5maW5hbGAtKg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbGVhZF9tZW4uV3VqaWFuZy5maW5hbCA8LSBsZWFkX21lblssYygxLDIsNCldICU+JSBmaWx0ZXIobGVhZF9tZW4kRmluYWwhPSJOQSIpIA0KIw0KI2xhc3QuY29tcC5kZWJ1dCA8LSBsZWFkX21lbi5XdWppYW5nLmZpbmFsICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQojbi5kZWJ1dCA9IGxlbmd0aChsYXN0LmNvbXAuZGVidXQkY29tcGV0aXRvcikNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGVhZF9tZW4uV3VqaWFuZy5maW5hbCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKSwxXQ0KY291bnRyeSA8LSBsYXN0LmNvbXAuY2FsYyRDb3VudHJ5WyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsYyRGaW5hbFshaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXQ0Kc3RkZXYgPC0gc2QocmVzdWx0cywgbmEucm0gPSBUUlVFKQ0KIw0KYXZnLnBsYXllciA8LSBtZWFuKGMoUg0KICAgICAgICAgICAgICAgICAgICAgIywgcmVwKG1lYW4oUiksIG4uZGVidXQgKQ0KICAgICAgICAgICAgICAgICAgICAgKSkNCiNtZWRpYW5hIDwtIG1lZGlhbihsZWFkX21lbiRGaW5hbFshaXMubmEobGVhZF9tZW4kRmluYWwpXSkNCm1lZGlhbmEgPC0gOA0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIGxhc3QuY29tcC5jYWxjJEZpbmFsWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCiNFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNCkUgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUiwgZGVjcmVhc2luZyA9IFRSVUUpWzhdIC1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQojbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCiNtYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQoNCmVsby5XdWppYW5nLmZpbmFsIDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBDdHJ5PSBjb3VudHJ5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gbGFzdC5jb21wLmNhbGMkRmluYWxbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8uV3VqaWFuZy5maW5hbCA8LSBhc190aWJibGUoZWxvLld1amlhbmcuZmluYWwpDQoNCmBgYCAgDQoNCg0KIyMjIyNfIEVsbyBIaXN0b3J5IF8NCmBgYHtyIGV2YWw9VFJVRX0NCiMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGVsby5XdWppYW5nLmZpbmFsDQojIFNhY2FuZG8gc3ViMTYNCmNvbXBlIDwtICJXdWppYW5nLmZpbmFsIg0KIw0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUNCiAgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KYGBgICANCg0KDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBXdWppYW5nIEZpbmFsKioNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMNCg0KI2Vsby5sYXN0LmFjY3VtIDwtIGVsby5hY2N1bSAlPiUgDQojICByZW5hbWUoUi5uZXc9IEVsbykNCmVsby5sYXN0LmNvbXAgPC0gZWxvLld1amlhbmcuZmluYWwNCiMjIw0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAsIGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcCAlPiUgZnVsbF9qb2luKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgICANCg0KDQojIyBCYWxpICANCg0KYGBge3IgaW5jbHVkZT1UUlVFLCByb3dzLnByaW50PSA4fQ0KbGVhZF9tZW4gPC0gcmFua3MgJT4lDQogIGZpbHRlcihjb21wZT09IkJhbGkiKSAlPiUNCiAgZ3JvdXBfYnkoY29tcGV0aXRvcj0gTmFtZSwNCiAgICAgICMgICAgIFllYXI9IHllYXIsDQogICAgICAgICAgIENvbXBlPSBjb21wZSwNCiAgICAgIFN0YWdlID0gU3RhZ2UsDQogICAgICAgICAgIENvdW50cnkgPSBDb3VudHJ5LA0KICAgICAgICAgICBEYXRlPSBEYXRlLA0KICAgICAgUmFuayA9IFJhbmspICU+JQ0KIyAgcmVmcmFtZShyYW5rPSBSYW5rKSAlPiUNCiAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yICsgQ291bnRyeSArIENvbXBlIH4gU3RhZ2UsDQogICAgICAgICAgICAgICAgICB2YWx1ZS52YXIgPSAiUmFuayIsDQogICAgICAgICAgICAgICAgICBuYS5ybSA9IFRSVUUpDQoNCmxlYWRfbWVuIDwtIGFzX3RpYmJsZShsZWFkX21lbikNCiMjDQpsZWFkX21lbltvcmRlcihsZWFkX21lbiRgU2VtaS1maW5hbGApLF0gDQojIw0Kbi5zZW1pcyA8LSBucm93KGxlYWRfbWVuWyFpcy5uYShsZWFkX21lbiRgU2VtaS1maW5hbGApLF0pDQpuLmZpbmFscyA8LSBucm93KGxlYWRfbWVuWyFpcy5uYShsZWFkX21lbiRGaW5hbCksXSkNCg0KYGBgICANCg0KDQojIyMgQmFsaTogU2VtaS1maW5hbHMNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KbGVhZF9tZW5bb3JkZXIobGVhZF9tZW4kYFNlbWktZmluYWxgKSwgYygxLDIsNildICU+JSBwcmludChuPTYwKQ0KYGBgICANCg0KIyMjIFNlbWktZmluYWxzIA0KKi1Db21wZXRpdG9ycyA9IGBuLnNlbWlzYC0qDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpsZWFkX21lbi5CYWxpLnNlbWlzIDwtIGxlYWRfbWVuWyxjKDEsMiw2KV0gJT4lIGZpbHRlcihsZWFkX21lbiRgU2VtaS1maW5hbGAhPSJOQSIpIA0KIw0KbGFzdC5jb21wLmRlYnV0IDwtIGxlYWRfbWVuLkJhbGkuc2VtaXMgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCg0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdC5jb21wLmRlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxlYWRfbWVuLkJhbGkuc2VtaXMgJT4lIHJpZ2h0X2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0pDQpSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCksMV0NCmNvdW50cnkgPC0gbGFzdC5jb21wLmNhbGMkQ291bnRyeVshaXMubmEobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGBbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldDQpzdGRldiA8LSBzZChyZXN1bHRzLCBuYS5ybSA9IFRSVUUpDQojDQphdmcucGxheWVyIDwtIG1lYW4oYyhSLCByZXAobWVhbihSKSwgbi5kZWJ1dCApKSkNCm1lZGlhbmEgPC0gbWVkaWFuKGxlYWRfbWVuJGBTZW1pLWZpbmFsYFshaXMubmEobGVhZF9tZW4kYFNlbWktZmluYWxgKV0pDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gbGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCg0KZWxvLkJhbGkuc2VtaXMgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEN0cnk9IGNvdW50cnksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGBbIWlzLm5hKGxhc3QuY29tcC5jYWxjJGBTZW1pLWZpbmFsYCldLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLkJhbGkuc2VtaXMgPC0gYXNfdGliYmxlKGVsby5CYWxpLnNlbWlzKQ0KDQojIyMjIyMjIyMjIw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0LmNvbXAuZGVidXQkYFNlbWktZmluYWxgKQ0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkYFNlbWktZmluYWxgWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRgU2VtaS1maW5hbGApXSkNClIuZGVidXQgPC0gcmVwKG1lYW4oUiksIG4pDQpuYW1lcyA8LSBsYXN0LmNvbXAuZGVidXRbLDFdDQpjb3VudHJ5IDwtIGxhc3QuY29tcC5kZWJ1dCRDb3VudHJ5DQojY2F0ZWcgPC0gbGVhZF9tZW4uYV9iDQpTIDwtICgobWVkaWFuYS0gbGFzdC5jb21wLmRlYnV0JGBTZW1pLWZpbmFsYCkgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8uQmFsaS5zZW1pcyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5CYWxpLnNlbWlzJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5CYWxpLmRlYnV0IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBDdHJ5PSBjb3VudHJ5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gbGFzdC5jb21wLmRlYnV0JGBTZW1pLWZpbmFsYCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLkJhbGkuZGVidXQgPC0gYXNfdGliYmxlKGVsby5CYWxpLmRlYnV0KQ0KDQplbG8uQmFsaS5zZW1pcyA8LSBlbG8uQmFsaS5zZW1pcyAlPiUgcmJpbmQoZWxvLkJhbGkuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5CYWxpLnNlbWlzW29yZGVyKGVsby5CYWxpLnNlbWlzJHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGAgIA0KDQoNCiMjIyMjXyBFbG8gSGlzdG9yeSBfDQpgYGB7ciBldmFsPVRSVUV9DQojDQojIFNhY2FuZG8gc3ViMTYNCmNvbXBlIDwtICJCYWxpLnNlbWlzIg0KI2Vsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLjIyLmFjY3VtLnRvX3N1YjE2ICU+JSANCiMgIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLjIyLmFjY3VtLnRvX3N1YjE2JGNvbXBldGl0b3IpKSwNCiAjICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMTZNIiwgbGVuZ3RoKGVsby4yMi5hY2N1bS50b19zdWIxNiRjb21wZXRpdG9yKSkpDQojDQojZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQojIyANCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLkJhbGkuc2VtaXMgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5CYWxpLnNlbWlzJGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lDQogIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCg0KYGBgICANCg0KDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBCYWxpIFNlbWlzKioNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KIyMNCg0KI2Vsby5sYXN0LmFjY3VtIDwtIGVsby5hY2N1bSAlPiUgDQojICByZW5hbWUoUi5uZXc9IEVsbykNCmVsby5sYXN0LmNvbXAgPC0gZWxvLkJhbGkuc2VtaXMNCiMjIw0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAsIGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcCAlPiUgZnVsbF9qb2luKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgICANCg0KDQoNCiMjIyBCYWxpOiBGaW5hbA0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpsZWFkX21lbltvcmRlcihsZWFkX21lbiRGaW5hbCksIGMoMSwyLDQpXSAlPiUgcHJpbnQobj02MCkNCmBgYCAgDQoNCiMjIyBGaW5hbHMgDQoqLUNvbXBldGl0b3JzID0gYG4uZmluYWxgLSoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxlYWRfbWVuLkJhbGkuZmluYWwgPC0gbGVhZF9tZW5bLGMoMSwyLDQpXSAlPiUgZmlsdGVyKGxlYWRfbWVuJEZpbmFsIT0iTkEiKSANCiMNCiNsYXN0LmNvbXAuZGVidXQgPC0gbGVhZF9tZW4uQmFsaS5maW5hbCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KI24uZGVidXQgPSBsZW5ndGgobGFzdC5jb21wLmRlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxlYWRfbWVuLkJhbGkuZmluYWwgJT4lIHJpZ2h0X2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCksMV0NCmNvdW50cnkgPC0gbGFzdC5jb21wLmNhbGMkQ291bnRyeVshaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGMkRmluYWxbIWlzLm5hKGxhc3QuY29tcC5jYWxjJEZpbmFsKV0NCnN0ZGV2IDwtIHNkKHJlc3VsdHMsIG5hLnJtID0gVFJVRSkNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVhbihjKFINCiAgICAgICAgICAgICAgICAgICAgICMsIHJlcChtZWFuKFIpLCBuLmRlYnV0ICkNCiAgICAgICAgICAgICAgICAgICAgICkpDQojbWVkaWFuYSA8LSBtZWRpYW4obGVhZF9tZW4kRmluYWxbIWlzLm5hKGxlYWRfbWVuJEZpbmFsKV0pDQptZWRpYW5hIDwtIDgNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0LmNvbXAuY2FsYyRGaW5hbFshaXMubmEobGFzdC5jb21wLmNhbGMkRmluYWwpXSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQojRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpFIDwtIDEvKDErKDEwXiggKCBzb3J0KFIsIGRlY3JlYXNpbmcgPSBUUlVFKVs4XSAtUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KI21heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQojbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KDQplbG8uQmFsaS5maW5hbCA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3RyeT0gY291bnRyeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGxhc3QuY29tcC5jYWxjJEZpbmFsWyFpcy5uYShsYXN0LmNvbXAuY2FsYyRGaW5hbCldLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLkJhbGkuZmluYWwgPC0gYXNfdGliYmxlKGVsby5CYWxpLmZpbmFsKQ0KDQpgYGAgIA0KDQoNCiMjIyMjXyBFbG8gSGlzdG9yeSBfDQpgYGB7ciBldmFsPVRSVUV9DQojDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8uQmFsaS5maW5hbA0KIyBTYWNhbmRvIHN1YjE2DQpjb21wZSA8LSAiQmFsaS5maW5hbCINCiMNCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lDQogIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCmBgYCAgDQoNCg0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgQmFsaSBGaW5hbCoqDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCiMjDQoNCiNlbG8ubGFzdC5hY2N1bSA8LSBlbG8uYWNjdW0gJT4lIA0KIyAgcmVuYW1lKFIubmV3PSBFbG8pDQplbG8ubGFzdC5jb21wIDwtIGVsby5CYWxpLmZpbmFsDQojIyMNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLCBieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAgJT4lIGZ1bGxfam9pbihlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYCAgDQoNCg==