1. MPC response overview

As of 25 April 2023, a total of 499,957 persons or 111,121 families have been reached by MPC interventions.

A total of USD 16.6 million has been disbursed by 21 implementing agencies across 35 sub-districts.

Only beneficiaries who have received at least USD 100/family/month have been included; excludes sector-based activities such as non-MPC cash-for-food.


500,000 people reached with MPC, USD 16.6 million disbursed, 25 April 2023

governorate

district

communities

partners

households

beneficiaries

total_usd

%_BNFb

Aleppo

A'zaz

9

8

3,169

11,089

280,779

2.22

Aleppo

Afrin

96

14

23,943

111,455

3,328,966

22.29

Aleppo

Al Bab

3

4

1,982

7,141

296,258

1.43

Aleppo

Jarablus

1

3

761

2,170

114,890

0.43

Aleppo

Jebel Saman

17

9

10,445

59,502

1,546,630

11.90

Ar-Raqqa

Tell Abiad

2

1

132

547

22,256

0.11

Idleb

Ariha

3

2

459

2,330

60,350

0.47

Idleb

Harim

51

15

55,682

239,702

8,453,740

47.94

Idleb

Idleb

23

13

10,362

48,670

1,873,706

9.73

Idleb

Jisr-Ash-Shugur

32

4

4,186

17,351

574,568

3.47

Total

-

-

-

111,121

499,957

16,552,143

100.00

bAs percentage of all MPC beneficiaries reached in NW Syria;


166,136 beneficiary frequencies were reached in February 2023 and 204,860 were reached in March 2023. 142,236 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.



2. Map of activities





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 persons

governorate

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. The majority of MPC beneficiaries are from villages.


More than twice as many beneficiaries from villages as from camps

village_camps

beneficiaries

%_beneficiaries

camp

101,198

19.83

village

273,216

53.53

NA

136,013

