Will the BVI Measure Up?

Words by Sjoerd Koster, Client Business General Manager – VP Bank

Photography courtesy of Coldwell Banker BVI

Introduction

A rapidly changing economic and political global environment has resulted in a change in the international property investor landscape for high net worth clients.

Traditionally, property investors have been in pursuit of an alternative location for their holiday homes. Additionally, they have sought investment into real estate to diversify their investment portfolios, seeking a conservative return on their investment.

In the last few years, a number of events—both political and economic in nature—have triggered wealthy international families to reconsider their traditional vacation property investments and in certain cases their residential location. These decisions to relocate themselves and their families has further been emphasised both by lifestyle decisions as well as tax considerations.

Investors have started exploring alternative locations in Europe, Asia, the Middle East, and the Caribbean in hopes of finding more appealing, safer, and in certain cases, more stable countries for their homes abroad.

Could the British Virgin Islands be a contender? And what would the lifestyle, investment, and connectivity requirements be for high-end buyers of real estate in these locations?

Furthermore, with so many countries motivated to attract these new kind of residents, how do the British Virgin Islands measure up against such strong competition? This article offers a simplified if not rudimentary comparison of the BVI when compared to some of the more popular investor destinations such as Monaco, Dubai, and Singapore on the basis of access, investor friendliness, cost, availability of real estate, taxation and lifestyle opportunities.


Monaco

For anyone who has not had the pleasure of visiting this European mini-state, Monaco is located about 45 minutes from Nice airport, in the Cote-D’azur in France. It is home to actors, sports stars, and wealthy business owners.

Upon arrival in Nice International Airport—the main gateway into Monaco—you can either drive to Monaco or take one of the many available helicopter taxis, whisking you into the city centre within seven minutes.

Monaco is about the size of Central Park in New York and borders with both France and Italy. The principality is one of the smallest tax residences in the world. Permit holders benefit from no income tax, wealth tax, or capital gains tax. Besides the obvious tax attractions, Monaco offers a comfortable moderate climate year-around, a highly secure living environment, and a diverse society made up of tax exiles from around the world.

Real estate is not easy to find as this densely populated city is already home to 40,000 permanent residents. It offers good connectivity through Nice International airport and it is also the home to many well-known events such as the Monaco Grand Prix, the Monaco Yacht Show, and the Monte Carlo Tennis Open to name a few. If you would like to moor your sailing yacht, power boat, or super yacht, Port Hercules is the deep-water port located in the heart of the city. You will require a tax residence certificate to live in Monaco and a minimum period to reside throughout the year which should not be too much of a burden with all the city has to offer.


Dubai

Dubai is fast becoming the central hub and gateway between Africa, Asia, and the Middle East. They have rapidly started to divest from their traditional source of income—the oil business—and have invested significant funds into high quality infrastructure. This includes one of the largest airports in the region, some of the best road networks around the city, and an air-conditioned metro system for visitors and residents.

Residents are not charged income tax, wealth tax, or capital gains tax similar to the BVI. It is not hard to find a spacious villa or luxurious flat as these are continuously being erected in various beachside developments along the coast of Dubai. The property market has had its ups and downs over the last few years and recently it’s been following a downward trend due to the low oil prices.

The ‘permanent residence requirements’ are minimal and the current population size is around 2.6 million. The climate is warm and sunny however the temperature can get uncomfortably hot during the European summer months. Throughout this period, you will probably spend more time in an air-conditioned environment than outdoors.

Dubai offers a high level of security for both its visitors and residents alike. Amazing shopping is presented in the form of the Dubai Mall—one of the world’s largest malls—as well as other entertainment options such as the largest indoor ski-slope, the largest indoor aquarium, golf courses, and many other activities. If you are looking to spend some time on the water, Dubai has a number of small marinas and has recently announced that they intend to build one of the largest marinas in the Middle-East called Dubai Harbour.


Singapore

Another small state destination located in the heart of Asia; it is one of the richest countries in the world and offers great connectivity through direct flights to nearly all the major airports and cities around the globe.

It borders with Malaysia and on numerous occasions has been voted as one of the world’s best places to reside. It offers a safe environment, has excellent infrastructure, and has a very strong public services sector. It is about two thirds of the size of New York City and has a very dense population with nearly 5.4 million residents. Over the last few years, it has become the central financial hub of Asia and many regional investors who use Singapore are attracted to the location as a result.

Singapore’s reputation as an easy place to do business has further accelerated the its popularity as place to work and reside.

Compared to some of the other investor locations, the level of investment required to qualify for the well-defined ‘Global Investor Program’ is $2 million or higher. Once you have obtained a residence permit however, all your foreign income is exempt from tax even when remitted to Singapore. There is no capital gains tax, gift tax, or estate tax. That being said, the cost of living is very high, there is limited access to real estate, and the price of real estate can be excessive. Singapore offers limited opportunities to those interested in yachting, but nearby countries such as Thailand and Indonesia are only a flight away.


British Virgin Islands

How does the BVI compare to some of these investor friendly destinations?

As an archipelago of 15 inhabited and dozens of uninhabited islands, the BVI has attracted a significant number of well-known and lesser known investors to its shores.

HNWIs include Sir Richard Branson who owns Necker Island, to Larry Page who recently acquired a private island as well as the Aga Khan who brought his exclusive brand of the Yacht Club Costa Smeralda (YCCS) to Virgin Gorda as their Caribbean base.

The North Sound with its resorts and private islands now caters to Hollywood celebrities, billionaires, and rock stars and a significant amount of wealth is now settling in the British Virgin Islands to justify it being called the billionaires’ playground.

The BVI attracts a variety of events and activities throughout the year, offering residents and visitors alike entertainment ranging from water-based activities such as the BVI Spring Regatta and the Loro Piana Caribbean Superyacht Regatta & Rendezvous, to land based activities like the Annual Necker Tennis Cup.

The BVI’s natural beauty is one of its key assets as a destination. The seas, sounds, and channels—which all form part of its natural infrastructure—make it easy to island-hop between the various isles. As one of the top sailing destination in the world, it has traditionally drawn many visitors looking to sail around the islands or enjoy water based activities such as diving and more recently, kite-surfing and paddle boarding. The favourable tropical climate and the breezy easterly trade winds make it a comfortable place to reside. With approximately 58 square miles and around 30,000 residents, it is not densely populated.

As with other destinations, the proximity to international airports determines the ease of travel for investors and therefore the attractiveness of the destination. Comparatively, connectivity has been an issue for the BVI. The lack of direct flights to the US mainland and to Europe have made it a rather arduous process to get to and from the BVI. Visitors and residents alike have had to rely on making connections either through Puerto Rico, the US Virgin Islands or St. Martin and Antigua to get to their final destinations.

This connectivity is not only important for its residents, but also allows for the further growth of events such as regattas, concerts, and festivals which could be offered year-round to increase the exposure to sports, music, and other cultural events for visitors and residents.

The recent announcement of direct flights from the BVI to US mainland through Miami with a dedicated BVI based airline is expected to be an initial ‘game changer’ as the BVI would gain direct access to one of its largest property investor markets, the United States. To be competitive with the other mentioned jurisdictions, further direct access to international airports for Europe and the United States would have to be implemented. The recent approval of the airport expansion plans would therefore be one of the strategic building blocks for the future of the BVI.

The BVI has started laying the foundation for a global investor program to attract more foreign investment into the Territory; however, the BVI’s detailed investor rules have not yet been clearly defined and a roll-out of such a scheme is not expected to take place until later in 2017. The current model of both real estate ownership as well as residency does not compare favourably to some of the aforementioned destinations, which have had well-defined and established investor schemes in place for several years.

If we look at the availability of real estate, potential buyers looking for high-end condominium projects will have to adjust their wish lists. However finding a home is relatively easy; the available properties are mainly high-end villas and villa projects instead of condo projects or high-rise apartment buildings. The existing developments are targeted at investors looking to purchase homes in either a resort type setting such as Oil Nut Bay (ONB), private residential project such as the more recently developed Trunk Bay and the more established Belmont estate, or developments aimed at marine orientated investors such as the Nanny Cay Marina & Resort. This marina is in the process of expanding both their outer marina and town house offering aimed at the higher end of the property market. Similar town house developments or renewed interest in older small resort developments such as the Long Bay Beach Club development or Lambert Beach Resort (now Turtle Bay Resort) could benefit from attractive investor schemes to be put in place.

From a taxation point of view, the BVI is already comparable to the other jurisdictions with no capital gains, income tax, or inheritance tax. The BVI also offers a politically stable, crime free, and safe environment. With a global trend of increased safety concerns for both high net worth individuals and their families, this has therefore become one of the key deciding factors when looking for a place to live.


To conclude, the BVI offers a solid foundation as a destination that is politically stable and safe in a beautiful Caribbean setting. The improved access to the US Mainland through Miami and possibly other international destinations will further enhance its competitiveness.

Finally, the preparation for a global investor type program will make it easier and more appealing to take up residence in the BVI. These success factors combined with the attractive life-style opportunities it already has to offer, confirm that the BVI is well on its way to becoming one of the preferred property investment destinations.

Like this article? Sign up to our newsletter!

