Macro Analysis of the Month of July

Visit Distribution Over the Month

In general, we see that location visits tend to decrease on holy days such as Sundays and Saturdays. The highest amount of location visits tend to take place on Fridays. On average we can expect up to 155 visits at any given location per day and at least 84 visits per day to any given location. Notably there is a peak on a non-Friday, July 15, which could most likely indicate an important event after July 4th such a big holiday or sale day.

Neighborhood Visits in the Month of July

In general we can see that there relatively little fluctuation in number of visits by neighborhood. There is a fairly consistent flow through of individuals visiting the top big name location and neighborhoods. The brand is consistent in number of visit per neighborhood, however the number of visits by each brand varies daily.

Average Weekly Visit Analysis

There tends to be a fairly normal distribution of visist per day of the week with a focal point of Friday to big name brands. Over the month of July we see around 667,000 through cellphone data alone. What’s interesting is that there seems to be more of a uniform distribution when looking at average visits per day, rather than total visits per day of the week.

Friday Visits Breakdown

Big Name Brands and NIACS Code Breakdown

In general, we can see that the top brand possesses a large margin between itself and the other brands. When looking at the NIAC Codes, the top brand does not belong to the top NIACs Industry patronized on Fridays. Moreover, the top two big brand names switch places in reference to their industry types.

Brands visits tends to be larger than industry visits in neighborhood locations.

Small Brand Visits on Friday

In general we see the same trends as seen with the big name brands. The normal distribution over weekdays appears far stronger. Unlike the the top 15 big brands, we see a strong that the top three industry types lead the rest by a significant margin. It is no surprise that we see recreational fun activities increase in popularity through the increased number of vists to bars and restaurants. It is also worth noting that several industries maintain their positions such as the airport and non-alcoholic bars.

