1. MPC response overview
As of 11 April 2023, a total of 448,317 persons or 90,324 families
have been reached by MPC interventions. A total of USD 13.3 million has
been disbursed by 17 implementing agencies across 28 sub-districts.
With only certain exceptions (such as activities specified as
non-MPC cash-for-food), only beneficiaries who have received at least
USD 100/family/month have been included.
448,000 people reached with MPC, USD 13.3 million disbursed, 11 April 2023governorate | district | communities | partners | households | beneficiaries | total_usd | %_BNFb |
---|
Aleppo | A'zaz | 5 | 7 | 2,994 | 14,578 | 424,067 | 3.25 |
Aleppo | Afrin | 75 | 10 | 25,162 | 125,312 | 3,726,192 | 27.95 |
Aleppo | Al Bab | 3 | 2 | 998 | 5,011 | 137,791 | 1.12 |
Aleppo | Jarablus | 1 | 3 | 589 | 2,805 | 88,350 | 0.63 |
Aleppo | Jebel Saman | 15 | 8 | 9,226 | 53,754 | 1,380,550 | 11.99 |
Idleb | Harim | 38 | 13 | 43,136 | 204,566 | 6,273,250 | 45.63 |
Idleb | Idleb | 17 | 10 | 5,634 | 28,502 | 879,372 | 6.36 |
Idleb | Jisr-Ash-Shugur | 21 | 3 | 2,585 | 13,789 | 350,200 | 3.08 |
Total | - | - | - | 90,324 | 448,317 | 13,259,772 | 100.00 |
bAs percentage of all MPC beneficiaries reached in NW Syria; |
177,525 beneficiaries were reached in February 2023 and 200,330 were
reached in March 2023. 52,252 have been reached so far in April
2023.
The cleaning and verification of the dataset is still ongoing,
many changes in numbers of persons reached reflect this process and will
only be completed once the CWG fully transitions to 4Ws
reporting.
1.1 Progress by date
The small number of beneficiaries reached earlier than February all
pertained to the HRP, the only such beneficiaries reported so far. The
CWG would like to encourage partners to report on their January
achievements.
3. Geographic breakdown of beneficiaries
Coverage continues to be highest in Afrin and Harim districts, which
have been worst-hit by the earthquake.
Casualties and damaged houses, absolute figures and per 100,000 personsgovernorate | district | wounded_dead1 | wounded_dead_100k1 | damaged_houses1 | damaged_houses_100k1 |
---|
Aleppo | A'zaz | 356 | 57.87 | 276 | 44.86 |
Aleppo | Afrin | 2,232 | 478.79 | 2,910 | 624.22 |
Aleppo | Al Bab | 206 | 70.04 | 832 | 282.89 |
Aleppo | Jarablus | 40 | 33.82 | 257 | 217.30 |
Aleppo | Jebel Saman | 616 | 236.80 | 176 | 67.66 |
Idleb | Harim | 8,449 | 507.65 | 3,230 | 194.07 |
Idleb | Idleb | 350 | 48.23 | 946 | 130.37 |
Idleb | Jisr-Ash-Shugur | 595 | 183.68 | 1,915 | 591.18 |
1Data from the Assistance Coordination Unit, Syria 20230328; |
Below is a breakdown of beneficiaries based on whether they originate
from camps or villages:
More than twice as many beneficiaries from villages as from campsvillage_camps | beneficiaries | %_beneficiaries |
---|
camp | 94,430 | 21.06 |
village | 228,690 | 51.01 |
NA | 125,197 | 27.93 |
3.1 By sub-district
The plots below show the breakdown of beneficiaries by sub-district.
Caution must be taken to ensure that allocations are fair across the
affected areas: there are numerous sub-districts where a very large
proportion of the total population has already been reached by
multi-purpose cash, in particular, Jandairis, Hairm, Salqin and
Sharan.
Response activities must be proportional with the magnitude and
severity of earthquake damage. Overallocation deprives affected persons
of the aid they are due.
The average percentage of the population reached, of all
sub-districts, is 10.63%.
3.2 Comparisons with PIN and earthquake damage
The plot below shows the total population of each sub-district on the
x-axis (for the moment, all persons in these areas are assumed to be
affected and are included in the PIN) and the number of beneficiaries on
the y-axis.
The size of each point indicates the number of dead or wounded
persons there per 100,000.
The higher or lower a sub-district is above the blue line, the more
disproportionate the number of beneficiaries allocated to that location
are.
This should also be compared to each sub-district’s share of the
earthquake damage. Of particular note, sub-districts in grey have yet to
receive any MPC assistance.
The CWG is currently working on a prioritisation score, which can be
a useful shorthand, that will take into account pre-existing
vulnerability (likely from the MSNA) as well as earthquake impacts.
3.3 Planned activities
12 partners have reported planned activitiesproject_status | partners | beneficiaries | %_beneficiaries |
---|
Completed | 17 | 448,317 | 88.22 |
Planned | 12 | 59,884 | 11.78 |
Suspended | 1 | 0 | 0.00 |
The sum of planned beneficiaries is 59,884. If this is the extent of
all planned MPC activities, the CWG as a whole can expect to reach
around 77% of its target of 662,942 persons.
Planned beneficiaries by monthmonth1 | beneficiaries |
---|
Apr | 43,243 |
Jun | 3,600 |
May | 188 |
NA | 12,853 |
1Some dates are missing or improperly encoded; |
4. Cash response actors and cash disbursed
USD 13.3 million has been distributed across 174 communities and 28
sub-districts in NW Syria.
Reach and footprint of cash response actorsimplementing_partner1 | beneficiaries | districts | communities |
---|
International Rescue Committee (IRC) | 67,989 | 3 | 20 |
People in Need (PIN) | 36,144 | 3 | 25 |
GOAL (GOAL) | 34,310 | 3 | 70 |
Shafak Organization (SO) | 33,115 | 5 | 15 |
Norwegian Refugee Council (NRC) | 20,900 | 2 | 5 |
Mercy-USA for Aid and Development (MUSA) | 14,197 | 5 | 27 |
Mercy Without Limits | 13,016 | 4 | 10 |
Bahar Organization (BO) | 12,000 | 1 | 1 |
CBRTWG-031 | 10,481 | 7 | 28 |
Uluslararasi Insani Yardimlasma Dernegi (IYD) | 10,351 | 4 | 16 |
Syria Relief | 9,750 | 5 | 7 |
Ihsan for Relief and Development | 8,655 | 5 | 16 |
World Vision International (WVI) | 7,008 | 1 | 4 |
Welthungerhilfe (WHH) | 4,830 | 4 | 4 |
Ataa Humanitarian Relief Association (ATAA) | 3,060 | 1 | 2 |
MASRRAT | 2,692 | 3 | 3 |
Elaf for relief and development | 1,750 | 1 | 1 |
1Only partners who provided more than USD 100/family/month; |
In the scatterplot below, each point is a single cash working group
partner. The x-axis indicates the number of beneficiaries reached per
agency and the y-axis indicates the number of communities (admin4)
reached. Mouse over each point for more details.
4.1 USD disbursed per partner
USD disbursed and families reached by partnerimplementing_partner | total_usd | families | usd_per_fam | %_usd_total |
---|
GOAL (GOAL) | 2,998,650 | 19,991 | 150.00 | 22.61 |
International Rescue Committee (IRC) | 1,773,750 | 11,825 | 150.00 | 13.38 |
Shafak Organization (SO) | 1,590,100 | 11,287 | 140.88 | 11.99 |
Norwegian Refugee Council (NRC) | 1,266,450 | 8,443 | 150.00 | 9.55 |
People in Need (PIN) | 927,450 | 6,183 | 150.00 | 6.99 |
Ihsan for Relief and Development | 854,250 | 5,695 | 150.00 | 6.44 |
Syria Relief | 724,500 | 4,830 | 150.00 | 5.46 |
CBRTWG-031 | 515,350 | 3,373 | 152.79 | 3.89 |
Mercy Without Limits | 438,372 | 3,325 | 131.84 | 3.31 |
Mercy-USA for Aid and Development (MUSA) | 409,800 | 4,098 | 100.00 | 3.09 |
Uluslararasi Insani Yardimlasma Dernegi (IYD) | 375,000 | 2,500 | 150.00 | 2.83 |
Bahar Organization (BO) | 360,000 | 2,400 | 150.00 | 2.71 |
Welthungerhilfe (WHH) | 344,400 | 2,296 | 150.00 | 2.60 |
World Vision International (WVI) | 301,200 | 2,008 | 150.00 | 2.27 |
Ataa Humanitarian Relief Association (ATAA) | 177,000 | 1,180 | 150.00 | 1.33 |
Elaf for relief and development | 122,500 | 350 | 350.00 | 0.92 |
MASRRAT | 81,000 | 540 | 150.00 | 0.61 |
The CWG is currently working with other Clusters to consolidate all
cash-based activities and will soon be able to provide more
comprehensive reporting.
5. Annexes
5.1 Interactive reference table at sub-district level
Columns include: governorate
, district
,
sub-district
, total population
,
beneficiaries
, total usd disbursed
,
wounded and dead
, wounded and dead per 100k
,
damaged houses
, damaged houses per 100k
,
admin3pcode
5.2 Reporting quality
This section documents issues encountered in the cleaning of 4W and
FSL data and their impacts on the quality of reporting the CWG can
provide. The recommendations by the CWG are included to enhance
reporting quality:
The CWG has shifted into a new 4Ws template for biweekly
reporting to better capture the earthquake response. Deadlines are set
on the 10th and the 25th of each month. 8 partners reported achievements
in February and 10 reported achievements in March. The CWG encourages
all partners to submit include their January achievements in the 4Ws. If
no MPC activities were implemented, please inform the CWG as
well.
For this reporting period, activities pertaining to 16,460
beneficiaries were missing their dates or had dates in unreadable
formats. Please ensure that the start date
and
end date
are entered in the format
mm/dd/yyyy and select the
month of reporting
from the options in the dropdown
menu.
For sex-and-age disggregations, please do not backfill these
columns using calculations based on the census or the MSNA. If no
disaggregated data is available to your organisation, please leave these
columns blank.
LS0tDQp0aXRsZTogIk5vcnRod2VzdCBTeXJpYSBDYXNoIFdvcmtpbmcgR3JvdXAgRWFydGhxdWFrZSBSZXNwb25zZSBCdWxsZXRpbiINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IHJlYWRhYmxlDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogbm8NCiAgICBjb2xsYXBzZWQ6IG5vDQphbHdheXNfYWxsb3dfaHRtbDogeWVzDQotLS0NCg0KYGBge2NzcywgZWNobz1GQUxTRX0NCg0KI1RPQzo6YmVmb3JlIHsNCiAgY29udGVudDogIiI7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBoZWlnaHQ6IDcwcHg7DQogIG1hcmdpbjogMmVtIDIwcHggNDBweCAyMHB4Ow0KICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIk5XUy1DV0cgbG9nby5QTkciKTsNCiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOw0KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KfQ0KYGBgDQoNCmBgYHs9aHRtbH0NCjxzdHlsZT4NCiAgICBib2R5IC5tYWluLWNvbnRhaW5lciB7DQogICAgICAgIG1heC13aWR0aDogMTI4MHB4Ow0KICAgIH0NCjwvc3R5bGU+DQpgYGANCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIGZpZy53aWR0aD05LCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHN0cmluZ2kpDQpsaWJyYXJ5KHBhbmRlcikNCmxpYnJhcnkoamFuaXRvcikNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeShza2ltcikNCmxpYnJhcnkocGF0Y2h3b3JrKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoaGVyZSkNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoZmxleHRhYmxlKQ0KbGlicmFyeShzbmFrZWNhc2UpDQpsaWJyYXJ5KGFyYWJpY1N0ZW1SKQ0KbGlicmFyeSh3cml0ZXhsKQ0KbGlicmFyeShtZGVwcml2KQ0KbGlicmFyeShnZ3JlcGVsKQ0KDQp0aGVtZV9zZXQodGhlbWVfbGlnaHQoKSkNCg0KIyBkaXNhYmxpbmcgc2NpZW50aWZpYyBub3RhdGlvbg0Kb3B0aW9ucyhzY2lwZW4gPSAxMDApDQoNCiMgcGFuZGVyIHRhYmxlcyBhbGwgaW4gb25lIHJvdw0KcGFuZGVyT3B0aW9ucygndGFibGUuc3BsaXQudGFibGUnLCBJbmYpDQoNCiMgcGFuZGVyIHRob3VzYW5kcyBzZXBhcmF0b3INCnBhbmRlck9wdGlvbnMoImJpZy5tYXJrIiwgIiwiKQ0KDQojIHJlcGxhY2UgDQpvcHRzIDwtIG9wdGlvbnMoa25pdHIua2FibGUuTkEgPSAiIikNCg0KYCVvdXQlYCA8LSBOZWdhdGUoYCVpbiVgKQ0KDQojIGZ1bmN0aW9uIGZvciB0cmFuc3Bvc2luZyBkZg0KdHJhbnNwb3NlX2RmIDwtIGZ1bmN0aW9uKGRmKSB7DQogIHRfZGYgPC0gZGF0YS50YWJsZTo6dHJhbnNwb3NlKGRmKQ0KICBjb2xuYW1lcyh0X2RmKSA8LSByb3duYW1lcyhkZikNCiAgcm93bmFtZXModF9kZikgPC0gY29sbmFtZXMoZGYpDQogIHRfZGYgPC0gdF9kZiAlPiUNCiAgICB0aWJibGU6OnJvd25hbWVzX3RvX2NvbHVtbiguZGF0YSA9IC4pICU+JQ0KICAgIHRpYmJsZTo6YXNfdGliYmxlKC4pDQogIHJldHVybih0X2RmKQ0KfQ0KDQojIGZ1bmN0aW9uIGJlbmVmaWNpYXJ5IHN1bW1hcmllcw0Kc3VtX2JlbiA8LSBmdW5jdGlvbihkZiwgY29sdW1uX3Zhcil7DQogIA0KICBjb2x1bW5fdmFyIDwtIGVucXVvKGNvbHVtbl92YXIpDQogIA0KICBkZiAlPiUNCiAgICBncm91cF9ieSghIWNvbHVtbl92YXIpICU+JSAjIG11c3QgYWRkIGJhbmctYmFuZw0KICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKG5ld19iZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogICAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpZXMpKQ0KICAgIA0KfQ0KDQojIGZ1bmN0aW9uIGJlbmVmaWNpYXJ5IHN1bW1hcmllcywgMiBncm91cGVkIHZhcmlhYmxlcw0Kc3VtX2JlbjIgPC0gZnVuY3Rpb24oZGYsIGNvbHVtbl92YXIxLCBjb2x1bW5fdmFyMil7DQogIA0KICBjb2x1bW5fdmFyMSA8LSBlbnF1byhjb2x1bW5fdmFyMSkNCiAgY29sdW1uX3ZhcjIgPC0gZW5xdW8oY29sdW1uX3ZhcjIpDQogIA0KICBkZiAlPiUNCiAgICBncm91cF9ieSghIWNvbHVtbl92YXIxLCAhIWNvbHVtbl92YXIyKSAlPiUgIyBtdXN0IGFkZCBiYW5nLWJhbmcNCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShuZXdfYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgLmdyb3VwcyA9ICJkcm9wIikNCiAgICANCn0NCg0KIyBzY2FsaW5nIGZ1bmN0aW9ucyANCnJhbmdlMDEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgpKS8obWF4KHgpLW1pbih4KSl9DQpyYW5nZV93bmEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgsIG5hLnJtID0gVFJVRSkpLyhtYXgoeCwgbmEucm0gPSBUUlVFKS1taW4oeCwgbmEucm0gPSBUUlVFKSl9DQoNCiNtb2RlIGZ1bmN0aW9uIA0KbW9kZSA8LSBmdW5jdGlvbih4KSB7DQogIHV4IDwtIHVuaXF1ZSh4KQ0KICB1eFt3aGljaC5tYXgodGFidWxhdGUobWF0Y2goeCwgdXgpKSldDQp9DQoNCmxvY2F0aW9ucyA8LSByZWFkX2V4Y2VsKCIuL2RhdGEvTG9jYXRpb25zLnhsc3giKSAlPiUgDQogIGNsZWFuX25hbWVzKCkNCg0KcGNvZGUzX3NoYXBlIDwtIA0KICBzdF9yZWFkKCIuL2RhdGEvc3lyX2FkbWJuZGFfdW5jc191bm9jaGFfMjAyMDEyMTcvc3lyX2FkbWJuZGFfYWRtM191bmNzX3Vub2NoYV8yMDIwMTIxNy5zaHAiKQ0KDQphcmFiaWNfbGFiZWxzIDwtIGZ1bmN0aW9uKHgpIHBhc3RlMCgiXHUyMDJiIiwgeCkNCg0KcmVwb3J0X2RhdGUgPC0gIjExIEFwcmlsIDIwMjMiDQpgYGANCg0KDQpgYGB7ciBkYXRhfQ0KbmFtZXNfZXEgPC0gYygNCiAgImRhdGUiLA0KICAiZ292ZXJub3JhdGUiLA0KICAiZGlzdHJpY3QiLA0KICAic3ViX2Rpc3RyaWN0IiwNCiAgImNvbW11bml0eSIsDQogICJhZG1pbjQiLA0KICAiY2FzdWFsdGllcyIsDQogICJpbmp1cmllcyIsDQogICJjb21wbGV0ZWx5X2Rlc3Ryb3llZF9ob3VzZXMiLA0KICAiZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzIiwNCiAgInRlbXBvcmFyeV9hY2NvbW1vZGF0aW9uX2NlbnRyZXMiLA0KICAiaWRwc19pbl9hbGxfY2VudHJlcyIsDQogICJzY2hvb2xzX2FzX2FjY29tb2RhdGlvbl9jZW50cmVzIiwNCiAgImlkcHNfaW5fc2Nob29scyIsDQogICJ0ZW50c19uZWVkZWQiLA0KICAiYmxhbmtldHNfbWF0dHJlc3Nlc19uZWVkZWQiLA0KICAidGVtcG9yYXJ5X2FjY29tbW9kYXRpb25fY2VudHJlc19hdmFpbGFibGUiLCANCiAgImFjY2Vzc2libGVfY2l2aWxfZGVmZW5zZSIsDQogICJsYXRyaW5lc19hdmFpbGFibGUiLA0KICAibWVhbHNfbmVlZGVkX3Blcl9kYXkiLA0KICAibmVlZF9ibG9vZF9kb25hdGlvbnMiLA0KICAiaGVhbHRoX3NlcnZpY2VzX2F2YWlsYWJsZSIsDQogICJuZWNlc3NhcnlfbWVkaWNhbF9lcXVpcG1lbnQiLA0KICAicnViYmxlX3ZvbHVudGVlcnMiLA0KICAidGVsZWNvbXNfYXZhaWxhYmxlIiwNCiAgImVsZWN0cmljaXR5X2F2YWlsYWJsZSIsIA0KICAiaGVhdGluZ19mdWVsX25lZWRlZCINCikNCg0KZXEgPC0gcmVhZF9leGNlbCgiLi9kYXRhL3N5cmlhLWVhcnRocXVha2UtaW1wYWN0LTIwLW1hcmNoLTIwMjMueGxzeCIsDQogICAgICAgICAgICAgICAgIHNoZWV0ID0gIkRBVEFTRVQiKSAlPiUgDQogIHNldE5hbWVzKG5hbWVzX2VxKSAlPiUgDQogIGxlZnRfam9pbihsb2NhdGlvbnMgJT4lIHNlbGVjdChhZG1pbjRwY29kZSwgYWRtaW4zcGNvZGUpLCANCiAgICAgICAgICAgIGJ5ID0gYygiYWRtaW40IiA9ICJhZG1pbjRwY29kZSIpKSAlPiUgDQogIG11dGF0ZSh3b3VuZGVkX2RlYWQgPSBjYXN1YWx0aWVzICsgaW5qdXJpZXMsDQogICAgICAgICAgICAgZGFtYWdlZF9ob3VzZXMgPSBjb21wbGV0ZWx5X2Rlc3Ryb3llZF9ob3VzZXMgKyBkYW1hZ2VkX3VuaWhhYml0YWJsZV9ob3VzZXMpICU+JSANCiAgICAgIGdyb3VwX2J5KGFkbWluM3Bjb2RlKSAlPiUgDQogICAgICBzdW1tYXJpc2Uod291bmRlZF9kZWFkID0gc3VtKHdvdW5kZWRfZGVhZCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICAgICAgZGFtYWdlZF9ob3VzZXMgPSBzdW0oZGFtYWdlZF9ob3VzZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbGVmdF9qb2luKHJlYWRfZXhjZWwoIi4vZGF0YS8yMDIzSE5PX1BpTl9TZXZlcml0eV9kZXRhaWxlZEFvSV9GT1JTSEFSRSAxNTAzMjAyMy54bHN4Iiwgc2tpcCA9IDEsIA0KICAgICAgICAgICAgICAgICAgc2hlZXQgPSAxKSAlPiUNCiAgICAgICAgICAgICAgY2xlYW5fbmFtZXMoKSAlPiUNCiAgICAgICAgICAgICAgc2VsZWN0KGFkbWluM3Bjb2RlLCB0b3RhbF9wb3B1bGF0aW9uKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgbXV0YXRlKHdvdW5kZWRfZGVhZF8xMDBrID0gd291bmRlZF9kZWFkIC8gdG90YWxfcG9wdWxhdGlvbiAqIDEwMDAwMCwgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlc18xMDBrID0gZGFtYWdlZF9ob3VzZXMgLyB0b3RhbF9wb3B1bGF0aW9uICogMTAwMDAwKQ0KDQoNCmVxX21kZXByaXYgPC0gZXEgJT4lDQogIG11dGF0ZV9hdCh2YXJzKHdvdW5kZWRfZGVhZCwgZGFtYWdlZF9ob3VzZXMsIA0KICAgICAgICAgICAgICAgICB3b3VuZGVkX2RlYWRfMTAwaywgZGFtYWdlZF9ob3VzZXNfMTAwayksIH4gcmFuZ2Vfd25hKC4pKSAlPiUgDQogIG1kZXByaXYoYygid291bmRlZF9kZWFkIiwgImRhbWFnZWRfaG91c2VzIiwgDQogICAgICAgICAgICAid291bmRlZF9kZWFkXzEwMGsiLCAiZGFtYWdlZF9ob3VzZXNfMTAwayIpLCANCiAgICAgICAgICBtZXRob2QgPSAiY3oiLCBvdXRwdXQgPSAiYWxsIiwgDQogICAgICAgICAgc2NvcmVfaV9oZWFkaW5nID0gImVxX3Njb3JlIikNCg0KZXEgPC0gZXEgJT4lIA0KICBsZWZ0X2pvaW4oZXFfbWRlcHJpdiRkYXRhICU+JSANCiAgICAgICAgICAgICAgc2VsZWN0KGFkbWluM3Bjb2RlLCBlcV9zY29yZSksIA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKQ0KDQojIFRoaW5rIG9mIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMgLS0gaWYgc29tZW9uZSBlbHNlIHJ1bnMgdGhpcywgaXQgd29uJ3Qgd29yayANCmNiciA8LSByZWFkX2NzdigiLi9kYXRhL2Nicl9jb20uY3N2IikgJT4lIA0KICBtdXRhdGUobW9udGggPSBtb250aChkaXN0cmlidXRpb25fZGF0ZSkpICU+JSANCiAgcmVwbGFjZV9uYShsaXN0KGJlbmVmaWNpYXJpZXMgPSAwKSkgDQogIA0KDQpobm8gPC0gcmVhZF9leGNlbCgiLi9kYXRhLzIwMjNITk9fUGlOX1NldmVyaXR5X2RldGFpbGVkQW9JX0ZPUlNIQVJFIDE1MDMyMDIzLnhsc3giLCBza2lwID0gMSwgDQogICAgICAgICAgICAgICAgICBzaGVldCA9IDEpICU+JQ0KICBjbGVhbl9uYW1lcygpDQoNCg0KbndfcGNvZGUzIDwtIGhubyAlPiUgDQogIGZpbHRlcihhb19jID09ICJOVyIpICU+JSANCiAgcHVsbChhZG1pbjNwY29kZSkNCg0KZm91ciA8LSByZWFkX2NzdigiLi9kYXRhLzR3cy5jc3YiKQ0KDQpgYGANCg0KPGJyPjxicj48YnI+DQoNCiMgMS4gTVBDIHJlc3BvbnNlIG92ZXJ2aWV3DQoNCkFzIG9mIDExIEFwcmlsIDIwMjMsIGEgdG90YWwgb2YgYHIgY2JyICU+JSBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYmVuZWZpY2lhcmllcyl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIG9yIGByIGNiciAlPiUgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJGZhbWlsaWVzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgZmFtaWxpZXMgaGF2ZSBiZWVuIHJlYWNoZWQgYnkgTVBDIGludGVydmVudGlvbnMuIA0KQSB0b3RhbCBvZiBVU0QgYHIgcGFzdGUoZm9ybWF0KHJvdW5kKChjYnIgJT4lIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lICB7c3VtKC4kdG90YWxfdXNkKX0pIC8gMTAwMDAwMCwgMSksIHRyaW0gPSBUUlVFKSwgIm1pbGxpb24iKWAgaGFzIGJlZW4gZGlzYnVyc2VkIGJ5IGByIGNiciAlPiUgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgc3VtbWFyaXNlKG5fZGlzdGluY3QoaW1wbGVtZW50aW5nX3BhcnRuZXIpKSAlPiUgcHVsbCgpYCBpbXBsZW1lbnRpbmcgYWdlbmNpZXMgYWNyb3NzIGByIGNiciAlPiUgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgc3VtbWFyaXNlKG5fZGlzdGluY3QoYWRtaW4zcGNvZGUpKSAlPiUgcHVsbCgpYCBzdWItZGlzdHJpY3RzLiANCg0KKldpdGggb25seSBjZXJ0YWluIGV4Y2VwdGlvbnMgKHN1Y2ggYXMgYWN0aXZpdGllcyBzcGVjaWZpZWQgYXMgbm9uLU1QQyBjYXNoLWZvci1mb29kKSwgb25seSBiZW5lZmljaWFyaWVzIHdobyBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IFVTRCAxMDAvZmFtaWx5L21vbnRoIGhhdmUgYmVlbiBpbmNsdWRlZC4qDQoNCjxicj4NCg0KYGBge3Igc3VtbWFyeSB0YWJsZX0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UocGFydG5lcnMgPSBuX2Rpc3RpbmN0KGltcGxlbWVudGluZ19wYXJ0bmVyKSwgDQogICAgICAgICAgICBjb21tdW5pdGllcyA9IG5fZGlzdGluY3QoYWRtaW40cGNvZGUpLCANCiAgICAgICAgICAgIGhvdXNlaG9sZHMgPSBzdW0oZmFtaWxpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHRvdGFsX3VzZCA9IHN1bSh0b3RhbF91c2QsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgbXV0YXRlKGAlX0JORmAgPSANCiAgICAgICAgICAgcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lDQogIGFkb3JuX3RvdGFscygicm93IiwsLCwgaG91c2Vob2xkcywgYmVuZWZpY2lhcmllcywgdG90YWxfdXNkLCBgJV9CTkZgKSAlPiUgDQogIG11dGF0ZShgJV9CTkZgID0gaWZlbHNlKGAlX0JORmAgPiA5OS45OCwgMTAwLCBgJV9CTkZgKSkgJT4lIA0KICBzZWxlY3QoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCBjb21tdW5pdGllcywgcGFydG5lcnMsIA0KICAgICAgICAgaG91c2Vob2xkcywgYmVuZWZpY2lhcmllcywgdG90YWxfdXNkLCBgJV9CTkZgKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24ocGFzdGUwKCI0NDgsMDAwIHBlb3BsZSByZWFjaGVkIHdpdGggTVBDLCBVU0QgMTMuMyBtaWxsaW9uIGRpc2J1cnNlZCwgIiwgcmVwb3J0X2RhdGUpKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KIyAgZm9vdG5vdGUoaSA9IDEsIGogPSA2LCBwYXJ0ID0gImhlYWRlciIsIHJlZl9zeW1ib2xzID0gImEiLA0KIyAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJCZW5lZmljaWFyeSBmaWd1cmVzIGluY2x1ZGUgb25seSByZXBvcnRlZCBNUEMgd2l0aCBhIG1pbmltdW0gdHJhbnNmZXIgdmFsdWUgI29mIFVTRCAxMDAiKSkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDgsIHBhcnQgPSAiaGVhZGVyIiwgcmVmX3N5bWJvbHMgPSAiYiIsIGlubGluZSA9IFRSVUUsICANCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJBcyBwZXJjZW50YWdlIG9mIGFsbCBNUEMgYmVuZWZpY2lhcmllcyByZWFjaGVkIGluIE5XIFN5cmlhIikpIA0KDQoNCmBgYA0KDQoNCmBgYHtyIGV2YWwgPSBGQUxTRX0NCg0KIyBKdXN0IGJyZWFrZG93biBieSBtb250aCAtLSBkb24ndCBrbm93IHdoeSBJIGRpZCBhIGxpbmUgcGxvdCBpbnN0ZWFkIG9mIGEgYmFycGxvdCwgDQojIG1heWJlIGJhcnBsb3Qgd2hlbiB0aGVyZSBhcmUgbW9yZSBtb250aHMgDQoNCmNiciAlPiUgDQogIG11dGF0ZShtb250aCA9IG1vbnRoKGRpc3RyaWJ1dGlvbl9kYXRlKSkgJT4lIA0KICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgDQogIGdyb3VwX2J5KG1vbnRoKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpDQoNCmNiciAlPiUgY291bnQoaW1wbGVtZW50aW5nX3BhcnRuZXIsIHBhcnRuZXJfY29kZSkNCg0KYGZpbHRlcihjYnIsIG1vbnRoID09IDIgJiBwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWANCg0KYGBgDQoNCjxicj4NCg0KYHIgZmlsdGVyKGNiciwgbW9udGggPT0gMiAmIHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBiZW5lZmljaWFyaWVzIHdlcmUgcmVhY2hlZCBpbiBGZWJydWFyeSAyMDIzIGFuZCBgciBmaWx0ZXIoY2JyLCBtb250aCA9PSAzICYgcHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgcmVhY2hlZCBpbiBNYXJjaCAyMDIzLiBgciBmaWx0ZXIoY2JyLCBtb250aCA9PSA0ICYgcHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIGhhdmUgYmVlbiByZWFjaGVkIHNvIGZhciBpbiBBcHJpbCAyMDIzLg0KDQoqVGhlIGNsZWFuaW5nIGFuZCB2ZXJpZmljYXRpb24gb2YgdGhlIGRhdGFzZXQgaXMgc3RpbGwgb25nb2luZywgbWFueSBjaGFuZ2VzIGluIG51bWJlcnMgb2YgcGVyc29ucyByZWFjaGVkIHJlZmxlY3QgdGhpcyBwcm9jZXNzIGFuZCB3aWxsIG9ubHkgYmUgY29tcGxldGVkIG9uY2UgdGhlIENXRyBmdWxseSB0cmFuc2l0aW9ucyB0byA0V3MgcmVwb3J0aW5nLioNCg0KICANCiAgDQpgYGB7ciBldmFsPUZBTFNFfQ0KY2JyICU+JSANCiAgbXV0YXRlKGRpc3RyaWJ1dGlvbl9kYXRlID0gYXMuRGF0ZShkaXN0cmlidXRpb25fZGF0ZSkpICU+JSANCiAgZmlsdGVyKGRpc3RyaWJ1dGlvbl9kYXRlID09ICIwMDIyLTAxLTIwIikgJT4lIA0KICB7c3VtKC4kYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKX0NCmBgYA0KDQo8YnI+PGJyPg0KDQojIyAxLjEgUHJvZ3Jlc3MgYnkgZGF0ZQ0KDQpgYGB7ciBmaWcuaGVpZ2h0PTZ9DQpjYnIgJT4lDQogIG11dGF0ZShkaXN0cmlidXRpb25fZGF0ZSA9IGFzLkRhdGUoZGlzdHJpYnV0aW9uX2RhdGUpKSAlPiUgDQogIGZpbHRlcighaXMubmEoZGlzdHJpYnV0aW9uX2RhdGUpKSAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieShkaXN0cmlidXRpb25fZGF0ZSkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzKSkgJT4lDQogIGFycmFuZ2UoZGlzdHJpYnV0aW9uX2RhdGUpICU+JSANCiAgZmlsdGVyKGRpc3RyaWJ1dGlvbl9kYXRlICE9ICIwMDIyLTAxLTIwIikgJT4lIA0KICBtdXRhdGUoaWZlbHNlKGRpc3RyaWJ1dGlvbl9kYXRlID4gIjIwMjMtMDQtMTEiLCAiMjAyMy0wNC0xMSIsIGRpc3RyaWJ1dGlvbl9kYXRlKSkgJT4lIA0KICBtdXRhdGUoY3VtX2JlbiA9IGN1bXN1bShiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBtdXRhdGUoY3VtX2xhYmVsID0gaWZlbHNlKGRpc3RyaWJ1dGlvbl9kYXRlID09ICIyMDIzLTAyLTA5IiB8IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uX2RhdGUgPT0gIjIwMjMtMDMtMDIiIHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkaXN0cmlidXRpb25fZGF0ZSA9PSAiMjAyMy0wMy0yMiIgfA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uX2RhdGUgPT0gIjIwMjMtMDMtMzAifA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uX2RhdGUgPT0gIjIwMjMtMDQtMTUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdW1fYmVuLCAiIiksIA0KICAgICAgICAgY3VtX2xhYmVsID0gYXMubnVtZXJpYyhjdW1fbGFiZWwpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gZGlzdHJpYnV0aW9uX2RhdGUsIHkgPSBjdW1fYmVuKSkgKyANCiAgZ2VvbV9saW5lKGNvbG91ciA9ICJibHVlIikgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6Y29tbWEoY3VtX2xhYmVsKSksIHZqdXN0ID0gLS42LCANCiAgICAgICAgICAgIHNpemUgPSA0KSArIA0KICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSB3ZWVrIiwgZGF0ZV9sYWJlbHMgPSAiJWQtJWIiKSArDQogICMgV2h5IGRpZG4ndCB5b3UgbGVhcm4gdGhpcyBiZWZvcmU/IA0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEsIGV4cGFuZCA9IGV4cGFuc2lvbihtdWx0ID0gLjEpKSArIA0KICBsYWJzKHggPSAiRGlzdHJpYnV0aW9uIGRhdGUiLCANCiAgICAgICB5ID0gIkN1bXVsYXRpdmUgYmVuZWZpY2lhcmllcyIsIA0KICAgICAgIHRpdGxlID0gIk1QQyBwcm9ncmVzcyBieSBkYXRlIiwgDQogICAgICAgc3VidGl0bGUgPSAiVGhlIGVhcmxpZXN0IGVhcnRocXVha2UtcmVsYXRlZCBkaXN0cmlidXRpb24gd2FzIDIwMjMtMDItMDlcbkV4Y2x1ZGVzIDE2LDQ2MCBiZW5lZmljaWFyaWVzIGZvciB3aGljaCB0aGUgZGF0ZSB3YXMgbm90IHJlcG9ydGVkIG9yIHdhcyB1bnJlYWRhYmxlIikgIA0KICANCmdnc2F2ZSgiLi9pbWcvcHJvZ3Jlc3NfbGluZS5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDguMjcsIHdpZHRoID0gMTEuNjksIHVuaXRzID0gImluIikgIA0KYGBgDQoNCjxicj4NCg0KVGhlIHNtYWxsIG51bWJlciBvZiBiZW5lZmljaWFyaWVzIHJlYWNoZWQgZWFybGllciB0aGFuIEZlYnJ1YXJ5IGFsbCBwZXJ0YWluZWQgdG8gdGhlIEhSUCwgdGhlIG9ubHkgc3VjaCBiZW5lZmljaWFyaWVzIHJlcG9ydGVkIHNvIGZhci4gVGhlIENXRyB3b3VsZCBsaWtlIHRvIGVuY291cmFnZSBwYXJ0bmVycyB0byByZXBvcnQgb24gdGhlaXIgSmFudWFyeSBhY2hpZXZlbWVudHMuIA0KDQo8YnI+PGJyPg0KDQojIDIuIE1hcCBvZiBhY3Rpdml0aWVzDQoNCjxicj4NCg0KYGBge3IgZmlnLmhlaWdodD03fQ0KDQpwbGFubmVkX2ltcGxlbWVudGVkX21hcCA8LSBjYnIgJT4lIA0KICByaWdodF9qb2luKHBjb2RlM19zaGFwZSwgDQogICAgICAgICAgICAgYnkgPSBjKCJhZG1pbjNwY29kZSIgPSAiQURNM19QQ09ERSIpKSAlPiUgDQogIGZpbHRlcihBRE0xX1BDT0RFICVpbiUgYygiU1kwMiIsICJTWTA3IikgJiAhaXMubmEoYmVuZWZpY2lhcmllcykpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUNCiAgZ2dwbG90KCkgKyANCiAgZ2VvbV9zZihzaXplID0gLjEsIGNvbG91ciA9ICJncmV5NzAiKSArIA0KICBnZW9tX3BvaW50KGFlcyhzaXplID0gYmVuZWZpY2lhcmllcywNCiAgICAgICAgICAgICAgICAgY29sb3VyID0gcHJvamVjdF9zdGF0dXMsIA0KICAgICAgICAgICAgICAgICB4ID0gbG9uZ2l0dWRlX3gsIHkgPSBsYXRpdHVkZV95LCANCiAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlMCgic3ViX2Rpc3RyaWN0OiAiLCBzdWJfZGlzdHJpY3QsICJcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW11bml0eTogIiwgY29tbXVuaXR5LCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbl90eXBlOiAiLCB2aWxsYWdlX2NhbXBzLCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZW5lZmljaWFyaWVzOiIsIGZvcm1hdChiZW5lZmljaWFyaWVzLCBiaWcubWFyayA9ICIsIiksICJcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcnRuZXI6ICIsIGFiYnJldmlhdGlvbiwgIlxuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvbl94OiAiLCBsb25naXR1ZGVfeCwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGF0X3k6ICIsIGxhdGl0dWRlX3kpKSwgDQogICAgICAgICAgICAgc2hhcGUgPSAyMSwgc3Ryb2tlID0gLjM1LCANCiAgICAgICAgICAgICBhbHBoYSA9IC41KSArIA0KICBzY2FsZV9zaXplX2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsgDQogIHNjYWxlX2NvbG91cl92aXJpZGlzX2QobmEudHJhbnNsYXRlID0gRkFMU0UpICsgDQogIHRoZW1lX3ZvaWQoKSArIA0KICB0aGVtZShwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9IE5BKSwgDQogICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksKSArDQogIGxhYnModGl0bGUgPSAiQ29tbXVuaXRpZXMgcmVhY2hlZCBhbmQgcGxhbm5lZCAtLSBDV0cgcGFydG5lcnMiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJQbGFubmVkIGluIHllbGxvdywgY29tcGxldGVkIGluIHB1cnBsZSwgc2l6ZSBzaG93cyBudW1iZXIgb2YgcGVyc29ucyIsIA0KICAgICAgIGNvbG91ciA9ICJTdGF0dXMiKSArDQogIGd1aWRlcyhzaXplID0gIm5vbmUiKQ0KDQogIA0KZ2dwbG90bHkocGxhbm5lZF9pbXBsZW1lbnRlZF9tYXAsIHRvb2x0aXAgPSBjKCJ0ZXh0IikpICU+JSANCiAgcGxvdGx5OjpzdHlsZShob3Zlcm9uID0gInBvaW50IikgJT4lIA0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSBwYXN0ZTAoIkNvbW11bml0aWVzIHJlYWNoZWQgYW5kIHBsYW5uZWQgLS0gQ1dHIHBhcnRuZXJzIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdXA+IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbm5lZCBpbiB5ZWxsb3csIGNvbXBsZXRlZCBpbiBwdXJwbGUsIHNpemUgc2hvd3MgbnVtYmVyIG9mIHBlcnNvbnM7IGNsaWNrIGFuZCBkcmFnIHRvIHpvb207IG1vdXNlIG92ZXIgZm9yIGRldGFpbHMiKSkpDQogIA0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQojIDMuIEdlb2dyYXBoaWMgYnJlYWtkb3duIG9mIGJlbmVmaWNpYXJpZXMgDQoNCkNvdmVyYWdlIGNvbnRpbnVlcyB0byBiZSBoaWdoZXN0IGluIEFmcmluIGFuZCBIYXJpbSBkaXN0cmljdHMsIHdoaWNoIGhhdmUgYmVlbiB3b3JzdC1oaXQgYnkgdGhlIGVhcnRocXVha2UuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KY2JyICU+JSANCiAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShkaXN0cmljdCA9IGZjdF9yZW9yZGVyKGRpc3RyaWN0LCBiZW5lZmljaWFyaWVzKSwgDQogICAgICAgICBnb3Zlcm5vcmF0ZSA9IGZjdF9yZWxldmVsKGdvdmVybm9yYXRlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiSWRsZWIiLCAiQWxlcHBvIikpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGJlbmVmaWNpYXJpZXMsIHkgPSBkaXN0cmljdCkpICsgDQogIGdlb21fY29sKGFlcyhmaWxsID0gZ292ZXJub3JhdGUpKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEoYmVuZWZpY2lhcmllcykpLCANCiAgICAgICAgICAgIGhqdXN0ID0gImlud2FyZCIpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKGJlZ2luID0gLjMpICsgDQogIGxhYnModGl0bGUgPSAiTVBDIGJlbmVmaWNpYXJpZXMgYnkgZGlzdHJpY3QiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJhcyBvZiAxMSBBcHJpbCAyMDIzIiwgDQogICAgICAgeSA9ICIiKSArIA0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsgDQoNCmhubyAlPiUgDQogIGZpbHRlcihhZG1pbjJuYW1lX2VuICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlID0gYWRtaW4xbmFtZV9lbiwgZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9wb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIikgJT4lIA0KICBsZWZ0X2pvaW4oDQogICAgY2JyICU+JQ0KICAgICAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgIA0KICAgICAgZ3JvdXBfYnkoZGlzdHJpY3QpICU+JSANCiAgICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpICwgIA0KICBieSA9ICJkaXN0cmljdCIpICU+JSANCiAgbXV0YXRlKGRpc3RyaWN0ID0gZmN0X3JlbGV2ZWwoZGlzdHJpY3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWwgQmFiIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKYXJhYmx1cyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSd6YXoiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkplYmVsIFNhbWFuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmlzci1Bc2gtU2h1Z3VyIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJZGxlYiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGFyaW0iKSwNCiAgICAgICAgIHBjX3JlYWNoZWQgPSByb3VuZChiZW5lZmljaWFyaWVzIC8gdG90YWxfcG9wdWxhdGlvbiAqIDEwMCwgZGlnaXRzID0gMSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcGNfcmVhY2hlZCwgeSA9IGRpc3RyaWN0KSkgKw0KICBnZW9tX2NvbChhZXMoZmlsbCA9IGdvdmVybm9yYXRlKSkgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKHBjX3JlYWNoZWQpKSwgDQogICAgICAgICAgICBoanVzdCA9ICJpbndhcmQiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKGJlZ2luID0gLjMpICsgDQogIGxhYnModGl0bGUgPSAiUGVyY2VudCBvZiBwb3B1bGF0aW9uIHJlYWNoZWQiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJhcyBvZiAxMSBBcHJpbCAyMDIzIiwgDQogICAgICAgeSA9ICIiLCANCiAgICAgICB4ID0gIiUgb2YgcG9wdWxhdGlvbiByZWFjaGVkIikgKw0KICANCiAgcGxvdF9sYXlvdXQoZ3VpZGVzID0gImNvbGxlY3QiKSAmIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikNCg0KZ2dzYXZlKCIuL2ltZy9tcGNfYnlfZGlzdHJpY3QucG5nIiwgZHBpID0gMzAwLCBoZWlnaHQgPSA4LjI3LCB3aWR0aCA9IDExLjY5LCB1bml0cyA9ICJpbiIpICANCg0KYGBgDQoNCjxicj4NCg0KYGBge3J9DQplcSAlPiUgDQogIGxlZnRfam9pbihobm8gJT4lIA0KICAgICAgICAgICAgICBzZWxlY3QoZ292ZXJub3JhdGUgPSBhZG1pbjFuYW1lX2VuLCANCiAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWN0ID0gYWRtaW4ybmFtZV9lbiwgDQogICAgICAgICAgICAgICAgICAgICBzdWJfZGlzdHJpY3QgPSBhZG1pbjNuYW1lX2VuLCANCiAgICAgICAgICAgICAgICAgICAgIGFkbWluM3Bjb2RlKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgZmlsdGVyKGFkbWluM3Bjb2RlICVpbiUgbndfcGNvZGUzICYgDQogICAgICAgICAgIGRpc3RyaWN0ICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKHdvdW5kZWRfZGVhZCA9IHN1bSh3b3VuZGVkX2RlYWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZGFtYWdlZF9ob3VzZXMgPSBzdW0oZGFtYWdlZF9ob3VzZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgIyBXaGVyZSBpcyBBcmloYSwgYW5kIHdoeSBpcyBpdCBzaG93aW5nIHVwIGhlcmUNCiAgZmlsdGVyKGRpc3RyaWN0ICE9ICJBcmloYSIpICU+JSANCiAgbGVmdF9qb2luKGhubyAlPiUgDQogICAgICAgICAgICAgIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmDQogICAgICAgICAgICAgICAgICAgICAgIGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuKSAlPiUNCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSksIGJ5ID0gImRpc3RyaWN0IikgJT4lIA0KICBtdXRhdGUod291bmRlZF9kZWFkXzEwMGsgPSByb3VuZCh3b3VuZGVkX2RlYWQgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlc18xMDBrID0gcm91bmQoZGFtYWdlZF9ob3VzZXMgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBzZWxlY3QoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCB3b3VuZGVkX2RlYWQsIHdvdW5kZWRfZGVhZF8xMDBrLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzLCBkYW1hZ2VkX2hvdXNlc18xMDBrKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpICU+JSANCiAgc2V0X2NhcHRpb24oIkNhc3VhbHRpZXMgYW5kIGRhbWFnZWQgaG91c2VzLCBhYnNvbHV0ZSBmaWd1cmVzIGFuZCBwZXIgMTAwLDAwMCBwZXJzb25zIikgJT4lIA0KICBmb290bm90ZShwYXJ0ID0gImhlYWRlciIsIGkgPSAxLCBqID0gMzo2LCBpbmxpbmUgPSBUUlVFLCByZWZfc3ltYm9scyA9ICIxIiwNCiAgICAgICAgICAgdmFsdWUgPSBhc19wYXJhZ3JhcGgoIkRhdGEgZnJvbSB0aGUgQXNzaXN0YW5jZSBDb29yZGluYXRpb24gVW5pdCwgU3lyaWEgMjAyMzAzMjgiKSkNCmBgYA0KDQo8YnI+DQoNCkJlbG93IGlzIGEgYnJlYWtkb3duIG9mIGJlbmVmaWNpYXJpZXMgYmFzZWQgb24gd2hldGhlciB0aGV5IG9yaWdpbmF0ZSBmcm9tIGNhbXBzIG9yIHZpbGxhZ2VzOiANCg0KPGJyPg0KDQpgYGB7cn0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieSh2aWxsYWdlX2NhbXBzKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIHJlcGxhY2VfbmEobGlzdCh2aWxsYWdlX2NhbXBzID0gIk5BIikpICU+JSANCiAgbXV0YXRlKGAlX2JlbmVmaWNpYXJpZXNgID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzKSAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiTW9yZSB0aGFuIHR3aWNlIGFzIG1hbnkgYmVuZWZpY2lhcmllcyBmcm9tIHZpbGxhZ2VzIGFzIGZyb20gY2FtcHMiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuNikNCiAgDQpgYGANCg0KDQo8YnI+PGJyPjxicj4NCg0KIyMjIDMuMSBCeSBzdWItZGlzdHJpY3QNCg0KVGhlIHBsb3RzIGJlbG93IHNob3cgdGhlIGJyZWFrZG93biBvZiBiZW5lZmljaWFyaWVzIGJ5IHN1Yi1kaXN0cmljdC4gQ2F1dGlvbiBtdXN0IGJlIHRha2VuIHRvIGVuc3VyZSB0aGF0IGFsbG9jYXRpb25zIGFyZSBmYWlyIGFjcm9zcyB0aGUgYWZmZWN0ZWQgYXJlYXM6IHRoZXJlIGFyZSBudW1lcm91cyBzdWItZGlzdHJpY3RzIHdoZXJlIGEgdmVyeSBsYXJnZSBwcm9wb3J0aW9uIG9mIHRoZSB0b3RhbCBwb3B1bGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVhY2hlZCBieSBtdWx0aS1wdXJwb3NlIGNhc2gsIGluIHBhcnRpY3VsYXIsIEphbmRhaXJpcywgSGFpcm0sIFNhbHFpbiBhbmQgU2hhcmFuLiANCg0KUmVzcG9uc2UgYWN0aXZpdGllcyBtdXN0IGJlIHByb3BvcnRpb25hbCB3aXRoIHRoZSBtYWduaXR1ZGUgYW5kIHNldmVyaXR5IG9mIGVhcnRocXVha2UgZGFtYWdlLiBPdmVyYWxsb2NhdGlvbiBkZXByaXZlcyBhZmZlY3RlZCBwZXJzb25zIG9mIHRoZSBhaWQgdGhleSBhcmUgZHVlLiANCg0KVGhlIGF2ZXJhZ2UgcGVyY2VudGFnZSBvZiB0aGUgcG9wdWxhdGlvbiByZWFjaGVkLCBvZiBhbGwgc3ViLWRpc3RyaWN0cywgaXMgMTAuNjMlLiANCg0KPGJyPg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTh9DQpjYnIgJT4lIA0KICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgbXV0YXRlKHN1Yl9kaXN0cmljdCA9IHJlY29kZShzdWJfZGlzdHJpY3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzYWxxaW4iID0gIlNhbHFpbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZnJpbiIgPSAiQWZyaW4iKSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgc3ViX2Rpc3RyaWN0KSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIikgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBtdXRhdGUoc3ViX2Rpc3RyaWN0ID0gZmN0X3Jlb3JkZXIoc3ViX2Rpc3RyaWN0LCBiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBiZW5lZmljaWFyaWVzLCB5ID0gc3ViX2Rpc3RyaWN0KSkgKyANCiAgZ2VvbV9jb2woYWVzKGZpbGwgPSBnb3Zlcm5vcmF0ZSkpICsgDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShiZW5lZmljaWFyaWVzKSksIA0KICAgICAgICAgICAgaGp1c3QgPSAiaW53YXJkIikgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoYmVnaW4gPSAuMykgKyANCiAgbGFicyh0aXRsZSA9ICJNUEMgYmVuZWZpY2lhcmllcyBieSBkaXN0cmljdCIsIA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJhcyBvZiAiLCByZXBvcnRfZGF0ZSksIA0KICAgICAgIHkgPSAiIikgKyANCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArIA0KDQpobm8gJT4lIA0KICBmaWx0ZXIoYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSA9IGFkbWluMW5hbWVfZW4sIGFkbWluM3Bjb2RlKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9wb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIikgJT4lDQogIGxlZnRfam9pbigNCiAgICBjYnIgJT4lDQogICAgICAgbXV0YXRlKHN1Yl9kaXN0cmljdCA9IHJlY29kZShzdWJfZGlzdHJpY3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzYWxxaW4iID0gIlNhbHFpbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZnJpbiIgPSAiQWZyaW4iKSkgJT4lIA0KICAgICAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgIA0KICAgICAgZ3JvdXBfYnkoc3ViX2Rpc3RyaWN0LCBhZG1pbjNwY29kZSkgJT4lIA0KICAgICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgICAgICAuZ3JvdXBzID0gImRyb3AiKSwgDQogICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShzdWJfZGlzdHJpY3QpKSAlPiUgDQogIG11dGF0ZShzdWJfZGlzdHJpY3QgPSBmY3RfcmVvcmRlcihzdWJfZGlzdHJpY3QsIGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIG11dGF0ZShwY19yZWFjaGVkID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHRvdGFsX3BvcHVsYXRpb24gKiAxMDAsIGRpZ2l0cyA9IDEpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHBjX3JlYWNoZWQsIHkgPSBzdWJfZGlzdHJpY3QpKSArDQogIGdlb21fY29sKGFlcyhmaWxsID0gZ292ZXJub3JhdGUpKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEocGNfcmVhY2hlZCkpLCANCiAgICAgICAgICAgIGhqdXN0ID0gImlud2FyZCIpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoYmVnaW4gPSAuMykgKyANCiAgbGFicyh0aXRsZSA9ICJQZXJjZW50IG9mIHBvcHVsYXRpb24gcmVhY2hlZCIsIA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJhcyBvZiAiLCByZXBvcnRfZGF0ZSksIA0KICAgICAgIHkgPSAiIiwgDQogICAgICAgeCA9ICIlIG9mIHBvcHVsYXRpb24gcmVhY2hlZCIpICsNCiAgDQogIHBsb3RfbGF5b3V0KGd1aWRlcyA9ICJjb2xsZWN0IikgJiANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpDQoNCmdnc2F2ZSgiLi9pbWcvbXBjX2J5X3N1Yl9kaXN0cmljdC5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDguMjcsIHdpZHRoID0gMTEuNjksIHVuaXRzID0gImluIikgIA0KYGBgDQoNCjxicj48YnI+DQoNCiMjIyAzLjIgQ29tcGFyaXNvbnMgd2l0aCBQSU4gYW5kIGVhcnRocXVha2UgZGFtYWdlDQoNClRoZSBwbG90IGJlbG93IHNob3dzIHRoZSB0b3RhbCBwb3B1bGF0aW9uIG9mIGVhY2ggc3ViLWRpc3RyaWN0IG9uIHRoZSB4LWF4aXMgKGZvciB0aGUgbW9tZW50LCBhbGwgcGVyc29ucyBpbiB0aGVzZSBhcmVhcyBhcmUgYXNzdW1lZCB0byBiZSBhZmZlY3RlZCBhbmQgYXJlIGluY2x1ZGVkIGluIHRoZSBQSU4pIGFuZCB0aGUgbnVtYmVyIG9mIGJlbmVmaWNpYXJpZXMgb24gdGhlIHktYXhpcy4gDQoNClRoZSBzaXplIG9mIGVhY2ggcG9pbnQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZGVhZCBvciB3b3VuZGVkIHBlcnNvbnMgdGhlcmUgcGVyIDEwMCwwMDAuIA0KDQo8YnI+DQoNCmBgYHtyIGZpZy5oZWlnaHQ9Nn0NCmVxICU+JSANCiAgbGVmdF9qb2luKGhubyAlPiUgDQogICAgICAgICAgICAgIHNlbGVjdChnb3Zlcm5vcmF0ZSA9IGFkbWluMW5hbWVfZW4sIA0KICAgICAgICAgICAgICAgICAgICAgZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuLCANCiAgICAgICAgICAgICAgICAgICAgIHN1Yl9kaXN0cmljdCA9IGFkbWluM25hbWVfZW4sIA0KICAgICAgICAgICAgICAgICAgICAgYWRtaW4zcGNvZGUpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lDQogIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmIA0KICAgICAgICAgICBkaXN0cmljdCAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCBzdWJfZGlzdHJpY3QsIGFkbWluM3Bjb2RlKSAlPiUgDQogIHN1bW1hcmlzZSh3b3VuZGVkX2RlYWQgPSBzdW0od291bmRlZF9kZWFkLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gc3VtKGRhbWFnZWRfaG91c2VzLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgbGVmdF9qb2luKGhubyAlPiUgDQogICAgICAgICAgICAgIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmDQogICAgICAgICAgICAgICAgICAgICAgIGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoYWRtaW4zcGNvZGUpICU+JQ0KICAgICAgICAgICAgICBzdW1tYXJpc2UocG9wdWxhdGlvbiA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uLCBuYS5ybSA9IFRSVUUpKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgbXV0YXRlKHdvdW5kZWRfZGVhZF8xMDBrID0gcm91bmQod291bmRlZF9kZWFkIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMiksIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXNfMTAwayA9IHJvdW5kKGRhbWFnZWRfaG91c2VzIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMikpICU+JSANCiAgICBsZWZ0X2pvaW4oY2JyICU+JSANCiAgICAgICAgICAgICAgICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lIA0KICAgICAgICAgICAgICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpLCANCiAgICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHBvcHVsYXRpb24sIHkgPSBiZW5lZmljaWFyaWVzKSkgKyANCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IHdvdW5kZWRfZGVhZF8xMDBrKSkgKyANCiAgZ2VvbV90ZXh0X3JlcGVsKGFlcyhsYWJlbCA9IHN1Yl9kaXN0cmljdCksDQogICAgICAgICAgICAgICAgICAgcG9pbnQucGFkZGluZyA9IC41LCANCiAgICAgICAgICAgICAgICAgICBzZWdtZW50LmNvbG9yID0gImdyZXk1MCIsIHNpemUgPSAzKSArDQogIHNjYWxlX3hfbG9nMTAoYnJlYWtzID0gYygwLCAzMDAwLCAxMDAwMCwgMzAwMDAsIDEwMDAwMCwgMzAwMDAwLCAxMDAwMDAwKSwgDQogICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEpICsgDQogIHNjYWxlX3lfbG9nMTAoYnJlYWtzID0gYygwLCAxMDAwLCAzMDAwLCAxMDAwMCwgMzAwMDAsIDEwMDAwMCksDQogICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEpICsgDQogIHNjYWxlX3NpemUoYnJlYWtzID0gYygwLCAxMDAsIDUwMCwgMTAwMCwgMzAwMCkpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSwgY29sb3VyID0gImJsdWUiLCBzaXplID0gLjUpICsNCiAgbGFicyh0aXRsZSA9ICJQb3B1bGF0aW9uIGFuZCBNUEMgYmVuZWZpY2lhcmllcyBieSBzdWItZGlzdHJpY3QiLA0KICAgICAgIHN1YnRpdGxlID0gIlNpemUgaW5kaWNhdGVzIGRlYWQvd291bmRlZCBwZXIgMTAwLDAwMDAiLCANCiAgICAgICB4ID0gIlBvcHVsYXRpb24iLCANCiAgICAgICB5ID0gIkJlbmVmaWNpYXJpZXMiLCANCiAgICAgICBzaXplID0gIkRlYWQvd291bmRlZFxucGVyIDEwMGsiLCANCiAgICAgICBjYXB0aW9uID0gIkRhdGEgZnJvbSBDV0csIEZTTCBhbmQgQUNVIikgKw0KICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAuNSkpIA0KICANCmdnc2F2ZSgiLi9pbWcvcG9wX2Jlbl9zY2F0dGVyLnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gOC4yNywgd2lkdGggPSAxMS42OSwgdW5pdHMgPSAiaW4iKQ0KIA0KYGBgDQoNCjxicj4gDQoNClRoZSBoaWdoZXIgb3IgbG93ZXIgYSBzdWItZGlzdHJpY3QgaXMgYWJvdmUgdGhlIGJsdWUgbGluZSwgdGhlIG1vcmUgZGlzcHJvcG9ydGlvbmF0ZSB0aGUgbnVtYmVyIG9mIGJlbmVmaWNpYXJpZXMgYWxsb2NhdGVkIHRvIHRoYXQgbG9jYXRpb24gYXJlLiANCg0KVGhpcyBzaG91bGQgYWxzbyBiZSBjb21wYXJlZCB0byBlYWNoIHN1Yi1kaXN0cmljdCdzIHNoYXJlIG9mIHRoZSBlYXJ0aHF1YWtlIGRhbWFnZS4gT2YgcGFydGljdWxhciBub3RlLCBzdWItZGlzdHJpY3RzIGluIGdyZXkgaGF2ZSB5ZXQgdG8gcmVjZWl2ZSBhbnkgTVBDIGFzc2lzdGFuY2UuIA0KDQo8YnI+DQoNCmBgYHtyIGZpZy5oZWlnaHQ9Nn0NCmVxICU+JSANCiAgbGVmdF9qb2luKGhubyAlPiUgDQogICAgICAgICAgICAgIHNlbGVjdChnb3Zlcm5vcmF0ZSA9IGFkbWluMW5hbWVfZW4sIA0KICAgICAgICAgICAgICAgICAgICAgZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuLCANCiAgICAgICAgICAgICAgICAgICAgIHN1Yl9kaXN0cmljdCA9IGFkbWluM25hbWVfZW4sIA0KICAgICAgICAgICAgICAgICAgICAgYWRtaW4zcGNvZGUpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lDQogIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmIA0KICAgICAgICAgICBkaXN0cmljdCAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCBzdWJfZGlzdHJpY3QsIGFkbWluM3Bjb2RlKSAlPiUgDQogIHN1bW1hcmlzZSh3b3VuZGVkX2RlYWQgPSBzdW0od291bmRlZF9kZWFkLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gc3VtKGRhbWFnZWRfaG91c2VzLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgbGVmdF9qb2luKGhubyAlPiUgDQogICAgICAgICAgICAgIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmDQogICAgICAgICAgICAgICAgICAgICAgIGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoYWRtaW4zcGNvZGUpICU+JQ0KICAgICAgICAgICAgICBzdW1tYXJpc2UocG9wdWxhdGlvbiA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uLCBuYS5ybSA9IFRSVUUpKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgbXV0YXRlKHdvdW5kZWRfZGVhZF8xMDBrID0gcm91bmQod291bmRlZF9kZWFkIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMiksIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXNfMTAwayA9IHJvdW5kKGRhbWFnZWRfaG91c2VzIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMikpICU+JSANCiAgICBsZWZ0X2pvaW4oY2JyICU+JSANCiAgICAgICAgICAgICAgICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lIA0KICAgICAgICAgICAgICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpLCANCiAgICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGRhbWFnZWRfaG91c2VzLCB5ID0gd291bmRlZF9kZWFkKSkgKyANCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IHdvdW5kZWRfZGVhZF8xMDBrLCANCiAgICAgICAgICAgICAgICAgY29sb3VyID0gYmVuZWZpY2lhcmllcykpICsgDQogIGdlb21fdGV4dF9yZXBlbChhZXMobGFiZWwgPSBzdWJfZGlzdHJpY3QpLA0KICAgICAgICAgICAgICAgICAgIHBvaW50LnBhZGRpbmcgPSAuNSwgDQogICAgICAgICAgICAgICAgICAgc2VnbWVudC5jb2xvciA9ICJncmV5NTAiLCBzaXplID0gMykgKw0KICBzY2FsZV94X2xvZzEwKGxhYmVscyA9IGNvbW1hKSArIA0KICBzY2FsZV95X2xvZzEwKGxhYmVscyA9IGNvbW1hKSArIA0KICBzY2FsZV9jb2xvdXJfdmlyaWRpcyhvcHRpb24gPSAibWFrbyIsIGRpcmVjdGlvbiA9IC0xLCANCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEpICsgDQogIHNjYWxlX3NpemUoYnJlYWtzID0gYygwLCAxMDAsIDUwMCwgMTAwMCwgMzAwMCkpICsgDQogIGxhYnMoeCA9ICJOdW1iZXIgb2YgZGFtYWdlZCBob3VzZXMiLCANCiAgICAgICB5ID0gIk51bWJlciBvZiB3b3VuZGVkIGFuZCBkZWFkIiwgDQogICAgICAgdGl0bGUgPSAiTWFnbml0dWRlIG9mIGVhcnRocXVha2UgaW1wYWN0cyBieSBzdWItZGlzdHJpY3QiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIHNob3dzIHNldmVyaXR5ICh3b3VuZGVkL2RlYWQgcGVyIDEwMGspIGFuZCBjb2xvdXIgc2hvd3MgYmVuZWZpY2lhcmllcyIsIA0KICAgICAgIHNpemUgPSAiV291bmRlZC9kZWFkXG5wZXIgMTAwayIsIA0KICAgICAgIGNvbG91ciA9ICJCZW5lZmljaWFyaWVzIiwgDQogICAgICAgY2FwdGlvbiA9ICJEYXRhIGZyb20gQ1dHLCBGU0wgYW5kIEFDVSIpDQoNCmdnc2F2ZSgiLi9pbWcvZWFydGhxdWFrZV9pbXBhY3Rfc2NhdHRlci5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDguMjcsIHdpZHRoID0gMTEuNjksIHVuaXRzID0gImluIikNCmBgYA0KDQo8YnI+DQoNClRoZSBDV0cgaXMgY3VycmVudGx5IHdvcmtpbmcgb24gYSBwcmlvcml0aXNhdGlvbiBzY29yZSwgd2hpY2ggY2FuIGJlIGEgdXNlZnVsIHNob3J0aGFuZCwgdGhhdCB3aWxsIHRha2UgaW50byBhY2NvdW50IHByZS1leGlzdGluZyB2dWxuZXJhYmlsaXR5IChsaWtlbHkgZnJvbSB0aGUgTVNOQSkgYXMgd2VsbCBhcyBlYXJ0aHF1YWtlIGltcGFjdHMuIA0KDQo8YnI+PGJyPg0KDQoNCiMjIyAzLjMgUGxhbm5lZCBhY3Rpdml0aWVzIA0KDQoNCg0KYGBge3J9DQpjYnIgJT4lIA0KICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIlBsYW5uZWQiKSAlPiUNCiAgZmlsdGVyKGdvdmVybm9yYXRlID09ICJBbGVwcG8iKSAlPiUgIA0KICBncm91cF9ieShzdWJfZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBiZW5lZmljaWFyaWVzLCB5ID0gZmN0X3Jlb3JkZXIoc3ViX2Rpc3RyaWN0LCBiZW5lZmljaWFyaWVzKSkpICsgDQogIGdlb21fY29sKGZpbGwgPSAiIzQxYjZjNCIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKGJlbmVmaWNpYXJpZXMpKSwgaGp1c3QgPSAiaW53YXJkIikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsgDQogIGxhYnModGl0bGUgPSAiUGxhbm5lZCBiZW5lZmljaWFyaWVzIC0tIEFsZXBwbyIsIA0KICAgICAgIHggPSAiUGxhbm5lZCBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgeSA9ICIiKSArIA0KDQpjYnIgJT4lIA0KICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIlBsYW5uZWQiKSAlPiUNCiAgZmlsdGVyKGdvdmVybm9yYXRlID09ICJJZGxlYiIgJiAhaXMubmEoYWRtaW4zcGNvZGUpKSAlPiUgIA0KICBncm91cF9ieShzdWJfZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBiZW5lZmljaWFyaWVzLCB5ID0gZmN0X3Jlb3JkZXIoc3ViX2Rpc3RyaWN0LCBiZW5lZmljaWFyaWVzKSkpICsgDQogIGdlb21fY29sKGZpbGwgPSAibGlnaHRnb2xkZW5yb2QiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShiZW5lZmljaWFyaWVzKSksIGhqdXN0ID0gImlud2FyZCIpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHVuaXRfZm9ybWF0KHVuaXQgPSAiSyIsIHNjYWxlID0gMWUtMywgYWNjdXJhY3kgPSAxKSkgKyANCiAgbGFicyh0aXRsZSA9ICJQbGFubmVkIGJlbmVmaWNpYXJpZXMgLS0gSWRsZWIiLCANCiAgICAgICB4ID0gIlBsYW5uZWQgYmVuZWZpY2lhcmllcyIsIA0KICAgICAgIHkgPSAiIikgICsgDQoNCiAgcGxvdF9sYXlvdXQod2lkdGhzID0gYygyLCAzKSkNCg0KZ2dzYXZlKCIuL2ltZy9wbGFubmVkX2J5X3N1Yl9kaXN0cmljdC5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDguMjcsIHdpZHRoID0gMTEuNjksIHVuaXRzID0gImluIikNCg0KYGBgDQoNCjxicj4NCg0KYGBge3J9DQpjYnIgJT4lIGdyb3VwX2J5KHByb2plY3Rfc3RhdHVzKSAlPiUgDQogIHN1bW1hcmlzZShwYXJ0bmVycyA9IG5fZGlzdGluY3QoaW1wbGVtZW50aW5nX3BhcnRuZXIpLCANCiAgICAgICAgICAgIGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSByb3VuZChiZW5lZmljaWFyaWVzIC8gc3VtKGJlbmVmaWNpYXJpZXMpICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKCIxMiBwYXJ0bmVycyBoYXZlIHJlcG9ydGVkIHBsYW5uZWQgYWN0aXZpdGllcyIpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUNCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC42KQ0KYGBgDQoNCjxicj4NCg0KVGhlIHN1bSBvZiBwbGFubmVkIGJlbmVmaWNpYXJpZXMgaXMgYHIgZm9ybWF0KGZpbHRlcihjYnIsIHByb2plY3Rfc3RhdHVzID09ICJQbGFubmVkIikgJT4lIHtzdW0oLiRiZW5lZmljaWFyaWVzKX0sIGJpZy5tYXJrID0gIiwiKWAuIElmIHRoaXMgaXMgdGhlIGV4dGVudCBvZiBhbGwgcGxhbm5lZCBNUEMgYWN0aXZpdGllcywgdGhlIENXRyBhcyBhIHdob2xlIGNhbiBleHBlY3QgdG8gcmVhY2ggYXJvdW5kIDc3JSBvZiBpdHMgdGFyZ2V0IG9mIDY2Miw5NDIgcGVyc29ucy4gDQoNCjxicj4NCg0KDQoNCmBgYHtyfQ0KY2JyICU+JSANCiAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJQbGFubmVkIikgJT4lIA0KICBtdXRhdGUobW9udGggPSBtb250aChkaXN0cmlidXRpb25fZGF0ZSwgbGFiZWwgPSBUUlVFKSwgDQogICAgICAgICBtb250aCA9IGFzLmNoYXJhY3Rlcihtb250aCkpICU+JSANCiAgbXV0YXRlKG1vbnRoID0gaWZlbHNlKG1vbnRoICVpbiUgYygiRmViIiwgIk1hciIpIHwgaXMubmEobW9udGgpLCAiTkEiLCBtb250aCkpICU+JSANCiAgZ3JvdXBfYnkobW9udGgpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUobW9udGggPSBmY3RfcmVsZXZlbChtb250aCwgYygiQXByIiwgIk1heSIsICJKdW4iKSkpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X2NhcHRpb24oIlBsYW5uZWQgYmVuZWZpY2lhcmllcyBieSBtb250aCIpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSAxLCBpbmxpbmUgPSBUUlVFLCByZWZfc3ltYm9scyA9ICIxIiwgcGFydCA9ICJoZWFkZXIiLA0KICAgICAgICAgICB2YWx1ZSA9IGFzX3BhcmFncmFwaCgiU29tZSBkYXRlcyBhcmUgbWlzc2luZyBvciBpbXByb3Blcmx5IGVuY29kZWQiKSkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjUpDQpgYGANCg0KDQoNCjxicj48YnI+PGJyPg0KDQojIDQuIENhc2ggcmVzcG9uc2UgYWN0b3JzIGFuZCBjYXNoIGRpc2J1cnNlZA0KDQpgYGB7ciB0b3RhbHMsIGV2YWwgPSBGQUxTRX0NCg0KZnNsICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBtdXRhdGUodXNkX3RvdGFsID0gZmFtaWxpZXMgKiBxdWFudGl0eSkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHVzZF90b3RhbCA9IHN1bSh1c2RfdG90YWwsIG5hLnJtID0gVFJVRSkpDQoNCmBgYA0KDQpVU0QgYHIgcGFzdGUocm91bmQoY2JyICU+JSBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kdG90YWxfdXNkKX0gLyAxMDAwMDAwLCBkaWdpdHMgPSAxKSwgIm1pbGxpb24iKWAgaGFzIGJlZW4gZGlzdHJpYnV0ZWQgYWNyb3NzIGByIGNiciAlPiUgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge25fZGlzdGluY3QoLiRhZG1pbjRwY29kZSl9YCBjb21tdW5pdGllcyBhbmQgYHIgY2JyICU+JSBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7bl9kaXN0aW5jdCguJGFkbWluM3Bjb2RlKX1gIHN1Yi1kaXN0cmljdHMgaW4gTlcgU3lyaWEuDQoNCjxicj4NCg0KYGBge3J9DQpjYnIgJT4lIA0KICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgZ3JvdXBfYnkoaW1wbGVtZW50aW5nX3BhcnRuZXIsIA0KICAgICAgICAgICBhZG1pbjJwY29kZSwgDQogICAgICAgICAgIGFkbWluNHBjb2RlKSAlPiUgDQogIHNsaWNlKHdoaWNoLm1heChiZW5lZmljaWFyaWVzKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBncm91cF9ieShpbXBsZW1lbnRpbmdfcGFydG5lcikgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGRpc3RyaWN0cyA9IG5fZGlzdGluY3QoYWRtaW4ycGNvZGUpLCANCiAgICAgICAgICAgIGNvbW11bml0aWVzID0gbl9kaXN0aW5jdChhZG1pbjRwY29kZSkpICU+JSANCiAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24oIlJlYWNoIGFuZCBmb290cHJpbnQgb2YgY2FzaCByZXNwb25zZSBhY3RvcnMiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjgpICU+JSANCiAgZm9vdG5vdGUoYXNfcGFyYWdyYXBoKCJPbmx5IHBhcnRuZXJzIHdobyBwcm92aWRlZCBtb3JlIHRoYW4gVVNEIDEwMC9mYW1pbHkvbW9udGgiKSwgDQogICAgICAgICAgIGkgPSAxLCBqID0gMSwgcGFydCA9ICJoZWFkZXIiLCBpbmxpbmUgPSBUUlVFLCByZWZfc3ltYm9scyA9ICIxIikNCiAgDQpgYGANCg0KPGJyPg0KDQpJbiB0aGUgc2NhdHRlcnBsb3QgYmVsb3csIGVhY2ggcG9pbnQgaXMgYSBzaW5nbGUgY2FzaCB3b3JraW5nIGdyb3VwIHBhcnRuZXIuIFRoZSB4LWF4aXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyByZWFjaGVkIHBlciBhZ2VuY3kgYW5kIHRoZSB5LWF4aXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY29tbXVuaXRpZXMgKGFkbWluNCkgcmVhY2hlZC4gTW91c2Ugb3ZlciBlYWNoIHBvaW50IGZvciBtb3JlIGRldGFpbHMuDQoNCjxicj4NCg0KDQoNCmBgYHtyIHBhcnRuZXItc2NhdHRlcn0NCnBhcnRuZXJfc2NhdHRlciA8LSBjYnIgJT4lIA0KICAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGltcGxlbWVudGluZ19wYXJ0bmVyLCANCiAgICAgICAgICAgYWRtaW4ycGNvZGUsIA0KICAgICAgICAgICBhZG1pbjRwY29kZSkgJT4lIA0KICBzbGljZSh3aGljaC5tYXgoYmVuZWZpY2lhcmllcykpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgZ3JvdXBfYnkoaW1wbGVtZW50aW5nX3BhcnRuZXIpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBjb21tdW5pdGllcyA9IG5fZGlzdGluY3QoYWRtaW40cGNvZGUpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGJlbmVmaWNpYXJpZXMsIHkgPSBjb21tdW5pdGllcykpICsNCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IGJlbmVmaWNpYXJpZXMsIA0KICAgICAgICAgICAgICAgICB0ZXh0ID0gcGFzdGUwKGltcGxlbWVudGluZ19wYXJ0bmVyLCAiXG4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVuZWZpY2lhcmllczogIiwgZm9ybWF0KGJlbmVmaWNpYXJpZXMsIGJpZy5tYXJrID0gIiwiKSwgIlxuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW11bml0aWVzOiAiLCBjb21tdW5pdGllcykpKSArIA0KICBzY2FsZV94X2xvZzEwKGxhYmVscyA9IGNvbW1hKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsgDQogIGxhYnMoeCA9ICJCZW5lZmljaWFyaWVzIHJlYWNoZWQiLCANCiAgICAgICB5ID0gIkNvbW11bml0aWVzIChhZG1pbjQpIHJlYWNoZWQiLCANCiAgICAgICB0aXRsZSA9ICJJbXBsZW1lbnRpbmcgcGFydG5lcnMgLS0gYmVuZWZpY2lhcmllcyBhbmQgY29tbXVuaXRpZXMgcmVhY2hlZCIpDQoNCmdncGxvdGx5KHBhcnRuZXJfc2NhdHRlciwgdG9vbHRpcCA9IGMoInRleHQiKSkgJT4lIA0KICBsYXlvdXQoc2hvd2xlZ2VuZCA9IFRSVUUsIGxlZ2VuZCA9IGxpc3QoZm9udCA9IChsaXN0KHNpemUgPSA2KSkpKSAlPiUgDQogIHBsb3RseTo6c3R5bGUoaG92ZXJvbiA9ICJwb2ludCIpICU+JSANCiAgbGF5b3V0KHRpdGxlID0gbGlzdCh0ZXh0ID0gcGFzdGUwKCJCZW5lZmljaWFyaWVzIGFuZCBjb21tdW5pdGllcyByZWFjaGVkIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3VwPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FzaCByZXNwb25zZSBpbXBsZW1lbnRpbmcgcGFydG5lcnM7IG1vdXNlIG92ZXIgZm9yIGRldGFpbHMiLCI8L3N1cD4iKSkpDQoNCg0KYGBgDQoNCg0KDQo8YnI+PGJyPg0KDQojIyMgNC4xIFVTRCBkaXNidXJzZWQgcGVyIHBhcnRuZXINCg0KPGJyPg0KDQpgYGB7cn0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieShpbXBsZW1lbnRpbmdfcGFydG5lcikgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfdXNkID0gc3VtKHRvdGFsX3VzZCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBmYW1pbGllcyA9IHN1bShmYW1pbGllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUodXNkX3Blcl9mYW0gPSByb3VuZCh0b3RhbF91c2QgLyBmYW1pbGllcywgZGlnaXRzID0gMiksIA0KICAgICAgICAgYCVfdXNkX3RvdGFsYCA9IHJvdW5kKHRvdGFsX3VzZCAvIHN1bSh0b3RhbF91c2QpICogMTAwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSAyKSkgJT4lIA0KICBhcnJhbmdlKGRlc2ModG90YWxfdXNkKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKCJVU0QgZGlzYnVyc2VkIGFuZCBmYW1pbGllcyByZWFjaGVkIGJ5IHBhcnRuZXIiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBmbGV4dGFibGU6OnNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOCkNCmBgYA0KDQo8YnI+DQoNClRoZSBDV0cgaXMgY3VycmVudGx5IHdvcmtpbmcgd2l0aCBvdGhlciBDbHVzdGVycyB0byBjb25zb2xpZGF0ZSBhbGwgY2FzaC1iYXNlZCBhY3Rpdml0aWVzIGFuZCB3aWxsIHNvb24gYmUgYWJsZSB0byBwcm92aWRlIG1vcmUgY29tcHJlaGVuc2l2ZSByZXBvcnRpbmcuIA0KDQoNCjxicj48YnI+PGJyPg0KDQojIDUuIEFubmV4ZXMNCg0KPGJyPg0KDQojIyMgNS4xIEludGVyYWN0aXZlIHJlZmVyZW5jZSB0YWJsZSBhdCBzdWItZGlzdHJpY3QgbGV2ZWwNCg0KQ29sdW1ucyBpbmNsdWRlOiANCmBnb3Zlcm5vcmF0ZWAsIGBkaXN0cmljdGAsIGBzdWItZGlzdHJpY3RgLCANCmB0b3RhbCBwb3B1bGF0aW9uYCwgYGJlbmVmaWNpYXJpZXNgLCBgdG90YWwgdXNkIGRpc2J1cnNlZGAsIA0KYHdvdW5kZWQgYW5kIGRlYWRgLCBgd291bmRlZCBhbmQgZGVhZCBwZXIgMTAwa2AsIA0KYGRhbWFnZWQgaG91c2VzYCwgYGRhbWFnZWQgaG91c2VzIHBlciAxMDBrYCwgDQpgYWRtaW4zcGNvZGVgDQoNCmBgYHtyfQ0KZXEgJT4lIA0KICBsZWZ0X2pvaW4obG9jYXRpb25zICU+JSBkaXN0aW5jdChhZG1pbjNwY29kZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfZGlzdHJpY3QgPSBhZG1pbjNuYW1lX2VuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3JhdGUgPSBhZG1pbjFuYW1lX2VuKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgbGVmdF9qb2luKGNiciAlPiUgDQogICAgICAgICAgICAgIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lIA0KICAgICAgICAgICAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3VzZCA9IHN1bSh0b3RhbF91c2QsIG5hLnJtID0gVFJVRSkpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lIA0KICBzZWxlY3QoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCBzdWJfZGlzdHJpY3QsIA0KICAgICAgICAgdG90YWxfcG9wdWxhdGlvbiwgDQogICAgICAgICBiZW5lZmljaWFyaWVzLCB0b3RhbF91c2QsIA0KICAgICAgICAgd291bmRlZF9kZWFkLCB3b3VuZGVkX2RlYWRfMTAwaywgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlcywgZGFtYWdlZF9ob3VzZXNfMTAwaywgDQogICAgICAgICBhZG1pbjNwY29kZSkgJT4lIA0KICBkYXRhdGFibGUob3B0aW9ucyA9IGxpc3QocGFnZUxlbmd0aCA9IDEwLCBzY3JvbGxYID0gVFJVRSksIA0KICAgICAgICAgICAgZmlsdGVyID0gbGlzdChwb3NpdGlvbiA9ICJ0b3AiLCBjbGVhciA9IEZBTFNFKSwNCiAgICAgICAgICAgIGNhcHRpb24gPSBodG1sdG9vbHM6OnRhZ3MkY2FwdGlvbihzdHlsZSA9ICdjYXB0aW9uLXNpZGU6IHRvcDsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZToxMjAlIDsnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZmVyZW5jZSB0YWJsZSAtLSBFYXJ0aHF1YWtlIGltcGFjdHMsIGZyb20gQUNVLCBleHRyYWN0ZWQgMjAyMzAzMjgiKSkgJT4lIA0KICBmb3JtYXRTdHlsZSgwLCB0YXJnZXQgPSAicm93IiwgbGluZUhlaWdodCA9ICI4MCUiLCBmb250U2l6ZSA9ICI4MCUiKSAlPiUgDQogIGZvcm1hdFJvdW5kKGMoIndvdW5kZWRfZGVhZF8xMDBrIiwgImRhbWFnZWRfaG91c2VzXzEwMGsiKSwgZGlnaXRzID0gMikgJT4lIA0KICBmb3JtYXRDdXJyZW5jeShjKCJ0b3RhbF9wb3B1bGF0aW9uIiwgDQogICAgICAgICAgICAgICAgICAgIndvdW5kZWRfZGVhZCIsICJkYW1hZ2VkX2hvdXNlcyIsIA0KICAgICAgICAgICAgICAgICAgICJiZW5lZmljaWFyaWVzIiwgInRvdGFsX3VzZCIpLCANCiAgICAgICAgICAgICAgICAgY3VycmVuY3kgPSAiIiwgaW50ZXJ2YWwgPSAzLCBtYXJrID0gIiwiKSAlPiUNCiAgZm9ybWF0Um91bmQoYygidG90YWxfcG9wdWxhdGlvbiIsIA0KICAgICAgICAgICAgICAgICJ3b3VuZGVkX2RlYWQiLCAiZGFtYWdlZF9ob3VzZXMiLA0KICAgICAgICAgICAgICAgICJiZW5lZmljaWFyaWVzIiwgInRvdGFsX3VzZCIpLCBkaWdpdHMgPSAwKQ0KICANCmBgYA0KDQo8YnI+PGJyPg0KDQojIyMgNS4yIFJlcG9ydGluZyBxdWFsaXR5IA0KDQpUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIGlzc3VlcyBlbmNvdW50ZXJlZCBpbiB0aGUgY2xlYW5pbmcgb2YgNFcgYW5kIEZTTCBkYXRhIGFuZCB0aGVpciBpbXBhY3RzIG9uIHRoZSBxdWFsaXR5IG9mIHJlcG9ydGluZyB0aGUgQ1dHIGNhbiBwcm92aWRlLiBUaGUgcmVjb21tZW5kYXRpb25zIGJ5IHRoZSBDV0cgYXJlIGluY2x1ZGVkIHRvIGVuaGFuY2UgcmVwb3J0aW5nIHF1YWxpdHk6IA0KDQoxLiBUaGUgQ1dHIGhhcyBzaGlmdGVkIGludG8gYSBuZXcgNFdzIHRlbXBsYXRlIGZvciBiaXdlZWtseSByZXBvcnRpbmcgdG8gYmV0dGVyIGNhcHR1cmUgdGhlIGVhcnRocXVha2UgcmVzcG9uc2UuIERlYWRsaW5lcyBhcmUgc2V0IG9uIHRoZSAxMHRoIGFuZCB0aGUgMjV0aCBvZiBlYWNoIG1vbnRoLiA4IHBhcnRuZXJzIHJlcG9ydGVkIGFjaGlldmVtZW50cyBpbiBGZWJydWFyeSBhbmQgMTAgcmVwb3J0ZWQgYWNoaWV2ZW1lbnRzIGluIE1hcmNoLiBUaGUgQ1dHIGVuY291cmFnZXMgYWxsIHBhcnRuZXJzIHRvIHN1Ym1pdCBpbmNsdWRlIHRoZWlyIEphbnVhcnkgYWNoaWV2ZW1lbnRzIGluIHRoZSA0V3MuIElmIG5vIE1QQyBhY3Rpdml0aWVzIHdlcmUgaW1wbGVtZW50ZWQsIHBsZWFzZSBpbmZvcm0gdGhlIENXRyBhcyB3ZWxsLiANCg0KMi4gRm9yIHRoaXMgcmVwb3J0aW5nIHBlcmlvZCwgYWN0aXZpdGllcyBwZXJ0YWluaW5nIHRvIDE2LDQ2MCBiZW5lZmljaWFyaWVzIHdlcmUgbWlzc2luZyB0aGVpciBkYXRlcyBvciBoYWQgZGF0ZXMgaW4gdW5yZWFkYWJsZSBmb3JtYXRzLiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGBzdGFydCBkYXRlYCBhbmQgYGVuZCBkYXRlYCBhcmUgZW50ZXJlZCBpbiB0aGUgZm9ybWF0ICoqbW0vZGQveXl5eSoqIGFuZCBzZWxlY3QgdGhlIGBtb250aCBvZiByZXBvcnRpbmdgIGZyb20gdGhlIG9wdGlvbnMgaW4gdGhlIGRyb3Bkb3duIG1lbnUuIA0KDQozLiBGb3Igc2V4LWFuZC1hZ2UgZGlzZ2dyZWdhdGlvbnMsIHBsZWFzZSBkbyBub3QgYmFja2ZpbGwgdGhlc2UgY29sdW1ucyB1c2luZyBjYWxjdWxhdGlvbnMgYmFzZWQgb24gdGhlIGNlbnN1cyBvciB0aGUgTVNOQS4gSWYgbm8gZGlzYWdncmVnYXRlZCBkYXRhIGlzIGF2YWlsYWJsZSB0byB5b3VyIG9yZ2FuaXNhdGlvbiwgcGxlYXNlIGxlYXZlIHRoZXNlIGNvbHVtbnMgYmxhbmsuIA0KDQoNCg0KDQoNCg0KDQoNCg==