26.65




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, Harim, 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 11.1`%.




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

Whilst it is heartening to see new sub-districts, the majority of planned allocations have been accorded to areas that have already received relatively high levels of support.



14 partners have reported planned activities

project_status

partners

beneficiaries

%_beneficiaries

Completed

20

499,957

87.72

Planned

12

64,868

11.38

Suspended

2

5,148

0.90


The sum of planned beneficiaries is 64,868. If this is the extent of all planned MPC activities, the CWG as a whole can expect to reach 85% of its target of 662,924 persons. But whilst the scale of achievements is important, it is also key to ensure that allocations are fair.


Planned beneficiaries by month

month1

beneficiaries

Apr

55,235

May

2,040

Jun

3,600

NA

3,993

1Some dates are missing or improperly encoded;




4. Cash response actors and cash disbursed

USD NA million has been distributed across 241 communities and 35 sub-districts in NW Syria.


Reach and footprint of cash response actors

implementing_partner1

beneficiaries

districts

communities

International Rescue Committee (IRC)

79,243

3

22

GOAL (GOAL)

67,015

3

82

People in Need (PIN)

39,972

6

29

Shafak Organization (SO)

35,865

5

16

Norwegian Refugee Council (NRC)

20,900

2

5

Uluslararasi Insani Yardimlasma Dernegi (IYD)

17,343

6

28

Mercy-USA for Aid and Development (MUSA)

16,971

5

37

CBRTWG-031

15,413

6

55

Ihsan for Relief and Development

15,197

3

20

Violet Organization

14,228

3

17

Mercy Without Limits

13,016

4

10

Bahar Organization (BO)

12,000

1

1

World Vision International (WVI)

7,008

1

4

Welthungerhilfe (WHH)

4,830

4

4

Syrian Association for Relief and Development (SARD)

3,700

5

7

Ghiras Al Nahda (GAN)

3,050

1

2

MASRRAT

2,692

3

3

Elaf for relief and development

1,750

1

1

CBRTWG-033

1,455

2

4

Ataa Humanitarian Relief Association (ATAA)

213

1

2

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 partner

implementing_partner

total_usd

families

usd_per_fam

%_usd_total

GOAL (GOAL)

3,744,300

24,962

150.00

22.62

International Rescue Committee (IRC)

2,117,250

14,115

150.00

12.79

Ataa Humanitarian Relief Association (ATAA)

1,784,785

7,201

247.85

10.78

Shafak Organization (SO)

1,672,600

11,837

141.30

10.11

Norwegian Refugee Council (NRC)

1,266,450

8,443

150.00

7.65

People in Need (PIN)

1,173,900

7,826

150.00

7.09

Ihsan for Relief and Development

689,550

4,597

150.00

4.17

Violet Organization

653,700

4,358

150.00

3.95

CBRTWG-031

548,800

6,150

89.24

3.32

Mercy-USA for Aid and Development (MUSA)

530,300

5,402

98.17

3.20

Mercy Without Limits

438,372

3,325

131.84

2.65

Uluslararasi Insani Yardimlasma Dernegi (IYD)

428,325

3,211

133.39

2.59

Bahar Organization (BO)

360,000

2,400

150.00

2.17

Welthungerhilfe (WHH)

344,400

2,296

150.00

2.08

World Vision International (WVI)

301,200

2,008

150.00

1.82

Syrian Association for Relief and Development (SARD)

155,612

1,089

142.89

0.94

Elaf for relief and development

122,500

350

350.00

0.74

Ghiras Al Nahda (GAN)

91,500

610

150.00

0.55

MASRRAT

81,000

540

150.00

0.49

CBRTWG-033

25,100

251

100.00

0.15

Social Development International

22,500

150

150.00

0.14


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:

  1. 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, with 12 partners having reported so far in April. If no MPC activities were implemented, please inform the CWG as well.

  2. For this reporting period, activities pertaining to 19,886 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.

  3. 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.

  4. The Cash Working Group is currently only collecting planned and implemented Multipurpose Cash achievements. Whilst the CWG welcomes additional inputs on other CVA activities, we also want to ensure that the reporting load is as low as possible for partners i.e. if an agency has implemented Cash-for-Work, this should be reported to the ERL Cluster. The CWG will work with all Clusters to develop a consolidated picture of response-wide CVA interventions.

LS0tDQp0aXRsZTogIk5vcnRod2VzdCBTeXJpYSBDYXNoIFdvcmtpbmcgR3JvdXAgRWFydGhxdWFrZSBSZXNwb25zZSBCdWxsZXRpbiINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IHJlYWRhYmxlDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogbm8NCiAgICBjb2xsYXBzZWQ6IG5vDQphbHdheXNfYWxsb3dfaHRtbDogeWVzDQotLS0NCg0KYGBge2NzcywgZWNobz1GQUxTRX0NCg0KI1RPQzo6YmVmb3JlIHsNCiAgY29udGVudDogIiI7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBoZWlnaHQ6IDcwcHg7DQogIG1hcmdpbjogMmVtIDIwcHggNDBweCAyMHB4Ow0KICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIk5XUy1DV0cgbG9nby5QTkciKTsNCiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOw0KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KfQ0KYGBgDQoNCmBgYHs9aHRtbH0NCjxzdHlsZT4NCiAgICBib2R5IC5tYWluLWNvbnRhaW5lciB7DQogICAgICAgIG1heC13aWR0aDogMTI4MHB4Ow0KICAgIH0NCjwvc3R5bGU+DQpgYGANCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIGZpZy53aWR0aD05LCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHN0cmluZ2kpDQpsaWJyYXJ5KHBhbmRlcikNCmxpYnJhcnkoamFuaXRvcikNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeShza2ltcikNCmxpYnJhcnkocGF0Y2h3b3JrKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoaGVyZSkNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoZmxleHRhYmxlKQ0KbGlicmFyeShtZGVwcml2KQ0KbGlicmFyeShnZ3JlcGVsKQ0KbGlicmFyeShhbnl0aW1lKQ0KbGlicmFyeSh0aWR5dGV4dCkNCg0KdGhlbWVfc2V0KHRoZW1lX2xpZ2h0KCkpDQoNCiMgZGlzYWJsaW5nIHNjaWVudGlmaWMgbm90YXRpb24NCm9wdGlvbnMoc2NpcGVuID0gMTAwKQ0KDQojIHBhbmRlciB0YWJsZXMgYWxsIGluIG9uZSByb3cNCnBhbmRlck9wdGlvbnMoJ3RhYmxlLnNwbGl0LnRhYmxlJywgSW5mKQ0KDQojIHBhbmRlciB0aG91c2FuZHMgc2VwYXJhdG9yDQpwYW5kZXJPcHRpb25zKCJiaWcubWFyayIsICIsIikNCg0KIyByZXBsYWNlIA0Kb3B0cyA8LSBvcHRpb25zKGtuaXRyLmthYmxlLk5BID0gIiIpDQoNCmAlb3V0JWAgPC0gTmVnYXRlKGAlaW4lYCkNCg0KIyBmdW5jdGlvbiBmb3IgdHJhbnNwb3NpbmcgZGYNCnRyYW5zcG9zZV9kZiA8LSBmdW5jdGlvbihkZikgew0KICB0X2RmIDwtIGRhdGEudGFibGU6OnRyYW5zcG9zZShkZikNCiAgY29sbmFtZXModF9kZikgPC0gcm93bmFtZXMoZGYpDQogIHJvd25hbWVzKHRfZGYpIDwtIGNvbG5hbWVzKGRmKQ0KICB0X2RmIDwtIHRfZGYgJT4lDQogICAgdGliYmxlOjpyb3duYW1lc190b19jb2x1bW4oLmRhdGEgPSAuKSAlPiUNCiAgICB0aWJibGU6OmFzX3RpYmJsZSguKQ0KICByZXR1cm4odF9kZikNCn0NCg0KIyBmdW5jdGlvbiBiZW5lZmljaWFyeSBzdW1tYXJpZXMNCnN1bV9iZW4gPC0gZnVuY3Rpb24oZGYsIGNvbHVtbl92YXIpew0KICANCiAgY29sdW1uX3ZhciA8LSBlbnF1byhjb2x1bW5fdmFyKQ0KICANCiAgZGYgJT4lDQogICAgZ3JvdXBfYnkoISFjb2x1bW5fdmFyKSAlPiUgIyBtdXN0IGFkZCBiYW5nLWJhbmcNCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShuZXdfYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICAgIGFycmFuZ2UoZGVzYyhiZW5lZmljaWFyaWVzKSkNCiAgICANCn0NCg0KIyBmdW5jdGlvbiBiZW5lZmljaWFyeSBzdW1tYXJpZXMsIDIgZ3JvdXBlZCB2YXJpYWJsZXMNCnN1bV9iZW4yIDwtIGZ1bmN0aW9uKGRmLCBjb2x1bW5fdmFyMSwgY29sdW1uX3ZhcjIpew0KICANCiAgY29sdW1uX3ZhcjEgPC0gZW5xdW8oY29sdW1uX3ZhcjEpDQogIGNvbHVtbl92YXIyIDwtIGVucXVvKGNvbHVtbl92YXIyKQ0KICANCiAgZGYgJT4lDQogICAgZ3JvdXBfYnkoISFjb2x1bW5fdmFyMSwgISFjb2x1bW5fdmFyMikgJT4lICMgbXVzdCBhZGQgYmFuZy1iYW5nDQogICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0obmV3X2JlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpDQogICAgDQp9DQoNCiMgc2NhbGluZyBmdW5jdGlvbnMgDQpyYW5nZTAxIDwtIGZ1bmN0aW9uKHgpeyh4LW1pbih4KSkvKG1heCh4KS1taW4oeCkpfQ0KcmFuZ2Vfd25hIDwtIGZ1bmN0aW9uKHgpeyh4LW1pbih4LCBuYS5ybSA9IFRSVUUpKS8obWF4KHgsIG5hLnJtID0gVFJVRSktbWluKHgsIG5hLnJtID0gVFJVRSkpfQ0KDQojbW9kZSBmdW5jdGlvbiANCm1vZGUgPC0gZnVuY3Rpb24oeCkgew0KICB1eCA8LSB1bmlxdWUoeCkNCiAgdXhbd2hpY2gubWF4KHRhYnVsYXRlKG1hdGNoKHgsIHV4KSkpXQ0KfQ0KDQpsb2NhdGlvbnMgPC0gcmVhZF9jc3YoIi4vZGF0YS9sb2NhdGlvbnNfYW9jLmNzdiIpDQoNCnBjb2RlM19zaGFwZSA8LSANCiAgc3RfcmVhZCgiLi9kYXRhL3N5cl9hZG1ibmRhX3VuY3NfdW5vY2hhXzIwMjAxMjE3L3N5cl9hZG1ibmRhX2FkbTNfdW5jc191bm9jaGFfMjAyMDEyMTcuc2hwIikNCg0KYGBgDQoNCg0KYGBge3IgZGF0YX0NCg0KcmVwb3J0X2RhdGUgPC0gIjI1IEFwcmlsIDIwMjMiDQoNCm5hbWVzX2VxIDwtIGMoDQogICJkYXRlIiwNCiAgImdvdmVybm9yYXRlIiwNCiAgImRpc3RyaWN0IiwNCiAgInN1Yl9kaXN0cmljdCIsDQogICJjb21tdW5pdHkiLA0KICAiYWRtaW40IiwNCiAgImNhc3VhbHRpZXMiLA0KICAiaW5qdXJpZXMiLA0KICAiY29tcGxldGVseV9kZXN0cm95ZWRfaG91c2VzIiwNCiAgImRhbWFnZWRfdW5paGFiaXRhYmxlX2hvdXNlcyIsDQogICJ0ZW1wb3JhcnlfYWNjb21tb2RhdGlvbl9jZW50cmVzIiwNCiAgImlkcHNfaW5fYWxsX2NlbnRyZXMiLA0KICAic2Nob29sc19hc19hY2NvbW9kYXRpb25fY2VudHJlcyIsDQogICJpZHBzX2luX3NjaG9vbHMiLA0KICAidGVudHNfbmVlZGVkIiwNCiAgImJsYW5rZXRzX21hdHRyZXNzZXNfbmVlZGVkIiwNCiAgInRlbXBvcmFyeV9hY2NvbW1vZGF0aW9uX2NlbnRyZXNfYXZhaWxhYmxlIiwgDQogICJhY2Nlc3NpYmxlX2NpdmlsX2RlZmVuc2UiLA0KICAibGF0cmluZXNfYXZhaWxhYmxlIiwNCiAgIm1lYWxzX25lZWRlZF9wZXJfZGF5IiwNCiAgIm5lZWRfYmxvb2RfZG9uYXRpb25zIiwNCiAgImhlYWx0aF9zZXJ2aWNlc19hdmFpbGFibGUiLA0KICAibmVjZXNzYXJ5X21lZGljYWxfZXF1aXBtZW50IiwNCiAgInJ1YmJsZV92b2x1bnRlZXJzIiwNCiAgInRlbGVjb21zX2F2YWlsYWJsZSIsDQogICJlbGVjdHJpY2l0eV9hdmFpbGFibGUiLCANCiAgImhlYXRpbmdfZnVlbF9uZWVkZWQiDQopDQoNCmVxIDwtIHJlYWRfZXhjZWwoIi4vZGF0YS9zeXJpYS1lYXJ0aHF1YWtlLWltcGFjdC0yMC1tYXJjaC0yMDIzLnhsc3giLA0KICAgICAgICAgICAgICAgICBzaGVldCA9ICJEQVRBU0VUIikgJT4lIA0KICBzZXROYW1lcyhuYW1lc19lcSkgJT4lIA0KICBsZWZ0X2pvaW4obG9jYXRpb25zICU+JSBzZWxlY3QoYWRtaW40cGNvZGUsIGFkbWluM3Bjb2RlKSwgDQogICAgICAgICAgICBieSA9IGMoImFkbWluNCIgPSAiYWRtaW40cGNvZGUiKSkgJT4lIA0KICBtdXRhdGUod291bmRlZF9kZWFkID0gY2FzdWFsdGllcyArIGluanVyaWVzLA0KICAgICAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gY29tcGxldGVseV9kZXN0cm95ZWRfaG91c2VzICsgZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzKSAlPiUgDQogICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lIA0KICAgICAgc3VtbWFyaXNlKHdvdW5kZWRfZGVhZCA9IHN1bSh3b3VuZGVkX2RlYWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gc3VtKGRhbWFnZWRfaG91c2VzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGxlZnRfam9pbihyZWFkX2V4Y2VsKCIuL2RhdGEvMjAyM0hOT19QaU5fU2V2ZXJpdHlfZGV0YWlsZWRBb0lfRk9SU0hBUkUgMTUwMzIwMjMueGxzeCIsIHNraXAgPSAxLCANCiAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkgJT4lDQogICAgICAgICAgICAgIGNsZWFuX25hbWVzKCkgJT4lDQogICAgICAgICAgICAgIHNlbGVjdChhZG1pbjNwY29kZSwgdG90YWxfcG9wdWxhdGlvbiwgYW9jID0gYW9fYyksIA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIG11dGF0ZSh3b3VuZGVkX2RlYWRfMTAwayA9IHdvdW5kZWRfZGVhZCAvIHRvdGFsX3BvcHVsYXRpb24gKiAxMDAwMDAsIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXNfMTAwayA9IGRhbWFnZWRfaG91c2VzIC8gdG90YWxfcG9wdWxhdGlvbiAqIDEwMDAwMCkNCg0KDQplcV9tZGVwcml2IDwtIGVxICU+JQ0KICBtdXRhdGVfYXQodmFycyh3b3VuZGVkX2RlYWQsIGRhbWFnZWRfaG91c2VzLCANCiAgICAgICAgICAgICAgICAgd291bmRlZF9kZWFkXzEwMGssIGRhbWFnZWRfaG91c2VzXzEwMGspLCB+IHJhbmdlX3duYSguKSkgJT4lIA0KICBtZGVwcml2KGMoIndvdW5kZWRfZGVhZCIsICJkYW1hZ2VkX2hvdXNlcyIsIA0KICAgICAgICAgICAgIndvdW5kZWRfZGVhZF8xMDBrIiwgImRhbWFnZWRfaG91c2VzXzEwMGsiKSwgDQogICAgICAgICAgbWV0aG9kID0gImN6Iiwgb3V0cHV0ID0gImFsbCIsIA0KICAgICAgICAgIHNjb3JlX2lfaGVhZGluZyA9ICJlcV9zY29yZSIpDQoNCmVxIDwtIGVxICU+JSANCiAgbGVmdF9qb2luKGVxX21kZXByaXYkZGF0YSAlPiUgDQogICAgICAgICAgICAgIHNlbGVjdChhZG1pbjNwY29kZSwgZXFfc2NvcmUpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikNCg0KIyBUaGluayBvZiBhbm90aGVyIHdheSB0byBkbyB0aGlzIC0tIGlmIHNvbWVvbmUgZWxzZSBydW5zIHRoaXMsIGl0IHdvbid0IHdvcmsgDQpjYnIgPC0gcmVhZF9jc3YoIi4vZGF0YS9jYnJfY29tLmNzdiIpICU+JSANCiAgbXV0YXRlKG1vbnRoID0gbW9udGgoZGlzdHJpYnV0aW9uX2RhdGUpKSAlPiUgDQogIHJlcGxhY2VfbmEobGlzdChiZW5lZmljaWFyaWVzID0gMCkpICU+JSANCiAgbXV0YXRlKGdvdmVybm9yYXRlID0gcmVjb2RlKGdvdmVybm9yYXRlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGVwcG8iID0gIkFsZXBwbyIpLCANCiAgICAgICAgIGRpc3RyaWN0ID0gcmVjb2RlKGRpc3RyaWN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJKYWJhbCBTYW1tYW4iID0gIkplYmVsIFNhbWFuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiYXpheiIgPSAiQSd6YXoiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqYXJhYmx1cyIgPSAiSmFyYWJsdXMiKSwgDQogICAgICAgICBzdWJfZGlzdHJpY3QgPSByZWNvZGUoc3ViX2Rpc3RyaWN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXpheiIgPSAiQSd6YXoiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqYXJhYmx1cyIgPSAiSmFyYWJsdXMiKSwgDQogICAgICAgICAjIERvaW5nIHRoaXMgYmVjYXVzZSBBci1SYXFxYSBoYXMgbmV2ZXIgYXBwZWFyZWQgYmVmb3JlDQogICAgICAgICBwcmV2aW91c2x5X2Fzc2lzdGVkID0gaWZlbHNlKGFkbWluMXBjb2RlICVpbiUgYygiU1kxMSIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHlfYXNzaXN0ZWQpLCANCiAgICAgICAgICMgSnVzdCB0aGlzIG9uZSB0aW1lLCBzaW5jZSB0aGV5IGhhdmVuJ3QgYXBwZWFyZWQgYmVmb3JlDQogICAgICAgICBwcmV2aW91c2x5X2Fzc2lzdGVkID0gaWZlbHNlKGltcGxlbWVudGluZ19wYXJ0bmVyID09ICJDQlJUV0ctMDMzIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5X2Fzc2lzdGVkKSkNCiAgDQoNCmhubyA8LSByZWFkX2V4Y2VsKCIuL2RhdGEvMjAyM0hOT19QaU5fU2V2ZXJpdHlfZGV0YWlsZWRBb0lfRk9SU0hBUkUgMTUwMzIwMjMueGxzeCIsIHNraXAgPSAxLCANCiAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkgJT4lDQogIGNsZWFuX25hbWVzKCkNCg0KDQpud19wY29kZTMgPC0gaG5vICU+JSANCiAgZmlsdGVyKGFvX2MgPT0gIk5XIikgJT4lIA0KICBwdWxsKGFkbWluM3Bjb2RlKQ0KDQpmb3VyIDwtIHJlYWRfY3N2KCIuL2RhdGEvNHdzLmNzdiIpDQoNCmBgYA0KDQoNCjxicj48YnI+PGJyPg0KDQojIDEuIE1QQyByZXNwb25zZSBvdmVydmlldw0KDQpgYGB7cn0NCnN1bV9zdGF0cyA8LSBjYnIgICU+JSANCiAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiICYgDQogICAgICAgICAgIHN0cl9kZXRlY3QoY2x1c3RlciwgIk11bHRpcHVycG9zZSIpKSAlPiUNCiAgc3VtbWFyaXNlKHBhcnRuZXJzID0gbl9kaXN0aW5jdChpbXBsZW1lbnRpbmdfcGFydG5lciksIA0KICAgICAgICAgICAgY29tbXVuaXRpZXMgPSBuX2Rpc3RpbmN0KGFkbWluNHBjb2RlKSwgDQogICAgICAgICAgICBob3VzZWhvbGRzID0gc3VtKGZhbWlsaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllc1twcmV2aW91c2x5X2Fzc2lzdGVkID09ICJObyJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHRvdGFsX3VzZCA9IHN1bSh0b3RhbF91c2QsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIikNCg0KDQpgYGANCg0KDQpBcyBvZiBgciByZXBvcnRfZGF0ZWAsIGEgdG90YWwgb2YgYHIgc3VtX3N0YXRzICU+JSBwdWxsKGJlbmVmaWNpYXJpZXMpICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIG9yIGByIHN1bV9zdGF0cyAlPiUgcHVsbChob3VzZWhvbGRzKSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgZmFtaWxpZXMgaGF2ZSBiZWVuIHJlYWNoZWQgYnkgTVBDIGludGVydmVudGlvbnMuIA0KDQpBIHRvdGFsIG9mIFVTRCBgciBwYXN0ZShmb3JtYXQocm91bmQoKHN1bV9zdGF0cyAlPiUgcHVsbCh0b3RhbF91c2QpKSAvIDEwMDAwMDAsIDEpLCB0cmltID0gVFJVRSksICJtaWxsaW9uIilgIGhhcyBiZWVuIGRpc2J1cnNlZCBieSBgciBzdW1fc3RhdHMgJT4lIHB1bGwocGFydG5lcnMpYCBpbXBsZW1lbnRpbmcgYWdlbmNpZXMgYWNyb3NzIGByIGNiciAlPiUgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgc3VtbWFyaXNlKG5fZGlzdGluY3QoYWRtaW4zcGNvZGUpKSAlPiUgcHVsbCgpYCBzdWItZGlzdHJpY3RzLiANCg0KKk9ubHkgYmVuZWZpY2lhcmllcyB3aG8gaGF2ZSByZWNlaXZlZCBhdCBsZWFzdCBVU0QgMTAwL2ZhbWlseS9tb250aCBoYXZlIGJlZW4gaW5jbHVkZWQ7IGV4Y2x1ZGVzIHNlY3Rvci1iYXNlZCBhY3Rpdml0aWVzIHN1Y2ggYXMgbm9uLU1QQyBjYXNoLWZvci1mb29kLioNCg0KDQoNCjxicj4NCg0KYGBge3Igc3VtbWFyeSB0YWJsZX0NCmNiciAgJT4lIA0KICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIgJiANCiAgICAgICAgICAgc3RyX2RldGVjdChjbHVzdGVyLCAiTXVsdGlwdXJwb3NlIikpICU+JQ0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKHBhcnRuZXJzID0gbl9kaXN0aW5jdChpbXBsZW1lbnRpbmdfcGFydG5lciksIA0KICAgICAgICAgICAgY29tbXVuaXRpZXMgPSBuX2Rpc3RpbmN0KGFkbWluNHBjb2RlKSwgDQogICAgICAgICAgICBob3VzZWhvbGRzID0gc3VtKGZhbWlsaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllc1twcmV2aW91c2x5X2Fzc2lzdGVkID09ICJObyJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHRvdGFsX3VzZCA9IHN1bSh0b3RhbF91c2QsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgbXV0YXRlKGAlX0JORmAgPSANCiAgICAgICAgICAgcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpICogMTAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICB0b3RhbF91c2QgPSByb3VuZCh0b3RhbF91c2QpKSAlPiUNCiAgYWRvcm5fdG90YWxzKCJyb3ciLCwsLCBob3VzZWhvbGRzLCBiZW5lZmljaWFyaWVzLCB0b3RhbF91c2QsIGAlX0JORmApICU+JSANCiAgbXV0YXRlKGAlX0JORmAgPSBpZmVsc2UoYCVfQk5GYCA+IDk5Ljk4LCAxMDAsIGAlX0JORmApKSAlPiUgDQogIHNlbGVjdChnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QsIGNvbW11bml0aWVzLCBwYXJ0bmVycywgDQogICAgICAgICBob3VzZWhvbGRzLCBiZW5lZmljaWFyaWVzLCB0b3RhbF91c2QsIGAlX0JORmApICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbihwYXN0ZTAoDQogICAgcm91bmQoc3VtX3N0YXRzJGJlbmVmaWNpYXJpZXMsIGRpZ2l0cyA9IC0zKSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKSwNCiAgICAiIHBlb3BsZSByZWFjaGVkIHdpdGggTVBDLCBVU0QgIiwNCiAgICBwYXN0ZShmb3JtYXQocm91bmQoKHN1bV9zdGF0cyAlPiUgcHVsbCh0b3RhbF91c2QpKSAvIDEwMDAwMDAsIDEpLCB0cmltID0gVFJVRSksICJtaWxsaW9uIiksIA0KICAgICIgZGlzYnVyc2VkLCAiLCANCiAgICByZXBvcnRfZGF0ZSkpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQojICBmb290bm90ZShpID0gMSwgaiA9IDYsIHBhcnQgPSAiaGVhZGVyIiwgcmVmX3N5bWJvbHMgPSAiYSIsDQojICAgICAgICAgICBhc19wYXJhZ3JhcGgoIkJlbmVmaWNpYXJ5IGZpZ3VyZXMgaW5jbHVkZSBvbmx5IHJlcG9ydGVkIE1QQyB3aXRoIGEgbWluaW11bSB0cmFuc2ZlciB2YWx1ZSAjb2YgVVNEIDEwMCIpKSAlPiUgDQogIGZvb3Rub3RlKGkgPSAxLCBqID0gOCwgcGFydCA9ICJoZWFkZXIiLCByZWZfc3ltYm9scyA9ICJiIiwgaW5saW5lID0gVFJVRSwgIA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIkFzIHBlcmNlbnRhZ2Ugb2YgYWxsIE1QQyBiZW5lZmljaWFyaWVzIHJlYWNoZWQgaW4gTlcgU3lyaWEiKSkgDQoNCg0KYGBgDQoNCg0KDQoNCjxicj4NCg0KYHIgZmlsdGVyKGNiciwgbW9udGggPT0gMiAmIHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiICYgc3RyX2RldGVjdChjbHVzdGVyLCAiTXVsdGlwdXJwb3NlIikpICU+JSB7c3VtKC4kYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIGJlbmVmaWNpYXJ5IGZyZXF1ZW5jaWVzIHdlcmUgcmVhY2hlZCBpbiBGZWJydWFyeSAyMDIzIGFuZCBgciBmaWx0ZXIoY2JyLCBtb250aCA9PSAzICYgcHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIgJiBzdHJfZGV0ZWN0KGNsdXN0ZXIsICJNdWx0aXB1cnBvc2UiKSkgJT4lIHtzdW0oLiRiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSByZWFjaGVkIGluIE1hcmNoIDIwMjMuIGByIGZpbHRlcihjYnIsIG1vbnRoID09IDQgJiBwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIiAmIHN0cl9kZXRlY3QoY2x1c3RlciwgIk11bHRpcHVycG9zZSIpKSAlPiUge3N1bSguJGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBoYXZlIGJlZW4gcmVhY2hlZCBzbyBmYXIgaW4gQXByaWwgMjAyMy4NCg0KKlRoZSBjbGVhbmluZyBhbmQgdmVyaWZpY2F0aW9uIG9mIHRoZSBkYXRhc2V0IGlzIHN0aWxsIG9uZ29pbmcsIG1hbnkgY2hhbmdlcyBpbiBudW1iZXJzIG9mIHBlcnNvbnMgcmVhY2hlZCByZWZsZWN0IHRoaXMgcHJvY2VzcyBhbmQgd2lsbCBvbmx5IGJlIGNvbXBsZXRlZCBvbmNlIHRoZSBDV0cgZnVsbHkgdHJhbnNpdGlvbnMgdG8gNFdzIHJlcG9ydGluZy4qDQoNCiAgDQogIA0KYGBge3IgZXZhbD1GQUxTRX0NCmNiciAlPiUgDQogIG11dGF0ZShkaXN0cmlidXRpb25fZGF0ZSA9IGFzLkRhdGUoZGlzdHJpYnV0aW9uX2RhdGUpKSAlPiUgDQogIGZpbHRlcihkaXN0cmlidXRpb25fZGF0ZSA9PSAiMDAyMi0wMS0yMCIpICU+JSANCiAge3N1bSguJGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSl9DQpgYGANCg0KPGJyPjxicj4NCg0KIyMgMS4xIFByb2dyZXNzIGJ5IGRhdGUNCg0KDQoNCmBgYHtyIGZpZy5oZWlnaHQ9Nn0NCiMgVGhpcyBpcyB0aGUgbWVzc2llc3QgY2h1bmsgaW4gdGhlIHdob2xlIGRvY3VtZW50LiBDYW4geW91IHBsZWFzZSBmaXggaXQ/IA0KDQpjYnIgJT4lDQogIGZpbHRlcighaXMubmEoZGlzdHJpYnV0aW9uX2RhdGUpKSAlPiUgDQogIG11dGF0ZShkaXN0cmlidXRpb25fZGF0ZSA9IGFueWRhdGUoZGlzdHJpYnV0aW9uX2RhdGUpKSAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIiAmIA0KICAgICAgICAgICBzdHJfZGV0ZWN0KGNsdXN0ZXIsICJNdWx0aXB1cnBvc2UiKSAmIA0KICAgICAgICAgICBwcmV2aW91c2x5X2Fzc2lzdGVkID09ICJObyIpICU+JSANCiAgZ3JvdXBfYnkoZGlzdHJpYnV0aW9uX2RhdGUpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcykpICU+JQ0KICBhcnJhbmdlKGRpc3RyaWJ1dGlvbl9kYXRlKSAlPiUgDQogIGZpbHRlcihkaXN0cmlidXRpb25fZGF0ZSAgPiAiMjAyMi0xMi0zMCIgJiBkaXN0cmlidXRpb25fZGF0ZSA8ICIyMDIzLTA1LTAxIikgJT4lIA0KICBtdXRhdGUoY3VtX2JlbiA9IGN1bXN1bShiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBtdXRhdGUoY3VtX2xhYmVsID0gaWZlbHNlKGRpc3RyaWJ1dGlvbl9kYXRlID09ICIyMDIzLTAyLTEwIiB8IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uX2RhdGUgPT0gIjIwMjMtMDMtMDEiIHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbl9kYXRlID09ICIyMDIzLTAzLTMwInwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbl9kYXRlID09ICIyMDIzLTA0LTE1InwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbl9kYXRlID09ICIyMDIzLTA0LTMwIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VtX2JlbiwgIiIpLCANCiAgICAgICAgIGN1bV9sYWJlbCA9IGFzLm51bWVyaWMoY3VtX2xhYmVsKSwgDQogICAgICAgICBkaXN0cmlidXRpb25fZGF0ZSA9IGFueWRhdGUoZGlzdHJpYnV0aW9uX2RhdGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gZGlzdHJpYnV0aW9uX2RhdGUsIHkgPSBjdW1fYmVuKSkgKyANCiAgZ2VvbV9saW5lKGNvbG91ciA9ICJibHVlIikgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6Y29tbWEoY3VtX2xhYmVsKSksIHZqdXN0ID0gLTEsIA0KICAgICAgICAgICAgc2l6ZSA9IDQpICsgDQogIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIxIHdlZWsiLCBkYXRlX2xhYmVscyA9ICIlZC0lYiIpICsNCiAgIyBXaHkgZGlkbid0IHlvdSBsZWFybiB0aGlzIGJlZm9yZT8gDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSwgZXhwYW5kID0gZXhwYW5zaW9uKG11bHQgPSAuMSkpICsgDQogIGxhYnMoeCA9ICJEaXN0cmlidXRpb24gZGF0ZSIsIA0KICAgICAgIHkgPSAiQ3VtdWxhdGl2ZSBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgdGl0bGUgPSAiTVBDIHByb2dyZXNzIGJ5IGRhdGUiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJUaGUgZWFybGllc3QgZWFydGhxdWFrZS1yZWxhdGVkIGRpc3RyaWJ1dGlvbiB3YXMgMjAyMy0wMi0wOVxuRXhjbHVkZXMgMTksODg3IGJlbmVmaWNpYXJpZXMgZm9yIHdoaWNoIHRoZSBkYXRlIHdhcyBub3QgcmVwb3J0ZWQgb3Igd2FzIHVucmVhZGFibGUiKSAgDQogIA0KZ2dzYXZlKCIuL2ltZy9wcm9ncmVzc19saW5lLnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gOC4yNywgd2lkdGggPSAxMS42OSwgdW5pdHMgPSAiaW4iKSAgDQpgYGANCg0KPGJyPg0KDQpUaGUgc21hbGwgbnVtYmVyIG9mIGJlbmVmaWNpYXJpZXMgcmVhY2hlZCBlYXJsaWVyIHRoYW4gRmVicnVhcnkgYWxsIHBlcnRhaW5lZCB0byB0aGUgSFJQLCB0aGUgb25seSBzdWNoIGJlbmVmaWNpYXJpZXMgcmVwb3J0ZWQgc28gZmFyLiBUaGUgQ1dHIHdvdWxkIGxpa2UgdG8gZW5jb3VyYWdlIHBhcnRuZXJzIHRvIHJlcG9ydCBvbiB0aGVpciBKYW51YXJ5IGFjaGlldmVtZW50cy4gDQoNCjxicj48YnI+DQoNCiMgMi4gTWFwIG9mIGFjdGl2aXRpZXMNCg0KPGJyPg0KDQoNCg0KYGBge3IgZmlnLmhlaWdodD03fQ0KDQpwbGFubmVkX2ltcGxlbWVudGVkX21hcCA8LSBjYnIgJT4lIA0KICByaWdodF9qb2luKHBjb2RlM19zaGFwZSwgDQogICAgICAgICAgICAgYnkgPSBjKCJhZG1pbjNwY29kZSIgPSAiQURNM19QQ09ERSIpKSAlPiUgDQogIGZpbHRlcihBRE0xX1BDT0RFICVpbiUgYygiU1kwMiIsICJTWTA3IiwgIlNZMTEiKSAmICFpcy5uYShiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBzdF9hc19zZigpICU+JQ0KICBnZ3Bsb3QoKSArIA0KICBnZW9tX3NmKHNpemUgPSAuMSwgY29sb3VyID0gImdyZXk3MCIpICsgDQogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBiZW5lZmljaWFyaWVzLA0KICAgICAgICAgICAgICAgICBjb2xvdXIgPSBwcm9qZWN0X3N0YXR1cywgDQogICAgICAgICAgICAgICAgIHggPSBsb25naXR1ZGVfeCwgeSA9IGxhdGl0dWRlX3ksIA0KICAgICAgICAgICAgICAgICB0ZXh0ID0gcGFzdGUwKCJzdWJfZGlzdHJpY3Q6ICIsIHN1Yl9kaXN0cmljdCwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbXVuaXR5OiAiLCBjb21tdW5pdHksICJcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uX3R5cGU6ICIsIHZpbGxhZ2VfY2FtcHMsICJcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlbmVmaWNpYXJpZXM6IiwgZm9ybWF0KGJlbmVmaWNpYXJpZXMsIGJpZy5tYXJrID0gIiwiKSwgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFydG5lcjogIiwgYWJicmV2aWF0aW9uLCAiXG4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9uX3g6ICIsIGxvbmdpdHVkZV94LCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXRfeTogIiwgbGF0aXR1ZGVfeSkpLCANCiAgICAgICAgICAgICBzaGFwZSA9IDIxLCBzdHJva2UgPSAuMzUsIA0KICAgICAgICAgICAgIGFscGhhID0gLjUpICsgDQogIHNjYWxlX3NpemVfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKyANCiAgc2NhbGVfY29sb3VyX3ZpcmlkaXNfZChuYS50cmFuc2xhdGUgPSBGQUxTRSkgKyANCiAgdGhlbWVfdm9pZCgpICsgDQogIHRoZW1lKHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gTkEpLCANCiAgICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwpICsNCiAgbGFicyh0aXRsZSA9ICJDb21tdW5pdGllcyByZWFjaGVkIGFuZCBwbGFubmVkIC0tIENXRyBwYXJ0bmVycyIsIA0KICAgICAgIHN1YnRpdGxlID0gIlBsYW5uZWQgaW4geWVsbG93LCBjb21wbGV0ZWQgaW4gcHVycGxlLCBzaXplIHNob3dzIG51bWJlciBvZiBwZXJzb25zIiwgDQogICAgICAgY29sb3VyID0gIlN0YXR1cyIpICsNCiAgZ3VpZGVzKHNpemUgPSAibm9uZSIpDQoNCiAgDQpnZ3Bsb3RseShwbGFubmVkX2ltcGxlbWVudGVkX21hcCwgdG9vbHRpcCA9IGMoInRleHQiKSkgJT4lIA0KICBwbG90bHk6OnN0eWxlKGhvdmVyb24gPSAicG9pbnQiKSAlPiUgDQogIGxheW91dCh0aXRsZSA9IGxpc3QodGV4dCA9IHBhc3RlMCgiQ29tbXVuaXRpZXMgcmVhY2hlZCBhbmQgcGxhbm5lZCAtLSBDV0cgcGFydG5lcnMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8YnI+IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHN1cD4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFubmVkIGluIGdyZWVuLCBjb21wbGV0ZWQgaW4gcHVycGxlLCBzaXplIHNob3dzIG51bWJlciBvZiBwZXJzb25zOyBjbGljayBhbmQgZHJhZyB0byB6b29tOyBtb3VzZSBvdmVyIGZvciBkZXRhaWxzIikpKQ0KICANCmBgYA0KDQo8YnI+PGJyPjxicj4NCg0KIyAzLiBHZW9ncmFwaGljIGJyZWFrZG93biBvZiBiZW5lZmljaWFyaWVzIA0KDQpDb3ZlcmFnZSBjb250aW51ZXMgdG8gYmUgaGlnaGVzdCBpbiBBZnJpbiBhbmQgSGFyaW0gZGlzdHJpY3RzLCB3aGljaCBoYXZlIGJlZW4gd29yc3QtaGl0IGJ5IHRoZSBlYXJ0aHF1YWtlLiANCg0KPGJyPg0KDQoNCg0KYGBge3Igd2FybmluZyA9IEZBTFNFfQ0KY2JyICU+JSANCiAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiICYgDQogICAgICAgICAgIHN0cl9kZXRlY3QoY2x1c3RlciwgIk11bHRpcHVycG9zZSIpICYgDQogICAgICAgICAgIHByZXZpb3VzbHlfYXNzaXN0ZWQgPT0gIk5vIikgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUoZGlzdHJpY3QgPSBmY3RfcmVvcmRlcihkaXN0cmljdCwgYmVuZWZpY2lhcmllcyksDQogICAgICAgICBnb3Zlcm5vcmF0ZSA9IGZjdF9yZWxldmVsKGdvdmVybm9yYXRlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiSWRsZWIiLCAiQXItUmFxcWEiLCAiQWxlcHBvIikpDQogICAgICAgICApICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYmVuZWZpY2lhcmllcywgeSA9IGRpc3RyaWN0KSkgKyANCiAgZ2VvbV9jb2woYWVzKGZpbGwgPSBnb3Zlcm5vcmF0ZSkpICsgDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShiZW5lZmljaWFyaWVzKSksIA0KICAgICAgICAgICAgaGp1c3QgPSAiaW53YXJkIikgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoYmVnaW4gPSAuMykgKyANCiAgbGFicyh0aXRsZSA9ICJNUEMgYmVuZWZpY2lhcmllcyBieSBkaXN0cmljdCIsIA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJhcyBvZiAiLCByZXBvcnRfZGF0ZSksIA0KICAgICAgIHkgPSAiIikgKyANCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHVuaXRfZm9ybWF0KHVuaXQgPSAiSyIsIHNjYWxlID0gMWUtMywgYWNjdXJhY3kgPSAxKSkgKyANCg0KaG5vICU+JSANCiAgZmlsdGVyKGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLCAiQXJpaGEiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZWxsIEFiaWFkIiwgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlID0gYWRtaW4xbmFtZV9lbiwgZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9wb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIikgJT4lIA0KICBsZWZ0X2pvaW4oDQogICAgY2JyICU+JQ0KICAgICAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiICYgDQogICAgICAgICAgIHN0cl9kZXRlY3QoY2x1c3RlciwgIk11bHRpcHVycG9zZSIpICYgDQogICAgICAgICAgIHByZXZpb3VzbHlfYXNzaXN0ZWQgPT0gIk5vIikgJT4lICANCiAgICAgIGdyb3VwX2J5KGRpc3RyaWN0KSAlPiUgDQogICAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAsICANCiAgYnkgPSAiZGlzdHJpY3QiKSAlPiUgDQogICMgS2luZCBvZiBpcnJpdGF0aW5nIHRoYXQgeW91J3JlIGRvaW5nIHRoaXMgbWFudWFsbHkgDQogIG11dGF0ZShkaXN0cmljdCA9IGZjdF9yZWxldmVsKGRpc3RyaWN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsIEJhYiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmFyYWJsdXMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEnemF6IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKZWJlbCBTYW1hbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlbGwgQWJpYWQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyaWhhIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKaXNyLUFzaC1TaHVndXIiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklkbGViIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIYXJpbSIpLA0KICAgICAgICAgcGNfcmVhY2hlZCA9IHJvdW5kKGJlbmVmaWNpYXJpZXMgLyB0b3RhbF9wb3B1bGF0aW9uICogMTAwLCBkaWdpdHMgPSAxKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBwY19yZWFjaGVkLCB5ID0gZGlzdHJpY3QpKSArDQogIGdlb21fY29sKGFlcyhmaWxsID0gZ292ZXJub3JhdGUpKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEocGNfcmVhY2hlZCkpLCANCiAgICAgICAgICAgIGhqdXN0ID0gImlud2FyZCIpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoYmVnaW4gPSAuMykgKyANCiAgbGFicyh0aXRsZSA9ICJQZXJjZW50IG9mIHBvcHVsYXRpb24gcmVhY2hlZCIsIA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJhcyBvZiAiLCByZXBvcnRfZGF0ZSksIA0KICAgICAgIHkgPSAiIiwgDQogICAgICAgeCA9ICIlIG9mIHBvcHVsYXRpb24gcmVhY2hlZCIpICsNCiAgDQogIHBsb3RfbGF5b3V0KGd1aWRlcyA9ICJjb2xsZWN0IikgJiANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpDQoNCmdnc2F2ZSgiLi9pbWcvbXBjX2J5X2Rpc3RyaWN0LnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gOC4yNywgd2lkdGggPSAxMS42OSwgdW5pdHMgPSAiaW4iKSAgDQoNCmBgYA0KDQo8YnI+DQoNCmBgYHtyfQ0KZXEgJT4lIA0KICBsZWZ0X2pvaW4oaG5vICU+JSANCiAgICAgICAgICAgICAgc2VsZWN0KGdvdmVybm9yYXRlID0gYWRtaW4xbmFtZV9lbiwgDQogICAgICAgICAgICAgICAgICAgICBkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4sIA0KICAgICAgICAgICAgICAgICAgICAgc3ViX2Rpc3RyaWN0ID0gYWRtaW4zbmFtZV9lbiwgDQogICAgICAgICAgICAgICAgICAgICBhZG1pbjNwY29kZSksIA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmIA0KICAgICAgICAgICBkaXN0cmljdCAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsICJBcmloYSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlbGwgQWJpYWQiLCAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0KSAlPiUgDQogIHN1bW1hcmlzZSh3b3VuZGVkX2RlYWQgPSBzdW0od291bmRlZF9kZWFkLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gc3VtKGRhbWFnZWRfaG91c2VzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogICMgV2hlcmUgaXMgQXJpaGEsIGFuZCB3aHkgaXMgaXQgc2hvd2luZyB1cCBoZXJlDQogIGZpbHRlcihkaXN0cmljdCAhPSAiQXJpaGEiKSAlPiUgDQogIGxlZnRfam9pbihobm8gJT4lIA0KICAgICAgICAgICAgICBmaWx0ZXIoYWRtaW4zcGNvZGUgJWluJSBud19wY29kZTMgJg0KICAgICAgICAgICAgICAgICAgICAgICBhZG1pbjJuYW1lX2VuICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwgIkFyaWhhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlbGwgQWJpYWQiLCAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JQ0KICAgICAgICAgICAgICBncm91cF9ieShkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4pICU+JQ0KICAgICAgICAgICAgICBzdW1tYXJpc2UocG9wdWxhdGlvbiA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uLCBuYS5ybSA9IFRSVUUpKSwgYnkgPSAiZGlzdHJpY3QiKSAlPiUgDQogIG11dGF0ZSh3b3VuZGVkX2RlYWRfMTAwayA9IHJvdW5kKHdvdW5kZWRfZGVhZCAvIHBvcHVsYXRpb24gKiAxMDAwMDAsIGRpZ2l0cyA9IDIpLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzXzEwMGsgPSByb3VuZChkYW1hZ2VkX2hvdXNlcyAvIHBvcHVsYXRpb24gKiAxMDAwMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogIHNlbGVjdChnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QsIHdvdW5kZWRfZGVhZCwgd291bmRlZF9kZWFkXzEwMGssIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXMsIGRhbWFnZWRfaG91c2VzXzEwMGspICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC45OSkgJT4lIA0KICBzZXRfY2FwdGlvbigiQ2FzdWFsdGllcyBhbmQgZGFtYWdlZCBob3VzZXMsIGFic29sdXRlIGZpZ3VyZXMgYW5kIHBlciAxMDAsMDAwIHBlcnNvbnMiKSAlPiUgDQogIGZvb3Rub3RlKHBhcnQgPSAiaGVhZGVyIiwgaSA9IDEsIGogPSAzOjYsIGlubGluZSA9IFRSVUUsIHJlZl9zeW1ib2xzID0gIjEiLA0KICAgICAgICAgICB2YWx1ZSA9IGFzX3BhcmFncmFwaCgiRGF0YSBmcm9tIHRoZSBBc3Npc3RhbmNlIENvb3JkaW5hdGlvbiBVbml0LCBTeXJpYSAyMDIzMDMyOCIpKQ0KYGBgDQoNCjxicj4NCg0KQmVsb3cgaXMgYSBicmVha2Rvd24gb2YgYmVuZWZpY2lhcmllcyBiYXNlZCBvbiB3aGV0aGVyIHRoZXkgb3JpZ2luYXRlIGZyb20gY2FtcHMgb3IgdmlsbGFnZXMuIFRoZSBtYWpvcml0eSBvZiBNUEMgYmVuZWZpY2lhcmllcyBhcmUgZnJvbSB2aWxsYWdlcy4gIA0KDQo8YnI+DQoNCmBgYHtyfQ0KY2JyICU+JSANCiAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiICYgcHJldmlvdXNseV9hc3Npc3RlZCA9PSAiTm8iKSAlPiUgDQogICMgQmlnIGFzc3VtcHRpb24geW91J3JlIG1ha2luZyBoZXJlLCBidXQgbGl0ZXJhbGx5IGFsbCBvZiB0aGVtIGhhdmUgdGhlIHdvcmQNCiAgIyAiY2FtcCIgaW4gdGhlaXIgbmFtZXMNCiAgbXV0YXRlKHZpbGxhZ2VfY2FtcHMgPSBpZmVsc2UodmlsbGFnZV9jYW1wcyAlaW4lIGMoImNhbXAiLCAidmlsbGFnZSIpIHwgaXMubmEodmlsbGFnZV9jYW1wcyksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWxsYWdlX2NhbXBzLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbXAiKSkgJT4lIA0KICBncm91cF9ieSh2aWxsYWdlX2NhbXBzKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIHJlcGxhY2VfbmEobGlzdCh2aWxsYWdlX2NhbXBzID0gIk5BIikpICU+JSANCiAgbXV0YXRlKGAlX2JlbmVmaWNpYXJpZXNgID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzKSAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiTW9yZSB0aGFuIHR3aWNlIGFzIG1hbnkgYmVuZWZpY2lhcmllcyBmcm9tIHZpbGxhZ2VzIGFzIGZyb20gY2FtcHMiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuNikNCiAgDQpgYGANCg0KDQo8YnI+PGJyPjxicj4NCg0KIyMjIDMuMSBCeSBzdWItZGlzdHJpY3QNCg0KYGBge3J9DQphdmdfcGNfcmVhY2hlZCA8LSBjYnIgJT4lIA0KICBtdXRhdGUoc3ViX2Rpc3RyaWN0ID0gcmVjb2RlKHN1Yl9kaXN0cmljdCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhbHFpbiIgPSAiU2FscWluIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFmcmluIiA9ICJBZnJpbiIpKSAlPiUNCiAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiICYgDQogICAgICAgICAgIHN0cl9kZXRlY3QoY2x1c3RlciwgIk11bHRpcHVycG9zZSIpICYgDQogICAgICAgICAgIHByZXZpb3VzbHlfYXNzaXN0ZWQgPT0gIk5vIikgJT4lDQogIGZpbHRlcighaXMubmEoYWRtaW4zcGNvZGUpKSAlPiUgDQogIGdyb3VwX2J5KHN1Yl9kaXN0cmljdCwgYWRtaW4zcGNvZGUsIGdvdmVybm9yYXRlKSAlPiUNCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgICAgICAuZ3JvdXBzID0gImRyb3AiKSAlPiUgDQogIGxlZnRfam9pbihobm8gJT4lIA0KICAgICAgICAgICAgICBmaWx0ZXIoYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsICJBcmloYSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlbGwgQWJpYWQiLCAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JQ0KICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjFuYW1lX2VuLCBhZG1pbjNwY29kZSkgJT4lDQogICAgICAgICAgICAgIHN1bW1hcmlzZSh0b3RhbF9wb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICAgICAgICAgICAgICAuZ3JvdXBzID0gImRyb3AiKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsX3BvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpICU+JQ0KICBtdXRhdGUoYXZnX3BjX3JlYWNoZWQgPSByb3VuZChiZW5lZmljaWFyaWVzIC8gdG90YWxfcG9wdWxhdGlvbiAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgcHVsbChhdmdfcGNfcmVhY2hlZCkNCmBgYA0KDQoNClRoZSBwbG90cyBiZWxvdyBzaG93IHRoZSBicmVha2Rvd24gb2YgYmVuZWZpY2lhcmllcyBieSBzdWItZGlzdHJpY3QuIENhdXRpb24gbXVzdCBiZSB0YWtlbiB0byBlbnN1cmUgdGhhdCBhbGxvY2F0aW9ucyBhcmUgZmFpciBhY3Jvc3MgdGhlIGFmZmVjdGVkIGFyZWFzOiB0aGVyZSBhcmUgbnVtZXJvdXMgc3ViLWRpc3RyaWN0cyB3aGVyZSBhIHZlcnkgbGFyZ2UgcHJvcG9ydGlvbiBvZiB0aGUgdG90YWwgcG9wdWxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWQgYnkgbXVsdGktcHVycG9zZSBjYXNoLCBpbiBwYXJ0aWN1bGFyLCBKYW5kYWlyaXMsIEhhcmltLCBTYWxxaW4gYW5kIFNoYXJhbi4gDQoNClJlc3BvbnNlIGFjdGl2aXRpZXMgbXVzdCBiZSBwcm9wb3J0aW9uYWwgd2l0aCB0aGUgbWFnbml0dWRlIGFuZCBzZXZlcml0eSBvZiBlYXJ0aHF1YWtlIGRhbWFnZS4gT3ZlcmFsbG9jYXRpb24gZGVwcml2ZXMgYWZmZWN0ZWQgcGVyc29ucyBvZiB0aGUgYWlkIHRoZXkgYXJlIGR1ZS4gDQoNClRoZSBhdmVyYWdlIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcHVsYXRpb24gcmVhY2hlZCwgb2YgYWxsIHN1Yi1kaXN0cmljdHMsIGlzIGByIGF2Z19wY19yZWFjaGVkYGAlLiANCg0KPGJyPg0KDQpgYGB7cn0NCnN1Yl9kaXN0cmljdF9vcmRlciA8LSBjYnIgJT4lIA0KICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIgJiANCiAgICAgICAgICAgc3RyX2RldGVjdChjbHVzdGVyLCAiTXVsdGlwdXJwb3NlIikgJiANCiAgICAgICAgICAgcHJldmlvdXNseV9hc3Npc3RlZCA9PSAiTm8iKSAlPiUgDQogIGZpbHRlcighaXMubmEoYWRtaW4zcGNvZGUpKSAlPiUgDQogIG11dGF0ZShzdWJfZGlzdHJpY3QgPSByZWNvZGUoc3ViX2Rpc3RyaWN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2FscWluIiA9ICJTYWxxaW4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWZyaW4iID0gIkFmcmluIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIHN1Yl9kaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIC5ncm91cHMgPSAiZHJvcCIpICU+JSANCiAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhnb3Zlcm5vcmF0ZSkpICU+JSANCiAgcHVsbChzdWJfZGlzdHJpY3QpDQpgYGANCg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTh9DQoNCg0KY2JyICU+JSANCiAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiICYgDQogICAgICAgICAgIHN0cl9kZXRlY3QoY2x1c3RlciwgIk11bHRpcHVycG9zZSIpICYgDQogICAgICAgICAgIHByZXZpb3VzbHlfYXNzaXN0ZWQgPT0gIk5vIikgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKGFkbWluM3Bjb2RlKSkgJT4lIA0KICBtdXRhdGUoc3ViX2Rpc3RyaWN0ID0gcmVjb2RlKHN1Yl9kaXN0cmljdCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhbHFpbiIgPSAiU2FscWluIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFmcmluIiA9ICJBZnJpbiIpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBzdWJfZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICAuZ3JvdXBzID0gImRyb3AiKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIG11dGF0ZShzdWJfZGlzdHJpY3QgPSBmYWN0b3Ioc3ViX2Rpc3RyaWN0LCAgc3ViX2Rpc3RyaWN0X29yZGVyKSwgDQogICAgICAgICBzdWJfZGlzdHJpY3QgPSBmY3RfcmV2KHN1Yl9kaXN0cmljdCkpICU+JSANCiAgYXJyYW5nZShzdWJfZGlzdHJpY3QpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYmVuZWZpY2lhcmllcywgeSA9IHN1Yl9kaXN0cmljdCkpICsgDQogIGdlb21fY29sKGFlcyhmaWxsID0gZ292ZXJub3JhdGUpKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEoYmVuZWZpY2lhcmllcykpLCANCiAgICAgICAgICAgIGhqdXN0ID0gImlud2FyZCIpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKGJlZ2luID0gLjMpICsgDQogIGxhYnModGl0bGUgPSAiTVBDIGJlbmVmaWNpYXJpZXMgYnkgZGlzdHJpY3QiLCANCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiYXMgb2YgIiwgcmVwb3J0X2RhdGUpLCANCiAgICAgICB5ID0gIiIpICsgDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKyANCg0KY2JyICU+JSANCiAgbXV0YXRlKHN1Yl9kaXN0cmljdCA9IHJlY29kZShzdWJfZGlzdHJpY3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzYWxxaW4iID0gIlNhbHFpbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZnJpbiIgPSAiQWZyaW4iKSkgJT4lDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIiAmIA0KICAgICAgICAgICBzdHJfZGV0ZWN0KGNsdXN0ZXIsICJNdWx0aXB1cnBvc2UiKSAmIA0KICAgICAgICAgICBwcmV2aW91c2x5X2Fzc2lzdGVkID09ICJObyIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGFkbWluM3Bjb2RlKSkgJT4lIA0KICBncm91cF9ieShzdWJfZGlzdHJpY3QsIGFkbWluM3Bjb2RlLCBnb3Zlcm5vcmF0ZSkgJT4lDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIikgJT4lIA0KICBsZWZ0X2pvaW4oaG5vICU+JSANCiAgICAgICAgICAgICAgZmlsdGVyKGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLCAiQXJpaGEiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZWxsIEFiaWFkIiwgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoYWRtaW4xbmFtZV9lbiwgYWRtaW4zcGNvZGUpICU+JQ0KICAgICAgICAgICAgICBzdW1tYXJpc2UodG90YWxfcG9wdWxhdGlvbiA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIiksIA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIG11dGF0ZShwY19yZWFjaGVkID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHRvdGFsX3BvcHVsYXRpb24gKiAxMDAsIGRpZ2l0cyA9IDEpKSAlPiUgDQogIG11dGF0ZShzdWJfZGlzdHJpY3QgPSBmYWN0b3Ioc3ViX2Rpc3RyaWN0LCAgc3ViX2Rpc3RyaWN0X29yZGVyKSwgDQogICAgICAgICBzdWJfZGlzdHJpY3QgPSBmY3RfcmV2KHN1Yl9kaXN0cmljdCkpICU+JSANCiAgYXJyYW5nZShzdWJfZGlzdHJpY3QpICU+JSAgDQogIGdncGxvdChhZXMoeCA9IHBjX3JlYWNoZWQsIHkgPSBzdWJfZGlzdHJpY3QpKSArDQogIGdlb21fY29sKGFlcyhmaWxsID0gZ292ZXJub3JhdGUpKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEocGNfcmVhY2hlZCkpLCANCiAgICAgICAgICAgIGhqdXN0ID0gImlud2FyZCIpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoYmVnaW4gPSAuMykgKyANCiAgbGFicyh0aXRsZSA9ICJQZXJjZW50IG9mIHBvcHVsYXRpb24gcmVhY2hlZCIsIA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJhcyBvZiAiLCByZXBvcnRfZGF0ZSksIA0KICAgICAgIHkgPSAiIiwgDQogICAgICAgeCA9ICIlIG9mIHBvcHVsYXRpb24gcmVhY2hlZCIpICsNCiAgDQogIHBsb3RfbGF5b3V0KGd1aWRlcyA9ICJjb2xsZWN0IikgJiANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpDQoNCmdnc2F2ZSgiLi9pbWcvbXBjX2J5X3N1Yl9kaXN0cmljdC5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDguMjcsIHdpZHRoID0gMTEuNjksIHVuaXRzID0gImluIikgIA0KYGBgDQoNCjxicj48YnI+DQoNCiMjIyAzLjIgQ29tcGFyaXNvbnMgd2l0aCBQSU4gYW5kIGVhcnRocXVha2UgZGFtYWdlDQoNClRoZSBwbG90IGJlbG93IHNob3dzIHRoZSB0b3RhbCBwb3B1bGF0aW9uIG9mIGVhY2ggc3ViLWRpc3RyaWN0IG9uIHRoZSB4LWF4aXMgKGZvciB0aGUgbW9tZW50LCBhbGwgcGVyc29ucyBpbiB0aGVzZSBhcmVhcyBhcmUgYXNzdW1lZCB0byBiZSBhZmZlY3RlZCBhbmQgYXJlIGluY2x1ZGVkIGluIHRoZSBQSU4pIGFuZCB0aGUgbnVtYmVyIG9mIGJlbmVmaWNpYXJpZXMgb24gdGhlIHktYXhpcy4gDQoNClRoZSBzaXplIG9mIGVhY2ggcG9pbnQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZGVhZCBvciB3b3VuZGVkIHBlcnNvbnMgdGhlcmUgcGVyIDEwMCwwMDAuIA0KDQo8YnI+DQoNCmBgYHtyIGZpZy5oZWlnaHQ9Nn0NCmVxICU+JSANCiAgbGVmdF9qb2luKGhubyAlPiUgDQogICAgICAgICAgICAgIHNlbGVjdChnb3Zlcm5vcmF0ZSA9IGFkbWluMW5hbWVfZW4sIA0KICAgICAgICAgICAgICAgICAgICAgZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuLCANCiAgICAgICAgICAgICAgICAgICAgIHN1Yl9kaXN0cmljdCA9IGFkbWluM25hbWVfZW4sIA0KICAgICAgICAgICAgICAgICAgICAgYWRtaW4zcGNvZGUpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lDQogIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmIA0KICAgICAgICAgICBkaXN0cmljdCAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsICJBcmloYSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlbGwgQWJpYWQiLCAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCBzdWJfZGlzdHJpY3QsIGFkbWluM3Bjb2RlKSAlPiUgDQogIHN1bW1hcmlzZSh3b3VuZGVkX2RlYWQgPSBzdW0od291bmRlZF9kZWFkLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gc3VtKGRhbWFnZWRfaG91c2VzLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgbGVmdF9qb2luKGhubyAlPiUgDQogICAgICAgICAgICAgIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmDQogICAgICAgICAgICAgICAgICAgICAgIGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLCAiQXJpaGEiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZWxsIEFiaWFkIiwgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoYWRtaW4zcGNvZGUpICU+JQ0KICAgICAgICAgICAgICBzdW1tYXJpc2UocG9wdWxhdGlvbiA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uLCBuYS5ybSA9IFRSVUUpKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgbXV0YXRlKHdvdW5kZWRfZGVhZF8xMDBrID0gcm91bmQod291bmRlZF9kZWFkIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMiksIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXNfMTAwayA9IHJvdW5kKGRhbWFnZWRfaG91c2VzIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMikpICU+JSANCiAgICBsZWZ0X2pvaW4oY2JyICU+JSANCiAgICAgICAgICAgICAgICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIgJiANCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGNsdXN0ZXIsICJNdWx0aXB1cnBvc2UiKSAmIA0KICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHlfYXNzaXN0ZWQgPT0gIk5vIikgJT4lIA0KICAgICAgICAgICAgICAgIGdyb3VwX2J5KGFkbWluM3Bjb2RlKSAlPiUgDQogICAgICAgICAgICAgICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSksIA0KICAgICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcG9wdWxhdGlvbiwgeSA9IGJlbmVmaWNpYXJpZXMpKSArIA0KICBnZW9tX3BvaW50KGFlcyhzaXplID0gd291bmRlZF9kZWFkXzEwMGspKSArIA0KICBnZW9tX3RleHRfcmVwZWwoYWVzKGxhYmVsID0gc3ViX2Rpc3RyaWN0KSwNCiAgICAgICAgICAgICAgICAgICBwb2ludC5wYWRkaW5nID0gLjUsIA0KICAgICAgICAgICAgICAgICAgIHNlZ21lbnQuY29sb3IgPSAiZ3JleTUwIiwgc2l6ZSA9IDMpICsNCiAgc2NhbGVfeF9sb2cxMChicmVha3MgPSBjKDAsIDMwMDAsIDEwMDAwLCAzMDAwMCwgMTAwMDAwLCAzMDAwMDAsIDEwMDAwMDApLCANCiAgICAgICAgICAgICAgICBsYWJlbHMgPSBjb21tYSkgKyANCiAgc2NhbGVfeV9sb2cxMChicmVha3MgPSBjKDAsIDEwMDAsIDMwMDAsIDEwMDAwLCAzMDAwMCwgMTAwMDAwKSwNCiAgICAgICAgICAgICAgICBsYWJlbHMgPSBjb21tYSkgKyANCiAgc2NhbGVfc2l6ZShicmVha3MgPSBjKDAsIDEwMCwgNTAwLCAxMDAwLCAzMDAwKSkgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IEZBTFNFLCBjb2xvdXIgPSAiYmx1ZSIsIHNpemUgPSAuNSkgKw0KICBsYWJzKHRpdGxlID0gIlBvcHVsYXRpb24gYW5kIE1QQyBiZW5lZmljaWFyaWVzIGJ5IHN1Yi1kaXN0cmljdCIsDQogICAgICAgc3VidGl0bGUgPSAiU2l6ZSBpbmRpY2F0ZXMgZGVhZC93b3VuZGVkIHBlciAxMDAsMDAwMCIsIA0KICAgICAgIHggPSAiUG9wdWxhdGlvbiIsIA0KICAgICAgIHkgPSAiQmVuZWZpY2lhcmllcyIsIA0KICAgICAgIHNpemUgPSAiRGVhZC93b3VuZGVkXG5wZXIgMTAwayIsIA0KICAgICAgIGNhcHRpb24gPSAiRGF0YSBmcm9tIENXRywgRlNMIGFuZCBBQ1UiKSArDQogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IC41KSkgDQogIA0KZ2dzYXZlKCIuL2ltZy9wb3BfYmVuX3NjYXR0ZXIucG5nIiwgZHBpID0gMzAwLCBoZWlnaHQgPSA4LjI3LCB3aWR0aCA9IDExLjY5LCB1bml0cyA9ICJpbiIpDQogDQpgYGANCg0KPGJyPiANCg0KVGhlIGhpZ2hlciBvciBsb3dlciBhIHN1Yi1kaXN0cmljdCBpcyBhYm92ZSB0aGUgYmx1ZSBsaW5lLCB0aGUgbW9yZSBkaXNwcm9wb3J0aW9uYXRlIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyBhbGxvY2F0ZWQgdG8gdGhhdCBsb2NhdGlvbiBhcmUuIA0KDQpUaGlzIHNob3VsZCBhbHNvIGJlIGNvbXBhcmVkIHRvIGVhY2ggc3ViLWRpc3RyaWN0J3Mgc2hhcmUgb2YgdGhlIGVhcnRocXVha2UgZGFtYWdlLiBPZiBwYXJ0aWN1bGFyIG5vdGUsIHN1Yi1kaXN0cmljdHMgaW4gZ3JleSBoYXZlIHlldCB0byByZWNlaXZlIGFueSBNUEMgYXNzaXN0YW5jZS4gDQoNCjxicj4NCg0KYGBge3IgZmlnLmhlaWdodD02fQ0KZXEgJT4lIA0KICBsZWZ0X2pvaW4oaG5vICU+JSANCiAgICAgICAgICAgICAgc2VsZWN0KGdvdmVybm9yYXRlID0gYWRtaW4xbmFtZV9lbiwgDQogICAgICAgICAgICAgICAgICAgICBkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4sIA0KICAgICAgICAgICAgICAgICAgICAgc3ViX2Rpc3RyaWN0ID0gYWRtaW4zbmFtZV9lbiwgDQogICAgICAgICAgICAgICAgICAgICBhZG1pbjNwY29kZSksIA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUNCiAgZmlsdGVyKGFkbWluM3Bjb2RlICVpbiUgbndfcGNvZGUzICYgDQogICAgICAgICAgIGRpc3RyaWN0ICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwgIkFyaWhhIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVsbCBBYmlhZCIsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QsIHN1Yl9kaXN0cmljdCwgYWRtaW4zcGNvZGUpICU+JSANCiAgc3VtbWFyaXNlKHdvdW5kZWRfZGVhZCA9IHN1bSh3b3VuZGVkX2RlYWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZGFtYWdlZF9ob3VzZXMgPSBzdW0oZGFtYWdlZF9ob3VzZXMsIG5hLnJtID0gVFJVRSkpICU+JQ0KICBsZWZ0X2pvaW4oaG5vICU+JSANCiAgICAgICAgICAgICAgZmlsdGVyKGFkbWluM3Bjb2RlICVpbiUgbndfcGNvZGUzICYNCiAgICAgICAgICAgICAgICAgICAgICAgYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsICJBcmloYSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlbGwgQWJpYWQiLCAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JQ0KICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lDQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSkpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lIA0KICBtdXRhdGUod291bmRlZF9kZWFkXzEwMGsgPSByb3VuZCh3b3VuZGVkX2RlYWQgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlc18xMDBrID0gcm91bmQoZGFtYWdlZF9ob3VzZXMgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICAgIGxlZnRfam9pbihjYnIgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIiAmIA0KICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9kZXRlY3QoY2x1c3RlciwgIk11bHRpcHVycG9zZSIpICYgDQogICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseV9hc3Npc3RlZCA9PSAiTm8iKSAlPiUgDQogICAgICAgICAgICAgICAgZ3JvdXBfYnkoYWRtaW4zcGNvZGUpICU+JSANCiAgICAgICAgICAgICAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSwgDQogICAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBkYW1hZ2VkX2hvdXNlcywgeSA9IHdvdW5kZWRfZGVhZCkpICsgDQogIGdlb21fcG9pbnQoYWVzKHNpemUgPSB3b3VuZGVkX2RlYWRfMTAwaywgDQogICAgICAgICAgICAgICAgIGNvbG91ciA9IGJlbmVmaWNpYXJpZXMpKSArIA0KICBnZW9tX3RleHRfcmVwZWwoYWVzKGxhYmVsID0gc3ViX2Rpc3RyaWN0KSwNCiAgICAgICAgICAgICAgICAgICBwb2ludC5wYWRkaW5nID0gLjUsIA0KICAgICAgICAgICAgICAgICAgIHNlZ21lbnQuY29sb3IgPSAiZ3JleTUwIiwgc2l6ZSA9IDMpICsNCiAgc2NhbGVfeF9sb2cxMChsYWJlbHMgPSBjb21tYSkgKyANCiAgc2NhbGVfeV9sb2cxMChsYWJlbHMgPSBjb21tYSkgKyANCiAgc2NhbGVfY29sb3VyX3ZpcmlkaXMob3B0aW9uID0gIm1ha28iLCBkaXJlY3Rpb24gPSAtMSwgDQogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hKSArIA0KICBzY2FsZV9zaXplKGJyZWFrcyA9IGMoMCwgMTAwLCA1MDAsIDEwMDAsIDMwMDApKSArIA0KICBsYWJzKHggPSAiTnVtYmVyIG9mIGRhbWFnZWQgaG91c2VzIiwgDQogICAgICAgeSA9ICJOdW1iZXIgb2Ygd291bmRlZCBhbmQgZGVhZCIsIA0KICAgICAgIHRpdGxlID0gIk1hZ25pdHVkZSBvZiBlYXJ0aHF1YWtlIGltcGFjdHMgYnkgc3ViLWRpc3RyaWN0IiwgDQogICAgICAgc3VidGl0bGUgPSAiU2l6ZSBzaG93cyBzZXZlcml0eSAod291bmRlZC9kZWFkIHBlciAxMDBrKSBhbmQgY29sb3VyIHNob3dzIGJlbmVmaWNpYXJpZXMiLCANCiAgICAgICBzaXplID0gIldvdW5kZWQvZGVhZFxucGVyIDEwMGsiLCANCiAgICAgICBjb2xvdXIgPSAiQmVuZWZpY2lhcmllcyIsIA0KICAgICAgIGNhcHRpb24gPSAiRGF0YSBmcm9tIENXRywgRlNMIGFuZCBBQ1UiKQ0KDQpnZ3NhdmUoIi4vaW1nL2VhcnRocXVha2VfaW1wYWN0X3NjYXR0ZXIucG5nIiwgZHBpID0gMzAwLCBoZWlnaHQgPSA4LjI3LCB3aWR0aCA9IDExLjY5LCB1bml0cyA9ICJpbiIpDQpgYGANCg0KPGJyPg0KDQpUaGUgQ1dHIGlzIGN1cnJlbnRseSB3b3JraW5nIG9uIGEgcHJpb3JpdGlzYXRpb24gc2NvcmUsIHdoaWNoIGNhbiBiZSBhIHVzZWZ1bCBzaG9ydGhhbmQsIHRoYXQgd2lsbCB0YWtlIGludG8gYWNjb3VudCBwcmUtZXhpc3RpbmcgdnVsbmVyYWJpbGl0eSAobGlrZWx5IGZyb20gdGhlIE1TTkEpIGFzIHdlbGwgYXMgZWFydGhxdWFrZSBpbXBhY3RzLiANCg0KPGJyPjxicj4NCg0KDQojIyMgMy4zIFBsYW5uZWQgYWN0aXZpdGllcyANCg0KV2hpbHN0IGl0IGlzIGhlYXJ0ZW5pbmcgdG8gc2VlIG5ldyBzdWItZGlzdHJpY3RzLCB0aGUgbWFqb3JpdHkgb2YgcGxhbm5lZCBhbGxvY2F0aW9ucyBoYXZlIGJlZW4gYWNjb3JkZWQgdG8gYXJlYXMgdGhhdCBoYXZlIGFscmVhZHkgcmVjZWl2ZWQgcmVsYXRpdmVseSBoaWdoIGxldmVscyBvZiBzdXBwb3J0LiAgDQoNCjxicj4gDQoNCmBgYHtyfQ0KY2JyICU+JSANCiAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJQbGFubmVkIiAmIHN0cl9kZXRlY3QoY2x1c3RlciwgIk11bHRpcHVycG9zZSIpKSAlPiUNCiAgZmlsdGVyKGdvdmVybm9yYXRlID09ICJBbGVwcG8iKSAlPiUgIA0KICBncm91cF9ieShzdWJfZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBmaWx0ZXIoYmVuZWZpY2lhcmllcyA+IDApICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYmVuZWZpY2lhcmllcywgeSA9IGZjdF9yZW9yZGVyKHN1Yl9kaXN0cmljdCwgYmVuZWZpY2lhcmllcykpKSArIA0KICBnZW9tX2NvbChmaWxsID0gIiM0MWI2YzQiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShiZW5lZmljaWFyaWVzKSksIGhqdXN0ID0gImlud2FyZCIpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHVuaXRfZm9ybWF0KHVuaXQgPSAiSyIsIHNjYWxlID0gMWUtMywgYWNjdXJhY3kgPSAxKSkgKyANCiAgbGFicyh0aXRsZSA9ICJQbGFubmVkIGJlbmVmaWNpYXJpZXMgLS0gQWxlcHBvIiwgDQogICAgICAgeCA9ICIiLCANCiAgICAgICB5ID0gIiIpICsgDQoNCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiUGxhbm5lZCIgJiBzdHJfZGV0ZWN0KGNsdXN0ZXIsICJNdWx0aXB1cnBvc2UiKSkgJT4lDQogIGZpbHRlcihnb3Zlcm5vcmF0ZSA9PSAiSWRsZWIiICYgIWlzLm5hKGFkbWluM3Bjb2RlKSkgJT4lICANCiAgZ3JvdXBfYnkoc3ViX2Rpc3RyaWN0KSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgZmlsdGVyKGJlbmVmaWNpYXJpZXMgPiAwKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGJlbmVmaWNpYXJpZXMsIHkgPSBmY3RfcmVvcmRlcihzdWJfZGlzdHJpY3QsIGJlbmVmaWNpYXJpZXMpKSkgKyANCiAgZ2VvbV9jb2woZmlsbCA9ICJsaWdodGdvbGRlbnJvZCIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKGJlbmVmaWNpYXJpZXMpKSwgaGp1c3QgPSAiaW53YXJkIikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gdW5pdF9mb3JtYXQodW5pdCA9ICJLIiwgc2NhbGUgPSAxZS0zLCBhY2N1cmFjeSA9IDEpKSArIA0KICBsYWJzKHRpdGxlID0gIlBsYW5uZWQgYmVuZWZpY2lhcmllcyAtLSBJZGxlYiIsIA0KICAgICAgIHggPSAiUGxhbm5lZCBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgeSA9ICIiKSAgKyANCg0KICBwbG90X2xheW91dCh3aWR0aHMgPSBjKDEuMTUsIDEpKQ0KDQpnZ3NhdmUoIi4vaW1nL3BsYW5uZWRfYnlfc3ViX2Rpc3RyaWN0LnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gOC4yNywgd2lkdGggPSAxMS42OSwgdW5pdHMgPSAiaW4iKQ0KDQpgYGANCg0KPGJyPg0KDQpgYGB7cn0NCmNiciAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KGNsdXN0ZXIsICJNdWx0aXB1cnBvc2UiKSAmIHByZXZpb3VzbHlfYXNzaXN0ZWQgPT0gIk5vIikgJT4lIA0KICBncm91cF9ieShwcm9qZWN0X3N0YXR1cykgJT4lIA0KICBzdW1tYXJpc2UocGFydG5lcnMgPSBuX2Rpc3RpbmN0KGltcGxlbWVudGluZ19wYXJ0bmVyKSwgDQogICAgICAgICAgICBiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbXV0YXRlKGAlX2JlbmVmaWNpYXJpZXNgID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzKSAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiMTQgcGFydG5lcnMgaGF2ZSByZXBvcnRlZCBwbGFubmVkIGFjdGl2aXRpZXMiKSAlPiUNCiAgdGhlbWVfemVicmEoKSAlPiUNCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC42KQ0KYGBgDQoNCjxicj4NCg0KVGhlIHN1bSBvZiBwbGFubmVkIGJlbmVmaWNpYXJpZXMgaXMgYHIgZm9ybWF0KGZpbHRlcihjYnIsIHByb2plY3Rfc3RhdHVzID09ICJQbGFubmVkIiAmIHN0cl9kZXRlY3QoY2x1c3RlciwgIk11bHRpcHVycG9zZSIpKSAlPiUge3N1bSguJGJlbmVmaWNpYXJpZXMpfSwgYmlnLm1hcmsgPSAiLCIpYC4gSWYgdGhpcyBpcyB0aGUgZXh0ZW50IG9mIGFsbCBwbGFubmVkIE1QQyBhY3Rpdml0aWVzLCB0aGUgQ1dHIGFzIGEgd2hvbGUgY2FuIGV4cGVjdCB0byByZWFjaCBgciByb3VuZCgoY2JyICU+JSBmaWx0ZXIocHJvamVjdF9zdGF0dXMgIT0gIlN1c3BlbmRlZCIgJiBzdHJfZGV0ZWN0KGNsdXN0ZXIsICJNdWx0aXB1cnBvc2UiKSAmIHByZXZpb3VzbHlfYXNzaXN0ZWQgPT0gIk5vIikgJT4lIHtzdW0oLiRiZW5lZmljaWFyaWVzKX0pIC8gNjYyOTI0ICogMTAwLCBkaWdpdHMgPSAwKWAlIG9mIGl0cyB0YXJnZXQgb2YgNjYyLDkyNCBwZXJzb25zLiBCdXQgd2hpbHN0IHRoZSBzY2FsZSBvZiBhY2hpZXZlbWVudHMgaXMgaW1wb3J0YW50LCBpdCBpcyBhbHNvIGtleSB0byBlbnN1cmUgdGhhdCBhbGxvY2F0aW9ucyBhcmUgZmFpci4gDQoNCg0KDQo8YnI+DQoNCg0KDQpgYGB7cn0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiUGxhbm5lZCIgJiBzdHJfZGV0ZWN0KGNsdXN0ZXIsICJNdWx0aXB1cnBvc2UiKSkgJT4lIA0KICBtdXRhdGUobW9udGggPSBtb250aChkaXN0cmlidXRpb25fZGF0ZSwgbGFiZWwgPSBUUlVFKSwgDQogICAgICAgICBtb250aCA9IGFzLmNoYXJhY3Rlcihtb250aCkpICU+JSANCiAgbXV0YXRlKG1vbnRoID0gaWZlbHNlKG1vbnRoICVpbiUgYygiRmViIiwgIk1hciIpIHwgaXMubmEobW9udGgpLCAiTkEiLCBtb250aCkpICU+JSANCiAgZ3JvdXBfYnkobW9udGgpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUobW9udGggPSBmYWN0b3IobW9udGgsIGMoIkFwciIsICJNYXkiLCAiSnVuIiwgIkRlYyIsICJOQSIpKSkgJT4lIA0KICBhcnJhbmdlKG1vbnRoKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF9jYXB0aW9uKCJQbGFubmVkIGJlbmVmaWNpYXJpZXMgYnkgbW9udGgiKSAlPiUgDQogIGZvb3Rub3RlKGkgPSAxLCBqID0gMSwgaW5saW5lID0gVFJVRSwgcmVmX3N5bWJvbHMgPSAiMSIsIHBhcnQgPSAiaGVhZGVyIiwNCiAgICAgICAgICAgdmFsdWUgPSBhc19wYXJhZ3JhcGgoIlNvbWUgZGF0ZXMgYXJlIG1pc3Npbmcgb3IgaW1wcm9wZXJseSBlbmNvZGVkIikpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC41KQ0KYGBgDQoNCg0KDQo8YnI+PGJyPjxicj4NCg0KIyA0LiBDYXNoIHJlc3BvbnNlIGFjdG9ycyBhbmQgY2FzaCBkaXNidXJzZWQNCg0KDQpVU0QgYHIgcGFzdGUocm91bmQoY2JyICU+JSBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kdG90YWxfdXNkKX0gLyAxMDAwMDAwLCBkaWdpdHMgPSAxKSwgIm1pbGxpb24iKWAgaGFzIGJlZW4gZGlzdHJpYnV0ZWQgYWNyb3NzIGByIGNiciAlPiUgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge25fZGlzdGluY3QoLiRhZG1pbjRwY29kZSl9YCBjb21tdW5pdGllcyBhbmQgYHIgY2JyICU+JSBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7bl9kaXN0aW5jdCguJGFkbWluM3Bjb2RlKX1gIHN1Yi1kaXN0cmljdHMgaW4gTlcgU3lyaWEuDQoNCjxicj4NCg0KYGBge3J9DQpjYnIgJT4lIA0KICBmaWx0ZXIocHJvamVjdF9zdGF0dXMgPT0gIkNvbXBsZXRlZCIgJiBwcmV2aW91c2x5X2Fzc2lzdGVkID09ICJObyIpICU+JSANCiAgZ3JvdXBfYnkoaW1wbGVtZW50aW5nX3BhcnRuZXIsIA0KICAgICAgICAgICBhZG1pbjJwY29kZSwgDQogICAgICAgICAgIGFkbWluNHBjb2RlKSAlPiUgDQogIHNsaWNlKHdoaWNoLm1heChiZW5lZmljaWFyaWVzKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBncm91cF9ieShpbXBsZW1lbnRpbmdfcGFydG5lcikgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGRpc3RyaWN0cyA9IG5fZGlzdGluY3QoYWRtaW4ycGNvZGUpLCANCiAgICAgICAgICAgIGNvbW11bml0aWVzID0gbl9kaXN0aW5jdChhZG1pbjRwY29kZSkpICU+JSANCiAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24oIlJlYWNoIGFuZCBmb290cHJpbnQgb2YgY2FzaCByZXNwb25zZSBhY3RvcnMiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjgpICU+JSANCiAgZm9vdG5vdGUoYXNfcGFyYWdyYXBoKCJPbmx5IHBhcnRuZXJzIHdobyBwcm92aWRlZCBtb3JlIHRoYW4gVVNEIDEwMC9mYW1pbHkvbW9udGgiKSwgDQogICAgICAgICAgIGkgPSAxLCBqID0gMSwgcGFydCA9ICJoZWFkZXIiLCBpbmxpbmUgPSBUUlVFLCByZWZfc3ltYm9scyA9ICIxIikNCiAgDQpgYGANCg0KPGJyPg0KDQpJbiB0aGUgc2NhdHRlcnBsb3QgYmVsb3csIGVhY2ggcG9pbnQgaXMgYSBzaW5nbGUgY2FzaCB3b3JraW5nIGdyb3VwIHBhcnRuZXIuIFRoZSB4LWF4aXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyByZWFjaGVkIHBlciBhZ2VuY3kgYW5kIHRoZSB5LWF4aXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY29tbXVuaXRpZXMgKGFkbWluNCkgcmVhY2hlZC4gTW91c2Ugb3ZlciBlYWNoIHBvaW50IGZvciBtb3JlIGRldGFpbHMuDQoNCjxicj4NCg0KDQoNCmBgYHtyIHBhcnRuZXItc2NhdHRlcn0NCnBhcnRuZXJfc2NhdHRlciA8LSBjYnIgJT4lIA0KICAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGltcGxlbWVudGluZ19wYXJ0bmVyLCANCiAgICAgICAgICAgYWRtaW4ycGNvZGUsIA0KICAgICAgICAgICBhZG1pbjRwY29kZSkgJT4lIA0KICBzbGljZSh3aGljaC5tYXgoYmVuZWZpY2lhcmllcykpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgZ3JvdXBfYnkoaW1wbGVtZW50aW5nX3BhcnRuZXIpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBjb21tdW5pdGllcyA9IG5fZGlzdGluY3QoYWRtaW40cGNvZGUpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGJlbmVmaWNpYXJpZXMsIHkgPSBjb21tdW5pdGllcykpICsNCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IGJlbmVmaWNpYXJpZXMsIA0KICAgICAgICAgICAgICAgICB0ZXh0ID0gcGFzdGUwKGltcGxlbWVudGluZ19wYXJ0bmVyLCAiXG4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVuZWZpY2lhcmllczogIiwgZm9ybWF0KGJlbmVmaWNpYXJpZXMsIGJpZy5tYXJrID0gIiwiKSwgIlxuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW11bml0aWVzOiAiLCBjb21tdW5pdGllcykpKSArIA0KICBzY2FsZV94X2xvZzEwKGxhYmVscyA9IGNvbW1hKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsgDQogIGxhYnMoeCA9ICJCZW5lZmljaWFyaWVzIHJlYWNoZWQiLCANCiAgICAgICB5ID0gIkNvbW11bml0aWVzIChhZG1pbjQpIHJlYWNoZWQiLCANCiAgICAgICB0aXRsZSA9ICJJbXBsZW1lbnRpbmcgcGFydG5lcnMgLS0gYmVuZWZpY2lhcmllcyBhbmQgY29tbXVuaXRpZXMgcmVhY2hlZCIpDQoNCmdncGxvdGx5KHBhcnRuZXJfc2NhdHRlciwgdG9vbHRpcCA9IGMoInRleHQiKSkgJT4lIA0KICBsYXlvdXQoc2hvd2xlZ2VuZCA9IFRSVUUsIGxlZ2VuZCA9IGxpc3QoZm9udCA9IChsaXN0KHNpemUgPSA2KSkpKSAlPiUgDQogIHBsb3RseTo6c3R5bGUoaG92ZXJvbiA9ICJwb2ludCIpICU+JSANCiAgbGF5b3V0KHRpdGxlID0gbGlzdCh0ZXh0ID0gcGFzdGUwKCJCZW5lZmljaWFyaWVzIGFuZCBjb21tdW5pdGllcyByZWFjaGVkIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3VwPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FzaCByZXNwb25zZSBpbXBsZW1lbnRpbmcgcGFydG5lcnM7IG1vdXNlIG92ZXIgZm9yIGRldGFpbHMiLCI8L3N1cD4iKSkpDQoNCg0KYGBgDQoNCg0KDQo8YnI+PGJyPg0KDQojIyMgNC4xIFVTRCBkaXNidXJzZWQgcGVyIHBhcnRuZXINCg0KPGJyPg0KDQpgYGB7cn0NCmNiciAlPiUgDQogIGZpbHRlcihwcm9qZWN0X3N0YXR1cyA9PSAiQ29tcGxldGVkIiAmIA0KICAgICAgICAgICBzdHJfZGV0ZWN0KGNsdXN0ZXIsICJNdWx0aXB1cnBvc2UiKSkgJT4lIA0KICBncm91cF9ieShpbXBsZW1lbnRpbmdfcGFydG5lcikgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfdXNkID0gc3VtKHRvdGFsX3VzZCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBmYW1pbGllcyA9IHN1bShmYW1pbGllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUodXNkX3Blcl9mYW0gPSByb3VuZCh0b3RhbF91c2QgLyBmYW1pbGllcywgZGlnaXRzID0gMiksIA0KICAgICAgICAgYCVfdXNkX3RvdGFsYCA9IHJvdW5kKHRvdGFsX3VzZCAvIHN1bSh0b3RhbF91c2QpICogMTAwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSAyKSwgDQogICAgICAgICB0b3RhbF91c2QgPSByb3VuZCh0b3RhbF91c2QpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyh0b3RhbF91c2QpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24oIlVTRCBkaXNidXJzZWQgYW5kIGZhbWlsaWVzIHJlYWNoZWQgYnkgcGFydG5lciIpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIGZsZXh0YWJsZTo6c2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC44KQ0KYGBgDQoNCjxicj4NCg0KVGhlIENXRyBpcyBjdXJyZW50bHkgd29ya2luZyB3aXRoIG90aGVyIENsdXN0ZXJzIHRvIGNvbnNvbGlkYXRlIGFsbCBjYXNoLWJhc2VkIGFjdGl2aXRpZXMgYW5kIHdpbGwgc29vbiBiZSBhYmxlIHRvIHByb3ZpZGUgbW9yZSBjb21wcmVoZW5zaXZlIHJlcG9ydGluZy4gDQoNCg0KPGJyPjxicj48YnI+DQoNCiMgNS4gQW5uZXhlcw0KDQo8YnI+DQoNCiMjIyA1LjEgSW50ZXJhY3RpdmUgcmVmZXJlbmNlIHRhYmxlIGF0IHN1Yi1kaXN0cmljdCBsZXZlbA0KDQpDb2x1bW5zIGluY2x1ZGU6IA0KYGdvdmVybm9yYXRlYCwgYGRpc3RyaWN0YCwgYHN1Yi1kaXN0cmljdGAsIA0KYHRvdGFsIHBvcHVsYXRpb25gLCBgYmVuZWZpY2lhcmllc2AsIGB0b3RhbCB1c2QgZGlzYnVyc2VkYCwgDQpgd291bmRlZCBhbmQgZGVhZGAsIGB3b3VuZGVkIGFuZCBkZWFkIHBlciAxMDBrYCwgDQpgZGFtYWdlZCBob3VzZXNgLCBgZGFtYWdlZCBob3VzZXMgcGVyIDEwMGtgLCANCmBhZG1pbjNwY29kZWANCg0KYGBge3J9DQplcSAlPiUgDQogIGxlZnRfam9pbihsb2NhdGlvbnMgJT4lIGRpc3RpbmN0KGFkbWluM3Bjb2RlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9kaXN0cmljdCA9IGFkbWluM25hbWVfZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Zlcm5vcmF0ZSA9IGFkbWluMW5hbWVfZW4pLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lIA0KICBsZWZ0X2pvaW4oY2JyICU+JSANCiAgICAgICAgICAgICAgZmlsdGVyKHByb2plY3Rfc3RhdHVzID09ICJDb21wbGV0ZWQiICYgDQogICAgICAgICAgICAgICAgICAgICAgIHN0cl9kZXRlY3QoY2x1c3RlciwgIk11bHRpcHVycG9zZSIpKSAlPiUgDQogICAgICAgICAgICAgIGdyb3VwX2J5KGFkbWluM3Bjb2RlKSAlPiUgDQogICAgICAgICAgICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXNbcHJldmlvdXNseV9hc3Npc3RlZCA9PSAiTm8iXSwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF91c2QgPSBzdW0odG90YWxfdXNkLCBuYS5ybSA9IFRSVUUpKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgc2VsZWN0KGdvdmVybm9yYXRlLCBkaXN0cmljdCwgc3ViX2Rpc3RyaWN0LCANCiAgICAgICAgIHRvdGFsX3BvcHVsYXRpb24sIA0KICAgICAgICAgYmVuZWZpY2lhcmllcywgdG90YWxfdXNkLCANCiAgICAgICAgIHdvdW5kZWRfZGVhZCwgd291bmRlZF9kZWFkXzEwMGssIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXMsIGRhbWFnZWRfaG91c2VzXzEwMGssIA0KICAgICAgICAgYWRtaW4zcGNvZGUpICU+JSANCiAgZGF0YXRhYmxlKG9wdGlvbnMgPSBsaXN0KHBhZ2VMZW5ndGggPSAxMCwgc2Nyb2xsWCA9IFRSVUUpLCANCiAgICAgICAgICAgIGZpbHRlciA9IGxpc3QocG9zaXRpb24gPSAidG9wIiwgY2xlYXIgPSBGQUxTRSksDQogICAgICAgICAgICBjYXB0aW9uID0gaHRtbHRvb2xzOjp0YWdzJGNhcHRpb24oc3R5bGUgPSAnY2FwdGlvbi1zaWRlOiB0b3A7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6MTIwJSA7JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZlcmVuY2UgdGFibGUgLS0gRWFydGhxdWFrZSBpbXBhY3RzLCBmcm9tIEFDVSwgZXh0cmFjdGVkIDIwMjMwMzI4IikpICU+JSANCiAgZm9ybWF0U3R5bGUoMCwgdGFyZ2V0ID0gInJvdyIsIGxpbmVIZWlnaHQgPSAiODAlIiwgZm9udFNpemUgPSAiODAlIikgJT4lIA0KICBmb3JtYXRSb3VuZChjKCJ3b3VuZGVkX2RlYWRfMTAwayIsICJkYW1hZ2VkX2hvdXNlc18xMDBrIiksIGRpZ2l0cyA9IDIpICU+JSANCiAgZm9ybWF0Q3VycmVuY3koYygidG90YWxfcG9wdWxhdGlvbiIsIA0KICAgICAgICAgICAgICAgICAgICJ3b3VuZGVkX2RlYWQiLCAiZGFtYWdlZF9ob3VzZXMiLCANCiAgICAgICAgICAgICAgICAgICAiYmVuZWZpY2lhcmllcyIsICJ0b3RhbF91c2QiKSwgDQogICAgICAgICAgICAgICAgIGN1cnJlbmN5ID0gIiIsIGludGVydmFsID0gMywgbWFyayA9ICIsIikgJT4lDQogIGZvcm1hdFJvdW5kKGMoInRvdGFsX3BvcHVsYXRpb24iLCANCiAgICAgICAgICAgICAgICAid291bmRlZF9kZWFkIiwgImRhbWFnZWRfaG91c2VzIiwNCiAgICAgICAgICAgICAgICAiYmVuZWZpY2lhcmllcyIsICJ0b3RhbF91c2QiKSwgZGlnaXRzID0gMCkNCiAgDQpgYGANCg0KPGJyPjxicj4NCg0KIyMjIDUuMiBSZXBvcnRpbmcgcXVhbGl0eSANCg0KVGhpcyBzZWN0aW9uIGRvY3VtZW50cyBpc3N1ZXMgZW5jb3VudGVyZWQgaW4gdGhlIGNsZWFuaW5nIG9mIDRXIGFuZCBGU0wgZGF0YSBhbmQgdGhlaXIgaW1wYWN0cyBvbiB0aGUgcXVhbGl0eSBvZiByZXBvcnRpbmcgdGhlIENXRyBjYW4gcHJvdmlkZS4gVGhlIHJlY29tbWVuZGF0aW9ucyBieSB0aGUgQ1dHIGFyZSBpbmNsdWRlZCB0byBlbmhhbmNlIHJlcG9ydGluZyBxdWFsaXR5OiANCg0KMS4gVGhlIENXRyBoYXMgc2hpZnRlZCBpbnRvIGEgbmV3IDRXcyB0ZW1wbGF0ZSBmb3IgYml3ZWVrbHkgcmVwb3J0aW5nIHRvIGJldHRlciBjYXB0dXJlIHRoZSBlYXJ0aHF1YWtlIHJlc3BvbnNlLiBEZWFkbGluZXMgYXJlIHNldCBvbiB0aGUgMTB0aCBhbmQgdGhlIDI1dGggb2YgZWFjaCBtb250aC4gOCBwYXJ0bmVycyByZXBvcnRlZCBhY2hpZXZlbWVudHMgaW4gRmVicnVhcnkgYW5kIDEwIHJlcG9ydGVkIGFjaGlldmVtZW50cyBpbiBNYXJjaCwgd2l0aCAxMiBwYXJ0bmVycyBoYXZpbmcgcmVwb3J0ZWQgc28gZmFyIGluIEFwcmlsLiBJZiBubyBNUEMgYWN0aXZpdGllcyB3ZXJlIGltcGxlbWVudGVkLCBwbGVhc2UgaW5mb3JtIHRoZSBDV0cgYXMgd2VsbC4gDQoNCjIuIEZvciB0aGlzIHJlcG9ydGluZyBwZXJpb2QsIGFjdGl2aXRpZXMgcGVydGFpbmluZyB0byAxOSw4ODYgYmVuZWZpY2lhcmllcyB3ZXJlIG1pc3NpbmcgdGhlaXIgZGF0ZXMgb3IgaGFkIGRhdGVzIGluIHVucmVhZGFibGUgZm9ybWF0cy4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBgc3RhcnQgZGF0ZWAgYW5kIGBlbmQgZGF0ZWAgYXJlIGVudGVyZWQgaW4gdGhlIGZvcm1hdCAqKm1tL2RkL3l5eXkqKiBhbmQgc2VsZWN0IHRoZSBgbW9udGggb2YgcmVwb3J0aW5nYCBmcm9tIHRoZSBvcHRpb25zIGluIHRoZSBkcm9wZG93biBtZW51LiANCg0KMy4gRm9yIHNleC1hbmQtYWdlIGRpc2dncmVnYXRpb25zLCBwbGVhc2UgZG8gbm90IGJhY2tmaWxsIHRoZXNlIGNvbHVtbnMgdXNpbmcgY2FsY3VsYXRpb25zIGJhc2VkIG9uIHRoZSBjZW5zdXMgb3IgdGhlIE1TTkEuIElmIG5vIGRpc2FnZ3JlZ2F0ZWQgZGF0YSBpcyBhdmFpbGFibGUgdG8geW91ciBvcmdhbmlzYXRpb24sIHBsZWFzZSBsZWF2ZSB0aGVzZSBjb2x1bW5zIGJsYW5rLiANCg0KNC4gVGhlIENhc2ggV29ya2luZyBHcm91cCBpcyBjdXJyZW50bHkgb25seSBjb2xsZWN0aW5nIHBsYW5uZWQgYW5kIGltcGxlbWVudGVkICoqTXVsdGlwdXJwb3NlIENhc2gqKiBhY2hpZXZlbWVudHMuIFdoaWxzdCB0aGUgQ1dHIHdlbGNvbWVzIGFkZGl0aW9uYWwgaW5wdXRzIG9uIG90aGVyIENWQSBhY3Rpdml0aWVzLCB3ZSBhbHNvIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlcG9ydGluZyBsb2FkIGlzIGFzIGxvdyBhcyBwb3NzaWJsZSBmb3IgcGFydG5lcnMgaS5lLiBpZiBhbiBhZ2VuY3kgaGFzIGltcGxlbWVudGVkIENhc2gtZm9yLVdvcmssIHRoaXMgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIHRoZSBFUkwgQ2x1c3Rlci4gVGhlIENXRyB3aWxsIHdvcmsgd2l0aCBhbGwgQ2x1c3RlcnMgdG8gZGV2ZWxvcCBhIGNvbnNvbGlkYXRlZCBwaWN0dXJlIG9mIHJlc3BvbnNlLXdpZGUgQ1ZBIGludGVydmVudGlvbnMuIA0KDQoNCg0KDQoNCg0KDQoNCg==