LS0tDQp0aXRsZTogIkRhdGEgVHJhbnNsYXRpb24gUHJvamVjdCBTdWJtaXNzaW9uIg0KYXV0aG9yOiAiRW1pbHkgVGVubnlzb24iDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdG9jX2RlcHRoOiA0DQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KLS0tDQoNCjxzdHlsZT4NCmJvZHkgew0KdGV4dC1hbGlnbjoganVzdGlmeX0NCjwvc3R5bGU+DQoNCg0KYGBge3Igc2V0dXAsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCBpbmNsdWRlID0gRkFMU0V9DQojcm0obGlzdD1scyhhbGw9VFJVRSkpDQoNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID1GQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpDQoNCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KCJ2dGFibGUiKQ0KDQpsaWJyYXJ5KCJkYnBseXIiKQ0KIyBpYnJhcnkoInJlYWR4bCIpDQpsaWJyYXJ5KCJsdWJyaWRhdGUiKQ0KbGlicmFyeSgibWFncml0dHIiKQ0KbGlicmFyeSgicGFsZXR0ZWVyIikNCmxpYnJhcnkoImdnZWFzeSIpDQpsaWJyYXJ5KCJnZ3B1YnIiKQ0KbGlicmFyeSgiZ2doaWdobGlnaHQiKQ0KbGlicmFyeSgiZGlyZWN0bGFiZWxzIikNCmxpYnJhcnkoIm51bWZvcm0iKQ0KbGlicmFyeSgiamFuaXRvciIpDQpsaWJyYXJ5KCJwbWRwbHlyIikNCmxpYnJhcnkoImdncmVwZWwiKQ0KbGlicmFyeSgicnZlc3QiKQ0KDQpsaWJyYXJ5KCJHR2FsbHkiKQ0KbGlicmFyeSgiZ2dwbG90MiIpDQpsaWJyYXJ5KCJzZWFzb25hbCIpDQpsaWJyYXJ5KCJmb3JlY2FzdCIpDQoNCmxpYnJhcnkodGlncmlzKQ0KbGlicmFyeShyZW1vdGVzKQ0KI3JlbW90ZXM6Omluc3RhbGxfZ2l0aHViKCd5dXRhbm5paGlsYXRpb24vZ2dzZmxhYmVsJykNCmxpYnJhcnkoImdnc2ZsYWJlbCIpDQoNCmxpYnJhcnkoZ3JpZEV4dHJhKQ0KbGlicmFyeShyZXNoYXBlMikNCmxpYnJhcnkoZ3JpZCkNCmxpYnJhcnkoZ3RhYmxlKQ0KbGlicmFyeSgia2FibGVFeHRyYSIpDQoNCmxpYnJhcnkoImdnYW5pbWF0ZSIpDQpsaWJyYXJ5KCJwbmciKQ0KbGlicmFyeSgiZ2lmc2tpIikNCg0KbGlicmFyeShnZ2FsdCkNCg0KYGBgDQoNCmBgYHtyfQ0KZGFpbHlfdmlzaXRzIDwtIHJlYWRSRFMoJ2tpbmdfZGFpbHl2aXNpdHMuUmRhdGEnKQ0Kb3JpZ2luX3Zpc2l0cyA8LSByZWFkUkRTKCdraW5nX29yaWdpbnZpc2l0c19hbmRtYXAuUmRhdGEnKQ0Kb3YgPC0gcmVhZFJEUygna2luZ19vcmlnaW52aXNpdHMuUmRhdGEnKQ0KbmVpZ2hib3Job29kcyA8LSByZWFkUkRTKCduZWlnaGJvcmhvb2RfbmFtZXMuUmRhdGEnKQ0KDQpgYGANCg0KYGBge3J9DQpicmFuZF92aXNpdHMgPC0gZGFpbHlfdmlzaXRzICU+JQ0KICBncm91cF9ieShicmFuZHMpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgYXZnX3Zpc2l0cyA9IHJvdW5kKG1lYW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1lZF92aXNpdHMgPSByb3VuZChtZWRpYW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1heF92aXNpdHMgPSByb3VuZChtYXgodmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1pbl92aXNpdHMgPSByb3VuZChtaW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIHRvdGFsID0gcm91bmQoc3VtKHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKQ0KICApDQoNCg0KZGF5X3Zpc2l0cyA8LSBkYWlseV92aXNpdHMgJT4lDQogIGdyb3VwX2J5KGRhdGUpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgYXZnX3Zpc2l0cyA9IHJvdW5kKG1lYW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1lZF92aXNpdHMgPSByb3VuZChtZWRpYW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1heF92aXNpdHMgPSByb3VuZChtYXgodmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1pbl92aXNpdHMgPSByb3VuZChtaW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIHRvdGFsID0gcm91bmQoc3VtKHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKQ0KICApICU+JSAgIA0KICBtdXRhdGUod2Vla2RheSA9IHdlZWtkYXlzKGRhdGUpKSANCg0Kd2Vla2RheV92aXNpdHMgPC0gZGFpbHlfdmlzaXRzICU+JQ0KICBncm91cF9ieSh3ZWVrZGF5cyhkYXRlKSkgJT4lDQogIHN1bW1hcmlzZSgNCiAgICBhdmdfdmlzaXRzID0gcm91bmQobWVhbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWVkX3Zpc2l0cyA9IHJvdW5kKG1lZGlhbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWF4X3Zpc2l0cyA9IHJvdW5kKG1heCh2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWluX3Zpc2l0cyA9IHJvdW5kKG1pbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgdG90YWwgPSByb3VuZChzdW0odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApDQogICkgJT4lIHJlbmFtZSgNCiAgICAid2Vla19kYXlzIiA9ICJ3ZWVrZGF5cyhkYXRlKSINCiAgKQ0KDQp3ZWVraWx5X3Zpc2l0cyA8LSBkYWlseV92aXNpdHMgJT4lDQogIGdyb3VwX2J5KHdlZWsoZGF0ZSkpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgYXZnX3Zpc2l0cyA9IHJvdW5kKG1lYW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1lZF92aXNpdHMgPSByb3VuZChtZWRpYW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1heF92aXNpdHMgPSByb3VuZChtYXgodmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1pbl92aXNpdHMgPSByb3VuZChtaW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIHRvdGFsID0gcm91bmQoc3VtKHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKQ0KICApICU+JSByZW5hbWUoDQogICAgIndlZWsiID0gIndlZWsoZGF0ZSkiDQogICkNCg0Kd2Vla2RheV9icmFuZF92aXNpdHMgPC0gZGFpbHlfdmlzaXRzICU+JQ0KICBncm91cF9ieSh3ZWVrZGF5cyhkYXRlKSwgYnJhbmRzKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIGF2Z192aXNpdHMgPSByb3VuZChtZWFuKHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKSwNCiAgICBtZWRfdmlzaXRzID0gcm91bmQobWVkaWFuKHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKSwNCiAgICBtYXhfdmlzaXRzID0gcm91bmQobWF4KHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKSwNCiAgICBtaW5fdmlzaXRzID0gcm91bmQobWluKHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKSwNCiAgICB0b3RhbCA9IHJvdW5kKHN1bSh2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCkNCiAgKSAlPiUgcmVuYW1lKA0KICAgICJ3ZWVrX2RheXMiID0gIndlZWtkYXlzKGRhdGUpIg0KICApDQoNCndlZWtseV9icmFuZF92aXNpdHMgPC0gZGFpbHlfdmlzaXRzICU+JQ0KICBncm91cF9ieSh3ZWVrKGRhdGUpLCBicmFuZHMpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgYXZnX3Zpc2l0cyA9IHJvdW5kKG1lYW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1lZF92aXNpdHMgPSByb3VuZChtZWRpYW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1heF92aXNpdHMgPSByb3VuZChtYXgodmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1pbl92aXNpdHMgPSByb3VuZChtaW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIHRvdGFsID0gcm91bmQoc3VtKHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKQ0KICApICU+JSByZW5hbWUoDQogICAgIndlZWsiID0gIndlZWsoZGF0ZSkiDQogICkNCg0KY29kZV92aXNpdHMgPC0gZGFpbHlfdmlzaXRzICU+JQ0KICBncm91cF9ieShuYWljc19jb2RlLCBuYWljc190aXRsZSkgJT4lDQogIHN1bW1hcmlzZSgNCiAgICBhdmdfdmlzaXRzID0gcm91bmQobWVhbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWVkX3Zpc2l0cyA9IHJvdW5kKG1lZGlhbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWF4X3Zpc2l0cyA9IHJvdW5kKG1heCh2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWluX3Zpc2l0cyA9IHJvdW5kKG1pbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgdG90YWwgPSByb3VuZChzdW0odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApDQogICkNCg0Kd2Vla2RheV9jb2RlX3Zpc2l0cyA8LSBkYWlseV92aXNpdHMgJT4lDQogIGdyb3VwX2J5KG5haWNzX2NvZGUsIG5haWNzX3RpdGxlLCB3ZWVrZGF5cyhkYXRlKSkgJT4lDQogIHN1bW1hcmlzZSgNCiAgICBhdmdfdmlzaXRzID0gcm91bmQobWVhbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWVkX3Zpc2l0cyA9IHJvdW5kKG1lZGlhbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWF4X3Zpc2l0cyA9IHJvdW5kKG1heCh2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWluX3Zpc2l0cyA9IHJvdW5kKG1pbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgdG90YWwgPSByb3VuZChzdW0odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApDQogICkgJT4lIHJlbmFtZSgNCiAgICAid2Vla19kYXlzIiA9ICJ3ZWVrZGF5cyhkYXRlKSINCiAgKQ0KDQp3ZWVrbHlfY29kZV92aXNpdHMgPC0gZGFpbHlfdmlzaXRzICU+JQ0KICBncm91cF9ieShuYWljc19jb2RlLCBuYWljc190aXRsZSwgd2VlayhkYXRlKSkgJT4lDQogIHN1bW1hcmlzZSgNCiAgICBhdmdfdmlzaXRzID0gcm91bmQobWVhbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWVkX3Zpc2l0cyA9IHJvdW5kKG1lZGlhbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWF4X3Zpc2l0cyA9IHJvdW5kKG1heCh2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgbWluX3Zpc2l0cyA9IHJvdW5kKG1pbih2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCksDQogICAgdG90YWwgPSByb3VuZChzdW0odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApDQogICkgJT4lIHJlbmFtZSgNCiAgICAid2VlayIgPSAid2VlayhkYXRlKSINCiAgKQ0KDQoNCm5laWdoYm9yaG9vZF92aXNpdHMgPC0gZGFpbHlfdmlzaXRzICU+JQ0KICByaWdodF9qb2luKHJpZ2h0X2pvaW4ob3YsIG5laWdoYm9yaG9vZHMpKSAlPiUNCiAgZmlsdGVyKGJyYW5kcyAhPSAiIikgJT4lDQogIGdyb3VwX2J5KEdFT0lEKSAlPiUNCiAgbXV0YXRlKGRhdGVfZGF5ID0gZGF5KGRhdGUpKSAlPiUNCiAgZ3JvdXBfYnkoTkVJR0hCT1JIT09EX0RJU1RSSUNUX05BTUUsIGJyYW5kcywgbmFpY3NfY29kZSwgZGF0ZSwgZGF0ZV9kYXkpICU+JQ0KICBzdW1tYXJpc2UodG90YWwgPSBzdW0odmlzaXRzX2J5X2RheSkpDQoNCnNkX3Zpc2l0cyA8LSBicmFuZF92aXNpdHMgJT4lDQogIGZpbHRlcihicmFuZHMgIT0gIiIpICU+JQ0KICBzdW1tYXJpemUobWVhbiA9IG1lYW4odG90YWwpLA0KICAgICAgICAgICAgc2RfMSA9IHNkKHRvdGFsKSwNCiAgICAgICAgICAgIHNkXzIgPSAyKnNkKHRvdGFsKSwNCiAgICAgICAgICAgIHNkXzMgPSAzKnNkKHRvdGFsKSkNCg0Kc2RfYnJhbmRzIDwtIGJyYW5kX3Zpc2l0cyU+JQ0KICBhcnJhbmdlKC10b3RhbCkgJT4lDQogIGZpbHRlcih0b3RhbCA+PSAoMTM0Mi43ODkJKyAxMTkxMy4zNikpICU+JQ0KICBzZWxlY3QoYnJhbmRzKQ0KYGBgDQoNCiMgTWFjcm8gQW5hbHlzaXMgb2YgdGhlIE1vbnRoIG9mIEp1bHkNCg0KIyMgVmlzaXQgRGlzdHJpYnV0aW9uIE92ZXIgdGhlIE1vbnRoDQoNCkluIGdlbmVyYWwsIHdlIHNlZSB0aGF0IGxvY2F0aW9uIHZpc2l0cyB0ZW5kIHRvIGRlY3JlYXNlIG9uIGhvbHkgZGF5cyBzdWNoIGFzIFN1bmRheXMgYW5kIFNhdHVyZGF5cy4gVGhlIGhpZ2hlc3QgYW1vdW50IG9mIGxvY2F0aW9uIHZpc2l0cyB0ZW5kIHRvIHRha2UgcGxhY2Ugb24gRnJpZGF5cy4gT24gYXZlcmFnZSB3ZSBjYW4gZXhwZWN0IHVwIHRvIDE1NSB2aXNpdHMgYXQgYW55IGdpdmVuIGxvY2F0aW9uIHBlciBkYXkgYW5kIGF0IGxlYXN0IDg0IHZpc2l0cyBwZXIgZGF5IHRvIGFueSBnaXZlbiBsb2NhdGlvbi4gTm90YWJseSB0aGVyZSBpcyBhIHBlYWsgb24gYSBub24tRnJpZGF5LCBKdWx5IDE1LCB3aGljaCBjb3VsZCBtb3N0IGxpa2VseSBpbmRpY2F0ZSBhbiBpbXBvcnRhbnQgZXZlbnQgYWZ0ZXIgSnVseSA0dGggc3VjaCBhIGJpZyBob2xpZGF5IG9yIHNhbGUgZGF5Lg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTcsIGZpZy53aWR0aD0xMixmaWcuYWxpZ249ImNlbnRlciJ9DQpnZ3Bsb3QoZGF5X3Zpc2l0cywgYWVzKHggPSBkYXRlKSkgKw0KICBnZW9tX3JpYmJvbihhZXMoeW1pbiA9IGF2Z192aXNpdHMgLSAzKnNkKGF2Z192aXNpdHMpLCB5bWF4ID0gYXZnX3Zpc2l0cyArIDMqc2QoYXZnX3Zpc2l0cykpLCBmaWxsID0gInB1cnBsZTMiLCBhbHBoYSA9IC4yNSkgKw0KICBnZW9tX2xpbmUoYWVzKHkgPSAoYXZnX3Zpc2l0cyAtIDMqc2QoYXZnX3Zpc2l0cykpKSwgc2l6ZSA9IC41LCBjb2xvciA9ICJwdXJwbGUyIikgKw0KICBnZW9tX2xpbmUoYWVzKHkgPSAoYXZnX3Zpc2l0cyArIDMqc2QoYXZnX3Zpc2l0cykpKSwgc2l6ZSA9IC41LCBjb2xvciA9ICJwdXJwbGUyIikgKw0KICANCiAgZ2VvbV9yaWJib24oYWVzKHltaW4gPSBhdmdfdmlzaXRzIC0gMipzZChhdmdfdmlzaXRzKSwgeW1heCA9IGF2Z192aXNpdHMgKyAyKnNkKGF2Z192aXNpdHMpKSwgZmlsbCA9ICJibHVlMyIsIGFscGhhID0gLjM1KSArDQogIGdlb21fbGluZShhZXMoeSA9IChhdmdfdmlzaXRzIC0gMipzZChhdmdfdmlzaXRzKSkpLCBzaXplID0gLjUsIGNvbG9yID0gImJsdWUyIikgKw0KICBnZW9tX2xpbmUoYWVzKHkgPSAoYXZnX3Zpc2l0cyArIDIqc2QoYXZnX3Zpc2l0cykpKSwgc2l6ZSA9IC41LCBjb2xvciA9ICJibHVlMiIpICsNCiAgDQogIGdlb21fcmliYm9uKGFlcyh5bWluID0gYXZnX3Zpc2l0cyAtIHNkKGF2Z192aXNpdHMpLCB5bWF4ID0gYXZnX3Zpc2l0cyArIHNkKGF2Z192aXNpdHMpKSwgZmlsbCA9ICJyZWQzIiwgYWxwaGEgPSAuNzApICsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gKGF2Z192aXNpdHMgLSAxKnNkKGF2Z192aXNpdHMpKSksIHNpemUgPSAuNSwgY29sb3IgPSAicmVkMSIpICsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gKGF2Z192aXNpdHMgKyAxKnNkKGF2Z192aXNpdHMpKSksIHNpemUgPSAuNSwgY29sb3IgPSAicmVkMSIpICsNCiAgDQogIHNjYWxlX3hfZGF0ZShicmVha3MgPSBhcy5EYXRlKGMoIjIwMjAtMDctMDMiLCAiMjAyMC0wNy0wNSIsICIyMDIwLTA3LTEwIiwgIjIwMjAtMDctMTIiLCAiMjAyMC0wNy0xNyIsICIyMDIwLTA3LTE5IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMjAtMDctMjQiLCAiMjAyMC0wNy0yNiIsICIyMDIwLTA3LTMxIikpLA0KICAgICAgICAgICAgICAgZGF0ZV9sYWJlbHMgPSAiJWIgJWQgXG4gJWEiLA0KICAgICAgICAgICAgICAgZXhwYW5kID0gZXhwYW5zaW9uKGMoLjAyLCAuMjApKSkgKw0KICANCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXZnX3Zpc2l0cyksIHNpemUgPSAxKSArDQogIA0KICBnZW9tX3RleHQoYWVzKHkgPSAoMTE5ICsgMypyb3VuZChzZChkYXlfdmlzaXRzJGF2Z192aXNpdHMpLCBkaWdpdHMgPSAyKSksDQogICAgICAgICAgICAgIHggPSBhcy5EYXRlKCIyMDIwLTA3LTMxIiksDQogICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUoKDExOSArIHJvdW5kKDMgKiBzZChkYXlfdmlzaXRzJGF2Z192aXNpdHMpLCBkaWdpdHMgPSAyKSksICIsICszcmQgU0QiKSwgDQogICAgICAgICAgICAgIGhqdXN0ID0gLTAuMDUsIHZqdXN0ID0gMyksIGNvbG9yID0gInBsdW0zIiwgc2l6ZSA9IDUpICsgDQogIA0KICBnZW9tX3RleHQoYWVzKHkgPSAoMTE5IC0gMypyb3VuZChzZChkYXlfdmlzaXRzJGF2Z192aXNpdHMpLCBkaWdpdHMgPSAyKSksDQogICAgICAgICAgICAgIHggPSBhcy5EYXRlKCIyMDIwLTA3LTMxIiksDQogICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUoKDExOSAtIHJvdW5kKDMgKiBzZChkYXlfdmlzaXRzJGF2Z192aXNpdHMpLCBkaWdpdHMgPSAyKSksICIsIC0zcmQgU0QiKSwgDQogICAgICAgICAgICAgIGhqdXN0ID0gLTAuMDUsIHZqdXN0ID0gLTEpLCBjb2xvciA9ICJwbHVtMyIsIHNpemUgPSA1KSArDQogIA0KICBnZW9tX3RleHQoYWVzKHkgPSAoMTE5ICsgMipyb3VuZChzZChkYXlfdmlzaXRzJGF2Z192aXNpdHMpLCBkaWdpdHMgPSAyKSksDQogICAgICAgICAgICAgIHggPSBhcy5EYXRlKCIyMDIwLTA3LTMxIiksDQogICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUoKDExOSArIHJvdW5kKDIgKiBzZChkYXlfdmlzaXRzJGF2Z192aXNpdHMpLCBkaWdpdHMgPSAyKSksICIsICsybmQgU0QiKSwgDQogICAgICAgICAgICAgIGhqdXN0ID0gLTAuMDUsIHZqdXN0ID0gMi43NSksIGNvbG9yID0gInNsYXRlYmx1ZTEiLCBzaXplID0gNSkgKyANCiAgDQogIGdlb21fdGV4dChhZXMoeSA9ICgxMTkgLSAyKnJvdW5kKHNkKGRheV92aXNpdHMkYXZnX3Zpc2l0cyksIGRpZ2l0cyA9IDIpKSwNCiAgICAgICAgICAgICAgeCA9IGFzLkRhdGUoIjIwMjAtMDctMzEiKSwNCiAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZSgoMTE5IC0gcm91bmQoMiAqIHNkKGRheV92aXNpdHMkYXZnX3Zpc2l0cyksIGRpZ2l0cyA9IDIpKSwgIiwgLTJuZCBTRCIpLCANCiAgICAgICAgICAgICAgaGp1c3QgPSAtMC4wNSwgdmp1c3QgPSAtMS41KSwgY29sb3IgPSAic2xhdGVibHVlMSIsIHNpemUgPSA1KSArDQogIA0KICBnZW9tX3RleHQoYWVzKHkgPSAoMTE5ICsgMSpyb3VuZChzZChkYXlfdmlzaXRzJGF2Z192aXNpdHMpLCBkaWdpdHMgPSAyKSksDQogICAgICAgICAgICAgIHggPSBhcy5EYXRlKCIyMDIwLTA3LTMxIiksDQogICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUoKDExOSArIHJvdW5kKDEgKiBzZChkYXlfdmlzaXRzJGF2Z192aXNpdHMpLCBkaWdpdHMgPSAyKSksICIsICsxc3QgU0QiKSwgDQogICAgICAgICAgICAgIGhqdXN0ID0gLTAuMDUsIHZqdXN0ID0gMi4yNSksIGNvbG9yID0gInJlZDQiLCBzaXplID0gNSkgKyANCiAgDQogIGdlb21fdGV4dChhZXMoeSA9ICgxMTkgLSAxKnJvdW5kKHNkKGRheV92aXNpdHMkYXZnX3Zpc2l0cyksIGRpZ2l0cyA9IDIpKSwNCiAgICAgICAgICAgICAgeCA9IGFzLkRhdGUoIjIwMjAtMDctMzEiKSwNCiAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZSgoMTE5IC0gcm91bmQoMSAqIHNkKGRheV92aXNpdHMkYXZnX3Zpc2l0cyksIGRpZ2l0cyA9IDIpKSwgIiwgLTFzdCBTRCIpLCANCiAgICAgICAgICAgICAgaGp1c3QgPSAtMC4wNSwgdmp1c3QgPSAtMS4pLCBjb2xvciA9ICJyZWQ0Iiwgc2l6ZSA9IDUpICsNCiAgDQogIGdlb21fdGV4dChhZXMoeSA9ICgxMTkgLSAwKnJvdW5kKHNkKGRheV92aXNpdHMkYXZnX3Zpc2l0cyksIGRpZ2l0cyA9IDIpKSwNCiAgICAgICAgICAgICAgeCA9IGFzLkRhdGUoIjIwMjAtMDctMzEiKSwNCiAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZSgoMTE5IC0gcm91bmQoMCAqIHNkKGRheV92aXNpdHMkYXZnX3Zpc2l0cyksIGRpZ2l0cyA9IDIpKSwgIiwgQXZnLiBWaXNpdHMiKSwgDQogICAgICAgICAgICAgIGhqdXN0ID0gLTAuMDUsIHZqdXN0ID0gLjUpLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSA1KSArDQogIA0KICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0ID0gYXMuRGF0ZShjKCIyMDIwLTA3LTA1IikpKSwgY29sb3IgPSAiZ3JheTY1IikgKw0KICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0ID0gYXMuRGF0ZShjKCIyMDIwLTA3LTEyIikpKSwgY29sb3IgPSAiZ3JheTY1IikgKw0KICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0ID0gYXMuRGF0ZShjKCIyMDIwLTA3LTE5IikpKSwgY29sb3IgPSAiZ3JheTY1IikgKw0KICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0ID0gYXMuRGF0ZShjKCIyMDIwLTA3LTI2IikpKSwgY29sb3IgPSAiZ3JheTY1IikgKw0KICANCiAgZ2VvbV92bGluZShhZXMoeGludGVyY2VwdCA9IGFzLkRhdGUoYygiMjAyMC0wNy0wMyIpKSksIGNvbG9yID0gImdyYXk2NSIsIGxpbmV0eXBlID0gImRhc2hlZCIpICsNCiAgZ2VvbV92bGluZShhZXMoeGludGVyY2VwdCA9IGFzLkRhdGUoYygiMjAyMC0wNy0xMCIpKSksIGNvbG9yID0gImdyYXk2NSIsIGxpbmV0eXBlID0gImRhc2hlZCIpICsNCiAgZ2VvbV92bGluZShhZXMoeGludGVyY2VwdCA9IGFzLkRhdGUoYygiMjAyMC0wNy0xNyIpKSksIGNvbG9yID0gImdyYXk2NSIsIGxpbmV0eXBlID0gImRhc2hlZCIpICsNCiAgZ2VvbV92bGluZShhZXMoeGludGVyY2VwdCA9IGFzLkRhdGUoYygiMjAyMC0wNy0yNCIpKSksIGNvbG9yID0gImdyYXk2NSIsIGxpbmV0eXBlID0gImRhc2hlZCIpICsNCiAgZ2VvbV92bGluZShhZXMoeGludGVyY2VwdCA9IGFzLkRhdGUoYygiMjAyMC0wNy0zMSIpKSksIGNvbG9yID0gImdyYXk2NSIsIGxpbmV0eXBlID0gImRhc2hlZCIpICsNCiAgDQogIGdndGl0bGUoIkF2Zy4gTnVtYmVyIG9mIFZpc2l0cyBPdmVyIEp1bHkiKSArDQogIA0KICB0aGVtZShsaW5lID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksDQogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHNpemUgPSAzNSwgZmFjZSA9ICJib2xkIikpDQpgYGANCg0KIyMgTmVpZ2hib3Job29kIFZpc2l0cyBpbiB0aGUgTW9udGggb2YgSnVseSANCg0KSW4gZ2VuZXJhbCB3ZSBjYW4gc2VlIHRoYXQgdGhlcmUgcmVsYXRpdmVseSBsaXR0bGUgZmx1Y3R1YXRpb24gaW4gbnVtYmVyIG9mIHZpc2l0cyBieSBuZWlnaGJvcmhvb2QuIFRoZXJlIGlzIGEgZmFpcmx5IGNvbnNpc3RlbnQgZmxvdyB0aHJvdWdoIG9mIGluZGl2aWR1YWxzIHZpc2l0aW5nIHRoZSB0b3AgYmlnIG5hbWUgbG9jYXRpb24gYW5kIG5laWdoYm9yaG9vZHMuIFRoZSBicmFuZCBpcyBjb25zaXN0ZW50IGluIG51bWJlciBvZiB2aXNpdCBwZXIgbmVpZ2hib3Job29kLCBob3dldmVyIHRoZSBudW1iZXIgb2YgdmlzaXRzIGJ5IGVhY2ggYnJhbmQgdmFyaWVzIGRhaWx5Lg0KDQpgYGB7ciBmaWcud2lkdGg9MjAsIGZpZy5oZWlnaHQ9MTYsIGZpZy5hbGlnbj0iY2VudGVyIn0NCmFuaW1hdGUoKG5laWdoYm9yaG9vZF92aXNpdHMgJT4lDQogICAgYXJyYW5nZSgtdG90YWwpICU+JQ0KICAgIGZpbHRlcihicmFuZHMgJWluJSBzZF9icmFuZHMkYnJhbmRzKSAlPiUNCiAgICAgIGdncGxvdChhZXMoeSA9IE5FSUdIQk9SSE9PRF9ESVNUUklDVF9OQU1FLCB4ID0gYnJhbmRzLCBzaXplID0gdG90YWwsIGNvbG9yPSBhcy5mYWN0b3IobmFpY3NfY29kZSksIGZyYW1lID0gZGF0ZSkpICsNCiAgICAgIGdlb21fcG9pbnQoYWVzKGFscGhhID0gdG90YWwpLCBzaG93LmxlZ2VuZCA9IFRSVUUpICsNCiAgICAgIA0KICAgICAgc2NhbGVfc2l6ZShicmVha3MgPSBjKC0xOjIwKSwgcmFuZ2UgPSBjKDEsMjApKSArDQogIA0KICAgICAgDQogICAgICB0aGVtZShsaW5lID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSksDQogICAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLA0KICAgICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSwNCiAgICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCwgZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpKSArDQogICAgICANCiAgICAgIHRyYW5zaXRpb25fc3RhdGVzKGRhdGUsDQogICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uX2xlbmd0aCA9IDgsDQogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9sZW5ndGggPSA0KSArDQogICAgICBlYXNlX2FlcygnZWxhc3RpYy1pbi1vdXQnKSArDQogICAgDQogICAgbGFicyh0aXRsZSA9ICdOZWlnaGJvcmhvb2QgVmlzaXRzIGJ5IEJyYW5kczoge2Nsb3Nlc3Rfc3RhdGV9JykpLA0KICAgIGhlaWdodCA9IDgwMCwgd2lkdGggPSAxMDAwLA0KICAgICNuZnJhbWVzID0gMTAsDQogICAgZnBzPTcpDQogICANCmBgYA0KDQpgYGB7cn0NCmFuaW1hdGUoIGRhaWx5X3Zpc2l0cyAlPiUNCiAgICByaWdodF9qb2luKHJpZ2h0X2pvaW4ob3YsIG5laWdoYm9yaG9vZHMpKSAlPiUNCiAgICBmaWx0ZXIoYnJhbmRzICE9ICIiKSAlPiUNCiAgICBncm91cF9ieShHRU9JRCkgJT4lDQogICAgbXV0YXRlKHRvdGFscyA9IHN1bSh2aXNpdHNfYnlfZGF5KSwNCiAgICAgICAgICAgZGF0ZSA9Zm9ybWF0KGRhdGUsIGZvcm1hdCA9ICIlQiAlZCIpKSAlPiUNCiAgICBncm91cF9ieShORUlHSEJPUkhPT0RfRElTVFJJQ1RfTkFNRSwgYnJhbmRzLCBkYXRlKSAlPiUNCiAgICBzdW1tYXJpc2UodG90YWwgPSBzdW0odmlzaXRzX2J5X2RheSkpICU+JQ0KICAgIGFycmFuZ2UoLXRvdGFsKSAlPiUNCiAgICBmaWx0ZXIoYnJhbmRzICVpbiUgc2RfYnJhbmRzJGJyYW5kcykgJT4lDQogIA0KICAgIGdncGxvdChhZXMoeSA9IHRvdGFsLCB4ID0gTkVJR0hCT1JIT09EX0RJU1RSSUNUX05BTUUsIGZyYW1lID0gZGF0ZSkpICsNCiAgICBnZW9tX2ppdHRlcihhZXMoYWxwaGEgPSB0b3RhbCwgc2l6ZSA9IHRvdGFsLCBjb2xvciA9IGFzLmZhY3RvcihicmFuZHMpKSwgc2hvdy5sZWdlbmQgPSBUUlVFKSArDQogICAgICANCiAgICAgICNzY2FsZV9jb2xvcl9ncmFkaWVudDIobG93ID0gImJsdWUiLCBoaWdoID0gInJlZCIsIG1pZCA9ICJwdXJwbGUiLCBtaWRwb2ludCA9IDAsIGJyZWFrcyA9IGMoLTEwOjIwKSkgKw0KICAgICAgc2NhbGVfc2l6ZShicmVha3MgPSBjKDE6MjApLCByYW5nZSA9IGMoMSwyMCkpICsNCiAgICANCiAgICAgIHRoZW1lKGxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpLA0KICAgICAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCksDQogICAgICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIA0KICAgICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siLCBmaWxsID0gTkEpLA0KICAgICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMjAsIGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSkgKw0KICANCiAgICAgIHRyYW5zaXRpb25fc3RhdGVzKGRhdGUsDQogICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uX2xlbmd0aCA9IDgsDQogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9sZW5ndGggPSA0KSArDQogICAgICAgIA0KICAgICAgc2hhZG93X3dha2Uod2FrZV9sZW5ndGggPSAwLjEsIGFscGhhID0gRkFMU0UpICsNCiAgICAgIA0KICAgICAgbGFicyh0aXRsZSA9ICdOZWlnaGJvcmhvb2QgVmlzaXRzIGJ5IEJyYW5kczoge2Nsb3Nlc3Rfc3RhdGV9JyksDQogICAgaGVpZ2h0ID0gODAwLCB3aWR0aCA9IDEwMDAsDQogICAgI25mcmFtZXMgPSAxMCwNCiAgICBmcHM9NykNCmBgYA0KDQoNCiMjIEF2ZXJhZ2UgV2Vla2x5IFZpc2l0IEFuYWx5c2lzIA0KDQpUaGVyZSB0ZW5kcyB0byBiZSBhIGZhaXJseSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIHZpc2lzdCBwZXIgZGF5IG9mIHRoZSB3ZWVrIHdpdGggYSBmb2NhbCBwb2ludCBvZiBGcmlkYXkgdG8gYmlnIG5hbWUgYnJhbmRzLiBPdmVyIHRoZSBtb250aCBvZiBKdWx5IHdlIHNlZSBhcm91bmQgNjY3LDAwMCB0aHJvdWdoIGNlbGxwaG9uZSBkYXRhIGFsb25lLiBXaGF0J3MgaW50ZXJlc3RpbmcgaXMgdGhhdCB0aGVyZSBzZWVtcyB0byBiZSBtb3JlIG9mIGEgdW5pZm9ybSBkaXN0cmlidXRpb24gd2hlbiBsb29raW5nIGF0IGF2ZXJhZ2UgdmlzaXRzIHBlciBkYXksIHJhdGhlciB0aGFuIHRvdGFsIHZpc2l0cyBwZXIgZGF5IG9mIHRoZSB3ZWVrLiANCg0KYGBge3IgZmlnLndpZHRoPTE0LCBmaWcuaGVpZ2h0PTYsIGZpZy5hbGlnbj0iY2VudGVyIn0NCmdyaWRFeHRyYTo6Z3JpZC5hcnJhbmdlKA0KICAgICAgKGdncGxvdCh3ZWVrZGF5X3Zpc2l0cywgYWVzKHkgPSB0b3RhbCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGZhY3Rvcih3ZWVrZGF5X3Zpc2l0cyR3ZWVrX2RheXMsIGxldmVscyA9IGFzLmNoYXJhY3Rlcih3ZGF5KGMoMjo3LDEpLCBsYWJlbD1UUlVFLCBhYmJyPUZBTFNFKSkpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsID0gd2Vla19kYXlzLCBjb2xvciA9IHdlZWtfZGF5cykpICsNCiAgICAgICAgIGdlb21fY29sKHN0YXQ9ImlkZW50aXR5IiwgcG9zaXRpb24gPSAiaWRlbnRpdHkiLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSAgKw0KICAgICAgICAgDQogICAgICAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIk1vbiIsICJUdWVzIiwgIldlZCIsICJUaHVycyIsICJGcmkiLCAiU2F0IiwgIlN1biIpKSArDQogICAgICAgICANCiAgICAgICAgIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OmNvbW1hLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiVG90YWwgVmlzaXRzIER1cmluZyBKdWx5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGV4cGFuc2lvbihtdWx0ID0gYygwLCAuMDUpKSkgKw0KICAgICAgICAgDQogICAgICAgICBnZW9tX3RleHQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aD0gLjgpLCANCiAgICAgICAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlKHNjYWxlczo6Y29tbWEodG90YWwpKSwgc2l6ZSA9IDE0LCBmb250ZmFjZSA9ICJib2xkIiwgdmp1c3QgPSAxLjUpLA0KICAgICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiDQogICAgICAgICAgICAgICAgICApICsNCiAgICAgICAgIA0KICAgICAgICAgZ2VvbV90ZXh0KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGg9IC44KSwgDQogICAgICAgICAgICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZSgiVmlzaXRzIiksIHZqdXN0ID0gMyksDQogICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSINCiAgICAgICAgICAgICAgICAgICkgKw0KICAgICAgICAgDQogICAgICAgICBnZ3RpdGxlKCJUb3RhbCBWaXNpdHMgRHVyaW5nIEp1bHkiKSArDQogICAgICAgICANCiAgICAgICAgIHRoZW1lKGxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwNCiAgICAgICAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCwgZmFjZSA9ICJib2xkIiksDQogICAgICAgICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLCANCiAgICAgICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSksDQogICAgICAgICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHNpemUgPSAxNiwgZmFjZSA9ICJib2xkIikpKSwNCiAgICAgIA0KICAgICAgKGdncGxvdCh3ZWVrZGF5X3Zpc2l0cywgYWVzKHkgPSBhdmdfdmlzaXRzLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gZmFjdG9yKHdlZWtkYXlfdmlzaXRzJHdlZWtfZGF5cywgbGV2ZWxzID0gYXMuY2hhcmFjdGVyKHdkYXkoYygyOjcsMSksIGxhYmVsPVRSVUUsIGFiYnI9RkFMU0UpKSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSB3ZWVrX2RheXMsIGNvbG9yID0gd2Vla19kYXlzKSkgKw0KICAgICAgICAgZ2VvbV9jb2woc3RhdD0iaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJpZGVudGl0eSIsIHNob3cubGVnZW5kID0gRkFMU0UpICsNCiAgICAgIA0KICAgICAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIk1vbiIsICJUdWVzIiwgIldlZCIsICJUaHVycyIsICJGcmkiLCAiU2F0IiwgIlN1biIpKSArDQogICAgICAgIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OmNvbW1hLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiQXZnLiBWaXNpdHMgRHVyaW5nIEp1bHkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gZXhwYW5zaW9uKG11bHQgPSBjKDAsIC4wNSkpKSArDQogICAgICAgIA0KICAgICAgICBnZW9tX3RleHQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aD0gLjgpLCANCiAgICAgICAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlKHNjYWxlczo6Y29tbWEoYXZnX3Zpc2l0cykpLCBzaXplID0gMTQsIGZvbnRmYWNlID0gImJvbGQiLCB2anVzdCA9IDEuNSksDQogICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSINCiAgICAgICAgICAgICAgICAgICkgKw0KICAgICAgICANCiAgICAgICAgZ2VvbV90ZXh0KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGg9IC44KSwgDQogICAgICAgICAgICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZSgiVmlzaXRzIFxuIHBlciBEYXkiKSwgdmp1c3QgPSAxLjc1KSwNCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIg0KICAgICAgICAgICAgICAgICAgKSArDQogICAgICAgIA0KICAgICAgICBnZ3RpdGxlKCJBdmVyYWdlIFZpc2l0cyBEdXJpbmcgSnVseSIpICsNCiAgICAgICAgDQogICAgICAgIHRoZW1lKGxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwNCiAgICAgICAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCwgZmFjZSA9ICJib2xkIiksDQogICAgICAgICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLCANCiAgICAgICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSksDQogICAgICAgICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHNpemUgPSAxNiwgZmFjZSA9ICJib2xkIikpKSwNCiAgICAgIG5jb2wgPSAyLA0KICAgICAgdG9wID0gICB0ZXh0R3JvYihleHByZXNzaW9uKGJvbGQoIkxhcmdlIEJhbmQgVmlzaXQgRGlzdHJpYnV0aW9uIE92ZXIgV2Vla2RheXMgaW4gSnVseSIpKSwgDQogICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRzaXplPTM1LGZvbnQ9OCksIA0KICAgICAgICAgICAgICAgICAgIGhqdXN0ID0gLjUpDQogICAgICApDQpgYGANCg0KIyBGcmlkYXkgVmlzaXRzIEJyZWFrZG93bg0KDQojIyBCaWcgTmFtZSBCcmFuZHMgYW5kIE5JQUNTIENvZGUgQnJlYWtkb3duDQoNCkluIGdlbmVyYWwsIHdlIGNhbiBzZWUgdGhhdCB0aGUgdG9wIGJyYW5kIHBvc3Nlc3NlcyBhIGxhcmdlIG1hcmdpbiBiZXR3ZWVuIGl0c2VsZiBhbmQgdGhlIG90aGVyIGJyYW5kcy4gV2hlbiBsb29raW5nIGF0IHRoZSBOSUFDIENvZGVzLCB0aGUgdG9wIGJyYW5kIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgdG9wIE5JQUNzIEluZHVzdHJ5IHBhdHJvbml6ZWQgb24gRnJpZGF5cy4gTW9yZW92ZXIsIHRoZSB0b3AgdHdvIGJpZyBicmFuZCBuYW1lcyBzd2l0Y2ggcGxhY2VzIGluIHJlZmVyZW5jZSB0byB0aGVpciBpbmR1c3RyeSB0eXBlcy4NCg0KQnJhbmRzIHZpc2l0cyB0ZW5kcyB0byBiZSBsYXJnZXIgdGhhbiBpbmR1c3RyeSB2aXNpdHMgaW4gbmVpZ2hib3Job29kIGxvY2F0aW9ucy4gDQoNCmBgYHtyIGZpZy53aWR0aD0xNCwgZmlnLmhlaWdodD0xMCwgZmlnLmFsaWduPSJjZW50ZXIifQ0Kd2Vla2RheV9icmFuZF92aXNpdHNfMTUgPC0gc3Vic2V0KHdlZWtkYXlfYnJhbmRfdmlzaXRzLCB3ZWVrX2RheXMgPT0gIkZyaWRheSIgJiBicmFuZHMgIT0gIiIpICU+JQ0KICBhcnJhbmdlKC0gdG90YWwpICU+JQ0KICBoZWFkKDE1KSAlPiUNCiAgbXV0YXRlKHJhbmsgPSByb3dfbnVtYmVyKCkpDQoNCg0Kd2Vla2RheV9jb2RlX3Zpc2l0c18xNSA8LSBzdWJzZXQod2Vla2RheV9jb2RlX3Zpc2l0cywgd2Vla19kYXlzID09ICJGcmlkYXkiICYgbmFpY3NfdGl0bGUgIT0gIiIpICU+JQ0KICBhcnJhbmdlKC0gdG90YWwpICU+JQ0KICBoZWFkKDE1KSAlPiUNCiAgbXV0YXRlKHJhbmsgPSByb3dfbnVtYmVyKCkpIA0KDQpncmlkRXh0cmE6OmdyaWQuYXJyYW5nZSgNCiAgKHdlZWtkYXlfYnJhbmRfdmlzaXRzXzE1ICU+JQ0KICAgIGdncGxvdChhZXMoeSA9IHJlb3JkZXIoYnJhbmRzLCB0b3RhbCksIHggPSB0b3RhbCkpICsNCiAgICBnZW9tX3NlZ21lbnQoYWVzKHggPSB0b3RhbCwgeGVuZCA9IHJhbmssIHllbmQgPSBicmFuZHMpLCBzaXplID0gMiwgY29sb3IgPSAiZGFya2dyYXkiKSArDQogICAgDQogICAgZ2VvbV9wb2ludChzaXplID0gOCwgY29sb3I9InRvbWF0byIpICsNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IHdlZWtkYXlfYnJhbmRfdmlzaXRzXzE1ICU+JQ0KICAgICAgICAgICAgICAgICAgZmlsdGVyKGJyYW5kcyA9PSAiVVcgTWVkaWNpbmUiKSwNCiAgICAgICAgICAgICAgICBzaXplID0gMTAsIGNvbG9yID0gInB1cnBsZSIpICsNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IHdlZWtkYXlfYnJhbmRfdmlzaXRzXzE1ICU+JQ0KICAgICAgICAgICAgICAgICAgZmlsdGVyKGJyYW5kcyA9PSAiU3RhcmJ1Y2tzIiksDQogICAgICAgICAgICAgICAgc2l6ZSA9IDEwLCBjb2xvciA9ICJkYXJrIGdyZWVuIikgKw0KICANCiAgICBzY2FsZV95X2Rpc2NyZXRlKG5hbWUgPSBOVUxMKSArDQogICAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQnJhbmQgVHlwZSBWaXNpdHMiLA0KICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICJ0b3AiLA0KICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDAsIDQwMDAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKw0KICAgIA0KICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZSh0b3RhbCwgInZpc2l0cyIpLCBoanVzdCA9IC0uMjUpLCBzaXplID0gNSkgKw0KICAgIA0KICAgIHRoZW1lKGxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjAsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksDQogICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSkpLA0KICANCiAgKHdlZWtkYXlfY29kZV92aXNpdHNfMTUgJT4lDQogICAgZ2dwbG90KGFlcyh5ID0gcmVvcmRlcihuYWljc190aXRsZSwgdG90YWwpLCB4ID0gLXRvdGFsKSkgKw0KICAgIGdlb21fc2VnbWVudChhZXMoeCA9IDAgLSB0b3RhbCwgeGVuZCA9IC1yYW5rLCB5ZW5kID0gbmFpY3NfdGl0bGUpLCBzaXplID0gMiwgY29sb3IgPSAiZGFya2dyYXkiKSArDQogIA0KICAgIGdlb21fcG9pbnQoc2l6ZSA9IDgsIGNvbG9yPSJ0b21hdG8iKSArDQogICAgIA0KICAgICBnZW9tX3BvaW50KGRhdGEgPSB3ZWVrZGF5X2NvZGVfdmlzaXRzXzE1ICU+JQ0KICAgICAgICAgICAgICAgICAgZmlsdGVyKG5haWNzX2NvZGUgPT0gNjIyMTEwKSwNCiAgICAgICAgICAgICAgICBzaXplID0gMTAsIGNvbG9yID0gInB1cnBsZSIpICsNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IHdlZWtkYXlfY29kZV92aXNpdHNfMTUgJT4lDQogICAgICAgICAgICAgICAgICBmaWx0ZXIobmFpY3NfY29kZSA9PSA3MjI1MTUpLA0KICAgICAgICAgICAgICAgIHNpemUgPSAxMCwgY29sb3IgPSAiZGFyayBncmVlbiIpICsNCiAgICANCiAgICBzY2FsZV95X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiRHJpbmtpbmcgUGxhY2VzIFxuIChBbGNvaG9saWMgQmV2ZXJhZ2VzKSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIYXJkd2FyZSBTdG9yZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSG90ZWxzIChleGNlcHQgQ2FzaW5vIEhvdGVscykgXG4gYW5kIE1vdGVscyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXBhcnRtZW50IFN0b3JlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGwgT3RoZXIgR2VuZXJhbCBcbiBNZXJjaGFuZGlzZSBTdG9yZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRml0bmVzcyBhbmQgUmVjcmVhdGlvbmFsIFxuIFNwb3J0cyBDZW50ZXJzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyIEFpcnBvcnQgT3BlcmF0aW9ucyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdXBlcm1hcmtldHMgYW5kIE90aGVyIFxuIEdyb2NlcnkgKGV4Y2VwdCBDb252ZW5pZW5jZSkgU3RvcmVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdhc29saW5lIFN0YXRpb25zIHdpdGggXG4gQ29udmVuaWVuY2UgU3RvcmVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdlbmVyYWwgTWVkaWNhbCBhbmQgXG4gU3VyZ2ljYWwgSG9zcGl0YWxzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNuYWNrIGFuZCBOb25hbGNvaG9saWMgXG4gQmV2ZXJhZ2UgQmFycyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMaW1pdGVkLVNlcnZpY2UgUmVzdGF1cmFudHMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmF0dXJlIFBhcmtzIGFuZCBPdGhlciBcbiBTaW1pbGFyIEluc3RpdHV0aW9ucyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWxsLVNlcnZpY2UgUmVzdGF1cmFudHMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGVzc29ycyBvZiBOb25yZXNpZGVudGlhbCBcbiBCdWlsZGluZ3MgKGV4Y2VwdCBNaW5pd2FyZWhvdXNlcykiKSwNCiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gInJpZ2h0IikgICsNCiAgICANCiAgICAgDQogICAgIHNjYWxlX3hfcmV2ZXJzZSgpICsNCiAgICAgDQogICAgIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkluZHVzdHJ5IFR5cGUgVmlzaXRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAidG9wIiwNCiAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtNzY5MTAgLSA2NTAwMCwgMCksDQogICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsNCg0KICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZSh0b3RhbCwgInZpc2l0cyIpLCBoanVzdCA9IDEuMTUpLCBzaXplID0gNSkgKw0KICAgIA0KICAgIHRoZW1lKGxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjAsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksDQogICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSkpLA0KICBuY29sID0gMiwNCiAgd2lkdGhzID0gYyguOTUsIDEpLA0KICB0b3AgPSAgIHRleHRHcm9iKGV4cHJlc3Npb24oYm9sZCgiVG9wIDE1IExvY2F0aW9ucyBhbmQgSW5kdXN0cmllcyBQYXRyb25pemVkIG9uIEZyaWRheSIpKSwgDQogICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRzaXplPTM1LGZvbnQ9OCksIA0KICAgICAgICAgICAgICAgICAgIGhqdXN0ID0gLjUpDQopDQpgYGANCg0KYGBge3IgbWVzc2FnZSA9IEZBTFNFLCBpbmNsdWRlID0gRkFMU0V9DQpvdiA8LSByZWFkUkRTKCdraW5nX29yaWdpbnZpc2l0cy5SZGF0YScpDQoNCiMgZ2V0IFdhc2hpbmd0b24gbWFwIGRhdGENCm1hcGRhdGEgPC0gYmxvY2tfZ3JvdXBzKCdXQScsJzAzMycsIGNiID0gVFJVRSkNCm5laWdoYm9yaG9vZHMgPC0gcmVhZFJEUygnbmVpZ2hib3Job29kX25hbWVzLlJkYXRhJykNCmBgYA0KDQpgYGB7cn0NCmNvbWJvX3RvdGFscyA8LSBkYWlseV92aXNpdHMgJT4lDQogIHJpZ2h0X2pvaW4ocmlnaHRfam9pbihvdiwgbmVpZ2hib3Job29kcykpICU+JQ0KICBtdXRhdGUoDQogICAgd2Vla19kYXkgPSB3ZWVrZGF5cyhkYXRlKQ0KICApICU+JQ0KICBmaWx0ZXIoYnJhbmRzICVpbiUgd2Vla2RheV9icmFuZF92aXNpdHNfMTUkYnJhbmRzKQ0KDQoNCmNvbWJvX3RvdGFscyA8LSBjb21ib190b3RhbHMgJT4lDQogIGxlZnRfam9pbihjb21ib190b3RhbHMgJT4lDQogICAgZmlsdGVyKHdlZWtfZGF5ID09ICJNb25kYXkiKSAlPiUNCiAgICBncm91cF9ieShicmFuZHMsIG5haWNzX2NvZGUsIE5FSUdIQk9SSE9PRF9ESVNUUklDVF9OQU1FKSAlPiUNCiAgICBzdW1tYXJpemUoDQogICAgIE1vbmRheV9Ub3RhbCA9IHN1bSh2aXNpdHNfYnlfZGF5KQ0KICAgICkpJT4lDQogIGxlZnRfam9pbihjb21ib190b3RhbHMgJT4lDQogICAgZmlsdGVyKHdlZWtfZGF5ID09ICJUdWVzZGF5IikgJT4lDQogICAgZ3JvdXBfYnkoYnJhbmRzLCBuYWljc19jb2RlLCBORUlHSEJPUkhPT0RfRElTVFJJQ1RfTkFNRSkgJT4lDQogICAgc3VtbWFyaXplKA0KICAgICBUdWVzZGF5X1RvdGFsID0gc3VtKHZpc2l0c19ieV9kYXkpDQogICAgKSklPiUNCiAgbGVmdF9qb2luKGNvbWJvX3RvdGFscyAlPiUNCiAgICBmaWx0ZXIod2Vla19kYXkgPT0gIldlZG5lc2RheSIpICU+JQ0KICAgIGdyb3VwX2J5KGJyYW5kcywgbmFpY3NfY29kZSwgTkVJR0hCT1JIT09EX0RJU1RSSUNUX05BTUUpICU+JQ0KICAgIHN1bW1hcml6ZSgNCiAgICAgV2VkbmVzZGF5X1RvdGFsID0gc3VtKHZpc2l0c19ieV9kYXkpDQogICAgKSklPiUNCiAgbGVmdF9qb2luKGNvbWJvX3RvdGFscyAlPiUNCiAgICBmaWx0ZXIod2Vla19kYXkgPT0gIlRodXJzZGF5IikgJT4lDQogICAgZ3JvdXBfYnkoYnJhbmRzLCBuYWljc19jb2RlLCBORUlHSEJPUkhPT0RfRElTVFJJQ1RfTkFNRSkgJT4lDQogICAgc3VtbWFyaXplKA0KICAgICBUaHVyc2RheV9Ub3RhbCA9IHN1bSh2aXNpdHNfYnlfZGF5KQ0KICAgICkpJT4lDQogIGxlZnRfam9pbihjb21ib190b3RhbHMgJT4lDQogICAgZmlsdGVyKHdlZWtfZGF5ID09ICJGcmlkYXkiKSAlPiUNCiAgICBncm91cF9ieShicmFuZHMsIG5haWNzX2NvZGUsIE5FSUdIQk9SSE9PRF9ESVNUUklDVF9OQU1FKSAlPiUNCiAgICBzdW1tYXJpemUoDQogICAgIEZyaWRheV9Ub3RhbCA9IHN1bSh2aXNpdHNfYnlfZGF5KQ0KICAgICkpJT4lDQogIGxlZnRfam9pbihjb21ib190b3RhbHMgJT4lDQogICAgZmlsdGVyKHdlZWtfZGF5ID09ICJTYXR1cmRheSIpICU+JQ0KICAgIGdyb3VwX2J5KGJyYW5kcywgbmFpY3NfY29kZSwgTkVJR0hCT1JIT09EX0RJU1RSSUNUX05BTUUpICU+JQ0KICAgIHN1bW1hcml6ZSgNCiAgICAgU2F0dXJkYXlfVG90YWwgPSBzdW0odmlzaXRzX2J5X2RheSkNCiAgICApKSU+JQ0KICBsZWZ0X2pvaW4oY29tYm9fdG90YWxzICU+JQ0KICAgIGZpbHRlcih3ZWVrX2RheSA9PSAiU3VuZGF5IikgJT4lDQogICAgZ3JvdXBfYnkoYnJhbmRzLCBuYWljc19jb2RlLCBORUlHSEJPUkhPT0RfRElTVFJJQ1RfTkFNRSkgJT4lDQogICAgc3VtbWFyaXplKA0KICAgICBTdW5kYXlfVG90YWwgPSBzdW0odmlzaXRzX2J5X2RheSkNCiAgICApKQ0KDQpjb21ib190b3RhbHNfMiA8LSBkYWlseV92aXNpdHMgJT4lDQogIHJpZ2h0X2pvaW4ocmlnaHRfam9pbihvdiwgbmVpZ2hib3Job29kcykpICU+JQ0KICBtdXRhdGUoDQogICAgd2Vla19kYXkgPSB3ZWVrZGF5cyhkYXRlKQ0KICApICU+JQ0KICBmaWx0ZXIobmFpY3NfY29kZSAlaW4lIHdlZWtkYXlfY29kZV92aXNpdHNfMTUkbmFpY3NfY29kZSkNCg0KDQpjb21ib190b3RhbHNfMiA8LSBjb21ib190b3RhbHNfMiAlPiUNCiAgbGVmdF9qb2luKGNvbWJvX3RvdGFsc18yICU+JQ0KICAgIGZpbHRlcih3ZWVrX2RheSA9PSAiTW9uZGF5IikgJT4lDQogICAgZ3JvdXBfYnkoYnJhbmRzLCBuYWljc19jb2RlLCBORUlHSEJPUkhPT0RfRElTVFJJQ1RfTkFNRSkgJT4lDQogICAgc3VtbWFyaXplKA0KICAgICBNb25kYXlfVG90YWwgPSBzdW0odmlzaXRzX2J5X2RheSkNCiAgICApKSU+JQ0KICBsZWZ0X2pvaW4oY29tYm9fdG90YWxzXzIgJT4lDQogICAgZmlsdGVyKHdlZWtfZGF5ID09ICJUdWVzZGF5IikgJT4lDQogICAgZ3JvdXBfYnkoYnJhbmRzLCBuYWljc19jb2RlLCBORUlHSEJPUkhPT0RfRElTVFJJQ1RfTkFNRSkgJT4lDQogICAgc3VtbWFyaXplKA0KICAgICBUdWVzZGF5X1RvdGFsID0gc3VtKHZpc2l0c19ieV9kYXkpDQogICAgKSklPiUNCiAgbGVmdF9qb2luKGNvbWJvX3RvdGFsc18yICU+JQ0KICAgIGZpbHRlcih3ZWVrX2RheSA9PSAiV2VkbmVzZGF5IikgJT4lDQogICAgZ3JvdXBfYnkoYnJhbmRzLCBuYWljc19jb2RlLCBORUlHSEJPUkhPT0RfRElTVFJJQ1RfTkFNRSkgJT4lDQogICAgc3VtbWFyaXplKA0KICAgICBXZWRuZXNkYXlfVG90YWwgPSBzdW0odmlzaXRzX2J5X2RheSkNCiAgICApKSU+JQ0KICBsZWZ0X2pvaW4oY29tYm9fdG90YWxzXzIgJT4lDQogICAgZmlsdGVyKHdlZWtfZGF5ID09ICJUaHVyc2RheSIpICU+JQ0KICAgIGdyb3VwX2J5KGJyYW5kcywgbmFpY3NfY29kZSwgTkVJR0hCT1JIT09EX0RJU1RSSUNUX05BTUUpICU+JQ0KICAgIHN1bW1hcml6ZSgNCiAgICAgVGh1cnNkYXlfVG90YWwgPSBzdW0odmlzaXRzX2J5X2RheSkNCiAgICApKSU+JQ0KICBsZWZ0X2pvaW4oY29tYm9fdG90YWxzXzIgJT4lDQogICAgZmlsdGVyKHdlZWtfZGF5ID09ICJGcmlkYXkiKSAlPiUNCiAgICBncm91cF9ieShicmFuZHMsIG5haWNzX2NvZGUsIE5FSUdIQk9SSE9PRF9ESVNUUklDVF9OQU1FKSAlPiUNCiAgICBzdW1tYXJpemUoDQogICAgIEZyaWRheV9Ub3RhbCA9IHN1bSh2aXNpdHNfYnlfZGF5KQ0KICAgICkpJT4lDQogIGxlZnRfam9pbihjb21ib190b3RhbHNfMiAlPiUNCiAgICBmaWx0ZXIod2Vla19kYXkgPT0gIlNhdHVyZGF5IikgJT4lDQogICAgZ3JvdXBfYnkoYnJhbmRzLCBuYWljc19jb2RlLCBORUlHSEJPUkhPT0RfRElTVFJJQ1RfTkFNRSkgJT4lDQogICAgc3VtbWFyaXplKA0KICAgICBTYXR1cmRheV9Ub3RhbCA9IHN1bSh2aXNpdHNfYnlfZGF5KQ0KICAgICkpJT4lDQogIGxlZnRfam9pbihjb21ib190b3RhbHNfMiAlPiUNCiAgICBmaWx0ZXIod2Vla19kYXkgPT0gIlN1bmRheSIpICU+JQ0KICAgIGdyb3VwX2J5KGJyYW5kcywgbmFpY3NfY29kZSwgTkVJR0hCT1JIT09EX0RJU1RSSUNUX05BTUUpICU+JQ0KICAgIHN1bW1hcml6ZSgNCiAgICAgU3VuZGF5X1RvdGFsID0gc3VtKHZpc2l0c19ieV9kYXkpDQogICAgKSkNCmBgYA0KDQpgYGB7cn0NCmdlb190b3RhbHNfZGF0YSA8LSBjb21ib190b3RhbHMgJT4lDQogIGZpbHRlcihicmFuZHMgJWluJSB3ZWVrZGF5X2JyYW5kX3Zpc2l0c18xNSRicmFuZHMgJiB3ZWVrX2RheSA9PSAiRnJpZGF5IikgJT4lDQogIGdyb3VwX2J5KEdFT0lEKSAlPiUNCiAgZ3JvdXBfYnkoTkVJR0hCT1JIT09EX0RJU1RSSUNUX05BTUUpICU+JQ0KICBtdXRhdGUoRnJpZGF5X1Zpc2l0cyA9IHNpZ25pZihzdW0oRnJpZGF5X1RvdGFsKSwgZGlnaXRzID0gMCksDQogICAgICAgICB3ZWVrZGF5X2xhYmVsID0gDQogICAgICAgICAgIGNhc2Vfd2hlbigNCiAgICAgICAgICAgICByb3dfbnVtYmVyKCkgPT0gMSB+IHBhc3RlMChORUlHSEJPUkhPT0RfRElTVFJJQ1RfTkFNRSwgIlxuICIsIHNjYWxlczo6Y29tbWEoRnJpZGF5X1RvdGFsKSwgIiB2aXNpdHMiKSwNCiAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXw0KICAgICAgICAgICApKQ0KDQoNCmdlb19tYXAgPC0gZ2VvX2pvaW4obWFwZGF0YSwgZ2VvX3RvdGFsc19kYXRhLCBieSA9ICdHRU9JRCcsIGhvdyA9ICdpbm5lcicpDQoNCmdlb190b3RhbHNfZGF0YV8yIDwtIGNvbWJvX3RvdGFsc18yICU+JQ0KICBmaWx0ZXIobmFpY3NfY29kZSAlaW4lIHdlZWtkYXlfY29kZV92aXNpdHNfMTUkbmFpY3NfY29kZSAmIHdlZWtfZGF5ID09ICJGcmlkYXkiKSAlPiUNCiAgZ3JvdXBfYnkoR0VPSUQpICU+JQ0KICBncm91cF9ieShORUlHSEJPUkhPT0RfRElTVFJJQ1RfTkFNRSkgJT4lDQogIG11dGF0ZShGcmlkYXlfVmlzaXRzID0gc2lnbmlmKHN1bShGcmlkYXlfVG90YWwpLCBkaWdpdHMgPSAwKSwNCiAgICAgICAgIHdlZWtkYXlfbGFiZWwgPSANCiAgICAgICAgICAgY2FzZV93aGVuKA0KICAgICAgICAgICAgIHJvd19udW1iZXIoKSA9PSAxIH4gcGFzdGUwKE5FSUdIQk9SSE9PRF9ESVNUUklDVF9OQU1FLCAiXG4gIiwgc2NhbGVzOjpjb21tYShGcmlkYXlfVG90YWwpLCAiIHZpc2l0cyIpLA0KICAgICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfDQogICAgICAgICAgICkpDQoNCmdlb19tYXBfMiA8LSBnZW9fam9pbihtYXBkYXRhLCBnZW9fdG90YWxzX2RhdGFfMiwgYnkgPSAnR0VPSUQnLCBob3cgPSAnaW5uZXInKQ0KDQpgYGANCg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTE2LCBmaWcud2lkdGggPSAxMiwgZmlnLmFsaWduPSJjZW50ZXIifQ0KZ3JpZEV4dHJhOjpncmlkLmFycmFuZ2UoDQogIChnZ3Bsb3QoZ2VvX21hcCkgKw0KICAgIGdlb21fc2YoYWVzKGZpbGwgPSBORUlHSEJPUkhPT0RfRElTVFJJQ1RfTkFNRSwNCiAgICAgICAgICAgICAgICBhbHBoYSA9IEZyaWRheV9Ub3RhbCkpICsNCiAgICBnZW9tX3NmX2xhYmVsX3JlcGVsKGFlcyhsYWJlbCA9IHdlZWtkYXlfbGFiZWwsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gTkVJR0hCT1JIT09EX0RJU1RSSUNUX05BTUUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGp1c3QgPSAwLjUsIHZqdXN0ID0gMC41KSwgc2l6ZSA9IDMuNSkgKw0KICAgICBnZ3RpdGxlKCJTZWF0dGxlIEFyZWEgQmlnIE5hbWUgQnJhbmQgVmlzaXRzIikgKw0KICAgIA0KICAgIHRoZW1lKGxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSwNCiAgICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBzaXplID0gMTYsIGZhY2UgPSAiYm9sZCIpDQogICAgICAgICAgKSksDQoNCiAgKGdncGxvdChnZW9fbWFwXzIpICsNCiAgICBnZW9tX3NmKGFlcyhmaWxsID0gTkVJR0hCT1JIT09EX0RJU1RSSUNUX05BTUUsDQogICAgICAgICAgICAgICAgYWxwaGEgPSBGcmlkYXlfVG90YWwpKSArDQogICAgZ2VvbV9zZl9sYWJlbF9yZXBlbChhZXMobGFiZWwgPSB3ZWVrZGF5X2xhYmVsLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IE5FSUdIQk9SSE9PRF9ESVNUUklDVF9OQU1FLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksIHNpemUgPSAzLjUpICsNCiAgICAgDQogICAgIGdndGl0bGUoIlNlYXR0bGUgQXJlYSBCaWcgTmFtZSBOSUFDIENvZGUgVmlpc3QiKSArDQogICAgDQogICAgdGhlbWUobGluZSA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLCANCiAgICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siLCBmaWxsID0gTkEpLA0KICAgICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHNpemUgPSAxNiwgZmFjZSA9ICJib2xkIikpKSwNCiAgbmNvbCA9IDIsDQogIHRvcCA9ICAgdGV4dEdyb2IoZXhwcmVzc2lvbihib2xkKCJOZWlnaGJvcmhvb2QgVmlzaXN0IHRvIFRvcCAxNSBMYXJnZSBCcmFuZHMgaW4gSnVseSIpKSwgDQogICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRzaXplPTM1LGZvbnQ9OCksIA0KICAgICAgICAgICAgICAgICAgIGhqdXN0ID0gLjUpDQopDQogIA0KYGBgDQoNCmBgYHtyfQ0KYmxhbmtfd2Vla2RheV92aXNpdHMgPC0gc3Vic2V0KGRhaWx5X3Zpc2l0cywgYnJhbmRzID09ICIiKSAlPiUNCiAgZ3JvdXBfYnkod2Vla2RheXMoZGF0ZSkpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgYXZnX3Zpc2l0cyA9IHJvdW5kKG1lYW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1lZF92aXNpdHMgPSByb3VuZChtZWRpYW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1heF92aXNpdHMgPSByb3VuZChtYXgodmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIG1pbl92aXNpdHMgPSByb3VuZChtaW4odmlzaXRzX2J5X2RheSksIGRpZ2l0cyA9IDApLA0KICAgIHRvdGFsID0gcm91bmQoc3VtKHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKQ0KICApICU+JSByZW5hbWUoDQogICAgIndlZWtfZGF5cyIgPSAid2Vla2RheXMoZGF0ZSkiDQogICkNCg0KYmxhbmtfd2Vla2RheV90aXRsZV92aXNpdHMgPC0gc3Vic2V0KGRhaWx5X3Zpc2l0cywgYnJhbmRzID09ICIiKSAlPiUNCiAgZ3JvdXBfYnkod2Vla2RheXMoZGF0ZSksIG5haWNzX3RpdGxlKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIGF2Z192aXNpdHMgPSByb3VuZChtZWFuKHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKSwNCiAgICBtZWRfdmlzaXRzID0gcm91bmQobWVkaWFuKHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKSwNCiAgICBtYXhfdmlzaXRzID0gcm91bmQobWF4KHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKSwNCiAgICBtaW5fdmlzaXRzID0gcm91bmQobWluKHZpc2l0c19ieV9kYXkpLCBkaWdpdHMgPSAwKSwNCiAgICB0b3RhbCA9IHJvdW5kKHN1bSh2aXNpdHNfYnlfZGF5KSwgZGlnaXRzID0gMCkNCiAgKSAlPiUgcmVuYW1lKA0KICAgICJ3ZWVrX2RheXMiID0gIndlZWtkYXlzKGRhdGUpIg0KICApDQpgYGANCg0KDQojIyBTbWFsbCBCcmFuZCBWaXNpdHMgb24gRnJpZGF5DQoNCkluIGdlbmVyYWwgd2Ugc2VlIHRoZSBzYW1lIHRyZW5kcyBhcyBzZWVuIHdpdGggdGhlIGJpZyBuYW1lIGJyYW5kcy4gVGhlIG5vcm1hbCBkaXN0cmlidXRpb24gb3ZlciB3ZWVrZGF5cyBhcHBlYXJzIGZhciBzdHJvbmdlci4gVW5saWtlIHRoZSB0aGUgdG9wIDE1IGJpZyBicmFuZHMsIHdlIHNlZSBhIHN0cm9uZyB0aGF0IHRoZSB0b3AgdGhyZWUgaW5kdXN0cnkgdHlwZXMgbGVhZCB0aGUgcmVzdCBieSBhIHNpZ25pZmljYW50IG1hcmdpbi4gSXQgaXMgbm8gc3VycHJpc2UgdGhhdCB3ZSBzZWUgcmVjcmVhdGlvbmFsIGZ1biBhY3Rpdml0aWVzIGluY3JlYXNlIGluIHBvcHVsYXJpdHkgdGhyb3VnaCB0aGUgaW5jcmVhc2VkIG51bWJlciBvZiB2aXN0cyB0byBiYXJzIGFuZCByZXN0YXVyYW50cy4gSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCBzZXZlcmFsIGluZHVzdHJpZXMgbWFpbnRhaW4gdGhlaXIgcG9zaXRpb25zIHN1Y2ggYXMgdGhlIGFpcnBvcnQgYW5kIG5vbi1hbGNvaG9saWMgYmFycy4NCg0KYGBge3IgZmlnLndpZHRoPTE0LCBmaWcuaGVpZ2h0PTYsIGZpZy5hbGlnbj0iY2VudGVyIn0NCmdyaWRFeHRyYTo6Z3JpZC5hcnJhbmdlKA0KICAoZ2dwbG90KGJsYW5rX3dlZWtkYXlfdmlzaXRzLCBhZXMoeSA9IHRvdGFsLA0KICAgICAgICAgICAgICAgeCA9IGZhY3RvcihibGFua193ZWVrZGF5X3Zpc2l0cyR3ZWVrX2RheXMsIGxldmVscyA9IGFzLmNoYXJhY3Rlcih3ZGF5KGMoMjo3LDEpLCBsYWJlbD1UUlVFLCBhYmJyPUZBTFNFKSkpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsID0gd2Vla19kYXlzLCBjb2xvciA9IHdlZWtfZGF5cykpICsNCiAgICBnZW9tX2NvbChzdGF0PSJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgICsNCiAgICANCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiTW9uIiwgIlR1ZXMiLCAiV2VkIiwgIlRodXJzIiwgIkZyaSIsICJTYXQiLCAiU3VuIikpICsNCiAgICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpjb21tYSwgbmFtZSA9ICJUb3RhbCBWaXNpdHMgRHVyaW5nIEp1bHkiLA0KICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gZXhwYW5zaW9uKG11bHQgPSBjKDAsIC4wNSkpKSArDQogICAgDQogICAgZ2VvbV90ZXh0KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGg9IC44KSwgDQogICAgICAgICAgICAgICAgYWVzKGxhYmVsID0gcGFzdGUoc2NhbGVzOjpjb21tYSh0b3RhbCksICJcbiBWaXNpdHMiKSwgdmp1c3QgPSAxLjI1KSwNCiAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSINCiAgICAgICAgICAgICAgICApICsNCiAgICAgDQogICAgIGdndGl0bGUoIlRvdGFsIFZpc2l0cyBEdXJpbmcgSnVseSIpICsNCiAgICAgDQogICAgdGhlbWUobGluZSA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLA0KICAgICAgICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwLCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksIA0KICAgICAgICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSwNCiAgICAgICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDE2LCBmYWNlID0gImJvbGQiKSkpLA0KICANCiAgKGdncGxvdChibGFua193ZWVrZGF5X3Zpc2l0cywgYWVzKHkgPSBhdmdfdmlzaXRzLA0KICAgICAgICAgICAgICAgeCA9IGZhY3RvcihibGFua193ZWVrZGF5X3Zpc2l0cyR3ZWVrX2RheXMsIGxldmVscyA9IGFzLmNoYXJhY3Rlcih3ZGF5KGMoMjo3LDEpLCBsYWJlbD1UUlVFLCBhYmJyPUZBTFNFKSkpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsID0gd2Vla19kYXlzLCBjb2xvciA9IHdlZWtfZGF5cykpICsNCiAgICBnZW9tX2NvbChzdGF0PSJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgICsNCiAgICANCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIk1vbiIsICJUdWVzIiwgIldlZCIsICJUaHVycyIsICJGcmkiLCAiU2F0IiwgIlN1biIpKSArDQogICAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6Y29tbWEsIA0KICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gIlRvdGFsIFZpc2l0cyBEdXJpbmcgSnVseSIsDQogICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGV4cGFuc2lvbihtdWx0ID0gYygwLCAuMDUpKSkgKw0KICAgIA0KICAgIGdlb21fdGV4dChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoPSAuOCksIA0KICAgICAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlKHNjYWxlczo6Y29tbWEoYXZnX3Zpc2l0cyksICJcbiBWaXNpdHMgXG4gcGVyIERheSIpLCB2anVzdCA9IDEuMjUpLA0KICAgICAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIg0KICAgICAgICAgICAgICAgICkgKw0KICAgICANCiAgICAgZ2d0aXRsZSgiQXZlcmFnZSBWaXNpdHMgRHVyaW5nIEp1bHkiKSArDQogICAgIA0KICAgIHRoZW1lKGxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwNCiAgICAgICAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCwgZmFjZSA9IGMoImJvbGQiLCAiaXRhbGljIikpLA0KICAgICAgICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siLCBmaWxsID0gTkEpLA0KICAgICAgICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBzaXplID0gMTYsIGZhY2UgPSAiYm9sZCIpKSksDQogIG5jb2wgPSAyLA0KICB0b3AgPSAgIHRleHRHcm9iKGV4cHJlc3Npb24oYm9sZCgiU21hbGwgQnJhbmQgVmlzaXQgRGlzdHJpYnV0aW9uIE92ZXIgV2Vla2RheXMgaW4gSnVseSIpKSwgDQogICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRzaXplPTM1LGZvbnQ9OCksIA0KICAgICAgICAgICAgICAgICAgIGhqdXN0ID0gLjUpDQogICkNCmBgYA0KDQoNCmBgYHtyICBmaWcud2lkdGg9MTksIGZpZy5oZWlnaHQ9MTIsIGZpZy5hbGlnbj0iY2VudGVyIn0NCmdyaWRFeHRyYTo6Z3JpZC5hcnJhbmdlKA0KICAoc3Vic2V0KGJsYW5rX3dlZWtkYXlfdGl0bGVfdmlzaXRzLCB3ZWVrX2RheXMgPT0gIldlZG5lc2RheSIgJiBuYWljc190aXRsZSAhPSAiIikgJT4lDQogICAgYXJyYW5nZSgtIHRvdGFsKSAlPiUNCiAgICBoZWFkKDE1KSAlPiUNCiAgICBtdXRhdGUocmFuayA9IHJvd19udW1iZXIoKSkgJT4lDQogICAgZ2dwbG90KGFlcyh5ID0gcmVvcmRlcihuYWljc190aXRsZSwgdG90YWwpLCB4ID0gdG90YWwpKSArDQogICAgZ2VvbV9zZWdtZW50KGFlcyh4ID0gdG90YWwsIHhlbmQgPSByYW5rLCB5ZW5kID0gbmFpY3NfdGl0bGUpLCBzaXplID0gMiwgY29sb3IgPSAiZGFya2dyYXkiKSArDQogICAgDQogICAgZ2VvbV9wb2ludChzaXplID0gOCwgY29sb3I9InRvbWF0byIpICsNCiAgICAgDQogICAgICBnZW9tX3BvaW50KGRhdGEgPSBibGFua193ZWVrZGF5X3RpdGxlX3Zpc2l0cyAlPiUNCiAgICAgICAgICAgICAgICAgICBmaWx0ZXIobmFpY3NfdGl0bGUgPT0gIkRyaW5raW5nIFBsYWNlcyAoQWxjb2hvbGljIEJldmVyYWdlcykiICYgd2Vla19kYXlzID09ICJXZWRuZXNkYXkiKSwNCiAgICAgICAgICAgICAgICAgc2l6ZSA9IDE0LCBjb2xvciA9ICJkZWVwc2t5Ymx1ZSIsIHNoYXBlID0gImRpYW1vbmQiKSArDQoNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IGJsYW5rX3dlZWtkYXlfdGl0bGVfdmlzaXRzICU+JQ0KICAgICAgICAgICAgICAgICAgIGZpbHRlcihuYWljc190aXRsZSA9PSAiRnVsbC1TZXJ2aWNlIFJlc3RhdXJhbnRzIiAmIHdlZWtfZGF5cyA9PSAiV2VkbmVzZGF5IiksDQogICAgICAgICAgICAgICAgIHNpemUgPSAxNCwgY29sb3IgPSAicHVycGxlIiwgc2hhcGUgPSAiZGlhbW9uZCIpICsNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IGJsYW5rX3dlZWtkYXlfdGl0bGVfdmlzaXRzICU+JQ0KICAgICAgICAgICAgICAgICAgIGZpbHRlcihuYWljc190aXRsZSA9PSAiT3RoZXIgQWlycG9ydCBPcGVyYXRpb25zIiAmIHdlZWtfZGF5cyA9PSAiRnJpZGF5IiksDQogICAgICAgICAgICAgICAgc2l6ZSA9IDEwLCBjb2xvciA9ICJkYXJrZ3JheSIpICsNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IGJsYW5rX3dlZWtkYXlfdGl0bGVfdmlzaXRzICU+JQ0KICAgICAgICAgICAgICAgICAgIGZpbHRlcihuYWljc190aXRsZSA9PSAiRml0bmVzcyBhbmQgUmVjcmVhdGlvbmFsIFNwb3J0cyBDZW50ZXJzIiAmIHdlZWtfZGF5cyA9PSAiRnJpZGF5IiksDQogICAgICAgICAgICAgICAgc2l6ZSA9IDEwLCBjb2xvciA9ICJkYXJrZ3JheSIpICsNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IGJsYW5rX3dlZWtkYXlfdGl0bGVfdmlzaXRzICU+JQ0KICAgICAgICAgICAgICAgICAgIGZpbHRlcihuYWljc190aXRsZSA9PSAiU3VwZXJtYXJrZXRzIGFuZCBPdGhlciBHcm9jZXJ5IChleGNlcHQgQ29udmVuaWVuY2UpIFN0b3JlcyIgJg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtfZGF5cyA9PSAiRnJpZGF5IiksDQogICAgICAgICAgICAgICAgc2l6ZSA9IDEwLCBjb2xvciA9ICJkYXJrZ3JheSIpICsNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IGJsYW5rX3dlZWtkYXlfdGl0bGVfdmlzaXRzICU+JQ0KICAgICAgICAgICAgICAgICAgIGZpbHRlcihuYWljc190aXRsZSA9PSAiU25hY2sgYW5kIE5vbmFsY29ob2xpYyBCZXZlcmFnZSBCYXJzIiAmIHdlZWtfZGF5cyA9PSAiRnJpZGF5IiksDQogICAgICAgICAgICAgICAgc2l6ZSA9IDEwLCBjb2xvciA9ICJkYXJrZ3JheSIpICsNCiAgICANCiAgICBzY2FsZV95X2Rpc2NyZXRlKG5hbWUgPSBOVUxMLA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gcmV2KGMoIkxlc3NvcnMgb2ZcbiBOb25yZXNpZGVudGlhbCAgQnVpbGRpbmdzIFxuIChleGNlcHQgTWluaXdhcmVob3VzZXMpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hdHVyZSBQYXJrcyBhbmQgT3RoZXIgXG4gU2ltaWxhciBJbnN0aXR1dGlvbnMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVsbC1TZXJ2aWNlIFJlc3RhdXJhbnRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyIEFpcnBvcnQgT3BlcmF0aW9ucyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTbmFjayBhbmQgTm9uYWxjb2hvbGljIFxuIEJldmVyYWdlIEJhcnMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRml0bmVzcyBhbmQgUmVjcmVhdGlvbmFsIFxuIFNwb3J0cyBDZW50ZXJzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVsZW1lbnRhcnkgYW5kXG4gU2Vjb25kYXJ5ICBTY2hvb2xzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxpbWl0ZWQtU2VydmljZVxuIFJlc3RhdXJhbnRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdlbmVyYWwgTWVkaWNhbCBhbmQgXG4gU3VyZ2ljYWwgSG9zcGl0YWxzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdvbGYgQ291cnNlc1xuIGFuZCBDb3VudHJ5ICBDbHVicyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEcmlua2luZyBQbGFjZXMgXG4gKEFsY29ob2xpYyBCZXZlcmFnZXMpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1cGVybWFya2V0cyBhbmQgXG4gT3RoZXIgR3JvY2VyeSBTdG9yZXNcbiAoZXhjZXB0IENvbnZlbmllbmNlKSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPZmZpY2VzIG9mIERlbnRpc3RzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGlnaW91cyBPcmdhbml6YXRpb25zIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9mZmljZXMgb2YgUGh5c2ljaWFucyBcbiAoZXhjZXB0IE1lbnRhbCBcbkhlYWx0aCBTcGVjaWFsaXN0cykiKSkpICsNCiAgICANCiAgICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJXZWRuZXNkYXkgVmlzaXRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAidG9wIiwNCiAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCA3MjQ5MCArIDUwMDAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKw0KICAgIA0KICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZSh0b3RhbCwgInZpc2l0cyIpLCBoanVzdCA9IC0uMjUpLCBzaXplID0gNikgKw0KICAgIA0KICAgIHRoZW1lKGxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjAsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksDQogICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSkpLA0KICANCiAgKHN1YnNldChibGFua193ZWVrZGF5X3RpdGxlX3Zpc2l0cywgd2Vla19kYXlzID09ICJUaHVyc2RheSIgJiBuYWljc190aXRsZSAhPSAiIikgJT4lDQogICAgYXJyYW5nZSgtIHRvdGFsKSAlPiUNCiAgICBoZWFkKDE1KSAlPiUNCiAgICBtdXRhdGUocmFuayA9IHJvd19udW1iZXIoKSkgJT4lDQogICAgZ2dwbG90KGFlcyh5ID0gcmVvcmRlcihuYWljc190aXRsZSwgdG90YWwpLCB4ID0gdG90YWwpKSArDQogICAgZ2VvbV9zZWdtZW50KGFlcyh4ID0gdG90YWwsIHhlbmQgPSByYW5rLCB5ZW5kID0gbmFpY3NfdGl0bGUpLCBzaXplID0gMiwgY29sb3IgPSAiZGFya2dyYXkiKSArDQogICAgDQogICAgZ2VvbV9wb2ludChzaXplID0gOCwgY29sb3I9InRvbWF0byIpICsNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IGJsYW5rX3dlZWtkYXlfdGl0bGVfdmlzaXRzICU+JQ0KICAgICAgICAgICAgICAgICAgIGZpbHRlcihuYWljc190aXRsZSA9PSAiRHJpbmtpbmcgUGxhY2VzIChBbGNvaG9saWMgQmV2ZXJhZ2VzKSIgJiB3ZWVrX2RheXMgPT0gIlRodXJzZGF5IiksDQogICAgICAgICAgICAgICAgIHNpemUgPSAxNCwgY29sb3IgPSAiZGVlcHNreWJsdWUiLCBzaGFwZSA9ICJkaWFtb25kIikgKw0KICAgICANCiAgICAgZ2VvbV9wb2ludChkYXRhID0gYmxhbmtfd2Vla2RheV90aXRsZV92aXNpdHMgJT4lDQogICAgICAgICAgICAgICAgICAgZmlsdGVyKG5haWNzX3RpdGxlID09ICJGdWxsLVNlcnZpY2UgUmVzdGF1cmFudHMiICYgd2Vla19kYXlzID09ICJUaHVyc2RheSIpLA0KICAgICAgICAgICAgICAgICBzaXplID0gMTQsIGNvbG9yID0gInB1cnBsZSIsIHNoYXBlID0gImRpYW1vbmQiKSArDQogICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IGJsYW5rX3dlZWtkYXlfdGl0bGVfdmlzaXRzICU+JQ0KICAgICAgICAgICAgICAgICAgIGZpbHRlcihuYWljc190aXRsZSA9PSAiT3RoZXIgQWlycG9ydCBPcGVyYXRpb25zIiAmIHdlZWtfZGF5cyA9PSAiRnJpZGF5IiksDQogICAgICAgICAgICAgICAgc2l6ZSA9IDEwLCBjb2xvciA9ICJkYXJrZ3JheSIpICsNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IGJsYW5rX3dlZWtkYXlfdGl0bGVfdmlzaXRzICU+JQ0KICAgICAgICAgICAgICAgICAgIGZpbHRlcihuYWljc190aXRsZSA9PSAiRml0bmVzcyBhbmQgUmVjcmVhdGlvbmFsIFNwb3J0cyBDZW50ZXJzIiAmIHdlZWtfZGF5cyA9PSAiRnJpZGF5IiksDQogICAgICAgICAgICAgICAgc2l6ZSA9IDEwLCBjb2xvciA9ICJkYXJrZ3JheSIpICsNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IGJsYW5rX3dlZWtkYXlfdGl0bGVfdmlzaXRzICU+JQ0KICAgICAgICAgICAgICAgICAgIGZpbHRlcihuYWljc190aXRsZSA9PSAiU3VwZXJtYXJrZXRzIGFuZCBPdGhlciBHcm9jZXJ5IChleGNlcHQgQ29udmVuaWVuY2UpIFN0b3JlcyIgJg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtfZGF5cyA9PSAiRnJpZGF5IiksDQogICAgICAgICAgICAgICAgc2l6ZSA9IDEwLCBjb2xvciA9ICJkYXJrZ3JheSIpICsNCiAgICAgDQogICAgIGdlb21fcG9pbnQoZGF0YSA9IGJsYW5rX3dlZWtkYXlfdGl0bGVfdmlzaXRzICU+JQ0KICAgICAgICAgICAgICAgICAgIGZpbHRlcihuYWljc190aXRsZSA9PSAiU25hY2sgYW5kIE5vbmFsY29ob2xpYyBCZXZlcmFnZSBCYXJzIiAmIHdlZWtfZGF5cyA9PSAiRnJpZGF5IiksDQogICAgICAgICAgICAgICAgc2l6ZSA9IDEwLCBjb2xvciA9ICJkYXJrZ3JheSIpICsNCiAgICAgDQogICAgc2NhbGVfeV9kaXNjcmV0ZShuYW1lID0gTlVMTCwNCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHJldihjKCJMZXNzb3JzIG9mIFxuTm9ucmVzaWRlbnRpYWxCdWlsZGluZ3NcbihleGNlcHQgTWluaXdhcmVob3VzZXMpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hdHVyZSBQYXJrcyBhbmQgT3RoZXIgXG4gU2ltaWxhciBJbnN0aXR1dGlvbnMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVsbC1TZXJ2aWNlIFJlc3RhdXJhbnRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyIEFpcnBvcnQgT3BlcmF0aW9ucyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTbmFjayBhbmQgTm9uYWxjb2hvbGljIFxuIEJldmVyYWdlIEJhcnMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRml0bmVzcyBhbmQgUmVjcmVhdGlvbmFsIFxuIFNwb3J0cyBDZW50ZXJzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVsZW1lbnRhcnkgYW5kXG4gIFNlY29uZGFyeSBTY2hvb2xzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxpbWl0ZWQtU2VydmljZVxuIFJlc3RhdXJhbnRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdlbmVyYWwgTWVkaWNhbCBhbmQgXG4gU3VyZ2ljYWwgSG9zcGl0YWxzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRyaW5raW5nIFBsYWNlcyBcbiAoQWxjb2hvbGljIEJldmVyYWdlcykiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR29sZiBDb3Vyc2VzXG4gYW5kIENvdW50cnkgQ2x1YnMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VwZXJtYXJrZXRzIGFuZCBcbiBPdGhlciBHcm9jZXJ5IFN0b3Jlc1xuIChleGNlcHQgQ29udmVuaWVuY2UpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9mZmljZXMgb2YgRGVudGlzdHMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVsaWdpb3VzIE9yZ2FuaXphdGlvbnMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2ZmaWNlcyBvZiBQaHlzaWNpYW5zIFxuIChleGNlcHQgTWVudGFsXG5IZWFsdGggU3BlY2lhbGlzdHMpIikpKSArDQogICAgDQogICAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiVGh1cnNkYXkgVmlzaXRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAidG9wIiwNCiAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCA3MjQ5MCArIDUwMDAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKw0KICAgIA0KICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZSh0b3RhbCwgInZpc2l0cyIpLCBoanVzdCA9IC0uMjUpLCBzaXplID0gNikgKw0KICAgIA0KICAgIHRoZW1lKGxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjAsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksDQogICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSkpLA0KICANCiAgDQogIChzdWJzZXQoYmxhbmtfd2Vla2RheV90aXRsZV92aXNpdHMsIHdlZWtfZGF5cyA9PSAiRnJpZGF5IiAmIG5haWNzX3RpdGxlICE9ICIiKSAlPiUNCiAgICBhcnJhbmdlKC0gdG90YWwpICU+JQ0KICAgIGhlYWQoMTUpICU+JQ0KICAgIG11dGF0ZShyYW5rID0gcm93X251bWJlcigpKSAlPiUNCiAgICBnZ3Bsb3QoYWVzKHkgPSByZW9yZGVyKG5haWNzX3RpdGxlLCB0b3RhbCksIHggPSB0b3RhbCkpICsNCiAgICBnZW9tX3NlZ21lbnQoYWVzKHggPSB0b3RhbCwgeGVuZCA9IHJhbmssIHllbmQgPSBuYWljc190aXRsZSksIHNpemUgPSAyLCBjb2xvciA9ICJkYXJrZ3JheSIpICsNCiAgICANCiAgICBnZW9tX3BvaW50KHNpemUgPSA4LCBjb2xvcj0idG9tYXRvIikgKw0KICAgICANCiAgICAgZ2VvbV9wb2ludChkYXRhID0gYmxhbmtfd2Vla2RheV90aXRsZV92aXNpdHMgJT4lDQogICAgICAgICAgICAgICAgICAgZmlsdGVyKG5haWNzX3RpdGxlID09ICJEcmlua2luZyBQbGFjZXMgKEFsY29ob2xpYyBCZXZlcmFnZXMpIiAmIHdlZWtfZGF5cyA9PSAiRnJpZGF5IiksDQogICAgICAgICAgICAgICAgIHNpemUgPSAxNCwgY29sb3IgPSAiZGVlcHNreWJsdWUiLCBzaGFwZSA9ICJkaWFtb25kIikgKw0KICAgICANCiAgICAgZ2VvbV9wb2ludChkYXRhID0gYmxhbmtfd2Vla2RheV90aXRsZV92aXNpdHMgJT4lDQogICAgICAgICAgICAgICAgICAgZmlsdGVyKG5haWNzX3RpdGxlID09ICJGdWxsLVNlcnZpY2UgUmVzdGF1cmFudHMiICYgd2Vla19kYXlzID09ICJGcmlkYXkiKSwNCiAgICAgICAgICAgICAgICAgc2l6ZSA9IDE0LCBjb2xvciA9ICJwdXJwbGUiLCBzaGFwZSA9ICJkaWFtb25kIikgKw0KICAgICANCiAgICAgZ2VvbV9wb2ludChkYXRhID0gYmxhbmtfd2Vla2RheV90aXRsZV92aXNpdHMgJT4lDQogICAgICAgICAgICAgICAgICAgZmlsdGVyKG5haWNzX3RpdGxlID09ICJPdGhlciBBaXJwb3J0IE9wZXJhdGlvbnMiICYgd2Vla19kYXlzID09ICJGcmlkYXkiKSwNCiAgICAgICAgICAgICAgICBzaXplID0gMTAsIGNvbG9yID0gImRhcmtncmF5IikgKw0KICAgICANCiAgICAgZ2VvbV9wb2ludChkYXRhID0gYmxhbmtfd2Vla2RheV90aXRsZV92aXNpdHMgJT4lDQogICAgICAgICAgICAgICAgICAgZmlsdGVyKG5haWNzX3RpdGxlID09ICJGaXRuZXNzIGFuZCBSZWNyZWF0aW9uYWwgU3BvcnRzIENlbnRlcnMiICYgd2Vla19kYXlzID09ICJGcmlkYXkiKSwNCiAgICAgICAgICAgICAgICBzaXplID0gMTAsIGNvbG9yID0gImRhcmtncmF5IikgKw0KICAgICANCiAgICAgZ2VvbV9wb2ludChkYXRhID0gYmxhbmtfd2Vla2RheV90aXRsZV92aXNpdHMgJT4lDQogICAgICAgICAgICAgICAgICAgZmlsdGVyKG5haWNzX3RpdGxlID09ICJTdXBlcm1hcmtldHMgYW5kIE90aGVyIEdyb2NlcnkgKGV4Y2VwdCBDb252ZW5pZW5jZSkgU3RvcmVzIiAmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla19kYXlzID09ICJGcmlkYXkiKSwNCiAgICAgICAgICAgICAgICBzaXplID0gMTAsIGNvbG9yID0gImRhcmtncmF5IikgKw0KICAgICANCiAgICAgZ2VvbV9wb2ludChkYXRhID0gYmxhbmtfd2Vla2RheV90aXRsZV92aXNpdHMgJT4lDQogICAgICAgICAgICAgICAgICAgZmlsdGVyKG5haWNzX3RpdGxlID09ICJTbmFjayBhbmQgTm9uYWxjb2hvbGljIEJldmVyYWdlIEJhcnMiICYgd2Vla19kYXlzID09ICJGcmlkYXkiKSwNCiAgICAgICAgICAgICAgICBzaXplID0gMTAsIGNvbG9yID0gImRhcmtncmF5IikgKw0KICAgIA0KICAgIHNjYWxlX3lfZGlzY3JldGUobmFtZSA9IE5VTEwsDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJPZmZpY2VzIG9mIERlbnRpc3RzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZWQgTWVyY2hhbmRpc2UgU3RvcmVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGlnaW91cyBPcmdhbml6YXRpb25zIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1cGVybWFya2V0cyBhbmQgXG4gT3RoZXIgR3JvY2VyeSBTdG9yZXNcbiAoZXhjZXB0IENvbnZlbmllbmNlKSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHZW5lcmFsIE1lZGljYWwgYW5kIFxuIFN1cmdpY2FsIEhvc3BpdGFscyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHb2xmIENvdXJzZXMgYW5kIFxuIENvdW50cnkgQ2x1YnMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRWxlbWVudGFyeSBhbmQgXG4gU2Vjb25kYXJ5IFNjaG9vbHMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHJpbmtpbmcgUGxhY2VzIFxuIChBbGNvaG9saWMgQmV2ZXJhZ2VzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxpbWl0ZWQtU2VydmljZVxuIFJlc3RhdXJhbnRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpdG5lc3MgYW5kIFJlY3JlYXRpb25hbCBcbiBTcG9ydHMgQ2VudGVycyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTbmFjayBhbmQgTm9uYWxjb2hvbGljIFxuIEJldmVyYWdlIEJhcnMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3RoZXIgQWlycG9ydCBPcGVyYXRpb25zIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hdHVyZSBQYXJrcyBhbmQgT3RoZXIgXG4gU2ltaWxhciBJbnN0aXR1dGlvbnMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVsbC1TZXJ2aWNlIFJlc3RhdXJhbnRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxlc3NvcnMgb2YgXG4gTm9ucmVzaWRlbnRpYWwgQnVpbGRpbmdzIFxuIChleGNlcHQgTWluaXdhcmVob3VzZXMpIikpICsNCiAgICANCiAgICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJGcmlkYXkgVmlzaXRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAidG9wIiwNCiAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCA3MjQ5MCArIDY1MDAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKw0KICAgIA0KICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZSh0b3RhbCwgInZpc2l0cyIpLCBoanVzdCA9IC0uMjUpLCBzaXplID0gNikgKw0KICAgIA0KICAgIHRoZW1lKGxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjAsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksDQogICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSkpLA0KICBuY29sID0gMywNCiAgdG9wID0gICB0ZXh0R3JvYihleHByZXNzaW9uKGJvbGQoIlRvcCAxNSBJbmR1c3RyaWVzIFBhdHJvbml6ZWQgTWlkd2VlayIpKSwgDQogICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRzaXplPTMwLGZvbnQ9OCksIA0KICAgICAgICAgICAgICAgICAgIGhqdXN0ID0gLjUpDQopDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=