BVI Property and Yacht
Like this article
Like FB Page
PGlmcmFtZSBzcmM9Ii8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL2xpa2Vib3gucGhwP2hyZWY9aHR0cHMlM0ElMkYlMkZ3d3cuZmFjZWJvb2suY29tJTJGVmlyZ2luSXNsYW5kc1Byb3BlcnR5WWFjaHQmd2lkdGg9MTYwcHgmaGVpZ2h0PTYyJmNvbG9yc2NoZW1lPWxpZ2h0JnNob3dfZmFjZXM9ZmFsc2UmaGVhZGVyPWZhbHNlJnN0cmVhbT1mYWxzZSZzaG93X2JvcmRlcj1mYWxzZSZhcHBJZD01MDYyNzM5MjYxMTUyNzEiIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIiBzdHlsZT0iYm9yZGVyOm5vbmU7IG92ZXJmbG93OmhpZGRlbjsgd2lkdGg6MTYwcHhweDsgaGVpZ2h0OjEwMHB4OyIgYWxsb3dUcmFuc3BhcmVuY3k9InRydWUiPjwvaWZyYW1lPg==
Like this article
Subscribe to Newsletter
ARE YOU READY? GET IT NOW!
Increase more than 500% of Email Subscribers!
Your Information will never be shared with any third party.
CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlciBzdXJ2ZXkxNWZvcm1fd3JhcHBlciBnZmN0X3N0eWxpc2hfd3JhcHBlciBnZmN0X25vY29uZmxpY3Rfd3JhcHBlcicgaWQ9J2dmb3JtX3dyYXBwZXJfNzEnID48YSBpZD0nZ2ZfNzEnIGNsYXNzPSdnZm9ybV9hbmNob3InID48L2E+PGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyB0YXJnZXQ9J2dmb3JtX2FqYXhfZnJhbWVfNzEnIGlkPSdnZm9ybV83MScgY2xhc3M9J3N1cnZleTE1Zm9ybSBnZmN0X3N0eWxpc2ggZ2ZjdF9ub2NvbmZsaWN0JyBhY3Rpb249Jy9wcm9wZXJ0eS93aWxsLWJ2aS1tZWFzdXJlLyNnZl83MSc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2JvZHknPjx1bCBpZD0nZ2Zvcm1fZmllbGRzXzcxJyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93Jz48bGkgaWQ9J2ZpZWxkXzcxXzInIGNsYXNzPSdnZmllbGQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSBnc3VydmV5LXN1cnZleS1maWVsZCAnID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgID5SZWFkZXIgU3VydmV5OiBXaGF0IGZpZWxkIGRvIHlvdSB3b3JrIGluPzwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX3JhZGlvJz48dWwgY2xhc3M9J2dmaWVsZF9yYWRpbycgaWQ9J2lucHV0XzcxXzInPjxsaSBjbGFzcz0nZ2Nob2ljZV83MV8yXzAnPjxpbnB1dCBuYW1lPSdpbnB1dF8yJyB0eXBlPSdyYWRpbycgdmFsdWU9J2dzdXJ2ZXkyOGEyNmZlOTcnICBpZD0nY2hvaWNlXzcxXzJfMCcgdGFiaW5kZXg9JzEnICAgIC8+PGxhYmVsIGZvcj0nY2hvaWNlXzcxXzJfMCcgaWQ9J2xhYmVsXzcxXzJfMCc+QWRtaW5pc3RyYXRpb248L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzcxXzJfMSc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTJiNWUxMDU5ZicgIGlkPSdjaG9pY2VfNzFfMl8xJyB0YWJpbmRleD0nMicgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzFfMl8xJyBpZD0nbGFiZWxfNzFfMl8xJz5CdXNpbmVzcyBvd25lcjwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzFfMl8yJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjAzYjYzZGU4JyAgaWQ9J2Nob2ljZV83MV8yXzInIHRhYmluZGV4PSczJyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83MV8yXzInIGlkPSdsYWJlbF83MV8yXzInPkV4ZWN1dGl2ZS8gR2VuZXJhbCBNYW5hZ2VtZW50LyBEaXJlY3RvcjwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzFfMl8zJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MmFkYmIyZjFmJyAgaWQ9J2Nob2ljZV83MV8yXzMnIHRhYmluZGV4PSc0JyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83MV8yXzMnIGlkPSdsYWJlbF83MV8yXzMnPkdvdmVybm1lbnQ8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzcxXzJfNCc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTJmZWJiYzJjYycgIGlkPSdjaG9pY2VfNzFfMl80JyB0YWJpbmRleD0nNScgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzFfMl80JyBpZD0nbGFiZWxfNzFfMl80Jz5IZWFsdGhjYXJlPC9sYWJlbD48L2xpPjxsaSBjbGFzcz0nZ2Nob2ljZV83MV8yXzUnPjxpbnB1dCBuYW1lPSdpbnB1dF8yJyB0eXBlPSdyYWRpbycgdmFsdWU9J2dzdXJ2ZXkyMmVlY2E4MWUnICBpZD0nY2hvaWNlXzcxXzJfNScgdGFiaW5kZXg9JzYnICAgIC8+PGxhYmVsIGZvcj0nY2hvaWNlXzcxXzJfNScgaWQ9J2xhYmVsXzcxXzJfNSc+SG9tZW1ha2VyPC9sYWJlbD48L2xpPjxsaSBjbGFzcz0nZ2Nob2ljZV83MV8yXzYnPjxpbnB1dCBuYW1lPSdpbnB1dF8yJyB0eXBlPSdyYWRpbycgdmFsdWU9J2dzdXJ2ZXkyNThkNmI4MTknICBpZD0nY2hvaWNlXzcxXzJfNicgdGFiaW5kZXg9JzcnICAgIC8+PGxhYmVsIGZvcj0nY2hvaWNlXzcxXzJfNicgaWQ9J2xhYmVsXzcxXzJfNic+SG9zcGl0YWxpdHk8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzcxXzJfNyc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTI5M2FkM2FmOScgIGlkPSdjaG9pY2VfNzFfMl83JyB0YWJpbmRleD0nOCcgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzFfMl83JyBpZD0nbGFiZWxfNzFfMl83Jz5NaWQtTGV2ZWwgTWFuYWdlbWVudDwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzFfMl84Jz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjJhMDMyYzgwJyAgaWQ9J2Nob2ljZV83MV8yXzgnIHRhYmluZGV4PSc5JyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83MV8yXzgnIGlkPSdsYWJlbF83MV8yXzgnPlRyYWRlc3BlcnNvbjwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzFfMl85Jz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjNlZjE4Y2Q5JyAgaWQ9J2Nob2ljZV83MV8yXzknIHRhYmluZGV4PScxMCcgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzFfMl85JyBpZD0nbGFiZWxfNzFfMl85Jz5vdGhlcjwvbGFiZWw+PC9saT48L3VsPjwvZGl2PjwvbGk+PGxpIGlkPSdmaWVsZF83MV8zJyBjbGFzcz0nZ2ZpZWxkIGdmb3JtX3ZhbGlkYXRpb25fY29udGFpbmVyIGZpZWxkX3N1YmxhYmVsX2JlbG93IGZpZWxkX2Rlc2NyaXB0aW9uX2JlbG93IGdmaWVsZF92aXNpYmlsaXR5XycgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsJyBmb3I9J2lucHV0XzcxXzMnID5OYW1lPC9sYWJlbD48ZGl2IGNsYXNzPSdnaW5wdXRfY29udGFpbmVyJz48aW5wdXQgbmFtZT0naW5wdXRfMycgaWQ9J2lucHV0XzcxXzMnIHR5cGU9J3RleHQnIHZhbHVlPScnIC8+PC9kaXY+PGRpdiBjbGFzcz0nZ2ZpZWxkX2Rlc2NyaXB0aW9uJz5UaGlzIGZpZWxkIGlzIGZvciB2YWxpZGF0aW9uIHB1cnBvc2VzIGFuZCBzaG91bGQgYmUgbGVmdCB1bmNoYW5nZWQuPC9kaXY+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0nZ2Zvcm1fZm9vdGVyIHRvcF9sYWJlbCc+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIGlkPSdnZm9ybV9zdWJtaXRfYnV0dG9uXzcxJyBjbGFzcz0nZ2Zvcm1fYnV0dG9uIGJ1dHRvbicgdmFsdWU9J1N1Ym1pdCcgdGFiaW5kZXg9JzExJyBvbmNsaWNrPSdpZih3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzEiXSl7cmV0dXJuIGZhbHNlO30gIHdpbmRvd1siZ2Zfc3VibWl0dGluZ183MSJdPXRydWU7ICAnIG9ua2V5cHJlc3M9J2lmKCBldmVudC5rZXlDb2RlID09IDEzICl7IGlmKHdpbmRvd1siZ2Zfc3VibWl0dGluZ183MSJdKXtyZXR1cm4gZmFsc2U7fSB3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzEiXT10cnVlOyAgalF1ZXJ5KCIjZ2Zvcm1fNzEiKS50cmlnZ2VyKCJzdWJtaXQiLFt0cnVlXSk7IH0nIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2dmb3JtX2FqYXgnIHZhbHVlPSdmb3JtX2lkPTcxJmFtcDt0aXRsZT0mYW1wO2Rlc2NyaXB0aW9uPSZhbXA7dGFiaW5kZXg9MScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0naXNfc3VibWl0XzcxJyB2YWx1ZT0nMScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fc3VibWl0JyB2YWx1ZT0nNzEnIC8+CiAgICAgICAgICAgIAogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV91bmlxdWVfaWQnIHZhbHVlPScnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J3N0YXRlXzcxJyB2YWx1ZT0nV3lKYlhTSXNJak5pTlRBek56WXdZemxoTVRBMllqUTBPV0k0WTJVM05tRTVORGhrTkRsaklsMD0nIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3RhcmdldF9wYWdlX251bWJlcl83MScgaWQ9J2dmb3JtX3RhcmdldF9wYWdlX251bWJlcl83MScgdmFsdWU9JzAnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83MScgaWQ9J2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83MScgdmFsdWU9JzEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2dmb3JtX2ZpZWxkX3ZhbHVlcycgdmFsdWU9JycgLz4KICAgICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aWZyYW1lIHN0eWxlPSdkaXNwbGF5Om5vbmU7d2lkdGg6MHB4O2hlaWdodDowcHg7JyBzcmM9J2Fib3V0OmJsYW5rJyBuYW1lPSdnZm9ybV9hamF4X2ZyYW1lXzcxJyBpZD0nZ2Zvcm1fYWpheF9mcmFtZV83MSc+VGhpcyBpZnJhbWUgY29udGFpbnMgdGhlIGxvZ2ljIHJlcXVpcmVkIHRvIGhhbmRsZSBBSkFYIHBvd2VyZWQgR3Jhdml0eSBGb3Jtcy48L2lmcmFtZT4KICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz5qUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCQpe2dmb3JtSW5pdFNwaW5uZXIoIDcxLCAnaHR0cHM6Ly93d3cuYnZpcHJvcGVydHl5YWNodC5jb20vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5naWYnICk7alF1ZXJ5KCcjZ2Zvcm1fYWpheF9mcmFtZV83MScpLmxvYWQoIGZ1bmN0aW9uKCl7dmFyIGNvbnRlbnRzID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnKicpLmh0bWwoKTt2YXIgaXNfcG9zdGJhY2sgPSBjb250ZW50cy5pbmRleE9mKCdHRl9BSkFYX1BPU1RCQUNLJykgPj0gMDtpZighaXNfcG9zdGJhY2spe3JldHVybjt9dmFyIGZvcm1fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV93cmFwcGVyXzcxJyk7dmFyIGlzX2NvbmZpcm1hdGlvbiA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV9jb25maXJtYXRpb25fd3JhcHBlcl83MScpLmxlbmd0aCA+IDA7dmFyIGlzX3JlZGlyZWN0ID0gY29udGVudHMuaW5kZXhPZignZ2Zvcm1SZWRpcmVjdCgpeycpID49IDA7dmFyIGlzX2Zvcm0gPSBmb3JtX2NvbnRlbnQubGVuZ3RoID4gMCAmJiAhIGlzX3JlZGlyZWN0ICYmICEgaXNfY29uZmlybWF0aW9uO2lmKGlzX2Zvcm0pe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzEnKS5odG1sKGZvcm1fY29udGVudC5odG1sKCkpO2lmKGZvcm1fY29udGVudC5oYXNDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzcxJykuYWRkQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9IGVsc2Uge2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzEnKS5yZW1vdmVDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpO31zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsgLyogZGVsYXkgdGhlIHNjcm9sbCBieSA1MCBtaWxsaXNlY29uZHMgdG8gZml4IGEgYnVnIGluIGNocm9tZSAqLyBqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzcxJykub2Zmc2V0KCkudG9wKTsgfSwgNTAgKTtpZih3aW5kb3dbJ2dmb3JtSW5pdERhdGVwaWNrZXInXSkge2dmb3JtSW5pdERhdGVwaWNrZXIoKTt9aWYod2luZG93WydnZm9ybUluaXRQcmljZUZpZWxkcyddKSB7Z2Zvcm1Jbml0UHJpY2VGaWVsZHMoKTt9dmFyIGN1cnJlbnRfcGFnZSA9IGpRdWVyeSgnI2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83MScpLnZhbCgpO2dmb3JtSW5pdFNwaW5uZXIoIDcxLCAnaHR0cHM6Ly93d3cuYnZpcHJvcGVydHl5YWNodC5jb20vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5naWYnICk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wYWdlX2xvYWRlZCcsIFs3MSwgY3VycmVudF9wYWdlXSk7d2luZG93WydnZl9zdWJtaXR0aW5nXzcxJ10gPSBmYWxzZTt9ZWxzZSBpZighaXNfcmVkaXJlY3Qpe3ZhciBjb25maXJtYXRpb25fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJy5HRl9BSkFYX1BPU1RCQUNLJykuaHRtbCgpO2lmKCFjb25maXJtYXRpb25fY29udGVudCl7Y29uZmlybWF0aW9uX2NvbnRlbnQgPSBjb250ZW50czt9c2V0VGltZW91dChmdW5jdGlvbigpe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzEnKS5yZXBsYWNlV2l0aChjb25maXJtYXRpb25fY29udGVudCk7alF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2ZfNzEnKS5vZmZzZXQoKS50b3ApO2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fY29uZmlybWF0aW9uX2xvYWRlZCcsIFs3MV0pO3dpbmRvd1snZ2Zfc3VibWl0dGluZ183MSddID0gZmFsc2U7fSwgNTApO31lbHNle2pRdWVyeSgnI2dmb3JtXzcxJykuYXBwZW5kKGNvbnRlbnRzKTtpZih3aW5kb3dbJ2dmb3JtUmVkaXJlY3QnXSkge2dmb3JtUmVkaXJlY3QoKTt9fWpRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fcG9zdF9yZW5kZXInLCBbNzEsIGN1cnJlbnRfcGFnZV0pO30gKTt9ICk7PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiBpZih0eXBlb2YgZ2ZfZ2xvYmFsID09ICd1bmRlZmluZWQnKSB2YXIgZ2ZfZ2xvYmFsID0geyJnZl9jdXJyZW5jeV9jb25maWciOnsibmFtZSI6IlUuUy4gRG9sbGFyIiwic3ltYm9sX2xlZnQiOiIkIiwic3ltYm9sX3JpZ2h0IjoiIiwic3ltYm9sX3BhZGRpbmciOiIiLCJ0aG91c2FuZF9zZXBhcmF0b3IiOiIsIiwiZGVjaW1hbF9zZXBhcmF0b3IiOiIuIiwiZGVjaW1hbHMiOjJ9LCJiYXNlX3VybCI6Imh0dHBzOlwvXC93d3cuYnZpcHJvcGVydHl5YWNodC5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3JtcyIsIm51bWJlcl9mb3JtYXRzIjpbXSwic3Bpbm5lclVybCI6Imh0dHBzOlwvXC93d3cuYnZpcHJvcGVydHl5YWNodC5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3Jtc1wvaW1hZ2VzXC9zcGlubmVyLmdpZiJ9O2pRdWVyeShkb2N1bWVudCkuYmluZCgnZ2Zvcm1fcG9zdF9yZW5kZXInLCBmdW5jdGlvbihldmVudCwgZm9ybUlkLCBjdXJyZW50UGFnZSl7aWYoZm9ybUlkID09IDcxKSB7fSB9ICk7alF1ZXJ5KGRvY3VtZW50KS5iaW5kKCdnZm9ybV9wb3N0X2NvbmRpdGlvbmFsX2xvZ2ljJywgZnVuY3Rpb24oZXZlbnQsIGZvcm1JZCwgZmllbGRzLCBpc0luaXQpe30gKTs8L3NjcmlwdD48c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+IGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgWzcxLCAxXSkgfSApOyA8L3NjcmlwdD4=
CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlciBzdXJ2ZXkxNWZvcm1fd3JhcHBlciBnZmN0X3N0eWxpc2hfd3JhcHBlciBnZmN0X25vY29uZmxpY3Rfd3JhcHBlcicgaWQ9J2dmb3JtX3dyYXBwZXJfNzInID48YSBpZD0nZ2ZfNzInIGNsYXNzPSdnZm9ybV9hbmNob3InID48L2E+PGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyB0YXJnZXQ9J2dmb3JtX2FqYXhfZnJhbWVfNzInIGlkPSdnZm9ybV83MicgY2xhc3M9J3N1cnZleTE1Zm9ybSBnZmN0X3N0eWxpc2ggZ2ZjdF9ub2NvbmZsaWN0JyBhY3Rpb249Jy9wcm9wZXJ0eS93aWxsLWJ2aS1tZWFzdXJlLyNnZl83Mic+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2JvZHknPjx1bCBpZD0nZ2Zvcm1fZmllbGRzXzcyJyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93Jz48bGkgaWQ9J2ZpZWxkXzcyXzInIGNsYXNzPSdnZmllbGQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSBnc3VydmV5LXN1cnZleS1maWVsZCAnID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgID5SZWFkZXIgU3VydmV5OiBXaGF0IHdhcyB5b3VyIFRPVEFMIENPTUJJTkVEIGhvdXNlaG9sZCBpbmNvbWUgbGFzdCB5ZWFyPzwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX3JhZGlvJz48dWwgY2xhc3M9J2dmaWVsZF9yYWRpbycgaWQ9J2lucHV0XzcyXzInPjxsaSBjbGFzcz0nZ2Nob2ljZV83Ml8yXzAnPjxpbnB1dCBuYW1lPSdpbnB1dF8yJyB0eXBlPSdyYWRpbycgdmFsdWU9J2dzdXJ2ZXkyM2VmMThjZDknICBpZD0nY2hvaWNlXzcyXzJfMCcgdGFiaW5kZXg9JzEnICAgIC8+PGxhYmVsIGZvcj0nY2hvaWNlXzcyXzJfMCcgaWQ9J2xhYmVsXzcyXzJfMCc+JDIwMCwwMDAgYW5kIHVwPC9sYWJlbD48L2xpPjxsaSBjbGFzcz0nZ2Nob2ljZV83Ml8yXzEnPjxpbnB1dCBuYW1lPSdpbnB1dF8yJyB0eXBlPSdyYWRpbycgdmFsdWU9J2dzdXJ2ZXkyMmEwMzJjODAnICBpZD0nY2hvaWNlXzcyXzJfMScgdGFiaW5kZXg9JzInICAgIC8+PGxhYmVsIGZvcj0nY2hvaWNlXzcyXzJfMScgaWQ9J2xhYmVsXzcyXzJfMSc+JDE3NSwwMDAgdG8gJDE5OSw5OTk8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzcyXzJfMic+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTI5M2FkM2FmOScgIGlkPSdjaG9pY2VfNzJfMl8yJyB0YWJpbmRleD0nMycgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzJfMl8yJyBpZD0nbGFiZWxfNzJfMl8yJz4kMTUwLDAwMCB0byAkMTc0LDk5OTwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzJfMl8zJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjU4ZDZiODE5JyAgaWQ9J2Nob2ljZV83Ml8yXzMnIHRhYmluZGV4PSc0JyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83Ml8yXzMnIGlkPSdsYWJlbF83Ml8yXzMnPiQxMjUsMDAwIHRvICQxNDksOTk5PC9sYWJlbD48L2xpPjxsaSBjbGFzcz0nZ2Nob2ljZV83Ml8yXzQnPjxpbnB1dCBuYW1lPSdpbnB1dF8yJyB0eXBlPSdyYWRpbycgdmFsdWU9J2dzdXJ2ZXkyMmVlY2E4MWUnICBpZD0nY2hvaWNlXzcyXzJfNCcgdGFiaW5kZXg9JzUnICAgIC8+PGxhYmVsIGZvcj0nY2hvaWNlXzcyXzJfNCcgaWQ9J2xhYmVsXzcyXzJfNCc+JDEwMCwwMDAgdG8gJDEyNCw5OTk8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzcyXzJfNSc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTJmZWJiYzJjYycgIGlkPSdjaG9pY2VfNzJfMl81JyB0YWJpbmRleD0nNicgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzJfMl81JyBpZD0nbGFiZWxfNzJfMl81Jz4kNzUsMDAwIHRvICQ5OSw5OTk8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzcyXzJfNic+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTJhZGJiMmYxZicgIGlkPSdjaG9pY2VfNzJfMl82JyB0YWJpbmRleD0nNycgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzJfMl82JyBpZD0nbGFiZWxfNzJfMl82Jz4kNTAsMDAwIHRvICQ3NCw5OTk8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzcyXzJfNyc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTIwM2I2M2RlOCcgIGlkPSdjaG9pY2VfNzJfMl83JyB0YWJpbmRleD0nOCcgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzJfMl83JyBpZD0nbGFiZWxfNzJfMl83Jz4kMjUsMDAwIHRvIDQ5LDk5OTwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzJfMl84Jz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MmI1ZTEwNTlmJyAgaWQ9J2Nob2ljZV83Ml8yXzgnIHRhYmluZGV4PSc5JyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83Ml8yXzgnIGlkPSdsYWJlbF83Ml8yXzgnPiQxMCwwMDAgdG8gJDI0LDk5OTwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzJfMl85Jz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjhhMjZmZTk3JyAgaWQ9J2Nob2ljZV83Ml8yXzknIHRhYmluZGV4PScxMCcgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzJfMl85JyBpZD0nbGFiZWxfNzJfMl85Jz4kMCB0byAkOSw5OTk8L2xhYmVsPjwvbGk+PC91bD48L2Rpdj48L2xpPjxsaSBpZD0nZmllbGRfNzJfMycgY2xhc3M9J2dmaWVsZCBnZm9ybV92YWxpZGF0aW9uX2NvbnRhaW5lciBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV8nID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgZm9yPSdpbnB1dF83Ml8zJyA+Q29tbWVudHM8L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXInPjxpbnB1dCBuYW1lPSdpbnB1dF8zJyBpZD0naW5wdXRfNzJfMycgdHlwZT0ndGV4dCcgdmFsdWU9JycgLz48L2Rpdj48ZGl2IGNsYXNzPSdnZmllbGRfZGVzY3JpcHRpb24nPlRoaXMgZmllbGQgaXMgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMgYW5kIHNob3VsZCBiZSBsZWZ0IHVuY2hhbmdlZC48L2Rpdj48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybV9mb290ZXIgdG9wX2xhYmVsJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgaWQ9J2dmb3JtX3N1Ym1pdF9idXR0b25fNzInIGNsYXNzPSdnZm9ybV9idXR0b24gYnV0dG9uJyB2YWx1ZT0nU3VibWl0JyB0YWJpbmRleD0nMTEnIG9uY2xpY2s9J2lmKHdpbmRvd1siZ2Zfc3VibWl0dGluZ183MiJdKXtyZXR1cm4gZmFsc2U7fSAgd2luZG93WyJnZl9zdWJtaXR0aW5nXzcyIl09dHJ1ZTsgICcgb25rZXlwcmVzcz0naWYoIGV2ZW50LmtleUNvZGUgPT0gMTMgKXsgaWYod2luZG93WyJnZl9zdWJtaXR0aW5nXzcyIl0pe3JldHVybiBmYWxzZTt9IHdpbmRvd1siZ2Zfc3VibWl0dGluZ183MiJdPXRydWU7ICBqUXVlcnkoIiNnZm9ybV83MiIpLnRyaWdnZXIoInN1Ym1pdCIsW3RydWVdKTsgfScgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZ2Zvcm1fYWpheCcgdmFsdWU9J2Zvcm1faWQ9NzImYW1wO3RpdGxlPSZhbXA7ZGVzY3JpcHRpb249JmFtcDt0YWJpbmRleD0xJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdpc19zdWJtaXRfNzInIHZhbHVlPScxJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV9zdWJtaXQnIHZhbHVlPSc3MicgLz4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3VuaXF1ZV9pZCcgdmFsdWU9JycgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nc3RhdGVfNzInIHZhbHVlPSdXeUpiWFNJc0lqTmlOVEF6TnpZd1l6bGhNVEEyWWpRME9XSTRZMlUzTm1FNU5EaGtORGxqSWwwPScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fdGFyZ2V0X3BhZ2VfbnVtYmVyXzcyJyBpZD0nZ2Zvcm1fdGFyZ2V0X3BhZ2VfbnVtYmVyXzcyJyB2YWx1ZT0nMCcgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fc291cmNlX3BhZ2VfbnVtYmVyXzcyJyBpZD0nZ2Zvcm1fc291cmNlX3BhZ2VfbnVtYmVyXzcyJyB2YWx1ZT0nMScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZ2Zvcm1fZmllbGRfdmFsdWVzJyB2YWx1ZT0nJyAvPgogICAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpZnJhbWUgc3R5bGU9J2Rpc3BsYXk6bm9uZTt3aWR0aDowcHg7aGVpZ2h0OjBweDsnIHNyYz0nYWJvdXQ6YmxhbmsnIG5hbWU9J2dmb3JtX2FqYXhfZnJhbWVfNzInIGlkPSdnZm9ybV9hamF4X2ZyYW1lXzcyJz5UaGlzIGlmcmFtZSBjb250YWlucyB0aGUgbG9naWMgcmVxdWlyZWQgdG8gaGFuZGxlIEFKQVggcG93ZXJlZCBHcmF2aXR5IEZvcm1zLjwvaWZyYW1lPgogICAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPmpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oJCl7Z2Zvcm1Jbml0U3Bpbm5lciggNzIsICdodHRwczovL3d3dy5idmlwcm9wZXJ0eXlhY2h0LmNvbS93cC1jb250ZW50L3BsdWdpbnMvZ3Jhdml0eWZvcm1zL2ltYWdlcy9zcGlubmVyLmdpZicgKTtqUXVlcnkoJyNnZm9ybV9hamF4X2ZyYW1lXzcyJykubG9hZCggZnVuY3Rpb24oKXt2YXIgY29udGVudHMgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcqJykuaHRtbCgpO3ZhciBpc19wb3N0YmFjayA9IGNvbnRlbnRzLmluZGV4T2YoJ0dGX0FKQVhfUE9TVEJBQ0snKSA+PSAwO2lmKCFpc19wb3N0YmFjayl7cmV0dXJuO312YXIgZm9ybV9jb250ZW50ID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnI2dmb3JtX3dyYXBwZXJfNzInKTt2YXIgaXNfY29uZmlybWF0aW9uID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnI2dmb3JtX2NvbmZpcm1hdGlvbl93cmFwcGVyXzcyJykubGVuZ3RoID4gMDt2YXIgaXNfcmVkaXJlY3QgPSBjb250ZW50cy5pbmRleE9mKCdnZm9ybVJlZGlyZWN0KCl7JykgPj0gMDt2YXIgaXNfZm9ybSA9IGZvcm1fY29udGVudC5sZW5ndGggPiAwICYmICEgaXNfcmVkaXJlY3QgJiYgISBpc19jb25maXJtYXRpb247aWYoaXNfZm9ybSl7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83MicpLmh0bWwoZm9ybV9jb250ZW50Lmh0bWwoKSk7aWYoZm9ybV9jb250ZW50Lmhhc0NsYXNzKCdnZm9ybV92YWxpZGF0aW9uX2Vycm9yJykpe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzInKS5hZGRDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpO30gZWxzZSB7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83MicpLnJlbW92ZUNsYXNzKCdnZm9ybV92YWxpZGF0aW9uX2Vycm9yJyk7fXNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeyAvKiBkZWxheSB0aGUgc2Nyb2xsIGJ5IDUwIG1pbGxpc2Vjb25kcyB0byBmaXggYSBidWcgaW4gY2hyb21lICovIGpRdWVyeShkb2N1bWVudCkuc2Nyb2xsVG9wKGpRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzInKS5vZmZzZXQoKS50b3ApOyB9LCA1MCApO2lmKHdpbmRvd1snZ2Zvcm1Jbml0RGF0ZXBpY2tlciddKSB7Z2Zvcm1Jbml0RGF0ZXBpY2tlcigpO31pZih3aW5kb3dbJ2dmb3JtSW5pdFByaWNlRmllbGRzJ10pIHtnZm9ybUluaXRQcmljZUZpZWxkcygpO312YXIgY3VycmVudF9wYWdlID0galF1ZXJ5KCcjZ2Zvcm1fc291cmNlX3BhZ2VfbnVtYmVyXzcyJykudmFsKCk7Z2Zvcm1Jbml0U3Bpbm5lciggNzIsICdodHRwczovL3d3dy5idmlwcm9wZXJ0eXlhY2h0LmNvbS93cC1jb250ZW50L3BsdWdpbnMvZ3Jhdml0eWZvcm1zL2ltYWdlcy9zcGlubmVyLmdpZicgKTtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX3BhZ2VfbG9hZGVkJywgWzcyLCBjdXJyZW50X3BhZ2VdKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfNzInXSA9IGZhbHNlO31lbHNlIGlmKCFpc19yZWRpcmVjdCl7dmFyIGNvbmZpcm1hdGlvbl9jb250ZW50ID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnLkdGX0FKQVhfUE9TVEJBQ0snKS5odG1sKCk7aWYoIWNvbmZpcm1hdGlvbl9jb250ZW50KXtjb25maXJtYXRpb25fY29udGVudCA9IGNvbnRlbnRzO31zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83MicpLnJlcGxhY2VXaXRoKGNvbmZpcm1hdGlvbl9jb250ZW50KTtqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZl83MicpLm9mZnNldCgpLnRvcCk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9jb25maXJtYXRpb25fbG9hZGVkJywgWzcyXSk7d2luZG93WydnZl9zdWJtaXR0aW5nXzcyJ10gPSBmYWxzZTt9LCA1MCk7fWVsc2V7alF1ZXJ5KCcjZ2Zvcm1fNzInKS5hcHBlbmQoY29udGVudHMpO2lmKHdpbmRvd1snZ2Zvcm1SZWRpcmVjdCddKSB7Z2Zvcm1SZWRpcmVjdCgpO319alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wb3N0X3JlbmRlcicsIFs3MiwgY3VycmVudF9wYWdlXSk7fSApO30gKTs8L3NjcmlwdD48c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+IGlmKHR5cGVvZiBnZl9nbG9iYWwgPT0gJ3VuZGVmaW5lZCcpIHZhciBnZl9nbG9iYWwgPSB7ImdmX2N1cnJlbmN5X2NvbmZpZyI6eyJuYW1lIjoiVS5TLiBEb2xsYXIiLCJzeW1ib2xfbGVmdCI6IiQiLCJzeW1ib2xfcmlnaHQiOiIiLCJzeW1ib2xfcGFkZGluZyI6IiIsInRob3VzYW5kX3NlcGFyYXRvciI6IiwiLCJkZWNpbWFsX3NlcGFyYXRvciI6Ii4iLCJkZWNpbWFscyI6Mn0sImJhc2VfdXJsIjoiaHR0cHM6XC9cL3d3dy5idmlwcm9wZXJ0eXlhY2h0LmNvbVwvd3AtY29udGVudFwvcGx1Z2luc1wvZ3Jhdml0eWZvcm1zIiwibnVtYmVyX2Zvcm1hdHMiOltdLCJzcGlubmVyVXJsIjoiaHR0cHM6XC9cL3d3dy5idmlwcm9wZXJ0eXlhY2h0LmNvbVwvd3AtY29udGVudFwvcGx1Z2luc1wvZ3Jhdml0eWZvcm1zXC9pbWFnZXNcL3NwaW5uZXIuZ2lmIn07alF1ZXJ5KGRvY3VtZW50KS5iaW5kKCdnZm9ybV9wb3N0X3JlbmRlcicsIGZ1bmN0aW9uKGV2ZW50LCBmb3JtSWQsIGN1cnJlbnRQYWdlKXtpZihmb3JtSWQgPT0gNzIpIHt9IH0gKTtqUXVlcnkoZG9jdW1lbnQpLmJpbmQoJ2dmb3JtX3Bvc3RfY29uZGl0aW9uYWxfbG9naWMnLCBmdW5jdGlvbihldmVudCwgZm9ybUlkLCBmaWVsZHMsIGlzSW5pdCl7fSApOzwvc2NyaXB0PjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4galF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fcG9zdF9yZW5kZXInLCBbNzIsIDFdKSB9ICk7IDwvc2NyaXB0Pg==
CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlciBzdXJ2ZXkxNWZvcm1fd3JhcHBlciBnZmN0X3N0eWxpc2hfd3JhcHBlciBnZmN0X25vY29uZmxpY3Rfd3JhcHBlcicgaWQ9J2dmb3JtX3dyYXBwZXJfNzMnID48YSBpZD0nZ2ZfNzMnIGNsYXNzPSdnZm9ybV9hbmNob3InID48L2E+PGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyB0YXJnZXQ9J2dmb3JtX2FqYXhfZnJhbWVfNzMnIGlkPSdnZm9ybV83MycgY2xhc3M9J3N1cnZleTE1Zm9ybSBnZmN0X3N0eWxpc2ggZ2ZjdF9ub2NvbmZsaWN0JyBhY3Rpb249Jy9wcm9wZXJ0eS93aWxsLWJ2aS1tZWFzdXJlLyNnZl83Myc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2JvZHknPjx1bCBpZD0nZ2Zvcm1fZmllbGRzXzczJyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93Jz48bGkgaWQ9J2ZpZWxkXzczXzInIGNsYXNzPSdnZmllbGQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSBnc3VydmV5LXN1cnZleS1maWVsZCAnID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgID5SZWFkZXIgU3VydmV5OiBIb3cgbWFueSBmYW1pbHkgbWVtYmVycyBhcmUgbGl2aW5nIGluIHlvdXIgaG91c2Vob2xkIChpbmNsdWRpbmcgeW91Pyk8L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXIgZ2lucHV0X2NvbnRhaW5lcl9yYWRpbyc+PHVsIGNsYXNzPSdnZmllbGRfcmFkaW8nIGlkPSdpbnB1dF83M18yJz48bGkgY2xhc3M9J2djaG9pY2VfNzNfMl8wJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjNlZjE4Y2Q5JyAgaWQ9J2Nob2ljZV83M18yXzAnIHRhYmluZGV4PScxJyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83M18yXzAnIGlkPSdsYWJlbF83M18yXzAnPjE8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzczXzJfMSc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTIyYTAzMmM4MCcgIGlkPSdjaG9pY2VfNzNfMl8xJyB0YWJpbmRleD0nMicgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzNfMl8xJyBpZD0nbGFiZWxfNzNfMl8xJz4yPC9sYWJlbD48L2xpPjxsaSBjbGFzcz0nZ2Nob2ljZV83M18yXzInPjxpbnB1dCBuYW1lPSdpbnB1dF8yJyB0eXBlPSdyYWRpbycgdmFsdWU9J2dzdXJ2ZXkyOTNhZDNhZjknICBpZD0nY2hvaWNlXzczXzJfMicgdGFiaW5kZXg9JzMnICAgIC8+PGxhYmVsIGZvcj0nY2hvaWNlXzczXzJfMicgaWQ9J2xhYmVsXzczXzJfMic+MzwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzNfMl8zJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjU4ZDZiODE5JyAgaWQ9J2Nob2ljZV83M18yXzMnIHRhYmluZGV4PSc0JyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83M18yXzMnIGlkPSdsYWJlbF83M18yXzMnPjQgb3IgbW9yZTwvbGFiZWw+PC9saT48L3VsPjwvZGl2PjwvbGk+PGxpIGlkPSdmaWVsZF83M18zJyBjbGFzcz0nZ2ZpZWxkIGdmb3JtX3ZhbGlkYXRpb25fY29udGFpbmVyIGZpZWxkX3N1YmxhYmVsX2JlbG93IGZpZWxkX2Rlc2NyaXB0aW9uX2JlbG93IGdmaWVsZF92aXNpYmlsaXR5XycgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsJyBmb3I9J2lucHV0XzczXzMnID5FbWFpbDwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lcic+PGlucHV0IG5hbWU9J2lucHV0XzMnIGlkPSdpbnB1dF83M18zJyB0eXBlPSd0ZXh0JyB2YWx1ZT0nJyAvPjwvZGl2PjxkaXYgY2xhc3M9J2dmaWVsZF9kZXNjcmlwdGlvbic+VGhpcyBmaWVsZCBpcyBmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcyBhbmQgc2hvdWxkIGJlIGxlZnQgdW5jaGFuZ2VkLjwvZGl2PjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2Zvb3RlciB0b3BfbGFiZWwnPiA8aW5wdXQgdHlwZT0nc3VibWl0JyBpZD0nZ2Zvcm1fc3VibWl0X2J1dHRvbl83MycgY2xhc3M9J2dmb3JtX2J1dHRvbiBidXR0b24nIHZhbHVlPSdTdWJtaXQnIHRhYmluZGV4PSc1JyBvbmNsaWNrPSdpZih3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzMiXSl7cmV0dXJuIGZhbHNlO30gIHdpbmRvd1siZ2Zfc3VibWl0dGluZ183MyJdPXRydWU7ICAnIG9ua2V5cHJlc3M9J2lmKCBldmVudC5rZXlDb2RlID09IDEzICl7IGlmKHdpbmRvd1siZ2Zfc3VibWl0dGluZ183MyJdKXtyZXR1cm4gZmFsc2U7fSB3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzMiXT10cnVlOyAgalF1ZXJ5KCIjZ2Zvcm1fNzMiKS50cmlnZ2VyKCJzdWJtaXQiLFt0cnVlXSk7IH0nIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2dmb3JtX2FqYXgnIHZhbHVlPSdmb3JtX2lkPTczJmFtcDt0aXRsZT0mYW1wO2Rlc2NyaXB0aW9uPSZhbXA7dGFiaW5kZXg9MScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0naXNfc3VibWl0XzczJyB2YWx1ZT0nMScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fc3VibWl0JyB2YWx1ZT0nNzMnIC8+CiAgICAgICAgICAgIAogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV91bmlxdWVfaWQnIHZhbHVlPScnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J3N0YXRlXzczJyB2YWx1ZT0nV3lKYlhTSXNJak5pTlRBek56WXdZemxoTVRBMllqUTBPV0k0WTJVM05tRTVORGhrTkRsaklsMD0nIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3RhcmdldF9wYWdlX251bWJlcl83MycgaWQ9J2dmb3JtX3RhcmdldF9wYWdlX251bWJlcl83MycgdmFsdWU9JzAnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83MycgaWQ9J2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83MycgdmFsdWU9JzEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2dmb3JtX2ZpZWxkX3ZhbHVlcycgdmFsdWU9JycgLz4KICAgICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aWZyYW1lIHN0eWxlPSdkaXNwbGF5Om5vbmU7d2lkdGg6MHB4O2hlaWdodDowcHg7JyBzcmM9J2Fib3V0OmJsYW5rJyBuYW1lPSdnZm9ybV9hamF4X2ZyYW1lXzczJyBpZD0nZ2Zvcm1fYWpheF9mcmFtZV83Myc+VGhpcyBpZnJhbWUgY29udGFpbnMgdGhlIGxvZ2ljIHJlcXVpcmVkIHRvIGhhbmRsZSBBSkFYIHBvd2VyZWQgR3Jhdml0eSBGb3Jtcy48L2lmcmFtZT4KICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz5qUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCQpe2dmb3JtSW5pdFNwaW5uZXIoIDczLCAnaHR0cHM6Ly93d3cuYnZpcHJvcGVydHl5YWNodC5jb20vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5naWYnICk7alF1ZXJ5KCcjZ2Zvcm1fYWpheF9mcmFtZV83MycpLmxvYWQoIGZ1bmN0aW9uKCl7dmFyIGNvbnRlbnRzID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnKicpLmh0bWwoKTt2YXIgaXNfcG9zdGJhY2sgPSBjb250ZW50cy5pbmRleE9mKCdHRl9BSkFYX1BPU1RCQUNLJykgPj0gMDtpZighaXNfcG9zdGJhY2spe3JldHVybjt9dmFyIGZvcm1fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV93cmFwcGVyXzczJyk7dmFyIGlzX2NvbmZpcm1hdGlvbiA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV9jb25maXJtYXRpb25fd3JhcHBlcl83MycpLmxlbmd0aCA+IDA7dmFyIGlzX3JlZGlyZWN0ID0gY29udGVudHMuaW5kZXhPZignZ2Zvcm1SZWRpcmVjdCgpeycpID49IDA7dmFyIGlzX2Zvcm0gPSBmb3JtX2NvbnRlbnQubGVuZ3RoID4gMCAmJiAhIGlzX3JlZGlyZWN0ICYmICEgaXNfY29uZmlybWF0aW9uO2lmKGlzX2Zvcm0pe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzMnKS5odG1sKGZvcm1fY29udGVudC5odG1sKCkpO2lmKGZvcm1fY29udGVudC5oYXNDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzczJykuYWRkQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9IGVsc2Uge2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzMnKS5yZW1vdmVDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpO31zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsgLyogZGVsYXkgdGhlIHNjcm9sbCBieSA1MCBtaWxsaXNlY29uZHMgdG8gZml4IGEgYnVnIGluIGNocm9tZSAqLyBqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzczJykub2Zmc2V0KCkudG9wKTsgfSwgNTAgKTtpZih3aW5kb3dbJ2dmb3JtSW5pdERhdGVwaWNrZXInXSkge2dmb3JtSW5pdERhdGVwaWNrZXIoKTt9aWYod2luZG93WydnZm9ybUluaXRQcmljZUZpZWxkcyddKSB7Z2Zvcm1Jbml0UHJpY2VGaWVsZHMoKTt9dmFyIGN1cnJlbnRfcGFnZSA9IGpRdWVyeSgnI2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83MycpLnZhbCgpO2dmb3JtSW5pdFNwaW5uZXIoIDczLCAnaHR0cHM6Ly93d3cuYnZpcHJvcGVydHl5YWNodC5jb20vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5naWYnICk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wYWdlX2xvYWRlZCcsIFs3MywgY3VycmVudF9wYWdlXSk7d2luZG93WydnZl9zdWJtaXR0aW5nXzczJ10gPSBmYWxzZTt9ZWxzZSBpZighaXNfcmVkaXJlY3Qpe3ZhciBjb25maXJtYXRpb25fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJy5HRl9BSkFYX1BPU1RCQUNLJykuaHRtbCgpO2lmKCFjb25maXJtYXRpb25fY29udGVudCl7Y29uZmlybWF0aW9uX2NvbnRlbnQgPSBjb250ZW50czt9c2V0VGltZW91dChmdW5jdGlvbigpe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzMnKS5yZXBsYWNlV2l0aChjb25maXJtYXRpb25fY29udGVudCk7alF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2ZfNzMnKS5vZmZzZXQoKS50b3ApO2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fY29uZmlybWF0aW9uX2xvYWRlZCcsIFs3M10pO3dpbmRvd1snZ2Zfc3VibWl0dGluZ183MyddID0gZmFsc2U7fSwgNTApO31lbHNle2pRdWVyeSgnI2dmb3JtXzczJykuYXBwZW5kKGNvbnRlbnRzKTtpZih3aW5kb3dbJ2dmb3JtUmVkaXJlY3QnXSkge2dmb3JtUmVkaXJlY3QoKTt9fWpRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fcG9zdF9yZW5kZXInLCBbNzMsIGN1cnJlbnRfcGFnZV0pO30gKTt9ICk7PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiBpZih0eXBlb2YgZ2ZfZ2xvYmFsID09ICd1bmRlZmluZWQnKSB2YXIgZ2ZfZ2xvYmFsID0geyJnZl9jdXJyZW5jeV9jb25maWciOnsibmFtZSI6IlUuUy4gRG9sbGFyIiwic3ltYm9sX2xlZnQiOiIkIiwic3ltYm9sX3JpZ2h0IjoiIiwic3ltYm9sX3BhZGRpbmciOiIiLCJ0aG91c2FuZF9zZXBhcmF0b3IiOiIsIiwiZGVjaW1hbF9zZXBhcmF0b3IiOiIuIiwiZGVjaW1hbHMiOjJ9LCJiYXNlX3VybCI6Imh0dHBzOlwvXC93d3cuYnZpcHJvcGVydHl5YWNodC5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3JtcyIsIm51bWJlcl9mb3JtYXRzIjpbXSwic3Bpbm5lclVybCI6Imh0dHBzOlwvXC93d3cuYnZpcHJvcGVydHl5YWNodC5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3Jtc1wvaW1hZ2VzXC9zcGlubmVyLmdpZiJ9O2pRdWVyeShkb2N1bWVudCkuYmluZCgnZ2Zvcm1fcG9zdF9yZW5kZXInLCBmdW5jdGlvbihldmVudCwgZm9ybUlkLCBjdXJyZW50UGFnZSl7aWYoZm9ybUlkID09IDczKSB7fSB9ICk7alF1ZXJ5KGRvY3VtZW50KS5iaW5kKCdnZm9ybV9wb3N0X2NvbmRpdGlvbmFsX2xvZ2ljJywgZnVuY3Rpb24oZXZlbnQsIGZvcm1JZCwgZmllbGRzLCBpc0luaXQpe30gKTs8L3NjcmlwdD48c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+IGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgWzczLCAxXSkgfSApOyA8L3NjcmlwdD4=
CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlciBzdXJ2ZXkxNWZvcm1fd3JhcHBlciBnZmN0X3N0eWxpc2hfd3JhcHBlciBnZmN0X25vY29uZmxpY3Rfd3JhcHBlcicgaWQ9J2dmb3JtX3dyYXBwZXJfNzQnID48YSBpZD0nZ2ZfNzQnIGNsYXNzPSdnZm9ybV9hbmNob3InID48L2E+PGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyB0YXJnZXQ9J2dmb3JtX2FqYXhfZnJhbWVfNzQnIGlkPSdnZm9ybV83NCcgY2xhc3M9J3N1cnZleTE1Zm9ybSBnZmN0X3N0eWxpc2ggZ2ZjdF9ub2NvbmZsaWN0JyBhY3Rpb249Jy9wcm9wZXJ0eS93aWxsLWJ2aS1tZWFzdXJlLyNnZl83NCc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2JvZHknPjx1bCBpZD0nZ2Zvcm1fZmllbGRzXzc0JyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93Jz48bGkgaWQ9J2ZpZWxkXzc0XzInIGNsYXNzPSdnZmllbGQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSBnc3VydmV5LXN1cnZleS1maWVsZCAnID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgID5SZWFkZXIgU3VydmV5OiBBcmUgeW91IHRoZSBob3VzZWhvbGQgc2hvcHBlciAocGVyc29uIHJlc3BvbnNpYmxlIGZvciBwdXJjaGFzZXMgaW4geW91ciBob3VzZWhvbGQpPzwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX3JhZGlvJz48dWwgY2xhc3M9J2dmaWVsZF9yYWRpbycgaWQ9J2lucHV0Xzc0XzInPjxsaSBjbGFzcz0nZ2Nob2ljZV83NF8yXzAnPjxpbnB1dCBuYW1lPSdpbnB1dF8yJyB0eXBlPSdyYWRpbycgdmFsdWU9J2dzdXJ2ZXkyM2VmMThjZDknICBpZD0nY2hvaWNlXzc0XzJfMCcgdGFiaW5kZXg9JzEnICAgIC8+PGxhYmVsIGZvcj0nY2hvaWNlXzc0XzJfMCcgaWQ9J2xhYmVsXzc0XzJfMCc+WWVzPC9sYWJlbD48L2xpPjxsaSBjbGFzcz0nZ2Nob2ljZV83NF8yXzEnPjxpbnB1dCBuYW1lPSdpbnB1dF8yJyB0eXBlPSdyYWRpbycgdmFsdWU9J2dzdXJ2ZXkyYzliM2MzNmUnICBpZD0nY2hvaWNlXzc0XzJfMScgdGFiaW5kZXg9JzInICAgIC8+PGxhYmVsIGZvcj0nY2hvaWNlXzc0XzJfMScgaWQ9J2xhYmVsXzc0XzJfMSc+Tm88L2xhYmVsPjwvbGk+PC91bD48L2Rpdj48L2xpPjxsaSBpZD0nZmllbGRfNzRfMycgY2xhc3M9J2dmaWVsZCBnZm9ybV92YWxpZGF0aW9uX2NvbnRhaW5lciBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV8nID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgZm9yPSdpbnB1dF83NF8zJyA+RW1haWw8L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXInPjxpbnB1dCBuYW1lPSdpbnB1dF8zJyBpZD0naW5wdXRfNzRfMycgdHlwZT0ndGV4dCcgdmFsdWU9JycgLz48L2Rpdj48ZGl2IGNsYXNzPSdnZmllbGRfZGVzY3JpcHRpb24nPlRoaXMgZmllbGQgaXMgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMgYW5kIHNob3VsZCBiZSBsZWZ0IHVuY2hhbmdlZC48L2Rpdj48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybV9mb290ZXIgdG9wX2xhYmVsJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgaWQ9J2dmb3JtX3N1Ym1pdF9idXR0b25fNzQnIGNsYXNzPSdnZm9ybV9idXR0b24gYnV0dG9uJyB2YWx1ZT0nU3VibWl0JyB0YWJpbmRleD0nMycgb25jbGljaz0naWYod2luZG93WyJnZl9zdWJtaXR0aW5nXzc0Il0pe3JldHVybiBmYWxzZTt9ICB3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzQiXT10cnVlOyAgJyBvbmtleXByZXNzPSdpZiggZXZlbnQua2V5Q29kZSA9PSAxMyApeyBpZih3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzQiXSl7cmV0dXJuIGZhbHNlO30gd2luZG93WyJnZl9zdWJtaXR0aW5nXzc0Il09dHJ1ZTsgIGpRdWVyeSgiI2dmb3JtXzc0IikudHJpZ2dlcigic3VibWl0IixbdHJ1ZV0pOyB9JyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdnZm9ybV9hamF4JyB2YWx1ZT0nZm9ybV9pZD03NCZhbXA7dGl0bGU9JmFtcDtkZXNjcmlwdGlvbj0mYW1wO3RhYmluZGV4PTEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2lzX3N1Ym1pdF83NCcgdmFsdWU9JzEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3N1Ym1pdCcgdmFsdWU9Jzc0JyAvPgogICAgICAgICAgICAKICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fdW5pcXVlX2lkJyB2YWx1ZT0nJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdzdGF0ZV83NCcgdmFsdWU9J1d5SmJYU0lzSWpOaU5UQXpOell3WXpsaE1UQTJZalEwT1dJNFkyVTNObUU1TkRoa05EbGpJbDA9JyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV90YXJnZXRfcGFnZV9udW1iZXJfNzQnIGlkPSdnZm9ybV90YXJnZXRfcGFnZV9udW1iZXJfNzQnIHZhbHVlPScwJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzQnIGlkPSdnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzQnIHZhbHVlPScxJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdnZm9ybV9maWVsZF92YWx1ZXMnIHZhbHVlPScnIC8+CiAgICAgICAgICAgIAogICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlmcmFtZSBzdHlsZT0nZGlzcGxheTpub25lO3dpZHRoOjBweDtoZWlnaHQ6MHB4Oycgc3JjPSdhYm91dDpibGFuaycgbmFtZT0nZ2Zvcm1fYWpheF9mcmFtZV83NCcgaWQ9J2dmb3JtX2FqYXhfZnJhbWVfNzQnPlRoaXMgaWZyYW1lIGNvbnRhaW5zIHRoZSBsb2dpYyByZXF1aXJlZCB0byBoYW5kbGUgQUpBWCBwb3dlcmVkIEdyYXZpdHkgRm9ybXMuPC9pZnJhbWU+CiAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKXtnZm9ybUluaXRTcGlubmVyKCA3NCwgJ2h0dHBzOi8vd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9ncmF2aXR5Zm9ybXMvaW1hZ2VzL3NwaW5uZXIuZ2lmJyApO2pRdWVyeSgnI2dmb3JtX2FqYXhfZnJhbWVfNzQnKS5sb2FkKCBmdW5jdGlvbigpe3ZhciBjb250ZW50cyA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyonKS5odG1sKCk7dmFyIGlzX3Bvc3RiYWNrID0gY29udGVudHMuaW5kZXhPZignR0ZfQUpBWF9QT1NUQkFDSycpID49IDA7aWYoIWlzX3Bvc3RiYWNrKXtyZXR1cm47fXZhciBmb3JtX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcjZ2Zvcm1fd3JhcHBlcl83NCcpO3ZhciBpc19jb25maXJtYXRpb24gPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcjZ2Zvcm1fY29uZmlybWF0aW9uX3dyYXBwZXJfNzQnKS5sZW5ndGggPiAwO3ZhciBpc19yZWRpcmVjdCA9IGNvbnRlbnRzLmluZGV4T2YoJ2dmb3JtUmVkaXJlY3QoKXsnKSA+PSAwO3ZhciBpc19mb3JtID0gZm9ybV9jb250ZW50Lmxlbmd0aCA+IDAgJiYgISBpc19yZWRpcmVjdCAmJiAhIGlzX2NvbmZpcm1hdGlvbjtpZihpc19mb3JtKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc0JykuaHRtbChmb3JtX2NvbnRlbnQuaHRtbCgpKTtpZihmb3JtX2NvbnRlbnQuaGFzQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKSl7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83NCcpLmFkZENsYXNzKCdnZm9ybV92YWxpZGF0aW9uX2Vycm9yJyk7fSBlbHNlIHtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc0JykucmVtb3ZlQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9c2V0VGltZW91dCggZnVuY3Rpb24oKSB7IC8qIGRlbGF5IHRoZSBzY3JvbGwgYnkgNTAgbWlsbGlzZWNvbmRzIHRvIGZpeCBhIGJ1ZyBpbiBjaHJvbWUgKi8galF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83NCcpLm9mZnNldCgpLnRvcCk7IH0sIDUwICk7aWYod2luZG93WydnZm9ybUluaXREYXRlcGlja2VyJ10pIHtnZm9ybUluaXREYXRlcGlja2VyKCk7fWlmKHdpbmRvd1snZ2Zvcm1Jbml0UHJpY2VGaWVsZHMnXSkge2dmb3JtSW5pdFByaWNlRmllbGRzKCk7fXZhciBjdXJyZW50X3BhZ2UgPSBqUXVlcnkoJyNnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzQnKS52YWwoKTtnZm9ybUluaXRTcGlubmVyKCA3NCwgJ2h0dHBzOi8vd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9ncmF2aXR5Zm9ybXMvaW1hZ2VzL3NwaW5uZXIuZ2lmJyApO2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fcGFnZV9sb2FkZWQnLCBbNzQsIGN1cnJlbnRfcGFnZV0pO3dpbmRvd1snZ2Zfc3VibWl0dGluZ183NCddID0gZmFsc2U7fWVsc2UgaWYoIWlzX3JlZGlyZWN0KXt2YXIgY29uZmlybWF0aW9uX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcuR0ZfQUpBWF9QT1NUQkFDSycpLmh0bWwoKTtpZighY29uZmlybWF0aW9uX2NvbnRlbnQpe2NvbmZpcm1hdGlvbl9jb250ZW50ID0gY29udGVudHM7fXNldFRpbWVvdXQoZnVuY3Rpb24oKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc0JykucmVwbGFjZVdpdGgoY29uZmlybWF0aW9uX2NvbnRlbnQpO2pRdWVyeShkb2N1bWVudCkuc2Nyb2xsVG9wKGpRdWVyeSgnI2dmXzc0Jykub2Zmc2V0KCkudG9wKTtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX2NvbmZpcm1hdGlvbl9sb2FkZWQnLCBbNzRdKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfNzQnXSA9IGZhbHNlO30sIDUwKTt9ZWxzZXtqUXVlcnkoJyNnZm9ybV83NCcpLmFwcGVuZChjb250ZW50cyk7aWYod2luZG93WydnZm9ybVJlZGlyZWN0J10pIHtnZm9ybVJlZGlyZWN0KCk7fX1qUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgWzc0LCBjdXJyZW50X3BhZ2VdKTt9ICk7fSApOzwvc2NyaXB0PjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4gaWYodHlwZW9mIGdmX2dsb2JhbCA9PSAndW5kZWZpbmVkJykgdmFyIGdmX2dsb2JhbCA9IHsiZ2ZfY3VycmVuY3lfY29uZmlnIjp7Im5hbWUiOiJVLlMuIERvbGxhciIsInN5bWJvbF9sZWZ0IjoiJCIsInN5bWJvbF9yaWdodCI6IiIsInN5bWJvbF9wYWRkaW5nIjoiIiwidGhvdXNhbmRfc2VwYXJhdG9yIjoiLCIsImRlY2ltYWxfc2VwYXJhdG9yIjoiLiIsImRlY2ltYWxzIjoyfSwiYmFzZV91cmwiOiJodHRwczpcL1wvd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tXC93cC1jb250ZW50XC9wbHVnaW5zXC9ncmF2aXR5Zm9ybXMiLCJudW1iZXJfZm9ybWF0cyI6W10sInNwaW5uZXJVcmwiOiJodHRwczpcL1wvd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tXC93cC1jb250ZW50XC9wbHVnaW5zXC9ncmF2aXR5Zm9ybXNcL2ltYWdlc1wvc3Bpbm5lci5naWYifTtqUXVlcnkoZG9jdW1lbnQpLmJpbmQoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgZnVuY3Rpb24oZXZlbnQsIGZvcm1JZCwgY3VycmVudFBhZ2Upe2lmKGZvcm1JZCA9PSA3NCkge30gfSApO2pRdWVyeShkb2N1bWVudCkuYmluZCgnZ2Zvcm1fcG9zdF9jb25kaXRpb25hbF9sb2dpYycsIGZ1bmN0aW9uKGV2ZW50LCBmb3JtSWQsIGZpZWxkcywgaXNJbml0KXt9ICk7PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wb3N0X3JlbmRlcicsIFs3NCwgMV0pIH0gKTsgPC9zY3JpcHQ+
CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlciBzdXJ2ZXkxNWZvcm1fd3JhcHBlciBnZmN0X3N0eWxpc2hfd3JhcHBlciBnZmN0X25vY29uZmxpY3Rfd3JhcHBlcicgaWQ9J2dmb3JtX3dyYXBwZXJfNzUnID48YSBpZD0nZ2ZfNzUnIGNsYXNzPSdnZm9ybV9hbmNob3InID48L2E+PGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyB0YXJnZXQ9J2dmb3JtX2FqYXhfZnJhbWVfNzUnIGlkPSdnZm9ybV83NScgY2xhc3M9J3N1cnZleTE1Zm9ybSBnZmN0X3N0eWxpc2ggZ2ZjdF9ub2NvbmZsaWN0JyBhY3Rpb249Jy9wcm9wZXJ0eS93aWxsLWJ2aS1tZWFzdXJlLyNnZl83NSc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2JvZHknPjx1bCBpZD0nZ2Zvcm1fZmllbGRzXzc1JyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93Jz48bGkgaWQ9J2ZpZWxkXzc1XzInIGNsYXNzPSdnZmllbGQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSBnc3VydmV5LXN1cnZleS1maWVsZCAnID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgID5SZWFkZXIgU3VydmV5OiBJbiB0aGUgbGFzdCAxMiBtb250aHMsIGhvdyBtYW55IHRpbWVzIGhhdmUgeW91IHRyYXZlbGxlZCBvdmVyc2Vhcz88L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXIgZ2lucHV0X2NvbnRhaW5lcl9yYWRpbyc+PHVsIGNsYXNzPSdnZmllbGRfcmFkaW8nIGlkPSdpbnB1dF83NV8yJz48bGkgY2xhc3M9J2djaG9pY2VfNzVfMl8wJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MmM5YjNjMzZlJyAgaWQ9J2Nob2ljZV83NV8yXzAnIHRhYmluZGV4PScxJyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83NV8yXzAnIGlkPSdsYWJlbF83NV8yXzAnPm5vbmU8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzc1XzJfMSc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTI4MDZkNzBhOScgIGlkPSdjaG9pY2VfNzVfMl8xJyB0YWJpbmRleD0nMicgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzVfMl8xJyBpZD0nbGFiZWxfNzVfMl8xJz4xLTM8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzc1XzJfMic+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTJjYzVjZjJmZCcgIGlkPSdjaG9pY2VfNzVfMl8yJyB0YWJpbmRleD0nMycgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzVfMl8yJyBpZD0nbGFiZWxfNzVfMl8yJz40LTY8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzc1XzJfMyc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTIyNzc3MDYyMycgIGlkPSdjaG9pY2VfNzVfMl8zJyB0YWJpbmRleD0nNCcgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzVfMl8zJyBpZD0nbGFiZWxfNzVfMl8zJz43LTk8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzc1XzJfNCc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTJlNjE3NDg0ZScgIGlkPSdjaG9pY2VfNzVfMl80JyB0YWJpbmRleD0nNScgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzVfMl80JyBpZD0nbGFiZWxfNzVfMl80Jz4xMCBhbmQgbW9yZSB0aW1lczwvbGFiZWw+PC9saT48L3VsPjwvZGl2PjwvbGk+PGxpIGlkPSdmaWVsZF83NV8zJyBjbGFzcz0nZ2ZpZWxkIGdmb3JtX3ZhbGlkYXRpb25fY29udGFpbmVyIGZpZWxkX3N1YmxhYmVsX2JlbG93IGZpZWxkX2Rlc2NyaXB0aW9uX2JlbG93IGdmaWVsZF92aXNpYmlsaXR5XycgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsJyBmb3I9J2lucHV0Xzc1XzMnID5FbWFpbDwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lcic+PGlucHV0IG5hbWU9J2lucHV0XzMnIGlkPSdpbnB1dF83NV8zJyB0eXBlPSd0ZXh0JyB2YWx1ZT0nJyAvPjwvZGl2PjxkaXYgY2xhc3M9J2dmaWVsZF9kZXNjcmlwdGlvbic+VGhpcyBmaWVsZCBpcyBmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcyBhbmQgc2hvdWxkIGJlIGxlZnQgdW5jaGFuZ2VkLjwvZGl2PjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2Zvb3RlciB0b3BfbGFiZWwnPiA8aW5wdXQgdHlwZT0nc3VibWl0JyBpZD0nZ2Zvcm1fc3VibWl0X2J1dHRvbl83NScgY2xhc3M9J2dmb3JtX2J1dHRvbiBidXR0b24nIHZhbHVlPSdTdWJtaXQnIHRhYmluZGV4PSc2JyBvbmNsaWNrPSdpZih3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzUiXSl7cmV0dXJuIGZhbHNlO30gIHdpbmRvd1siZ2Zfc3VibWl0dGluZ183NSJdPXRydWU7ICAnIG9ua2V5cHJlc3M9J2lmKCBldmVudC5rZXlDb2RlID09IDEzICl7IGlmKHdpbmRvd1siZ2Zfc3VibWl0dGluZ183NSJdKXtyZXR1cm4gZmFsc2U7fSB3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzUiXT10cnVlOyAgalF1ZXJ5KCIjZ2Zvcm1fNzUiKS50cmlnZ2VyKCJzdWJtaXQiLFt0cnVlXSk7IH0nIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2dmb3JtX2FqYXgnIHZhbHVlPSdmb3JtX2lkPTc1JmFtcDt0aXRsZT0mYW1wO2Rlc2NyaXB0aW9uPSZhbXA7dGFiaW5kZXg9MScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0naXNfc3VibWl0Xzc1JyB2YWx1ZT0nMScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fc3VibWl0JyB2YWx1ZT0nNzUnIC8+CiAgICAgICAgICAgIAogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV91bmlxdWVfaWQnIHZhbHVlPScnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J3N0YXRlXzc1JyB2YWx1ZT0nV3lKYlhTSXNJak5pTlRBek56WXdZemxoTVRBMllqUTBPV0k0WTJVM05tRTVORGhrTkRsaklsMD0nIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3RhcmdldF9wYWdlX251bWJlcl83NScgaWQ9J2dmb3JtX3RhcmdldF9wYWdlX251bWJlcl83NScgdmFsdWU9JzAnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83NScgaWQ9J2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83NScgdmFsdWU9JzEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2dmb3JtX2ZpZWxkX3ZhbHVlcycgdmFsdWU9JycgLz4KICAgICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aWZyYW1lIHN0eWxlPSdkaXNwbGF5Om5vbmU7d2lkdGg6MHB4O2hlaWdodDowcHg7JyBzcmM9J2Fib3V0OmJsYW5rJyBuYW1lPSdnZm9ybV9hamF4X2ZyYW1lXzc1JyBpZD0nZ2Zvcm1fYWpheF9mcmFtZV83NSc+VGhpcyBpZnJhbWUgY29udGFpbnMgdGhlIGxvZ2ljIHJlcXVpcmVkIHRvIGhhbmRsZSBBSkFYIHBvd2VyZWQgR3Jhdml0eSBGb3Jtcy48L2lmcmFtZT4KICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz5qUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCQpe2dmb3JtSW5pdFNwaW5uZXIoIDc1LCAnaHR0cHM6Ly93d3cuYnZpcHJvcGVydHl5YWNodC5jb20vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5naWYnICk7alF1ZXJ5KCcjZ2Zvcm1fYWpheF9mcmFtZV83NScpLmxvYWQoIGZ1bmN0aW9uKCl7dmFyIGNvbnRlbnRzID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnKicpLmh0bWwoKTt2YXIgaXNfcG9zdGJhY2sgPSBjb250ZW50cy5pbmRleE9mKCdHRl9BSkFYX1BPU1RCQUNLJykgPj0gMDtpZighaXNfcG9zdGJhY2spe3JldHVybjt9dmFyIGZvcm1fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV93cmFwcGVyXzc1Jyk7dmFyIGlzX2NvbmZpcm1hdGlvbiA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV9jb25maXJtYXRpb25fd3JhcHBlcl83NScpLmxlbmd0aCA+IDA7dmFyIGlzX3JlZGlyZWN0ID0gY29udGVudHMuaW5kZXhPZignZ2Zvcm1SZWRpcmVjdCgpeycpID49IDA7dmFyIGlzX2Zvcm0gPSBmb3JtX2NvbnRlbnQubGVuZ3RoID4gMCAmJiAhIGlzX3JlZGlyZWN0ICYmICEgaXNfY29uZmlybWF0aW9uO2lmKGlzX2Zvcm0pe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzUnKS5odG1sKGZvcm1fY29udGVudC5odG1sKCkpO2lmKGZvcm1fY29udGVudC5oYXNDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc1JykuYWRkQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9IGVsc2Uge2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzUnKS5yZW1vdmVDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpO31zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsgLyogZGVsYXkgdGhlIHNjcm9sbCBieSA1MCBtaWxsaXNlY29uZHMgdG8gZml4IGEgYnVnIGluIGNocm9tZSAqLyBqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc1Jykub2Zmc2V0KCkudG9wKTsgfSwgNTAgKTtpZih3aW5kb3dbJ2dmb3JtSW5pdERhdGVwaWNrZXInXSkge2dmb3JtSW5pdERhdGVwaWNrZXIoKTt9aWYod2luZG93WydnZm9ybUluaXRQcmljZUZpZWxkcyddKSB7Z2Zvcm1Jbml0UHJpY2VGaWVsZHMoKTt9dmFyIGN1cnJlbnRfcGFnZSA9IGpRdWVyeSgnI2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83NScpLnZhbCgpO2dmb3JtSW5pdFNwaW5uZXIoIDc1LCAnaHR0cHM6Ly93d3cuYnZpcHJvcGVydHl5YWNodC5jb20vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5naWYnICk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wYWdlX2xvYWRlZCcsIFs3NSwgY3VycmVudF9wYWdlXSk7d2luZG93WydnZl9zdWJtaXR0aW5nXzc1J10gPSBmYWxzZTt9ZWxzZSBpZighaXNfcmVkaXJlY3Qpe3ZhciBjb25maXJtYXRpb25fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJy5HRl9BSkFYX1BPU1RCQUNLJykuaHRtbCgpO2lmKCFjb25maXJtYXRpb25fY29udGVudCl7Y29uZmlybWF0aW9uX2NvbnRlbnQgPSBjb250ZW50czt9c2V0VGltZW91dChmdW5jdGlvbigpe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzUnKS5yZXBsYWNlV2l0aChjb25maXJtYXRpb25fY29udGVudCk7alF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2ZfNzUnKS5vZmZzZXQoKS50b3ApO2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fY29uZmlybWF0aW9uX2xvYWRlZCcsIFs3NV0pO3dpbmRvd1snZ2Zfc3VibWl0dGluZ183NSddID0gZmFsc2U7fSwgNTApO31lbHNle2pRdWVyeSgnI2dmb3JtXzc1JykuYXBwZW5kKGNvbnRlbnRzKTtpZih3aW5kb3dbJ2dmb3JtUmVkaXJlY3QnXSkge2dmb3JtUmVkaXJlY3QoKTt9fWpRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fcG9zdF9yZW5kZXInLCBbNzUsIGN1cnJlbnRfcGFnZV0pO30gKTt9ICk7PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiBpZih0eXBlb2YgZ2ZfZ2xvYmFsID09ICd1bmRlZmluZWQnKSB2YXIgZ2ZfZ2xvYmFsID0geyJnZl9jdXJyZW5jeV9jb25maWciOnsibmFtZSI6IlUuUy4gRG9sbGFyIiwic3ltYm9sX2xlZnQiOiIkIiwic3ltYm9sX3JpZ2h0IjoiIiwic3ltYm9sX3BhZGRpbmciOiIiLCJ0aG91c2FuZF9zZXBhcmF0b3IiOiIsIiwiZGVjaW1hbF9zZXBhcmF0b3IiOiIuIiwiZGVjaW1hbHMiOjJ9LCJiYXNlX3VybCI6Imh0dHBzOlwvXC93d3cuYnZpcHJvcGVydHl5YWNodC5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3JtcyIsIm51bWJlcl9mb3JtYXRzIjpbXSwic3Bpbm5lclVybCI6Imh0dHBzOlwvXC93d3cuYnZpcHJvcGVydHl5YWNodC5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3Jtc1wvaW1hZ2VzXC9zcGlubmVyLmdpZiJ9O2pRdWVyeShkb2N1bWVudCkuYmluZCgnZ2Zvcm1fcG9zdF9yZW5kZXInLCBmdW5jdGlvbihldmVudCwgZm9ybUlkLCBjdXJyZW50UGFnZSl7aWYoZm9ybUlkID09IDc1KSB7fSB9ICk7alF1ZXJ5KGRvY3VtZW50KS5iaW5kKCdnZm9ybV9wb3N0X2NvbmRpdGlvbmFsX2xvZ2ljJywgZnVuY3Rpb24oZXZlbnQsIGZvcm1JZCwgZmllbGRzLCBpc0luaXQpe30gKTs8L3NjcmlwdD48c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+IGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgWzc1LCAxXSkgfSApOyA8L3NjcmlwdD4=
CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlciBzdXJ2ZXkxNWZvcm1fd3JhcHBlciBnZmN0X3N0eWxpc2hfd3JhcHBlciBnZmN0X25vY29uZmxpY3Rfd3JhcHBlcicgaWQ9J2dmb3JtX3dyYXBwZXJfNzYnID48YSBpZD0nZ2ZfNzYnIGNsYXNzPSdnZm9ybV9hbmNob3InID48L2E+PGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyB0YXJnZXQ9J2dmb3JtX2FqYXhfZnJhbWVfNzYnIGlkPSdnZm9ybV83NicgY2xhc3M9J3N1cnZleTE1Zm9ybSBnZmN0X3N0eWxpc2ggZ2ZjdF9ub2NvbmZsaWN0JyBhY3Rpb249Jy9wcm9wZXJ0eS93aWxsLWJ2aS1tZWFzdXJlLyNnZl83Nic+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2JvZHknPjx1bCBpZD0nZ2Zvcm1fZmllbGRzXzc2JyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93Jz48bGkgaWQ9J2ZpZWxkXzc2XzInIGNsYXNzPSdnZmllbGQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSBnc3VydmV5LXN1cnZleS1maWVsZCAnID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgID5SZWFkZXIgU3VydmV5OiBEbyB5b3Ugb3duIG9uZSBvciBtb3JlIHByb3BlcnRpZXM/PC9sYWJlbD48ZGl2IGNsYXNzPSdnaW5wdXRfY29udGFpbmVyIGdpbnB1dF9jb250YWluZXJfcmFkaW8nPjx1bCBjbGFzcz0nZ2ZpZWxkX3JhZGlvJyBpZD0naW5wdXRfNzZfMic+PGxpIGNsYXNzPSdnY2hvaWNlXzc2XzJfMCc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTJjOWIzYzM2ZScgIGlkPSdjaG9pY2VfNzZfMl8wJyB0YWJpbmRleD0nMScgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzZfMl8wJyBpZD0nbGFiZWxfNzZfMl8wJz5ZZXM8L2xhYmVsPjwvbGk+PGxpIGNsYXNzPSdnY2hvaWNlXzc2XzJfMSc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTI4MDZkNzBhOScgIGlkPSdjaG9pY2VfNzZfMl8xJyB0YWJpbmRleD0nMicgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzZfMl8xJyBpZD0nbGFiZWxfNzZfMl8xJz5ObzwvbGFiZWw+PC9saT48L3VsPjwvZGl2PjwvbGk+PGxpIGlkPSdmaWVsZF83Nl8zJyBjbGFzcz0nZ2ZpZWxkIGdmb3JtX3ZhbGlkYXRpb25fY29udGFpbmVyIGZpZWxkX3N1YmxhYmVsX2JlbG93IGZpZWxkX2Rlc2NyaXB0aW9uX2JlbG93IGdmaWVsZF92aXNpYmlsaXR5XycgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsJyBmb3I9J2lucHV0Xzc2XzMnID5FbWFpbDwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lcic+PGlucHV0IG5hbWU9J2lucHV0XzMnIGlkPSdpbnB1dF83Nl8zJyB0eXBlPSd0ZXh0JyB2YWx1ZT0nJyAvPjwvZGl2PjxkaXYgY2xhc3M9J2dmaWVsZF9kZXNjcmlwdGlvbic+VGhpcyBmaWVsZCBpcyBmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcyBhbmQgc2hvdWxkIGJlIGxlZnQgdW5jaGFuZ2VkLjwvZGl2PjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2Zvb3RlciB0b3BfbGFiZWwnPiA8aW5wdXQgdHlwZT0nc3VibWl0JyBpZD0nZ2Zvcm1fc3VibWl0X2J1dHRvbl83NicgY2xhc3M9J2dmb3JtX2J1dHRvbiBidXR0b24nIHZhbHVlPSdTdWJtaXQnIHRhYmluZGV4PSczJyBvbmNsaWNrPSdpZih3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzYiXSl7cmV0dXJuIGZhbHNlO30gIHdpbmRvd1siZ2Zfc3VibWl0dGluZ183NiJdPXRydWU7ICAnIG9ua2V5cHJlc3M9J2lmKCBldmVudC5rZXlDb2RlID09IDEzICl7IGlmKHdpbmRvd1siZ2Zfc3VibWl0dGluZ183NiJdKXtyZXR1cm4gZmFsc2U7fSB3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzYiXT10cnVlOyAgalF1ZXJ5KCIjZ2Zvcm1fNzYiKS50cmlnZ2VyKCJzdWJtaXQiLFt0cnVlXSk7IH0nIC8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2dmb3JtX2FqYXgnIHZhbHVlPSdmb3JtX2lkPTc2JmFtcDt0aXRsZT0mYW1wO2Rlc2NyaXB0aW9uPSZhbXA7dGFiaW5kZXg9MScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0naXNfc3VibWl0Xzc2JyB2YWx1ZT0nMScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fc3VibWl0JyB2YWx1ZT0nNzYnIC8+CiAgICAgICAgICAgIAogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV91bmlxdWVfaWQnIHZhbHVlPScnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J3N0YXRlXzc2JyB2YWx1ZT0nV3lKYlhTSXNJak5pTlRBek56WXdZemxoTVRBMllqUTBPV0k0WTJVM05tRTVORGhrTkRsaklsMD0nIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3RhcmdldF9wYWdlX251bWJlcl83NicgaWQ9J2dmb3JtX3RhcmdldF9wYWdlX251bWJlcl83NicgdmFsdWU9JzAnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83NicgaWQ9J2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83NicgdmFsdWU9JzEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2dmb3JtX2ZpZWxkX3ZhbHVlcycgdmFsdWU9JycgLz4KICAgICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aWZyYW1lIHN0eWxlPSdkaXNwbGF5Om5vbmU7d2lkdGg6MHB4O2hlaWdodDowcHg7JyBzcmM9J2Fib3V0OmJsYW5rJyBuYW1lPSdnZm9ybV9hamF4X2ZyYW1lXzc2JyBpZD0nZ2Zvcm1fYWpheF9mcmFtZV83Nic+VGhpcyBpZnJhbWUgY29udGFpbnMgdGhlIGxvZ2ljIHJlcXVpcmVkIHRvIGhhbmRsZSBBSkFYIHBvd2VyZWQgR3Jhdml0eSBGb3Jtcy48L2lmcmFtZT4KICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz5qUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCQpe2dmb3JtSW5pdFNwaW5uZXIoIDc2LCAnaHR0cHM6Ly93d3cuYnZpcHJvcGVydHl5YWNodC5jb20vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5naWYnICk7alF1ZXJ5KCcjZ2Zvcm1fYWpheF9mcmFtZV83NicpLmxvYWQoIGZ1bmN0aW9uKCl7dmFyIGNvbnRlbnRzID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnKicpLmh0bWwoKTt2YXIgaXNfcG9zdGJhY2sgPSBjb250ZW50cy5pbmRleE9mKCdHRl9BSkFYX1BPU1RCQUNLJykgPj0gMDtpZighaXNfcG9zdGJhY2spe3JldHVybjt9dmFyIGZvcm1fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV93cmFwcGVyXzc2Jyk7dmFyIGlzX2NvbmZpcm1hdGlvbiA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV9jb25maXJtYXRpb25fd3JhcHBlcl83NicpLmxlbmd0aCA+IDA7dmFyIGlzX3JlZGlyZWN0ID0gY29udGVudHMuaW5kZXhPZignZ2Zvcm1SZWRpcmVjdCgpeycpID49IDA7dmFyIGlzX2Zvcm0gPSBmb3JtX2NvbnRlbnQubGVuZ3RoID4gMCAmJiAhIGlzX3JlZGlyZWN0ICYmICEgaXNfY29uZmlybWF0aW9uO2lmKGlzX2Zvcm0pe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzYnKS5odG1sKGZvcm1fY29udGVudC5odG1sKCkpO2lmKGZvcm1fY29udGVudC5oYXNDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc2JykuYWRkQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9IGVsc2Uge2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzYnKS5yZW1vdmVDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpO31zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsgLyogZGVsYXkgdGhlIHNjcm9sbCBieSA1MCBtaWxsaXNlY29uZHMgdG8gZml4IGEgYnVnIGluIGNocm9tZSAqLyBqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc2Jykub2Zmc2V0KCkudG9wKTsgfSwgNTAgKTtpZih3aW5kb3dbJ2dmb3JtSW5pdERhdGVwaWNrZXInXSkge2dmb3JtSW5pdERhdGVwaWNrZXIoKTt9aWYod2luZG93WydnZm9ybUluaXRQcmljZUZpZWxkcyddKSB7Z2Zvcm1Jbml0UHJpY2VGaWVsZHMoKTt9dmFyIGN1cnJlbnRfcGFnZSA9IGpRdWVyeSgnI2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83NicpLnZhbCgpO2dmb3JtSW5pdFNwaW5uZXIoIDc2LCAnaHR0cHM6Ly93d3cuYnZpcHJvcGVydHl5YWNodC5jb20vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5naWYnICk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wYWdlX2xvYWRlZCcsIFs3NiwgY3VycmVudF9wYWdlXSk7d2luZG93WydnZl9zdWJtaXR0aW5nXzc2J10gPSBmYWxzZTt9ZWxzZSBpZighaXNfcmVkaXJlY3Qpe3ZhciBjb25maXJtYXRpb25fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJy5HRl9BSkFYX1BPU1RCQUNLJykuaHRtbCgpO2lmKCFjb25maXJtYXRpb25fY29udGVudCl7Y29uZmlybWF0aW9uX2NvbnRlbnQgPSBjb250ZW50czt9c2V0VGltZW91dChmdW5jdGlvbigpe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfNzYnKS5yZXBsYWNlV2l0aChjb25maXJtYXRpb25fY29udGVudCk7alF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2ZfNzYnKS5vZmZzZXQoKS50b3ApO2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fY29uZmlybWF0aW9uX2xvYWRlZCcsIFs3Nl0pO3dpbmRvd1snZ2Zfc3VibWl0dGluZ183NiddID0gZmFsc2U7fSwgNTApO31lbHNle2pRdWVyeSgnI2dmb3JtXzc2JykuYXBwZW5kKGNvbnRlbnRzKTtpZih3aW5kb3dbJ2dmb3JtUmVkaXJlY3QnXSkge2dmb3JtUmVkaXJlY3QoKTt9fWpRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fcG9zdF9yZW5kZXInLCBbNzYsIGN1cnJlbnRfcGFnZV0pO30gKTt9ICk7PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiBpZih0eXBlb2YgZ2ZfZ2xvYmFsID09ICd1bmRlZmluZWQnKSB2YXIgZ2ZfZ2xvYmFsID0geyJnZl9jdXJyZW5jeV9jb25maWciOnsibmFtZSI6IlUuUy4gRG9sbGFyIiwic3ltYm9sX2xlZnQiOiIkIiwic3ltYm9sX3JpZ2h0IjoiIiwic3ltYm9sX3BhZGRpbmciOiIiLCJ0aG91c2FuZF9zZXBhcmF0b3IiOiIsIiwiZGVjaW1hbF9zZXBhcmF0b3IiOiIuIiwiZGVjaW1hbHMiOjJ9LCJiYXNlX3VybCI6Imh0dHBzOlwvXC93d3cuYnZpcHJvcGVydHl5YWNodC5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3JtcyIsIm51bWJlcl9mb3JtYXRzIjpbXSwic3Bpbm5lclVybCI6Imh0dHBzOlwvXC93d3cuYnZpcHJvcGVydHl5YWNodC5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3Jtc1wvaW1hZ2VzXC9zcGlubmVyLmdpZiJ9O2pRdWVyeShkb2N1bWVudCkuYmluZCgnZ2Zvcm1fcG9zdF9yZW5kZXInLCBmdW5jdGlvbihldmVudCwgZm9ybUlkLCBjdXJyZW50UGFnZSl7aWYoZm9ybUlkID09IDc2KSB7fSB9ICk7alF1ZXJ5KGRvY3VtZW50KS5iaW5kKCdnZm9ybV9wb3N0X2NvbmRpdGlvbmFsX2xvZ2ljJywgZnVuY3Rpb24oZXZlbnQsIGZvcm1JZCwgZmllbGRzLCBpc0luaXQpe30gKTs8L3NjcmlwdD48c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+IGpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgWzc2LCAxXSkgfSApOyA8L3NjcmlwdD4=
CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlciBzdXJ2ZXkxNWZvcm1fd3JhcHBlciBnZmN0X3N0eWxpc2hfd3JhcHBlciBnZmN0X25vY29uZmxpY3Rfd3JhcHBlcicgaWQ9J2dmb3JtX3dyYXBwZXJfNzcnID48YSBpZD0nZ2ZfNzcnIGNsYXNzPSdnZm9ybV9hbmNob3InID48L2E+PGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyB0YXJnZXQ9J2dmb3JtX2FqYXhfZnJhbWVfNzcnIGlkPSdnZm9ybV83NycgY2xhc3M9J3N1cnZleTE1Zm9ybSBnZmN0X3N0eWxpc2ggZ2ZjdF9ub2NvbmZsaWN0JyBhY3Rpb249Jy9wcm9wZXJ0eS93aWxsLWJ2aS1tZWFzdXJlLyNnZl83Nyc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2JvZHknPjx1bCBpZD0nZ2Zvcm1fZmllbGRzXzc3JyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93Jz48bGkgaWQ9J2ZpZWxkXzc3XzInIGNsYXNzPSdnZmllbGQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSBnc3VydmV5LXN1cnZleS1maWVsZCAnID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgID5SZWFkZXIgU3VydmV5OiBEbyB5b3Ugb3duIG9uZSBvciBtb3JlIGJvYXRzPzwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX3JhZGlvJz48dWwgY2xhc3M9J2dmaWVsZF9yYWRpbycgaWQ9J2lucHV0Xzc3XzInPjxsaSBjbGFzcz0nZ2Nob2ljZV83N18yXzAnPjxpbnB1dCBuYW1lPSdpbnB1dF8yJyB0eXBlPSdyYWRpbycgdmFsdWU9J2dzdXJ2ZXkyYzliM2MzNmUnICBpZD0nY2hvaWNlXzc3XzJfMCcgdGFiaW5kZXg9JzEnICAgIC8+PGxhYmVsIGZvcj0nY2hvaWNlXzc3XzJfMCcgaWQ9J2xhYmVsXzc3XzJfMCc+WWVzPC9sYWJlbD48L2xpPjxsaSBjbGFzcz0nZ2Nob2ljZV83N18yXzEnPjxpbnB1dCBuYW1lPSdpbnB1dF8yJyB0eXBlPSdyYWRpbycgdmFsdWU9J2dzdXJ2ZXkyODA2ZDcwYTknICBpZD0nY2hvaWNlXzc3XzJfMScgdGFiaW5kZXg9JzInICAgIC8+PGxhYmVsIGZvcj0nY2hvaWNlXzc3XzJfMScgaWQ9J2xhYmVsXzc3XzJfMSc+Tm88L2xhYmVsPjwvbGk+PC91bD48L2Rpdj48L2xpPjxsaSBpZD0nZmllbGRfNzdfMycgY2xhc3M9J2dmaWVsZCBnZm9ybV92YWxpZGF0aW9uX2NvbnRhaW5lciBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV8nID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgZm9yPSdpbnB1dF83N18zJyA+Q29tbWVudHM8L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXInPjxpbnB1dCBuYW1lPSdpbnB1dF8zJyBpZD0naW5wdXRfNzdfMycgdHlwZT0ndGV4dCcgdmFsdWU9JycgLz48L2Rpdj48ZGl2IGNsYXNzPSdnZmllbGRfZGVzY3JpcHRpb24nPlRoaXMgZmllbGQgaXMgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMgYW5kIHNob3VsZCBiZSBsZWZ0IHVuY2hhbmdlZC48L2Rpdj48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybV9mb290ZXIgdG9wX2xhYmVsJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgaWQ9J2dmb3JtX3N1Ym1pdF9idXR0b25fNzcnIGNsYXNzPSdnZm9ybV9idXR0b24gYnV0dG9uJyB2YWx1ZT0nU3VibWl0JyB0YWJpbmRleD0nMycgb25jbGljaz0naWYod2luZG93WyJnZl9zdWJtaXR0aW5nXzc3Il0pe3JldHVybiBmYWxzZTt9ICB3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzciXT10cnVlOyAgJyBvbmtleXByZXNzPSdpZiggZXZlbnQua2V5Q29kZSA9PSAxMyApeyBpZih3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzciXSl7cmV0dXJuIGZhbHNlO30gd2luZG93WyJnZl9zdWJtaXR0aW5nXzc3Il09dHJ1ZTsgIGpRdWVyeSgiI2dmb3JtXzc3IikudHJpZ2dlcigic3VibWl0IixbdHJ1ZV0pOyB9JyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdnZm9ybV9hamF4JyB2YWx1ZT0nZm9ybV9pZD03NyZhbXA7dGl0bGU9JmFtcDtkZXNjcmlwdGlvbj0mYW1wO3RhYmluZGV4PTEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2lzX3N1Ym1pdF83NycgdmFsdWU9JzEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3N1Ym1pdCcgdmFsdWU9Jzc3JyAvPgogICAgICAgICAgICAKICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fdW5pcXVlX2lkJyB2YWx1ZT0nJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdzdGF0ZV83NycgdmFsdWU9J1d5SmJYU0lzSWpOaU5UQXpOell3WXpsaE1UQTJZalEwT1dJNFkyVTNObUU1TkRoa05EbGpJbDA9JyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV90YXJnZXRfcGFnZV9udW1iZXJfNzcnIGlkPSdnZm9ybV90YXJnZXRfcGFnZV9udW1iZXJfNzcnIHZhbHVlPScwJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzcnIGlkPSdnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzcnIHZhbHVlPScxJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdnZm9ybV9maWVsZF92YWx1ZXMnIHZhbHVlPScnIC8+CiAgICAgICAgICAgIAogICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlmcmFtZSBzdHlsZT0nZGlzcGxheTpub25lO3dpZHRoOjBweDtoZWlnaHQ6MHB4Oycgc3JjPSdhYm91dDpibGFuaycgbmFtZT0nZ2Zvcm1fYWpheF9mcmFtZV83NycgaWQ9J2dmb3JtX2FqYXhfZnJhbWVfNzcnPlRoaXMgaWZyYW1lIGNvbnRhaW5zIHRoZSBsb2dpYyByZXF1aXJlZCB0byBoYW5kbGUgQUpBWCBwb3dlcmVkIEdyYXZpdHkgRm9ybXMuPC9pZnJhbWU+CiAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKXtnZm9ybUluaXRTcGlubmVyKCA3NywgJ2h0dHBzOi8vd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9ncmF2aXR5Zm9ybXMvaW1hZ2VzL3NwaW5uZXIuZ2lmJyApO2pRdWVyeSgnI2dmb3JtX2FqYXhfZnJhbWVfNzcnKS5sb2FkKCBmdW5jdGlvbigpe3ZhciBjb250ZW50cyA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyonKS5odG1sKCk7dmFyIGlzX3Bvc3RiYWNrID0gY29udGVudHMuaW5kZXhPZignR0ZfQUpBWF9QT1NUQkFDSycpID49IDA7aWYoIWlzX3Bvc3RiYWNrKXtyZXR1cm47fXZhciBmb3JtX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcjZ2Zvcm1fd3JhcHBlcl83NycpO3ZhciBpc19jb25maXJtYXRpb24gPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcjZ2Zvcm1fY29uZmlybWF0aW9uX3dyYXBwZXJfNzcnKS5sZW5ndGggPiAwO3ZhciBpc19yZWRpcmVjdCA9IGNvbnRlbnRzLmluZGV4T2YoJ2dmb3JtUmVkaXJlY3QoKXsnKSA+PSAwO3ZhciBpc19mb3JtID0gZm9ybV9jb250ZW50Lmxlbmd0aCA+IDAgJiYgISBpc19yZWRpcmVjdCAmJiAhIGlzX2NvbmZpcm1hdGlvbjtpZihpc19mb3JtKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc3JykuaHRtbChmb3JtX2NvbnRlbnQuaHRtbCgpKTtpZihmb3JtX2NvbnRlbnQuaGFzQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKSl7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83NycpLmFkZENsYXNzKCdnZm9ybV92YWxpZGF0aW9uX2Vycm9yJyk7fSBlbHNlIHtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc3JykucmVtb3ZlQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9c2V0VGltZW91dCggZnVuY3Rpb24oKSB7IC8qIGRlbGF5IHRoZSBzY3JvbGwgYnkgNTAgbWlsbGlzZWNvbmRzIHRvIGZpeCBhIGJ1ZyBpbiBjaHJvbWUgKi8galF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83NycpLm9mZnNldCgpLnRvcCk7IH0sIDUwICk7aWYod2luZG93WydnZm9ybUluaXREYXRlcGlja2VyJ10pIHtnZm9ybUluaXREYXRlcGlja2VyKCk7fWlmKHdpbmRvd1snZ2Zvcm1Jbml0UHJpY2VGaWVsZHMnXSkge2dmb3JtSW5pdFByaWNlRmllbGRzKCk7fXZhciBjdXJyZW50X3BhZ2UgPSBqUXVlcnkoJyNnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzcnKS52YWwoKTtnZm9ybUluaXRTcGlubmVyKCA3NywgJ2h0dHBzOi8vd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9ncmF2aXR5Zm9ybXMvaW1hZ2VzL3NwaW5uZXIuZ2lmJyApO2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fcGFnZV9sb2FkZWQnLCBbNzcsIGN1cnJlbnRfcGFnZV0pO3dpbmRvd1snZ2Zfc3VibWl0dGluZ183NyddID0gZmFsc2U7fWVsc2UgaWYoIWlzX3JlZGlyZWN0KXt2YXIgY29uZmlybWF0aW9uX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcuR0ZfQUpBWF9QT1NUQkFDSycpLmh0bWwoKTtpZighY29uZmlybWF0aW9uX2NvbnRlbnQpe2NvbmZpcm1hdGlvbl9jb250ZW50ID0gY29udGVudHM7fXNldFRpbWVvdXQoZnVuY3Rpb24oKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc3JykucmVwbGFjZVdpdGgoY29uZmlybWF0aW9uX2NvbnRlbnQpO2pRdWVyeShkb2N1bWVudCkuc2Nyb2xsVG9wKGpRdWVyeSgnI2dmXzc3Jykub2Zmc2V0KCkudG9wKTtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX2NvbmZpcm1hdGlvbl9sb2FkZWQnLCBbNzddKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfNzcnXSA9IGZhbHNlO30sIDUwKTt9ZWxzZXtqUXVlcnkoJyNnZm9ybV83NycpLmFwcGVuZChjb250ZW50cyk7aWYod2luZG93WydnZm9ybVJlZGlyZWN0J10pIHtnZm9ybVJlZGlyZWN0KCk7fX1qUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgWzc3LCBjdXJyZW50X3BhZ2VdKTt9ICk7fSApOzwvc2NyaXB0PjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4gaWYodHlwZW9mIGdmX2dsb2JhbCA9PSAndW5kZWZpbmVkJykgdmFyIGdmX2dsb2JhbCA9IHsiZ2ZfY3VycmVuY3lfY29uZmlnIjp7Im5hbWUiOiJVLlMuIERvbGxhciIsInN5bWJvbF9sZWZ0IjoiJCIsInN5bWJvbF9yaWdodCI6IiIsInN5bWJvbF9wYWRkaW5nIjoiIiwidGhvdXNhbmRfc2VwYXJhdG9yIjoiLCIsImRlY2ltYWxfc2VwYXJhdG9yIjoiLiIsImRlY2ltYWxzIjoyfSwiYmFzZV91cmwiOiJodHRwczpcL1wvd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tXC93cC1jb250ZW50XC9wbHVnaW5zXC9ncmF2aXR5Zm9ybXMiLCJudW1iZXJfZm9ybWF0cyI6W10sInNwaW5uZXJVcmwiOiJodHRwczpcL1wvd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tXC93cC1jb250ZW50XC9wbHVnaW5zXC9ncmF2aXR5Zm9ybXNcL2ltYWdlc1wvc3Bpbm5lci5naWYifTtqUXVlcnkoZG9jdW1lbnQpLmJpbmQoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgZnVuY3Rpb24oZXZlbnQsIGZvcm1JZCwgY3VycmVudFBhZ2Upe2lmKGZvcm1JZCA9PSA3Nykge30gfSApO2pRdWVyeShkb2N1bWVudCkuYmluZCgnZ2Zvcm1fcG9zdF9jb25kaXRpb25hbF9sb2dpYycsIGZ1bmN0aW9uKGV2ZW50LCBmb3JtSWQsIGZpZWxkcywgaXNJbml0KXt9ICk7PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wb3N0X3JlbmRlcicsIFs3NywgMV0pIH0gKTsgPC9zY3JpcHQ+
CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlciBzdXJ2ZXkxNWZvcm1fd3JhcHBlciBnZmN0X3N0eWxpc2hfd3JhcHBlciBnZmN0X25vY29uZmxpY3Rfd3JhcHBlcicgaWQ9J2dmb3JtX3dyYXBwZXJfNzgnID48YSBpZD0nZ2ZfNzgnIGNsYXNzPSdnZm9ybV9hbmNob3InID48L2E+PGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyB0YXJnZXQ9J2dmb3JtX2FqYXhfZnJhbWVfNzgnIGlkPSdnZm9ybV83OCcgY2xhc3M9J3N1cnZleTE1Zm9ybSBnZmN0X3N0eWxpc2ggZ2ZjdF9ub2NvbmZsaWN0JyBhY3Rpb249Jy9wcm9wZXJ0eS93aWxsLWJ2aS1tZWFzdXJlLyNnZl83OCc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2JvZHknPjx1bCBpZD0nZ2Zvcm1fZmllbGRzXzc4JyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93Jz48bGkgaWQ9J2ZpZWxkXzc4XzInIGNsYXNzPSdnZmllbGQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSBnc3VydmV5LXN1cnZleS1maWVsZCAnID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgID5SZWFkZXIgU3VydmV5OiBJbiB0aGUgcGFzdCAzMCBkYXlzLCBob3cgb2Z0ZW4gZGlkIHlvdSBkaW5lIG91dCBhdCBhIHJlc3RhdXJhbnQ/PC9sYWJlbD48ZGl2IGNsYXNzPSdnaW5wdXRfY29udGFpbmVyIGdpbnB1dF9jb250YWluZXJfcmFkaW8nPjx1bCBjbGFzcz0nZ2ZpZWxkX3JhZGlvJyBpZD0naW5wdXRfNzhfMic+PGxpIGNsYXNzPSdnY2hvaWNlXzc4XzJfMCc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTJjOWIzYzM2ZScgIGlkPSdjaG9pY2VfNzhfMl8wJyB0YWJpbmRleD0nMScgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzhfMl8wJyBpZD0nbGFiZWxfNzhfMl8wJz5OZXZlcjwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzhfMl8xJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjgwNmQ3MGE5JyAgaWQ9J2Nob2ljZV83OF8yXzEnIHRhYmluZGV4PScyJyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83OF8yXzEnIGlkPSdsYWJlbF83OF8yXzEnPjEtMyB0aW1lczwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzhfMl8yJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjQzYTE3MjZhJyAgaWQ9J2Nob2ljZV83OF8yXzInIHRhYmluZGV4PSczJyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83OF8yXzInIGlkPSdsYWJlbF83OF8yXzInPjQtNiB0aW1lczwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzhfMl8zJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjRmZDI1NDIxJyAgaWQ9J2Nob2ljZV83OF8yXzMnIHRhYmluZGV4PSc0JyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83OF8yXzMnIGlkPSdsYWJlbF83OF8yXzMnPjctOSB0aW1lczwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzhfMl80Jz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjMyYzFkNWJlJyAgaWQ9J2Nob2ljZV83OF8yXzQnIHRhYmluZGV4PSc1JyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83OF8yXzQnIGlkPSdsYWJlbF83OF8yXzQnPjEwIG9yIG1vcmUgdGltZXM8L2xhYmVsPjwvbGk+PC91bD48L2Rpdj48L2xpPjxsaSBpZD0nZmllbGRfNzhfMycgY2xhc3M9J2dmaWVsZCBnZm9ybV92YWxpZGF0aW9uX2NvbnRhaW5lciBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV8nID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgZm9yPSdpbnB1dF83OF8zJyA+Q29tbWVudHM8L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXInPjxpbnB1dCBuYW1lPSdpbnB1dF8zJyBpZD0naW5wdXRfNzhfMycgdHlwZT0ndGV4dCcgdmFsdWU9JycgLz48L2Rpdj48ZGl2IGNsYXNzPSdnZmllbGRfZGVzY3JpcHRpb24nPlRoaXMgZmllbGQgaXMgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMgYW5kIHNob3VsZCBiZSBsZWZ0IHVuY2hhbmdlZC48L2Rpdj48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybV9mb290ZXIgdG9wX2xhYmVsJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgaWQ9J2dmb3JtX3N1Ym1pdF9idXR0b25fNzgnIGNsYXNzPSdnZm9ybV9idXR0b24gYnV0dG9uJyB2YWx1ZT0nU3VibWl0JyB0YWJpbmRleD0nNicgb25jbGljaz0naWYod2luZG93WyJnZl9zdWJtaXR0aW5nXzc4Il0pe3JldHVybiBmYWxzZTt9ICB3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzgiXT10cnVlOyAgJyBvbmtleXByZXNzPSdpZiggZXZlbnQua2V5Q29kZSA9PSAxMyApeyBpZih3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzgiXSl7cmV0dXJuIGZhbHNlO30gd2luZG93WyJnZl9zdWJtaXR0aW5nXzc4Il09dHJ1ZTsgIGpRdWVyeSgiI2dmb3JtXzc4IikudHJpZ2dlcigic3VibWl0IixbdHJ1ZV0pOyB9JyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdnZm9ybV9hamF4JyB2YWx1ZT0nZm9ybV9pZD03OCZhbXA7dGl0bGU9JmFtcDtkZXNjcmlwdGlvbj0mYW1wO3RhYmluZGV4PTEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2lzX3N1Ym1pdF83OCcgdmFsdWU9JzEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3N1Ym1pdCcgdmFsdWU9Jzc4JyAvPgogICAgICAgICAgICAKICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fdW5pcXVlX2lkJyB2YWx1ZT0nJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdzdGF0ZV83OCcgdmFsdWU9J1d5SmJYU0lzSWpOaU5UQXpOell3WXpsaE1UQTJZalEwT1dJNFkyVTNObUU1TkRoa05EbGpJbDA9JyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV90YXJnZXRfcGFnZV9udW1iZXJfNzgnIGlkPSdnZm9ybV90YXJnZXRfcGFnZV9udW1iZXJfNzgnIHZhbHVlPScwJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzgnIGlkPSdnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzgnIHZhbHVlPScxJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdnZm9ybV9maWVsZF92YWx1ZXMnIHZhbHVlPScnIC8+CiAgICAgICAgICAgIAogICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlmcmFtZSBzdHlsZT0nZGlzcGxheTpub25lO3dpZHRoOjBweDtoZWlnaHQ6MHB4Oycgc3JjPSdhYm91dDpibGFuaycgbmFtZT0nZ2Zvcm1fYWpheF9mcmFtZV83OCcgaWQ9J2dmb3JtX2FqYXhfZnJhbWVfNzgnPlRoaXMgaWZyYW1lIGNvbnRhaW5zIHRoZSBsb2dpYyByZXF1aXJlZCB0byBoYW5kbGUgQUpBWCBwb3dlcmVkIEdyYXZpdHkgRm9ybXMuPC9pZnJhbWU+CiAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKXtnZm9ybUluaXRTcGlubmVyKCA3OCwgJ2h0dHBzOi8vd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9ncmF2aXR5Zm9ybXMvaW1hZ2VzL3NwaW5uZXIuZ2lmJyApO2pRdWVyeSgnI2dmb3JtX2FqYXhfZnJhbWVfNzgnKS5sb2FkKCBmdW5jdGlvbigpe3ZhciBjb250ZW50cyA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyonKS5odG1sKCk7dmFyIGlzX3Bvc3RiYWNrID0gY29udGVudHMuaW5kZXhPZignR0ZfQUpBWF9QT1NUQkFDSycpID49IDA7aWYoIWlzX3Bvc3RiYWNrKXtyZXR1cm47fXZhciBmb3JtX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcjZ2Zvcm1fd3JhcHBlcl83OCcpO3ZhciBpc19jb25maXJtYXRpb24gPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcjZ2Zvcm1fY29uZmlybWF0aW9uX3dyYXBwZXJfNzgnKS5sZW5ndGggPiAwO3ZhciBpc19yZWRpcmVjdCA9IGNvbnRlbnRzLmluZGV4T2YoJ2dmb3JtUmVkaXJlY3QoKXsnKSA+PSAwO3ZhciBpc19mb3JtID0gZm9ybV9jb250ZW50Lmxlbmd0aCA+IDAgJiYgISBpc19yZWRpcmVjdCAmJiAhIGlzX2NvbmZpcm1hdGlvbjtpZihpc19mb3JtKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc4JykuaHRtbChmb3JtX2NvbnRlbnQuaHRtbCgpKTtpZihmb3JtX2NvbnRlbnQuaGFzQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKSl7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83OCcpLmFkZENsYXNzKCdnZm9ybV92YWxpZGF0aW9uX2Vycm9yJyk7fSBlbHNlIHtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc4JykucmVtb3ZlQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9c2V0VGltZW91dCggZnVuY3Rpb24oKSB7IC8qIGRlbGF5IHRoZSBzY3JvbGwgYnkgNTAgbWlsbGlzZWNvbmRzIHRvIGZpeCBhIGJ1ZyBpbiBjaHJvbWUgKi8galF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83OCcpLm9mZnNldCgpLnRvcCk7IH0sIDUwICk7aWYod2luZG93WydnZm9ybUluaXREYXRlcGlja2VyJ10pIHtnZm9ybUluaXREYXRlcGlja2VyKCk7fWlmKHdpbmRvd1snZ2Zvcm1Jbml0UHJpY2VGaWVsZHMnXSkge2dmb3JtSW5pdFByaWNlRmllbGRzKCk7fXZhciBjdXJyZW50X3BhZ2UgPSBqUXVlcnkoJyNnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzgnKS52YWwoKTtnZm9ybUluaXRTcGlubmVyKCA3OCwgJ2h0dHBzOi8vd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9ncmF2aXR5Zm9ybXMvaW1hZ2VzL3NwaW5uZXIuZ2lmJyApO2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fcGFnZV9sb2FkZWQnLCBbNzgsIGN1cnJlbnRfcGFnZV0pO3dpbmRvd1snZ2Zfc3VibWl0dGluZ183OCddID0gZmFsc2U7fWVsc2UgaWYoIWlzX3JlZGlyZWN0KXt2YXIgY29uZmlybWF0aW9uX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcuR0ZfQUpBWF9QT1NUQkFDSycpLmh0bWwoKTtpZighY29uZmlybWF0aW9uX2NvbnRlbnQpe2NvbmZpcm1hdGlvbl9jb250ZW50ID0gY29udGVudHM7fXNldFRpbWVvdXQoZnVuY3Rpb24oKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc4JykucmVwbGFjZVdpdGgoY29uZmlybWF0aW9uX2NvbnRlbnQpO2pRdWVyeShkb2N1bWVudCkuc2Nyb2xsVG9wKGpRdWVyeSgnI2dmXzc4Jykub2Zmc2V0KCkudG9wKTtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX2NvbmZpcm1hdGlvbl9sb2FkZWQnLCBbNzhdKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfNzgnXSA9IGZhbHNlO30sIDUwKTt9ZWxzZXtqUXVlcnkoJyNnZm9ybV83OCcpLmFwcGVuZChjb250ZW50cyk7aWYod2luZG93WydnZm9ybVJlZGlyZWN0J10pIHtnZm9ybVJlZGlyZWN0KCk7fX1qUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgWzc4LCBjdXJyZW50X3BhZ2VdKTt9ICk7fSApOzwvc2NyaXB0PjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4gaWYodHlwZW9mIGdmX2dsb2JhbCA9PSAndW5kZWZpbmVkJykgdmFyIGdmX2dsb2JhbCA9IHsiZ2ZfY3VycmVuY3lfY29uZmlnIjp7Im5hbWUiOiJVLlMuIERvbGxhciIsInN5bWJvbF9sZWZ0IjoiJCIsInN5bWJvbF9yaWdodCI6IiIsInN5bWJvbF9wYWRkaW5nIjoiIiwidGhvdXNhbmRfc2VwYXJhdG9yIjoiLCIsImRlY2ltYWxfc2VwYXJhdG9yIjoiLiIsImRlY2ltYWxzIjoyfSwiYmFzZV91cmwiOiJodHRwczpcL1wvd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tXC93cC1jb250ZW50XC9wbHVnaW5zXC9ncmF2aXR5Zm9ybXMiLCJudW1iZXJfZm9ybWF0cyI6W10sInNwaW5uZXJVcmwiOiJodHRwczpcL1wvd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tXC93cC1jb250ZW50XC9wbHVnaW5zXC9ncmF2aXR5Zm9ybXNcL2ltYWdlc1wvc3Bpbm5lci5naWYifTtqUXVlcnkoZG9jdW1lbnQpLmJpbmQoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgZnVuY3Rpb24oZXZlbnQsIGZvcm1JZCwgY3VycmVudFBhZ2Upe2lmKGZvcm1JZCA9PSA3OCkge30gfSApO2pRdWVyeShkb2N1bWVudCkuYmluZCgnZ2Zvcm1fcG9zdF9jb25kaXRpb25hbF9sb2dpYycsIGZ1bmN0aW9uKGV2ZW50LCBmb3JtSWQsIGZpZWxkcywgaXNJbml0KXt9ICk7PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wb3N0X3JlbmRlcicsIFs3OCwgMV0pIH0gKTsgPC9zY3JpcHQ+
CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlciBzdXJ2ZXkxNWZvcm1fd3JhcHBlciBnZmN0X3N0eWxpc2hfd3JhcHBlciBnZmN0X25vY29uZmxpY3Rfd3JhcHBlcicgaWQ9J2dmb3JtX3dyYXBwZXJfNzknID48YSBpZD0nZ2ZfNzknIGNsYXNzPSdnZm9ybV9hbmNob3InID48L2E+PGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyB0YXJnZXQ9J2dmb3JtX2FqYXhfZnJhbWVfNzknIGlkPSdnZm9ybV83OScgY2xhc3M9J3N1cnZleTE1Zm9ybSBnZmN0X3N0eWxpc2ggZ2ZjdF9ub2NvbmZsaWN0JyBhY3Rpb249Jy9wcm9wZXJ0eS93aWxsLWJ2aS1tZWFzdXJlLyNnZl83OSc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2JvZHknPjx1bCBpZD0nZ2Zvcm1fZmllbGRzXzc5JyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93Jz48bGkgaWQ9J2ZpZWxkXzc5XzInIGNsYXNzPSdnZmllbGQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSBnc3VydmV5LXN1cnZleS1maWVsZCAnID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgID5SZWFkZXIgU3VydmV5OiBJbiB0aGUgcGFzdCAzMCBkYXlzLCBob3cgb2Z0ZW4gZGlkIHlvdSBlbnRlcnRhaW4gZ3Vlc3RzIGF0IGhvbWU/PC9sYWJlbD48ZGl2IGNsYXNzPSdnaW5wdXRfY29udGFpbmVyIGdpbnB1dF9jb250YWluZXJfcmFkaW8nPjx1bCBjbGFzcz0nZ2ZpZWxkX3JhZGlvJyBpZD0naW5wdXRfNzlfMic+PGxpIGNsYXNzPSdnY2hvaWNlXzc5XzJfMCc+PGlucHV0IG5hbWU9J2lucHV0XzInIHR5cGU9J3JhZGlvJyB2YWx1ZT0nZ3N1cnZleTJjOWIzYzM2ZScgIGlkPSdjaG9pY2VfNzlfMl8wJyB0YWJpbmRleD0nMScgICAgLz48bGFiZWwgZm9yPSdjaG9pY2VfNzlfMl8wJyBpZD0nbGFiZWxfNzlfMl8wJz5OZXZlcjwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzlfMl8xJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjgwNmQ3MGE5JyAgaWQ9J2Nob2ljZV83OV8yXzEnIHRhYmluZGV4PScyJyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83OV8yXzEnIGlkPSdsYWJlbF83OV8yXzEnPjEtMyB0aW1lczwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzlfMl8yJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjQzYTE3MjZhJyAgaWQ9J2Nob2ljZV83OV8yXzInIHRhYmluZGV4PSczJyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83OV8yXzInIGlkPSdsYWJlbF83OV8yXzInPjQtNiB0aW1lczwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzlfMl8zJz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjRmZDI1NDIxJyAgaWQ9J2Nob2ljZV83OV8yXzMnIHRhYmluZGV4PSc0JyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83OV8yXzMnIGlkPSdsYWJlbF83OV8yXzMnPjctOSB0aW1lczwvbGFiZWw+PC9saT48bGkgY2xhc3M9J2djaG9pY2VfNzlfMl80Jz48aW5wdXQgbmFtZT0naW5wdXRfMicgdHlwZT0ncmFkaW8nIHZhbHVlPSdnc3VydmV5MjMyYzFkNWJlJyAgaWQ9J2Nob2ljZV83OV8yXzQnIHRhYmluZGV4PSc1JyAgICAvPjxsYWJlbCBmb3I9J2Nob2ljZV83OV8yXzQnIGlkPSdsYWJlbF83OV8yXzQnPjEwIG9yIG1vcmUgdGltZXM8L2xhYmVsPjwvbGk+PC91bD48L2Rpdj48L2xpPjxsaSBpZD0nZmllbGRfNzlfMycgY2xhc3M9J2dmaWVsZCBnZm9ybV92YWxpZGF0aW9uX2NvbnRhaW5lciBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV8nID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgZm9yPSdpbnB1dF83OV8zJyA+UGhvbmU8L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXInPjxpbnB1dCBuYW1lPSdpbnB1dF8zJyBpZD0naW5wdXRfNzlfMycgdHlwZT0ndGV4dCcgdmFsdWU9JycgLz48L2Rpdj48ZGl2IGNsYXNzPSdnZmllbGRfZGVzY3JpcHRpb24nPlRoaXMgZmllbGQgaXMgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMgYW5kIHNob3VsZCBiZSBsZWZ0IHVuY2hhbmdlZC48L2Rpdj48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybV9mb290ZXIgdG9wX2xhYmVsJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgaWQ9J2dmb3JtX3N1Ym1pdF9idXR0b25fNzknIGNsYXNzPSdnZm9ybV9idXR0b24gYnV0dG9uJyB2YWx1ZT0nU3VibWl0JyB0YWJpbmRleD0nNicgb25jbGljaz0naWYod2luZG93WyJnZl9zdWJtaXR0aW5nXzc5Il0pe3JldHVybiBmYWxzZTt9ICB3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzkiXT10cnVlOyAgJyBvbmtleXByZXNzPSdpZiggZXZlbnQua2V5Q29kZSA9PSAxMyApeyBpZih3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNzkiXSl7cmV0dXJuIGZhbHNlO30gd2luZG93WyJnZl9zdWJtaXR0aW5nXzc5Il09dHJ1ZTsgIGpRdWVyeSgiI2dmb3JtXzc5IikudHJpZ2dlcigic3VibWl0IixbdHJ1ZV0pOyB9JyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdnZm9ybV9hamF4JyB2YWx1ZT0nZm9ybV9pZD03OSZhbXA7dGl0bGU9JmFtcDtkZXNjcmlwdGlvbj0mYW1wO3RhYmluZGV4PTEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2lzX3N1Ym1pdF83OScgdmFsdWU9JzEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3N1Ym1pdCcgdmFsdWU9Jzc5JyAvPgogICAgICAgICAgICAKICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fdW5pcXVlX2lkJyB2YWx1ZT0nJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdzdGF0ZV83OScgdmFsdWU9J1d5SmJYU0lzSWpOaU5UQXpOell3WXpsaE1UQTJZalEwT1dJNFkyVTNObUU1TkRoa05EbGpJbDA9JyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV90YXJnZXRfcGFnZV9udW1iZXJfNzknIGlkPSdnZm9ybV90YXJnZXRfcGFnZV9udW1iZXJfNzknIHZhbHVlPScwJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzknIGlkPSdnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzknIHZhbHVlPScxJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdnZm9ybV9maWVsZF92YWx1ZXMnIHZhbHVlPScnIC8+CiAgICAgICAgICAgIAogICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlmcmFtZSBzdHlsZT0nZGlzcGxheTpub25lO3dpZHRoOjBweDtoZWlnaHQ6MHB4Oycgc3JjPSdhYm91dDpibGFuaycgbmFtZT0nZ2Zvcm1fYWpheF9mcmFtZV83OScgaWQ9J2dmb3JtX2FqYXhfZnJhbWVfNzknPlRoaXMgaWZyYW1lIGNvbnRhaW5zIHRoZSBsb2dpYyByZXF1aXJlZCB0byBoYW5kbGUgQUpBWCBwb3dlcmVkIEdyYXZpdHkgRm9ybXMuPC9pZnJhbWU+CiAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKXtnZm9ybUluaXRTcGlubmVyKCA3OSwgJ2h0dHBzOi8vd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9ncmF2aXR5Zm9ybXMvaW1hZ2VzL3NwaW5uZXIuZ2lmJyApO2pRdWVyeSgnI2dmb3JtX2FqYXhfZnJhbWVfNzknKS5sb2FkKCBmdW5jdGlvbigpe3ZhciBjb250ZW50cyA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyonKS5odG1sKCk7dmFyIGlzX3Bvc3RiYWNrID0gY29udGVudHMuaW5kZXhPZignR0ZfQUpBWF9QT1NUQkFDSycpID49IDA7aWYoIWlzX3Bvc3RiYWNrKXtyZXR1cm47fXZhciBmb3JtX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcjZ2Zvcm1fd3JhcHBlcl83OScpO3ZhciBpc19jb25maXJtYXRpb24gPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcjZ2Zvcm1fY29uZmlybWF0aW9uX3dyYXBwZXJfNzknKS5sZW5ndGggPiAwO3ZhciBpc19yZWRpcmVjdCA9IGNvbnRlbnRzLmluZGV4T2YoJ2dmb3JtUmVkaXJlY3QoKXsnKSA+PSAwO3ZhciBpc19mb3JtID0gZm9ybV9jb250ZW50Lmxlbmd0aCA+IDAgJiYgISBpc19yZWRpcmVjdCAmJiAhIGlzX2NvbmZpcm1hdGlvbjtpZihpc19mb3JtKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc5JykuaHRtbChmb3JtX2NvbnRlbnQuaHRtbCgpKTtpZihmb3JtX2NvbnRlbnQuaGFzQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKSl7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83OScpLmFkZENsYXNzKCdnZm9ybV92YWxpZGF0aW9uX2Vycm9yJyk7fSBlbHNlIHtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc5JykucmVtb3ZlQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9c2V0VGltZW91dCggZnVuY3Rpb24oKSB7IC8qIGRlbGF5IHRoZSBzY3JvbGwgYnkgNTAgbWlsbGlzZWNvbmRzIHRvIGZpeCBhIGJ1ZyBpbiBjaHJvbWUgKi8galF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83OScpLm9mZnNldCgpLnRvcCk7IH0sIDUwICk7aWYod2luZG93WydnZm9ybUluaXREYXRlcGlja2VyJ10pIHtnZm9ybUluaXREYXRlcGlja2VyKCk7fWlmKHdpbmRvd1snZ2Zvcm1Jbml0UHJpY2VGaWVsZHMnXSkge2dmb3JtSW5pdFByaWNlRmllbGRzKCk7fXZhciBjdXJyZW50X3BhZ2UgPSBqUXVlcnkoJyNnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNzknKS52YWwoKTtnZm9ybUluaXRTcGlubmVyKCA3OSwgJ2h0dHBzOi8vd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9ncmF2aXR5Zm9ybXMvaW1hZ2VzL3NwaW5uZXIuZ2lmJyApO2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fcGFnZV9sb2FkZWQnLCBbNzksIGN1cnJlbnRfcGFnZV0pO3dpbmRvd1snZ2Zfc3VibWl0dGluZ183OSddID0gZmFsc2U7fWVsc2UgaWYoIWlzX3JlZGlyZWN0KXt2YXIgY29uZmlybWF0aW9uX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcuR0ZfQUpBWF9QT1NUQkFDSycpLmh0bWwoKTtpZighY29uZmlybWF0aW9uX2NvbnRlbnQpe2NvbmZpcm1hdGlvbl9jb250ZW50ID0gY29udGVudHM7fXNldFRpbWVvdXQoZnVuY3Rpb24oKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzc5JykucmVwbGFjZVdpdGgoY29uZmlybWF0aW9uX2NvbnRlbnQpO2pRdWVyeShkb2N1bWVudCkuc2Nyb2xsVG9wKGpRdWVyeSgnI2dmXzc5Jykub2Zmc2V0KCkudG9wKTtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX2NvbmZpcm1hdGlvbl9sb2FkZWQnLCBbNzldKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfNzknXSA9IGZhbHNlO30sIDUwKTt9ZWxzZXtqUXVlcnkoJyNnZm9ybV83OScpLmFwcGVuZChjb250ZW50cyk7aWYod2luZG93WydnZm9ybVJlZGlyZWN0J10pIHtnZm9ybVJlZGlyZWN0KCk7fX1qUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgWzc5LCBjdXJyZW50X3BhZ2VdKTt9ICk7fSApOzwvc2NyaXB0PjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4gaWYodHlwZW9mIGdmX2dsb2JhbCA9PSAndW5kZWZpbmVkJykgdmFyIGdmX2dsb2JhbCA9IHsiZ2ZfY3VycmVuY3lfY29uZmlnIjp7Im5hbWUiOiJVLlMuIERvbGxhciIsInN5bWJvbF9sZWZ0IjoiJCIsInN5bWJvbF9yaWdodCI6IiIsInN5bWJvbF9wYWRkaW5nIjoiIiwidGhvdXNhbmRfc2VwYXJhdG9yIjoiLCIsImRlY2ltYWxfc2VwYXJhdG9yIjoiLiIsImRlY2ltYWxzIjoyfSwiYmFzZV91cmwiOiJodHRwczpcL1wvd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tXC93cC1jb250ZW50XC9wbHVnaW5zXC9ncmF2aXR5Zm9ybXMiLCJudW1iZXJfZm9ybWF0cyI6W10sInNwaW5uZXJVcmwiOiJodHRwczpcL1wvd3d3LmJ2aXByb3BlcnR5eWFjaHQuY29tXC93cC1jb250ZW50XC9wbHVnaW5zXC9ncmF2aXR5Zm9ybXNcL2ltYWdlc1wvc3Bpbm5lci5naWYifTtqUXVlcnkoZG9jdW1lbnQpLmJpbmQoJ2dmb3JtX3Bvc3RfcmVuZGVyJywgZnVuY3Rpb24oZXZlbnQsIGZvcm1JZCwgY3VycmVudFBhZ2Upe2lmKGZvcm1JZCA9PSA3OSkge30gfSApO2pRdWVyeShkb2N1bWVudCkuYmluZCgnZ2Zvcm1fcG9zdF9jb25kaXRpb25hbF9sb2dpYycsIGZ1bmN0aW9uKGV2ZW50LCBmb3JtSWQsIGZpZWxkcywgaXNJbml0KXt9ICk7PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wb3N0X3JlbmRlcicsIFs3OSwgMV0pIH0gKTsgPC9zY3JpcHQ+