JS CHECK: all inline scripts blocked. Open console (F12) for errors; check LiteSpeed JS settings + any CSP/Cloudflare Rocket Loader. JS CHECK: booter did not run or payload missing. Check console (F12).
Sat 24 Oct 2026 · Etihad Arena, Yas Island · Abu Dhabi Showdown Week
This Is ES Sport.
Two world titles. One night at Etihad Arena. As an official reseller for UFC Abu Dhabi , ES Sport puts you in the seat and the hotel – pick your category and we handle the rest.
First bell 00 Days to go · Saturday 24 October 202600 00 00
Titles 02 Featherweight and bantamweight, on one card
UFC events 24 Staged in Abu Dhabi since 2010
Capacity 18,000 Etihad Arena, Yas Island
About the event
UFC 333 in Abu Dhabi
UFC 333 lands at Etihad Arena, Yas Island on Saturday 24 October 2026, heading
Abu Dhabi Showdown Week. It is the capital’s 24th UFC event since 2010 and its
11th numbered card. Numbered events are where the UFC stages its biggest
matchups, and this one carries two titles.
24
UFC events in Abu Dhabi
11th
Numbered event in the city
18,000
Etihad Arena capacity
The card
UFC 333 fight card
Open any bout for the tale of the tape, a head-to-head read on the technical
numbers, and where each fight is actually decided. Card subject to change.
The venue
Etihad Arena
Voted the third-best UFC venue in the world by USA TODAY readers in 2026.
Here is what earns it that.
Etihad Arena // Yas Bay, Yas Island // 18,000 capacity
Most arenas earn their reputation over decades. This one opened with a UFC card
and never looked back.
Read the full story
Close the story
Built from a weave
HOK drew the exterior from sadu, the traditional Bedouin weaving of the Gulf.
The fascia folds and overlaps like fabric on a loom, and after dark it lights
from within, so the building reads as a lantern from across the marina.
Anchor of Yas Bay
It was finished in January 2021 as the centrepiece of Yas Bay, the waterfront
district on the southern tip of Yas Island. At 18,000 seats it is the largest
indoor arena in the Middle East.
It opened with a fight
The first event ever staged here was a UFC card. In January 2021, during the
Fight Island run, Holloway versus Kattar put spectators back inside a UFC arena
for the first time since the pandemic closed the doors.
Then came McGregor
Eight days later, UFC 257 gave the new building Poirier versus McGregor 2 as
its debut pay-per-view. UFC 267 followed that autumn and made Abu Dhabi the first
city outside Las Vegas to host four numbered events.
October belongs to Abu Dhabi
Then 280, 294, 308 and 321, each one carrying a title fight. Six numbered cards
in five years have fixed a date in October that the sport now plans its calendar
around.
Inside the room
A steep single rake puts the Octagon close and low, every seat holds a clear
view, and the ceiling carries a full production rig. Yas Bay Waterfront runs the
promenade outside, with hotels within walking distance.
Capacity 18,000
Opened January 2021
Architect HOK
Location Yas Bay, Yas Island
First ever event UFC on ABC Holloway vs Kattar
Numbered UFC cards 257 · 267 · 280 294 · 308 · 321
Global ranking No.3 UFC venue USA TODAY 2026
Sightlines Unrestricted, every tier
Parking On site, free
Accessibility Step-free, all tiers
Full house. Eighteen thousand seats wrapped tight around the floor, with the numbered cards here playing to sold-out crowds.
Fight configuration. The Octagon sits low and central with the rig overhead. This is the room UFC 333 will be staged in.
Packages
Your UFC experience starts here
ES Sport is an official reseller for UFC Abu Dhabi ticket and hotel packages,
working with Ethara and Abu Dhabi’s Department of Culture and Tourism. Every
package includes your official match ticket, one night’s accommodation on Yas
Island, all taxes and VAT, and the services of the ES Sport team in Abu Dhabi.
Tell us the category and we will come back with availability and pricing.
Categories 6, 7 and 8
Upper tier
Official match ticket, full-card seating
One night’s hotel on Yas Island
All taxes and VAT included
Best value entry into the building
Group bookings available
Categories 3, 4 and 5
Lower bowl
Official match ticket, closer to the Octagon
One night’s hotel on Yas Island
All taxes and VAT included
Extend your stay for Showdown Week
Multi-ticket packages available
VIP
Floor and hospitality
Floor seating closest to the Octagon
Hospitality with food and drinks included
Stay at a premium hotel on Yas Island
Dedicated contact for corporate hosting
Email info@es-sport.ae for group builds
Where you sit
Your view of the Octagon
The official Etihad Arena layout for UFC 333. Reservations are made by category,
not by individual seat or section — tap anywhere in a category to select it,
set your guests, and send the enquiry straight to our team. Every package includes
your official match ticket and one night’s hotel stay, priced per person on a
double-sharing basis.
+
−
↺
Scroll to zoom · drag to pan · section numbers for orientation only
315
115
114
113
112
111
110
101
102
103
104
105
106
301
314
302
313
303
312
304
311
305
310
309
308
307
306
109
107
115
114
113
112
101
102
103
104
116
116
116
116
108
109
108
107
110
106
A
B
C
F
E
G
Partner
Working with Abu Dhabi
“
We’re thrilled to announce ES Sport as one of the official packages partner for
sporting events in Abu Dhabi, including UFC Abu Dhabi events. This partnership
strengthens our relationship and enhances the fan experience with expertly curated
ticket and hotel packages in collaboration with Ethara. Our goal is to make every
Abu Dhabi event unforgettable, and we are confident that ES Sport will help us
achieve this.
Noura Kahil
Section Head, Events Bureau
Abu Dhabi Tourism (DCT)
Latest articles
Read the latest from ES Sport
Booking questions
Questions
Register interest
Get in touch with an expert.
Tell us the category, the number of seats and your dates. We will come back
with what is available and what it costs, from the people who handle these
bookings every October.
×
Enquire
Tell us what you need. We will get back to you within one working day.
IWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzLXBhZ2UiKTtlJiZlLmNsYXNzTGlzdC5hZGQoImpzIik7Y29uc3QgdD0iaHR0cHM6Ly91ZmMuY29tL2ltYWdlcy9zdHlsZXMvYXRobGV0ZV9iaW9fZnVsbF9ib2R5L3MzLyIsbj1be3Nsb3Q6Ik1haW4gZXZlbnQiLHdlaWdodDoiRmVhdGhlcndlaWdodCB0aXRsZSBib3V0Iixyb3VuZHM6IjUgcm91bmRzIix0aXRsZTohMCxyZWQ6e2ZpcnN0OiJBbGV4YW5kZXIiLGxhc3Q6IlZvbGthbm92c2tpIixuaWNrOiJUaGUgR3JlYXQiLGluaXRpYWxzOiJBViIsaW1nOnQrIjIwMjYtMDEvVk9MS0FOT1ZTS0lfQUxFWEFOREVSX0xfQkVMVF8wMS0zMS5wbmc/aXRvaz1oZlpSODF4aCIsZmxhZzoiQVVTIixyYW5rOiJDaGFtcGlvbiIscGZwOiIjMiBQRlAiLHJlY29yZDoiMjgtNC0wIixhZ2U6MzcsaGVpZ2h0OiI1JzZcIiIscmVhY2g6JzcxLjUiJyxsZWdSZWFjaDonMzYiJyxneW06IkZyZWVzdHlsZSBGaWdodGluZyBHeW0iLHN0eWxlOiJGcmVlc3R5bGUiLGF2Z1RpbWU6IjE2OjUwIixzbHBtOjUuOTksc2FwbTozLjMxLHN0ckFjYzo1NyxzdHJEZWY6NTksdGQxNToxLjYzLHRkRGVmOjY5LGtkMTU6LjMsc3ViMTU6LjIsZmluaXNoOntrbzo0NixkZWM6NDMsc3ViOjExfSx0YXJnZXQ6e2hlYWQ6NjUsYm9keToxMCxsZWc6MjV9LHRyYWl0czpbIk92ZXJoYW5kIHJpZ2h0IiwiTGVnLWtpY2sgdm9sdW1lIiwiSGFsZi1ndWFyZCBncm91bmQgYW5kIHBvdW5kIiwiQnJvd24gYmVsdCBCSkoiLCJOYXRpb25hbCB3cmVzdGxpbmcgZ29sZCIsIjExIHN0cmFpZ2h0IHRpdGxlIGZpZ2h0cyJdLHJlYWQ6IlRoZSBoaWdoZXN0IG91dHB1dCBvbiB0aGUgY2FyZCBhdCA1Ljk5IHNpZ25pZmljYW50IHN0cmlrZXMgYSBtaW51dGUsIGFuZCB0aGUgYmVzdCBhY2N1cmFjeSBhdCA1NyUgYWNyb3NzIDMsMTc4IGF0dGVtcHRzLiBBIHF1YXJ0ZXIgb2YgZXZlcnl0aGluZyBoZSB0aHJvd3MgZ29lcyB0byB0aGUgbGVncywgNDQ3IGxlZyBzdHJpa2VzIG9uIHJlY29yZCwgd2hpY2ggaXMgaG93IGhlIGJ1eXMgdGhlIHJhbmdlIGZvciB0aGUgb3ZlcmhhbmQgcmlnaHQuIEhlIGdyYXBwbGVzIG9uIGhpcyBvd24gdGVybXM6IDc2JSBvZiBoaXMgc3RyaWtlcyBsYW5kIHN0YW5kaW5nLiJ9LGJsdWU6e2ZpcnN0OiJNb3ZzYXIiLGxhc3Q6IkV2bG9ldiIsbmljazoiIixpbml0aWFsczoiTUUiLGltZzp0KyIyMDI2LTAzL0VWTE9FVl9NT1ZTQVJfTF8wMy0yMS5wbmc/aXRvaz1YMnFBdUc3VCIsZmxhZzoiUlVTIixyYW5rOiIjMSIscGZwOiIiLHJlY29yZDoiMjAtMC0wIixhZ2U6MzIsaGVpZ2h0OiI1JzdcIiIscmVhY2g6JzcyLjUiJyxsZWdSZWFjaDonMzYiJyxneW06IkFtZXJpY2FuIFRvcCBUZWFtIixzdHlsZToiRnJlZXN0eWxlIixhdmdUaW1lOiIxNjowMCIsc2xwbTozLjkxLHNhcG06Mi44LHN0ckFjYzo0OCxzdHJEZWY6NjEsdGQxNTo0Ljc4LHRkRGVmOjYxLGtkMTU6MCxzdWIxNTouMTksZmluaXNoOntrbzoxNSxkZWM6NjUsc3ViOjIwfSx0YXJnZXQ6e2hlYWQ6NzcsYm9keToxNSxsZWc6OH0sdHJhaXRzOlsiR3JlY28tUm9tYW4gY2hhaW4gd3Jlc3RsaW5nIiwiUmVhci1uYWtlZCBjaG9rZSBmaW5pc2hlciIsIk5ldmVyIGJlZW4gZHJvcHBlZCIsIkhlYWQtaHVudGluZyA3NyUiLCJVbmRlZmVhdGVkIGluIDIwIl0scmVhZDoiVW5kZWZlYXRlZCBpbiB0d2VudHkgYW5kIGNhcnJ5aW5nIHRoZSBoaWdoZXN0IHRha2Vkb3duIHJhdGUgaW4gdGhpcyBmaWdodCBhdCA0Ljc4IHBlciBmaWZ0ZWVuIG1pbnV0ZXMuIEhpcyBrbm9ja2Rvd24gYXZlcmFnZSBhZ2FpbnN0IHNpdHMgYXQgYSBmbGF0IDAuMDAgYWNyb3NzIHR3ZW50eSBmaWdodHMuIFRoZSBzdHJpa2luZyBpcyB0aGVyZSB0byBzZXQgdXAgdGhlIGxldmVsIGNoYW5nZTogNzclIG9mIGhpcyB2b2x1bWUgZ29lcyB0byB0aGUgaGVhZCwgYW5kIGFsbCBmb3VyIG9mIGhpcyBzdWJtaXNzaW9ucyBhcmUgcmVhci1uYWtlZCBjaG9rZXMuIn0sdmVyZGljdDoiVm9sa2Fub3Zza2kncyA2OSUgdGFrZWRvd24gZGVmZW5jZSBhZ2FpbnN0IEV2bG9ldidzIDQuNzggdGFrZWRvd25zIHBlciBmaWZ0ZWVuIG1pbnV0ZXMuIFN0YW5kaW5nLCB0aGUgY2hhbXBpb24gaG9sZHMgYSB0d28tc3RyaWtlLXBlci1taW51dGUgb3V0cHV0IGFkdmFudGFnZSBhbmQgZXZlcnkgYWNjdXJhY3kgbWV0cmljLiBJZiBFdmxvZXYgZ2V0cyB0byB0aGUgaGlwcyBhbmQga2VlcHMgaGltIHRoZXJlLCBhbiB1bmJlYXRlbiAyMC0wIHJlY29yZCB3YWxrcyBpbnRvIHRoZSBjaGFtcGlvbnNoaXAgcm91bmRzIHdpdGggdGhlIGJlbHQgaW4gcmVhY2guIn0se3Nsb3Q6IkNvLW1haW4gZXZlbnQiLHdlaWdodDoiQmFudGFtd2VpZ2h0IHRpdGxlIGJvdXQiLHJvdW5kczoiNSByb3VuZHMiLHRpdGxlOiEwLHJlZDp7Zmlyc3Q6IlBldHIiLGxhc3Q6IllhbiIsbmljazoiTm8gTWVyY3kiLGluaXRpYWxzOiJQWSIsaW1nOnQrIjIwMjUtMTIvWUFOX1BFVFJfTF9CRUxUXzA0LTA5LnBuZz9pdG9rPXJFSVFoTnZ3IixmbGFnOiJSVVMiLHJhbms6IkNoYW1waW9uIixwZnA6IiMzIFBGUCIscmVjb3JkOiIyMC01LTAiLGFnZTozMyxoZWlnaHQ6IjUnNy41XCIiLHJlYWNoOic2NyInLGxlZ1JlYWNoOiczOCInLGd5bToiVW5kaXNjbG9zZWQiLHN0eWxlOiJCb3hlciIsYXZnVGltZToiMTc6MzgiLHNscG06NS4xNixzYXBtOjQuMjQsc3RyQWNjOjU1LHN0ckRlZjo2MCx0ZDE1OjEuNyx0ZERlZjo4NixrZDE1Oi41MyxzdWIxNTouMTEsZmluaXNoOntrbzozNSxkZWM6NjAsc3ViOjV9LHRhcmdldDp7aGVhZDo2OSxib2R5OjE5LGxlZzoxMn0sdHJhaXRzOlsiTWFzdGVyIG9mIFNwb3J0LCBib3hpbmciLCJVcHBlcmN1dCIsIkJvZHkgaW52ZXN0bWVudCAxOSUiLCI4NiUgdGFrZWRvd24gZGVmZW5jZSIsIlJlY2xhaW1lZCB0aGUgYmVsdCBhdCBVRkMgMzIzIl0scmVhZDoiVGhlIHB1cmVzdCBib3hlciBpbiB0aGUgYnVpbGRpbmcuIDU1JSBhY2N1cmFjeSBhY3Jvc3MgMiw2NTIgYXR0ZW1wdHMgYW5kIDg2JSB0YWtlZG93biBkZWZlbmNlLCB0aGUgc2luZ2xlIG51bWJlciB0aGF0IGRlY2lkZWQgdGhlIHJlbWF0Y2ggaW4gRGVjZW1iZXIuIEhlIGludmVzdHMgaW4gdGhlIGJvZHkgbW9yZSB0aGFuIGFueW9uZSBlbHNlIG9uIHRoaXMgY2FyZCBhdCAxOSUgb2YgdG90YWwgdm9sdW1lLCB3aGljaCBpcyB3aHkgaGlzIG9wcG9uZW50cyByZWFjaCB0aGUgY2hhbXBpb25zaGlwIHJvdW5kcyBhbHJlYWR5IHdvcm4gZG93bi4ifSxibHVlOntmaXJzdDoiTWVyYWIiLGxhc3Q6IkR2YWxpc2h2aWxpIixuaWNrOiJUaGUgTWFjaGluZSIsaW5pdGlhbHM6Ik1EIixpbWc6dCsiMjAyMi0wOC9EVkFMSVNIVklMSV9NRVJBQl9MXzA4LTIwLnBuZz9pdG9rPVVOZnhDdWNCIixmbGFnOiJHRU8iLHJhbms6IiMxIixwZnA6IiM4IFBGUCIscmVjb3JkOiIyMS01LTAiLGFnZTozNSxoZWlnaHQ6IjUnNlwiIixyZWFjaDonNjgiJyxsZWdSZWFjaDonMzgiJyxneW06IlRlYW0gU2VycmEvTG9uZ28iLHN0eWxlOiJGcmVlc3R5bGUiLGF2Z1RpbWU6IjE3OjM2IixzbHBtOjQuNDIsc2FwbToyLjgsc3RyQWNjOjQyLHN0ckRlZjo1NCx0ZDE1OjUuOTcsdGREZWY6NzYsa2QxNTouMDUsc3ViMTU6LjM1LGZpbmlzaDp7a286MTQsZGVjOjc2LHN1YjoxMH0sdGFyZ2V0OntoZWFkOjY3LGJvZHk6MTcsbGVnOjE2fSx0cmFpdHM6WyJKdWRvIGJsYWNrIGJlbHQiLCJTYW1ibyBiYXNlIiwiMzM4IGNhcmVlciB0YWtlZG93biBhdHRlbXB0cyIsIlBhY2Ugb3ZlciBwb3dlciIsIkxvbmdlc3QgQlcgd2luIHN0cmVhayAoMTMpIl0scmVhZDoiMzM4IHRha2Vkb3duIGF0dGVtcHRzIGlzIHRoZSBoZWF2aWVzdCB3b3JrbG9hZCBpbiBVRkMgYmFudGFtd2VpZ2h0IGhpc3RvcnkuIDQyJSBzdHJpa2luZyBhY2N1cmFjeSByZWFkcyBsb3cgdW50aWwgeW91IHJlYWQgaXQgYXMgcHJlc3N1cmU6IGhlIHRocm93cyB0byBjbG9zZSBkaXN0YW5jZSwgdGhlbiBjaGFpbnMgYXR0ZW1wdHMgdW50aWwgb25lIHN0aWNrcy4gMjElIG9mIGhpcyBzdHJpa2VzIGNvbWUgZnJvbSB0b3AgcG9zaXRpb24uIEhlIGFic29yYnMgMi44MCBhIG1pbnV0ZSwgc28gdGhlIGNhcmRpbyBob2xkcy4ifSx2ZXJkaWN0OiI4NiUgdGFrZWRvd24gZGVmZW5jZSBhZ2FpbnN0IDUuOTcgdGFrZWRvd24gYXR0ZW1wdHMgcGVyIGZpZnRlZW4gbWludXRlcywgdGhlIG1vc3QgZGlyZWN0IHN0eWxpc3RpYyBjb2xsaXNpb24gb24gdGhlIGNhcmQuIFlhbiBzb2x2ZWQgaXQgb25jZSBhbHJlYWR5LCBvdmVyIGZpdmUgcm91bmRzLCBpbiBEZWNlbWJlci4gRHZhbGlzaHZpbGkgYXJyaXZlcyB3aXRoIHRlbiBtb250aHMgb2YgdGFwZSBhbmQgYSBoYWJpdCBvZiBjaGFuZ2luZyBoaXMgYW5zd2VyIHRoZSBzZWNvbmQgdGltZSBhcm91bmQuIn0se3Nsb3Q6Ik1haW4gY2FyZCIsd2VpZ2h0OiJGbHl3ZWlnaHQgYm91dCIscm91bmRzOiIzIHJvdW5kcyIsdGl0bGU6ITEscmVkOntmaXJzdDoiTG9uZSdlciIsbGFzdDoiS2F2YW5hZ2giLG5pY2s6IiIsaW5pdGlhbHM6IkxLIixpbWc6dCsiMjAyNS0wMy9LQVZBTkFHSF9MT05FRVJfTF8wMy0yMi5wbmc/aXRvaz1UdWR6US00YiIsZmxhZzoiRU5HIixyYW5rOiIjNiIscGZwOiIiLHJlY29yZDoiMTAtMi0wIixhZ2U6MjcsaGVpZ2h0OiI1JzZcIiIscmVhY2g6JzY3IicsbGVnUmVhY2g6JzM2LjUiJyxneW06IkdCIFRvcCBUZWFtIixzdHlsZToiS2lja2JveGVyIixhdmdUaW1lOiIxMzoyNyIsc2xwbTo0LjEzLHNhcG06My45NCxzdHJBY2M6NTAsc3RyRGVmOjU0LHRkMTU6MS4xMix0ZERlZjo4MyxrZDE1Oi4zNyxzdWIxNTouMzcsZmluaXNoOntrbzo0MCxkZWM6NTAsc3ViOjEwfSx0YXJnZXQ6e2hlYWQ6NTYsYm9keToyNSxsZWc6MTl9LHRyYWl0czpbIjXDlyBLLTEgd29ybGQgY2hhbXBpb24iLCJLaWNrYm94aW5nIGJsYWNrIGJlbHQiLCI4MSUgc3RhbmRpbmcgdm9sdW1lIiwiUHVycGxlIGJlbHQgQkpKIiwiQmVhdCBCcmFuZG9uIE1vcmVubyBvdmVyIGZpdmUiXSxyZWFkOiJBIHB1cmUga2lja2JveGVyJ3MgZGlzdHJpYnV0aW9uOiA4MSUgb2YgaGlzIHN0cmlrZXMgbGFuZCBhdCByYW5nZSBhbmQgNDQlIGdvIGJlbG93IHRoZSBoZWFkLCB0aGUgbW9zdCBiYWxhbmNlZCB0YXJnZXQgc3BsaXQgaW4gdGhpcyBib3V0LiA4MyUgdGFrZWRvd24gZGVmZW5jZSBrZWVwcyB0aGUgZmlnaHQgd2hlcmUgaGUgd2FudHMgaXQuIEhlIGNvbWVzIGluIG9mZiBhIHRoaXJkLXJvdW5kIHN1Ym1pc3Npb24gbG9zcyB0byBCcmFuZG9uIFJveXZhbCwgc28gdGhlIHNjcmFtYmxlIGV4Y2hhbmdlcyBhcmUgdGhlIGxpdmUgcXVlc3Rpb24uIn0sYmx1ZTp7Zmlyc3Q6IlJhbWF6YW4iLGxhc3Q6IlRlbWlyb3YiLG5pY2s6IlRlbXVybGFuIixpbml0aWFsczoiUlQiLGltZzp0KyIyMDI0LTExL1RFTUlST1ZfUkFNQVpBTl9MXzEwLTEyLnBuZz9pdG9rPUtfRXI2V1BRIixmbGFnOiJVWkIiLHJhbms6IiMxMCIscGZwOiIiLHJlY29yZDoiMjAtMy0wIixhZ2U6MjksaGVpZ2h0OiI1JzRcIiIscmVhY2g6JzYzIicsbGVnUmVhY2g6JzM2IicsZ3ltOiJMZWdpb24gRmlnaHQgQ2x1YiIsc3R5bGU6IlN0cmlrZXIiLGF2Z1RpbWU6IjA3OjI0IixzbHBtOjQuNzMsc2FwbTozLjY1LHN0ckFjYzo0MSxzdHJEZWY6NjIsdGQxNTouNjgsdGREZWY6MTAwLGtkMTU6My4zOCxzdWIxNTowLGZpbmlzaDp7a286NjAsZGVjOjM1LHN1Yjo1fSx0YXJnZXQ6e2hlYWQ6ODEsYm9keToxNyxsZWc6Mn0sdHJhaXRzOlsiMTIgd2lucyBieSBrbm9ja291dCIsIjExIGZpcnN0LXJvdW5kIGZpbmlzaGVzIiwiMy4zOCBrbm9ja2Rvd25zIHBlciAxNSBtaW4iLCIxMDAlIHRha2Vkb3duIGRlZmVuY2UiLCIxMi1maWdodCB3aW4gc3RyZWFrIl0scmVhZDoiVGhlIG1vc3QgdmlvbGVudCBudW1iZXIgb24gdGhlIGVudGlyZSBjYXJkOiAzLjM4IGtub2NrZG93bnMgcGVyIGZpZnRlZW4gbWludXRlcywgcm91Z2hseSB0ZW4gdGltZXMgdGhlIGNhcmQgYXZlcmFnZS4gODclIG9mIGhpcyBzdHJpa2VzIGxhbmQgc3RhbmRpbmcgYW5kIDgxJSBnbyB0byB0aGUgaGVhZCwgc28gdGhlIGludGVudCBpcyBwbGFpbi4gSGlzIGF2ZXJhZ2UgZmlnaHQgbGFzdHMgc2V2ZW4gbWludXRlcyB0d2VudHktZm91ci4gSGUgc3RvcHBlZCBTdGV2ZSBFcmNlZyBpbnNpZGUgYSByb3VuZCBpbiB0aGlzIHNhbWUgYnVpbGRpbmcgaW4gSnVseS4ifSx2ZXJkaWN0OiJBIHN0cmlrZXIncyBmaWdodCBib3RoIG1lbiBhY3RpdmVseSB3YW50LiBUZW1pcm92IHB1dHMgc29tZWJvZHkgb24gdGhlIGNhbnZhcyBldmVyeSBmb3VyIGFuZCBhIGhhbGYgbWludXRlcyBvZiBjYWdlIHRpbWUsIGFuZCBoaXMgcmVjb3JkIGlzIGJ1aWx0IGFsbW9zdCBlbnRpcmVseSBpbnNpZGUgdGhlIG9wZW5pbmcgcm91bmRzLiBLYXZhbmFnaCBoYXMgdGhlIGxvbmdlciBlbmdpbmUsIHRoZSBoaWdoZXIgd29yayByYXRlIGFuZCBhIGZpdmUtcm91bmQgd2luIG92ZXIgQnJhbmRvbiBNb3Jlbm8uIFJvdW5kIG9uZSBiZWxvbmdzIHRvIFRlbWlyb3Y7IGV2ZXJ5dGhpbmcgYWZ0ZXIgYmVsb25ncyB0byBLYXZhbmFnaC4ifSx7c2xvdDoiTWFpbiBjYXJkIix3ZWlnaHQ6IkxpZ2h0IGhlYXZ5d2VpZ2h0IGJvdXQiLHJvdW5kczoiMyByb3VuZHMiLHRpdGxlOiExLHJlZDp7Zmlyc3Q6IkF6YW1hdCIsbGFzdDoiTXVyemFrYW5vdiIsbmljazoiUHJvZmVzc2lvbmFsIixpbml0aWFsczoiQU0iLGltZzp0KyIyMDI2LTA0L01VUlpBS0FOT1ZfQVpBTUFUX0xfMDQtMTEucG5nP2l0b2s9bXFRYTlucmEiLGZsYWc6IlJVUyIscmFuazoiIzgiLHBmcDoiIixyZWNvcmQ6IjE2LTEtMCIsYWdlOjM3LGhlaWdodDoiNScxMFwiIixyZWFjaDonNzEuNSInLGxlZ1JlYWNoOic0MSInLGd5bToiSyBEb2pvIFdhcnJpb3IgVHJpYmUiLHN0eWxlOiJNTUEiLGF2Z1RpbWU6IjA4OjE3IixzbHBtOjQuNCxzYXBtOjMuMixzdHJBY2M6NTYsc3RyRGVmOjU2LHRkMTU6LjY4LHRkRGVmOjg5LGtkMTU6MS41OCxzdWIxNTouMjMsZmluaXNoOntrbzo3NSxkZWM6MTksc3ViOjZ9LHRhcmdldDp7aGVhZDo3MSxib2R5OjI2LGxlZzo0fSx0cmFpdHM6WyIxMiBLT3MgZnJvbSAxNiB3aW5zIiwiMTAgZmlyc3Qtcm91bmQgZmluaXNoZXMiLCI4OSUgdGFrZWRvd24gZGVmZW5jZSIsIjjDlyBoYW5kLXRvLWhhbmQgd29ybGQgY2hhbXBpb24iLCJTdG9wcGVkIFJha2nEhyBhdCBFdGloYWQgQXJlbmEiXSxyZWFkOiI3NSUgb2YgaGlzIHdpbnMgYXJyaXZlIGJ5IGtub2Nrb3V0IGFuZCB0ZW4gb2YgdGhlbSBsYW5kZWQgaW4gcm91bmQgb25lLiA1NiUgYWNjdXJhY3kgcGFpcmVkIHdpdGggMS41OCBrbm9ja2Rvd25zIHBlciBmaWZ0ZWVuIG1pbnV0ZXMgcmVhZHMgYXMgYSBmaW5pc2hpbmcgcmF0ZS4gSGUgc3RvcHBlZCBBbGVrc2FuZGFyIFJha2nEhyBpbnNpZGUgYSByb3VuZCBhdCBFdGloYWQgQXJlbmEgbGFzdCBPY3RvYmVyLiBIaXMgZmlyc3QgY2FyZWVyIGxvc3MgY2FtZSBpbiByb3VuZCB0aHJlZSBhZ2FpbnN0IFBhdWxvIENvc3RhLCB0aGUgb25seSB0aW1lIGFueW9uZSBoYXMgYXNrZWQgaGltIGEgbG9uZyBxdWVzdGlvbi4ifSxibHVlOntmaXJzdDoiRG9taW5pY2siLGxhc3Q6IlJleWVzIixuaWNrOiJUaGUgRGV2YXN0YXRvciIsaW5pdGlhbHM6IkRSIixpbWc6dCsiMjAyNi0wNC9SRVlFU19ET01JTklDS19MXzA0LTExLnBuZz9pdG9rPTdIU1Z0djFwIixmbGFnOiJVU0EiLHJhbms6IiMxMCIscGZwOiIiLHJlY29yZDoiMTYtNS0wIixhZ2U6MzYsaGVpZ2h0OiI2JzRcIiIscmVhY2g6Jzc3IicsbGVnUmVhY2g6JzQzLjUiJyxneW06IkNvYnJhIEthaSBWaWN0b3J2aWxsZSIsc3R5bGU6IktpY2tib3hlciIsYXZnVGltZToiMDc6NTEiLHNscG06NC45OSxzYXBtOjMuNCxzdHJBY2M6NTQsc3RyRGVmOjUwLHRkMTU6LjI1LHRkRGVmOjgzLGtkMTU6Ljg5LHN1YjE1Oi4yNSxmaW5pc2g6e2tvOjYzLGRlYzoyNSxzdWI6MTN9LHRhcmdldDp7aGVhZDo1Nixib2R5OjI0LGxlZzoyMH0sdHJhaXRzOlsiNzdpbiByZWFjaCIsIkhlYWQga2ljayIsIjEwIHdpbnMgYnkga25vY2tvdXQiLCI0IGZpbmlzaGVzIGluc2lkZSBhIG1pbnV0ZSIsIlR3byB0aXRsZSBjaGFsbGVuZ2VzIl0scmVhZDoiU2l4IGluY2hlcyBvZiBoZWlnaHQgYW5kIDUuNSBpbmNoZXMgb2YgcmVhY2ggb3ZlciBNdXJ6YWthbm92LCBwbHVzIHRoZSBsb25nZXN0IGxlZ3MgaW4gdGhlIGJvdXQgYXQgNDMuNSBpbmNoZXMuIEZvdXIgb2YgaGlzIGZpbmlzaGVzIGNhbWUgaW5zaWRlIHNpeHR5IHNlY29uZHMuIFRoZSB2dWxuZXJhYmlsaXR5IHNpdHMgcGxhaW5seSBvbiB0aGUgcmVjb3JkOiA1MCUgc3RyaWtpbmcgZGVmZW5jZSwgdGhlIGxvd2VzdCBmaWd1cmUgb2YgYW55b25lIG9uIHRoaXMgY2FyZCwgYW5kIGZvdXIgc3RvcHBhZ2UgbG9zc2VzLiJ9LHZlcmRpY3Q6IlR3byBvZiB0aGUgaGlnaGVzdCBmaW5pc2hpbmcgcmF0ZXMgaW4gdGhlIGRpdmlzaW9uIGFjcm9zcyA0NyBjb21iaW5lZCBmaWdodHMsIG9ubHkgZWxldmVuIG9mIHdoaWNoIHJlYWNoZWQgYSBkZWNpc2lvbi4gUmV5ZXMgb3ducyB0aGUgbGVuZ3RoOyBNdXJ6YWthbm92IG93bnMgdGhlIGFjY3VyYWN5IGVkZ2UgYW5kIDg5JSB0YWtlZG93biBkZWZlbmNlLiBCb3RoIG1lbiBzaXQgYXQgNTYlIHN0cmlraW5nIGRlZmVuY2Ugb3IgYmVsb3csIGFuZCBib3RoIGF2ZXJhZ2UgdW5kZXIgbmluZSBtaW51dGVzIG9mIGNhZ2UgdGltZSBwZXIgZmlnaHQuIFdob2V2ZXIgbGFuZHMgY2xlYW5seSBmaXJzdCBhbG1vc3QgY2VydGFpbmx5IGVuZHMgaXQuIn0se3Nsb3Q6Ik1haW4gY2FyZCIsd2VpZ2h0OiJMaWdodHdlaWdodCBib3V0Iixyb3VuZHM6IjMgcm91bmRzIix0aXRsZTohMSxyZWQ6e2ZpcnN0OiJHcmFudCIsbGFzdDoiRGF3c29uIixuaWNrOiJLR0QiLGluaXRpYWxzOiJHRCIsaW1nOnQrIjIwMjYtMDUvREFXU09OX0dSQU5UX0xfMDUtMDkucG5nP2l0b2s9SnVWRWhSb18iLGZsYWc6IlVTQSIscmFuazoiIixwZnA6IiIscmVjb3JkOiIyNC0zLTEiLGFnZTozMixoZWlnaHQ6IjUnMTBcIiIscmVhY2g6JzcyIicsbGVnUmVhY2g6JzQwIicsZ3ltOiJBbWVyaWNhbiBUb3AgVGVhbSIsc3R5bGU6IkdyYXBwbGVyIixhdmdUaW1lOiIxMTowMCIsc2xwbTozLjE0LHNhcG06Mi4xNCxzdHJBY2M6NTEsc3RyRGVmOjQ1LHRkMTU6My41OCx0ZERlZjo2NyxrZDE1Oi4wOSxzdWIxNToxLjM2LGZpbmlzaDp7a286MjEsZGVjOjIxLHN1Yjo1OH0sdGFyZ2V0OntoZWFkOjY5LGJvZHk6MTksbGVnOjEyfSx0cmFpdHM6WyJCSkogYmxhY2sgYmVsdCIsIjE0IHN1Ym1pc3Npb25zLCAxMiBieSBSTkMiLCI0MiUgb2Ygc3RyaWtlcyBmcm9tIHRoZSBncm91bmQiLCIxLjM2IHN1Ym1pc3Npb24gYXZlcmFnZSIsIlRyaWFuZ2xlIGFuZCBlbGJvd3MiXSxyZWFkOiI1OCUgb2YgaGlzIHdpbnMgY29tZSBieSBzdWJtaXNzaW9uIGFuZCB0d2VsdmUgb2YgdGhlIGZvdXJ0ZWVuIGFyZSByZWFyLW5ha2VkIGNob2tlcy4gNDIlIG9mIGhpcyBzaWduaWZpY2FudCBzdHJpa2VzIGxhbmQgZnJvbSB0aGUgZ3JvdW5kLCB0aGUgaGlnaGVzdCBzaGFyZSBvbiB0aGlzIGNhcmQsIGJlY2F1c2UgdGhlIHN0cmlrZXMgZXhpc3QgdG8gb3BlbiB1cCB0aGUgYmFjay4gMy4xNCBzdHJpa2VzIGEgbWludXRlIGlzIHRoZSBsb3dlc3Qgb3V0cHV0IGhlcmUgYW5kIGl0IGlzIGVudGlyZWx5IGRlbGliZXJhdGUuIn0sYmx1ZTp7Zmlyc3Q6Ik51cnVsbG8iLGxhc3Q6IkFsaWV2IixuaWNrOiJUYWppayBFYWdsZSIsaW5pdGlhbHM6Ik5BIixpbWc6dCsiMjAyNi0wNy9BTElFVl9OVVJVTExPX0xfMDctMjUucG5nP2l0b2s9MkpQVVhBREciLGZsYWc6IlRKSyIscmFuazoiIixwZnA6IiIscmVjb3JkOiIxMi0wLTAiLGFnZToyNSxoZWlnaHQ6IjUnMTBcIiIscmVhY2g6JzcyIicsbGVnUmVhY2g6JzM4IicsZ3ltOiJVbmRpc2Nsb3NlZCIsc3R5bGU6IldyZXN0bGluZyIsYXZnVGltZToiMTI6NTUiLHNscG06Mi4yOSxzYXBtOjEuNTksc3RyQWNjOjQ0LHN0ckRlZjo1NSx0ZDE1OjMuNDgsdGREZWY6ODAsa2QxNTowLHN1YjE1Oi40NixmaW5pc2g6e2tvOjE3LGRlYzo4MyxzdWI6MH0sdGFyZ2V0OntoZWFkOjgyLGJvZHk6MTQsbGVnOjR9LHRyYWl0czpbIjEyLTAgdW5kZWZlYXRlZCIsIkNvbWJhdCBzYW1ibyBBc2lhbiBjaGFtcGlvbiIsIjLDlyBXb3JsZCBQYW5rcmF0aW9uIGNoYW1waW9uIiwiODAlIHRha2Vkb3duIGRlZmVuY2UiLCI0MyUgb2Ygc3RyaWtlcyBmcm9tIHRoZSBncm91bmQiXSxyZWFkOiJVbmRlZmVhdGVkIGF0IDEyLTAsIHdpdGggdGVuIG9mIHRob3NlIHdpbnMgYnkgZGVjaXNpb24uIEhlIHdpbnMgb24gY29udHJvbDogaGUgYWJzb3JicyAxLjU5IHN0cmlrZXMgYSBtaW51dGUsIHRoZSBsb3dlc3QgZmlndXJlIG9uIHRoZSBlbnRpcmUgY2FyZCwgYW5kIGxhbmRzIDgyJSBvZiBoaXMgb3duIHRvIHRoZSBoZWFkIGZyb20gdG9wIHBvc2l0aW9uLiBJZGVudGljYWwgaGVpZ2h0IGFuZCByZWFjaCB0byBEYXdzb24sIHNldmVuIHllYXJzIHlvdW5nZXIuIn0sdmVyZGljdDoiVGhlIG9ubHkgYm91dCBvbiB0aGUgY2FyZCB3aGVyZSBib3RoIG1lbiBsYW5kIG1vcmUgdGhhbiA0MCUgb2YgdGhlaXIgc2lnbmlmaWNhbnQgc3RyaWtlcyBmcm9tIHRoZSBncm91bmQuIERhd3NvbidzIDEuMzYgc3VibWlzc2lvbiBhdmVyYWdlIGlzIHRoZSBoaWdoZXN0IGhlcmUgYnkgYSBkaXN0YW5jZTsgQWxpZXYncyBhbnN3ZXIgaXMgODAlIHRha2Vkb3duIGRlZmVuY2UgYW5kIGFuIHVuYmVhdGVuIHJlY29yZC4gV2hvZXZlciB3aW5zIHRoZSBmaXJzdCBzY3JhbWJsZSB2ZXJ5IGxpa2VseSB3aW5zIHRoZSBmaWdodC4ifV0sYT1lPT5TdHJpbmcoZSkucmVwbGFjZSgvWyY8PiJdL2csZT0+KHsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsifVtlXSkpLGk9W3trOiJzbHBtIixsOiJTdHJpa2VzIGxhbmRlZDxicj5wZXIgbWluIixkb206NyxkbDoiMCDigJMgNy4wMCIsZjplPT5lLnRvRml4ZWQoMil9LHtrOiJzdHJBY2MiLGw6IlN0cmlraW5nPGJyPmFjY3VyYWN5Iixkb206MTAwLGRsOiIwIOKAkyAxMDAlIixmOmU9PmUrIiUifSx7azoic3RyRGVmIixsOiJTdHJpa2luZzxicj5kZWZlbmNlIixkb206MTAwLGRsOiIwIOKAkyAxMDAlIixmOmU9PmUrIiUifSx7azoidGQxNSIsbDoiVGFrZWRvd25zPGJyPnBlciAxNSBtaW4iLGRvbTo3LGRsOiIwIOKAkyA3LjAwIixmOmU9PmUudG9GaXhlZCgyKX0se2s6InRkRGVmIixsOiJUYWtlZG93bjxicj5kZWZlbmNlIixkb206MTAwLGRsOiIwIOKAkyAxMDAlIixmOmU9PmUrIiUifSx7azoia2QxNSIsbDoiS25vY2tkb3duczxicj5wZXIgMTUgbWluIixkb206NCxkbDoiMCDigJMgNC4wMCIsZjplPT5lLnRvRml4ZWQoMil9XTtmdW5jdGlvbiBzKGUsdCl7Y29uc3Qgbj10Lm1hcChlPT5lLnY+MD9gPHNwYW4gY2xhc3M9IiR7ZS5jfSIgc3R5bGU9ImZsZXg6MCAwICR7ZS52fSUiPiR7ZS52Pj0xOD9hKGUuaykrIiAiK2UudisiJSI6IiJ9PC9zcGFuPmA6IiIpLmpvaW4oIiIpLGk9dC5maWx0ZXIoZT0+ZS52PjApLm1hcChlPT5gPHNwYW4+PGkgY2xhc3M9IiR7ZS5jfSI+PC9pPiR7YShlLmspfSAke2Uudn0lPC9zcGFuPmApLmpvaW4oIiIpO3JldHVybmA8ZGl2IGNsYXNzPSJzcGxpdC1sYWJlbCI+JHthKGUpfTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InNwbGl0Ij4ke259PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kIj4ke2l9PC9kaXY+YH1mdW5jdGlvbiBvKGUpe3JldHVybmA8ZGl2IGNsYXNzPSJ0YXBlLWdyaWQiPlxuICAgIDxkaXYgY2xhc3M9InRhcGUtY2VsbCI+PGRpdiBjbGFzcz0iayI+UmVjb3JkPC9kaXY+PGRpdiBjbGFzcz0idiI+JHthKGUucmVjb3JkKX08L2Rpdj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0YXBlLWNlbGwiPjxkaXYgY2xhc3M9ImsiPkFnZTwvZGl2PjxkaXYgY2xhc3M9InYiPiR7ZS5hZ2V9PC9kaXY+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGFwZS1jZWxsIj48ZGl2IGNsYXNzPSJrIj5IZWlnaHQ8L2Rpdj48ZGl2IGNsYXNzPSJ2Ij4ke2EoZS5oZWlnaHQpfTwvZGl2PjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRhcGUtY2VsbCI+PGRpdiBjbGFzcz0iayI+UmVhY2g8L2Rpdj48ZGl2IGNsYXNzPSJ2Ij4ke2EoZS5yZWFjaCl9PC9kaXY+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGFwZS1jZWxsIj48ZGl2IGNsYXNzPSJrIj5MZWcgcmVhY2g8L2Rpdj48ZGl2IGNsYXNzPSJ2Ij4ke2EoZS5sZWdSZWFjaCl9PC9kaXY+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGFwZS1jZWxsIj48ZGl2IGNsYXNzPSJrIj5BdmcgZmlnaHQgdGltZTwvZGl2PjxkaXYgY2xhc3M9InYiPiR7YShlLmF2Z1RpbWUpfTwvZGl2PjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRhcGUtY2VsbCI+PGRpdiBjbGFzcz0iayI+U3R5bGU8L2Rpdj48ZGl2IGNsYXNzPSJ2Ij4ke2EoZS5zdHlsZSl9PC9kaXY+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGFwZS1jZWxsIj48ZGl2IGNsYXNzPSJrIj5DYW1wPC9kaXY+PGRpdiBjbGFzcz0idiIgc3R5bGU9ImZvbnQtc2l6ZTowLjY4NzVyZW0iPiR7YShlLmd5bSl9PC9kaXY+PC9kaXY+XG4gIDwvZGl2PmB9ZnVuY3Rpb24gcihlLHQpe2NvbnN0IG49W2UucmFuayxlLnBmcF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAvLyAiKTtyZXR1cm5gPGRpdiBjbGFzcz0iY29ybmVyICR7dH0iPlxuICAgIDxkaXYgY2xhc3M9ImZpZyI+XG4gICAgICA8aW1nIHNyYz0iJHtlLmltZ30iIGFsdD0iJHthKGUuZmlyc3QpfSAke2EoZS5sYXN0KX0iIGxvYWRpbmc9ImxhenkiIHJlZmVycmVycG9saWN5PSJuby1yZWZlcnJlciJcbiAgICAgICAgICAgb25lcnJvcj0idGhpcy5jbG9zZXN0KCcuZmlnJykuY2xhc3NMaXN0LmFkZCgnZmFpbGVkJykiPlxuICAgICAgPHNwYW4gY2xhc3M9Im1vbm8tZmIiPiR7YShlLmluaXRpYWxzKX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz0iZmxhZyI+JHthKGUuZmxhZyl9PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc3R5bGU9Im1pbi13aWR0aDowO3BhZGRpbmctYm90dG9tOjZweCI+XG4gICAgICAke2Uubmljaz9gPGRpdiBjbGFzcz0iZi1uaWNrIj4iJHthKGUubmljayl9IjwvZGl2PmA6IiJ9XG4gICAgICA8ZGl2IGNsYXNzPSJmLW5hbWUiPiR7YShlLmZpcnN0KX08YnI+JHthKGUubGFzdCl9PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJmLXN1YiI+JHtlLnJlY29yZH0gJHtuP2A8c3BhbiBjbGFzcz0iZi1yYW5rIj4vLyAke2Eobil9PC9zcGFuPmA6IiJ9PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PmB9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvdXRzIikuaW5uZXJIVE1MPW4ubWFwKChlLHQpPT57cmV0dXJuYFxuICA8YXJ0aWNsZSBjbGFzcz0iYm91dCR7ZS50aXRsZT8iIHRpdGxlLWJvdXQiOiIifSIgZGF0YS1vcGVuPSJmYWxzZSI+XG4gICAgPGJ1dHRvbiBjbGFzcz0iYm91dC1oZWFkIiBhcmlhLWV4cGFuZGVkPSJmYWxzZSIgYXJpYS1jb250cm9scz0icGFuZWwtJHt0fSI+XG4gICAgICA8ZGl2IGNsYXNzPSJib3V0LXN0cmlwIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9InNsb3QiPiR7YShlLnNsb3QpfTwvc3Bhbj5cbiAgICAgICAgJHtlLnRpdGxlPyc8c3BhbiBjbGFzcz0iYmVsdCI+VGl0bGUgb24gdGhlIGxpbmU8L3NwYW4+JzoiIn1cbiAgICAgICAgPHNwYW4gY2xhc3M9IndlaWdodCI+JHthKGUud2VpZ2h0KX0gLy8gJHthKGUucm91bmRzKX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRhcGUiPlxuICAgICAgICAke3IoZS5yZWQsInJlZCIpfVxuICAgICAgICA8ZGl2IGNsYXNzPSJ2cy1zcGluZSI+PHNwYW4gY2xhc3M9InNwaW5lLXJ1bGUiPjwvc3Bhbj5WUzxzcGFuIGNsYXNzPSJzcGluZS1ydWxlIj48L3NwYW4+PC9kaXY+XG4gICAgICAgICR7cihlLmJsdWUsImJsdWUiKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kLWN1ZSI+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJjdWUtc2h1dCI+VGVjaG5pY2FsIGJyZWFrZG93bjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImN1ZS1vcGVuIj5DbG9zZSBicmVha2Rvd248L3NwYW4+XG4gICAgICAgIDxzdmcgY2xhc3M9ImNhcmV0IiB3aWR0aD0iMTEiIGhlaWdodD0iNyIgdmlld0JveD0iMCAwIDExIDciIGZpbGw9Im5vbmUiIGFyaWEtaGlkZGVuPSJ0cnVlIj5cbiAgICAgICAgICA8cGF0aCBkPSJNMSAxbDQuNSA0LjVMMTAgMSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS42Ii8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz0icGFuZWwtd3JhcCIgaWQ9InBhbmVsLSR7dH0iPlxuICAgICAgPGRpdiBjbGFzcz0icGFuZWwiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1pbiI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtbGFiZWwiPkhlYWQgdG8gaGVhZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImNtcCI+JHtuPWUucmVkLGQ9ZS5ibHVlLGkubWFwKGU9Pntjb25zdCB0PW5bZS5rXSxhPWRbZS5rXSxpPU1hdGgubWluKDEwMCx0L2UuZG9tKjEwMCkscz1NYXRoLm1pbigxMDAsYS9lLmRvbSoxMDApLG89dD5hLHI9YT50O3JldHVybmA8ZGl2IGNsYXNzPSJjbXAtcm93Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0iY21wLXZhbCBsJHtvPyIiOiIgZGltIn0iPiR7ZS5mKHQpfTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0cmFjayBsIj48c3BhbiBjbGFzcz0iZmlsbCR7bz8iIGxlYWQiOiIifSIgZGF0YS13PSIke2l9IiBzdHlsZT0id2lkdGg6MCUiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0iY21wLWtleSI+JHtlLmx9PHNwYW4gY2xhc3M9ImRvbSI+JHtlLmRsfTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idHJhY2sgciI+PHNwYW4gY2xhc3M9ImZpbGwke3I/IiBsZWFkIjoiIn0iIGRhdGEtdz0iJHtzfSIgc3R5bGU9IndpZHRoOjAlIj48L3NwYW4+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9ImNtcC12YWwgciR7cj8iIjoiIGRpbSJ9Ij4ke2UuZihhKX08L2Rpdj5cbiAgICAgIDwvZGl2PmB9KS5qb2luKCIiKX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJzY2FsZS1ub3RlIj5cbiAgICAgICAgICAgIEJhcnMgYXJlIGRyYXduIHRvIHRoZSBmaXhlZCBzY2FsZSBzaG93biBiZXNpZGUgZWFjaCBtZXRyaWMuIEEgNTElIGJhciBmaWxsc1xuICAgICAgICAgICAgNTElIG9mIGl0cyB0cmFjay4gSGF0Y2hlZCBmaWxsIG1hcmtzIHdob2V2ZXIgbGVhZHMgdGhlIHJvdy5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1sYWJlbCI+RmlnaHRlciBwcm9maWxlczwvZGl2PlxuICAgICAgICAgICR7ZnVuY3Rpb24oZSx0KXtjb25zdCBuPShlLHQsbik9PmBcbiAgICA8ZGl2IGNsYXNzPSJwYyBsZWZ0JHtuPyIgaGRyIjoiIGJhbmQifSI+JHtlfTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InBjIHJpZ2h0JHtuPyIgaGRyIjoiIGJhbmQifSI+JHt0fTwvZGl2PmA7cmV0dXJuYDxkaXYgY2xhc3M9InByb2ZpbGVzIj5cbiAgICAke24oYDxoNCBjbGFzcz0icHJvZi1uYW1lIHJlZC1uIj4ke2EoZS5maXJzdCl9ICR7YShlLmxhc3QpfTwvaDQ+XG4gICAgICAgPGRpdiBjbGFzcz0iY29ybmVyLXRhZyI+UmVkIGNvcm5lciR7ZS5uaWNrPycgLy8gIicrYShlLm5pY2spKyciJzoiIn08L2Rpdj5gLGA8aDQgY2xhc3M9InByb2YtbmFtZSBibHVlLW4iPiR7YSh0LmZpcnN0KX0gJHthKHQubGFzdCl9PC9oND5cbiAgICAgICA8ZGl2IGNsYXNzPSJjb3JuZXItdGFnIj5CbHVlIGNvcm5lciR7dC5uaWNrPycgLy8gIicrYSh0Lm5pY2spKyciJzoiIn08L2Rpdj5gLCEwKX1cbiAgICAke24obyhlKSxvKHQpKX1cbiAgICAke24oYDxkaXYgY2xhc3M9InRyYWl0cyI+JHtlLnRyYWl0cy5tYXAoZT0+YDxzcGFuIGNsYXNzPSJ0cmFpdCI+JHthKGUpfTwvc3Bhbj5gKS5qb2luKCIiKX08L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ0cmFpdHMiPiR7dC50cmFpdHMubWFwKGU9PmA8c3BhbiBjbGFzcz0idHJhaXQiPiR7YShlKX08L3NwYW4+YCkuam9pbigiIil9PC9kaXY+YCl9XG4gICAgJHtuKGA8cCBjbGFzcz0icmVhZCI+JHthKGUucmVhZCl9PC9wPmAsYDxwIGNsYXNzPSJyZWFkIj4ke2EodC5yZWFkKX08L3A+YCl9XG4gICAgJHtuKHMoIldpbiBtZXRob2QgZGlzdHJpYnV0aW9uIixbe2M6InNwLWtvIixrOiJLTyIsdjplLmZpbmlzaC5rb30se2M6InNwLWRlYyIsazoiREVDIix2OmUuZmluaXNoLmRlY30se2M6InNwLXN1YiIsazoiU1VCIix2OmUuZmluaXNoLnN1Yn1dKSxzKCJXaW4gbWV0aG9kIGRpc3RyaWJ1dGlvbiIsW3tjOiJzcC1rbyIsazoiS08iLHY6dC5maW5pc2gua299LHtjOiJzcC1kZWMiLGs6IkRFQyIsdjp0LmZpbmlzaC5kZWN9LHtjOiJzcC1zdWIiLGs6IlNVQiIsdjp0LmZpbmlzaC5zdWJ9XSkpfVxuICAgICR7bihzKCJTaWduaWZpY2FudCBzdHJpa2VzIGJ5IHRhcmdldCIsW3tjOiJzcC1oZWFkIixrOiJIZWFkIix2OmUudGFyZ2V0LmhlYWR9LHtjOiJzcC1ib2R5IixrOiJCb2R5Iix2OmUudGFyZ2V0LmJvZHl9LHtjOiJzcC1sZWciLGs6IkxlZyIsdjplLnRhcmdldC5sZWd9XSkscygiU2lnbmlmaWNhbnQgc3RyaWtlcyBieSB0YXJnZXQiLFt7Yzoic3AtaGVhZCIsazoiSGVhZCIsdjp0LnRhcmdldC5oZWFkfSx7Yzoic3AtYm9keSIsazoiQm9keSIsdjp0LnRhcmdldC5ib2R5fSx7Yzoic3AtbGVnIixrOiJMZWciLHY6dC50YXJnZXQubGVnfV0pKX1cbiAgPC9kaXY+YH0oZS5yZWQsZS5ibHVlKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJkaWN0Ij5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZrIj5XaGVyZSB0aGlzIGZpZ2h0IGlzIGRlY2lkZWQ8L2Rpdj5cbiAgICAgICAgICAgIDxwPiR7YShlLnZlcmRpY3QpfTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJzcmMiPlNvdXJjZTogVUZDLmNvbSBhdGhsZXRlIHJlY29yZHMsIHJldHJpZXZlZCAxOCBBdWcgMjAyNjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2FydGljbGU+XG5gO3ZhciBuLGR9KS5qb2luKCIiKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuYm91dC1oZWFkIikuZm9yRWFjaChlPT57ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pntjb25zdCB0PWUuY2xvc2VzdCgiLmJvdXQiKSxuPSJ0cnVlIj09PXQuZGF0YXNldC5vcGVuO3QuZGF0YXNldC5vcGVuPVN0cmluZyghbiksZS5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLFN0cmluZyghbikpO2NvbnN0IGE9dC5xdWVyeVNlbGVjdG9yQWxsKCIudHJhY2sgLmZpbGwiKTtuP2EuZm9yRWFjaChlPT57ZS5zdHlsZS53aWR0aD0iMCUifSk6KGEuZm9yRWFjaChlPT57ZS5zdHlsZS53aWR0aD0iMCUifSkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnthLmZvckVhY2goKGUsdCk9PntzZXRUaW1lb3V0KCgpPT57ZS5zdHlsZS53aWR0aD1lLmRhdGFzZXQudysiJSJ9LDEyMCs0MCp0KX0pfSkpKX0pfSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZhcSIpLmlubmVySFRNTD1be3E6IldoZW4gYW5kIHdoZXJlIGlzIFVGQyAzMzM/IixhOiJVRkMgMzMzIHRha2VzIHBsYWNlIG9uIFNhdHVyZGF5IDI0IE9jdG9iZXIgMjAyNiBhdCBFdGloYWQgQXJlbmEsIFlhcyBJc2xhbmQsIEFidSBEaGFiaSwgaGVhZGxpbmluZyBBYnUgRGhhYmkgU2hvd2Rvd24gV2Vlay4gTWFpbiBjYXJkIGlzIHNjaGVkdWxlZCBmb3IgMjI6MDAgR3VsZiBTdGFuZGFyZCBUaW1lLCB3aXRoIHByZWxpbXMgZnJvbSAyMDowMCBhbmQgZWFybHkgcHJlbGltcyBmcm9tIDE4OjAwLiBDaGVjayB5b3VyIHRpY2tldCBmb3IgZmluYWwgZG9vciB0aW1lcy4ifSx7cToiV2hvIGlzIGZpZ2h0aW5nIGF0IFVGQyAzMzM/IixhOiJBbGV4YW5kZXIgVm9sa2Fub3Zza2kgZGVmZW5kcyB0aGUgZmVhdGhlcndlaWdodCB0aXRsZSBhZ2FpbnN0IE1vdnNhciBFdmxvZXYgaW4gdGhlIG1haW4gZXZlbnQsIGFuZCBQZXRyIFlhbiBkZWZlbmRzIHRoZSBiYW50YW13ZWlnaHQgdGl0bGUgYWdhaW5zdCBNZXJhYiBEdmFsaXNodmlsaSBpbiB0aGUgY28tbWFpbi4gQWxzbyBhbm5vdW5jZWQ6IExvbmUnZXIgS2F2YW5hZ2ggdnMgUmFtYXphbiBUZW1pcm92IGF0IGZseXdlaWdodCwgQXphbWF0IE11cnpha2Fub3YgdnMgRG9taW5pY2sgUmV5ZXMgYXQgbGlnaHQgaGVhdnl3ZWlnaHQsIGFuZCBHcmFudCBEYXdzb24gdnMgTnVydWxsbyBBbGlldiBhdCBsaWdodHdlaWdodC4gRnVydGhlciBib3V0cyB3aWxsIGJlIGFkZGVkIGFuZCB0aGUgY2FyZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4ifSx7cToiV2hhdCBkb2VzIGEgVUZDIEFidSBEaGFiaSB0aWNrZXQgYW5kIGhvdGVsIHBhY2thZ2UgaW5jbHVkZT8iLGE6IkV2ZXJ5IHBhY2thZ2UgaW5jbHVkZXMgeW91ciBvZmZpY2lhbCBtYXRjaCB0aWNrZXQgaW4geW91ciBjaG9zZW4gY2F0ZWdvcnksIG9uZSBuaWdodCdzIGFjY29tbW9kYXRpb24gb24gb3IgbmVhciBZYXMgSXNsYW5kLCBhbGwgdGF4ZXMgYW5kIFZBVCwgYW5kIHRoZSBzZXJ2aWNlcyBvZiB0aGUgRVMgU3BvcnQgdGVhbSBpbiBBYnUgRGhhYmkuIENhdGVnb3JpZXMgcnVuIGZyb20gOCB0aHJvdWdoIHRvIDMsIHBsdXMgVklQIGZsb29yIHNlYXRpbmcuIFN0YXlzIGNhbiBiZSBleHRlbmRlZCBiZXlvbmQgb25lIG5pZ2h0IGFuZCBtdWx0aXBsZSB0aWNrZXRzIGNhbiBiZSBib29rZWQgdW5kZXIgYSBzaW5nbGUgcGFja2FnZS4gVGVsbCB1cyB3aGF0IHlvdSBuZWVkIG9uIHRoZSBlbnF1aXJ5IGZvcm0uIn0se3E6IklzIHRoZXJlIHBhcmtpbmcgYXQgRXRpaGFkIEFyZW5hPyIsYToiWWVzLiBPbi1zaXRlIHBhcmtpbmcgYXQgWWFzIEJheSBpcyBmcmVlIGFuZCBzaWducG9zdGVkIGZyb20gdGhlIFlhcyBJc2xhbmQgYXBwcm9hY2ggcm9hZHMuIEFycml2ZSBlYXJseSBvbiBmaWdodCBuaWdodC4gVGhlIGFyZW5hIHNpdHMgYWxvbmdzaWRlIHRoZSBZYXMgQmF5IFdhdGVyZnJvbnQgcmVzdGF1cmFudHMgYW5kIHRoZSBhcmVhIGZpbGxzIHdlbGwgYmVmb3JlIGZpcnN0IGJlbGwuIn0se3E6IkhvdyB3aWxsIEkgcmVjZWl2ZSBteSB0aWNrZXQgYW5kIGNvbmZpcm1hdGlvbj8iLGE6IkNvbmZpcm1hdGlvbiBpcyBlbWFpbGVkIG9uY2UgeW91ciBwYWNrYWdlIGlzIHNlY3VyZWQuIFRpY2tldHMgYXJlIGlzc3VlZCBkaWdpdGFsbHkgYWhlYWQgb2YgdGhlIGV2ZW50LCB3aXRoIGNvbGxlY3Rpb24gZGV0YWlscyBjb25maXJtZWQgaW4gd3JpdGluZyBiZWZvcmVoYW5kLiBJZiBhbnl0aGluZyBpcyB1bmNsZWFyLCByZXBseSB0byB5b3VyIGNvbmZpcm1hdGlvbiBlbWFpbCBhbmQgaXQgZ29lcyBzdHJhaWdodCB0byB0aGUgdGVhbSBoYW5kbGluZyB5b3VyIGJvb2tpbmcuIn0se3E6IkNhbiBJIGJvb2sgZm9yIGEgZ3JvdXAgb3IgZm9yIGNvcnBvcmF0ZSBob3N0aW5nPyIsYToiWWVzLiBHcm91cCBhbmQgY29ycG9yYXRlIGJvb2tpbmdzIGFyZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IHRoZSBFUyBTcG9ydCB0ZWFtLiBFbWFpbCBpbmZvQGVzLXNwb3J0LmFlIHdpdGggdGhlIGhlYWRjb3VudCwgdGhlIGNhdGVnb3J5IGFuZCB3aGV0aGVyIHlvdSBuZWVkIGhvc3BpdGFsaXR5LCBhbmQgd2Ugd2lsbCBjb21lIGJhY2sgd2l0aCBhIHRhaWxvcmVkIHByb3Bvc2FsLiJ9XS5tYXAoKGUsdCk9PmBcbiAgPGRpdiBjbGFzcz0iZmFxLWl0ZW0iIGRhdGEtb3Blbj0iZmFsc2UiPlxuICAgIDxidXR0b24gY2xhc3M9ImZhcS1xIiBhcmlhLWV4cGFuZGVkPSJmYWxzZSIgYXJpYS1jb250cm9scz0iZmEtJHt0fSI+XG4gICAgICA8c3BhbiBjbGFzcz0iaXgiPiR7U3RyaW5nKHQrMSkucGFkU3RhcnQoMiwiMCIpfTwvc3Bhbj5cbiAgICAgIDxzcGFuPiR7YShlLnEpfTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPSJwbSIgYXJpYS1oaWRkZW49InRydWUiPis8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz0iZmFxLXdyYXAiIGlkPSJmYS0ke3R9Ij5cbiAgICAgIDxkaXYgY2xhc3M9ImZhcS1hIj48ZGl2IGNsYXNzPSJmYXEtYS1pbiI+JHthKGUuYSl9PC9kaXY+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PmApLmpvaW4oIiIpLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5mYXEtcSIpLmZvckVhY2goZT0+e2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57Y29uc3QgdD1lLmNsb3Nlc3QoIi5mYXEtaXRlbSIpLG49InRydWUiPT09dC5kYXRhc2V0Lm9wZW47dC5kYXRhc2V0Lm9wZW49U3RyaW5nKCFuKSxlLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsU3RyaW5nKCFuKSl9KX0pLGZ1bmN0aW9uKCl7Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidnN0b3J5Iik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZS5xdWVyeVNlbGVjdG9yKCIudnN0b3J5LWhlYWQiKTt0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2NvbnN0IG49InRydWUiPT09ZS5kYXRhc2V0Lm9wZW47ZS5kYXRhc2V0Lm9wZW49U3RyaW5nKCFuKSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsU3RyaW5nKCFuKSl9KX0oKTtjb25zdCBkPW5ldyBEYXRlKCIyMDI2LTEwLTI0VDE4OjAwOjAwKzA0OjAwIikuZ2V0VGltZSgpLGM9ZT0+U3RyaW5nKGUpLnBhZFN0YXJ0KDIsIjAiKTtmdW5jdGlvbiBsKCl7Y29uc3QgZT1kLURhdGUubm93KCk7ZTw9MD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2QtY2VsbHMiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImNkLWNlbGwiIHN0eWxlPSJmbGV4OjEiPjxkaXYgY2xhc3M9ImNkLW4iPkxJVkU8L2Rpdj48ZGl2IGNsYXNzPSJjZC1sIj5FdGloYWQgQXJlbmE8L2Rpdj48L2Rpdj4nOihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2QtZCIpLnRleHRDb250ZW50PU1hdGguZmxvb3IoZS84NjRlNSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNkLWgiKS50ZXh0Q29udGVudD1jKE1hdGguZmxvb3IoZSU4NjRlNS8zNmU1KSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNkLW0iKS50ZXh0Q29udGVudD1jKE1hdGguZmxvb3IoZSUzNmU1LzZlNCkpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjZC1zIikudGV4dENvbnRlbnQ9YyhNYXRoLmZsb29yKGUlNmU0LzFlMykpKX1sKCksc2V0SW50ZXJ2YWwobCwxZTMpO3ZhciB1PXtldmVudDoiVUZDIDMzMyIsdmVudWU6IkV0aWhhZCBBcmVuYSwgQWJ1IERoYWJpIixjdXJyZW5jeToiQUVEIixkZWZhdWx0R3Vlc3RzOjIsY2F0ZWdvcmllczp7MTp7bmFtZToiQ2F0ZWdvcnkgMSIsYXJlYToiRmxvb3IiLGNvbG91cjoiIzZBMTAxMCIscHJpY2U6bnVsbCxub3RlOiIifSwyOntuYW1lOiJDYXRlZ29yeSAyIixhcmVhOiJGbG9vciIsY29sb3VyOiIjMDg2RjgxIixwcmljZToxMzYyMCxub3RlOiJTdWJqZWN0IHRvIGF2YWlsYWJpbGl0eSJ9LDM6e25hbWU6IkNhdGVnb3J5IDMiLGFyZWE6IkZsb29yIixjb2xvdXI6IiNEMzFDNTUiLHByaWNlOjExMTIwLG5vdGU6IlN1YmplY3QgdG8gYXZhaWxhYmlsaXR5In0sNDp7bmFtZToiQ2F0ZWdvcnkgNCIsYXJlYToiRmxvb3IiLGNvbG91cjoiIzI5QTlEOSIscHJpY2U6ODYyMCxub3RlOiJTdWJqZWN0IHRvIGF2YWlsYWJpbGl0eSJ9LDU6e25hbWU6IkNhdGVnb3J5IDUiLGFyZWE6Ikxvd2VyIGJvd2wiLGNvbG91cjoiIzI5NzM1OSIscHJpY2U6MzYyMCxub3RlOiIifSw2OntuYW1lOiJDYXRlZ29yeSA2IixhcmVhOiJMb3dlciBib3dsIixjb2xvdXI6IiM5RDVDMkYiLHByaWNlOjIzNzAsbm90ZToiIn0sNzp7bmFtZToiQ2F0ZWdvcnkgNyIsYXJlYToiTG93ZXIgYm93bCIsY29sb3VyOiIjOUQ5OENBIixwcmljZToxNDUwLG5vdGU6IiJ9LDg6e25hbWU6IkNhdGVnb3J5IDgiLGFyZWE6IlVwcGVyIGJvd2wiLGNvbG91cjoiIzg1ODk4RCIscHJpY2U6MTEwMCxub3RlOiIifX0sc29sZE91dENhdGVnb3JpZXM6W10saGlkZGVuRmllbGROYW1lOiJzZWF0bWFwLXNlbGVjdGlvbiIsZW5xdWlyeVVybDoiIixvbkVucXVpcmU6bnVsbH07IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc1NlYXRNYXAiKTtpZihlKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtU3RhZ2UiKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21TdmciKSxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21WcCIpLGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzbVRpcCIpLHM9dSxvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4ucXVlcnlTZWxlY3RvckFsbCgiLmVzbS1ibGsiKSkscj17fSxkPW51bGwsYz0ibW91c2UiO28uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgiZGF0YS1jYXQiKTtTKHQpP2UuY2xhc3NMaXN0LmFkZCgiaXMtb3V0Iik6KGUuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSxlLnNldEF0dHJpYnV0ZSgicm9sZSIsImJ1dHRvbiIpLGUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiU2VsZWN0ICIrcy5jYXRlZ29yaWVzW3RdLm5hbWUrIiAoIitzLmNhdGVnb3JpZXNbdF0uYXJlYSsiKSwgIitmdW5jdGlvbihlKXt2YXIgdD1zLmNhdGVnb3JpZXNbZV0ucHJpY2U7cmV0dXJuIG51bGw9PT10PyJwcmljZSBvbiByZXF1ZXN0IjpzLmN1cnJlbmN5KyIgIit4KHQpKyIgcGVyIHBlcnNvbiJ9KHQpKSl9KTt2YXIgbCxoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21CYW5kcyIpO28uZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixmdW5jdGlvbihlKXtjPWUucG9pbnRlclR5cGV9KSxlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKHQpeyFmdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0QXR0cmlidXRlKCJkYXRhLWNhdCIpLGE9ZS5nZXRBdHRyaWJ1dGUoImRhdGEtYmxrIiksbz1zLmNhdGVnb3JpZXNbbl0scj1lLmNsYXNzTGlzdC5jb250YWlucygiaXMtb3V0Iik7aS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS10aXBjIixvLmNvbG91ciksaS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVzbS10aXAtayI+JytvLmFyZWErKGE/IiAmbWlkZG90OyBuZWFyIHNlY3Rpb24gIithOiIiKSsnPC9kaXY+PGRpdiBjbGFzcz0iZXNtLXRpcC1uIj4nK28ubmFtZSsiPC9kaXY+Iisocj8nPGRpdiBjbGFzcz0iZXNtLXRpcC1wIGlzLXJlcSIgc3R5bGU9ImNvbG9yOnZhcigtLWRpbSkiPlNvbGQgb3V0PC9kaXY+JzpudWxsPT09by5wcmljZT8nPGRpdiBjbGFzcz0iZXNtLXRpcC1wIj5PbiByZXF1ZXN0PC9kaXY+JzonPGRpdiBjbGFzcz0iZXNtLXRpcC1wIj48c21hbGw+JytzLmN1cnJlbmN5KyI8L3NtYWxsPiIreChvLnByaWNlKSsiPC9kaXY+IikrJzxkaXYgY2xhc3M9ImVzbS10aXAteCI+Jysocj8iQ3VycmVudGx5IHVuYXZhaWxhYmxlIjoiUGVyIHBlcnNvbiAmbWlkZG90OyByZXNlcnZlZCBieSBjYXRlZ29yeSIpKyI8L2Rpdj4iLGkuY2xhc3NMaXN0LmFkZCgiaXMtb24iKSxDKHQpfShlLHQpfSksZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLEMpLGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsSSksZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24odCl7a3x8KHQuc3RvcFByb3BhZ2F0aW9uKCksTShlKSwidG91Y2giPT09YyYmKGNsZWFyVGltZW91dChsKSxsPXNldFRpbWVvdXQoSSwxNjAwKSkpfSksZS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbih0KXsiRW50ZXIiIT09dC5rZXkmJiIgIiE9PXQua2V5fHwodC5wcmV2ZW50RGVmYXVsdCgpLE0oZSkpfSl9KTt2YXIgbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtTGlzdCIpLGY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzbUVtcHR5IiksZz17fTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtU2VuZCIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3ZhciB0PVIoKTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZXNzcG9ydDpzZWF0bWFwLWVucXVpcnkiLHtkZXRhaWw6dCxidWJibGVzOiEwfSkpO3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSInK3MuaGlkZGVuRmllbGROYW1lKyciXScpO2lmKG58fCgobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS50eXBlPSJoaWRkZW4iLG4ubmFtZT1zLmhpZGRlbkZpZWxkTmFtZSxlLmFwcGVuZENoaWxkKG4pKSxuLnZhbHVlPXQuc3VtbWFyeSsiXG5cbkVzdGltYXRlZCB0b3RhbDogIitzLmN1cnJlbmN5KyIgIit4KHQuZXN0aW1hdGVkVG90YWwpKyIgKGV4Y2wuIFZBVCkiLCJmdW5jdGlvbiIhPXR5cGVvZiBzLm9uRW5xdWlyZXx8ITAhPT1zLm9uRW5xdWlyZSh0KSlpZihzLmVucXVpcnlVcmwpe3ZhciBhPW5ldyBVUkxTZWFyY2hQYXJhbXMoe2V2ZW50OnQuZXZlbnQsc2VhdHM6dC5zdW1tYXJ5LGd1ZXN0czp0LnRvdGFsR3Vlc3RzLHRvdGFsOnQuZXN0aW1hdGVkVG90YWx9KTt3aW5kb3cubG9jYXRpb24uaHJlZj1zLmVucXVpcnlVcmwrKHMuZW5xdWlyeVVybC5pbmRleE9mKCI/Iik+LTE/IiYiOiI/IikrYS50b1N0cmluZygpfWVsc2UgTygiU2VsZWN0aW9uIHNlbnQgdG8gb3VyIHRlYW0iKX0pLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21DbGVhciIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3I9e30sJCgpLHEoKSxEKCl9KTt2YXIgdixwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21Ub2FzdCIpLHk9e2s6MSx4OjAseTowfTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtSW4iKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt2YXIgZT1IKCk7TigxLjQ1LGVbMF0sZVsxXSl9KSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtT3V0IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIGU9SCgpO04oMS8xLjQ1LGVbMF0sZVsxXSl9KSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtUnN0IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7eT17azoxLHg6MCx5OjB9LEYoKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO04oZS5kZWx0YVk8MD8xLjE4OjEvMS4xOCxlLmNsaWVudFgtbi5sZWZ0LGUuY2xpZW50WS1uLnRvcCl9LHtwYXNzaXZlOiExfSk7dmFyIGI9ITEsaz0hMSx3PW51bGwsRT17fSxMPW51bGw7aWYodC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsZnVuY3Rpb24oZSl7aWYoRVtlLnBvaW50ZXJJZF09e3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZfSwyPT09T2JqZWN0LmtleXMoRSkubGVuZ3RoKXt2YXIgdD1PYmplY3Qua2V5cyhFKSxuPUVbdFswXV0sYT1FW3RbMV1dO3JldHVybiBMPU1hdGguaHlwb3Qobi54LWEueCxuLnktYS55KSx2b2lkKGI9ITEpfWI9ITAsaz0hMSx3PXt4OmUuY2xpZW50WCx5OmUuY2xpZW50WX19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGZ1bmN0aW9uKGUpe0VbZS5wb2ludGVySWRdJiYoRVtlLnBvaW50ZXJJZF09e3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZfSk7dmFyIG49T2JqZWN0LmtleXMoRSk7aWYoMj09PW4ubGVuZ3RoJiZMKXt2YXIgYT1FW25bMF1dLGk9RVtuWzFdXSxzPU1hdGguaHlwb3QoYS54LWkueCxhLnktaS55KSxvPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIE4ocy9MLChhLngraS54KS8yLW8ubGVmdCwoYS55K2kueSkvMi1vLnRvcCksdm9pZChMPXMpfWlmKGIpe3ZhciByPWUuY2xpZW50WC13LngsZD1lLmNsaWVudFktdy55O01hdGguYWJzKHIpK01hdGguYWJzKGQpPjQmJihrPSEwLHQuY2xhc3NMaXN0LmFkZCgiaXMtcGFubmluZyIpLEkoKSkseS54Kz1yLHkueSs9ZCx3PXt4OmUuY2xpZW50WCx5OmUuY2xpZW50WX0sRigpfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLFUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixVKSx0LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsZnVuY3Rpb24oKXtJKCl9KSx3aW5kb3cuRVNTZWF0TWFwPXtjb25maWc6cyxnZXRTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gUigpfSxjbGVhcjpmdW5jdGlvbigpe3I9e30sJCgpLHEoKSxEKCl9LHNlbGVjdDpmdW5jdGlvbihlKXt2YXIgdD1uLnF1ZXJ5U2VsZWN0b3IoJy5lc20tYmxrW2RhdGEtY2F0PSInK2UrJyJdJyk7dCYmTSh0KX0sc2V0U29sZE91dDpmdW5jdGlvbihlKXtzLnNvbGRPdXRDYXRlZ29yaWVzPWV8fFtdLG8uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1TKGUuZ2V0QXR0cmlidXRlKCJkYXRhLWNhdCIpKTtlLmNsYXNzTGlzdC50b2dnbGUoImlzLW91dCIsdCksdD9lLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKTplLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIil9KSxxKCl9LHNldFByaWNlOmZ1bmN0aW9uKGUsdCl7cy5jYXRlZ29yaWVzW2VdLnByaWNlPXQscSgpLEQoKX19LHdpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKGhvdmVyOiBub25lKSIpLm1hdGNoZXMpe3ZhciBBPWUucXVlcnlTZWxlY3RvcigiLmVzbS1oaW50Iik7QSYmKEEudGV4dENvbnRlbnQ9IlBpbmNoIHRvIHpvb20gwrcgZHJhZyB0byBwYW4iKX1xKCksRCgpLEYoKX1mdW5jdGlvbiB4KGUpe3JldHVybiBlLnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIpfWZ1bmN0aW9uIFQoZSl7cmV0dXJuIFN0cmluZyhlKX1mdW5jdGlvbiBTKGUpe3JldHVybiBzLnNvbGRPdXRDYXRlZ29yaWVzLmluZGV4T2YoTnVtYmVyKGUpKT4tMX1mdW5jdGlvbiBxKCl7aC5pbm5lckhUTUw9IiIsT2JqZWN0LmtleXMocy5jYXRlZ29yaWVzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PXMuY2F0ZWdvcmllc1tlXSxuPXMuc29sZE91dENhdGVnb3JpZXMuaW5kZXhPZihOdW1iZXIoZSkpPi0xLGE9cltlXT9yW2VdLmd1ZXN0czowLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7aS50eXBlPSJidXR0b24iLGkuY2xhc3NOYW1lPSJlc20tYmFuZCIrKGQ9PWU/IiBpcy1hY3RpdmUiOiIiKSxpLnNldEF0dHJpYnV0ZSgiZGF0YS1jYXQiLGUpLGkuc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLGQ9PWU/InRydWUiOiJmYWxzZSIpO3ZhciBvPW4/JzxzcGFuIGNsYXNzPSJlc20tYmFuZC1wIGlzLXJlcSI+U29sZCBvdXQ8L3NwYW4+JzpudWxsPT09dC5wcmljZT8nPHNwYW4gY2xhc3M9ImVzbS1iYW5kLXAgaXMtcmVxIj5PbiByZXF1ZXN0PC9zcGFuPic6JzxzcGFuIGNsYXNzPSJlc20tYmFuZC1wIj48c3Bhbj4nK3MuY3VycmVuY3krIjwvc3Bhbj4iK3godC5wcmljZSkrIjwvc3Bhbj4iO2kuaW5uZXJIVE1MPSc8c3BhbiBjbGFzcz0iZXNtLWJhbmQtY2hpcCIgc3R5bGU9ImJhY2tncm91bmQ6Jyt0LmNvbG91cisnIj48L3NwYW4+PHNwYW4gY2xhc3M9ImVzbS1iYW5kLW4iPicrdC5uYW1lKyI8cz4iK3QuYXJlYSsodC5ub3RlPyIgJm1pZGRvdDsgIit0Lm5vdGU6IiIpKyI8L3M+PC9zcGFuPiIrbysoYT8nPHNwYW4gY2xhc3M9ImVzbS1iYW5kLWMiPicrYSsiPC9zcGFuPiI6IiIpLGkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKGUpe2Q9ZD09ZT9udWxsOmUsQihkKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtRmlsdGVyTm90ZSIpLnRleHRDb250ZW50PWQ/cy5jYXRlZ29yaWVzW2RdLm5hbWUrIiBvbmx5IjoiQWxsIHNob3duIixxKCl9KGUpfSksaS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2R8fEIoZSl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7ZHx8QihudWxsKX0pLGguYXBwZW5kQ2hpbGQoaSl9KX1mdW5jdGlvbiBCKHQpe2UuY2xhc3NMaXN0LnRvZ2dsZSgiaXMtZmlsdGVyZWQiLG51bGwhPT10KSxvLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QudG9nZ2xlKCJpcy1saXQiLG51bGwhPT10JiZlLmdldEF0dHJpYnV0ZSgiZGF0YS1jYXQiKT09dCl9KX1mdW5jdGlvbiBDKGUpe3ZhciBuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1lLmNsaWVudFgtbi5sZWZ0KzE2LHM9ZS5jbGllbnRZLW4udG9wKzE2O2EraS5vZmZzZXRXaWR0aD5uLndpZHRoLTgmJihhPWUuY2xpZW50WC1uLmxlZnQtaS5vZmZzZXRXaWR0aC0xMikscytpLm9mZnNldEhlaWdodD5uLmhlaWdodC04JiYocz1lLmNsaWVudFktbi50b3AtaS5vZmZzZXRIZWlnaHQtMTIpLGkuc3R5bGUubGVmdD1NYXRoLm1heCg2LGEpKyJweCIsaS5zdHlsZS50b3A9TWF0aC5tYXgoNixzKSsicHgifWZ1bmN0aW9uIEkoKXtpLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9uIil9ZnVuY3Rpb24gTShlKXtpZihlLmNsYXNzTGlzdC5jb250YWlucygiaXMtb3V0IikpTygiVGhhdCBjYXRlZ29yeSBpcyBzb2xkIG91dCIpO2Vsc2V7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRhdGEtY2F0Iiksbj1UKHQpO3Jbbl0/ZGVsZXRlIHJbbl06KHJbbl09e2NhdDpOdW1iZXIodCksZ3Vlc3RzOnMuZGVmYXVsdEd1ZXN0c30sTyhzLmNhdGVnb3JpZXNbdF0ubmFtZSsiIHNlbGVjdGVkIikpLCQoKSxxKCksRCgpLHJbbl0mJm8uZm9yRWFjaChmdW5jdGlvbihlKXtlLmdldEF0dHJpYnV0ZSgiZGF0YS1jYXQiKT09PXQmJihlLmNsYXNzTGlzdC5yZW1vdmUoIm1vLWhpdCIpLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZS5jbGFzc0xpc3QuYWRkKCJtby1oaXQiKSxlLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmVuZCIsZnVuY3Rpb24gdCgpe2UuY2xhc3NMaXN0LnJlbW92ZSgibW8taGl0IiksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLHQpfSkpfSl9fWZ1bmN0aW9uICQoKXtvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ISFyW1QoZS5nZXRBdHRyaWJ1dGUoImRhdGEtY2F0IikpXTtlLmNsYXNzTGlzdC50b2dnbGUoImlzLXNlbCIsdCksZS5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsdD8idHJ1ZSI6ImZhbHNlIil9KX1mdW5jdGlvbiBEKCl7dmFyIGU9T2JqZWN0LmtleXMocik7bS5pbm5lckhUTUw9IiIsZi5zdHlsZS5kaXNwbGF5PWUubGVuZ3RoPyJub25lIjoiYmxvY2siLGUuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiByW2VdLmNhdC1yW3RdLmNhdH0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1yW2VdLG49cy5jYXRlZ29yaWVzW3QuY2F0XSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuY2xhc3NOYW1lPSJlc20tcm93IixhLnN0eWxlLnNldFByb3BlcnR5KCItLXJvd2MiLG4uY29sb3VyKSxhLmlubmVySFRNTD0nPHNwYW4gY2xhc3M9ImVzbS1yb3ctYmFyIj48L3NwYW4+PHNwYW4gY2xhc3M9ImVzbS1yb3ctbiI+JytuLm5hbWUrIjxzPiIrbi5hcmVhKyIgJm1pZGRvdDsgIisobnVsbD09PW4ucHJpY2U/Im9uIHJlcXVlc3QiOnMuY3VycmVuY3krIiAiK3gobi5wcmljZSkrIiBwcCIpKyc8L3M+PC9zcGFuPjxzcGFuIGNsYXNzPSJlc20tcXR5Ij48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1hPSItIiBhcmlhLWxhYmVsPSJGZXdlciBndWVzdHMiPiZtaW51czs8L2J1dHRvbj48c3Bhbj4nK3QuZ3Vlc3RzKyc8L3NwYW4+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtYT0iKyIgYXJpYS1sYWJlbD0iTW9yZSBndWVzdHMiPis8L2J1dHRvbj48L3NwYW4+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJlc20tZGVsIiBkYXRhLWE9IngiIGFyaWEtbGFiZWw9IlJlbW92ZSAnK24ubmFtZSsnIj4mdGltZXM7PC9idXR0b24+JyxnW2VdfHxhLmNsYXNzTGlzdC5hZGQoIm1vLW5ldyIpLGEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKG4pe3ZhciBhPW4udGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS1hIik7YSYmKCIrIj09PWEmJnQuZ3Vlc3RzKyssIi0iPT09YSYmKHQuZ3Vlc3RzPU1hdGgubWF4KDEsdC5ndWVzdHMtMSkpLCJ4Ij09PWEmJmRlbGV0ZSByW2VdLCQoKSxxKCksRCgpKX0pLG0uYXBwZW5kQ2hpbGQoYSl9KTt2YXIgdD0wLG49MCxhPSExO2UuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgaT1yW2VdLG89cy5jYXRlZ29yaWVzW2kuY2F0XS5wcmljZTtuKz1pLmd1ZXN0cyxudWxsPT09bz9hPSEwOnQrPW8qaS5ndWVzdHN9KSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtQ291bnQiKS50ZXh0Q29udGVudD1lLmxlbmd0aCsoMT09PWUubGVuZ3RoPyIgY2F0ZWdvcnkiOiIgY2F0ZWdvcmllcyIpKyhuPyIgwrcgIituKygxPT09bj8iIGd1ZXN0IjoiIGd1ZXN0cyIpOiIiKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtVG90YWwiKS5pbm5lckhUTUw9IjxzbWFsbD4iK3MuY3VycmVuY3krIjwvc21hbGw+Iit4KHQpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21Ob3RlIikuaW5uZXJIVE1MPWUubGVuZ3RoPyJFeGNsdWRlcyA1JSBWQVQuIisoYT8iIENhdGVnb3J5Jm5ic3A7MSBpcyBwcmljZWQgb24gcmVxdWVzdCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMgdG90YWwuIjoiIik6IiIsZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzbVNlbmQiKS5kaXNhYmxlZD0hZS5sZW5ndGgsZz17fSxlLmZvckVhY2goZnVuY3Rpb24oZSl7Z1tlXT0hMH0pfWZ1bmN0aW9uIFIoKXt2YXIgZT1bXSx0PTAsbj0wLGE9ITE7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIG89cltpXSxkPXMuY2F0ZWdvcmllc1tvLmNhdF07bis9by5ndWVzdHMsbnVsbD09PWQucHJpY2U/YT0hMDp0Kz1kLnByaWNlKm8uZ3Vlc3RzLGUucHVzaCh7Y2F0ZWdvcnk6ZC5uYW1lLGFyZWE6ZC5hcmVhLGd1ZXN0czpvLmd1ZXN0cyxwcmljZVBlclBlcnNvbjpkLnByaWNlLGxpbmVUb3RhbDpudWxsPT09ZC5wcmljZT9udWxsOmQucHJpY2Uqby5ndWVzdHN9KX0pLGUuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNhdGVnb3J5LmxvY2FsZUNvbXBhcmUodC5jYXRlZ29yeSl9KSx7ZXZlbnQ6cy5ldmVudCx2ZW51ZTpzLnZlbnVlLGN1cnJlbmN5OnMuY3VycmVuY3ksaXRlbXM6ZSx0b3RhbEd1ZXN0czpuLGVzdGltYXRlZFRvdGFsOnQsaW5jbHVkZXNPblJlcXVlc3Q6YSxzdW1tYXJ5OmUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNhdGVnb3J5KyIgKCIrZS5hcmVhKyIpIHgiK2UuZ3Vlc3RzKyIgZ3Vlc3QiKygxPT09ZS5ndWVzdHM/IiI6InMiKSsiIOKAlCAiKyhudWxsPT09ZS5wcmljZVBlclBlcnNvbj8ib24gcmVxdWVzdCI6cy5jdXJyZW5jeSsiICIreChlLmxpbmVUb3RhbCkpfSkuam9pbigiXG4iKX19ZnVuY3Rpb24gTyhlKXtwLnRleHRDb250ZW50PWUscC5jbGFzc0xpc3QuYWRkKCJpcy1vbiIpLGNsZWFyVGltZW91dCh2KSx2PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtwLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9uIil9LDI0MDApfWZ1bmN0aW9uIEYoKXthLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIreS54KyIsIit5LnkrIikgc2NhbGUoIit5LmsrIikiKX1mdW5jdGlvbiBOKGUsdCxuKXt2YXIgYT1NYXRoLm1pbig2LE1hdGgubWF4KDEseS5rKmUpKTtpZihhIT09eS5rKXt2YXIgaT15Lms/YS95Lms6MTt5Lng9dC0odC15LngpKmkseS55PW4tKG4teS55KSppLHkuaz1hLDE9PT15LmsmJih5Lng9MCx5Lnk9MCksRigpfX1mdW5jdGlvbiBIKCl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bZS53aWR0aC8yLGUuaGVpZ2h0LzJdfWZ1bmN0aW9uIFUoZSl7ZGVsZXRlIEVbZS5wb2ludGVySWRdLE9iamVjdC5rZXlzKEUpLmxlbmd0aDwyJiYoTD1udWxsKSxiPSExLHQuY2xhc3NMaXN0LnJlbW92ZSgiaXMtcGFubmluZyIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtrPSExfSwwKX19KCksZnVuY3Rpb24oKXtpZighKHdpbmRvdy5tYXRjaE1lZGlhJiZtYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXN8fCJ1bmRlZmluZWQiPT10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpKXtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibW8iKTt2YXIgZT1bXTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuY3RhLWluID4gKiwgLmVzbSIpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSk7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3NlYXRtYXAgLnNlYy1oZWFkIik7dCYmZS5wdXNoKHQpO3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmYXEiKTtpZihuKXt2YXIgYT1uLmNsb3Nlc3QoIi53cmFwIikmJm4uY2xvc2VzdCgiLndyYXAiKS5xdWVyeVNlbGVjdG9yKCIuc2VjLWhlYWQiKTthJiZlLnB1c2goYSl9dmFyIGk9W107ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2V0QXR0cmlidXRlKCJkYXRhLW1vIiwiIiksaS5wdXNoKGUpfSksWyIudGllcnMgPiAudGllciIsIi52aXRhbHMgPiAqIiwiLmFydHMgPiAqIiwiLmZhcS1pdGVtIiwiLnZlbnVlLXNwZWNzID4gKiJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbCxuPTA7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPWUucGFyZW50Tm9kZTtuPWE9PT10P24rMTowLHQ9YSxlLnNldEF0dHJpYnV0ZSgiZGF0YS1tbyIsIiIpLGUuc3R5bGUuc2V0UHJvcGVydHkoIi0tbW8tZCIsTWF0aC5taW4oNTAqbiwzMDApKyJtcyIpLGkucHVzaChlKX0pfSk7dmFyIHM9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXtlLmlzSW50ZXJzZWN0aW5nJiYoZS50YXJnZXQuY2xhc3NMaXN0LmFkZCgibW8tbGl0Iikscy51bm9ic2VydmUoZS50YXJnZXQpKX0pfSx7dGhyZXNob2xkOi4xOCxyb290TWFyZ2luOiIwcHggMHB4IC02JSAwcHgifSk7aS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Mub2JzZXJ2ZShlKX0pO3ZhciBvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5pZGVudC1udW0iKTtvJiZsKG8sby50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoIiIpLDMwMCwxODApLFsiY2QtZCIsImNkLWgiLCJjZC1tIiwiY2QtcyJdLmZvckVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtuJiZsKG4sbi50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoIiIpLDI2MCsxNTAqdCw2MCl9KTt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtU3RhZ2UiKTtpZihyKXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTmFtZT0iZXNtLXNjYW5saW5lIixyLmFwcGVuZENoaWxkKGQpO3ZhciBjPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbihlKXtlLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5pc0ludGVyc2VjdGluZyYmKGQuY2xhc3NMaXN0LmFkZCgicnVuIiksZC5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLGZ1bmN0aW9uKCl7ZC5yZW1vdmUoKX0pLGMuZGlzY29ubmVjdCgpKX0pfSx7dGhyZXNob2xkOi4zNX0pO2Mub2JzZXJ2ZShyKX19ZnVuY3Rpb24gbChlLHQsbixhKXt2YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO2kmJihlLnN0eWxlLndpZHRoPWkrInB4Iik7dmFyIHM9dC5tYXAoZnVuY3Rpb24oZSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiBuLnRleHRDb250ZW50PWUsbi5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLG4uc3R5bGUud2lkdGg9MTAwL3QubGVuZ3RoKyIlIixuLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIixufSk7ZS50ZXh0Q29udGVudD0iIixzLmZvckVhY2goZnVuY3Rpb24odCl7ZS5hcHBlbmRDaGlsZCh0KX0pO3ZhciBvPXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSxyPXNldEludGVydmFsKGZ1bmN0aW9uKCl7cy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7b1tuXSYmIWlzTmFOKHBhcnNlSW50KHRbbl0sMTApKXx8aXNOYU4ocGFyc2VJbnQodFtuXSwxMCkpfHwoZS50ZXh0Q29udGVudD1TdHJpbmcoTWF0aC5mbG9vcigxMCpNYXRoLnJhbmRvbSgpKSkpfSl9LDQ4KTtzLmZvckVhY2goZnVuY3Rpb24oaSxzKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7b1tzXT0hMCxpLnRleHRDb250ZW50PXRbc10sby5ldmVyeShCb29sZWFuKSYmKGNsZWFySW50ZXJ2YWwociksZS50ZXh0Q29udGVudD10LmpvaW4oIiIpLGUuc3R5bGUud2lkdGg9IiIpfSxuK3MqYSl9KX19KCksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQ9d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXMsbj1udWxsO3RyeXtuPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJlc1RoZW1lIil9Y2F0Y2goZil7fSJsaWdodCIhPT1uJiYiZGFyayIhPT1ufHxlLnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsbik7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZW1lQnRuIik7ZnVuY3Rpb24gaSh0KXtlLnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsdCk7dHJ5e2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJlc1RoZW1lIix0KX1jYXRjaChmKXt9fWEmJmEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIG49ImxpZ2h0Ij09PWUuZ2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIik/ImRhcmsiOiJsaWdodCI7aWYoYS5jbGFzc0xpc3QuYWRkKCJzcGluIiksc2V0VGltZW91dChmdW5jdGlvbigpe2EuY2xhc3NMaXN0LnJlbW92ZSgic3BpbiIpfSw1MjApLCF0JiZkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKXt2YXIgcz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89cy5sZWZ0K3Mud2lkdGgvMixyPXMudG9wK3MuaGVpZ2h0LzIsZD1NYXRoLmh5cG90KE1hdGgubWF4KG8sd2luZG93LmlubmVyV2lkdGgtbyksTWF0aC5tYXgocix3aW5kb3cuaW5uZXJIZWlnaHQtcikpO2RvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oZnVuY3Rpb24oKXtpKG4pfSkucmVhZHkudGhlbihmdW5jdGlvbigpe2UuYW5pbWF0ZSh7Y2xpcFBhdGg6WyJjaXJjbGUoMHB4IGF0ICIrbysicHggIityKyJweCkiLCJjaXJjbGUoIitkKyJweCBhdCAiK28rInB4ICIrcisicHgpIl19LHtkdXJhdGlvbjo2MjAsZWFzaW5nOiJjdWJpYy1iZXppZXIoLjQsMCwuMiwxKSIscHNldWRvRWxlbWVudDoiOjp2aWV3LXRyYW5zaXRpb24tbmV3KHJvb3QpIn0pfSkuY2F0Y2goZnVuY3Rpb24oKXt9KX1lbHNlIWZ1bmN0aW9uKHQpe2UuY2xhc3NMaXN0LmFkZCgidGhlbWluZyIpLGkodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UuY2xhc3NMaXN0LnJlbW92ZSgidGhlbWluZyIpfSw1NjApfShuKX0pO3ZhciBzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXYiKTtmdW5jdGlvbiBvKCl7cy5jbGFzc0xpc3QudG9nZ2xlKCJzY3JvbGxlZCIsd2luZG93LnNjcm9sbFk+NjApfXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLG8se3Bhc3NpdmU6ITB9KSxvKCk7dmFyIHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdkJ1cmdlciIpLGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdlBhbmVsIiksYz1udWxsO2Z1bmN0aW9uIGwoKXtjbGVhclRpbWVvdXQoYyksZC5jbGFzc0xpc3QucmVtb3ZlKCJpcy1jbG9zaW5nIiksZC5oaWRkZW49ITEsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixkLm9mZnNldFdpZHRoLGQuY2xhc3NMaXN0LmFkZCgiaXMtb3BlbiIpLHIuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLHIuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiQ2xvc2UgbWVudSIpfWZ1bmN0aW9uIHUoKXtkLmhpZGRlbnx8KGQuY2xhc3NMaXN0LnJlbW92ZSgiaXMtb3BlbiIpLGQuY2xhc3NMaXN0LmFkZCgiaXMtY2xvc2luZyIpLHIuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIk9wZW4gbWVudSIpLGNsZWFyVGltZW91dChjKSxjPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmhpZGRlbj0hMCxkLmNsYXNzTGlzdC5yZW1vdmUoImlzLWNsb3NpbmciKSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSIifSx0PzA6MjYwKSl9ci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtkLmhpZGRlbj9sKCk6dSgpfSksZC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1jbG9zZS1tZW51XSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt1KCl9KX0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKGUpeyJFc2NhcGUiIT09ZS5rZXl8fGQuaGlkZGVufHwodSgpLHIuZm9jdXMoKSl9KTt2YXIgaD13aW5kb3cubWF0Y2hNZWRpYSgiKG1pbi13aWR0aDogMTAwMXB4KSIpLG09ZnVuY3Rpb24oZSl7ZS5tYXRjaGVzJiZ1KCl9O2guYWRkRXZlbnRMaXN0ZW5lcj9oLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsbSk6aC5hZGRMaXN0ZW5lciYmaC5hZGRMaXN0ZW5lcihtKX0oKSxmdW5jdGlvbigpe2lmKCghd2luZG93Lm1hdGNoTWVkaWF8fCF3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzKSYmIkludGVyc2VjdGlvbk9ic2VydmVyImluIHdpbmRvdyl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1vIik7dmFyIGU9WyIuc3RhY2sgPiAuaXRlbSIsIi5hY2MtaXRlbSIsIi5mYXEtaXRlbSIsIi5ib3V0IiwiLnZzdG9yeSIsIi50a2JveCIsIi5hYi1mcmFtZSIsIi5jbXAgdGJvZHkgdGQiLCIuY21wIHRoZWFkIHRoIiwiLnRhcGUtY2VsbCIsIi52cy1yb3ciLCIudmVudWUtc3BlY3MgPiAqIiwiLnpwLXRpZXIiLCIudGtncmlkIHRkIiwiLnN0YXRzID4gLnN0YXQiLCIuc3RhdHMgPiAuc3QiLCIudml0YWxzID4gLnZpdGFsIiwiLmhlcm8tbWV0YSA+IC5obSIsIi50aWVycyA+IC50aWVyIiwiLnZncmlkID4gLnZibG9jayIsIi5rYy1jYXJkIiwiLmFiLXNwZWMiLCIuaW5jLWxpc3QgPiBsaSIsIi5hcnRzID4gLmFydCIsIi5mb3JrID4gLnJvdXRlIiwiLmNhdGFsb2d1ZSAubmNhcmQiLCIub2NhcmQiLCIucGNhcmQiLCIuYmNhcmQiLCIucGNhcmRwIiwiLmZpdmV3LWdyaWQgPiAqIiwiLmxvZ29zID4gLmxvZ28iLCIuZXNtLWJhbmQiLCIubWFwLWNoaXAiLCIudGFwZS1ncmlkID4gLnRhcGUtY2VsbCIsIi5nY2FyZCJdLHQ9ZS5qb2luKCIsIik7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtbW9dIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLm1hdGNoZXModCl8fGUucmVtb3ZlQXR0cmlidXRlKCJkYXRhLW1vIil9KTt2YXIgbj1bXTtpZihlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQsYT1udWxsLGk9MDt0cnl7dD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfWNhdGNoKHMpe3JldHVybn10LmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIWUuaGFzQXR0cmlidXRlKCJkYXRhLW1vIikpe3ZhciB0PWUucGFyZW50Tm9kZTtpPXQ9PT1hP2krMTowLGE9dCxlLnNldEF0dHJpYnV0ZSgiZGF0YS1tbyIsIiIpLGUuc3R5bGUuc2V0UHJvcGVydHkoIi0tbW8tZCIsTWF0aC5taW4oNTAqaSwzMDApKyJtcyIpLG4ucHVzaChlKX19KX0pLG4ubGVuZ3RoKXt2YXIgYT1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuaXNJbnRlcnNlY3RpbmcmJihlLnRhcmdldC5jbGFzc0xpc3QuYWRkKCJtby1saXQiKSxhLnVub2JzZXJ2ZShlLnRhcmdldCkpfSl9LHtyb290TWFyZ2luOiIwcHggMHB4IC02JSAwcHgiLHRocmVzaG9sZDouMDV9KTtuLmZvckVhY2goZnVuY3Rpb24oZSl7YS5vYnNlcnZlKGUpfSksc2V0VGltZW91dChmdW5jdGlvbigpe24uZm9yRWFjaChmdW5jdGlvbihlKXtpZighZS5jbGFzc0xpc3QuY29udGFpbnMoIm1vLWxpdCIpKXt2YXIgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QudG9wPGlubmVySGVpZ2h0JiZ0LmJvdHRvbT4wJiZlLmNsYXNzTGlzdC5hZGQoIm1vLWxpdCIpfX0pfSw0ZTMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIWUuY2xhc3NMaXN0LmNvbnRhaW5zKCJtby1saXQiKSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LnRvcDxpbm5lckhlaWdodCYmdC5ib3R0b20+MCYmdC5oZWlnaHQmJmUuY2xhc3NMaXN0LmFkZCgibW8tbGl0Iil9fSl9LDYwKX0pfX19KCksZnVuY3Rpb24oKXtbInhxRm9ybSIsInJmaSJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7dCYmdC5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLGZ1bmN0aW9uKGUpe3QuY2hlY2tWYWxpZGl0eSgpJiYoKHQuZ2V0QXR0cmlidXRlKCJkYXRhLWVuZHBvaW50Iil8fCIiKS50cmltKCl8fCh3aW5kb3cubG9jYXRpb24uaHJlZj1mdW5jdGlvbihlKXt2YXIgdD1bXSxuPWUucXVlcnlTZWxlY3RvcigiW25hbWU9ZXZlbnQtbmFtZV0iKTtyZXR1cm4gbiYmdC5wdXNoKCJFbnF1aXJ5OiAiK24udmFsdWUpLGUucXVlcnlTZWxlY3RvckFsbCgiaW5wdXQ6bm90KFt0eXBlPWhpZGRlbl0pLHNlbGVjdCx0ZXh0YXJlYSIpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGE9ZS5xdWVyeVNlbGVjdG9yKCdsYWJlbFtmb3I9Iicrbi5pZCsnIl0nKSxpPWE/YS50ZXh0Q29udGVudC50cmltKCk6bi5uYW1lfHxuLmlkO24udmFsdWUmJnQucHVzaChpKyI6ICIrbi52YWx1ZSl9KSwibWFpbHRvOmluZm9AZXMtc3BvcnQuYWU/c3ViamVjdD0iK2VuY29kZVVSSUNvbXBvbmVudCgobj9uLnZhbHVlOiJXZWJzaXRlIGVucXVpcnkiKSsiIC0gZW5xdWlyeSIpKyImYm9keT0iK2VuY29kZVVSSUNvbXBvbmVudCh0LmpvaW4oIlxuIikpfSh0KSkpfSwhMCl9KTt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieHFNb2RhbCIpO2lmKGUmJiFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGF0YS14cS1uYXRpdmUiKSl7dmFyIHQsbj13aW5kb3cubWF0Y2hNZWRpYSYmbWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzLGE9bnVsbDtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1vcGVuLXhxXSIpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24ocyl7cy5wcmV2ZW50RGVmYXVsdCgpLGZ1bmN0aW9uKGkpe2NsZWFyVGltZW91dCh0KSxhPWksZS5oaWRkZW49ITEsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixlLm9mZnNldFdpZHRoLGUuY2xhc3NMaXN0LmFkZCgiaXMtb3BlbiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1lLnF1ZXJ5U2VsZWN0b3IoImlucHV0Om5vdChbdHlwZT1oaWRkZW5dKSIpO3QmJnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX0sbj8wOjI2MCl9KGkpfSl9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1jbG9zZS14cV0iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHMpfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24odCl7IkVzY2FwZSIhPT10LmtleXx8ZS5oaWRkZW58fHMoKX0pO3ZhciBpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4cUZvcm0iKTtpJiZpLmFkZEV2ZW50TGlzdGVuZXIoInN1Ym1pdCIsZnVuY3Rpb24oZSl7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLGkuY2hlY2tWYWxpZGl0eSgpKXt2YXIgdD1pLmdldEF0dHJpYnV0ZSgiZGF0YS1lbmRwb2ludCIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInhxU2VudCIpLGE9ZnVuY3Rpb24oKXtuJiZuLmNsYXNzTGlzdC5hZGQoIm9uIik7dmFyIGU9aS5xdWVyeVNlbGVjdG9yKCJidXR0b25bdHlwZT1zdWJtaXRdIik7ZSYmKGUuZGlzYWJsZWQ9ITApfTt0P2ZldGNoKHQse21ldGhvZDoiUE9TVCIsYm9keTpuZXcgRm9ybURhdGEoaSl9KS50aGVuKGEpLmNhdGNoKGEpOmEoKX1lbHNlIGkucmVwb3J0VmFsaWRpdHkoKX0pfWZ1bmN0aW9uIHMoKXtlLmhpZGRlbnx8KGUuY2xhc3NMaXN0LnJlbW92ZSgiaXMtb3BlbiIpLGNsZWFyVGltZW91dCh0KSx0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmhpZGRlbj0hMCxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSIiLGEmJmEuZm9jdXMmJmEuZm9jdXMoKSxhPW51bGx9LG4/MDozNjApKX19KCl9KCk7CjsoZnVuY3Rpb24oKXt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmF2Iik7aWYoIW4pcmV0dXJuO3ZhciBmPWZ1bmN0aW9uKCl7bi5jbGFzc0xpc3QudG9nZ2xlKCJzY3JvbGxlZCIsd2luZG93LnNjcm9sbFk+NjApfTtmKCk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VzaG93IixmKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZik7fSkoKTs=