|
|
(57 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
− |
| |
| <html> | | <html> |
| + | <!-- predisplay while loading --> |
| + | <style> |
| + | body { |
| + | width: 1200px; |
| + | background-color: rgb(217,217,217); |
| + | margin: auto; |
| + | font-family: 'Roboto', Helvetica, SansSerif; |
| + | padding: 0; |
| + | color: black; |
| + | background-color:rgb(217,217,217); |
| + | word-wrap: break-word; |
| + | } |
| | | |
− | <meta charset="utf-8"> | + | #cssmenu { |
| + | background: white; |
| + | margin-top: 25px; |
| + | width: 100%; |
| + | padding: 0; |
| + | line-height: 1; |
| + | display: block; |
| + | position: relative; |
| + | top: 0em; |
| + | z-index: 1000; |
| + | font-family: 'PT Sans', sans-serif; |
| | | |
− |
| + | } |
− | <base href="https://2018.igem.org/Team:GO_Paris-Saclay">
| + | |
| | | |
− | <meta name="viewport" content="width=device-width, initial-scale=1"> | + | #cssmenu ul { |
| + | list-style: none; |
| + | margin: 0; |
| + | padding: 0; |
| + | display: block; |
| + | z-index: 1000; |
| + | } |
| + | #cssmenu ul:after, |
| + | #cssmenu:after { |
| + | content: " "; |
| + | display: block; |
| + | font-size: 0; |
| + | height: 0; |
| + | clear: both; |
| + | visibility: hidden; |
| + | } |
| + | #cssmenu ul li { |
| + | margin: 0; |
| + | margin-right: 5px; |
| + | padding: 0; |
| + | display: block; |
| + | position: relative; |
| + | z-index: 1000; |
| | | |
| + | } |
| + | #cssmenu ul li a { |
| + | text-decoration: none; |
| + | display: block; |
| + | margin: 0; |
| + | -webkit-transition: color .2s ease; |
| + | -moz-transition: color .2s ease; |
| + | -ms-transition: color .2s ease; |
| + | -o-transition: color .2s ease; |
| + | transition: color .2s ease; |
| + | -webkit-box-sizing: border-box; |
| + | -moz-box-sizing: border-box; |
| + | box-sizing: border-box; |
| + | z-index: 1000; |
| + | |
| + | } |
| + | |
| + | .container { |
| + | position: relative; |
| + | margin: auto; |
| + | background-color: white; |
| + | height: 100%; |
| + | } |
| + | .waiteranimationdiv { |
| + | margin-left: auto; |
| + | margin-right: auto; |
| + | width: 100%; |
| + | } |
| + | |
| + | </style> |
| + | <div id="removeme"> |
| + | <nav> |
| + | <div id='cssmenu'> |
| + | <ul> |
| + | <li></li> |
| + | <li><a><span>Project</span></a> |
| + | |
| + | </li> |
| + | |
| + | <li><a><span>Lab</span></a> |
| + | |
| + | </li> |
| + | |
| + | <li><a><span>Parts</span></a> |
| + | </li> |
| + | <li><a ><span>Model</span></a> |
| + | |
| + | </li> |
| + | |
| + | <li><a ><span>Contribution</span></a> |
| + | |
| + | </li> |
| + | <li><a ><span>Human practice</span></a></li> |
| + | <li><a ><span>Acknowledgement</span></a> |
| + | </li> |
| + | </ul> |
| + | </div> |
| + | </nav> |
| + | <div class="container"><div class="waiteranimationdiv"><img class="spinner" src="https://static.igem.org/mediawiki/2018/c/cc/T--GO_Paris-Saclay--mascotte_spinner.png"> Loading, please wait <progress id="progress" value="0"></progress><span id="progdisplay"></span></div></div> |
| + | </div> |
| + | |
| + | <style> |
| + | .spinner { |
| + | width: 40px; |
| + | |
| + | margin: 100px auto; |
| + | -webkit-animation: sk-rotateplane 1.2s infinite ease-in-out; |
| + | animation: sk-rotateplane 1.2s infinite ease-in-out; |
| + | } |
| + | |
| + | @-webkit-keyframes sk-rotateplane { |
| + | 0% { -webkit-transform: perspective(120px) } |
| + | 50% { -webkit-transform: perspective(120px) rotateY(180deg) } |
| + | 100% { -webkit-transform: perspective(120px) rotateY(180deg) rotateX(180deg) } |
| + | } |
| + | |
| + | @keyframes sk-rotateplane { |
| + | 0% { |
| + | transform: perspective(120px) rotateX(0deg) rotateY(0deg); |
| + | -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg) |
| + | } 50% { |
| + | transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); |
| + | -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg) |
| + | } 100% { |
| + | transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); |
| + | -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); |
| + | } |
| + | } |
| + | |
| + | </style> |
| + | |
| + | <!-- end predisplay --> |
| + | |
| + | <meta charset="utf-8"> |
| + | <base href="https://2018.igem.org/Team:GO_Paris-Saclay"> |
| + | <meta name="viewport" content="width=device-width, initial-scale=1"> |
| | | |
| <div id="bigmaindiv"> | | <div id="bigmaindiv"> |
| <app-root></app-root> | | <app-root></app-root> |
| </div> | | </div> |
− | <link rel="stylesheet" href="data:text/css;base64,QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmJsYWNrLW9uLXdoaXRlKXsubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwIWltcG9ydGFudH19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOjAgMH0ubWF0LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtdGFibGUgdGJvZHksLm1hdC10YWJsZSB0Zm9vdCwubWF0LXRhYmxlIHRoZWFkLC5tYXQtdGFibGUtc3RpY2t5LFttYXQtZm9vdGVyLXJvd10sW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sbWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvd3tiYWNrZ3JvdW5kOmluaGVyaXR9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6IzY3M2FiNztjYXJldC1jb2xvcjojNjIwMDNjfS5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZmZkNzQwfS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNkMWM0ZTl9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmZTU3Zn0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2RkMn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xlLC5tYXQtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOiM2NzNhYjc7c3Ryb2tlOiM2MjAwM2N9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6I2ZmZDc0MH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmNDQzMzZ9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA5LDE5NiwyMzMsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI5LDEyNywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwOSwxOTYsMjMzLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI5LDEyNywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5e21hcmdpbjowO2hlaWdodDoxMDB2aH0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowIDJweCAxcHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDFweCAxcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggM3B4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjAgM3B4IDNweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgM3B4IDRweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNXB4IDhweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxNHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MCA0cHggNXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCA3cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowIDVweCA2cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDlweCAxMnB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTZweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjAgNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTFweCAxNXB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMjBweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTNweCAxOXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjRweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjAgN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTRweCAyMXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjZweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjAgOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMjhweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowIDhweCAxMXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxN3B4IDI2cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMnB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MCA5cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMThweCAyOHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA3cHggMzRweCA2cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjAgOXB4IDEycHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDE5cHggMjlweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA4cHggMzhweCA3cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwuMiksMCAyMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDhweCA0MHB4IDdweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MCAxMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDIycHggMzVweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOHB4IDQycHggN3B4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowIDExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsLjIpLDAgMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA5cHggNDRweCA4cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjAgMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwuMiksMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDlweCA0NnB4IDhweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo2cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgaDIsI0hRX3BhZ2UgaDMsLm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgI3RvY3RpdGxlIGgyLCNIUV9wYWdlIGg0LC5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgMTEuNjJweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIDkuMzhweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS0yLC5tYXQtYm9keS1zdHJvbmd7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9I0hRX3BhZ2UgcCwubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfSNIUV9wYWdlIHAgcCwubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LWNhcHRpb24sLm1hdC1zbWFsbHtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDU2cHg7bGV0dGVyLXNwYWNpbmc6LS4wNWVtfS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMmVtfS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMDVlbX0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGUsLm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSwubWF0LWNhcmQtc3VidGl0bGV7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MThweH0ubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMXB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzUlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0uNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NWVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NGVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzNCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZ3JpZC10aWxlLWZvb3RlciwubWF0LWdyaWQtdGlsZS1oZWFkZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uLC5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo5cHg7cGFkZGluZy1ib3R0b206OXB4fS5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbn0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnR7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksLXdlYmtpdC10cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwcyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpLC13ZWJraXQtdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMCk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIsLmNkay1vdmVybGF5LWNvbnRhaW5lcntwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJ7cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXI6ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5le3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6LjZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfX0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI4OCl9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQ7YW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kO2FuaW1hdGlvbi1uYW1lOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ3toZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjJweCAwIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94IWltcG9ydGFudH0ubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiM2MjAwM2N9Lm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6Izk2MWU2NH0ubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2ZmNmU0MH0ubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZhZmFmYX0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6Izk2MWU2NH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiM2MjAwM2N9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZmY2ZTQwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcil7YmFja2dyb3VuZDojZmZmfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kOiNmZjZlNDB9Lm1hdC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzYyMDAzYztwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0LC13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNik7dHJhbnNmb3JtOnNjYWxlKC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXstd2Via2l0LXRyYW5zZm9ybTpub25lO3RyYW5zZm9ybTpub25lfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDo4cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LThweH0ubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xMXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudCwubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfX0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoyOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoxNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDoxNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOjAgMH0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6IzYyMDAzY30ubWF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2ZmNmU0MH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMTIpfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMTIpfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMTIpfS5tYXQtYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMSl9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4xKX0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjEpfS5tYXQtZmFiLC5tYXQtZmxhdC1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b257Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZmZmfS5tYXQtZmFiLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtZmFiLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWZhYi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtbWluaS1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRde2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtZmFiLm1hdC13YXJuLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjIpfS5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yKX0ubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjIpfS5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfS5tYXQtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2FyZC1zdWJ0aXRsZXtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6I2ZhZmFmYX0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojZmFmYWZhIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjI2KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle29wYWNpdHk6LjQ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtvcGFjaXR5Oi40O2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfW1hdC1mb290ZXItcm93LG1hdC1oZWFkZXItcm93LG1hdC1yb3csdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxsLHRoLm1hdC1oZWFkZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhlYWRlci1jZWxse2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jYWxlbmRhci1hcnJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSwuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCksLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0O2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC40KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC40KX0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojNjIwMDNjfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtZGlhbG9nLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlciwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaGludHtjb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZXJyb3J7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMCwwLDAsLjQyKSAwLHJnYmEoMCwwLDAsLjQyKSAzMyUsdHJhbnNwYXJlbnQgMCk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC40MikgMCxyZ2JhKDAsMCwwLC40MikgMzMlLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wMil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtib3R0b206MS4zNDM3NWVtO2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6IzYyMDAzY30ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnQsLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZmY2ZTQwfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS1mb2N1cywubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS1mb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDowIDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF06OmFmdGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1lbnUtaXRlbSAubWF0LWljb246bm90KFtjb2xvcl0pLC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcjo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6I2ZmZn0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNkMGIzYzV9Lm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2QwYjNjNX0ubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2UwYmNkMX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlMGJjZDF9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZmNjYmN9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZmY2NiY30ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6Izk2MWU2NH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmZjZlNDB9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojNjIwMDNjfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yNil9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjI2KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmNmU0MH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMjYpfS5tYXQtc2VsZWN0LWNvbnRlbnQsLm1hdC1zZWxlY3QtcGFuZWwtZG9uZS1hbmltYXRpbmd7YmFja2dyb3VuZDojZmZmfS5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC41KX0ubWF0LXNsaWRlLXRvZ2dsZTpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2xpZGUtdG9nZ2xlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjEyKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Om5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMTIpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZjU3MjJ9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDg3LDM0LC41KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybjpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSw4NywzNCwuMTIpfS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYiwubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yKX0uY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KC4wMDAxZGVnLHJnYmEoMCwwLDAsLjcpLHJnYmEoMCwwLDAsLjcpIDJweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50KX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMCwwLDAsLjcpLHJnYmEoMCwwLDAsLjcpIDJweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50KX0ubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tbm90LXRvdWNoZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCk7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMil9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjI0LDE4OCwyMDksLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA0LDE4OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIyNCwxODgsMjA5LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGlua3N7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDQsMTg4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtze2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiM2MjAwM2M7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZmY2ZTQwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdywubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNuYWNrLWJhci1jb250YWluZXJ7YmFja2dyb3VuZDojMzIzMjMyO2NvbG9yOiNmZmZ9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOiM5NjFlNjR9I0hRX3BhZ2UgaDJ7YmFja2dyb3VuZC1jb2xvcjojN2EyNjU5O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1zaXplOjEwMCUgYXV0b30jSFFfcGFnZSAjdG9jdGl0bGUgaDJ7YmFja2dyb3VuZC1jb2xvcjp1bnNldDtjb2xvcjp1bnNldDtiYWNrZ3JvdW5kLXNpemU6MTAwJSBhdXRvfS5heGlzLS14IC5kb21haW4sLmF4aXMtLXkgLmRvbWFpbntkaXNwbGF5Om5vbmV9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtmbGV4LWJhc2lzOjB9QGZvbnQtZmFjZXtmb250LWZhbWlseTpSb2JvdG87Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO3NyYzp1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMi8yNi9ULS1HT19QYXJpcy1TYWNsYXktLXJvYm90by12MTgtbGF0aW4tcmVndWxhci5lb3QpO3NyYzpsb2NhbCgiUm9ib3RvIiksbG9jYWwoIlJvYm90by1SZWd1bGFyIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjYvVC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIuZW90PyNpZWZpeCkgZm9ybWF0KCJlbWJlZGRlZC1vcGVudHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8wLzBiL1QtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLndvZmYpIGZvcm1hdCgid29mZiIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnR0ZikgZm9ybWF0KCJ0cnVldHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnN2ZyNSb2JvdG8pIGZvcm1hdCgic3ZnIil9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNYXRlcmlhbEljb25zLVJlZ3VsYXI7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7c3JjOnVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy81LzUxL1QtLUdPX1BhcmlzLVNhY2xheS0tTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdCk7c3JjOmxvY2FsKCJSb2JvdG8iKSxsb2NhbCgiUm9ib3RvLVJlZ3VsYXIiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNS81MS9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci5lb3Q/I2llZml4KSBmb3JtYXQoImVtYmVkZGVkLW9wZW50eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjgvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIud29mZikgZm9ybWF0KCJ3b2ZmIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzEvMWUvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIudHRmKSBmb3JtYXQoInRydWV0eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzMvM2YvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIuc3ZnI01hdGVyaWFsSWNvbnMtUmVndWxhcikgZm9ybWF0KCJzdmciKX0ubWF0ZXJpYWwtaWNvbnN7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6MTtsZXR0ZXItc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbDtkaXJlY3Rpb246bHRyOy1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOidsaWdhJzstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9aDEsaDIsaDMsaDQsaDUsaDZ7Ym9yZGVyLWJvdHRvbTowfQovKiMgc291cmNlTWFwcGluZ1VSTD1zdHlsZXMuY3NzLm1hcCov">
| |
| | | |
− | <script>var base64script = atob("IWZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUuZG9jdW1lbnQscj1lLk9iamVjdCxvPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbyxsLGE9L15bQS1aXStbYS16XS8saT1mdW5jdGlvbihlLHQpeyh0PXQudG9Mb3dlckNhc2UoKSlpbiB1fHwodVtlXT0odVtlXXx8W10pLmNvbmNhdCh0KSx1W3RdPXVbdC50b1VwcGVyQ2FzZSgpXT1lKX0sdT0oci5jcmVhdGV8fHIpKG51bGwpLGM9e307Zm9yKG4gaW4gZSlmb3IobCBpbiBlW25dKWZvcih1W2xdPW89ZVtuXVtsXSx0PTA7dDxvLmxlbmd0aDt0KyspdVtvW3RdLnRvTG93ZXJDYXNlKCldPXVbb1t0XS50b1VwcGVyQ2FzZSgpXT1sO3JldHVybiBjLmdldD1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/dVtlXXx8KGEudGVzdChlKT9bXToiIik6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXTtmb3IodCBpbiB1KWUudGVzdCh0KSYmbi5wdXNoKHQpO3JldHVybiBufShlKX0sYy5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYS50ZXN0KGUpP2koZSx0KTppKHQsZSksY30sY30oe2NvbGxlY3Rpb25zOntIVE1MQWxsQ29sbGVjdGlvbjpbImFsbCJdLEhUTUxDb2xsZWN0aW9uOlsiZm9ybXMiXSxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjpbImVsZW1lbnRzIl0sSFRNTE9wdGlvbnNDb2xsZWN0aW9uOlsib3B0aW9ucyJdfSxlbGVtZW50czp7RWxlbWVudDpbImVsZW1lbnQiXSxIVE1MQW5jaG9yRWxlbWVudDpbImEiXSxIVE1MQXBwbGV0RWxlbWVudDpbImFwcGxldCJdLEhUTUxBcmVhRWxlbWVudDpbImFyZWEiXSxIVE1MQXR0YWNobWVudEVsZW1lbnQ6WyJhdHRhY2htZW50Il0sSFRNTEF1ZGlvRWxlbWVudDpbImF1ZGlvIl0sSFRNTEJSRWxlbWVudDpbImJyIl0sSFRNTEJhc2VFbGVtZW50OlsiYmFzZSJdLEhUTUxCb2R5RWxlbWVudDpbImJvZHkiXSxIVE1MQnV0dG9uRWxlbWVudDpbImJ1dHRvbiJdLEhUTUxDYW52YXNFbGVtZW50OlsiY2FudmFzIl0sSFRNTENvbnRlbnRFbGVtZW50OlsiY29udGVudCJdLEhUTUxETGlzdEVsZW1lbnQ6WyJkbCJdLEhUTUxEYXRhRWxlbWVudDpbImRhdGEiXSxIVE1MRGF0YUxpc3RFbGVtZW50OlsiZGF0YWxpc3QiXSxIVE1MRGV0YWlsc0VsZW1lbnQ6WyJkZXRhaWxzIl0sSFRNTERpYWxvZ0VsZW1lbnQ6WyJkaWFsb2ciXSxIVE1MRGlyZWN0b3J5RWxlbWVudDpbImRpciJdLEhUTUxEaXZFbGVtZW50OlsiZGl2Il0sSFRNTERvY3VtZW50OlsiZG9jdW1lbnQiXSxIVE1MRWxlbWVudDpbImVsZW1lbnQiLCJhYmJyIiwiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImIiLCJiZGkiLCJiZG8iLCJjaXRlIiwiY29kZSIsImNvbW1hbmQiLCJkZCIsImRmbiIsImR0IiwiZW0iLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9vdGVyIiwiaGVhZGVyIiwiaSIsImtiZCIsIm1hcmsiLCJuYXYiLCJub3NjcmlwdCIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic21hbGwiLCJzdHJvbmciLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidSIsInZhciIsIndiciJdLEhUTUxFbWJlZEVsZW1lbnQ6WyJlbWJlZCJdLEhUTUxGaWVsZFNldEVsZW1lbnQ6WyJmaWVsZHNldCJdLEhUTUxGb250RWxlbWVudDpbImZvbnQiXSxIVE1MRm9ybUVsZW1lbnQ6WyJmb3JtIl0sSFRNTEZyYW1lRWxlbWVudDpbImZyYW1lIl0sSFRNTEZyYW1lU2V0RWxlbWVudDpbImZyYW1lc2V0Il0sSFRNTEhSRWxlbWVudDpbImhyIl0sSFRNTEhlYWRFbGVtZW50OlsiaGVhZCJdLEhUTUxIZWFkaW5nRWxlbWVudDpbImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiJdLEhUTUxIdG1sRWxlbWVudDpbImh0bWwiXSxIVE1MSUZyYW1lRWxlbWVudDpbImlmcmFtZSJdLEhUTUxJbWFnZUVsZW1lbnQ6WyJpbWciXSxIVE1MSW5wdXRFbGVtZW50OlsiaW5wdXQiXSxIVE1MS2V5Z2VuRWxlbWVudDpbImtleWdlbiJdLEhUTUxMSUVsZW1lbnQ6WyJsaSJdLEhUTUxMYWJlbEVsZW1lbnQ6WyJsYWJlbCJdLEhUTUxMZWdlbmRFbGVtZW50OlsibGVnZW5kIl0sSFRNTExpbmtFbGVtZW50OlsibGluayJdLEhUTUxNYXBFbGVtZW50OlsibWFwIl0sSFRNTE1hcnF1ZWVFbGVtZW50OlsibWFycXVlZSJdLEhUTUxNZWRpYUVsZW1lbnQ6WyJtZWRpYSJdLEhUTUxNZW51RWxlbWVudDpbIm1lbnUiXSxIVE1MTWVudUl0ZW1FbGVtZW50OlsibWVudWl0ZW0iXSxIVE1MTWV0YUVsZW1lbnQ6WyJtZXRhIl0sSFRNTE1ldGVyRWxlbWVudDpbIm1ldGVyIl0sSFRNTE1vZEVsZW1lbnQ6WyJkZWwiLCJpbnMiXSxIVE1MT0xpc3RFbGVtZW50Olsib2wiXSxIVE1MT2JqZWN0RWxlbWVudDpbIm9iamVjdCJdLEhUTUxPcHRHcm91cEVsZW1lbnQ6WyJvcHRncm91cCJdLEhUTUxPcHRpb25FbGVtZW50Olsib3B0aW9uIl0sSFRNTE91dHB1dEVsZW1lbnQ6WyJvdXRwdXQiXSxIVE1MUGFyYWdyYXBoRWxlbWVudDpbInAiXSxIVE1MUGFyYW1FbGVtZW50OlsicGFyYW0iXSxIVE1MUGljdHVyZUVsZW1lbnQ6WyJwaWN0dXJlIl0sSFRNTFByZUVsZW1lbnQ6WyJwcmUiXSxIVE1MUHJvZ3Jlc3NFbGVtZW50OlsicHJvZ3Jlc3MiXSxIVE1MUXVvdGVFbGVtZW50OlsiYmxvY2txdW90ZSIsInEiLCJxdW90ZSJdLEhUTUxTY3JpcHRFbGVtZW50Olsic2NyaXB0Il0sSFRNTFNlbGVjdEVsZW1lbnQ6WyJzZWxlY3QiXSxIVE1MU2hhZG93RWxlbWVudDpbInNoYWRvdyJdLEhUTUxTbG90RWxlbWVudDpbInNsb3QiXSxIVE1MU291cmNlRWxlbWVudDpbInNvdXJjZSJdLEhUTUxTcGFuRWxlbWVudDpbInNwYW4iXSxIVE1MU3R5bGVFbGVtZW50Olsic3R5bGUiXSxIVE1MVGFibGVDYXB0aW9uRWxlbWVudDpbImNhcHRpb24iXSxIVE1MVGFibGVDZWxsRWxlbWVudDpbInRkIiwidGgiXSxIVE1MVGFibGVDb2xFbGVtZW50OlsiY29sIiwiY29sZ3JvdXAiXSxIVE1MVGFibGVFbGVtZW50OlsidGFibGUiXSxIVE1MVGFibGVSb3dFbGVtZW50OlsidHIiXSxIVE1MVGFibGVTZWN0aW9uRWxlbWVudDpbInRoZWFkIiwidGJvZHkiLCJ0Zm9vdCJdLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6WyJ0ZW1wbGF0ZSJdLEhUTUxUZXh0QXJlYUVsZW1lbnQ6WyJ0ZXh0YXJlYSJdLEhUTUxUaW1lRWxlbWVudDpbInRpbWUiXSxIVE1MVGl0bGVFbGVtZW50OlsidGl0bGUiXSxIVE1MVHJhY2tFbGVtZW50OlsidHJhY2siXSxIVE1MVUxpc3RFbGVtZW50OlsidWwiXSxIVE1MVW5rbm93bkVsZW1lbnQ6WyJ1bmtub3duIiwidmhncm91cHYiLCJ2a2V5Z2VuIl0sSFRNTFZpZGVvRWxlbWVudDpbInZpZGVvIl19LG5vZGVzOntBdHRyOlsibm9kZSJdLEF1ZGlvOlsiYXVkaW8iXSxDREFUQVNlY3Rpb246WyJub2RlIl0sQ2hhcmFjdGVyRGF0YTpbIm5vZGUiXSxDb21tZW50OlsiI2NvbW1lbnQiXSxEb2N1bWVudDpbIiNkb2N1bWVudCJdLERvY3VtZW50RnJhZ21lbnQ6WyIjZG9jdW1lbnQtZnJhZ21lbnQiXSxEb2N1bWVudFR5cGU6WyJub2RlIl0sSFRNTERvY3VtZW50OlsiI2RvY3VtZW50Il0sSW1hZ2U6WyJpbWciXSxPcHRpb246WyJvcHRpb24iXSxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246WyJub2RlIl0sU2hhZG93Um9vdDpbIiNzaGFkb3ctcm9vdCJdLFRleHQ6WyIjdGV4dCJdLFhNTERvY3VtZW50OlsieG1sIl19fSk7Im9iamVjdCIhPXR5cGVvZiB0JiYodD17dHlwZTp0fHwiYXV0byJ9KTt2YXIgbCxhLGksdSxjLHMsbSxmLHAsZD0icmVnaXN0ZXJFbGVtZW50IixoPSJfXyIrZCsoMWU1KmUuTWF0aC5yYW5kb20oKT4+MCksVD0iYWRkRXZlbnRMaXN0ZW5lciIsTD0iYXR0YWNoZWQiLE09IkNhbGxiYWNrIixFPSJkZXRhY2hlZCIsdj0iZXh0ZW5kcyIsSD0iYXR0cmlidXRlQ2hhbmdlZCIrTSxnPUwrTSxiPSJjb25uZWN0ZWQiK00seT0iZGlzY29ubmVjdGVkIitNLEM9ImNyZWF0ZWQiK00sdz1FK00sQT0iQURESVRJT04iLE89IlJFTU9WQUwiLE49IkRPTUF0dHJNb2RpZmllZCIsRD0iRE9NQ29udGVudExvYWRlZCIsST0iRE9NU3VidHJlZU1vZGlmaWVkIixGPSI8IixTPSI9IixWPS9eW0EtWl1bQS1aMC05XSooPzotW0EtWjAtOV0rKSskLyxQPVsiQU5OT1RBVElPTi1YTUwiLCJDT0xPUi1QUk9GSUxFIiwiRk9OVC1GQUNFIiwiRk9OVC1GQUNFLVNSQyIsIkZPTlQtRkFDRS1VUkkiLCJGT05ULUZBQ0UtRk9STUFUIiwiRk9OVC1GQUNFLU5BTUUiLCJNSVNTSU5HLUdMWVBIIl0sUj1bXSxVPVtdLGs9IiIsXz1uLmRvY3VtZW50RWxlbWVudCxxPVIuaW5kZXhPZnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMubGVuZ3RoO3QtLSYmdGhpc1t0XSE9PWU7KTtyZXR1cm4gdH0seD1yLnByb3RvdHlwZSxCPXguaGFzT3duUHJvcGVydHksWj14LmlzUHJvdG90eXBlT2Ysaj1yLmRlZmluZVByb3BlcnR5LEc9W10sej1yLmdldE93blByb3BlcnR5RGVzY3JpcHRvcixLPXIuZ2V0T3duUHJvcGVydHlOYW1lcyxYPXIuZ2V0UHJvdG90eXBlT2YsJD1yLnNldFByb3RvdHlwZU9mLFE9ISFyLl9fcHJvdG9fXyxXPSJfX2RyZUNFdjEiLFk9ZS5jdXN0b21FbGVtZW50cyxKPSEvXmZvcmNlLy50ZXN0KHQudHlwZSkmJiEhKFkmJlkuZGVmaW5lJiZZLmdldCYmWS53aGVuRGVmaW5lZCksZWU9ci5jcmVhdGV8fHIsdGU9ZS5NYXB8fGZ1bmN0aW9uKCl7dmFyIGUsdD1bXSxuPVtdO3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG5bcS5jYWxsKHQsZSldfSxzZXQ6ZnVuY3Rpb24ocixvKXsoZT1xLmNhbGwodCxyKSk8MD9uW3QucHVzaChyKS0xXT1vOm5bZV09b319fSxuZT1lLlByb21pc2V8fGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49ITEscj17Y2F0Y2g6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhlbjpmdW5jdGlvbihlKXtyZXR1cm4gdC5wdXNoKGUpLG4mJnNldFRpbWVvdXQobywxKSxyfX07ZnVuY3Rpb24gbyhlKXtmb3Iobj0hMDt0Lmxlbmd0aDspdC5zaGlmdCgpKGUpfXJldHVybiBlKG8pLHJ9LHJlPSExLG9lPWVlKG51bGwpLGxlPWVlKG51bGwpLGFlPW5ldyB0ZSxpZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpfSx1ZT1yLmNyZWF0ZXx8ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdD8oZS5wcm90b3R5cGU9dCxuZXcgZSk6dGhpc30sY2U9JHx8KFE/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfTpLJiZ6P2Z1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbixyPUsodCksbz0wLGw9ci5sZW5ndGg7bzxsO28rKylCLmNhbGwoZSxuPXJbb10pfHxqKGUsbix6KHQsbikpfXJldHVybiBmdW5jdGlvbih0LG4pe2Rve2UodCxuKX13aGlsZSgobj1YKG4pKSYmIVouY2FsbChuLHQpKTtyZXR1cm4gdH19KCk6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCllW25dPXRbbl07cmV0dXJuIGV9KSxzZT1lLk11dGF0aW9uT2JzZXJ2ZXJ8fGUuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixtZT0oZS5IVE1MRWxlbWVudHx8ZS5FbGVtZW50fHxlLk5vZGUpLnByb3RvdHlwZSxmZT0hWi5jYWxsKG1lLF8pLHBlPWZlP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1uLnZhbHVlLGV9OmosZGU9ZmU/ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfTpmdW5jdGlvbihlKXtyZXR1cm4gWi5jYWxsKG1lLGUpfSxoZT1mZSYmW10sVGU9bWUuYXR0YWNoU2hhZG93LExlPW1lLmNsb25lTm9kZSxNZT1tZS5kaXNwYXRjaEV2ZW50LEVlPW1lLmdldEF0dHJpYnV0ZSx2ZT1tZS5oYXNBdHRyaWJ1dGUsSGU9bWUucmVtb3ZlQXR0cmlidXRlLGdlPW1lLnNldEF0dHJpYnV0ZSxiZT1uLmNyZWF0ZUVsZW1lbnQseWU9YmUsQ2U9c2UmJnthdHRyaWJ1dGVzOiEwLGNoYXJhY3RlckRhdGE6ITAsYXR0cmlidXRlT2xkVmFsdWU6ITB9LHdlPXNlfHxmdW5jdGlvbihlKXtJZT0hMSxfLnJlbW92ZUV2ZW50TGlzdGVuZXIoTix3ZSl9LEFlPTAsT2U9ZCBpbiBuJiYhL15mb3JjZS1hbGwvLnRlc3QodC50eXBlKSxOZT0hMCxEZT0hMSxJZT0hMCxGZT0hMCxTZT0hMDtmdW5jdGlvbiBWZSgpe3ZhciBlPWwuc3BsaWNlKDAsbC5sZW5ndGgpO2ZvcihBZT0wO2UubGVuZ3RoOyllLnNoaWZ0KCkuY2FsbChudWxsLGUuc2hpZnQoKSl9ZnVuY3Rpb24gUGUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspR2UoZVtuXSx0KX1mdW5jdGlvbiBSZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZGUodCkmJihHZSh0LGUpLGsubGVuZ3RoJiZQZSh0LnF1ZXJ5U2VsZWN0b3JBbGwoayksZSkpfX1mdW5jdGlvbiBVZShlKXt2YXIgdD1FZS5jYWxsKGUsImlzIiksbj1lLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkscj1xLmNhbGwoUix0P1MrdC50b1VwcGVyQ2FzZSgpOkYrbik7cmV0dXJuIHQmJi0xPHImJiFrZShuLHQpPy0xOnJ9ZnVuY3Rpb24ga2UoZSx0KXtyZXR1cm4tMTxrLmluZGV4T2YoZSsnW2lzPSInK3QrJyJdJyl9ZnVuY3Rpb24gX2UoZSl7dmFyIHQ9ZS5jdXJyZW50VGFyZ2V0LG49ZS5hdHRyQ2hhbmdlLHI9ZS5hdHRyTmFtZSxvPWUudGFyZ2V0LGw9ZVtBXXx8MixhPWVbT118fDM7IVNlfHxvJiZvIT09dHx8IXRbSF18fCJzdHlsZSI9PT1yfHxlLnByZXZWYWx1ZT09PWUubmV3VmFsdWUmJigiIiE9PWUubmV3VmFsdWV8fG4hPT1sJiZuIT09YSl8fHRbSF0ocixuPT09bD9udWxsOmUucHJldlZhbHVlLG49PT1hP251bGw6ZS5uZXdWYWx1ZSl9ZnVuY3Rpb24gcWUoZSl7dmFyIHQ9UmUoZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2wucHVzaCh0LGUudGFyZ2V0KSxBZSYmY2xlYXJUaW1lb3V0KEFlKSxBZT1zZXRUaW1lb3V0KFZlLDEpfX1mdW5jdGlvbiB4ZShlKXtGZSYmKEZlPSExLGUuY3VycmVudFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKEQseGUpKSxrLmxlbmd0aCYmUGUoKGUudGFyZ2V0fHxuKS5xdWVyeVNlbGVjdG9yQWxsKGspLGUuZGV0YWlsPT09RT9FOkwpLGZlJiZmdW5jdGlvbigpe2Zvcih2YXIgZSx0PTAsbj1oZS5sZW5ndGg7dDxuO3QrKylfLmNvbnRhaW5zKGU9aGVbdF0pfHwobi0tLGhlLnNwbGljZSh0LS0sMSksR2UoZSxFKSl9KCl9ZnVuY3Rpb24gQmUoZSx0KXtnZS5jYWxsKHRoaXMsZSx0KSxhLmNhbGwodGhpcyx7dGFyZ2V0OnRoaXN9KX1mdW5jdGlvbiBaZShlLHQpe2NlKGUsdCksYz9jLm9ic2VydmUoZSxDZSk6KEllJiYoZS5zZXRBdHRyaWJ1dGU9QmUsZVtoXT11KGUpLGVbVF0oSSxhKSksZVtUXShOLF9lKSksZVtDXSYmU2UmJihlLmNyZWF0ZWQ9ITAsZVtDXSgpLGUuY3JlYXRlZD0hMSl9ZnVuY3Rpb24gamUoZSl7dGhyb3cgbmV3IEVycm9yKCJBICIrZSsiIHR5cGUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIil9ZnVuY3Rpb24gR2UoZSx0KXt2YXIgbixyLG89VWUoZSk7LTE8byYmKG0oZSxVW29dKSxvPTAsdCE9PUx8fGVbTF0/dCE9PUV8fGVbRV18fChlW0xdPSExLGVbRV09ITAscj0iZGlzY29ubmVjdGVkIixvPTEpOihlW0VdPSExLGVbTF09ITAscj0iY29ubmVjdGVkIixvPTEsZmUmJnEuY2FsbChoZSxlKTwwJiZoZS5wdXNoKGUpKSxvJiYobj1lW3QrTV18fGVbcitNXSkmJm4uY2FsbChlKSl9ZnVuY3Rpb24gemUoKXt9ZnVuY3Rpb24gS2UoZSx0LHIpe3ZhciBvPXImJnJbdl18fCIiLGw9dC5wcm90b3R5cGUsYT11ZShsKSxpPXQub2JzZXJ2ZWRBdHRyaWJ1dGVzfHxHLHU9e3Byb3RvdHlwZTphfTtwZShhLEMse3ZhbHVlOmZ1bmN0aW9uKCl7aWYocmUpcmU9ITE7ZWxzZSBpZighdGhpc1tXXSl7dGhpc1tXXT0hMCxuZXcgdCh0aGlzKSxsW0NdJiZsW0NdLmNhbGwodGhpcyk7dmFyIGU9b2VbYWUuZ2V0KHQpXTsoIUp8fGUuY3JlYXRlLmxlbmd0aD4xKSYmUWUodGhpcyl9fX0pLHBlKGEsSCx7dmFsdWU6ZnVuY3Rpb24oZSl7LTE8cS5jYWxsKGksZSkmJmxbSF0uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pLGxbYl0mJnBlKGEsZyx7dmFsdWU6bFtiXX0pLGxbeV0mJnBlKGEsdyx7dmFsdWU6bFt5XX0pLG8mJih1W3ZdPW8pLGU9ZS50b1VwcGVyQ2FzZSgpLG9lW2VdPXtjb25zdHJ1Y3Rvcjp0LGNyZWF0ZTpvP1tvLGllKGUpXTpbZV19LGFlLnNldCh0LGUpLG5bZF0oZS50b0xvd2VyQ2FzZSgpLHUpLFdlKGUpLGxlW2VdLnIoKX1mdW5jdGlvbiBYZShlKXt2YXIgdD1vZVtlLnRvVXBwZXJDYXNlKCldO3JldHVybiB0JiZ0LmNvbnN0cnVjdG9yfWZ1bmN0aW9uICRlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9lOmUmJmUuaXN8fCIifWZ1bmN0aW9uIFFlKGUpe2Zvcih2YXIgdCxuPWVbSF0scj1uP2UuYXR0cmlidXRlczpHLG89ci5sZW5ndGg7by0tOyluLmNhbGwoZSwodD1yW29dKS5uYW1lfHx0Lm5vZGVOYW1lLG51bGwsdC52YWx1ZXx8dC5ub2RlVmFsdWUpfWZ1bmN0aW9uIFdlKGUpe3JldHVybihlPWUudG9VcHBlckNhc2UoKSlpbiBsZXx8KGxlW2VdPXt9LGxlW2VdLnA9bmV3IG5lKGZ1bmN0aW9uKHQpe2xlW2VdLnI9dH0pKSxsZVtlXS5wfWZ1bmN0aW9uIFllKCl7WSYmZGVsZXRlIGUuY3VzdG9tRWxlbWVudHMsaihlLCJjdXN0b21FbGVtZW50cyIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpuZXcgemV9KSxqKGUsIkN1c3RvbUVsZW1lbnRSZWdpc3RyeSIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp6ZX0pO2Zvcih2YXIgdD1mdW5jdGlvbih0KXt2YXIgcj1lW3RdO2lmKHIpe2VbdF09ZnVuY3Rpb24oZSl7dmFyIHQsbztyZXR1cm4gZXx8KGU9dGhpcyksZVtXXXx8KHJlPSEwLHQ9b2VbYWUuZ2V0KGUuY29uc3RydWN0b3IpXSwoZT0obz1KJiYxPT09dC5jcmVhdGUubGVuZ3RoKT9SZWZsZWN0LmNvbnN0cnVjdChyLEcsdC5jb25zdHJ1Y3Rvcik6bi5jcmVhdGVFbGVtZW50LmFwcGx5KG4sdC5jcmVhdGUpKVtXXT0hMCxyZT0hMSxvfHxRZShlKSksZX0sZVt0XS5wcm90b3R5cGU9ci5wcm90b3R5cGU7dHJ5e3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPWVbdF19Y2F0Y2gobil7aihyLFcse3ZhbHVlOmVbdF19KX19fSxyPW8uZ2V0KC9eSFRNTFtBLVpdKlthLXpdLyksbD1yLmxlbmd0aDtsLS07dChyW2xdKSk7bi5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49JGUodCk7cmV0dXJuIG4/eWUuY2FsbCh0aGlzLGUsaWUobikpOnllLmNhbGwodGhpcyxlKX0sT2V8fChEZT0hMCxuW2RdKCIiKSl9aWYoc2UmJigocD1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pbm5lckhUTUw9IjxkaXY+PGRpdj48L2Rpdj48L2Rpdj4iLG5ldyBzZShmdW5jdGlvbihlLHQpe2lmKGVbMF0mJiJjaGlsZExpc3QiPT1lWzBdLnR5cGUmJiFlWzBdLnJlbW92ZWROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCl7dmFyIG49KHA9eihtZSwiaW5uZXJIVE1MIikpJiZwLnNldDtuJiZqKG1lLCJpbm5lckhUTUwiLHtzZXQ6ZnVuY3Rpb24oZSl7Zm9yKDt0aGlzLmxhc3RDaGlsZDspdGhpcy5yZW1vdmVDaGlsZCh0aGlzLmxhc3RDaGlsZCk7bi5jYWxsKHRoaXMsZSl9fSl9dC5kaXNjb25uZWN0KCkscD1udWxsfSkub2JzZXJ2ZShwLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLHAuaW5uZXJIVE1MPSIiKSxPZXx8KCR8fFE/KG09ZnVuY3Rpb24oZSx0KXtaLmNhbGwodCxlKXx8WmUoZSx0KX0sZj1aZSk6Zj1tPWZ1bmN0aW9uKGUsdCl7ZVtoXXx8KGVbaF09cighMCksWmUoZSx0KSl9LGZlPyhJZT0hMSxmdW5jdGlvbigpe3ZhciBlPXoobWUsVCksdD1lLnZhbHVlLG49ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEN1c3RvbUV2ZW50KE4se2J1YmJsZXM6ITB9KTt0LmF0dHJOYW1lPWUsdC5wcmV2VmFsdWU9RWUuY2FsbCh0aGlzLGUpLHQubmV3VmFsdWU9bnVsbCx0W09dPXQuYXR0ckNoYW5nZT0yLEhlLmNhbGwodGhpcyxlKSxNZS5jYWxsKHRoaXMsdCl9LHI9ZnVuY3Rpb24oZSx0KXt2YXIgbj12ZS5jYWxsKHRoaXMsZSkscj1uJiZFZS5jYWxsKHRoaXMsZSksbz1uZXcgQ3VzdG9tRXZlbnQoTix7YnViYmxlczohMH0pO2dlLmNhbGwodGhpcyxlLHQpLG8uYXR0ck5hbWU9ZSxvLnByZXZWYWx1ZT1uP3I6bnVsbCxvLm5ld1ZhbHVlPXQsbj9vLk1PRElGSUNBVElPTj1vLmF0dHJDaGFuZ2U9MTpvW0FdPW8uYXR0ckNoYW5nZT0wLE1lLmNhbGwodGhpcyxvKX0sbz1mdW5jdGlvbihlKXt2YXIgdCxuPWUuY3VycmVudFRhcmdldCxyPW5baF0sbz1lLnByb3BlcnR5TmFtZTtyLmhhc093blByb3BlcnR5KG8pJiYocj1yW29dLCh0PW5ldyBDdXN0b21FdmVudChOLHtidWJibGVzOiEwfSkpLmF0dHJOYW1lPXIubmFtZSx0LnByZXZWYWx1ZT1yLnZhbHVlfHxudWxsLHQubmV3VmFsdWU9ci52YWx1ZT1uW29dfHxudWxsLG51bGw9PXQucHJldlZhbHVlP3RbQV09dC5hdHRyQ2hhbmdlPTA6dC5NT0RJRklDQVRJT049dC5hdHRyQ2hhbmdlPTEsTWUuY2FsbChuLHQpKX07ZS52YWx1ZT1mdW5jdGlvbihlLGwsYSl7ZT09PU4mJnRoaXNbSF0mJnRoaXMuc2V0QXR0cmlidXRlIT09ciYmKHRoaXNbaF09e2NsYXNzTmFtZTp7bmFtZToiY2xhc3MiLHZhbHVlOnRoaXMuY2xhc3NOYW1lfX0sdGhpcy5zZXRBdHRyaWJ1dGU9cix0aGlzLnJlbW92ZUF0dHJpYnV0ZT1uLHQuY2FsbCh0aGlzLCJwcm9wZXJ0eWNoYW5nZSIsbykpLHQuY2FsbCh0aGlzLGUsbCxhKX0saihtZSxULGUpfSgpKTpzZXx8KF9bVF0oTix3ZSksXy5zZXRBdHRyaWJ1dGUoaCwxKSxfLnJlbW92ZUF0dHJpYnV0ZShoKSxJZSYmKGE9ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2lmKHRoaXM9PT1lLnRhcmdldCl7Zm9yKHIgaW4gdD10aGlzW2hdLHRoaXNbaF09bj11KHRoaXMpLG4pe2lmKCEociBpbiB0KSlyZXR1cm4gaSgwLHRoaXMscix0W3JdLG5bcl0sQSk7aWYobltyXSE9PXRbcl0pcmV0dXJuIGkoMSx0aGlzLHIsdFtyXSxuW3JdLCJNT0RJRklDQVRJT04iKX1mb3IociBpbiB0KWlmKCEociBpbiBuKSlyZXR1cm4gaSgyLHRoaXMscix0W3JdLG5bcl0sTyl9fSxpPWZ1bmN0aW9uKGUsdCxuLHIsbyxsKXt2YXIgYT17YXR0ckNoYW5nZTplLGN1cnJlbnRUYXJnZXQ6dCxhdHRyTmFtZTpuLHByZXZWYWx1ZTpyLG5ld1ZhbHVlOm99O2FbbF09ZSxfZShhKX0sdT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyPXt9LG89ZS5hdHRyaWJ1dGVzLGw9MCxhPW8ubGVuZ3RoO2w8YTtsKyspInNldEF0dHJpYnV0ZSIhPT0obj0odD1vW2xdKS5uYW1lKSYmKHJbbl09dC52YWx1ZSk7cmV0dXJuIHJ9KSksbltkXT1mdW5jdGlvbihlLHQpe2lmKHI9ZS50b1VwcGVyQ2FzZSgpLE5lJiYoTmU9ITEsc2U/KGM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7dChlW24rK10pKTt9cmV0dXJuIG5ldyBzZShmdW5jdGlvbihyKXtmb3IodmFyIG8sbCxhLGk9MCx1PXIubGVuZ3RoO2k8dTtpKyspImNoaWxkTGlzdCI9PT0obz1yW2ldKS50eXBlPyhuKG8uYWRkZWROb2RlcyxlKSxuKG8ucmVtb3ZlZE5vZGVzLHQpKToobD1vLnRhcmdldCxTZSYmbFtIXSYmInN0eWxlIiE9PW8uYXR0cmlidXRlTmFtZSYmKGE9RWUuY2FsbChsLG8uYXR0cmlidXRlTmFtZSkpIT09by5vbGRWYWx1ZSYmbFtIXShvLmF0dHJpYnV0ZU5hbWUsby5vbGRWYWx1ZSxhKSl9KX0oUmUoTCksUmUoRSkpLChzPWZ1bmN0aW9uKGUpe3JldHVybiBjLm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxlfSkobiksVGUmJihtZS5hdHRhY2hTaGFkb3c9ZnVuY3Rpb24oKXtyZXR1cm4gcyhUZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpOihsPVtdLG5bVF0oIkRPTU5vZGVJbnNlcnRlZCIscWUoTCkpLG5bVF0oIkRPTU5vZGVSZW1vdmVkIixxZShFKSkpLG5bVF0oRCx4ZSksbltUXSgicmVhZHlzdGF0ZWNoYW5nZSIseGUpLG1lLmNsb25lTm9kZT1mdW5jdGlvbihlKXt2YXIgdD1MZS5jYWxsKHRoaXMsISFlKSxuPVVlKHQpO3JldHVybi0xPG4mJmYodCxVW25dKSxlJiZrLmxlbmd0aCYmZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MCxyPWUubGVuZ3RoO248cjtuKyspZih0PWVbbl0sVVtVZSh0KV0pfSh0LnF1ZXJ5U2VsZWN0b3JBbGwoaykpLHR9KSxEZSlyZXR1cm4gRGU9ITE7aWYoLTI8cS5jYWxsKFIsUytyKStxLmNhbGwoUixGK3IpJiZqZShlKSwhVi50ZXN0KHIpfHwtMTxxLmNhbGwoUCxyKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlICIrZSsiIGlzIGludmFsaWQiKTt2YXIgcixvLGE9ZnVuY3Rpb24oKXtyZXR1cm4gdT9uLmNyZWF0ZUVsZW1lbnQobSxyKTpuLmNyZWF0ZUVsZW1lbnQobSl9LGk9dHx8eCx1PUIuY2FsbChpLHYpLG09dT90W3ZdLnRvVXBwZXJDYXNlKCk6cjtyZXR1cm4gdSYmLTE8cS5jYWxsKFIsRittKSYmamUobSksbz1SLnB1c2goKHU/UzpGKStyKS0xLGs9ay5jb25jYXQoay5sZW5ndGg/IiwiOiIiLHU/bSsnW2lzPSInK2UudG9Mb3dlckNhc2UoKSsnIl0nOm0pLGEucHJvdG90eXBlPVVbb109Qi5jYWxsKGksInByb3RvdHlwZSIpP2kucHJvdG90eXBlOnVlKG1lKSxrLmxlbmd0aCYmUGUobi5xdWVyeVNlbGVjdG9yQWxsKGspLEwpLGF9LG4uY3JlYXRlRWxlbWVudD15ZT1mdW5jdGlvbihlLHQpe3ZhciByPSRlKHQpLG89cj9iZS5jYWxsKG4sZSxpZShyKSk6YmUuY2FsbChuLGUpLGw9IiIrZSxhPXEuY2FsbChSLChyP1M6RikrKHJ8fGwpLnRvVXBwZXJDYXNlKCkpLGk9LTE8YTtyZXR1cm4gciYmKG8uc2V0QXR0cmlidXRlKCJpcyIscj1yLnRvTG93ZXJDYXNlKCkpLGkmJihpPWtlKGwudG9VcHBlckNhc2UoKSxyKSkpLFNlPSFuLmNyZWF0ZUVsZW1lbnQuaW5uZXJIVE1MSGVscGVyLGkmJmYobyxVW2FdKSxvfSksemUucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6ZSxkZWZpbmU6Sj9mdW5jdGlvbihlLHQsbil7aWYobilLZShlLHQsbik7ZWxzZXt2YXIgcj1lLnRvVXBwZXJDYXNlKCk7b2Vbcl09e2NvbnN0cnVjdG9yOnQsY3JlYXRlOltyXX0sYWUuc2V0KHQsciksWS5kZWZpbmUoZSx0KX19OktlLGdldDpKP2Z1bmN0aW9uKGUpe3JldHVybiBZLmdldChlKXx8WGUoZSl9OlhlLHdoZW5EZWZpbmVkOko/ZnVuY3Rpb24oZSl7cmV0dXJuIG5lLnJhY2UoW1kud2hlbkRlZmluZWQoZSksV2UoZSldKX06V2V9LCFZfHwvXmZvcmNlLy50ZXN0KHQudHlwZSkpWWUoKTtlbHNlIGlmKCF0Lm5vQnVpbHRJbil0cnl7IWZ1bmN0aW9uKHQscixvKXt2YXIgbD1uZXcgUmVnRXhwKCJePGFcXHMraXM9KCd8XCIpIitvKyJcXDE+PC9hPiQiKTtpZihyW3ZdPSJhIiwodC5wcm90b3R5cGU9dWUoSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9dCxlLmN1c3RvbUVsZW1lbnRzLmRlZmluZShvLHQsciksIWwudGVzdChuLmNyZWF0ZUVsZW1lbnQoImEiLHtpczpvfSkub3V0ZXJIVE1MKXx8IWwudGVzdCgobmV3IHQpLm91dGVySFRNTCkpdGhyb3cgcn0oZnVuY3Rpb24gZSgpe3JldHVybiBSZWZsZWN0LmNvbnN0cnVjdChIVE1MQW5jaG9yRWxlbWVudCxbXSxlKX0se30sImRvY3VtZW50LXJlZ2lzdGVyLWVsZW1lbnQtYSIpfWNhdGNoKGUpe1llKCl9aWYoIXQubm9CdWlsdEluKXRyeXtiZS5jYWxsKG4sImEiLCJhIil9Y2F0Y2goZSl7aWU9ZnVuY3Rpb24oZSl7cmV0dXJue2lzOmUudG9Mb3dlckNhc2UoKX19fX0od2luZG93KTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NyaXB0cy5qcy5tYXAhZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtmb3IodmFyIG4saSxhPXJbMF0sYz1yWzFdLGw9clsyXSxwPTAsZj1bXTtwPGEubGVuZ3RoO3ArKylvW2k9YVtwXV0mJmYucHVzaChvW2ldWzBdKSxvW2ldPTA7Zm9yKG4gaW4gYylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxuKSYmKGVbbl09Y1tuXSk7Zm9yKHMmJnMocik7Zi5sZW5ndGg7KWYuc2hpZnQoKSgpO3JldHVybiB1LnB1c2guYXBwbHkodSxsfHxbXSksdCgpfWZ1bmN0aW9uIHQoKXtmb3IodmFyIGUscj0wO3I8dS5sZW5ndGg7cisrKXtmb3IodmFyIHQ9dVtyXSxuPSEwLGE9MTthPHQubGVuZ3RoO2ErKykwIT09b1t0W2FdXSYmKG49ITEpO24mJih1LnNwbGljZShyLS0sMSksZT1pKGkucz10WzBdKSl9cmV0dXJuIGV9dmFyIG49e30sbz17MzowfSx1PVtdO2Z1bmN0aW9uIGkocil7aWYobltyXSlyZXR1cm4gbltyXS5leHBvcnRzO3ZhciB0PW5bcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwodC5leHBvcnRzLHQsdC5leHBvcnRzLGkpLHQubD0hMCx0LmV4cG9ydHN9aS5lPWZ1bmN0aW9uKGUpe3ZhciByPVtdLHQ9b1tlXTtpZigwIT09dClpZih0KXIucHVzaCh0WzJdKTtlbHNle3ZhciBuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7dD1vW2VdPVtyLG5dfSk7ci5wdXNoKHRbMl09bik7dmFyIHU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2EuY2hhcnNldD0idXRmLTgiLGEudGltZW91dD0xMjAsaS5uYyYmYS5zZXRBdHRyaWJ1dGUoIm5vbmNlIixpLm5jKSxhLnNyYz1mdW5jdGlvbihlKXtyZXR1cm4gaS5wKyIiKyh7fVtlXXx8ZSkrIi5qcyJ9KGUpO3ZhciBjPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtsKHt0eXBlOiJ0aW1lb3V0Iix0YXJnZXQ6YX0pfSwxMmU0KTtmdW5jdGlvbiBsKHIpe2Eub25lcnJvcj1hLm9ubG9hZD1udWxsLGNsZWFyVGltZW91dChjKTt2YXIgdD1vW2VdO2lmKDAhPT10KXtpZih0KXt2YXIgbj1yJiYoImxvYWQiPT09ci50eXBlPyJtaXNzaW5nIjpyLnR5cGUpLHU9ciYmci50YXJnZXQmJnIudGFyZ2V0LnNyYyxpPW5ldyBFcnJvcigiTG9hZGluZyBjaHVuayAiK2UrIiBmYWlsZWQuXG4oIituKyI6ICIrdSsiKSIpO2kudHlwZT1uLGkucmVxdWVzdD11LHRbMV0oaSl9b1tlXT12b2lkIDB9fWEub25lcnJvcj1hLm9ubG9hZD1sLHUuYXBwZW5kQ2hpbGQoYSl9cmV0dXJuIFByb21pc2UuYWxsKHIpfSxpLm09ZSxpLmM9bixpLmQ9ZnVuY3Rpb24oZSxyLHQpe2kubyhlLHIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6dH0pfSxpLnI9ZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxpLm49ZnVuY3Rpb24oZSl7dmFyIHI9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIGkuZChyLCJhIixyKSxyfSxpLm89ZnVuY3Rpb24oZSxyKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscil9LGkucD0iIixpLm9lPWZ1bmN0aW9uKGUpe3Rocm93IGNvbnNvbGUuZXJyb3IoZSksZX07dmFyIGE9d2luZG93LndlYnBhY2tKc29ucD13aW5kb3cud2VicGFja0pzb25wfHxbXSxjPWEucHVzaC5iaW5kKGEpO2EucHVzaD1yLGE9YS5zbGljZSgpO2Zvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKXIoYVtsXSk7dmFyIHM9Yzt0KCl9KFtdKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnVudGltZS5qcy5tYXAod2luZG93LndlYnBhY2tKc29ucD13aW5kb3cud2VicGFja0pzb25wfHxbXSkucHVzaChbWzVdLHsiK3JMdiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImR5WlgiKS5kb2N1bWVudDtlLmV4cG9ydHM9ciYmci5kb2N1bWVudEVsZW1lbnR9LCIwL1I0IjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/bnVsbCE9PWU6ImZ1bmN0aW9uIj09dHlwZW9mIGV9fSwiMFRXcCI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZXJmb3JtYW5jZTtmdW5jdGlvbiBuKGUpe3QmJnQubWFyayYmdC5tYXJrKGUpfWZ1bmN0aW9uIHIoZSxuKXt0JiZ0Lm1lYXN1cmUmJnQubWVhc3VyZShlLG4pfWlmKG4oIlpvbmUiKSxlLlpvbmUpdGhyb3cgbmV3IEVycm9yKCJab25lIGFscmVhZHkgbG9hZGVkLiIpO3ZhciBvLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsdCl7dGhpcy5fcHJvcGVydGllcz1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX25hbWU9dD90Lm5hbWV8fCJ1bm5hbWVkIjoiPHJvb3Q+Iix0aGlzLl9wcm9wZXJ0aWVzPXQmJnQucHJvcGVydGllc3x8e30sdGhpcy5fem9uZURlbGVnYXRlPW5ldyBjKHRoaXMsdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSx0KX1yZXR1cm4gdC5hc3NlcnRab25lUGF0Y2hlZD1mdW5jdGlvbigpe2lmKGUuUHJvbWlzZSE9PU8uWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBsaWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBvbHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicm9vdCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgZT10LmN1cnJlbnQ7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImN1cnJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC56b25lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjdXJyZW50VGFzayIse2dldDpmdW5jdGlvbigpe3JldHVybiBqfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQuX19sb2FkX3BhdGNoPWZ1bmN0aW9uKG8saSl7aWYoTy5oYXNPd25Qcm9wZXJ0eShvKSl0aHJvdyBFcnJvcigiQWxyZWFkeSBsb2FkZWQgcGF0Y2g6ICIrbyk7aWYoIWVbIl9fWm9uZV9kaXNhYmxlXyIrb10pe3ZhciBhPSJab25lOiIrbztuKGEpLE9bb109aShlLHQsUykscihhLGEpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYW1lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFpvbmVXaXRoKGUpO2lmKHQpcmV0dXJuIHQuX3Byb3BlcnRpZXNbZV19LHQucHJvdG90eXBlLmdldFpvbmVXaXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzO3Q7KXtpZih0Ll9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGUpKXJldHVybiB0O3Q9dC5fcGFyZW50fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiWm9uZVNwZWMgcmVxdWlyZWQhIik7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5mb3JrKHRoaXMsZSl9LHQucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBmdW5jdGlvbiBnb3Q6ICIrZSk7dmFyIG49dGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLGUsdCkscj10aGlzO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByLnJ1bkd1YXJkZWQobix0aGlzLGFyZ3VtZW50cyx0KX19LHQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT10JiYodD12b2lkIDApLHZvaWQgMD09PW4mJihuPW51bGwpLHZvaWQgMD09PXImJihyPW51bGwpLEQ9e3BhcmVudDpELHpvbmU6dGhpc307dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsZSx0LG4scil9ZmluYWxseXtEPUQucGFyZW50fX0sdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT10JiYodD1udWxsKSx2b2lkIDA9PT1uJiYobj1udWxsKSx2b2lkIDA9PT1yJiYocj1udWxsKSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxlLHQsbixyKX1jYXRjaChlKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxlKSl0aHJvdyBlfX1maW5hbGx5e0Q9RC5wYXJlbnR9fSx0LnByb3RvdHlwZS5ydW5UYXNrPWZ1bmN0aW9uKGUsdCxuKXtpZihlLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKGUuem9uZXx8ZykubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7aWYoZS5zdGF0ZSE9PXl8fGUudHlwZSE9PXgpe3ZhciByPWUuc3RhdGUhPWs7ciYmZS5fdHJhbnNpdGlvblRvKGssbSksZS5ydW5Db3VudCsrO3ZhciBvPWo7aj1lLEQ9e3BhcmVudDpELHpvbmU6dGhpc307dHJ5e2UudHlwZT09RSYmZS5kYXRhJiYhZS5kYXRhLmlzUGVyaW9kaWMmJihlLmNhbmNlbEZuPW51bGwpO3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZVRhc2sodGhpcyxlLHQsbil9Y2F0Y2goZSl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsZSkpdGhyb3cgZX19ZmluYWxseXtlLnN0YXRlIT09eSYmZS5zdGF0ZSE9PVQmJihlLnR5cGU9PXh8fGUuZGF0YSYmZS5kYXRhLmlzUGVyaW9kaWM/ciYmZS5fdHJhbnNpdGlvblRvKG0sayk6KGUucnVuQ291bnQ9MCx0aGlzLl91cGRhdGVUYXNrQ291bnQoZSwtMSksciYmZS5fdHJhbnNpdGlvblRvKHksayx5KSkpLEQ9RC5wYXJlbnQsaj1vfX19LHQucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihlKXtpZihlLnpvbmUmJmUuem9uZSE9PXRoaXMpZm9yKHZhciB0PXRoaXM7dDspe2lmKHQ9PT1lLnpvbmUpdGhyb3cgRXJyb3IoImNhbiBub3QgcmVzY2hlZHVsZSB0YXNrIHRvICIrdGhpcy5uYW1lKyIgd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgIitlLnpvbmUubmFtZSk7dD10LnBhcmVudH1lLl90cmFuc2l0aW9uVG8oXyx5KTt2YXIgbj1bXTtlLl96b25lRGVsZWdhdGVzPW4sZS5fem9uZT10aGlzO3RyeXtlPXRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGhpcyxlKX1jYXRjaCh0KXt0aHJvdyBlLl90cmFuc2l0aW9uVG8oVCxfLHkpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHQpLHR9cmV0dXJuIGUuX3pvbmVEZWxlZ2F0ZXM9PT1uJiZ0aGlzLl91cGRhdGVUYXNrQ291bnQoZSwxKSxlLnN0YXRlPT1fJiZlLl90cmFuc2l0aW9uVG8obSxfKSxlfSx0LnByb3RvdHlwZS5zY2hlZHVsZU1pY3JvVGFzaz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHUodyxlLHQsbixyLG51bGwpKX0sdC5wcm90b3R5cGUuc2NoZWR1bGVNYWNyb1Rhc2s9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHUoRSxlLHQsbixyLG8pKX0sdC5wcm90b3R5cGUuc2NoZWR1bGVFdmVudFRhc2s9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHUoeCxlLHQsbixyLG8pKX0sdC5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbihlKXtpZihlLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKGUuem9uZXx8ZykubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7ZS5fdHJhbnNpdGlvblRvKGIsbSxrKTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyxlKX1jYXRjaCh0KXt0aHJvdyBlLl90cmFuc2l0aW9uVG8oVCxiKSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyx0KSx0fXJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQoZSwtMSksZS5fdHJhbnNpdGlvblRvKHksYiksZS5ydW5Db3VudD0wLGV9LHQucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl96b25lRGVsZWdhdGVzOy0xPT10JiYoZS5fem9uZURlbGVnYXRlcz1udWxsKTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLl91cGRhdGVUYXNrQ291bnQoZS50eXBlLHQpfSx0Ll9fc3ltYm9sX189eix0fSgpLGE9e25hbWU6IiIsb25IYXNUYXNrOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLmhhc1Rhc2sobixyKX0sb25TY2hlZHVsZVRhc2s6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGUuc2NoZWR1bGVUYXNrKG4scil9LG9uSW52b2tlVGFzazpmdW5jdGlvbihlLHQsbixyLG8saSl7cmV0dXJuIGUuaW52b2tlVGFzayhuLHIsbyxpKX0sb25DYW5jZWxUYXNrOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLmNhbmNlbFRhc2sobixyKX19LGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLl90YXNrQ291bnRzPXttaWNyb1Rhc2s6MCxtYWNyb1Rhc2s6MCxldmVudFRhc2s6MH0sdGhpcy56b25lPWUsdGhpcy5fcGFyZW50RGVsZWdhdGU9dCx0aGlzLl9mb3JrWlM9biYmKG4mJm4ub25Gb3JrP246dC5fZm9ya1pTKSx0aGlzLl9mb3JrRGxndD1uJiYobi5vbkZvcms/dDp0Ll9mb3JrRGxndCksdGhpcy5fZm9ya0N1cnJab25lPW4mJihuLm9uRm9yaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9pbnRlcmNlcHRaUz1uJiYobi5vbkludGVyY2VwdD9uOnQuX2ludGVyY2VwdFpTKSx0aGlzLl9pbnRlcmNlcHREbGd0PW4mJihuLm9uSW50ZXJjZXB0P3Q6dC5faW50ZXJjZXB0RGxndCksdGhpcy5faW50ZXJjZXB0Q3VyclpvbmU9biYmKG4ub25JbnRlcmNlcHQ/dGhpcy56b25lOnQuem9uZSksdGhpcy5faW52b2tlWlM9biYmKG4ub25JbnZva2U/bjp0Ll9pbnZva2VaUyksdGhpcy5faW52b2tlRGxndD1uJiYobi5vbkludm9rZT90OnQuX2ludm9rZURsZ3QpLHRoaXMuX2ludm9rZUN1cnJab25lPW4mJihuLm9uSW52b2tlP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9biYmKG4ub25IYW5kbGVFcnJvcj9uOnQuX2hhbmRsZUVycm9yWlMpLHRoaXMuX2hhbmRsZUVycm9yRGxndD1uJiYobi5vbkhhbmRsZUVycm9yP3Q6dC5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPW4mJihuLm9uSGFuZGxlRXJyb3I/dGhpcy56b25lOnQuem9uZSksdGhpcy5fc2NoZWR1bGVUYXNrWlM9biYmKG4ub25TY2hlZHVsZVRhc2s/bjp0Ll9zY2hlZHVsZVRhc2taUyksdGhpcy5fc2NoZWR1bGVUYXNrRGxndD1uJiYobi5vblNjaGVkdWxlVGFzaz90OnQuX3NjaGVkdWxlVGFza0RsZ3QpLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPW4mJihuLm9uU2NoZWR1bGVUYXNrP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2ludm9rZVRhc2taUz1uJiYobi5vbkludm9rZVRhc2s/bjp0Ll9pbnZva2VUYXNrWlMpLHRoaXMuX2ludm9rZVRhc2tEbGd0PW4mJihuLm9uSW52b2tlVGFzaz90OnQuX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9biYmKG4ub25JbnZva2VUYXNrP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1uJiYobi5vbkNhbmNlbFRhc2s/bjp0Ll9jYW5jZWxUYXNrWlMpLHRoaXMuX2NhbmNlbFRhc2tEbGd0PW4mJihuLm9uQ2FuY2VsVGFzaz90OnQuX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9biYmKG4ub25DYW5jZWxUYXNrP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO3ZhciByPW4mJm4ub25IYXNUYXNrOyhyfHx0JiZ0Ll9oYXNUYXNrWlMpJiYodGhpcy5faGFzVGFza1pTPXI/bjphLHRoaXMuX2hhc1Rhc2tEbGd0PXQsdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1lLG4ub25TY2hlZHVsZVRhc2t8fCh0aGlzLl9zY2hlZHVsZVRhc2taUz1hLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9dCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLG4ub25JbnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPWEsdGhpcy5faW52b2tlVGFza0RsZ3Q9dCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxuLm9uQ2FuY2VsVGFza3x8KHRoaXMuX2NhbmNlbFRhc2taUz1hLHRoaXMuX2NhbmNlbFRhc2tEbGd0PXQsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPXRoaXMuem9uZSkpfXJldHVybiBlLnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2ZvcmtaUz90aGlzLl9mb3JrWlMub25Gb3JrKHRoaXMuX2ZvcmtEbGd0LHRoaXMuem9uZSxlLHQpOm5ldyBpKGUsdCl9LGUucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuX2ludGVyY2VwdFpTP3RoaXMuX2ludGVyY2VwdFpTLm9uSW50ZXJjZXB0KHRoaXMuX2ludGVyY2VwdERsZ3QsdGhpcy5faW50ZXJjZXB0Q3VyclpvbmUsZSx0LG4pOnR9LGUucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbihlLHQsbixyLG8pe3JldHVybiB0aGlzLl9pbnZva2VaUz90aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LHRoaXMuX2ludm9rZUN1cnJab25lLGUsdCxuLHIsbyk6dC5hcHBseShuLHIpfSxlLnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbihlLHQpe3JldHVybiF0aGlzLl9oYW5kbGVFcnJvclpTfHx0aGlzLl9oYW5kbGVFcnJvclpTLm9uSGFuZGxlRXJyb3IodGhpcy5faGFuZGxlRXJyb3JEbGd0LHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUsZSx0KX0sZS5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKGUsdCl7dmFyIG49dDtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJm4uX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSwobj10aGlzLl9zY2hlZHVsZVRhc2taUy5vblNjaGVkdWxlVGFzayh0aGlzLl9zY2hlZHVsZVRhc2tEbGd0LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lLGUsdCkpfHwobj10KTtlbHNlIGlmKHQuc2NoZWR1bGVGbil0LnNjaGVkdWxlRm4odCk7ZWxzZXtpZih0LnR5cGUhPXcpdGhyb3cgbmV3IEVycm9yKCJUYXNrIGlzIG1pc3Npbmcgc2NoZWR1bGVGbi4iKTt2KHQpfXJldHVybiBufSxlLnByb3RvdHlwZS5pbnZva2VUYXNrPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsZSx0LG4scik6dC5jYWxsYmFjay5hcHBseShuLHIpfSxlLnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKGUsdCl7dmFyIG47aWYodGhpcy5fY2FuY2VsVGFza1pTKW49dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFzayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsZSx0KTtlbHNle2lmKCF0LmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7bj10LmNhbmNlbEZuKHQpfXJldHVybiBufSxlLnByb3RvdHlwZS5oYXNUYXNrPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiB0aGlzLl9oYXNUYXNrWlMmJnRoaXMuX2hhc1Rhc2taUy5vbkhhc1Rhc2sodGhpcy5faGFzVGFza0RsZ3QsdGhpcy5faGFzVGFza0N1cnJab25lLGUsdCl9Y2F0Y2godCl7dGhpcy5oYW5kbGVFcnJvcihlLHQpfX0sZS5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX3Rhc2tDb3VudHMscj1uW2VdLG89bltlXT1yK3Q7aWYobzwwKXRocm93IG5ldyBFcnJvcigiTW9yZSB0YXNrcyBleGVjdXRlZCB0aGVuIHdlcmUgc2NoZWR1bGVkLiIpOzAhPXImJjAhPW98fHRoaXMuaGFzVGFzayh0aGlzLnpvbmUse21pY3JvVGFzazpuLm1pY3JvVGFzaz4wLG1hY3JvVGFzazpuLm1hY3JvVGFzaz4wLGV2ZW50VGFzazpuLmV2ZW50VGFzaz4wLGNoYW5nZTplfSl9LGV9KCksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobixyLG8saSxhLGMpe3RoaXMuX3pvbmU9bnVsbCx0aGlzLnJ1bkNvdW50PTAsdGhpcy5fem9uZURlbGVnYXRlcz1udWxsLHRoaXMuX3N0YXRlPSJub3RTY2hlZHVsZWQiLHRoaXMudHlwZT1uLHRoaXMuc291cmNlPXIsdGhpcy5kYXRhPWksdGhpcy5zY2hlZHVsZUZuPWEsdGhpcy5jYW5jZWxGbj1jLHRoaXMuY2FsbGJhY2s9bzt2YXIgdT10aGlzO3RoaXMuaW52b2tlPW49PT14JiZpJiZpLnVzZUc/dC5pbnZva2VUYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIHQuaW52b2tlVGFzay5jYWxsKGUsdSx0aGlzLGFyZ3VtZW50cyl9fXJldHVybiB0Lmludm9rZVRhc2s9ZnVuY3Rpb24oZSx0LG4pe2V8fChlPXRoaXMpLFArKzt0cnl7cmV0dXJuIGUucnVuQ291bnQrKyxlLnpvbmUucnVuVGFzayhlLHQsbil9ZmluYWxseXsxPT1QJiZkKCksUC0tfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ6b25lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdGF0ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZVJlcXVlc3Q9ZnVuY3Rpb24oKXt0aGlzLl90cmFuc2l0aW9uVG8oeSxfKX0sdC5wcm90b3R5cGUuX3RyYW5zaXRpb25Ubz1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5fc3RhdGUhPT10JiZ0aGlzLl9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKHRoaXMudHlwZSsiICciK3RoaXMuc291cmNlKyInOiBjYW4gbm90IHRyYW5zaXRpb24gdG8gJyIrZSsiJywgZXhwZWN0aW5nIHN0YXRlICciK3QrIiciKyhuPyIgb3IgJyIrbisiJyI6IiIpKyIsIHdhcyAnIit0aGlzLl9zdGF0ZSsiJy4iKTt0aGlzLl9zdGF0ZT1lLGU9PXkmJih0aGlzLl96b25lRGVsZWdhdGVzPW51bGwpfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEmJnZvaWQgMCE9PXRoaXMuZGF0YS5oYW5kbGVJZD90aGlzLmRhdGEuaGFuZGxlSWQ6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTp0aGlzLnR5cGUsc3RhdGU6dGhpcy5zdGF0ZSxzb3VyY2U6dGhpcy5zb3VyY2Usem9uZTp0aGlzLnpvbmUubmFtZSxydW5Db3VudDp0aGlzLnJ1bkNvdW50fX0sdH0oKSxzPXooInNldFRpbWVvdXQiKSxsPXooIlByb21pc2UiKSxmPXooInRoZW4iKSxwPVtdLGg9ITE7ZnVuY3Rpb24gdih0KXswPT09UCYmMD09PXAubGVuZ3RoJiYob3x8ZVtsXSYmKG89ZVtsXS5yZXNvbHZlKDApKSxvP29bZl0oZCk6ZVtzXShkLDApKSx0JiZwLnB1c2godCl9ZnVuY3Rpb24gZCgpe2lmKCFoKXtmb3IoaD0hMDtwLmxlbmd0aDspe3ZhciBlPXA7cD1bXTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XTt0cnl7bi56b25lLnJ1blRhc2sobixudWxsLG51bGwpfWNhdGNoKGUpe1Mub25VbmhhbmRsZWRFcnJvcihlKX19fVMubWljcm90YXNrRHJhaW5Eb25lKCksaD0hMX19dmFyIGc9e25hbWU6Ik5PIFpPTkUifSx5PSJub3RTY2hlZHVsZWQiLF89InNjaGVkdWxpbmciLG09InNjaGVkdWxlZCIsaz0icnVubmluZyIsYj0iY2FuY2VsaW5nIixUPSJ1bmtub3duIix3PSJtaWNyb1Rhc2siLEU9Im1hY3JvVGFzayIseD0iZXZlbnRUYXNrIixPPXt9LFM9e3N5bWJvbDp6LGN1cnJlbnRab25lRnJhbWU6ZnVuY3Rpb24oKXtyZXR1cm4gRH0sb25VbmhhbmRsZWRFcnJvcjpaLG1pY3JvdGFza0RyYWluRG9uZTpaLHNjaGVkdWxlTWljcm9UYXNrOnYsc2hvd1VuY2F1Z2h0RXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4haVt6KCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yIildfSxwYXRjaEV2ZW50VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoT25Qcm9wZXJ0aWVzOloscGF0Y2hNZXRob2Q6ZnVuY3Rpb24oKXtyZXR1cm4gWn0sYmluZEFyZ3VtZW50czpmdW5jdGlvbigpe3JldHVybiBudWxsfSxzZXROYXRpdmVQcm9taXNlOmZ1bmN0aW9uKGUpe2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlc29sdmUmJihvPWUucmVzb2x2ZSgwKSl9fSxEPXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBpKG51bGwsbnVsbCl9LGo9bnVsbCxQPTA7ZnVuY3Rpb24gWigpe31mdW5jdGlvbiB6KGUpe3JldHVybiJfX3pvbmVfc3ltYm9sX18iK2V9cigiWm9uZSIsIlpvbmUiKSxlLlpvbmU9aX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmfHxnbG9iYWwpLFpvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIixmdW5jdGlvbihlLHQsbil7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxpPW4uc3ltYm9sLGE9W10sYz1pKCJQcm9taXNlIiksdT1pKCJ0aGVuIikscz0iX19jcmVhdGlvblRyYWNlX18iO24ub25VbmhhbmRsZWRFcnJvcj1mdW5jdGlvbihlKXtpZihuLnNob3dVbmNhdWdodEVycm9yKCkpe3ZhciB0PWUmJmUucmVqZWN0aW9uO3Q/Y29uc29sZS5lcnJvcigiVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uOiIsdCBpbnN0YW5jZW9mIEVycm9yP3QubWVzc2FnZTp0LCI7IFpvbmU6IixlLnpvbmUubmFtZSwiOyBUYXNrOiIsZS50YXNrJiZlLnRhc2suc291cmNlLCI7IFZhbHVlOiIsdCx0IGluc3RhbmNlb2YgRXJyb3I/dC5zdGFjazp2b2lkIDApOmNvbnNvbGUuZXJyb3IoZSl9fSxuLm1pY3JvdGFza0RyYWluRG9uZT1mdW5jdGlvbigpe2Zvcig7YS5sZW5ndGg7KWZvcih2YXIgZT1mdW5jdGlvbigpe3ZhciBlPWEuc2hpZnQoKTt0cnl7ZS56b25lLnJ1bkd1YXJkZWQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9Y2F0Y2goZSl7ZihlKX19O2EubGVuZ3RoOyllKCl9O3ZhciBsPWkoInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIik7ZnVuY3Rpb24gZihlKXtuLm9uVW5oYW5kbGVkRXJyb3IoZSk7dHJ5e3ZhciByPXRbbF07ciYmImZ1bmN0aW9uIj09dHlwZW9mIHImJnIuY2FsbCh0aGlzLGUpfWNhdGNoKGUpe319ZnVuY3Rpb24gcChlKXtyZXR1cm4gZSYmZS50aGVufWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gdihlKXtyZXR1cm4gTS5yZWplY3QoZSl9dmFyIGQ9aSgic3RhdGUiKSxnPWkoInZhbHVlIikseT1pKCJmaW5hbGx5IiksXz1pKCJwYXJlbnRQcm9taXNlVmFsdWUiKSxtPWkoInBhcmVudFByb21pc2VTdGF0ZSIpLGs9IlByb21pc2UudGhlbiIsYj1udWxsLFQ9ITAsdz0hMSxFPTA7ZnVuY3Rpb24geChlLHQpe3JldHVybiBmdW5jdGlvbihuKXt0cnl7aihlLHQsbil9Y2F0Y2godCl7aihlLCExLHQpfX19dmFyIE89ZnVuY3Rpb24oKXt2YXIgZT0hMTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZXx8KGU9ITAsdC5hcHBseShudWxsLGFyZ3VtZW50cykpfX19LFM9IlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiLEQ9aSgiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIGooZSxyLGkpe3ZhciBjLHU9TygpO2lmKGU9PT1pKXRocm93IG5ldyBUeXBlRXJyb3IoUyk7aWYoZVtkXT09PWIpe3ZhciBsPW51bGw7dHJ5eyJvYmplY3QiIT10eXBlb2YgaSYmImZ1bmN0aW9uIiE9dHlwZW9mIGl8fChsPWkmJmkudGhlbil9Y2F0Y2godCl7cmV0dXJuIHUoZnVuY3Rpb24oKXtqKGUsITEsdCl9KSgpLGV9aWYociE9PXcmJmkgaW5zdGFuY2VvZiBNJiZpLmhhc093blByb3BlcnR5KGQpJiZpLmhhc093blByb3BlcnR5KGcpJiZpW2RdIT09YilaKGkpLGooZSxpW2RdLGlbZ10pO2Vsc2UgaWYociE9PXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBsKXRyeXtsLmNhbGwoaSx1KHgoZSxyKSksdSh4KGUsITEpKSl9Y2F0Y2godCl7dShmdW5jdGlvbigpe2ooZSwhMSx0KX0pKCl9ZWxzZXtlW2RdPXI7dmFyIGY9ZVtnXTtpZihlW2ddPWksZVt5XT09PXkmJnI9PT1UJiYoZVtkXT1lW21dLGVbZ109ZVtfXSkscj09PXcmJmkgaW5zdGFuY2VvZiBFcnJvcil7dmFyIHA9dC5jdXJyZW50VGFzayYmdC5jdXJyZW50VGFzay5kYXRhJiZ0LmN1cnJlbnRUYXNrLmRhdGFbc107cCYmbyhpLEQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnB9KX1mb3IodmFyIGg9MDtoPGYubGVuZ3RoOyl6KGUsZltoKytdLGZbaCsrXSxmW2grK10sZltoKytdKTtpZigwPT1mLmxlbmd0aCYmcj09dyl7ZVtkXT1FO3RyeXt0aHJvdyBuZXcgRXJyb3IoIlVuY2F1Z2h0IChpbiBwcm9taXNlKTogIisoKGM9aSkmJmMudG9TdHJpbmc9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPyhjLmNvbnN0cnVjdG9yJiZjLmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KGMpOmM/Yy50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSkrKGkmJmkuc3RhY2s/IlxuIitpLnN0YWNrOiIiKSl9Y2F0Y2gocil7dmFyIHY9cjt2LnJlamVjdGlvbj1pLHYucHJvbWlzZT1lLHYuem9uZT10LmN1cnJlbnQsdi50YXNrPXQuY3VycmVudFRhc2ssYS5wdXNoKHYpLG4uc2NoZWR1bGVNaWNyb1Rhc2soKX19fX1yZXR1cm4gZX12YXIgUD1pKCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpO2Z1bmN0aW9uIFooZSl7aWYoZVtkXT09PUUpe3RyeXt2YXIgbj10W1BdO24mJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuLmNhbGwodGhpcyx7cmVqZWN0aW9uOmVbZ10scHJvbWlzZTplfSl9Y2F0Y2goZSl7fWVbZF09dztmb3IodmFyIHI9MDtyPGEubGVuZ3RoO3IrKyllPT09YVtyXS5wcm9taXNlJiZhLnNwbGljZShyLDEpfX1mdW5jdGlvbiB6KGUsdCxuLHIsbyl7WihlKTt2YXIgaT1lW2RdLGE9aT8iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOmg6ImZ1bmN0aW9uIj09dHlwZW9mIG8/bzp2O3Quc2NoZWR1bGVNaWNyb1Rhc2soayxmdW5jdGlvbigpe3RyeXt2YXIgcj1lW2ddLG89biYmeT09PW5beV07byYmKG5bX109cixuW21dPWkpO3ZhciBjPXQucnVuKGEsdm9pZCAwLG8mJmEhPT12JiZhIT09aD9bXTpbcl0pO2oobiwhMCxjKX1jYXRjaChlKXtqKG4sITEsZSl9fSxuKX12YXIgTT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGJlIGFuIGluc3RhbmNlb2YgUHJvbWlzZS4iKTt0aGlzW2RdPWIsdGhpc1tnXT1bXTt0cnl7dCYmdCh4KHRoaXMsVCkseCh0aGlzLHcpKX1jYXRjaChlKXtqKHRoaXMsITEsZSl9fXJldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9LGUucmVzb2x2ZT1mdW5jdGlvbihlKXtyZXR1cm4gaihuZXcgdGhpcyhudWxsKSxULGUpfSxlLnJlamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gaihuZXcgdGhpcyhudWxsKSx3LGUpfSxlLnJhY2U9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPW5ldyB0aGlzKGZ1bmN0aW9uKGUscil7dD1lLG49cn0pO2Z1bmN0aW9uIG8oZSl7ciYmKHI9dChlKSl9ZnVuY3Rpb24gaShlKXtyJiYocj1uKGUpKX1mb3IodmFyIGE9MCxjPWU7YTxjLmxlbmd0aDthKyspe3ZhciB1PWNbYV07cCh1KXx8KHU9dGhpcy5yZXNvbHZlKHUpKSx1LnRoZW4obyxpKX1yZXR1cm4gcn0sZS5hbGw9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scj1uZXcgdGhpcyhmdW5jdGlvbihlLHIpe3Q9ZSxuPXJ9KSxvPTAsaT1bXSxhPTAsYz1lO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdO3AodSl8fCh1PXRoaXMucmVzb2x2ZSh1KSksdS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihuKXtpW2VdPW4sLS1vfHx0KGkpfX0obyksbiksbysrfXJldHVybiBvfHx0KGkpLHJ9LGUucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSxuKXt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihudWxsKSxvPXQuY3VycmVudDtyZXR1cm4gdGhpc1tkXT09Yj90aGlzW2ddLnB1c2gobyxyLGUsbik6eih0aGlzLG8scixlLG4pLHJ9LGUucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4obnVsbCxlKX0sZS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbihlKXt2YXIgbj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihudWxsKTtuW3ldPXk7dmFyIHI9dC5jdXJyZW50O3JldHVybiB0aGlzW2RdPT1iP3RoaXNbZ10ucHVzaChyLG4sZSxlKTp6KHRoaXMscixuLGUsZSksbn0sZX0oKTtNLnJlc29sdmU9TS5yZXNvbHZlLE0ucmVqZWN0PU0ucmVqZWN0LE0ucmFjZT1NLnJhY2UsTS5hbGw9TS5hbGw7dmFyIEM9ZVtjXT1lLlByb21pc2UsUj10Ll9fc3ltYm9sX18oIlpvbmVBd2FyZVByb21pc2UiKSxJPXIoZSwiUHJvbWlzZSIpO0kmJiFJLmNvbmZpZ3VyYWJsZXx8KEkmJmRlbGV0ZSBJLndyaXRhYmxlLEkmJmRlbGV0ZSBJLnZhbHVlLEl8fChJPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pLEkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGVbUl0/ZVtSXTplW2NdfSxJLnNldD1mdW5jdGlvbih0KXt0PT09TT9lW1JdPXQ6KGVbY109dCx0LnByb3RvdHlwZVt1XXx8cSh0KSxuLnNldE5hdGl2ZVByb21pc2UodCkpfSxvKGUsIlByb21pc2UiLEkpKSxlLlByb21pc2U9TTt2YXIgRixMPWkoInRoZW5QYXRjaGVkIik7ZnVuY3Rpb24gcShlKXt2YXIgdD1lLnByb3RvdHlwZSxuPXIodCwidGhlbiIpO2lmKCFufHwhMSE9PW4ud3JpdGFibGUmJm4uY29uZmlndXJhYmxlKXt2YXIgbz10LnRoZW47dFt1XT1vLGUucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiBuZXcgTShmdW5jdGlvbihlLHQpe28uY2FsbChuLGUsdCl9KS50aGVuKGUsdCl9LGVbTF09ITB9fWlmKEMpe3EoQyk7dmFyIEE9ZS5mZXRjaDsiZnVuY3Rpb24iPT10eXBlb2YgQSYmKGUuZmV0Y2g9KEY9QSxmdW5jdGlvbigpe3ZhciBlPUYuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGUgaW5zdGFuY2VvZiBNKXJldHVybiBlO3ZhciB0PWUuY29uc3RydWN0b3I7cmV0dXJuIHRbTF18fHEodCksZX0pKX1yZXR1cm4gUHJvbWlzZVt0Ll9fc3ltYm9sX18oInVuY2F1Z2h0UHJvbWlzZUVycm9ycyIpXT1hLE19KTt2YXIgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LG49T2JqZWN0LmdldFByb3RvdHlwZU9mLHI9T2JqZWN0LmNyZWF0ZSxvPUFycmF5LnByb3RvdHlwZS5zbGljZSxpPSJhZGRFdmVudExpc3RlbmVyIixhPSJyZW1vdmVFdmVudExpc3RlbmVyIixjPVpvbmUuX19zeW1ib2xfXyhpKSx1PVpvbmUuX19zeW1ib2xfXyhhKSxzPSJ0cnVlIixsPSJmYWxzZSIsZj0iX196b25lX3N5bWJvbF9fIjtmdW5jdGlvbiBwKGUsdCl7cmV0dXJuIFpvbmUuY3VycmVudC53cmFwKGUsdCl9ZnVuY3Rpb24gaChlLHQsbixyLG8pe3JldHVybiBab25lLmN1cnJlbnQuc2NoZWR1bGVNYWNyb1Rhc2soZSx0LG4scixvKX12YXIgdj1ab25lLl9fc3ltYm9sX18sZD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyxnPWQ/d2luZG93OnZvaWQgMCx5PWQmJmd8fCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsLF89InJlbW92ZUF0dHJpYnV0ZSIsbT1bbnVsbF07ZnVuY3Rpb24gayhlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aC0xO24+PTA7bi0tKSJmdW5jdGlvbiI9PXR5cGVvZiBlW25dJiYoZVtuXT1wKGVbbl0sdCsiXyIrbikpO3JldHVybiBlfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIWV8fCExIT09ZS53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXQmJnZvaWQgMD09PWUuc2V0KX12YXIgVD0idW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsdz0hKCJudyJpbiB5KSYmdm9pZCAwIT09eS5wcm9jZXNzJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHkucHJvY2VzcyksRT0hdyYmIVQmJiEoIWR8fCFnLkhUTUxFbGVtZW50KSx4PXZvaWQgMCE9PXkucHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbCh5LnByb2Nlc3MpJiYhVCYmISghZHx8IWcuSFRNTEVsZW1lbnQpLE89e30sUz1mdW5jdGlvbihlKXtpZihlPWV8fHkuZXZlbnQpe3ZhciB0PU9bZS50eXBlXTt0fHwodD1PW2UudHlwZV09digiT05fUFJPUEVSVFkiK2UudHlwZSkpO3ZhciBuPSh0aGlzfHxlLnRhcmdldHx8eSlbdF0scj1uJiZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdm9pZCAwPT1yfHxyfHxlLnByZXZlbnREZWZhdWx0KCkscn19O2Z1bmN0aW9uIEQobixyLG8pe3ZhciBpPWUobixyKTtpZighaSYmbyYmZShvLHIpJiYoaT17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxpJiZpLmNvbmZpZ3VyYWJsZSl7ZGVsZXRlIGkud3JpdGFibGUsZGVsZXRlIGkudmFsdWU7dmFyIGE9aS5nZXQsYz1pLnNldCx1PXIuc3Vic3RyKDIpLHM9T1t1XTtzfHwocz1PW3VdPXYoIk9OX1BST1BFUlRZIit1KSksaS5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0fHxuIT09eXx8KHQ9eSksdCYmKHRbc10mJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih1LFMpLGMmJmMuYXBwbHkodCxtKSwiZnVuY3Rpb24iPT10eXBlb2YgZT8odFtzXT1lLHQuYWRkRXZlbnRMaXN0ZW5lcih1LFMsITEpKTp0W3NdPW51bGwpfSxpLmdldD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoZXx8biE9PXl8fChlPXkpLCFlKXJldHVybiBudWxsO3ZhciB0PWVbc107aWYodClyZXR1cm4gdDtpZihhKXt2YXIgbz1hJiZhLmNhbGwodGhpcyk7aWYobylyZXR1cm4gaS5zZXQuY2FsbCh0aGlzLG8pLCJmdW5jdGlvbiI9PXR5cGVvZiBlW19dJiZlLnJlbW92ZUF0dHJpYnV0ZShyKSxvfXJldHVybiBudWxsfSx0KG4scixpKX19ZnVuY3Rpb24gaihlLHQsbil7aWYodClmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylEKGUsIm9uIit0W3JdLG4pO2Vsc2V7dmFyIG89W107Zm9yKHZhciBpIGluIGUpIm9uIj09aS5zdWJzdHIoMCwyKSYmby5wdXNoKGkpO2Zvcih2YXIgYT0wO2E8by5sZW5ndGg7YSsrKUQoZSxvW2FdLG4pfX12YXIgUD12KCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24gWihlKXt2YXIgbj15W2VdO2lmKG4pe3lbdihlKV09bix5W2VdPWZ1bmN0aW9uKCl7dmFyIHQ9ayhhcmd1bWVudHMsZSk7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6dGhpc1tQXT1uZXcgbjticmVhaztjYXNlIDE6dGhpc1tQXT1uZXcgbih0WzBdKTticmVhaztjYXNlIDI6dGhpc1tQXT1uZXcgbih0WzBdLHRbMV0pO2JyZWFrO2Nhc2UgMzp0aGlzW1BdPW5ldyBuKHRbMF0sdFsxXSx0WzJdKTticmVhaztjYXNlIDQ6dGhpc1tQXT1uZXcgbih0WzBdLHRbMV0sdFsyXSx0WzNdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQXJnIGxpc3QgdG9vIGxvbmcuIil9fSxNKHlbZV0sbik7dmFyIHIsbz1uZXcgbihmdW5jdGlvbigpe30pO2ZvcihyIGluIG8pIlhNTEh0dHBSZXF1ZXN0Ij09PWUmJiJyZXNwb25zZUJsb2IiPT09cnx8ZnVuY3Rpb24obil7ImZ1bmN0aW9uIj09dHlwZW9mIG9bbl0/eVtlXS5wcm90b3R5cGVbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tQXVtuXS5hcHBseSh0aGlzW1BdLGFyZ3VtZW50cyl9OnQoeVtlXS5wcm90b3R5cGUsbix7c2V0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiI9PXR5cGVvZiB0Pyh0aGlzW1BdW25dPXAodCxlKyIuIituKSxNKHRoaXNbUF1bbl0sdCkpOnRoaXNbUF1bbl09dH0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbUF1bbl19fSl9KHIpO2ZvcihyIGluIG4pInByb3RvdHlwZSIhPT1yJiZuLmhhc093blByb3BlcnR5KHIpJiYoeVtlXVtyXT1uW3JdKX19ZnVuY3Rpb24geih0LHIsbyl7Zm9yKHZhciBpPXQ7aSYmIWkuaGFzT3duUHJvcGVydHkocik7KWk9bihpKTshaSYmdFtyXSYmKGk9dCk7dmFyIGEsYz12KHIpO2lmKGkmJiEoYT1pW2NdKSYmKGE9aVtjXT1pW3JdLGIoaSYmZShpLHIpKSkpe3ZhciB1PW8oYSxjLHIpO2lbcl09ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLGFyZ3VtZW50cyl9LE0oaVtyXSxhKX1yZXR1cm4gYX1mdW5jdGlvbiBNKGUsdCl7ZVt2KCJPcmlnaW5hbERlbGVnYXRlIildPXR9dmFyIEM9ITEsUj0hMTtmdW5jdGlvbiBJKCl7aWYoQylyZXR1cm4gUjtDPSEwO3RyeXt2YXIgZT1nLm5hdmlnYXRvci51c2VyQWdlbnQ7cmV0dXJuLTE9PT1lLmluZGV4T2YoIk1TSUUgIikmJi0xPT09ZS5pbmRleE9mKCJUcmlkZW50LyIpJiYtMT09PWUuaW5kZXhPZigiRWRnZS8iKXx8KFI9ITApLFJ9Y2F0Y2goZSl7fX1ab25lLl9fbG9hZF9wYXRjaCgidG9TdHJpbmciLGZ1bmN0aW9uKGUpe3ZhciB0PUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxuPXYoIk9yaWdpbmFsRGVsZWdhdGUiKSxyPXYoIlByb21pc2UiKSxvPXYoIkVycm9yIiksaT1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXt2YXIgaT10aGlzW25dO2lmKGkpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGk/dC5hcHBseSh0aGlzW25dLGFyZ3VtZW50cyk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpO2lmKHRoaXM9PT1Qcm9taXNlKXt2YXIgYT1lW3JdO2lmKGEpcmV0dXJuIHQuYXBwbHkoYSxhcmd1bWVudHMpfWlmKHRoaXM9PT1FcnJvcil7dmFyIGM9ZVtvXTtpZihjKXJldHVybiB0LmFwcGx5KGMsYXJndW1lbnRzKX19cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpW25dPXQsRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPWk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjphLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KTt2YXIgRj17dXNlRzohMH0sTD17fSxxPXt9LEE9L15fX3pvbmVfc3ltYm9sX18oXHcrKSh0cnVlfGZhbHNlKSQvLEg9Il9fem9uZV9zeW1ib2xfX3Byb3BhZ2F0aW9uU3RvcHBlZCI7ZnVuY3Rpb24gTihlLHQscil7dmFyIG89ciYmci5hZGR8fGksYz1yJiZyLnJtfHxhLHU9ciYmci5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIscD1yJiZyLnJtQWxsfHwicmVtb3ZlQWxsTGlzdGVuZXJzIixoPXYobyksZD0iLiIrbysiOiIsZz0icHJlcGVuZExpc3RlbmVyIix5PSIuIitnKyI6IixfPWZ1bmN0aW9uKGUsdCxuKXtpZighZS5pc1JlbW92ZWQpe3ZhciByPWUuY2FsbGJhY2s7Im9iamVjdCI9PXR5cGVvZiByJiZyLmhhbmRsZUV2ZW50JiYoZS5jYWxsYmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gci5oYW5kbGVFdmVudChlKX0sZS5vcmlnaW5hbERlbGVnYXRlPXIpLGUuaW52b2tlKGUsdCxbbl0pO3ZhciBvPWUub3B0aW9ucztvJiYib2JqZWN0Ij09dHlwZW9mIG8mJm8ub25jZSYmdFtjXS5jYWxsKHQsbi50eXBlLGUub3JpZ2luYWxEZWxlZ2F0ZT9lLm9yaWdpbmFsRGVsZWdhdGU6ZS5jYWxsYmFjayxvKX19LG09ZnVuY3Rpb24odCl7aWYodD10fHxlLmV2ZW50KXt2YXIgbj10aGlzfHx0LnRhcmdldHx8ZSxyPW5bTFt0LnR5cGVdW2xdXTtpZihyKWlmKDE9PT1yLmxlbmd0aClfKHJbMF0sbix0KTtlbHNlIGZvcih2YXIgbz1yLnNsaWNlKCksaT0wO2k8by5sZW5ndGgmJighdHx8ITAhPT10W0hdKTtpKyspXyhvW2ldLG4sdCl9fSxrPWZ1bmN0aW9uKHQpe2lmKHQ9dHx8ZS5ldmVudCl7dmFyIG49dGhpc3x8dC50YXJnZXR8fGUscj1uW0xbdC50eXBlXVtzXV07aWYocilpZigxPT09ci5sZW5ndGgpXyhyWzBdLG4sdCk7ZWxzZSBmb3IodmFyIG89ci5zbGljZSgpLGk9MDtpPG8ubGVuZ3RoJiYoIXR8fCEwIT09dFtIXSk7aSsrKV8ob1tpXSxuLHQpfX07ZnVuY3Rpb24gYih0LHIpe2lmKCF0KXJldHVybiExO3ZhciBpPSEwO3ImJnZvaWQgMCE9PXIudXNlRyYmKGk9ci51c2VHKTt2YXIgYT1yJiZyLnZoLF89ITA7ciYmdm9pZCAwIT09ci5jaGtEdXAmJihfPXIuY2hrRHVwKTt2YXIgYj0hMTtyJiZ2b2lkIDAhPT1yLnJ0JiYoYj1yLnJ0KTtmb3IodmFyIFQ9dDtUJiYhVC5oYXNPd25Qcm9wZXJ0eShvKTspVD1uKFQpO2lmKCFUJiZ0W29dJiYoVD10KSwhVClyZXR1cm4hMTtpZihUW2hdKXJldHVybiExO3ZhciB3LEU9e30seD1UW2hdPVRbb10sTz1UW3YoYyldPVRbY10sUz1UW3YodSldPVRbdV0sRD1UW3YocCldPVRbcF07ciYmci5wcmVwZW5kJiYodz1UW3Yoci5wcmVwZW5kKV09VFtyLnByZXBlbmRdKTt2YXIgaj1pP2Z1bmN0aW9uKCl7aWYoIUUuaXNFeGlzdGluZylyZXR1cm4geC5jYWxsKEUudGFyZ2V0LEUuZXZlbnROYW1lLEUuY2FwdHVyZT9rOm0sRS5vcHRpb25zKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHguY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxlLmludm9rZSxFLm9wdGlvbnMpfSxQPWk/ZnVuY3Rpb24oZSl7aWYoIWUuaXNSZW1vdmVkKXt2YXIgdD1MW2UuZXZlbnROYW1lXSxuPXZvaWQgMDt0JiYobj10W2UuY2FwdHVyZT9zOmxdKTt2YXIgcj1uJiZlLnRhcmdldFtuXTtpZihyKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWlmKHJbb109PT1lKXtyLnNwbGljZShvLDEpLGUuaXNSZW1vdmVkPSEwLDA9PT1yLmxlbmd0aCYmKGUuYWxsUmVtb3ZlZD0hMCxlLnRhcmdldFtuXT1udWxsKTticmVha319aWYoZS5hbGxSZW1vdmVkKXJldHVybiBPLmNhbGwoZS50YXJnZXQsZS5ldmVudE5hbWUsZS5jYXB0dXJlP2s6bSxlLm9wdGlvbnMpfTpmdW5jdGlvbihlKXtyZXR1cm4gTy5jYWxsKGUudGFyZ2V0LGUuZXZlbnROYW1lLGUuaW52b2tlLGUub3B0aW9ucyl9LFo9ciYmci5kaWZmP3IuZGlmZjpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiB0O3JldHVybiJmdW5jdGlvbiI9PT1uJiZlLmNhbGxiYWNrPT09dHx8Im9iamVjdCI9PT1uJiZlLm9yaWdpbmFsRGVsZWdhdGU9PT10fSx6PVpvbmVbWm9uZS5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIildLEM9ZnVuY3Rpb24odCxuLHIsbyxjLHUpe3JldHVybiB2b2lkIDA9PT1jJiYoYz0hMSksdm9pZCAwPT09dSYmKHU9ITEpLGZ1bmN0aW9uKCl7dmFyIHA9dGhpc3x8ZSxoPWFyZ3VtZW50c1sxXTtpZighaClyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHY9ITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGgpe2lmKCFoLmhhbmRsZUV2ZW50KXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2PSEwfWlmKCFhfHxhKHQsaCxwLGFyZ3VtZW50cykpe3ZhciBkLGc9YXJndW1lbnRzWzBdLHk9YXJndW1lbnRzWzJdO2lmKHopZm9yKHZhciBtPTA7bTx6Lmxlbmd0aDttKyspaWYoZz09PXpbbV0pcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBrPSExO3ZvaWQgMD09PXk/ZD0hMTohMD09PXk/ZD0hMDohMT09PXk/ZD0hMTooZD0hIXkmJiEheS5jYXB0dXJlLGs9ISF5JiYhIXkub25jZSk7dmFyIGIsVD1ab25lLmN1cnJlbnQsdz1MW2ddO2lmKHcpYj13W2Q/czpsXTtlbHNle3ZhciB4PWYrKGcrbCksTz1mKyhnK3MpO0xbZ109e30sTFtnXVtsXT14LExbZ11bc109TyxiPWQ/Tzp4fXZhciBTLEQ9cFtiXSxqPSExO2lmKEQpe2lmKGo9ITAsXylmb3IobT0wO208RC5sZW5ndGg7bSsrKWlmKFooRFttXSxoKSlyZXR1cm59ZWxzZSBEPXBbYl09W107dmFyIFA9cC5jb25zdHJ1Y3Rvci5uYW1lLE09cVtQXTtNJiYoUz1NW2ddKSxTfHwoUz1QK24rZyksRS5vcHRpb25zPXksayYmKEUub3B0aW9ucy5vbmNlPSExKSxFLnRhcmdldD1wLEUuY2FwdHVyZT1kLEUuZXZlbnROYW1lPWcsRS5pc0V4aXN0aW5nPWo7dmFyIEM9aT9GOm51bGw7QyYmKEMudGFza0RhdGE9RSk7dmFyIFI9VC5zY2hlZHVsZUV2ZW50VGFzayhTLGgsQyxyLG8pO3JldHVybiBFLnRhcmdldD1udWxsLEMmJihDLnRhc2tEYXRhPW51bGwpLGsmJih5Lm9uY2U9ITApLFIub3B0aW9ucz15LFIudGFyZ2V0PXAsUi5jYXB0dXJlPWQsUi5ldmVudE5hbWU9Zyx2JiYoUi5vcmlnaW5hbERlbGVnYXRlPWgpLHU/RC51bnNoaWZ0KFIpOkQucHVzaChSKSxjP3A6dm9pZCAwfX19O3JldHVybiBUW29dPUMoeCxkLGosUCxiKSx3JiYoVFtnXT1DKHcseSxmdW5jdGlvbihlKXtyZXR1cm4gdy5jYWxsKEUudGFyZ2V0LEUuZXZlbnROYW1lLGUuaW52b2tlLEUub3B0aW9ucyl9LFAsYiwhMCkpLFRbY109ZnVuY3Rpb24oKXt2YXIgdCxuPXRoaXN8fGUscj1hcmd1bWVudHNbMF0sbz1hcmd1bWVudHNbMl07dD12b2lkIDAhPT1vJiYoITA9PT1vfHwhMSE9PW8mJiEhbyYmISFvLmNhcHR1cmUpO3ZhciBpPWFyZ3VtZW50c1sxXTtpZighaSlyZXR1cm4gTy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIWF8fGEoTyxpLG4sYXJndW1lbnRzKSl7dmFyIGMsdT1MW3JdO3UmJihjPXVbdD9zOmxdKTt2YXIgZj1jJiZuW2NdO2lmKGYpZm9yKHZhciBwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBoPWZbcF07aWYoWihoLGkpKXJldHVybiBmLnNwbGljZShwLDEpLGguaXNSZW1vdmVkPSEwLDA9PT1mLmxlbmd0aCYmKGguYWxsUmVtb3ZlZD0hMCxuW2NdPW51bGwpLGguem9uZS5jYW5jZWxUYXNrKGgpLGI/bjp2b2lkIDB9cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sVFt1XT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxuPVcodGhpc3x8ZSxhcmd1bWVudHNbMF0pLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXTt0LnB1c2goby5vcmlnaW5hbERlbGVnYXRlP28ub3JpZ2luYWxEZWxlZ2F0ZTpvLmNhbGxiYWNrKX1yZXR1cm4gdH0sVFtwXT1mdW5jdGlvbigpe3ZhciB0PXRoaXN8fGUsbj1hcmd1bWVudHNbMF07aWYobil7dmFyIHI9TFtuXTtpZihyKXt2YXIgbz10W3JbbF1dLGk9dFtyW3NdXTtpZihvKXt2YXIgYT1vLnNsaWNlKCk7Zm9yKGg9MDtoPGEubGVuZ3RoO2grKyl0aGlzW2NdLmNhbGwodGhpcyxuLCh1PWFbaF0pLm9yaWdpbmFsRGVsZWdhdGU/dS5vcmlnaW5hbERlbGVnYXRlOnUuY2FsbGJhY2ssdS5vcHRpb25zKX1pZihpKWZvcihhPWkuc2xpY2UoKSxoPTA7aDxhLmxlbmd0aDtoKyspe3ZhciB1O3RoaXNbY10uY2FsbCh0aGlzLG4sKHU9YVtoXSkub3JpZ2luYWxEZWxlZ2F0ZT91Lm9yaWdpbmFsRGVsZWdhdGU6dS5jYWxsYmFjayx1Lm9wdGlvbnMpfX19ZWxzZXtmb3IodmFyIGY9T2JqZWN0LmtleXModCksaD0wO2g8Zi5sZW5ndGg7aCsrKXt2YXIgdj1BLmV4ZWMoZltoXSksZD12JiZ2WzFdO2QmJiJyZW1vdmVMaXN0ZW5lciIhPT1kJiZ0aGlzW3BdLmNhbGwodGhpcyxkKX10aGlzW3BdLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZihiKXJldHVybiB0aGlzfSxNKFRbb10seCksTShUW2NdLE8pLEQmJk0oVFtwXSxEKSxTJiZNKFRbdV0sUyksITB9Zm9yKHZhciBUPVtdLHc9MDt3PHQubGVuZ3RoO3crKylUW3ddPWIodFt3XSxyKTtyZXR1cm4gVH1mdW5jdGlvbiBXKGUsdCl7dmFyIG49W107Zm9yKHZhciByIGluIGUpe3ZhciBvPUEuZXhlYyhyKSxpPW8mJm9bMV07aWYoaSYmKCF0fHxpPT09dCkpe3ZhciBhPWVbcl07aWYoYSlmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyluLnB1c2goYVtjXSl9fXJldHVybiBufXZhciBYPXYoInpvbmVUYXNrIik7ZnVuY3Rpb24gSyhlLHQsbixyKXt2YXIgbz1udWxsLGk9bnVsbDtuKz1yO3ZhciBhPXt9O2Z1bmN0aW9uIGModCl7dmFyIG49dC5kYXRhO3JldHVybiBuLmFyZ3NbMF09ZnVuY3Rpb24oKXt0cnl7dC5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7dC5kYXRhJiZ0LmRhdGEuaXNQZXJpb2RpY3x8KCJudW1iZXIiPT10eXBlb2Ygbi5oYW5kbGVJZD9kZWxldGUgYVtuLmhhbmRsZUlkXTpuLmhhbmRsZUlkJiYobi5oYW5kbGVJZFtYXT1udWxsKSl9fSxuLmhhbmRsZUlkPW8uYXBwbHkoZSxuLmFyZ3MpLHR9ZnVuY3Rpb24gdShlKXtyZXR1cm4gaShlLmRhdGEuaGFuZGxlSWQpfW89eihlLHQrPXIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKG8saSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGlbMF0pe3ZhciBzPWgodCxpWzBdLHtoYW5kbGVJZDpudWxsLGlzUGVyaW9kaWM6IkludGVydmFsIj09PXIsZGVsYXk6IlRpbWVvdXQiPT09cnx8IkludGVydmFsIj09PXI/aVsxXXx8MDpudWxsLGFyZ3M6aX0sYyx1KTtpZighcylyZXR1cm4gczt2YXIgbD1zLmRhdGEuaGFuZGxlSWQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBsP2FbbF09czpsJiYobFtYXT1zKSxsJiZsLnJlZiYmbC51bnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIGwucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgbC51bnJlZiYmKHMucmVmPWwucmVmLmJpbmQobCkscy51bnJlZj1sLnVucmVmLmJpbmQobCkpLCJudW1iZXIiPT10eXBlb2YgbHx8bD9sOnN9cmV0dXJuIG4uYXBwbHkoZSxpKX19KSxpPXooZSxuLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvLGk9clswXTsibnVtYmVyIj09dHlwZW9mIGk/bz1hW2ldOihvPWkmJmlbWF0pfHwobz1pKSxvJiYic3RyaW5nIj09dHlwZW9mIG8udHlwZT8ibm90U2NoZWR1bGVkIiE9PW8uc3RhdGUmJihvLmNhbmNlbEZuJiZvLmRhdGEuaXNQZXJpb2RpY3x8MD09PW8ucnVuQ291bnQpJiYoIm51bWJlciI9PXR5cGVvZiBpP2RlbGV0ZSBhW2ldOmkmJihpW1hdPW51bGwpLG8uem9uZS5jYW5jZWxUYXNrKG8pKTp0LmFwcGx5KGUscil9fSl9dmFyIFU9T2JqZWN0W3YoImRlZmluZVByb3BlcnR5IildPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxCPU9iamVjdFt2KCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiKV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixZPU9iamVjdC5jcmVhdGUsSj12KCJ1bmNvbmZpZ3VyYWJsZXMiKTtmdW5jdGlvbiBWKGUsdCl7cmV0dXJuIGUmJmVbSl0mJmVbSl1bdF19ZnVuY3Rpb24gRyhlLHQsbil7cmV0dXJuIE9iamVjdC5pc0Zyb3plbihuKXx8KG4uY29uZmlndXJhYmxlPSEwKSxuLmNvbmZpZ3VyYWJsZXx8KGVbSl18fE9iamVjdC5pc0Zyb3plbihlKXx8VShlLEose3dyaXRhYmxlOiEwLHZhbHVlOnt9fSksZVtKXSYmKGVbSl1bdF09ITApKSxufWZ1bmN0aW9uIFEoZSx0LG4scil7dHJ5e3JldHVybiBVKGUsdCxuKX1jYXRjaChpKXtpZighbi5jb25maWd1cmFibGUpdGhyb3cgaTt2b2lkIDA9PT1yP2RlbGV0ZSBuLmNvbmZpZ3VyYWJsZTpuLmNvbmZpZ3VyYWJsZT1yO3RyeXtyZXR1cm4gVShlLHQsbil9Y2F0Y2gocil7dmFyIG89bnVsbDt0cnl7bz1KU09OLnN0cmluZ2lmeShuKX1jYXRjaChlKXtvPW4udG9TdHJpbmcoKX1jb25zb2xlLmxvZygiQXR0ZW1wdGluZyB0byBjb25maWd1cmUgJyIrdCsiJyB3aXRoIGRlc2NyaXB0b3IgJyIrbysiJyBvbiBvYmplY3QgJyIrZSsiJyBhbmQgZ290IGVycm9yLCBnaXZpbmcgdXA6ICIrcil9fX12YXIgJD1bImFic29sdXRlZGV2aWNlb3JpZW50YXRpb24iLCJhZnRlcmlucHV0IiwiYWZ0ZXJwcmludCIsImFwcGluc3RhbGxlZCIsImJlZm9yZWluc3RhbGxwcm9tcHQiLCJiZWZvcmVwcmludCIsImJlZm9yZXVubG9hZCIsImRldmljZWxpZ2h0IiwiZGV2aWNlbW90aW9uIiwiZGV2aWNlb3JpZW50YXRpb24iLCJkZXZpY2VvcmllbnRhdGlvbmFic29sdXRlIiwiZGV2aWNlcHJveGltaXR5IiwiaGFzaGNoYW5nZSIsImxhbmd1YWdlY2hhbmdlIiwibWVzc2FnZSIsIm1vemJlZm9yZXBhaW50Iiwib2ZmbGluZSIsIm9ubGluZSIsInBhaW50IiwicGFnZXNob3ciLCJwYWdlaGlkZSIsInBvcHN0YXRlIiwicmVqZWN0aW9uaGFuZGxlZCIsInN0b3JhZ2UiLCJ1bmhhbmRsZWRyZWplY3Rpb24iLCJ1bmxvYWQiLCJ1c2VycHJveGltaXR5IiwidnJkaXNwbHljb25uZWN0ZWQiLCJ2cmRpc3BsYXlkaXNjb25uZWN0ZWQiLCJ2cmRpc3BsYXlwcmVzZW50Y2hhbmdlIl0sZWU9WyJlbmNyeXB0ZWQiLCJ3YWl0aW5nZm9ya2V5IiwibXNuZWVka2V5IiwibW96aW50ZXJydXB0YmVnaW4iLCJtb3ppbnRlcnJ1cHRlbmQiXSx0ZT1bImxvYWQiXSxuZT1bImJsdXIiLCJlcnJvciIsImZvY3VzIiwibG9hZCIsInJlc2l6ZSIsInNjcm9sbCIsIm1lc3NhZ2VlcnJvciJdLHJlPVsiYm91bmNlIiwiZmluaXNoIiwic3RhcnQiXSxvZT1bImxvYWRzdGFydCIsInByb2dyZXNzIiwiYWJvcnQiLCJlcnJvciIsImxvYWQiLCJwcm9ncmVzcyIsInRpbWVvdXQiLCJsb2FkZW5kIiwicmVhZHlzdGF0ZWNoYW5nZSJdLGllPVsidXBncmFkZW5lZWRlZCIsImNvbXBsZXRlIiwiYWJvcnQiLCJzdWNjZXNzIiwiZXJyb3IiLCJibG9ja2VkIiwidmVyc2lvbmNoYW5nZSIsImNsb3NlIl0sYWU9WyJjbG9zZSIsImVycm9yIiwib3BlbiIsIm1lc3NhZ2UiXSxjZT1bImVycm9yIiwibWVzc2FnZSJdLHVlPVsiYWJvcnQiLCJhbmltYXRpb25jYW5jZWwiLCJhbmltYXRpb25lbmQiLCJhbmltYXRpb25pdGVyYXRpb24iLCJhdXhjbGljayIsImJlZm9yZWlucHV0IiwiYmx1ciIsImNhbmNlbCIsImNhbnBsYXkiLCJjYW5wbGF5dGhyb3VnaCIsImNoYW5nZSIsImNvbXBvc2l0aW9uc3RhcnQiLCJjb21wb3NpdGlvbnVwZGF0ZSIsImNvbXBvc2l0aW9uZW5kIiwiY3VlY2hhbmdlIiwiY2xpY2siLCJjbG9zZSIsImNvbnRleHRtZW51IiwiY3VyZWNoYW5nZSIsImRibGNsaWNrIiwiZHJhZyIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLCJkcmFnZXhpdCIsImRyYWdsZWF2ZSIsImRyYWdvdmVyIiwiZHJvcCIsImR1cmF0aW9uY2hhbmdlIiwiZW1wdGllZCIsImVuZGVkIiwiZXJyb3IiLCJmb2N1cyIsImZvY3VzaW4iLCJmb2N1c291dCIsImdvdHBvaW50ZXJjYXB0dXJlIiwiaW5wdXQiLCJpbnZhbGlkIiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJsb2FkIiwibG9hZHN0YXJ0IiwibG9hZGVkZGF0YSIsImxvYWRlZG1ldGFkYXRhIiwibG9zdHBvaW50ZXJjYXB0dXJlIiwibW91c2Vkb3duIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIm1vdXNlb3ZlciIsIm1vdXNldXAiLCJtb3VzZXdoZWVsIiwib3JpZW50YXRpb25jaGFuZ2UiLCJwYXVzZSIsInBsYXkiLCJwbGF5aW5nIiwicG9pbnRlcmNhbmNlbCIsInBvaW50ZXJkb3duIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwicG9pbnRlcmxvY2tjaGFuZ2UiLCJtb3pwb2ludGVybG9ja2NoYW5nZSIsIndlYmtpdHBvaW50ZXJsb2NrZXJjaGFuZ2UiLCJwb2ludGVybG9ja2Vycm9yIiwibW96cG9pbnRlcmxvY2tlcnJvciIsIndlYmtpdHBvaW50ZXJsb2NrZXJyb3IiLCJwb2ludGVybW92ZSIsInBvaW50b3V0IiwicG9pbnRlcm92ZXIiLCJwb2ludGVydXAiLCJwcm9ncmVzcyIsInJhdGVjaGFuZ2UiLCJyZXNldCIsInJlc2l6ZSIsInNjcm9sbCIsInNlZWtlZCIsInNlZWtpbmciLCJzZWxlY3QiLCJzZWxlY3Rpb25jaGFuZ2UiLCJzZWxlY3RzdGFydCIsInNob3ciLCJzb3J0Iiwic3RhbGxlZCIsInN1Ym1pdCIsInN1c3BlbmQiLCJ0aW1ldXBkYXRlIiwidm9sdW1lY2hhbmdlIiwidG91Y2hjYW5jZWwiLCJ0b3VjaG1vdmUiLCJ0b3VjaHN0YXJ0IiwidG91Y2hlbmQiLCJ0cmFuc2l0aW9uY2FuY2VsIiwidHJhbnNpdGlvbmVuZCIsIndhaXRpbmciLCJ3aGVlbCJdLmNvbmNhdChbIndlYmdsY29udGV4dHJlc3RvcmVkIiwid2ViZ2xjb250ZXh0bG9zdCIsIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiXSxbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZWVycm9yIl0sWyJ0b2dnbGUiXSxbImFmdGVyc2NyaXB0ZXhlY3V0ZSIsImJlZm9yZXNjcmlwdGV4ZWN1dGUiLCJET01Db250ZW50TG9hZGVkIiwiZnVsbHNjcmVlbmNoYW5nZSIsIm1vemZ1bGxzY3JlZW5jaGFuZ2UiLCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIiwibXNmdWxsc2NyZWVuY2hhbmdlIiwiZnVsbHNjcmVlbmVycm9yIiwibW96ZnVsbHNjcmVlbmVycm9yIiwid2Via2l0ZnVsbHNjcmVlbmVycm9yIiwibXNmdWxsc2NyZWVuZXJyb3IiLCJyZWFkeXN0YXRlY2hhbmdlIiwidmlzaWJpbGl0eWNoYW5nZSJdLCQsWyJiZWZvcmVjb3B5IiwiYmVmb3JlY3V0IiwiYmVmb3JlcGFzdGUiLCJjb3B5IiwiY3V0IiwicGFzdGUiLCJkcmFnc3RhcnQiLCJsb2FkZW5kIiwiYW5pbWF0aW9uc3RhcnQiLCJzZWFyY2giLCJ0cmFuc2l0aW9ucnVuIiwidHJhbnNpdGlvbnN0YXJ0Iiwid2Via2l0YW5pbWF0aW9uZW5kIiwid2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uIiwid2Via2l0YW5pbWF0aW9uc3RhcnQiLCJ3ZWJraXR0cmFuc2l0aW9uZW5kIl0sWyJhY3RpdmF0ZSIsImFmdGVydXBkYXRlIiwiYXJpYXJlcXVlc3QiLCJiZWZvcmVhY3RpdmF0ZSIsImJlZm9yZWRlYWN0aXZhdGUiLCJiZWZvcmVlZGl0Zm9jdXMiLCJiZWZvcmV1cGRhdGUiLCJjZWxsY2hhbmdlIiwiY29udHJvbHNlbGVjdCIsImRhdGFhdmFpbGFibGUiLCJkYXRhc2V0Y2hhbmdlZCIsImRhdGFzZXRjb21wbGV0ZSIsImVycm9ydXBkYXRlIiwiZmlsdGVyY2hhbmdlIiwibGF5b3V0Y29tcGxldGUiLCJsb3NlY2FwdHVyZSIsIm1vdmUiLCJtb3ZlZW5kIiwibW92ZXN0YXJ0IiwicHJvcGVydHljaGFuZ2UiLCJyZXNpemVlbmQiLCJyZXNpemVzdGFydCIsInJvd2VudGVyIiwicm93ZXhpdCIsInJvd3NkZWxldGUiLCJyb3dzaW5zZXJ0ZWQiLCJjb21tYW5kIiwiY29tcGFzc25lZWRzY2FsaWJyYXRpb24iLCJkZWFjdGl2YXRlIiwiaGVscCIsIm1zY29udGVudHpvb20iLCJtc21hbmlwdWxhdGlvbnN0YXRlY2hhbmdlZCIsIm1zZ2VzdHVyZWNoYW5nZSIsIm1zZ2VzdHVyZWRvdWJsZXRhcCIsIm1zZ2VzdHVyZWVuZCIsIm1zZ2VzdHVyZWhvbGQiLCJtc2dlc3R1cmVzdGFydCIsIm1zZ2VzdHVyZXRhcCIsIm1zZ290cG9pbnRlcmNhcHR1cmUiLCJtc2luZXJ0aWFzdGFydCIsIm1zbG9zdHBvaW50ZXJjYXB0dXJlIiwibXNwb2ludGVyY2FuY2VsIiwibXNwb2ludGVyZG93biIsIm1zcG9pbnRlcmVudGVyIiwibXNwb2ludGVyaG92ZXIiLCJtc3BvaW50ZXJsZWF2ZSIsIm1zcG9pbnRlcm1vdmUiLCJtc3BvaW50ZXJvdXQiLCJtc3BvaW50ZXJvdmVyIiwibXNwb2ludGVydXAiLCJwb2ludGVyb3V0IiwibXNzaXRlbW9kZWp1bXBsaXN0aXRlbXJlbW92ZWQiLCJtc3RodW1ibmFpbGNsaWNrIiwic3RvcCIsInN0b3JhZ2Vjb21taXQiXSk7ZnVuY3Rpb24gc2UoZSx0LG4scil7ZSYmaihlLGZ1bmN0aW9uKGUsdCxuKXtpZighbilyZXR1cm4gdDt2YXIgcj1uLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQ9PT1lfSk7aWYoIXJ8fDA9PT1yLmxlbmd0aClyZXR1cm4gdDt2YXIgbz1yWzBdLmlnbm9yZVByb3BlcnRpZXM7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09by5pbmRleE9mKGUpfSl9KGUsdCxuKSxyKX1mdW5jdGlvbiBsZShjLHUpe2lmKCF3fHx4KXt2YXIgcz0idW5kZWZpbmVkIiE9dHlwZW9mIFdlYlNvY2tldDtpZihmdW5jdGlvbigpe2lmKChFfHx4KSYmIWUoSFRNTEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIikmJiJ1bmRlZmluZWQiIT10eXBlb2YgRWxlbWVudCl7dmFyIG49ZShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpO2lmKG4mJiFuLmNvbmZpZ3VyYWJsZSlyZXR1cm4hMX12YXIgcj1YTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsbz1lKHIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIpO2lmKG8pe3Qociwib25yZWFkeXN0YXRlY2hhbmdlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSk7dmFyIGk9ISEoYz1uZXcgWE1MSHR0cFJlcXVlc3QpLm9ucmVhZHlzdGF0ZWNoYW5nZTtyZXR1cm4gdChyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLG98fHt9KSxpfXZhciBhPXYoImZha2UiKTt0KHIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW2FdfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpc1thXT1lfX0pO3ZhciBjLHU9ZnVuY3Rpb24oKXt9O3JldHVybihjPW5ldyBYTUxIdHRwUmVxdWVzdCkub25yZWFkeXN0YXRlY2hhbmdlPXUsaT1jW2FdPT09dSxjLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGl9KCkpe3ZhciBsPXUuX19ab25lX2lnbm9yZV9vbl9wcm9wZXJ0aWVzO2lmKEUpe3ZhciBmPXdpbmRvdztzZShmLHVlLmNvbmNhdChbIm1lc3NhZ2VlcnJvciJdKSxsLG4oZikpLHNlKERvY3VtZW50LnByb3RvdHlwZSx1ZSxsKSx2b2lkIDAhPT1mLlNWR0VsZW1lbnQmJnNlKGYuU1ZHRWxlbWVudC5wcm90b3R5cGUsdWUsbCksc2UoRWxlbWVudC5wcm90b3R5cGUsdWUsbCksc2UoSFRNTEVsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLGVlLGwpLHNlKEhUTUxGcmFtZVNldEVsZW1lbnQucHJvdG90eXBlLCQuY29uY2F0KG5lKSxsKSxzZShIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLCQuY29uY2F0KG5lKSxsKSxzZShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSx0ZSxsKSxzZShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsdGUsbCk7dmFyIGg9Zi5IVE1MTWFycXVlZUVsZW1lbnQ7aCYmc2UoaC5wcm90b3R5cGUscmUsbCk7dmFyIGQ9Zi5Xb3JrZXI7ZCYmc2UoZC5wcm90b3R5cGUsY2UsbCl9c2UoWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLG9lLGwpO3ZhciBnPXUuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtnJiZzZShnJiZnLnByb3RvdHlwZSxvZSxsKSwidW5kZWZpbmVkIiE9dHlwZW9mIElEQkluZGV4JiYoc2UoSURCSW5kZXgucHJvdG90eXBlLGllLGwpLHNlKElEQlJlcXVlc3QucHJvdG90eXBlLGllLGwpLHNlKElEQk9wZW5EQlJlcXVlc3QucHJvdG90eXBlLGllLGwpLHNlKElEQkRhdGFiYXNlLnByb3RvdHlwZSxpZSxsKSxzZShJREJUcmFuc2FjdGlvbi5wcm90b3R5cGUsaWUsbCksc2UoSURCQ3Vyc29yLnByb3RvdHlwZSxpZSxsKSkscyYmc2UoV2ViU29ja2V0LnByb3RvdHlwZSxhZSxsKX1lbHNlIWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWZ1bmN0aW9uKGUpe3ZhciB0PXVlW2VdLG49Im9uIit0O3NlbGYuYWRkRXZlbnRMaXN0ZW5lcih0LGZ1bmN0aW9uKGUpe3ZhciB0LHIsbz1lLnRhcmdldDtmb3Iocj1vP28uY29uc3RydWN0b3IubmFtZSsiLiIrbjoidW5rbm93bi4iK247bzspb1tuXSYmIW9bbl1bZmVdJiYoKHQ9cChvW25dLHIpKVtmZV09b1tuXSxvW25dPXQpLG89by5wYXJlbnRFbGVtZW50fSwhMCl9LHQ9MDt0PHVlLmxlbmd0aDt0KyspZSh0KX0oKSxaKCJYTUxIdHRwUmVxdWVzdCIpLHMmJmZ1bmN0aW9uKHQsbil7dmFyIGM9bi5XZWJTb2NrZXQ7bi5FdmVudFRhcmdldHx8TihuLFtjLnByb3RvdHlwZV0pLG4uV2ViU29ja2V0PWZ1bmN0aW9uKHQsbil7dmFyIHUscyxsPWFyZ3VtZW50cy5sZW5ndGg+MT9uZXcgYyh0LG4pOm5ldyBjKHQpLGY9ZShsLCJvbm1lc3NhZ2UiKTtyZXR1cm4gZiYmITE9PT1mLmNvbmZpZ3VyYWJsZT8odT1yKGwpLHM9bCxbaSxhLCJzZW5kIiwiY2xvc2UiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3VbZV09ZnVuY3Rpb24oKXt2YXIgdD1vLmNhbGwoYXJndW1lbnRzKTtpZihlPT09aXx8ZT09PWEpe3ZhciBuPXQubGVuZ3RoPjA/dFswXTp2b2lkIDA7aWYobil7dmFyIHI9Wm9uZS5fX3N5bWJvbF9fKCJPTl9QUk9QRVJUWSIrbik7bFtyXT11W3JdfX1yZXR1cm4gbFtlXS5hcHBseShsLHQpfX0pKTp1PWwsaih1LFsiY2xvc2UiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcGVuIl0scyksdX07dmFyIHU9bi5XZWJTb2NrZXQ7Zm9yKHZhciBzIGluIGMpdVtzXT1jW3NdfSgwLHUpfX12YXIgZmU9digidW5ib3VuZCIpO1pvbmUuX19sb2FkX3BhdGNoKCJ1dGlsIixmdW5jdGlvbihlLHQsbil7bi5wYXRjaE9uUHJvcGVydGllcz1qLG4ucGF0Y2hNZXRob2Q9eixuLmJpbmRBcmd1bWVudHM9a30pLFpvbmUuX19sb2FkX3BhdGNoKCJ0aW1lcnMiLGZ1bmN0aW9uKGUpe0soZSwic2V0IiwiY2xlYXIiLCJUaW1lb3V0IiksSyhlLCJzZXQiLCJjbGVhciIsIkludGVydmFsIiksSyhlLCJzZXQiLCJjbGVhciIsIkltbWVkaWF0ZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsZnVuY3Rpb24oZSl7SyhlLCJyZXF1ZXN0IiwiY2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxLKGUsIm1velJlcXVlc3QiLCJtb3pDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLEsoZSwid2Via2l0UmVxdWVzdCIsIndlYmtpdENhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIil9KSxab25lLl9fbG9hZF9wYXRjaCgiYmxvY2tpbmciLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl0scj0wO3I8bi5sZW5ndGg7cisrKXooZSxuW3JdLGZ1bmN0aW9uKG4scixvKXtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gdC5jdXJyZW50LnJ1bihuLGUsaSxvKX19KX0pLFpvbmUuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldCIsZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuX19zeW1ib2xfXygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpO2Vbcl0mJih0W3JdPWVbcl0pLGZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5FdmVudDtuJiZuLnByb3RvdHlwZSYmdC5wYXRjaE1ldGhvZChuLnByb3RvdHlwZSwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt0W0hdPSEwLGUmJmUuYXBwbHkodCxuKX19KX0oZSx0KX0oZSxuKSxmdW5jdGlvbihlLHQpe3ZhciBuPSJBbmNob3IsQXJlYSxBdWRpbyxCUixCYXNlLEJhc2VGb250LEJvZHksQnV0dG9uLENhbnZhcyxDb250ZW50LERMaXN0LERpcmVjdG9yeSxEaXYsRW1iZWQsRmllbGRTZXQsRm9udCxGb3JtLEZyYW1lLEZyYW1lU2V0LEhSLEhlYWQsSGVhZGluZyxIdG1sLElGcmFtZSxJbWFnZSxJbnB1dCxLZXlnZW4sTEksTGFiZWwsTGVnZW5kLExpbmssTWFwLE1hcnF1ZWUsTWVkaWEsTWVudSxNZXRhLE1ldGVyLE1vZCxPTGlzdCxPYmplY3QsT3B0R3JvdXAsT3B0aW9uLE91dHB1dCxQYXJhZ3JhcGgsUHJlLFByb2dyZXNzLFF1b3RlLFNjcmlwdCxTZWxlY3QsU291cmNlLFNwYW4sU3R5bGUsVGFibGVDYXB0aW9uLFRhYmxlQ2VsbCxUYWJsZUNvbCxUYWJsZSxUYWJsZVJvdyxUYWJsZVNlY3Rpb24sVGV4dEFyZWEsVGl0bGUsVHJhY2ssVUxpc3QsVW5rbm93bixWaWRlbyIscj0iQXBwbGljYXRpb25DYWNoZSxFdmVudFNvdXJjZSxGaWxlUmVhZGVyLElucHV0TWV0aG9kQ29udGV4dCxNZWRpYUNvbnRyb2xsZXIsTWVzc2FnZVBvcnQsTm9kZSxQZXJmb3JtYW5jZSxTVkdFbGVtZW50SW5zdGFuY2UsU2hhcmVkV29ya2VyLFRleHRUcmFjayxUZXh0VHJhY2tDdWUsVGV4dFRyYWNrTGlzdCxXZWJLaXROYW1lZEZsb3csV2luZG93LFdvcmtlcixXb3JrZXJHbG9iYWxTY29wZSxYTUxIdHRwUmVxdWVzdCxYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0LFhNTEh0dHBSZXF1ZXN0VXBsb2FkLElEQlJlcXVlc3QsSURCT3BlbkRCUmVxdWVzdCxJREJEYXRhYmFzZSxJREJUcmFuc2FjdGlvbixJREJDdXJzb3IsREJJbmRleCxXZWJTb2NrZXQiLnNwbGl0KCIsIiksbz1bXSxpPWUud3RmLGE9bi5zcGxpdCgiLCIpO2k/bz1hLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iSFRNTCIrZSsiRWxlbWVudCJ9KS5jb25jYXQocik6ZS5FdmVudFRhcmdldD9vLnB1c2goIkV2ZW50VGFyZ2V0Iik6bz1yO2Zvcih2YXIgYz1lLl9fWm9uZV9kaXNhYmxlX0lFX2NoZWNrfHwhMSx1PWUuX19ab25lX2VuYWJsZV9jcm9zc19jb250ZXh0X2NoZWNrfHwhMSxwPUkoKSxoPSJmdW5jdGlvbiBfX0JST1dTRVJUT09MU19DT05TT0xFX1NBRkVGVU5DKCkgeyBbbmF0aXZlIGNvZGVdIH0iLHY9MDt2PHVlLmxlbmd0aDt2Kyspe3ZhciBkPWYrKChrPXVlW3ZdKStsKSxnPWYrKGsrcyk7TFtrXT17fSxMW2tdW2xdPWQsTFtrXVtzXT1nfWZvcih2PTA7djxuLmxlbmd0aDt2KyspZm9yKHZhciB5PWFbdl0sXz1xW3ldPXt9LG09MDttPHVlLmxlbmd0aDttKyspe3ZhciBrO19baz11ZVttXV09eSsiLmFkZEV2ZW50TGlzdGVuZXI6IitrfXZhciBiPVtdO2Zvcih2PTA7djxvLmxlbmd0aDt2Kyspe3ZhciBUPWVbb1t2XV07Yi5wdXNoKFQmJlQucHJvdG90eXBlKX1OKGUsYix7dmg6ZnVuY3Rpb24oZSx0LG4scil7aWYoIWMmJnApe2lmKHUpdHJ5e3ZhciBvO2lmKCJbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0iPT09KG89dC50b1N0cmluZygpKXx8bz09aClyZXR1cm4gZS5hcHBseShuLHIpLCExfWNhdGNoKHQpe3JldHVybiBlLmFwcGx5KG4sciksITF9ZWxzZSBpZigiW29iamVjdCBGdW5jdGlvbldyYXBwZXJdIj09PShvPXQudG9TdHJpbmcoKSl8fG89PWgpcmV0dXJuIGUuYXBwbHkobixyKSwhMX1lbHNlIGlmKHUpdHJ5e3QudG9TdHJpbmcoKX1jYXRjaCh0KXtyZXR1cm4gZS5hcHBseShuLHIpLCExfXJldHVybiEwfX0pLHQucGF0Y2hFdmVudFRhcmdldD1OfShlLG4pO3ZhciBvPWUuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtvJiZvLnByb3RvdHlwZSYmbi5wYXRjaEV2ZW50VGFyZ2V0KGUsW28ucHJvdG90eXBlXSksWigiTXV0YXRpb25PYnNlcnZlciIpLFooIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKSxaKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIpLFooIkZpbGVSZWFkZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJvbl9wcm9wZXJ0eSIsZnVuY3Rpb24odCxuLHIpe2xlKDAsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuKXtpZihWKGUsdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFzc2lnbiB0byByZWFkIG9ubHkgcHJvcGVydHkgJyIrdCsiJyBvZiAiK2UpO3ZhciByPW4uY29uZmlndXJhYmxlO3JldHVybiJwcm90b3R5cGUiIT09dCYmKG49RyhlLHQsbikpLFEoZSx0LG4scil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix0W25dKX0pLGV9LE9iamVjdC5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIHR8fE9iamVjdC5pc0Zyb3plbih0KXx8T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt0W25dPUcoZSxuLHRbbl0pfSksWShlLHQpfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49QihlLHQpO3JldHVybiBWKGUsdCkmJihuLmNvbmZpZ3VyYWJsZT0hMSksbn0sZnVuY3Rpb24obil7aWYoKEV8fHgpJiYicmVnaXN0ZXJFbGVtZW50ImluIHQuZG9jdW1lbnQpe3ZhciByPWRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudCxvPVsiY3JlYXRlZENhbGxiYWNrIiwiYXR0YWNoZWRDYWxsYmFjayIsImRldGFjaGVkQ2FsbGJhY2siLCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siXTtkb2N1bWVudC5yZWdpc3RlckVsZW1lbnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbiYmbi5wcm90b3R5cGUmJm8uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGksYSxjPSJEb2N1bWVudC5yZWdpc3RlckVsZW1lbnQ6OiIrdCx1PW4ucHJvdG90eXBlO2lmKHUuaGFzT3duUHJvcGVydHkodCkpe3ZhciBzPWUodSx0KTtzJiZzLnZhbHVlPyhzLnZhbHVlPXAocy52YWx1ZSxjKSxhPShpPXMpLmNvbmZpZ3VyYWJsZSxRKHI9bi5wcm90b3R5cGUsbz10LGk9RyhyLG8saSksYSkpOnVbdF09cCh1W3RdLGMpfWVsc2UgdVt0XSYmKHVbdF09cCh1W3RdLGMpKX0pLHIuY2FsbChkb2N1bWVudCx0LG4pfSxNKGRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudCxyKX19KCl9KSxab25lLl9fbG9hZF9wYXRjaCgiY2FudmFzIixmdW5jdGlvbihlKXt2YXIgdD1lLkhUTUxDYW52YXNFbGVtZW50O3ZvaWQgMCE9PXQmJnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS50b0Jsb2ImJmZ1bmN0aW9uKGUsbixyKXt2YXIgbz1udWxsO2Z1bmN0aW9uIGkoZSl7dmFyIHQ9ZS5kYXRhO3JldHVybiB0LmFyZ3NbdC5jYklkeF09ZnVuY3Rpb24oKXtlLmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG8uYXBwbHkodC50YXJnZXQsdC5hcmdzKSxlfW89eih0LnByb3RvdHlwZSwidG9CbG9iIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybntuYW1lOiJIVE1MQ2FudmFzRWxlbWVudC50b0Jsb2IiLHRhcmdldDplLGNiSWR4OjAsYXJnczp0fX0odCxuKTtyZXR1cm4gci5jYklkeD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIG5bci5jYklkeF0/aChyLm5hbWUsbltyLmNiSWR4XSxyLGksbnVsbCk6ZS5hcHBseSh0LG4pfX0pfSgpfSksWm9uZS5fX2xvYWRfcGF0Y2goIlhIUiIsZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24odCl7dmFyIHM9WE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLGw9c1tjXSxmPXNbdV07aWYoIWwpe3ZhciBwPWUuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpZihwKXt2YXIgdj1wLnByb3RvdHlwZTtsPXZbY10sZj12W3VdfX12YXIgZD0icmVhZHlzdGF0ZWNoYW5nZSIsZz0ic2NoZWR1bGVkIjtmdW5jdGlvbiB5KGUpe1hNTEh0dHBSZXF1ZXN0W2ldPSExO3ZhciB0PWUuZGF0YSxyPXQudGFyZ2V0LGE9cltvXTtsfHwobD1yW2NdLGY9clt1XSksYSYmZi5jYWxsKHIsZCxhKTt2YXIgcz1yW29dPWZ1bmN0aW9uKCl7ci5yZWFkeVN0YXRlPT09ci5ET05FJiYhdC5hYm9ydGVkJiZYTUxIdHRwUmVxdWVzdFtpXSYmZS5zdGF0ZT09PWcmJmUuaW52b2tlKCl9O3JldHVybiBsLmNhbGwocixkLHMpLHJbbl18fChyW25dPWUpLGIuYXBwbHkocix0LmFyZ3MpLFhNTEh0dHBSZXF1ZXN0W2ldPSEwLGV9ZnVuY3Rpb24gXygpe31mdW5jdGlvbiBtKGUpe3ZhciB0PWUuZGF0YTtyZXR1cm4gdC5hYm9ydGVkPSEwLFQuYXBwbHkodC50YXJnZXQsdC5hcmdzKX12YXIgaz16KHMsIm9wZW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbcl09MD09dFsyXSxlW2FdPXRbMV0say5hcHBseShlLHQpfX0pLGI9eihzLCJzZW5kIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBlW3JdP2IuYXBwbHkoZSx0KTpoKCJYTUxIdHRwUmVxdWVzdC5zZW5kIixfLHt0YXJnZXQ6ZSx1cmw6ZVthXSxpc1BlcmlvZGljOiExLGRlbGF5Om51bGwsYXJnczp0LGFib3J0ZWQ6ITF9LHksbSl9fSksVD16KHMsImFib3J0IixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lW25dO2lmKHQmJiJzdHJpbmciPT10eXBlb2YgdC50eXBlKXtpZihudWxsPT10LmNhbmNlbEZufHx0LmRhdGEmJnQuZGF0YS5hYm9ydGVkKXJldHVybjt0LnpvbmUuY2FuY2VsVGFzayh0KX19fSl9KCk7dmFyIG49digieGhyVGFzayIpLHI9digieGhyU3luYyIpLG89digieGhyTGlzdGVuZXIiKSxpPXYoInhoclNjaGVkdWxlZCIpLGE9digieGhyVVJMIil9KSxab25lLl9fbG9hZF9wYXRjaCgiZ2VvbG9jYXRpb24iLGZ1bmN0aW9uKHQpe3QubmF2aWdhdG9yJiZ0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbiYmZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9dC5jb25zdHJ1Y3Rvci5uYW1lLG89ZnVuY3Rpb24obyl7dmFyIGk9bltvXSxhPXRbaV07aWYoYSl7aWYoIWIoZSh0LGkpKSlyZXR1cm4iY29udGludWUiO3RbaV09ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGsoYXJndW1lbnRzLHIrIi4iK2kpKX07cmV0dXJuIE0odCxlKSx0fShhKX19LGk9MDtpPG4ubGVuZ3RoO2krKylvKGkpfSh0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbixbImdldEN1cnJlbnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlzZVJlamVjdGlvbkV2ZW50IixmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe1coZSx0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBvPWUuUHJvbWlzZVJlamVjdGlvbkV2ZW50O2lmKG8pe3ZhciBpPW5ldyBvKHQse3Byb21pc2U6bi5wcm9taXNlLHJlYXNvbjpuLnJlamVjdGlvbn0pO3IuaW52b2tlKGkpfX0pfX1lLlByb21pc2VSZWplY3Rpb25FdmVudCYmKHRbdigidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKV09bigidW5oYW5kbGVkcmVqZWN0aW9uIiksdFt2KCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpXT1uKCJyZWplY3Rpb25oYW5kbGVkIikpfSl9KCl9LCIxVHNBIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTp0LGRvbmU6ISFlfX19LCIyT2lGIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiBlfX0sMzpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oImhOL2ciKX0sIjNMeWoiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJLcm9KIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIG8gaW4gdClyKGUsbyx0W29dLG4pO3JldHVybiBlfX0sIjQ1VHYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1uKCJPUDNZIiksYT1yLmhhcyxjPXIuZ2V0LHU9ci5rZXkscz1mdW5jdGlvbihlLHQsbil7aWYoYShlLHQsbikpcmV0dXJuIGMoZSx0LG4pO3ZhciByPWkodCk7cmV0dXJuIG51bGwhPT1yP3MoZSxyLG4pOnZvaWQgMH07ci5leHAoe2dldE1ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6dShhcmd1bWVudHNbMl0pKX19KX0sIjQ5RDQiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1yLmtleSxhPXIuc2V0O3IuZXhwKHtkZWZpbmVNZXRhZGF0YTpmdW5jdGlvbihlLHQsbixyKXthKGUsdCxvKG4pLGkocikpfX0pfSwiNExpRCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJkeVpYIiksbz1uKCJYS0ZVIiksaT1uKCJLcm9KIiksYT1uKCIzTHlqIiksYz1uKCJaNnZGIiksdT1uKCJTbGtZIikscz1uKCI5Z1g3IiksbD1uKCIwL1I0IiksZj1uKCJlZVZxIikscD1uKCJYTVZoIiksaD1uKCJmeURxIiksdj1uKCJYYnppIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGQsZyx5KXt2YXIgXz1yW2VdLG09XyxrPWc/InNldCI6ImFkZCIsYj1tJiZtLnByb3RvdHlwZSxUPXt9LHc9ZnVuY3Rpb24oZSl7dmFyIHQ9YltlXTtpKGIsZSwiZGVsZXRlIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKHkmJiFsKGUpKSYmdC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImhhcyI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuISh5JiYhbChlKSkmJnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJnZXQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB5JiYhbChlKT92b2lkIDA6dC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImFkZCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzLDA9PT1lPzA6ZSksdGhpc306ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsMD09PWU/MDplLG4pLHRoaXN9KX07aWYoImZ1bmN0aW9uIj09dHlwZW9mIG0mJih5fHxiLmZvckVhY2gmJiFmKGZ1bmN0aW9uKCl7KG5ldyBtKS5lbnRyaWVzKCkubmV4dCgpfSkpKXt2YXIgRT1uZXcgbSx4PUVba10oeT97fTotMCwxKSE9RSxPPWYoZnVuY3Rpb24oKXtFLmhhcygxKX0pLFM9cChmdW5jdGlvbihlKXtuZXcgbShlKX0pLEQ9IXkmJmYoZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IG0sdD01O3QtLTspZVtrXSh0LHQpO3JldHVybiFlLmhhcygtMCl9KTtTfHwoKG09dChmdW5jdGlvbih0LG4pe3ModCxtLGUpO3ZhciByPXYobmV3IF8sdCxtKTtyZXR1cm4gdm9pZCAwIT1uJiZ1KG4sZyxyW2tdLHIpLHJ9KSkucHJvdG90eXBlPWIsYi5jb25zdHJ1Y3Rvcj1tKSwoT3x8RCkmJih3KCJkZWxldGUiKSx3KCJoYXMiKSxnJiZ3KCJnZXQiKSksKER8fHgpJiZ3KGspLHkmJmIuY2xlYXImJmRlbGV0ZSBiLmNsZWFyfWVsc2UgbT1kLmdldENvbnN0cnVjdG9yKHQsZSxnLGspLGEobS5wcm90b3R5cGUsbiksYy5ORUVEPSEwO3JldHVybiBoKG0sZSksVFtlXT1tLG8oby5HK28uVytvLkYqKG0hPV8pLFQpLHl8fGQuc2V0U3Ryb25nKG0sZSxnKSxtfX0sIjRSNHUiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YiLnNwbGl0KCIsIil9LCI2Rk1PIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiRVdtQyIpLGk9bigiSzB4VSIpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBvKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS5jb25zdHJ1Y3Rvcil8fHQhPT1BcnJheSYmIW8odC5wcm90b3R5cGUpfHwodD12b2lkIDApLHIodCkmJm51bGw9PT0odD10W2ldKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9BcnJheTp0fX0sIjdEbGgiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1yLmhhcyxhPXIua2V5O3IuZXhwKHtoYXNPd25NZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSl9fSl9LCI5QUFuIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIndtdkciKSxvPW4oInM1cVkiKTtlLmV4cG9ydHM9bigiNExpRCIpKCJNYXAiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbihlKXt2YXIgdD1yLmdldEVudHJ5KG8odGhpcywiTWFwIiksZSk7cmV0dXJuIHQmJnQudn0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVmKG8odGhpcywiTWFwIiksMD09PWU/MDplLHQpfX0sciwhMCl9LCI5Z1g3IjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXtpZighKGUgaW5zdGFuY2VvZiB0KXx8dm9pZCAwIT09ciYmciBpbiBlKXRocm93IFR5cGVFcnJvcihuKyI6IGluY29ycmVjdCBpbnZvY2F0aW9uISIpO3JldHVybiBlfX0sQWZuejpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIkxRQWMiKSxvPW4oIlhLRlUiKSxpPW4oIktyb0oiKSxhPW4oIk11a2IiKSxjPW4oImhQSVEiKSx1PW4oIlFhRGIiKSxzPW4oImZ5RHEiKSxsPW4oIk9QM1kiKSxmPW4oIksweFUiKSgiaXRlcmF0b3IiKSxwPSEoW10ua2V5cyYmIm5leHQiaW5bXS5rZXlzKCkpLGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHYsZCxnLHkpe3Uobix0LHYpO3ZhciBfLG0sayxiPWZ1bmN0aW9uKGUpe2lmKCFwJiZlIGluIHgpcmV0dXJuIHhbZV07c3dpdGNoKGUpe2Nhc2Uia2V5cyI6Y2FzZSJ2YWx1ZXMiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLGUpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19LFQ9dCsiIEl0ZXJhdG9yIix3PSJ2YWx1ZXMiPT1kLEU9ITEseD1lLnByb3RvdHlwZSxPPXhbZl18fHhbIkBAaXRlcmF0b3IiXXx8ZCYmeFtkXSxTPU98fGIoZCksRD1kP3c/YigiZW50cmllcyIpOlM6dm9pZCAwLGo9IkFycmF5Ij09dCYmeC5lbnRyaWVzfHxPO2lmKGomJihrPWwoai5jYWxsKG5ldyBlKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmay5uZXh0JiYocyhrLFQsITApLHJ8fCJmdW5jdGlvbiI9PXR5cGVvZiBrW2ZdfHxhKGssZixoKSksdyYmTyYmInZhbHVlcyIhPT1PLm5hbWUmJihFPSEwLFM9ZnVuY3Rpb24oKXtyZXR1cm4gTy5jYWxsKHRoaXMpfSksciYmIXl8fCFwJiYhRSYmeFtmXXx8YSh4LGYsUyksY1t0XT1TLGNbVF09aCxkKWlmKF89e3ZhbHVlczp3P1M6YigidmFsdWVzIiksa2V5czpnP1M6Yigia2V5cyIpLGVudHJpZXM6RH0seSlmb3IobSBpbiBfKW0gaW4geHx8aSh4LG0sX1ttXSk7ZWxzZSBvKG8uUCtvLkYqKHB8fEUpLHQsXyk7cmV0dXJuIF99fSxCcWZWOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1yLmdldCxhPXIua2V5O3IuZXhwKHtnZXRPd25NZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSl9fSl9LENra1Q6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIm0wUHAiKSxvPW4oIlltcXYiKSxpPW4oIlMvai8iKSxhPW4oIm5lOGkiKSxjPW4oInpSd28iKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj0xPT1lLHU9Mj09ZSxzPTM9PWUsbD00PT1lLGY9Nj09ZSxwPTU9PWV8fGYsaD10fHxjO3JldHVybiBmdW5jdGlvbih0LGMsdil7Zm9yKHZhciBkLGcseT1pKHQpLF89byh5KSxtPXIoYyx2LDMpLGs9YShfLmxlbmd0aCksYj0wLFQ9bj9oKHQsayk6dT9oKHQsMCk6dm9pZCAwO2s+YjtiKyspaWYoKHB8fGIgaW4gXykmJihnPW0oZD1fW2JdLGIseSksZSkpaWYobilUW2JdPWc7ZWxzZSBpZihnKXN3aXRjaChlKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBkO2Nhc2UgNjpyZXR1cm4gYjtjYXNlIDI6VC5wdXNoKGQpfWVsc2UgaWYobClyZXR1cm4hMTtyZXR1cm4gZj8tMTpzfHxsP2w6VH19fSxEVmdBOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ6aEFiIiksbz1uKCI0UjR1Iik7ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gcihlLG8pfX0sRUswRTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByLG89bigiQ2trVCIpKDApLGk9bigiS3JvSiIpLGE9bigiWjZ2RiIpLGM9bigiY3pOSyIpLHU9bigiWkQ2NyIpLHM9bigiMC9SNCIpLGw9bigiZWVWcSIpLGY9bigiczVxWSIpLHA9YS5nZXRXZWFrLGg9T2JqZWN0LmlzRXh0ZW5zaWJsZSx2PXUudWZzdG9yZSxkPXt9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx5PXtnZXQ6ZnVuY3Rpb24oZSl7aWYocyhlKSl7dmFyIHQ9cChlKTtyZXR1cm4hMD09PXQ/dihmKHRoaXMsIldlYWtNYXAiKSkuZ2V0KGUpOnQ/dFt0aGlzLl9pXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdS5kZWYoZih0aGlzLCJXZWFrTWFwIiksZSx0KX19LF89ZS5leHBvcnRzPW4oIjRMaUQiKSgiV2Vha01hcCIsZyx5LHUsITAsITApO2woZnVuY3Rpb24oKXtyZXR1cm4gNyE9KG5ldyBfKS5zZXQoKE9iamVjdC5mcmVlemV8fE9iamVjdCkoZCksNykuZ2V0KGQpfSkmJihjKChyPXUuZ2V0Q29uc3RydWN0b3IoZywiV2Vha01hcCIpKS5wcm90b3R5cGUseSksYS5ORUVEPSEwLG8oWyJkZWxldGUiLCJoYXMiLCJnZXQiLCJzZXQiXSxmdW5jdGlvbihlKXt2YXIgdD1fLnByb3RvdHlwZSxuPXRbZV07aSh0LGUsZnVuY3Rpb24odCxvKXtpZihzKHQpJiYhaCh0KSl7dGhpcy5fZnx8KHRoaXMuX2Y9bmV3IHIpO3ZhciBpPXRoaXMuX2ZbZV0odCxvKTtyZXR1cm4ic2V0Ij09ZT90aGlzOml9cmV0dXJuIG4uY2FsbCh0aGlzLHQsbyl9KX0pKX0sRVdtQzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTFpXdCIpO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iQXJyYXkiPT1yKGUpfX0sRWVtSDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiVXFjRiIpLG89bigiUmpELyIpLGk9bigiYUNGaiIpLGE9bigiYXBtVCIpLGM9bigiYWFneCIpLHU9bigieHBxbCIpLHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt0LmY9bigibmg0ZyIpP3M6ZnVuY3Rpb24oZSx0KXtpZihlPWkoZSksdD1hKHQsITApLHUpdHJ5e3JldHVybiBzKGUsdCl9Y2F0Y2goZSl7fWlmKGMoZSx0KSlyZXR1cm4gbyghci5mLmNhbGwoZSx0KSxlW3RdKX19LEZKVzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImhzd2EiKSxvPW4oInkzdzkiKSxpPW4oIkRWZ0EiKTtlLmV4cG9ydHM9bigibmg0ZyIpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7byhlKTtmb3IodmFyIG4sYT1pKHQpLGM9YS5sZW5ndGgsdT0wO2M+dTspci5mKGUsbj1hW3UrK10sdFtuXSk7cmV0dXJuIGV9fSxGWmNxOmZ1bmN0aW9uKGUsdCxuKXtuKCI0OUQ0IiksbigienErQyIpLG4oIjQ1VHYiKSxuKCJ1QXRkIiksbigiQnFmViIpLG4oImZOLzMiKSxuKCJpVytTIiksbigiN0RsaCIpLG4oIk9weGIiKSxlLmV4cG9ydHM9bigiZzNnNSIpLlJlZmxlY3R9LEg2aGY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInkzdzkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sbyl7dHJ5e3JldHVybiBvP3QocihuKVswXSxuWzFdKTp0KG4pfWNhdGNoKHQpe3ZhciBpPWUucmV0dXJuO3Rocm93IHZvaWQgMCE9PWkmJnIoaS5jYWxsKGUpKSx0fX19LCJJOGErIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTFpXdCIpLG89bigiSzB4VSIpKCJ0b1N0cmluZ1RhZyIpLGk9IkFyZ3VtZW50cyI9PXIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixhO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKG49ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1PYmplY3QoZSksbykpP246aT9yKHQpOiJPYmplY3QiPT0oYT1yKHQpKSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY2FsbGVlPyJBcmd1bWVudHMiOmF9fSxJdzcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iiksbz1uKCJkeVpYIikuZG9jdW1lbnQsaT1yKG8pJiZyKG8uY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpP28uY3JlYXRlRWxlbWVudChlKTp7fX19LCJKKzZlIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiSThhKyIpLG89bigiSzB4VSIpKCJpdGVyYXRvciIpLGk9bigiaFBJUSIpO2UuZXhwb3J0cz1uKCJnM2c1IikuZ2V0SXRlcmF0b3JNZXRob2Q9ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT1lKXJldHVybiBlW29dfHxlWyJAQGl0ZXJhdG9yIl18fGlbcihlKV19fSxKaUVhOmZ1bmN0aW9uKGUsdCl7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LEsweFU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlZUZXIiKSgid2tzIiksbz1uKCJ5bHFzIiksaT1uKCJkeVpYIikuU3ltYm9sLGE9ImZ1bmN0aW9uIj09dHlwZW9mIGk7KGUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcltlXXx8KHJbZV09YSYmaVtlXXx8KGE/aTpvKSgiU3ltYm9sLiIrZSkpfSkuc3RvcmU9cn0sS3JvSjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZHlaWCIpLG89bigiTXVrYiIpLGk9bigiYWFneCIpLGE9bigieWxxcyIpKCJzcmMiKSxjPUZ1bmN0aW9uLnRvU3RyaW5nLHU9KCIiK2MpLnNwbGl0KCJ0b1N0cmluZyIpO24oImczZzUiKS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBjLmNhbGwoZSl9LChlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sYyl7dmFyIHM9ImZ1bmN0aW9uIj09dHlwZW9mIG47cyYmKGkobiwibmFtZSIpfHxvKG4sIm5hbWUiLHQpKSxlW3RdIT09biYmKHMmJihpKG4sYSl8fG8obixhLGVbdF0/IiIrZVt0XTp1LmpvaW4oU3RyaW5nKHQpKSkpLGU9PT1yP2VbdF09bjpjP2VbdF0/ZVt0XT1uOm8oZSx0LG4pOihkZWxldGUgZVt0XSxvKGUsdCxuKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcyYmdGhpc1thXXx8Yy5jYWxsKHRoaXMpfSl9LEt1dGg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInkzdzkiKSxvPW4oIkZKVzUiKSxpPW4oIjRSNHUiKSxhPW4oIllUdkEiKSgiSUVfUFJPVE8iKSxjPWZ1bmN0aW9uKCl7fSx1PWZ1bmN0aW9uKCl7dmFyIGUsdD1uKCJJdzcxIikoImlmcmFtZSIpLHI9aS5sZW5ndGg7Zm9yKHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsbigiK3JMdiIpLmFwcGVuZENoaWxkKHQpLHQuc3JjPSJqYXZhc2NyaXB0OiIsKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSxlLmNsb3NlKCksdT1lLkY7ci0tOylkZWxldGUgdS5wcm90b3R5cGVbaVtyXV07cmV0dXJuIHUoKX07ZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT1lPyhjLnByb3RvdHlwZT1yKGUpLG49bmV3IGMsYy5wcm90b3R5cGU9bnVsbCxuW2FdPWUpOm49dSgpLHZvaWQgMD09PXQ/bjpvKG4sdCl9fSxMUUFjOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSExfSxMWld0OmZ1bmN0aW9uKGUsdCl7dmFyIG49e30udG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuLmNhbGwoZSkuc2xpY2UoOCwtMSl9fSxNNlFqOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoUElRIiksbz1uKCJLMHhVIikoIml0ZXJhdG9yIiksaT1BcnJheS5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lJiYoci5BcnJheT09PWV8fGlbb109PT1lKX19LE11a2I6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImhzd2EiKSxvPW4oIlJqRC8iKTtlLmV4cG9ydHM9bigibmg0ZyIpP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5mKGUsdCxvKDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfX0sTjZjSjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiOUFBbiIpLG89bigiWEtGVSIpLGk9bigiVlRlciIpKCJtZXRhZGF0YSIpLGE9aS5zdG9yZXx8KGkuc3RvcmU9bmV3KG4oIkVLMEUiKSkpLGM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPWEuZ2V0KGUpO2lmKCFvKXtpZighbilyZXR1cm47YS5zZXQoZSxvPW5ldyByKX12YXIgaT1vLmdldCh0KTtpZighaSl7aWYoIW4pcmV0dXJuO28uc2V0KHQsaT1uZXcgcil9cmV0dXJuIGl9O2UuZXhwb3J0cz17c3RvcmU6YSxtYXA6YyxoYXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWModCxuLCExKTtyZXR1cm4gdm9pZCAwIT09ciYmci5oYXMoZSl9LGdldDpmdW5jdGlvbihlLHQsbil7dmFyIHI9Yyh0LG4sITEpO3JldHVybiB2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldChlKX0sc2V0OmZ1bmN0aW9uKGUsdCxuLHIpe2MobixyLCEwKS5zZXQoZSx0KX0sa2V5czpmdW5jdGlvbihlLHQpe3ZhciBuPWMoZSx0LCExKSxyPVtdO3JldHVybiBuJiZuLmZvckVhY2goZnVuY3Rpb24oZSx0KXtyLnB1c2godCl9KSxyfSxrZXk6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV8fCJzeW1ib2wiPT10eXBlb2YgZT9lOlN0cmluZyhlKX0sZXhwOmZ1bmN0aW9uKGUpe28oby5TLCJSZWZsZWN0IixlKX19fSxPUDNZOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhYWd4Iiksbz1uKCJTL2ovIiksaT1uKCJZVHZBIikoIklFX1BST1RPIiksYT1PYmplY3QucHJvdG90eXBlO2UuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUpe3JldHVybiBlPW8oZSkscihlLGkpP2VbaV06ImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3ImJmUgaW5zdGFuY2VvZiBlLmNvbnN0cnVjdG9yP2UuY29uc3RydWN0b3IucHJvdG90eXBlOmUgaW5zdGFuY2VvZiBPYmplY3Q/YTpudWxsfX0sT3B4YjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9bigiMk9pRiIpLGE9ci5rZXksYz1yLnNldDtyLmV4cCh7bWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtjKGUsdCwodm9pZCAwIT09cj9vOmkpKG4pLGEocikpfX19KX0sUTNuZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiU2xrWSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO3JldHVybiByKGUsITEsbi5wdXNoLG4sdCksbn19LFFhRGI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJLdXRoIiksbz1uKCJSakQvIiksaT1uKCJmeURxIiksYT17fTtuKCJNdWtiIikoYSxuKCJLMHhVIikoIml0ZXJhdG9yIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7ZS5wcm90b3R5cGU9cihhLHtuZXh0Om8oMSxuKX0pLGkoZSx0KyIgSXRlcmF0b3IiKX19LFJZaTc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1NYXRoLmNlaWwscj1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk/MDooZT4wP3I6bikoZSl9fSwiUmpELyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19fSwiUy9qLyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInZoUFUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChyKGUpKX19LFNsa1k6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIm0wUHAiKSxvPW4oIkg2aGYiKSxpPW4oIk02UWoiKSxhPW4oInkzdzkiKSxjPW4oIm5lOGkiKSx1PW4oIkorNmUiKSxzPXt9LGw9e307KHQ9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGYscCl7dmFyIGgsdixkLGcseT1wP2Z1bmN0aW9uKCl7cmV0dXJuIGV9OnUoZSksXz1yKG4sZix0PzI6MSksbT0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB5KXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGl0ZXJhYmxlISIpO2lmKGkoeSkpe2ZvcihoPWMoZS5sZW5ndGgpO2g+bTttKyspaWYoKGc9dD9fKGEodj1lW21dKVswXSx2WzFdKTpfKGVbbV0pKT09PXN8fGc9PT1sKXJldHVybiBnfWVsc2UgZm9yKGQ9eS5jYWxsKGUpOyEodj1kLm5leHQoKSkuZG9uZTspaWYoKGc9byhkLF8sdi52YWx1ZSx0KSk9PT1zfHxnPT09bClyZXR1cm4gZ30pLkJSRUFLPXMsdC5SRVRVUk49bH0sVDM5YjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIndtdkciKSxvPW4oInM1cVkiKTtlLmV4cG9ydHM9bigiNExpRCIpKCJTZXQiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2FkZDpmdW5jdGlvbihlKXtyZXR1cm4gci5kZWYobyh0aGlzLCJTZXQiKSxlPTA9PT1lPzA6ZSxlKX19LHIpfSxVcWNGOmZ1bmN0aW9uKGUsdCl7dC5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxWVGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJnM2c1Iiksbz1uKCJkeVpYIiksaT1vWyJfX2NvcmUtanNfc2hhcmVkX18iXXx8KG9bIl9fY29yZS1qc19zaGFyZWRfXyJdPXt9KTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGlbZV18fChpW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOnIudmVyc2lvbixtb2RlOm4oIkxRQWMiKT8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiJceGE5IDIwMTggRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LFhLRlU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImR5WlgiKSxvPW4oImczZzUiKSxpPW4oIk11a2IiKSxhPW4oIktyb0oiKSxjPW4oIm0wUHAiKSx1PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcyxsLGYscCxoPWUmdS5GLHY9ZSZ1LkcsZD1lJnUuUCxnPWUmdS5CLHk9dj9yOmUmdS5TP3JbdF18fChyW3RdPXt9KTooclt0XXx8e30pLnByb3RvdHlwZSxfPXY/bzpvW3RdfHwob1t0XT17fSksbT1fLnByb3RvdHlwZXx8KF8ucHJvdG90eXBlPXt9KTtmb3IocyBpbiB2JiYobj10KSxuKWY9KChsPSFoJiZ5JiZ2b2lkIDAhPT15W3NdKT95Om4pW3NdLHA9ZyYmbD9jKGYscik6ZCYmImZ1bmN0aW9uIj09dHlwZW9mIGY/YyhGdW5jdGlvbi5jYWxsLGYpOmYseSYmYSh5LHMsZixlJnUuVSksX1tzXSE9ZiYmaShfLHMscCksZCYmbVtzXSE9ZiYmKG1bc109Zil9O3IuY29yZT1vLHUuRj0xLHUuRz0yLHUuUz00LHUuUD04LHUuQj0xNix1Llc9MzIsdS5VPTY0LHUuUj0xMjgsZS5leHBvcnRzPXV9LFhNVmg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIksweFUiKSgiaXRlcmF0b3IiKSxvPSExO3RyeXt2YXIgaT1bN11bcl0oKTtpLnJldHVybj1mdW5jdGlvbigpe289ITB9LEFycmF5LmZyb20oaSxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaChlKXt9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXQmJiFvKXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgaT1bN10sYT1pW3JdKCk7YS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bj0hMH19LGlbcl09ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZShpKX1jYXRjaChlKXt9cmV0dXJuIG59fSxYYnppOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iiksbz1uKCJpNWRjIikuc2V0O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIGksYT10LmNvbnN0cnVjdG9yO3JldHVybiBhIT09biYmImZ1bmN0aW9uIj09dHlwZW9mIGEmJihpPWEucHJvdG90eXBlKSE9PW4ucHJvdG90eXBlJiZyKGkpJiZvJiZvKGUsaSksZX19LFlUdkE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlZUZXIiKSgia2V5cyIpLG89bigieWxxcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcltlXXx8KHJbZV09byhlKSl9fSxZbXF2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJMWld0Iik7ZS5leHBvcnRzPU9iamVjdCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09cihlKT9lLnNwbGl0KCIiKTpPYmplY3QoZSl9fSxaNnZGOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5bHFzIikoIm1ldGEiKSxvPW4oIjAvUjQiKSxpPW4oImFhZ3giKSxhPW4oImhzd2EiKS5mLGM9MCx1PU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LHM9IW4oImVlVnEiKShmdW5jdGlvbigpe3JldHVybiB1KE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksbD1mdW5jdGlvbihlKXthKGUscix7dmFsdWU6e2k6Ik8iKyArK2Msdzp7fX19KX0sZj1lLmV4cG9ydHM9e0tFWTpyLE5FRUQ6ITEsZmFzdEtleTpmdW5jdGlvbihlLHQpe2lmKCFvKGUpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgZT9lOigic3RyaW5nIj09dHlwZW9mIGU/IlMiOiJQIikrZTtpZighaShlLHIpKXtpZighdShlKSlyZXR1cm4iRiI7aWYoIXQpcmV0dXJuIkUiO2woZSl9cmV0dXJuIGVbcl0uaX0sZ2V0V2VhazpmdW5jdGlvbihlLHQpe2lmKCFpKGUscikpe2lmKCF1KGUpKXJldHVybiEwO2lmKCF0KXJldHVybiExO2woZSl9cmV0dXJuIGVbcl0ud30sb25GcmVlemU6ZnVuY3Rpb24oZSl7cmV0dXJuIHMmJmYuTkVFRCYmdShlKSYmIWkoZSxyKSYmbChlKSxlfX19LFpENjc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIzTHlqIiksbz1uKCJaNnZGIikuZ2V0V2VhayxpPW4oInkzdzkiKSxhPW4oIjAvUjQiKSxjPW4oIjlnWDciKSx1PW4oIlNsa1kiKSxzPW4oIkNra1QiKSxsPW4oImFhZ3giKSxmPW4oInM1cVkiKSxwPXMoNSksaD1zKDYpLHY9MCxkPWZ1bmN0aW9uKGUpe3JldHVybiBlLl9sfHwoZS5fbD1uZXcgZyl9LGc9ZnVuY3Rpb24oKXt0aGlzLmE9W119LHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLmEsZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSl9O2cucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9eSh0aGlzLGUpO2lmKHQpcmV0dXJuIHRbMV19LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIXkodGhpcyxlKX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49eSh0aGlzLGUpO24/blsxXT10OnRoaXMuYS5wdXNoKFtlLHRdKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWgodGhpcy5hLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09ZX0pO3JldHVybn50JiZ0aGlzLmEuc3BsaWNlKHQsMSksISF+dH19LGUuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHM9ZShmdW5jdGlvbihlLHIpe2MoZSxzLHQsIl9pIiksZS5fdD10LGUuX2k9disrLGUuX2w9dm9pZCAwLHZvaWQgMCE9ciYmdShyLG4sZVtpXSxlKX0pO3JldHVybiByKHMucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24oZSl7aWYoIWEoZSkpcmV0dXJuITE7dmFyIG49byhlKTtyZXR1cm4hMD09PW4/ZChmKHRoaXMsdCkpLmRlbGV0ZShlKTpuJiZsKG4sdGhpcy5faSkmJmRlbGV0ZSBuW3RoaXMuX2ldfSxoYXM6ZnVuY3Rpb24oZSl7aWYoIWEoZSkpcmV0dXJuITE7dmFyIG49byhlKTtyZXR1cm4hMD09PW4/ZChmKHRoaXMsdCkpLmhhcyhlKTpuJiZsKG4sdGhpcy5faSl9fSksc30sZGVmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1vKGkodCksITApO3JldHVybiEwPT09cj9kKGUpLnNldCh0LG4pOnJbZS5faV09bixlfSx1ZnN0b3JlOmR9fSxhQ0ZqOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJZbXF2Iiksbz1uKCJ2aFBVIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByKG8oZSkpfX0sYWFneDpmdW5jdGlvbihlLHQpe3ZhciBuPXt9Lmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuLmNhbGwoZSx0KX19LGFwbVQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighcihlKSlyZXR1cm4gZTt2YXIgbixvO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZihuPWUudG9TdHJpbmcpJiYhcihvPW4uY2FsbChlKSkpcmV0dXJuIG87aWYoImZ1bmN0aW9uIj09dHlwZW9mKG49ZS52YWx1ZU9mKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCF0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSxjek5LOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiRFZnQSIpLG89bigiSmlFYSIpLGk9bigiVXFjRiIpLGE9bigiUy9qLyIpLGM9bigiWW1xdiIpLHU9T2JqZWN0LmFzc2lnbjtlLmV4cG9ydHM9IXV8fG4oImVlVnEiKShmdW5jdGlvbigpe3ZhciBlPXt9LHQ9e30sbj1TeW1ib2woKSxyPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIGVbbl09NyxyLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ZX0pLDchPXUoe30sZSlbbl18fE9iamVjdC5rZXlzKHUoe30sdCkpLmpvaW4oIiIpIT1yfSk/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49YShlKSx1PWFyZ3VtZW50cy5sZW5ndGgscz0xLGw9by5mLGY9aS5mO3U+czspZm9yKHZhciBwLGg9Yyhhcmd1bWVudHNbcysrXSksdj1sP3IoaCkuY29uY2F0KGwoaCkpOnIoaCksZD12Lmxlbmd0aCxnPTA7ZD5nOylmLmNhbGwoaCxwPXZbZysrXSkmJihuW3BdPWhbcF0pO3JldHVybiBufTp1fSwiZC9HYyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlJZaTciKSxvPU1hdGgubWF4LGk9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9cihlKSk8MD9vKGUrdCwwKTppKGUsdCl9fSxkeVpYOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPW4pfSxlZVZxOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSxlbFpxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiZHlaWCIpLG89bigiaHN3YSIpLGk9bigibmg0ZyIpLGE9bigiSzB4VSIpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXJbZV07aSYmdCYmIXRbYV0mJm8uZih0LGEse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LCJmTi8zIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5rZXlzLGE9ci5rZXk7ci5leHAoe2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbihlKXtyZXR1cm4gaShvKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6YShhcmd1bWVudHNbMV0pKX19KX0sZnlEcTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiaHN3YSIpLmYsbz1uKCJhYWd4IiksaT1uKCJLMHhVIikoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlJiYhbyhlPW4/ZTplLnByb3RvdHlwZSxpKSYmcihlLGkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9fSxnM2c1OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHBvcnRzPXt2ZXJzaW9uOiIyLjUuNyJ9OyJudW1iZXIiPT10eXBlb2YgX19lJiYoX19lPW4pfSwiaE4vZyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLnIodCksbigiRlpjcSIpLG4oIjBUV3AiKX0saFBJUTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17fX0saHN3YTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieTN3OSIpLG89bigieHBxbCIpLGk9bigiYXBtVCIpLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZj1uKCJuaDRnIik/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGUsdCxuKXtpZihyKGUpLHQ9aSh0LCEwKSxyKG4pLG8pdHJ5e3JldHVybiBhKGUsdCxuKX1jYXRjaChlKXt9aWYoImdldCJpbiBufHwic2V0ImluIG4pdGhyb3cgVHlwZUVycm9yKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEiKTtyZXR1cm4idmFsdWUiaW4gbiYmKGVbdF09bi52YWx1ZSksZX19LGk1ZGM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKSxvPW4oInkzdzkiKSxpPWZ1bmN0aW9uKGUsdCl7aWYobyhlKSwhcih0KSYmbnVsbCE9PXQpdGhyb3cgVHlwZUVycm9yKHQrIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSEiKX07ZS5leHBvcnRzPXtzZXQ6T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKGUsdCxyKXt0cnl7KHI9bigibTBQcCIpKEZ1bmN0aW9uLmNhbGwsbigiRWVtSCIpLmYoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0LDIpKShlLFtdKSx0PSEoZSBpbnN0YW5jZW9mIEFycmF5KX1jYXRjaChlKXt0PSEwfXJldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBpKGUsbiksdD9lLl9fcHJvdG9fXz1uOnIoZSxuKSxlfX0oe30sITEpOnZvaWQgMCksY2hlY2s6aX19LCJpVytTIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9bigiT1AzWSIpLGE9ci5oYXMsYz1yLmtleSx1PWZ1bmN0aW9uKGUsdCxuKXtpZihhKGUsdCxuKSlyZXR1cm4hMDt2YXIgcj1pKHQpO3JldHVybiBudWxsIT09ciYmdShlLHIsbil9O3IuZXhwKHtoYXNNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiB1KGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmMoYXJndW1lbnRzWzJdKSl9fSl9LG0wUHA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjJPaUYiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2lmKHIoZSksdm9pZCAwPT09dClyZXR1cm4gZTtzd2l0Y2gobil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxsKHQsbil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gZS5jYWxsKHQsbixyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGUuY2FsbCh0LG4scixvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LG5lOGk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlJZaTciKSxvPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP28ocihlKSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sbmg0ZzpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPSFuKCJlZVZxIikoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxzNXFZOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSl8fGUuX3QhPT10KXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3QrIiByZXF1aXJlZCEiKTtyZXR1cm4gZX19LHVBdGQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlQzOWIiKSxvPW4oIlEzbmUiKSxpPW4oIk42Y0oiKSxhPW4oInkzdzkiKSxjPW4oIk9QM1kiKSx1PWkua2V5cyxzPWkua2V5LGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj11KGUsdCksaT1jKGUpO2lmKG51bGw9PT1pKXJldHVybiBuO3ZhciBhPWwoaSx0KTtyZXR1cm4gYS5sZW5ndGg/bi5sZW5ndGg/byhuZXcgcihuLmNvbmNhdChhKSkpOmE6bn07aS5leHAoe2dldE1ldGFkYXRhS2V5czpmdW5jdGlvbihlKXtyZXR1cm4gbChhKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6cyhhcmd1bWVudHNbMV0pKX19KX0sdmhQVTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PWUpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgIitlKTtyZXR1cm4gZX19LHcyYTU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImFDRmoiKSxvPW4oIm5lOGkiKSxpPW4oImQvR2MiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixhKXt2YXIgYyx1PXIodCkscz1vKHUubGVuZ3RoKSxsPWkoYSxzKTtpZihlJiZuIT1uKXtmb3IoO3M+bDspaWYoKGM9dVtsKytdKSE9YylyZXR1cm4hMH1lbHNlIGZvcig7cz5sO2wrKylpZigoZXx8bCBpbiB1KSYmdVtsXT09PW4pcmV0dXJuIGV8fGx8fDA7cmV0dXJuIWUmJi0xfX19LHdtdkc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJoc3dhIikuZixvPW4oIkt1dGgiKSxpPW4oIjNMeWoiKSxhPW4oIm0wUHAiKSxjPW4oIjlnWDciKSx1PW4oIlNsa1kiKSxzPW4oIkFmbnoiKSxsPW4oIjFUc0EiKSxmPW4oImVsWnEiKSxwPW4oIm5oNGciKSxoPW4oIlo2dkYiKS5mYXN0S2V5LHY9bigiczVxWSIpLGQ9cD8iX3MiOiJzaXplIixnPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1oKHQpO2lmKCJGIiE9PXIpcmV0dXJuIGUuX2lbcl07Zm9yKG49ZS5fZjtuO249bi5uKWlmKG4uaz09dClyZXR1cm4gbn07ZS5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQsbixzKXt2YXIgbD1lKGZ1bmN0aW9uKGUscil7YyhlLGwsdCwiX2kiKSxlLl90PXQsZS5faT1vKG51bGwpLGUuX2Y9dm9pZCAwLGUuX2w9dm9pZCAwLGVbZF09MCx2b2lkIDAhPXImJnUocixuLGVbc10sZSl9KTtyZXR1cm4gaShsLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dih0aGlzLHQpLG49ZS5faSxyPWUuX2Y7cjtyPXIubilyLnI9ITAsci5wJiYoci5wPXIucC5uPXZvaWQgMCksZGVsZXRlIG5bci5pXTtlLl9mPWUuX2w9dm9pZCAwLGVbZF09MH0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciBuPXYodGhpcyx0KSxyPWcobixlKTtpZihyKXt2YXIgbz1yLm4saT1yLnA7ZGVsZXRlIG4uX2lbci5pXSxyLnI9ITAsaSYmKGkubj1vKSxvJiYoby5wPWkpLG4uX2Y9PXImJihuLl9mPW8pLG4uX2w9PXImJihuLl9sPWkpLG5bZF0tLX1yZXR1cm4hIXJ9LGZvckVhY2g6ZnVuY3Rpb24oZSl7dih0aGlzLHQpO2Zvcih2YXIgbixyPWEoZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtuPW4/bi5uOnRoaXMuX2Y7KWZvcihyKG4udixuLmssdGhpcyk7biYmbi5yOyluPW4ucH0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhZyh2KHRoaXMsdCksZSl9fSkscCYmcihsLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB2KHRoaXMsdClbZF19fSksbH0sZGVmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGk9ZyhlLHQpO3JldHVybiBpP2kudj1uOihlLl9sPWk9e2k6bz1oKHQsITApLGs6dCx2Om4scDpyPWUuX2wsbjp2b2lkIDAscjohMX0sZS5fZnx8KGUuX2Y9aSksciYmKHIubj1pKSxlW2RdKyssIkYiIT09byYmKGUuX2lbb109aSkpLGV9LGdldEVudHJ5Omcsc2V0U3Ryb25nOmZ1bmN0aW9uKGUsdCxuKXtzKGUsdCxmdW5jdGlvbihlLG4pe3RoaXMuX3Q9dihlLHQpLHRoaXMuX2s9bix0aGlzLl9sPXZvaWQgMH0sZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5fayx0PXRoaXMuX2w7dCYmdC5yOyl0PXQucDtyZXR1cm4gdGhpcy5fdCYmKHRoaXMuX2w9dD10P3Qubjp0aGlzLl90Ll9mKT9sKDAsImtleXMiPT1lP3QuazoidmFsdWVzIj09ZT90LnY6W3Quayx0LnZdKToodGhpcy5fdD12b2lkIDAsbCgxKSl9LG4/ImVudHJpZXMiOiJ2YWx1ZXMiLCFuLCEwKSxmKHQpfX19LHhwcWw6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbigibmg0ZyIpJiYhbigiZWVWcSIpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuKCJJdzcxIikoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSx5M3c5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFyKGUpKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGFuIG9iamVjdCEiKTtyZXR1cm4gZX19LHlscXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9TWF0aC5yYW5kb20oKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIlN5bWJvbCgiLmNvbmNhdCh2b2lkIDA9PT1lPyIiOmUsIilfIiwoKytuK3IpLnRvU3RyaW5nKDM2KSl9fSx6UndvOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCI2Rk1PIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyhyKGUpKSh0KX19LHpoQWI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImFhZ3giKSxvPW4oImFDRmoiKSxpPW4oIncyYTUiKSghMSksYT1uKCJZVHZBIikoIklFX1BST1RPIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sYz1vKGUpLHU9MCxzPVtdO2ZvcihuIGluIGMpbiE9YSYmcihjLG4pJiZzLnB1c2gobik7Zm9yKDt0Lmxlbmd0aD51OylyKGMsbj10W3UrK10pJiYofmkocyxuKXx8cy5wdXNoKG4pKTtyZXR1cm4gc319LCJ6cStDIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5rZXksYT1yLm1hcCxjPXIuc3RvcmU7ci5leHAoe2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDppKGFyZ3VtZW50c1syXSkscj1hKG8odCksbiwhMSk7aWYodm9pZCAwPT09cnx8IXIuZGVsZXRlKGUpKXJldHVybiExO2lmKHIuc2l6ZSlyZXR1cm4hMDt2YXIgdT1jLmdldCh0KTtyZXR1cm4gdS5kZWxldGUobiksISF1LnNpemV8fGMuZGVsZXRlKHQpfX0pfX0sW1szLDNdXV0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1wb2x5ZmlsbHMuanMubWFwKHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1s2XSx7Iit0SjQiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHImJiFlLmNsb3NlZDtuKyspZS5uZXh0KHRbbl0pO2UuY2xvc2VkfHxlLmNvbXBsZXRlKCl9fX0sIit1bUsiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe31uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSwiL1dZdiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdC5zdWJzY3JpYmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sIjAvUTYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB2fSk7dmFyIHI9bigibXJTRyIpLGk9bigiQ2NuRyIpLG89bigiV2Y0cCIpLGE9bigibExBUCIpLHM9bigibjZnRyIpLHU9bigiWWxiUSIpLGw9bigiWVNoMiIpLGM9KG4oImdJY1kiKSxuKCJwdWdUIikpLGY9T2JqZWN0KG8udikoZnVuY3Rpb24oKXt9KSxoPU9iamVjdChvLnYpKGZ1bmN0aW9uKCl7fSksZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlfShmKSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGV9KGYpLG09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZWxlbWVudD1lLHIuX25hdkxpc3Q9bixyLl9pc05hdkxpc3Q9ITEsci5faXNOYXZMaXN0PSEhbixyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe25ldyBvLmoodGhpcy5fbGluZXMsdGhpcy5fZWxlbWVudCl9LGUucHJvdG90eXBlLl9pc1JpcHBsZURpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2lzTmF2TGlzdHx8dGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLl9uYXZMaXN0LmRpc2FibGVSaXBwbGV9LGUucHJvdG90eXBlLl9oYW5kbGVGb2N1cz1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtbGlzdC1pdGVtLWZvY3VzIil9LGUucHJvdG90eXBlLl9oYW5kbGVCbHVyPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC1saXN0LWl0ZW0tZm9jdXMiKX0sZS5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudH0sZX0oaCkseT1PYmplY3Qoby52KShPYmplY3Qoby53KShmdW5jdGlvbigpe30pKSxnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fZWxlbWVudD1lLGkuX2NoYW5nZURldGVjdG9yPW4saS5zZWxlY3Rpb25MaXN0PXIsaS5fc2VsZWN0ZWQ9ITEsaS5fZGlzYWJsZWQ9ITEsaS5faGFzRm9jdXM9ITEsaS5jaGVja2JveFBvc2l0aW9uPSJhZnRlciIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLnNlbGVjdGlvbkxpc3QmJnRoaXMuc2VsZWN0aW9uTGlzdC5kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChzLmIpKHQpO2UhPT10aGlzLl9kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2VsZWN0ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5pc1NlbGVjdGVkKHRoaXMpfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHMuYikodCk7ZSE9PXRoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2V0U2VsZWN0ZWQoZSksdGhpcy5zZWxlY3Rpb25MaXN0Ll9yZXBvcnRWYWx1ZUNoYW5nZSgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9zZWxlY3RlZDtQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7KHQuX3NlbGVjdGVkfHxlKSYmKHQuc2VsZWN0ZWQ9ITAsdC5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSl9LGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe25ldyBvLmoodGhpcy5fbGluZXMsdGhpcy5fZWxlbWVudCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnNlbGVjdGVkJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2VsZWN0ZWQ9ITF9KSx0aGlzLnNlbGVjdGlvbkxpc3QuX3JlbW92ZU9wdGlvbkZyb21MaXN0KHRoaXMpfSxlLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPSF0aGlzLnNlbGVjdGVkfSxlLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfSxlLnByb3RvdHlwZS5nZXRMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZXh0P3RoaXMuX3RleHQubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDoiIn0sZS5wcm90b3R5cGUuX2lzUmlwcGxlRGlzYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLnNlbGVjdGlvbkxpc3QuZGlzYWJsZVJpcHBsZX0sZS5wcm90b3R5cGUuX2hhbmRsZUNsaWNrPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMudG9nZ2xlKCksdGhpcy5zZWxlY3Rpb25MaXN0Ll9lbWl0Q2hhbmdlRXZlbnQodGhpcykpfSxlLnByb3RvdHlwZS5faGFuZGxlRm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9oYXNGb2N1cz0hMCx0aGlzLnNlbGVjdGlvbkxpc3QuX3NldEZvY3VzZWRPcHRpb24odGhpcyl9LGUucHJvdG90eXBlLl9oYW5kbGVCbHVyPWZ1bmN0aW9uKCl7dGhpcy5faGFzRm9jdXM9ITEsdGhpcy5zZWxlY3Rpb25MaXN0Ll9vblRvdWNoZWQoKX0sZS5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudH0sZS5wcm90b3R5cGUuX3NldFNlbGVjdGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0IT09dGhpcy5fc2VsZWN0ZWQmJih0aGlzLl9zZWxlY3RlZD10LHQ/dGhpcy5zZWxlY3Rpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5zZWxlY3QodGhpcyk6dGhpcy5zZWxlY3Rpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5kZXNlbGVjdCh0aGlzKSx0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSwhMCl9LGV9KE9iamVjdChvLnYpKGZ1bmN0aW9uKCl7fSkpLHY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZWxlbWVudD1lLHIuc2VsZWN0aW9uQ2hhbmdlPW5ldyBpLm0sci50YWJJbmRleD0wLHIuc2VsZWN0ZWRPcHRpb25zPW5ldyB1LmEoITApLHIuX29uQ2hhbmdlPWZ1bmN0aW9uKHQpe30sci5fbW9kZWxDaGFuZ2VzPWMuYS5FTVBUWSxyLl9vblRvdWNoZWQ9ZnVuY3Rpb24oKXt9LHIudGFiSW5kZXg9cGFyc2VJbnQobil8fDAscn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBhLmEodGhpcy5vcHRpb25zKS53aXRoV3JhcCgpLndpdGhUeXBlQWhlYWQoKS5za2lwUHJlZGljYXRlKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSx0aGlzLl90ZW1wVmFsdWVzJiYodGhpcy5fc2V0T3B0aW9uc0Zyb21WYWx1ZXModGhpcy5fdGVtcFZhbHVlcyksdGhpcy5fdGVtcFZhbHVlcz1udWxsKSx0aGlzLl9tb2RlbENoYW5nZXM9dGhpcy5zZWxlY3RlZE9wdGlvbnMub25DaGFuZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe2lmKHQuYWRkZWQpZm9yKHZhciBlPTAsbj10LmFkZGVkO2U8bi5sZW5ndGg7ZSsrKW5bZV0uc2VsZWN0ZWQ9ITA7aWYodC5yZW1vdmVkKWZvcih2YXIgcj0wLGk9dC5yZW1vdmVkO3I8aS5sZW5ndGg7cisrKWlbcl0uc2VsZWN0ZWQ9ITF9KX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9tb2RlbENoYW5nZXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0sZS5wcm90b3R5cGUuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWxsT3B0aW9uc1NlbGVjdGVkKCEwKX0sZS5wcm90b3R5cGUuZGVzZWxlY3RBbGw9ZnVuY3Rpb24oKXt0aGlzLl9zZXRBbGxPcHRpb25zU2VsZWN0ZWQoITEpfSxlLnByb3RvdHlwZS5fc2V0Rm9jdXNlZE9wdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW1JbmRleCh0aGlzLl9nZXRPcHRpb25JbmRleCh0KSl9LGUucHJvdG90eXBlLl9yZW1vdmVPcHRpb25Gcm9tTGlzdD1mdW5jdGlvbih0KXtpZih0Ll9oYXNGb2N1cyl7dmFyIGU9dGhpcy5fZ2V0T3B0aW9uSW5kZXgodCk7ZT4wP3RoaXMuX2tleU1hbmFnZXIuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk6MD09PWUmJnRoaXMub3B0aW9ucy5sZW5ndGg+MSYmdGhpcy5fa2V5TWFuYWdlci5zZXROZXh0SXRlbUFjdGl2ZSgpfX0sZS5wcm90b3R5cGUuX2tleWRvd249ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXlDb2RlLG49dGhpcy5fa2V5TWFuYWdlcixyPW4uYWN0aXZlSXRlbUluZGV4O3N3aXRjaChlKXtjYXNlIGwuajpjYXNlIGwuZDp0aGlzLmRpc2FibGVkfHwodGhpcy5fdG9nZ2xlU2VsZWN0T25Gb2N1c2VkT3B0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztjYXNlIGwuZjpjYXNlIGwuYzplPT09bC5mP24uc2V0Rmlyc3RJdGVtQWN0aXZlKCk6bi5zZXRMYXN0SXRlbUFjdGl2ZSgpLHQucHJldmVudERlZmF1bHQoKTticmVhaztkZWZhdWx0Om4ub25LZXlkb3duKHQpfWUhPT1sLmwmJmUhPT1sLmJ8fCF0LnNoaWZ0S2V5fHxuLmFjdGl2ZUl0ZW1JbmRleD09PXJ8fHRoaXMuX3RvZ2dsZVNlbGVjdE9uRm9jdXNlZE9wdGlvbigpfSxlLnByb3RvdHlwZS5fcmVwb3J0VmFsdWVDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMmJnRoaXMuX29uQ2hhbmdlKHRoaXMuX2dldFNlbGVjdGVkT3B0aW9uVmFsdWVzKCkpfSxlLnByb3RvdHlwZS5fZW1pdENoYW5nZUV2ZW50PWZ1bmN0aW9uKHQpe3RoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV3IGZ1bmN0aW9uKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLm9wdGlvbj1lfSh0aGlzLHQpKX0sZS5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM/dGhpcy5fc2V0T3B0aW9uc0Zyb21WYWx1ZXModHx8W10pOnRoaXMuX3RlbXBWYWx1ZXM9dH0sZS5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPXR9KX0sZS5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9vbkNoYW5nZT10fSxlLnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLl9vblRvdWNoZWQ9dH0sZS5wcm90b3R5cGUuX3NldE9wdGlvbnNGcm9tVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuX3NldFNlbGVjdGVkKCExKX0pLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLm9wdGlvbnMuZmluZChmdW5jdGlvbihuKXtyZXR1cm4gZS5jb21wYXJlV2l0aD9lLmNvbXBhcmVXaXRoKG4udmFsdWUsdCk6bi52YWx1ZT09PXR9KX0pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9zZXRTZWxlY3RlZCghMCl9KX0sZS5wcm90b3R5cGUuX2dldFNlbGVjdGVkT3B0aW9uVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0ZWR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KX0sZS5wcm90b3R5cGUuX3RvZ2dsZVNlbGVjdE9uRm9jdXNlZE9wdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4O2lmKG51bGwhPXQmJnRoaXMuX2lzVmFsaWRJbmRleCh0KSl7dmFyIGU9dGhpcy5vcHRpb25zLnRvQXJyYXkoKVt0XTtlJiYoZS50b2dnbGUoKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoZSkpfX0sZS5wcm90b3R5cGUuX3NldEFsbE9wdGlvbnNTZWxlY3RlZD1mdW5jdGlvbih0KXt2YXIgZT0hMTt0aGlzLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihuKXtuLl9zZXRTZWxlY3RlZCh0KSYmKGU9ITApfSksZSYmdGhpcy5fcmVwb3J0VmFsdWVDaGFuZ2UoKX0sZS5wcm90b3R5cGUuX2lzVmFsaWRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdD49MCYmdDx0aGlzLm9wdGlvbnMubGVuZ3RofSxlLnByb3RvdHlwZS5fZ2V0T3B0aW9uSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy50b0FycmF5KCkuaW5kZXhPZih0KX0sZX0oeSksYj1mdW5jdGlvbigpe319LCIwL3VRIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIjZibEYiKSxpPW4oIi9XWXYiKSxvPW4oIjJlUGwiKSxhPW4oInhUbGEiKSxzPW4oIkVuOCsiKSx1PW4oIklVVGIiKSxsPW4oInB1Z1QiKSxjPW4oIlM1WFEiKSxmPW4oInU2N0QiKSxoPW4oIkpjUnYiKSxkPW4oIkZ4YjEiKTtmdW5jdGlvbiBwKHQsZSl7aWYoIWUpcmV0dXJuIHQgaW5zdGFuY2VvZiByLmE/dDpuZXcgci5hKE9iamVjdChkLmEpKHQpKTtpZihudWxsIT10KXtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbYS5hXX0odCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyByLmEoZT9mdW5jdGlvbihuKXt2YXIgcj1uZXcgbC5hO3JldHVybiByLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7dmFyIGk9dFthLmFdKCk7ci5hZGQoaS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24odCl7ci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLm5leHQodCl9KSl9LGVycm9yOmZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5lcnJvcih0KX0pKX0sY29tcGxldGU6ZnVuY3Rpb24oKXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY29tcGxldGUoKX0pKX19KSl9KSkscn06T2JqZWN0KGguYSkodCkpfSh0LGUpO2lmKE9iamVjdChpLmEpKHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgci5hKGU/ZnVuY3Rpb24obil7dmFyIHI9bmV3IGwuYTtyZXR1cm4gci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiB0LnRoZW4oZnVuY3Rpb24odCl7ci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe24ubmV4dCh0KSxyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY29tcGxldGUoKX0pKX0pKX0sZnVuY3Rpb24odCl7ci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmVycm9yKHQpfSkpfSl9KSkscn06T2JqZWN0KGMuYSkodCkpfSh0LGUpO2lmKE9iamVjdChvLmEpKHQpKXJldHVybiBPYmplY3QodS5hKSh0LGUpO2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtzLmFdfSh0KXx8InN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBmdW5jdGlvbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IHIuYShlP2Z1bmN0aW9uKG4pe3ZhciByLGk9bmV3IGwuYTtyZXR1cm4gaS5hZGQoZnVuY3Rpb24oKXtyJiYiZnVuY3Rpb24iPT10eXBlb2Ygci5yZXR1cm4mJnIucmV0dXJuKCl9KSxpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cj10W3MuYV0oKSxpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7aWYoIW4uY2xvc2VkKXt2YXIgdCxlO3RyeXt2YXIgaT1yLm5leHQoKTt0PWkudmFsdWUsZT1pLmRvbmV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgbi5lcnJvcih0KX1lP24uY29tcGxldGUoKToobi5uZXh0KHQpLHRoaXMuc2NoZWR1bGUoKSl9fSkpfSkpLGl9Ok9iamVjdChmLmEpKHQpKX0odCxlKX10aHJvdyBuZXcgVHlwZUVycm9yKChudWxsIT09dCYmdHlwZW9mIHR8fHQpKyIgaXMgbm90IG9ic2VydmFibGUiKX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pfSwiMjFMYiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJtclNHIiksaT1uKCJPemZCIiksbz1uKCJLOUlhIiksYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci5zY2hlZHVsZXI9ZSxyLndvcms9bixyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxuPjA/dC5wcm90b3R5cGUuc2NoZWR1bGUuY2FsbCh0aGlzLGUsbik6KHRoaXMuZGVsYXk9bix0aGlzLnN0YXRlPWUsdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyksdGhpcyl9LGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj4wfHx0aGlzLmNsb3NlZD90LnByb3RvdHlwZS5leGVjdXRlLmNhbGwodGhpcyxlLG4pOnRoaXMuX2V4ZWN1dGUoZSxuKX0sZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0wKSxudWxsIT09ciYmcj4wfHxudWxsPT09ciYmdGhpcy5kZWxheT4wP3QucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcyxlLG4scik6ZS5mbHVzaCh0aGlzKX0sZX0obigiaDlEcSIpLmEpLHM9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByLmIoZSx0KSxlfShuKCJDUzlRIikuYSkpKGEpLHU9bigicHVnVCIpLGw9bigiRkZPbyIpLGM9bigiNjBpVSIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dm9pZCAwPT09ciYmKHI9MCk7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuc2NoZWR1bGVyPW4saS5kZWxheT1yLGl9cmV0dXJuIHIuYihlLHQpLGUuZGlzcGF0Y2g9ZnVuY3Rpb24odCl7dC5ub3RpZmljYXRpb24ub2JzZXJ2ZSh0LmRlc3RpbmF0aW9uKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLnNjaGVkdWxlTWVzc2FnZT1mdW5jdGlvbih0KXt0aGlzLmFkZCh0aGlzLnNjaGVkdWxlci5zY2hlZHVsZShlLmRpc3BhdGNoLHRoaXMuZGVsYXksbmV3IGgodCx0aGlzLmRlc3RpbmF0aW9uKSkpfSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLnNjaGVkdWxlTWVzc2FnZShjLmEuY3JlYXRlTmV4dCh0KSl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0aGlzLnNjaGVkdWxlTWVzc2FnZShjLmEuY3JlYXRlRXJyb3IodCkpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLnNjaGVkdWxlTWVzc2FnZShjLmEuY3JlYXRlQ29tcGxldGUoKSl9LGV9KGwuYSksaD1mdW5jdGlvbih0LGUpe3RoaXMubm90aWZpY2F0aW9uPXQsdGhpcy5kZXN0aW5hdGlvbj1lfSxkPW4oIjhnOEEiKSxwPW4oInVNYU8iKSxtPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZvaWQgMD09PWUmJihlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksdm9pZCAwPT09biYmKG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuc2NoZWR1bGVyPXIsaS5fZXZlbnRzPVtdLGkuX2luZmluaXRlVGltZVdpbmRvdz0hMSxpLl9idWZmZXJTaXplPWU8MT8xOmUsaS5fd2luZG93VGltZT1uPDE/MTpuLG49PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk/KGkuX2luZmluaXRlVGltZVdpbmRvdz0hMCxpLm5leHQ9aS5uZXh0SW5maW5pdGVUaW1lV2luZG93KTppLm5leHQ9aS5uZXh0VGltZVdpbmRvdyxpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0SW5maW5pdGVUaW1lV2luZG93PWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMuX2V2ZW50cztuLnB1c2goZSksbi5sZW5ndGg+dGhpcy5fYnVmZmVyU2l6ZSYmbi5zaGlmdCgpLHQucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5uZXh0VGltZVdpbmRvdz1mdW5jdGlvbihlKXt0aGlzLl9ldmVudHMucHVzaChuZXcgeSh0aGlzLl9nZXROb3coKSxlKSksdGhpcy5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMoKSx0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMuX2luZmluaXRlVGltZVdpbmRvdyxyPW4/dGhpcy5fZXZlbnRzOnRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCksaT10aGlzLnNjaGVkdWxlcixvPXIubGVuZ3RoO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBkLmE7aWYodGhpcy5pc1N0b3BwZWR8fHRoaXMuaGFzRXJyb3I/ZT11LmEuRU1QVFk6KHRoaXMub2JzZXJ2ZXJzLnB1c2godCksZT1uZXcgcC5hKHRoaXMsdCkpLGkmJnQuYWRkKHQ9bmV3IGYodCxpKSksbilmb3IodmFyIGE9MDthPG8mJiF0LmNsb3NlZDthKyspdC5uZXh0KHJbYV0pO2Vsc2UgZm9yKGE9MDthPG8mJiF0LmNsb3NlZDthKyspdC5uZXh0KHJbYV0udmFsdWUpO3JldHVybiB0aGlzLmhhc0Vycm9yP3QuZXJyb3IodGhpcy50aHJvd25FcnJvcik6dGhpcy5pc1N0b3BwZWQmJnQuY29tcGxldGUoKSxlfSxlLnByb3RvdHlwZS5fZ2V0Tm93PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuc2NoZWR1bGVyfHxzKS5ub3coKX0sZS5wcm90b3R5cGUuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dldE5vdygpLGU9dGhpcy5fYnVmZmVyU2l6ZSxuPXRoaXMuX3dpbmRvd1RpbWUscj10aGlzLl9ldmVudHMsaT1yLmxlbmd0aCxvPTA7bzxpJiYhKHQtcltvXS50aW1lPG4pOylvKys7cmV0dXJuIGk+ZSYmKG89TWF0aC5tYXgobyxpLWUpKSxvPjAmJnIuc3BsaWNlKDAsbykscn0sZX0oby5hKSx5PWZ1bmN0aW9uKHQsZSl7dGhpcy50aW1lPXQsdGhpcy52YWx1ZT1lfTtuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gSX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBTfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gd30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KTt2YXIgZz0iaW5saW5lIix2PVsicm93IiwiY29sdW1uIiwicm93LXJldmVyc2UiLCJjb2x1bW4tcmV2ZXJzZSJdO2Z1bmN0aW9uIGIodCl7dmFyIGU9KHQ9dD90LnRvTG93ZXJDYXNlKCk6IiIpLnNwbGl0KCIgIiksbj1lWzBdLHI9ZVsxXSxpPWVbMl07cmV0dXJuIHYuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PW59KXx8KG49dlswXSkscj09PWcmJihyPWkhPT1nP2k6IiIsaT1nKSxbbixmdW5jdGlvbih0KXtpZih0KXN3aXRjaCh0LnRvTG93ZXJDYXNlKCkpe2Nhc2UicmV2ZXJzZSI6Y2FzZSJ3cmFwLXJldmVyc2UiOmNhc2UicmV2ZXJzZS13cmFwIjp0PSJ3cmFwLXJldmVyc2UiO2JyZWFrO2Nhc2Uibm8iOmNhc2Uibm9uZSI6Y2FzZSJub3dyYXAiOnQ9Im5vd3JhcCI7YnJlYWs7ZGVmYXVsdDp0PSJ3cmFwIn1yZXR1cm4gdH0ociksISFpXX1mdW5jdGlvbiBfKHQpe3JldHVybiBiKHQpWzBdLmluZGV4T2YoInJvdyIpPi0xfXZhciB3PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5fYW5ub3VuY2VyPW5ldyBtKDEpLGkubGF5b3V0JD1pLl9hbm5vdW5jZXIuYXNPYnNlcnZhYmxlKCksaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQubGF5b3V0fHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVXaXRoRGlyZWN0aW9uKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5uZ09uSW5pdC5jYWxsKHRoaXMpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJsYXlvdXQiLCJyb3ciLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVdpdGhEaXJlY3Rpb24odC52YWx1ZSl9KSx0aGlzLl91cGRhdGVXaXRoRGlyZWN0aW9uKCl9LGUucHJvdG90eXBlLl91cGRhdGVXaXRoRGlyZWN0aW9uPWZ1bmN0aW9uKHQpe3Q9dHx8dGhpcy5fcXVlcnlJbnB1dCgibGF5b3V0Iil8fCJyb3ciLHRoaXMuX21xQWN0aXZhdGlvbiYmKHQ9dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KTt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT1iKHQpO3JldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPW51bGwpLHZvaWQgMD09PXImJihyPSExKSx7ZGlzcGxheTpyPyJpbmxpbmUtZmxleCI6ImZsZXgiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIsImZsZXgtZGlyZWN0aW9uIjplWzBdLCJmbGV4LXdyYXAiOm58fG51bGx9fSgwLGVbMV0sZVsyXSl9KHR8fCIiKTt0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KGUpLHRoaXMuX2Fubm91bmNlci5uZXh0KHtkaXJlY3Rpb246ZVsiZmxleC1kaXJlY3Rpb24iXSx3cmFwOiEhZVsiZmxleC13cmFwIl0mJiJub3dyYXAiIT09ZVsiZmxleC13cmFwIl19KX0sZX0oaS5iKSx4PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvLGEpe3ZhciBzPXQuY2FsbCh0aGlzLGUsbixhKXx8dGhpcztyZXR1cm4gcy5fem9uZT1pLHMuX2RpcmVjdGlvbmFsaXR5PW8scy5fbGF5b3V0PSJyb3ciLHImJihzLl9sYXlvdXRXYXRjaGVyPXIubGF5b3V0JC5zdWJzY3JpYmUocy5fb25MYXlvdXRDaGFuZ2UuYmluZChzKSkpLHMuX2RpcmVjdGlvbldhdGNoZXI9cy5fZGlyZWN0aW9uYWxpdHkuY2hhbmdlLnN1YnNjcmliZShzLl91cGRhdGVXaXRoVmFsdWUuYmluZChzKSksc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXAiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwWHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwWHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwU20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwU20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwWGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwWGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQuZ2FwfHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl93YXRjaENvbnRlbnRDaGFuZ2VzKCksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImdhcCIsIjAiLGZ1bmN0aW9uKGUpe3QuX3VwZGF0ZVdpdGhWYWx1ZShlLnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpLHRoaXMuX29ic2VydmVyJiZ0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5fZGlyZWN0aW9uV2F0Y2hlciYmdGhpcy5fZGlyZWN0aW9uV2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fd2F0Y2hDb250ZW50Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgTXV0YXRpb25PYnNlcnZlciYmKHQuX29ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2Uuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRlZE5vZGVzJiZ0LmFkZGVkTm9kZXMubGVuZ3RoPjB8fHQucmVtb3ZlZE5vZGVzJiZ0LnJlbW92ZWROb2Rlcy5sZW5ndGg+MH0pJiZ0Ll91cGRhdGVXaXRoVmFsdWUoKX0pLHQuX29ic2VydmVyLm9ic2VydmUodC5uYXRpdmVFbGVtZW50LHtjaGlsZExpc3Q6ITB9KSl9KX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbGF5b3V0PSh0LmRpcmVjdGlvbnx8IiIpLnRvTG93ZXJDYXNlKCksdi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZS5fbGF5b3V0fSl8fCh0aGlzLl9sYXlvdXQ9InJvdyIpLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5fdXBkYXRlV2l0aFZhbHVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10fHx0aGlzLl9xdWVyeUlucHV0KCJnYXAiKXx8IjAiO3RoaXMuX21xQWN0aXZhdGlvbiYmKG49dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KTt2YXIgcj10aGlzLmNoaWxkcmVuTm9kZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5ub2RlVHlwZSYmIm5vbmUiIT1lLl9nZXREaXNwbGF5U3R5bGUodCl9KS5zb3J0KGZ1bmN0aW9uKHQsbil7dmFyIHI9K2UuX3N0eWxlci5sb29rdXBTdHlsZSh0LCJvcmRlciIpLGk9K2UuX3N0eWxlci5sb29rdXBTdHlsZShuLCJvcmRlciIpO3JldHVybiBpc05hTihyKXx8aXNOYU4oaSl8fHI9PT1pPzA6cj5pPzE6LTF9KTtpZihyLmxlbmd0aD4wKWlmKG4uZW5kc1dpdGgoTykpbj1uLnN1YnN0cmluZygwLG4uaW5kZXhPZihPKSksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudHModGhpcy5fYnVpbGRHcmlkUGFkZGluZyhuKSxyKSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX2J1aWxkR3JpZE1hcmdpbihuKSk7ZWxzZXt2YXIgaT1yLnBvcCgpO3RoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkQ1NTKG4pLHIpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkQ1NTKCksW2ldKX19LGUucHJvdG90eXBlLl9idWlsZEdyaWRQYWRkaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPSIwcHgiLG49IjBweCI7cmV0dXJuInJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT9uPXQ6ZT10LHtwYWRkaW5nOiIwcHggIitlKyIgIit0KyIgIitufX0sZS5wcm90b3R5cGUuX2J1aWxkR3JpZE1hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT0iMHB4IixuPSIwcHgiO3JldHVybiJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/bj0iLSIrdDplPSItIit0LHttYXJnaW46IjBweCAiK2UrIiAtIit0KyIgIitufX0sZS5wcm90b3R5cGUuX2J1aWxkQ1NTPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PW51bGwpO3ZhciBlLG49eyJtYXJnaW4tbGVmdCI6bnVsbCwibWFyZ2luLXJpZ2h0IjpudWxsLCJtYXJnaW4tdG9wIjpudWxsLCJtYXJnaW4tYm90dG9tIjpudWxsfTtzd2l0Y2godGhpcy5fbGF5b3V0KXtjYXNlImNvbHVtbiI6ZT0ibWFyZ2luLWJvdHRvbSI7YnJlYWs7Y2FzZSJjb2x1bW4tcmV2ZXJzZSI6ZT0ibWFyZ2luLXRvcCI7YnJlYWs7Y2FzZSJyb3ciOmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLWxlZnQiOiJtYXJnaW4tcmlnaHQiO2JyZWFrO2Nhc2Uicm93LXJldmVyc2UiOmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLXJpZ2h0IjoibWFyZ2luLWxlZnQiO2JyZWFrO2RlZmF1bHQ6ZT0icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlPyJtYXJnaW4tbGVmdCI6Im1hcmdpbi1yaWdodCJ9cmV0dXJuIG5bZV09dCxufSxlfShpLmIpLE89IiBncmlkIjtmdW5jdGlvbiBDKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTtmb3IodmFyIHI9MCxpPWU7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl07aWYobnVsbCE9bylmb3IodmFyIGEgaW4gbylvLmhhc093blByb3BlcnR5KGEpJiYodFthXT1vW2FdKX1yZXR1cm4gdH12YXIgUz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyl7dmFyIGE9dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiBhLl9jb250YWluZXI9cixhLnN0eWxlVXRpbHM9aSxhLmxheW91dENvbmZpZz1vLGEuX2NhY2hlSW5wdXQoImZsZXgiLCIiKSxhLl9jYWNoZUlucHV0KCJzaHJpbmsiLDEpLGEuX2NhY2hlSW5wdXQoImdyb3ciLDEpLHImJihhLl9sYXlvdXRXYXRjaGVyPXIubGF5b3V0JC5zdWJzY3JpYmUoZnVuY3Rpb24odCl7YS5fb25MYXlvdXRDaGFuZ2UodCl9KSksYX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNocmluayIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJzaHJpbmsiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ3JvdyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJncm93Iix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXgiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEd0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEd0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEd0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEd0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEd0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEd0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEx0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEx0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEx0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEx0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEx0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpeyhudWxsIT10LmZsZXh8fHRoaXMuX21xQWN0aXZhdGlvbikmJnRoaXMuX3VwZGF0ZVN0eWxlKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5uZ09uSW5pdC5jYWxsKHRoaXMpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJmbGV4IiwiIixmdW5jdGlvbih0KXtlLl91cGRhdGVTdHlsZSh0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVN0eWxlKCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUubmdPbkRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9sYXlvdXRXYXRjaGVyJiZ0aGlzLl9sYXlvdXRXYXRjaGVyLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9vbkxheW91dENoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9sYXlvdXQ9dHx8dGhpcy5fbGF5b3V0fHx7ZGlyZWN0aW9uOiJyb3ciLHdyYXA6ITF9LHRoaXMuX3VwZGF0ZVN0eWxlKCl9LGUucHJvdG90eXBlLl91cGRhdGVTdHlsZT1mdW5jdGlvbih0KXt2YXIgZT10fHx0aGlzLl9xdWVyeUlucHV0KCJmbGV4Iil8fCIiO3RoaXMuX21xQWN0aXZhdGlvbiYmKGU9dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KTt2YXIgbj1TdHJpbmcoZSkucmVwbGFjZSgiOyIsIiIpLHI9T2JqZWN0KGkubykobix0aGlzLl9xdWVyeUlucHV0KCJncm93IiksdGhpcy5fcXVlcnlJbnB1dCgic2hyaW5rIikpO3RoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnQodGhpcy5fdmFsaWRhdGVWYWx1ZS5hcHBseSh0aGlzLHIpKX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlVmFsdWU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX2dldEZsZXhGbG93RGlyZWN0aW9uKHRoaXMucGFyZW50RWxlbWVudCx0aGlzLmxheW91dENvbmZpZy5hZGRGbGV4VG9QYXJlbnQpLmluZGV4T2YoImNvbHVtbiIpPi0xPyJjb2x1bW4iOiJyb3ciLGk9XyhyKT8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCIsbz1fKHIpPyJtaW4td2lkdGgiOiJtaW4taGVpZ2h0IixhPVN0cmluZyhuKS5pbmRleE9mKCJjYWxjIik+LTEscz1hfHwiYXV0byI9PW4sdT1TdHJpbmcobikuaW5kZXhPZigiJSIpPi0xJiYhYSxsPVN0cmluZyhuKS5pbmRleE9mKCJweCIpPi0xfHxTdHJpbmcobikuaW5kZXhPZigiZW0iKT4tMXx8U3RyaW5nKG4pLmluZGV4T2YoInZ3Iik+LTF8fFN0cmluZyhuKS5pbmRleE9mKCJ2aCIpPi0xLGM9U3RyaW5nKG4pLmluZGV4T2YoInB4Iik+LTF8fHMsZj1hfHxsO3Q9IjAiPT10PzA6dCxlPSIwIj09ZT8wOmU7dmFyIGg9IXQmJiFlLGQ9e30scD17Im1heC13aWR0aCI6bnVsbCwibWF4LWhlaWdodCI6bnVsbCwibWluLXdpZHRoIjpudWxsLCJtaW4taGVpZ2h0IjpudWxsfTtzd2l0Y2gobnx8IiIpe2Nhc2UiIjpuPSJyb3ciPT09cj8iMCUiOnRoaXMubGF5b3V0Q29uZmlnLnVzZUNvbHVtbkJhc2lzWmVybz8iMC4wMDAwMDAwMDFweCI6ImF1dG8iO2JyZWFrO2Nhc2UiaW5pdGlhbCI6Y2FzZSJub2dyb3ciOnQ9MCxuPSJhdXRvIjticmVhaztjYXNlImdyb3ciOm49IjEwMCUiO2JyZWFrO2Nhc2Uibm9zaHJpbmsiOmU9MCxuPSJhdXRvIjticmVhaztjYXNlImF1dG8iOmJyZWFrO2Nhc2Uibm9uZSI6dD0wLGU9MCxuPSJhdXRvIjticmVhaztkZWZhdWx0OmZ8fHV8fGlzTmFOKG4pfHwobis9IiUiKSwiMCUiPT09biYmKGY9ITApLCIwcHgiPT09biYmKG49IjAlIiksZD1DKHAsYT97ImZsZXgtZ3JvdyI6dCwiZmxleC1zaHJpbmsiOmUsImZsZXgtYmFzaXMiOmY/bjoiMTAwJSJ9OntmbGV4OnQrIiAiK2UrIiAiKyhmP246IjEwMCUiKX0pfXJldHVybiBkLmZsZXh8fGRbImZsZXgtZ3JvdyJdfHwoZD1DKHAsYT97ImZsZXgtZ3JvdyI6dCwiZmxleC1zaHJpbmsiOmUsImZsZXgtYmFzaXMiOm59OntmbGV4OnQrIiAiK2UrIiAiK259KSksIjAlIiE9PW4mJiIwcHgiIT09biYmIjAuMDAwMDAwMDAxcHgiIT09biYmImF1dG8iIT09biYmKGRbb109aHx8YyYmdD9uOm51bGwsZFtpXT1ofHwhcyYmZT9uOm51bGwpLGRbb118fGRbaV0/dGhpcy5fbGF5b3V0JiZ0aGlzLl9sYXlvdXQud3JhcCYmKGRbYT8iZmxleC1iYXNpcyI6ImZsZXgiXT1kW2ldP2E/ZFtpXTp0KyIgIitlKyIgIitkW2ldOmE/ZFtvXTp0KyIgIitlKyIgIitkW29dKTpkPUMocCxhP3siZmxleC1ncm93Ijp0LCJmbGV4LXNocmluayI6ZSwiZmxleC1iYXNpcyI6bn06e2ZsZXg6dCsiICIrZSsiICIrbn0pLEMoZCx7ImJveC1zaXppbmciOiJib3JkZXItYm94In0pfSxlfShpLmIpLEU9e21hcmdpbjowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLCJtaW4td2lkdGgiOiIxMDAlIiwibWluLWhlaWdodCI6IjEwMCUifSxrPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5lbFJlZj1uLGkuX2FwcGx5U3R5bGVUb0VsZW1lbnQoRSksaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlfShpLmIpLFQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4saSl8fHRoaXM7cmV0dXJuIG8uX2xheW91dD0icm93IixyJiYoby5fbGF5b3V0V2F0Y2hlcj1yLmxheW91dCQuc3Vic2NyaWJlKG8uX29uTGF5b3V0Q2hhbmdlLmJpbmQobykpKSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ24iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ24iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25YcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnblhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduU20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25TbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbk1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkxnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduWGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25YbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpeyhudWxsIT10LmFsaWdufHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLm5nT25Jbml0LmNhbGwodGhpcyksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImFsaWduIiwic3RhcnQgc3RyZXRjaCIsZnVuY3Rpb24odCl7ZS5fdXBkYXRlV2l0aFZhbHVlKHQudmFsdWUpfSksdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUubmdPbkRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9sYXlvdXRXYXRjaGVyJiZ0aGlzLl9sYXlvdXRXYXRjaGVyLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl91cGRhdGVXaXRoVmFsdWU9ZnVuY3Rpb24odCl7dD10fHx0aGlzLl9xdWVyeUlucHV0KCJhbGlnbiIpfHwic3RhcnQgc3RyZXRjaCIsdGhpcy5fbXFBY3RpdmF0aW9uJiYodD10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnQodGhpcy5fYnVpbGRDU1ModCkpLHRoaXMuX2FsbG93U3RyZXRjaGluZyh0LHRoaXMuX2xheW91dD90aGlzLl9sYXlvdXQ6InJvdyIpfSxlLnByb3RvdHlwZS5fb25MYXlvdXRDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9sYXlvdXQ9KHQuZGlyZWN0aW9ufHwiIikudG9Mb3dlckNhc2UoKSx2LmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lLl9sYXlvdXR9KXx8KHRoaXMuX2xheW91dD0icm93Iik7dmFyIG49dGhpcy5fcXVlcnlJbnB1dCgiYWxpZ24iKXx8InN0YXJ0IHN0cmV0Y2giO3RoaXMuX21xQWN0aXZhdGlvbiYmKG49dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KSx0aGlzLl9hbGxvd1N0cmV0Y2hpbmcobix0aGlzLl9sYXlvdXR8fCJyb3ciKX0sZS5wcm90b3R5cGUuX2J1aWxkQ1NTPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LG49dC5zcGxpdCgiICIpLHI9blsxXTtzd2l0Y2goblswXSl7Y2FzZSJjZW50ZXIiOmVbImp1c3RpZnktY29udGVudCJdPSJjZW50ZXIiO2JyZWFrO2Nhc2Uic3BhY2UtYXJvdW5kIjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0ic3BhY2UtYXJvdW5kIjticmVhaztjYXNlInNwYWNlLWJldHdlZW4iOmVbImp1c3RpZnktY29udGVudCJdPSJzcGFjZS1iZXR3ZWVuIjticmVhaztjYXNlInNwYWNlLWV2ZW5seSI6ZVsianVzdGlmeS1jb250ZW50Il09InNwYWNlLWV2ZW5seSI7YnJlYWs7Y2FzZSJlbmQiOmNhc2UiZmxleC1lbmQiOmVbImp1c3RpZnktY29udGVudCJdPSJmbGV4LWVuZCI7YnJlYWs7Y2FzZSJzdGFydCI6Y2FzZSJmbGV4LXN0YXJ0IjpkZWZhdWx0OmVbImp1c3RpZnktY29udGVudCJdPSJmbGV4LXN0YXJ0In1zd2l0Y2gocil7Y2FzZSJzdGFydCI6Y2FzZSJmbGV4LXN0YXJ0IjplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0iZmxleC1zdGFydCI7YnJlYWs7Y2FzZSJiYXNlbGluZSI6ZVsiYWxpZ24taXRlbXMiXT0iYmFzZWxpbmUiO2JyZWFrO2Nhc2UiY2VudGVyIjplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0iY2VudGVyIjticmVhaztjYXNlImVuZCI6Y2FzZSJmbGV4LWVuZCI6ZVsiYWxpZ24taXRlbXMiXT1lWyJhbGlnbi1jb250ZW50Il09ImZsZXgtZW5kIjticmVhaztjYXNlInN0cmV0Y2giOmRlZmF1bHQ6ZVsiYWxpZ24taXRlbXMiXT1lWyJhbGlnbi1jb250ZW50Il09InN0cmV0Y2gifXJldHVybiBDKGUse2Rpc3BsYXk6ImZsZXgiLCJmbGV4LWRpcmVjdGlvbiI6dGhpcy5fbGF5b3V0fHwicm93IiwiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSl9LGUucHJvdG90eXBlLl9hbGxvd1N0cmV0Y2hpbmc9ZnVuY3Rpb24odCxlKXsic3RyZXRjaCI9PXQuc3BsaXQoIiAiKVsxXSYmdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh7ImJveC1zaXppbmciOiJib3JkZXItYm94IiwibWF4LXdpZHRoIjpfKGUpP251bGw6IjEwMCUiLCJtYXgtaGVpZ2h0IjpfKGUpPyIxMDAlIjpudWxsfSl9LGV9KGkuYiksST1mdW5jdGlvbigpe319LCIyNkZVIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHI9bigibXJTRyIpLGk9bigiSzlJYSIpLG89bigiOGc4QSIpLGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX3ZhbHVlPWUsbn1yZXR1cm4gci5iKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgbj10LnByb3RvdHlwZS5fc3Vic2NyaWJlLmNhbGwodGhpcyxlKTtyZXR1cm4gbiYmIW4uY2xvc2VkJiZlLm5leHQodGhpcy5fdmFsdWUpLG59LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNFcnJvcil0aHJvdyB0aGlzLnRocm93bkVycm9yO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBvLmE7cmV0dXJuIHRoaXMuX3ZhbHVlfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLHRoaXMuX3ZhbHVlPWUpfSxlfShpLmEpfSwiMkJkaiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LCIyZVBsIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fX0sIjNwSlEiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuKCJtclNHIiksbigiT3pmQiIpLG4oIm42Z0ciKTt2YXIgcj1mdW5jdGlvbigpe319LDQ6ZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKCJ6VW5iIil9LCI0YzM1IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBofSk7dmFyIHI9bigibXJTRyIpLGk9bigiQ2NuRyIpO2Z1bmN0aW9uIG8oKXt0aHJvdyBFcnJvcigiSG9zdCBhbHJlYWR5IGhhcyBhIHBvcnRhbCBhdHRhY2hlZCIpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10JiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBhIHBvcnRhbCB0byBhIG51bGwgUG9ydGFsT3V0bGV0Iil9KCksdC5oYXNBdHRhY2hlZCgpJiZvKCksdGhpcy5fYXR0YWNoZWRIb3N0PXQsdC5hdHRhY2godGhpcyl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2F0dGFjaGVkSG9zdDtudWxsPT10P2Z1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZGV0YWNoIGEgcG9ydGFsIHRoYXQgaXMgbm90IGF0dGFjaGVkIHRvIGEgaG9zdCIpfSgpOih0aGlzLl9hdHRhY2hlZEhvc3Q9bnVsbCx0LmRldGFjaCgpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0F0dGFjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuX2F0dGFjaGVkSG9zdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZXRBdHRhY2hlZEhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5fYXR0YWNoZWRIb3N0PXR9LHR9KCkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuY29tcG9uZW50PWUsaS52aWV3Q29udGFpbmVyUmVmPW4saS5pbmplY3Rvcj1yLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZX0oYSksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkudGVtcGxhdGVSZWY9ZSxpLnZpZXdDb250YWluZXJSZWY9bixpLmNvbnRleHQ9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwib3JpZ2luIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGVtcGxhdGVSZWYuZWxlbWVudFJlZn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49dGhpcy5jb250ZXh0KSx0aGlzLmNvbnRleHQ9bix0LnByb3RvdHlwZS5hdHRhY2guY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0PXZvaWQgMCx0LnByb3RvdHlwZS5kZXRhY2guY2FsbCh0aGlzKX0sZX0oYSksbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9pc0Rpc3Bvc2VkPSExfXJldHVybiB0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYXR0YWNoZWRQb3J0YWx9LHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdHx8ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTXVzdCBwcm92aWRlIGEgcG9ydGFsIHRvIGF0dGFjaCIpfSgpLHRoaXMuaGFzQXR0YWNoZWQoKSYmbygpLHRoaXMuX2lzRGlzcG9zZWQmJmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlRoaXMgUG9ydGFsT3V0bGV0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQiKX0oKSx0IGluc3RhbmNlb2Ygcz8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KSk6dCBpbnN0YW5jZW9mIHU/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KSk6dm9pZCBmdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBhbiB1bmtub3duIFBvcnRhbCB0eXBlLiBCYXNlUG9ydGFsT3V0bGV0IGFjY2VwdHMgZWl0aGVyIGEgQ29tcG9uZW50UG9ydGFsIG9yIGEgVGVtcGxhdGVQb3J0YWwuIil9KCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX2F0dGFjaGVkUG9ydGFsJiYodGhpcy5fYXR0YWNoZWRQb3J0YWwuc2V0QXR0YWNoZWRIb3N0KG51bGwpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9LHQucHJvdG90eXBlLnNldERpc3Bvc2VGbj1mdW5jdGlvbih0KXt0aGlzLl9kaXNwb3NlRm49dH0sdC5wcm90b3R5cGUuX2ludm9rZURpc3Bvc2VGbj1mdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VGbiYmKHRoaXMuX2Rpc3Bvc2VGbigpLHRoaXMuX2Rpc3Bvc2VGbj1udWxsKX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBvLm91dGxldEVsZW1lbnQ9ZSxvLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bixvLl9hcHBSZWY9cixvLl9kZWZhdWx0SW5qZWN0b3I9aSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmF0dGFjaENvbXBvbmVudFBvcnRhbD1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMscj10aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5jb21wb25lbnQpO3JldHVybiB0LnZpZXdDb250YWluZXJSZWY/KGU9dC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChyLHQudmlld0NvbnRhaW5lclJlZi5sZW5ndGgsdC5pbmplY3Rvcnx8dC52aWV3Q29udGFpbmVyUmVmLnBhcmVudEluamVjdG9yKSx0aGlzLnNldERpc3Bvc2VGbihmdW5jdGlvbigpe3JldHVybiBlLmRlc3Ryb3koKX0pKTooZT1yLmNyZWF0ZSh0LmluamVjdG9yfHx0aGlzLl9kZWZhdWx0SW5qZWN0b3IpLHRoaXMuX2FwcFJlZi5hdHRhY2hWaWV3KGUuaG9zdFZpZXcpLHRoaXMuc2V0RGlzcG9zZUZuKGZ1bmN0aW9uKCl7bi5fYXBwUmVmLmRldGFjaFZpZXcoZS5ob3N0VmlldyksZS5kZXN0cm95KCl9KSksdGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2dldENvbXBvbmVudFJvb3ROb2RlKGUpKSxlfSxlLnByb3RvdHlwZS5hdHRhY2hUZW1wbGF0ZVBvcnRhbD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC52aWV3Q29udGFpbmVyUmVmLHI9bi5jcmVhdGVFbWJlZGRlZFZpZXcodC50ZW1wbGF0ZVJlZix0LmNvbnRleHQpO3JldHVybiByLmRldGVjdENoYW5nZXMoKSxyLnJvb3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQodCl9KSx0aGlzLnNldERpc3Bvc2VGbihmdW5jdGlvbigpe3ZhciB0PW4uaW5kZXhPZihyKTstMSE9PXQmJm4ucmVtb3ZlKHQpfSkscn0sZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKSxudWxsIT10aGlzLm91dGxldEVsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5vdXRsZXRFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5vdXRsZXRFbGVtZW50KX0sZS5wcm90b3R5cGUuX2dldENvbXBvbmVudFJvb3ROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvc3RWaWV3LnJvb3ROb2Rlc1swXX0sZX0obCksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSxyLl92aWV3Q29udGFpbmVyUmVmPW4sci5faXNJbml0aWFsaXplZD0hMSxyLmF0dGFjaGVkPW5ldyBpLm0scn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBvcnRhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFBvcnRhbH0sc2V0OmZ1bmN0aW9uKGUpeyghdGhpcy5oYXNBdHRhY2hlZCgpfHxlfHx0aGlzLl9pc0luaXRpYWxpemVkKSYmKHRoaXMuaGFzQXR0YWNoZWQoKSYmdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksZSYmdC5wcm90b3R5cGUuYXR0YWNoLmNhbGwodGhpcyxlKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImF0dGFjaGVkUmVmIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUmVmfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5faXNJbml0aWFsaXplZD0hMH0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCx0aGlzLl9hdHRhY2hlZFJlZj1udWxsfSxlLnByb3RvdHlwZS5hdHRhY2hDb21wb25lbnRQb3J0YWw9ZnVuY3Rpb24oZSl7ZS5zZXRBdHRhY2hlZEhvc3QodGhpcyk7dmFyIG49bnVsbCE9ZS52aWV3Q29udGFpbmVyUmVmP2Uudmlld0NvbnRhaW5lclJlZjp0aGlzLl92aWV3Q29udGFpbmVyUmVmLHI9dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGUuY29tcG9uZW50KSxpPW4uY3JlYXRlQ29tcG9uZW50KHIsbi5sZW5ndGgsZS5pbmplY3Rvcnx8bi5wYXJlbnRJbmplY3Rvcik7cmV0dXJuIHQucHJvdG90eXBlLnNldERpc3Bvc2VGbi5jYWxsKHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gaS5kZXN0cm95KCl9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPWksdGhpcy5hdHRhY2hlZC5lbWl0KGkpLGl9LGUucHJvdG90eXBlLmF0dGFjaFRlbXBsYXRlUG9ydGFsPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7ZS5zZXRBdHRhY2hlZEhvc3QodGhpcyk7dmFyIHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoZS50ZW1wbGF0ZVJlZixlLmNvbnRleHQpO3JldHVybiB0LnByb3RvdHlwZS5zZXREaXNwb3NlRm4uY2FsbCh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX0pLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9cix0aGlzLmF0dGFjaGVkLmVtaXQocikscn0sZX0obCksaD1mdW5jdGlvbigpe319LCI2MGlVIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHI9bigiRzVKMSIpLGk9bigiRi9YTCIpLG89bigiWGxQdyIpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmtpbmQ9dCx0aGlzLnZhbHVlPWUsdGhpcy5lcnJvcj1uLHRoaXMuaGFzVmFsdWU9Ik4iPT09dH1yZXR1cm4gdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5raW5kKXtjYXNlIk4iOnJldHVybiB0Lm5leHQmJnQubmV4dCh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiB0LmVycm9yJiZ0LmVycm9yKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIHQuY29tcGxldGUmJnQuY29tcGxldGUoKX19LHQucHJvdG90eXBlLmRvPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2godGhpcy5raW5kKXtjYXNlIk4iOnJldHVybiB0JiZ0KHRoaXMudmFsdWUpO2Nhc2UiRSI6cmV0dXJuIGUmJmUodGhpcy5lcnJvcik7Y2FzZSJDIjpyZXR1cm4gbiYmbigpfX0sdC5wcm90b3R5cGUuYWNjZXB0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dD90aGlzLm9ic2VydmUodCk6dGhpcy5kbyh0LGUsbil9LHQucHJvdG90eXBlLnRvT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmtpbmQpe2Nhc2UiTiI6cmV0dXJuIE9iamVjdChpLmEpKHRoaXMudmFsdWUpO2Nhc2UiRSI6cmV0dXJuIE9iamVjdChvLmEpKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIE9iamVjdChyLmIpKCl9dGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kIHZhbHVlIil9LHQuY3JlYXRlTmV4dD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZT9uZXcgdCgiTiIsZSk6dC51bmRlZmluZWRWYWx1ZU5vdGlmaWNhdGlvbn0sdC5jcmVhdGVFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoIkUiLHZvaWQgMCxlKX0sdC5jcmVhdGVDb21wbGV0ZT1mdW5jdGlvbigpe3JldHVybiB0LmNvbXBsZXRlTm90aWZpY2F0aW9ufSx0LmNvbXBsZXRlTm90aWZpY2F0aW9uPW5ldyB0KCJDIiksdC51bmRlZmluZWRWYWx1ZU5vdGlmaWNhdGlvbj1uZXcgdCgiTiIsdm9pZCAwKSx0fSgpfSwiNjdZLyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkZGT28iKTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IGlzIG5vdCBhIGZ1bmN0aW9uLiBBcmUgeW91IGxvb2tpbmcgZm9yIGBtYXBUbygpYD8iKTtyZXR1cm4gbi5saWZ0KG5ldyBhKHQsZSkpfX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnByb2plY3Q9dCx0aGlzLnRoaXNBcmc9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgcyh0LHRoaXMucHJvamVjdCx0aGlzLnRoaXNBcmcpKX0sdH0oKSxzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnByb2plY3Q9bixpLmNvdW50PTAsaS50aGlzQXJnPXJ8fGksaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5wcm9qZWN0LmNhbGwodGhpcy50aGlzQXJnLHQsdGhpcy5jb3VudCsrKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZX0oaS5hKX0sIjZhaHciOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCJpTHhRIiksaT1uKCJES1RiIiksbz17Y2xvc2VkOiEwLG5leHQ6ZnVuY3Rpb24odCl7fSxlcnJvcjpmdW5jdGlvbih0KXtpZihyLmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyB0O09iamVjdChpLmEpKHQpfSxjb21wbGV0ZTpmdW5jdGlvbigpe319fSwiNmJsRiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJGRk9vIiksaT1uKCJML1Y5Iiksbz1uKCI2YWh3IiksYT1uKCJ4VGxhIikscz1uKCJ5M0J5IiksdT1uKCJpTHhRIik7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5faXNTY2FsYXI9ITEsdCYmKHRoaXMuX3N1YnNjcmliZT10KX1yZXR1cm4gdC5wcm90b3R5cGUubGlmdD1mdW5jdGlvbihlKXt2YXIgbj1uZXcgdDtyZXR1cm4gbi5zb3VyY2U9dGhpcyxuLm9wZXJhdG9yPWUsbn0sdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT10aGlzLm9wZXJhdG9yLHM9ZnVuY3Rpb24odCxlLG4pe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiByLmEpcmV0dXJuIHQ7aWYodFtpLmFdKXJldHVybiB0W2kuYV0oKX1yZXR1cm4gdHx8ZXx8bj9uZXcgci5hKHQsZSxuKTpuZXcgci5hKG8uYSl9KHQsZSxuKTtpZihhP2EuY2FsbChzLHRoaXMuc291cmNlKTpzLmFkZCh0aGlzLnNvdXJjZXx8dS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJiFzLnN5bmNFcnJvclRocm93YWJsZT90aGlzLl9zdWJzY3JpYmUocyk6dGhpcy5fdHJ5U3Vic2NyaWJlKHMpKSx1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmcy5zeW5jRXJyb3JUaHJvd2FibGUmJihzLnN5bmNFcnJvclRocm93YWJsZT0hMSxzLnN5bmNFcnJvclRocm93bikpdGhyb3cgcy5zeW5jRXJyb3JWYWx1ZTtyZXR1cm4gc30sdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZT1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KX1jYXRjaChlKXt1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmKHQuc3luY0Vycm9yVGhyb3duPSEwLHQuc3luY0Vycm9yVmFsdWU9ZSksdC5lcnJvcihlKX19LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBuZXcoZT1jKGUpKShmdW5jdGlvbihlLHIpe3ZhciBpO2k9bi5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dHJ5e3QoZSl9Y2F0Y2godCl7cih0KSxpJiZpLnVuc3Vic2NyaWJlKCl9fSxyLGUpfSl9LHQucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zb3VyY2U7cmV0dXJuIGUmJmUuc3Vic2NyaWJlKHQpfSx0LnByb3RvdHlwZVthLmFdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIDA9PT10Lmxlbmd0aD90aGlzOk9iamVjdChzLmIpKHQpKHRoaXMpfSx0LnByb3RvdHlwZS50b1Byb21pc2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3KHQ9Yyh0KSkoZnVuY3Rpb24odCxuKXt2YXIgcjtlLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gcj10fSxmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0sZnVuY3Rpb24oKXtyZXR1cm4gdChyKX0pfSl9LHQuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdH0oKTtmdW5jdGlvbiBjKHQpe2lmKHR8fCh0PXUuYS5Qcm9taXNlfHxQcm9taXNlKSwhdCl0aHJvdyBuZXcgRXJyb3IoIm5vIFByb21pc2UgaW1wbCBmb3VuZCIpO3JldHVybiB0fX0sIjhnOEEiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJtclNHIiksaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIG49dC5jYWxsKHRoaXMsIm9iamVjdCB1bnN1YnNjcmliZWQiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKG4sZS5wcm90b3R5cGUpLG59cmV0dXJuIHIuYihlLHQpLGV9KEVycm9yKX0sIjhtTXIiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkNjbkciKSxvPW4oIldmNHAiKSxhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLl9wbGF0Zm9ybT1uLGkuX2RvY3VtZW50PXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5uZ0FmdGVyVmlld0luaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO09iamVjdChpLlcpKCkmJnRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKSx0aGlzLl90b29sYmFyUm93cy5jaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCl9KSl9LGUucHJvdG90eXBlLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl90b29sYmFyUm93cy5sZW5ndGgmJltdLnNsaWNlLmNhbGwodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkTm9kZXMpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKHQuY2xhc3NMaXN0JiZ0LmNsYXNzTGlzdC5jb250YWlucygibWF0LXRvb2xiYXItcm93IikpfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVUeXBlIT09KHQuX2RvY3VtZW50P3QuX2RvY3VtZW50LkNPTU1FTlRfTk9ERTo4KX0pLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dENvbnRlbnQudHJpbSgpfSkmJmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIk1hdFRvb2xiYXI6IEF0dGVtcHRpbmcgdG8gY29tYmluZSBkaWZmZXJlbnQgdG9vbGJhciBtb2Rlcy4gRWl0aGVyIHNwZWNpZnkgbXVsdGlwbGUgYDxtYXQtdG9vbGJhci1yb3c+YCBlbGVtZW50cyBleHBsaWNpdGx5IG9yIGp1c3QgcGxhY2UgY29udGVudCBpbnNpZGUgb2YgYSBgPG1hdC10b29sYmFyPmAgZm9yIGEgc2luZ2xlIHJvdy4iKX0oKX0sZX0oT2JqZWN0KG8udSkoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpLHM9ZnVuY3Rpb24oKXt9fSwiOVoxRiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIk1HQlMiKSxvPW4oInpvdG0iKTtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1uZXcgcyh0KSxyPWUubGlmdChuKTtyZXR1cm4gbi5jYXVnaHQ9cn19dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc2VsZWN0b3I9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdSh0LHRoaXMuc2VsZWN0b3IsdGhpcy5jYXVnaHQpKX0sdH0oKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnNlbGVjdG9yPW4saS5jYXVnaHQ9cixpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihlKXtpZighdGhpcy5pc1N0b3BwZWQpe3ZhciBuPXZvaWQgMDt0cnl7bj10aGlzLnNlbGVjdG9yKGUsdGhpcy5jYXVnaHQpfWNhdGNoKGUpe3JldHVybiB2b2lkIHQucHJvdG90eXBlLmVycm9yLmNhbGwodGhpcyxlKX10aGlzLl91bnN1YnNjcmliZUFuZFJlY3ljbGUoKSx0aGlzLmFkZChPYmplY3Qoby5hKSh0aGlzLG4pKX19LGV9KGkuYSl9LEF5dFI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPXtwcm9kdWN0aW9uOiEwfX0sQ1M5UTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIm1yU0ciKSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4pe3ZvaWQgMD09PW4mJihuPXQubm93KSx0aGlzLlNjaGVkdWxlckFjdGlvbj1lLHRoaXMubm93PW59cmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksbmV3IHRoaXMuU2NoZWR1bGVyQWN0aW9uKHRoaXMsdCkuc2NoZWR1bGUobixlKX0sdC5ub3c9RGF0ZS5ub3c/RGF0ZS5ub3c6ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LHR9KCk7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4scil7dm9pZCAwPT09ciYmKHI9aS5ub3cpO3ZhciBvPXQuY2FsbCh0aGlzLG4sZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWxlZ2F0ZSYmZS5kZWxlZ2F0ZSE9PW8/ZS5kZWxlZ2F0ZS5ub3coKTpyKCl9KXx8dGhpcztyZXR1cm4gby5hY3Rpb25zPVtdLG8uYWN0aXZlPSExLG8uc2NoZWR1bGVkPXZvaWQgMCxvfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihuLHIsaSl7cmV0dXJuIHZvaWQgMD09PXImJihyPTApLGUuZGVsZWdhdGUmJmUuZGVsZWdhdGUhPT10aGlzP2UuZGVsZWdhdGUuc2NoZWR1bGUobixyLGkpOnQucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcyxuLHIsaSl9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aW9ucztpZih0aGlzLmFjdGl2ZSllLnB1c2godCk7ZWxzZXt2YXIgbjt0aGlzLmFjdGl2ZT0hMDtkb3tpZihuPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKHQ9ZS5zaGlmdCgpKTtpZih0aGlzLmFjdGl2ZT0hMSxuKXtmb3IoO3Q9ZS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgbn19fSxlfShpKX0sQ2NuRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJIYSIsZnVuY3Rpb24oKXtyZXR1cm4gS2V9KSxuLmQoZSwiSWEiLGZ1bmN0aW9uKCl7cmV0dXJuIFplfSksbi5kKGUsIkphIixmdW5jdGlvbigpe3JldHVybiBYZX0pLG4uZChlLCJHYSIsZnVuY3Rpb24oKXtyZXR1cm4gZHR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gYWV9KSxuLmQoZSwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gSnR9KSxuLmQoZSwiVyIsZnVuY3Rpb24oKXtyZXR1cm4gdGV9KSxuLmQoZSwiUSIsZnVuY3Rpb24oKXtyZXR1cm4gbmV9KSxuLmQoZSwidyIsZnVuY3Rpb24oKXtyZXR1cm4gZWV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gaHR9KSxuLmQoZSwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gbXR9KSxuLmQoZSwieiIsZnVuY3Rpb24oKXtyZXR1cm4geXR9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gY3R9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZnR9KSxuLmQoZSwiVSIsZnVuY3Rpb24oKXtyZXR1cm4gU2V9KSxuLmQoZSwiTCIsZnVuY3Rpb24oKXtyZXR1cm4gcXR9KSxuLmQoZSwiWSIsZnVuY3Rpb24oKXtyZXR1cm4gR3R9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gUWV9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gJGV9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gTHR9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gYXR9KSxuLmQoZSwiRSIsZnVuY3Rpb24oKXtyZXR1cm4gU259KSxuLmQoZSwiRiIsZnVuY3Rpb24oKXtyZXR1cm4gQ259KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJPIixmdW5jdGlvbigpe3JldHVybiBYfSksbi5kKGUsIk0iLGZ1bmN0aW9uKCl7cmV0dXJuICR9KSxuLmQoZSwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJUIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsIlYiLGZ1bmN0aW9uKCl7cmV0dXJuIFp9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwieSIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJIIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsIngiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ0fSksbi5kKGUsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIHVlfSksbi5kKGUsIkQiLGZ1bmN0aW9uKCl7cmV0dXJuIGxlfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIF90fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIFR0fSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIGNlfSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIFB0fSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIGp0fSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZlfSksbi5kKGUsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIGhlfSksbi5kKGUsIkkiLGZ1bmN0aW9uKCl7cmV0dXJuIG1lfSksbi5kKGUsIkoiLGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSksbi5kKGUsIksiLGZ1bmN0aW9uKCl7cmV0dXJuIGdlfSksbi5kKGUsIk4iLGZ1bmN0aW9uKCl7cmV0dXJuIHZlfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGJlfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIEJlfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIEhlfSksbi5kKGUsIkciLGZ1bmN0aW9uKCl7cmV0dXJuIEllfSksbi5kKGUsIlAiLGZ1bmN0aW9uKCl7cmV0dXJuIFRlfSksbi5kKGUsIlgiLGZ1bmN0aW9uKCl7cmV0dXJuIEdlfSksbi5kKGUsIlJhIixmdW5jdGlvbigpe3JldHVybiBBZX0pLG4uZChlLCJCYSIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwiWiIsZnVuY3Rpb24oKXtyZXR1cm4gc3R9KSxuLmQoZSwiQWEiLGZ1bmN0aW9uKCl7cmV0dXJuIEl0fSksbi5kKGUsIkNhIixmdW5jdGlvbigpe3JldHVybiBibn0pLG4uZChlLCJEYSIsZnVuY3Rpb24oKXtyZXR1cm4gT259KSxuLmQoZSwiRWEiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ufSksbi5kKGUsIlBhIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsIlVhIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImZiIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsIlNhIixmdW5jdGlvbigpe3JldHVybiBsdH0pLG4uZChlLCJUYSIsZnVuY3Rpb24oKXtyZXR1cm4gdXR9KSxuLmQoZSwiRmEiLGZ1bmN0aW9uKCl7cmV0dXJuIHZyfSksbi5kKGUsIkthIixmdW5jdGlvbigpe3JldHVybiBGcn0pLG4uZChlLCJMYSIsZnVuY3Rpb24oKXtyZXR1cm4gR299KSxuLmQoZSwiTWEiLGZ1bmN0aW9uKCl7cmV0dXJuIEhufSksbi5kKGUsIk5hIixmdW5jdGlvbigpe3JldHVybiB1aX0pLG4uZChlLCJPYSIsZnVuY3Rpb24oKXtyZXR1cm4gYnJ9KSxuLmQoZSwiUWEiLGZ1bmN0aW9uKCl7cmV0dXJuIHlyfSksbi5kKGUsIlZhIixmdW5jdGlvbigpe3JldHVybiBJcn0pLG4uZChlLCJXYSIsZnVuY3Rpb24oKXtyZXR1cm4gVHJ9KSxuLmQoZSwiWGEiLGZ1bmN0aW9uKCl7cmV0dXJuIEFpfSksbi5kKGUsIllhIixmdW5jdGlvbigpe3JldHVybiBLcn0pLG4uZChlLCJhYiIsZnVuY3Rpb24oKXtyZXR1cm4gbGl9KSxuLmQoZSwiZGIiLGZ1bmN0aW9uKCl7cmV0dXJuIGNpfSksbi5kKGUsIlphIixmdW5jdGlvbigpe3JldHVybiBNaX0pLG4uZChlLCJiYiIsZnVuY3Rpb24oKXtyZXR1cm4gTml9KSxuLmQoZSwiY2IiLGZ1bmN0aW9uKCl7cmV0dXJuIFBpfSksbi5kKGUsImViIixmdW5jdGlvbigpe3JldHVybiBTaX0pLG4uZChlLCJnYiIsZnVuY3Rpb24oKXtyZXR1cm4gRGl9KSxuLmQoZSwiaGIiLGZ1bmN0aW9uKCl7cmV0dXJuIFVufSksbi5kKGUsImliIixmdW5jdGlvbigpe3JldHVybiBWaX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oInB1Z1QiKSxvPW4oIks5SWEiKSxhPW4oIjZibEYiKSxzPW4oInAwaWIiKSx1PW4oIlMxblgiKTtmdW5jdGlvbiBsKHQpe3JldHVybntwcm92aWRlZEluOnQucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5OnQuZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2Rlc2M9dCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5uZ0luamVjdGFibGVEZWY9dm9pZCAwIT09ZT9sKHtwcm92aWRlZEluOmUucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6ZS5mYWN0b3J5fSk6dm9pZCAwfXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJJbmplY3Rpb25Ub2tlbiAiK3RoaXMuX2Rlc2N9LHR9KCksZj0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIGgodCxlLG4pe3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtpZih0KXt2YXIgaT10LmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShlKSk7Zm9yKHZhciBvIGluIGkpdGhpc1tvXT1pW29dfX19KGUpO2Z1bmN0aW9uIG8oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07aWYodGhpcyBpbnN0YW5jZW9mIG8pcmV0dXJuIGkuYXBwbHkodGhpcyx0KSx0aGlzO3ZhciBuLGE9bmV3KChuPW8pLmJpbmQuYXBwbHkobixPYmplY3Qoci5kKShbdm9pZCAwXSx0KSkpO3JldHVybiBzLmFubm90YXRpb249YSxzO2Z1bmN0aW9uIHModCxlLG4pe2Zvcih2YXIgcj10Lmhhc093blByb3BlcnR5KGYpP3RbZl06T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZix7dmFsdWU6W119KVtmXTtyLmxlbmd0aDw9bjspci5wdXNoKG51bGwpO3JldHVybihyW25dPXJbbl18fFtdKS5wdXNoKGEpLHR9fXJldHVybiBuJiYoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLG8ucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPXQsby5hbm5vdGF0aW9uQ2xzPW8sb312YXIgZD1uZXcgYygiQW5hbHl6ZUZvckVudHJ5Q29tcG9uZW50cyIpO0Z1bmN0aW9uO3ZhciBwPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3csbT0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZix5PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwsZz1wfHx5fHxtLHY9UHJvbWlzZS5yZXNvbHZlKDApLGI9bnVsbDtmdW5jdGlvbiBfKCl7aWYoIWIpe3ZhciB0PWcuU3ltYm9sO2lmKHQmJnQuaXRlcmF0b3IpYj10Lml0ZXJhdG9yO2Vsc2UgZm9yKHZhciBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcC5wcm90b3R5cGUpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIHI9ZVtuXTsiZW50cmllcyIhPT1yJiYic2l6ZSIhPT1yJiZNYXAucHJvdG90eXBlW3JdPT09TWFwLnByb3RvdHlwZS5lbnRyaWVzJiYoYj1yKX19cmV0dXJuIGJ9ZnVuY3Rpb24gdyh0KXsidW5kZWZpbmVkIj09dHlwZW9mIFpvbmU/di50aGVuKGZ1bmN0aW9uKCl7dCYmdC5hcHBseShudWxsLG51bGwpfSk6Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJzY2hlZHVsZU1pY3JvdGFzayIsdCl9ZnVuY3Rpb24geCh0LGUpe3JldHVybiB0PT09ZXx8Im51bWJlciI9PXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9mIGUmJmlzTmFOKHQpJiZpc05hTihlKX1mdW5jdGlvbiBPKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdDtpZih0IGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuIlsiK3QubWFwKE8pLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PXQpcmV0dXJuIiIrdDtpZih0Lm92ZXJyaWRkZW5OYW1lKXJldHVybiIiK3Qub3ZlcnJpZGRlbk5hbWU7aWYodC5uYW1lKXJldHVybiIiK3QubmFtZTt2YXIgZT10LnRvU3RyaW5nKCk7aWYobnVsbD09ZSlyZXR1cm4iIitlO3ZhciBuPWUuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PW4/ZTplLnN1YnN0cmluZygwLG4pfWZ1bmN0aW9uIEModCl7cmV0dXJuIHQuX19mb3J3YXJkX3JlZl9fPUMsdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBPKHRoaXMoKSl9LHR9ZnVuY3Rpb24gUyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5oYXNPd25Qcm9wZXJ0eSgiX19mb3J3YXJkX3JlZl9fIikmJnQuX19mb3J3YXJkX3JlZl9fPT09Qz90KCk6dH12YXIgRT1oKCJJbmplY3QiLGZ1bmN0aW9uKHQpe3JldHVybnt0b2tlbjp0fX0pLGs9aCgiT3B0aW9uYWwiKSxUPWgoIlNlbGYiKSxJPWgoIlNraXBTZWxmIiksQT0iX19zb3VyY2UiLGo9bmV3IE9iamVjdCxQPW5ldyBjKCJJTkpFQ1RPUiIpLE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT1qKSxlPT09ail0aHJvdyBuZXcgRXJyb3IoIk51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgIitPKHQpKyIhIik7cmV0dXJuIGV9LHR9KCksTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/bmV3IFcodCxlKTpuZXcgVyh0LnByb3ZpZGVycyx0LnBhcmVudCx0Lm5hbWV8fG51bGwpfSx0LlRIUk9XX0lGX05PVF9GT1VORD1qLHQuTlVMTD1uZXcgTSx0Lm5nSW5qZWN0YWJsZURlZj1sKHtwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gWihQKX19KSx0fSgpLFI9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LEQ9W10sTD1SLEY9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKX0sVj17fSxVPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKHRbZV09PT1WKXJldHVybiBlO3Rocm93IEVycm9yKCIhcHJvcCIpfSh7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6Vn0pLHo9Ti5OVUxMLEI9L1xuL2dtLEg9Ilx1MDI3NSIsVz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PWUmJihlPXopLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMucGFyZW50PWUsdGhpcy5zb3VyY2U9bjt2YXIgcj10aGlzLl9yZWNvcmRzPW5ldyBNYXA7ci5zZXQoTix7dG9rZW46TixmbjpSLGRlcHM6RCx2YWx1ZTp0aGlzLHVzZU5ldzohMX0pLHIuc2V0KFAse3Rva2VuOlAsZm46UixkZXBzOkQsdmFsdWU6dGhpcyx1c2VOZXc6ITF9KSxmdW5jdGlvbiB0KGUsbil7aWYobilpZigobj1TKG4pKWluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspdChlLG5bcl0pO2Vsc2V7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pdGhyb3cgRygiRnVuY3Rpb24vQ2xhc3Mgbm90IHN1cHBvcnRlZCIsbik7aWYoIW58fCJvYmplY3QiIT10eXBlb2Ygbnx8IW4ucHJvdmlkZSl0aHJvdyBHKCJVbmV4cGVjdGVkIHByb3ZpZGVyIixuKTt2YXIgaT1TKG4ucHJvdmlkZSksbz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT1ELG49dC5kZXBzO2lmKG4mJm4ubGVuZ3RoKXtlPVtdO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT02O2lmKCh1PVMobltyXSkpaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIG89MCxhPXU7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107cyBpbnN0YW5jZW9mIGt8fHM9PWs/aXw9MTpzIGluc3RhbmNlb2YgSXx8cz09ST9pJj0tMzpzIGluc3RhbmNlb2YgVHx8cz09VD9pJj0tNTp1PXMgaW5zdGFuY2VvZiBFP3MudG9rZW46UyhzKX1lLnB1c2goe3Rva2VuOnUsb3B0aW9uczppfSl9fWVsc2UgaWYodC51c2VFeGlzdGluZyl7dmFyIHU7ZT1be3Rva2VuOnU9Uyh0LnVzZUV4aXN0aW5nKSxvcHRpb25zOjZ9XX1lbHNlIGlmKCEobnx8VSBpbiB0KSl0aHJvdyBHKCInZGVwcycgcmVxdWlyZWQiLHQpO3JldHVybiBlfSh0KSxuPVIscj1ELGk9ITEsbz1TKHQucHJvdmlkZSk7aWYoVSBpbiB0KXI9dC51c2VWYWx1ZTtlbHNlIGlmKHQudXNlRmFjdG9yeSluPXQudXNlRmFjdG9yeTtlbHNlIGlmKHQudXNlRXhpc3RpbmcpO2Vsc2UgaWYodC51c2VDbGFzcylpPSEwLG49Uyh0LnVzZUNsYXNzKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBvKXRocm93IEcoIlN0YXRpY1Byb3ZpZGVyIGRvZXMgbm90IGhhdmUgW3VzZVZhbHVlfHVzZUZhY3Rvcnl8dXNlRXhpc3Rpbmd8dXNlQ2xhc3NdIG9yIFtwcm92aWRlXSBpcyBub3QgbmV3YWJsZSIsdCk7aT0hMCxuPW99cmV0dXJue2RlcHM6ZSxmbjpuLHVzZU5ldzppLHZhbHVlOnJ9fShuKTtpZighMD09PW4ubXVsdGkpe3ZhciBhPWUuZ2V0KGkpO2lmKGEpe2lmKGEuZm4hPT1GKXRocm93IHEoaSl9ZWxzZSBlLnNldChpLGE9e3Rva2VuOm4ucHJvdmlkZSxkZXBzOltdLHVzZU5ldzohMSxmbjpGLHZhbHVlOkR9KTthLmRlcHMucHVzaCh7dG9rZW46aT1uLG9wdGlvbnM6Nn0pfXZhciBzPWUuZ2V0KGkpO2lmKHMmJnMuZm49PUYpdGhyb3cgcShpKTtlLnNldChpLG8pfX0ocix0KX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0wKTt2YXIgaT10aGlzLl9yZWNvcmRzLmdldCh0KTt0cnl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuLGksbyxhLHMpe3RyeXtyZXR1cm4gZnVuY3Rpb24oZSxuLGksbyxhLHMpe3ZhciB1LGw7aWYoIW58fDQmcykyJnN8fCh1PW8uZ2V0KGUsYSwwKSk7ZWxzZXtpZigodT1uLnZhbHVlKT09TCl0aHJvdyBFcnJvcihIKyJDaXJjdWxhciBkZXBlbmRlbmN5Iik7aWYodT09PUQpe24udmFsdWU9TDt2YXIgYz1uLnVzZU5ldyxmPW4uZm4saD1uLmRlcHMsZD1EO2lmKGgubGVuZ3RoKXtkPVtdO2Zvcih2YXIgcD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgbT1oW3BdLHk9bS5vcHRpb25zLGc9MiZ5P2kuZ2V0KG0udG9rZW4pOnZvaWQgMDtkLnB1c2godChtLnRva2VuLGcsaSxnfHw0Jnk/bzp6LDEmeT9udWxsOk4uVEhST1dfSUZfTk9UX0ZPVU5ELDApKX19bi52YWx1ZT11PWM/bmV3KChsPWYpLmJpbmQuYXBwbHkobCxPYmplY3Qoci5kKShbdm9pZCAwXSxkKSkpOmYuYXBwbHkodm9pZCAwLGQpfX1yZXR1cm4gdX0oZSxuLGksbyxhLHMpfWNhdGNoKHQpe3Rocm93IHQgaW5zdGFuY2VvZiBFcnJvcnx8KHQ9bmV3IEVycm9yKHQpKSwodC5uZ1RlbXBUb2tlblBhdGg9dC5uZ1RlbXBUb2tlblBhdGh8fFtdKS51bnNoaWZ0KGUpLG4mJm4udmFsdWU9PUwmJihuLnZhbHVlPUQpLHR9fSh0LGksdGhpcy5fcmVjb3Jkcyx0aGlzLnBhcmVudCxlLG4pfWNhdGNoKGUpe3ZhciBvPWUubmdUZW1wVG9rZW5QYXRoO3Rocm93IHRbQV0mJm8udW5zaGlmdCh0W0FdKSxlLm1lc3NhZ2U9WSgiXG4iK2UubWVzc2FnZSxvLHRoaXMuc291cmNlKSxlLm5nVG9rZW5QYXRoPW8sZS5uZ1RlbXBUb2tlblBhdGg9bnVsbCxlfX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHVzaChPKG4pKX0pLCJTdGF0aWNJbmplY3RvclsiK3Quam9pbigiLCAiKSsiXSJ9LHR9KCk7ZnVuY3Rpb24gcSh0KXtyZXR1cm4gRygiQ2Fubm90IG1peCBtdWx0aSBwcm92aWRlcnMgYW5kIHJlZ3VsYXIgcHJvdmlkZXJzIix0KX1mdW5jdGlvbiBZKHQsZSxuKXt2b2lkIDA9PT1uJiYobj1udWxsKSx0PXQmJiJcbiI9PT10LmNoYXJBdCgwKSYmdC5jaGFyQXQoMSk9PUg/dC5zdWJzdHIoMik6dDt2YXIgcj1PKGUpO2lmKGUgaW5zdGFuY2VvZiBBcnJheSlyPWUubWFwKE8pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZSl7dmFyIGk9W107Zm9yKHZhciBvIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIGE9ZVtvXTtpLnB1c2gobysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpPKGEpKSl9cj0ieyIraS5qb2luKCIsICIpKyJ9In1yZXR1cm4iU3RhdGljSW5qZWN0b3JFcnJvciIrKG4/IigiK24rIikiOiIiKSsiWyIrcisiXTogIit0LnJlcGxhY2UoQiwiXG4gICIpfWZ1bmN0aW9uIEcodCxlKXtyZXR1cm4gbmV3IEVycm9yKFkodCxlKSl9dmFyIFE9dm9pZCAwO2Z1bmN0aW9uIEsodCl7dmFyIGU9UTtyZXR1cm4gUT10LGV9ZnVuY3Rpb24gWih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PVEpdGhyb3cgbmV3IEVycm9yKCJpbmplY3QoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIGluamVjdGlvbiBjb250ZXh0Iik7aWYobnVsbD09PVEpe3ZhciBuPXQubmdJbmplY3RhYmxlRGVmO2lmKG4mJiJyb290Ij09bi5wcm92aWRlZEluKXJldHVybiB2b2lkIDA9PT1uLnZhbHVlP24udmFsdWU9bi5mYWN0b3J5KCk6bi52YWx1ZTt0aHJvdyBuZXcgRXJyb3IoIkluamVjdG9yOiBOT1RfRk9VTkQgWyIrTyh0KSsiXSIpfXJldHVybiBRLmdldCh0LDgmZT9udWxsOnZvaWQgMCxlKX1TdHJpbmc7dmFyIFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5FbXVsYXRlZD0wXT0iRW11bGF0ZWQiLHRbdC5OYXRpdmU9MV09Ik5hdGl2ZSIsdFt0Lk5vbmU9Ml09Ik5vbmUiLHRbdC5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsdH0oe30pLCQ9ZnVuY3Rpb24odCl7dGhpcy5mdWxsPXQsdGhpcy5tYWpvcj10LnNwbGl0KCIuIilbMF0sdGhpcy5taW5vcj10LnNwbGl0KCIuIilbMV0sdGhpcy5wYXRjaD10LnNwbGl0KCIuIikuc2xpY2UoMikuam9pbigiLiIpfSxKPW5ldyAkKCI2LjAuOSIpLHR0PSJuZ0RlYnVnQ29udGV4dCIsZXQ9Im5nT3JpZ2luYWxFcnJvciIsbnQ9Im5nRXJyb3JMb2dnZXIiO2Z1bmN0aW9uIHJ0KHQpe3JldHVybiB0W3R0XX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gdFtldF19ZnVuY3Rpb24gb3QodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07dC5lcnJvci5hcHBseSh0LE9iamVjdChyLmQpKGUpKX12YXIgYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY29uc29sZT1jb25zb2xlfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9maW5kT3JpZ2luYWxFcnJvcih0KSxuPXRoaXMuX2ZpbmRDb250ZXh0KHQpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIHRbbnRdfHxvdH0odCk7cih0aGlzLl9jb25zb2xlLCJFUlJPUiIsdCksZSYmcih0aGlzLl9jb25zb2xlLCJPUklHSU5BTCBFUlJPUiIsZSksbiYmcih0aGlzLl9jb25zb2xlLCJFUlJPUiBDT05URVhUIixuKX0sdC5wcm90b3R5cGUuX2ZpbmRDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0P3J0KHQpP3J0KHQpOnRoaXMuX2ZpbmRDb250ZXh0KGl0KHQpKTpudWxsfSx0LnByb3RvdHlwZS5fZmluZE9yaWdpbmFsRXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWl0KHQpO2UmJml0KGUpOyllPWl0KGUpO3JldHVybiBlfSx0fSgpLHN0PW5ldyBjKCJUaGUgcHJlc2VuY2Ugb2YgdGhpcyB0b2tlbiBtYXJrcyBhbiBpbmplY3RvciBhcyBiZWluZyB0aGUgcm9vdCBpbmplY3Rvci4iKTtmdW5jdGlvbiB1dCh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59ZnVuY3Rpb24gbHQodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWJzY3JpYmV9dmFyIGN0PW5ldyBjKCJBcHBsaWNhdGlvbiBJbml0aWFsaXplciIpLGZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuYXBwSW5pdHM9dCx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMuZG9uZT0hMSx0aGlzLmRvbmVQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7ZS5yZXNvbHZlPXQsZS5yZWplY3Q9bn0pfXJldHVybiB0LnByb3RvdHlwZS5ydW5Jbml0aWFsaXplcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLmluaXRpYWxpemVkKXt2YXIgZT1bXSxuPWZ1bmN0aW9uKCl7dC5kb25lPSEwLHQucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcih2YXIgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXt2YXIgaT10aGlzLmFwcEluaXRzW3JdKCk7dXQoaSkmJmUucHVzaChpKX1Qcm9taXNlLmFsbChlKS50aGVuKGZ1bmN0aW9uKCl7bigpfSkuY2F0Y2goZnVuY3Rpb24oZSl7dC5yZWplY3QoZSl9KSwwPT09ZS5sZW5ndGgmJm4oKSx0aGlzLmluaXRpYWxpemVkPSEwfX0sdH0oKSxodD1uZXcgYygiQXBwSWQiKTtmdW5jdGlvbiBkdCgpe3JldHVybiIiK3B0KCkrcHQoKStwdCgpfWZ1bmN0aW9uIHB0KCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoOTcrTWF0aC5mbG9vcigyNSpNYXRoLnJhbmRvbSgpKSl9dmFyIG10PW5ldyBjKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLHl0PW5ldyBjKCJQbGF0Zm9ybSBJRCIpLGd0PW5ldyBjKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLHZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubG9nPWZ1bmN0aW9uKHQpe2NvbnNvbGUubG9nKHQpfSx0LnByb3RvdHlwZS53YXJuPWZ1bmN0aW9uKHQpe2NvbnNvbGUud2Fybih0KX0sdH0oKTtmdW5jdGlvbiBidCgpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSBjb21waWxlciBpcyBub3QgbG9hZGVkIil9dmFyIF90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZVN5bmM9ZnVuY3Rpb24odCl7dGhyb3cgYnQoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFzeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYz1mdW5jdGlvbih0KXt0aHJvdyBidCgpfSx0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNsZWFyQ2FjaGVGb3I9ZnVuY3Rpb24odCl7fSx0fSgpLHd0PWZ1bmN0aW9uKCl7fSx4dD1mdW5jdGlvbigpe307ZnVuY3Rpb24gT3QodCl7dmFyIGU9RXJyb3IoIk5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAiK08odCkrIi4gRGlkIHlvdSBhZGQgaXQgdG8gQE5nTW9kdWxlLmVudHJ5Q29tcG9uZW50cz8iKTtyZXR1cm4gZVtFdF09dCxlfXZhciBDdCxTdCxFdD0ibmdDb21wb25lbnQiLGt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dGhyb3cgT3QodCl9LHR9KCksVHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lk5VTEw9bmV3IGt0LHR9KCksSXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uZ01vZHVsZT1uLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO3RoaXMuX2ZhY3Rvcmllcy5zZXQoaS5jb21wb25lbnRUeXBlLGkpfX1yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTtpZighZSYmdGhpcy5fcGFyZW50JiYoZT10aGlzLl9wYXJlbnQucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCkpLCFlKXRocm93IE90KHQpO3JldHVybiBuZXcgQXQoZSx0aGlzLl9uZ01vZHVsZSl9LHR9KCksQXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5mYWN0b3J5PWUsci5uZ01vZHVsZT1uLHIuc2VsZWN0b3I9ZS5zZWxlY3RvcixyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlLHIubmdDb250ZW50U2VsZWN0b3JzPWUubmdDb250ZW50U2VsZWN0b3JzLHIuaW5wdXRzPWUuaW5wdXRzLHIub3V0cHV0cz1lLm91dHB1dHMscn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGUodCxlLG4scnx8dGhpcy5uZ01vZHVsZSl9LGV9KHh0KSxqdD1mdW5jdGlvbigpe30sUHQ9ZnVuY3Rpb24oKXt9LE10PWZ1bmN0aW9uKCl7dmFyIHQ9Zy53dGY7cmV0dXJuISghdHx8IShDdD10LnRyYWNlKXx8KFN0PUN0LmV2ZW50cywwKSl9KCk7ZnVuY3Rpb24gTnQodCxlKXtyZXR1cm4gbnVsbH12YXIgUnQ9TXQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCksU3QuY3JlYXRlU2NvcGUodCxlKX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gTnR9LER0PU10P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIEN0LmxlYXZlU2NvcGUodCxlKSxlfTpmdW5jdGlvbih0LGUpe3JldHVybiBlfSxMdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSExKTt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX19pc0FzeW5jPWUsbn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSxuLHIpe3ZhciBvLGE9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07ZSYmIm9iamVjdCI9PXR5cGVvZiBlPyhvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5uZXh0KHQpfSl9OmZ1bmN0aW9uKHQpe2UubmV4dCh0KX0sZS5lcnJvciYmKGE9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLmVycm9yKHQpfSl9OmZ1bmN0aW9uKHQpe2UuZXJyb3IodCl9KSxlLmNvbXBsZXRlJiYocz10aGlzLl9faXNBc3luYz9mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5jb21wbGV0ZSgpfSl9OmZ1bmN0aW9uKCl7ZS5jb21wbGV0ZSgpfSkpOihvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZSh0KX0pfTpmdW5jdGlvbih0KXtlKHQpfSxuJiYoYT10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4odCl9KX06ZnVuY3Rpb24odCl7bih0KX0pLHImJihzPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiByKCl9KX06ZnVuY3Rpb24oKXtyKCl9KSk7dmFyIHU9dC5wcm90b3R5cGUuc3Vic2NyaWJlLmNhbGwodGhpcyxvLGEscyk7cmV0dXJuIGUgaW5zdGFuY2VvZiBpLmEmJmUuYWRkKHUpLHV9LGV9KG8uYSksRnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlLG49dC5lbmFibGVMb25nU3RhY2tUcmFjZSxyPXZvaWQgMCE9PW4mJm47aWYodGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBMdCghMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBMdCghMSksdGhpcy5vblN0YWJsZT1uZXcgTHQoITEpLHRoaXMub25FcnJvcj1uZXcgTHQoITEpLCJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZSl0aHJvdyBuZXcgRXJyb3IoIkluIHRoaXMgY29uZmlndXJhdGlvbiBBbmd1bGFyIHJlcXVpcmVzIFpvbmUuanMiKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCksdGhpcy5fbmVzdGluZz0wLHRoaXMuX291dGVyPXRoaXMuX2lubmVyPVpvbmUuY3VycmVudCxab25lLnd0ZlpvbmVTcGVjJiYodGhpcy5faW5uZXI9dGhpcy5faW5uZXIuZm9yayhab25lLnd0ZlpvbmVTcGVjKSksWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHRoaXMuX2lubmVyPXRoaXMuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSxyJiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJih0aGlzLl9pbm5lcj10aGlzLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLChlPXRoaXMpLl9pbm5lcj1lLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24odCxuLHIsaSxvLGEpe3RyeXtyZXR1cm4gQnQoZSksdC5pbnZva2VUYXNrKHIsaSxvLGEpfWZpbmFsbHl7SHQoZSl9fSxvbkludm9rZTpmdW5jdGlvbih0LG4scixpLG8sYSxzKXt0cnl7cmV0dXJuIEJ0KGUpLHQuaW52b2tlKHIsaSxvLGEscyl9ZmluYWxseXtIdChlKX19LG9uSGFzVGFzazpmdW5jdGlvbih0LG4scixpKXt0Lmhhc1Rhc2socixpKSxuPT09ciYmKCJtaWNyb1Rhc2siPT1pLmNoYW5nZT8oZS5oYXNQZW5kaW5nTWljcm90YXNrcz1pLm1pY3JvVGFzayx6dChlKSk6Im1hY3JvVGFzayI9PWkuY2hhbmdlJiYoZS5oYXNQZW5kaW5nTWFjcm90YXNrcz1pLm1hY3JvVGFzaykpfSxvbkhhbmRsZUVycm9yOmZ1bmN0aW9uKHQsbixyLGkpe3JldHVybiB0LmhhbmRsZUVycm9yKHIsaSksZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBlLm9uRXJyb3IuZW1pdChpKX0pLCExfX0pfXJldHVybiB0LmlzSW5Bbmd1bGFyWm9uZT1mdW5jdGlvbigpe3JldHVybiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfSx0LmFzc2VydEluQW5ndWxhclpvbmU9ZnVuY3Rpb24oKXtpZighdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzIG5vdCEiKX0sdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lPWZ1bmN0aW9uKCl7aWYodC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIG5vdCBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyEiKX0sdC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxuKX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLl9pbm5lcixvPWkuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2ZW50OiAiK3IsdCxVdCxWdCxWdCk7dHJ5e3JldHVybiBpLnJ1blRhc2sobyxlLG4pfWZpbmFsbHl7aS5jYW5jZWxUYXNrKG8pfX0sdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQodCxlLG4pfSx0LnByb3RvdHlwZS5ydW5PdXRzaWRlQW5ndWxhcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3V0ZXIucnVuKHQpfSx0fSgpO2Z1bmN0aW9uIFZ0KCl7fXZhciBVdD17fTtmdW5jdGlvbiB6dCh0KXtpZigwPT10Ll9uZXN0aW5nJiYhdC5oYXNQZW5kaW5nTWljcm90YXNrcyYmIXQuaXNTdGFibGUpdHJ5e3QuX25lc3RpbmcrKyx0Lm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKHQuX25lc3RpbmctLSwhdC5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7dC5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0Lm9uU3RhYmxlLmVtaXQobnVsbCl9KX1maW5hbGx5e3QuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBCdCh0KXt0Ll9uZXN0aW5nKyssdC5pc1N0YWJsZSYmKHQuaXNTdGFibGU9ITEsdC5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIEh0KHQpe3QuX25lc3RpbmctLSx6dCh0KX12YXIgV3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBMdCx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEx0LHRoaXMub25TdGFibGU9bmV3IEx0LHRoaXMub25FcnJvcj1uZXcgTHR9cmV0dXJuIHQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1bk91dHNpZGVBbmd1bGFyPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdH0oKSxxdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wZW5kaW5nQ291bnQ9MCx0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fZGlkV29yaz0hMSx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksdC5ydW4oZnVuY3Rpb24oKXtlLnRhc2tUcmFja2luZ1pvbmU9Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9cmV0dXJuIHQucHJvdG90eXBlLl93YXRjaEFuZ3VsYXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe3QuX2RpZFdvcms9ITAsdC5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oKXtGdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksdyhmdW5jdGlvbigpe3QuX2lzWm9uZVN0YWJsZT0hMCx0Ll9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KX0pfSx0LnByb3RvdHlwZS5pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5fcGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuaXNTdGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfSx0LnByb3RvdHlwZS5fcnVuQ2FsbGJhY2tzSWZSZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5pc1N0YWJsZSgpKXcoZnVuY3Rpb24oKXtmb3IoOzAhPT10Ll9jYWxsYmFja3MubGVuZ3RoOyl7dmFyIGU9dC5fY2FsbGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChlLnRpbWVvdXRJZCksZS5kb25lQ2IodC5fZGlkV29yayl9dC5fZGlkV29yaz0hMX0pO2Vsc2V7dmFyIGU9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC51cGRhdGVDYnx8IXQudXBkYXRlQ2IoZSl8fChjbGVhclRpbWVvdXQodC50aW1lb3V0SWQpLCExKX0pLHRoaXMuX2RpZFdvcms9ITB9fSx0LnByb3RvdHlwZS5nZXRQZW5kaW5nVGFza3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQuc291cmNlLGlzUGVyaW9kaWM6dC5kYXRhLmlzUGVyaW9kaWMsZGVsYXk6dC5kYXRhLmRlbGF5LGNyZWF0aW9uTG9jYXRpb246dC5jcmVhdGlvbkxvY2F0aW9uLHhocjp0LmRhdGEudGFyZ2V0fX0pOltdfSx0LnByb3RvdHlwZS5hZGRDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPS0xO2UmJmU+MCYmKGk9c2V0VGltZW91dChmdW5jdGlvbigpe3IuX2NhbGxiYWNrcz1yLl9jYWxsYmFja3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbWVvdXRJZCE9PWl9KSx0KHIuX2RpZFdvcmssci5nZXRQZW5kaW5nVGFza3MoKSl9LGUpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOnQsdGltZW91dElkOmksdXBkYXRlQ2I6bn0pfSx0LnByb3RvdHlwZS53aGVuU3RhYmxlPWZ1bmN0aW9uKHQsZSxuKXtpZihuJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9kaXN0L3Rhc2stdHJhY2tpbmcuanMiIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKHQsZSxuKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9LHQucHJvdG90eXBlLmdldFBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5maW5kUHJvdmlkZXJzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bXX0sdH0oKSxZdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcCxLdC5hZGRUb1dpbmRvdyh0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUucmVnaXN0ZXJBcHBsaWNhdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQodCxlKX0sdC5wcm90b3R5cGUudW5yZWdpc3RlckFwcGxpY2F0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuX2FwcGxpY2F0aW9ucy5kZWxldGUodCl9LHQucHJvdG90eXBlLnVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX0sdC5wcm90b3R5cGUuZ2V0VGVzdGFiaWxpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQodCl8fG51bGx9LHQucHJvdG90eXBlLmdldEFsbFRlc3RhYmlsaXRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMudmFsdWVzKCkpfSx0LnByb3RvdHlwZS5nZXRBbGxSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX0sdC5wcm90b3R5cGUuZmluZFRlc3RhYmlsaXR5SW5UcmVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSEwKSxLdC5maW5kVGVzdGFiaWxpdHlJblRyZWUodGhpcyx0LGUpfSx0LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHR9KCk7ZnVuY3Rpb24gR3QodCl7S3Q9dH12YXIgUXQsS3Q9bmV3KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYWRkVG9XaW5kb3c9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5maW5kVGVzdGFiaWxpdHlJblRyZWU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsfSx0fSgpKSxadD0hMCxYdD0hMSwkdD1uZXcgYygiQWxsb3dNdWx0aXBsZVRva2VuIik7ZnVuY3Rpb24gSnQoKXtpZihYdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBlbmFibGUgcHJvZCBtb2RlIGFmdGVyIHBsYXRmb3JtIHNldHVwLiIpO1p0PSExfWZ1bmN0aW9uIHRlKCl7cmV0dXJuIFh0PSEwLFp0fXZhciBlZT1mdW5jdGlvbih0LGUpe3RoaXMubmFtZT10LHRoaXMudG9rZW49ZX07ZnVuY3Rpb24gbmUodCxlLG4pe3ZvaWQgMD09PW4mJihuPVtdKTt2YXIgcj0iUGxhdGZvcm06ICIrZSxpPW5ldyBjKHIpO3JldHVybiBmdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG89cmUoKTtpZighb3x8by5pbmplY3Rvci5nZXQoJHQsITEpKWlmKHQpdChuLmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6aSx1c2VWYWx1ZTohMH0pKTtlbHNle3ZhciBhPW4uY29uY2F0KGUpLmNvbmNhdCh7cHJvdmlkZTppLHVzZVZhbHVlOiEwfSk7IWZ1bmN0aW9uKHQpe2lmKFF0JiYhUXQuZGVzdHJveWVkJiYhUXQuaW5qZWN0b3IuZ2V0KCR0LCExKSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGNhbiBiZSBvbmx5IG9uZSBwbGF0Zm9ybS4gRGVzdHJveSB0aGUgcHJldmlvdXMgb25lIHRvIGNyZWF0ZSBhIG5ldyBvbmUuIik7UXQ9dC5nZXQoaWUpO3ZhciBlPXQuZ2V0KG10LG51bGwpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9KE4uY3JlYXRlKHtwcm92aWRlcnM6YSxuYW1lOnJ9KSl9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXJlKCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJObyBwbGF0Zm9ybSBleGlzdHMhIik7aWYoIWUuaW5qZWN0b3IuZ2V0KHQsbnVsbCkpdGhyb3cgbmV3IEVycm9yKCJBIHBsYXRmb3JtIHdpdGggYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjcmVhdGVkLiBQbGVhc2UgZGVzdHJveSBpdCBmaXJzdC4iKTtyZXR1cm4gZX0oaSl9fWZ1bmN0aW9uIHJlKCl7cmV0dXJuIFF0JiYhUXQuZGVzdHJveWVkP1F0Om51bGx9dmFyIGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9pbmplY3Rvcj10LHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLmJvb3RzdHJhcE1vZHVsZUZhY3Rvcnk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXMsaT0ibm9vcCI9PT0obj1lP2Uubmdab25lOnZvaWQgMCk/bmV3IFd0Oigiem9uZS5qcyI9PT1uP3ZvaWQgMDpuKXx8bmV3IEZ0KHtlbmFibGVMb25nU3RhY2tUcmFjZTp0ZSgpfSksbz1be3Byb3ZpZGU6RnQsdXNlVmFsdWU6aX1dO3JldHVybiBpLnJ1bihmdW5jdGlvbigpe3ZhciBlPU4uY3JlYXRlKHtwcm92aWRlcnM6byxwYXJlbnQ6ci5pbmplY3RvcixuYW1lOnQubW9kdWxlVHlwZS5uYW1lfSksbj10LmNyZWF0ZShlKSxhPW4uaW5qZWN0b3IuZ2V0KGF0LG51bGwpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTm8gRXJyb3JIYW5kbGVyLiBJcyBwbGF0Zm9ybSBtb2R1bGUgKEJyb3dzZXJNb2R1bGUpIGluY2x1ZGVkPyIpO3JldHVybiBuLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBzZShyLl9tb2R1bGVzLG4pfSksaS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBpLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe2EuaGFuZGxlRXJyb3IodCl9fSl9KSxmdW5jdGlvbih0LGUsaSl7dHJ5e3ZhciBvPSgoYT1uLmluamVjdG9yLmdldChmdCkpLnJ1bkluaXRpYWxpemVycygpLGEuZG9uZVByb21pc2UudGhlbihmdW5jdGlvbigpe3JldHVybiByLl9tb2R1bGVEb0Jvb3RzdHJhcChuKSxufSkpO3JldHVybiB1dChvKT9vLmNhdGNoKGZ1bmN0aW9uKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihuKX0pLG59KTpvfWNhdGNoKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihuKX0pLG59dmFyIGF9KGEsaSl9KX0sdC5wcm90b3R5cGUuYm9vdHN0cmFwTW9kdWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIHI9dGhpcy5pbmplY3Rvci5nZXQod3QpLGk9b2Uoe30sZSk7cmV0dXJuIHIuY3JlYXRlQ29tcGlsZXIoW2ldKS5jb21waWxlTW9kdWxlQXN5bmModCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gbi5ib290c3RyYXBNb2R1bGVGYWN0b3J5KHQsaSl9KX0sdC5wcm90b3R5cGUuX21vZHVsZURvQm9vdHN0cmFwPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5qZWN0b3IuZ2V0KGFlKTtpZih0Ll9ib290c3RyYXBDb21wb25lbnRzLmxlbmd0aD4wKXQuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5ib290c3RyYXAodCl9KTtlbHNle2lmKCF0Lmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IEVycm9yKCJUaGUgbW9kdWxlICIrTyh0Lmluc3RhbmNlLmNvbnN0cnVjdG9yKSsnIHdhcyBib290c3RyYXBwZWQsIGJ1dCBpdCBkb2VzIG5vdCBkZWNsYXJlICJATmdNb2R1bGUuYm9vdHN0cmFwIiBjb21wb25lbnRzIG5vciBhICJuZ0RvQm9vdHN0cmFwIiBtZXRob2QuIFBsZWFzZSBkZWZpbmUgb25lIG9mIHRoZXNlLicpO3QuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcChlKX10aGlzLl9tb2R1bGVzLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwbGF0Zm9ybSBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCEiKTt0aGlzLl9tb2R1bGVzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX2Rlc3Ryb3llZD0hMH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gb2UodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLnJlZHVjZShvZSx0KTpPYmplY3Qoci5hKSh7fSx0LGUpfXZhciBhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8pe3ZhciBsPXRoaXM7dGhpcy5fem9uZT10LHRoaXMuX2NvbnNvbGU9ZSx0aGlzLl9pbmplY3Rvcj1uLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9aSx0aGlzLl9pbml0U3RhdHVzPW8sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXM9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXM9dGUoKSx0aGlzLl96b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKCl7bC5fem9uZS5ydW4oZnVuY3Rpb24oKXtsLnRpY2soKX0pfX0pO3ZhciBjPW5ldyBhLmEoZnVuY3Rpb24odCl7bC5fc3RhYmxlPWwuX3pvbmUuaXNTdGFibGUmJiFsLl96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhbC5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyxsLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5uZXh0KGwuX3N0YWJsZSksdC5jb21wbGV0ZSgpfSl9KSxmPW5ldyBhLmEoZnVuY3Rpb24odCl7dmFyIGU7bC5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2U9bC5fem9uZS5vblN0YWJsZS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtGdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksdyhmdW5jdGlvbigpe2wuX3N0YWJsZXx8bC5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc3x8bC5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrc3x8KGwuX3N0YWJsZT0hMCx0Lm5leHQoITApKX0pfSl9KTt2YXIgbj1sLl96b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7RnQuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLGwuX3N0YWJsZSYmKGwuX3N0YWJsZT0hMSxsLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5uZXh0KCExKX0pKX0pO3JldHVybiBmdW5jdGlvbigpe2UudW5zdWJzY3JpYmUoKSxuLnVuc3Vic2NyaWJlKCl9fSk7dGhpcy5pc1N0YWJsZT1PYmplY3Qocy5hKShjLGYucGlwZShPYmplY3QodS5hKSgpKSl9cmV0dXJuIHQucHJvdG90eXBlLmJvb3RzdHJhcD1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcztpZighdGhpcy5faW5pdFN0YXR1cy5kb25lKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGJvb3RzdHJhcCBhcyB0aGVyZSBhcmUgc3RpbGwgYXN5bmNocm9ub3VzIGluaXRpYWxpemVycyBydW5uaW5nLiBCb290c3RyYXAgY29tcG9uZW50cyBpbiB0aGUgYG5nRG9Cb290c3RyYXBgIG1ldGhvZCBvZiB0aGUgcm9vdCBtb2R1bGUuIik7bj10IGluc3RhbmNlb2YgeHQ/dDp0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKG4uY29tcG9uZW50VHlwZSk7dmFyIGk9biBpbnN0YW5jZW9mIEF0P251bGw6dGhpcy5faW5qZWN0b3IuZ2V0KGp0KSxvPW4uY3JlYXRlKE4uTlVMTCxbXSxlfHxuLnNlbGVjdG9yLGkpO28ub25EZXN0cm95KGZ1bmN0aW9uKCl7ci5fdW5sb2FkQ29tcG9uZW50KG8pfSk7dmFyIGE9by5pbmplY3Rvci5nZXQocXQsbnVsbCk7cmV0dXJuIGEmJm8uaW5qZWN0b3IuZ2V0KFl0KS5yZWdpc3RlckFwcGxpY2F0aW9uKG8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCxhKSx0aGlzLl9sb2FkQ29tcG9uZW50KG8pLHRlKCkmJnRoaXMuX2NvbnNvbGUubG9nKCJBbmd1bGFyIGlzIHJ1bm5pbmcgaW4gdGhlIGRldmVsb3BtZW50IG1vZGUuIENhbGwgZW5hYmxlUHJvZE1vZGUoKSB0byBlbmFibGUgdGhlIHByb2R1Y3Rpb24gbW9kZS4iKSxvfSx0LnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLl9ydW5uaW5nVGljayl0aHJvdyBuZXcgRXJyb3IoIkFwcGxpY2F0aW9uUmVmLnRpY2sgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5Iik7dmFyIG49dC5fdGlja1Njb3BlKCk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwLHRoaXMuX3ZpZXdzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGV0ZWN0Q2hhbmdlcygpfSksdGhpcy5fZW5mb3JjZU5vTmV3Q2hhbmdlcyYmdGhpcy5fdmlld3MuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jaGVja05vQ2hhbmdlcygpfSl9Y2F0Y2godCl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBlLl9leGNlcHRpb25IYW5kbGVyLmhhbmRsZUVycm9yKHQpfSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMSxEdChuKX19LHQucHJvdG90eXBlLmF0dGFjaFZpZXc9ZnVuY3Rpb24odCl7dmFyIGU9dDt0aGlzLl92aWV3cy5wdXNoKGUpLGUuYXR0YWNoVG9BcHBSZWYodGhpcyl9LHQucHJvdG90eXBlLmRldGFjaFZpZXc9ZnVuY3Rpb24odCl7dmFyIGU9dDtzZSh0aGlzLl92aWV3cyxlKSxlLmRldGFjaEZyb21BcHBSZWYoKX0sdC5wcm90b3R5cGUuX2xvYWRDb21wb25lbnQ9ZnVuY3Rpb24odCl7dGhpcy5hdHRhY2hWaWV3KHQuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKHQpLHRoaXMuX2luamVjdG9yLmdldChndCxbXSkuY29uY2F0KHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycykuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfSx0LnByb3RvdHlwZS5fdW5sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuZGV0YWNoVmlldyh0Lmhvc3RWaWV3KSxzZSh0aGlzLmNvbXBvbmVudHMsdCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZpZXdDb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5fdGlja1Njb3BlPVJ0KCJBcHBsaWNhdGlvblJlZiN0aWNrKCkiKSx0fSgpO2Z1bmN0aW9uIHNlKHQsZSl7dmFyIG49dC5pbmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9dmFyIHVlPWZ1bmN0aW9uKCl7fSxsZT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkltcG9ydGFudD0xXT0iSW1wb3J0YW50Iix0W3QuRGFzaENhc2U9Ml09IkRhc2hDYXNlIix0fSh7fSksY2U9ZnVuY3Rpb24odCl7dGhpcy5uYXRpdmVFbGVtZW50PXR9LGZlPWZ1bmN0aW9uKCl7fSxoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5jaGFuZ2VzPW5ldyBMdCx0aGlzLmxlbmd0aD0wfXJldHVybiB0LnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfSx0LnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmlsdGVyKHQpfSx0LnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQodCl9LHQucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaCh0KX0sdC5wcm90b3R5cGUuc29tZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKHQpfSx0LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX0sdC5wcm90b3R5cGVbXygpXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN1bHRzW18oKV0oKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbih0KXt0aGlzLl9yZXN1bHRzPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIHI9QXJyYXkuaXNBcnJheShuKT90KG4pOm47cmV0dXJuIGUuY29uY2F0KHIpfSxbXSl9KHQpLHRoaXMuZGlydHk9ITEsdGhpcy5sZW5ndGg9dGhpcy5fcmVzdWx0cy5sZW5ndGgsdGhpcy5sYXN0PXRoaXMuX3Jlc3VsdHNbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJzdD10aGlzLl9yZXN1bHRzWzBdfSx0LnByb3RvdHlwZS5ub3RpZnlPbkNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZXMuZW1pdCh0aGlzKX0sdC5wcm90b3R5cGUuc2V0RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5jaGFuZ2VzLnVuc3Vic2NyaWJlKCl9LHR9KCksZGU9ZnVuY3Rpb24oKXt9LHBlPXtmYWN0b3J5UGF0aFByZWZpeDoiIixmYWN0b3J5UGF0aFN1ZmZpeDoiLm5nZmFjdG9yeSJ9LG1lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2NvbXBpbGVyPXQsdGhpcy5fY29uZmlnPWV8fHBlfXJldHVybiB0LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb21waWxlciBpbnN0YW5jZW9mIF90P3RoaXMubG9hZEZhY3RvcnkodCk6dGhpcy5sb2FkQW5kQ29tcGlsZSh0KX0sdC5wcm90b3R5cGUubG9hZEFuZENvbXBpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPU9iamVjdChyLmMpKHQuc3BsaXQoIiMiKSwyKSxvPWlbMF0sYT1pWzFdO3JldHVybiB2b2lkIDA9PT1hJiYoYT0iZGVmYXVsdCIpLG4oImNybmQiKShvKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0W2FdfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4geWUodCxvLGEpfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5fY29tcGlsZXIuY29tcGlsZU1vZHVsZUFzeW5jKHQpfSl9LHQucHJvdG90eXBlLmxvYWRGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChyLmMpKHQuc3BsaXQoIiMiKSwyKSxpPWVbMF0sbz1lWzFdLGE9Ik5nRmFjdG9yeSI7cmV0dXJuIHZvaWQgMD09PW8mJihvPSJkZWZhdWx0IixhPSIiKSxuKCJjcm5kIikodGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoUHJlZml4K2krdGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoU3VmZml4KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0W28rYV19KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB5ZSh0LGksbyl9KX0sdH0oKTtmdW5jdGlvbiB5ZSh0LGUsbil7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCAnIituKyInIGluICciK2UrIiciKTtyZXR1cm4gdH12YXIgZ2U9ZnVuY3Rpb24oKXt9LHZlPWZ1bmN0aW9uKCl7fSxiZT1mdW5jdGlvbigpe30sX2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9kZWJ1Z0NvbnRleHQ9bix0aGlzLm5hdGl2ZU5vZGU9dCxlJiZlIGluc3RhbmNlb2Ygd2U/ZS5hZGRDaGlsZCh0aGlzKTp0aGlzLnBhcmVudD1udWxsLHRoaXMubGlzdGVuZXJzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudEluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVmZXJlbmNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQucmVmZXJlbmNlc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5wcm92aWRlclRva2Vuc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLHdlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5wcm9wZXJ0aWVzPXt9LGkuYXR0cmlidXRlcz17fSxpLmNsYXNzZXM9e30saS5zdHlsZXM9e30saS5jaGlsZE5vZGVzPVtdLGkubmF0aXZlRWxlbWVudD1lLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuYWRkQ2hpbGQ9ZnVuY3Rpb24odCl7dCYmKHRoaXMuY2hpbGROb2Rlcy5wdXNoKHQpLHQucGFyZW50PXRoaXMpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMSE9PWUmJih0LnBhcmVudD1udWxsLHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UoZSwxKSl9LGUucHJvdG90eXBlLmluc2VydENoaWxkcmVuQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXRoaXMsbz10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMSE9PW8mJigobj10aGlzLmNoaWxkTm9kZXMpLnNwbGljZS5hcHBseShuLE9iamVjdChyLmQpKFtvKzEsMF0sZSkpLGUuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlQ2hpbGQodCksdC5wYXJlbnQ9aX0pKX0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCk7LTE9PT1uP3RoaXMuYWRkQ2hpbGQoZSk6KGUucGFyZW50JiZlLnBhcmVudC5yZW1vdmVDaGlsZChlKSxlLnBhcmVudD10aGlzLHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UobiwwLGUpKX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnlBbGwodClbMF18fG51bGx9LGUucHJvdG90eXBlLnF1ZXJ5QWxsPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB4ZSh0aGlzLHQsZSksZX0sZS5wcm90b3R5cGUucXVlcnlBbGxOb2Rlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gT2UodGhpcyx0LGUpLGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50cmlnZ2VyRXZlbnRIYW5kbGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihuKXtuLm5hbWU9PXQmJm4uY2FsbGJhY2soZSl9KX0sZX0oX2UpO2Z1bmN0aW9uIHhlKHQsZSxuKXt0LmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0IGluc3RhbmNlb2Ygd2UmJihlKHQpJiZuLnB1c2godCkseGUodCxlLG4pKX0pfWZ1bmN0aW9uIE9lKHQsZSxuKXt0IGluc3RhbmNlb2Ygd2UmJnQuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UodCkmJm4ucHVzaCh0KSx0IGluc3RhbmNlb2Ygd2UmJk9lKHQsZSxuKX0pfXZhciBDZT1uZXcgTWFwO2Z1bmN0aW9uIFNlKHQpe3JldHVybiBDZS5nZXQodCl8fG51bGx9ZnVuY3Rpb24gRWUodCl7Q2Uuc2V0KHQubmF0aXZlTm9kZSx0KX1mdW5jdGlvbiBrZSh0LGUpe3ZhciBuPUFlKHQpLHI9QWUoZSk7cmV0dXJuIG4mJnI/ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj10W18oKV0oKSxpPWVbXygpXSgpOzspe3ZhciBvPXIubmV4dCgpLGE9aS5uZXh0KCk7aWYoby5kb25lJiZhLmRvbmUpcmV0dXJuITA7aWYoby5kb25lfHxhLmRvbmUpcmV0dXJuITE7aWYoIW4oby52YWx1ZSxhLnZhbHVlKSlyZXR1cm4hMX19KHQsZSxrZSk6IShufHwhdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdHx8cnx8IWV8fCJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpfHx4KHQsZSl9dmFyIFRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLndyYXBwZWQ9dH1yZXR1cm4gdC53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaXNXcmFwcGVkKGUpP2Uud3JhcHBlZDplfSx0LmlzV3JhcHBlZD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR9LHR9KCksSWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnByZXZpb3VzVmFsdWU9dCx0aGlzLmN1cnJlbnRWYWx1ZT1lLHRoaXMuZmlyc3RDaGFuZ2U9bn1yZXR1cm4gdC5wcm90b3R5cGUuaXNGaXJzdENoYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfSx0fSgpO2Z1bmN0aW9uIEFlKHQpe3JldHVybiEhamUodCkmJihBcnJheS5pc0FycmF5KHQpfHwhKHQgaW5zdGFuY2VvZiBNYXApJiZfKClpbiB0KX1mdW5jdGlvbiBqZSh0KXtyZXR1cm4gbnVsbCE9PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiB0KX12YXIgUGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gQWUodCl9LHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE5lKHQpfSx0fSgpLE1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9LE5lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmxlbmd0aD0wLHRoaXMuX2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fbW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49dHx8TWV9cmV0dXJuIHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2l0SGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaE9wZXJhdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5faXRIZWFkLG49dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxpPW51bGw7ZXx8bjspe3ZhciBvPSFufHxlJiZlLmN1cnJlbnRJbmRleDxGZShuLHIsaSk/ZTpuLGE9RmUobyxyLGkpLHM9by5jdXJyZW50SW5kZXg7aWYobz09PW4pci0tLG49bi5fbmV4dFJlbW92ZWQ7ZWxzZSBpZihlPWUuX25leHQsbnVsbD09by5wcmV2aW91c0luZGV4KXIrKztlbHNle2l8fChpPVtdKTt2YXIgdT1hLXIsbD1zLXI7aWYodSE9bCl7Zm9yKHZhciBjPTA7Yzx1O2MrKyl7dmFyIGY9YzxpLmxlbmd0aD9pW2NdOmlbY109MCxoPWYrYztsPD1oJiZoPHUmJihpW2NdPWYrMSl9aVtvLnByZXZpb3VzSW5kZXhdPWwtdX19YSE9PXMmJnQobyxhLHMpfX0sdC5wcm90b3R5cGUuZm9yRWFjaFByZXZpb3VzSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9wcmV2aW91c0l0SGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoQWRkZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaE1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0TW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaFJlbW92ZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hJZGVudGl0eUNoYW5nZT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9LHQucHJvdG90eXBlLmRpZmY9ZnVuY3Rpb24odCl7aWYobnVsbD09dCYmKHQ9W10pLCFBZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK08odCkrIicuIE9ubHkgYXJyYXlzIGFuZCBpdGVyYWJsZXMgYXJlIGFsbG93ZWQiKTtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZXNldCgpO3ZhciBuLHIsaSxvPXRoaXMuX2l0SGVhZCxhPSExO2lmKEFycmF5LmlzQXJyYXkodCkpe3RoaXMubGVuZ3RoPXQubGVuZ3RoO2Zvcih2YXIgcz0wO3M8dGhpcy5sZW5ndGg7cysrKWk9dGhpcy5fdHJhY2tCeUZuKHMscj10W3NdKSxudWxsIT09byYmeChvLnRyYWNrQnlJZCxpKT8oYSYmKG89dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24obyxyLGkscykpLHgoby5pdGVtLHIpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShvLHIpKToobz10aGlzLl9taXNtYXRjaChvLHIsaSxzKSxhPSEwKSxvPW8uX25leHR9ZWxzZSBuPTAsZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSk7ZWxzZSBmb3IodmFyIHI9dFtfKCldKCksaT12b2lkIDA7IShpPXIubmV4dCgpKS5kb25lOyllKGkudmFsdWUpfSh0LGZ1bmN0aW9uKHQpe2k9ZS5fdHJhY2tCeUZuKG4sdCksbnVsbCE9PW8mJngoby50cmFja0J5SWQsaSk/KGEmJihvPWUuX3ZlcmlmeVJlaW5zZXJ0aW9uKG8sdCxpLG4pKSx4KG8uaXRlbSx0KXx8ZS5fYWRkSWRlbnRpdHlDaGFuZ2Uobyx0KSk6KG89ZS5fbWlzbWF0Y2gobyx0LGksbiksYT0hMCksbz1vLl9uZXh0LG4rK30pLHRoaXMubGVuZ3RoPW47cmV0dXJuIHRoaXMuX3RydW5jYXRlKG8pLHRoaXMuY29sbGVjdGlvbj10LHRoaXMuaXNEaXJ0eX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRGlydHkpe3ZhciB0PXZvaWQgMCxlPXZvaWQgMDtmb3IodD10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0PXRoaXMuX21vdmVzSGVhZDtudWxsIT09dDt0PWUpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4LGU9dC5fbmV4dE1vdmVkO3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fSx0LnByb3RvdHlwZS5fbWlzbWF0Y2g9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk7cmV0dXJuIG51bGw9PT10P2k9dGhpcy5faXRUYWlsOihpPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChuLHIpKT8oeCh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fbW92ZUFmdGVyKHQsaSxyKSk6bnVsbCE9PSh0PW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCkpPyh4KHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9yZWluc2VydEFmdGVyKHQsaSxyKSk6dD10aGlzLl9hZGRBZnRlcihuZXcgUmUoZSxuKSxpLHIpLHR9LHQucHJvdG90eXBlLl92ZXJpZnlSZWluc2VydGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChuLG51bGwpO3JldHVybiBudWxsIT09aT90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoaSx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9LHQucHJvdG90eXBlLl90cnVuY2F0ZT1mdW5jdGlvbih0KXtmb3IoO251bGwhPT10Oyl7dmFyIGU9dC5fbmV4dDt0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayh0KSksdD1lfW51bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5jbGVhcigpLG51bGwhPT10aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLG51bGwhPT10aGlzLl9tb3Zlc1RhaWwmJih0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faXRUYWlsJiYodGhpcy5faXRUYWlsLl9uZXh0PW51bGwpLG51bGwhPT10aGlzLl9yZW1vdmFsc1RhaWwmJih0aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsJiYodGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGwpfSx0LnByb3RvdHlwZS5fcmVpbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTt2YXIgcj10Ll9wcmV2UmVtb3ZlZCxpPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09cj90aGlzLl9yZW1vdmFsc0hlYWQ9aTpyLl9uZXh0UmVtb3ZlZD1pLG51bGw9PT1pP3RoaXMuX3JlbW92YWxzVGFpbD1yOmkuX3ByZXZSZW1vdmVkPXIsdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fSx0LnByb3RvdHlwZS5fbW92ZUFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRUb01vdmVzKHQsbiksdH0sdC5wcm90b3R5cGUuX2FkZEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD10OnRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHR9LHQucHJvdG90eXBlLl9pbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bnVsbD09PWU/dGhpcy5faXRIZWFkOmUuX25leHQ7cmV0dXJuIHQuX25leHQ9cix0Ll9wcmV2PWUsbnVsbD09PXI/dGhpcy5faXRUYWlsPXQ6ci5fcHJldj10LG51bGw9PT1lP3RoaXMuX2l0SGVhZD10OmUuX25leHQ9dCxudWxsPT09dGhpcy5fbGlua2VkUmVjb3JkcyYmKHRoaXMuX2xpbmtlZFJlY29yZHM9bmV3IExlKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1uLHR9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX0sdC5wcm90b3R5cGUuX3VubGluaz1mdW5jdGlvbih0KXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7dmFyIGU9dC5fcHJldixuPXQuX25leHQ7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2l0SGVhZD1uOmUuX25leHQ9bixudWxsPT09bj90aGlzLl9pdFRhaWw9ZTpuLl9wcmV2PWUsdH0sdC5wcm90b3R5cGUuX2FkZFRvTW92ZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wcmV2aW91c0luZGV4PT09ZT90Oih0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10LHQpfSx0LnByb3RvdHlwZS5fYWRkVG9SZW1vdmFscz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmKHRoaXMuX3VubGlua2VkUmVjb3Jkcz1uZXcgTGUpLHRoaXMuX3VubGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9bnVsbCx0Ll9uZXh0UmVtb3ZlZD1udWxsLG51bGw9PT10aGlzLl9yZW1vdmFsc1RhaWw/KHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc0hlYWQ9dCx0Ll9wcmV2UmVtb3ZlZD1udWxsKToodC5fcHJldlJlbW92ZWQ9dGhpcy5fcmVtb3ZhbHNUYWlsLHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPXQpLHR9LHQucHJvdG90eXBlLl9hZGRJZGVudGl0eUNoYW5nZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lml0ZW09ZSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9dCx0fSx0fSgpLFJlPWZ1bmN0aW9uKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9LERlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPXQsdC5fbmV4dER1cD1udWxsLHQuX3ByZXZEdXA9bnVsbCk6KHRoaXMuX3RhaWwuX25leHREdXA9dCx0Ll9wcmV2RHVwPXRoaXMuX3RhaWwsdC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9dCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciBuO2ZvcihuPXRoaXMuX2hlYWQ7bnVsbCE9PW47bj1uLl9uZXh0RHVwKWlmKChudWxsPT09ZXx8ZTw9bi5jdXJyZW50SW5kZXgpJiZ4KG4udHJhY2tCeUlkLHQpKXJldHVybiBuO3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJldkR1cCxuPXQuX25leHREdXA7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2hlYWQ9bjplLl9uZXh0RHVwPW4sbnVsbD09PW4/dGhpcy5fdGFpbD1lOm4uX3ByZXZEdXA9ZSxudWxsPT09dGhpcy5faGVhZH0sdH0oKSxMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm1hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFja0J5SWQsbj10aGlzLm1hcC5nZXQoZSk7bnx8KG49bmV3IERlLHRoaXMubWFwLnNldChlLG4pKSxuLmFkZCh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBuP24uZ2V0KHQsZSk6bnVsbH0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0VtcHR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5tYXAuY2xlYXIoKX0sdH0oKTtmdW5jdGlvbiBGZSh0LGUsbil7dmFyIHI9dC5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1yKXJldHVybiByO3ZhciBpPTA7cmV0dXJuIG4mJnI8bi5sZW5ndGgmJihpPW5bcl0pLHIrZStpfXZhciBWZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWFwfHxqZSh0KX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVZX0sdH0oKSxVZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fcHJldmlvdXNNYXBIZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNEaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX2NoYW5nZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX21hcEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hDaGFuZ2VkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hBZGRlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09ZTtlPWUuX25leHRBZGRlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUmVtb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZGlmZj1mdW5jdGlvbih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fGplKHQpKSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK08odCkrIicuIE9ubHkgbWFwcyBhbmQgb2JqZWN0cyBhcmUgYWxsb3dlZCIpfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3Jlc2V0KCk7dmFyIG49dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCxmdW5jdGlvbih0LHIpe2lmKG4mJm4ua2V5PT09cillLl9tYXliZUFkZFRvQ2hhbmdlcyhuLHQpLGUuX2FwcGVuZEFmdGVyPW4sbj1uLl9uZXh0O2Vsc2V7dmFyIGk9ZS5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocix0KTtuPWUuX2luc2VydEJlZm9yZU9yQXBwZW5kKG4saSl9fSksbil7bi5fcHJldiYmKG4uX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPW47Zm9yKHZhciByPW47bnVsbCE9PXI7cj1yLl9uZXh0UmVtb3ZlZClyPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoci5rZXkpLHIuX25leHRSZW1vdmVkPXIuX25leHQsci5wcmV2aW91c1ZhbHVlPXIuY3VycmVudFZhbHVlLHIuY3VycmVudFZhbHVlPW51bGwsci5fcHJldj1udWxsLHIuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9LHQucHJvdG90eXBlLl9pbnNlcnRCZWZvcmVPckFwcGVuZD1mdW5jdGlvbih0LGUpe2lmKHQpe3ZhciBuPXQuX3ByZXY7cmV0dXJuIGUuX25leHQ9dCxlLl9wcmV2PW4sdC5fcHJldj1lLG4mJihuLl9uZXh0PWUpLHQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1lKSx0aGlzLl9hcHBlbmRBZnRlcj10LHR9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1lLGUuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9ZSx0aGlzLl9hcHBlbmRBZnRlcj1lLG51bGx9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXt2YXIgbj10aGlzLl9yZWNvcmRzLmdldCh0KTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhuLGUpO3ZhciByPW4uX3ByZXYsaT1uLl9uZXh0O3JldHVybiByJiYoci5fbmV4dD1pKSxpJiYoaS5fcHJldj1yKSxuLl9uZXh0PW51bGwsbi5fcHJldj1udWxsLG59dmFyIG89bmV3IHplKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LG8pLG8uY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMobyksb30sdC5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5pc0RpcnR5KXt2YXIgdD12b2lkIDA7Zm9yKHRoaXMuX3ByZXZpb3VzTWFwSGVhZD10aGlzLl9tYXBIZWFkLHQ9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09dDt0PXQuX25leHRDaGFuZ2VkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGx9fSx0LnByb3RvdHlwZS5fbWF5YmVBZGRUb0NoYW5nZXM9ZnVuY3Rpb24odCxlKXt4KGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX0sdC5wcm90b3R5cGUuX2FkZFRvQWRkaXRpb25zPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9hZGRpdGlvbnNIZWFkP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD10Oih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0aGlzLl9hZGRpdGlvbnNUYWlsPXQpfSx0LnByb3RvdHlwZS5fYWRkVG9DaGFuZ2VzPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD10Oih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9dCx0aGlzLl9jaGFuZ2VzVGFpbD10KX0sdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24odCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlKHRbbl0sbil9KX0sdH0oKSx6ZT1mdW5jdGlvbih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9LEJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG51bGwhPW4pe3ZhciByPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgSXRlcmFibGVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IEksbmV3IGtdXX19LHQucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYobnVsbCE9bilyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIicgb2YgdHlwZSAnIisoKGU9dCkubmFtZXx8dHlwZW9mIGUpKyInIil9LHQubmdJbmplY3RhYmxlRGVmPWwoe3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoW25ldyBQZV0pfX0pLHR9KCksSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZmFjdG9yaWVzPXR9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKGUsbil7aWYobil7dmFyIHI9bi5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KHIpfXJldHVybiBuZXcgdChlKX0sdC5leHRlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJue3Byb3ZpZGU6dCx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe2lmKCFuKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGV4dGVuZCBLZXlWYWx1ZURpZmZlcnMgd2l0aG91dCBhIHBhcmVudCBpbmplY3RvciIpO3JldHVybiB0LmNyZWF0ZShlLG4pfSxkZXBzOltbdCxuZXcgSSxuZXcga11dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYoZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIiciKX0sdH0oKSxXZT1bbmV3IFZlXSxxZT1uZXcgQmUoW25ldyBQZV0pLFllPW5ldyBIZShXZSksR2U9bmUobnVsbCwiY29yZSIsW3twcm92aWRlOnl0LHVzZVZhbHVlOiJ1bmtub3duIn0se3Byb3ZpZGU6aWUsZGVwczpbTl19LHtwcm92aWRlOll0LGRlcHM6W119LHtwcm92aWRlOnZ0LGRlcHM6W119XSksUWU9bmV3IGMoIkxvY2FsZUlkIik7ZnVuY3Rpb24gS2UoKXtyZXR1cm4gcWV9ZnVuY3Rpb24gWmUoKXtyZXR1cm4gWWV9ZnVuY3Rpb24gWGUodCl7cmV0dXJuIHR8fCJlbi1VUyJ9dmFyICRlPWZ1bmN0aW9uKHQpe30sSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMuZGVmYXVsdERvYz10LHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydERvY3VtZW50LmJvZHksbnVsbD09dGhpcy5pbmVydEJvZHlFbGVtZW50KXt2YXIgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaHRtbCIpO3RoaXMuaW5lcnREb2N1bWVudC5hcHBlbmRDaGlsZChlKSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKSxlLmFwcGVuZENoaWxkKHRoaXMuaW5lcnRCb2R5RWxlbWVudCl9dGhpcy5pbmVydEJvZHlFbGVtZW50LmlubmVySFRNTD0nPHN2Zz48ZyBvbmxvYWQ9InRoaXMucGFyZW50Tm9kZS5yZW1vdmUoKSI+PC9nPjwvc3ZnPicsIXRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yfHx0aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3Rvcigic3ZnIik/KHRoaXMuaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw9Jzxzdmc+PHA+PHN0eWxlPjxpbWcgc3JjPSI8L3N0eWxlPjxpbWcgc3JjPXggb25lcnJvcj1hbGVydCgxKS8vIj4nLHRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudD10aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3RvciYmdGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoInN2ZyBpbWciKSYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuISF3aW5kb3cuRE9NUGFyc2VyfWNhdGNoKHQpe3JldHVybiExfX0oKT90aGlzLmdldEluZXJ0Qm9keUVsZW1lbnRfRE9NUGFyc2VyOnRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudF9JbmVydERvY3VtZW50KTp0aGlzLmdldEluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50X1hIUn1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9YSFI9ZnVuY3Rpb24odCl7dD0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK3QrIjwvYm9keT4iO3RyeXt0PWVuY29kZVVSSSh0KX1jYXRjaCh0KXtyZXR1cm4gbnVsbH12YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZS5yZXNwb25zZVR5cGU9ImRvY3VtZW50IixlLm9wZW4oIkdFVCIsImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsIit0LCExKSxlLnNlbmQobnVsbCk7dmFyIG49ZS5yZXNwb25zZS5ib2R5O3JldHVybiBuLnJlbW92ZUNoaWxkKG4uZmlyc3RDaGlsZCksbn0sdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9ET01QYXJzZXI9ZnVuY3Rpb24odCl7dD0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK3QrIjwvYm9keT4iO3RyeXt2YXIgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0LCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBlLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCksZX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19LHQucHJvdG90eXBlLmdldEluZXJ0Qm9keUVsZW1lbnRfSW5lcnREb2N1bWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4iY29udGVudCJpbiBlPyhlLmlubmVySFRNTD10LGUpOih0aGlzLmluZXJ0Qm9keUVsZW1lbnQuaW5uZXJIVE1MPXQsdGhpcy5kZWZhdWx0RG9jLmRvY3VtZW50TW9kZSYmdGhpcy5zdHJpcEN1c3RvbU5zQXR0cnModGhpcy5pbmVydEJvZHlFbGVtZW50KSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQpfSx0LnByb3RvdHlwZS5zdHJpcEN1c3RvbU5zQXR0cnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuYXR0cmlidXRlcyxuPWUubGVuZ3RoLTE7MDxuO24tLSl7dmFyIHI9ZS5pdGVtKG4pLm5hbWU7InhtbG5zOm5zMSIhPT1yJiYwIT09ci5pbmRleE9mKCJuczE6Iil8fHQucmVtb3ZlQXR0cmlidXRlKHIpfWZvcih2YXIgaT10LmZpcnN0Q2hpbGQ7aTspaS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLnN0cmlwQ3VzdG9tTnNBdHRycyhpKSxpPWkubmV4dFNpYmxpbmd9LHR9KCksdG49L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZSk6fFteJjovPyNdKig/OlsvPyNdfCQpKS9naSxlbj0vXmRhdGE6KD86aW1hZ2VcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1wvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05K1wvXSs9KiQvaTtmdW5jdGlvbiBubih0KXtyZXR1cm4odD1TdHJpbmcodCkpLm1hdGNoKHRuKXx8dC5tYXRjaChlbik/dDoodGUoKSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBVUkwgdmFsdWUgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIiksInVuc2FmZToiK3QpfWZ1bmN0aW9uIHJuKHQpe3ZhciBlLG4saT17fTt0cnl7Zm9yKHZhciBvPU9iamVjdChyLmUpKHQuc3BsaXQoIiwiKSksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpaVthLnZhbHVlXT0hMH1jYXRjaCh0KXtlPXtlcnJvcjp0fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGUpdGhyb3cgZS5lcnJvcn19cmV0dXJuIGl9ZnVuY3Rpb24gb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG4saSxvPXt9O3RyeXtmb3IodmFyIGE9T2JqZWN0KHIuZSkodCkscz1hLm5leHQoKTshcy5kb25lO3M9YS5uZXh0KCkpe3ZhciB1PXMudmFsdWU7Zm9yKHZhciBsIGluIHUpdS5oYXNPd25Qcm9wZXJ0eShsKSYmKG9bbF09ITApfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYoaT1hLnJldHVybikmJmkuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIG99dmFyIGFuLHNuPXJuKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksdW49cm4oImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxsbj1ybigicnAscnQiKSxjbj1vbihsbix1biksZm49b24oc24sb24odW4scm4oImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLG9uKGxuLHJuKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksY24pLGhuPXJuKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxkbj1ybigic3Jjc2V0IikscG49b24oaG4sZG4scm4oImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHN0YXJ0LHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCx2YWxpZ24sdmFsdWUsdnNwYWNlLHdpZHRoIikpLG1uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMuYnVmPVtdfXJldHVybiB0LnByb3RvdHlwZS5zYW5pdGl6ZUNoaWxkcmVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZpcnN0Q2hpbGQ7ZTspaWYoZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP3RoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTt2YXIgbj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKG4pe2U9bjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9LHQucHJvdG90eXBlLnN0YXJ0RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoZm4uaGFzT3duUHJvcGVydHkoZSkpe3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKGUpO2Zvcih2YXIgbixyPXQuYXR0cmlidXRlcyxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXIuaXRlbShpKSxhPW8ubmFtZSxzPWEudG9Mb3dlckNhc2UoKTtpZihwbi5oYXNPd25Qcm9wZXJ0eShzKSl7dmFyIHU9by52YWx1ZTtobltzXSYmKHU9bm4odSkpLGRuW3NdJiYobj11LHU9KG49U3RyaW5nKG4pKS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbm4odC50cmltKCkpfSkuam9pbigiLCAiKSksdGhpcy5idWYucHVzaCgiICIsYSwnPSInLHZuKHUpLCciJyl9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH10aGlzLmJ1Zi5wdXNoKCI+Iil9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH0sdC5wcm90b3R5cGUuZW5kRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Zm4uaGFzT3duUHJvcGVydHkoZSkmJiFzbi5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfSx0LnByb3RvdHlwZS5jaGFycz1mdW5jdGlvbih0KXt0aGlzLmJ1Zi5wdXNoKHZuKHQpKX0sdC5wcm90b3R5cGUuY2hlY2tDbG9iYmVyZWRFbGVtZW50PWZ1bmN0aW9uKHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogIit0Lm91dGVySFRNTCk7cmV0dXJuIGV9LHR9KCkseW49L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLGduPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiB2bih0KXtyZXR1cm4gdC5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSh5bixmdW5jdGlvbih0KXtyZXR1cm4iJiMiKygxMDI0Kih0LmNoYXJDb2RlQXQoMCktNTUyOTYpKyh0LmNoYXJDb2RlQXQoMSktNTYzMjApKzY1NTM2KSsiOyJ9KS5yZXBsYWNlKGduLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrdC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIGJuKHQsZSl7dmFyIG49bnVsbDt0cnl7YW49YW58fG5ldyBKZSh0KTt2YXIgcj1lP1N0cmluZyhlKToiIjtuPWFuLmdldEluZXJ0Qm9keUVsZW1lbnQocik7dmFyIGk9NSxvPXI7ZG97aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZSIpO2ktLSxyPW8sbz1uLmlubmVySFRNTCxuPWFuLmdldEluZXJ0Qm9keUVsZW1lbnQocil9d2hpbGUociE9PW8pO3ZhciBhPW5ldyBtbixzPWEuc2FuaXRpemVDaGlsZHJlbihfbihuKXx8bik7cmV0dXJuIHRlKCkmJmEuc2FuaXRpemVkU29tZXRoaW5nJiZjb25zb2xlLndhcm4oIldBUk5JTkc6IHNhbml0aXppbmcgSFRNTCBzdHJpcHBlZCBzb21lIGNvbnRlbnQgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpLiIpLHN9ZmluYWxseXtpZihuKWZvcih2YXIgdT1fbihuKXx8bjt1LmZpcnN0Q2hpbGQ7KXUucmVtb3ZlQ2hpbGQodS5maXJzdENoaWxkKX19ZnVuY3Rpb24gX24odCl7cmV0dXJuImNvbnRlbnQiaW4gdCYmZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PXQubm9kZU5hbWV9KHQpP3QuY29udGVudDpudWxsfXZhciB3bj1uZXcgUmVnRXhwKCJeKFstLC5cIiclXyEjIGEtekEtWjAtOV0rfCg/Oig/Om1hdHJpeHx0cmFuc2xhdGV8c2NhbGV8cm90YXRlfHNrZXd8cGVyc3BlY3RpdmUpKD86WHxZfDNkKT98KD86cmdifGhzbClhP3woPzpyZXBlYXRpbmctKT8oPzpsaW5lYXJ8cmFkaWFsKS1ncmFkaWVudHwoPzpjYWxjfGF0dHIpKVxcKFstMC05LiUsICNhLXpBLVpdK1xcKSkkIiwiZyIpLHhuPS9edXJsXCgoW14pXSspXCkkLztmdW5jdGlvbiBPbih0KXtpZighKHQ9U3RyaW5nKHQpLnRyaW0oKSkpcmV0dXJuIiI7dmFyIGU9dC5tYXRjaCh4bik7cmV0dXJuIGUmJm5uKGVbMV0pPT09ZVsxXXx8dC5tYXRjaCh3bikmJmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0hMCxuPSEwLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dC5jaGFyQXQocik7IiciPT09aSYmbj9lPSFlOiciJz09PWkmJmUmJihuPSFuKX1yZXR1cm4gZSYmbn0odCk/dDoodGUoKSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBzdHlsZSB2YWx1ZSAiK3QrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykuIiksInVuc2FmZSIpfXZhciBDbj1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5IVE1MPTFdPSJIVE1MIix0W3QuU1RZTEU9Ml09IlNUWUxFIix0W3QuU0NSSVBUPTNdPSJTQ1JJUFQiLHRbdC5VUkw9NF09IlVSTCIsdFt0LlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIix0fSh7fSksU249ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIEVuKHQsZSxuKXt2YXIgcj10LnN0YXRlLGk9MTc5MiZyO3JldHVybiBpPT09ZT8odC5zdGF0ZT0tMTc5MyZyfG4sdC5pbml0SW5kZXg9LTEsITApOmk9PT1ufWZ1bmN0aW9uIGtuKHQsZSxuKXtyZXR1cm4oMTc5MiZ0LnN0YXRlKT09PWUmJnQuaW5pdEluZGV4PD1uJiYodC5pbml0SW5kZXg9bisxLCEwKX1mdW5jdGlvbiBUbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIEluKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gQW4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBqbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIFBuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19dmFyIE1uPXtzZXRDdXJyZW50Tm9kZTp2b2lkIDAsY3JlYXRlUm9vdFZpZXc6dm9pZCAwLGNyZWF0ZUVtYmVkZGVkVmlldzp2b2lkIDAsY3JlYXRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY3JlYXRlTmdNb2R1bGVSZWY6dm9pZCAwLG92ZXJyaWRlUHJvdmlkZXI6dm9pZCAwLG92ZXJyaWRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY2xlYXJPdmVycmlkZXM6dm9pZCAwLGNoZWNrQW5kVXBkYXRlVmlldzp2b2lkIDAsY2hlY2tOb0NoYW5nZXNWaWV3OnZvaWQgMCxkZXN0cm95Vmlldzp2b2lkIDAscmVzb2x2ZURlcDp2b2lkIDAsY3JlYXRlRGVidWdDb250ZXh0OnZvaWQgMCxoYW5kbGVFdmVudDp2b2lkIDAsdXBkYXRlRGlyZWN0aXZlczp2b2lkIDAsdXBkYXRlUmVuZGVyZXI6dm9pZCAwLGRpcnR5UGFyZW50UXVlcmllczp2b2lkIDB9O2Z1bmN0aW9uIE5uKHQsZSxuLHIpe3ZhciBpPSJFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yOiBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkLiBQcmV2aW91cyB2YWx1ZTogJyIrZSsiJy4gQ3VycmVudCB2YWx1ZTogJyIrbisiJy4iO3JldHVybiByJiYoaSs9IiBJdCBzZWVtcyBsaWtlIHRoZSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgaXRzIHBhcmVudCBhbmQgaXRzIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXJ0eSBjaGVja2VkLiBIYXMgaXQgYmVlbiBjcmVhdGVkIGluIGEgY2hhbmdlIGRldGVjdGlvbiBob29rID8iKSxmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBFcnJvcih0KTtyZXR1cm4gUm4obixlKSxufShpLHQpfWZ1bmN0aW9uIFJuKHQsZSl7dFt0dF09ZSx0W250XT1lLmxvZ0Vycm9yLmJpbmQoZSl9ZnVuY3Rpb24gRG4odCl7cmV0dXJuIG5ldyBFcnJvcigiVmlld0Rlc3Ryb3llZEVycm9yOiBBdHRlbXB0IHRvIHVzZSBhIGRlc3Ryb3llZCB2aWV3OiAiK3QpfXZhciBMbj1mdW5jdGlvbigpe30sRm49bmV3IE1hcDtmdW5jdGlvbiBWbih0KXt2YXIgZT1Gbi5nZXQodCk7cmV0dXJuIGV8fChlPU8odCkrIl8iK0ZuLnNpemUsRm4uc2V0KHQsZSkpLGV9ZnVuY3Rpb24gVW4odCxlLG4scil7aWYoVGUuaXNXcmFwcGVkKHIpKXtyPVRlLnVud3JhcChyKTt2YXIgaT10LmRlZi5ub2Rlc1tlXS5iaW5kaW5nSW5kZXgrbixvPVRlLnVud3JhcCh0Lm9sZFZhbHVlc1tpXSk7dC5vbGRWYWx1ZXNbaV09bmV3IFRlKG8pfXJldHVybiByfXZhciB6bj0iJCR1bmRlZmluZWQiLEJuPSIkJGVtcHR5IjtmdW5jdGlvbiBIbih0KXtyZXR1cm57aWQ6em4sc3R5bGVzOnQuc3R5bGVzLGVuY2Fwc3VsYXRpb246dC5lbmNhcHN1bGF0aW9uLGRhdGE6dC5kYXRhfX12YXIgV249MDtmdW5jdGlvbiBxbih0LGUsbixyKXtyZXR1cm4hKCEoMiZ0LnN0YXRlKSYmeCh0Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXSxyKSl9ZnVuY3Rpb24gWW4odCxlLG4scil7cmV0dXJuISFxbih0LGUsbixyKSYmKHQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dPXIsITApfWZ1bmN0aW9uIEduKHQsZSxuLHIpe3ZhciBpPXQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dO2lmKDEmdC5zdGF0ZXx8IWtlKGkscikpe3ZhciBvPWUuYmluZGluZ3Nbbl0ubmFtZTt0aHJvdyBObihNbi5jcmVhdGVEZWJ1Z0NvbnRleHQodCxlLm5vZGVJbmRleCksbysiOiAiK2ksbysiOiAiK3IsMCE9KDEmdC5zdGF0ZSkpfX1mdW5jdGlvbiBRbih0KXtmb3IodmFyIGU9dDtlOykyJmUuZGVmLmZsYWdzJiYoZS5zdGF0ZXw9OCksZT1lLnZpZXdDb250YWluZXJQYXJlbnR8fGUucGFyZW50fWZ1bmN0aW9uIEtuKHQsZSl7Zm9yKHZhciBuPXQ7biYmbiE9PWU7KW4uc3RhdGV8PTY0LG49bi52aWV3Q29udGFpbmVyUGFyZW50fHxuLnBhcmVudH1mdW5jdGlvbiBabih0LGUsbixyKXt0cnl7cmV0dXJuIFFuKDMzNTU0NDMyJnQuZGVmLm5vZGVzW2VdLmZsYWdzP0luKHQsZSkuY29tcG9uZW50Vmlldzp0KSxNbi5oYW5kbGVFdmVudCh0LGUsbixyKX1jYXRjaChlKXt0LnJvb3QuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGUpfX1mdW5jdGlvbiBYbih0KXtyZXR1cm4gdC5wYXJlbnQ/SW4odC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLm5vZGVJbmRleCk6bnVsbH1mdW5jdGlvbiAkbih0KXtyZXR1cm4gdC5wYXJlbnQ/dC5wYXJlbnROb2RlRGVmLnBhcmVudDpudWxsfWZ1bmN0aW9uIEpuKHQsZSl7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIEluKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAyOnJldHVybiBUbih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0fX1mdW5jdGlvbiB0cih0KXtyZXR1cm4hIXQucGFyZW50JiYhISgzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIGVyKHQpe3JldHVybiEoIXQucGFyZW50fHwzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIG5yKHQpe3JldHVybiAxPDx0JTMyfWZ1bmN0aW9uIHJyKHQpe3ZhciBlPXt9LG49MCxpPXt9O3JldHVybiB0JiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG89T2JqZWN0KHIuYykodCwyKSxhPW9bMF0scz1vWzFdOyJudW1iZXIiPT10eXBlb2YgYT8oZVthXT1zLG58PW5yKGEpKTppW2FdPXN9KSx7bWF0Y2hlZFF1ZXJpZXM6ZSxyZWZlcmVuY2VzOmksbWF0Y2hlZFF1ZXJ5SWRzOm59fWZ1bmN0aW9uIGlyKHQsZSl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBuLGksbztyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8oaT0obz1PYmplY3Qoci5jKSh0LDIpKVswXSxuPW9bMV0pOihpPTAsbj10KSxuJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2YgbikmJmUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLEEse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSkse2ZsYWdzOmksdG9rZW46bix0b2tlbktleTpWbihuKX19KX1mdW5jdGlvbiBvcih0LGUsbil7dmFyIHI9bi5yZW5kZXJQYXJlbnQ7cmV0dXJuIHI/MD09KDEmci5mbGFncyl8fDA9PSgzMzU1NDQzMiZyLmZsYWdzKXx8ci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZSYmci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZS5lbmNhcHN1bGF0aW9uPT09WC5OYXRpdmU/SW4odCxuLnJlbmRlclBhcmVudC5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ6dm9pZCAwOmV9dmFyIGFyPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHNyKHQpe3ZhciBlPWFyLmdldCh0KTtyZXR1cm4gZXx8KChlPXQoZnVuY3Rpb24oKXtyZXR1cm4gTG59KSkuZmFjdG9yeT10LGFyLnNldCh0LGUpKSxlfWZ1bmN0aW9uIHVyKHQsZSxuLHIsaSl7Mz09PWUmJihuPXQucmVuZGVyZXIucGFyZW50Tm9kZShKbih0LHQuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSkpKSxscih0LGUsMCx0LmRlZi5ub2Rlcy5sZW5ndGgtMSxuLHIsaSl9ZnVuY3Rpb24gbHIodCxlLG4scixpLG8sYSl7Zm9yKHZhciBzPW47czw9cjtzKyspe3ZhciB1PXQuZGVmLm5vZGVzW3NdOzExJnUuZmxhZ3MmJmZyKHQsdSxlLGksbyxhKSxzKz11LmNoaWxkQ291bnR9fWZ1bmN0aW9uIGNyKHQsZSxuLHIsaSxvKXtmb3IodmFyIGE9dDthJiYhdHIoYSk7KWE9YS5wYXJlbnQ7Zm9yKHZhciBzPWEucGFyZW50LHU9JG4oYSksbD11Lm5vZGVJbmRleCt1LmNoaWxkQ291bnQsYz11Lm5vZGVJbmRleCsxO2M8PWw7YysrKXt2YXIgZj1zLmRlZi5ub2Rlc1tjXTtmLm5nQ29udGVudEluZGV4PT09ZSYmZnIocyxmLG4scixpLG8pLGMrPWYuY2hpbGRDb3VudH1pZighcy5wYXJlbnQpe3ZhciBoPXQucm9vdC5wcm9qZWN0YWJsZU5vZGVzW2VdO2lmKGgpZm9yKGM9MDtjPGgubGVuZ3RoO2MrKylocih0LGhbY10sbixyLGksbyl9fWZ1bmN0aW9uIGZyKHQsZSxuLHIsaSxvKXtpZig4JmUuZmxhZ3MpY3IodCxlLm5nQ29udGVudC5pbmRleCxuLHIsaSxvKTtlbHNle3ZhciBhPUpuKHQsZSk7aWYoMz09PW4mJjMzNTU0NDMyJmUuZmxhZ3MmJjQ4JmUuYmluZGluZ0ZsYWdzPygxNiZlLmJpbmRpbmdGbGFncyYmaHIodCxhLG4scixpLG8pLDMyJmUuYmluZGluZ0ZsYWdzJiZocihJbih0LGUubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEsbixyLGksbykpOmhyKHQsYSxuLHIsaSxvKSwxNjc3NzIxNiZlLmZsYWdzKWZvcih2YXIgcz1Jbih0LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLHU9MDt1PHMubGVuZ3RoO3UrKyl1cihzW3VdLG4scixpLG8pOzEmZS5mbGFncyYmIWUuZWxlbWVudC5uYW1lJiZscih0LG4sZS5ub2RlSW5kZXgrMSxlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQscixpLG8pfX1mdW5jdGlvbiBocih0LGUsbixyLGksbyl7dmFyIGE9dC5yZW5kZXJlcjtzd2l0Y2gobil7Y2FzZSAxOmEuYXBwZW5kQ2hpbGQocixlKTticmVhaztjYXNlIDI6YS5pbnNlcnRCZWZvcmUocixlLGkpO2JyZWFrO2Nhc2UgMzphLnJlbW92ZUNoaWxkKHIsZSk7YnJlYWs7Y2FzZSAwOm8ucHVzaChlKX19dmFyIGRyPS9eOihbXjpdKyk6KC4rKSQvO2Z1bmN0aW9uIHByKHQpe2lmKCI6Ij09PXRbMF0pe3ZhciBlPXQubWF0Y2goZHIpO3JldHVybltlWzFdLGVbMl1dfXJldHVyblsiIix0XX1mdW5jdGlvbiBtcih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZXw9dFtuXS5mbGFncztyZXR1cm4gZX1mdW5jdGlvbiB5cih0LGUsbixyLGksbyxhLHMsdSxsLGMsZixoLGQscCxtLHksZyx2LGIpe3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIGUrZ3IobikrcjtjYXNlIDI6cmV0dXJuIGUrZ3IobikrcitncihpKStvO2Nhc2UgMzpyZXR1cm4gZStncihuKStyK2dyKGkpK28rZ3IoYSkrcztjYXNlIDQ6cmV0dXJuIGUrZ3IobikrcitncihpKStvK2dyKGEpK3MrZ3IodSkrbDtjYXNlIDU6cmV0dXJuIGUrZ3IobikrcitncihpKStvK2dyKGEpK3MrZ3IodSkrbCtncihjKStmO2Nhc2UgNjpyZXR1cm4gZStncihuKStyK2dyKGkpK28rZ3IoYSkrcytncih1KStsK2dyKGMpK2YrZ3IoaCkrZDtjYXNlIDc6cmV0dXJuIGUrZ3IobikrcitncihpKStvK2dyKGEpK3MrZ3IodSkrbCtncihjKStmK2dyKGgpK2QrZ3IocCkrbTtjYXNlIDg6cmV0dXJuIGUrZ3IobikrcitncihpKStvK2dyKGEpK3MrZ3IodSkrbCtncihjKStmK2dyKGgpK2QrZ3IocCkrbStncih5KStnO2Nhc2UgOTpyZXR1cm4gZStncihuKStyK2dyKGkpK28rZ3IoYSkrcytncih1KStsK2dyKGMpK2YrZ3IoaCkrZCtncihwKSttK2dyKHkpK2crZ3IodikrYjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRG9lcyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gOSBleHByZXNzaW9ucyIpfX1mdW5jdGlvbiBncih0KXtyZXR1cm4gbnVsbCE9dD90LnRvU3RyaW5nKCk6IiJ9ZnVuY3Rpb24gdnIodCxlLG4scixpLG8pe3R8PTE7dmFyIGE9cnIoZSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsZmxhZ3M6dCxjaGVja0luZGV4Oi0xLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmEubWF0Y2hlZFF1ZXJpZXMsbWF0Y2hlZFF1ZXJ5SWRzOmEubWF0Y2hlZFF1ZXJ5SWRzLHJlZmVyZW5jZXM6YS5yZWZlcmVuY2VzLG5nQ29udGVudEluZGV4Om4sY2hpbGRDb3VudDpyLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDp7bnM6bnVsbCxuYW1lOm51bGwsYXR0cnM6bnVsbCx0ZW1wbGF0ZTpvP3NyKG8pOm51bGwsY29tcG9uZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3Om51bGwsY29tcG9uZW50UmVuZGVyZXJUeXBlOm51bGwscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6aXx8TG59LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIGJyKHQsZSxuLGksbyxhLHMsdSxsLGMsZixoKXt2b2lkIDA9PT1zJiYocz1bXSksY3x8KGM9TG4pO3ZhciBkPXJyKG4pLHA9ZC5tYXRjaGVkUXVlcmllcyxtPWQucmVmZXJlbmNlcyx5PWQubWF0Y2hlZFF1ZXJ5SWRzLGc9bnVsbCx2PW51bGw7YSYmKGc9KFA9T2JqZWN0KHIuYykocHIoYSksMikpWzBdLHY9UFsxXSksdT11fHxbXTtmb3IodmFyIGI9bmV3IEFycmF5KHUubGVuZ3RoKSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PU9iamVjdChyLmMpKHVbX10sMykseD13WzBdLE89d1sxXSxDPXdbMl0sUz1PYmplY3Qoci5jKShwcihPKSwyKSxFPVNbMF0saz1TWzFdLFQ9dm9pZCAwLEk9dm9pZCAwO3N3aXRjaCgxNSZ4KXtjYXNlIDQ6ST1DO2JyZWFrO2Nhc2UgMTpjYXNlIDg6VD1DfWJbX109e2ZsYWdzOngsbnM6RSxuYW1lOmssbm9uTWluaWZpZWROYW1lOmssc2VjdXJpdHlDb250ZXh0OlQsc3VmZml4Okl9fWw9bHx8W107dmFyIEE9bmV3IEFycmF5KGwubGVuZ3RoKTtmb3IoXz0wO188bC5sZW5ndGg7XysrKXt2YXIgaj1PYmplY3Qoci5jKShsW19dLDIpO0FbX109e3R5cGU6MCx0YXJnZXQ6alswXSxldmVudE5hbWU6alsxXSxwcm9wTmFtZTpudWxsfX12YXIgUCxNPShzPXN8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHIuYykodCwyKSxuPWVbMF0saT1lWzFdLG89T2JqZWN0KHIuYykocHIobiksMik7cmV0dXJuW29bMF0sb1sxXSxpXX0pO3JldHVybiBoPWZ1bmN0aW9uKHQpe2lmKHQmJnQuaWQ9PT16bil7dmFyIGU9bnVsbCE9dC5lbmNhcHN1bGF0aW9uJiZ0LmVuY2Fwc3VsYXRpb24hPT1YLk5vbmV8fHQuc3R5bGVzLmxlbmd0aHx8T2JqZWN0LmtleXModC5kYXRhKS5sZW5ndGg7dC5pZD1lPyJjIitXbisrOkJufXJldHVybiB0JiZ0LmlkPT09Qm4mJih0PW51bGwpLHR8fG51bGx9KGgpLGYmJihlfD0zMzU1NDQzMikse25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOmV8PTEsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6cCxtYXRjaGVkUXVlcnlJZHM6eSxyZWZlcmVuY2VzOm0sbmdDb250ZW50SW5kZXg6aSxjaGlsZENvdW50Om8sYmluZGluZ3M6YixiaW5kaW5nRmxhZ3M6bXIoYiksb3V0cHV0czpBLGVsZW1lbnQ6e25zOmcsbmFtZTp2LGF0dHJzOk0sdGVtcGxhdGU6bnVsbCxjb21wb25lbnRQcm92aWRlcjpudWxsLGNvbXBvbmVudFZpZXc6Znx8bnVsbCxjb21wb25lbnRSZW5kZXJlclR5cGU6aCxwdWJsaWNQcm92aWRlcnM6bnVsbCxhbGxQcm92aWRlcnM6bnVsbCxoYW5kbGVFdmVudDpjfHxMbn0scHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gX3IodCxlLG4pe3ZhciBpLG89bi5lbGVtZW50LGE9dC5yb290LnNlbGVjdG9yT3JOb2RlLHM9dC5yZW5kZXJlcjtpZih0LnBhcmVudHx8IWEpe2k9by5uYW1lP3MuY3JlYXRlRWxlbWVudChvLm5hbWUsby5ucyk6cy5jcmVhdGVDb21tZW50KCIiKTt2YXIgdT1vcih0LGUsbik7dSYmcy5hcHBlbmRDaGlsZCh1LGkpfWVsc2UgaT1zLnNlbGVjdFJvb3RFbGVtZW50KGEpO2lmKG8uYXR0cnMpZm9yKHZhciBsPTA7bDxvLmF0dHJzLmxlbmd0aDtsKyspe3ZhciBjPU9iamVjdChyLmMpKG8uYXR0cnNbbF0sMyk7cy5zZXRBdHRyaWJ1dGUoaSxjWzFdLGNbMl0sY1swXSl9cmV0dXJuIGl9ZnVuY3Rpb24gd3IodCxlLG4scil7Zm9yKHZhciBpPTA7aTxuLm91dHB1dHMubGVuZ3RoO2krKyl7dmFyIG89bi5vdXRwdXRzW2ldLGE9eHIodCxuLm5vZGVJbmRleCwoZj1vLmV2ZW50TmFtZSwoYz1vLnRhcmdldCk/YysiOiIrZjpmKSkscz1vLnRhcmdldCx1PXQ7ImNvbXBvbmVudCI9PT1vLnRhcmdldCYmKHM9bnVsbCx1PWUpO3ZhciBsPXUucmVuZGVyZXIubGlzdGVuKHN8fHIsby5ldmVudE5hbWUsYSk7dC5kaXNwb3NhYmxlc1tuLm91dHB1dEluZGV4K2ldPWx9dmFyIGMsZn1mdW5jdGlvbiB4cih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBabih0LGUsbixyKX19ZnVuY3Rpb24gT3IodCxlLG4scil7aWYoIVluKHQsZSxuLHIpKXJldHVybiExO3ZhciBpPWUuYmluZGluZ3Nbbl0sbz1Jbih0LGUubm9kZUluZGV4KSxhPW8ucmVuZGVyRWxlbWVudCxzPWkubmFtZTtzd2l0Y2goMTUmaS5mbGFncyl7Y2FzZSAxOiFmdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9ZS5zZWN1cml0eUNvbnRleHQscz1hP3Qucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoYSxvKTpvO3M9bnVsbCE9cz9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgdT10LnJlbmRlcmVyO251bGwhPW8/dS5zZXRBdHRyaWJ1dGUobixpLHMscik6dS5yZW1vdmVBdHRyaWJ1dGUobixpLHIpfSh0LGksYSxpLm5zLHMscik7YnJlYWs7Y2FzZSAyOiFmdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LnJlbmRlcmVyO3I/aS5hZGRDbGFzcyhlLG4pOmkucmVtb3ZlQ2xhc3MoZSxuKX0odCxhLHMscik7YnJlYWs7Y2FzZSA0OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXQucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoQ24uU1RZTEUsaSk7aWYobnVsbCE9byl7bz1vLnRvU3RyaW5nKCk7dmFyIGE9ZS5zdWZmaXg7bnVsbCE9YSYmKG8rPWEpfWVsc2Ugbz1udWxsO3ZhciBzPXQucmVuZGVyZXI7bnVsbCE9bz9zLnNldFN0eWxlKG4scixvKTpzLnJlbW92ZVN0eWxlKG4scil9KHQsaSxhLHMscik7YnJlYWs7Y2FzZSA4OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPWUuc2VjdXJpdHlDb250ZXh0LGE9bz90LnJvb3Quc2FuaXRpemVyLnNhbml0aXplKG8saSk6aTt0LnJlbmRlcmVyLnNldFByb3BlcnR5KG4scixhKX0oMzM1NTQ0MzImZS5mbGFncyYmMzImaS5mbGFncz9vLmNvbXBvbmVudFZpZXc6dCxpLGEscyxyKX1yZXR1cm4hMH12YXIgQ3I9bmV3IE9iamVjdCxTcj1WbihOKSxFcj1WbihQKSxrcj1WbihqdCk7ZnVuY3Rpb24gVHIodCxlLG4scil7cmV0dXJuIG49UyhuKSx7aW5kZXg6LTEsZGVwczppcihyLE8oZSkpLGZsYWdzOnQsdG9rZW46ZSx2YWx1ZTpufX1mdW5jdGlvbiBJcih0KXtmb3IodmFyIGU9e30sbj1bXSxyPSExLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtvLnRva2VuPT09c3QmJihyPSEwKSwxMDczNzQxODI0Jm8uZmxhZ3MmJm4ucHVzaChvLnRva2VuKSxvLmluZGV4PWksZVtWbihvLnRva2VuKV09b31yZXR1cm57ZmFjdG9yeTpudWxsLHByb3ZpZGVyc0J5S2V5OmUscHJvdmlkZXJzOnQsbW9kdWxlczpuLGlzUm9vdDpyfX1mdW5jdGlvbiBBcih0LGUsbil7dm9pZCAwPT09biYmKG49Ti5USFJPV19JRl9OT1RfRk9VTkQpO3ZhciByLGksbz1LKHQpO3RyeXtpZig4JmUuZmxhZ3MpcmV0dXJuIGUudG9rZW47aWYoMiZlLmZsYWdzJiYobj1udWxsKSwxJmUuZmxhZ3MpcmV0dXJuIHQuX3BhcmVudC5nZXQoZS50b2tlbixuKTt2YXIgYT1lLnRva2VuS2V5O3N3aXRjaChhKXtjYXNlIFNyOmNhc2UgRXI6Y2FzZSBrcjpyZXR1cm4gdH12YXIgcz10Ll9kZWYucHJvdmlkZXJzQnlLZXlbYV07aWYocyl7dmFyIHU9dC5fcHJvdmlkZXJzW3MuaW5kZXhdO3JldHVybiB2b2lkIDA9PT11JiYodT10Ll9wcm92aWRlcnNbcy5pbmRleF09anIodCxzKSksdT09PUNyP3ZvaWQgMDp1fWlmKGUudG9rZW4ubmdJbmplY3RhYmxlRGVmJiYocj10LG51bGwhPShpPWUudG9rZW4ubmdJbmplY3RhYmxlRGVmKS5wcm92aWRlZEluJiYoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fZGVmLm1vZHVsZXMuaW5kZXhPZihpLnByb3ZpZGVkSW4pPi0xfShyKXx8InJvb3QiPT09aS5wcm92aWRlZEluJiZyLl9kZWYuaXNSb290KSkpe3ZhciBsPXQuX3Byb3ZpZGVycy5sZW5ndGg7cmV0dXJuIHQuX2RlZi5wcm92aWRlcnNCeUtleVtlLnRva2VuS2V5XT17ZmxhZ3M6NTEyMCx2YWx1ZTplLnRva2VuLm5nSW5qZWN0YWJsZURlZi5mYWN0b3J5LGRlcHM6W10saW5kZXg6bCx0b2tlbjplLnRva2VufSx0Ll9wcm92aWRlcnNbbF09Q3IsdC5fcHJvdmlkZXJzW2xdPWpyKHQsdC5fZGVmLnByb3ZpZGVyc0J5S2V5W2UudG9rZW5LZXldKX1yZXR1cm4gNCZlLmZsYWdzP246dC5fcGFyZW50LmdldChlLnRva2VuLG4pfWZpbmFsbHl7SyhvKX19ZnVuY3Rpb24ganIodCxlKXt2YXIgbjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOm49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4ubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUoQXIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBuZXcgZShBcih0LG5bMF0pLEFyKHQsblsxXSkpO2Nhc2UgMzpyZXR1cm4gbmV3IGUoQXIodCxuWzBdKSxBcih0LG5bMV0pLEFyKHQsblsyXSkpO2RlZmF1bHQ6Zm9yKHZhciBvPW5ldyBBcnJheShpKSxhPTA7YTxpO2ErKylvW2FdPUFyKHQsblthXSk7cmV0dXJuIG5ldyhlLmJpbmQuYXBwbHkoZSxPYmplY3Qoci5kKShbdm9pZCAwXSxvKSkpfX0odCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAxMDI0Om49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4ubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIGUoKTtjYXNlIDE6cmV0dXJuIGUoQXIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBlKEFyKHQsblswXSksQXIodCxuWzFdKSk7Y2FzZSAzOnJldHVybiBlKEFyKHQsblswXSksQXIodCxuWzFdKSxBcih0LG5bMl0pKTtkZWZhdWx0OmZvcih2YXIgbz1BcnJheShpKSxhPTA7YTxpO2ErKylvW2FdPUFyKHQsblthXSk7cmV0dXJuIGUuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKG8pKX19KHQsZS52YWx1ZSxlLmRlcHMpO2JyZWFrO2Nhc2UgMjA0ODpuPUFyKHQsZS5kZXBzWzBdKTticmVhaztjYXNlIDI1NjpuPWUudmFsdWV9cmV0dXJuIG49PT1Dcnx8bnVsbD09bnx8Im9iamVjdCIhPXR5cGVvZiBufHwxMzEwNzImZS5mbGFnc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIG4ubmdPbkRlc3Ryb3l8fChlLmZsYWdzfD0xMzEwNzIpLHZvaWQgMD09PW4/Q3I6bn1mdW5jdGlvbiBQcih0LGUpe3ZhciBuPXQudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cztpZigobnVsbD09ZXx8ZT49bi5sZW5ndGgpJiYoZT1uLmxlbmd0aC0xKSxlPDApcmV0dXJuIG51bGw7dmFyIHI9bltlXTtyZXR1cm4gci52aWV3Q29udGFpbmVyUGFyZW50PW51bGwsRHIobixlKSxNbi5kaXJ0eVBhcmVudFF1ZXJpZXMociksTnIocikscn1mdW5jdGlvbiBNcih0LGUsbil7dmFyIHI9ZT9KbihlLGUuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSk6dC5yZW5kZXJFbGVtZW50O3VyKG4sMixuLnJlbmRlcmVyLnBhcmVudE5vZGUociksbi5yZW5kZXJlci5uZXh0U2libGluZyhyKSx2b2lkIDApfWZ1bmN0aW9uIE5yKHQpe3VyKHQsMyxudWxsLG51bGwsdm9pZCAwKX1mdW5jdGlvbiBScih0LGUsbil7ZT49dC5sZW5ndGg/dC5wdXNoKG4pOnQuc3BsaWNlKGUsMCxuKX1mdW5jdGlvbiBEcih0LGUpe2U+PXQubGVuZ3RoLTE/dC5wb3AoKTp0LnNwbGljZShlLDEpfXZhciBMcj1uZXcgT2JqZWN0O2Z1bmN0aW9uIEZyKHQsZSxuLHIsaSxvKXtyZXR1cm4gbmV3IFZyKHQsZSxuLHIsaSxvKX12YXIgVnI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8sYSl7dmFyIHM9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBzLnNlbGVjdG9yPWUscy5jb21wb25lbnRUeXBlPW4scy5faW5wdXRzPWkscy5fb3V0cHV0cz1vLHMubmdDb250ZW50U2VsZWN0b3JzPWEscy52aWV3RGVmRmFjdG9yeT1yLHN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbnB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuX2lucHV0cztmb3IodmFyIG4gaW4gZSl0LnB1c2goe3Byb3BOYW1lOm4sdGVtcGxhdGVOYW1lOmVbbl19KTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm91dHB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fb3V0cHV0cyl0LnB1c2goe3Byb3BOYW1lOmUsdGVtcGxhdGVOYW1lOnRoaXMuX291dHB1dHNbZV19KTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4scil7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJuZ01vZHVsZSBzaG91bGQgYmUgcHJvdmlkZWQiKTt2YXIgaT1zcih0aGlzLnZpZXdEZWZGYWN0b3J5KSxvPWkubm9kZXNbMF0uZWxlbWVudC5jb21wb25lbnRQcm92aWRlci5ub2RlSW5kZXgsYT1Nbi5jcmVhdGVSb290Vmlldyh0LGV8fFtdLG4saSxyLExyKSxzPUFuKGEsbykuaW5zdGFuY2U7cmV0dXJuIG4mJmEucmVuZGVyZXIuc2V0QXR0cmlidXRlKEluKGEsMCkucmVuZGVyRWxlbWVudCwibmctdmVyc2lvbiIsSi5mdWxsKSxuZXcgVXIoYSxuZXcgV3IoYSkscyl9LGV9KHh0KSxVcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3ZpZXc9ZSxpLl92aWV3UmVmPW4saS5fY29tcG9uZW50PXIsaS5fZWxEZWY9aS5fdmlldy5kZWYubm9kZXNbMF0saS5ob3N0Vmlldz1uLGkuY2hhbmdlRGV0ZWN0b3JSZWY9bixpLmluc3RhbmNlPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjZShJbih0aGlzLl92aWV3LHRoaXMuX2VsRGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgUXIodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb21wb25lbnRUeXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudC5jb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld1JlZi5kZXN0cm95KCl9LGUucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3UmVmLm9uRGVzdHJveSh0KX0sZX0oZnVuY3Rpb24oKXt9KTtmdW5jdGlvbiB6cih0LGUsbil7cmV0dXJuIG5ldyBCcih0LGUsbil9dmFyIEJyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlldz10LHRoaXMuX2VsRGVmPWUsdGhpcy5fZGF0YT1uLHRoaXMuX2VtYmVkZGVkVmlld3M9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgY2UodGhpcy5fZGF0YS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRcih0aGlzLl92aWV3LHRoaXMuX2VsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudEluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZpZXcsZT10aGlzLl9lbERlZi5wYXJlbnQ7IWUmJnQ7KWU9JG4odCksdD10LnBhcmVudDtyZXR1cm4gdD9uZXcgUXIodCxlKTpuZXcgUXIodGhpcy5fdmlldyxudWxsKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9lbWJlZGRlZFZpZXdzLmxlbmd0aC0xO3Q+PTA7dC0tKXt2YXIgZT1Qcih0aGlzLl9kYXRhLHQpO01uLmRlc3Ryb3lWaWV3KGUpfX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2VtYmVkZGVkVmlld3NbdF07aWYoZSl7dmFyIG49bmV3IFdyKGUpO3JldHVybiBuLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSxufXJldHVybiBudWxsfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbWJlZGRlZFZpZXdzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuY3JlYXRlRW1iZWRkZWRWaWV3KGV8fHt9KTtyZXR1cm4gdGhpcy5pbnNlcnQocixuKSxyfSx0LnByb3RvdHlwZS5jcmVhdGVDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz1ufHx0aGlzLnBhcmVudEluamVjdG9yO2l8fHQgaW5zdGFuY2VvZiBBdHx8KGk9by5nZXQoanQpKTt2YXIgYT10LmNyZWF0ZShvLHIsdm9pZCAwLGkpO3JldHVybiB0aGlzLmluc2VydChhLmhvc3RWaWV3LGUpLGF9LHQucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUpe2lmKHQuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGluc2VydCBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLGksbyxhPXQ7cmV0dXJuIGk9YS5fdmlldyxvPShuPXRoaXMuX2RhdGEpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsbnVsbCE9PShyPWUpJiZ2b2lkIDAhPT1yfHwocj1vLmxlbmd0aCksaS52aWV3Q29udGFpbmVyUGFyZW50PXRoaXMuX3ZpZXcsUnIobyxyLGkpLGZ1bmN0aW9uKHQsZSl7dmFyIG49WG4oZSk7aWYobiYmbiE9PXQmJiEoMTYmZS5zdGF0ZSkpe2Uuc3RhdGV8PTE2O3ZhciByPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO3J8fChyPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzPVtdKSxyLnB1c2goZSksZnVuY3Rpb24odCxuKXtpZighKDQmbi5mbGFncykpe2UucGFyZW50LmRlZi5ub2RlRmxhZ3N8PTQsbi5mbGFnc3w9NDtmb3IodmFyIHI9bi5wYXJlbnQ7cjspci5jaGlsZEZsYWdzfD00LHI9ci5wYXJlbnR9fSgwLGUucGFyZW50Tm9kZURlZil9fShuLGkpLE1uLmRpcnR5UGFyZW50UXVlcmllcyhpKSxNcihuLHI+MD9vW3ItMV06bnVsbCxpKSxhLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSx0fSx0LnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKHQsZSl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbW92ZSBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLGksbyxhLHM9dGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpO3JldHVybiBpPWUsYT0obz0obj10aGlzLl9kYXRhKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzKVtyPXNdLERyKG8sciksbnVsbD09aSYmKGk9by5sZW5ndGgpLFJyKG8saSxhKSxNbi5kaXJ0eVBhcmVudFF1ZXJpZXMoYSksTnIoYSksTXIobixpPjA/b1tpLTFdOm51bGwsYSksdH0sdC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9UHIodGhpcy5fZGF0YSx0KTtlJiZNbi5kZXN0cm95VmlldyhlKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPVByKHRoaXMuX2RhdGEsdCk7cmV0dXJuIGU/bmV3IFdyKGUpOm51bGx9LHR9KCk7ZnVuY3Rpb24gSHIodCl7cmV0dXJuIG5ldyBXcih0KX12YXIgV3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3ZpZXc9dCx0aGlzLl92aWV3Q29udGFpbmVyUmVmPW51bGwsdGhpcy5fYXBwUmVmPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdE5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVyKHRoaXMuX3ZpZXcsMCx2b2lkIDAsdm9pZCAwLHQ9W10pLHQ7dmFyIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXcuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiAwIT0oMTI4JnRoaXMuX3ZpZXcuc3RhdGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpe1FuKHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LnN0YXRlJj0tNX0sdC5wcm90b3R5cGUuZGV0ZWN0Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ZpZXcucm9vdC5yZW5kZXJlckZhY3Rvcnk7dC5iZWdpbiYmdC5iZWdpbigpO3RyeXtNbi5jaGVja0FuZFVwZGF0ZVZpZXcodGhpcy5fdmlldyl9ZmluYWxseXt0LmVuZCYmdC5lbmQoKX19LHQucHJvdG90eXBlLmNoZWNrTm9DaGFuZ2VzPWZ1bmN0aW9uKCl7TW4uY2hlY2tOb0NoYW5nZXNWaWV3KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZWF0dGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuc3RhdGV8PTR9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3LmRpc3Bvc2FibGVzfHwodGhpcy5fdmlldy5kaXNwb3NhYmxlcz1bXSksdGhpcy5fdmlldy5kaXNwb3NhYmxlcy5wdXNoKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fYXBwUmVmP3RoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpOnRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX3ZpZXdDb250YWluZXJSZWYuZGV0YWNoKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzKSksTW4uZGVzdHJveVZpZXcodGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmRldGFjaEZyb21BcHBSZWY9ZnVuY3Rpb24oKXt0aGlzLl9hcHBSZWY9bnVsbCxOcih0aGlzLl92aWV3KSxNbi5kaXJ0eVBhcmVudFF1ZXJpZXModGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmF0dGFjaFRvQXBwUmVmPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhIFZpZXdDb250YWluZXIhIik7dGhpcy5fYXBwUmVmPXR9LHQucHJvdG90eXBlLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZj1mdW5jdGlvbih0KXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgQXBwbGljYXRpb25SZWYhIik7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10fSx0fSgpO2Z1bmN0aW9uIHFyKHQsZSl7cmV0dXJuIG5ldyBZcih0LGUpfXZhciBZcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9wYXJlbnRWaWV3PWUsci5fZGVmPW4scn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBXcihNbi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fcGFyZW50Vmlldyx0aGlzLl9kZWYsdGhpcy5fZGVmLmVsZW1lbnQudGVtcGxhdGUsdCkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVsZW1lbnRSZWYiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGNlKEluKHRoaXMuX3BhcmVudFZpZXcsdGhpcy5fZGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oZ2UpO2Z1bmN0aW9uIEdyKHQsZSl7cmV0dXJuIG5ldyBRcih0LGUpfXZhciBRcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLmVsRGVmPWV9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1OLlRIUk9XX0lGX05PVF9GT1VORCksTW4ucmVzb2x2ZURlcCh0aGlzLnZpZXcsdGhpcy5lbERlZiwhIXRoaXMuZWxEZWYmJjAhPSgzMzU1NDQzMiZ0aGlzLmVsRGVmLmZsYWdzKSx7ZmxhZ3M6MCx0b2tlbjp0LHRva2VuS2V5OlZuKHQpfSxlKX0sdH0oKTtmdW5jdGlvbiBLcih0LGUpe3ZhciBuPXQuZGVmLm5vZGVzW2VdO2lmKDEmbi5mbGFncyl7dmFyIHI9SW4odCxuLm5vZGVJbmRleCk7cmV0dXJuIG4uZWxlbWVudC50ZW1wbGF0ZT9yLnRlbXBsYXRlOnIucmVuZGVyRWxlbWVudH1pZigyJm4uZmxhZ3MpcmV0dXJuIFRuKHQsbi5ub2RlSW5kZXgpLnJlbmRlclRleHQ7aWYoMjAyNDAmbi5mbGFncylyZXR1cm4gQW4odCxuLm5vZGVJbmRleCkuaW5zdGFuY2U7dGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIHN0YXRlOiByZWFkIG5vZGVWYWx1ZSBmb3Igbm9kZSBpbmRleCAiK2UpfWZ1bmN0aW9uIFpyKHQpe3JldHVybiBuZXcgWHIodC5yZW5kZXJlcil9dmFyIFhyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0KHIuYykocHIoZSksMiksaT10aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQoblsxXSxuWzBdKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGkpLGl9LHQucHJvdG90eXBlLmNyZWF0ZVZpZXdSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVUZW1wbGF0ZUFuY2hvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQoIiIpO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksZX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChlKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LG4pLG59LHQucHJvdG90eXBlLnByb2plY3ROb2Rlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlW25dKX0sdC5wcm90b3R5cGUuYXR0YWNoVmlld0FmdGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KSxyPXRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCksaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKG4sZVtpXSxyKX0sdC5wcm90b3R5cGUuZGV0YWNoVmlldz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXSxyPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShuKTt0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHIsbil9fSx0LnByb3RvdHlwZS5kZXN0cm95Vmlldz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUoZVtuXSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuR2xvYmFsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1PYmplY3Qoci5jKShwcihlKSwyKSxvPWlbMF0sYT1pWzFdO251bGwhPW4/dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxhLG4sbyk6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxhLG8pfSx0LnByb3RvdHlwZS5zZXRCaW5kaW5nRGVidWdJbmZvPWZ1bmN0aW9uKHQsZSxuKXt9LHQucHJvdG90eXBlLnNldEVsZW1lbnRDbGFzcz1mdW5jdGlvbih0LGUsbil7bj90aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSk6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50U3R5bGU9ZnVuY3Rpb24odCxlLG4pe251bGwhPW4/dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbik6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUpfSx0LnByb3RvdHlwZS5pbnZva2VFbGVtZW50TWV0aG9kPWZ1bmN0aW9uKHQsZSxuKXt0W2VdLmFwcGx5KHQsbil9LHQucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmVyLmFuaW1hdGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCEiKX0sdH0oKTtmdW5jdGlvbiAkcih0LGUsbixyKXtyZXR1cm4gbmV3IEpyKHQsZSxuLHIpfXZhciBKcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fbW9kdWxlVHlwZT10LHRoaXMuX3BhcmVudD1lLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9bix0aGlzLl9kZWY9cix0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLmluamVjdG9yPXRoaXMsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2RlZixuPXQuX3Byb3ZpZGVycz1uZXcgQXJyYXkoZS5wcm92aWRlcnMubGVuZ3RoKSxyPTA7cjxlLnByb3ZpZGVycy5sZW5ndGg7cisrKXt2YXIgaT1lLnByb3ZpZGVyc1tyXTs0MDk2JmkuZmxhZ3N8fHZvaWQgMD09PW5bcl0mJihuW3JdPWpyKHQsaSkpfX0odGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9Ti5USFJPV19JRl9OT1RfRk9VTkQpLHZvaWQgMD09PW4mJihuPTApO3ZhciByPTA7cmV0dXJuIDQmbj9yfD0xOjImbiYmKHJ8PTQpLEFyKHRoaXMse3Rva2VuOnQsdG9rZW5LZXk6Vm4odCksZmxhZ3M6cn0sZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQodGhpcy5fbW9kdWxlVHlwZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoVHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbmcgbW9kdWxlICIrTyh0aGlzLmluc3RhbmNlLmNvbnN0cnVjdG9yKSsiIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiIpO3RoaXMuX2Rlc3Ryb3llZD0hMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Ll9kZWYscj1uZXcgU2V0LGk9MDtpPG4ucHJvdmlkZXJzLmxlbmd0aDtpKyspaWYoMTMxMDcyJm4ucHJvdmlkZXJzW2ldLmZsYWdzKXt2YXIgbz10Ll9wcm92aWRlcnNbaV07aWYobyYmbyE9PUNyKXt2YXIgYT1vLm5nT25EZXN0cm95OyJmdW5jdGlvbiIhPXR5cGVvZiBhfHxyLmhhcyhvKXx8KGEuYXBwbHkobyksci5hZGQobykpfX19KHRoaXMpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LHR9KCksdGk9Vm4oZnVuY3Rpb24oKXt9KSxlaT1WbihmdW5jdGlvbigpe30pLG5pPVZuKGNlKSxyaT1Wbih2ZSksaWk9Vm4oZ2UpLG9pPVZuKGJlKSxhaT1WbihOKSxzaT1WbihQKTtmdW5jdGlvbiB1aSh0LGUsbixpLG8sYSxzLHUpe3ZhciBsPVtdO2lmKHMpZm9yKHZhciBjIGluIHMpe3ZhciBmPU9iamVjdChyLmMpKHNbY10sMik7bFtmWzBdXT17ZmxhZ3M6OCxuYW1lOmMsbm9uTWluaWZpZWROYW1lOmZbMV0sbnM6bnVsbCxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bnVsbH19dmFyIGg9W107aWYodSlmb3IodmFyIGQgaW4gdSloLnB1c2goe3R5cGU6MSxwcm9wTmFtZTpkLHRhcmdldDpudWxsLGV2ZW50TmFtZTp1W2RdfSk7cmV0dXJuIGZpKHQsZXw9MTYzODQsbixpLG8sbyxhLGwsaCl9ZnVuY3Rpb24gbGkodCxlLG4pe3JldHVybiBmaSgtMSx0fD0xNixudWxsLDAsZSxlLG4pfWZ1bmN0aW9uIGNpKHQsZSxuLHIsaSl7cmV0dXJuIGZpKC0xLHQsZSwwLG4scixpKX1mdW5jdGlvbiBmaSh0LGUsbixyLGksbyxhLHMsdSl7dmFyIGw9cnIobiksYz1sLm1hdGNoZWRRdWVyaWVzLGY9bC5yZWZlcmVuY2VzLGg9bC5tYXRjaGVkUXVlcnlJZHM7dXx8KHU9W10pLHN8fChzPVtdKSxvPVMobyk7dmFyIGQ9aXIoYSxPKGkpKTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6ZSxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczpjLG1hdGNoZWRRdWVyeUlkczpoLHJlZmVyZW5jZXM6ZixuZ0NvbnRlbnRJbmRleDotMSxjaGlsZENvdW50OnIsYmluZGluZ3M6cyxiaW5kaW5nRmxhZ3M6bXIocyksb3V0cHV0czp1LGVsZW1lbnQ6bnVsbCxwcm92aWRlcjp7dG9rZW46aSx2YWx1ZTpvLGRlcHM6ZH0sdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIGhpKHQsZSl7cmV0dXJuIHlpKHQsZSl9ZnVuY3Rpb24gZGkodCxlKXtmb3IodmFyIG49dDtuLnBhcmVudCYmIXRyKG4pOyluPW4ucGFyZW50O3JldHVybiBnaShuLnBhcmVudCwkbihuKSwhMCxlLnByb3ZpZGVyLnZhbHVlLGUucHJvdmlkZXIuZGVwcyl9ZnVuY3Rpb24gcGkodCxlKXt2YXIgbj1naSh0LGUucGFyZW50LCgzMjc2OCZlLmZsYWdzKT4wLGUucHJvdmlkZXIudmFsdWUsZS5wcm92aWRlci5kZXBzKTtpZihlLm91dHB1dHMubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5vdXRwdXRzLmxlbmd0aDtyKyspe3ZhciBpPWUub3V0cHV0c1tyXSxvPW5baS5wcm9wTmFtZV0uc3Vic2NyaWJlKG1pKHQsZS5wYXJlbnQubm9kZUluZGV4LGkuZXZlbnROYW1lKSk7dC5kaXNwb3NhYmxlc1tlLm91dHB1dEluZGV4K3JdPW8udW5zdWJzY3JpYmUuYmluZChvKX1yZXR1cm4gbn1mdW5jdGlvbiBtaSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBabih0LGUsbixyKX19ZnVuY3Rpb24geWkodCxlKXt2YXIgbj0oODE5MiZlLmZsYWdzKT4wLGk9ZS5wcm92aWRlcjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOnJldHVybiBnaSh0LGUucGFyZW50LG4saS52YWx1ZSxpLmRlcHMpO2Nhc2UgMTAyNDpyZXR1cm4gZnVuY3Rpb24odCxlLG4saSxvKXt2YXIgYT1vLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBpKCk7Y2FzZSAxOnJldHVybiBpKGJpKHQsZSxuLG9bMF0pKTtjYXNlIDI6cmV0dXJuIGkoYmkodCxlLG4sb1swXSksYmkodCxlLG4sb1sxXSkpO2Nhc2UgMzpyZXR1cm4gaShiaSh0LGUsbixvWzBdKSxiaSh0LGUsbixvWzFdKSxiaSh0LGUsbixvWzJdKSk7ZGVmYXVsdDpmb3IodmFyIHM9QXJyYXkoYSksdT0wO3U8YTt1Kyspc1t1XT1iaSh0LGUsbixvW3VdKTtyZXR1cm4gaS5hcHBseSh2b2lkIDAsT2JqZWN0KHIuZCkocykpfX0odCxlLnBhcmVudCxuLGkudmFsdWUsaS5kZXBzKTtjYXNlIDIwNDg6cmV0dXJuIGJpKHQsZS5wYXJlbnQsbixpLmRlcHNbMF0pO2Nhc2UgMjU2OnJldHVybiBpLnZhbHVlfX1mdW5jdGlvbiBnaSh0LGUsbixpLG8pe3ZhciBhPW8ubGVuZ3RoO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIG5ldyBpO2Nhc2UgMTpyZXR1cm4gbmV3IGkoYmkodCxlLG4sb1swXSkpO2Nhc2UgMjpyZXR1cm4gbmV3IGkoYmkodCxlLG4sb1swXSksYmkodCxlLG4sb1sxXSkpO2Nhc2UgMzpyZXR1cm4gbmV3IGkoYmkodCxlLG4sb1swXSksYmkodCxlLG4sb1sxXSksYmkodCxlLG4sb1syXSkpO2RlZmF1bHQ6Zm9yKHZhciBzPW5ldyBBcnJheShhKSx1PTA7dTxhO3UrKylzW3VdPWJpKHQsZSxuLG9bdV0pO3JldHVybiBuZXcoaS5iaW5kLmFwcGx5KGksT2JqZWN0KHIuZCkoW3ZvaWQgMF0scykpKX19dmFyIHZpPXt9O2Z1bmN0aW9uIGJpKHQsZSxuLHIsaSl7aWYodm9pZCAwPT09aSYmKGk9Ti5USFJPV19JRl9OT1RfRk9VTkQpLDgmci5mbGFncylyZXR1cm4gci50b2tlbjt2YXIgbz10OzImci5mbGFncyYmKGk9bnVsbCk7dmFyIGE9ci50b2tlbktleTthPT09b2kmJihuPSEoIWV8fCFlLmVsZW1lbnQuY29tcG9uZW50VmlldykpLGUmJjEmci5mbGFncyYmKG49ITEsZT1lLnBhcmVudCk7Zm9yKHZhciBzPXQ7czspe2lmKGUpc3dpdGNoKGEpe2Nhc2UgdGk6cmV0dXJuIFpyKF9pKHMsZSxuKSk7Y2FzZSBlaTpyZXR1cm4gX2kocyxlLG4pLnJlbmRlcmVyO2Nhc2Ugbmk6cmV0dXJuIG5ldyBjZShJbihzLGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtjYXNlIHJpOnJldHVybiBJbihzLGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyO2Nhc2UgaWk6aWYoZS5lbGVtZW50LnRlbXBsYXRlKXJldHVybiBJbihzLGUubm9kZUluZGV4KS50ZW1wbGF0ZTticmVhaztjYXNlIG9pOnJldHVybiBIcihfaShzLGUsbikpO2Nhc2UgYWk6Y2FzZSBzaTpyZXR1cm4gR3IocyxlKTtkZWZhdWx0OnZhciB1PShuP2UuZWxlbWVudC5hbGxQcm92aWRlcnM6ZS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycylbYV07aWYodSl7dmFyIGw9QW4ocyx1Lm5vZGVJbmRleCk7cmV0dXJuIGx8fChsPXtpbnN0YW5jZTp5aShzLHUpfSxzLm5vZGVzW3Uubm9kZUluZGV4XT1sKSxsLmluc3RhbmNlfX1uPXRyKHMpLGU9JG4ocykscz1zLnBhcmVudCw0JnIuZmxhZ3MmJihzPW51bGwpfXZhciBjPW8ucm9vdC5pbmplY3Rvci5nZXQoci50b2tlbix2aSk7cmV0dXJuIGMhPT12aXx8aT09PXZpP2M6by5yb290Lm5nTW9kdWxlLmluamVjdG9yLmdldChyLnRva2VuLGkpfWZ1bmN0aW9uIF9pKHQsZSxuKXt2YXIgcjtpZihuKXI9SW4odCxlLm5vZGVJbmRleCkuY29tcG9uZW50VmlldztlbHNlIGZvcihyPXQ7ci5wYXJlbnQmJiF0cihyKTspcj1yLnBhcmVudDtyZXR1cm4gcn1mdW5jdGlvbiB3aSh0LGUsbixyLGksbyl7aWYoMzI3Njgmbi5mbGFncyl7dmFyIGE9SW4odCxuLnBhcmVudC5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXc7MiZhLmRlZi5mbGFncyYmKGEuc3RhdGV8PTgpfWlmKGUuaW5zdGFuY2Vbbi5iaW5kaW5nc1tyXS5uYW1lXT1pLDUyNDI4OCZuLmZsYWdzKXtvPW98fHt9O3ZhciBzPVRlLnVud3JhcCh0Lm9sZFZhbHVlc1tuLmJpbmRpbmdJbmRleCtyXSk7b1tuLmJpbmRpbmdzW3JdLm5vbk1pbmlmaWVkTmFtZV09bmV3IEllKHMsaSwwIT0oMiZ0LnN0YXRlKSl9cmV0dXJuIHQub2xkVmFsdWVzW24uYmluZGluZ0luZGV4K3JdPWksb31mdW5jdGlvbiB4aSh0LGUpe2lmKHQuZGVmLm5vZGVGbGFncyZlKWZvcih2YXIgbj10LmRlZi5ub2RlcyxyPTAsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldLGE9by5wYXJlbnQ7Zm9yKCFhJiZvLmZsYWdzJmUmJkNpKHQsaSxvLmZsYWdzJmUscisrKSwwPT0oby5jaGlsZEZsYWdzJmUpJiYoaSs9by5jaGlsZENvdW50KTthJiYxJmEuZmxhZ3MmJmk9PT1hLm5vZGVJbmRleCthLmNoaWxkQ291bnQ7KWEuZGlyZWN0Q2hpbGRGbGFncyZlJiYocj1PaSh0LGEsZSxyKSksYT1hLnBhcmVudH19ZnVuY3Rpb24gT2kodCxlLG4scil7Zm9yKHZhciBpPWUubm9kZUluZGV4KzE7aTw9ZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50O2krKyl7dmFyIG89dC5kZWYubm9kZXNbaV07by5mbGFncyZuJiZDaSh0LGksby5mbGFncyZuLHIrKyksaSs9by5jaGlsZENvdW50fXJldHVybiByfWZ1bmN0aW9uIENpKHQsZSxuLHIpe3ZhciBpPUFuKHQsZSk7aWYoaSl7dmFyIG89aS5pbnN0YW5jZTtvJiYoTW4uc2V0Q3VycmVudE5vZGUodCxlKSwxMDQ4NTc2Jm4mJmtuKHQsNTEyLHIpJiZvLm5nQWZ0ZXJDb250ZW50SW5pdCgpLDIwOTcxNTImbiYmby5uZ0FmdGVyQ29udGVudENoZWNrZWQoKSw0MTk0MzA0Jm4mJmtuKHQsNzY4LHIpJiZvLm5nQWZ0ZXJWaWV3SW5pdCgpLDgzODg2MDgmbiYmby5uZ0FmdGVyVmlld0NoZWNrZWQoKSwxMzEwNzImbiYmby5uZ09uRGVzdHJveSgpKX19ZnVuY3Rpb24gU2kodCxlLG4pe3ZhciByPVtdO2Zvcih2YXIgaSBpbiBuKXIucHVzaCh7cHJvcE5hbWU6aSxiaW5kaW5nVHlwZTpuW2ldfSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDotMSxmbGFnczp0LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG5nQ29udGVudEluZGV4Oi0xLG1hdGNoZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sY2hpbGRDb3VudDowLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5OntpZDplLGZpbHRlcklkOm5yKGUpLGJpbmRpbmdzOnJ9LG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBFaSh0KXtmb3IodmFyIGU9dC5kZWYubm9kZU1hdGNoZWRRdWVyaWVzO3QucGFyZW50JiZlcih0KTspe3ZhciBuPXQucGFyZW50Tm9kZURlZjt0PXQucGFyZW50O2Zvcih2YXIgcj1uLm5vZGVJbmRleCtuLmNoaWxkQ291bnQsaT0wO2k8PXI7aSsrKTY3MTA4ODY0JihvPXQuZGVmLm5vZGVzW2ldKS5mbGFncyYmNTM2ODcwOTEyJm8uZmxhZ3MmJihvLnF1ZXJ5LmZpbHRlcklkJmUpPT09by5xdWVyeS5maWx0ZXJJZCYmUG4odCxpKS5zZXREaXJ0eSgpLCEoMSZvLmZsYWdzJiZpK28uY2hpbGRDb3VudDxuLm5vZGVJbmRleCkmJjY3MTA4ODY0Jm8uY2hpbGRGbGFncyYmNTM2ODcwOTEyJm8uY2hpbGRGbGFnc3x8KGkrPW8uY2hpbGRDb3VudCl9aWYoMTM0MjE3NzI4JnQuZGVmLm5vZGVGbGFncylmb3IoaT0wO2k8dC5kZWYubm9kZXMubGVuZ3RoO2krKyl7dmFyIG87MTM0MjE3NzI4JihvPXQuZGVmLm5vZGVzW2ldKS5mbGFncyYmNTM2ODcwOTEyJm8uZmxhZ3MmJlBuKHQsaSkuc2V0RGlydHkoKSxpKz1vLmNoaWxkQ291bnR9fWZ1bmN0aW9uIGtpKHQsZSl7dmFyIG49UG4odCxlLm5vZGVJbmRleCk7aWYobi5kaXJ0eSl7dmFyIHIsaT12b2lkIDA7aWYoNjcxMDg4NjQmZS5mbGFncyl7dmFyIG89ZS5wYXJlbnQucGFyZW50O2k9VGkodCxvLm5vZGVJbmRleCxvLm5vZGVJbmRleCtvLmNoaWxkQ291bnQsZS5xdWVyeSxbXSkscj1Bbih0LGUucGFyZW50Lm5vZGVJbmRleCkuaW5zdGFuY2V9ZWxzZSAxMzQyMTc3MjgmZS5mbGFncyYmKGk9VGkodCwwLHQuZGVmLm5vZGVzLmxlbmd0aC0xLGUucXVlcnksW10pLHI9dC5jb21wb25lbnQpO24ucmVzZXQoaSk7Zm9yKHZhciBhPWUucXVlcnkuYmluZGluZ3Mscz0hMSx1PTA7dTxhLmxlbmd0aDt1Kyspe3ZhciBsPWFbdV0sYz12b2lkIDA7c3dpdGNoKGwuYmluZGluZ1R5cGUpe2Nhc2UgMDpjPW4uZmlyc3Q7YnJlYWs7Y2FzZSAxOmM9bixzPSEwfXJbbC5wcm9wTmFtZV09Y31zJiZuLm5vdGlmeU9uQ2hhbmdlcygpfX1mdW5jdGlvbiBUaSh0LGUsbixyLGkpe2Zvcih2YXIgbz1lO288PW47bysrKXt2YXIgYT10LmRlZi5ub2Rlc1tvXSxzPWEubWF0Y2hlZFF1ZXJpZXNbci5pZF07aWYobnVsbCE9cyYmaS5wdXNoKElpKHQsYSxzKSksMSZhLmZsYWdzJiZhLmVsZW1lbnQudGVtcGxhdGUmJihhLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzJnIuZmlsdGVySWQpPT09ci5maWx0ZXJJZCl7dmFyIHU9SW4odCxvKTtpZigoYS5jaGlsZE1hdGNoZWRRdWVyaWVzJnIuZmlsdGVySWQpPT09ci5maWx0ZXJJZCYmKFRpKHQsbysxLG8rYS5jaGlsZENvdW50LHIsaSksbys9YS5jaGlsZENvdW50KSwxNjc3NzIxNiZhLmZsYWdzKWZvcih2YXIgbD11LnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgZj1sW2NdLGg9WG4oZik7aCYmaD09PXUmJlRpKGYsMCxmLmRlZi5ub2Rlcy5sZW5ndGgtMSxyLGkpfXZhciBkPXUudGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO2lmKGQpZm9yKGM9MDtjPGQubGVuZ3RoO2MrKyl7dmFyIHA9ZFtjXTtUaShwLDAscC5kZWYubm9kZXMubGVuZ3RoLTEscixpKX19KGEuY2hpbGRNYXRjaGVkUXVlcmllcyZyLmZpbHRlcklkKSE9PXIuZmlsdGVySWQmJihvKz1hLmNoaWxkQ291bnQpfXJldHVybiBpfWZ1bmN0aW9uIElpKHQsZSxuKXtpZihudWxsIT1uKXN3aXRjaChuKXtjYXNlIDE6cmV0dXJuIEluKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAwOnJldHVybiBuZXcgY2UoSW4odCxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCk7Y2FzZSAyOnJldHVybiBJbih0LGUubm9kZUluZGV4KS50ZW1wbGF0ZTtjYXNlIDM6cmV0dXJuIEluKHQsZS5ub2RlSW5kZXgpLnZpZXdDb250YWluZXI7Y2FzZSA0OnJldHVybiBBbih0LGUubm9kZUluZGV4KS5pbnN0YW5jZX19ZnVuY3Rpb24gQWkodCxlKXtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4Oi0xLGZsYWdzOjgsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDp0LGNoaWxkQ291bnQ6MCxiaW5kaW5nczpbXSxiaW5kaW5nRmxhZ3M6MCxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDp7aW5kZXg6ZX19fWZ1bmN0aW9uIGppKHQsZSxuKXt2YXIgcj1vcih0LGUsbik7ciYmY3IodCxuLm5nQ29udGVudC5pbmRleCwxLHIsbnVsbCx2b2lkIDApfWZ1bmN0aW9uIFBpKHQsZSl7cmV0dXJuIFJpKDEyOCx0LG5ldyBBcnJheShlKzEpKX1mdW5jdGlvbiBNaSh0LGUpe3JldHVybiBSaSgzMix0LG5ldyBBcnJheShlKSl9ZnVuY3Rpb24gTmkodCxlKXtmb3IodmFyIG49T2JqZWN0LmtleXMoZSkscj1uLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyO28rKyl7dmFyIGE9bltvXTtpW2VbYV1dPWF9cmV0dXJuIFJpKDY0LHQsaSl9ZnVuY3Rpb24gUmkodCxlLG4pe2Zvcih2YXIgcj1uZXcgQXJyYXkobi5sZW5ndGgpLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXTtyW2ldPXtmbGFnczo4LG5hbWU6byxuczpudWxsLG5vbk1pbmlmaWVkTmFtZTpvLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpudWxsfX1yZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OmUsZmxhZ3M6dCxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4Oi0xLGNoaWxkQ291bnQ6MCxiaW5kaW5nczpyLGJpbmRpbmdGbGFnczptcihyKSxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBEaSh0LGUsbil7Zm9yKHZhciByPW5ldyBBcnJheShuLmxlbmd0aC0xKSxpPTE7aTxuLmxlbmd0aDtpKyspcltpLTFdPXtmbGFnczo4LG5hbWU6bnVsbCxuczpudWxsLG5vbk1pbmlmaWVkTmFtZTpudWxsLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpuW2ldfTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6MixjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4OmUsY2hpbGRDb3VudDowLGJpbmRpbmdzOnIsYmluZGluZ0ZsYWdzOjgsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0OntwcmVmaXg6blswXX0scXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gTGkodCxlLG4pe3ZhciByLGk9dC5yZW5kZXJlcjtyPWkuY3JlYXRlVGV4dChuLnRleHQucHJlZml4KTt2YXIgbz1vcih0LGUsbik7cmV0dXJuIG8mJmkuYXBwZW5kQ2hpbGQobyxyKSx7cmVuZGVyVGV4dDpyfX1mdW5jdGlvbiBGaSh0LGUpe3JldHVybihudWxsIT10P3QudG9TdHJpbmcoKToiIikrZS5zdWZmaXh9ZnVuY3Rpb24gVmkodCxlLG4scil7Zm9yKHZhciBpPTAsbz0wLGE9MCxzPTAsdT0wLGw9bnVsbCxjPW51bGwsZj0hMSxoPSExLGQ9bnVsbCxwPTA7cDxlLmxlbmd0aDtwKyspe3ZhciBtPWVbcF07aWYobS5ub2RlSW5kZXg9cCxtLnBhcmVudD1sLG0uYmluZGluZ0luZGV4PWksbS5vdXRwdXRJbmRleD1vLG0ucmVuZGVyUGFyZW50PWMsYXw9bS5mbGFncyx1fD1tLm1hdGNoZWRRdWVyeUlkcyxtLmVsZW1lbnQpe3ZhciB5PW0uZWxlbWVudDt5LnB1YmxpY1Byb3ZpZGVycz1sP2wuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM6T2JqZWN0LmNyZWF0ZShudWxsKSx5LmFsbFByb3ZpZGVycz15LnB1YmxpY1Byb3ZpZGVycyxmPSExLGg9ITEsbS5lbGVtZW50LnRlbXBsYXRlJiYodXw9bS5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcyl9aWYoemkobCxtLGUubGVuZ3RoKSxpKz1tLmJpbmRpbmdzLmxlbmd0aCxvKz1tLm91dHB1dHMubGVuZ3RoLCFjJiYzJm0uZmxhZ3MmJihkPW0pLDIwMjI0Jm0uZmxhZ3Mpe2Z8fChmPSEwLGwuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM9T2JqZWN0LmNyZWF0ZShsLmVsZW1lbnQucHVibGljUHJvdmlkZXJzKSxsLmVsZW1lbnQuYWxsUHJvdmlkZXJzPWwuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpO3ZhciBnPTAhPSgzMjc2OCZtLmZsYWdzKTswPT0oODE5MiZtLmZsYWdzKXx8Zz9sLmVsZW1lbnQucHVibGljUHJvdmlkZXJzW1ZuKG0ucHJvdmlkZXIudG9rZW4pXT1tOihofHwoaD0hMCxsLmVsZW1lbnQuYWxsUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUobC5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycykpLGwuZWxlbWVudC5hbGxQcm92aWRlcnNbVm4obS5wcm92aWRlci50b2tlbildPW0pLGcmJihsLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXI9bSl9aWYobD8obC5jaGlsZEZsYWdzfD1tLmZsYWdzLGwuZGlyZWN0Q2hpbGRGbGFnc3w9bS5mbGFncyxsLmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PW0ubWF0Y2hlZFF1ZXJ5SWRzLG0uZWxlbWVudCYmbS5lbGVtZW50LnRlbXBsYXRlJiYobC5jaGlsZE1hdGNoZWRRdWVyaWVzfD1tLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzKSk6c3w9bS5mbGFncyxtLmNoaWxkQ291bnQ+MClsPW0sVWkobSl8fChjPW0pO2Vsc2UgZm9yKDtsJiZwPT09bC5ub2RlSW5kZXgrbC5jaGlsZENvdW50Oyl7dmFyIHY9bC5wYXJlbnQ7diYmKHYuY2hpbGRGbGFnc3w9bC5jaGlsZEZsYWdzLHYuY2hpbGRNYXRjaGVkUXVlcmllc3w9bC5jaGlsZE1hdGNoZWRRdWVyaWVzKSxjPShsPXYpJiZVaShsKT9sLnJlbmRlclBhcmVudDpsfX1yZXR1cm57ZmFjdG9yeTpudWxsLG5vZGVGbGFnczphLHJvb3ROb2RlRmxhZ3M6cyxub2RlTWF0Y2hlZFF1ZXJpZXM6dSxmbGFnczp0LG5vZGVzOmUsdXBkYXRlRGlyZWN0aXZlczpufHxMbix1cGRhdGVSZW5kZXJlcjpyfHxMbixoYW5kbGVFdmVudDpmdW5jdGlvbih0LG4scixpKXtyZXR1cm4gZVtuXS5lbGVtZW50LmhhbmRsZUV2ZW50KHQscixpKX0sYmluZGluZ0NvdW50Omksb3V0cHV0Q291bnQ6byxsYXN0UmVuZGVyUm9vdE5vZGU6ZH19ZnVuY3Rpb24gVWkodCl7cmV0dXJuIDAhPSgxJnQuZmxhZ3MpJiZudWxsPT09dC5lbGVtZW50Lm5hbWV9ZnVuY3Rpb24gemkodCxlLG4pe3ZhciByPWUuZWxlbWVudCYmZS5lbGVtZW50LnRlbXBsYXRlO2lmKHIpe2lmKCFyLmxhc3RSZW5kZXJSb290Tm9kZSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IEVtYmVkZGVkIHRlbXBsYXRlcyB3aXRob3V0IG5vZGVzIGFyZSBub3QgYWxsb3dlZCEiKTtpZihyLmxhc3RSZW5kZXJSb290Tm9kZSYmMTY3NzcyMTYmci5sYXN0UmVuZGVyUm9vdE5vZGUuZmxhZ3MpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBMYXN0IHJvb3Qgbm9kZSBvZiBhIHRlbXBsYXRlIGNhbid0IGhhdmUgZW1iZWRkZWQgdmlld3MsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX1pZigyMDIyNCZlLmZsYWdzJiYwPT0oMSYodD90LmZsYWdzOjApKSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IFN0YXRpY1Byb3ZpZGVyL0RpcmVjdGl2ZSBub2RlcyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIGVsZW1lbnRzIG9yIGFuY2hvcnMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKTtpZihlLnF1ZXJ5KXtpZig2NzEwODg2NCZlLmZsYWdzJiYoIXR8fDA9PSgxNjM4NCZ0LmZsYWdzKSkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBDb250ZW50IFF1ZXJ5IG5vZGVzIG5lZWQgdG8gYmUgY2hpbGRyZW4gb2YgZGlyZWN0aXZlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpO2lmKDEzNDIxNzcyOCZlLmZsYWdzJiZ0KXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogVmlldyBRdWVyeSBub2RlcyBoYXZlIHRvIGJlIHRvcCBsZXZlbCBub2RlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfWlmKGUuY2hpbGRDb3VudCl7dmFyIGk9dD90Lm5vZGVJbmRleCt0LmNoaWxkQ291bnQ6bi0xO2lmKGUubm9kZUluZGV4PD1pJiZlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQ+aSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGNoaWxkQ291bnQgb2Ygbm9kZSBsZWFkcyBvdXRzaWRlIG9mIHBhcmVudCwgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfX1mdW5jdGlvbiBCaSh0LGUsbixyKXt2YXIgaT1xaSh0LnJvb3QsdC5yZW5kZXJlcix0LGUsbik7cmV0dXJuIFlpKGksdC5jb21wb25lbnQsciksR2koaSksaX1mdW5jdGlvbiBIaSh0LGUsbil7dmFyIHI9cWkodCx0LnJlbmRlcmVyLG51bGwsbnVsbCxlKTtyZXR1cm4gWWkocixuLG4pLEdpKHIpLHJ9ZnVuY3Rpb24gV2kodCxlLG4scil7dmFyIGksbz1lLmVsZW1lbnQuY29tcG9uZW50UmVuZGVyZXJUeXBlO3JldHVybiBpPW8/dC5yb290LnJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihyLG8pOnQucm9vdC5yZW5kZXJlcixxaSh0LnJvb3QsaSx0LGUuZWxlbWVudC5jb21wb25lbnRQcm92aWRlcixuKX1mdW5jdGlvbiBxaSh0LGUsbixyLGkpe3ZhciBvPW5ldyBBcnJheShpLm5vZGVzLmxlbmd0aCksYT1pLm91dHB1dENvdW50P25ldyBBcnJheShpLm91dHB1dENvdW50KTpudWxsO3JldHVybntkZWY6aSxwYXJlbnQ6bix2aWV3Q29udGFpbmVyUGFyZW50Om51bGwscGFyZW50Tm9kZURlZjpyLGNvbnRleHQ6bnVsbCxjb21wb25lbnQ6bnVsbCxub2RlczpvLHN0YXRlOjEzLHJvb3Q6dCxyZW5kZXJlcjplLG9sZFZhbHVlczpuZXcgQXJyYXkoaS5iaW5kaW5nQ291bnQpLGRpc3Bvc2FibGVzOmEsaW5pdEluZGV4Oi0xfX1mdW5jdGlvbiBZaSh0LGUsbil7dC5jb21wb25lbnQ9ZSx0LmNvbnRleHQ9bn1mdW5jdGlvbiBHaSh0KXt2YXIgZTt0cih0KSYmKGU9SW4odC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLnBhcmVudC5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpO2Zvcih2YXIgbj10LmRlZixyPXQubm9kZXMsaT0wO2k8bi5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgbz1uLm5vZGVzW2ldO01uLnNldEN1cnJlbnROb2RlKHQsaSk7dmFyIGE9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmby5mbGFncyl7Y2FzZSAxOnZhciBzPV9yKHQsZSxvKSx1PXZvaWQgMDtpZigzMzU1NDQzMiZvLmZsYWdzKXt2YXIgbD1zcihvLmVsZW1lbnQuY29tcG9uZW50Vmlldyk7dT1Nbi5jcmVhdGVDb21wb25lbnRWaWV3KHQsbyxsLHMpfXdyKHQsdSxvLHMpLGE9e3JlbmRlckVsZW1lbnQ6cyxjb21wb25lbnRWaWV3OnUsdmlld0NvbnRhaW5lcjpudWxsLHRlbXBsYXRlOm8uZWxlbWVudC50ZW1wbGF0ZT9xcih0LG8pOnZvaWQgMH0sMTY3NzcyMTYmby5mbGFncyYmKGEudmlld0NvbnRhaW5lcj16cih0LG8sYSkpO2JyZWFrO2Nhc2UgMjphPUxpKHQsZSxvKTticmVhaztjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgMjU2OihhPXJbaV0pfHw0MDk2Jm8uZmxhZ3N8fChhPXtpbnN0YW5jZTpoaSh0LG8pfSk7YnJlYWs7Y2FzZSAxNjphPXtpbnN0YW5jZTpkaSh0LG8pfTticmVhaztjYXNlIDE2Mzg0OihhPXJbaV0pfHwoYT17aW5zdGFuY2U6cGkodCxvKX0pLDMyNzY4Jm8uZmxhZ3MmJllpKEluKHQsby5wYXJlbnQubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEuaW5zdGFuY2UsYS5pbnN0YW5jZSk7YnJlYWs7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmE9e3ZhbHVlOnZvaWQgMH07YnJlYWs7Y2FzZSA2NzEwODg2NDpjYXNlIDEzNDIxNzcyODphPW5ldyBoZTticmVhaztjYXNlIDg6amkodCxlLG8pLGE9dm9pZCAwfXJbaV09YX1ubyh0LGVvLkNyZWF0ZVZpZXdOb2RlcyksYW8odCwyMDEzMjY1OTIsMjY4NDM1NDU2LDApfWZ1bmN0aW9uIFFpKHQpe1hpKHQpLE1uLnVwZGF0ZURpcmVjdGl2ZXModCwxKSxybyh0LGVvLkNoZWNrTm9DaGFuZ2VzKSxNbi51cGRhdGVSZW5kZXJlcih0LDEpLG5vKHQsZW8uQ2hlY2tOb0NoYW5nZXMpLHQuc3RhdGUmPS05N31mdW5jdGlvbiBLaSh0KXsxJnQuc3RhdGU/KHQuc3RhdGUmPS0yLHQuc3RhdGV8PTIpOnQuc3RhdGUmPS0zLEVuKHQsMCwyNTYpLFhpKHQpLE1uLnVwZGF0ZURpcmVjdGl2ZXModCwwKSxybyh0LGVvLkNoZWNrQW5kVXBkYXRlKSxhbyh0LDY3MTA4ODY0LDUzNjg3MDkxMiwwKTt2YXIgZT1Fbih0LDI1Niw1MTIpO3hpKHQsMjA5NzE1MnwoZT8xMDQ4NTc2OjApKSxNbi51cGRhdGVSZW5kZXJlcih0LDApLG5vKHQsZW8uQ2hlY2tBbmRVcGRhdGUpLGFvKHQsMTM0MjE3NzI4LDUzNjg3MDkxMiwwKSx4aSh0LDgzODg2MDh8KChlPUVuKHQsNTEyLDc2OCkpPzQxOTQzMDQ6MCkpLDImdC5kZWYuZmxhZ3MmJih0LnN0YXRlJj0tOSksdC5zdGF0ZSY9LTk3LEVuKHQsNzY4LDEwMjQpfWZ1bmN0aW9uIFppKHQsZSxuLGksbyxhLHMsdSxsLGMsZixoLGQpe3JldHVybiAwPT09bj9mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsdSxsLGMsZil7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmKXt2YXIgaD1lLmJpbmRpbmdzLmxlbmd0aCxkPSExO3JldHVybiBoPjAmJk9yKHQsZSwwLG4pJiYoZD0hMCksaD4xJiZPcih0LGUsMSxyKSYmKGQ9ITApLGg+MiYmT3IodCxlLDIsaSkmJihkPSEwKSxoPjMmJk9yKHQsZSwzLG8pJiYoZD0hMCksaD40JiZPcih0LGUsNCxhKSYmKGQ9ITApLGg+NSYmT3IodCxlLDUscykmJihkPSEwKSxoPjYmJk9yKHQsZSw2LHUpJiYoZD0hMCksaD43JiZPcih0LGUsNyxsKSYmKGQ9ITApLGg+OCYmT3IodCxlLDgsYykmJihkPSEwKSxoPjkmJk9yKHQsZSw5LGYpJiYoZD0hMCksZH0odCxlLG4scixpLG8sYSxzLHUsbCxjLGYpO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLHUsbCxjLGYpe3ZhciBoPSExLGQ9ZS5iaW5kaW5ncyxwPWQubGVuZ3RoO2lmKHA+MCYmWW4odCxlLDAsbikmJihoPSEwKSxwPjEmJlluKHQsZSwxLHIpJiYoaD0hMCkscD4yJiZZbih0LGUsMixpKSYmKGg9ITApLHA+MyYmWW4odCxlLDMsbykmJihoPSEwKSxwPjQmJlluKHQsZSw0LGEpJiYoaD0hMCkscD41JiZZbih0LGUsNSxzKSYmKGg9ITApLHA+NiYmWW4odCxlLDYsdSkmJihoPSEwKSxwPjcmJlluKHQsZSw3LGwpJiYoaD0hMCkscD44JiZZbih0LGUsOCxjKSYmKGg9ITApLHA+OSYmWW4odCxlLDksZikmJihoPSEwKSxoKXt2YXIgbT1lLnRleHQucHJlZml4O3A+MCYmKG0rPUZpKG4sZFswXSkpLHA+MSYmKG0rPUZpKHIsZFsxXSkpLHA+MiYmKG0rPUZpKGksZFsyXSkpLHA+MyYmKG0rPUZpKG8sZFszXSkpLHA+NCYmKG0rPUZpKGEsZFs0XSkpLHA+NSYmKG0rPUZpKHMsZFs1XSkpLHA+NiYmKG0rPUZpKHUsZFs2XSkpLHA+NyYmKG0rPUZpKGwsZFs3XSkpLHA+OCYmKG0rPUZpKGMsZFs4XSkpLHA+OSYmKG0rPUZpKGYsZFs5XSkpO3ZhciB5PVRuKHQsZS5ub2RlSW5kZXgpLnJlbmRlclRleHQ7dC5yZW5kZXJlci5zZXRWYWx1ZSh5LG0pfXJldHVybiBofSh0LGUsbixyLGksbyxhLHMsdSxsLGMsZik7Y2FzZSAxNjM4NDpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLHUsbCxjLGYpe3ZhciBoPUFuKHQsZS5ub2RlSW5kZXgpLGQ9aC5pbnN0YW5jZSxwPSExLG09dm9pZCAwLHk9ZS5iaW5kaW5ncy5sZW5ndGg7cmV0dXJuIHk+MCYmcW4odCxlLDAsbikmJihwPSEwLG09d2kodCxoLGUsMCxuLG0pKSx5PjEmJnFuKHQsZSwxLHIpJiYocD0hMCxtPXdpKHQsaCxlLDEscixtKSkseT4yJiZxbih0LGUsMixpKSYmKHA9ITAsbT13aSh0LGgsZSwyLGksbSkpLHk+MyYmcW4odCxlLDMsbykmJihwPSEwLG09d2kodCxoLGUsMyxvLG0pKSx5PjQmJnFuKHQsZSw0LGEpJiYocD0hMCxtPXdpKHQsaCxlLDQsYSxtKSkseT41JiZxbih0LGUsNSxzKSYmKHA9ITAsbT13aSh0LGgsZSw1LHMsbSkpLHk+NiYmcW4odCxlLDYsdSkmJihwPSEwLG09d2kodCxoLGUsNix1LG0pKSx5PjcmJnFuKHQsZSw3LGwpJiYocD0hMCxtPXdpKHQsaCxlLDcsbCxtKSkseT44JiZxbih0LGUsOCxjKSYmKHA9ITAsbT13aSh0LGgsZSw4LGMsbSkpLHk+OSYmcW4odCxlLDksZikmJihwPSEwLG09d2kodCxoLGUsOSxmLG0pKSxtJiZkLm5nT25DaGFuZ2VzKG0pLDY1NTM2JmUuZmxhZ3MmJmtuKHQsMjU2LGUubm9kZUluZGV4KSYmZC5uZ09uSW5pdCgpLDI2MjE0NCZlLmZsYWdzJiZkLm5nRG9DaGVjaygpLHB9KHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmKTtjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmKXt2YXIgaD1lLmJpbmRpbmdzLGQ9ITEscD1oLmxlbmd0aDtpZihwPjAmJlluKHQsZSwwLG4pJiYoZD0hMCkscD4xJiZZbih0LGUsMSxyKSYmKGQ9ITApLHA+MiYmWW4odCxlLDIsaSkmJihkPSEwKSxwPjMmJlluKHQsZSwzLG8pJiYoZD0hMCkscD40JiZZbih0LGUsNCxhKSYmKGQ9ITApLHA+NSYmWW4odCxlLDUscykmJihkPSEwKSxwPjYmJlluKHQsZSw2LHUpJiYoZD0hMCkscD43JiZZbih0LGUsNyxsKSYmKGQ9ITApLHA+OCYmWW4odCxlLDgsYykmJihkPSEwKSxwPjkmJlluKHQsZSw5LGYpJiYoZD0hMCksZCl7dmFyIG09am4odCxlLm5vZGVJbmRleCkseT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDMyOnk9bmV3IEFycmF5KGgubGVuZ3RoKSxwPjAmJih5WzBdPW4pLHA+MSYmKHlbMV09cikscD4yJiYoeVsyXT1pKSxwPjMmJih5WzNdPW8pLHA+NCYmKHlbNF09YSkscD41JiYoeVs1XT1zKSxwPjYmJih5WzZdPXUpLHA+NyYmKHlbN109bCkscD44JiYoeVs4XT1jKSxwPjkmJih5WzldPWYpO2JyZWFrO2Nhc2UgNjQ6eT17fSxwPjAmJih5W2hbMF0ubmFtZV09bikscD4xJiYoeVtoWzFdLm5hbWVdPXIpLHA+MiYmKHlbaFsyXS5uYW1lXT1pKSxwPjMmJih5W2hbM10ubmFtZV09bykscD40JiYoeVtoWzRdLm5hbWVdPWEpLHA+NSYmKHlbaFs1XS5uYW1lXT1zKSxwPjYmJih5W2hbNl0ubmFtZV09dSkscD43JiYoeVtoWzddLm5hbWVdPWwpLHA+OCYmKHlbaFs4XS5uYW1lXT1jKSxwPjkmJih5W2hbOV0ubmFtZV09Zik7YnJlYWs7Y2FzZSAxMjg6dmFyIGc9bjtzd2l0Y2gocCl7Y2FzZSAxOnk9Zy50cmFuc2Zvcm0obik7YnJlYWs7Y2FzZSAyOnk9Zy50cmFuc2Zvcm0ocik7YnJlYWs7Y2FzZSAzOnk9Zy50cmFuc2Zvcm0ocixpKTticmVhaztjYXNlIDQ6eT1nLnRyYW5zZm9ybShyLGksbyk7YnJlYWs7Y2FzZSA1Onk9Zy50cmFuc2Zvcm0ocixpLG8sYSk7YnJlYWs7Y2FzZSA2Onk9Zy50cmFuc2Zvcm0ocixpLG8sYSxzKTticmVhaztjYXNlIDc6eT1nLnRyYW5zZm9ybShyLGksbyxhLHMsdSk7YnJlYWs7Y2FzZSA4Onk9Zy50cmFuc2Zvcm0ocixpLG8sYSxzLHUsbCk7YnJlYWs7Y2FzZSA5Onk9Zy50cmFuc2Zvcm0ocixpLG8sYSxzLHUsbCxjKTticmVhaztjYXNlIDEwOnk9Zy50cmFuc2Zvcm0ocixpLG8sYSxzLHUsbCxjLGYpfX1tLnZhbHVlPXl9cmV0dXJuIGR9KHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmKTtkZWZhdWx0OnRocm93InVucmVhY2hhYmxlIn19KHQsZSxpLG8sYSxzLHUsbCxjLGYsaCxkKTpmdW5jdGlvbih0LGUsbil7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9ITEsaT0wO2k8bi5sZW5ndGg7aSsrKU9yKHQsZSxpLG5baV0pJiYocj0hMCk7cmV0dXJuIHJ9KHQsZSxuKTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9ZS5iaW5kaW5ncyxpPSExLG89MDtvPG4ubGVuZ3RoO28rKylZbih0LGUsbyxuW29dKSYmKGk9ITApO2lmKGkpe3ZhciBhPSIiO2ZvcihvPTA7bzxuLmxlbmd0aDtvKyspYSs9RmkobltvXSxyW29dKTthPWUudGV4dC5wcmVmaXgrYTt2YXIgcz1Ubih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0O3QucmVuZGVyZXIuc2V0VmFsdWUocyxhKX1yZXR1cm4gaX0odCxlLG4pO2Nhc2UgMTYzODQ6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9QW4odCxlLm5vZGVJbmRleCksaT1yLmluc3RhbmNlLG89ITEsYT12b2lkIDAscz0wO3M8bi5sZW5ndGg7cysrKXFuKHQsZSxzLG5bc10pJiYobz0hMCxhPXdpKHQscixlLHMsbltzXSxhKSk7cmV0dXJuIGEmJmkubmdPbkNoYW5nZXMoYSksNjU1MzYmZS5mbGFncyYma24odCwyNTYsZS5ub2RlSW5kZXgpJiZpLm5nT25Jbml0KCksMjYyMTQ0JmUuZmxhZ3MmJmkubmdEb0NoZWNrKCksb30odCxlLG4pO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaT1lLmJpbmRpbmdzLG89ITEsYT0wO2E8bi5sZW5ndGg7YSsrKVluKHQsZSxhLG5bYV0pJiYobz0hMCk7aWYobyl7dmFyIHM9am4odCxlLm5vZGVJbmRleCksdT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDMyOnU9bjticmVhaztjYXNlIDY0OmZvcih1PXt9LGE9MDthPG4ubGVuZ3RoO2ErKyl1W2lbYV0ubmFtZV09blthXTticmVhaztjYXNlIDEyODp2YXIgbD1uWzBdLGM9bi5zbGljZSgxKTt1PWwudHJhbnNmb3JtLmFwcGx5KGwsT2JqZWN0KHIuZCkoYykpfXMudmFsdWU9dX1yZXR1cm4gb30odCxlLG4pO2RlZmF1bHQ6dGhyb3cidW5yZWFjaGFibGUifX0odCxlLGkpfWZ1bmN0aW9uIFhpKHQpe3ZhciBlPXQuZGVmO2lmKDQmZS5ub2RlRmxhZ3MpZm9yKHZhciBuPTA7bjxlLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPWUubm9kZXNbbl07aWYoNCZyLmZsYWdzKXt2YXIgaT1Jbih0LG4pLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztpZihpKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1pW29dO2Euc3RhdGV8PTMyLEtuKGEsdCl9fWVsc2UgMD09KDQmci5jaGlsZEZsYWdzKSYmKG4rPXIuY2hpbGRDb3VudCl9fWZ1bmN0aW9uICRpKHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmLGgpe3JldHVybiAwPT09bj9mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsdSxsLGMsZil7dmFyIGg9ZS5iaW5kaW5ncy5sZW5ndGg7aD4wJiZHbih0LGUsMCxuKSxoPjEmJkduKHQsZSwxLHIpLGg+MiYmR24odCxlLDIsaSksaD4zJiZHbih0LGUsMyxvKSxoPjQmJkduKHQsZSw0LGEpLGg+NSYmR24odCxlLDUscyksaD42JiZHbih0LGUsNix1KSxoPjcmJkduKHQsZSw3LGwpLGg+OCYmR24odCxlLDgsYyksaD45JiZHbih0LGUsOSxmKX0odCxlLHIsaSxvLGEscyx1LGwsYyxmLGgpOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKylHbih0LGUscixuW3JdKX0odCxlLHIpLCExfWZ1bmN0aW9uIEppKHQsZSl7aWYoUG4odCxlLm5vZGVJbmRleCkuZGlydHkpdGhyb3cgTm4oTW4uY3JlYXRlRGVidWdDb250ZXh0KHQsZS5ub2RlSW5kZXgpLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBub3QgZGlydHkiLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBkaXJ0eSIsMCE9KDEmdC5zdGF0ZSkpfWZ1bmN0aW9uIHRvKHQpe2lmKCEoMTI4JnQuc3RhdGUpKXtpZihybyh0LGVvLkRlc3Ryb3kpLG5vKHQsZW8uRGVzdHJveSkseGkodCwxMzEwNzIpLHQuZGlzcG9zYWJsZXMpZm9yKHZhciBlPTA7ZTx0LmRpc3Bvc2FibGVzLmxlbmd0aDtlKyspdC5kaXNwb3NhYmxlc1tlXSgpOyFmdW5jdGlvbih0KXtpZigxNiZ0LnN0YXRlKXt2YXIgZT1Ybih0KTtpZihlKXt2YXIgbj1lLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztuJiYoRHIobixuLmluZGV4T2YodCkpLE1uLmRpcnR5UGFyZW50UXVlcmllcyh0KSl9fX0odCksdC5yZW5kZXJlci5kZXN0cm95Tm9kZSYmZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZGVmLm5vZGVzLmxlbmd0aCxuPTA7bjxlO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07MSZyLmZsYWdzP3QucmVuZGVyZXIuZGVzdHJveU5vZGUoSW4odCxuKS5yZW5kZXJFbGVtZW50KToyJnIuZmxhZ3M/dC5yZW5kZXJlci5kZXN0cm95Tm9kZShUbih0LG4pLnJlbmRlclRleHQpOig2NzEwODg2NCZyLmZsYWdzfHwxMzQyMTc3Mjgmci5mbGFncykmJlBuKHQsbikuZGVzdHJveSgpfX0odCksdHIodCkmJnQucmVuZGVyZXIuZGVzdHJveSgpLHQuc3RhdGV8PTEyOH19dmFyIGVvPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuQ3JlYXRlVmlld05vZGVzPTBdPSJDcmVhdGVWaWV3Tm9kZXMiLHRbdC5DaGVja05vQ2hhbmdlcz0xXT0iQ2hlY2tOb0NoYW5nZXMiLHRbdC5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzPTJdPSJDaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzIix0W3QuQ2hlY2tBbmRVcGRhdGU9M109IkNoZWNrQW5kVXBkYXRlIix0W3QuQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cz00XT0iQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cyIsdFt0LkRlc3Ryb3k9NV09IkRlc3Ryb3kiLHR9KHt9KTtmdW5jdGlvbiBubyh0LGUpe3ZhciBuPXQuZGVmO2lmKDMzNTU0NDMyJm4ubm9kZUZsYWdzKWZvcih2YXIgcj0wO3I8bi5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgaT1uLm5vZGVzW3JdOzMzNTU0NDMyJmkuZmxhZ3M/aW8oSW4odCxyKS5jb21wb25lbnRWaWV3LGUpOjA9PSgzMzU1NDQzMiZpLmNoaWxkRmxhZ3MpJiYocis9aS5jaGlsZENvdW50KX19ZnVuY3Rpb24gcm8odCxlKXt2YXIgbj10LmRlZjtpZigxNjc3NzIxNiZuLm5vZGVGbGFncylmb3IodmFyIHI9MDtyPG4ubm9kZXMubGVuZ3RoO3IrKyl7dmFyIGk9bi5ub2Rlc1tyXTtpZigxNjc3NzIxNiZpLmZsYWdzKWZvcih2YXIgbz1Jbih0LHIpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsYT0wO2E8by5sZW5ndGg7YSsrKWlvKG9bYV0sZSk7ZWxzZSAwPT0oMTY3NzcyMTYmaS5jaGlsZEZsYWdzKSYmKHIrPWkuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIGlvKHQsZSl7dmFyIG49dC5zdGF0ZTtzd2l0Y2goZSl7Y2FzZSBlby5DaGVja05vQ2hhbmdlczowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT9RaSh0KTo2NCZuJiZvbyh0LGVvLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIGVvLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/UWkodCk6NjQmbiYmb28odCxlKSk7YnJlYWs7Y2FzZSBlby5DaGVja0FuZFVwZGF0ZTowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT9LaSh0KTo2NCZuJiZvbyh0LGVvLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIGVvLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/S2kodCk6NjQmbiYmb28odCxlKSk7YnJlYWs7Y2FzZSBlby5EZXN0cm95OnRvKHQpO2JyZWFrO2Nhc2UgZW8uQ3JlYXRlVmlld05vZGVzOkdpKHQpfX1mdW5jdGlvbiBvbyh0LGUpe3JvKHQsZSksbm8odCxlKX1mdW5jdGlvbiBhbyh0LGUsbixyKXtpZih0LmRlZi5ub2RlRmxhZ3MmZSYmdC5kZWYubm9kZUZsYWdzJm4pZm9yKHZhciBpPXQuZGVmLm5vZGVzLmxlbmd0aCxvPTA7bzxpO28rKyl7dmFyIGE9dC5kZWYubm9kZXNbb107aWYoYS5mbGFncyZlJiZhLmZsYWdzJm4pc3dpdGNoKE1uLnNldEN1cnJlbnROb2RlKHQsYS5ub2RlSW5kZXgpLHIpe2Nhc2UgMDpraSh0LGEpO2JyZWFrO2Nhc2UgMTpKaSh0LGEpfWEuY2hpbGRGbGFncyZlJiZhLmNoaWxkRmxhZ3Mmbnx8KG8rPWEuY2hpbGRDb3VudCl9fXZhciBzbz0hMTtmdW5jdGlvbiB1byh0LGUsbixyLGksbyl7cmV0dXJuIEhpKGNvKHQsaSxpLmluamVjdG9yLmdldCh1ZSksZSxuKSxyLG8pfWZ1bmN0aW9uIGxvKHQsZSxuLHIsaSxvKXt2YXIgYT1pLmluamVjdG9yLmdldCh1ZSkscz1jbyh0LGksbmV3IHFvKGEpLGUsbiksdT13byhyKTtyZXR1cm4gSG8oQW8uY3JlYXRlLEhpLG51bGwsW3MsdSxvXSl9ZnVuY3Rpb24gY28odCxlLG4scixpKXt2YXIgbz1lLmluamVjdG9yLmdldChTbiksYT1lLmluamVjdG9yLmdldChhdCk7cmV0dXJue25nTW9kdWxlOmUsaW5qZWN0b3I6dCxwcm9qZWN0YWJsZU5vZGVzOnIsc2VsZWN0b3JPck5vZGU6aSxzYW5pdGl6ZXI6byxyZW5kZXJlckZhY3Rvcnk6bixyZW5kZXJlcjpuLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCksZXJyb3JIYW5kbGVyOmF9fWZ1bmN0aW9uIGZvKHQsZSxuLHIpe3ZhciBpPXdvKG4pO3JldHVybiBIbyhBby5jcmVhdGUsQmksbnVsbCxbdCxlLGkscl0pfWZ1bmN0aW9uIGhvKHQsZSxuLHIpe3JldHVybiBuPWdvLmdldChlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIucHJvdmlkZXIudG9rZW4pfHx3byhuKSxIbyhBby5jcmVhdGUsV2ksbnVsbCxbdCxlLG4scl0pfWZ1bmN0aW9uIHBvKHQsZSxuLHIpe3JldHVybiAkcih0LGUsbixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT0hMSxuPSExO3JldHVybiAwPT09bW8uc2l6ZT97aGFzT3ZlcnJpZGVzOmUsaGFzRGVwcmVjYXRlZE92ZXJyaWRlczpufToodC5wcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1tby5nZXQodC50b2tlbik7Mzg0MCZ0LmZsYWdzJiZyJiYoZT0hMCxuPW58fHIuZGVwcmVjYXRlZEJlaGF2aW9yKX0pLHQubW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3lvLmZvckVhY2goZnVuY3Rpb24ocixpKXtpLm5nSW5qZWN0YWJsZURlZi5wcm92aWRlZEluPT09dCYmKGU9ITAsbj1ufHxyLmRlcHJlY2F0ZWRCZWhhdmlvcil9KX0pLHtoYXNPdmVycmlkZXM6ZSxoYXNEZXByZWNhdGVkT3ZlcnJpZGVzOm59KX0odCksbj1lLmhhc0RlcHJlY2F0ZWRPdmVycmlkZXM7cmV0dXJuIGUuaGFzT3ZlcnJpZGVzPyhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQucHJvdmlkZXJzLmxlbmd0aDtlKyspe3ZhciByPXQucHJvdmlkZXJzW2VdO24mJihyLmZsYWdzfD00MDk2KTt2YXIgaT1tby5nZXQoci50b2tlbik7aSYmKHIuZmxhZ3M9LTM4NDEmci5mbGFnc3xpLmZsYWdzLHIuZGVwcz1pcihpLmRlcHMpLHIudmFsdWU9aS52YWx1ZSl9aWYoeW8uc2l6ZT4wKXt2YXIgbz1uZXcgU2V0KHQubW9kdWxlcyk7eW8uZm9yRWFjaChmdW5jdGlvbihlLHIpe2lmKG8uaGFzKHIubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW4pKXt2YXIgaT17dG9rZW46cixmbGFnczplLmZsYWdzfChuPzQwOTY6MCksZGVwczppcihlLmRlcHMpLHZhbHVlOmUudmFsdWUsaW5kZXg6dC5wcm92aWRlcnMubGVuZ3RofTt0LnByb3ZpZGVycy5wdXNoKGkpLHQucHJvdmlkZXJzQnlLZXlbVm4ocildPWl9fSl9fSh0PXQuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybiBMbn0pKSx0KTp0fShyKSl9dmFyIG1vPW5ldyBNYXAseW89bmV3IE1hcCxnbz1uZXcgTWFwO2Z1bmN0aW9uIHZvKHQpe21vLnNldCh0LnRva2VuLHQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LnRva2VuJiZ0LnRva2VuLm5nSW5qZWN0YWJsZURlZiYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9rZW4ubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW4mJnlvLnNldCh0LnRva2VuLHQpfWZ1bmN0aW9uIGJvKHQsZSl7dmFyIG49c3Ioc3IoZS52aWV3RGVmRmFjdG9yeSkubm9kZXNbMF0uZWxlbWVudC5jb21wb25lbnRWaWV3KTtnby5zZXQodCxuKX1mdW5jdGlvbiBfbygpe21vLmNsZWFyKCkseW8uY2xlYXIoKSxnby5jbGVhcigpfWZ1bmN0aW9uIHdvKHQpe2lmKDA9PT1tby5zaXplKXJldHVybiB0O3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPW51bGwscj0wO3I8dC5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgaT10Lm5vZGVzW3JdOzEmaS5mbGFncyYmKG49aSksbiYmMzg0MCZpLmZsYWdzJiZtby5oYXMoaS5wcm92aWRlci50b2tlbikmJihlLnB1c2gobi5ub2RlSW5kZXgpLG49bnVsbCl9cmV0dXJuIGV9KHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDt0PXQuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybiBMbn0pO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXIodCxlW25dKTtyZXR1cm4gdDtmdW5jdGlvbiByKHQsZSl7Zm9yKHZhciBuPWUrMTtuPHQubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9dC5ub2Rlc1tuXTtpZigxJnIuZmxhZ3MpcmV0dXJuO2lmKDM4NDAmci5mbGFncyl7dmFyIGk9ci5wcm92aWRlcixvPW1vLmdldChpLnRva2VuKTtvJiYoci5mbGFncz0tMzg0MSZyLmZsYWdzfG8uZmxhZ3MsaS5kZXBzPWlyKG8uZGVwcyksaS52YWx1ZT1vLnZhbHVlKX19fX1mdW5jdGlvbiB4byh0LGUsbixyLGksbyxhLHMsdSxsLGMsZixoKXt2YXIgZD10LmRlZi5ub2Rlc1tlXTtyZXR1cm4gWmkodCxkLG4scixpLG8sYSxzLHUsbCxjLGYsaCksMjI0JmQuZmxhZ3M/am4odCxlKS52YWx1ZTp2b2lkIDB9ZnVuY3Rpb24gT28odCxlLG4scixpLG8sYSxzLHUsbCxjLGYsaCl7dmFyIGQ9dC5kZWYubm9kZXNbZV07cmV0dXJuICRpKHQsZCxuLHIsaSxvLGEscyx1LGwsYyxmLGgpLDIyNCZkLmZsYWdzP2puKHQsZSkudmFsdWU6dm9pZCAwfWZ1bmN0aW9uIENvKHQpe3JldHVybiBIbyhBby5kZXRlY3RDaGFuZ2VzLEtpLG51bGwsW3RdKX1mdW5jdGlvbiBTbyh0KXtyZXR1cm4gSG8oQW8uY2hlY2tOb0NoYW5nZXMsUWksbnVsbCxbdF0pfWZ1bmN0aW9uIEVvKHQpe3JldHVybiBIbyhBby5kZXN0cm95LHRvLG51bGwsW3RdKX12YXIga28sVG8sSW8sQW89ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5jcmVhdGU9MF09ImNyZWF0ZSIsdFt0LmRldGVjdENoYW5nZXM9MV09ImRldGVjdENoYW5nZXMiLHRbdC5jaGVja05vQ2hhbmdlcz0yXT0iY2hlY2tOb0NoYW5nZXMiLHRbdC5kZXN0cm95PTNdPSJkZXN0cm95Iix0W3QuaGFuZGxlRXZlbnQ9NF09ImhhbmRsZUV2ZW50Iix0fSh7fSk7ZnVuY3Rpb24gam8odCxlKXtUbz10LElvPWV9ZnVuY3Rpb24gUG8odCxlLG4scil7cmV0dXJuIGpvKHQsZSksSG8oQW8uaGFuZGxlRXZlbnQsdC5kZWYuaGFuZGxlRXZlbnQsbnVsbCxbdCxlLG4scl0pfWZ1bmN0aW9uIE1vKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgRG4oQW9ba29dKTtyZXR1cm4gam8odCxWbyh0LDApKSx0LmRlZi51cGRhdGVEaXJlY3RpdmVzKGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIGk9W10sbz0zO288YXJndW1lbnRzLmxlbmd0aDtvKyspaVtvLTNdPWFyZ3VtZW50c1tvXTt2YXIgYT10LmRlZi5ub2Rlc1tuXTtyZXR1cm4gMD09PWU/Um8odCxhLHIsaSk6RG8odCxhLHIsaSksMTYzODQmYS5mbGFncyYmam8odCxWbyh0LG4pKSwyMjQmYS5mbGFncz9qbih0LGEubm9kZUluZGV4KS52YWx1ZTp2b2lkIDB9LHQpfWZ1bmN0aW9uIE5vKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgRG4oQW9ba29dKTtyZXR1cm4gam8odCxVbyh0LDApKSx0LmRlZi51cGRhdGVSZW5kZXJlcihmdW5jdGlvbih0LG4scil7Zm9yKHZhciBpPVtdLG89MztvPGFyZ3VtZW50cy5sZW5ndGg7bysrKWlbby0zXT1hcmd1bWVudHNbb107dmFyIGE9dC5kZWYubm9kZXNbbl07cmV0dXJuIDA9PT1lP1JvKHQsYSxyLGkpOkRvKHQsYSxyLGkpLDMmYS5mbGFncyYmam8odCxVbyh0LG4pKSwyMjQmYS5mbGFncz9qbih0LGEubm9kZUluZGV4KS52YWx1ZTp2b2lkIDB9LHQpfWZ1bmN0aW9uIFJvKHQsZSxuLGkpe2lmKFppLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShbdCxlLG5dLGkpKSl7dmFyIG89MT09PW4/aVswXTppO2lmKDE2Mzg0JmUuZmxhZ3Mpe2Zvcih2YXIgYT17fSxzPTA7czxlLmJpbmRpbmdzLmxlbmd0aDtzKyspe3ZhciB1PWUuYmluZGluZ3Nbc10sbD1vW3NdOzgmdS5mbGFncyYmKGFbKGQ9dS5ub25NaW5pZmllZE5hbWUsIm5nLXJlZmxlY3QtIisoZD1kLnJlcGxhY2UoL1skQF0vZywiXyIpLnJlcGxhY2UoTG8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIi0iK3RbMV0udG9Mb3dlckNhc2UoKX0pKSldPUZvKGwpKX12YXIgYz1lLnBhcmVudCxmPUluKHQsYy5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7aWYoYy5lbGVtZW50Lm5hbWUpZm9yKHZhciBoIGluIGEpbnVsbCE9KGw9YVtoXSk/dC5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZixoLGwpOnQucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGYsaCk7ZWxzZSB0LnJlbmRlcmVyLnNldFZhbHVlKGYsImJpbmRpbmdzPSIrSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpKX19dmFyIGR9ZnVuY3Rpb24gRG8odCxlLG4saSl7JGkuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKFt0LGUsbl0saSkpfXZhciBMbz0vKFtBLVpdKS9nO2Z1bmN0aW9uIEZvKHQpe3RyeXtyZXR1cm4gbnVsbCE9dD90LnRvU3RyaW5nKCkuc2xpY2UoMCwzMCk6dH1jYXRjaCh0KXtyZXR1cm4iW0VSUk9SXSBFeGNlcHRpb24gd2hpbGUgdHJ5aW5nIHRvIHNlcmlhbGl6ZSB0aGUgdmFsdWUifX1mdW5jdGlvbiBWbyh0LGUpe2Zvcih2YXIgbj1lO248dC5kZWYubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07aWYoMTYzODQmci5mbGFncyYmci5iaW5kaW5ncyYmci5iaW5kaW5ncy5sZW5ndGgpcmV0dXJuIG59cmV0dXJuIG51bGx9ZnVuY3Rpb24gVW8odCxlKXtmb3IodmFyIG49ZTtuPHQuZGVmLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPXQuZGVmLm5vZGVzW25dO2lmKDMmci5mbGFncyYmci5iaW5kaW5ncyYmci5iaW5kaW5ncy5sZW5ndGgpcmV0dXJuIG59cmV0dXJuIG51bGx9dmFyIHpvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmlldz10LHRoaXMubm9kZUluZGV4PWUsbnVsbD09ZSYmKHRoaXMubm9kZUluZGV4PWU9MCksdGhpcy5ub2RlRGVmPXQuZGVmLm5vZGVzW2VdO2Zvcih2YXIgbj10aGlzLm5vZGVEZWYscj10O24mJjA9PSgxJm4uZmxhZ3MpOyluPW4ucGFyZW50O2lmKCFuKWZvcig7IW4mJnI7KW49JG4ocikscj1yLnBhcmVudDt0aGlzLmVsRGVmPW4sdGhpcy5lbFZpZXc9cn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbE9yQ29tcFZpZXciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSW4odGhpcy5lbFZpZXcsdGhpcy5lbERlZi5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXd8fHRoaXMudmlld30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEdyKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxPckNvbXBWaWV3LmNvbXBvbmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbnRleHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbE9yQ29tcFZpZXcuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5lbERlZilmb3IodmFyIGU9dGhpcy5lbERlZi5ub2RlSW5kZXgrMTtlPD10aGlzLmVsRGVmLm5vZGVJbmRleCt0aGlzLmVsRGVmLmNoaWxkQ291bnQ7ZSsrKXt2YXIgbj10aGlzLmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYmdC5wdXNoKG4ucHJvdmlkZXIudG9rZW4pLGUrPW4uY2hpbGRDb3VudH1yZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlZmVyZW5jZXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD17fTtpZih0aGlzLmVsRGVmKXtCbyh0aGlzLmVsVmlldyx0aGlzLmVsRGVmLHQpO2Zvcih2YXIgZT10aGlzLmVsRGVmLm5vZGVJbmRleCsxO2U8PXRoaXMuZWxEZWYubm9kZUluZGV4K3RoaXMuZWxEZWYuY2hpbGRDb3VudDtlKyspe3ZhciBuPXRoaXMuZWxWaWV3LmRlZi5ub2Rlc1tlXTsyMDIyNCZuLmZsYWdzJiZCbyh0aGlzLmVsVmlldyxuLHQpLGUrPW4uY2hpbGRDb3VudH19cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRSZW5kZXJFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCl7Zm9yKDt0JiYhdHIodCk7KXQ9dC5wYXJlbnQ7cmV0dXJuIHQucGFyZW50P0luKHQucGFyZW50LCRuKHQpLm5vZGVJbmRleCk6bnVsbH0odGhpcy5lbE9yQ29tcFZpZXcpO3JldHVybiB0P3QucmVuZGVyRWxlbWVudDp2b2lkIDB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZW5kZXJOb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDImdGhpcy5ub2RlRGVmLmZsYWdzP0puKHRoaXMudmlldyx0aGlzLm5vZGVEZWYpOkpuKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmxvZ0Vycm9yPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGk9W10sbz0xO288YXJndW1lbnRzLmxlbmd0aDtvKyspaVtvLTFdPWFyZ3VtZW50c1tvXTsyJnRoaXMubm9kZURlZi5mbGFncz8oZT10aGlzLnZpZXcuZGVmLG49dGhpcy5ub2RlRGVmLm5vZGVJbmRleCk6KGU9dGhpcy5lbFZpZXcuZGVmLG49dGhpcy5lbERlZi5ub2RlSW5kZXgpO3ZhciBhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9MDtyPD1lO3IrKykzJnQubm9kZXNbcl0uZmxhZ3MmJm4rKztyZXR1cm4gbn0oZSxuKSxzPS0xO2UuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybisrcz09PWE/KGU9dC5lcnJvcikuYmluZC5hcHBseShlLE9iamVjdChyLmQpKFt0XSxpKSk6TG47dmFyIGV9KSxzPGEmJih0LmVycm9yKCJJbGxlZ2FsIHN0YXRlOiB0aGUgVmlld0RlZmluaXRpb25GYWN0b3J5IGRpZCBub3QgY2FsbCB0aGUgbG9nZ2VyISIpLHQuZXJyb3IuYXBwbHkodCxPYmplY3Qoci5kKShpKSkpfSx0fSgpO2Z1bmN0aW9uIEJvKHQsZSxuKXtmb3IodmFyIHIgaW4gZS5yZWZlcmVuY2VzKW5bcl09SWkodCxlLGUucmVmZXJlbmNlc1tyXSl9ZnVuY3Rpb24gSG8odCxlLG4scil7dmFyIGk9a28sbz1UbyxhPUlvO3RyeXtrbz10O3ZhciBzPWUuYXBwbHkobixyKTtyZXR1cm4gVG89byxJbz1hLGtvPWksc31jYXRjaCh0KXtpZihydCh0KXx8IVRvKXRocm93IHQ7dGhyb3cgZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIEVycm9yfHwodD1uZXcgRXJyb3IodC50b1N0cmluZygpKSksUm4odCxlKSx0fSh0LFdvKCkpfX1mdW5jdGlvbiBXbygpe3JldHVybiBUbz9uZXcgem8oVG8sSW8pOm51bGx9dmFyIHFvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBZbyh0aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKHQsZSkpfSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX0sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9LHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUud2hlblJlbmRlcmluZ0RvbmU/dGhpcy5kZWxlZ2F0ZS53aGVuUmVuZGVyaW5nRG9uZSgpOlByb21pc2UucmVzb2x2ZShudWxsKX0sdH0oKSxZbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZGF0YT10aGlzLmRlbGVnYXRlLmRhdGF9cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3lOb2RlPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0KXtDZS5kZWxldGUodC5uYXRpdmVOb2RlKX0oU2UodCkpLHRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUmJnRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUodCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpLHI9V28oKTtpZihyKXt2YXIgaT1uZXcgd2UobixudWxsLHIpO2kubmFtZT10LEVlKGkpfXJldHVybiBufSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KSxuPVdvKCk7cmV0dXJuIG4mJkVlKG5ldyBfZShlLG51bGwsbikpLGV9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KHQpLG49V28oKTtyZXR1cm4gbiYmRWUobmV3IF9lKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1TZSh0KSxyPVNlKGUpO24mJnImJm4gaW5zdGFuY2VvZiB3ZSYmbi5hZGRDaGlsZChyKSx0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSl9LHQucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9U2UodCksaT1TZShlKSxvPVNlKG4pO3ImJmkmJnIgaW5zdGFuY2VvZiB3ZSYmci5pbnNlcnRCZWZvcmUobyxpKSx0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG49U2UodCkscj1TZShlKTtuJiZyJiZuIGluc3RhbmNlb2Ygd2UmJm4ucmVtb3ZlQ2hpbGQociksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZCh0LGUpfSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpLG49V28oKTtyZXR1cm4gbiYmRWUobmV3IHdlKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPVNlKHQpO2kmJmkgaW5zdGFuY2VvZiB3ZSYmKGkuYXR0cmlidXRlc1tyP3IrIjoiK2U6ZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9U2UodCk7ciYmciBpbnN0YW5jZW9mIHdlJiYoci5hdHRyaWJ1dGVzW24/bisiOiIrZTplXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsbil9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49U2UodCk7biYmbiBpbnN0YW5jZW9mIHdlJiYobi5jbGFzc2VzW2VdPSEwKSx0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49U2UodCk7biYmbiBpbnN0YW5jZW9mIHdlJiYobi5jbGFzc2VzW2VdPSExKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPVNlKHQpO2kmJmkgaW5zdGFuY2VvZiB3ZSYmKGkuc3R5bGVzW2VdPW4pLHRoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1TZSh0KTtyJiZyIGluc3RhbmNlb2Ygd2UmJihyLnN0eWxlc1tlXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVNlKHQpO3ImJnIgaW5zdGFuY2VvZiB3ZSYmKHIucHJvcGVydGllc1tlXT1uKSx0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciByPVNlKHQpO3ImJnIubGlzdGVuZXJzLnB1c2gobmV3IGZ1bmN0aW9uKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5jYWxsYmFjaz1lfShlLG4pKX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9LHQucHJvdG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpfSx0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHR9KCk7ZnVuY3Rpb24gR28odCxlLG4pe3JldHVybiBuZXcgUW8odCxlLG4pfXZhciBRbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkubW9kdWxlVHlwZT1lLGkuX2Jvb3RzdHJhcENvbXBvbmVudHM9bixpLl9uZ01vZHVsZURlZkZhY3Rvcnk9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXshZnVuY3Rpb24oKXtpZighc28pe3NvPSEwO3ZhciB0PXRlKCk/e3NldEN1cnJlbnROb2RlOmpvLGNyZWF0ZVJvb3RWaWV3OmxvLGNyZWF0ZUVtYmVkZGVkVmlldzpmbyxjcmVhdGVDb21wb25lbnRWaWV3OmhvLGNyZWF0ZU5nTW9kdWxlUmVmOnBvLG92ZXJyaWRlUHJvdmlkZXI6dm8sb3ZlcnJpZGVDb21wb25lbnRWaWV3OmJvLGNsZWFyT3ZlcnJpZGVzOl9vLGNoZWNrQW5kVXBkYXRlVmlldzpDbyxjaGVja05vQ2hhbmdlc1ZpZXc6U28sZGVzdHJveVZpZXc6RW8sY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB6byh0LGUpfSxoYW5kbGVFdmVudDpQbyx1cGRhdGVEaXJlY3RpdmVzOk1vLHVwZGF0ZVJlbmRlcmVyOk5vfTp7c2V0Q3VycmVudE5vZGU6ZnVuY3Rpb24oKXt9LGNyZWF0ZVJvb3RWaWV3OnVvLGNyZWF0ZUVtYmVkZGVkVmlldzpCaSxjcmVhdGVDb21wb25lbnRWaWV3OldpLGNyZWF0ZU5nTW9kdWxlUmVmOiRyLG92ZXJyaWRlUHJvdmlkZXI6TG4sb3ZlcnJpZGVDb21wb25lbnRWaWV3OkxuLGNsZWFyT3ZlcnJpZGVzOkxuLGNoZWNrQW5kVXBkYXRlVmlldzpLaSxjaGVja05vQ2hhbmdlc1ZpZXc6UWksZGVzdHJveVZpZXc6dG8sY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB6byh0LGUpfSxoYW5kbGVFdmVudDpmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdC5kZWYuaGFuZGxlRXZlbnQodCxlLG4scil9LHVwZGF0ZURpcmVjdGl2ZXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlRGlyZWN0aXZlcygwPT09ZT94bzpPbyx0KX0sdXBkYXRlUmVuZGVyZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlUmVuZGVyZXIoMD09PWU/eG86T28sdCl9fTtNbi5zZXRDdXJyZW50Tm9kZT10LnNldEN1cnJlbnROb2RlLE1uLmNyZWF0ZVJvb3RWaWV3PXQuY3JlYXRlUm9vdFZpZXcsTW4uY3JlYXRlRW1iZWRkZWRWaWV3PXQuY3JlYXRlRW1iZWRkZWRWaWV3LE1uLmNyZWF0ZUNvbXBvbmVudFZpZXc9dC5jcmVhdGVDb21wb25lbnRWaWV3LE1uLmNyZWF0ZU5nTW9kdWxlUmVmPXQuY3JlYXRlTmdNb2R1bGVSZWYsTW4ub3ZlcnJpZGVQcm92aWRlcj10Lm92ZXJyaWRlUHJvdmlkZXIsTW4ub3ZlcnJpZGVDb21wb25lbnRWaWV3PXQub3ZlcnJpZGVDb21wb25lbnRWaWV3LE1uLmNsZWFyT3ZlcnJpZGVzPXQuY2xlYXJPdmVycmlkZXMsTW4uY2hlY2tBbmRVcGRhdGVWaWV3PXQuY2hlY2tBbmRVcGRhdGVWaWV3LE1uLmNoZWNrTm9DaGFuZ2VzVmlldz10LmNoZWNrTm9DaGFuZ2VzVmlldyxNbi5kZXN0cm95Vmlldz10LmRlc3Ryb3lWaWV3LE1uLnJlc29sdmVEZXA9YmksTW4uY3JlYXRlRGVidWdDb250ZXh0PXQuY3JlYXRlRGVidWdDb250ZXh0LE1uLmhhbmRsZUV2ZW50PXQuaGFuZGxlRXZlbnQsTW4udXBkYXRlRGlyZWN0aXZlcz10LnVwZGF0ZURpcmVjdGl2ZXMsTW4udXBkYXRlUmVuZGVyZXI9dC51cGRhdGVSZW5kZXJlcixNbi5kaXJ0eVBhcmVudFF1ZXJpZXM9RWl9fSgpO3ZhciBlPXNyKHRoaXMuX25nTW9kdWxlRGVmRmFjdG9yeSk7cmV0dXJuIE1uLmNyZWF0ZU5nTW9kdWxlUmVmKHRoaXMubW9kdWxlVHlwZSx0fHxOLk5VTEwsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cyxlKX0sZX0oUHQpO2Z1bmN0aW9uIEtvKHQsZSxuKXt0IT1lJiYkbyhuKX1mdW5jdGlvbiBabyh0LGUpe251bGwhPXQmJiRvKGUpfWZ1bmN0aW9uIFhvKHQsZSl7bnVsbD09dCYmJG8oZSl9ZnVuY3Rpb24gJG8odCl7dGhyb3cgbmV3IEVycm9yKCJBU1NFUlRJT04gRVJST1I6ICIrdCl9ZnVuY3Rpb24gSm8odCxlLG4scil7dmFyIGk9cj9lOm47aSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTIpZVtuKzFdLmNhbGwodFtlW25dXSl9KHQsaSl9InVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGUmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5uZ0Rldk1vZGU9ITApLCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmKHNlbGYubmdEZXZNb2RlPSEwKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmKGdsb2JhbC5uZ0Rldk1vZGU9ITApKTt2YXIgdGEsZWEsbmEscmEsaWEsb2EsYWEsc2EsdWEsbGEsY2E9Il9fbmdIb3N0TE5vZGVfXyIsZmE9UHJvbWlzZS5yZXNvbHZlKG51bGwpLGhhPVswLDBdLGRhPW51bGwscGE9ITE7ZnVuY3Rpb24gbWEodCxlKXt2YXIgbj1kYTtyZXR1cm4gc2E9dCYmdC5kYXRhLHVhPXQmJnQuZGlyZWN0aXZlcyxpYT10JiZ0LnRWaWV3LmRhdGEsYWE9dCYmMT09KDEmdC5mbGFncyksdGE9dCYmdC5yZW5kZXJlcix0JiZ0LmJpbmRpbmdJbmRleDwwJiYodC5iaW5kaW5nSW5kZXg9dC5iaW5kaW5nU3RhcnRJbmRleCksbnVsbCE9ZSYmKG5hPWUscmE9ITApLGRhPXQsb2E9dCYmdC5xdWVyaWVzLG59ZnVuY3Rpb24geWEodCl7cGF8fEpvKHVhLGRhLnRWaWV3LnZpZXdIb29rcyxkYS50Vmlldy52aWV3Q2hlY2tIb29rcyxhYSksZGEuZmxhZ3MmPS02LGRhLmxpZmVjeWNsZVN0YWdlPTEsZGEuYmluZGluZ0luZGV4PS0xLG1hKHQsbnVsbCl9ZnVuY3Rpb24gZ2EoKXtiYSgpO3ZhciB0PWRhLnRWaWV3O3QuZmlyc3RUZW1wbGF0ZVBhc3M9ITEsdmEodC5ob3N0QmluZGluZ3MpLGZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpZm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKz0yKXhhKHRbZV0sdFtlKzFdKX0odC5jb21wb25lbnRzKX1mdW5jdGlvbiB2YSh0KXtpZihudWxsIT10KWZvcih2YXIgZT1kYS50Vmlldy5kaXJlY3RpdmVzLG49MDtuPHQubGVuZ3RoO24rPTIpe3ZhciByPXRbbl0saT1lW3JdO2kuaG9zdEJpbmRpbmdzJiZpLmhvc3RCaW5kaW5ncyhyLHRbbisxXSl9fWZ1bmN0aW9uIGJhKCl7aWYoIXBhKXt2YXIgdD1kYS50VmlldzsoZnVuY3Rpb24odCxlLG4pezE9PT10LmxpZmVjeWNsZVN0YWdlJiYoSm8odC5kaXJlY3RpdmVzLGUuaW5pdEhvb2tzLGUuY2hlY2tIb29rcyxuKSx0LmxpZmVjeWNsZVN0YWdlPTIpfSkoZGEsdCxhYSksSm8odWEsdC5jb250ZW50SG9va3MsdC5jb250ZW50Q2hlY2tIb29rcyxhYSl9fWZ1bmN0aW9uIF9hKHQsZSxuLHIsaSxvKXt2YXIgYSxzLHUsbCxjLGYsaCxkLHAsbT1yYSx5PW5hO3RyeXtyYT0hMCxuYT1udWxsO3ZhciBnPTI7bnVsbD09dCYmKHM9bnVsbCx1PTIsbD1udWxsLGM9ZnVuY3Rpb24odCxlLG4scixpLG8pe3JldHVybntwYXJlbnQ6ZGEsaWQ6LTEsZmxhZ3M6MTEsbm9kZTpudWxsLGRhdGE6W10sZGlyZWN0aXZlczpudWxsLHRWaWV3Om4sY2xlYW51cDpudWxsLHJlbmRlcmVyOmUsY2hpbGQ6bnVsbCx0YWlsOm51bGwsbmV4dDpudWxsLGJpbmRpbmdTdGFydEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSx0ZW1wbGF0ZTpyLGNvbnRleHQ6aSxkeW5hbWljVmlld0NvdW50OjAsbGlmZWN5Y2xlU3RhZ2U6MSxxdWVyaWVzOm51bGwsaW5qZWN0b3I6ZGEmJmRhLmluamVjdG9yfX0oMCxyLGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5uZ1ByaXZhdGVEYXRhfHwodC5uZ1ByaXZhdGVEYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6W10sZGlyZWN0aXZlczpudWxsLGZpcnN0VGVtcGxhdGVQYXNzOiEwLGluaXRIb29rczpudWxsLGNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwscGlwZURlc3Ryb3lIb29rczpudWxsLGhvc3RCaW5kaW5nczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dCxwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSgpOmUsY3VycmVudE1hdGNoZXM6bnVsbH19KGUsbikpfShlLGl8fG51bGwsb3x8bnVsbCksZSxuKSxmPXJhP25hOm5hJiZuYS5wYXJlbnQsaD0ocmE/b2E6bmEmJm5hLnF1ZXJpZXMpfHxmJiZmLnF1ZXJpZXMmJmYucXVlcmllcy5jaGlsZCgpLHA9ZnVuY3Rpb24odCxlLG4scixpLG8pe3JldHVybnt0eXBlOnQsbmF0aXZlOnIsdmlldzplLHBhcmVudDpuLGNoaWxkOm51bGwsbmV4dDpudWxsLG5vZGVJbmplY3RvcjpuP24ubm9kZUluamVjdG9yOm51bGwsZGF0YTppLHF1ZXJpZXM6byx0Tm9kZTpudWxsLHBOZXh0T3JQYXJlbnQ6bnVsbCxkeW5hbWljTENvbnRhaW5lck5vZGU6bnVsbH19KHUsZGEsZixsLChkPW51bGwhPWMpP2M6bnVsbCxoKSwyPT0oMiZ1KSYmZCYmKG5nRGV2TW9kZSYmWm8oYy5ub2RlLCJMVmlldy5ub2RlIHNob3VsZCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksYy5ub2RlPXApLG51bGwhPXMmJihuZ0Rldk1vZGUmJmZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9c2EpLEtvKGUubGVuZ3RoLHQsImluZGV4ICIrdCsiIGV4cGVjdGVkIHRvIGJlIGF0IHRoZSBlbmQgb2YgYXJyIChsZW5ndGggIitlLmxlbmd0aCsiKSIpfShzKSxzYVtzXT1wLHM+PWlhLmxlbmd0aD9pYVtzXT1udWxsOnAudE5vZGU9aWFbc10scmE/KG9hPW51bGwsbmEudmlldyE9PWRhJiYyIT09bmEudHlwZXx8KG5nRGV2TW9kZSYmWm8obmEuY2hpbGQsInByZXZpb3VzT3JQYXJlbnROb2RlJ3MgY2hpbGQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gc2V0LiIpLG5hLmNoaWxkPXApKTpuYSYmKG5nRGV2TW9kZSYmWm8obmEubmV4dCwicHJldmlvdXNPclBhcmVudE5vZGUncyBuZXh0IHByb3BlcnR5IHNob3VsZCBub3QgaGF2ZSBiZWVuIHNldCAiK3MrIi4iKSxuYS5uZXh0PXAsbmEuZHluYW1pY0xDb250YWluZXJOb2RlJiYobmEuZHluYW1pY0xDb250YWluZXJOb2RlLm5leHQ9cCkpKSxuYT1wLHJhPSEwLHQ9cCxnPTEpLGE9bWEodC5kYXRhLHQpLGUoZyxuKSxnYSgpLHdhKCl9ZmluYWxseXt5YShhKSxyYT1tLG5hPXl9cmV0dXJuIHR9ZnVuY3Rpb24gd2EoKXtmb3IodmFyIHQ9ZGEuY2hpbGQ7bnVsbCE9PXQ7dD10Lm5leHQpaWYoMCE9PXQuZHluYW1pY1ZpZXdDb3VudCYmdC52aWV3cylmb3IodmFyIGU9dCxuPTA7bjxlLnZpZXdzLmxlbmd0aDtuKyspe3ZhciByPWUudmlld3Nbbl07X2EocixyLmRhdGEudGVtcGxhdGUsci5kYXRhLmNvbnRleHQsdGEpfX1mdW5jdGlvbiB4YSh0LGUpe25nRGV2TW9kZSYmU2EoZSk7dmFyIG4scixpPXNhW2VdO25nRGV2TW9kZSYmKHI9MyxYbyhuPWksInNob3VsZCBiZSBjYWxsZWQgd2l0aCBhIG5vZGUiKSxLbyhuLnR5cGUsciwic2hvdWxkIGJlIGEgIitmdW5jdGlvbih0KXtyZXR1cm4gMT09dD8iUHJvamVjdGlvbiI6MD09dD8iQ29udGFpbmVyIjoyPT10PyJWaWV3IjozPT10PyJFbGVtZW50IjoiPHVua25vd24+In0ocikpKSxuZ0Rldk1vZGUmJlhvKGkuZGF0YSwiQ29tcG9uZW50J3MgaG9zdCBub2RlIHNob3VsZCBoYXZlIGFuIExWaWV3IGF0dGFjaGVkLiIpO3ZhciBvLGE9aS5kYXRhOzg9PSg4JmEuZmxhZ3MpJiY2JmEuZmxhZ3MmJihuZ0Rldk1vZGUmJlNhKHQsdWEpLENhKGEsaSxkYS50Vmlldy5kaXJlY3RpdmVzW3RdLChvPXVhW3RdLEFycmF5LmlzQXJyYXkobyk/b1swXTpvKSkpfWZ1bmN0aW9uIE9hKHQpe3ZhciBlPUVhKHQpO25nRGV2TW9kZSYmWG8oZS5kYXRhLCJDb21wb25lbnQgaG9zdCBub2RlIHNob3VsZCBiZSBhdHRhY2hlZCB0byBhbiBMVmlldyIpLENhKGUuZGF0YSxlLGUudmlldy50Vmlldy5kaXJlY3RpdmVzW2UudE5vZGUuZmxhZ3M+PjEzXSx0KX1mdW5jdGlvbiBDYSh0LGUsbixyKXt2YXIgaT1tYSh0LGUpLG89bi50ZW1wbGF0ZTt0cnl7bygxJnQuZmxhZ3M/MzoyLHIpLGdhKCksd2EoKX1maW5hbGx5e3lhKGkpfX1mdW5jdGlvbiBTYSh0LGUpe251bGw9PWUmJihlPXNhKSx0Pj0oZT9lLmxlbmd0aDowKSYmJG8oImluZGV4IGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgZGF0YSBpbmRleCIpfWZ1bmN0aW9uIEVhKHQpe25nRGV2TW9kZSYmWG8odCwiZXhwZWN0aW5nIGNvbXBvbmVudCBnb3QgbnVsbCIpO3ZhciBlPXRbY2FdO3JldHVybiBuZ0Rldk1vZGUmJlhvKHQsIm9iamVjdCBpcyBub3QgYSBjb21wb25lbnQiKSxlfWxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXc9dCx0aGlzLmNvbnRleHQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuX3NldENvbXBvbmVudENvbnRleHQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92aWV3PXQsdGhpcy5jb250ZXh0PWV9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpeyFmdW5jdGlvbih0KXtmb3IodmFyIGU9dDtudWxsIT1lLnBhcmVudDspZS5mbGFnc3w9NCxlPWUucGFyZW50O3ZhciBuLHI7ZS5mbGFnc3w9NCxuZ0Rldk1vZGUmJlhvKGUuY29udGV4dCwicm9vdENvbnRleHQiKSwobj1lLmNvbnRleHQpLmNsZWFuPT1mYSYmKG4uY2xlYW49bmV3IFByb21pc2UoZnVuY3Rpb24odCl7cmV0dXJuIHI9dH0pLG4uc2NoZWR1bGVyKGZ1bmN0aW9uKCl7dmFyIHQsZTtlPUVhKCh0PWZ1bmN0aW9uKHQpe25nRGV2TW9kZSYmWG8odCwiY29tcG9uZW50Iik7Zm9yKHZhciBlPUVhKHQpLnZpZXc7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9KG4uY29tcG9uZW50KSkuY29udGV4dC5jb21wb25lbnQpLG5nRGV2TW9kZSYmWG8oZS5kYXRhLCJDb21wb25lbnQgaG9zdCBub2RlIHNob3VsZCBiZSBhdHRhY2hlZCB0byBhbiBMVmlldyIpLGZ1bmN0aW9uKG4scixpLG8pe3ZhciBhPW1hKHQsZSk7dHJ5e2VhLmJlZ2luJiZlYS5iZWdpbigpLGJhKCksdmEoaGEpLHhhKDAsMCl9ZmluYWxseXtlYS5lbmQmJmVhLmVuZCgpLHlhKGEpfX0oKSxyKG51bGwpLG4uY2xlYW49ZmF9KSl9KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LmZsYWdzJj0tOX0sdC5wcm90b3R5cGUucmVhdHRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LmZsYWdzfD04fSx0LnByb3RvdHlwZS5kZXRlY3RDaGFuZ2VzPWZ1bmN0aW9uKCl7T2EodGhpcy5jb250ZXh0KX0sdC5wcm90b3R5cGUuY2hlY2tOb0NoYW5nZXM9ZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7cGE9ITA7dHJ5e09hKHQpfWZpbmFsbHl7cGE9ITF9fSh0aGlzLmNvbnRleHQpfSx0fSgpLE9iamVjdChyLmIpKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1sYS5jYWxsKHRoaXMsdC5kYXRhLG4pfHx0aGlzO3JldHVybiByLl9sVmlld05vZGU9dCxyfSxsYSl9LERLVGI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSl9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sRWhtazpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHIsaT1uKCJlaWhzIik7ZnVuY3Rpb24gbygpe3RyeXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2godCl7cmV0dXJuIGkuYS5lPXQsaS5hfX1mdW5jdGlvbiBhKHQpe3JldHVybiByPXQsb319LCJFbjgrIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIn0oKX0sIkYvWEwiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCJua1k3IiksaT1uKCJJVVRiIiksbz1uKCJHNUoxIiksYT1uKCJQVThMIik7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj10W3QubGVuZ3RoLTFdO3N3aXRjaChPYmplY3Qoci5hKShuKT90LnBvcCgpOm49dm9pZCAwLHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIE9iamVjdChvLmIpKG4pO2Nhc2UgMTpyZXR1cm4gbj9PYmplY3QoaS5hKSh0LG4pOk9iamVjdChhLmEpKHRbMF0pO2RlZmF1bHQ6cmV0dXJuIE9iamVjdChpLmEpKHQsbil9fX0sRkZPbzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIHI9bigibXJTRyIpLGk9bigiMkJkaiIpLG89bigiNmFodyIpLGE9bigicHVnVCIpLHM9bigiTC9WOSIpLHU9bigiaUx4USIpLGw9bigiREtUYiIpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3N3aXRjaChpLnN5bmNFcnJvclZhbHVlPW51bGwsaS5zeW5jRXJyb3JUaHJvd249ITEsaS5zeW5jRXJyb3JUaHJvd2FibGU9ITEsaS5pc1N0b3BwZWQ9ITEsYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmkuZGVzdGluYXRpb249by5hO2JyZWFrO2Nhc2UgMTppZighZSl7aS5kZXN0aW5hdGlvbj1vLmE7YnJlYWt9aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtpZihoKGUpKXt2YXIgYT1lW3MuYV0oKTtpLnN5bmNFcnJvclRocm93YWJsZT1hLnN5bmNFcnJvclRocm93YWJsZSxpLmRlc3RpbmF0aW9uPWEsYS5hZGQoaSl9ZWxzZSBpLnN5bmNFcnJvclRocm93YWJsZT0hMCxpLmRlc3RpbmF0aW9uPW5ldyBmKGksZSk7YnJlYWt9ZGVmYXVsdDppLnN5bmNFcnJvclRocm93YWJsZT0hMCxpLmRlc3RpbmF0aW9uPW5ldyBmKGksZSxuLHIpfXJldHVybiBpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZVtzLmFdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT1uZXcgZSh0LG4scik7cmV0dXJuIGkuc3luY0Vycm9yVGhyb3dhYmxlPSExLGl9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7dGhpcy5pc1N0b3BwZWR8fHRoaXMuX25leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IodCkpfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9LGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZUFuZFJlY3ljbGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJlbnQsZT10aGlzLl9wYXJlbnRzO3JldHVybiB0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLl9wYXJlbnRzPW51bGwsdGhpcy51bnN1YnNjcmliZSgpLHRoaXMuY2xvc2VkPSExLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuX3BhcmVudD10LHRoaXMuX3BhcmVudHM9ZSx0aGlzfSxlfShhLmEpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixhKXt2YXIgcyx1PXQuY2FsbCh0aGlzKXx8dGhpczt1Ll9wYXJlbnRTdWJzY3JpYmVyPWU7dmFyIGw9dTtyZXR1cm4gT2JqZWN0KGkuYSkobik/cz1uOm4mJihzPW4ubmV4dCxyPW4uZXJyb3IsYT1uLmNvbXBsZXRlLG4hPT1vLmEmJihsPU9iamVjdC5jcmVhdGUobiksT2JqZWN0KGkuYSkobC51bnN1YnNjcmliZSkmJnUuYWRkKGwudW5zdWJzY3JpYmUuYmluZChsKSksbC51bnN1YnNjcmliZT11LnVuc3Vic2NyaWJlLmJpbmQodSkpKSx1Ll9jb250ZXh0PWwsdS5fbmV4dD1zLHUuX2Vycm9yPXIsdS5fY29tcGxldGU9YSx1fXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCYmdGhpcy5fbmV4dCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjt1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZS5zeW5jRXJyb3JUaHJvd2FibGU/dGhpcy5fX3RyeU9yU2V0RXJyb3IoZSx0aGlzLl9uZXh0LHQpJiZ0aGlzLnVuc3Vic2NyaWJlKCk6dGhpcy5fX3RyeU9yVW5zdWIodGhpcy5fbmV4dCx0KX19LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcixuPXUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nO2lmKHRoaXMuX2Vycm9yKW4mJmUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJvcihlLHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3ViKHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk7ZWxzZSBpZihlLnN5bmNFcnJvclRocm93YWJsZSluPyhlLnN5bmNFcnJvclZhbHVlPXQsZS5zeW5jRXJyb3JUaHJvd249ITApOk9iamVjdChsLmEpKHQpLHRoaXMudW5zdWJzY3JpYmUoKTtlbHNle2lmKHRoaXMudW5zdWJzY3JpYmUoKSxuKXRocm93IHQ7T2JqZWN0KGwuYSkodCl9fX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjtpZih0aGlzLl9jb21wbGV0ZSl7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gdC5fY29tcGxldGUuY2FsbCh0Ll9jb250ZXh0KX07dS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJmUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJvcihlLG4pLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3ViKG4pLHRoaXMudW5zdWJzY3JpYmUoKSl9ZWxzZSB0aGlzLnVuc3Vic2NyaWJlKCl9fSxlLnByb3RvdHlwZS5fX3RyeU9yVW5zdWI9ZnVuY3Rpb24odCxlKXt0cnl7dC5jYWxsKHRoaXMuX2NvbnRleHQsZSl9Y2F0Y2godCl7aWYodGhpcy51bnN1YnNjcmliZSgpLHUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IHQ7T2JqZWN0KGwuYSkodCl9fSxlLnByb3RvdHlwZS5fX3RyeU9yU2V0RXJyb3I9ZnVuY3Rpb24odCxlLG4pe2lmKCF1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyBuZXcgRXJyb3IoImJhZCBjYWxsIik7dHJ5e2UuY2FsbCh0aGlzLl9jb250ZXh0LG4pfWNhdGNoKGUpe3JldHVybiB1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZz8odC5zeW5jRXJyb3JWYWx1ZT1lLHQuc3luY0Vycm9yVGhyb3duPSEwLCEwKTooT2JqZWN0KGwuYSkoZSksITApfXJldHVybiExfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJlbnRTdWJzY3JpYmVyO3RoaXMuX2NvbnRleHQ9bnVsbCx0aGlzLl9wYXJlbnRTdWJzY3JpYmVyPW51bGwsdC51bnN1YnNjcmliZSgpfSxlfShjKTtmdW5jdGlvbiBoKHQpe3JldHVybiB0IGluc3RhbmNlb2YgY3x8InN5bmNFcnJvclRocm93YWJsZSJpbiB0JiZ0W3MuYV19fSxGVlN5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHI9ZnVuY3Rpb24oKXt9LGk9ZnVuY3Rpb24oKXt9LG89ZnVuY3Rpb24oKXt9LGE9ZnVuY3Rpb24oKXt9LHM9ZnVuY3Rpb24oKXt9LHU9ZnVuY3Rpb24oKXt9fSxGeGIxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCIrdEo0Iiksbz1uKCJTNVhRIiksYT1uKCJ1NjdEIikscz1uKCJKY1J2IiksdT1uKCIyZVBsIiksbD1uKCIvV1l2IiksYz1uKCJNY1NvIiksZj1uKCJFbjgrIiksaD1uKCJ4VGxhIiksZD1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2Ygci5hKXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5faXNTY2FsYXI/KGUubmV4dCh0LnZhbHVlKSx2b2lkIGUuY29tcGxldGUoKSk6dC5zdWJzY3JpYmUoZSl9O2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2guYV0pcmV0dXJuIE9iamVjdChzLmEpKHQpO2lmKE9iamVjdCh1LmEpKHQpKXJldHVybiBPYmplY3QoaS5hKSh0KTtpZihPYmplY3QobC5hKSh0KSlyZXR1cm4gT2JqZWN0KG8uYSkodCk7aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbZi5hXSlyZXR1cm4gT2JqZWN0KGEuYSkodCk7dmFyIGU9T2JqZWN0KGMuYSkodCk/ImFuIGludmFsaWQgb2JqZWN0IjoiJyIrdCsiJyI7dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIrZSsiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIEFycmF5LCBvciBJdGVyYWJsZS4iKX19LEZ6cWM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiSXAwUiIpLGk9bigiQ2NuRyIpLG89bmV3IGkubygiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChpLlYpKHIuZCl9fSksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgaS5tLHQmJih0aGlzLnZhbHVlPSh0LmJvZHk/dC5ib2R5LmRpcjpudWxsKXx8KHQuZG9jdW1lbnRFbGVtZW50P3QuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsKXx8Imx0ciIpfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY2hhbmdlLmNvbXBsZXRlKCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKG8sOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxzPWZ1bmN0aW9uKCl7fX0sRzVKMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCI2YmxGIiksaT1uZXcgci5hKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbXBsZXRlKCl9KTtmdW5jdGlvbiBvKHQpe3JldHVybiB0P2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgci5hKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pfSl9KHQpOml9fSxHaTNpOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIiksbz1uKCJUMURNIik7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1vLmEpLGZ1bmN0aW9uKG4pe3JldHVybiBuLmxpZnQobmV3IHModCxlKSl9fXZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuZHVlVGltZT10LHRoaXMuc2NoZWR1bGVyPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHUodCx0aGlzLmR1ZVRpbWUsdGhpcy5zY2hlZHVsZXIpKX0sdH0oKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLmR1ZVRpbWU9bixpLnNjaGVkdWxlcj1yLGkuZGVib3VuY2VkU3Vic2NyaXB0aW9uPW51bGwsaS5sYXN0VmFsdWU9bnVsbCxpLmhhc1ZhbHVlPSExLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuY2xlYXJEZWJvdW5jZSgpLHRoaXMubGFzdFZhbHVlPXQsdGhpcy5oYXNWYWx1ZT0hMCx0aGlzLmFkZCh0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbj10aGlzLnNjaGVkdWxlci5zY2hlZHVsZShsLHRoaXMuZHVlVGltZSx0aGlzKSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuZGVib3VuY2VkTmV4dCgpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUuZGVib3VuY2VkTmV4dD1mdW5jdGlvbigpe2lmKHRoaXMuY2xlYXJEZWJvdW5jZSgpLHRoaXMuaGFzVmFsdWUpe3ZhciB0PXRoaXMubGFzdFZhbHVlO3RoaXMubGFzdFZhbHVlPW51bGwsdGhpcy5oYXNWYWx1ZT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9fSxlLnByb3RvdHlwZS5jbGVhckRlYm91bmNlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb247bnVsbCE9PXQmJih0aGlzLnJlbW92ZSh0KSx0LnVuc3Vic2NyaWJlKCksdGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb249bnVsbCl9LGV9KGkuYSk7ZnVuY3Rpb24gbCh0KXt0LmRlYm91bmNlZE5leHQoKX19LElVVGI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIjZibEYiKSxpPW4oInB1Z1QiKSxvPW4oIit0SjQiKTtmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG5ldyByLmEoZT9mdW5jdGlvbihuKXt2YXIgcj1uZXcgaS5hLG89MDtyZXR1cm4gci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe28hPT10Lmxlbmd0aD8obi5uZXh0KHRbbysrXSksbi5jbG9zZWR8fHIuYWRkKHRoaXMuc2NoZWR1bGUoKSkpOm4uY29tcGxldGUoKX0pKSxyfTpPYmplY3Qoby5hKSh0KSl9fSxJcDBSOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gTX0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBSfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigibXJTRyIpLG89ZnVuY3Rpb24oKXt9LGE9bmV3IHIubygiTG9jYXRpb24gSW5pdGlhbGl6ZWQiKSxzPWZ1bmN0aW9uKCl7fSx1PW5ldyByLm8oImFwcEJhc2VIcmVmIiksbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIG49dGhpczt0aGlzLl9zdWJqZWN0PW5ldyByLm0sdGhpcy5fcGxhdGZvcm1TdHJhdGVneT1lO3ZhciBpPXRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlSHJlZj10LnN0cmlwVHJhaWxpbmdTbGFzaChjKGkpKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5Lm9uUG9wU3RhdGUoZnVuY3Rpb24odCl7bi5fc3ViamVjdC5lbWl0KHt1cmw6bi5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6dC5zdGF0ZSx0eXBlOnQudHlwZX0pfSl9cmV0dXJuIHQucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx0aGlzLm5vcm1hbGl6ZSh0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnBhdGgodCkpfSx0LnByb3RvdHlwZS5pc0N1cnJlbnRQYXRoRXF1YWxUbz1mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0iIiksdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrdC5ub3JtYWxpemVRdWVyeVBhcmFtcyhuKSl9LHQucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZS5zdGFydHNXaXRoKHQpP2Uuc3Vic3RyaW5nKHQubGVuZ3RoKTplfSh0aGlzLl9iYXNlSHJlZixjKGUpKSl9LHQucHJvdG90eXBlLnByZXBhcmVFeHRlcm5hbFVybD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIi8iIT09dFswXSYmKHQ9Ii8iK3QpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKHQpfSx0LnByb3RvdHlwZS5nbz1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9IiIpLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHVzaFN0YXRlKG4sIiIsdCxlKX0sdC5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0iIiksdm9pZCAwPT09biYmKG49bnVsbCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5yZXBsYWNlU3RhdGUobiwiIix0LGUpfSx0LnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5mb3J3YXJkKCl9LHQucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmJhY2soKX0sdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6dCxlcnJvcjplLGNvbXBsZXRlOm59KX0sdC5ub3JtYWxpemVRdWVyeVBhcmFtcz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIj8iIT09dFswXT8iPyIrdDp0fSx0LmpvaW5XaXRoU2xhc2g9ZnVuY3Rpb24odCxlKXtpZigwPT10Lmxlbmd0aClyZXR1cm4gZTtpZigwPT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj0wO3JldHVybiB0LmVuZHNXaXRoKCIvIikmJm4rKyxlLnN0YXJ0c1dpdGgoIi8iKSYmbisrLDI9PW4/dCtlLnN1YnN0cmluZygxKToxPT1uP3QrZTp0KyIvIitlfSx0LnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC8jfFw/fCQvKSxuPWUmJmUuaW5kZXh8fHQubGVuZ3RoO3JldHVybiB0LnNsaWNlKDAsbi0oIi8iPT09dFtuLTFdPzE6MCkpK3Quc2xpY2Uobil9LHR9KCk7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fcGxhdGZvcm1Mb2NhdGlvbj1lLHIuX2Jhc2VIcmVmPSIiLG51bGwhPW4mJihyLl9iYXNlSHJlZj1uKSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn0sZS5wcm90b3R5cGUucGF0aD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIGU9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBudWxsPT1lJiYoZT0iIyIpLGUubGVuZ3RoPjA/ZS5zdWJzdHJpbmcoMSk6ZX0sZS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPWwuam9pbldpdGhTbGFzaCh0aGlzLl9iYXNlSHJlZix0KTtyZXR1cm4gZS5sZW5ndGg+MD8iIyIrZTplfSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitsLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHIpKTswPT1pLmxlbmd0aCYmKGk9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUodCxlLGkpfSxlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitsLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHIpKTswPT1pLmxlbmd0aCYmKGk9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUodCxlLGkpfSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX0sZX0ocyksaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO2lmKHIuX3BsYXRmb3JtTG9jYXRpb249ZSxudWxsPT1uJiYobj1yLl9wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpKSxudWxsPT1uKXRocm93IG5ldyBFcnJvcigiTm8gYmFzZSBocmVmIHNldC4gUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIEFQUF9CQVNFX0hSRUYgdG9rZW4gb3IgYWRkIGEgYmFzZSBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC4iKTtyZXR1cm4gci5fYmFzZUhyZWY9bixyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn0sZS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3JldHVybiBsLmpvaW5XaXRoU2xhc2godGhpcy5fYmFzZUhyZWYsdCl9LGUucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrbC5ub3JtYWxpemVRdWVyeVBhcmFtcyh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCksbj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJnQ/IiIrZStuOmV9LGUucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK2wubm9ybWFsaXplUXVlcnlQYXJhbXMocikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rbC5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUodCxlLGkpfSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX0sZX0ocyksZD12b2lkIDAscD1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLGRdLFtbIkFNIiwiUE0iXSxkLGRdLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLGQsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLGQsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixkLCJ7MX0gJ2F0JyB7MH0iLGRdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiJCIsIlVTIERvbGxhciIse30sZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcihNYXRoLmFicyh0KSksbj10LnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PW4/MTo1fV0sbT17fSx5PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuWmVybz0wXT0iWmVybyIsdFt0Lk9uZT0xXT0iT25lIix0W3QuVHdvPTJdPSJUd28iLHRbdC5GZXc9M109IkZldyIsdFt0Lk1hbnk9NF09Ik1hbnkiLHRbdC5PdGhlcj01XT0iT3RoZXIiLHR9KHt9KSxnPW5ldyByLm8oIlVzZVY0UGx1cmFscyIpLHY9ZnVuY3Rpb24oKXt9LGI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5sb2NhbGU9ZSxyLmRlcHJlY2F0ZWRQbHVyYWxGbj1uLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0UGx1cmFsQ2F0ZWdvcnk9ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5kZXByZWNhdGVkUGx1cmFsRm4/dGhpcy5kZXByZWNhdGVkUGx1cmFsRm4oZXx8dGhpcy5sb2NhbGUsdCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSxuPW1bZV07aWYobilyZXR1cm4gbjt2YXIgcj1lLnNwbGl0KCItIilbMF07aWYobj1tW3JdKXJldHVybiBuO2lmKCJlbiI9PT1yKXJldHVybiBwO3Rocm93IG5ldyBFcnJvcignTWlzc2luZyBsb2NhbGUgZGF0YSBmb3IgdGhlIGxvY2FsZSAiJyt0KyciLicpfSh0KVsxOF19KGV8fHRoaXMubG9jYWxlKSh0KSl7Y2FzZSB5Llplcm86cmV0dXJuInplcm8iO2Nhc2UgeS5PbmU6cmV0dXJuIm9uZSI7Y2FzZSB5LlR3bzpyZXR1cm4idHdvIjtjYXNlIHkuRmV3OnJldHVybiJmZXciO2Nhc2UgeS5NYW55OnJldHVybiJtYW55IjtkZWZhdWx0OnJldHVybiJvdGhlciJ9fSxlfSh2KTtmdW5jdGlvbiBfKHQsZSl7ZT1lbmNvZGVVUklDb21wb25lbnQoZSk7dHJ5e2Zvcih2YXIgbj1PYmplY3QoaS5lKSh0LnNwbGl0KCI7IikpLHI9bi5uZXh0KCk7IXIuZG9uZTtyPW4ubmV4dCgpKXt2YXIgbz1yLnZhbHVlLGE9by5pbmRleE9mKCI9Iikscz1PYmplY3QoaS5jKSgtMT09YT9bbywiIl06W28uc2xpY2UoMCxhKSxvLnNsaWNlKGErMSldLDIpLHU9c1sxXTtpZihzWzBdLnRyaW0oKT09PWUpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh1KX19Y2F0Y2godCl7bD17ZXJyb3I6dH19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKGM9bi5yZXR1cm4pJiZjLmNhbGwobil9ZmluYWxseXtpZihsKXRocm93IGwuZXJyb3J9fXJldHVybiBudWxsO3ZhciBsLGN9dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX2l0ZXJhYmxlRGlmZmVycz10LHRoaXMuX2tleVZhbHVlRGlmZmVycz1lLHRoaXMuX25nRWw9bix0aGlzLl9yZW5kZXJlcj1yLHRoaXMuX2luaXRpYWxDbGFzc2VzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImtsYXNzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2luaXRpYWxDbGFzc2VzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTpbXSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9yYXdDbGFzcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5fcmF3Q2xhc3MpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faXRlcmFibGVEaWZmZXI9bnVsbCx0aGlzLl9rZXlWYWx1ZURpZmZlcj1udWxsLHRoaXMuX3Jhd0NsYXNzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTp0LHRoaXMuX3Jhd0NsYXNzJiYoT2JqZWN0KHIuUmEpKHRoaXMuX3Jhd0NsYXNzKT90aGlzLl9pdGVyYWJsZURpZmZlcj10aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCk6dGhpcy5fa2V5VmFsdWVEaWZmZXI9dGhpcy5fa2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXtpZih0aGlzLl9pdGVyYWJsZURpZmZlcil7dmFyIHQ9dGhpcy5faXRlcmFibGVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7dCYmdGhpcy5fYXBwbHlJdGVyYWJsZUNoYW5nZXModCl9ZWxzZSBpZih0aGlzLl9rZXlWYWx1ZURpZmZlcil7dmFyIGU9dGhpcy5fa2V5VmFsdWVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlLZXlWYWx1ZUNoYW5nZXMoZSl9fSx0LnByb3RvdHlwZS5fYXBwbHlLZXlWYWx1ZUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQua2V5LHQuY3VycmVudFZhbHVlKX0pLHQuZm9yRWFjaENoYW5nZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXt0LnByZXZpb3VzVmFsdWUmJmUuX3RvZ2dsZUNsYXNzKHQua2V5LCExKX0pfSx0LnByb3RvdHlwZS5fYXBwbHlJdGVyYWJsZUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lml0ZW0pdGhyb3cgbmV3IEVycm9yKCJOZ0NsYXNzIGNhbiBvbmx5IHRvZ2dsZSBDU1MgY2xhc3NlcyBleHByZXNzZWQgYXMgc3RyaW5ncywgZ290ICIrT2JqZWN0KHIuZmIpKHQuaXRlbSkpO2UuX3RvZ2dsZUNsYXNzKHQuaXRlbSwhMCl9KSx0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5pdGVtLCExKX0pfSx0LnByb3RvdHlwZS5fYXBwbHlDbGFzc2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmKEFycmF5LmlzQXJyYXkodCl8fHQgaW5zdGFuY2VvZiBTZXQ/dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LCEwKX0pOk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKG4sISF0W25dKX0pKX0sdC5wcm90b3R5cGUuX3JlbW92ZUNsYXNzZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFNldD90LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQsITEpfSk6T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModCwhMSl9KSl9LHQucHJvdG90eXBlLl90b2dnbGVDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7KHQ9dC50cmltKCkpJiZ0LnNwbGl0KC9ccysvZykuZm9yRWFjaChmdW5jdGlvbih0KXtlP24uX3JlbmRlcmVyLmFkZENsYXNzKG4uX25nRWwubmF0aXZlRWxlbWVudCx0KTpuLl9yZW5kZXJlci5yZW1vdmVDbGFzcyhuLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsdCl9KX0sdH0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLiRpbXBsaWNpdD10LHRoaXMubmdGb3JPZj1lLHRoaXMuaW5kZXg9bix0aGlzLmNvdW50PXJ9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsYXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJldmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXglMj09MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9kZCIse2dldDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmV2ZW59LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlld0NvbnRhaW5lcj10LHRoaXMuX3RlbXBsYXRlPWUsdGhpcy5fZGlmZmVycz1uLHRoaXMuX2RpZmZlcj1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nRm9yVHJhY2tCeSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFja0J5Rm59LHNldDpmdW5jdGlvbih0KXtPYmplY3Qoci5XKSgpJiZudWxsIT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdCYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInRyYWNrQnkgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSsiLiBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2RvY3MvdHMvbGF0ZXN0L2FwaS9jb21tb24vaW5kZXgvTmdGb3ItZGlyZWN0aXZlLmh0bWwjISNjaGFuZ2UtcHJvcGFnYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIiksdGhpcy5fdHJhY2tCeUZuPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0ZvclRlbXBsYXRlIix7c2V0OmZ1bmN0aW9uKHQpe3QmJih0aGlzLl90ZW1wbGF0ZT10KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXtpZigibmdGb3JPZiJpbiB0KXt2YXIgZT10Lm5nRm9yT2YuY3VycmVudFZhbHVlO2lmKCF0aGlzLl9kaWZmZXImJmUpdHJ5e3RoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoZSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KX1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK2UrIicgb2YgdHlwZSAnIisoKG49ZSkubmFtZXx8dHlwZW9mIG4pKyInLiBOZ0ZvciBvbmx5IHN1cHBvcnRzIGJpbmRpbmcgdG8gSXRlcmFibGVzIHN1Y2ggYXMgQXJyYXlzLiIpfX12YXIgbn0sdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGlmZmVyKXt2YXIgdD10aGlzLl9kaWZmZXIuZGlmZih0aGlzLm5nRm9yT2YpO3QmJnRoaXMuX2FwcGx5Q2hhbmdlcyh0KX19LHQucHJvdG90eXBlLl9hcHBseUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVtdO3QuZm9yRWFjaE9wZXJhdGlvbihmdW5jdGlvbih0LHIsaSl7aWYobnVsbD09dC5wcmV2aW91c0luZGV4KXt2YXIgbz1lLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhlLl90ZW1wbGF0ZSxuZXcgeChudWxsLGUubmdGb3JPZiwtMSwtMSksaSksYT1uZXcgQyh0LG8pO24ucHVzaChhKX1lbHNlIG51bGw9PWk/ZS5fdmlld0NvbnRhaW5lci5yZW1vdmUocik6KG89ZS5fdmlld0NvbnRhaW5lci5nZXQociksZS5fdmlld0NvbnRhaW5lci5tb3ZlKG8saSksYT1uZXcgQyh0LG8pLG4ucHVzaChhKSl9KTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl0aGlzLl9wZXJWaWV3Q2hhbmdlKG5bcl0udmlldyxuW3JdLnJlY29yZCk7cj0wO2Zvcih2YXIgaT10aGlzLl92aWV3Q29udGFpbmVyLmxlbmd0aDtyPGk7cisrKXt2YXIgbz10aGlzLl92aWV3Q29udGFpbmVyLmdldChyKTtvLmNvbnRleHQuaW5kZXg9cixvLmNvbnRleHQuY291bnQ9aSxvLmNvbnRleHQubmdGb3JPZj10aGlzLm5nRm9yT2Z9dC5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZnVuY3Rpb24odCl7ZS5fdmlld0NvbnRhaW5lci5nZXQodC5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX0pfSx0LnByb3RvdHlwZS5fcGVyVmlld0NoYW5nZT1mdW5jdGlvbih0LGUpe3QuY29udGV4dC4kaW1wbGljaXQ9ZS5pdGVtfSx0fSgpLEM9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY29yZD10LHRoaXMudmlldz1lfSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXdDb250YWluZXI9dCx0aGlzLl9jb250ZXh0PW5ldyBFLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1udWxsLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWY9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0lmIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj10LHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZUaGVuIix7c2V0OmZ1bmN0aW9uKHQpe2soIm5nSWZUaGVuIix0KSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9dCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZFbHNlIix7c2V0OmZ1bmN0aW9uKHQpe2soIm5nSWZFbHNlIix0KSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9dCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fdXBkYXRlVmlldz1mdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX0sdH0oKSxFPWZ1bmN0aW9uKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH07ZnVuY3Rpb24gayh0LGUpe2lmKGUmJiFlLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IodCsiIG11c3QgYmUgYSBUZW1wbGF0ZVJlZiwgYnV0IHJlY2VpdmVkICciK09iamVjdChyLmZiKShlKSsiJy4iKX12YXIgVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX2RpZmZlcnM9dCx0aGlzLl9uZ0VsPWUsdGhpcy5fcmVuZGVyZXI9bn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ1N0eWxlIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX25nU3R5bGU9dCwhdGhpcy5fZGlmZmVyJiZ0JiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0KS5jcmVhdGUoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGlmZmVyKXt2YXIgdD10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTt0JiZ0aGlzLl9hcHBseUNoYW5nZXModCl9fSx0LnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN0eWxlKHQua2V5LG51bGwpfSksdC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdHlsZSh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hDaGFuZ2VkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3R5bGUodC5rZXksdC5jdXJyZW50VmFsdWUpfSl9LHQucHJvdG90eXBlLl9zZXRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdChpLmMpKHQuc3BsaXQoIi4iKSwyKSxyPW5bMF0sbz1uWzFdO251bGwhPShlPW51bGwhPWUmJm8/IiIrZStvOmUpP3RoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyLGUpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKX0sdH0oKSxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6ZnVuY3Rpb24odCl7dGhyb3cgdH19KX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHR9KCksQT1uZXcoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVTdWJzY3JpcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50aGVuKGUsZnVuY3Rpb24odCl7dGhyb3cgdH0pfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe30sdH0oKSksaj1uZXcgSSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9yZWY9dCx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpfSx0LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29iaj90IT09dGhpcy5fb2JqPyh0aGlzLl9kaXNwb3NlKCksdGhpcy50cmFuc2Zvcm0odCkpOnRoaXMuX2xhdGVzdFZhbHVlPT09dGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT90aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlOih0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPXRoaXMuX2xhdGVzdFZhbHVlLHIuUC53cmFwKHRoaXMuX2xhdGVzdFZhbHVlKSk6KHQmJnRoaXMuX3N1YnNjcmliZSh0KSx0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPXRoaXMuX2xhdGVzdFZhbHVlLHRoaXMuX2xhdGVzdFZhbHVlKX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX29iaj10LHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KHQpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24odCxmdW5jdGlvbihuKXtyZXR1cm4gZS5fdXBkYXRlTGF0ZXN0VmFsdWUodCxuKX0pfSx0LnByb3RvdHlwZS5fc2VsZWN0U3RyYXRlZ3k9ZnVuY3Rpb24oZSl7aWYoT2JqZWN0KHIuVGEpKGUpKXJldHVybiBBO2lmKE9iamVjdChyLlNhKShlKSlyZXR1cm4gajt0aHJvdyBuPXQsRXJyb3IoIkludmFsaWRQaXBlQXJndW1lbnQ6ICciK2UrIicgZm9yIHBpcGUgJyIrT2JqZWN0KHIuZmIpKG4pKyInIik7dmFyIG59LHQucHJvdG90eXBlLl9kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fc3RyYXRlZ3kuZGlzcG9zZSh0aGlzLl9zdWJzY3JpcHRpb24pLHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfSx0LnByb3RvdHlwZS5fdXBkYXRlTGF0ZXN0VmFsdWU9ZnVuY3Rpb24odCxlKXt0PT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfSx0fSgpLE09ZnVuY3Rpb24oKXt9LE49bmV3IHIubygiRG9jdW1lbnRUb2tlbiIpLFI9ImJyb3dzZXIiLEQ9InNlcnZlciI7ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdD09PVJ9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdD09PUR9fSxKY1J2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJ4VGxhIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dFtyLmFdKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4uc3Vic2NyaWJlKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIik7cmV0dXJuIG4uc3Vic2NyaWJlKGUpfX19LEs5SWE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBmfSk7dmFyIHI9bigibXJTRyIpLGk9bigiNmJsRiIpLG89bigiRkZPbyIpLGE9bigicHVnVCIpLHM9bigiOGc4QSIpLHU9bigidU1hTyIpLGw9bigiTC9WOSIpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi5kZXN0aW5hdGlvbj1lLG59cmV0dXJuIHIuYihlLHQpLGV9KG8uYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLm9ic2VydmVycz1bXSxlLmNsb3NlZD0hMSxlLmlzU3RvcHBlZD0hMSxlLmhhc0Vycm9yPSExLGUudGhyb3duRXJyb3I9bnVsbCxlfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZVtsLmFdPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKHRoaXMpfSxlLnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBoKHRoaXMsdGhpcyk7cmV0dXJuIGUub3BlcmF0b3I9dCxlfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7aWYoIXRoaXMuaXNTdG9wcGVkKWZvcih2YXIgZT10aGlzLm9ic2VydmVycyxuPWUubGVuZ3RoLHI9ZS5zbGljZSgpLGk9MDtpPG47aSsrKXJbaV0ubmV4dCh0KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTt0aGlzLmhhc0Vycm9yPSEwLHRoaXMudGhyb3duRXJyb3I9dCx0aGlzLmlzU3RvcHBlZD0hMDtmb3IodmFyIGU9dGhpcy5vYnNlcnZlcnMsbj1lLmxlbmd0aCxyPWUuc2xpY2UoKSxpPTA7aTxuO2krKylyW2ldLmVycm9yKHQpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7dGhpcy5pc1N0b3BwZWQ9ITA7Zm9yKHZhciB0PXRoaXMub2JzZXJ2ZXJzLGU9dC5sZW5ndGgsbj10LnNsaWNlKCkscj0wO3I8ZTtyKyspbltyXS5jb21wbGV0ZSgpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkPSEwLHRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPW51bGx9LGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdGhpcy5oYXNFcnJvcj8odC5lcnJvcih0aGlzLnRocm93bkVycm9yKSxhLmEuRU1QVFkpOnRoaXMuaXNTdG9wcGVkPyh0LmNvbXBsZXRlKCksYS5hLkVNUFRZKToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxuZXcgdS5hKHRoaXMsdCkpfSxlLnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgaS5hO3JldHVybiB0LnNvdXJjZT10aGlzLHR9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBoKHQsZSl9LGV9KGkuYSksaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmRlc3RpbmF0aW9uPWUsci5zb3VyY2U9bixyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5uZXh0JiZlLm5leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5lcnJvciYmdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlc3RpbmF0aW9uO3QmJnQuY29tcGxldGUmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2Uuc3Vic2NyaWJlKHQpOmEuYS5FTVBUWX0sZX0oZil9LCJML1Y5IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigicnhTdWJzY3JpYmVyIik6IkBAcnhTdWJzY3JpYmVyIn0sTEM1cDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbigibjZnRyIpO3ZhciByPWZ1bmN0aW9uKCl7fX0sTUdCUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGUucHJvdG90eXBlLm5vdGlmeUVycm9yPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShuKCJGRk9vIikuYSl9LE1jU286ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sIk1obSsiOmZ1bmN0aW9uKG1vZHVsZSxfX3dlYnBhY2tfZXhwb3J0c19fLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0IjtfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywiYSIsZnVuY3Rpb24oKXtyZXR1cm4gQ2h1bmtMb2FkZXJTZXJ2aWNlfSk7dmFyIHJ4anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIwL3VRIiksX3BhZ2VfY2h1bmtfcmVjb3JkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX189X193ZWJwYWNrX3JlcXVpcmVfXygicmYzMCIpLF9lbnZpcm9ubWVudHNfZW52aXJvbm1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJBeXRSIiksX2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fPV9fd2VicGFja19yZXF1aXJlX18oIkNjbkciKSxfYW5ndWxhcl9jb21tb25faHR0cF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fPV9fd2VicGFja19yZXF1aXJlX18oInQvTmEiKSxDaHVua0xvYWRlclNlcnZpY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBDaHVua0xvYWRlclNlcnZpY2UodCl7dmFyIGU9dGhpczt0aGlzLmh0dHA9dCx0aGlzLnJlY29yZHM9X3BhZ2VfY2h1bmtfcmVjb3JkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18uYSwwIT1fZW52aXJvbm1lbnRzX2Vudmlyb25tZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18uYS5wcm9kdWN0aW9uJiZ0aGlzLnJlY29yZHMuZm9yRWFjaChmdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5sb2FkUGFnZUNodW5rKHQucGFnZU5hbWUsZnVuY3Rpb24oKXt9KX0pfSl9cmV0dXJuIENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUuYXN5bmNMb2FkUGFnZUNodW5rPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1uZXcgUHJvbWlzZShmdW5jdGlvbihuLHIpe3ZhciBpPWUucmVjb3Jkcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBhZ2VOYW1lPT10fSk7dm9pZCAwIT1pPyhjb25zb2xlLmxvZygiTG9hZGluZyA6ICIraS5wYWdlTmFtZSsiICgiK2kuY2h1bmtVUkwrIiwgIitpLmNodW5rTG9hZGVkKyIpIFtBc3luY10iKSwwPT1pLmNodW5rTG9hZGVkP2UuaHR0cC5nZXQoaS5jaHVua1VSTCx7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gZS5hc3luY0xvYWREYXRhQ2h1bmsodCxpLG4pfSxmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS5sb2codCl9KTpuKCEwKSk6bighMCl9KTtyZXR1cm4gT2JqZWN0KHJ4anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXy5hKShuKX0sQ2h1bmtMb2FkZXJTZXJ2aWNlLnByb3RvdHlwZS5sb2FkUGFnZUNodW5rPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPXRoaXMucmVjb3Jkcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBhZ2VOYW1lPT10fSk7dm9pZCAwIT1yPyhjb25zb2xlLmxvZygiTG9hZGluZyA6ICIrci5wYWdlTmFtZSsiICgiK3IuY2h1bmtVUkwrIikiKSwwPT1yLmNodW5rTG9hZGVkP3RoaXMuaHR0cC5nZXQoci5jaHVua1VSTCx7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gbi5sb2FkRGF0YUNodW5rKHQsZSxyKX0sZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSk6ZSgpKTplKCl9LENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUubG9hZERhdGFDaHVuaz1mdW5jdGlvbihiYXNlNjRkYXRhLGNhbGxiYWNrLHJlY29yZCl7dmFyIGRlY29kZWREYXRhPWF0b2IoYmFzZTY0ZGF0YSk7ZXZhbChkZWNvZGVkRGF0YSkscmVjb3JkLmNodW5rTG9hZGVkPSEwLGNvbnNvbGUubG9nKCJMb2FkZWQgOiAiK3JlY29yZC5wYWdlTmFtZSsiICgiK3JlY29yZC5jaHVua1VSTCsiKSIpLGNhbGxiYWNrKCl9LENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUuYXN5bmNMb2FkRGF0YUNodW5rPWZ1bmN0aW9uKGJhc2U2NGRhdGEscmVjb3JkLHJlc29sdmUpe3ZhciBkZWNvZGVkRGF0YT1hdG9iKGJhc2U2NGRhdGEpO2V2YWwoZGVjb2RlZERhdGEpLHJlY29yZC5jaHVua0xvYWRlZD0hMCxjb25zb2xlLmxvZygiTG9hZGVkIDogIityZWNvcmQucGFnZU5hbWUrIiAoIityZWNvcmQuY2h1bmtVUkwrIikgW0FzeW5jXSIpLHJlc29sdmUoITApfSxDaHVua0xvYWRlclNlcnZpY2UubmdJbmplY3RhYmxlRGVmPV9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXy5SKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDaHVua0xvYWRlclNlcnZpY2UoX2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fLlYoX2FuZ3VsYXJfY29tbW9uX2h0dHBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXy5jKSl9LHRva2VuOkNodW5rTG9hZGVyU2VydmljZSxwcm92aWRlZEluOiJyb290In0pLENodW5rTG9hZGVyU2VydmljZX0oKX0sIk1yK1giOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW4oIkNjbkciKSxpPShuKCJTTXNtIiksbigiRnpxYyIpLG4oIldmNHAiKSxyLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1pY29ue2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MjRweDt3aWR0aDoyNHB4fS5tYXQtaWNvbi5tYXQtaWNvbi1pbmxpbmV7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0fVtkaXI9cnRsXSAubWF0LWljb24tcnRsLW1pcnJvcnt0cmFuc2Zvcm06c2NhbGUoLTEsMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gci5pYigyLFtyLlhhKG51bGwsMCldLG51bGwsbnVsbCl9fSxOU1lMOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBZdH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBhZX0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB1ZX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBsZX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oImloWVkiKTtmdW5jdGlvbiBvKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzfWZ1bmN0aW9uIGEodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBpLmQ7Y2FzZSAxOnJldHVybiB0WzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBpLm4odCl9fWZ1bmN0aW9uIHModCxlLG4scixvLGEpe3ZvaWQgMD09PW8mJihvPXt9KSx2b2lkIDA9PT1hJiYoYT17fSk7dmFyIHM9W10sdT1bXSxsPS0xLGM9bnVsbDtpZihyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5vZmZzZXQscj1uPT1sLGY9ciYmY3x8e307T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1uLHU9dFtuXTtpZigib2Zmc2V0IiE9PW4pc3dpdGNoKHI9ZS5ub3JtYWxpemVQcm9wZXJ0eU5hbWUocixzKSx1KXtjYXNlIGkubzp1PW9bbl07YnJlYWs7Y2FzZSBpLmE6dT1hW25dO2JyZWFrO2RlZmF1bHQ6dT1lLm5vcm1hbGl6ZVN0eWxlVmFsdWUobixyLHUscyl9ZltyXT11fSkscnx8dS5wdXNoKGYpLGM9ZixsPW59KSxzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBhbmltYXRlIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczpcbiAtICIrcy5qb2luKCJcbiAtICIpKTtyZXR1cm4gdX1mdW5jdGlvbiB1KHQsZSxuLHIpe3N3aXRjaChlKXtjYXNlInN0YXJ0Ijp0Lm9uU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gcihuJiZsKG4sInN0YXJ0Iix0KSl9KTticmVhaztjYXNlImRvbmUiOnQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHIobiYmbChuLCJkb25lIix0KSl9KTticmVhaztjYXNlImRlc3Ryb3kiOnQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIHIobiYmbChuLCJkZXN0cm95Iix0KSl9KX19ZnVuY3Rpb24gbCh0LGUsbil7dmFyIHI9bi50b3RhbFRpbWUsaT1jKHQuZWxlbWVudCx0LnRyaWdnZXJOYW1lLHQuZnJvbVN0YXRlLHQudG9TdGF0ZSxlfHx0LnBoYXNlTmFtZSx2b2lkIDA9PXI/dC50b3RhbFRpbWU6ciwhIW4uZGlzYWJsZWQpLG89dC5fZGF0YTtyZXR1cm4gbnVsbCE9byYmKGkuX2RhdGE9byksaX1mdW5jdGlvbiBjKHQsZSxuLHIsaSxvLGEpe3JldHVybiB2b2lkIDA9PT1pJiYoaT0iIiksdm9pZCAwPT09byYmKG89MCkse2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLGZyb21TdGF0ZTpuLHRvU3RhdGU6cixwaGFzZU5hbWU6aSx0b3RhbFRpbWU6byxkaXNhYmxlZDohIWF9fWZ1bmN0aW9uIGYodCxlLG4pe3ZhciByO3JldHVybiB0IGluc3RhbmNlb2YgTWFwPyhyPXQuZ2V0KGUpKXx8dC5zZXQoZSxyPW4pOihyPXRbZV0pfHwocj10W2VdPW4pLHJ9ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmluZGV4T2YoIjoiKTtyZXR1cm5bdC5zdWJzdHJpbmcoMSxlKSx0LnN1YnN0cihlKzEpXX12YXIgZD1mdW5jdGlvbih0LGUpe3JldHVybiExfSxwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LG09ZnVuY3Rpb24odCxlLG4pe3JldHVybltdfSx5PW8oKTtpZih5fHwidW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQpe2lmKGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb250YWlucyhlKX0seXx8RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcylwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWF0Y2hlcyhlKX07ZWxzZXt2YXIgZz1FbGVtZW50LnByb3RvdHlwZSx2PWcubWF0Y2hlc1NlbGVjdG9yfHxnLm1vek1hdGNoZXNTZWxlY3Rvcnx8Zy5tc01hdGNoZXNTZWxlY3Rvcnx8Zy5vTWF0Y2hlc1NlbGVjdG9yfHxnLndlYmtpdE1hdGNoZXNTZWxlY3Rvcjt2JiYocD1mdW5jdGlvbih0LGUpe3JldHVybiB2LmFwcGx5KHQsW2VdKX0pfW09ZnVuY3Rpb24odCxlLG4pe3ZhciBpPVtdO2lmKG4paS5wdXNoLmFwcGx5KGksT2JqZWN0KHIuZCkodC5xdWVyeVNlbGVjdG9yQWxsKGUpKSk7ZWxzZXt2YXIgbz10LnF1ZXJ5U2VsZWN0b3IoZSk7byYmaS5wdXNoKG8pfXJldHVybiBpfX12YXIgYj1udWxsLF89ITE7ZnVuY3Rpb24gdyh0KXtifHwoYj0oInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5ib2R5Om51bGwpfHx7fSxfPSEhYi5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gYi5zdHlsZSk7dmFyIGU9ITA7cmV0dXJuIGIuc3R5bGUmJiFmdW5jdGlvbih0KXtyZXR1cm4iZWJraXQiPT10LnN1YnN0cmluZygxLDYpfSh0KSYmIShlPXQgaW4gYi5zdHlsZSkmJl8mJihlPSJXZWJraXQiK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSlpbiBiLnN0eWxlKSxlfXZhciB4PXAsTz1kLEM9bTtmdW5jdGlvbiBTKHQpe3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPW4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKTtlW3JdPXRbbl19KSxlfXZhciBFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiB3KHQpfSx0LnByb3RvdHlwZS5tYXRjaGVzRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB4KHQsZSl9LHQucHJvdG90eXBlLmNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gQyh0LGUsbil9LHQucHJvdG90eXBlLmNvbXB1dGVTdHlsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG58fCIifSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQsZSxuLHIsbyxhLHMpe3JldHVybiB2b2lkIDA9PT1hJiYoYT1bXSksbmV3IGkuZChuLHIpfSx0fSgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lk5PT1A9bmV3IEUsdH0oKSxUPTFlMztmdW5jdGlvbiBJKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10Lm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiFlfHxlLmxlbmd0aDwyPzA6QShwYXJzZUZsb2F0KGVbMV0pLGVbMl0pfWZ1bmN0aW9uIEEodCxlKXtzd2l0Y2goZSl7Y2FzZSJzIjpyZXR1cm4gdCpUO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIGoodCxlLG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP3Q6ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9MCxvPSIiO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGE9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PWEpcmV0dXJuIGUucHVzaCgnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJykse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O3I9QShwYXJzZUZsb2F0KGFbMV0pLGFbMl0pO3ZhciBzPWFbM107bnVsbCE9cyYmKGk9QShNYXRoLmZsb29yKHBhcnNlRmxvYXQocykpLGFbNF0pKTt2YXIgdT1hWzVdO3UmJihvPXUpfWVsc2Ugcj10O2lmKCFuKXt2YXIgbD0hMSxjPWUubGVuZ3RoO3I8MCYmKGUucHVzaCgiRHVyYXRpb24gdmFsdWVzIGJlbG93IDAgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFuaW1hdGlvbiBzdGVwLiIpLGw9ITApLGk8MCYmKGUucHVzaCgiRGVsYXkgdmFsdWVzIGJlbG93IDAgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFuaW1hdGlvbiBzdGVwLiIpLGw9ITApLGwmJmUuc3BsaWNlKGMsMCwnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJyl9cmV0dXJue2R1cmF0aW9uOnIsZGVsYXk6aSxlYXNpbmc6b319KHQsZSxuKX1mdW5jdGlvbiBQKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pLGV9ZnVuY3Rpb24gTSh0LGUsbil7aWYodm9pZCAwPT09biYmKG49e30pLGUpZm9yKHZhciByIGluIHQpbltyXT10W3JdO2Vsc2UgUCh0LG4pO3JldHVybiBufWZ1bmN0aW9uIE4odCxlLG4pe3JldHVybiBuP2UrIjoiK24rIjsiOiIifWZ1bmN0aW9uIFIodCl7Zm9yKHZhciBlPSIiLG49MDtuPHQuc3R5bGUubGVuZ3RoO24rKyllKz1OKDAscj10LnN0eWxlLml0ZW0obiksdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHIpKTtmb3IodmFyIHIgaW4gdC5zdHlsZSl0LnN0eWxlLmhhc093blByb3BlcnR5KHIpJiYhci5zdGFydHNXaXRoKCJfIikmJihlKz1OKDAsci5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksdC5zdHlsZVtyXSkpO3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsZSl9ZnVuY3Rpb24gRCh0LGUpe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPVcobik7dC5zdHlsZVtyXT1lW25dfSksbygpJiZSKHQpKX1mdW5jdGlvbiBMKHQsZSl7dC5zdHlsZSYmKE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49VyhlKTt0LnN0eWxlW25dPSIifSksbygpJiZSKHQpKX1mdW5jdGlvbiBGKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPzE9PXQubGVuZ3RoP3RbMF06T2JqZWN0KGkuaSkodCk6dH12YXIgVj1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiBVKHQpe3ZhciBlPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Zm9yKHZhciBuPXQudG9TdHJpbmcoKSxyPXZvaWQgMDtyPVYuZXhlYyhuKTspZS5wdXNoKHJbMV0pO1YubGFzdEluZGV4PTB9cmV0dXJuIGV9ZnVuY3Rpb24geih0LGUsbil7dmFyIHI9dC50b1N0cmluZygpLGk9ci5yZXBsYWNlKFYsZnVuY3Rpb24odCxyKXt2YXIgaT1lW3JdO3JldHVybiBlLmhhc093blByb3BlcnR5KHIpfHwobi5wdXNoKCJQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIHBhcmFtICIrciksaT0iIiksaS50b1N0cmluZygpfSk7cmV0dXJuIGk9PXI/dDppfWZ1bmN0aW9uIEIodCl7Zm9yKHZhciBlPVtdLG49dC5uZXh0KCk7IW4uZG9uZTspZS5wdXNoKG4udmFsdWUpLG49dC5uZXh0KCk7cmV0dXJuIGV9dmFyIEg9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQucmVwbGFjZShILGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiB0WzFdLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBxKHQsZSl7cmV0dXJuIDA9PT10fHwwPT09ZX1mdW5jdGlvbiBZKHQsZSxuKXt2YXIgcj1PYmplY3Qua2V5cyhuKTtpZihyLmxlbmd0aCYmZS5sZW5ndGgpe3ZhciBpPWVbMF0sbz1bXTtpZihyLmZvckVhY2goZnVuY3Rpb24odCl7aS5oYXNPd25Qcm9wZXJ0eSh0KXx8by5wdXNoKHQpLGlbdF09blt0XX0pLG8ubGVuZ3RoKWZvcih2YXIgYT1mdW5jdGlvbigpe3ZhciBuPWVbc107by5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZV09USh0LGUpfSl9LHM9MTtzPGUubGVuZ3RoO3MrKylhKCl9cmV0dXJuIGV9ZnVuY3Rpb24gRyh0LGUsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSA3OnJldHVybiB0LnZpc2l0VHJpZ2dlcihlLG4pO2Nhc2UgMDpyZXR1cm4gdC52aXNpdFN0YXRlKGUsbik7Y2FzZSAxOnJldHVybiB0LnZpc2l0VHJhbnNpdGlvbihlLG4pO2Nhc2UgMjpyZXR1cm4gdC52aXNpdFNlcXVlbmNlKGUsbik7Y2FzZSAzOnJldHVybiB0LnZpc2l0R3JvdXAoZSxuKTtjYXNlIDQ6cmV0dXJuIHQudmlzaXRBbmltYXRlKGUsbik7Y2FzZSA1OnJldHVybiB0LnZpc2l0S2V5ZnJhbWVzKGUsbik7Y2FzZSA2OnJldHVybiB0LnZpc2l0U3R5bGUoZSxuKTtjYXNlIDg6cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UoZSxuKTtjYXNlIDk6cmV0dXJuIHQudmlzaXRBbmltYXRlQ2hpbGQoZSxuKTtjYXNlIDEwOnJldHVybiB0LnZpc2l0QW5pbWF0ZVJlZihlLG4pO2Nhc2UgMTE6cmV0dXJuIHQudmlzaXRRdWVyeShlLG4pO2Nhc2UgMTI6cmV0dXJuIHQudmlzaXRTdGFnZ2VyKGUsbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIGFuaW1hdGlvbiBtZXRhZGF0YSBub2RlICMiK2UudHlwZSl9fWZ1bmN0aW9uIFEodCxlKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19dmFyIEs9IioiLFo9bmV3IFNldChbInRydWUiLCIxIl0pLFg9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiAkKHQsZSl7dmFyIG49Wi5oYXModCl8fFguaGFzKHQpLHI9Wi5oYXMoZSl8fFguaGFzKGUpO3JldHVybiBmdW5jdGlvbihpLG8pe3ZhciBhPXQ9PUt8fHQ9PWkscz1lPT1LfHxlPT1vO3JldHVybiFhJiZuJiYiYm9vbGVhbiI9PXR5cGVvZiBpJiYoYT1pP1ouaGFzKHQpOlguaGFzKHQpKSwhcyYmciYmImJvb2xlYW4iPT10eXBlb2YgbyYmKHM9bz9aLmhhcyhlKTpYLmhhcyhlKSksYSYmc319dmFyIEo9bmV3IFJlZ0V4cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24gdHQodCxlLG4pe3JldHVybiBuZXcgZXQodCkuYnVpbGQoZSxuKX12YXIgZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RyaXZlcj10fXJldHVybiB0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBudChlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShuKSxHKHRoaXMsRih0KSxuKX0sdC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGU9ZnVuY3Rpb24odCl7dC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz17fSx0LmNvbGxlY3RlZFN0eWxlc1siIl09e30sdC5jdXJyZW50VGltZT0wfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5xdWVyeUNvdW50PTAsaT1lLmRlcENvdW50PTAsbz1bXSxhPVtdO3JldHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaCgiYW5pbWF0aW9uIHRyaWdnZXJzIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGFuIGBAYCBzaWduIChlLmcuIHRyaWdnZXIoJ0Bmb28nLCBbLi4uXSkpIiksdC5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG4uX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09dC50eXBlKXt2YXIgcz10LHU9cy5uYW1lO3UudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cy5uYW1lPXQsby5wdXNoKG4udmlzaXRTdGF0ZShzLGUpKX0pLHMubmFtZT11fWVsc2UgaWYoMT09dC50eXBlKXt2YXIgbD1uLnZpc2l0VHJhbnNpdGlvbih0LGUpO3IrPWwucXVlcnlDb3VudCxpKz1sLmRlcENvdW50LGEucHVzaChsKX1lbHNlIGUuZXJyb3JzLnB1c2goIm9ubHkgc3RhdGUoKSBhbmQgdHJhbnNpdGlvbigpIGRlZmluaXRpb25zIGNhbiBzaXQgaW5zaWRlIG9mIGEgdHJpZ2dlcigpIil9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOmEscXVlcnlDb3VudDpyLGRlcENvdW50Omksb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMudmlzaXRTdHlsZSh0LnN0eWxlcyxlKSxyPXQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihuLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7dmFyIGk9bmV3IFNldCxvPXJ8fHt9O2lmKG4uc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7aWYocnQodCkpe3ZhciBlPXQ7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtVKGVbdF0pLmZvckVhY2goZnVuY3Rpb24odCl7by5oYXNPd25Qcm9wZXJ0eSh0KXx8aS5hZGQodCl9KX0pfX0pLGkuc2l6ZSl7dmFyIGE9QihpLnZhbHVlcygpKTtlLmVycm9ycy5wdXNoKCdzdGF0ZSgiJyt0Lm5hbWUrJyIsIC4uLikgbXVzdCBkZWZpbmUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgZm9sbG93aW5nIHN0eWxlIHN1YnN0aXR1dGlvbnM6ICcrYS5qb2luKCIsICIpKX19cmV0dXJue3R5cGU6MCxuYW1lOnQubmFtZSxzdHlsZTpuLG9wdGlvbnM6cj97cGFyYW1zOnJ9Om51bGx9fSx0LnByb3RvdHlwZS52aXNpdFRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7dmFyIG4scixpLG89Ryh0aGlzLEYodC5hbmltYXRpb24pLGUpO3JldHVybnt0eXBlOjEsbWF0Y2hlcnM6KG49dC5leHByLHI9ZS5lcnJvcnMsaT1bXSwic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtpZigiOiI9PXRbMF0pe3ZhciByPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdChlKT5wYXJzZUZsb2F0KHQpfTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KGUpPHBhcnNlRmxvYXQodCl9O2RlZmF1bHQ6cmV0dXJuIGUucHVzaCgnVGhlIHRyYW5zaXRpb24gYWxpYXMgdmFsdWUgIicrdCsnIiBpcyBub3Qgc3VwcG9ydGVkJyksIiogPT4gKiJ9fSh0LG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXJldHVybiB2b2lkIGUucHVzaChyKTt0PXJ9dmFyIGk9dC5tYXRjaCgvXihcKnxbLVx3XSspXHMqKDw/Wz0tXT4pXHMqKFwqfFstXHddKykkLyk7aWYobnVsbD09aXx8aS5sZW5ndGg8NClyZXR1cm4gbi5wdXNoKCdUaGUgcHJvdmlkZWQgdHJhbnNpdGlvbiBleHByZXNzaW9uICInK3QrJyIgaXMgbm90IHN1cHBvcnRlZCcpLGU7dmFyIG89aVsxXSxhPWlbMl0scz1pWzNdO2UucHVzaCgkKG8scykpLCI8IiE9YVswXXx8bz09SyYmcz09S3x8ZS5wdXNoKCQocyxvKSl9KHQsaSxyKX0pOmkucHVzaChuKSxpKSxhbmltYXRpb246byxxdWVyeUNvdW50OmUucXVlcnlDb3VudCxkZXBDb3VudDplLmRlcENvdW50LG9wdGlvbnM6aXQodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0U2VxdWVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybnt0eXBlOjIsc3RlcHM6dC5zdGVwcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEcobix0LGUpfSksb3B0aW9uczppdCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLmN1cnJlbnRUaW1lLGk9MCxvPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe2UuY3VycmVudFRpbWU9cjt2YXIgbz1HKG4sdCxlKTtyZXR1cm4gaT1NYXRoLm1heChpLGUuY3VycmVudFRpbWUpLG99KTtyZXR1cm4gZS5jdXJyZW50VGltZT1pLHt0eXBlOjMsc3RlcHM6byxvcHRpb25zOml0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGU9ZnVuY3Rpb24odCxlKXt2YXIgbixyPWZ1bmN0aW9uKHQsZSl7dmFyIG49bnVsbDtpZih0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKW49dDtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gb3Qoaih0LGUpLmR1cmF0aW9uLDAsIiIpO3ZhciByPXQ7aWYoci5zcGxpdCgvXHMrLykuc29tZShmdW5jdGlvbih0KXtyZXR1cm4ieyI9PXQuY2hhckF0KDApJiYieyI9PXQuY2hhckF0KDEpfSkpe3ZhciBpPW90KDAsMCwiIik7cmV0dXJuIGkuZHluYW1pYz0hMCxpLnN0clZhbHVlPXIsaX1yZXR1cm4gb3QoKG49bnx8aihyLGUpKS5kdXJhdGlvbixuLmRlbGF5LG4uZWFzaW5nKX0odC50aW1pbmdzLGUuZXJyb3JzKTtlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1yO3ZhciBvPXQuc3R5bGVzP3Quc3R5bGVzOk9iamVjdChpLmspKHt9KTtpZig1PT1vLnR5cGUpbj10aGlzLnZpc2l0S2V5ZnJhbWVzKG8sZSk7ZWxzZXt2YXIgYT10LnN0eWxlcyxzPSExO2lmKCFhKXtzPSEwO3ZhciB1PXt9O3IuZWFzaW5nJiYodS5lYXNpbmc9ci5lYXNpbmcpLGE9T2JqZWN0KGkuaykodSl9ZS5jdXJyZW50VGltZSs9ci5kdXJhdGlvbityLmRlbGF5O3ZhciBsPXRoaXMudmlzaXRTdHlsZShhLGUpO2wuaXNFbXB0eVN0ZXA9cyxuPWx9cmV0dXJuIGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdzOnIsc3R5bGU6bixvcHRpb25zOm51bGx9fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QobixlKSxufSx0LnByb3RvdHlwZS5fbWFrZVN0eWxlQXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49W107QXJyYXkuaXNBcnJheSh0LnN0eWxlcyk/dC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQ/dD09aS5hP24ucHVzaCh0KTplLmVycm9ycy5wdXNoKCJUaGUgcHJvdmlkZWQgc3R5bGUgc3RyaW5nIHZhbHVlICIrdCsiIGlzIG5vdCBhbGxvd2VkLiIpOm4ucHVzaCh0KX0pOm4ucHVzaCh0LnN0eWxlcyk7dmFyIHI9ITEsbz1udWxsO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7aWYocnQodCkpe3ZhciBlPXQsbj1lLmVhc2luZztpZihuJiYobz1uLGRlbGV0ZSBlLmVhc2luZyksIXIpZm9yKHZhciBpIGluIGUpaWYoZVtpXS50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe3I9ITA7YnJlYWt9fX0pLHt0eXBlOjYsc3R5bGVzOm4sZWFzaW5nOm8sb2Zmc2V0OnQub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczpyLG9wdGlvbnM6bnVsbH19LHQucHJvdG90eXBlLl92YWxpZGF0ZVN0eWxlQXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLGk9ZS5jdXJyZW50VGltZSxvPWUuY3VycmVudFRpbWU7ciYmbz4wJiYoby09ci5kdXJhdGlvbityLmRlbGF5KSx0LnN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJzdHJpbmciIT10eXBlb2YgdCYmT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtpZihuLl9kcml2ZXIudmFsaWRhdGVTdHlsZVByb3BlcnR5KHIpKXt2YXIgYSxzLHUsbD1lLmNvbGxlY3RlZFN0eWxlc1tlLmN1cnJlbnRRdWVyeVNlbGVjdG9yXSxjPWxbcl0sZj0hMDtjJiYobyE9aSYmbz49Yy5zdGFydFRpbWUmJmk8PWMuZW5kVGltZSYmKGUuZXJyb3JzLnB1c2goJ1RoZSBDU1MgcHJvcGVydHkgIicrcisnIiB0aGF0IGV4aXN0cyBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJytjLnN0YXJ0VGltZSsnbXMiIGFuZCAiJytjLmVuZFRpbWUrJ21zIiBpcyBhbHNvIGJlaW5nIGFuaW1hdGVkIGluIGEgcGFyYWxsZWwgYW5pbWF0aW9uIGJldHdlZW4gdGhlIHRpbWVzIG9mICInK28rJ21zIiBhbmQgIicraSsnbXMiJyksZj0hMSksbz1jLnN0YXJ0VGltZSksZiYmKGxbcl09e3N0YXJ0VGltZTpvLGVuZFRpbWU6aX0pLGUub3B0aW9ucyYmKGE9ZS5lcnJvcnMscz1lLm9wdGlvbnMucGFyYW1zfHx7fSwodT1VKHRbcl0pKS5sZW5ndGgmJnUuZm9yRWFjaChmdW5jdGlvbih0KXtzLmhhc093blByb3BlcnR5KHQpfHxhLnB1c2goIlVuYWJsZSB0byByZXNvbHZlIHRoZSBsb2NhbCBhbmltYXRpb24gcGFyYW0gIit0KyIgaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzIil9KSl9ZWxzZSBlLmVycm9ycy5wdXNoKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHByb3BlcnR5ICInK3IrJyIgaXMgbm90IGEgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBmb3IgYW5pbWF0aW9ucycpfSl9KX0sdC5wcm90b3R5cGUudmlzaXRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2goImtleWZyYW1lcygpIG11c3QgYmUgcGxhY2VkIGluc2lkZSBvZiBhIGNhbGwgdG8gYW5pbWF0ZSgpIikscjt2YXIgaT0wLG89W10sYT0hMSxzPSExLHU9MCxsPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPW4uX21ha2VTdHlsZUFzdCh0LGUpLGw9bnVsbCE9ci5vZmZzZXQ/ci5vZmZzZXQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBudWxsO3ZhciBlPW51bGw7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goZnVuY3Rpb24odCl7aWYocnQodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fX0pO2Vsc2UgaWYocnQodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fXJldHVybiBlfShyLnN0eWxlcyksYz0wO3JldHVybiBudWxsIT1sJiYoaSsrLGM9ci5vZmZzZXQ9bCkscz1zfHxjPDB8fGM+MSxhPWF8fGM8dSx1PWMsby5wdXNoKGMpLHJ9KTtzJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGJldHdlZW4gMCBhbmQgMSIpLGEmJmUuZXJyb3JzLnB1c2goIlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwga2V5ZnJhbWUgb2Zmc2V0cyBhcmUgaW4gb3JkZXIiKTt2YXIgYz10LnN0ZXBzLmxlbmd0aCxmPTA7aT4wJiZpPGM/ZS5lcnJvcnMucHVzaCgiTm90IGFsbCBzdHlsZSgpIHN0ZXBzIHdpdGhpbiB0aGUgZGVjbGFyZWQga2V5ZnJhbWVzKCkgY29udGFpbiBvZmZzZXRzIik6MD09aSYmKGY9MS8oYy0xKSk7dmFyIGg9Yy0xLGQ9ZS5jdXJyZW50VGltZSxwPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLG09cC5kdXJhdGlvbjtyZXR1cm4gbC5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7dmFyIGE9Zj4wP2k9PWg/MTpmKmk6b1tpXSxzPWEqbTtlLmN1cnJlbnRUaW1lPWQrcC5kZWxheStzLHAuZHVyYXRpb249cyxuLl92YWxpZGF0ZVN0eWxlQXN0KHQsZSksdC5vZmZzZXQ9YSxyLnN0eWxlcy5wdXNoKHQpfSkscn0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpHKHRoaXMsRih0LmFuaW1hdGlvbiksZSksb3B0aW9uczppdCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczppdCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlUmVmPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sZSksb3B0aW9uczppdCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRRdWVyeT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudFF1ZXJ5U2VsZWN0b3IsaT10Lm9wdGlvbnN8fHt9O2UucXVlcnlDb3VudCsrLGUuY3VycmVudFF1ZXJ5PXQ7dmFyIG89T2JqZWN0KHIuYykoZnVuY3Rpb24odCl7dmFyIGU9ISF0LnNwbGl0KC9ccyosXHMqLykuZmluZChmdW5jdGlvbih0KXtyZXR1cm4iOnNlbGYiPT10fSk7cmV0dXJuIGUmJih0PXQucmVwbGFjZShKLCIiKSksW3Q9dC5yZXBsYWNlKC9AXCovZywiLm5nLXRyaWdnZXIiKS5yZXBsYWNlKC9AXHcrL2csZnVuY3Rpb24odCl7cmV0dXJuIi5uZy10cmlnZ2VyLSIrdC5zdWJzdHIoMSl9KS5yZXBsYWNlKC86YW5pbWF0aW5nL2csIi5uZy1hbmltYXRpbmciKSxlXX0odC5zZWxlY3RvciksMiksYT1vWzBdLHM9b1sxXTtlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4ubGVuZ3RoP24rIiAiK2E6YSxmKGUuY29sbGVjdGVkU3R5bGVzLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3Ise30pO3ZhciB1PUcodGhpcyxGKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4se3R5cGU6MTEsc2VsZWN0b3I6YSxsaW1pdDppLmxpbWl0fHwwLG9wdGlvbmFsOiEhaS5vcHRpb25hbCxpbmNsdWRlU2VsZjpzLGFuaW1hdGlvbjp1LG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOml0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFN0YWdnZXI9ZnVuY3Rpb24odCxlKXtlLmN1cnJlbnRRdWVyeXx8ZS5lcnJvcnMucHVzaCgic3RhZ2dlcigpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIHF1ZXJ5KCkiKTt2YXIgbj0iZnVsbCI9PT10LnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpqKHQudGltaW5ncyxlLmVycm9ycywhMCk7cmV0dXJue3R5cGU6MTIsYW5pbWF0aW9uOkcodGhpcyxGKHQuYW5pbWF0aW9uKSxlKSx0aW1pbmdzOm4sb3B0aW9uczpudWxsfX0sdH0oKSxudD1mdW5jdGlvbih0KXt0aGlzLmVycm9ycz10LHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9e30sdGhpcy5vcHRpb25zPW51bGx9O2Z1bmN0aW9uIHJ0KHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gaXQodCl7dmFyIGU7cmV0dXJuIHQ/KHQ9UCh0KSkucGFyYW1zJiYodC5wYXJhbXM9KGU9dC5wYXJhbXMpP1AoZSk6bnVsbCk6dD17fSx0fWZ1bmN0aW9uIG90KHQsZSxuKXtyZXR1cm57ZHVyYXRpb246dCxkZWxheTplLGVhc2luZzpufX1mdW5jdGlvbiBhdCh0LGUsbixyLGksbyxhLHMpe3JldHVybiB2b2lkIDA9PT1hJiYoYT1udWxsKSx2b2lkIDA9PT1zJiYocz0hMSkse3R5cGU6MSxlbGVtZW50OnQsa2V5ZnJhbWVzOmUscHJlU3R5bGVQcm9wczpuLHBvc3RTdHlsZVByb3BzOnIsZHVyYXRpb246aSxkZWxheTpvLHRvdGFsVGltZTppK28sZWFzaW5nOmEsc3ViVGltZWxpbmU6c319dmFyIHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX21hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5jb25zdW1lPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIGU/dGhpcy5fbWFwLmRlbGV0ZSh0KTplPVtdLGV9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX21hcC5nZXQodCk7bnx8dGhpcy5fbWFwLnNldCh0LG49W10pLG4ucHVzaC5hcHBseShuLE9iamVjdChyLmQpKGUpKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX21hcC5jbGVhcigpfSx0fSgpLHV0PW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxsdD1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gY3QodCxlLG4scixpLG8sYSxzLHUsbCl7cmV0dXJuIHZvaWQgMD09PW8mJihvPXt9KSx2b2lkIDA9PT1hJiYoYT17fSksdm9pZCAwPT09bCYmKGw9W10pLChuZXcgZnQpLmJ1aWxkS2V5ZnJhbWVzKHQsZSxuLHIsaSxvLGEscyx1LGwpfXZhciBmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGwpe3ZvaWQgMD09PWwmJihsPVtdKSx1PXV8fG5ldyBzdDt2YXIgYz1uZXcgZHQodCxlLHUscixpLGwsW10pO2Mub3B0aW9ucz1zLGMuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbb10sbnVsbCxjLmVycm9ycyxzKSxHKHRoaXMsbixjKTt2YXIgZj1jLnRpbWVsaW5lcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29udGFpbnNBbmltYXRpb24oKX0pO2lmKGYubGVuZ3RoJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgpe3ZhciBoPWZbZi5sZW5ndGgtMV07aC5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpfHxoLnNldFN0eWxlcyhbYV0sbnVsbCxjLmVycm9ycyxzKX1yZXR1cm4gZi5sZW5ndGg/Zi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnVpbGRLZXlmcmFtZXMoKX0pOlthdChlLFtdLFtdLFtdLDAsMCwiIiwhMSldfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0U3RhdGU9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1Ykluc3RydWN0aW9ucy5jb25zdW1lKGUuZWxlbWVudCk7aWYobil7dmFyIHI9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyksaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxvPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKG4scixyLm9wdGlvbnMpO2khPW8mJmUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKG8pfWUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZVJlZj1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO24udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixuKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShuLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxpPW51bGwhPW4uZHVyYXRpb24/SShuLmR1cmF0aW9uKTpudWxsLG89bnVsbCE9bi5kZWxheT9JKG4uZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1pJiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxpLG8pO3I9TWF0aC5tYXgocixuLmR1cmF0aW9uK24uZGVsYXkpfSkscn0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtlLnVwZGF0ZU9wdGlvbnModC5vcHRpb25zLCEwKSxHKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTZXF1ZW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLnN1YkNvbnRleHRDb3VudCxpPWUsbz10Lm9wdGlvbnM7aWYobyYmKG8ucGFyYW1zfHxvLmRlbGF5KSYmKChpPWUuY3JlYXRlU3ViQ29udGV4dChvKSkudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9by5kZWxheSkpezY9PWkucHJldmlvdXNOb2RlLnR5cGUmJihpLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxpLnByZXZpb3VzTm9kZT1odCk7dmFyIGE9SShvLmRlbGF5KTtpLmRlbGF5TmV4dFN0ZXAoYSl9dC5zdGVwcy5sZW5ndGgmJih0LnN0ZXBzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEcobix0LGkpfSksaS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaS5zdWJDb250ZXh0Q291bnQ+ciYmaS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1bXSxpPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zJiZ0Lm9wdGlvbnMuZGVsYXk/SSh0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO28mJnMuZGVsYXlOZXh0U3RlcChvKSxHKG4sYSxzKSxpPU1hdGgubWF4KGkscy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLHIucHVzaChzLmN1cnJlbnRUaW1lbGluZSl9KSxyLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModCl9KSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShpKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS5fdmlzaXRUaW1pbmc9ZnVuY3Rpb24odCxlKXtpZih0LmR5bmFtaWMpe3ZhciBuPXQuc3RyVmFsdWU7cmV0dXJuIGooZS5wYXJhbXM/eihuLGUucGFyYW1zLGUuZXJyb3JzKTpuLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKHQudGltaW5ncyxlKSxyPWUuY3VycmVudFRpbWVsaW5lO24uZGVsYXkmJihlLmluY3JlbWVudFRpbWUobi5kZWxheSksci5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7dmFyIGk9dC5zdHlsZTs1PT1pLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhpLGUpOihlLmluY3JlbWVudFRpbWUobi5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGksZSksci5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50VGltZWxpbmUscj1lLmN1cnJlbnRBbmltYXRlVGltaW5nczshciYmbi5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoJiZuLmZvcndhcmRGcmFtZSgpO3ZhciBpPXImJnIuZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP24uYXBwbHlFbXB0eVN0ZXAoaSk6bi5zZXRTdHlsZXModC5zdHlsZXMsaSxlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0S2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixpPW4uZHVyYXRpb24sbz1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7by5lYXNpbmc9bi5lYXNpbmcsdC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtvLmZvcndhcmRUaW1lKCh0Lm9mZnNldHx8MCkqaSksby5zZXRTdHlsZXModC5zdHlsZXMsdC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxvLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhvKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyK2kpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0UXVlcnk9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsaT10Lm9wdGlvbnN8fHt9LG89aS5kZWxheT9JKGkuZGVsYXkpOjA7byYmKDY9PT1lLnByZXZpb3VzTm9kZS50eXBlfHwwPT1yJiZlLmN1cnJlbnRUaW1lbGluZS5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoKSYmKGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGUucHJldmlvdXNOb2RlPWh0KTt2YXIgYT1yLHM9ZS5pbnZva2VRdWVyeSh0LnNlbGVjdG9yLHQub3JpZ2luYWxTZWxlY3Rvcix0LmxpbWl0LHQuaW5jbHVkZVNlbGYsISFpLm9wdGlvbmFsLGUuZXJyb3JzKTtlLmN1cnJlbnRRdWVyeVRvdGFsPXMubGVuZ3RoO3ZhciB1PW51bGw7cy5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7ZS5jdXJyZW50UXVlcnlJbmRleD1pO3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMscik7byYmcy5kZWxheU5leHRTdGVwKG8pLHI9PT1lLmVsZW1lbnQmJih1PXMuY3VycmVudFRpbWVsaW5lKSxHKG4sdC5hbmltYXRpb24scykscy5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksYT1NYXRoLm1heChhLHMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGUuY3VycmVudFF1ZXJ5SW5kZXg9MCxlLmN1cnJlbnRRdWVyeVRvdGFsPTAsZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoYSksdSYmKGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModSksZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0U3RhZ2dlcj1mdW5jdGlvbih0LGUpe3ZhciBuPWUucGFyZW50Q29udGV4dCxyPWUuY3VycmVudFRpbWVsaW5lLGk9dC50aW1pbmdzLG89TWF0aC5hYnMoaS5kdXJhdGlvbiksYT1vKihlLmN1cnJlbnRRdWVyeVRvdGFsLTEpLHM9byplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChpLmR1cmF0aW9uPDA/InJldmVyc2UiOmkuZWFzaW5nKXtjYXNlInJldmVyc2UiOnM9YS1zO2JyZWFrO2Nhc2UiZnVsbCI6cz1uLmN1cnJlbnRTdGFnZ2VyVGltZX12YXIgdT1lLmN1cnJlbnRUaW1lbGluZTtzJiZ1LmRlbGF5TmV4dFN0ZXAocyk7dmFyIGw9dS5jdXJyZW50VGltZTtHKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxuLmN1cnJlbnRTdGFnZ2VyVGltZT1yLmN1cnJlbnRUaW1lLWwrKHIuc3RhcnRUaW1lLW4uY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9LHR9KCksaHQ9e30sZHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdWJJbnN0cnVjdGlvbnM9bix0aGlzLl9lbnRlckNsYXNzTmFtZT1yLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPWksdGhpcy5lcnJvcnM9byx0aGlzLnRpbWVsaW5lcz1hLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9aHQsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPXN8fG5ldyBwdCh0aGlzLl9kcml2ZXIsZSwwKSxhLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnVwZGF0ZU9wdGlvbnM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKHQpe3ZhciByPXQsaT10aGlzLm9wdGlvbnM7bnVsbCE9ci5kdXJhdGlvbiYmKGkuZHVyYXRpb249SShyLmR1cmF0aW9uKSksbnVsbCE9ci5kZWxheSYmKGkuZGVsYXk9SShyLmRlbGF5KSk7dmFyIG89ci5wYXJhbXM7aWYobyl7dmFyIGE9aS5wYXJhbXM7YXx8KGE9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtlJiZhLmhhc093blByb3BlcnR5KHQpfHwoYVt0XT16KG9bdF0sYSxuLmVycm9ycykpfSl9fX0sdC5wcm90b3R5cGUuX2NvcHlPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5vcHRpb25zKXt2YXIgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe3ZhciBuPXQucGFyYW1zPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1lW3RdfSl9fXJldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVTdWJDb250ZXh0PWZ1bmN0aW9uKGUsbixyKXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgaT1ufHx0aGlzLmVsZW1lbnQsbz1uZXcgdCh0aGlzLl9kcml2ZXIsaSx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKGkscnx8MCkpO3JldHVybiBvLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxvLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxvLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxvLnVwZGF0ZU9wdGlvbnMoZSksby5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LG8uY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxvLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLG99LHQucHJvdG90eXBlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9aHQsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9LHQucHJvdG90eXBlLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9e2R1cmF0aW9uOm51bGwhPWU/ZTp0LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhudWxsIT1uP246MCkrdC5kZWxheSxlYXNpbmc6IiJ9LGk9bmV3IG10KHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMscix0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChpKSxyfSx0LnByb3RvdHlwZS5pbmNyZW1lbnRUaW1lPWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK3QpfSx0LnByb3RvdHlwZS5kZWxheU5leHRTdGVwPWZ1bmN0aW9uKHQpe3Q+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcCh0KX0sdC5wcm90b3R5cGUuaW52b2tlUXVlcnk9ZnVuY3Rpb24odCxlLG4saSxvLGEpe3ZhciBzPVtdO2lmKGkmJnMucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKHV0LCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UobHQsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTt2YXIgdT10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9bik7MCE9PW4mJih1PW48MD91LnNsaWNlKHUubGVuZ3RoK24sdS5sZW5ndGgpOnUuc2xpY2UoMCxuKSkscy5wdXNoLmFwcGx5KHMsT2JqZWN0KHIuZCkodSkpfXJldHVybiBvfHwwIT1zLmxlbmd0aHx8YS5wdXNoKCdgcXVlcnkoIicrZSsnIilgIHJldHVybmVkIHplcm8gZWxlbWVudHMuIChVc2UgYHF1ZXJ5KCInK2UrJyIsIHsgb3B0aW9uYWw6IHRydWUgfSlgIGlmIHlvdSB3aXNoIHRvIGFsbG93IHRoaXMuKScpLHN9LHR9KCkscHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3RhcnRUaW1lPW4sdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPXIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9e30sdGhpcy5fY3VycmVudEtleWZyYW1lPXt9LHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT17fSx0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LHRoaXMuX2JhY2tGaWxsPXt9LHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPU9iamVjdC5jcmVhdGUodGhpcy5fYmFja0ZpbGwse30pLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoZSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoZSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9cmV0dXJuIHQucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGg+MDtkZWZhdWx0OnJldHVybiEwfX0sdC5wcm90b3R5cGUuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50S2V5ZnJhbWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImN1cnJlbnRUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVsYXlOZXh0U3RlcD1mdW5jdGlvbih0KXt2YXIgZT0xPT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1N0eWxlcykubGVuZ3RoO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyB0KHRoaXMuX2RyaXZlcixlLG58fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX0sdC5wcm90b3R5cGUuX2xvYWRLZXlmcmFtZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfSx0LnByb3RvdHlwZS5mb3J3YXJkRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfSx0LnByb3RvdHlwZS5mb3J3YXJkVGltZT1mdW5jdGlvbih0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlc1t0XT1lLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fc3R5bGVTdW1tYXJ5W3RdPXt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6ZX19LHQucHJvdG90eXBlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuYXBwbHlFbXB0eVN0ZXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9dCksT2JqZWN0LmtleXModGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5fYmFja0ZpbGxbdF09ZS5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF18fGkuYSxlLl9jdXJyZW50S2V5ZnJhbWVbdF09aS5hfSksdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuc2V0U3R5bGVzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXM7ZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuZWFzaW5nPWUpO3ZhciBhPXImJnIucGFyYW1zfHx7fSxzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpeyIqIj09PXQ/KG49bnx8T2JqZWN0LmtleXMoZSkpLmZvckVhY2goZnVuY3Rpb24odCl7clt0XT1pLmF9KTpNKHQsITEscil9KSxyfSh0LHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXooc1t0XSxhLG4pO28uX3BlbmRpbmdTdHlsZXNbdF09ZSxvLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmhhc093blByb3BlcnR5KHQpfHwoby5fYmFja0ZpbGxbdF09by5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuaGFzT3duUHJvcGVydHkodCk/by5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF06aS5hKSxvLl91cGRhdGVTdHlsZSh0LGUpfSl9LHQucHJvdG90eXBlLmFwcGx5U3R5bGVzVG9LZXlmcmFtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9wZW5kaW5nU3R5bGVzLG49T2JqZWN0LmtleXMoZSk7MCE9bi5sZW5ndGgmJih0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LG4uZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9jdXJyZW50S2V5ZnJhbWVbbl09ZVtuXX0pLE9iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dC5fY3VycmVudEtleWZyYW1lLmhhc093blByb3BlcnR5KGUpfHwodC5fY3VycmVudEtleWZyYW1lW2VdPXQuX2xvY2FsVGltZWxpbmVTdHlsZXNbZV0pfSkpfSx0LnByb3RvdHlwZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO09iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5fbG9jYWxUaW1lbGluZVN0eWxlc1tlXTt0Ll9wZW5kaW5nU3R5bGVzW2VdPW4sdC5fdXBkYXRlU3R5bGUoZSxuKX0pfSx0LnByb3RvdHlwZS5nZXRGaW5hbEtleWZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvcGVydGllcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpdC5wdXNoKGUpO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztPYmplY3Qua2V5cyh0Ll9zdHlsZVN1bW1hcnkpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9ZS5fc3R5bGVTdW1tYXJ5W25dLGk9dC5fc3R5bGVTdW1tYXJ5W25dOyghcnx8aS50aW1lPnIudGltZSkmJmUuX3VwZGF0ZVN0eWxlKG4saS52YWx1ZSl9KX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7dmFyIGU9bmV3IFNldCxuPW5ldyBTZXQscj0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uLG89W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goZnVuY3Rpb24oYSxzKXt2YXIgdT1NKGEsITApO09iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9dVt0XTtyPT1pLm8/ZS5hZGQodCk6cj09aS5hJiZuLmFkZCh0KX0pLHJ8fCh1Lm9mZnNldD1zL3QuZHVyYXRpb24pLG8ucHVzaCh1KX0pO3ZhciBhPWUuc2l6ZT9CKGUudmFsdWVzKCkpOltdLHM9bi5zaXplP0Iobi52YWx1ZXMoKSk6W107aWYocil7dmFyIHU9b1swXSxsPVAodSk7dS5vZmZzZXQ9MCxsLm9mZnNldD0xLG89W3UsbF19cmV0dXJuIGF0KHRoaXMuZWxlbWVudCxvLGEscyx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX0sdH0oKSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyxhLHMpe3ZvaWQgMD09PXMmJihzPSExKTt2YXIgdT10LmNhbGwodGhpcyxlLG4sYS5kZWxheSl8fHRoaXM7cmV0dXJuIHUuZWxlbWVudD1uLHUua2V5ZnJhbWVzPXIsdS5wcmVTdHlsZVByb3BzPWksdS5wb3N0U3R5bGVQcm9wcz1vLHUuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPXMsdS50aW1pbmdzPXtkdXJhdGlvbjphLmR1cmF0aW9uLGRlbGF5OmEuZGVsYXksZWFzaW5nOmEuZWFzaW5nfSx1fXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfSxlLnByb3RvdHlwZS5idWlsZEtleWZyYW1lcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMua2V5ZnJhbWVzLGU9dGhpcy50aW1pbmdzLG49ZS5kZWxheSxyPWUuZHVyYXRpb24saT1lLmVhc2luZztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSYmbil7dmFyIG89W10sYT1yK24scz1uL2EsdT1NKHRbMF0sITEpO3Uub2Zmc2V0PTAsby5wdXNoKHUpO3ZhciBsPU0odFswXSwhMSk7bC5vZmZzZXQ9eXQocyksby5wdXNoKGwpO2Zvcih2YXIgYz10Lmxlbmd0aC0xLGY9MTtmPD1jO2YrKyl7dmFyIGg9TSh0W2ZdLCExKTtoLm9mZnNldD15dCgobitoLm9mZnNldCpyKS9hKSxvLnB1c2goaCl9cj1hLG49MCxpPSIiLHQ9b31yZXR1cm4gYXQodGhpcy5lbGVtZW50LHQsdGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMscixuLGksITApfSxlfShwdCk7ZnVuY3Rpb24geXQodCxlKXt2b2lkIDA9PT1lJiYoZT0zKTt2YXIgbj1NYXRoLnBvdygxMCxlLTEpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn12YXIgZ3Q9ZnVuY3Rpb24oKXt9LHZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm5vcm1hbGl6ZVByb3BlcnR5TmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiBXKHQpfSxlLnByb3RvdHlwZS5ub3JtYWxpemVTdHlsZVZhbHVlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPSIiLG89bi50b1N0cmluZygpLnRyaW0oKTtpZihidFtlXSYmMCE9PW4mJiIwIiE9PW4paWYoIm51bWJlciI9PXR5cGVvZiBuKWk9InB4IjtlbHNle3ZhciBhPW4ubWF0Y2goL15bKy1dP1tcZFwuXSsoW2Etel0qKSQvKTthJiYwPT1hWzFdLmxlbmd0aCYmci5wdXNoKCJQbGVhc2UgcHJvdmlkZSBhIENTUyB1bml0IHZhbHVlIGZvciAiK3QrIjoiK24pfXJldHVybiBvK2l9LGV9KGd0KSxidD1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4id2lkdGgsaGVpZ2h0LG1pbldpZHRoLG1pbkhlaWdodCxtYXhXaWR0aCxtYXhIZWlnaHQsbGVmdCx0b3AsYm90dG9tLHJpZ2h0LGZvbnRTaXplLG91dGxpbmVXaWR0aCxvdXRsaW5lT2Zmc2V0LHBhZGRpbmdUb3AscGFkZGluZ0xlZnQscGFkZGluZ0JvdHRvbSxwYWRkaW5nUmlnaHQsbWFyZ2luVG9wLG1hcmdpbkxlZnQsbWFyZ2luQm90dG9tLG1hcmdpblJpZ2h0LGJvcmRlclJhZGl1cyxib3JkZXJXaWR0aCxib3JkZXJUb3BXaWR0aCxib3JkZXJMZWZ0V2lkdGgsYm9yZGVyUmlnaHRXaWR0aCxib3JkZXJCb3R0b21XaWR0aCx0ZXh0SW5kZW50LHBlcnNwZWN0aXZlIi5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGVbdF09ITB9KSxlfSgpO2Z1bmN0aW9uIF90KHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmLGgpe3JldHVybnt0eXBlOjAsZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsaXNSZW1vdmFsVHJhbnNpdGlvbjppLGZyb21TdGF0ZTpuLGZyb21TdHlsZXM6byx0b1N0YXRlOnIsdG9TdHlsZXM6YSx0aW1lbGluZXM6cyxxdWVyaWVkRWxlbWVudHM6dSxwcmVTdHlsZVByb3BzOmwscG9zdFN0eWxlUHJvcHM6Yyx0b3RhbFRpbWU6ZixlcnJvcnM6aH19dmFyIHd0PXt9LHh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdHJpZ2dlck5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX3N0YXRlU3R5bGVzPW59cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiB0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSxuLHIsaSl9KX0odGhpcy5hc3QubWF0Y2hlcnMsdCxlLG4scil9LHQucHJvdG90eXBlLmJ1aWxkU3R5bGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLl9zdGF0ZVN0eWxlc1siKiJdLGk9dGhpcy5fc3RhdGVTdHlsZXNbdF0sbz1yP3IuYnVpbGRTdHlsZXMoZSxuKTp7fTtyZXR1cm4gaT9pLmJ1aWxkU3R5bGVzKGUsbik6b30sdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odCxlLG4saSxvLGEscyx1LGwsYyl7dmFyIGg9W10sZD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8d3QscD10aGlzLmJ1aWxkU3R5bGVzKG4scyYmcy5wYXJhbXN8fHd0LGgpLG09dSYmdS5wYXJhbXN8fHd0LHk9dGhpcy5idWlsZFN0eWxlcyhpLG0saCksZz1uZXcgU2V0LHY9bmV3IE1hcCxiPW5ldyBNYXAsXz0idm9pZCI9PT1pLHc9e3BhcmFtczpPYmplY3Qoci5hKSh7fSxkLG0pfSx4PWM/W106Y3QodCxlLHRoaXMuYXN0LmFuaW1hdGlvbixvLGEscCx5LHcsbCxoKSxPPTA7aWYoeC5mb3JFYWNoKGZ1bmN0aW9uKHQpe089TWF0aC5tYXgodC5kdXJhdGlvbit0LmRlbGF5LE8pfSksaC5sZW5ndGgpcmV0dXJuIF90KGUsdGhpcy5fdHJpZ2dlck5hbWUsbixpLF8scCx5LFtdLFtdLHYsYixPLGgpO3guZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LmVsZW1lbnQscj1mKHYsbix7fSk7dC5wcmVTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHJbdF09ITB9KTt2YXIgaT1mKGIsbix7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpW3RdPSEwfSksbiE9PWUmJmcuYWRkKG4pfSk7dmFyIEM9QihnLnZhbHVlcygpKTtyZXR1cm4gX3QoZSx0aGlzLl90cmlnZ2VyTmFtZSxuLGksXyxwLHkseCxDLHYsYixPKX0sdH0oKSxPdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnN0eWxlcz10LHRoaXMuZGVmYXVsdFBhcmFtcz1lfXJldHVybiB0LnByb3RvdHlwZS5idWlsZFN0eWxlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9LHI9UCh0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07bnVsbCE9biYmKHJbZV09bil9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBpPXQ7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbz1pW3RdO28ubGVuZ3RoPjEmJihvPXoobyxyLGUpKSxuW3RdPW99KX19KSxufSx0fSgpLEN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5uYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9e30sZS5zdGF0ZXMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnN0YXRlc1t0Lm5hbWVdPW5ldyBPdCh0LnN0eWxlLHQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8e30pfSksU3QodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksU3QodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtuLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgeHQodCxlLG4uc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1uZXcgeHQodCx7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6W2Z1bmN0aW9uKHQsZSl7cmV0dXJuITB9XSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LHRoaXMuc3RhdGVzKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250YWluc1F1ZXJpZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hdGNoVHJhbnNpdGlvbj1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLmZpbmQoZnVuY3Rpb24oaSl7cmV0dXJuIGkubWF0Y2godCxlLG4scil9KXx8bnVsbH0sdC5wcm90b3R5cGUubWF0Y2hTdHlsZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyh0LGUsbil9LHR9KCk7ZnVuY3Rpb24gU3QodCxlLG4pe3QuaGFzT3duUHJvcGVydHkoZSk/dC5oYXNPd25Qcm9wZXJ0eShuKXx8KHRbbl09dFtlXSk6dC5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbZV09dFtuXSl9dmFyIEV0PW5ldyBzdCxrdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPW4sdGhpcy5fYW5pbWF0aW9ucz17fSx0aGlzLl9wbGF5ZXJzQnlJZD17fSx0aGlzLnBsYXllcnM9W119cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49W10scj10dCh0aGlzLl9kcml2ZXIsZSxuKTtpZihuLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBidWlsZCB0aGUgYW5pbWF0aW9uIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczogIituLmpvaW4oIlxuIikpO3RoaXMuX2FuaW1hdGlvbnNbdF09cn0sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmVsZW1lbnQsaT1zKDAsdGhpcy5fbm9ybWFsaXplciwwLHQua2V5ZnJhbWVzLGUsbik7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKHIsaSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsW10sITApfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e30pO3ZhciBvLHM9W10sdT10aGlzLl9hbmltYXRpb25zW3RdLGw9bmV3IE1hcDtpZih1PyhvPWN0KHRoaXMuX2RyaXZlcixlLHUsIm5nLWVudGVyIiwibmctbGVhdmUiLHt9LHt9LG4sRXQscykpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZihsLHQuZWxlbWVudCx7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdPW51bGx9KX0pOihzLnB1c2goIlRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIGRvZXNuJ3QgZXhpc3Qgb3IgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiKSxvPVtdKSxzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICIrcy5qb2luKCJcbiIpKTtsLmZvckVhY2goZnVuY3Rpb24odCxlKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09ci5fZHJpdmVyLmNvbXB1dGVTdHlsZShlLG4saS5hKX0pfSk7dmFyIGM9YShvLm1hcChmdW5jdGlvbih0KXt2YXIgZT1sLmdldCh0LmVsZW1lbnQpO3JldHVybiByLl9idWlsZFBsYXllcih0LHt9LGUpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZFt0XT1jLGMub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVzdHJveSh0KX0pLHRoaXMucGxheWVycy5wdXNoKGMpLGN9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0UGxheWVyKHQpO2UuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9wbGF5ZXJzQnlJZFt0XTt2YXIgbj10aGlzLnBsYXllcnMuaW5kZXhPZihlKTtuPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKG4sMSl9LHQucHJvdG90eXBlLl9nZXRQbGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGxheWVyc0J5SWRbdF07aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB0aGUgdGltZWxpbmUgcGxheWVyIHJlZmVyZW5jZWQgYnkgIit0KTtyZXR1cm4gZX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWMoZSwiIiwiIiwiIik7cmV0dXJuIHUodGhpcy5fZ2V0UGxheWVyKHQpLG4saSxyKSxmdW5jdGlvbigpe319LHQucHJvdG90eXBlLmNvbW1hbmQ9ZnVuY3Rpb24odCxlLG4scil7aWYoInJlZ2lzdGVyIiE9bilpZigiY3JlYXRlIiE9bil7dmFyIGk9dGhpcy5fZ2V0UGxheWVyKHQpO3N3aXRjaChuKXtjYXNlInBsYXkiOmkucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOmkucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjppLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjppLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6aS5maW5pc2goKTticmVhaztjYXNlImluaXQiOmkuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOmkuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChyWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kodCl9fWVsc2UgdGhpcy5jcmVhdGUodCxlLHJbMF18fHt9KTtlbHNlIHRoaXMucmVnaXN0ZXIodCxyWzBdKX0sdH0oKSxUdD1bXSxJdD17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sQXQ9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LGp0PSJfX25nX3JlbW92ZWQiLFB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZvaWQgMD09PWUmJihlPSIiKSx0aGlzLm5hbWVzcGFjZUlkPWU7dmFyIG49dCYmdC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10P3Q6bnVsbH0obj90LnZhbHVlOnQpLG4pe3ZhciByPVAodCk7ZGVsZXRlIHIudmFsdWUsdGhpcy5vcHRpb25zPXJ9ZWxzZSB0aGlzLm9wdGlvbnM9e307dGhpcy5vcHRpb25zLnBhcmFtc3x8KHRoaXMub3B0aW9ucy5wYXJhbXM9e30pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmFic29yYk9wdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJhbXM7aWYoZSl7dmFyIG49dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe251bGw9PW5bdF0mJihuW3RdPWVbdF0pfSl9fSx0fSgpLE10PW5ldyBQdCgidm9pZCIpLE50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5pZD10LHRoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLl9lbmdpbmU9bix0aGlzLnBsYXllcnM9W10sdGhpcy5fdHJpZ2dlcnM9e30sdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK3QsQnQoZSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1yZXR1cm4gdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLG89dGhpcztpZighdGhpcy5fdHJpZ2dlcnMuaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbGlzdGVuIG9uIHRoZSBhbmltYXRpb24gdHJpZ2dlciBldmVudCAiJytuKyciIGJlY2F1c2UgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrIlwiIGRvZXNuJ3QgZXhpc3QhIik7aWYobnVsbD09bnx8MD09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbGlzdGVuIG9uIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJytlKyciIGJlY2F1c2UgdGhlIHByb3ZpZGVkIGV2ZW50IGlzIHVuZGVmaW5lZCEnKTtpZigic3RhcnQiIT0oaT1uKSYmImRvbmUiIT1pKXRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICInK24rJyIgZm9yIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQhJyk7dmFyIGE9Zih0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTpuLGNhbGxiYWNrOnJ9O2EucHVzaChzKTt2YXIgdT1mKHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQsdCx7fSk7cmV0dXJuIHUuaGFzT3duUHJvcGVydHkoZSl8fChCdCh0LCJuZy10cmlnZ2VyIiksQnQodCwibmctdHJpZ2dlci0iK2UpLHVbZV09TXQpLGZ1bmN0aW9uKCl7by5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXt2YXIgdD1hLmluZGV4T2Yocyk7dD49MCYmYS5zcGxpY2UodCwxKSxvLl90cmlnZ2Vyc1tlXXx8ZGVsZXRlIHVbZV19KX19LHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzW3RdJiYodGhpcy5fdHJpZ2dlcnNbdF09ZSwhMCl9LHQucHJvdG90eXBlLl9nZXRUcmlnZ2VyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RyaWdnZXJzW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyICInK3QrJyIgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQhJyk7cmV0dXJuIGV9LHQucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpczt2b2lkIDA9PT1yJiYocj0hMCk7dmFyIG89dGhpcy5fZ2V0VHJpZ2dlcihlKSxhPW5ldyBEdCh0aGlzLmlkLGUsdCkscz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtzfHwoQnQodCwibmctdHJpZ2dlciIpLEJ0KHQsIm5nLXRyaWdnZXItIitlKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LnNldCh0LHM9e30pKTt2YXIgdT1zW2VdLGw9bmV3IFB0KG4sdGhpcy5pZCk7aWYoIShuJiZuLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYmdSYmbC5hYnNvcmJPcHRpb25zKHUub3B0aW9ucyksc1tlXT1sLHV8fCh1PU10KSwidm9pZCI9PT1sLnZhbHVlfHx1LnZhbHVlIT09bC52YWx1ZSl7dmFyIGM9Zih0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudCx0LFtdKTtjLmZvckVhY2goZnVuY3Rpb24odCl7dC5uYW1lc3BhY2VJZD09aS5pZCYmdC50cmlnZ2VyTmFtZT09ZSYmdC5xdWV1ZWQmJnQuZGVzdHJveSgpfSk7dmFyIGg9by5tYXRjaFRyYW5zaXRpb24odS52YWx1ZSxsLnZhbHVlLHQsbC5wYXJhbXMpLGQ9ITE7aWYoIWgpe2lmKCFyKXJldHVybjtoPW8uZmFsbGJhY2tUcmFuc2l0aW9uLGQ9ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSx0cmFuc2l0aW9uOmgsZnJvbVN0YXRlOnUsdG9TdGF0ZTpsLHBsYXllcjphLGlzRmFsbGJhY2tUcmFuc2l0aW9uOmR9KSxkfHwoQnQodCwibmctYW5pbWF0ZS1xdWV1ZWQiKSxhLm9uU3RhcnQoZnVuY3Rpb24oKXtIdCh0LCJuZy1hbmltYXRlLXF1ZXVlZCIpfSkpLGEub25Eb25lKGZ1bmN0aW9uKCl7dmFyIGU9aS5wbGF5ZXJzLmluZGV4T2YoYSk7ZT49MCYmaS5wbGF5ZXJzLnNwbGljZShlLDEpO3ZhciBuPWkuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihuKXt2YXIgcj1uLmluZGV4T2YoYSk7cj49MCYmbi5zcGxpY2UociwxKX19KSx0aGlzLnBsYXllcnMucHVzaChhKSxjLnB1c2goYSksYX1pZighZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KSxyPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoIT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXTtpZighZS5oYXNPd25Qcm9wZXJ0eShvKXx8dFtvXSE9PWVbb10pcmV0dXJuITF9cmV0dXJuITB9KHUucGFyYW1zLGwucGFyYW1zKSl7dmFyIHA9W10sbT1vLm1hdGNoU3R5bGVzKHUudmFsdWUsdS5wYXJhbXMscCkseT1vLm1hdGNoU3R5bGVzKGwudmFsdWUsbC5wYXJhbXMscCk7cC5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKHApOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7TCh0LG0pLEQodCx5KX0pfX0sdC5wcm90b3R5cGUuZGVyZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2RlbGV0ZSB0aGlzLl90cmlnZ2Vyc1t0XSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goZnVuY3Rpb24oZSxuKXtkZWxldGUgZVt0XX0pLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihuLHIpe2UuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KHIsbi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZSE9dH0pKX0pfSx0LnByb3RvdHlwZS5jbGVhckVsZW1lbnRDYWNoZT1mdW5jdGlvbih0KXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZSh0KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZSh0KTt2YXIgZT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmKGUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfSx0LnByb3RvdHlwZS5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49ITEpLHRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkodCwiLm5nLXRyaWdnZXIiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0W2p0XSl7dmFyIG49ci5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudCh0KTtuLnNpemU/bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsITEsITApfSk6ci5jbGVhckVsZW1lbnRDYWNoZSh0KX19KX0sdC5wcm90b3R5cGUudHJpZ2dlckxlYXZlQW5pbWF0aW9uPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsbz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihvKXt2YXIgcz1bXTtpZihPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGkuX3RyaWdnZXJzW2VdKXt2YXIgbj1pLnRyaWdnZXIodCxlLCJ2b2lkIixyKTtuJiZzLnB1c2gobil9fSkscy5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITAsZSksbiYmYShzKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gaS5fZW5naW5lLnByb2Nlc3NMZWF2ZU5vZGUodCl9KSwhMH1yZXR1cm4hMX0sdC5wcm90b3R5cGUucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldCh0KTtpZihuKXt2YXIgcj1uZXcgU2V0O24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1uLm5hbWU7aWYoIXIuaGFzKGkpKXtyLmFkZChpKTt2YXIgbz1lLl90cmlnZ2Vyc1tpXS5mYWxsYmFja1RyYW5zaXRpb24sYT1lLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KVtpXXx8TXQscz1uZXcgUHQoInZvaWQiKSx1PW5ldyBEdChlLmlkLGksdCk7ZS5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLGUuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTppLHRyYW5zaXRpb246byxmcm9tU3RhdGU6YSx0b1N0YXRlOnMscGxheWVyOnUsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX19KX19LHQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSwhMCksIXRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMCkpe3ZhciBpPSExO2lmKHIudG90YWxBbmltYXRpb25zKXt2YXIgbz1yLnBsYXllcnMubGVuZ3RoP3IucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpOltdO2lmKG8mJm8ubGVuZ3RoKWk9ITA7ZWxzZSBmb3IodmFyIGE9dDthPWEucGFyZW50Tm9kZTspaWYoci5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGEpKXtpPSEwO2JyZWFrfX10aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KSxpP3IubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCExLGUpOihyLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtyZXR1cm4gbi5jbGVhckVsZW1lbnRDYWNoZSh0KX0pLHIuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KSxyLl9vblJlbW92YWxDb21wbGV0ZSh0LGUpKX19LHQucHJvdG90eXBlLmluc2VydE5vZGU9ZnVuY3Rpb24odCxlKXtCdCh0LHRoaXMuX2hvc3RDbGFzc05hbWUpfSx0LnByb3RvdHlwZS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgaT1yLnBsYXllcjtpZighaS5kZXN0cm95ZWQpe3ZhciBvPXIuZWxlbWVudCxhPWUuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KG8pO2EmJmEuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLm5hbWU9PXIudHJpZ2dlck5hbWUpe3ZhciBuPWMobyxyLnRyaWdnZXJOYW1lLHIuZnJvbVN0YXRlLnZhbHVlLHIudG9TdGF0ZS52YWx1ZSk7bi5fZGF0YT10LHUoci5wbGF5ZXIsZS5waGFzZSxuLGUuY2FsbGJhY2spfX0pLGkubWFya2VkRm9yRGVzdHJveT9lLl9lbmdpbmUuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe2kuZGVzdHJveSgpfSk6bi5wdXNoKHIpfX0pLHRoaXMuX3F1ZXVlPVtdLG4uc29ydChmdW5jdGlvbih0LG4pe3ZhciByPXQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQsaT1uLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1yfHwwPT1pP3ItaTplLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0LmVsZW1lbnQsbi5lbGVtZW50KT8xOi0xfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCx0KX0sdC5wcm90b3R5cGUuZWxlbWVudENvbnRhaW5zRGF0YT1mdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gdGhpcy5fZWxlbWVudExpc3RlbmVycy5oYXModCkmJihlPSEwKSwhIXRoaXMuX3F1ZXVlLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWxlbWVudD09PXR9KXx8ZX0sdH0oKSxSdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLmRyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9bix0aGlzLnBsYXllcnM9W10sdGhpcy5uZXdIb3N0RWxlbWVudHM9bmV3IE1hcCx0aGlzLnBsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXAsdGhpcy5zdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLmRpc2FibGVkTm9kZXM9bmV3IFNldCx0aGlzLnRvdGFsQW5pbWF0aW9ucz0wLHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5fbmFtZXNwYWNlTG9va3VwPXt9LHRoaXMuX25hbWVzcGFjZUxpc3Q9W10sdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zPVtdLHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHM9W10sdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdLHRoaXMub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt9fXJldHVybiB0LnByb3RvdHlwZS5fb25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVldWVkUGxheWVycyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5xdWV1ZWQmJnQucHVzaChlKX0pfSksdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jcmVhdGVOYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgTnQodCxlLHRoaXMpO3JldHVybiBlLnBhcmVudE5vZGU/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QobixlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsbiksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09bn0sdC5wcm90b3R5cGUuX2JhbGFuY2VOYW1lc3BhY2VMaXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtpZihuPj0wKXtmb3IodmFyIHI9ITEsaT1uO2k+PTA7aS0tKWlmKHRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0aGlzLl9uYW1lc3BhY2VMaXN0W2ldLmhvc3RFbGVtZW50LGUpKXt0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShpKzEsMCx0KSxyPSEwO2JyZWFrfXJ8fHRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKDAsMCx0KX1lbHNlIHRoaXMuX25hbWVzcGFjZUxpc3QucHVzaCh0KTtyZXR1cm4gdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5zZXQoZSx0KSx0fSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtyZXR1cm4gbnx8KG49dGhpcy5jcmVhdGVOYW1lc3BhY2UodCxlKSksbn0sdC5wcm90b3R5cGUucmVnaXN0ZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07ciYmci5yZWdpc3RlcihlLG4pJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih0KXt2YXIgcj10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTt0aGlzLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtuLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShyLmhvc3RFbGVtZW50KSxkZWxldGUgbi5fbmFtZXNwYWNlTG9va3VwW3RdO3ZhciBlPW4uX25hbWVzcGFjZUxpc3QuaW5kZXhPZihyKTtlPj0wJiZuLl9uYW1lc3BhY2VMaXN0LnNwbGljZShlLDEpfSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoZnVuY3Rpb24oKXtyZXR1cm4gci5kZXN0cm95KGUpfSl9fSx0LnByb3RvdHlwZS5fZmV0Y2hOYW1lc3BhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX0sdC5wcm90b3R5cGUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBTZXQsbj10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYobilmb3IodmFyIHI9T2JqZWN0LmtleXMobiksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1uW3JbaV1dLm5hbWVzcGFjZUlkO2lmKG8pe3ZhciBhPXRoaXMuX2ZldGNoTmFtZXNwYWNlKG8pO2EmJmUuYWRkKGEpfX1yZXR1cm4gZX0sdC5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbih0LGUsbixyKXtpZihMdChlKSl7dmFyIGk9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7aWYoaSlyZXR1cm4gaS50cmlnZ2VyKGUsbixyKSwhMH1yZXR1cm4hMX0sdC5wcm90b3R5cGUuaW5zZXJ0Tm9kZT1mdW5jdGlvbih0LGUsbixyKXtpZihMdChlKSl7dmFyIGk9ZVtqdF07aWYoaSYmaS5zZXRGb3JSZW1vdmFsKXtpLnNldEZvclJlbW92YWw9ITEsaS5zZXRGb3JNb3ZlPSEwO3ZhciBvPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGUpO28+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UobywxKX1pZih0KXt2YXIgYT10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTthJiZhLmluc2VydE5vZGUoZSxuKX1yJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSl9fSx0LnByb3RvdHlwZS5jb2xsZWN0RW50ZXJFbGVtZW50PWZ1bmN0aW9uKHQpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQ9ZnVuY3Rpb24odCxlKXtlP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXModCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKHQpLEJ0KHQsIm5nLWFuaW1hdGUtZGlzYWJsZWQiKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUodCksSHQodCwibmctYW5pbWF0ZS1kaXNhYmxlZCIpKX0sdC5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0LGUsbil7aWYoTHQoZSkpe3ZhciByPXQ/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtyP3IucmVtb3ZlTm9kZShlLG4pOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLG4pfWVsc2UgdGhpcy5fb25SZW1vdmFsQ29tcGxldGUoZSxuKX0sdC5wcm90b3R5cGUubWFya0VsZW1lbnRBc1JlbW92ZWQ9ZnVuY3Rpb24odCxlLG4scil7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goZSksZVtqdF09e25hbWVzcGFjZUlkOnQsc2V0Rm9yUmVtb3ZhbDpyLGhhc0FuaW1hdGlvbjpuLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIEx0KGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLG4scixpKTpmdW5jdGlvbigpe319LHQucHJvdG90eXBlLl9idWlsZEluc3RydWN0aW9uPWZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIHQudHJhbnNpdGlvbi5idWlsZCh0aGlzLmRyaXZlcix0LmVsZW1lbnQsdC5mcm9tU3RhdGUudmFsdWUsdC50b1N0YXRlLnZhbHVlLG4scix0LmZyb21TdGF0ZS5vcHRpb25zLHQudG9TdGF0ZS5vcHRpb25zLGUsaSl9LHQucHJvdG90eXBlLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy10cmlnZ2VyIiwhMCk7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudCh0KX0pLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKG49dGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGluZyIsITApKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCl9KX0sdC5wcm90b3R5cGUuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucXVldWVkP3QubWFya2VkRm9yRGVzdHJveT0hMDp0LmRlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5maW5pc2goKX0pfSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe2lmKHQucGxheWVycy5sZW5ndGgpcmV0dXJuIGEodC5wbGF5ZXJzKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZSgpfSk7ZSgpfSl9LHQucHJvdG90eXBlLnByb2Nlc3NMZWF2ZU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRbanRdO2lmKG4mJm4uc2V0Rm9yUmVtb3ZhbCl7aWYodFtqdF09SXQsbi5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpO3ZhciByPXRoaXMuX2ZldGNoTmFtZXNwYWNlKG4ubmFtZXNwYWNlSWQpO3ImJnIuY2xlYXJFbGVtZW50Q2FjaGUodCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxuLnNldEZvclJlbW92YWwpfXRoaXMuZHJpdmVyLm1hdGNoZXNFbGVtZW50KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIikmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChmdW5jdGlvbihuKXtlLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKX0pfSx0LnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQmJih0PS0xKTt2YXIgbj1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0LG4pe3JldHVybiBlLl9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LG4pfSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKHZhciByPTA7cjx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO3IrKylCdCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbcl0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7dmFyIGk9W107dHJ5e249dGhpcy5fZmx1c2hBbmltYXRpb25zKGksdCl9ZmluYWxseXtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0oKX19ZWxzZSBmb3Iocj0wO3I8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtyKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tyXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe3ZhciBvPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sbi5sZW5ndGg/YShuKS5vbkRvbmUoZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSk6by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX19LHQucHJvdG90eXBlLnJlcG9ydEVycm9yPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHByb2Nlc3MgYW5pbWF0aW9ucyBkdWUgdG8gdGhlIGZvbGxvd2luZyBmYWlsZWQgdHJpZ2dlciB0cmFuc2l0aW9uc1xuICIrdC5qb2luKCJcbiIpKX0sdC5wcm90b3R5cGUuX2ZsdXNoQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsbz1uZXcgc3Qscz1bXSx1PW5ldyBNYXAsbD1bXSxjPW5ldyBNYXAsaD1uZXcgTWFwLGQ9bmV3IE1hcCxwPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cC5hZGQodCk7Zm9yKHZhciBlPW4uZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApLHI9MDtyPGUubGVuZ3RoO3IrKylwLmFkZChlW3JdKX0pO3ZhciBtPXRoaXMuYm9keU5vZGUseT1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksZz1VdCh5LHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksdj1uZXcgTWFwLGI9MDtnLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctZW50ZXIiK2IrKzt2LnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gQnQodCxuKX0pfSk7Zm9yKHZhciBfPVtdLHc9bmV3IFNldCx4PW5ldyBTZXQsTz0wO088dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtPKyspKEI9KHo9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW09dKVtqdF0pJiZCLnNldEZvclJlbW92YWwmJihfLnB1c2goeiksdy5hZGQoeiksQi5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoeiwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB3LmFkZCh0KX0pOnguYWRkKHopKTt2YXIgQz1uZXcgTWFwLFM9VXQoeSxBcnJheS5mcm9tKHcpKTtTLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctbGVhdmUiK2IrKztDLnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gQnQodCxuKX0pfSksdC5wdXNoKGZ1bmN0aW9uKCl7Zy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49di5nZXQoZSk7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBIdCh0LG4pfSl9KSxTLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1DLmdldChlKTt0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEh0KHQsbil9KX0pLF8uZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb2Nlc3NMZWF2ZU5vZGUodCl9KX0pO2Zvcih2YXIgRT1bXSxrPVtdLFQ9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLl9uYW1lc3BhY2VMaXN0W1RdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnBsYXllcixyPXQuZWxlbWVudDtpZihFLnB1c2goZSksbi5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7dmFyIGk9cltqdF07aWYoaSYmaS5zZXRGb3JNb3ZlKXJldHVybiB2b2lkIGUuZGVzdHJveSgpfXZhciBhPSFtfHwhbi5kcml2ZXIuY29udGFpbnNFbGVtZW50KG0sciksdT1DLmdldChyKSxwPXYuZ2V0KHIpLHk9bi5fYnVpbGRJbnN0cnVjdGlvbih0LG8scCx1LGEpO2lmKHkuZXJyb3JzJiZ5LmVycm9ycy5sZW5ndGgpay5wdXNoKHkpO2Vsc2V7aWYoYSlyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIEwocix5LmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gRChyLHkudG9TdHlsZXMpfSksdm9pZCBzLnB1c2goZSk7aWYodC5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIEwocix5LmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gRChyLHkudG9TdHlsZXMpfSksdm9pZCBzLnB1c2goZSk7eS50aW1lbGluZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMH0pLG8uYXBwZW5kKHIseS50aW1lbGluZXMpLGwucHVzaCh7aW5zdHJ1Y3Rpb246eSxwbGF5ZXI6ZSxlbGVtZW50OnJ9KSx5LnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBmKGMsdCxbXSkucHVzaChlKX0pLHkucHJlU3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGgpe3ZhciByPWguZ2V0KGUpO3J8fGguc2V0KGUscj1uZXcgU2V0KSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHIuYWRkKHQpfSl9fSkseS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCkscj1kLmdldChlKTtyfHxkLnNldChlLHI9bmV3IFNldCksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiByLmFkZCh0KX0pfSl9fSk7aWYoay5sZW5ndGgpe3ZhciBJPVtdO2suZm9yRWFjaChmdW5jdGlvbih0KXtJLnB1c2goIkAiK3QudHJpZ2dlck5hbWUrIiBoYXMgZmFpbGVkIGR1ZSB0bzpcbiIpLHQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEkucHVzaCgiLSAiK3QrIlxuIil9KX0pLEUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLnJlcG9ydEVycm9yKEkpfXZhciBBPW5ldyBNYXAsaj1uZXcgTWFwO2wuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQ7by5oYXMoZSkmJihqLnNldChlLGUpLG4uX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQucGxheWVyLm5hbWVzcGFjZUlkLHQuaW5zdHJ1Y3Rpb24sQSkpfSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudDtuLl9nZXRQcmV2aW91c1BsYXllcnMoZSwhMSx0Lm5hbWVzcGFjZUlkLHQudHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaChmdW5jdGlvbih0KXtmKEEsZSxbXSkucHVzaCh0KSx0LmRlc3Ryb3koKX0pfSk7dmFyIFA9Xy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHF0KHQsaCxkKX0pLE09bmV3IE1hcDtWdChNLHRoaXMuZHJpdmVyLHgsZCxpLmEpLmZvckVhY2goZnVuY3Rpb24odCl7cXQodCxoLGQpJiZQLnB1c2godCl9KTt2YXIgTj1uZXcgTWFwO2cuZm9yRWFjaChmdW5jdGlvbih0LGUpe1Z0KE4sbi5kcml2ZXIsbmV3IFNldCh0KSxoLGkubyl9KSxQLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9TS5nZXQodCksbj1OLmdldCh0KTtNLnNldCh0LE9iamVjdChyLmEpKHt9LGUsbikpfSk7dmFyIFI9W10sRj1bXSxWPXt9O2wuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQscj10LnBsYXllcixpPXQuaW5zdHJ1Y3Rpb247aWYoby5oYXMoZSkpe2lmKHAuaGFzKGUpKXJldHVybiByLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBEKGUsaS50b1N0eWxlcyl9KSxyLmRpc2FibGVkPSEwLHIub3ZlcnJpZGVUb3RhbFRpbWUoaS50b3RhbFRpbWUpLHZvaWQgcy5wdXNoKHIpO3ZhciBsPVY7aWYoai5zaXplPjEpe2Zvcih2YXIgYz1lLGY9W107Yz1jLnBhcmVudE5vZGU7KXt2YXIgaD1qLmdldChjKTtpZihoKXtsPWg7YnJlYWt9Zi5wdXNoKGMpfWYuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gai5zZXQodCxsKX0pfXZhciBkPW4uX2J1aWxkQW5pbWF0aW9uKHIubmFtZXNwYWNlSWQsaSxBLHUsTixNKTtpZihyLnNldFJlYWxQbGF5ZXIoZCksbD09PVYpUi5wdXNoKHIpO2Vsc2V7dmFyIG09bi5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTttJiZtLmxlbmd0aCYmKHIucGFyZW50UGxheWVyPWEobSkpLHMucHVzaChyKX19ZWxzZSBMKGUsaS5mcm9tU3R5bGVzKSxyLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBEKGUsaS50b1N0eWxlcyl9KSxGLnB1c2gocikscC5oYXMoZSkmJnMucHVzaChyKX0pLEYuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT11LmdldCh0LmVsZW1lbnQpO2lmKGUmJmUubGVuZ3RoKXt2YXIgbj1hKGUpO3Quc2V0UmVhbFBsYXllcihuKX19KSxzLmZvckVhY2goZnVuY3Rpb24odCl7dC5wYXJlbnRQbGF5ZXI/dC5zeW5jUGxheWVyRXZlbnRzKHQucGFyZW50UGxheWVyKTp0LmRlc3Ryb3koKX0pO2Zvcih2YXIgVT0wO1U8Xy5sZW5ndGg7VSsrKXt2YXIgeixCPSh6PV9bVV0pW2p0XTtpZihIdCh6LCJuZy1sZWF2ZSIpLCFCfHwhQi5oYXNBbmltYXRpb24pe3ZhciBIPVtdO2lmKGMuc2l6ZSl7dmFyIFc9Yy5nZXQoeik7VyYmVy5sZW5ndGgmJkgucHVzaC5hcHBseShILE9iamVjdChyLmQpKFcpKTtmb3IodmFyIHE9dGhpcy5kcml2ZXIucXVlcnkoeiwiLm5nLWFuaW1hdGluZyIsITApLFk9MDtZPHEubGVuZ3RoO1krKyl7dmFyIEc9Yy5nZXQocVtZXSk7RyYmRy5sZW5ndGgmJkgucHVzaC5hcHBseShILE9iamVjdChyLmQpKEcpKX19dmFyIFE9SC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuZGVzdHJveWVkfSk7US5sZW5ndGg/V3QodGhpcyx6LFEpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZSh6KX19cmV0dXJuIF8ubGVuZ3RoPTAsUi5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucGxheWVycy5wdXNoKHQpLHQub25Eb25lKGZ1bmN0aW9uKCl7dC5kZXN0cm95KCk7dmFyIGU9bi5wbGF5ZXJzLmluZGV4T2YodCk7bi5wbGF5ZXJzLnNwbGljZShlLDEpfSksdC5wbGF5KCl9KSxSfSx0LnByb3RvdHlwZS5lbGVtZW50Q29udGFpbnNEYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITEscj1lW2p0XTtyZXR1cm4gciYmci5zZXRGb3JSZW1vdmFsJiYobj0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKG49ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8bn0sdC5wcm90b3R5cGUuYWZ0ZXJGbHVzaD1mdW5jdGlvbih0KXt0aGlzLl9mbHVzaEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmU9ZnVuY3Rpb24odCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9nZXRQcmV2aW91c1BsYXllcnM9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz1bXTtpZihlKXt2YXIgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYobz1hKX1lbHNle3ZhciBzPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYocyl7dmFyIHU9IWl8fCJ2b2lkIj09aTtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5xdWV1ZWR8fCh1fHx0LnRyaWdnZXJOYW1lPT1yKSYmby5wdXNoKHQpfSl9fXJldHVybihufHxyKSYmKG89by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIShuJiZuIT10Lm5hbWVzcGFjZUlkfHxyJiZyIT10LnRyaWdnZXJOYW1lKX0pKSxvfSx0LnByb3RvdHlwZS5fYmVmb3JlQW5pbWF0aW9uQnVpbGQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG8sYT1lLmVsZW1lbnQscz1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOnQsdT1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmUudHJpZ2dlck5hbWUsbD1mdW5jdGlvbih0KXt2YXIgcj10LmVsZW1lbnQsaT1yIT09YSxvPWYobixyLFtdKTtjLl9nZXRQcmV2aW91c1BsYXllcnMocixpLHMsdSxlLnRvU3RhdGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRSZWFsUGxheWVyKCk7ZS5iZWZvcmVEZXN0cm95JiZlLmJlZm9yZURlc3Ryb3koKSx0LmRlc3Ryb3koKSxvLnB1c2godCl9KX0sYz10aGlzO3RyeXtmb3IodmFyIGg9T2JqZWN0KHIuZSkoZS50aW1lbGluZXMpLGQ9aC5uZXh0KCk7IWQuZG9uZTtkPWgubmV4dCgpKWwoZC52YWx1ZSl9Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZCYmIWQuZG9uZSYmKG89aC5yZXR1cm4pJiZvLmNhbGwoaCl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fUwoYSxlLmZyb21TdHlsZXMpfSx0LnByb3RvdHlwZS5fYnVpbGRBbmltYXRpb249ZnVuY3Rpb24odCxlLG4scixvLHUpe3ZhciBsPXRoaXMsYz1lLnRyaWdnZXJOYW1lLGg9ZS5lbGVtZW50LGQ9W10scD1uZXcgU2V0LG09bmV3IFNldCx5PWUudGltZWxpbmVzLm1hcChmdW5jdGlvbihlKXt2YXIgYT1lLmVsZW1lbnQ7cC5hZGQoYSk7dmFyIGY9YVtqdF07aWYoZiYmZi5yZW1vdmVkQmVmb3JlUXVlcmllZClyZXR1cm4gbmV3IGkuZChlLmR1cmF0aW9uLGUuZGVsYXkpO3ZhciB5LGcsdj1hIT09aCxiPSh5PShuLmdldChhKXx8VHQpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRSZWFsUGxheWVyKCl9KSxnPVtdLGZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89ZVtyXTtvIGluc3RhbmNlb2YgaS5uP3Qoby5wbGF5ZXJzLG4pOm4ucHVzaChvKX19KHksZyksZykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhdC5lbGVtZW50JiZ0LmVsZW1lbnQ9PT1hfSksXz1vLmdldChhKSx3PXUuZ2V0KGEpLHg9cygwLGwuX25vcm1hbGl6ZXIsMCxlLmtleWZyYW1lcyxfLHcpLE89bC5fYnVpbGRQbGF5ZXIoZSx4LGIpO2lmKGUuc3ViVGltZWxpbmUmJnImJm0uYWRkKGEpLHYpe3ZhciBDPW5ldyBEdCh0LGMsYSk7Qy5zZXRSZWFsUGxheWVyKE8pLGQucHVzaChDKX1yZXR1cm4gT30pO2QuZm9yRWFjaChmdW5jdGlvbih0KXtmKGwucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdC5lbGVtZW50LFtdKS5wdXNoKHQpLHQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtpZih0IGluc3RhbmNlb2YgTWFwKXtpZihyPXQuZ2V0KGUpKXtpZihyLmxlbmd0aCl7dmFyIGk9ci5pbmRleE9mKG4pO3Iuc3BsaWNlKGksMSl9MD09ci5sZW5ndGgmJnQuZGVsZXRlKGUpfX1lbHNlKHI9dFtlXSkmJihyLmxlbmd0aCYmKGk9ci5pbmRleE9mKG4pLHIuc3BsaWNlKGksMSkpLDA9PXIubGVuZ3RoJiZkZWxldGUgdFtlXSk7cmV0dXJuIHJ9KGwucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdC5lbGVtZW50LHQpfSl9KSxwLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEJ0KHQsIm5nLWFuaW1hdGluZyIpfSk7dmFyIGc9YSh5KTtyZXR1cm4gZy5vbkRlc3Ryb3koZnVuY3Rpb24oKXtwLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEh0KHQsIm5nLWFuaW1hdGluZyIpfSksRChoLGUudG9TdHlsZXMpfSksbS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Yocix0LFtdKS5wdXNoKGcpfSksZ30sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKHQuZWxlbWVudCxlLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxuKTpuZXcgaS5kKHQuZHVyYXRpb24sdC5kZWxheSl9LHR9KCksRHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1uLHRoaXMuX3BsYXllcj1uZXcgaS5kLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5tYXJrZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1yZXR1cm4gdC5wcm90b3R5cGUuc2V0UmVhbFBsYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj10LE9iamVjdC5rZXlzKHRoaXMuX3F1ZXVlZENhbGxiYWNrcykuZm9yRWFjaChmdW5jdGlvbihuKXtlLl9xdWV1ZWRDYWxsYmFja3Nbbl0uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdSh0LG4sdm9pZCAwLGUpfSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUodC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX0sdC5wcm90b3R5cGUuZ2V0UmVhbFBsYXllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9LHQucHJvdG90eXBlLm92ZXJyaWRlVG90YWxUaW1lPWZ1bmN0aW9uKHQpe3RoaXMudG90YWxUaW1lPXR9LHQucHJvdG90eXBlLnN5bmNQbGF5ZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BsYXllcjtuLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIG4udHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpfSksdC5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5maW5pc2goKX0pLHQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLl9xdWV1ZUV2ZW50PWZ1bmN0aW9uKHQsZSl7Zih0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIix0KSx0aGlzLl9wbGF5ZXIub25Eb25lKHQpfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJzdGFydCIsdCksdGhpcy5fcGxheWVyLm9uU3RhcnQodCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX3BsYXllci5pbml0KCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNTdGFydGVkKCl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQoKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGxheWVyO2UudHJpZ2dlckNhbGxiYWNrJiZlLnRyaWdnZXJDYWxsYmFjayh0KX0sdH0oKTtmdW5jdGlvbiBMdCh0KXtyZXR1cm4gdCYmMT09PXQubm9kZVR5cGV9ZnVuY3Rpb24gRnQodCxlKXt2YXIgbj10LnN0eWxlLmRpc3BsYXk7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT1udWxsIT1lP2U6Im5vbmUiLG59ZnVuY3Rpb24gVnQodCxlLG4scixpKXt2YXIgbz1bXTtuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIG8ucHVzaChGdCh0KSl9KTt2YXIgYT1bXTtyLmZvckVhY2goZnVuY3Rpb24obixyKXt2YXIgbz17fTtuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49b1t0XT1lLmNvbXB1dGVTdHlsZShyLHQsaSk7biYmMCE9bi5sZW5ndGh8fChyW2p0XT1BdCxhLnB1c2gocikpfSksdC5zZXQocixvKX0pO3ZhciBzPTA7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gRnQodCxvW3MrK10pfSksYX1mdW5jdGlvbiBVdCh0LGUpe3ZhciBuPW5ldyBNYXA7aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnNldCh0LFtdKX0pLDA9PWUubGVuZ3RoKXJldHVybiBuO3ZhciByPW5ldyBTZXQoZSksaT1uZXcgTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24gdChlKXtpZighZSlyZXR1cm4gMTt2YXIgbz1pLmdldChlKTtpZihvKXJldHVybiBvO3ZhciBhPWUucGFyZW50Tm9kZTtyZXR1cm4gbz1uLmhhcyhhKT9hOnIuaGFzKGEpPzE6dChhKSxpLnNldChlLG8pLG99KHQpOzEhPT1lJiZuLmdldChlKS5wdXNoKHQpfSksbn12YXIgenQ9IiQkY2xhc3NlcyI7ZnVuY3Rpb24gQnQodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj10W3p0XTtufHwobj10W3p0XT17fSksbltlXT0hMH19ZnVuY3Rpb24gSHQodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5yZW1vdmUoZSk7ZWxzZXt2YXIgbj10W3p0XTtuJiZkZWxldGUgbltlXX19ZnVuY3Rpb24gV3QodCxlLG4pe2Eobikub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvY2Vzc0xlYXZlTm9kZShlKX0pfWZ1bmN0aW9uIHF0KHQsZSxuKXt2YXIgcj1uLmdldCh0KTtpZighcilyZXR1cm4hMTt2YXIgaT1lLmdldCh0KTtyZXR1cm4gaT9yLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGkuYWRkKHQpfSk6ZS5zZXQodCxyKSxuLmRlbGV0ZSh0KSwhMH12YXIgWXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgUnQodCxlLG4pLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBrdCh0LGUsbiksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiByLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9fXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3RlclRyaWdnZXI9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz10KyItIityLGE9dGhpcy5fdHJpZ2dlckNhY2hlW29dO2lmKCFhKXt2YXIgcz1bXSx1PXR0KHRoaXMuX2RyaXZlcixpLHMpO2lmKHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcignVGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK3IrJyIgaGFzIGZhaWxlZCB0byBidWlsZCBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAnK3Muam9pbigiXG4gLSAiKSk7YT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgQ3QodCxlKX0ocix1KSx0aGlzLl90cmlnZ2VyQ2FjaGVbb109YX10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihlLHIsYSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3Rlcih0LGUpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KHQsZSl9LHQucHJvdG90eXBlLm9uSW5zZXJ0PWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZSh0LGUsbixyKX0sdC5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZSh0LGUsbil9LHQucHJvdG90eXBlLmRpc2FibGVBbmltYXRpb25zPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKX0sdC5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbih0LGUsbixpKXtpZigiQCI9PW4uY2hhckF0KDApKXt2YXIgbz1PYmplY3Qoci5jKShoKG4pLDIpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQob1swXSxlLG9bMV0saSl9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIodCxlLG4saSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbixpLG8pe2lmKCJAIj09bi5jaGFyQXQoMCkpe3ZhciBhPU9iamVjdChyLmMpKGgobiksMik7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihhWzBdLGUsYVsxXSxvKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4odCxlLG4saSxvKX0sdC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9LTEpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGxheWVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSxHdD0iYW5pbWF0aW9uIixRdD0iYW5pbWF0aW9uZW5kIixLdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSl7dmFyIHM9dGhpczt0aGlzLl9lbGVtZW50PXQsdGhpcy5fbmFtZT1lLHRoaXMuX2R1cmF0aW9uPW4sdGhpcy5fZGVsYXk9cix0aGlzLl9lYXNpbmc9aSx0aGlzLl9maWxsTW9kZT1vLHRoaXMuX29uRG9uZUZuPWEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX3N0YXJ0VGltZT0wLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5fZXZlbnRGbj1mdW5jdGlvbih0KXtyZXR1cm4gcy5faGFuZGxlQ2FsbGJhY2sodCl9fXJldHVybiB0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3ZhciB0LGUsbjtlPXRoaXMuX2R1cmF0aW9uKyJtcyAiK3RoaXMuX2Vhc2luZysiICIrdGhpcy5fZGVsYXkrIm1zIDEgbm9ybWFsICIrdGhpcy5fZmlsbE1vZGUrIiAiK3RoaXMuX25hbWUsKG49ZWUodD10aGlzLl9lbGVtZW50LCIiKS50cmltKCkpLmxlbmd0aCYmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspIiwiPT09dC5jaGFyQXQobikmJjB9KG4pLGU9bisiLCAiK2UpLHRlKHQsIiIsZSksSnQodGhpcy5fZWxlbWVudCx0aGlzLl9ldmVudEZuLCExKSx0aGlzLl9zdGFydFRpbWU9RGF0ZS5ub3coKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtadCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInBhdXNlZCIpfSx0LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtadCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInJ1bm5pbmciKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9WHQodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lKTt0aGlzLl9wb3NpdGlvbj10KnRoaXMuX2R1cmF0aW9uLHRlKHRoaXMuX2VsZW1lbnQsIkRlbGF5IiwiLSIrdGhpcy5fcG9zaXRpb24rIm1zIixlKX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHQucHJvdG90eXBlLl9oYW5kbGVDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9uZ1Rlc3RNYW51YWxUaW1lc3RhbXB8fERhdGUubm93KCksbj0xZTMqcGFyc2VGbG9hdCh0LmVsYXBzZWRUaW1lLnRvRml4ZWQoMykpO3QuYW5pbWF0aW9uTmFtZT09dGhpcy5fbmFtZSYmTWF0aC5tYXgoZS10aGlzLl9zdGFydFRpbWUsMCk+PXRoaXMuX2RlbGF5JiZuPj10aGlzLl9kdXJhdGlvbiYmdGhpcy5maW5pc2goKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbigpLEp0KHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMCkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuZmluaXNoKCksZT10aGlzLl9uYW1lLChyPSR0KG49ZWUodD10aGlzLl9lbGVtZW50LCIiKS5zcGxpdCgiLCIpLGUpKT49MCYmKG4uc3BsaWNlKHIsMSksdGUodCwiIixuLmpvaW4oIiwiKSkpKX0sdH0oKTtmdW5jdGlvbiBadCh0LGUsbil7dGUodCwiUGxheVN0YXRlIixuLFh0KHQsZSkpfWZ1bmN0aW9uIFh0KHQsZSl7dmFyIG49ZWUodCwiIik7cmV0dXJuIG4uaW5kZXhPZigiLCIpPjA/JHQobi5zcGxpdCgiLCIpLGUpOiR0KFtuXSxlKX1mdW5jdGlvbiAkdCh0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaW5kZXhPZihlKT49MClyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBKdCh0LGUsbil7bj90LnJlbW92ZUV2ZW50TGlzdGVuZXIoUXQsZSk6dC5hZGRFdmVudExpc3RlbmVyKFF0LGUpfWZ1bmN0aW9uIHRlKHQsZSxuLHIpe3ZhciBpPUd0K2U7aWYobnVsbCE9cil7dmFyIG89dC5zdHlsZVtpXTtpZihvLmxlbmd0aCl7dmFyIGE9by5zcGxpdCgiLCIpO2Fbcl09bixuPWEuam9pbigiLCIpfX10LnN0eWxlW2ldPW59ZnVuY3Rpb24gZWUodCxlKXtyZXR1cm4gdC5zdHlsZVtHdCtlXX12YXIgbmU9ImxpbmVhciIscmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5JTklUSUFMSVpFRD0xXT0iSU5JVElBTElaRUQiLHRbdC5TVEFSVEVEPTJdPSJTVEFSVEVEIix0W3QuRklOSVNIRUQ9M109IkZJTklTSEVEIix0W3QuREVTVFJPWUVEPTRdPSJERVNUUk9ZRUQiLHR9KHt9KSxpZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSl7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLmFuaW1hdGlvbk5hbWU9bix0aGlzLl9kdXJhdGlvbj1yLHRoaXMuX2RlbGF5PWksdGhpcy5fZmluYWxTdHlsZXM9YSx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLmN1cnJlbnRTbmFwc2hvdD17fSx0aGlzLnN0YXRlPTAsdGhpcy5lYXNpbmc9b3x8bmUsdGhpcy50b3RhbFRpbWU9citpLHRoaXMuX2J1aWxkU3R5bGVyKCl9cmV0dXJuIHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuc3RhdGU+PXJlLkRFU1RST1lFRHx8KHRoaXMuc3RhdGU9cmUuREVTVFJPWUVELHRoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5fZmx1c2hEb25lRm5zPWZ1bmN0aW9uKCl7dGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXX0sdC5wcm90b3R5cGUuX2ZsdXNoU3RhcnRGbnM9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuc3RhdGU+PXJlLkZJTklTSEVEfHwodGhpcy5zdGF0ZT1yZS5GSU5JU0hFRCx0aGlzLl9zdHlsZXIuZmluaXNoKCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5fc3R5bGVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHlsZXIuZ2V0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlPj1yZS5TVEFSVEVEfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT49cmUuSU5JVElBTElaRUR8fCh0aGlzLnN0YXRlPXJlLklOSVRJQUxJWkVELHRoaXMuX3N0eWxlci5hcHBseSgpLHRoaXMuX2RlbGF5JiZ0aGlzLl9zdHlsZXIucGF1c2UoKSl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX2ZsdXNoU3RhcnRGbnMoKSx0aGlzLnN0YXRlPXJlLlNUQVJURUQpLHRoaXMuX3N0eWxlci5yZXN1bWUoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9zdHlsZXIucGF1c2UoKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZXIuZGVzdHJveSgpLHRoaXMuX2J1aWxkU3R5bGVyKCksdGhpcy5fc3R5bGVyLmFwcGx5KCl9LHQucHJvdG90eXBlLl9idWlsZFN0eWxlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3R5bGVyPW5ldyBLdCh0aGlzLmVsZW1lbnQsdGhpcy5hbmltYXRpb25OYW1lLHRoaXMuX2R1cmF0aW9uLHRoaXMuX2RlbGF5LHRoaXMuZWFzaW5nLCJmb3J3YXJkcyIsZnVuY3Rpb24oKXtyZXR1cm4gdC5maW5pc2goKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHQucHJvdG90eXBlLmJlZm9yZURlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaW5pdCgpO3ZhciBlPXt9O2lmKHRoaXMuaGFzU3RhcnRlZCgpKXt2YXIgbj10aGlzLnN0YXRlPj1yZS5GSU5JU0hFRDtPYmplY3Qua2V5cyh0aGlzLl9maW5hbFN0eWxlcykuZm9yRWFjaChmdW5jdGlvbihyKXsib2Zmc2V0IiE9ciYmKGVbcl09bj90Ll9maW5hbFN0eWxlc1tyXTpRKHQuZWxlbWVudCxyKSl9KX10aGlzLmN1cnJlbnRTbmFwc2hvdD1lfSx0fSgpLG9lPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuZWxlbWVudD1lLHIuX3N0YXJ0aW5nU3R5bGVzPXt9LHIuX19pbml0aWFsaXplZD0hMSxyLl9zdHlsZXM9UyhuKSxyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzOyF0aGlzLl9faW5pdGlhbGl6ZWQmJnRoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5fX2luaXRpYWxpemVkPSEwLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXtlLl9zdGFydGluZ1N0eWxlc1t0XT1lLmVsZW1lbnQuc3R5bGVbdF19KSx0LnByb3RvdHlwZS5pbml0LmNhbGwodGhpcykpfSxlLnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9zdGFydGluZ1N0eWxlcyYmKHRoaXMuaW5pdCgpLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHQsZS5fc3R5bGVzW3RdKX0pLHQucHJvdG90eXBlLnBsYXkuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYoT2JqZWN0LmtleXModGhpcy5fc3RhcnRpbmdTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5fc3RhcnRpbmdTdHlsZXNbdF07bj9lLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkodCxuKTplLmVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9KSx0aGlzLl9zdGFydGluZ1N0eWxlcz1udWxsLHQucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSl9LGV9KGkuZCksYWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY291bnQ9MCx0aGlzLl9oZWFkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImhlYWQiKSx0aGlzLl93YXJuaW5nSXNzdWVkPSExfXJldHVybiB0LnByb3RvdHlwZS52YWxpZGF0ZVN0eWxlUHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCl9LHQucHJvdG90eXBlLm1hdGNoZXNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgodCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCxlKX0sdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBDKHQsZSxuKX0sdC5wcm90b3R5cGUuY29tcHV0ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19LHQucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVFbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0iQGtleWZyYW1lcyAiK2UrIiB7XG4iLGk9IiI7KG49bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIFModCl9KSkuZm9yRWFjaChmdW5jdGlvbih0KXtpPSIgIjt2YXIgZT1wYXJzZUZsb2F0KHQub2Zmc2V0KTtyKz0iIitpKzEwMCplKyIlIHtcbiIsaSs9IiAiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtzd2l0Y2goZSl7Y2FzZSJvZmZzZXQiOnJldHVybjtjYXNlImVhc2luZyI6cmV0dXJuIHZvaWQobiYmKHIrPWkrImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICIrbisiO1xuIikpO2RlZmF1bHQ6cmV0dXJuIHZvaWQocis9IiIraStlKyI6ICIrbisiO1xuIil9fSkscis9aSsifVxuIn0pLHIrPSJ9XG4iO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIG8uaW5uZXJIVE1MPXIsb30sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXt2b2lkIDA9PT1vJiYobz1bXSksYSYmdGhpcy5fbm90aWZ5RmF1bHR5U2NydWJiZXIoKTt2YXIgcz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGllfSksdT17fTtxKG4scikmJnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmN1cnJlbnRTbmFwc2hvdDtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB1W3RdPWVbdF19KX0pO3ZhciBsPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0JiYoQXJyYXkuaXNBcnJheSh0KT90Olt0XSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4peyJvZmZzZXQiIT1uJiYiZWFzaW5nIiE9biYmKGVbbl09dFtuXSl9KX0pLGV9KGU9WSh0LGUsdSkpO2lmKDA9PW4pcmV0dXJuIG5ldyBvZSh0LGwpO3ZhciBjPSJnZW5fY3NzX2tmXyIrdGhpcy5fY291bnQrKyxmPXRoaXMuYnVpbGRLZXlmcmFtZUVsZW1lbnQodCxjLGUpO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImhlYWQiKS5hcHBlbmRDaGlsZChmKTt2YXIgaD1uZXcgaWUodCxlLGMsbixyLGksbCk7cmV0dXJuIGgub25EZXN0cm95KGZ1bmN0aW9uKCl7dmFyIHQ7KHQ9ZikucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX0pLGh9LHQucHJvdG90eXBlLl9ub3RpZnlGYXVsdHlTY3J1YmJlcj1mdW5jdGlvbigpe3RoaXMuX3dhcm5pbmdJc3N1ZWR8fChjb25zb2xlLndhcm4oIkBhbmd1bGFyL2FuaW1hdGlvbnM6IHBsZWFzZSBsb2FkIHRoZSB3ZWItYW5pbWF0aW9ucy5qcyBwb2x5ZmlsbCB0byBhbGxvdyBwcm9ncmFtbWF0aWMgYWNjZXNzLi4uXG4iLCIgIHZpc2l0IGh0dHA6Ly9iaXQubHkvSVd1a2FtIHRvIGxlYXJuIG1vcmUgYWJvdXQgdXNpbmcgdGhlIHdlYi1hbmltYXRpb24tanMgcG9seWZpbGwuIiksdGhpcy5fd2FybmluZ0lzc3VlZD0hMCl9LHR9KCksc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmtleWZyYW1lcz1lLHRoaXMub3B0aW9ucz1uLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9pbml0aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLnRpbWU9MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuY3VycmVudFNuYXBzaG90PXt9LHRoaXMuX2R1cmF0aW9uPW4uZHVyYXRpb24sdGhpcy5fZGVsYXk9bi5kZWxheXx8MCx0aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfSx0LnByb3RvdHlwZS5fYnVpbGRQbGF5ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLl9pbml0aWFsaXplZCl7dGhpcy5faW5pdGlhbGl6ZWQ9ITA7dmFyIGU9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVsZW1lbnQsZSx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9ZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXTp7fSx0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHQuX29uRmluaXNoKCl9KX19LHQucHJvdG90eXBlLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX0sdC5wcm90b3R5cGUuX3RyaWdnZXJXZWJBbmltYXRpb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LmFuaW1hdGUoZSxuKX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSEwKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIucGF1c2UoKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITF9LHQucHJvdG90eXBlLl9yZXNldERvbVBsYXllclN0YXRlPWZ1bmN0aW9uKCl7dGhpcy5kb21QbGF5ZXImJnRoaXMuZG9tUGxheWVyLmNhbmNlbCgpfSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRGVzdHJveUZucz1bXSl9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPXQqdGhpcy50aW1lfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZS90aGlzLnRpbWV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidG90YWxUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmJlZm9yZURlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9e307dGhpcy5oYXNTdGFydGVkKCkmJk9iamVjdC5rZXlzKHRoaXMuX2ZpbmFsS2V5ZnJhbWUpLmZvckVhY2goZnVuY3Rpb24obil7Im9mZnNldCIhPW4mJihlW25dPXQuX2ZpbmlzaGVkP3QuX2ZpbmFsS2V5ZnJhbWVbbl06USh0LmVsZW1lbnQsbikpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9ZX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLHVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2lzTmF0aXZlSW1wbD0vXHtccypcW25hdGl2ZVxzK2NvZGVcXVxzKlx9Ly50ZXN0KGNlKCkudG9TdHJpbmcoKSksdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyPW5ldyBhZX1yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiB3KHQpfSx0LnByb3RvdHlwZS5tYXRjaGVzRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB4KHQsZSl9LHQucHJvdG90eXBlLmNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gQyh0LGUsbil9LHQucHJvdG90eXBlLmNvbXB1dGVTdHlsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfSx0LnByb3RvdHlwZS5vdmVycmlkZVdlYkFuaW1hdGlvbnNTdXBwb3J0PWZ1bmN0aW9uKHQpe3RoaXMuX2lzTmF0aXZlSW1wbD10fSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEpe2lmKHZvaWQgMD09PW8mJihvPVtdKSwhYSYmIXRoaXMuX2lzTmF0aXZlSW1wbClyZXR1cm4gdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyLmFuaW1hdGUodCxlLG4scixpLG8pO3ZhciBzPXtkdXJhdGlvbjpuLGRlbGF5OnIsZmlsbDowPT1yPyJib3RoIjoiZm9yd2FyZHMifTtpJiYocy5lYXNpbmc9aSk7dmFyIHU9e30sbD1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHNlfSk7cmV0dXJuIHEobixyKSYmbC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuY3VycmVudFNuYXBzaG90O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHVbdF09ZVt0XX0pfSksZT1ZKHQsZT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gTSh0LCExKX0pLHUpLG5ldyBzZSh0LGUscyl9LHR9KCk7ZnVuY3Rpb24gbGUoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY2UoKX1mdW5jdGlvbiBjZSgpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuZG9jdW1lbnQmJkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGV8fHt9fX0sT3pmQjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBMfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBqfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHp9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gSH0pO3ZhciByPW4oIkNjbkciKSxpPW4oIklwMFIiKSxvPW4oIjI2RlUiKSxhPW4oIlZuRC8iKSxzPW4oIjY3WS8iKSx1PW4oIm1yU0ciKTtmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoT2JqZWN0KGkucSkoZSkpe3ZhciBuPS9cYmZsZXgtbGF5b3V0LS4rP1xiL2c7QXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoIltjbGFzcyo9IitjKyJdIikpLmZvckVhY2goZnVuY3Rpb24odCl7dC5jbGFzc0xpc3QuY29udGFpbnMoYysic3NyIikmJnQucGFyZW50Tm9kZT90LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCk6dC5jbGFzc05hbWUucmVwbGFjZShuLCIiKX0pfX19dmFyIGM9ImZsZXgtbGF5b3V0LSIsZj1uZXcgci5vKCJGbGV4IExheW91dCB0b2tlbiwgY29sbGVjdCBhbGwgYnJlYWtwb2ludHMgaW50byBvbmUgcHJvdmlkZXIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksaD1be2FsaWFzOiJ4cyIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMHB4KSBhbmQgKG1heC13aWR0aDogNTk5cHgpIn0se2FsaWFzOiJndC14cyIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogNjAwcHgpIn0se2FsaWFzOiJsdC1zbSIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1heC13aWR0aDogNTk5cHgpIn0se2FsaWFzOiJzbSIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkifSx7YWxpYXM6Imd0LXNtIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA5NjBweCkifSx7YWxpYXM6Imx0LW1kIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiA5NTlweCkifSx7YWxpYXM6Im1kIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkifSx7YWxpYXM6Imd0LW1kIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAxMjgwcHgpIn0se2FsaWFzOiJsdC1sZyIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1heC13aWR0aDogMTI3OXB4KSJ9LHthbGlhczoibGciLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDEyODBweCkgYW5kIChtYXgtd2lkdGg6IDE5MTlweCkifSx7YWxpYXM6Imd0LWxnIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAxOTIwcHgpIn0se2FsaWFzOiJsdC14bCIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1heC13aWR0aDogMTkyMHB4KSJ9LHthbGlhczoieGwiLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDE5MjBweCkgYW5kIChtYXgtd2lkdGg6IDUwMDBweCkifV0sZD0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkiLHA9IihvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDgzOXB4KSIsbT0iKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDg0MHB4KSIseT0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIixnPXtIQU5EU0VUOiIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNTk5cHgpLCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KSIsVEFCTEVUOnArIiAsICIrZCxXRUI6bSsiLCAiK3krIiAiLEhBTkRTRVRfUE9SVFJBSVQ6IihvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA1OTlweCkiLFRBQkxFVF9QT1JUUkFJVDpwKyIgIixXRUJfUE9SVFJBSVQ6IiIrbSxIQU5EU0VUX0xBTkRTQ0FQRToiKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA5NTlweCldIixUQUJMRVRfTEFORFNDQVBFOiIiK2QsV0VCX0xBTkRTQ0FQRToiIit5fSx2PVt7YWxpYXM6ImhhbmRzZXQiLG1lZGlhUXVlcnk6Zy5IQU5EU0VUfSx7YWxpYXM6ImhhbmRzZXQubGFuZHNjYXBlIixtZWRpYVF1ZXJ5OmcuSEFORFNFVF9MQU5EU0NBUEV9LHthbGlhczoiaGFuZHNldC5wb3J0cmFpdCIsbWVkaWFRdWVyeTpnLkhBTkRTRVRfUE9SVFJBSVR9LHthbGlhczoidGFibGV0IixtZWRpYVF1ZXJ5OmcuVEFCTEVUfSx7YWxpYXM6InRhYmxldC5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6Zy5UQUJMRVR9LHthbGlhczoidGFibGV0LnBvcnRyYWl0IixtZWRpYVF1ZXJ5OmcuVEFCTEVUX1BPUlRSQUlUfSx7YWxpYXM6IndlYiIsbWVkaWFRdWVyeTpnLldFQixvdmVybGFwcGluZzohMH0se2FsaWFzOiJ3ZWIubGFuZHNjYXBlIixtZWRpYVF1ZXJ5OmcuV0VCX0xBTkRTQ0FQRSxvdmVybGFwcGluZzohMH0se2FsaWFzOiJ3ZWIucG9ydHJhaXQiLG1lZGlhUXVlcnk6Zy5XRUJfUE9SVFJBSVQsb3ZlcmxhcHBpbmc6ITB9XTtmdW5jdGlvbiBiKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTtmb3IodmFyIHI9MCxpPWU7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl07aWYobnVsbCE9bylmb3IodmFyIGEgaW4gbylvLmhhc093blByb3BlcnR5KGEpJiYodFthXT1vW2FdKX1yZXR1cm4gdH12YXIgXz0vKFwufC18XykvZztmdW5jdGlvbiB3KHQpe3ZhciBlPXQubGVuZ3RoPjA/dC5jaGFyQXQoMCk6IiIsbj10Lmxlbmd0aD4xP3Quc2xpY2UoMSk6IiI7cmV0dXJuIGUudG9VcHBlckNhc2UoKStufXZhciB4PXthZGRGbGV4VG9QYXJlbnQ6ITAsYWRkT3JpZW50YXRpb25CcHM6ITEsZGlzYWJsZURlZmF1bHRCcHM6ITEsZGlzYWJsZVZlbmRvclByZWZpeGVzOiExLHNlcnZlckxvYWRlZDohMSx1c2VDb2x1bW5CYXNpc1plcm86ITB9LE89bmV3IHIubygiRmxleCBMYXlvdXQgdG9rZW4sIGNvbmZpZyBvcHRpb25zIGZvciB0aGUgbGlicmFyeSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4geH19KSxDPW5ldyByLm8oIlRva2VuIChAYW5ndWxhci9mbGV4LWxheW91dCkgQnJlYWtwb2ludHMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0KHIuVikoZiksZT1PYmplY3Qoci5WKShPKSxuPVtdLmNvbmNhdC5hcHBseShbXSwodHx8W10pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Olt0XX0pKTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG4scj17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdC5hbGlhc109dH0pLGUuZm9yRWFjaChmdW5jdGlvbih0KXtyW3QuYWxpYXNdP2Ioclt0LmFsaWFzXSx0KTpyW3QuYWxpYXNdPXR9KSwobj1PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHJbdF19KSkuZm9yRWFjaChmdW5jdGlvbih0KXt0LnN1ZmZpeHx8KHQuc3VmZml4PXQuYWxpYXMucmVwbGFjZShfLCJ8Iikuc3BsaXQoInwiKS5tYXAodykuam9pbigiIiksdC5vdmVybGFwcGluZz0hIXQub3ZlcmxhcHBpbmcpfSksbn0oKGUuZGlzYWJsZURlZmF1bHRCcHM/W106aCkuY29uY2F0KGUuYWRkT3JpZW50YXRpb25CcHM/djpbXSksbil9fSksUz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcmVnaXN0cnk9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpdGVtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5zbGljZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic29ydGVkSXRlbXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10Lm92ZXJsYXBwaW5nfSksZT10aGlzLl9yZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuITAhPT10Lm92ZXJsYXBwaW5nfSk7cmV0dXJuIHQuY29uY2F0KGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmZpbmRCeUFsaWFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFsaWFzPT10fSl8fG51bGx9LHQucHJvdG90eXBlLmZpbmRCeVF1ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1lZGlhUXVlcnk9PXR9KXx8bnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvdmVybGFwcGluZ3MiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiAxPT10Lm92ZXJsYXBwaW5nfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhbGlhc2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5hbGlhc30pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3VmZml4ZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1ZmZpeD90LnN1ZmZpeDoiIn0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKEMpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dm9pZCAwPT09dCYmKHQ9ITEpLHZvaWQgMD09PWUmJihlPSJhbGwiKSx2b2lkIDA9PT1uJiYobj0iIiksdm9pZCAwPT09ciYmKHI9IiIpLHRoaXMubWF0Y2hlcz10LHRoaXMubWVkaWFRdWVyeT1lLHRoaXMubXFBbGlhcz1uLHRoaXMuc3VmZml4PXJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMubWF0Y2hlcyx0aGlzLm1lZGlhUXVlcnksdGhpcy5tcUFsaWFzLHRoaXMuc3VmZml4KX0sdH0oKSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fem9uZT10LHRoaXMuX3BsYXRmb3JtSWQ9ZSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX3JlZ2lzdHJ5PW5ldyBNYXAsdGhpcy5fc291cmNlPW5ldyBvLmEobmV3IEUoITApKSx0aGlzLl9vYnNlcnZhYmxlJD10aGlzLl9zb3VyY2UuYXNPYnNlcnZhYmxlKCl9cmV0dXJuIHQucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlZ2lzdHJ5LmdldCh0KTtyZXR1cm4hIWUmJmUubWF0Y2hlc30sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5yZWdpc3RlclF1ZXJ5KHQpLHRoaXMuX29ic2VydmFibGUkLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIXR8fGUubWVkaWFRdWVyeT09PXR9KSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyUXVlcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P1tdOiJzdHJpbmciPT10eXBlb2YgdD9bdF06KGU9e30sdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIWUuaGFzT3duUHJvcGVydHkodCkmJihlW3RdPSEwKX0pKTt2YXIgZX0odCk7bi5sZW5ndGg+MCYmKHRoaXMuX3ByZXBhcmVRdWVyeUNTUyhuLHRoaXMuX2RvY3VtZW50KSxuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5fcmVnaXN0cnkuZ2V0KHQpLHI9ZnVuY3Rpb24obil7ZS5fem9uZS5ydW4oZnVuY3Rpb24oKXt2YXIgcj1uZXcgRShuLm1hdGNoZXMsdCk7ZS5fc291cmNlLm5leHQocil9KX07bnx8KChuPWUuX2J1aWxkTVFMKHQpKS5hZGRMaXN0ZW5lcihyKSxlLl9yZWdpc3RyeS5zZXQodCxuKSksbi5tYXRjaGVzJiZyKG4pfSkpfSx0LnByb3RvdHlwZS5fYnVpbGRNUUw9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChpLnEpKHRoaXMuX3BsYXRmb3JtSWQpJiZ3aW5kb3cubWF0Y2hNZWRpYSgiYWxsIikuYWRkTGlzdGVuZXI/d2luZG93Lm1hdGNoTWVkaWEodCk6e21hdGNoZXM6ImFsbCI9PT10fHwiIj09PXQsbWVkaWE6dCxhZGRMaXN0ZW5lcjpmdW5jdGlvbigpe30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oKXt9fX0sdC5wcm90b3R5cGUuX3ByZXBhcmVRdWVyeUNTUz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFUW3RdfSk7aWYobi5sZW5ndGg+MCl7dmFyIHI9bi5qb2luKCIsICIpO3RyeXt2YXIgaT1lLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7aS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGkuc3R5bGVTaGVldHx8aS5hcHBlbmRDaGlsZChlLmNyZWF0ZVRleHROb2RlKCJcbi8qXG4gIEBhbmd1bGFyL2ZsZXgtbGF5b3V0IC0gd29ya2Fyb3VuZCBmb3IgcG9zc2libGUgYnJvd3NlciBxdWlyayB3aXRoIG1lZGlhUXVlcnkgbGlzdGVuZXJzXG4gIHNlZSBodHRwOi8vYml0Lmx5LzJzZDRITVBcbiovXG5AbWVkaWEgIityKyIgey5meC1xdWVyeS10ZXN0eyB9fVxuIikpLGUuaGVhZC5hcHBlbmRDaGlsZChpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFRbdF09aX0pfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IodCl9fX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuVikoci54KSxPYmplY3Qoci5WKShyLnopLE9iamVjdChyLlYpKGkuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxUPXt9O2Z1bmN0aW9uIEkodCxlKXtyZXR1cm4gYih0LGU/e21xQWxpYXM6ZS5hbGlhcyxzdWZmaXg6ZS5zdWZmaXh9Ont9KX12YXIgQT1mdW5jdGlvbigpe30saj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmJyZWFrcG9pbnRzPXQsdGhpcy5tZWRpYVdhdGNoZXI9ZSx0aGlzLmZpbHRlck92ZXJsYXBzPSEwLHRoaXMuX3JlZ2lzdGVyQnJlYWtQb2ludHMoKSx0aGlzLm9ic2VydmFibGUkPXRoaXMuX2J1aWxkT2JzZXJ2YWJsZSgpfXJldHVybiB0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90b01lZGlhUXVlcnkodCk7cmV0dXJuIHRoaXMubWVkaWFXYXRjaGVyLmlzQWN0aXZlKGUpfSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLm9ic2VydmFibGUkLnN1YnNjcmliZSh0LGUsbil9LHQucHJvdG90eXBlLmFzT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9ic2VydmFibGUkfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJCcmVha1BvaW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuYnJlYWtwb2ludHMuc29ydGVkSXRlbXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1lZGlhUXVlcnl9KTt0aGlzLm1lZGlhV2F0Y2hlci5yZWdpc3RlclF1ZXJ5KHQpfSx0LnByb3RvdHlwZS5fYnVpbGRPYnNlcnZhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXM7cmV0dXJuIHRoaXMubWVkaWFXYXRjaGVyLm9ic2VydmUoKS5waXBlKE9iamVjdChhLmEpKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dC5tYXRjaGVzfSksT2JqZWN0KGEuYSkoZnVuY3Rpb24obil7dmFyIHI9dC5icmVha3BvaW50cy5maW5kQnlRdWVyeShuLm1lZGlhUXVlcnkpO3JldHVybiFyfHwhKGUuZmlsdGVyT3ZlcmxhcHMmJnIub3ZlcmxhcHBpbmcpfSksT2JqZWN0KHMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIEkoZSx0Ll9maW5kQnlRdWVyeShlLm1lZGlhUXVlcnkpKX0pKX0sdC5wcm90b3R5cGUuX2ZpbmRCeUFsaWFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJyZWFrcG9pbnRzLmZpbmRCeUFsaWFzKHQpfSx0LnByb3RvdHlwZS5fZmluZEJ5UXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodCl9LHQucHJvdG90eXBlLl90b01lZGlhUXVlcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmluZEJ5QWxpYXModCl8fHRoaXMuX2ZpbmRCeVF1ZXJ5KHQpO3JldHVybiBlP2UubWVkaWFRdWVyeTp0fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShTKSxPYmplY3Qoci5WKShrKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLFA9ZnVuY3Rpb24oKXt9LE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5zdHlsZXNoZWV0PW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLmFkZFN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLnN0eWxlc2hlZXQuZ2V0KHQpO3I/ci5zZXQoZSxuKTp0aGlzLnN0eWxlc2hlZXQuc2V0KHQsbmV3IE1hcChbW2Usbl1dKSl9LHQucHJvdG90eXBlLmNsZWFyU3R5bGVzPWZ1bmN0aW9uKCl7dGhpcy5zdHlsZXNoZWV0LmNsZWFyKCl9LHQucHJvdG90eXBlLmdldFN0eWxlRm9yRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuc3R5bGVzaGVldC5nZXQodCkscj0iIjtpZihuKXt2YXIgaT1uLmdldChlKTsibnVtYmVyIiE9dHlwZW9mIGkmJiJzdHJpbmciIT10eXBlb2YgaXx8KHI9aSsiIil9cmV0dXJuIHJ9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxOPW5ldyByLm8oIkZsZXhMYXlvdXRTZXJ2ZXJMb2FkZWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSksUj1bInJvdyIsImNvbHVtbiIsInJvdy1yZXZlcnNlIiwiY29sdW1uLXJldmVyc2UiXSxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fb3B0aW9ucz10LHRoaXMuX21lZGlhTW9uaXRvcj1lLHRoaXMuX29uTWVkaWFDaGFuZ2VzPW4sdGhpcy5fc3Vic2NyaWJlcnM9W10sdGhpcy5fcmVnaXN0cnlNYXA9dGhpcy5fYnVpbGRSZWdpc3RyeU1hcCgpLHRoaXMuX3N1YnNjcmliZXJzPXRoaXMuX2NvbmZpZ3VyZUNoYW5nZU9ic2VydmVycygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlZ2lzdHJ5RnJvbUxhcmdlc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnlNYXAuc2xpY2UoKS5yZXZlcnNlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtZWRpYU1vbml0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWVkaWFNb25pdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkSW5wdXRLZXkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkSW5wdXRLZXl8fHRoaXMuX29wdGlvbnMuYmFzZUtleX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZElucHV0Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hY3RpdmF0ZWRJbnB1dEtleTtyZXR1cm4gdGhpcy5oYXNLZXlWYWx1ZSh0KT90aGlzLl9sb29rdXBLZXlWYWx1ZSh0KTp0aGlzLl9vcHRpb25zLmRlZmF1bHRWYWx1ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5oYXNLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fb3B0aW9ucy5pbnB1dEtleXNbdF19LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudW5zdWJzY3JpYmUoKX0pLHRoaXMuX3N1YnNjcmliZXJzPVtdfSx0LnByb3RvdHlwZS5fY29uZmlndXJlQ2hhbmdlT2JzZXJ2ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0aGlzLl9yZWdpc3RyeU1hcC5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuX2tleUluVXNlKG4ua2V5KSYmZS5wdXNoKHQubWVkaWFNb25pdG9yLm9ic2VydmUobi5hbGlhcykucGlwZShPYmplY3Qocy5hKShmdW5jdGlvbihlKXtyZXR1cm4oZT1lLmNsb25lKCkpLnByb3BlcnR5PXQuX29wdGlvbnMuYmFzZUtleSxlfSkpLnN1YnNjcmliZShmdW5jdGlvbihlKXt0Ll9vbk1vbml0b3JFdmVudHMoZSl9KSl9KSxlfSx0LnByb3RvdHlwZS5fYnVpbGRSZWdpc3RyeU1hcD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMubWVkaWFNb25pdG9yLmJyZWFrcG9pbnRzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYih7fSxlLHtiYXNlS2V5OnQuX29wdGlvbnMuYmFzZUtleSxrZXk6dC5fb3B0aW9ucy5iYXNlS2V5K2Uuc3VmZml4fSl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2tleUluVXNlKGUua2V5KX0pfSx0LnByb3RvdHlwZS5fb25Nb25pdG9yRXZlbnRzPWZ1bmN0aW9uKHQpe3QucHJvcGVydHk9PXRoaXMuX29wdGlvbnMuYmFzZUtleSYmKHQudmFsdWU9dGhpcy5fY2FsY3VsYXRlQWN0aXZhdGVkVmFsdWUodCksdGhpcy5fb25NZWRpYUNoYW5nZXModCkpfSx0LnByb3RvdHlwZS5fa2V5SW5Vc2U9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX2xvb2t1cEtleVZhbHVlKHQpfSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlQWN0aXZhdGVkVmFsdWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fb3B0aW9ucy5iYXNlS2V5K3Quc3VmZml4LG49dGhpcy5fYWN0aXZhdGVkSW5wdXRLZXk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZElucHV0S2V5PXRoaXMuX3ZhbGlkYXRlSW5wdXRLZXkobj10Lm1hdGNoZXM/ZTpuPT1lPyIiOm4pLHRoaXMuYWN0aXZhdGVkSW5wdXR9LHQucHJvdG90eXBlLl92YWxpZGF0ZUlucHV0S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1mdW5jdGlvbih0KXtyZXR1cm4hZS5fa2V5SW5Vc2UodCl9O3JldHVybiBuKHQpJiZ0aGlzLm1lZGlhTW9uaXRvci5hY3RpdmVPdmVybGFwcy5zb21lKGZ1bmN0aW9uKHIpe3ZhciBpPWUuX29wdGlvbnMuYmFzZUtleStyLnN1ZmZpeDtyZXR1cm4hbihpKSYmKHQ9aSwhMCl9KSx0fSx0LnByb3RvdHlwZS5fbG9va3VwS2V5VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29wdGlvbnMuaW5wdXRLZXlzW3RdfSx0fSgpLEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9tZWRpYU1vbml0b3I9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fc3R5bGVyPW4sdGhpcy5faW5wdXRNYXA9e30sdGhpcy5faGFzSW5pdGlhbGl6ZWQ9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzTWVkaWFRdWVyeUxpc3RlbmVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tcUFjdGl2YXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRWYWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tcUFjdGl2YXRpb24/dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0OnZvaWQgMH0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlLG49ImJhc2VLZXkiO3RoaXMuX21xQWN0aXZhdGlvbiYmKGU9dGhpcy5faW5wdXRNYXBbbj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXRLZXldLHRoaXMuX2lucHV0TWFwW25dPXQpO3ZhciBpLG89bmV3IHIuRyhlLHQsITEpO3RoaXMubmdPbkNoYW5nZXMoKChpPXt9KVtuXT1vLGkpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuYXRpdmVFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcXVlcnlJbnB1dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5wdXRNYXBbdF19LHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fZGlzcGxheT10aGlzLl9nZXREaXNwbGF5U3R5bGUoKSx0aGlzLl9oYXNJbml0aWFsaXplZD0hMH0sdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJCYXNlRGlyZWN0aXZlOjpuZ09uQ2hhbmdlcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzczogIit0KX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9tcUFjdGl2YXRpb24mJnRoaXMuX21xQWN0aXZhdGlvbi5kZXN0cm95KCksZGVsZXRlIHRoaXMuX21lZGlhTW9uaXRvcn0sdC5wcm90b3R5cGUuX2dldERlZmF1bHRWYWw9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9xdWVyeUlucHV0KHQpO3JldHVybiB2b2lkIDAhPT1uJiZudWxsIT09biYmIiIhPT1uP246ZX0sdC5wcm90b3R5cGUuX2dldERpc3BsYXlTdHlsZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIubG9va3VwU3R5bGUodCwiZGlzcGxheSIpfSx0LnByb3RvdHlwZS5fZ2V0QXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIubG9va3VwQXR0cmlidXRlVmFsdWUoZSx0KX0sdC5wcm90b3R5cGUuX2dldEZsZXhGbG93RGlyZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9ITEpO3ZhciBuLHI9InJvdyI7aWYodCYmKHI9KG49dGhpcy5fc3R5bGVyLmdldEZsb3dEaXJlY3Rpb24odCkpWzBdLCFuWzFdJiZlKSl7dmFyIGk9ZnVuY3Rpb24odCl7dmFyIGUsbixyPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXQ/dC50b0xvd2VyQ2FzZSgpOiIiKS5zcGxpdCgiICIpLG49ZVswXSxyPWVbMV0saT1lWzJdO3JldHVybiBSLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1ufSl8fChuPVJbMF0pLCJpbmxpbmUiPT09ciYmKHI9ImlubGluZSIhPT1pP2k6IiIsaT0iaW5saW5lIiksW24sZnVuY3Rpb24odCl7aWYodClzd2l0Y2godC50b0xvd2VyQ2FzZSgpKXtjYXNlInJldmVyc2UiOmNhc2Uid3JhcC1yZXZlcnNlIjpjYXNlInJldmVyc2Utd3JhcCI6dD0id3JhcC1yZXZlcnNlIjticmVhaztjYXNlIm5vIjpjYXNlIm5vbmUiOmNhc2Uibm93cmFwIjp0PSJub3dyYXAiO2JyZWFrO2RlZmF1bHQ6dD0id3JhcCJ9cmV0dXJuIHR9KHIpLCEhaV19KHQpO3JldHVybiBuPXJbMl0sdm9pZCAwPT09KGU9clsxXSkmJihlPW51bGwpLHZvaWQgMD09PW4mJihuPSExKSx7ZGlzcGxheTpuPyJpbmxpbmUtZmxleCI6ImZsZXgiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIsImZsZXgtZGlyZWN0aW9uIjpyWzBdLCJmbGV4LXdyYXAiOmV8fG51bGx9fShyKTt0aGlzLl9zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudHMoaSxbdF0pfXJldHVybiByLnRyaW0oKXx8InJvdyJ9LHQucHJvdG90eXBlLl9hcHBseVN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj10aGlzLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3N0eWxlci5hcHBseVN0eWxlVG9FbGVtZW50KG4sdCxlKX0sdC5wcm90b3R5cGUuX2FwcGx5U3R5bGVUb0VsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fc3R5bGVyLmFwcGx5U3R5bGVUb0VsZW1lbnRzKHQsZSl9LHQucHJvdG90eXBlLl9jYWNoZUlucHV0PWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKWZvcih2YXIgbiBpbiBlKXRoaXMuX2lucHV0TWFwW25dPWVbbl07ZWxzZSB0JiYodGhpcy5faW5wdXRNYXBbdF09ZSl9LHQucHJvdG90eXBlLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcz1mdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuX21xQWN0aXZhdGlvbil7dmFyIHI9bmV3IGZ1bmN0aW9uKHQsZSxuKXt0aGlzLmJhc2VLZXk9dCx0aGlzLmRlZmF1bHRWYWx1ZT1lLHRoaXMuaW5wdXRLZXlzPW59KHQsZSx0aGlzLl9pbnB1dE1hcCk7dGhpcy5fbXFBY3RpdmF0aW9uPW5ldyBEKHIsdGhpcy5fbWVkaWFNb25pdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSl9cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbk5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbixlPVtdLG49dC5sZW5ndGg7bi0tOyllW25dPXRbbl07cmV0dXJuIGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaGFzUmVzcG9uc2l2ZUFQST1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5faW5wdXRNYXApLmxlbmd0aC0odGhpcy5faW5wdXRNYXBbdF0/MTowKT4wfSx0LnByb3RvdHlwZS5oYXNLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9uLmhhc0tleVZhbHVlKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhhc0luaXRpYWxpemVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0luaXRpYWxpemVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksRj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLG4scixpKXx8dGhpcztyZXR1cm4gby5fYmFzZUtleT1lLG8uX21lZGlhTW9uaXRvcj1uLG8uX2VsZW1lbnRSZWY9cixvLl9zdHlsZXI9aSxvfXJldHVybiBPYmplY3QodS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWN0aXZlS2V5Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbXFBY3RpdmF0aW9uLGU9dD90LmFjdGl2YXRlZElucHV0S2V5OnRoaXMuX2Jhc2VLZXk7cmV0dXJuImNsYXNzIj09PWU/ImtsYXp6IjplfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5wdXRNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5wdXRNYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJtcUFjdGl2YXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmhhc1Jlc3BvbnNpdmVBUEk9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUuaGFzUmVzcG9uc2l2ZUFQSS5jYWxsKHRoaXMsdGhpcy5fYmFzZUtleSl9LGUucHJvdG90eXBlLnF1ZXJ5SW5wdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dGhpcy5fcXVlcnlJbnB1dCh0KTp2b2lkIDB9LGUucHJvdG90eXBlLmNhY2hlSW5wdXQ9ZnVuY3Rpb24odCxlLG4pe2lmKHZvaWQgMD09PW4mJihuPSExKSxuKXRoaXMuX2NhY2hlSW5wdXRSYXcodCxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpdGhpcy5fY2FjaGVJbnB1dEFycmF5KHQsZSk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGUpdGhpcy5fY2FjaGVJbnB1dE9iamVjdCh0LGUpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjbGFzcyB2YWx1ZSAnIit0KyInIHByb3ZpZGVkLiBEaWQgeW91IHdhbnQgdG8gY2FjaGUgdGhlIHJhdyB2YWx1ZT8iKTt0aGlzLl9jYWNoZUlucHV0U3RyaW5nKHQsZSl9fSxlLnByb3RvdHlwZS5saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKHQsZSxuKX0sZS5wcm90b3R5cGUuX2NhY2hlSW5wdXRSYXc9ZnVuY3Rpb24odCxlKXt0JiYodGhpcy5faW5wdXRNYXBbdF09ZSl9LGUucHJvdG90eXBlLl9jYWNoZUlucHV0QXJyYXk9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD0iIiksdGhpcy5faW5wdXRNYXBbdF09ZT9lLmpvaW4oIiAiKToiIn0sZS5wcm90b3R5cGUuX2NhY2hlSW5wdXRPYmplY3Q9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD0iIik7dmFyIG49W107aWYoZSlmb3IodmFyIHIgaW4gZSllW3JdJiZuLnB1c2gocik7dGhpcy5faW5wdXRNYXBbdF09bi5qb2luKCIgIil9LGUucHJvdG90eXBlLl9jYWNoZUlucHV0U3RyaW5nPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX2lucHV0TWFwW3RdPWV9LGV9KEwpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fYnJlYWtwb2ludHM9dCx0aGlzLl9tYXRjaE1lZGlhPWUsdGhpcy5fcmVnaXN0ZXJCcmVha3BvaW50cygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImJyZWFrcG9pbnRzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzLml0ZW1zLnNsaWNlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmVPdmVybGFwcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzLm92ZXJsYXBwaW5ncy5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9tYXRjaE1lZGlhLmlzQWN0aXZlKGUubWVkaWFRdWVyeSl9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2ZSIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1udWxsO3RoaXMuYnJlYWtwb2ludHMucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24obil7IiIhPT1uLmFsaWFzJiYhZSYmdC5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShuLm1lZGlhUXVlcnkpJiYoZT1uKX0pO3ZhciBuPXRoaXMuYnJlYWtwb2ludHNbMF07cmV0dXJuIGV8fCh0aGlzLl9tYXRjaE1lZGlhLmlzQWN0aXZlKG4ubWVkaWFRdWVyeSk/bjpudWxsKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9icmVha3BvaW50cy5maW5kQnlBbGlhcyh0KXx8dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodCk7cmV0dXJuIHRoaXMuX21hdGNoTWVkaWEuaXNBY3RpdmUoZT9lLm1lZGlhUXVlcnk6dCl9LHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5QWxpYXModHx8IiIpfHx0aGlzLl9icmVha3BvaW50cy5maW5kQnlRdWVyeSh0fHwiIik7cmV0dXJuIHRoaXMuX21hdGNoTWVkaWEub2JzZXJ2ZShlP2UubWVkaWFRdWVyeTp0KS5waXBlKE9iamVjdChzLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBJKHQsZSl9KSxPYmplY3QoYS5hKShmdW5jdGlvbih0KXtyZXR1cm4hZXx8IiIhPT10Lm1xQWxpYXN9KSl9LHQucHJvdG90eXBlLl9yZWdpc3RlckJyZWFrcG9pbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYnJlYWtwb2ludHMuc29ydGVkSXRlbXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1lZGlhUXVlcnl9KTt0aGlzLl9tYXRjaE1lZGlhLnJlZ2lzdGVyUXVlcnkodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKFMpLE9iamVjdChyLlYpKGspKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gVSh0KXtmb3IodmFyIGUgaW4gdCl7dmFyIG49dFtlXXx8IiI7c3dpdGNoKGUpe2Nhc2UiZGlzcGxheSI6dC5kaXNwbGF5PSJmbGV4Ij09PW4/WyItd2Via2l0LWZsZXgiLCJmbGV4Il06ImlubGluZS1mbGV4Ij09PW4/WyItd2Via2l0LWlubGluZS1mbGV4IiwiaW5saW5lLWZsZXgiXTpuO2JyZWFrO2Nhc2UiYWxpZ24taXRlbXMiOmNhc2UiYWxpZ24tc2VsZiI6Y2FzZSJhbGlnbi1jb250ZW50IjpjYXNlImZsZXgiOmNhc2UiZmxleC1iYXNpcyI6Y2FzZSJmbGV4LWZsb3ciOmNhc2UiZmxleC1ncm93IjpjYXNlImZsZXgtc2hyaW5rIjpjYXNlImZsZXgtd3JhcCI6Y2FzZSJqdXN0aWZ5LWNvbnRlbnQiOnRbIi13ZWJraXQtIitlXT1uO2JyZWFrO2Nhc2UiZmxleC1kaXJlY3Rpb24iOnRbIi13ZWJraXQtZmxleC1kaXJlY3Rpb24iXT1uPW58fCJyb3ciLHRbImZsZXgtZGlyZWN0aW9uIl09bjticmVhaztjYXNlIm9yZGVyIjp0Lm9yZGVyPXRbIi13ZWJraXQtIitlXT1pc05hTihuKT8iMCI6bn19cmV0dXJuIHR9dmFyIHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX3NlcnZlclN0eWxlc2hlZXQ9dCx0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQ9ZSx0aGlzLl9wbGF0Zm9ybUlkPW4sdGhpcy5sYXlvdXRDb25maWc9cn1yZXR1cm4gdC5wcm90b3R5cGUuYXBwbHlTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dmFyIHI9e307InN0cmluZyI9PXR5cGVvZiBlJiYocltlXT1uLGU9cikscj10aGlzLmxheW91dENvbmZpZy5kaXNhYmxlVmVuZG9yUHJlZml4ZXM/ZTpVKGUpLHRoaXMuX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50KHIsdCl9LHQucHJvdG90eXBlLmFwcGx5U3R5bGVUb0VsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIHI9dGhpcy5sYXlvdXRDb25maWcuZGlzYWJsZVZlbmRvclByZWZpeGVzP3Q6VSh0KTtlLmZvckVhY2goZnVuY3Rpb24odCl7bi5fYXBwbHlNdWx0aVZhbHVlU3R5bGVUb0VsZW1lbnQocix0KX0pfSx0LnByb3RvdHlwZS5nZXRGbG93RGlyZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubG9va3VwU3R5bGUodCwiZmxleC1kaXJlY3Rpb24iKTtlPT09QiYmKGU9IiIpO3ZhciBuPXRoaXMubG9va3VwSW5saW5lU3R5bGUodCwiZmxleC1kaXJlY3Rpb24iKXx8T2JqZWN0KGkucikodGhpcy5fcGxhdGZvcm1JZCkmJnRoaXMuX3NlcnZlck1vZHVsZUxvYWRlZD9lOiIiO3JldHVybltlfHwicm93IixuXX0sdC5wcm90b3R5cGUubG9va3VwQXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl8fCIifSx0LnByb3RvdHlwZS5sb29rdXBJbmxpbmVTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QoaS5xKSh0aGlzLl9wbGF0Zm9ybUlkKT90LnN0eWxlW2VdOnRoaXMuX2dldFNlcnZlclN0eWxlKHQsZSl9LHQucHJvdG90eXBlLmxvb2t1cFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIHI9IiI7cmV0dXJuIHQmJigocj10aGlzLmxvb2t1cElubGluZVN0eWxlKHQsZSkpfHwoT2JqZWN0KGkucSkodGhpcy5fcGxhdGZvcm1JZCk/bnx8KHI9Z2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTp0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQmJihyPXRoaXMuX3NlcnZlclN0eWxlc2hlZXQuZ2V0U3R5bGVGb3JFbGVtZW50KHQsZSkpKSkscj9yLnRyaW0oKTpCfSx0LnByb3RvdHlwZS5fYXBwbHlNdWx0aVZhbHVlU3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO09iamVjdC5rZXlzKHQpLnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBvPUFycmF5LmlzQXJyYXkodFtyXSk/dFtyXTpbdFtyXV07by5zb3J0KCk7Zm9yKHZhciBhPTAscz1vO2E8cy5sZW5ndGg7YSsrKXt2YXIgdT1zW2FdO09iamVjdChpLnEpKG4uX3BsYXRmb3JtSWQpfHwhbi5fc2VydmVyTW9kdWxlTG9hZGVkP09iamVjdChpLnEpKG4uX3BsYXRmb3JtSWQpP2Uuc3R5bGUuc2V0UHJvcGVydHkocix1KTpuLl9zZXRTZXJ2ZXJTdHlsZShlLHIsdSk6bi5fc2VydmVyU3R5bGVzaGVldC5hZGRTdHlsZVRvRWxlbWVudChlLHIsdSl9fSl9LHQucHJvdG90eXBlLl9zZXRTZXJ2ZXJTdHlsZT1mdW5jdGlvbih0LGUsbil7ZT1lLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKTt2YXIgcj10aGlzLl9yZWFkU3R5bGVBdHRyaWJ1dGUodCk7cltlXT1ufHwiIix0aGlzLl93cml0ZVN0eWxlQXR0cmlidXRlKHQscil9LHQucHJvdG90eXBlLl9nZXRTZXJ2ZXJTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZWFkU3R5bGVBdHRyaWJ1dGUodClbZV18fCIifSx0LnByb3RvdHlwZS5fcmVhZFN0eWxlQXR0cmlidXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LG49dC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7aWYobilmb3IodmFyIHI9bi5zcGxpdCgvOysvZyksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldLnRyaW0oKTtpZihvLmxlbmd0aD4wKXt2YXIgYT1vLmluZGV4T2YoIjoiKTtpZigtMT09PWEpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIENTUyBzdHlsZTogIitvKTtlW28uc3Vic3RyKDAsYSkudHJpbSgpXT1vLnN1YnN0cihhKzEpLnRyaW0oKX19cmV0dXJuIGV9LHQucHJvdG90eXBlLl93cml0ZVN0eWxlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49IiI7Zm9yKHZhciByIGluIGUpZVtyXSYmKG4rPXIrIjoiK2Vbcl0rIjsiKTt0LnNldEF0dHJpYnV0ZSgic3R5bGUiLG4pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShNLDgpLE9iamVjdChyLlYpKE4sOCksT2JqZWN0KHIuVikoci56KSxPYmplY3Qoci5WKShPKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEI9ImJsb2NrIjtmdW5jdGlvbiBIKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0iMSIpLHZvaWQgMD09PW4mJihuPSIxIik7dmFyIHI9W2Usbix0XSxpPXQuaW5kZXhPZigiY2FsYyIpO2lmKGk+MClyWzJdPVcodC5zdWJzdHJpbmcoaSkudHJpbSgpKSwyPT0obz10LnN1YnN0cigwLGkpLnRyaW0oKS5zcGxpdCgiICIpKS5sZW5ndGgmJihyWzBdPW9bMF0sclsxXT1vWzFdKTtlbHNlIGlmKDA9PWkpclsyXT1XKHQudHJpbSgpKTtlbHNle3ZhciBvO3I9Mz09PShvPXQuc3BsaXQoIiAiKSkubGVuZ3RoP286W2Usbix0XX1yZXR1cm4gcn1mdW5jdGlvbiBXKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcc10vZywiIikucmVwbGFjZSgvW1wvXCpcK1wtXS9nLCIgJCYgIil9fSxQVThMOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCI2YmxGIik7ZnVuY3Rpb24gaSh0KXt2YXIgZT1uZXcgci5hKGZ1bmN0aW9uKGUpe2UubmV4dCh0KSxlLmNvbXBsZXRlKCl9KTtyZXR1cm4gZS5faXNTY2FsYXI9ITAsZS52YWx1ZT10LGV9fSxQaGpuOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJwc1cwIik7ZnVuY3Rpb24gaSh0LGUpe3JldHVybiBPYmplY3Qoci5hKSh0LGUsMSl9fSxTMW5YOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigibXJTRyIpLGk9bigiSzlJYSIpLG89bigiNmJsRiIpLGE9bigiRkZPbyIpLHM9bigicHVnVCIpO2Z1bmN0aW9uIHUoKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQubGlmdChuZXcgbCh0KSl9fXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNvbm5lY3RhYmxlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmNvbm5lY3RhYmxlO24uX3JlZkNvdW50Kys7dmFyIHI9bmV3IGModCxuKSxpPWUuc3Vic2NyaWJlKHIpO3JldHVybiByLmNsb3NlZHx8KHIuY29ubmVjdGlvbj1uLmNvbm5lY3QoKSksaX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5jb25uZWN0YWJsZT1uLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29ubmVjdGFibGU7aWYodCl7dGhpcy5jb25uZWN0YWJsZT1udWxsO3ZhciBlPXQuX3JlZkNvdW50O2lmKGU8PTApdGhpcy5jb25uZWN0aW9uPW51bGw7ZWxzZSBpZih0Ll9yZWZDb3VudD1lLTEsZT4xKXRoaXMuY29ubmVjdGlvbj1udWxsO2Vsc2V7dmFyIG49dGhpcy5jb25uZWN0aW9uLHI9dC5fY29ubmVjdGlvbjt0aGlzLmNvbm5lY3Rpb249bnVsbCwhcnx8biYmciE9PW58fHIudW5zdWJzY3JpYmUoKX19ZWxzZSB0aGlzLmNvbm5lY3Rpb249bnVsbH0sZX0oYS5hKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuc291cmNlPWUsci5zdWJqZWN0RmFjdG9yeT1uLHIuX3JlZkNvdW50PTAsci5faXNDb21wbGV0ZT0hMSxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUodCl9LGUucHJvdG90eXBlLmdldFN1YmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdWJqZWN0O3JldHVybiB0JiYhdC5pc1N0b3BwZWR8fCh0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH0sZS5wcm90b3R5cGUuY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Nvbm5lY3Rpb247cmV0dXJuIHR8fCh0aGlzLl9pc0NvbXBsZXRlPSExLCh0PXRoaXMuX2Nvbm5lY3Rpb249bmV3IHMuYSkuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShuZXcgZCh0aGlzLmdldFN1YmplY3QoKSx0aGlzKSkpLHQuY2xvc2VkPyh0aGlzLl9jb25uZWN0aW9uPW51bGwsdD1zLmEuRU1QVFkpOnRoaXMuX2Nvbm5lY3Rpb249dCksdH0sZS5wcm90b3R5cGUucmVmQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdSgpKHRoaXMpfSxlfShvLmEpLnByb3RvdHlwZSxoPXtvcGVyYXRvcjp7dmFsdWU6bnVsbH0sX3JlZkNvdW50Ont2YWx1ZTowLHdyaXRhYmxlOiEwfSxfc3ViamVjdDp7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0sX2Nvbm5lY3Rpb246e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9LF9zdWJzY3JpYmU6e3ZhbHVlOmYuX3N1YnNjcmliZX0sX2lzQ29tcGxldGU6e3ZhbHVlOmYuX2lzQ29tcGxldGUsd3JpdGFibGU6ITB9LGdldFN1YmplY3Q6e3ZhbHVlOmYuZ2V0U3ViamVjdH0sY29ubmVjdDp7dmFsdWU6Zi5jb25uZWN0fSxyZWZDb3VudDp7dmFsdWU6Zi5yZWZDb3VudH19LGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmNvbm5lY3RhYmxlPW4scn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKGUpe3RoaXMuX3Vuc3Vic2NyaWJlKCksdC5wcm90b3R5cGUuX2Vycm9yLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5jb25uZWN0YWJsZS5faXNDb21wbGV0ZT0hMCx0aGlzLl91bnN1YnNjcmliZSgpLHQucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbm5lY3RhYmxlO2lmKHQpe3RoaXMuY29ubmVjdGFibGU9bnVsbDt2YXIgZT10Ll9jb25uZWN0aW9uO3QuX3JlZkNvdW50PTAsdC5fc3ViamVjdD1udWxsLHQuX2Nvbm5lY3Rpb249bnVsbCxlJiZlLnVuc3Vic2NyaWJlKCl9fSxlfShpLmIpO2Z1bmN0aW9uIHAoKXtyZXR1cm4gbmV3IGkuYX1mdW5jdGlvbiBtKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB1KCkoKGU9cCxmdW5jdGlvbih0KXt2YXIgbjtuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIHI9T2JqZWN0LmNyZWF0ZSh0LGgpO3JldHVybiByLnNvdXJjZT10LHIuc3ViamVjdEZhY3Rvcnk9bixyfSkodCkpO3ZhciBlfX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pfSxTNVhROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJES1RiIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQudGhlbihmdW5jdGlvbih0KXtlLmNsb3NlZHx8KGUubmV4dCh0KSxlLmNvbXBsZXRlKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gZS5lcnJvcih0KX0pLnRoZW4obnVsbCxyLmEpLGV9fX0sU01zbTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIklwMFIiKSxpPW4oInQvTmEiKSxvPW4oIkNjbkciKSxhPW4oIlpZanQiKSxzPW4oIkYvWEwiKSx1PW4oIlZOcjQiKSxsPW4oIlhsUHciKSxjPW4oInhNeUUiKSxmPW4oIjY3WS8iKSxoPW4oIm1yU0ciKSxkPW4oIkZGT28iKSxwPW4oInB1Z1QiKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNhbGxiYWNrPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHkodCx0aGlzLmNhbGxiYWNrKSl9LHR9KCkseT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuYWRkKG5ldyBwLmEobikpLHJ9cmV0dXJuIGguYihlLHQpLGV9KGQuYSksZz1uKCJTMW5YIiksdj1uKCI5WjFGIiksYj1uKCJ0OWZaIiksXz1uKCJXZjRwIiksdz1uKCJuNmdHIik7ZnVuY3Rpb24geCh0KXtyZXR1cm4gRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGljb24gd2l0aCB0aGUgbmFtZSAiJyt0KyciJyl9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gRXJyb3IoIlRoZSBVUkwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBhIHJlc291cmNlIFVSTCB2aWEgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIFVSTCB3YXMgXCIiK3QrJyIuJyl9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gRXJyb3IoIlRoZSBsaXRlcmFsIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgc2FmZSBIVE1MIGJ5IEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBsaXRlcmFsIHdhcyBcIiIrdCsnIi4nKX1uLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KTt2YXIgUz1mdW5jdGlvbih0KXt0Lm5vZGVOYW1lP3RoaXMuc3ZnRWxlbWVudD10OnRoaXMudXJsPXR9LEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9odHRwQ2xpZW50PXQsdGhpcy5fc2FuaXRpemVyPWUsdGhpcy5fc3ZnSWNvbkNvbmZpZ3M9bmV3IE1hcCx0aGlzLl9pY29uU2V0Q29uZmlncz1uZXcgTWFwLHRoaXMuX2NhY2hlZEljb25zQnlVcmw9bmV3IE1hcCx0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcz1uZXcgTWFwLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcz1uZXcgTWFwLHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9Im1hdGVyaWFsLWljb25zIix0aGlzLl9kb2N1bWVudD1ufXJldHVybiB0LnByb3RvdHlwZS5hZGRTdmdJY29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkluTmFtZXNwYWNlKCIiLHQsZSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25MaXRlcmFsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZSgiIix0LGUpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKHQsZSxuZXcgUyhuKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShvLkYuSFRNTCxuKTtpZighcil0aHJvdyBDKG4pO3ZhciBpPXRoaXMuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uKHIpO3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKHQsZSxuZXcgUyhpKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0TGl0ZXJhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyh0LG5ldyBTKGUpKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShvLkYuSFRNTCxlKTtpZighbil0aHJvdyBDKGUpO3ZhciByPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKG4pO3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKHQsbmV3IFMocikpfSx0LnByb3RvdHlwZS5yZWdpc3RlckZvbnRDbGFzc0FsaWFzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXQpLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5zZXQodCxlKSx0aGlzfSx0LnByb3RvdHlwZS5jbGFzc05hbWVGb3JGb250QWxpYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQodCl8fHR9LHQucHJvdG90eXBlLnNldERlZmF1bHRGb250U2V0Q2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9dCx0aGlzfSx0LnByb3RvdHlwZS5nZXREZWZhdWx0Rm9udFNldENsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3N9LHQucHJvdG90eXBlLmdldFN2Z0ljb25Gcm9tVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5GLlJFU09VUkNFX1VSTCx0KTtpZighbil0aHJvdyBPKHQpO3ZhciByPXRoaXMuX2NhY2hlZEljb25zQnlVcmwuZ2V0KG4pO3JldHVybiByP09iamVjdChzLmEpKGsocikpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyhuZXcgUyh0KSkucGlwZShPYmplY3QoYy5hKShmdW5jdGlvbih0KXtyZXR1cm4gZS5fY2FjaGVkSWNvbnNCeVVybC5zZXQobix0KX0pLE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBrKHQpfSkpfSx0LnByb3RvdHlwZS5nZXROYW1lZFN2Z0ljb249ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0iIik7dmFyIG49VChlLHQpLHI9dGhpcy5fc3ZnSWNvbkNvbmZpZ3MuZ2V0KG4pO2lmKHIpcmV0dXJuIHRoaXMuX2dldFN2Z0Zyb21Db25maWcocik7dmFyIGk9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGUpO3JldHVybiBpP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyh0LGkpOk9iamVjdChsLmEpKHgobikpfSx0LnByb3RvdHlwZS5fZ2V0U3ZnRnJvbUNvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdFbGVtZW50P09iamVjdChzLmEpKGsodC5zdmdFbGVtZW50KSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKHQpLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc3ZnRWxlbWVudD1lfSksT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGsodCl9KSl9LHQucHJvdG90eXBlLl9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQodCxlKTtpZihyKXJldHVybiBPYmplY3Qocy5hKShyKTt2YXIgaT1lLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5zdmdFbGVtZW50fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWcodCkucGlwZShPYmplY3Qodi5hKShmdW5jdGlvbihlKXt2YXIgcj1uLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5GLlJFU09VUkNFX1VSTCx0LnVybCk7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxvYWRpbmcgaWNvbiBzZXQgVVJMOiAiK3IrIiBmYWlsZWQ6ICIrZS5tZXNzYWdlKSxPYmplY3Qocy5hKShudWxsKX0pKX0pO3JldHVybiBPYmplY3QodS5hKShpKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKCl7dmFyIHI9bi5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQodCxlKTtpZighcil0aHJvdyB4KHQpO3JldHVybiByfSkpfSx0LnByb3RvdHlwZS5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZVtuXTtpZihyLnN2Z0VsZW1lbnQpe3ZhciBpPXRoaXMuX2V4dHJhY3RTdmdJY29uRnJvbVNldChyLnN2Z0VsZW1lbnQsdCk7aWYoaSlyZXR1cm4gaX19cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9sb2FkU3ZnSWNvbkZyb21Db25maWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fZmV0Y2hVcmwodC51cmwpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uKHQpfSkpfSx0LnByb3RvdHlwZS5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQuc3ZnRWxlbWVudD9PYmplY3Qocy5hKSh0LnN2Z0VsZW1lbnQpOnRoaXMuX2ZldGNoVXJsKHQudXJsKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKG4pe3JldHVybiB0LnN2Z0VsZW1lbnR8fCh0LnN2Z0VsZW1lbnQ9ZS5fc3ZnRWxlbWVudEZyb21TdHJpbmcobikpLHQuc3ZnRWxlbWVudH0pKX0sdC5wcm90b3R5cGUuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKHQpO3JldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGUpLGV9LHQucHJvdG90eXBlLl9leHRyYWN0U3ZnSWNvbkZyb21TZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LnF1ZXJ5U2VsZWN0b3IoIiMiK2UpO2lmKCFuKXJldHVybiBudWxsO3ZhciByPW4uY2xvbmVOb2RlKCEwKTtpZihyLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSwic3ZnIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhyKTtpZigic3ltYm9sIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyh0aGlzLl90b1N2Z0VsZW1lbnQocikpO3ZhciBpPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKCI8c3ZnPjwvc3ZnPiIpO3JldHVybiBpLmFwcGVuZENoaWxkKHIpLHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSl9LHQucHJvdG90eXBlLl9zdmdFbGVtZW50RnJvbVN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtlLmlubmVySFRNTD10O3ZhciBuPWUucXVlcnlTZWxlY3Rvcigic3ZnIik7aWYoIW4pdGhyb3cgRXJyb3IoIjxzdmc+IHRhZyBub3QgZm91bmQiKTtyZXR1cm4gbn0sdC5wcm90b3R5cGUuX3RvU3ZnRWxlbWVudD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoIjxzdmc+PC9zdmc+Iiksbj0wO248dC5jaGlsZE5vZGVzLmxlbmd0aDtuKyspdC5jaGlsZE5vZGVzW25dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFJiZlLmFwcGVuZENoaWxkKHQuY2hpbGROb2Rlc1tuXS5jbG9uZU5vZGUoITApKTtyZXR1cm4gZX0sdC5wcm90b3R5cGUuX3NldFN2Z0F0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJmaXQiLCIiKSx0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMTAwJSIpLHQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjEwMCUiKSx0LnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSx0LnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSx0fSx0LnByb3RvdHlwZS5fZmV0Y2hVcmw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5faHR0cENsaWVudCl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSHR0cENsaWVudCBwcm92aWRlciBmb3IgdXNlIHdpdGggQW5ndWxhciBNYXRlcmlhbCBpY29ucy4gUGxlYXNlIGluY2x1ZGUgdGhlIEh0dHBDbGllbnRNb2R1bGUgZnJvbSBAYW5ndWxhci9jb21tb24vaHR0cCBpbiB5b3VyIGFwcCBpbXBvcnRzLiIpO2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoJ0Nhbm5vdCBmZXRjaCBpY29uIGZyb20gVVJMICInK3QrJyIuJyk7dmFyIG49dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG8uRi5SRVNPVVJDRV9VUkwsdCk7aWYoIW4pdGhyb3cgTyh0KTt2YXIgcj10aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5nZXQobik7aWYocilyZXR1cm4gcjt2YXIgaSxhPXRoaXMuX2h0dHBDbGllbnQuZ2V0KG4se3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5waXBlKChpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmRlbGV0ZShuKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQubGlmdChuZXcgbShpKSl9KSxPYmplY3QoZy5hKSgpKTtyZXR1cm4gdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuc2V0KG4sYSksYX0sdC5wcm90b3R5cGUuX2FkZFN2Z0ljb25Db25maWc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQoVCh0LGUpLG4pLHRoaXN9LHQucHJvdG90eXBlLl9hZGRTdmdJY29uU2V0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KHQpO3JldHVybiBuP24ucHVzaChlKTp0aGlzLl9pY29uU2V0Q29uZmlncy5zZXQodCxbZV0pLHRoaXN9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlYpKGkuYyw4KSxPYmplY3Qoby5WKShhLmMpLE9iamVjdChvLlYpKHIuZCw4KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIGsodCl7cmV0dXJuIHQuY2xvbmVOb2RlKCEwKX1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuIHQrIjoiK2V9dmFyIEk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuX2ljb25SZWdpc3RyeT1uLGkuX2lubGluZT0hMSxyfHxlLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxpfXJldHVybiBPYmplY3QoaC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5saW5lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lubGluZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2lubGluZT1PYmplY3Qody5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvbnRTZXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9udFNldH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvbnRTZXQ9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvbnRJY29uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9udEljb249dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fc3BsaXRJY29uTmFtZT1mdW5jdGlvbih0KXtpZighdClyZXR1cm5bIiIsIiJdO3ZhciBlPXQuc3BsaXQoIjoiKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bIiIsZVswXV07Y2FzZSAyOnJldHVybiBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IoJ0ludmFsaWQgaWNvbiBuYW1lOiAiJyt0KyciJyl9fSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQuc3ZnSWNvbilpZih0aGlzLnN2Z0ljb24pe3ZhciBuPXRoaXMuX3NwbGl0SWNvbk5hbWUodGhpcy5zdmdJY29uKTt0aGlzLl9pY29uUmVnaXN0cnkuZ2V0TmFtZWRTdmdJY29uKG5bMV0sblswXSkucGlwZShPYmplY3QoYi5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdmdFbGVtZW50KHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS5sb2coIkVycm9yIHJldHJpZXZpbmcgaWNvbjogIit0Lm1lc3NhZ2UpfSl9ZWxzZSB0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKTt0aGlzLl91c2luZ0ZvbnRJY29uKCkmJnRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX3VzaW5nRm9udEljb24oKSYmdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCl9LGUucHJvdG90eXBlLl91c2luZ0ZvbnRJY29uPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc3ZnSWNvbn0sZS5wcm90b3R5cGUuX3NldFN2Z0VsZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5fY2xlYXJTdmdFbGVtZW50KCksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHQpfSxlLnByb3RvdHlwZS5fY2xlYXJTdmdFbGVtZW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlPXQuY2hpbGROb2Rlcy5sZW5ndGgsbj0wO248ZTtuKyspdC5yZW1vdmVDaGlsZCh0LmNoaWxkTm9kZXNbbl0pfSxlLnByb3RvdHlwZS5fdXBkYXRlRm9udEljb25DbGFzc2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5fdXNpbmdGb250SWNvbigpKXt2YXIgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10aGlzLmZvbnRTZXQ/dGhpcy5faWNvblJlZ2lzdHJ5LmNsYXNzTmFtZUZvckZvbnRBbGlhcyh0aGlzLmZvbnRTZXQpOnRoaXMuX2ljb25SZWdpc3RyeS5nZXREZWZhdWx0Rm9udFNldENsYXNzKCk7ZSE9dGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MmJih0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyYmdC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzKSxlJiZ0LmNsYXNzTGlzdC5hZGQoZSksdGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3M9ZSksdGhpcy5mb250SWNvbiE9dGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiYodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiZ0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzKSx0aGlzLmZvbnRJY29uJiZ0LmNsYXNzTGlzdC5hZGQodGhpcy5mb250SWNvbiksdGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzPXRoaXMuZm9udEljb24pfX0sZS5wcm90b3R5cGUuX2NsZWFudXBGb250VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QudHJpbSgpLnNwbGl0KCIgIilbMF06dH0sZX0oT2JqZWN0KF8udSkoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpLEE9ZnVuY3Rpb24oKXt9fSxUMURNOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJoOURxIiksaT1uZXcobigiQ1M5USIpLmEpKHIuYSl9LFR4amc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIlpuOEQiKTtmdW5jdGlvbiBpKCl7cmV0dXJuIE9iamVjdChyLmEpKDEpfX0sVW9kSDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIldmNHAiKSxvPSJhY2NlbnQiLGE9InByaW1hcnkiLHM9WyJtYXQtYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwibWF0LXJhaXNlZC1idXR0b24iLCJtYXQtc3Ryb2tlZC1idXR0b24iLCJtYXQtbWluaS1mYWIiLCJtYXQtZmFiIl0sdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciB1PXQuY2FsbCh0aGlzLGUpfHx0aGlzO3UuX3BsYXRmb3JtPW4sdS5fZm9jdXNNb25pdG9yPXIsdS5fYW5pbWF0aW9uTW9kZT1pLHUuaXNSb3VuZEJ1dHRvbj11Ll9oYXNIb3N0QXR0cmlidXRlcygibWF0LWZhYiIsIm1hdC1taW5pLWZhYiIpLHUuaXNJY29uQnV0dG9uPXUuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtaWNvbi1idXR0b24iKTtmb3IodmFyIGw9MCxjPXM7bDxjLmxlbmd0aDtsKyspe3ZhciBmPWNbbF07dS5faGFzSG9zdEF0dHJpYnV0ZXMoZikmJmUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGYpfXJldHVybiB1Ll9mb2N1c01vbml0b3IubW9uaXRvcih1Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsITApLHUuaXNSb3VuZEJ1dHRvbj91LmNvbG9yPW86dS5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1mbGF0LWJ1dHRvbiIpJiYodS5jb2xvcj1hKSx1fXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCl9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5mb2N1cygpfSxlLnByb3RvdHlwZS5fZ2V0SG9zdEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fSxlLnByb3RvdHlwZS5faXNSaXBwbGVEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9LGUucHJvdG90eXBlLl9oYXNIb3N0QXR0cmlidXRlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdC5fZ2V0SG9zdEVsZW1lbnQoKS5oYXNBdHRyaWJ1dGUoZSl9KX0sZX0oT2JqZWN0KGkudSkoT2JqZWN0KGkudykoT2JqZWN0KGkudikoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpKSksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3JldHVybiB0LmNhbGwodGhpcyxyLGUsbixpKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5faGFsdERpc2FibGVkRXZlbnRzPWZ1bmN0aW9uKHQpe3RoaXMuZGlzYWJsZWQmJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9LGV9KHUpLGM9ZnVuY3Rpb24oKXt9fSwiVjlxKyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4oIkNjbkciKTt2YXIgcj1uKCJJcDBSIiksaT1uKCJPemZCIiksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtPYmplY3Qoci5yKShlKSYmIXQmJmNvbnNvbGUud2FybigiV2FybmluZzogRmxleCBMYXlvdXQgbG9hZGVkIG9uIHRoZSBzZXJ2ZXIgd2l0aG91dCBGbGV4TGF5b3V0U2VydmVyTW9kdWxlIil9cmV0dXJuIHQud2l0aENvbmZpZz1mdW5jdGlvbihlLG4pe3ZhciByPU9iamVjdC5hc3NpZ24oe30saS5mKSxvPVtdO2Zvcih2YXIgYSBpbiBlKWVbYV09PT1yW2FdfHwhMSE9PWVbYV0mJiEwIT09ZVthXXx8KHJbYV09ZVthXSk7cmV0dXJuIGUuc2VydmVyTG9hZGVkJiZvLnB1c2goe3Byb3ZpZGU6aS5sLHVzZVZhbHVlOiEwfSksQXJyYXkuaXNBcnJheShuKSYmby5wdXNoKHtwcm92aWRlOmkuYSx1c2VWYWx1ZTpuLG11bHRpOiEwfSksby5wdXNoKHtwcm92aWRlOmkuZyx1c2VWYWx1ZTpyfSkse25nTW9kdWxlOnQscHJvdmlkZXJzOm99fSx0fSgpfSxWTnI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgcj1uKCJtclNHIiksaT1uKCI2YmxGIiksbz1uKCJpc2J5IiksYT1uKCJHNUoxIikscz1uKCJ6b3RtIiksdT1uKCJNR0JTIiksbD1uKCI2N1kvIik7ZnVuY3Rpb24gYygpe2Zvcih2YXIgdCxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlW2UubGVuZ3RoLTFdJiYodD1lLnBvcCgpKSwxPT09ZS5sZW5ndGgmJk9iamVjdChvLmEpKGVbMF0pJiYoZT1lWzBdKSwwPT09ZS5sZW5ndGg/YS5hOnQ/YyhlKS5waXBlKE9iamVjdChsLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHZvaWQgMCxlKX0pKTpuZXcgaS5hKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZih0LGUpfSl9dmFyIGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3Iuc291cmNlcz1uLHIuY29tcGxldGVkPTAsci5oYXZlVmFsdWVzPTA7dmFyIGk9bi5sZW5ndGg7ci52YWx1ZXM9bmV3IEFycmF5KGkpO2Zvcih2YXIgbz0wO288aTtvKyspe3ZhciBhPW5bb10sdT1PYmplY3Qocy5hKShyLGEsbnVsbCxvKTt1JiZyLmFkZCh1KX1yZXR1cm4gcn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMudmFsdWVzW25dPWUsaS5faGFzVmFsdWV8fChpLl9oYXNWYWx1ZT0hMCx0aGlzLmhhdmVWYWx1ZXMrKyl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb24sbj10aGlzLmhhdmVWYWx1ZXMscj10aGlzLnZhbHVlcyxpPXIubGVuZ3RoO3QuX2hhc1ZhbHVlPyh0aGlzLmNvbXBsZXRlZCsrLHRoaXMuY29tcGxldGVkPT09aSYmKG49PT1pJiZlLm5leHQociksZS5jb21wbGV0ZSgpKSk6ZS5jb21wbGV0ZSgpfSxlfSh1LmEpfSwiVm5ELyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkZGT28iKTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLmxpZnQobmV3IGEodCxlKSl9fXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMucHJlZGljYXRlPXQsdGhpcy50aGlzQXJnPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHModCx0aGlzLnByZWRpY2F0ZSx0aGlzLnRoaXNBcmcpKX0sdH0oKSxzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnByZWRpY2F0ZT1uLGkudGhpc0FyZz1yLGkuY291bnQ9MCxpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnByZWRpY2F0ZS5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuY291bnQrKyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1lJiZ0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGV9KGkuYSl9LFdmNHA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsInciLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwidSIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJ2IixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIFd9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gQn0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBIfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIFV9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gRH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBMfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigibXJTRyIpLG89bigibjZnRyIpLGE9bigiSzlJYSIpLHM9KG4oIjZibEYiKSxuKCJkV1pnIikpLHU9KG4oIlpZanQiKSxuKCJZU2gyIikpLGw9bmV3IHIubygibWF0LXNhbml0eS1jaGVja3MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fc2FuaXR5Q2hlY2tzRW5hYmxlZD10LHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITEsdGhpcy5faGFzQ2hlY2tlZEhhbW1lcj0hMSx0aGlzLl9kb2N1bWVudD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudD9kb2N1bWVudDpudWxsLHRoaXMuX3dpbmRvdz0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93P3dpbmRvdzpudWxsLHRoaXMuX2FyZUNoZWNrc0VuYWJsZWQoKSYmIXRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3MmJih0aGlzLl9jaGVja0RvY3R5cGVJc0RlZmluZWQoKSx0aGlzLl9jaGVja1RoZW1lSXNQcmVzZW50KCksdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9cmV0dXJuIHQucHJvdG90eXBlLl9hcmVDaGVja3NFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Nhbml0eUNoZWNrc0VuYWJsZWQmJk9iamVjdChyLlcpKCkmJiF0aGlzLl9pc1Rlc3RFbnYoKX0sdC5wcm90b3R5cGUuX2lzVGVzdEVudj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93aW5kb3cmJih0aGlzLl93aW5kb3cuX19rYXJtYV9ffHx0aGlzLl93aW5kb3cuamFzbWluZSl9LHQucHJvdG90eXBlLl9jaGVja0RvY3R5cGVJc0RlZmluZWQ9ZnVuY3Rpb24oKXt0aGlzLl9kb2N1bWVudCYmIXRoaXMuX2RvY3VtZW50LmRvY3R5cGUmJmNvbnNvbGUud2FybigiQ3VycmVudCBkb2N1bWVudCBkb2VzIG5vdCBoYXZlIGEgZG9jdHlwZS4gVGhpcyBtYXkgY2F1c2Ugc29tZSBBbmd1bGFyIE1hdGVyaWFsIGNvbXBvbmVudHMgbm90IHRvIGJlaGF2ZSBhcyBleHBlY3RlZC4iKX0sdC5wcm90b3R5cGUuX2NoZWNrVGhlbWVJc1ByZXNlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudCYmImZ1bmN0aW9uIj09dHlwZW9mIGdldENvbXB1dGVkU3R5bGUpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NMaXN0LmFkZCgibWF0LXRoZW1lLWxvYWRlZC1tYXJrZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO3ZhciBlPWdldENvbXB1dGVkU3R5bGUodCk7ZSYmIm5vbmUiIT09ZS5kaXNwbGF5JiZjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIEFuZ3VsYXIgTWF0ZXJpYWwgY29yZSB0aGVtZS4gTW9zdCBNYXRlcmlhbCBjb21wb25lbnRzIG1heSBub3Qgd29yayBhcyBleHBlY3RlZC4gRm9yIG1vcmUgaW5mbyByZWZlciB0byB0aGUgdGhlbWluZyBndWlkZTogaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL3RoZW1pbmciKSx0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfX0sdC5wcm90b3R5cGUuX2NoZWNrSGFtbWVySXNBdmFpbGFibGU9ZnVuY3Rpb24oKXshdGhpcy5faGFzQ2hlY2tlZEhhbW1lciYmdGhpcy5fd2luZG93JiYodGhpcy5fYXJlQ2hlY2tzRW5hYmxlZCgpJiYhdGhpcy5fd2luZG93LkhhbW1lciYmY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBIYW1tZXJKUy4gQ2VydGFpbiBBbmd1bGFyIE1hdGVyaWFsIGNvbXBvbmVudHMgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4iKSx0aGlzLl9oYXNDaGVja2VkSGFtbWVyPSEwKX0sdH0oKTtmdW5jdGlvbiBmKHQpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3ZhciByPXQuYXBwbHkodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fZGlzYWJsZWQ9ITEscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9T2JqZWN0KG8uYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0odCl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7Zm9yKHZhciBuPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bcl09YXJndW1lbnRzW3JdO3ZhciBpPXQuYXBwbHkodGhpcyxuKXx8dGhpcztyZXR1cm4gaS5jb2xvcj1lLGl9cmV0dXJuIE9iamVjdChpLmIpKG4sdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLCJjb2xvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvcn0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBuPXR8fGU7biE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtIit0aGlzLl9jb2xvciksbiYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC0iK24pLHRoaXMuX2NvbG9yPW4pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLG59KHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07dmFyIHI9dC5hcHBseSh0aGlzLGUpfHx0aGlzO3JldHVybiByLl9kaXNhYmxlUmlwcGxlPSExLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlUmlwcGxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVSaXBwbGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlUmlwcGxlPU9iamVjdChvLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KHQpfXZhciBwPW5ldyByLm8oIk1BVF9EQVRFX0xPQ0FMRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHIuVikoci5zKX19KSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2xvY2FsZUNoYW5nZXM9bmV3IGEuYX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsb2NhbGVDaGFuZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUNoYW5nZXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR8fHRoaXMuaXNEYXRlSW5zdGFuY2UodCkmJnRoaXMuaXNWYWxpZCh0KT90OnRoaXMuaW52YWxpZCgpfSx0LnByb3RvdHlwZS5zZXRMb2NhbGU9ZnVuY3Rpb24odCl7dGhpcy5sb2NhbGU9dCx0aGlzLl9sb2NhbGVDaGFuZ2VzLm5leHQoKX0sdC5wcm90b3R5cGUuY29tcGFyZURhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRZZWFyKHQpLXRoaXMuZ2V0WWVhcihlKXx8dGhpcy5nZXRNb250aCh0KS10aGlzLmdldE1vbnRoKGUpfHx0aGlzLmdldERhdGUodCktdGhpcy5nZXREYXRlKGUpfSx0LnByb3RvdHlwZS5zYW1lRGF0ZT1mdW5jdGlvbih0LGUpe2lmKHQmJmUpe3ZhciBuPXRoaXMuaXNWYWxpZCh0KSxyPXRoaXMuaXNWYWxpZChlKTtyZXR1cm4gbiYmcj8hdGhpcy5jb21wYXJlRGF0ZSh0LGUpOm49PXJ9cmV0dXJuIHQ9PWV9LHQucHJvdG90eXBlLmNsYW1wRGF0ZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUmJnRoaXMuY29tcGFyZURhdGUodCxlKTwwP2U6biYmdGhpcy5jb21wYXJlRGF0ZSh0LG4pPjA/bjp0fSx0fSgpLHk9bmV3IHIubygibWF0LWRhdGUtZm9ybWF0cyIpLGc9InVuZGVmaW5lZCIhPXR5cGVvZiBJbnRsLHY9e2xvbmc6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sbmFycm93OlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl19LGI9eCgzMSxmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQrMSl9KSxfPXtsb25nOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG5hcnJvdzpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXX0sdz0vXlxkezR9LVxkezJ9LVxkezJ9KD86VFxkezJ9OlxkezJ9OlxkezJ9KD86XC5cZCspPyg/Olp8KD86KD86XCt8LSlcZHsyfTpcZHsyfSkpPyk/JC87ZnVuY3Rpb24geCh0LGUpe2Zvcih2YXIgbj1BcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWUocik7cmV0dXJuIG59dmFyIE89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci51c2VVdGNGb3JEaXNwbGF5PSEwLHQucHJvdG90eXBlLnNldExvY2FsZS5jYWxsKHIsZSksci51c2VVdGNGb3JEaXNwbGF5PSFuLlRSSURFTlQsci5fY2xhbXBEYXRlPW4uVFJJREVOVHx8bi5FREdFLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0WWVhcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSxlLnByb3RvdHlwZS5nZXRNb250aD1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSxlLnByb3RvdHlwZS5nZXREYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKX0sZS5wcm90b3R5cGUuZ2V0RGF5T2ZXZWVrPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERheSgpfSxlLnByb3RvdHlwZS5nZXRNb250aE5hbWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoZyl7dmFyIG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse21vbnRoOnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4geCgxMixmdW5jdGlvbih0KXtyZXR1cm4gZS5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnMoZS5fZm9ybWF0KG4sbmV3IERhdGUoMjAxNyx0LDEpKSl9KX1yZXR1cm4gdlt0XX0sZS5wcm90b3R5cGUuZ2V0RGF0ZU5hbWVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZihnKXt2YXIgZT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSx7ZGF5OiJudW1lcmljIix0aW1lWm9uZToidXRjIn0pO3JldHVybiB4KDMxLGZ1bmN0aW9uKG4pe3JldHVybiB0Ll9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0Ll9mb3JtYXQoZSxuZXcgRGF0ZSgyMDE3LDAsbisxKSkpfSl9cmV0dXJuIGJ9LGUucHJvdG90eXBlLmdldERheU9mV2Vla05hbWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoZyl7dmFyIG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse3dlZWtkYXk6dCx0aW1lWm9uZToidXRjIn0pO3JldHVybiB4KDcsZnVuY3Rpb24odCl7cmV0dXJuIGUuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKGUuX2Zvcm1hdChuLG5ldyBEYXRlKDIwMTcsMCx0KzEpKSl9KX1yZXR1cm4gX1t0XX0sZS5wcm90b3R5cGUuZ2V0WWVhck5hbWU9ZnVuY3Rpb24odCl7aWYoZyl7dmFyIGU9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse3llYXI6Im51bWVyaWMiLHRpbWVab25lOiJ1dGMifSk7cmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChlLHQpKX1yZXR1cm4gU3RyaW5nKHRoaXMuZ2V0WWVhcih0KSl9LGUucHJvdG90eXBlLmdldEZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLmdldE51bURheXNJbk1vbnRoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldERhdGUodGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSsxLDApKX0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY3JlYXRlRGF0ZSh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSx0aGlzLmdldERhdGUodCkpfSxlLnByb3RvdHlwZS5jcmVhdGVEYXRlPWZ1bmN0aW9uKHQsZSxuKXtpZihlPDB8fGU+MTEpdGhyb3cgRXJyb3IoJ0ludmFsaWQgbW9udGggaW5kZXggIicrZSsnIi4gTW9udGggaW5kZXggaGFzIHRvIGJlIGJldHdlZW4gMCBhbmQgMTEuJyk7aWYobjwxKXRocm93IEVycm9yKCdJbnZhbGlkIGRhdGUgIicrbisnIi4gRGF0ZSBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuJyk7dmFyIHI9dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0LGUsbik7aWYoci5nZXRNb250aCgpIT1lKXRocm93IEVycm9yKCdJbnZhbGlkIGRhdGUgIicrbisnIiBmb3IgbW9udGggd2l0aCBpbmRleCAiJytlKyciLicpO3JldHVybiByfSxlLnByb3RvdHlwZS50b2RheT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZX0sZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P25ldyBEYXRlKHQpOnQ/bmV3IERhdGUoRGF0ZS5wYXJzZSh0KSk6bnVsbH0sZS5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuaXNWYWxpZCh0KSl0aHJvdyBFcnJvcigiTmF0aXZlRGF0ZUFkYXB0ZXI6IENhbm5vdCBmb3JtYXQgaW52YWxpZCBkYXRlLiIpO2lmKGcpe3RoaXMuX2NsYW1wRGF0ZSYmKHQuZ2V0RnVsbFllYXIoKTwxfHx0LmdldEZ1bGxZZWFyKCk+OTk5OSkmJih0PXRoaXMuY2xvbmUodCkpLnNldEZ1bGxZZWFyKE1hdGgubWF4KDEsTWF0aC5taW4oOTk5OSx0LmdldEZ1bGxZZWFyKCkpKSksZT1PYmplY3QoaS5hKSh7fSxlLHt0aW1lWm9uZToidXRjIn0pO3ZhciBuPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLGUpO3JldHVybiB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQobix0KSl9cmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHQudG9EYXRlU3RyaW5nKCkpfSxlLnByb3RvdHlwZS5hZGRDYWxlbmRhclllYXJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkQ2FsZW5kYXJNb250aHModCwxMiplKX0sZS5wcm90b3R5cGUuYWRkQ2FsZW5kYXJNb250aHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHRoaXMuZ2V0WWVhcih0KSx0aGlzLmdldE1vbnRoKHQpK2UsdGhpcy5nZXREYXRlKHQpKTtyZXR1cm4gdGhpcy5nZXRNb250aChuKSE9KCh0aGlzLmdldE1vbnRoKHQpK2UpJTEyKzEyKSUxMiYmKG49dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIobiksdGhpcy5nZXRNb250aChuKSwwKSksbn0sZS5wcm90b3R5cGUuYWRkQ2FsZW5kYXJEYXlzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codGhpcy5nZXRZZWFyKHQpLHRoaXMuZ2V0TW9udGgodCksdGhpcy5nZXREYXRlKHQpK2UpfSxlLnByb3RvdHlwZS50b0lzbzg2MDE9ZnVuY3Rpb24odCl7cmV0dXJuW3QuZ2V0VVRDRnVsbFllYXIoKSx0aGlzLl8yZGlnaXQodC5nZXRVVENNb250aCgpKzEpLHRoaXMuXzJkaWdpdCh0LmdldFVUQ0RhdGUoKSldLmpvaW4oIi0iKX0sZS5wcm90b3R5cGUuZGVzZXJpYWxpemU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZighZSlyZXR1cm4gbnVsbDtpZih3LnRlc3QoZSkpe3ZhciBuPW5ldyBEYXRlKGUpO2lmKHRoaXMuaXNWYWxpZChuKSlyZXR1cm4gbn19cmV0dXJuIHQucHJvdG90eXBlLmRlc2VyaWFsaXplLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuaXNEYXRlSW5zdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlfSxlLnByb3RvdHlwZS5pc1ZhbGlkPWZ1bmN0aW9uKHQpe3JldHVybiFpc05hTih0LmdldFRpbWUoKSl9LGUucHJvdG90eXBlLmludmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUoTmFOKX0sZS5wcm90b3R5cGUuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3c9ZnVuY3Rpb24odCxlLG4pe3ZhciByPW5ldyBEYXRlKHQsZSxuKTtyZXR1cm4gdD49MCYmdDwxMDAmJnIuc2V0RnVsbFllYXIodGhpcy5nZXRZZWFyKHIpLTE5MDApLHJ9LGUucHJvdG90eXBlLl8yZGlnaXQ9ZnVuY3Rpb24odCl7cmV0dXJuKCIwMCIrdCkuc2xpY2UoLTIpfSxlLnByb3RvdHlwZS5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvW1x1MjAwZVx1MjAwZl0vZywiIil9LGUucHJvdG90eXBlLl9mb3JtYXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRGF0ZShEYXRlLlVUQyhlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpLGUuZ2V0SG91cnMoKSxlLmdldE1pbnV0ZXMoKSxlLmdldFNlY29uZHMoKSxlLmdldE1pbGxpc2Vjb25kcygpKSk7cmV0dXJuIHQuZm9ybWF0KG4pfSxlfShtKSxDPXtwYXJzZTp7ZGF0ZUlucHV0Om51bGx9LGRpc3BsYXk6e2RhdGVJbnB1dDp7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9LG1vbnRoWWVhckxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQifSxkYXRlQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIn0sbW9udGhZZWFyQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyJ9fX0sUz1mdW5jdGlvbigpe30sRT1mdW5jdGlvbigpe30saz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX2xpbmVzPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX3NldExpbmVDbGFzcyh0aGlzLl9saW5lcy5sZW5ndGgpLHRoaXMuX2xpbmVzLmNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7bi5fc2V0TGluZUNsYXNzKG4uX2xpbmVzLmxlbmd0aCl9KX1yZXR1cm4gdC5wcm90b3R5cGUuX3NldExpbmVDbGFzcz1mdW5jdGlvbih0KXt0aGlzLl9yZXNldENsYXNzZXMoKSwyPT09dHx8Mz09PXQ/dGhpcy5fc2V0Q2xhc3MoIm1hdC0iK3QrIi1saW5lIiwhMCk6dD4zJiZ0aGlzLl9zZXRDbGFzcygibWF0LW11bHRpLWxpbmUiLCEwKX0sdC5wcm90b3R5cGUuX3Jlc2V0Q2xhc3Nlcz1mdW5jdGlvbigpe3RoaXMuX3NldENsYXNzKCJtYXQtMi1saW5lIiwhMSksdGhpcy5fc2V0Q2xhc3MoIm1hdC0zLWxpbmUiLCExKSx0aGlzLl9zZXRDbGFzcygibWF0LW11bHRpLWxpbmUiLCExKX0sdC5wcm90b3R5cGUuX3NldENsYXNzPWZ1bmN0aW9uKHQsZSl7ZT90aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KTp0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSh0KX0sdH0oKSxUPWZ1bmN0aW9uKCl7fSxJPWZ1bmN0aW9uKCl7dmFyIHQ9e0ZBRElOR19JTjowLFZJU0lCTEU6MSxGQURJTkdfT1VUOjIsSElEREVOOjN9O3JldHVybiB0W3QuRkFESU5HX0lOXT0iRkFESU5HX0lOIix0W3QuVklTSUJMRV09IlZJU0lCTEUiLHRbdC5GQURJTkdfT1VUXT0iRkFESU5HX09VVCIsdFt0LkhJRERFTl09IkhJRERFTiIsdH0oKSxBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbmZpZz1uLHRoaXMuc3RhdGU9SS5ISURERU59cmV0dXJuIHQucHJvdG90eXBlLmZhZGVPdXQ9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5mYWRlT3V0UmlwcGxlKHRoaXMpfSx0fSgpLGo9e2VudGVyRHVyYXRpb246NDUwLGV4aXREdXJhdGlvbjo0MDB9LFA9ODAwLE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZhciBpPXRoaXM7dGhpcy5fdGFyZ2V0PXQsdGhpcy5fbmdab25lPWUsdGhpcy5faXNQb2ludGVyRG93bj0hMSx0aGlzLl90cmlnZ2VyRXZlbnRzPW5ldyBNYXAsdGhpcy5fYWN0aXZlUmlwcGxlcz1uZXcgU2V0LHRoaXMuX2V2ZW50T3B0aW9ucz0hIU9iamVjdChzLmMpKCkmJntwYXNzaXZlOiEwfSx0aGlzLm9uTW91c2Vkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPWkuX2xhc3RUb3VjaFN0YXJ0RXZlbnQmJkRhdGUubm93KCk8aS5fbGFzdFRvdWNoU3RhcnRFdmVudCtQO2kuX3RhcmdldC5yaXBwbGVEaXNhYmxlZHx8ZXx8KGkuX2lzUG9pbnRlckRvd249ITAsaS5mYWRlSW5SaXBwbGUodC5jbGllbnRYLHQuY2xpZW50WSxpLl90YXJnZXQucmlwcGxlQ29uZmlnKSl9LHRoaXMub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHQpe2kuX3RhcmdldC5yaXBwbGVEaXNhYmxlZHx8KGkuX2xhc3RUb3VjaFN0YXJ0RXZlbnQ9RGF0ZS5ub3coKSxpLl9pc1BvaW50ZXJEb3duPSEwLGkuZmFkZUluUmlwcGxlKHQudG91Y2hlc1swXS5jbGllbnRYLHQudG91Y2hlc1swXS5jbGllbnRZLGkuX3RhcmdldC5yaXBwbGVDb25maWcpKX0sdGhpcy5vblBvaW50ZXJVcD1mdW5jdGlvbigpe2kuX2lzUG9pbnRlckRvd24mJihpLl9pc1BvaW50ZXJEb3duPSExLGkuX2FjdGl2ZVJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXshdC5jb25maWcucGVyc2lzdGVudCYmKHQuc3RhdGU9PT1JLlZJU0lCTEV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiZ0LnN0YXRlPT09SS5GQURJTkdfSU4pJiZ0LmZhZGVPdXQoKX0pKX0sci5pc0Jyb3dzZXImJih0aGlzLl9jb250YWluZXJFbGVtZW50PW4ubmF0aXZlRWxlbWVudCx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgibW91c2Vkb3duIix0aGlzLm9uTW91c2Vkb3duKSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgibW91c2V1cCIsdGhpcy5vblBvaW50ZXJVcCksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNlbGVhdmUiLHRoaXMub25Qb2ludGVyVXApLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJ0b3VjaHN0YXJ0Iix0aGlzLm9uVG91Y2hTdGFydCksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoInRvdWNoZW5kIix0aGlzLm9uUG9pbnRlclVwKSl9cmV0dXJuIHQucHJvdG90eXBlLmZhZGVJblJpcHBsZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17fSk7dmFyIG89dGhpcy5fY29udGFpbmVyUmVjdD10aGlzLl9jb250YWluZXJSZWN0fHx0aGlzLl9jb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9T2JqZWN0KGkuYSkoe30saixuLmFuaW1hdGlvbik7bi5jZW50ZXJlZCYmKHQ9by5sZWZ0K28ud2lkdGgvMixlPW8udG9wK28uaGVpZ2h0LzIpO3ZhciBzPW4ucmFkaXVzfHxmdW5jdGlvbih0LGUsbil7dmFyIHI9TWF0aC5tYXgoTWF0aC5hYnModC1uLmxlZnQpLE1hdGguYWJzKHQtbi5yaWdodCkpLGk9TWF0aC5tYXgoTWF0aC5hYnMoZS1uLnRvcCksTWF0aC5hYnMoZS1uLmJvdHRvbSkpO3JldHVybiBNYXRoLnNxcnQocipyK2kqaSl9KHQsZSxvKSx1PXQtby5sZWZ0LGw9ZS1vLnRvcCxjPWEuZW50ZXJEdXJhdGlvbi8obi5zcGVlZEZhY3Rvcnx8MSksZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLmNsYXNzTGlzdC5hZGQoIm1hdC1yaXBwbGUtZWxlbWVudCIpLGYuc3R5bGUubGVmdD11LXMrInB4IixmLnN0eWxlLnRvcD1sLXMrInB4IixmLnN0eWxlLmhlaWdodD0yKnMrInB4IixmLnN0eWxlLndpZHRoPTIqcysicHgiLGYuc3R5bGUuYmFja2dyb3VuZENvbG9yPW4uY29sb3J8fG51bGwsZi5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249YysibXMiLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQoZiksd2luZG93LmdldENvbXB1dGVkU3R5bGUoZikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGYuc3R5bGUudHJhbnNmb3JtPSJzY2FsZSgxKSI7dmFyIGg9bmV3IEEodGhpcyxmLG4pO3JldHVybiBoLnN0YXRlPUkuRkFESU5HX0lOLHRoaXMuX2FjdGl2ZVJpcHBsZXMuYWRkKGgpLG4ucGVyc2lzdGVudHx8KHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9aCksdGhpcy5ydW5UaW1lb3V0T3V0c2lkZVpvbmUoZnVuY3Rpb24oKXt2YXIgdD1oPT09ci5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZTtoLnN0YXRlPUkuVklTSUJMRSxuLnBlcnNpc3RlbnR8fHQmJnIuX2lzUG9pbnRlckRvd258fGguZmFkZU91dCgpfSxjKSxofSx0LnByb3RvdHlwZS5mYWRlT3V0UmlwcGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FjdGl2ZVJpcHBsZXMuZGVsZXRlKHQpO2lmKHQ9PT10aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlJiYodGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZT1udWxsKSx0aGlzLl9hY3RpdmVSaXBwbGVzLnNpemV8fCh0aGlzLl9jb250YWluZXJSZWN0PW51bGwpLGUpe3ZhciBuPXQuZWxlbWVudCxyPU9iamVjdChpLmEpKHt9LGosdC5jb25maWcuYW5pbWF0aW9uKTtuLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1yLmV4aXREdXJhdGlvbisibXMiLG4uc3R5bGUub3BhY2l0eT0iMCIsdC5zdGF0ZT1JLkZBRElOR19PVVQsdGhpcy5ydW5UaW1lb3V0T3V0c2lkZVpvbmUoZnVuY3Rpb24oKXt0LnN0YXRlPUkuSElEREVOLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX0sci5leGl0RHVyYXRpb24pfX0sdC5wcm90b3R5cGUuZmFkZU91dEFsbD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZVJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5mYWRlT3V0KCl9KX0sdC5wcm90b3R5cGUuc2V0dXBUcmlnZ2VyRXZlbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmdCE9PXRoaXMuX3RyaWdnZXJFbGVtZW50JiYodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2UuX3RyaWdnZXJFdmVudHMuZm9yRWFjaChmdW5jdGlvbihuLHIpe3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIocixuLGUuX2V2ZW50T3B0aW9ucyl9KX0pLHRoaXMuX3RyaWdnZXJFbGVtZW50PXQpfSx0LnByb3RvdHlwZS5ydW5UaW1lb3V0T3V0c2lkZVpvbmU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0wKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dCh0LGUpfSl9LHQucHJvdG90eXBlLl9yZW1vdmVUcmlnZ2VyRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl90cmlnZ2VyRWxlbWVudCYmdGhpcy5fdHJpZ2dlckV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dC5fdHJpZ2dlckVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGUsdC5fZXZlbnRPcHRpb25zKX0pfSx0fSgpLE49bmV3IHIubygibWF0LXJpcHBsZS1nbG9iYWwtb3B0aW9ucyIpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSl7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2FuaW1hdGlvbk1vZGU9aSx0aGlzLnJhZGl1cz0wLHRoaXMuc3BlZWRGYWN0b3I9MSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuX2dsb2JhbE9wdGlvbnM9cnx8e30sdGhpcy5fcmlwcGxlUmVuZGVyZXI9bmV3IE0odGhpcyxlLHQsbil9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlZD10LHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidHJpZ2dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmlnZ2VyfHx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl90cmlnZ2VyPXQsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl9LHQucHJvdG90eXBlLmZhZGVPdXRBbGw9ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlT3V0QWxsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmlwcGxlQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJue2NlbnRlcmVkOnRoaXMuY2VudGVyZWQscmFkaXVzOnRoaXMucmFkaXVzLGNvbG9yOnRoaXMuY29sb3IsYW5pbWF0aW9uOiJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlP3tlbnRlckR1cmF0aW9uOjAsZXhpdER1cmF0aW9uOjB9Ok9iamVjdChpLmEpKHt9LHRoaXMuX2dsb2JhbE9wdGlvbnMuYW5pbWF0aW9uLHRoaXMuYW5pbWF0aW9uKSx0ZXJtaW5hdGVPblBvaW50ZXJVcDp0aGlzLl9nbG9iYWxPcHRpb25zLnRlcm1pbmF0ZU9uUG9pbnRlclVwLHNwZWVkRmFjdG9yOnRoaXMuc3BlZWRGYWN0b3IqKHRoaXMuX2dsb2JhbE9wdGlvbnMuYmFzZVNwZWVkRmFjdG9yfHwxKX19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyaXBwbGVEaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhIXRoaXMuX2dsb2JhbE9wdGlvbnMuZGlzYWJsZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZD1mdW5jdGlvbigpeyF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLl9yaXBwbGVSZW5kZXJlci5zZXR1cFRyaWdnZXJFdmVudHModGhpcy50cmlnZ2VyKX0sdC5wcm90b3R5cGUubGF1bmNoPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksIm51bWJlciI9PXR5cGVvZiB0P3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSh0LGUsT2JqZWN0KGkuYSkoe30sdGhpcy5yaXBwbGVDb25maWcsbikpOnRoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSgwLDAsT2JqZWN0KGkuYSkoe30sdGhpcy5yaXBwbGVDb25maWcsdCkpfSx0fSgpLEQ9ZnVuY3Rpb24oKXt9LEw9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlPSJ1bmNoZWNrZWQiLHRoaXMuZGlzYWJsZWQ9ITF9LEY9ZnVuY3Rpb24oKXt9LFY9MCxVPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2xhYmVsSWQ9Im1hdC1vcHRncm91cC1sYWJlbC0iK1YrKyxlfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KGYoZnVuY3Rpb24oKXt9KSksej0wLEI9bmV3IHIubygiTUFUX09QVElPTl9QQVJFTlRfQ09NUE9ORU5UIiksSD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5fZWxlbWVudD10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fcGFyZW50PW4sdGhpcy5ncm91cD1pLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pZD0ibWF0LW9wdGlvbi0iK3orKyx0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPSIiLHRoaXMub25TZWxlY3Rpb25DaGFuZ2U9bmV3IHIubSx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IGEuYX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtdWx0aXBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5tdWx0aXBsZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic2VsZWN0ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwJiZ0aGlzLmdyb3VwLmRpc2FibGVkfHx0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChvLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZVJpcHBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5kaXNhYmxlUmlwcGxlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZpZXdWYWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybih0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnRleHRDb250ZW50fHwiIikudHJpbSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbigpe3RoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5kZXNlbGVjdD1mdW5jdGlvbigpe3RoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldEhvc3RFbGVtZW50KCk7ImZ1bmN0aW9uIj09dHlwZW9mIHQuZm9jdXMmJnQuZm9jdXMoKX0sdC5wcm90b3R5cGUuc2V0QWN0aXZlU3R5bGVzPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlfHwodGhpcy5fYWN0aXZlPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sdC5wcm90b3R5cGUuc2V0SW5hY3RpdmVTdHlsZXM9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmUmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSx0LnByb3RvdHlwZS5nZXRMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXdWYWx1ZX0sdC5wcm90b3R5cGUuX2hhbmRsZUtleWRvd249ZnVuY3Rpb24odCl7dC5rZXlDb2RlIT09dS5kJiZ0LmtleUNvZGUhPT11Lmp8fCh0aGlzLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHQucHJldmVudERlZmF1bHQoKSl9LHQucHJvdG90eXBlLl9zZWxlY3RWaWFJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zZWxlY3RlZD0hdGhpcy5tdWx0aXBsZXx8IXRoaXMuX3NlbGVjdGVkLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCghMCkpfSx0LnByb3RvdHlwZS5fZ2V0VGFiSW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn0sdC5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudH0sdC5wcm90b3R5cGUubmdBZnRlclZpZXdDaGVja2VkPWZ1bmN0aW9uKCl7aWYodGhpcy5fc2VsZWN0ZWQpe3ZhciB0PXRoaXMudmlld1ZhbHVlO3QhPT10aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlJiYodGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT10LHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCkpfX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMSksdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyBmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSExKSx0aGlzLnNvdXJjZT10LHRoaXMuaXNVc2VySW5wdXQ9ZX0odGhpcyx0KSl9LHR9KCksVz1mdW5jdGlvbigpe319LFhsUHc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIjZibEYiKTtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIG5ldyByLmEoZT9mdW5jdGlvbihuKXtyZXR1cm4gZS5zY2hlZHVsZShvLDAse2Vycm9yOnQsc3Vic2NyaWJlcjpufSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKHQpfSl9ZnVuY3Rpb24gbyh0KXt0LnN1YnNjcmliZXIuZXJyb3IodC5lcnJvcil9fSxZU2gyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4geX0pO3ZhciByPTksaT0xMyxvPTI3LGE9MzIscz0zNSx1PTM2LGw9MzcsYz0zOCxmPTM5LGg9NDAsZD00OCxwPTU3LG09NjUseT05MH0sWWxiUTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuKCJtclNHIiksbigiNmJsRiIpLG4oIkYvWEwiKTt2YXIgcj1uKCJLOUlhIiksaT1uKCJDY25HIiksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1uJiYobj0hMCk7dmFyIGk9dGhpczt0aGlzLl9tdWx0aXBsZT10LHRoaXMuX2VtaXRDaGFuZ2VzPW4sdGhpcy5fc2VsZWN0aW9uPW5ldyBTZXQsdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSx0aGlzLm9uQ2hhbmdlPXRoaXMuX2VtaXRDaGFuZ2VzP25ldyByLmE6bnVsbCxlJiZlLmxlbmd0aCYmKHQ/ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpLl9tYXJrU2VsZWN0ZWQodCl9KTp0aGlzLl9tYXJrU2VsZWN0ZWQoZVswXSksdGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RoPTApfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInNlbGVjdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9QXJyYXkuZnJvbSh0aGlzLl9zZWxlY3Rpb24udmFsdWVzKCkpKSx0aGlzLl9zZWxlY3RlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudChlKSxlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuX21hcmtTZWxlY3RlZChlKX0pLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5kZXNlbGVjdD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KGUpLGUuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5fdW5tYXJrU2VsZWN0ZWQoZSl9KSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KT90aGlzLmRlc2VsZWN0KHQpOnRoaXMuc2VsZWN0KHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX3VubWFya0FsbCgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5pc1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZWxlY3Rpb24uaGFzKHQpfSx0LnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9zZWxlY3Rpb24uc2l6ZX0sdC5wcm90b3R5cGUuaGFzVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0VtcHR5KCl9LHQucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24odCl7dGhpcy5fbXVsdGlwbGUmJnRoaXMuX3NlbGVjdGVkJiZ0aGlzLl9zZWxlY3RlZC5zb3J0KHQpfSx0LnByb3RvdHlwZS5fZW1pdENoYW5nZUV2ZW50PWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0ZWQ9bnVsbCwodGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RofHx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0Lmxlbmd0aCkmJih0aGlzLm9uQ2hhbmdlJiZ0aGlzLm9uQ2hhbmdlLm5leHQoe3NvdXJjZTp0aGlzLGFkZGVkOnRoaXMuX3NlbGVjdGVkVG9FbWl0LHJlbW92ZWQ6dGhpcy5fZGVzZWxlY3RlZFRvRW1pdH0pLHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10pfSx0LnByb3RvdHlwZS5fbWFya1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KXx8KHRoaXMuX211bHRpcGxlfHx0aGlzLl91bm1hcmtBbGwoKSx0aGlzLl9zZWxlY3Rpb24uYWRkKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9zZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX0sdC5wcm90b3R5cGUuX3VubWFya1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KSYmKHRoaXMuX3NlbGVjdGlvbi5kZWxldGUodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9LHQucHJvdG90eXBlLl91bm1hcmtBbGw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaXNFbXB0eSgpfHx0aGlzLl9zZWxlY3Rpb24uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5fdW5tYXJrU2VsZWN0ZWQoZSl9KX0sdC5wcm90b3R5cGUuX3ZlcmlmeVZhbHVlQXNzaWdubWVudD1mdW5jdGlvbih0KXtpZih0Lmxlbmd0aD4xJiYhdGhpcy5fbXVsdGlwbGUpdGhyb3cgRXJyb3IoIkNhbm5vdCBwYXNzIG11bHRpcGxlIHZhbHVlcyBpbnRvIFNlbGVjdGlvbk1vZGVsIHdpdGggc2luZ2xlLXZhbHVlIG1vZGUuIil9LHR9KCksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9saXN0ZW5lcnM9W119cmV0dXJuIHQucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLHI9dGhpcy5fbGlzdGVuZXJzO248ci5sZW5ndGg7bisrKSgwLHJbbl0pKHQsZSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl9saXN0ZW5lcnMucHVzaCh0KSxmdW5jdGlvbigpe2UuX2xpc3RlbmVycz1lLl9saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0IT09ZX0pfX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9saXN0ZW5lcnM9W119LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKX0sWllDaTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIm1yU0ciKSxpPW4oIkNjbkciKSxvPW4oIjI2RlUiKSxhPW4oIjAvdVEiKSxzPW4oIkYvWEwiKSx1PW4oIks5SWEiKSxsPW4oIjZibEYiKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj10LmNhbGwodGhpcywibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJFbXB0eUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YobixlLnByb3RvdHlwZSksbn1yZXR1cm4gci5iKGUsdCksZX0oRXJyb3IpLGY9bigiVm5ELyIpLGg9bigidDlmWiIpLGQ9bigiRkZPbyIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IG0odCkpfX12YXIgbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWZhdWx0VmFsdWU9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgeSh0LHRoaXMuZGVmYXVsdFZhbHVlKSl9LHR9KCkseT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuZGVmYXVsdFZhbHVlPW4sci5pc0VtcHR5PSEwLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuaXNFbXB0eT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaXNFbXB0eSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHRoaXMuZGVmYXVsdFZhbHVlKSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KGQuYSksZz1uKCJ4TXlFIiksdj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9YiksT2JqZWN0KGcuYSkoe2hhc1ZhbHVlOiExLG5leHQ6ZnVuY3Rpb24oKXt0aGlzLmhhc1ZhbHVlPSEwfSxjb21wbGV0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmhhc1ZhbHVlKXRocm93IHQoKX19KX07ZnVuY3Rpb24gYigpe3JldHVybiBuZXcgY312YXIgXz1uKCJtQ2hGIik7ZnVuY3Rpb24gdyh0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLnBpcGUodD9PYmplY3QoZi5hKShmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixyKX0pOl8uYSxPYmplY3QoaC5hKSgxKSxuP3AoZSk6dihmdW5jdGlvbigpe3JldHVybiBuZXcgY30pKX19dmFyIHg9bigicHNXMCIpLE89bigiNjdZLyIpLEM9bigiUGhqbiIpLFM9bigiYjdtVyIpLEU9bigiRzVKMSIpO2Z1bmN0aW9uIGsodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAwPT09dD9PYmplY3QoRS5iKSgpOmUubGlmdChuZXcgVCh0KSl9fXZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBTLmF9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IEkodCx0aGlzLnRvdGFsKSl9LHR9KCksST1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIudG90YWw9bixyLnJpbmc9bmV3IEFycmF5LHIuY291bnQ9MCxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJpbmcsbj10aGlzLnRvdGFsLHI9dGhpcy5jb3VudCsrO2UubGVuZ3RoPG4/ZS5wdXNoKHQpOmVbciVuXT10fSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlc3RpbmF0aW9uLGU9dGhpcy5jb3VudDtpZihlPjApZm9yKHZhciBuPXRoaXMuY291bnQ+PXRoaXMudG90YWw/dGhpcy50b3RhbDp0aGlzLmNvdW50LHI9dGhpcy5yaW5nLGk9MDtpPG47aSsrKXt2YXIgbz1lKyslbjt0Lm5leHQocltvXSl9dC5jb21wbGV0ZSgpfSxlfShkLmEpO2Z1bmN0aW9uIEEodCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gci5waXBlKHQ/T2JqZWN0KGYuYSkoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4scil9KTpfLmEsaygxKSxuP3AoZSk6dihmdW5jdGlvbigpe3JldHVybiBuZXcgY30pKX19ZnVuY3Rpb24gaih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5saWZ0KG5ldyBQKHQsZSxuKSl9fXZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLnRoaXNBcmc9ZSx0aGlzLnNvdXJjZT1ufXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBNKHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnLHRoaXMuc291cmNlKSl9LHR9KCksTT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLnByZWRpY2F0ZT1uLG8udGhpc0FyZz1yLG8uc291cmNlPWksby5pbmRleD0wLG8udGhpc0FyZz1yfHxvLG99cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPSExO3RyeXtlPXRoaXMucHJlZGljYXRlLmNhbGwodGhpcy50aGlzQXJnLHQsdGhpcy5pbmRleCsrLHRoaXMuc291cmNlKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWV8fHRoaXMubm90aWZ5Q29tcGxldGUoITEpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeUNvbXBsZXRlKCEwKX0sZX0oZC5hKSxOPW4oIjlaMUYiKSxSPW4oIlR4amciKSxEPW4oIlpuOEQiKTtmdW5jdGlvbiBMKHQsZSl7dmFyIG49ITE7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTImJihuPSEwKSxmdW5jdGlvbihyKXtyZXR1cm4gci5saWZ0KG5ldyBGKHQsZSxuKSl9fXZhciBGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dm9pZCAwPT09biYmKG49ITEpLHRoaXMuYWNjdW11bGF0b3I9dCx0aGlzLnNlZWQ9ZSx0aGlzLmhhc1NlZWQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgVih0LHRoaXMuYWNjdW11bGF0b3IsdGhpcy5zZWVkLHRoaXMuaGFzU2VlZCkpfSx0fSgpLFY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5hY2N1bXVsYXRvcj1uLG8uX3NlZWQ9cixvLmhhc1NlZWQ9aSxvLmluZGV4PTAsb31yZXR1cm4gci5iKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLmhhc1NlZWQ9ITAsdGhpcy5fc2VlZD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuaGFzU2VlZClyZXR1cm4gdGhpcy5fdHJ5TmV4dCh0KTt0aGlzLnNlZWQ9dCx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl90cnlOZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMuYWNjdW11bGF0b3IodGhpcy5zZWVkLHQsbil9Y2F0Y2godCl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLnNlZWQ9ZSx0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KGQuYSksVT1uKCJ5M0J5Iiksej1uKCJJcDBSIiksQj1uKCJaWWp0Iik7bi5kKGUsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIGFufSksbi5kKGUsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIG1ufSksbi5kKGUsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIHlufSksbi5kKGUsIkEiLGZ1bmN0aW9uKCl7cmV0dXJuIGdufSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIGZufSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGNufSksbi5kKGUsIngiLGZ1bmN0aW9uKCl7cmV0dXJuIHBufSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIHVufSksbi5kKGUsInciLGZ1bmN0aW9uKCl7cmV0dXJuIGRufSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIFFlfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuICRlfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIERlfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHFlfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIEZlfSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIG9ufSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHZufSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGxufSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIFhlfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ufSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGVufSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRufSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIHJufSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lfSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIFVlfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIFR0fSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIG90fSk7dmFyIEg9ZnVuY3Rpb24odCxlKXt0aGlzLmlkPXQsdGhpcy51cmw9ZX0sVz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZvaWQgMD09PXImJihyPSJpbXBlcmF0aXZlIiksdm9pZCAwPT09aSYmKGk9bnVsbCk7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby5uYXZpZ2F0aW9uVHJpZ2dlcj1yLG8ucmVzdG9yZWRTdGF0ZT1pLG99cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvblN0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJykifSxlfShIKSxxPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkudXJsQWZ0ZXJSZWRpcmVjdHM9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25FbmQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJykifSxlfShIKSxZPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkucmVhc29uPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJykifSxlfShIKSxHPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkuZXJyb3I9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25FcnJvcihpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIGVycm9yOiAiK3RoaXMuZXJyb3IrIikifSxlfShIKSxRPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1yLG8uc3RhdGU9aSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlc1JlY29nbml6ZWQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KEgpLEs9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPXIsby5zdGF0ZT1pLG99cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iR3VhcmRzQ2hlY2tTdGFydChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksWj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyl7dmFyIGE9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gYS51cmxBZnRlclJlZGlyZWN0cz1yLGEuc3RhdGU9aSxhLnNob3VsZEFjdGl2YXRlPW8sYX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJHdWFyZHNDaGVja0VuZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIsIHNob3VsZEFjdGl2YXRlOiAiK3RoaXMuc2hvdWxkQWN0aXZhdGUrIikifSxlfShIKSxYPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1yLG8uc3RhdGU9aSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJlc29sdmVTdGFydChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksJD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8udXJsQWZ0ZXJSZWRpcmVjdHM9cixvLnN0YXRlPWksb31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSZXNvbHZlRW5kKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShIKSxKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJvdXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICIrdGhpcy5yb3V0ZS5wYXRoKyIpIn0sdH0oKSx0dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yb3V0ZT10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSb3V0ZUNvbmZpZ0xvYWRFbmQocGF0aDogIit0aGlzLnJvdXRlLnBhdGgrIikifSx0fSgpLGV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNoaWxkQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLG50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNoaWxkQWN0aXZhdGlvbkVuZChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zbmFwc2hvdD10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJBY3RpdmF0aW9uU3RhcnQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCksaXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQWN0aXZhdGlvbkVuZChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxvdD1mdW5jdGlvbigpe30sYXQ9InByaW1hcnkiLHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBhcmFtcz10fHx7fX1yZXR1cm4gdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBhcmFtcy5oYXNPd25Qcm9wZXJ0eSh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuaGFzKHQpKXt2YXIgZT10aGlzLnBhcmFtc1t0XTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lWzBdOmV9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtpZih0aGlzLmhhcyh0KSl7dmFyIGU9dGhpcy5wYXJhbXNbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpbZV19cmV0dXJuW119LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwia2V5cyIse2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnBhcmFtcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtmdW5jdGlvbiB1dCh0KXtyZXR1cm4gbmV3IHN0KHQpfWZ1bmN0aW9uIGx0KHQsZSxuKXt2YXIgcj1uLnBhdGguc3BsaXQoIi8iKTtpZihyLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiZnVsbCI9PT1uLnBhdGhNYXRjaCYmKGUuaGFzQ2hpbGRyZW4oKXx8ci5sZW5ndGg8dC5sZW5ndGgpKXJldHVybiBudWxsO2Zvcih2YXIgaT17fSxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBhPXJbb10scz10W29dO2lmKGEuc3RhcnRzV2l0aCgiOiIpKWlbYS5zdWJzdHJpbmcoMSldPXM7ZWxzZSBpZihhIT09cy5wYXRoKXJldHVybiBudWxsfXJldHVybntjb25zdW1lZDp0LnNsaWNlKDAsci5sZW5ndGgpLHBvc1BhcmFtczppfX12YXIgY3Q9ZnVuY3Rpb24odCxlKXt0aGlzLnJvdXRlcz10LHRoaXMubW9kdWxlPWV9O2Z1bmN0aW9uIGZ0KHQsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2h0KHIsZHQoZSxyKSl9fWZ1bmN0aW9uIGh0KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJcbiAgICAgIEludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBFbmNvdW50ZXJlZCB1bmRlZmluZWQgcm91dGUuXG4gICAgICBUaGUgcmVhc29uIG1pZ2h0IGJlIGFuIGV4dHJhIGNvbW1hLlxuXG4gICAgICBFeGFtcGxlOlxuICAgICAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gICAgICAgIHsgcGF0aDogJycsIHJlZGlyZWN0VG86ICcvZGFzaGJvYXJkJywgcGF0aE1hdGNoOiAnZnVsbCcgfSxcbiAgICAgICAgeyBwYXRoOiAnZGFzaGJvYXJkJywgIGNvbXBvbmVudDogRGFzaGJvYXJkQ29tcG9uZW50IH0sLCA8PCB0d28gY29tbWFzXG4gICAgICAgIHsgcGF0aDogJ2RldGFpbC86aWQnLCBjb21wb25lbnQ6IEhlcm9EZXRhaWxDb21wb25lbnQgfVxuICAgICAgXTtcbiAgICAiKTtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IEFycmF5IGNhbm5vdCBiZSBzcGVjaWZpZWQiKTtpZighdC5jb21wb25lbnQmJiF0LmNoaWxkcmVuJiYhdC5sb2FkQ2hpbGRyZW4mJnQub3V0bGV0JiZ0Lm91dGxldCE9PWF0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IGEgY29tcG9uZW50bGVzcyByb3V0ZSB3aXRob3V0IGNoaWxkcmVuIG9yIGxvYWRDaGlsZHJlbiBjYW5ub3QgaGF2ZSBhIG5hbWVkIG91dGxldCBzZXQiKTtpZih0LnJlZGlyZWN0VG8mJnQuY2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcmVkaXJlY3RUbyBhbmQgY2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnJlZGlyZWN0VG8mJnQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGxvYWRDaGlsZHJlbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQuY2hpbGRyZW4mJnQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IGNoaWxkcmVuIGFuZCBsb2FkQ2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnJlZGlyZWN0VG8mJnQuY29tcG9uZW50KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGNvbXBvbmVudCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQucGF0aCYmdC5tYXRjaGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGggYW5kIG1hdGNoZXIgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih2b2lkIDA9PT10LnJlZGlyZWN0VG8mJiF0LmNvbXBvbmVudCYmIXQuY2hpbGRyZW4mJiF0LmxvYWRDaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInLiBPbmUgb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHByb3ZpZGVkOiBjb21wb25lbnQsIHJlZGlyZWN0VG8sIGNoaWxkcmVuIG9yIGxvYWRDaGlsZHJlbiIpO2lmKHZvaWQgMD09PXQucGF0aCYmdm9pZCAwPT09dC5tYXRjaGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJvdXRlcyBtdXN0IGhhdmUgZWl0aGVyIGEgcGF0aCBvciBhIG1hdGNoZXIgc3BlY2lmaWVkIik7aWYoInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiIvIj09PXQucGF0aC5jaGFyQXQoMCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcGF0aCBjYW5ub3Qgc3RhcnQgd2l0aCBhIHNsYXNoIik7aWYoIiI9PT10LnBhdGgmJnZvaWQgMCE9PXQucmVkaXJlY3RUbyYmdm9pZCAwPT09dC5wYXRoTWF0Y2gpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJ3twYXRoOiBcIiIrZSsnIiwgcmVkaXJlY3RUbzogIicrdC5yZWRpcmVjdFRvKyJcIn0nOiBwbGVhc2UgcHJvdmlkZSAncGF0aE1hdGNoJy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgJ3BhdGhNYXRjaCcgaXMgJ3ByZWZpeCcsIGJ1dCBvZnRlbiB0aGUgaW50ZW50IGlzIHRvIHVzZSAnZnVsbCcuIik7aWYodm9pZCAwIT09dC5wYXRoTWF0Y2gmJiJmdWxsIiE9PXQucGF0aE1hdGNoJiYicHJlZml4IiE9PXQucGF0aE1hdGNoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGhNYXRjaCBjYW4gb25seSBiZSBzZXQgdG8gJ3ByZWZpeCcgb3IgJ2Z1bGwnIik7dC5jaGlsZHJlbiYmZnQodC5jaGlsZHJlbixlKX1mdW5jdGlvbiBkdCh0LGUpe3JldHVybiBlP3R8fGUucGF0aD90JiYhZS5wYXRoP3QrIi8iOiF0JiZlLnBhdGg/ZS5wYXRoOnQrIi8iK2UucGF0aDoiIjp0fWZ1bmN0aW9uIHB0KHQpe3ZhciBlPXQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubWFwKHB0KSxuPWU/T2JqZWN0KHIuYSkoe30sdCx7Y2hpbGRyZW46ZX0pOk9iamVjdChyLmEpKHt9LHQpO3JldHVybiFuLmNvbXBvbmVudCYmKGV8fG4ubG9hZENoaWxkcmVuKSYmbi5vdXRsZXQmJm4ub3V0bGV0IT09YXQmJihuLmNvbXBvbmVudD1vdCksbn1mdW5jdGlvbiBtdCh0LGUpe3ZhciBuLHI9T2JqZWN0LmtleXModCksaT1PYmplY3Qua2V5cyhlKTtpZihyLmxlbmd0aCE9aS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspaWYodFtuPXJbb11dIT09ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB5dCh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0KX1mdW5jdGlvbiBndCh0KXtyZXR1cm4gdC5sZW5ndGg+MD90W3QubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gdnQodCxlKXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiZlKHRbbl0sbil9ZnVuY3Rpb24gYnQodCl7cmV0dXJuIHQucGlwZShPYmplY3QoRC5hKSgpLGooZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfWZ1bmN0aW9uIF90KHQpe3JldHVybiBPYmplY3QoaS5TYSkodCk/dDpPYmplY3QoaS5UYSkodCk/T2JqZWN0KGEuYSkoUHJvbWlzZS5yZXNvbHZlKHQpKTpPYmplY3Qocy5hKSh0KX1mdW5jdGlvbiB3dCh0LGUsbil7cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtyZXR1cm4gbXQodCxlKX0odC5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKSYmZnVuY3Rpb24gdChlLG4pe2lmKCFTdChlLnNlZ21lbnRzLG4uc2VnbWVudHMpKXJldHVybiExO2lmKGUubnVtYmVyT2ZDaGlsZHJlbiE9PW4ubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IodmFyIHIgaW4gbi5jaGlsZHJlbil7aWYoIWUuY2hpbGRyZW5bcl0pcmV0dXJuITE7aWYoIXQoZS5jaGlsZHJlbltyXSxuLmNoaWxkcmVuW3JdKSlyZXR1cm4hMX1yZXR1cm4hMH0odC5yb290LGUucm9vdCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkubGVuZ3RoPD1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJk9iamVjdC5rZXlzKGUpLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBlW25dPT09dFtuXX0pfSh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpJiZmdW5jdGlvbiB0KGUsbil7cmV0dXJuIGZ1bmN0aW9uIGUobixyLGkpe2lmKG4uc2VnbWVudHMubGVuZ3RoPmkubGVuZ3RoKXJldHVybiEhU3QoYT1uLnNlZ21lbnRzLnNsaWNlKDAsaS5sZW5ndGgpLGkpJiYhci5oYXNDaGlsZHJlbigpO2lmKG4uc2VnbWVudHMubGVuZ3RoPT09aS5sZW5ndGgpe2lmKCFTdChuLnNlZ21lbnRzLGkpKXJldHVybiExO2Zvcih2YXIgbyBpbiByLmNoaWxkcmVuKXtpZighbi5jaGlsZHJlbltvXSlyZXR1cm4hMTtpZighdChuLmNoaWxkcmVuW29dLHIuY2hpbGRyZW5bb10pKXJldHVybiExfXJldHVybiEwfXZhciBhPWkuc2xpY2UoMCxuLnNlZ21lbnRzLmxlbmd0aCkscz1pLnNsaWNlKG4uc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIVN0KG4uc2VnbWVudHMsYSkmJiEhbi5jaGlsZHJlblthdF0mJmUobi5jaGlsZHJlblthdF0scixzKX0oZSxuLG4uc2VnbWVudHMpfSh0LnJvb3QsZS5yb290KX12YXIgeHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnJvb3Q9dCx0aGlzLnF1ZXJ5UGFyYW1zPWUsdGhpcy5mcmFnbWVudD1ufXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9dXQodGhpcy5xdWVyeVBhcmFtcykpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSXQuc2VyaWFsaXplKHRoaXMpfSx0fSgpLE90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5zZWdtZW50cz10LHRoaXMuY2hpbGRyZW49ZSx0aGlzLnBhcmVudD1udWxsLHZ0KGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wYXJlbnQ9bn0pfXJldHVybiB0LnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJudW1iZXJPZkNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBBdCh0aGlzKX0sdH0oKSxDdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnBhdGg9dCx0aGlzLnBhcmFtZXRlcnM9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbWV0ZXJNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwfHwodGhpcy5fcGFyYW1ldGVyTWFwPXV0KHRoaXMucGFyYW1ldGVycykpLHRoaXMuX3BhcmFtZXRlck1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBEdCh0aGlzKX0sdH0oKTtmdW5jdGlvbiBTdCh0LGUpe3JldHVybiB0Lmxlbmd0aD09PWUubGVuZ3RoJiZ0LmV2ZXJ5KGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQucGF0aD09PWVbbl0ucGF0aH0pfWZ1bmN0aW9uIEV0KHQsZSl7dmFyIG49W107cmV0dXJuIHZ0KHQuY2hpbGRyZW4sZnVuY3Rpb24odCxyKXtyPT09YXQmJihuPW4uY29uY2F0KGUodCxyKSkpfSksdnQodC5jaGlsZHJlbixmdW5jdGlvbih0LHIpe3IhPT1hdCYmKG49bi5jb25jYXQoZSh0LHIpKSl9KSxufXZhciBrdD1mdW5jdGlvbigpe30sVHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgenQodCk7cmV0dXJuIG5ldyB4dChlLnBhcnNlUm9vdFNlZ21lbnQoKSxlLnBhcnNlUXVlcnlQYXJhbXMoKSxlLnBhcnNlRnJhZ21lbnQoKSl9LHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZSxuO3JldHVybiIvIitmdW5jdGlvbiB0KGUsbil7aWYoIWUuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gQXQoZSk7aWYobil7dmFyIHI9ZS5jaGlsZHJlblthdF0/dChlLmNoaWxkcmVuW2F0XSwhMSk6IiIsaT1bXTtyZXR1cm4gdnQoZS5jaGlsZHJlbixmdW5jdGlvbihlLG4pe24hPT1hdCYmaS5wdXNoKG4rIjoiK3QoZSwhMSkpfSksaS5sZW5ndGg+MD9yKyIoIitpLmpvaW4oIi8vIikrIikiOnJ9dmFyIG89RXQoZSxmdW5jdGlvbihuLHIpe3JldHVybiByPT09YXQ/W3QoZS5jaGlsZHJlblthdF0sITEpXTpbcisiOiIrdChuLCExKV19KTtyZXR1cm4gQXQoZSkrIi8oIitvLmpvaW4oIi8vIikrIikifSh0LnJvb3QsITApKyhlPXQucXVlcnlQYXJhbXMsKG49T2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPWVbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHQpKyI9IitQdChlKX0pLmpvaW4oIiYiKTpQdCh0KSsiPSIrUHQobil9KSkubGVuZ3RoPyI/IituLmpvaW4oIiYiKToiIikrKCJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudD8iIyIrZW5jb2RlVVJJKHQuZnJhZ21lbnQpOiIiKX0sdH0oKSxJdD1uZXcgVHQ7ZnVuY3Rpb24gQXQodCl7cmV0dXJuIHQuc2VnbWVudHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBEdCh0KX0pLmpvaW4oIi8iKX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiBQdCh0KXtyZXR1cm4ganQodCkucmVwbGFjZSgvJTNCL2dpLCI7Iil9ZnVuY3Rpb24gTXQodCl7cmV0dXJuIGp0KHQpLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2csIiUyOSIpLnJlcGxhY2UoLyUyNi9naSwiJiIpfWZ1bmN0aW9uIE50KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZnVuY3Rpb24gUnQodCl7cmV0dXJuIE50KHQucmVwbGFjZSgvXCsvZywiJTIwIikpfWZ1bmN0aW9uIER0KHQpe3JldHVybiIiK010KHQucGF0aCkrKGU9dC5wYXJhbWV0ZXJzLE9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iOyIrTXQodCkrIj0iK010KGVbdF0pfSkuam9pbigiIikpO3ZhciBlfXZhciBMdD0vXlteXC8oKT87PSNdKy87ZnVuY3Rpb24gRnQodCl7dmFyIGU9dC5tYXRjaChMdCk7cmV0dXJuIGU/ZVswXToiIn12YXIgVnQ9L15bXj0/JiNdKy8sVXQ9L15bXj8mI10rLyx6dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy51cmw9dCx0aGlzLnJlbWFpbmluZz10fXJldHVybiB0LnByb3RvdHlwZS5wYXJzZVJvb3RTZWdtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvIiksIiI9PT10aGlzLnJlbWFpbmluZ3x8dGhpcy5wZWVrU3RhcnRzV2l0aCgiPyIpfHx0aGlzLnBlZWtTdGFydHNXaXRoKCIjIik/bmV3IE90KFtdLHt9KTpuZXcgT3QoW10sdGhpcy5wYXJzZUNoaWxkcmVuKCkpfSx0LnByb3RvdHlwZS5wYXJzZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbSh0KX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gdH0sdC5wcm90b3R5cGUucGFyc2VGcmFnbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiIyIpP2RlY29kZVVSSUNvbXBvbmVudCh0aGlzLnJlbWFpbmluZyk6bnVsbH0sdC5wcm90b3R5cGUucGFyc2VDaGlsZHJlbj1mdW5jdGlvbigpe2lmKCIiPT09dGhpcy5yZW1haW5pbmcpcmV0dXJue307dGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKTt2YXIgdD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHx0LnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLHQucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTt2YXIgZT17fTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksZT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7dmFyIG49e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKG49dGhpcy5wYXJzZVBhcmVucyghMSkpLCh0Lmxlbmd0aD4wfHxPYmplY3Qua2V5cyhlKS5sZW5ndGg+MCkmJihuW2F0XT1uZXcgT3QodCxlKSksbn0sdC5wcm90b3R5cGUucGFyc2VTZWdtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9RnQodGhpcy5yZW1haW5pbmcpO2lmKCIiPT09dCYmdGhpcy5wZWVrU3RhcnRzV2l0aCgiOyIpKXRocm93IG5ldyBFcnJvcigiRW1wdHkgcGF0aCB1cmwgc2VnbWVudCBjYW5ub3QgaGF2ZSBwYXJhbWV0ZXJzOiAnIit0aGlzLnJlbWFpbmluZysiJy4iKTtyZXR1cm4gdGhpcy5jYXB0dXJlKHQpLG5ldyBDdChOdCh0KSx0aGlzLnBhcnNlTWF0cml4UGFyYW1zKCkpfSx0LnByb3RvdHlwZS5wYXJzZU1hdHJpeFBhcmFtcz1mdW5jdGlvbigpe2Zvcih2YXIgdD17fTt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0odCk7cmV0dXJuIHR9LHQucHJvdG90eXBlLnBhcnNlUGFyYW09ZnVuY3Rpb24odCl7dmFyIGU9RnQodGhpcy5yZW1haW5pbmcpO2lmKGUpe3RoaXMuY2FwdHVyZShlKTt2YXIgbj0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXt2YXIgcj1GdCh0aGlzLnJlbWFpbmluZyk7ciYmdGhpcy5jYXB0dXJlKG49cil9dFtOdChlKV09TnQobil9fSx0LnByb3RvdHlwZS5wYXJzZVF1ZXJ5UGFyYW09ZnVuY3Rpb24odCl7dmFyIGUsbj0oZT10aGlzLnJlbWFpbmluZy5tYXRjaChWdCkpP2VbMF06IiI7aWYobil7dGhpcy5jYXB0dXJlKG4pO3ZhciByPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe3ZhciBpPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goVXQpO3JldHVybiBlP2VbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpJiZ0aGlzLmNhcHR1cmUocj1pKX12YXIgbz1SdChuKSxhPVJ0KHIpO2lmKHQuaGFzT3duUHJvcGVydHkobykpe3ZhciBzPXRbb107QXJyYXkuaXNBcnJheShzKXx8KHRbb109cz1bc10pLHMucHVzaChhKX1lbHNlIHRbb109YX19LHQucHJvdG90eXBlLnBhcnNlUGFyZW5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih0aGlzLmNhcHR1cmUoIigiKTshdGhpcy5jb25zdW1lT3B0aW9uYWwoIikiKSYmdGhpcy5yZW1haW5pbmcubGVuZ3RoPjA7KXt2YXIgbj1GdCh0aGlzLnJlbWFpbmluZykscj10aGlzLnJlbWFpbmluZ1tuLmxlbmd0aF07aWYoIi8iIT09ciYmIikiIT09ciYmIjsiIT09cil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwYXJzZSB1cmwgJyIrdGhpcy51cmwrIiciKTt2YXIgaT12b2lkIDA7bi5pbmRleE9mKCI6Iik+LTE/KGk9bi5zdWJzdHIoMCxuLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKGkpLHRoaXMuY2FwdHVyZSgiOiIpKTp0JiYoaT1hdCk7dmFyIG89dGhpcy5wYXJzZUNoaWxkcmVuKCk7ZVtpXT0xPT09T2JqZWN0LmtleXMobykubGVuZ3RoP29bYXRdOm5ldyBPdChbXSxvKSx0aGlzLmNvbnN1bWVPcHRpb25hbCgiLy8iKX1yZXR1cm4gZX0sdC5wcm90b3R5cGUucGVla1N0YXJ0c1dpdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgodCl9LHQucHJvdG90eXBlLmNvbnN1bWVPcHRpb25hbD1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgodCkmJih0aGlzLnJlbWFpbmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcodC5sZW5ndGgpLCEwKX0sdC5wcm90b3R5cGUuY2FwdHVyZT1mdW5jdGlvbih0KXtpZighdGhpcy5jb25zdW1lT3B0aW9uYWwodCkpdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCAiJyt0KyciLicpfSx0fSgpLEJ0PWZ1bmN0aW9uKHQpe3RoaXMuc2VnbWVudEdyb3VwPXR8fG51bGx9LEh0PWZ1bmN0aW9uKHQpe3RoaXMudXJsVHJlZT10fTtmdW5jdGlvbiBXdCh0KXtyZXR1cm4gbmV3IGwuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgQnQodCkpfSl9ZnVuY3Rpb24gcXQodCl7cmV0dXJuIG5ldyBsLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IEh0KHQpKX0pfWZ1bmN0aW9uIFl0KHQpe3JldHVybiBuZXcgbC5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBFcnJvcigiT25seSBhYnNvbHV0ZSByZWRpcmVjdHMgY2FuIGhhdmUgbmFtZWQgb3V0bGV0cy4gcmVkaXJlY3RUbzogJyIrdCsiJyIpKX0pfXZhciBHdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvKXt0aGlzLmNvbmZpZ0xvYWRlcj1lLHRoaXMudXJsU2VyaWFsaXplcj1uLHRoaXMudXJsVHJlZT1yLHRoaXMuY29uZmlnPW8sdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLm5nTW9kdWxlPXQuZ2V0KGkudil9cmV0dXJuIHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5leHBhbmRTZWdtZW50R3JvdXAodGhpcy5uZ01vZHVsZSx0aGlzLmNvbmZpZyx0aGlzLnVybFRyZWUucm9vdCxhdCkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5jcmVhdGVVcmxUcmVlKGUsdC51cmxUcmVlLnF1ZXJ5UGFyYW1zLHQudXJsVHJlZS5mcmFnbWVudCl9KSkucGlwZShPYmplY3QoTi5hKShmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgSHQpcmV0dXJuIHQuYWxsb3dSZWRpcmVjdHM9ITEsdC5tYXRjaChlLnVybFRyZWUpO2lmKGUgaW5zdGFuY2VvZiBCdCl0aHJvdyB0Lm5vTWF0Y2hFcnJvcihlKTt0aHJvdyBlfSkpfSx0LnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmV4cGFuZFNlZ21lbnRHcm91cCh0aGlzLm5nTW9kdWxlLHRoaXMuY29uZmlnLHQucm9vdCxhdCkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbihuKXtyZXR1cm4gZS5jcmVhdGVVcmxUcmVlKG4sdC5xdWVyeVBhcmFtcyx0LmZyYWdtZW50KX0pKS5waXBlKE9iamVjdChOLmEpKGZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBCdCl0aHJvdyBlLm5vTWF0Y2hFcnJvcih0KTt0aHJvdyB0fSkpfSx0LnByb3RvdHlwZS5ub01hdGNoRXJyb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFcnJvcigiQ2Fubm90IG1hdGNoIGFueSByb3V0ZXMuIFVSTCBTZWdtZW50OiAnIit0LnNlZ21lbnRHcm91cCsiJyIpfSx0LnByb3RvdHlwZS5jcmVhdGVVcmxUcmVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXQuc2VnbWVudHMubGVuZ3RoPjA/bmV3IE90KFtdLCgocj17fSlbYXRdPXQscikpOnQ7cmV0dXJuIG5ldyB4dChpLGUsbil9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMD09PW4uc2VnbWVudHMubGVuZ3RoJiZuLmhhc0NoaWxkcmVuKCk/dGhpcy5leHBhbmRDaGlsZHJlbih0LGUsbikucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE90KFtdLHQpfSkpOnRoaXMuZXhwYW5kU2VnbWVudCh0LG4sZSxuLnNlZ21lbnRzLHIsITApfSx0LnByb3RvdHlwZS5leHBhbmRDaGlsZHJlbj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcztyZXR1cm4gZnVuY3Rpb24obixpKXtpZigwPT09T2JqZWN0LmtleXMobikubGVuZ3RoKXJldHVybiBPYmplY3Qocy5hKSh7fSk7dmFyIG89W10sYT1bXSx1PXt9O3JldHVybiB2dChuLGZ1bmN0aW9uKG4saSl7dmFyIHMsbCxjPShzPWksbD1uLHIuZXhwYW5kU2VnbWVudEdyb3VwKHQsZSxsLHMpKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB1W2ldPXR9KSk7aT09PWF0P28ucHVzaChjKTphLnB1c2goYyl9KSxzLmEuYXBwbHkobnVsbCxvLmNvbmNhdChhKSkucGlwZShPYmplY3QoUi5hKSgpLEEoKSxPYmplY3QoTy5hKShmdW5jdGlvbigpe3JldHVybiB1fSkpfShuLmNoaWxkcmVuKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudD1mdW5jdGlvbih0LGUsbixpLG8sYSl7dmFyIHU9dGhpcztyZXR1cm4gcy5hLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShuKSkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbihyKXtyZXR1cm4gdS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlKHQsZSxuLHIsaSxvLGEpLnBpcGUoT2JqZWN0KE4uYSkoZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEJ0KXJldHVybiBPYmplY3Qocy5hKShudWxsKTt0aHJvdyB0fSkpfSksT2JqZWN0KFIuYSkoKSx3KGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLE9iamVjdChOLmEpKGZ1bmN0aW9uKHQsbil7aWYodCBpbnN0YW5jZW9mIGN8fCJFbXB0eUVycm9yIj09PXQubmFtZSl7aWYodS5ub0xlZnRvdmVyc0luVXJsKGUsaSxvKSlyZXR1cm4gT2JqZWN0KHMuYSkobmV3IE90KFtdLHt9KSk7dGhyb3cgbmV3IEJ0KGUpfXRocm93IHR9KSl9LHQucHJvdG90eXBlLm5vTGVmdG92ZXJzSW5Vcmw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5sZW5ndGgmJiF0LmNoaWxkcmVuW25dfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEpe3JldHVybiBYdChyKSE9PW8/V3QoZSk6dm9pZCAwPT09ci5yZWRpcmVjdFRvP3RoaXMubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKHQsZSxyLGkpOmEmJnRoaXMuYWxsb3dSZWRpcmVjdHM/dGhpcy5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LGUsbixyLGksbyk6V3QoZSl9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXtyZXR1cm4iKioiPT09ci5wYXRoP3RoaXMuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LG4scixvKTp0aGlzLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LGUsbixyLGksbyl9LHQucHJvdG90eXBlLmV4cGFuZFdpbGRDYXJkV2l0aFBhcmFtc0FnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3Q9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxvPXRoaXMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKFtdLG4ucmVkaXJlY3RUbyx7fSk7cmV0dXJuIG4ucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/cXQobyk6dGhpcy5saW5lcmFsaXplU2VnbWVudHMobixvKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKG4pe3ZhciBvPW5ldyBPdChuLHt9KTtyZXR1cm4gaS5leHBhbmRTZWdtZW50KHQsbyxlLG4sciwhMSl9KSl9LHQucHJvdG90eXBlLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9dGhpcyxzPVF0KGUscixpKSx1PXMuY29uc3VtZWRTZWdtZW50cyxsPXMubGFzdENoaWxkLGM9cy5wb3NpdGlvbmFsUGFyYW1TZWdtZW50cztpZighcy5tYXRjaGVkKXJldHVybiBXdChlKTt2YXIgZj10aGlzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyh1LHIucmVkaXJlY3RUbyxjKTtyZXR1cm4gci5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKT9xdChmKTp0aGlzLmxpbmVyYWxpemVTZWdtZW50cyhyLGYpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24ocil7cmV0dXJuIGEuZXhwYW5kU2VnbWVudCh0LGUsbixyLmNvbmNhdChpLnNsaWNlKGwpKSxvLCExKX0pKX0sdC5wcm90b3R5cGUubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvPXRoaXM7aWYoIioqIj09PW4ucGF0aClyZXR1cm4gbi5sb2FkQ2hpbGRyZW4/dGhpcy5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLG4pLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24odCl7cmV0dXJuIG4uX2xvYWRlZENvbmZpZz10LG5ldyBPdChpLHt9KX0pKTpPYmplY3Qocy5hKShuZXcgT3QoaSx7fSkpO3ZhciBhPVF0KGUsbixpKSx1PWEuY29uc3VtZWRTZWdtZW50cyxsPWEubGFzdENoaWxkO2lmKCFhLm1hdGNoZWQpcmV0dXJuIFd0KGUpO3ZhciBjPWkuc2xpY2UobCk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb25maWcodCxuKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHQpe3ZhciBuPXQubW9kdWxlLGk9dC5yb3V0ZXMsYT1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gbi5sZW5ndGg+MCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIFp0KHQsZSxuKSYmWHQobikhPT1hdH0pfSh0LG4pP3tzZWdtZW50R3JvdXA6S3QobmV3IE90KGUsZnVuY3Rpb24odCxlKXt2YXIgbixpLG89e307b1thdF09ZTt0cnl7Zm9yKHZhciBhPU9iamVjdChyLmUpKHQpLHM9YS5uZXh0KCk7IXMuZG9uZTtzPWEubmV4dCgpKXt2YXIgdT1zLnZhbHVlOyIiPT09dS5wYXRoJiZYdCh1KSE9PWF0JiYob1tYdCh1KV09bmV3IE90KFtdLHt9KSl9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihpPWEucmV0dXJuKSYmaS5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gb30oaSxuZXcgT3Qobix0LmNoaWxkcmVuKSkpKSxzbGljZWRTZWdtZW50czpbXX06MD09PW4ubGVuZ3RoJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIGkuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gWnQodCxlLG4pfSl9KHQsbik/e3NlZ21lbnRHcm91cDpLdChuZXcgT3QodC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixpKXt2YXIgbyxhLHM9e307dHJ5e2Zvcih2YXIgdT1PYmplY3Qoci5lKShuKSxsPXUubmV4dCgpOyFsLmRvbmU7bD11Lm5leHQoKSl7dmFyIGM9bC52YWx1ZTtadCh0LGUsYykmJiFpW1h0KGMpXSYmKHNbWHQoYyldPW5ldyBPdChbXSx7fSkpfX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtsJiYhbC5kb25lJiYoYT11LnJldHVybikmJmEuY2FsbCh1KX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIE9iamVjdChyLmEpKHt9LGkscyl9KHQsbixpLHQuY2hpbGRyZW4pKSksc2xpY2VkU2VnbWVudHM6bn06e3NlZ21lbnRHcm91cDp0LHNsaWNlZFNlZ21lbnRzOm59fShlLHUsYyxpKSxsPWEuc2VnbWVudEdyb3VwLGY9YS5zbGljZWRTZWdtZW50cztyZXR1cm4gMD09PWYubGVuZ3RoJiZsLmhhc0NoaWxkcmVuKCk/by5leHBhbmRDaGlsZHJlbihuLGksbCkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE90KHUsdCl9KSk6MD09PWkubGVuZ3RoJiYwPT09Zi5sZW5ndGg/T2JqZWN0KHMuYSkobmV3IE90KHUse30pKTpvLmV4cGFuZFNlZ21lbnQobixsLGksZixhdCwhMCkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE90KHUuY29uY2F0KHQuc2VnbWVudHMpLHQuY2hpbGRyZW4pfSkpfSkpfSx0LnByb3RvdHlwZS5nZXRDaGlsZENvbmZpZz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIGUuY2hpbGRyZW4/T2JqZWN0KHMuYSkobmV3IGN0KGUuY2hpbGRyZW4sdCkpOmUubG9hZENoaWxkcmVuP3ZvaWQgMCE9PWUuX2xvYWRlZENvbmZpZz9PYmplY3Qocy5hKShlLl9sb2FkZWRDb25maWcpOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jYW5Mb2FkO3JldHVybiBuJiYwIT09bi5sZW5ndGg/YnQoT2JqZWN0KGEuYSkobikucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbihuKXt2YXIgcj10LmdldChuKTtyZXR1cm4gX3Qoci5jYW5Mb2FkP3IuY2FuTG9hZChlKTpyKGUpKX0pKSk6T2JqZWN0KHMuYSkoITApfSh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24ocil7cmV0dXJuIHI/bi5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LHR9KSk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBsLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IoKChuPUVycm9yKCJOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6IENhbm5vdCBsb2FkIGNoaWxkcmVuIGJlY2F1c2UgdGhlIGd1YXJkIG9mIHRoZSByb3V0ZSBcInBhdGg6ICciK3QucGF0aCsiJ1wiIHJldHVybmVkIGZhbHNlIikpLm5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yPSEwLG4pKTt2YXIgbn0pfShlKX0pKTpPYmplY3Qocy5hKShuZXcgY3QoW10sdCkpfSx0LnByb3RvdHlwZS5saW5lcmFsaXplU2VnbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10scj1lLnJvb3Q7Oyl7aWYobj1uLmNvbmNhdChyLnNlZ21lbnRzKSwwPT09ci5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBPYmplY3Qocy5hKShuKTtpZihyLm51bWJlck9mQ2hpbGRyZW4+MXx8IXIuY2hpbGRyZW5bYXRdKXJldHVybiBZdCh0LnJlZGlyZWN0VG8pO3I9ci5jaGlsZHJlblthdF19fSx0LnByb3RvdHlwZS5hcHBseVJlZGlyZWN0Q29tbWFuZHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmFwcGx5UmVkaXJlY3RDcmVhdHJlVXJsVHJlZShlLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShlKSx0LG4pfSx0LnByb3RvdHlwZS5hcHBseVJlZGlyZWN0Q3JlYXRyZVVybFRyZWU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAodCxlLnJvb3QsbixyKTtyZXR1cm4gbmV3IHh0KGksdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhlLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksZS5mcmFnbWVudCl9LHQucHJvdG90eXBlLmNyZWF0ZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIHZ0KHQsZnVuY3Rpb24odCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQuc3RhcnRzV2l0aCgiOiIpKXt2YXIgaT10LnN1YnN0cmluZygxKTtuW3JdPWVbaV19ZWxzZSBuW3JdPXR9KSxufSx0LnByb3RvdHlwZS5jcmVhdGVTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxvPXRoaXMuY3JlYXRlU2VnbWVudHModCxlLnNlZ21lbnRzLG4sciksYT17fTtyZXR1cm4gdnQoZS5jaGlsZHJlbixmdW5jdGlvbihlLG8pe2Fbb109aS5jcmVhdGVTZWdtZW50R3JvdXAodCxlLG4scil9KSxuZXcgT3QobyxhKX0sdC5wcm90b3R5cGUuY3JlYXRlU2VnbWVudHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcztyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGF0aC5zdGFydHNXaXRoKCI6Iik/aS5maW5kUG9zUGFyYW0odCxlLHIpOmkuZmluZE9yUmV0dXJuKGUsbil9KX0sdC5wcm90b3R5cGUuZmluZFBvc1BhcmFtPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uW2UucGF0aC5zdWJzdHJpbmcoMSldO2lmKCFyKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZGlyZWN0IHRvICciK3QrIicuIENhbm5vdCBmaW5kICciK2UucGF0aCsiJy4iKTtyZXR1cm4gcn0sdC5wcm90b3R5cGUuZmluZE9yUmV0dXJuPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxvPTA7dHJ5e2Zvcih2YXIgYT1PYmplY3Qoci5lKShlKSxzPWEubmV4dCgpOyFzLmRvbmU7cz1hLm5leHQoKSl7dmFyIHU9cy52YWx1ZTtpZih1LnBhdGg9PT10LnBhdGgpcmV0dXJuIGUuc3BsaWNlKG8pLHU7bysrfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYoaT1hLnJldHVybikmJmkuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gUXQodCxlLG4pe2lmKCIiPT09ZS5wYXRoKXJldHVybiJmdWxsIj09PWUucGF0aE1hdGNoJiYodC5oYXNDaGlsZHJlbigpfHxuLmxlbmd0aD4wKT97bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTp7bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTt2YXIgcj0oZS5tYXRjaGVyfHxsdCkobix0LGUpO3JldHVybiByP3ttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6ci5jb25zdW1lZCxsYXN0Q2hpbGQ6ci5jb25zdW1lZC5sZW5ndGgscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6ci5wb3NQYXJhbXN9OnttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319fWZ1bmN0aW9uIEt0KHQpe2lmKDE9PT10Lm51bWJlck9mQ2hpbGRyZW4mJnQuY2hpbGRyZW5bYXRdKXt2YXIgZT10LmNoaWxkcmVuW2F0XTtyZXR1cm4gbmV3IE90KHQuc2VnbWVudHMuY29uY2F0KGUuc2VnbWVudHMpLGUuY2hpbGRyZW4pfXJldHVybiB0fWZ1bmN0aW9uIFp0KHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDAhPT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gWHQodCl7cmV0dXJuIHQub3V0bGV0fHxhdH12YXIgJHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3Jvb3Q9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3QudmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGF0aEZyb21Sb290KHQpO3JldHVybiBlLmxlbmd0aD4xP2VbZS5sZW5ndGgtMl06bnVsbH0sdC5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7dmFyIGU9SnQodCx0aGlzLl9yb290KTtyZXR1cm4gZT9lLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pOltdfSx0LnByb3RvdHlwZS5maXJzdENoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPUp0KHQsdGhpcy5fcm9vdCk7cmV0dXJuIGUmJmUuY2hpbGRyZW4ubGVuZ3RoPjA/ZS5jaGlsZHJlblswXS52YWx1ZTpudWxsfSx0LnByb3RvdHlwZS5zaWJsaW5ncz1mdW5jdGlvbih0KXt2YXIgZT10ZSh0LHRoaXMuX3Jvb3QpO3JldHVybiBlLmxlbmd0aDwyP1tdOmVbZS5sZW5ndGgtMl0uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pfSx0LnByb3RvdHlwZS5wYXRoRnJvbVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRlKHQsdGhpcy5fcm9vdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LHR9KCk7ZnVuY3Rpb24gSnQodCxlKXtpZih0PT09ZS52YWx1ZSlyZXR1cm4gZTt0cnl7Zm9yKHZhciBuPU9iamVjdChyLmUpKGUuY2hpbGRyZW4pLGk9bi5uZXh0KCk7IWkuZG9uZTtpPW4ubmV4dCgpKXt2YXIgbz1KdCh0LGkudmFsdWUpO2lmKG8pcmV0dXJuIG99fWNhdGNoKHQpe2E9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2kmJiFpLmRvbmUmJihzPW4ucmV0dXJuKSYmcy5jYWxsKG4pfWZpbmFsbHl7aWYoYSl0aHJvdyBhLmVycm9yfX1yZXR1cm4gbnVsbDt2YXIgYSxzfWZ1bmN0aW9uIHRlKHQsZSl7aWYodD09PWUudmFsdWUpcmV0dXJuW2VdO3RyeXtmb3IodmFyIG49T2JqZWN0KHIuZSkoZS5jaGlsZHJlbiksaT1uLm5leHQoKTshaS5kb25lO2k9bi5uZXh0KCkpe3ZhciBvPXRlKHQsaS52YWx1ZSk7aWYoby5sZW5ndGgpcmV0dXJuIG8udW5zaGlmdChlKSxvfX1jYXRjaCh0KXthPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYocz1uLnJldHVybikmJnMuY2FsbChuKX1maW5hbGx5e2lmKGEpdGhyb3cgYS5lcnJvcn19cmV0dXJuW107dmFyIGEsc312YXIgZWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuY2hpbGRyZW49ZX1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iVHJlZU5vZGUoIit0aGlzLnZhbHVlKyIpIn0sdH0oKTtmdW5jdGlvbiBuZSh0KXt2YXIgZT17fTtyZXR1cm4gdCYmdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3QudmFsdWUub3V0bGV0XT10fSksZX12YXIgcmU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnNuYXBzaG90PW4sbGUocixlKSxyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX0sZX0oJHQpO2Z1bmN0aW9uIGllKHQsZSl7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgc2UoW10se30se30sIiIse30sYXQsZSxudWxsLHQucm9vdCwtMSx7fSk7cmV0dXJuIG5ldyB1ZSgiIixuZXcgZWUobixbXSkpfSh0LGUpLHI9bmV3IG8uYShbbmV3IEN0KCIiLHt9KV0pLGk9bmV3IG8uYSh7fSksYT1uZXcgby5hKHt9KSxzPW5ldyBvLmEoe30pLHU9bmV3IG8uYSgiIiksbD1uZXcgb2UocixpLHMsdSxhLGF0LGUsbi5yb290KTtyZXR1cm4gbC5zbmFwc2hvdD1uLnJvb3QsbmV3IHJlKG5ldyBlZShsLFtdKSxuKX12YXIgb2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyl7dGhpcy51cmw9dCx0aGlzLnBhcmFtcz1lLHRoaXMucXVlcnlQYXJhbXM9bix0aGlzLmZyYWdtZW50PXIsdGhpcy5kYXRhPWksdGhpcy5vdXRsZXQ9byx0aGlzLmNvbXBvbmVudD1hLHRoaXMuX2Z1dHVyZVNuYXBzaG90PXN9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm91dGVDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXRoRnJvbVJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD10aGlzLnBhcmFtcy5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB1dCh0KX0pKSksdGhpcy5fcGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPXRoaXMucXVlcnlQYXJhbXMucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdXQodCl9KSkpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6IkZ1dHVyZSgiK3RoaXMuX2Z1dHVyZVNuYXBzaG90KyIpIn0sdH0oKTtmdW5jdGlvbiBhZSh0LGUpe3ZvaWQgMD09PWUmJihlPSJlbXB0eU9ubHkiKTt2YXIgbj10LnBhdGhGcm9tUm9vdCxpPTA7aWYoImFsd2F5cyIhPT1lKWZvcihpPW4ubGVuZ3RoLTE7aT49MTspe3ZhciBvPW5baV0sYT1uW2ktMV07aWYoby5yb3V0ZUNvbmZpZyYmIiI9PT1vLnJvdXRlQ29uZmlnLnBhdGgpaS0tO2Vsc2V7aWYoYS5jb21wb25lbnQpYnJlYWs7aS0tfX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3BhcmFtczpPYmplY3Qoci5hKSh7fSx0LnBhcmFtcyxlLnBhcmFtcyksZGF0YTpPYmplY3Qoci5hKSh7fSx0LmRhdGEsZS5kYXRhKSxyZXNvbHZlOk9iamVjdChyLmEpKHt9LHQucmVzb2x2ZSxlLl9yZXNvbHZlZERhdGEpfX0se3BhcmFtczp7fSxkYXRhOnt9LHJlc29sdmU6e319KX0obi5zbGljZShpKSl9dmFyIHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyxhLHMsdSxsLGMpe3RoaXMudXJsPXQsdGhpcy5wYXJhbXM9ZSx0aGlzLnF1ZXJ5UGFyYW1zPW4sdGhpcy5mcmFnbWVudD1yLHRoaXMuZGF0YT1pLHRoaXMub3V0bGV0PW8sdGhpcy5jb21wb25lbnQ9YSx0aGlzLnJvdXRlQ29uZmlnPXMsdGhpcy5fdXJsU2VnbWVudD11LHRoaXMuX2xhc3RQYXRoSW5kZXg9bCx0aGlzLl9yZXNvbHZlPWN9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Q2hpbGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aEZyb21Sb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dXQodGhpcy5wYXJhbXMpKSx0aGlzLl9wYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9dXQodGhpcy5xdWVyeVBhcmFtcykpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGUodXJsOiciK3RoaXMudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpKyInLCBwYXRoOiciKyh0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIikrIicpIn0sdH0oKSx1ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsbil8fHRoaXM7cmV0dXJuIHIudXJsPWUsbGUocixuKSxyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGNlKHRoaXMuX3Jvb3QpfSxlfSgkdCk7ZnVuY3Rpb24gbGUodCxlKXtlLnZhbHVlLl9yb3V0ZXJTdGF0ZT10LGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbGUodCxlKX0pfWZ1bmN0aW9uIGNlKHQpe3ZhciBlPXQuY2hpbGRyZW4ubGVuZ3RoPjA/IiB7ICIrdC5jaGlsZHJlbi5tYXAoY2UpLmpvaW4oIiwgIikrIiB9ICI6IiI7cmV0dXJuIiIrdC52YWx1ZStlfWZ1bmN0aW9uIGZlKHQpe2lmKHQuc25hcHNob3Qpe3ZhciBlPXQuc25hcHNob3Qsbj10Ll9mdXR1cmVTbmFwc2hvdDt0LnNuYXBzaG90PW4sbXQoZS5xdWVyeVBhcmFtcyxuLnF1ZXJ5UGFyYW1zKXx8dC5xdWVyeVBhcmFtcy5uZXh0KG4ucXVlcnlQYXJhbXMpLGUuZnJhZ21lbnQhPT1uLmZyYWdtZW50JiZ0LmZyYWdtZW50Lm5leHQobi5mcmFnbWVudCksbXQoZS5wYXJhbXMsbi5wYXJhbXMpfHx0LnBhcmFtcy5uZXh0KG4ucGFyYW1zKSxmdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24paWYoIW10KHRbbl0sZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9KGUudXJsLG4udXJsKXx8dC51cmwubmV4dChuLnVybCksbXQoZS5kYXRhLG4uZGF0YSl8fHQuZGF0YS5uZXh0KG4uZGF0YSl9ZWxzZSB0LnNuYXBzaG90PXQuX2Z1dHVyZVNuYXBzaG90LHQuZGF0YS5uZXh0KHQuX2Z1dHVyZVNuYXBzaG90LmRhdGEpfWZ1bmN0aW9uIGhlKHQsZSl7dmFyIG4scjtyZXR1cm4gbXQodC5wYXJhbXMsZS5wYXJhbXMpJiZTdChuPXQudXJsLHI9ZS51cmwpJiZuLmV2ZXJ5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG10KHQucGFyYW1ldGVycyxyW2VdLnBhcmFtZXRlcnMpfSkmJiEoIXQucGFyZW50IT0hZS5wYXJlbnQpJiYoIXQucGFyZW50fHxoZSh0LnBhcmVudCxlLnBhcmVudCkpfWZ1bmN0aW9uIGRlKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmIXQub3V0bGV0cyYmIXQuc2VnbWVudFBhdGh9ZnVuY3Rpb24gcGUodCxlLG4scixpKXt2YXIgbz17fTtyZXR1cm4gciYmdnQocixmdW5jdGlvbih0LGUpe29bZV09QXJyYXkuaXNBcnJheSh0KT90Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4iIit0fSk6IiIrdH0pLG5ldyB4dChuLnJvb3Q9PT10P2U6ZnVuY3Rpb24gdChlLG4scil7dmFyIGk9e307cmV0dXJuIHZ0KGUuY2hpbGRyZW4sZnVuY3Rpb24oZSxvKXtpW29dPWU9PT1uP3I6dChlLG4scil9KSxuZXcgT3QoZS5zZWdtZW50cyxpKX0obi5yb290LHQsZSksbyxpKX12YXIgbWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXtpZih0aGlzLmlzQWJzb2x1dGU9dCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1lLHRoaXMuY29tbWFuZHM9bix0JiZuLmxlbmd0aD4wJiZkZShuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlJvb3Qgc2VnbWVudCBjYW5ub3QgaGF2ZSBtYXRyaXggcGFyYW1ldGVycyIpO3ZhciByPW4uZmluZChmdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJnQub3V0bGV0c30pO2lmKHImJnIhPT1ndChuKSl0aHJvdyBuZXcgRXJyb3IoIntvdXRsZXRzOnt9fSBoYXMgdG8gYmUgdGhlIGxhc3QgY29tbWFuZCIpfXJldHVybiB0LnByb3RvdHlwZS50b1Jvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Fic29sdXRlJiYxPT09dGhpcy5jb21tYW5kcy5sZW5ndGgmJiIvIj09dGhpcy5jb21tYW5kc1swXX0sdH0oKSx5ZT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZWdtZW50R3JvdXA9dCx0aGlzLnByb2Nlc3NDaGlsZHJlbj1lLHRoaXMuaW5kZXg9bn07ZnVuY3Rpb24gZ2UodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiZ0Lm91dGxldHM/dC5vdXRsZXRzW2F0XToiIit0fWZ1bmN0aW9uIHZlKHQsZSxuKXtpZih0fHwodD1uZXcgT3QoW10se30pKSwwPT09dC5zZWdtZW50cy5sZW5ndGgmJnQuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gYmUodCxlLG4pO3ZhciByPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MCxpPWUsbz17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O2k8dC5zZWdtZW50cy5sZW5ndGg7KXtpZihyPj1uLmxlbmd0aClyZXR1cm4gbzt2YXIgYT10LnNlZ21lbnRzW2ldLHM9Z2UobltyXSksdT1yPG4ubGVuZ3RoLTE/bltyKzFdOm51bGw7aWYoaT4wJiZ2b2lkIDA9PT1zKWJyZWFrO2lmKHMmJnUmJiJvYmplY3QiPT10eXBlb2YgdSYmdm9pZCAwPT09dS5vdXRsZXRzKXtpZighT2Uocyx1LGEpKXJldHVybiBvO3IrPTJ9ZWxzZXtpZighT2Uocyx7fSxhKSlyZXR1cm4gbztyKyt9aSsrfXJldHVybnttYXRjaDohMCxwYXRoSW5kZXg6aSxjb21tYW5kSW5kZXg6cn19KHQsZSxuKSxpPW4uc2xpY2Uoci5jb21tYW5kSW5kZXgpO2lmKHIubWF0Y2gmJnIucGF0aEluZGV4PHQuc2VnbWVudHMubGVuZ3RoKXt2YXIgbz1uZXcgT3QodC5zZWdtZW50cy5zbGljZSgwLHIucGF0aEluZGV4KSx7fSk7cmV0dXJuIG8uY2hpbGRyZW5bYXRdPW5ldyBPdCh0LnNlZ21lbnRzLnNsaWNlKHIucGF0aEluZGV4KSx0LmNoaWxkcmVuKSxiZShvLDAsaSl9cmV0dXJuIHIubWF0Y2gmJjA9PT1pLmxlbmd0aD9uZXcgT3QodC5zZWdtZW50cyx7fSk6ci5tYXRjaCYmIXQuaGFzQ2hpbGRyZW4oKT9fZSh0LGUsbik6ci5tYXRjaD9iZSh0LDAsaSk6X2UodCxlLG4pfWZ1bmN0aW9uIGJlKHQsZSxuKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG5ldyBPdCh0LnNlZ21lbnRzLHt9KTt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIHRbMF0/KChlPXt9KVthdF09dCxlKTp2b2lkIDA9PT10WzBdLm91dGxldHM/KChuPXt9KVthdF09dCxuKTp0WzBdLm91dGxldHM7dmFyIGUsbn0obiksaT17fTtyZXR1cm4gdnQocixmdW5jdGlvbihuLHIpe251bGwhPT1uJiYoaVtyXT12ZSh0LmNoaWxkcmVuW3JdLGUsbikpfSksdnQodC5jaGlsZHJlbixmdW5jdGlvbih0LGUpe3ZvaWQgMD09PXJbZV0mJihpW2VdPXQpfSksbmV3IE90KHQuc2VnbWVudHMsaSl9ZnVuY3Rpb24gX2UodCxlLG4pe2Zvcih2YXIgcj10LnNlZ21lbnRzLnNsaWNlKDAsZSksaT0wO2k8bi5sZW5ndGg7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5baV0mJnZvaWQgMCE9PW5baV0ub3V0bGV0cyl7dmFyIG89d2UobltpXS5vdXRsZXRzKTtyZXR1cm4gbmV3IE90KHIsbyl9aWYoMD09PWkmJmRlKG5bMF0pKXIucHVzaChuZXcgQ3QodC5zZWdtZW50c1tlXS5wYXRoLG5bMF0pKSxpKys7ZWxzZXt2YXIgYT1nZShuW2ldKSxzPWk8bi5sZW5ndGgtMT9uW2krMV06bnVsbDthJiZzJiZkZShzKT8oci5wdXNoKG5ldyBDdChhLHhlKHMpKSksaSs9Mik6KHIucHVzaChuZXcgQ3QoYSx7fSkpLGkrKyl9fXJldHVybiBuZXcgT3Qocix7fSl9ZnVuY3Rpb24gd2UodCl7dmFyIGU9e307cmV0dXJuIHZ0KHQsZnVuY3Rpb24odCxuKXtudWxsIT09dCYmKGVbbl09X2UobmV3IE90KFtdLHt9KSwwLHQpKX0pLGV9ZnVuY3Rpb24geGUodCl7dmFyIGU9e307cmV0dXJuIHZ0KHQsZnVuY3Rpb24odCxuKXtyZXR1cm4gZVtuXT0iIit0fSksZX1mdW5jdGlvbiBPZSh0LGUsbil7cmV0dXJuIHQ9PW4ucGF0aCYmbXQoZSxuLnBhcmFtZXRlcnMpfXZhciBDZT1mdW5jdGlvbih0KXt0aGlzLnBhdGg9dCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoLTFdfSxTZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcG9uZW50PXQsdGhpcy5yb3V0ZT1lfSxFZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5mdXR1cmU9dCx0aGlzLmN1cnI9ZSx0aGlzLm1vZHVsZUluamVjdG9yPW4sdGhpcy5mb3J3YXJkRXZlbnQ9cix0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzPVtdLHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcz1bXX1yZXR1cm4gdC5wcm90b3R5cGUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1dHVyZS5fcm9vdDt0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyhlLHRoaXMuY3Vycj90aGlzLmN1cnIuX3Jvb3Q6bnVsbCx0LFtlLnZhbHVlXSl9LHQucHJvdG90eXBlLmNoZWNrR3VhcmRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pc0RlYWN0aXZhdGluZygpfHx0aGlzLmlzQWN0aXZhdGluZygpP3RoaXMucnVuQ2FuRGVhY3RpdmF0ZUNoZWNrcygpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGU/dC5ydW5DYW5BY3RpdmF0ZUNoZWNrcygpOk9iamVjdChzLmEpKCExKX0pKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJlc29sdmVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaXNBY3RpdmF0aW5nKCk/T2JqZWN0KGEuYSkodGhpcy5jYW5BY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoQy5hKShmdW5jdGlvbihuKXtyZXR1cm4gZS5ydW5SZXNvbHZlKG4ucm91dGUsdCl9KSxmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0yP2Z1bmN0aW9uKG4pe3JldHVybiBPYmplY3QoVS5hKShMKHQsZSksaygxKSxwKGUpKShuKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChVLmEpKEwoZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KGUsbixyKzEpfSksaygxKSkoZSl9fShmdW5jdGlvbih0LGUpe3JldHVybiB0fSkpOk9iamVjdChzLmEpKG51bGwpfSx0LnByb3RvdHlwZS5pc0RlYWN0aXZhdGluZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLmxlbmd0aH0sdC5wcm90b3R5cGUuaXNBY3RpdmF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLmxlbmd0aH0sdC5wcm90b3R5cGUuc2V0dXBDaGlsZFJvdXRlR3VhcmRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsbz1uZShlKTt0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7aS5zZXR1cFJvdXRlR3VhcmRzKHQsb1t0LnZhbHVlLm91dGxldF0sbixyLmNvbmNhdChbdC52YWx1ZV0pKSxkZWxldGUgb1t0LnZhbHVlLm91dGxldF19KSx2dChvLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxuLmdldENvbnRleHQoZSkpfSl9LHQucHJvdG90eXBlLnNldHVwUm91dGVHdWFyZHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC52YWx1ZSxvPWU/ZS52YWx1ZTpudWxsLGE9bj9uLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpOm51bGw7aWYobyYmaS5yb3V0ZUNvbmZpZz09PW8ucm91dGVDb25maWcpe3ZhciBzPXRoaXMuc2hvdWxkUnVuR3VhcmRzQW5kUmVzb2x2ZXJzKG8saSxpLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7cz90aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IENlKHIpKTooaS5kYXRhPW8uZGF0YSxpLl9yZXNvbHZlZERhdGE9by5fcmVzb2x2ZWREYXRhKSx0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyh0LGUsaS5jb21wb25lbnQ/YT9hLmNoaWxkcmVuOm51bGw6bixyKSxzJiZ0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgU2UoYS5vdXRsZXQuY29tcG9uZW50LG8pKX1lbHNlIG8mJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oZSxhKSx0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IENlKHIpKSx0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyh0LG51bGwsaS5jb21wb25lbnQ/YT9hLmNoaWxkcmVuOm51bGw6bixyKX0sdC5wcm90b3R5cGUuc2hvdWxkUnVuR3VhcmRzQW5kUmVzb2x2ZXJzPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2gobil7Y2FzZSJhbHdheXMiOnJldHVybiEwO2Nhc2UicGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIWhlKHQsZSl8fCFtdCh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpO2Nhc2UicGFyYW1zQ2hhbmdlIjpkZWZhdWx0OnJldHVybiFoZSh0LGUpfX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bmUodCksaT10LnZhbHVlO3Z0KHIsZnVuY3Rpb24odCxyKXtuLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsaS5jb21wb25lbnQ/ZT9lLmNoaWxkcmVuLmdldENvbnRleHQocik6bnVsbDplKX0pLHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBTZShpLmNvbXBvbmVudCYmZSYmZS5vdXRsZXQmJmUub3V0bGV0LmlzQWN0aXZhdGVkP2Uub3V0bGV0LmNvbXBvbmVudDpudWxsLGkpKX0sdC5wcm90b3R5cGUucnVuQ2FuRGVhY3RpdmF0ZUNoZWNrcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIE9iamVjdChhLmEpKHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5ydW5DYW5EZWFjdGl2YXRlKGUuY29tcG9uZW50LGUucm91dGUpfSksaihmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlQ2hlY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gT2JqZWN0KGEuYSkodGhpcy5jYW5BY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoQy5hKShmdW5jdGlvbihlKXtyZXR1cm4gYnQoT2JqZWN0KGEuYSkoW3QuZmlyZUNoaWxkQWN0aXZhdGlvblN0YXJ0KGUucm91dGUucGFyZW50KSx0LmZpcmVBY3RpdmF0aW9uU3RhcnQoZS5yb3V0ZSksdC5ydW5DYW5BY3RpdmF0ZUNoaWxkKGUucGF0aCksdC5ydW5DYW5BY3RpdmF0ZShlLnJvdXRlKV0pKX0pLGooZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfSx0LnByb3RvdHlwZS5maXJlQWN0aXZhdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dCYmdGhpcy5mb3J3YXJkRXZlbnQmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBydCh0KSksT2JqZWN0KHMuYSkoITApfSx0LnByb3RvdHlwZS5maXJlQ2hpbGRBY3RpdmF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10JiZ0aGlzLmZvcndhcmRFdmVudCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IGV0KHQpKSxPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnJvdXRlQ29uZmlnP3Qucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtyZXR1cm4gbiYmMCE9PW4ubGVuZ3RoP2J0KE9iamVjdChhLmEpKG4pLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24obil7dmFyIHI9ZS5nZXRUb2tlbihuLHQpO3JldHVybiBfdChyLmNhbkFjdGl2YXRlP3IuY2FuQWN0aXZhdGUodCxlLmZ1dHVyZSk6cih0LGUuZnV0dXJlKSkucGlwZSh3KCkpfSkpKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlQ2hpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRbdC5sZW5ndGgtMV0scj10LnNsaWNlKDAsdC5sZW5ndGgtMSkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5leHRyYWN0Q2FuQWN0aXZhdGVDaGlsZCh0KX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXR9KTtyZXR1cm4gYnQoT2JqZWN0KGEuYSkocikucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gYnQoT2JqZWN0KGEuYSkodC5ndWFyZHMpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24ocil7dmFyIGk9ZS5nZXRUb2tlbihyLHQubm9kZSk7cmV0dXJuIF90KGkuY2FuQWN0aXZhdGVDaGlsZD9pLmNhbkFjdGl2YXRlQ2hpbGQobixlLmZ1dHVyZSk6aShuLGUuZnV0dXJlKSkucGlwZSh3KCkpfSkpKX0pKSl9LHQucHJvdG90eXBlLmV4dHJhY3RDYW5BY3RpdmF0ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm91dGVDb25maWc/dC5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkOm51bGw7cmV0dXJuIGUmJjAhPT1lLmxlbmd0aD97bm9kZTp0LGd1YXJkczplfTpudWxsfSx0LnByb3RvdHlwZS5ydW5DYW5EZWFjdGl2YXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUmJmUucm91dGVDb25maWc/ZS5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7cmV0dXJuIHImJjAhPT1yLmxlbmd0aD9PYmplY3QoYS5hKShyKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHIpe3ZhciBpPW4uZ2V0VG9rZW4ocixlKTtyZXR1cm4gX3QoaS5jYW5EZWFjdGl2YXRlP2kuY2FuRGVhY3RpdmF0ZSh0LGUsbi5jdXJyLG4uZnV0dXJlKTppKHQsZSxuLmN1cnIsbi5mdXR1cmUpKS5waXBlKHcoKSl9KSkucGlwZShqKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1blJlc29sdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXNvbHZlTm9kZSh0Ll9yZXNvbHZlLHQpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24obil7cmV0dXJuIHQuX3Jlc29sdmVkRGF0YT1uLHQuZGF0YT1PYmplY3Qoci5hKSh7fSx0LmRhdGEsYWUodCxlKS5yZXNvbHZlKSxudWxsfSkpfSx0LnByb3RvdHlwZS5yZXNvbHZlTm9kZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1PYmplY3Qua2V5cyh0KTtpZigwPT09ci5sZW5ndGgpcmV0dXJuIE9iamVjdChzLmEpKHt9KTtpZigxPT09ci5sZW5ndGgpe3ZhciBpPXJbMF07cmV0dXJuIHRoaXMuZ2V0UmVzb2x2ZXIodFtpXSxlKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe3JldHVybihlPXt9KVtpXT10LGU7dmFyIGV9KSl9dmFyIG89e307cmV0dXJuIE9iamVjdChhLmEpKHIpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24ocil7cmV0dXJuIG4uZ2V0UmVzb2x2ZXIodFtyXSxlKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBvW3JdPXQsdH0pKX0pKS5waXBlKEEoKSxPYmplY3QoTy5hKShmdW5jdGlvbigpe3JldHVybiBvfSkpfSx0LnByb3RvdHlwZS5nZXRSZXNvbHZlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZ2V0VG9rZW4odCxlKTtyZXR1cm4gX3Qobi5yZXNvbHZlP24ucmVzb2x2ZShlLHRoaXMuZnV0dXJlKTpuKGUsdGhpcy5mdXR1cmUpKX0sdC5wcm90b3R5cGUuZ2V0VG9rZW49ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQ7ZTtlPWUucGFyZW50KXt2YXIgbj1lLnJvdXRlQ29uZmlnO2lmKG4mJm4uX2xvYWRlZENvbmZpZylyZXR1cm4gbi5fbG9hZGVkQ29uZmlnfXJldHVybiBudWxsfShlKTtyZXR1cm4obj9uLm1vZHVsZS5pbmplY3Rvcjp0aGlzLm1vZHVsZUluamVjdG9yKS5nZXQodCl9LHR9KCksa2U9ZnVuY3Rpb24oKXt9LFRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3RoaXMucm9vdENvbXBvbmVudFR5cGU9dCx0aGlzLmNvbmZpZz1lLHRoaXMudXJsVHJlZT1uLHRoaXMudXJsPXIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PWl9cmV0dXJuIHQucHJvdG90eXBlLnJlY29nbml6ZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1qZSh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwLGU9dGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKHRoaXMuY29uZmlnLHQsYXQpLG49bmV3IHNlKFtdLE9iamVjdC5mcmVlemUoe30pLE9iamVjdC5mcmVlemUoT2JqZWN0KHIuYSkoe30sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGF0LHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx0aGlzLnVybFRyZWUucm9vdCwtMSx7fSksaT1uZXcgZWUobixlKSxvPW5ldyB1ZSh0aGlzLnVybCxpKTtyZXR1cm4gdGhpcy5pbmhlcml0UGFyYW1zQW5kRGF0YShvLl9yb290KSxPYmplY3Qocy5hKShvKX1jYXRjaCh0KXtyZXR1cm4gbmV3IGwuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcih0KX0pfX0sdC5wcm90b3R5cGUuaW5oZXJpdFBhcmFtc0FuZERhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQudmFsdWUscj1hZShuLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7bi5wYXJhbXM9T2JqZWN0LmZyZWV6ZShyLnBhcmFtcyksbi5kYXRhPU9iamVjdC5mcmVlemUoci5kYXRhKSx0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5oZXJpdFBhcmFtc0FuZERhdGEodCl9KX0sdC5wcm90b3R5cGUucHJvY2Vzc1NlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lLnNlZ21lbnRzLmxlbmd0aCYmZS5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKHQsZSk6dGhpcy5wcm9jZXNzU2VnbWVudCh0LGUsZS5zZWdtZW50cyxuKX0sdC5wcm90b3R5cGUucHJvY2Vzc0NoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10aGlzLGk9RXQoZSxmdW5jdGlvbihlLG4pe3JldHVybiByLnByb2Nlc3NTZWdtZW50R3JvdXAodCxlLG4pfSk7cmV0dXJuIG49e30saS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdC52YWx1ZS5vdXRsZXRdO2lmKGUpe3ZhciByPWUudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpLGk9dC52YWx1ZS51cmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KS5qb2luKCIvIik7dGhyb3cgbmV3IEVycm9yKCJUd28gc2VnbWVudHMgY2Fubm90IGhhdmUgdGhlIHNhbWUgb3V0bGV0IG5hbWU6ICciK3IrIicgYW5kICciK2krIicuIil9blt0LnZhbHVlLm91dGxldF09dC52YWx1ZX0pLGkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnZhbHVlLm91dGxldD09PWF0Py0xOmUudmFsdWUub3V0bGV0PT09YXQ/MTp0LnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKGUudmFsdWUub3V0bGV0KX0pLGl9LHQucHJvdG90eXBlLnByb2Nlc3NTZWdtZW50PWZ1bmN0aW9uKHQsZSxuLGkpe3RyeXtmb3IodmFyIG89T2JqZWN0KHIuZSkodCksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpe3ZhciBzPWEudmFsdWU7dHJ5e3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKHMsZSxuLGkpfWNhdGNoKHQpe2lmKCEodCBpbnN0YW5jZW9mIGtlKSl0aHJvdyB0fX19Y2F0Y2godCl7dT17ZXJyb3I6dH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKGw9by5yZXR1cm4pJiZsLmNhbGwobyl9ZmluYWxseXtpZih1KXRocm93IHUuZXJyb3J9fWlmKHRoaXMubm9MZWZ0b3ZlcnNJblVybChlLG4saSkpcmV0dXJuW107dGhyb3cgbmV3IGtlO3ZhciB1LGx9LHQucHJvdG90eXBlLm5vTGVmdG92ZXJzSW5Vcmw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5sZW5ndGgmJiF0LmNoaWxkcmVuW25dfSx0LnByb3RvdHlwZS5wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixpKXtpZih0LnJlZGlyZWN0VG8pdGhyb3cgbmV3IGtlO2lmKCh0Lm91dGxldHx8YXQpIT09aSl0aHJvdyBuZXcga2U7dmFyIG8sYT1bXSxzPVtdO2lmKCIqKiI9PT10LnBhdGgpe3ZhciB1PW4ubGVuZ3RoPjA/Z3QobikucGFyYW1ldGVyczp7fTtvPW5ldyBzZShuLHUsT2JqZWN0LmZyZWV6ZShPYmplY3Qoci5hKSh7fSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpKSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsTmUodCksaSx0LmNvbXBvbmVudCx0LEllKGUpLEFlKGUpK24ubGVuZ3RoLFJlKHQpKX1lbHNle3ZhciBsPWZ1bmN0aW9uKHQsZSxuKXtpZigiIj09PWUucGF0aCl7aWYoImZ1bGwiPT09ZS5wYXRoTWF0Y2gmJih0Lmhhc0NoaWxkcmVuKCl8fG4ubGVuZ3RoPjApKXRocm93IG5ldyBrZTtyZXR1cm57Y29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwYXJhbWV0ZXJzOnt9fX12YXIgaT0oZS5tYXRjaGVyfHxsdCkobix0LGUpO2lmKCFpKXRocm93IG5ldyBrZTt2YXIgbz17fTt2dChpLnBvc1BhcmFtcyxmdW5jdGlvbih0LGUpe29bZV09dC5wYXRofSk7dmFyIGE9aS5jb25zdW1lZC5sZW5ndGg+MD9PYmplY3Qoci5hKSh7fSxvLGkuY29uc3VtZWRbaS5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVycyk6bztyZXR1cm57Y29uc3VtZWRTZWdtZW50czppLmNvbnN1bWVkLGxhc3RDaGlsZDppLmNvbnN1bWVkLmxlbmd0aCxwYXJhbWV0ZXJzOmF9fShlLHQsbik7YT1sLmNvbnN1bWVkU2VnbWVudHMscz1uLnNsaWNlKGwubGFzdENoaWxkKSxvPW5ldyBzZShhLGwucGFyYW1ldGVycyxPYmplY3QuZnJlZXplKE9iamVjdChyLmEpKHt9LHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcykpLHRoaXMudXJsVHJlZS5mcmFnbWVudCxOZSh0KSxpLHQuY29tcG9uZW50LHQsSWUoZSksQWUoZSkrYS5sZW5ndGgsUmUodCkpfXZhciBjPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaWxkcmVuP3QuY2hpbGRyZW46dC5sb2FkQ2hpbGRyZW4/dC5fbG9hZGVkQ29uZmlnLnJvdXRlczpbXX0odCksZj1qZShlLGEscyxjKSxoPWYuc2VnbWVudEdyb3VwLGQ9Zi5zbGljZWRTZWdtZW50cztpZigwPT09ZC5sZW5ndGgmJmguaGFzQ2hpbGRyZW4oKSl7dmFyIHA9dGhpcy5wcm9jZXNzQ2hpbGRyZW4oYyxoKTtyZXR1cm5bbmV3IGVlKG8scCldfWlmKDA9PT1jLmxlbmd0aCYmMD09PWQubGVuZ3RoKXJldHVybltuZXcgZWUobyxbXSldO3ZhciBtPXRoaXMucHJvY2Vzc1NlZ21lbnQoYyxoLGQsYXQpO3JldHVybltuZXcgZWUobyxtKV19LHR9KCk7ZnVuY3Rpb24gSWUodCl7Zm9yKHZhciBlPXQ7ZS5fc291cmNlU2VnbWVudDspZT1lLl9zb3VyY2VTZWdtZW50O3JldHVybiBlfWZ1bmN0aW9uIEFlKHQpe2Zvcih2YXIgZT10LG49ZS5fc2VnbWVudEluZGV4U2hpZnQ/ZS5fc2VnbWVudEluZGV4U2hpZnQ6MDtlLl9zb3VyY2VTZWdtZW50OyluKz0oZT1lLl9zb3VyY2VTZWdtZW50KS5fc2VnbWVudEluZGV4U2hpZnQ/ZS5fc2VnbWVudEluZGV4U2hpZnQ6MDtyZXR1cm4gbi0xfWZ1bmN0aW9uIGplKHQsZSxuLGkpe2lmKG4ubGVuZ3RoPjAmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBQZSh0LGUsbikmJk1lKG4pIT09YXR9KX0odCxuKSl7dmFyIG89bmV3IE90KGUsZnVuY3Rpb24odCxlLG4saSl7dmFyIG8sYSxzPXt9O3NbYXRdPWksaS5fc291cmNlU2VnbWVudD10LGkuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoO3RyeXtmb3IodmFyIHU9T2JqZWN0KHIuZSkobiksbD11Lm5leHQoKTshbC5kb25lO2w9dS5uZXh0KCkpe3ZhciBjPWwudmFsdWU7aWYoIiI9PT1jLnBhdGgmJk1lKGMpIT09YXQpe3ZhciBmPW5ldyBPdChbXSx7fSk7Zi5fc291cmNlU2VnbWVudD10LGYuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHNbTWUoYyldPWZ9fX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtsJiYhbC5kb25lJiYoYT11LnJldHVybikmJmEuY2FsbCh1KX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIHN9KHQsZSxpLG5ldyBPdChuLHQuY2hpbGRyZW4pKSk7cmV0dXJuIG8uX3NvdXJjZVNlZ21lbnQ9dCxvLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aCx7c2VnbWVudEdyb3VwOm8sc2xpY2VkU2VnbWVudHM6W119fWlmKDA9PT1uLmxlbmd0aCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIFBlKHQsZSxuKX0pfSh0LG4pKXt2YXIgYT1uZXcgT3QodC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixpKXt2YXIgbyxhLHM9e307dHJ5e2Zvcih2YXIgdT1PYmplY3Qoci5lKShuKSxsPXUubmV4dCgpOyFsLmRvbmU7bD11Lm5leHQoKSl7dmFyIGM9bC52YWx1ZTtpZihQZSh0LGUsYykmJiFpW01lKGMpXSl7dmFyIGY9bmV3IE90KFtdLHt9KTtmLl9zb3VyY2VTZWdtZW50PXQsZi5fc2VnbWVudEluZGV4U2hpZnQ9dC5zZWdtZW50cy5sZW5ndGgsc1tNZShjKV09Zn19fWNhdGNoKHQpe289e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2wmJiFsLmRvbmUmJihhPXUucmV0dXJuKSYmYS5jYWxsKHUpfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1yZXR1cm4gT2JqZWN0KHIuYSkoe30saSxzKX0odCxuLGksdC5jaGlsZHJlbikpO3JldHVybiBhLl9zb3VyY2VTZWdtZW50PXQsYS5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDphLHNsaWNlZFNlZ21lbnRzOm59fXZhciBzPW5ldyBPdCh0LnNlZ21lbnRzLHQuY2hpbGRyZW4pO3JldHVybiBzLl9zb3VyY2VTZWdtZW50PXQscy5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDpzLHNsaWNlZFNlZ21lbnRzOm59fWZ1bmN0aW9uIFBlKHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDA9PT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gTWUodCl7cmV0dXJuIHQub3V0bGV0fHxhdH1mdW5jdGlvbiBOZSh0KXtyZXR1cm4gdC5kYXRhfHx7fX1mdW5jdGlvbiBSZSh0KXtyZXR1cm4gdC5yZXNvbHZlfHx7fX12YXIgRGU9ZnVuY3Rpb24oKXt9LExlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc2hvdWxkRGV0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5zdG9yZT1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUuc2hvdWxkQXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5yZXRyaWV2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuc2hvdWxkUmV1c2VSb3V0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LnJvdXRlQ29uZmlnPT09ZS5yb3V0ZUNvbmZpZ30sdH0oKSxGZT1uZXcgaS5vKCJST1VURVMiKSxWZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5sb2FkZXI9dCx0aGlzLmNvbXBpbGVyPWUsdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyPW4sdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcj1yfXJldHVybiB0LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZSksdGhpcy5sb2FkTW9kdWxlRmFjdG9yeShlLmxvYWRDaGlsZHJlbikucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbihyKXtuLm9uTG9hZEVuZExpc3RlbmVyJiZuLm9uTG9hZEVuZExpc3RlbmVyKGUpO3ZhciBpPXIuY3JlYXRlKHQpO3JldHVybiBuZXcgY3QoeXQoaS5pbmplY3Rvci5nZXQoRmUpKS5tYXAocHQpLGkpfSkpfSx0LnByb3RvdHlwZS5sb2FkTW9kdWxlRmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9PYmplY3QoYS5hKSh0aGlzLmxvYWRlci5sb2FkKHQpKTpfdCh0KCkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBpLnQ/T2JqZWN0KHMuYSkodCk6T2JqZWN0KGEuYSkoZS5jb21waWxlci5jb21waWxlTW9kdWxlQXN5bmModCkpfSkpfSx0fSgpLFVlPWZ1bmN0aW9uKCl7fSx6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnNob3VsZFByb2Nlc3NVcmw9ZnVuY3Rpb24odCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmV4dHJhY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHQucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gQmUodCl7dGhyb3cgdH1mdW5jdGlvbiBIZSh0LGUsbil7cmV0dXJuIGUucGFyc2UoIi8iKX1mdW5jdGlvbiBXZSh0KXtyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCl9dmFyIHFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGEscyxsLGMpe3ZhciBmPXRoaXM7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMudXJsU2VyaWFsaXplcj1lLHRoaXMucm9vdENvbnRleHRzPW4sdGhpcy5sb2NhdGlvbj1yLHRoaXMuY29uZmlnPWMsdGhpcy5uYXZpZ2F0aW9ucz1uZXcgby5hKG51bGwpLHRoaXMubmF2aWdhdGlvbklkPTAsdGhpcy5ldmVudHM9bmV3IHUuYSx0aGlzLmVycm9ySGFuZGxlcj1CZSx0aGlzLm1hbGZvcm1lZFVyaUVycm9ySGFuZGxlcj1IZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTEsdGhpcy5ob29rcz17YmVmb3JlUHJlYWN0aXZhdGlvbjpXZSxhZnRlclByZWFjdGl2YXRpb246V2V9LHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneT1uZXcgemUsdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9bmV3IExlLHRoaXMub25TYW1lVXJsTmF2aWdhdGlvbj0iaWdub3JlIix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9ImVtcHR5T25seSIsdGhpcy5uZ01vZHVsZT1hLmdldChpLnYpLHRoaXMucmVzZXRDb25maWcoYyksdGhpcy5jdXJyZW50VXJsVHJlZT1uZXcgeHQobmV3IE90KFtdLHt9KSx7fSxudWxsKSx0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLmNvbmZpZ0xvYWRlcj1uZXcgVmUocyxsLGZ1bmN0aW9uKHQpe3JldHVybiBmLnRyaWdnZXJFdmVudChuZXcgSih0KSl9LGZ1bmN0aW9uKHQpe3JldHVybiBmLnRyaWdnZXJFdmVudChuZXcgdHQodCkpfSksdGhpcy5yb3V0ZXJTdGF0ZT1pZSh0aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMucm9vdENvbXBvbmVudFR5cGUpLHRoaXMucHJvY2Vzc05hdmlnYXRpb25zKCl9cmV0dXJuIHQucHJvdG90eXBlLnJlc2V0Um9vdENvbXBvbmVudFR5cGU9ZnVuY3Rpb24odCl7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9dGhpcy5yb290Q29tcG9uZW50VHlwZX0sdC5wcm90b3R5cGUuaW5pdGlhbE5hdmlnYXRpb249ZnVuY3Rpb24oKXt0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLDA9PT10aGlzLm5hdmlnYXRpb25JZCYmdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMubG9jYXRpb24ucGF0aCghMCkse3JlcGxhY2VVcmw6ITB9KX0sdC5wcm90b3R5cGUuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9ufHwodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj10aGlzLmxvY2F0aW9uLnN1YnNjcmliZShmdW5jdGlvbihlKXt2YXIgbj10LnBhcnNlVXJsKGUudXJsKSxyPSJwb3BzdGF0ZSI9PT1lLnR5cGU/InBvcHN0YXRlIjoiaGFzaGNoYW5nZSIsaT1lLnN0YXRlJiZlLnN0YXRlLm5hdmlnYXRpb25JZD97bmF2aWdhdGlvbklkOmUuc3RhdGUubmF2aWdhdGlvbklkfTpudWxsO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNjaGVkdWxlTmF2aWdhdGlvbihuLHIsaSx7cmVwbGFjZVVybDohMH0pfSwwKX0pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cmwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudHJpZ2dlckV2ZW50PWZ1bmN0aW9uKHQpe3RoaXMuZXZlbnRzLm5leHQodCl9LHQucHJvdG90eXBlLnJlc2V0Q29uZmlnPWZ1bmN0aW9uKHQpe2Z0KHQpLHRoaXMuY29uZmlnPXQubWFwKHB0KSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTF9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlKCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb249bnVsbCl9LHQucHJvdG90eXBlLmNyZWF0ZVVybFRyZWU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49ZS5yZWxhdGl2ZVRvLG89ZS5xdWVyeVBhcmFtcyxhPWUuZnJhZ21lbnQscz1lLnByZXNlcnZlUXVlcnlQYXJhbXMsdT1lLnF1ZXJ5UGFyYW1zSGFuZGxpbmcsbD1lLnByZXNlcnZlRnJhZ21lbnQ7T2JqZWN0KGkuVykoKSYmcyYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInByZXNlcnZlUXVlcnlQYXJhbXMgaXMgZGVwcmVjYXRlZCwgdXNlIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgaW5zdGVhZC4iKTt2YXIgYz1ufHx0aGlzLnJvdXRlclN0YXRlLnJvb3QsZj1sP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6YSxoPW51bGw7aWYodSlzd2l0Y2godSl7Y2FzZSJtZXJnZSI6aD1PYmplY3Qoci5hKSh7fSx0aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zLG8pO2JyZWFrO2Nhc2UicHJlc2VydmUiOmg9dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0Omg9b3x8bnVsbH1lbHNlIGg9cz90aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zOm98fG51bGw7cmV0dXJuIG51bGwhPT1oJiYoaD10aGlzLnJlbW92ZUVtcHR5UHJvcHMoaCkpLGZ1bmN0aW9uKHQsZSxuLGksbyl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBwZShlLnJvb3QsZS5yb290LGUsaSxvKTt2YXIgYT1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHRbMF0mJjE9PT10Lmxlbmd0aCYmIi8iPT09dFswXSlyZXR1cm4gbmV3IG1lKCEwLDAsdCk7dmFyIGU9MCxuPSExLGk9dC5yZWR1Y2UoZnVuY3Rpb24odCxpLG8pe2lmKCJvYmplY3QiPT10eXBlb2YgaSYmbnVsbCE9aSl7aWYoaS5vdXRsZXRzKXt2YXIgYT17fTtyZXR1cm4gdnQoaS5vdXRsZXRzLGZ1bmN0aW9uKHQsZSl7YVtlXT0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgiLyIpOnR9KSxPYmplY3Qoci5kKSh0LFt7b3V0bGV0czphfV0pfWlmKGkuc2VnbWVudFBhdGgpcmV0dXJuIE9iamVjdChyLmQpKHQsW2kuc2VnbWVudFBhdGhdKX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGk/T2JqZWN0KHIuZCkodCxbaV0pOjA9PT1vPyhpLnNwbGl0KCIvIikuZm9yRWFjaChmdW5jdGlvbihyLGkpezA9PWkmJiIuIj09PXJ8fCgwPT1pJiYiIj09PXI/bj0hMDoiLi4iPT09cj9lKys6IiIhPXImJnQucHVzaChyKSl9KSx0KTpPYmplY3Qoci5kKSh0LFtpXSl9LFtdKTtyZXR1cm4gbmV3IG1lKG4sZSxpKX0obik7aWYoYS50b1Jvb3QoKSlyZXR1cm4gcGUoZS5yb290LG5ldyBPdChbXSx7fSksZSxpLG8pO3ZhciBzPWZ1bmN0aW9uKHQsbixyKXtpZih0LmlzQWJzb2x1dGUpcmV0dXJuIG5ldyB5ZShlLnJvb3QsITAsMCk7aWYoLTE9PT1yLnNuYXBzaG90Ll9sYXN0UGF0aEluZGV4KXJldHVybiBuZXcgeWUoci5zbmFwc2hvdC5fdXJsU2VnbWVudCwhMCwwKTt2YXIgaT1kZSh0LmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXtmb3IodmFyIGE9ci5zbmFwc2hvdC5fdXJsU2VnbWVudCxzPXIuc25hcHNob3QuX2xhc3RQYXRoSW5kZXgraSx1PXQubnVtYmVyT2ZEb3VibGVEb3RzO3U+czspe2lmKHUtPXMsIShhPWEucGFyZW50KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbnVtYmVyIG9mICcuLi8nIik7cz1hLnNlZ21lbnRzLmxlbmd0aH1yZXR1cm4gbmV3IHllKGEsITEscy11KX0oKX0oYSwwLHQpLHU9cy5wcm9jZXNzQ2hpbGRyZW4/YmUocy5zZWdtZW50R3JvdXAscy5pbmRleCxhLmNvbW1hbmRzKTp2ZShzLnNlZ21lbnRHcm91cCxzLmluZGV4LGEuY29tbWFuZHMpO3JldHVybiBwZShzLnNlZ21lbnRHcm91cCx1LGUsaSxvKX0oYyx0aGlzLmN1cnJlbnRVcmxUcmVlLHQsaCxmKX0sdC5wcm90b3R5cGUubmF2aWdhdGVCeVVybD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KTt2YXIgbj10IGluc3RhbmNlb2YgeHQ/dDp0aGlzLnBhcnNlVXJsKHQpLHI9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKG4sdGhpcy5yYXdVcmxUcmVlKTtyZXR1cm4gdGhpcy5zY2hlZHVsZU5hdmlnYXRpb24ociwiaW1wZXJhdGl2ZSIsbnVsbCxlKX0sdC5wcm90b3R5cGUubmF2aWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdO2lmKG51bGw9PW4pdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVxdWVzdGVkIHBhdGggY29udGFpbnMgIituKyIgc2VnbWVudCBhdCBpbmRleCAiK2UpfX0odCksdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3JlYXRlVXJsVHJlZSh0LGUpLGUpfSx0LnByb3RvdHlwZS5zZXJpYWxpemVVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodCl9LHQucHJvdG90eXBlLnBhcnNlVXJsPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh0KX1jYXRjaChuKXtlPXRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyKG4sdGhpcy51cmxTZXJpYWxpemVyLHQpfXJldHVybiBlfSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiB4dClyZXR1cm4gd3QodGhpcy5jdXJyZW50VXJsVHJlZSx0LGUpO3ZhciBuPXRoaXMucGFyc2VVcmwodCk7cmV0dXJuIHd0KHRoaXMuY3VycmVudFVybFRyZWUsbixlKX0sdC5wcm90b3R5cGUucmVtb3ZlRW1wdHlQcm9wcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIHI9dFtuXTtyZXR1cm4gbnVsbCE9PXImJnZvaWQgMCE9PXImJihlW25dPXIpLGV9LHt9KX0sdC5wcm90b3R5cGUucHJvY2Vzc05hdmlnYXRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLm5hdmlnYXRpb25zLnBpcGUoT2JqZWN0KEMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGU/KHQuZXhlY3V0ZVNjaGVkdWxlZE5hdmlnYXRpb24oZSksZS5wcm9taXNlLmNhdGNoKGZ1bmN0aW9uKCl7fSkpOk9iamVjdChzLmEpKG51bGwpfSkpLnN1YnNjcmliZShmdW5jdGlvbigpe30pfSx0LnByb3RvdHlwZS5zY2hlZHVsZU5hdmlnYXRpb249ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5uYXZpZ2F0aW9ucy52YWx1ZTtpZihpJiYiaW1wZXJhdGl2ZSIhPT1lJiYiaW1wZXJhdGl2ZSI9PT1pLnNvdXJjZSYmaS5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTtpZihpJiYiaGFzaGNoYW5nZSI9PWUmJiJwb3BzdGF0ZSI9PT1pLnNvdXJjZSYmaS5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTtpZihpJiYicG9wc3RhdGUiPT1lJiYiaGFzaGNoYW5nZSI9PT1pLnNvdXJjZSYmaS5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTt2YXIgbz1udWxsLGE9bnVsbCxzPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7bz10LGE9ZX0pLHU9Kyt0aGlzLm5hdmlnYXRpb25JZDtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9ucy5uZXh0KHtpZDp1LHNvdXJjZTplLHN0YXRlOm4scmF3VXJsOnQsZXh0cmFzOnIscmVzb2x2ZTpvLHJlamVjdDphLHByb21pc2U6c30pLHMuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UucmVqZWN0KHQpfSl9LHQucHJvdG90eXBlLmV4ZWN1dGVTY2hlZHVsZWROYXZpZ2F0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmlkLHI9dC5yYXdVcmwsaT10LmV4dHJhcyxvPXQucmVzb2x2ZSxhPXQucmVqZWN0LHM9dC5zb3VyY2UsdT10LnN0YXRlLGw9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QociksYz0hdGhpcy5uYXZpZ2F0ZWR8fGwudG9TdHJpbmcoKSE9PXRoaXMuY3VycmVudFVybFRyZWUudG9TdHJpbmcoKTsoInJlbG9hZCI9PT10aGlzLm9uU2FtZVVybE5hdmlnYXRpb258fGMpJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybChyKT8odGhpcy5ldmVudHMubmV4dChuZXcgVyhuLHRoaXMuc2VyaWFsaXplVXJsKGwpLHMsdSkpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUucnVuTmF2aWdhdGUobCxyLCEhaS5za2lwTG9jYXRpb25DaGFuZ2UsISFpLnJlcGxhY2VVcmwsbixudWxsKX0pLnRoZW4obyxhKSk6YyYmdGhpcy5yYXdVcmxUcmVlJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybCh0aGlzLnJhd1VybFRyZWUpPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBXKG4sdGhpcy5zZXJpYWxpemVVcmwobCkscyx1KSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5ydW5OYXZpZ2F0ZShsLHIsITEsITEsbixpZShsLGUucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90KX0pLnRoZW4obyxhKSk6KHRoaXMucmF3VXJsVHJlZT1yLG8obnVsbCkpfSx0LnByb3RvdHlwZS5ydW5OYXZpZ2F0ZT1mdW5jdGlvbih0LGUsbixpLGEsdSl7dmFyIGw9dGhpcztyZXR1cm4gYSE9PXRoaXMubmF2aWdhdGlvbklkPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBZKGEsdGhpcy5zZXJpYWxpemVVcmwodCksIk5hdmlnYXRpb24gSUQgIithKyIgaXMgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaWQgIit0aGlzLm5hdmlnYXRpb25JZCkpLFByb21pc2UucmVzb2x2ZSghMSkpOm5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsZil7dmFyIGgsZD0odT9PYmplY3Qocy5hKSh7YXBwbGllZFVybDp0LHNuYXBzaG90OnV9KTpuZXcgR3QobC5uZ01vZHVsZS5pbmplY3RvcixsLmNvbmZpZ0xvYWRlcixsLnVybFNlcmlhbGl6ZXIsdCxsLmNvbmZpZykuYXBwbHkoKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT0iZW1wdHlPbmx5IiksbmV3IFRlKHQsZSxuLHIsaSkucmVjb2duaXplKCl9KGwucm9vdENvbXBvbmVudFR5cGUsbC5jb25maWcsZSxsLnNlcmlhbGl6ZVVybChlKSxsLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24obil7cmV0dXJuIGwuZXZlbnRzLm5leHQobmV3IFEoYSxsLnNlcmlhbGl6ZVVybCh0KSxsLnNlcmlhbGl6ZVVybChlKSxuKSkse2FwcGxpZWRVcmw6ZSxzbmFwc2hvdDpufX0pKX0pKSkucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0P09iamVjdChzLmEpKHQpOmwuaG9va3MuYmVmb3JlUHJlYWN0aXZhdGlvbih0LnNuYXBzaG90KS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtpZigiYm9vbGVhbiI9PXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXQuYXBwbGllZFVybCxuPXQuc25hcHNob3Q7cmV0dXJuKGg9bmV3IEVlKG4sbC5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxsLm5nTW9kdWxlLmluamVjdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBsLnRyaWdnZXJFdmVudCh0KX0pKS5pbml0aWFsaXplKGwucm9vdENvbnRleHRzKSx7YXBwbGllZFVybDplLHNuYXBzaG90Om59fSkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7aWYoImJvb2xlYW4iPT10eXBlb2YgZXx8bC5uYXZpZ2F0aW9uSWQhPT1hKXJldHVybiBPYmplY3Qocy5hKSghMSk7dmFyIG49ZS5hcHBsaWVkVXJsLHI9ZS5zbmFwc2hvdDtyZXR1cm4gbC50cmlnZ2VyRXZlbnQobmV3IEsoYSxsLnNlcmlhbGl6ZVVybCh0KSxsLnNlcmlhbGl6ZVVybChuKSxyKSksaC5jaGVja0d1YXJkcygpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGwudHJpZ2dlckV2ZW50KG5ldyBaKGEsbC5zZXJpYWxpemVVcmwodCksbC5zZXJpYWxpemVVcmwobikscixlKSkse2FwcGxpZWRVcmw6bixzbmFwc2hvdDpyLHNob3VsZEFjdGl2YXRlOmV9fSkpfSkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZXx8bC5uYXZpZ2F0aW9uSWQhPT1hP09iamVjdChzLmEpKCExKTplLnNob3VsZEFjdGl2YXRlJiZoLmlzQWN0aXZhdGluZygpPyhsLnRyaWdnZXJFdmVudChuZXcgWChhLGwuc2VyaWFsaXplVXJsKHQpLGwuc2VyaWFsaXplVXJsKGUuYXBwbGllZFVybCksZS5zbmFwc2hvdCkpLGgucmVzb2x2ZURhdGEobC5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIGwudHJpZ2dlckV2ZW50KG5ldyAkKGEsbC5zZXJpYWxpemVVcmwodCksbC5zZXJpYWxpemVVcmwoZS5hcHBsaWVkVXJsKSxlLnNuYXBzaG90KSksZX0pKSk6T2JqZWN0KHMuYSkoZSl9KSkucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0fHxsLm5hdmlnYXRpb25JZCE9PWE/T2JqZWN0KHMuYSkoITEpOmwuaG9va3MuYWZ0ZXJQcmVhY3RpdmF0aW9uKHQuc25hcHNob3QpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIj09dHlwZW9mIHR8fGwubmF2aWdhdGlvbklkIT09YSlyZXR1cm4hMTt2YXIgZSxuLGkscz10LmFwcGxpZWRVcmwsdT10LnNob3VsZEFjdGl2YXRlO3JldHVybiB1P3thcHBsaWVkVXJsOnMsc3RhdGU6KGk9ZnVuY3Rpb24gdChlLG4saSl7aWYoaSYmZS5zaG91bGRSZXVzZVJvdXRlKG4udmFsdWUsaS52YWx1ZS5zbmFwc2hvdCkpeyhjPWkudmFsdWUpLl9mdXR1cmVTbmFwc2hvdD1uLnZhbHVlO3ZhciBhPWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gbi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24obil7dHJ5e2Zvcih2YXIgbz1PYmplY3Qoci5lKShpLmNoaWxkcmVuKSxhPW8ubmV4dCgpOyFhLmRvbmU7YT1vLm5leHQoKSl7dmFyIHM9YS52YWx1ZTtpZihlLnNob3VsZFJldXNlUm91dGUocy52YWx1ZS5zbmFwc2hvdCxuLnZhbHVlKSlyZXR1cm4gdChlLG4scyl9fWNhdGNoKHQpe3U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihsPW8ucmV0dXJuKSYmbC5jYWxsKG8pfWZpbmFsbHl7aWYodSl0aHJvdyB1LmVycm9yfX1yZXR1cm4gdChlLG4pO3ZhciB1LGx9KX0oZSxuLGkpO3JldHVybiBuZXcgZWUoYyxhKX12YXIgcz1lLnJldHJpZXZlKG4udmFsdWUpO2lmKHMpe3ZhciB1PXMucm91dGU7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuKXtpZihlLnZhbHVlLnJvdXRlQ29uZmlnIT09bi52YWx1ZS5yb3V0ZUNvbmZpZyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWF0dGFjaCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGNyZWF0ZWQgZnJvbSBhIGRpZmZlcmVudCByb3V0ZSIpO2lmKGUuY2hpbGRyZW4ubGVuZ3RoIT09bi5jaGlsZHJlbi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVhdHRhY2ggQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB3aXRoIGEgZGlmZmVyZW50IG51bWJlciBvZiBjaGlsZHJlbiIpO24udmFsdWUuX2Z1dHVyZVNuYXBzaG90PWUudmFsdWU7Zm9yKHZhciByPTA7cjxlLmNoaWxkcmVuLmxlbmd0aDsrK3IpdChlLmNoaWxkcmVuW3JdLG4uY2hpbGRyZW5bcl0pfShuLHUpLHV9dmFyIGwsYz1uZXcgb2UobmV3IG8uYSgobD1uLnZhbHVlKS51cmwpLG5ldyBvLmEobC5wYXJhbXMpLG5ldyBvLmEobC5xdWVyeVBhcmFtcyksbmV3IG8uYShsLmZyYWdtZW50KSxuZXcgby5hKGwuZGF0YSksbC5vdXRsZXQsbC5jb21wb25lbnQsbCk7cmV0dXJuIGE9bi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0pLG5ldyBlZShjLGEpfShsLnJvdXRlUmV1c2VTdHJhdGVneSwoZT10LnNuYXBzaG90KS5fcm9vdCwobj1sLnJvdXRlclN0YXRlKT9uLl9yb290OnZvaWQgMCksbmV3IHJlKGksZSkpLHNob3VsZEFjdGl2YXRlOnV9OnthcHBsaWVkVXJsOnMsc3RhdGU6bnVsbCxzaG91bGRBY3RpdmF0ZTp1fX0pKTtsLmFjdGl2YXRlUm91dGVzKGQsbC5yb3V0ZXJTdGF0ZSxsLmN1cnJlbnRVcmxUcmVlLGEsdCxlLG4saSxjLGYpfSl9LHQucHJvdG90eXBlLmFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGwpe3ZhciBjLGY9dGhpczt0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iIT10eXBlb2YgdCYmdC5zaG91bGRBY3RpdmF0ZSYmcj09PWYubmF2aWdhdGlvbklkJiZ0LnN0YXRlKXt2YXIgbj10LnN0YXRlO2lmKGYuY3VycmVudFVybFRyZWU9dC5hcHBsaWVkVXJsLGYucmF3VXJsVHJlZT1mLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZi5jdXJyZW50VXJsVHJlZSxvKSxmLnJvdXRlclN0YXRlPW4sIWEpe3ZhciBpPWYudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZi5yYXdVcmxUcmVlKTtmLmxvY2F0aW9uLmlzQ3VycmVudFBhdGhFcXVhbFRvKGkpfHxzP2YubG9jYXRpb24ucmVwbGFjZVN0YXRlKGksIiIse25hdmlnYXRpb25JZDpyfSk6Zi5sb2NhdGlvbi5nbyhpLCIiLHtuYXZpZ2F0aW9uSWQ6cn0pfW5ldyBZZShmLnJvdXRlUmV1c2VTdHJhdGVneSxuLGUsZnVuY3Rpb24odCl7cmV0dXJuIGYudHJpZ2dlckV2ZW50KHQpfSkuYWN0aXZhdGUoZi5yb290Q29udGV4dHMpLGM9ITB9ZWxzZSBjPSExfSkudGhlbihmdW5jdGlvbigpe2M/KGYubmF2aWdhdGVkPSEwLGYubGFzdFN1Y2Nlc3NmdWxJZD1yLGYuZXZlbnRzLm5leHQobmV3IHEocixmLnNlcmlhbGl6ZVVybChpKSxmLnNlcmlhbGl6ZVVybChmLmN1cnJlbnRVcmxUcmVlKSkpLHUoITApKTooZi5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSxmLmV2ZW50cy5uZXh0KG5ldyBZKHIsZi5zZXJpYWxpemVVcmwoaSksIiIpKSx1KCExKSl9LGZ1bmN0aW9uKHQpe2lmKChhPXQpJiZhLm5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKWYubmF2aWdhdGVkPSEwLGYucmVzZXRTdGF0ZUFuZFVybChlLG4sbyksZi5ldmVudHMubmV4dChuZXcgWShyLGYuc2VyaWFsaXplVXJsKGkpLHQubWVzc2FnZSkpLHUoITEpO2Vsc2V7Zi5yZXNldFN0YXRlQW5kVXJsKGUsbixvKSxmLmV2ZW50cy5uZXh0KG5ldyBHKHIsZi5zZXJpYWxpemVVcmwoaSksdCkpO3RyeXt1KGYuZXJyb3JIYW5kbGVyKHQpKX1jYXRjaCh0KXtsKHQpfX12YXIgYX0pfSx0LnByb3RvdHlwZS5yZXNldFN0YXRlQW5kVXJsPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLnJvdXRlclN0YXRlPXQsdGhpcy5jdXJyZW50VXJsVHJlZT1lLHRoaXMucmF3VXJsVHJlZT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UodGhpcy5jdXJyZW50VXJsVHJlZSxuKSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpfSx0LnByb3RvdHlwZS5yZXNldFVybFRvQ3VycmVudFVybFRyZWU9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMucmF3VXJsVHJlZSksIiIse25hdmlnYXRpb25JZDp0aGlzLmxhc3RTdWNjZXNzZnVsSWR9KX0sdH0oKSxZZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9dCx0aGlzLmZ1dHVyZVN0YXRlPWUsdGhpcy5jdXJyU3RhdGU9bix0aGlzLmZvcndhcmRFdmVudD1yfXJldHVybiB0LnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1dHVyZVN0YXRlLl9yb290LG49dGhpcy5jdXJyU3RhdGU/dGhpcy5jdXJyU3RhdGUuX3Jvb3Q6bnVsbDt0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhlLG4sdCksZmUodGhpcy5mdXR1cmVTdGF0ZS5yb290KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSxuLHQpfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMsaT1uZShlKTt0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZS5vdXRsZXQ7ci5kZWFjdGl2YXRlUm91dGVzKHQsaVtlXSxuKSxkZWxldGUgaVtlXX0pLHZ0KGksZnVuY3Rpb24odCxlKXtyLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsbil9KX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC52YWx1ZSxpPWU/ZS52YWx1ZTpudWxsO2lmKHI9PT1pKWlmKHIuY29tcG9uZW50KXt2YXIgbz1uLmdldENvbnRleHQoci5vdXRsZXQpO28mJnRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxvLmNoaWxkcmVuKX1lbHNlIHRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxuKTtlbHNlIGkmJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oZSxuKX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGREZXRhY2godC52YWx1ZS5zbmFwc2hvdCk/dGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZSh0LGUpOnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KHQsZSl9LHQucHJvdG90eXBlLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5nZXRDb250ZXh0KHQudmFsdWUub3V0bGV0KTtpZihuJiZuLm91dGxldCl7dmFyIHI9bi5vdXRsZXQuZGV0YWNoKCksaT1uLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKTt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zdG9yZSh0LnZhbHVlLnNuYXBzaG90LHtjb21wb25lbnRSZWY6cixyb3V0ZTp0LGNvbnRleHRzOml9KX19LHQucHJvdG90eXBlLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpO2lmKHIpe3ZhciBpPW5lKHQpLG89dC52YWx1ZS5jb21wb25lbnQ/ci5jaGlsZHJlbjplO3Z0KGksZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG8pfSksci5vdXRsZXQmJihyLm91dGxldC5kZWFjdGl2YXRlKCksci5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpfX0sdC5wcm90b3R5cGUuYWN0aXZhdGVDaGlsZFJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPW5lKGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtyLmFjdGl2YXRlUm91dGVzKHQsaVt0LnZhbHVlLm91dGxldF0sbiksci5mb3J3YXJkRXZlbnQobmV3IGl0KHQudmFsdWUuc25hcHNob3QpKX0pLHQuY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmZvcndhcmRFdmVudChuZXcgbnQodC52YWx1ZS5zbmFwc2hvdCkpfSx0LnByb3RvdHlwZS5hY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC52YWx1ZSxpPWU/ZS52YWx1ZTpudWxsO2lmKGZlKHIpLHI9PT1pKWlmKHIuY29tcG9uZW50KXt2YXIgbz1uLmdldE9yQ3JlYXRlQ29udGV4dChyLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxvLmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsbik7ZWxzZSBpZihyLmNvbXBvbmVudClpZihvPW4uZ2V0T3JDcmVhdGVDb250ZXh0KHIub3V0bGV0KSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRBdHRhY2goci5zbmFwc2hvdCkpe3ZhciBhPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKHIuc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKHIuc25hcHNob3QsbnVsbCksby5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoYS5jb250ZXh0cyksby5hdHRhY2hSZWY9YS5jb21wb25lbnRSZWYsby5yb3V0ZT1hLnJvdXRlLnZhbHVlLG8ub3V0bGV0JiZvLm91dGxldC5hdHRhY2goYS5jb21wb25lbnRSZWYsYS5yb3V0ZS52YWx1ZSksR2UoYS5yb3V0ZSl9ZWxzZXt2YXIgcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9ci5zbmFwc2hvdC5wYXJlbnQ7ZTtlPWUucGFyZW50KXt2YXIgbj1lLnJvdXRlQ29uZmlnO2lmKG4mJm4uX2xvYWRlZENvbmZpZylyZXR1cm4gbi5fbG9hZGVkQ29uZmlnO2lmKG4mJm4uY29tcG9uZW50KXJldHVybiBudWxsfXJldHVybiBudWxsfSgpLHU9cz9zLm1vZHVsZS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6bnVsbDtvLnJvdXRlPXIsby5yZXNvbHZlcj11LG8ub3V0bGV0JiZvLm91dGxldC5hY3RpdmF0ZVdpdGgocix1KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxudWxsLG8uY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsbnVsbCxuKX0sdH0oKTtmdW5jdGlvbiBHZSh0KXtmZSh0LnZhbHVlKSx0LmNoaWxkcmVuLmZvckVhY2goR2UpfXZhciBRZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZhciByPXRoaXM7dGhpcy5yb3V0ZXI9dCx0aGlzLnJvdXRlPWUsdGhpcy5sb2NhdGlvblN0cmF0ZWd5PW4sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbj10LmV2ZW50cy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7dCBpbnN0YW5jZW9mIHEmJnIudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZigpfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm91dGVyTGluayIse3NldDpmdW5jdGlvbih0KXt0aGlzLmNvbW1hbmRzPW51bGwhPXQ/QXJyYXkuaXNBcnJheSh0KT90Olt0XTpbXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByZXNlcnZlUXVlcnlQYXJhbXMiLHtzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0KGkuVykoKSYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInByZXNlcnZlUXVlcnlQYXJhbXMgaXMgZGVwcmVjYXRlZCwgdXNlIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgaW5zdGVhZC4iKSx0aGlzLnByZXNlcnZlPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhpcy51cGRhdGVUYXJnZXRVcmxBbmRIcmVmKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUub25DbGljaz1mdW5jdGlvbih0LGUsbixyKXtpZigwIT09dHx8ZXx8bnx8cilyZXR1cm4hMDtpZigic3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldClyZXR1cm4hMDt2YXIgaT17c2tpcExvY2F0aW9uQ2hhbmdlOktlKHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlKSxyZXBsYWNlVXJsOktlKHRoaXMucmVwbGFjZVVybCl9O3JldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMudXJsVHJlZSxpKSwhMX0sdC5wcm90b3R5cGUudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZj1mdW5jdGlvbigpe3RoaXMuaHJlZj10aGlzLmxvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnVybFRyZWUpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cmxUcmVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUodGhpcy5jb21tYW5kcyx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxwcmVzZXJ2ZVF1ZXJ5UGFyYW1zOktlKHRoaXMucHJlc2VydmUpLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6dGhpcy5xdWVyeVBhcmFtc0hhbmRsaW5nLHByZXNlcnZlRnJhZ21lbnQ6S2UodGhpcy5wcmVzZXJ2ZUZyYWdtZW50KX0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gS2UodCl7cmV0dXJuIiI9PT10fHwhIXR9dmFyIFplPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vdXRsZXQ9bnVsbCx0aGlzLnJvdXRlPW51bGwsdGhpcy5yZXNvbHZlcj1udWxsLHRoaXMuY2hpbGRyZW49bmV3IFhlLHRoaXMuYXR0YWNoUmVmPW51bGx9fSgpLFhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUub25DaGlsZE91dGxldENyZWF0ZWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldE9yQ3JlYXRlQ29udGV4dCh0KTtuLm91dGxldD1lLHRoaXMuY29udGV4dHMuc2V0KHQsbil9LHQucHJvdG90eXBlLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDb250ZXh0KHQpO2UmJihlLm91dGxldD1udWxsKX0sdC5wcm90b3R5cGUub25PdXRsZXREZWFjdGl2YXRlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dHM7cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCx0fSx0LnByb3RvdHlwZS5vbk91dGxldFJlQXR0YWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0cz10fSx0LnByb3RvdHlwZS5nZXRPckNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDb250ZXh0KHQpO3JldHVybiBlfHwoZT1uZXcgWmUsdGhpcy5jb250ZXh0cy5zZXQodCxlKSksZX0sdC5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQodCl8fG51bGx9LHR9KCksJGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsbyl7dGhpcy5wYXJlbnRDb250ZXh0cz10LHRoaXMubG9jYXRpb249ZSx0aGlzLnJlc29sdmVyPW4sdGhpcy5jaGFuZ2VEZXRlY3Rvcj1vLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBpLm0sdGhpcy5kZWFjdGl2YXRlRXZlbnRzPW5ldyBpLm0sdGhpcy5uYW1lPXJ8fGF0LHQub25DaGlsZE91dGxldENyZWF0ZWQodGhpcy5uYW1lLHRoaXMpfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldERlc3Ryb3llZCh0aGlzLm5hbWUpfSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl7dmFyIHQ9dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KHRoaXMubmFtZSk7dCYmdC5yb3V0ZSYmKHQuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKHQuYXR0YWNoUmVmLHQucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKHQucm91dGUsdC5yZXNvbHZlcnx8bnVsbCkpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0FjdGl2YXRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJPdXRsZXQgaXMgbm90IGFjdGl2YXRlZCIpO3JldHVybiB0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZFJvdXRlIix7Z2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRSb3V0ZURhdGEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJPdXRsZXQgaXMgbm90IGFjdGl2YXRlZCIpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7dmFyIHQ9dGhpcy5hY3RpdmF0ZWQ7cmV0dXJuIHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0fSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCxlKXt0aGlzLmFjdGl2YXRlZD10LHRoaXMuX2FjdGl2YXRlZFJvdXRlPWUsdGhpcy5sb2NhdGlvbi5pbnNlcnQodC5ob3N0Vmlldyl9LHQucHJvdG90eXBlLmRlYWN0aXZhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2YXRlZCl7dmFyIHQ9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdCh0KX19LHQucHJvdG90eXBlLmFjdGl2YXRlV2l0aD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuaXNBY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWN0aXZhdGUgYW4gYWxyZWFkeSBhY3RpdmF0ZWQgb3V0bGV0Iik7dGhpcy5fYWN0aXZhdGVkUm91dGU9dDt2YXIgbj0oZT1lfHx0aGlzLnJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0Ll9mdXR1cmVTbmFwc2hvdC5yb3V0ZUNvbmZpZy5jb21wb25lbnQpLHI9dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRPckNyZWF0ZUNvbnRleHQodGhpcy5uYW1lKS5jaGlsZHJlbixpPW5ldyBKZSh0LHIsdGhpcy5sb2NhdGlvbi5pbmplY3Rvcik7dGhpcy5hY3RpdmF0ZWQ9dGhpcy5sb2NhdGlvbi5jcmVhdGVDb21wb25lbnQobix0aGlzLmxvY2F0aW9uLmxlbmd0aCxpKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLHRoaXMuYWN0aXZhdGVFdmVudHMuZW1pdCh0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZSl9LHR9KCksSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnJvdXRlPXQsdGhpcy5jaGlsZENvbnRleHRzPWUsdGhpcy5wYXJlbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1vZT90aGlzLnJvdXRlOnQ9PT1YZT90aGlzLmNoaWxkQ29udGV4dHM6dGhpcy5wYXJlbnQuZ2V0KHQsZSl9LHR9KCksdG49ZnVuY3Rpb24oKXt9LGVuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucHJlbG9hZD1mdW5jdGlvbih0LGUpe3JldHVybiBlKCkucGlwZShPYmplY3QoTi5hKShmdW5jdGlvbigpe3JldHVybiBPYmplY3Qocy5hKShudWxsKX0pKX0sdH0oKSxubj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCl9LHR9KCkscm49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSl7dGhpcy5yb3V0ZXI9dCx0aGlzLmluamVjdG9yPXIsdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9aSx0aGlzLmxvYWRlcj1uZXcgVmUoZSxuLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRyaWdnZXJFdmVudChuZXcgSihlKSl9LGZ1bmN0aW9uKGUpe3JldHVybiB0LnRyaWdnZXJFdmVudChuZXcgdHQoZSkpfSl9cmV0dXJuIHQucHJvdG90eXBlLnNldFVwUHJlbG9hZGluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5zdWJzY3JpcHRpb249dGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBxfSksT2JqZWN0KEMuYSkoZnVuY3Rpb24oKXtyZXR1cm4gdC5wcmVsb2FkKCl9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7fSl9LHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmluamVjdG9yLmdldChpLnYpO3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModCx0aGlzLnJvdXRlci5jb25maWcpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLnByb2Nlc3NSb3V0ZXM9ZnVuY3Rpb24odCxlKXt2YXIgbixpLG89W107dHJ5e2Zvcih2YXIgcz1PYmplY3Qoci5lKShlKSx1PXMubmV4dCgpOyF1LmRvbmU7dT1zLm5leHQoKSl7dmFyIGw9dS52YWx1ZTtpZihsLmxvYWRDaGlsZHJlbiYmIWwuY2FuTG9hZCYmbC5fbG9hZGVkQ29uZmlnKXt2YXIgYz1sLl9sb2FkZWRDb25maWc7by5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhjLm1vZHVsZSxjLnJvdXRlcykpfWVsc2UgbC5sb2FkQ2hpbGRyZW4mJiFsLmNhbkxvYWQ/by5wdXNoKHRoaXMucHJlbG9hZENvbmZpZyh0LGwpKTpsLmNoaWxkcmVuJiZvLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKHQsbC5jaGlsZHJlbikpfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXt1JiYhdS5kb25lJiYoaT1zLnJldHVybikmJmkuY2FsbChzKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIE9iamVjdChhLmEpKG8pLnBpcGUoT2JqZWN0KEQuYSkoKSxPYmplY3QoTy5hKShmdW5jdGlvbih0KXt9KSl9LHQucHJvdG90eXBlLnByZWxvYWRDb25maWc9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGUsZnVuY3Rpb24oKXtyZXR1cm4gbi5sb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LG4ucHJvY2Vzc1JvdXRlcyh0Lm1vZHVsZSx0LnJvdXRlcyl9KSl9KX0sdH0oKSxvbj1uZXcgaS5vKCJST1VURVJfQ09ORklHVVJBVElPTiIpLGFuPW5ldyBpLm8oIlJPVVRFUl9GT1JST09UX0dVQVJEIiksc249W3ouZyx7cHJvdmlkZTprdCx1c2VDbGFzczpUdH0se3Byb3ZpZGU6cWUsdXNlRmFjdG9yeTpkbixkZXBzOltpLmcsa3QsWGUsei5nLGkucCxpLnUsaS5pLEZlLG9uLFtVZSxuZXcgaS55XSxbRGUsbmV3IGkueV1dfSxYZSx7cHJvdmlkZTpvZSx1c2VGYWN0b3J5OnBuLGRlcHM6W3FlXX0se3Byb3ZpZGU6aS51LHVzZUNsYXNzOmkuSX0scm4sbm4sZW4se3Byb3ZpZGU6b24sdXNlVmFsdWU6e2VuYWJsZVRyYWNpbmc6ITF9fV07ZnVuY3Rpb24gdW4oKXtyZXR1cm4gbmV3IGkudygiUm91dGVyIixxZSl9dmFyIGxuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe31yZXR1cm4gdC5mb3JSb290PWZ1bmN0aW9uKGUsbil7cmV0dXJue25nTW9kdWxlOnQscHJvdmlkZXJzOltzbixobihlKSx7cHJvdmlkZTphbix1c2VGYWN0b3J5OmZuLGRlcHM6W1txZSxuZXcgaS55LG5ldyBpLkhdXX0se3Byb3ZpZGU6b24sdXNlVmFsdWU6bnx8e319LHtwcm92aWRlOnouaCx1c2VGYWN0b3J5OmNuLGRlcHM6W3oucCxbbmV3IGkubih6LmEpLG5ldyBpLnldLG9uXX0se3Byb3ZpZGU6dG4sdXNlRXhpc3Rpbmc6biYmbi5wcmVsb2FkaW5nU3RyYXRlZ3k/bi5wcmVsb2FkaW5nU3RyYXRlZ3k6bm59LHtwcm92aWRlOmkudyxtdWx0aTohMCx1c2VGYWN0b3J5OnVufSxbbW4se3Byb3ZpZGU6aS5kLG11bHRpOiEwLHVzZUZhY3Rvcnk6eW4sZGVwczpbbW5dfSx7cHJvdmlkZTp2bix1c2VGYWN0b3J5OmduLGRlcHM6W21uXX0se3Byb3ZpZGU6aS5iLG11bHRpOiEwLHVzZUV4aXN0aW5nOnZufV1dfX0sdC5mb3JDaGlsZD1mdW5jdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W2huKGUpXX19LHR9KCk7ZnVuY3Rpb24gY24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksbi51c2VIYXNoP25ldyB6LmUodCxlKTpuZXcgei5vKHQsZSl9ZnVuY3Rpb24gZm4odCl7aWYodCl0aHJvdyBuZXcgRXJyb3IoIlJvdXRlck1vZHVsZS5mb3JSb290KCkgY2FsbGVkIHR3aWNlLiBMYXp5IGxvYWRlZCBtb2R1bGVzIHNob3VsZCB1c2UgUm91dGVyTW9kdWxlLmZvckNoaWxkKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rpb24gaG4odCl7cmV0dXJuW3twcm92aWRlOmkuYSxtdWx0aTohMCx1c2VWYWx1ZTp0fSx7cHJvdmlkZTpGZSxtdWx0aTohMCx1c2VWYWx1ZTp0fV19ZnVuY3Rpb24gZG4odCxlLG4scixpLG8sYSxzLHUsbCxjKXt2b2lkIDA9PT11JiYodT17fSk7dmFyIGY9bmV3IHFlKG51bGwsZSxuLHIsaSxvLGEseXQocykpO2lmKGwmJihmLnVybEhhbmRsaW5nU3RyYXRlZ3k9bCksYyYmKGYucm91dGVSZXVzZVN0cmF0ZWd5PWMpLHUuZXJyb3JIYW5kbGVyJiYoZi5lcnJvckhhbmRsZXI9dS5lcnJvckhhbmRsZXIpLHUubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyJiYoZi5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXI9dS5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXIpLHUuZW5hYmxlVHJhY2luZyl7dmFyIGg9T2JqZWN0KEIudCkoKTtmLmV2ZW50cy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7aC5sb2dHcm91cCgiUm91dGVyIEV2ZW50OiAiK3QuY29uc3RydWN0b3IubmFtZSksaC5sb2codC50b1N0cmluZygpKSxoLmxvZyh0KSxoLmxvZ0dyb3VwRW5kKCl9KX1yZXR1cm4gdS5vblNhbWVVcmxOYXZpZ2F0aW9uJiYoZi5vblNhbWVVcmxOYXZpZ2F0aW9uPXUub25TYW1lVXJsTmF2aWdhdGlvbiksdS5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5JiYoZi5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXUucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSksZn1mdW5jdGlvbiBwbih0KXtyZXR1cm4gdC5yb3V0ZXJTdGF0ZS5yb290fXZhciBtbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5pbmplY3Rvcj10LHRoaXMuaW5pdE5hdmlnYXRpb249ITEsdGhpcy5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lPW5ldyB1LmF9cmV0dXJuIHQucHJvdG90eXBlLmFwcEluaXRpYWxpemVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoei5mLFByb21pc2UucmVzb2x2ZShudWxsKSkudGhlbihmdW5jdGlvbigpe3ZhciBlPW51bGwsbj1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXtyZXR1cm4gZT10fSkscj10LmluamVjdG9yLmdldChxZSksaT10LmluamVjdG9yLmdldChvbik7aWYodC5pc0xlZ2FjeURpc2FibGVkKGkpfHx0LmlzTGVnYWN5RW5hYmxlZChpKSllKCEwKTtlbHNlIGlmKCJkaXNhYmxlZCI9PT1pLmluaXRpYWxOYXZpZ2F0aW9uKXIuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksZSghMCk7ZWxzZXtpZigiZW5hYmxlZCIhPT1pLmluaXRpYWxOYXZpZ2F0aW9uKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbml0aWFsTmF2aWdhdGlvbiBvcHRpb25zOiAnIitpLmluaXRpYWxOYXZpZ2F0aW9uKyInIik7ci5ob29rcy5hZnRlclByZWFjdGl2YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5pbml0TmF2aWdhdGlvbj9PYmplY3Qocy5hKShudWxsKToodC5pbml0TmF2aWdhdGlvbj0hMCxlKCEwKSx0LnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUpfSxyLmluaXRpYWxOYXZpZ2F0aW9uKCl9cmV0dXJuIG59KX0sdC5wcm90b3R5cGUuYm9vdHN0cmFwTGlzdGVuZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmplY3Rvci5nZXQob24pLG49dGhpcy5pbmplY3Rvci5nZXQocm4pLHI9dGhpcy5pbmplY3Rvci5nZXQocWUpLG89dGhpcy5pbmplY3Rvci5nZXQoaS5nKTt0PT09by5jb21wb25lbnRzWzBdJiYodGhpcy5pc0xlZ2FjeUVuYWJsZWQoZSk/ci5pbml0aWFsTmF2aWdhdGlvbigpOnRoaXMuaXNMZWdhY3lEaXNhYmxlZChlKSYmci5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSxuLnNldFVwUHJlbG9hZGluZygpLHIucmVzZXRSb290Q29tcG9uZW50VHlwZShvLmNvbXBvbmVudFR5cGVzWzBdKSx0aGlzLnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUubmV4dChudWxsKSx0aGlzLnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUuY29tcGxldGUoKSl9LHQucHJvdG90eXBlLmlzTGVnYWN5RW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4ibGVnYWN5X2VuYWJsZWQiPT09dC5pbml0aWFsTmF2aWdhdGlvbnx8ITA9PT10LmluaXRpYWxOYXZpZ2F0aW9ufHx2b2lkIDA9PT10LmluaXRpYWxOYXZpZ2F0aW9ufSx0LnByb3RvdHlwZS5pc0xlZ2FjeURpc2FibGVkPWZ1bmN0aW9uKHQpe3JldHVybiJsZWdhY3lfZGlzYWJsZWQiPT09dC5pbml0aWFsTmF2aWdhdGlvbnx8ITE9PT10LmluaXRpYWxOYXZpZ2F0aW9ufSx0fSgpO2Z1bmN0aW9uIHluKHQpe3JldHVybiB0LmFwcEluaXRpYWxpemVyLmJpbmQodCl9ZnVuY3Rpb24gZ24odCl7cmV0dXJuIHQuYm9vdHN0cmFwTGlzdGVuZXIuYmluZCh0KX12YXIgdm49bmV3IGkubygiUm91dGVyIEluaXRpYWxpemVyIil9LFpZanQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBsdH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBidH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBndH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gbnR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gcnR9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdXR9KSxuLmQoZSwidCIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBVfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHR0fSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGl0fSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIHN0fSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIklwMFIiKSxvPW4oIkNjbkciKSxhPW51bGw7ZnVuY3Rpb24gcygpe3JldHVybiBhfXZhciB1LGw9e2NsYXNzOiJjbGFzc05hbWUiLGlubmVySHRtbDoiaW5uZXJIVE1MIixyZWFkb25seToicmVhZE9ubHkiLHRhYmluZGV4OiJ0YWJJbmRleCJ9LGM9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LGY9e0E6IjEiLEI6IjIiLEM6IjMiLEQ6IjQiLEU6IjUiLEY6IjYiLEc6IjciLEg6IjgiLEk6IjkiLEo6IioiLEs6IisiLE06Ii0iLE46Ii4iLE86Ii8iLCJgIjoiMCIsIlx4OTAiOiJOdW1Mb2NrIn07by5QYS5Ob2RlJiYodT1vLlBhLk5vZGUucHJvdG90eXBlLmNvbnRhaW5zfHxmdW5jdGlvbih0KXtyZXR1cm4hISgxNiZ0aGlzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKX0pO3ZhciBoLGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwYXJzZSBub3QgaW1wbGVtZW50ZWQiKX0sZS5tYWtlQ3VycmVudD1mdW5jdGlvbigpe3ZhciB0O3Q9bmV3IGUsYXx8KGE9dCl9LGUucHJvdG90eXBlLmhhc1Byb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gdH0sZS5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RbZV09bn0sZS5wcm90b3R5cGUuZ2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXX0sZS5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaTsoaT10KVtlXS5hcHBseShpLE9iamVjdChyLmQpKG4pKX0sZS5wcm90b3R5cGUubG9nRXJyb3I9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJihjb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IodCk6Y29uc29sZS5sb2codCkpfSxlLnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmxvZyYmd2luZG93LmNvbnNvbGUubG9nKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cD1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuZ3JvdXAmJndpbmRvdy5jb25zb2xlLmdyb3VwKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cEVuZD1mdW5jdGlvbigpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5ncm91cEVuZCYmd2luZG93LmNvbnNvbGUuZ3JvdXBFbmQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhdHRyVG9Qcm9wTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdS5jYWxsKHQsZSl9LGUucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yKGUpfSxlLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucXVlcnlTZWxlY3RvckFsbChlKX0sZS5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlLG4pe3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpfSxlLnByb3RvdHlwZS5vbkFuZENhbmNlbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpLGZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbiwhMSl9fSxlLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKHQsZSl7dC5kaXNwYXRjaEV2ZW50KGUpfSxlLnByb3RvdHlwZS5jcmVhdGVNb3VzZUV2ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMCksZX0sZS5wcm90b3R5cGUuY3JlYXRlRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFdmVudCgiRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMCksZX0sZS5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITF9LGUucHJvdG90eXBlLmlzUHJldmVudGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlZmF1bHRQcmV2ZW50ZWR8fG51bGwhPXQucmV0dXJuVmFsdWUmJiF0LnJldHVyblZhbHVlfSxlLnByb3RvdHlwZS5nZXRJbm5lckhUTUw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5uZXJIVE1MfSxlLnByb3RvdHlwZS5nZXRUZW1wbGF0ZUNvbnRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuImNvbnRlbnQiaW4gdCYmdGhpcy5pc1RlbXBsYXRlRWxlbWVudCh0KT90LmNvbnRlbnQ6bnVsbH0sZS5wcm90b3R5cGUuZ2V0T3V0ZXJIVE1MPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dGVySFRNTH0sZS5wcm90b3R5cGUubm9kZU5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZU5hbWV9LGUucHJvdG90eXBlLm5vZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVmFsdWV9LGUucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNQcm9wZXJ0eSh0LCJjb250ZW50Iik/dC5jb250ZW50OnR9LGUucHJvdG90eXBlLmZpcnN0Q2hpbGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZmlyc3RDaGlsZH0sZS5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9LGUucHJvdG90eXBlLnBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZX0sZS5wcm90b3R5cGUuY2hpbGROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGlsZE5vZGVzfSxlLnByb3RvdHlwZS5jaGlsZE5vZGVzQXNMaXN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMsbj1uZXcgQXJyYXkoZS5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPWVbcl07cmV0dXJuIG59LGUucHJvdG90eXBlLmNsZWFyTm9kZXM9ZnVuY3Rpb24odCl7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX0sZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0LmFwcGVuZENoaWxkKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3QucmVtb3ZlQ2hpbGQoZSl9LGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZD1mdW5jdGlvbih0LGUsbil7dC5yZXBsYWNlQ2hpbGQoZSxuKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0fSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3QuaW5zZXJ0QmVmb3JlKG4sZSl9LGUucHJvdG90eXBlLmluc2VydEFsbEJlZm9yZT1mdW5jdGlvbih0LGUsbil7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiB0Lmluc2VydEJlZm9yZShuLGUpfSl9LGUucHJvdG90eXBlLmluc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXt0Lmluc2VydEJlZm9yZShuLGUubmV4dFNpYmxpbmcpfSxlLnByb3RvdHlwZS5zZXRJbm5lckhUTUw9ZnVuY3Rpb24odCxlKXt0LmlubmVySFRNTD1lfSxlLnByb3RvdHlwZS5nZXRUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHRDb250ZW50fSxlLnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKHQsZSl7dC50ZXh0Q29udGVudD1lfSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0LnZhbHVlPWV9LGUucHJvdG90eXBlLmdldENoZWNrZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hlY2tlZH0sZS5wcm90b3R5cGUuc2V0Q2hlY2tlZD1mdW5jdGlvbih0LGUpe3QuY2hlY2tlZD1lfSxlLnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldERlZmF1bHREb2N1bWVudCgpLmNyZWF0ZUNvbW1lbnQodCl9LGUucHJvdG90eXBlLmNyZWF0ZVRlbXBsYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gZS5pbm5lckhUTUw9dCxlfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlRWxlbWVudCh0KX0sZS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudE5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4obj1ufHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50TlModCxlKX0sZS5wcm90b3R5cGUuY3JlYXRlVGV4dE5vZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVUZXh0Tm9kZSh0KX0sZS5wcm90b3R5cGUuY3JlYXRlU2NyaXB0VGFnPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0obj1ufHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KCJTQ1JJUFQiKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUodCxlKSxyfSxlLnByb3RvdHlwZS5jcmVhdGVTdHlsZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj0oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG4sdGhpcy5jcmVhdGVUZXh0Tm9kZSh0LGUpKSxufSxlLnByb3RvdHlwZS5jcmVhdGVTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0LmNyZWF0ZVNoYWRvd1Jvb3QoKX0sZS5wcm90b3R5cGUuZ2V0U2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zaGFkb3dSb290fSxlLnByb3RvdHlwZS5nZXRIb3N0PWZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvc3R9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb25lTm9kZSghMCl9LGUucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxlLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpfSxlLnByb3RvdHlwZS5jbGFzc0xpc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuY2xhc3NMaXN0LDApfSxlLnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LGUucHJvdG90eXBlLmhhc0NsYXNzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY2xhc3NMaXN0LmNvbnRhaW5zKGUpfSxlLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbil7dC5zdHlsZVtlXT1ufSxlLnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbZV09IiJ9LGUucHJvdG90eXBlLmdldFN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3R5bGVbZV19LGUucHJvdG90eXBlLmhhc1N0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLmdldFN0eWxlKHQsZSl8fCIiO3JldHVybiBuP3I9PW46ci5sZW5ndGg+MH0sZS5wcm90b3R5cGUudGFnTmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50YWdOYW1lfSxlLnByb3RvdHlwZS5hdHRyaWJ1dGVNYXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBNYXAsbj10LmF0dHJpYnV0ZXMscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uLml0ZW0ocik7ZS5zZXQoaS5uYW1lLGkudmFsdWUpfXJldHVybiBlfSxlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoZSl9LGUucHJvdG90eXBlLmhhc0F0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl9LGUucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3Quc2V0QXR0cmlidXRlKGUsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuLHIpe3Quc2V0QXR0cmlidXRlTlMoZSxuLHIpfSxlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXt0LnJlbW92ZUF0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3QucmVtb3ZlQXR0cmlidXRlTlMoZSxuKX0sZS5wcm90b3R5cGUudGVtcGxhdGVBd2FyZVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNUZW1wbGF0ZUVsZW1lbnQodCk/dGhpcy5jb250ZW50KHQpOnR9LGUucHJvdG90eXBlLmNyZWF0ZUh0bWxEb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfSxlLnByb3RvdHlwZS5nZXREZWZhdWx0RG9jdW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnR9LGUucHJvdG90eXBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2godCl7cmV0dXJue3RvcDowLGJvdHRvbTowLGxlZnQ6MCxyaWdodDowLHdpZHRoOjAsaGVpZ2h0OjB9fX0sZS5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGl0bGV9LGUucHJvdG90eXBlLnNldFRpdGxlPWZ1bmN0aW9uKHQsZSl7dC50aXRsZT1lfHwiIn0sZS5wcm90b3R5cGUuZWxlbWVudE1hdGNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXRoaXMuaXNFbGVtZW50Tm9kZSh0KSYmKHQubWF0Y2hlcyYmdC5tYXRjaGVzKGUpfHx0Lm1zTWF0Y2hlc1NlbGVjdG9yJiZ0Lm1zTWF0Y2hlc1NlbGVjdG9yKGUpfHx0LndlYmtpdE1hdGNoZXNTZWxlY3RvciYmdC53ZWJraXRNYXRjaGVzU2VsZWN0b3IoZSkpfSxlLnByb3RvdHlwZS5pc1RlbXBsYXRlRWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc0VsZW1lbnROb2RlKHQpJiYiVEVNUExBVEUiPT09dC5ub2RlTmFtZX0sZS5wcm90b3R5cGUuaXNUZXh0Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFfSxlLnByb3RvdHlwZS5pc0NvbW1lbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5DT01NRU5UX05PREV9LGUucHJvdG90eXBlLmlzRWxlbWVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0sZS5wcm90b3R5cGUuaGFzU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dC5zaGFkb3dSb290JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LGUucHJvdG90eXBlLmlzU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnR9LGUucHJvdG90eXBlLmltcG9ydEludG9Eb2M9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmltcG9ydE5vZGUodGhpcy50ZW1wbGF0ZUF3YXJlUm9vdCh0KSwhMCl9LGUucHJvdG90eXBlLmFkb3B0Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuYWRvcHROb2RlKHQpfSxlLnByb3RvdHlwZS5nZXRIcmVmPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEF0dHJpYnV0ZSgiaHJlZiIpfSxlLnByb3RvdHlwZS5nZXRFdmVudEtleT1mdW5jdGlvbih0KXt2YXIgZT10LmtleTtpZihudWxsPT1lKXtpZihudWxsPT0oZT10LmtleUlkZW50aWZpZXIpKXJldHVybiJVbmlkZW50aWZpZWQiO2Uuc3RhcnRzV2l0aCgiVSsiKSYmKGU9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLnN1YnN0cmluZygyKSwxNikpLDM9PT10LmxvY2F0aW9uJiZmLmhhc093blByb3BlcnR5KGUpJiYoZT1mW2VdKSl9cmV0dXJuIGNbZV18fGV9LGUucHJvdG90eXBlLmdldEdsb2JhbEV2ZW50VGFyZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9LGUucHJvdG90eXBlLmdldEhpc3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93Lmhpc3Rvcnl9LGUucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbn0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9ZnVuY3Rpb24odCl7dmFyIGUsbj1wfHwocD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIikpP3AuZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbDtyZXR1cm4gbnVsbD09bj9udWxsOihlPW4saHx8KGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSxoLnNldEF0dHJpYnV0ZSgiaHJlZiIsZSksIi8iPT09aC5wYXRobmFtZS5jaGFyQXQoMCk/aC5wYXRobmFtZToiLyIraC5wYXRobmFtZSl9LGUucHJvdG90eXBlLnJlc2V0QmFzZUVsZW1lbnQ9ZnVuY3Rpb24oKXtwPW51bGx9LGUucHJvdG90eXBlLmdldFVzZXJBZ2VudD1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH0sZS5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2Usbil9LGUucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2UpfSxlLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBnZXRDb21wdXRlZFN0eWxlKHQpfSxlLnByb3RvdHlwZS5zdXBwb3J0c1dlYkFuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlfSxlLnByb3RvdHlwZS5wZXJmb3JtYW5jZU5vdz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdygpOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSxlLnByb3RvdHlwZS5zdXBwb3J0c0Nvb2tpZXM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZ2V0Q29va2llPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoaS51KShkb2N1bWVudC5jb29raWUsdCl9LGUucHJvdG90eXBlLnNldENvb2tpZT1mdW5jdGlvbih0LGUpe2RvY3VtZW50LmNvb2tpZT1lbmNvZGVVUklDb21wb25lbnQodCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKX0sZX0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztlLl9hbmltYXRpb25QcmVmaXg9bnVsbCxlLl90cmFuc2l0aW9uRW5kPW51bGw7dHJ5e3ZhciBuPWUuY3JlYXRlRWxlbWVudCgiZGl2Iixkb2N1bWVudCk7aWYobnVsbCE9ZS5nZXRTdHlsZShuLCJhbmltYXRpb25OYW1lIikpZS5fYW5pbWF0aW9uUHJlZml4PSIiO2Vsc2UgZm9yKHZhciByPVsiV2Via2l0IiwiTW96IiwiTyIsIm1zIl0saT0wO2k8ci5sZW5ndGg7aSsrKWlmKG51bGwhPWUuZ2V0U3R5bGUobixyW2ldKyJBbmltYXRpb25OYW1lIikpe2UuX2FuaW1hdGlvblByZWZpeD0iLSIrcltpXS50b0xvd2VyQ2FzZSgpKyItIjticmVha312YXIgbz17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtudWxsIT1lLmdldFN0eWxlKG4sdCkmJihlLl90cmFuc2l0aW9uRW5kPW9bdF0pfSl9Y2F0Y2godCl7ZS5fYW5pbWF0aW9uUHJlZml4PW51bGwsZS5fdHJhbnNpdGlvbkVuZD1udWxsfXJldHVybiBlfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldERpc3RyaWJ1dGVkTm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGlzdHJpYnV0ZWROb2RlcygpfSxlLnByb3RvdHlwZS5yZXNvbHZlQW5kU2V0SHJlZj1mdW5jdGlvbih0LGUsbil7dC5ocmVmPW51bGw9PW4/ZTplKyIvLi4vIitufSxlLnByb3RvdHlwZS5zdXBwb3J0c0RPTUV2ZW50cz1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5zdXBwb3J0c05hdGl2ZVNoYWRvd0RPTT1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkb2N1bWVudC5ib2R5LmNyZWF0ZVNoYWRvd1Jvb3R9LGUucHJvdG90eXBlLmdldEFuaW1hdGlvblByZWZpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25QcmVmaXg/dGhpcy5fYW5pbWF0aW9uUHJlZml4OiIifSxlLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmQ/dGhpcy5fdHJhbnNpdGlvbkVuZDoiIn0sZS5wcm90b3R5cGUuc3VwcG9ydHNBbmltYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhpcy5fYW5pbWF0aW9uUHJlZml4JiZudWxsIT10aGlzLl90cmFuc2l0aW9uRW5kfSxlfShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnJlc291cmNlTG9hZGVyVHlwZT1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF0dHJUb1Byb3BNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0clRvUHJvcE1hcH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2F0dHJUb1Byb3BNYXA9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpKSkscD1udWxsLG09aS5kO2Z1bmN0aW9uIHkoKXtyZXR1cm4hIXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZX12YXIgZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faW5pdCgpLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uPXMoKS5nZXRMb2NhdGlvbigpLHRoaXMuX2hpc3Rvcnk9cygpLmdldEhpc3RvcnkoKX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWZGcm9tRE9NPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfSxlLnByb3RvdHlwZS5vblBvcFN0YXRlPWZ1bmN0aW9uKHQpe3MoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIix0LCExKX0sZS5wcm90b3R5cGUub25IYXNoQ2hhbmdlPWZ1bmN0aW9uKHQpe3MoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHQsITEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGhuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucGF0aG5hbWV9LHNldDpmdW5jdGlvbih0KXt0aGlzLmxvY2F0aW9uLnBhdGhuYW1lPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWFyY2giLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zZWFyY2h9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoYXNoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaGFzaH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4pe3koKT90aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZSh0LGUsbik6dGhpcy5sb2NhdGlvbi5oYXNoPW59LGUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbil7eSgpP3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKHQsZSxuKTp0aGlzLmxvY2F0aW9uLmhhc2g9bn0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX2hpc3RvcnkuZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9LGUuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOm8ubixhcmdzOlttXX1dfV19LGV9KGkucCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXQsdGhpcy5fZG9tPXMoKX1yZXR1cm4gdC5wcm90b3R5cGUuYWRkVGFnPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx0P3RoaXMuX2dldE9yQ3JlYXRlRWxlbWVudCh0LGUpOm51bGx9LHQucHJvdG90eXBlLmFkZFRhZ3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksdD90LnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiByJiZ0LnB1c2gobi5fZ2V0T3JDcmVhdGVFbGVtZW50KHIsZSkpLHR9LFtdKTpbXX0sdC5wcm90b3R5cGUuZ2V0VGFnPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLl9kb20ucXVlcnlTZWxlY3Rvcih0aGlzLl9kb2MsIm1ldGFbIit0KyJdIil8fG51bGx9LHQucHJvdG90eXBlLmdldFRhZ3M9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuW107dmFyIGU9dGhpcy5fZG9tLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fZG9jLCJtZXRhWyIrdCsiXSIpO3JldHVybiBlP1tdLnNsaWNlLmNhbGwoZSk6W119LHQucHJvdG90eXBlLnVwZGF0ZVRhZz1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2U9ZXx8dGhpcy5fcGFyc2VTZWxlY3Rvcih0KTt2YXIgbj10aGlzLmdldFRhZyhlKTtyZXR1cm4gbj90aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxuKTp0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQodCwhMCl9LHQucHJvdG90eXBlLnJlbW92ZVRhZz1mdW5jdGlvbih0KXt0aGlzLnJlbW92ZVRhZ0VsZW1lbnQodGhpcy5nZXRUYWcodCkpfSx0LnByb3RvdHlwZS5yZW1vdmVUYWdFbGVtZW50PWZ1bmN0aW9uKHQpe3QmJnRoaXMuX2RvbS5yZW1vdmUodCl9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksIWUpe3ZhciBuPXRoaXMuX3BhcnNlU2VsZWN0b3IodCkscj10aGlzLmdldFRhZyhuKTtpZihyJiZ0aGlzLl9jb250YWluc0F0dHJpYnV0ZXModCxyKSlyZXR1cm4gcn12YXIgaT10aGlzLl9kb20uY3JlYXRlRWxlbWVudCgibWV0YSIpO3RoaXMuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcyh0LGkpO3ZhciBvPXRoaXMuX2RvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0aGlzLl9kb2MsImhlYWQiKVswXTtyZXR1cm4gdGhpcy5fZG9tLmFwcGVuZENoaWxkKG8saSksaX0sdC5wcm90b3R5cGUuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIG4uX2RvbS5zZXRBdHRyaWJ1dGUoZSxyLHRbcl0pfSksZX0sdC5wcm90b3R5cGUuX3BhcnNlU2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lPyJuYW1lIjoicHJvcGVydHkiO3JldHVybiBlKyc9IicrdFtlXSsnIid9LHQucHJvdG90eXBlLl9jb250YWluc0F0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0KS5ldmVyeShmdW5jdGlvbihyKXtyZXR1cm4gbi5fZG9tLmdldEF0dHJpYnV0ZShlLHIpPT09dFtyXX0pfSx0fSgpLGI9bmV3IG8ubygiVFJBTlNJVElPTl9JRCIpLF89W3twcm92aWRlOm8uZCx1c2VGYWN0b3J5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXtuLmdldChvLmUpLmRvbmVQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1zKCk7QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KG4ucXVlcnlTZWxlY3RvckFsbChlLCJzdHlsZVtuZy10cmFuc2l0aW9uXSIpKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZ2V0QXR0cmlidXRlKGUsIm5nLXRyYW5zaXRpb24iKT09PXR9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnJlbW92ZSh0KX0pfSl9fSxkZXBzOltiLG0sby5wXSxtdWx0aTohMH1dLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmluaXQ9ZnVuY3Rpb24oKXtPYmplY3Qoby5ZKShuZXcgdCl9LHQucHJvdG90eXBlLmFkZFRvV2luZG93PWZ1bmN0aW9uKHQpe28uUGEuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PWZ1bmN0aW9uKGUsbil7dm9pZCAwPT09biYmKG49ITApO3ZhciByPXQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGUsbik7aWYobnVsbD09cil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRlc3RhYmlsaXR5IGZvciBlbGVtZW50LiIpO3JldHVybiByfSxvLlBhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0QWxsVGVzdGFiaWxpdGllcygpfSxvLlBhLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZXRBbGxSb290RWxlbWVudHMoKX0sby5QYS5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KG8uUGEuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLG8uUGEuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChmdW5jdGlvbih0KXt2YXIgZT1vLlBhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbj1lLmxlbmd0aCxyPSExLGk9ZnVuY3Rpb24oZSl7cj1yfHxlLDA9PS0tbiYmdChyKX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qud2hlblN0YWJsZShpKX0pfSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUsbil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDt2YXIgcj10LmdldFRlc3RhYmlsaXR5KGUpO3JldHVybiBudWxsIT1yP3I6bj9zKCkuaXNTaGFkb3dSb290KGUpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLmdldEhvc3QoZSksITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLnBhcmVudEVsZW1lbnQoZSksITApOm51bGx9LHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXR9cmV0dXJuIHQucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5nZXRUaXRsZSh0aGlzLl9kb2MpfSx0LnByb3RvdHlwZS5zZXRUaXRsZT1mdW5jdGlvbih0KXtzKCkuc2V0VGl0bGUodGhpcy5fZG9jLHQpfSx0fSgpO2Z1bmN0aW9uIE8odCxlKXsidW5kZWZpbmVkIiE9dHlwZW9mIENPTVBJTEVEJiZDT01QSUxFRHx8KChvLlBhLm5nPW8uUGEubmd8fHt9KVt0XT1lKX12YXIgQz17QXBwbGljYXRpb25SZWY6by5nLE5nWm9uZTpvLnh9LFM9InByb2JlIixFPSJjb3JlVG9rZW5zIjtmdW5jdGlvbiBrKHQpe3JldHVybiBPYmplY3Qoby5VKSh0KX1mdW5jdGlvbiBUKHQpe3JldHVybiBPKFMsayksTyhFLE9iamVjdChyLmEpKHt9LEMsKHR8fFtdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlLm5hbWVdPWUudG9rZW4sdH0se30pKSksZnVuY3Rpb24oKXtyZXR1cm4ga319dmFyIEk9bmV3IG8ubygiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpLEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl96b25lPWUsdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCx0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQubWFuYWdlcj1ufSksdGhpcy5fcGx1Z2lucz10LnNsaWNlKCkucmV2ZXJzZSgpfXJldHVybiB0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihlKS5hZGRFdmVudExpc3RlbmVyKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil9LHQucHJvdG90eXBlLmdldFpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sdC5wcm90b3R5cGUuX2ZpbmRQbHVnaW5Gb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KHQpO2lmKGUpcmV0dXJuIGU7Zm9yKHZhciBuPXRoaXMuX3BsdWdpbnMscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGkuc3VwcG9ydHModCkpcmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldCh0LGkpLGl9dGhyb3cgbmV3IEVycm9yKCJObyBldmVudCBtYW5hZ2VyIHBsdWdpbiBmb3VuZCBmb3IgZXZlbnQgIit0KX0sdH0oKSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYyx0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAiK3IrIiBmb3IgZXZlbnQgIitlKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKHIsZSxuKX0sdH0oKSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX3N0eWxlc1NldD1uZXcgU2V0fXJldHVybiB0LnByb3RvdHlwZS5hZGRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPW5ldyBTZXQ7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0eWxlc1NldC5oYXModCl8fChlLl9zdHlsZXNTZXQuYWRkKHQpLG4uYWRkKHQpKX0pLHRoaXMub25TdHlsZXNBZGRlZChuKX0sdC5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmdldEFsbFN0eWxlcz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0eWxlc1NldCl9LHR9KCksTT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faG9zdE5vZGVzPW5ldyBTZXQsbi5fc3R5bGVOb2Rlcz1uZXcgU2V0LG4uX2hvc3ROb2Rlcy5hZGQoZS5oZWFkKSxufXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLl9hZGRTdHlsZXNUb0hvc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLl9kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnRleHRDb250ZW50PXQsbi5fc3R5bGVOb2Rlcy5hZGQoZS5hcHBlbmRDaGlsZChyKSl9KX0sZS5wcm90b3R5cGUuYWRkSG9zdD1mdW5jdGlvbih0KXt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodGhpcy5fc3R5bGVzU2V0LHQpLHRoaXMuX2hvc3ROb2Rlcy5hZGQodCl9LGUucHJvdG90eXBlLnJlbW92ZUhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5faG9zdE5vZGVzLmRlbGV0ZSh0KX0sZS5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlLl9hZGRTdHlsZXNUb0hvc3QodCxuKX0pfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0eWxlTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gcygpLnJlbW92ZSh0KX0pfSxlfShQKSxOPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxSPS8lQ09NUCUvZyxEPSJfbmdob3N0LSVDT01QJSIsTD0iX25nY29udGVudC0lQ09NUCUiO2Z1bmN0aW9uIEYodCxlLG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO0FycmF5LmlzQXJyYXkoaSk/Rih0LGksbik6KGk9aS5yZXBsYWNlKFIsdCksbi5wdXNoKGkpKX1yZXR1cm4gbn1mdW5jdGlvbiBWKHQpe3JldHVybiBmdW5jdGlvbihlKXshMT09PXQoZSkmJihlLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSl9fXZhciBVPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWUsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IHoodCl9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fCFlKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goZS5lbmNhcHN1bGF0aW9uKXtjYXNlIG8uTy5FbXVsYXRlZDp2YXIgbj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGUuaWQpO3JldHVybiBufHwobj1uZXcgcSh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsZSksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLG4pKSxuLmFwcGx5VG9Ib3N0KHQpLG47Y2FzZSBvLk8uTmF0aXZlOmNhc2Ugby5PLlNoYWRvd0RvbTpyZXR1cm4gbmV3IFkodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LHQsZSk7ZGVmYXVsdDppZighdGhpcy5yZW5kZXJlckJ5Q29tcElkLmhhcyhlLmlkKSl7dmFyIHI9RihlLmlkLGUuc3R5bGVzLFtdKTt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHIpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5zZXQoZS5pZCx0aGlzLmRlZmF1bHRSZW5kZXJlcil9cmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyfX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sdH0oKSx6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE5bZV0sdCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCl9LHQucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dC5hcHBlbmRDaGlsZChlKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt0JiZ0Lmluc2VydEJlZm9yZShlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3QmJnQucmVtb3ZlQ2hpbGQoZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPSJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdUaGUgc2VsZWN0b3IgIicrdCsnIiBkaWQgbm90IG1hdGNoIGFueSBlbGVtZW50cycpO3JldHVybiBlLnRleHRDb250ZW50PSIiLGV9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixyKXtpZihyKXtlPXIrIjoiK2U7dmFyIGk9TltyXTtpP3Quc2V0QXR0cmlidXRlTlMoaSxlLG4pOnQuc2V0QXR0cmlidXRlKGUsbil9ZWxzZSB0LnNldEF0dHJpYnV0ZShlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe2lmKG4pe3ZhciByPU5bbl07cj90LnJlbW92ZUF0dHJpYnV0ZU5TKHIsZSk6dC5yZW1vdmVBdHRyaWJ1dGUobisiOiIrZSl9ZWxzZSB0LnJlbW92ZUF0dHJpYnV0ZShlKX0sdC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbixyKXtyJm8uRC5EYXNoQ2FzZT90LnN0eWxlLnNldFByb3BlcnR5KGUsbixyJm8uRC5JbXBvcnRhbnQ/ImltcG9ydGFudCI6IiIpOnQuc3R5bGVbZV09bn0sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe24mby5ELkRhc2hDYXNlP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dC5zdHlsZVtlXT0iIn0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe0goZSwicHJvcGVydHkiKSx0W2VdPW59LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dC5ub2RlVmFsdWU9ZX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gSChlLCJsaXN0ZW5lciIpLCJzdHJpbmciPT10eXBlb2YgdD90aGlzLmV2ZW50TWFuYWdlci5hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxWKG4pKTp0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsZSxWKG4pKX0sdH0oKSxCPSJAIi5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIEgodCxlKXtpZih0LmNoYXJDb2RlQXQoMCk9PT1CKXRocm93IG5ldyBFcnJvcigiRm91bmQgdGhlIHN5bnRoZXRpYyAiK2UrIiAiK3QrJy4gUGxlYXNlIGluY2x1ZGUgZWl0aGVyICJCcm93c2VyQW5pbWF0aW9uc01vZHVsZSIgb3IgIk5vb3BBbmltYXRpb25zTW9kdWxlIiBpbiB5b3VyIGFwcGxpY2F0aW9uLicpfXZhciBXLHE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7aS5jb21wb25lbnQ9cjt2YXIgbz1GKHIuaWQsci5zdHlsZXMsW10pO3JldHVybiBuLmFkZFN0eWxlcyhvKSxpLmNvbnRlbnRBdHRyPUwucmVwbGFjZShSLHIuaWQpLGkuaG9zdEF0dHI9RC5yZXBsYWNlKFIsci5pZCksaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5hcHBseVRvSG9zdD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLGUsdGhpcy5ob3N0QXR0ciwiIil9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSxuKXt2YXIgcj10LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50LmNhbGwodGhpcyxlLG4pO3JldHVybiB0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLHIsdGhpcy5jb250ZW50QXR0ciwiIikscn0sZX0oeiksWT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBhPXQuY2FsbCh0aGlzLGUpfHx0aGlzO2Euc2hhcmVkU3R5bGVzSG9zdD1uLGEuaG9zdEVsPXIsYS5jb21wb25lbnQ9aSxhLnNoYWRvd1Jvb3Q9aS5lbmNhcHN1bGF0aW9uPT09by5PLlNoYWRvd0RvbT9yLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KTpyLmNyZWF0ZVNoYWRvd1Jvb3QoKSxhLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdChhLnNoYWRvd1Jvb3QpO2Zvcih2YXIgcz1GKGkuaWQsaS5zdHlsZXMsW10pLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtsLnRleHRDb250ZW50PXNbdV0sYS5zaGFkb3dSb290LmFwcGVuZENoaWxkKGwpfXJldHVybiBhfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm5vZGVPclNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT10aGlzLmhvc3RFbD90aGlzLnNoYWRvd1Jvb3Q6dH0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9LGUucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLmFwcGVuZENoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHQucHJvdG90eXBlLmluc2VydEJlZm9yZS5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4scil9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLnJlbW92ZUNoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdCh0LnByb3RvdHlwZS5wYXJlbnROb2RlLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSkpKX0sZX0oeiksRz0idW5kZWZpbmVkIiE9dHlwZW9mIFpvbmUmJlpvbmUuX19zeW1ib2xfX3x8ZnVuY3Rpb24odCl7cmV0dXJuIl9fem9uZV9zeW1ib2xfXyIrdH0sUT1HKCJhZGRFdmVudExpc3RlbmVyIiksSz1HKCJyZW1vdmVFdmVudExpc3RlbmVyIiksWj17fSxYPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiOyJ1bmRlZmluZWQiIT10eXBlb2YgWm9uZSYmWm9uZVtHKCJCTEFDS19MSVNURURfRVZFTlRTIildJiYoVz17fSk7dmFyICQ9ZnVuY3Rpb24odCl7cmV0dXJuISFXJiZXLmhhc093blByb3BlcnR5KHQpfSxKPWZ1bmN0aW9uKHQpe3ZhciBlPVpbdC50eXBlXTtpZihlKXt2YXIgbj10aGlzW2VdO2lmKG4pe3ZhciByPVt0XTtpZigxPT09bi5sZW5ndGgpcmV0dXJuKGE9blswXSkuem9uZSE9PVpvbmUuY3VycmVudD9hLnpvbmUucnVuKGEuaGFuZGxlcix0aGlzLHIpOmEuaGFuZGxlci5hcHBseSh0aGlzLHIpO2Zvcih2YXIgaT1uLnNsaWNlKCksbz0wO288aS5sZW5ndGgmJiEwIT09dFtYXTtvKyspe3ZhciBhOyhhPWlbb10pLnpvbmUhPT1ab25lLmN1cnJlbnQ/YS56b25lLnJ1bihhLmhhbmRsZXIsdGhpcyxyKTphLmhhbmRsZXIuYXBwbHkodGhpcyxyKX19fX0sdHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8ubmdab25lPW4sciYmT2JqZWN0KGkucikocil8fG8ucGF0Y2hFdmVudCgpLG99cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUucGF0Y2hFdmVudD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRXZlbnQmJkV2ZW50JiZFdmVudC5wcm90b3R5cGUmJiFFdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKXt2YXIgdD1FdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPUV2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe3RoaXMmJih0aGlzW1hdPSEwKSx0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPW47aWYoIXRbUV18fG8ueC5pc0luQW5ndWxhclpvbmUoKSYmISQoZSkpdC5hZGRFdmVudExpc3RlbmVyKGUsaSwhMSk7ZWxzZXt2YXIgYT1aW2VdO2F8fChhPVpbZV09RygiQU5HVUxBUiIrZSsiRkFMU0UiKSk7dmFyIHM9dFthXSx1PXMmJnMubGVuZ3RoPjA7c3x8KHM9dFthXT1bXSk7dmFyIGw9JChlKT9ab25lLnJvb3Q6Wm9uZS5jdXJyZW50O2lmKDA9PT1zLmxlbmd0aClzLnB1c2goe3pvbmU6bCxoYW5kbGVyOml9KTtlbHNle2Zvcih2YXIgYz0hMSxmPTA7ZjxzLmxlbmd0aDtmKyspaWYoc1tmXS5oYW5kbGVyPT09aSl7Yz0hMDticmVha31jfHxzLnB1c2goe3pvbmU6bCxoYW5kbGVyOml9KX11fHx0W1FdKGUsSiwhMSl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsaSl9fSxlLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10W0tdO2lmKCFyKXJldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSk7dmFyIGk9WltlXSxvPWkmJnRbaV07aWYoIW8pcmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lci5hcHBseSh0LFtlLG4sITFdKTtmb3IodmFyIGE9ITEscz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uaGFuZGxlcj09PW4pe2E9ITAsby5zcGxpY2UocywxKTticmVha31hPzA9PT1vLmxlbmd0aCYmci5hcHBseSh0LFtlLEosITFdKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSl9LGV9KGopLGV0PXtwYW46ITAscGFuc3RhcnQ6ITAscGFubW92ZTohMCxwYW5lbmQ6ITAscGFuY2FuY2VsOiEwLHBhbmxlZnQ6ITAscGFucmlnaHQ6ITAscGFudXA6ITAscGFuZG93bjohMCxwaW5jaDohMCxwaW5jaHN0YXJ0OiEwLHBpbmNobW92ZTohMCxwaW5jaGVuZDohMCxwaW5jaGNhbmNlbDohMCxwaW5jaGluOiEwLHBpbmNob3V0OiEwLHByZXNzOiEwLHByZXNzdXA6ITAscm90YXRlOiEwLHJvdGF0ZXN0YXJ0OiEwLHJvdGF0ZW1vdmU6ITAscm90YXRlZW5kOiEwLHJvdGF0ZWNhbmNlbDohMCxzd2lwZTohMCxzd2lwZWxlZnQ6ITAsc3dpcGVyaWdodDohMCxzd2lwZXVwOiEwLHN3aXBlZG93bjohMCx0YXA6ITB9LG50PW5ldyBvLm8oIkhhbW1lckdlc3R1cmVDb25maWciKSxydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmV2ZW50cz1bXSx0aGlzLm92ZXJyaWRlcz17fX1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRIYW1tZXI9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEhhbW1lcih0LHRoaXMub3B0aW9ucyk7Zm9yKHZhciBuIGluIGUuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEwfSksdGhpcy5vdmVycmlkZXMpZS5nZXQobikuc2V0KHRoaXMub3ZlcnJpZGVzW25dKTtyZXR1cm4gZX0sdH0oKSxpdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5fY29uZmlnPW4saS5jb25zb2xlPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKCFldC5oYXNPd25Qcm9wZXJ0eSh0LnRvTG93ZXJDYXNlKCkpJiYhdGhpcy5pc0N1c3RvbUV2ZW50KHQpfHwhd2luZG93LkhhbW1lciYmKHRoaXMuY29uc29sZS53YXJuKCJIYW1tZXIuanMgaXMgbm90IGxvYWRlZCwgY2FuIG5vdCBiaW5kICciK3QrIicgZXZlbnQuIiksMSkpfSxlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLGk9dGhpcy5tYW5hZ2VyLmdldFpvbmUoKTtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksaS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3ZhciBvPXIuX2NvbmZpZy5idWlsZEhhbW1lcih0KSxhPWZ1bmN0aW9uKHQpe2kucnVuR3VhcmRlZChmdW5jdGlvbigpe24odCl9KX07cmV0dXJuIG8ub24oZSxhKSxmdW5jdGlvbigpe3JldHVybiBvLm9mZihlLGEpfX0pfSxlLnByb3RvdHlwZS5pc0N1c3RvbUV2ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb25maWcuZXZlbnRzLmluZGV4T2YodCk+LTF9LGV9KGopLG90PVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLGF0PXthbHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWx0S2V5fSxjb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmN0cmxLZXl9LG1ldGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWV0YUtleX0sc2hpZnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2hpZnRLZXl9fSxzdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9ZS5wYXJzZUV2ZW50TmFtZSh0KX0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5wYXJzZUV2ZW50TmFtZShuKSxvPWUuZXZlbnRDYWxsYmFjayhpLmZ1bGxLZXkscix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBzKCkub25BbmRDYW5jZWwodCxpLmRvbUV2ZW50TmFtZSxvKX0pfSxlLnBhcnNlRXZlbnROYW1lPWZ1bmN0aW9uKHQpe3ZhciBuPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLHI9bi5zaGlmdCgpO2lmKDA9PT1uLmxlbmd0aHx8ImtleWRvd24iIT09ciYmImtleXVwIiE9PXIpcmV0dXJuIG51bGw7dmFyIGk9ZS5fbm9ybWFsaXplS2V5KG4ucG9wKCkpLG89IiI7aWYob3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLmluZGV4T2YodCk7ZT4tMSYmKG4uc3BsaWNlKGUsMSksbys9dCsiLiIpfSksbys9aSwwIT1uLmxlbmd0aHx8MD09PWkubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPXt9O3JldHVybiBhLmRvbUV2ZW50TmFtZT1yLGEuZnVsbEtleT1vLGF9LGUuZ2V0RXZlbnRGdWxsS2V5PWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49cygpLmdldEV2ZW50S2V5KHQpO3JldHVybiIgIj09PShuPW4udG9Mb3dlckNhc2UoKSk/bj0ic3BhY2UiOiIuIj09PW4mJihuPSJkb3QiKSxvdC5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IhPW4mJigwLGF0W3JdKSh0KSYmKGUrPXIrIi4iKX0pLGUrPW59LGUuZXZlbnRDYWxsYmFjaz1mdW5jdGlvbih0LG4scil7cmV0dXJuIGZ1bmN0aW9uKGkpe2UuZ2V0RXZlbnRGdWxsS2V5KGkpPT09dCYmci5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7cmV0dXJuIG4oaSl9KX19LGUuX25vcm1hbGl6ZUtleT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJlc2MiOnJldHVybiJlc2NhcGUiO2RlZmF1bHQ6cmV0dXJuIHR9fSxlfShqKSx1dD1mdW5jdGlvbigpe30sbHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2RvYz1lLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuc2FuaXRpemU9ZnVuY3Rpb24odCxlKXtpZihudWxsPT1lKXJldHVybiBudWxsO3N3aXRjaCh0KXtjYXNlIG8uRi5OT05FOnJldHVybiBlO2Nhc2Ugby5GLkhUTUw6cmV0dXJuIGUgaW5zdGFuY2VvZiBmdD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiSFRNTCIpLE9iamVjdChvLkNhKSh0aGlzLl9kb2MsU3RyaW5nKGUpKSk7Y2FzZSBvLkYuU1RZTEU6cmV0dXJuIGUgaW5zdGFuY2VvZiBodD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiU3R5bGUiKSxPYmplY3Qoby5EYSkoZSkpO2Nhc2Ugby5GLlNDUklQVDppZihlIGluc3RhbmNlb2YgZHQpcmV0dXJuIGUuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTt0aHJvdyB0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlNjcmlwdCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCIpO2Nhc2Ugby5GLlVSTDpyZXR1cm4gZSBpbnN0YW5jZW9mIG10fHxlIGluc3RhbmNlb2YgcHQ/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlVSTCIpLE9iamVjdChvLkVhKShTdHJpbmcoZSkpKTtjYXNlIG8uRi5SRVNPVVJDRV9VUkw6aWYoZSBpbnN0YW5jZW9mIG10KXJldHVybiBlLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7dGhyb3cgdGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJSZXNvdXJjZVVSTCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSByZXNvdXJjZSBVUkwgY29udGV4dCAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTZWN1cml0eUNvbnRleHQgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIil9fSxlLnByb3RvdHlwZS5jaGVja05vdFNhZmVWYWx1ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiBjdCl0aHJvdyBuZXcgRXJyb3IoIlJlcXVpcmVkIGEgc2FmZSAiK2UrIiwgZ290IGEgIit0LmdldFR5cGVOYW1lKCkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaHQodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFVybD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHB0KHQpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtdCh0KX0sZX0odXQpLGN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogIit0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykifSx0fSgpLGZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIkhUTUwifSxlfShjdCksaHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU3R5bGUifSxlfShjdCksZHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU2NyaXB0In0sZX0oY3QpLHB0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlVSTCJ9LGV9KGN0KSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJSZXNvdXJjZVVSTCJ9LGV9KGN0KSx5dD1be3Byb3ZpZGU6by56LHVzZVZhbHVlOmkuc30se3Byb3ZpZGU6by5BLHVzZVZhbHVlOmZ1bmN0aW9uKCl7ZC5tYWtlQ3VycmVudCgpLHcuaW5pdCgpfSxtdWx0aTohMH0se3Byb3ZpZGU6aS5wLHVzZUNsYXNzOmcsZGVwczpbbV19LHtwcm92aWRlOm0sdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sZGVwczpbXX1dLGd0PU9iamVjdChvLlEpKG8uWCwiYnJvd3NlciIseXQpO2Z1bmN0aW9uIHZ0KCl7cmV0dXJuIG5ldyBvLmx9dmFyIGJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0KXRocm93IG5ldyBFcnJvcigiQnJvd3Nlck1vZHVsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSWYgeW91IG5lZWQgYWNjZXNzIHRvIGNvbW1vbiBkaXJlY3RpdmVzIHN1Y2ggYXMgTmdJZiBhbmQgTmdGb3IgZnJvbSBhIGxhenkgbG9hZGVkIG1vZHVsZSwgaW1wb3J0IENvbW1vbk1vZHVsZSBpbnN0ZWFkLiIpfXJldHVybiB0LndpdGhTZXJ2ZXJUcmFuc2l0aW9uPWZ1bmN0aW9uKGUpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6by5jLHVzZVZhbHVlOmUuYXBwSWR9LHtwcm92aWRlOmIsdXNlRXhpc3Rpbmc6by5jfSxfXX19LHR9KCk7InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd30sWm44RDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigicHNXMCIpLGk9bigibUNoRiIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksT2JqZWN0KHIuYSkoaS5hLHQpfX0sYWVjZDpmdW5jdGlvbihtb2R1bGUsX193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sImEiLGZ1bmN0aW9uKCl7cmV0dXJuIFByZUluaXRMb2FkZXJTZXJ2aWNlfSk7dmFyIF9wYWdlX2NodW5rX3JlY29yZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fPV9fd2VicGFja19yZXF1aXJlX18oInJmMzAiKSxfZW52aXJvbm1lbnRzX2Vudmlyb25tZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX189X193ZWJwYWNrX3JlcXVpcmVfXygiQXl0UiIpLF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJDY25HIiksX2FuZ3VsYXJfY29tbW9uX2h0dHBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJ0L05hIiksUHJlSW5pdExvYWRlclNlcnZpY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBQcmVJbml0TG9hZGVyU2VydmljZSh0KXt0aGlzLmh0dHA9dH1yZXR1cm4gUHJlSW5pdExvYWRlclNlcnZpY2UucHJvdG90eXBlLmxvYWRQYWdlQXRJbml0PWZ1bmN0aW9uKCl7aWYoMCE9X2Vudmlyb25tZW50c19lbnZpcm9ubWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fLmEucHJvZHVjdGlvbil7Y29uc29sZS5sb2coIklQTCA6IEluaXRpYWwgcGFnZSBsb2FkZXIgW0FQUF9JTklUSUFMSVpFUl0iKTt2YXIgY3VyclVybD13aW5kb3cubG9jYXRpb24uaHJlZixyZWdleD1uZXcgUmVnRXhwKCIjXFwvLioiKSxtYXRjaEFycmF5PWN1cnJVcmwubWF0Y2gocmVnZXgpLGN1cnJQYXRoPW1hdGNoQXJyYXlbMF0uc2xpY2UoMSk7Y29uc29sZS5sb2coIlVSTCA6ICIrY3VyclVybCksY29uc29sZS5sb2coIlBhdGggOiAiK2N1cnJQYXRoKTt2YXIgcmVjb3JkPV9wYWdlX2NodW5rX3JlY29yZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fLmEuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYWdlTmFtZT09Y3VyclBhdGh9KTtpZih2b2lkIDAhPXJlY29yZCl7aWYoY29uc29sZS5sb2coIklQTCA6IENvcnJlc3BvbmRpbmcgcmVjb3JkIGZvdW5kIDogIityZWNvcmQucGFnZU5hbWUrIiAoIityZWNvcmQuY2h1bmtVUkwrIikiKSwwPT1yZWNvcmQuY2h1bmtMb2FkZWQpe3ZhciByZXE9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKHJlcS5vcGVuKCJHRVQiLHJlY29yZC5jaHVua1VSTCwhMSkscmVxLnNlbmQobnVsbCksMjAwPT09cmVxLnN0YXR1cyl7dmFyIGRlY29kZWREYXRhPWF0b2IocmVxLnJlc3BvbnNlVGV4dCk7ZXZhbChkZWNvZGVkRGF0YSkscmVjb3JkLmNodW5rTG9hZGVkPSEwLGNvbnNvbGUubG9nKCJJUEwgOiBMb2FkZWQgOiAiK3JlY29yZC5wYWdlTmFtZSsiICgiK3JlY29yZC5jaHVua1VSTCsiKSIpfWVsc2UgY29uc29sZS5sb2coIklQTCA6IEVycm9yIHdoaWxlIGdldHRpbmcgZGF0YTogJWQgKCVzKSIscmVxLnN0YXR1cyxyZXEuc3RhdHVzVGV4dCl9fWVsc2UgY29uc29sZS5sb2coIklQTCA6IE5vIHJlY29yZCBmb3VuZCwgcGFnZSBjYW4ndCBiZSBsb2FkZWQgaW5pdGlhbGx5LlxuSVBMIDogVGhpcyBtYXkgYmUgYW4gZXJyb3IgaWYgdGhlIHBhdGggaXMgbm90IHBhcnQgb2YgdGhlIG1haW4gY2h1bmsgdGhhdCBpcyBlbWJlZGRlZCBpbiB0aGUgaHRtbCBwYWdlIil9fSxQcmVJbml0TG9hZGVyU2VydmljZS5uZ0luamVjdGFibGVEZWY9X2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fLlIoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFByZUluaXRMb2FkZXJTZXJ2aWNlKF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXy5WKF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18uYykpfSx0b2tlbjpQcmVJbml0TG9hZGVyU2VydmljZSxwcm92aWRlZEluOiJyb290In0pLFByZUluaXRMb2FkZXJTZXJ2aWNlfSgpfSxiN21XOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJtclNHIiksaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIG49dC5jYWxsKHRoaXMsImFyZ3VtZW50IG91dCBvZiByYW5nZSIpfHx0aGlzO3JldHVybiBuLm5hbWU9IkFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YobixlLnByb3RvdHlwZSksbn1yZXR1cm4gci5iKGUsdCksZX0oRXJyb3IpfSxibmU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCJpc2J5Iiksbz1uKCIyQmRqIiksYT1uKCI2N1kvIik7ZnVuY3Rpb24gcyh0LGUsbix1KXtyZXR1cm4gT2JqZWN0KG8uYSkobikmJih1PW4sbj12b2lkIDApLHU/cyh0LGUsbikucGlwZShPYmplY3QoYS5hKShmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KGkuYSkodCk/dS5hcHBseSh2b2lkIDAsdCk6dSh0KX0pKTpuZXcgci5hKGZ1bmN0aW9uKHIpeyFmdW5jdGlvbiB0KGUsbixyLGksbyl7dmFyIGE7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUV2ZW50TGlzdGVuZXJ9KGUpKXt2YXIgcz1lO2UuYWRkRXZlbnRMaXN0ZW5lcihuLHIsbyksYT1mdW5jdGlvbigpe3JldHVybiBzLnJlbW92ZUV2ZW50TGlzdGVuZXIobixyLG8pfX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5vbiYmImZ1bmN0aW9uIj09dHlwZW9mIHQub2ZmfShlKSl7dmFyIHU9ZTtlLm9uKG4sciksYT1mdW5jdGlvbigpe3JldHVybiB1Lm9mZihuLHIpfX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRMaXN0ZW5lciYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVtb3ZlTGlzdGVuZXJ9KGUpKXt2YXIgbD1lO2UuYWRkTGlzdGVuZXIobixyKSxhPWZ1bmN0aW9uKCl7cmV0dXJuIGwucmVtb3ZlTGlzdGVuZXIobixyKX19ZWxzZXtpZighZXx8IWUubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7Zm9yKHZhciBjPTAsZj1lLmxlbmd0aDtjPGY7YysrKXQoZVtjXSxuLHIsaSxvKX1pLmFkZChhKX0odCxlLGZ1bmN0aW9uKHQpe3IubmV4dChhcmd1bWVudHMubGVuZ3RoPjE/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTp0KX0scixuKX0pfU9iamVjdH0sYnVqdDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgcj1uKCJDY25HIiksaT0obigiVW9kSCIpLG4oIklwMFIiKSxuKCJGenFjIiksbigiV2Y0cCIpKSxvPW4oImRXWmciKSxhPW4oIndGdzEiKSxzPShuKCJsTEFQIiksci5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lO29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpfS5tYXQtcmFpc2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtcmFpc2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtcmFpc2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcmFpc2VkLWJ1dHRvbnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbltkaXNhYmxlZF17Ym94LXNoYWRvdzpub25lfS5tYXQtc3Ryb2tlZC1idXR0b257Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7cGFkZGluZzowIDE1cHg7bGluZS1oZWlnaHQ6MzRweH0ubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAwIDAgMCByZ2JhKDAsMCwwLC4yKSwwIDAgMCAwIHJnYmEoMCwwLDAsLjE0KSwwIDAgMCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAwIDAgMCByZ2JhKDAsMCwwLC4yKSwwIDAgMCAwIHJnYmEoMCwwLDAsLjE0KSwwIDAgMCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYltkaXNhYmxlZF17Ym94LXNoYWRvdzpub25lfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDdweCA4cHggLTRweCByZ2JhKDAsMCwwLC4yKSwwIDEycHggMTdweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNXB4IDIycHggNHB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1taW5pLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtbWluaS1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtbWluaS1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtbWluaS1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYltkaXNhYmxlZF17Ym94LXNoYWRvdzpub25lfS5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDZweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDE4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWljb24tYnV0dG9uIGl7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBjdWJpYy1iZXppZXIoLjM1LDAsLjI1LDEpLGJhY2tncm91bmQtY29sb3IgLjJzIGN1YmljLWJlemllciguMzUsMCwuMjUsMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX19Lm1hdC1idXR0b24tcmlwcGxlLXJvdW5ke2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6MX0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTppbmhlcml0O3dpZHRoOjIuNWVtO2hlaWdodDoyLjVlbX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b257b3V0bGluZTpzb2xpZCAxcHh9fSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gci5pYigyLFtyLmViKDQwMjY1MzE4NCwxLHtyaXBwbGU6MH0pLCh0KCkoKSxyLk9hKDEsMCxudWxsLG51bGwsMSwic3BhbiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLXdyYXBwZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksci5YYShudWxsLDApLCh0KCkoKSxyLk9hKDMsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1idXR0b24tcmlwcGxlIG1hdC1yaXBwbGUiXSxbIm1hdFJpcHBsZSIsIiJdXSxbWzIsIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixudWxsXSxbMiwibWF0LXJpcHBsZS11bmJvdW5kZWQiLG51bGxdXSxudWxsLG51bGwsbnVsbCxudWxsKSksci5OYSg0LDIxMjk5MixbWzEsNF1dLDAsaS5xLFtyLmssci54LG8uYSxbMixpLmddLFsyLGEuYV1dLHtjZW50ZXJlZDpbMCwiY2VudGVyZWQiXSxkaXNhYmxlZDpbMSwiZGlzYWJsZWQiXSx0cmlnZ2VyOlsyLCJ0cmlnZ2VyIl19LG51bGwpLCh0KCkoKSxyLk9hKDUsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsNCwwLG4uaXNJY29uQnV0dG9uLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSxuLl9nZXRIb3N0RWxlbWVudCgpKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMywwLG4uaXNSb3VuZEJ1dHRvbnx8bi5pc0ljb25CdXR0b24sci5ZYShlLDQpLnVuYm91bmRlZCl9KX19LGNybmQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXsiLi9zdXBwb3J0LXNlY3Rpb24vc3VwcG9ydC1zZWN0aW9uLWxheWVyLm1vZHVsZS5uZ2ZhY3RvcnkiOlsiTjRscCIsMF0sIi4vdGVhbS1yb3N0ZXIvdGVhbS1yb3N0ZXItbGF5ZXIubW9kdWxlLm5nZmFjdG9yeSI6WyJUa1lrIiwxXSwiLi93aWtpLWxpZ2h0cHJveHkvd2lraS1saWdodHByb3h5LWxheWVyLm1vZHVsZS5uZ2ZhY3RvcnkiOlsiZ0RqYyIsMl19O2Z1bmN0aW9uIGkodCl7dmFyIGU9clt0XTtyZXR1cm4gZT9uLmUoZVsxXSkudGhlbihmdW5jdGlvbigpe3JldHVybiBuKGVbMF0pfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciBlPW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlICInK3QrJyIuJyk7dGhyb3cgZS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixlfSl9aS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHIpfSxpLmlkPSJjcm5kIix0LmV4cG9ydHM9aX0sZFdaZzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO3ZhciByLGk9bigiQ2NuRyIpLG89bigiSXAwUiIpLGE9InVuZGVmaW5lZCIhPXR5cGVvZiBJbnRsJiZJbnRsLnY4QnJlYWtJdGVyYXRvcixzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9wbGF0Zm9ybUlkPXQsdGhpcy5pc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD9PYmplY3Qoby5xKSh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5UPXRoaXMuaXNCcm93c2VyJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFhKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBDU1MmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfXJldHVybiB0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKShpLnosOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiB1KCl7aWYobnVsbD09ciYmInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiByPSEwfX0pKX1maW5hbGx5e3I9cnx8ITF9cmV0dXJuIHJ9dmFyIGw9ZnVuY3Rpb24oKXt9fSxlRGtQOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBTfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBEfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigibjZnRyIpLG89bigicUFsUyIpLGE9bigiSXAwUiIpLHM9bigibXJTRyIpLHU9bigiSzlJYSIpLGw9bigicHVnVCIpLGM9bigiNmJsRiIpLGY9bigidDlmWiIpLGg9bigiZFdaZyIpLGQ9bigiNGMzNSIpLHA9KG4oIllTaDIiKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKCl7fSx0fSgpKSxtPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5zY3JvbGxTdHJhdGVneT1uZXcgcCx0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHQmJk9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dFtlXX0pLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGVbbl09dFtuXX0pfX0oKTtmdW5jdGlvbiB5KHQsZSl7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcigiQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgIit0KycgIicrZSsnIi4gRXhwZWN0ZWQgInRvcCIsICJib3R0b20iIG9yICJjZW50ZXIiLicpfWZ1bmN0aW9uIGcodCxlKXtpZigic3RhcnQiIT09ZSYmImVuZCIhPT1lJiYiY2VudGVyIiE9PWUpdGhyb3cgRXJyb3IoIkNvbm5lY3RlZFBvc2l0aW9uOiBJbnZhbGlkICIrdCsnICInK2UrJyIuIEV4cGVjdGVkICJzdGFydCIsICJlbmQiIG9yICJjZW50ZXIiLicpfXZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXM9e3RvcDoiIixsZWZ0OiIifSx0aGlzLl9pc0VuYWJsZWQ9ITEsdGhpcy5fZG9jdW1lbnQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQ9dC5zdHlsZS5sZWZ0fHwiIix0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wPXQuc3R5bGUudG9wfHwiIix0LnN0eWxlLmxlZnQ9T2JqZWN0KGkuYykoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCksdC5zdHlsZS50b3A9T2JqZWN0KGkuYykoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0aGlzLl9pc0VuYWJsZWQ9ITB9fSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNFbmFibGVkKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10aGlzLl9kb2N1bWVudC5ib2R5LG49dC5zdHlsZS5zY3JvbGxCZWhhdmlvcnx8IiIscj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yfHwiIjt0aGlzLl9pc0VuYWJsZWQ9ITEsdC5zdHlsZS5sZWZ0PXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0LHQuc3R5bGUudG9wPXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3AsdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yPSJhdXRvIix3aW5kb3cuc2Nyb2xsKHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCx0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1uLGUuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9cn19LHQucHJvdG90eXBlLl9jYW5CZUVuYWJsZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIil8fHRoaXMuX2lzRW5hYmxlZClyZXR1cm4hMTt2YXIgdD10aGlzLl9kb2N1bWVudC5ib2R5LGU9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm4gdC5zY3JvbGxIZWlnaHQ+ZS5oZWlnaHR8fHQuc2Nyb2xsV2lkdGg+ZS53aWR0aH0sdH0oKTtmdW5jdGlvbiBiKCl7cmV0dXJuIEVycm9yKCJTY3JvbGwgc3RyYXRlZ3kgaGFzIGFscmVhZHkgYmVlbiBhdHRhY2hlZC4iKX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk9dGhpczt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1uLHRoaXMuX2NvbmZpZz1yLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX2RldGFjaD1mdW5jdGlvbigpe2kuZGlzYWJsZSgpLGkuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSYmaS5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiBpLl9vdmVybGF5UmVmLmRldGFjaCgpfSl9fXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7aWYodGhpcy5fb3ZlcmxheVJlZil0aHJvdyBiKCk7dGhpcy5fb3ZlcmxheVJlZj10fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pe3ZhciBlPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCk7dGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcudGhyZXNob2xkJiZ0aGlzLl9jb25maWcudGhyZXNob2xkPjE/KHRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3AsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGU9dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wO01hdGguYWJzKGUtdC5faW5pdGlhbFNjcm9sbFBvc2l0aW9uKT50Ll9jb25maWcudGhyZXNob2xkP3QuX2RldGFjaCgpOnQuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKTp0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUodGhpcy5fZGV0YWNoKX19LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9LHR9KCk7ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYm90dG9tPGUudG9wfHx0LnRvcD5lLmJvdHRvbXx8dC5yaWdodDxlLmxlZnR8fHQubGVmdD5lLnJpZ2h0fSl9ZnVuY3Rpb24geCh0LGUpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQudG9wPGUudG9wfHx0LmJvdHRvbT5lLmJvdHRvbXx8dC5sZWZ0PGUubGVmdHx8dC5yaWdodD5lLnJpZ2h0fSl9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtpZih0aGlzLl9vdmVybGF5UmVmKXRocm93IGIoKTt0aGlzLl9vdmVybGF5UmVmPXR9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9ufHwodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQodGhpcy5fY29uZmlnP3RoaXMuX2NvbmZpZy5zY3JvbGxUaHJvdHRsZTowKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtpZih0Ll9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdC5fY29uZmlnJiZ0Ll9jb25maWcuYXV0b0Nsb3NlKXt2YXIgZT10Ll9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxyPW4ud2lkdGgsaT1uLmhlaWdodDt3KGUsW3t3aWR0aDpyLGhlaWdodDppLGJvdHRvbTppLHJpZ2h0OnIsdG9wOjAsbGVmdDowfV0pJiYodC5kaXNhYmxlKCksdC5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Ll9vdmVybGF5UmVmLmRldGFjaCgpfSkpfX0pKX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX0sdH0oKSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5ub29wPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwfSx0aGlzLmNsb3NlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgXyhpLl9zY3JvbGxEaXNwYXRjaGVyLGkuX25nWm9uZSxpLl92aWV3cG9ydFJ1bGVyLHQpfSx0aGlzLmJsb2NrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2KGkuX3ZpZXdwb3J0UnVsZXIsaS5fZG9jdW1lbnQpfSx0aGlzLnJlcG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPKGkuX3Njcm9sbERpc3BhdGNoZXIsaS5fdmlld3BvcnRSdWxlcixpLl9uZ1pvbmUsdCl9LHRoaXMuX2RvY3VtZW50PXJ9cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKG8uYyksT2JqZWN0KHIuVikoby5lKSxPYmplY3Qoci5WKShyLngpLE9iamVjdChyLlYpKGEuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fa2V5ZG93bkxpc3RlbmVyPWZ1bmN0aW9uKHQpe2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZlLl9hdHRhY2hlZE92ZXJsYXlzW2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoLTFdLl9rZXlkb3duRXZlbnRzLm5leHQodCl9LHRoaXMuX2RvY3VtZW50PXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt0aGlzLl9pc0F0dGFjaGVkfHwodGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITApLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaCh0KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShlLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLl9kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShhLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jdW1lbnQ9dH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJFbGVtZW50JiZ0aGlzLl9jb250YWluZXJFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2NvbnRhaW5lckVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXJFbGVtZW50KX0sdC5wcm90b3R5cGUuZ2V0Q29udGFpbmVyRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fSx0LnByb3RvdHlwZS5fY3JlYXRlQ29udGFpbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1jb250YWluZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQ9dH0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuVikoYS5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEpe3RoaXMuX3BvcnRhbE91dGxldD10LHRoaXMuX2hvc3Q9ZSx0aGlzLl9wYW5lPW4sdGhpcy5fY29uZmlnPXIsdGhpcy5fbmdab25lPWksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPW8sdGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCx0aGlzLl9iYWNrZHJvcENsaWNrPW5ldyB1LmEsdGhpcy5fYXR0YWNobWVudHM9bmV3IHUuYSx0aGlzLl9kZXRhY2htZW50cz1uZXcgdS5hLHRoaXMuX2tleWRvd25FdmVudHM9bmV3IHUuYSxyLnNjcm9sbFN0cmF0ZWd5JiZyLnNjcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvdmVybGF5RWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYW5lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYmFja2Ryb3BFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wRWxlbWVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhvc3RFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hvc3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiB0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuX3VwZGF0ZVN0YWNraW5nT3JkZXIoKSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5lbmFibGUoKSx0aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoZi5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5oYXNBdHRhY2hlZCgpJiZlLnVwZGF0ZVBvc2l0aW9uKCl9KSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCEwKSx0aGlzLl9jb25maWcuaGFzQmFja2Ryb3AmJnRoaXMuX2F0dGFjaEJhY2tkcm9wKCksdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMCksdGhpcy5fYXR0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5hZGQodGhpcyksbn0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNBdHRhY2hlZCgpKXt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5JiZ0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpO3ZhciB0PXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH19LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhhc0F0dGFjaGVkKCk7dGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCksdGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnROb2RlJiYodGhpcy5faG9zdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2hvc3QpLHRoaXMuX2hvc3Q9bnVsbCksdGhpcy5fcGFuZT1udWxsLHQmJnRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9kZXRhY2htZW50cy5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX0sdC5wcm90b3R5cGUuYmFja2Ryb3BDbGljaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5hdHRhY2htZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2htZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZGV0YWNobWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmtleWRvd25FdmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbmZpZ30sdC5wcm90b3R5cGUudXBkYXRlUG9zaXRpb249ZnVuY3Rpb24oKXt0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuYXBwbHkoKX0sdC5wcm90b3R5cGUudXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KHMuYSkoe30sdGhpcy5fY29uZmlnLHQpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCl9LHQucHJvdG90eXBlLnNldERpcmVjdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KHMuYSkoe30sdGhpcy5fY29uZmlnLHtkaXJlY3Rpb246dH0pLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKX0sdC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29uZmlnLmRpcmVjdGlvbjtyZXR1cm4gdD8ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnZhbHVlOiJsdHIifSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudERpcmVjdGlvbj1mdW5jdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXsodGhpcy5fY29uZmlnLndpZHRofHwwPT09dGhpcy5fY29uZmlnLndpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUud2lkdGg9T2JqZWN0KGkuYykodGhpcy5fY29uZmlnLndpZHRoKSksKHRoaXMuX2NvbmZpZy5oZWlnaHR8fDA9PT10aGlzLl9jb25maWcuaGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUuaGVpZ2h0PU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy5oZWlnaHQpKSwodGhpcy5fY29uZmlnLm1pbldpZHRofHwwPT09dGhpcy5fY29uZmlnLm1pbldpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUubWluV2lkdGg9T2JqZWN0KGkuYykodGhpcy5fY29uZmlnLm1pbldpZHRoKSksKHRoaXMuX2NvbmZpZy5taW5IZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWluSGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWluSGVpZ2h0PU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy5taW5IZWlnaHQpKSwodGhpcy5fY29uZmlnLm1heFdpZHRofHwwPT09dGhpcy5fY29uZmlnLm1heFdpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUubWF4V2lkdGg9T2JqZWN0KGkuYykodGhpcy5fY29uZmlnLm1heFdpZHRoKSksKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWF4SGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWF4SGVpZ2h0PU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpKX0sdC5wcm90b3R5cGUuX3RvZ2dsZVBvaW50ZXJFdmVudHM9ZnVuY3Rpb24odCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/ImF1dG8iOiJub25lIn0sdC5wcm90b3R5cGUuX2F0dGFjaEJhY2tkcm9wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9iYWNrZHJvcENsaWNrLm5leHQoZSl9KSwidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0Ll9iYWNrZHJvcEVsZW1lbnQmJnQuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9KX0pOnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9LHQucHJvdG90eXBlLl91cGRhdGVTdGFja2luZ09yZGVyPWZ1bmN0aW9uKCl7dGhpcy5faG9zdC5uZXh0U2libGluZyYmdGhpcy5faG9zdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpfSx0LnByb3RvdHlwZS5kZXRhY2hCYWNrZHJvcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9iYWNrZHJvcEVsZW1lbnQ7aWYoZSl7dmFyIG49ZnVuY3Rpb24oKXtlJiZlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSx0Ll9iYWNrZHJvcEVsZW1lbnQ9PWUmJih0Ll9iYWNrZHJvcEVsZW1lbnQ9bnVsbCl9O2UuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKGUsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsbiksZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dChuLDUwMCl9KX19LHQucHJvdG90eXBlLl90b2dnbGVDbGFzc2VzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmNsYXNzTGlzdDtPYmplY3QoaS5hKShlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24/ci5hZGQodCk6ci5yZW1vdmUodCl9KX0sdH0oKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuX2lzUHVzaGVkPSExLHRoaXMuX2NhblB1c2g9ITAsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9ITAsdGhpcy5fcG9zaXRpb25Mb2NrZWQ9ITEsdGhpcy5fdmlld3BvcnRNYXJnaW49MCx0aGlzLnNjcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IHUuYSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249bC5hLkVNUFRZLHRoaXMuX29mZnNldFg9MCx0aGlzLl9vZmZzZXRZPTAsdGhpcy5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zPTAsdGhpcy5wb3NpdGlvbkNoYW5nZXM9Yy5hLmNyZWF0ZShmdW5jdGlvbih0KXt2YXIgZT1pLl9wb3NpdGlvbkNoYW5nZXMuc3Vic2NyaWJlKHQpO3JldHVybiBpLl9wb3NpdGlvbkNoYW5nZVN1YnNjcmlwdGlvbnMrKyxmdW5jdGlvbigpe2UudW5zdWJzY3JpYmUoKSxpLl9wb3NpdGlvbkNoYW5nZVN1YnNjcmlwdGlvbnMtLX19KSx0aGlzLnNldE9yaWdpbih0KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwb3NpdGlvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX292ZXJsYXlSZWYmJnQhPT10aGlzLl9vdmVybGF5UmVmKXRocm93IEVycm9yKCJUaGlzIHBvc2l0aW9uIHN0cmF0ZWd5IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYW4gb3ZlcmxheSIpO3RoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94IiksdGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX2JvdW5kaW5nQm94PXQuaG9zdEVsZW1lbnQsdGhpcy5fcGFuZT10Lm92ZXJsYXlFbGVtZW50LHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KCl9KX0sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZighKHRoaXMuX2lzRGlzcG9zZWR8fHRoaXMuX3BsYXRmb3JtJiYhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSlpZighdGhpcy5faXNJbml0aWFsUmVuZGVyJiZ0aGlzLl9wb3NpdGlvbkxvY2tlZCYmdGhpcy5fbGFzdFBvc2l0aW9uKXRoaXMucmVhcHBseUxhc3RQb3NpdGlvbigpO2Vsc2V7dGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX3Jlc2V0Qm91bmRpbmdCb3hTdHlsZXMoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX29yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Zvcih2YXIgdCxlPXRoaXMuX29yaWdpblJlY3Qsbj10aGlzLl9vdmVybGF5UmVjdCxyPXRoaXMuX3ZpZXdwb3J0UmVjdCxpPVtdLG89MCxhPXRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucztvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSx1PXRoaXMuX2dldE9yaWdpblBvaW50KGUscyksbD10aGlzLl9nZXRPdmVybGF5UG9pbnQodSxuLHMpLGM9dGhpcy5fZ2V0T3ZlcmxheUZpdChsLG4scixzKTtpZihjLmlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0KXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24ocyx1KTt0aGlzLl9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKGMsbCxyKT9pLnB1c2goe3Bvc2l0aW9uOnMsb3JpZ2luOnUsb3ZlcmxheVJlY3Q6bixib3VuZGluZ0JveFJlY3Q6dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHUscyl9KTooIXR8fHQub3ZlcmxheUZpdC52aXNpYmxlQXJlYTxjLnZpc2libGVBcmVhKSYmKHQ9e292ZXJsYXlGaXQ6YyxvdmVybGF5UG9pbnQ6bCxvcmlnaW5Qb2ludDp1LHBvc2l0aW9uOnMsb3ZlcmxheVJlY3Q6bn0pfWlmKGkubGVuZ3RoKXtmb3IodmFyIGY9bnVsbCxoPS0xLGQ9MCxwPWk7ZDxwLmxlbmd0aDtkKyspe3ZhciBtPXBbZF0seT1tLmJvdW5kaW5nQm94UmVjdC53aWR0aCptLmJvdW5kaW5nQm94UmVjdC5oZWlnaHQqKG0ucG9zaXRpb24ud2VpZ2h0fHwxKTt5PmgmJihoPXksZj1tKX1yZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKGYucG9zaXRpb24sZi5vcmlnaW4pfWlmKHRoaXMuX2NhblB1c2gpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSEwLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbih0LnBvc2l0aW9uLHQub3JpZ2luUG9pbnQpO3RoaXMuX2FwcGx5UG9zaXRpb24odC5wb3NpdGlvbix0Lm9yaWdpblBvaW50KX19LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuZGV0YWNoKCksdGhpcy5fYm91bmRpbmdCb3g9bnVsbCx0aGlzLl9wb3NpdGlvbkNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9pc0Rpc3Bvc2VkPSEwKX0sdC5wcm90b3R5cGUucmVhcHBseUxhc3RQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9pc0Rpc3Bvc2VkJiYoIXRoaXMuX3BsYXRmb3JtfHx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpKXt0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX29yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpO3ZhciB0PXRoaXMuX2xhc3RQb3NpdGlvbnx8dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zWzBdLGU9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodGhpcy5fb3JpZ2luUmVjdCx0KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQsZSl9fSx0LnByb3RvdHlwZS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnM9ZnVuY3Rpb24odCl7dGhpcy5zY3JvbGxhYmxlcz10fSx0LnByb3RvdHlwZS53aXRoUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dCwtMT09PXQuaW5kZXhPZih0aGlzLl9sYXN0UG9zaXRpb24pJiYodGhpcy5fbGFzdFBvc2l0aW9uPW51bGwpLHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUud2l0aFZpZXdwb3J0TWFyZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92aWV3cG9ydE1hcmdpbj10LHRoaXN9LHQucHJvdG90eXBlLndpdGhGbGV4aWJsZURpbWVuc2lvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoR3Jvd0FmdGVyT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX2dyb3dBZnRlck9wZW49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoUHVzaD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX2NhblB1c2g9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoTG9ja2VkUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9wb3NpdGlvbkxvY2tlZD10LHRoaXN9LHQucHJvdG90eXBlLnNldE9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JpZ2luPXQgaW5zdGFuY2VvZiByLms/dC5uYXRpdmVFbGVtZW50OnQsdGhpc30sdC5wcm90b3R5cGUud2l0aERlZmF1bHRPZmZzZXRYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vZmZzZXRYPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aERlZmF1bHRPZmZzZXRZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vZmZzZXRZPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFRyYW5zZm9ybU9yaWdpbk9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcj10LHRoaXN9LHQucHJvdG90eXBlLl9nZXRPcmlnaW5Qb2ludD1mdW5jdGlvbih0LGUpe3ZhciBuO2lmKCJjZW50ZXIiPT1lLm9yaWdpblgpbj10LmxlZnQrdC53aWR0aC8yO2Vsc2V7dmFyIHI9dGhpcy5faXNSdGwoKT90LnJpZ2h0OnQubGVmdCxpPXRoaXMuX2lzUnRsKCk/dC5sZWZ0OnQucmlnaHQ7bj0ic3RhcnQiPT1lLm9yaWdpblg/cjppfXJldHVybnt4Om4seToiY2VudGVyIj09ZS5vcmlnaW5ZP3QudG9wK3QuaGVpZ2h0LzI6InRvcCI9PWUub3JpZ2luWT90LnRvcDp0LmJvdHRvbX19LHQucHJvdG90eXBlLl9nZXRPdmVybGF5UG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiByPSJjZW50ZXIiPT1uLm92ZXJsYXlYPy1lLndpZHRoLzI6InN0YXJ0Ij09PW4ub3ZlcmxheVg/dGhpcy5faXNSdGwoKT8tZS53aWR0aDowOnRoaXMuX2lzUnRsKCk/MDotZS53aWR0aCx7eDp0Lngrcix5OnQueSsoImNlbnRlciI9PW4ub3ZlcmxheVk/LWUuaGVpZ2h0LzI6InRvcCI9PW4ub3ZlcmxheVk/MDotZS5oZWlnaHQpfX0sdC5wcm90b3R5cGUuX2dldE92ZXJsYXlGaXQ9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC54LG89dC55LGE9dGhpcy5fZ2V0T2Zmc2V0KHIsIngiKSxzPXRoaXMuX2dldE9mZnNldChyLCJ5Iik7YSYmKGkrPWEpLHMmJihvKz1zKTt2YXIgdT0wLW8sbD1vK2UuaGVpZ2h0LW4uaGVpZ2h0LGM9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoZS53aWR0aCwwLWksaStlLndpZHRoLW4ud2lkdGgpLGY9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoZS5oZWlnaHQsdSxsKSxoPWMqZjtyZXR1cm57dmlzaWJsZUFyZWE6aCxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDplLndpZHRoKmUuaGVpZ2h0PT09aCxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6Zj09PWUuaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5OmM9PWUud2lkdGh9fSx0LnByb3RvdHlwZS5fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucz1mdW5jdGlvbih0LGUsbil7aWYodGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zKXt2YXIgcj1uLmJvdHRvbS1lLnksaT1uLnJpZ2h0LWUueCxvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluSGVpZ2h0LGE9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5XaWR0aDtyZXR1cm4odC5maXRzSW5WaWV3cG9ydFZlcnRpY2FsbHl8fG51bGwhPW8mJm88PXIpJiYodC5maXRzSW5WaWV3cG9ydEhvcml6b250YWxseXx8bnVsbCE9YSYmYTw9aSl9fSx0LnByb3RvdHlwZS5fcHVzaE92ZXJsYXlPblNjcmVlbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPU1hdGgubWF4KHQueCtlLndpZHRoLW4ucmlnaHQsMCksaT1NYXRoLm1heCh0LnkrZS5oZWlnaHQtbi5ib3R0b20sMCksbz1NYXRoLm1heChuLnRvcC10LnksMCksYT1NYXRoLm1heChuLmxlZnQtdC54LDApO3JldHVybnt4OnQueCsoZS53aWR0aDw9bi53aWR0aD9hfHwtcjpuLmxlZnQtdC54KSx5OnQueSsoZS5oZWlnaHQ8PW4uaGVpZ2h0P298fC1pOm4udG9wLXQueSl9fSx0LnByb3RvdHlwZS5fYXBwbHlQb3NpdGlvbj1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3NldFRyYW5zZm9ybU9yaWdpbih0KSx0aGlzLl9zZXRPdmVybGF5RWxlbWVudFN0eWxlcyhlLHQpLHRoaXMuX3NldEJvdW5kaW5nQm94U3R5bGVzKGUsdCksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zPjApe3ZhciBuPW5ldyBmdW5jdGlvbih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfSh0LHRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSk7dGhpcy5fcG9zaXRpb25DaGFuZ2VzLm5leHQobil9dGhpcy5faXNJbml0aWFsUmVuZGVyPSExfSx0LnByb3RvdHlwZS5fc2V0VHJhbnNmb3JtT3JpZ2luPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yKXt2YXIgZSxuPXRoaXMuX2JvdW5kaW5nQm94LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpLHI9dC5vdmVybGF5WTtlPSJjZW50ZXIiPT09dC5vdmVybGF5WD8iY2VudGVyIjp0aGlzLl9pc1J0bCgpPyJzdGFydCI9PT10Lm92ZXJsYXlYPyJyaWdodCI6ImxlZnQiOiJzdGFydCI9PT10Lm92ZXJsYXlYPyJsZWZ0IjoicmlnaHQiO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKW5baV0uc3R5bGUudHJhbnNmb3JtT3JpZ2luPWUrIiAiK3J9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG8sYSxzLHU9dGhpcy5fdmlld3BvcnRSZWN0LGw9dGhpcy5faXNSdGwoKTtpZigidG9wIj09PWUub3ZlcmxheVkpcj10Lnksbj11LmJvdHRvbS10Lnk7ZWxzZSBpZigiYm90dG9tIj09PWUub3ZlcmxheVkpbj11LmhlaWdodC0oaT11LmhlaWdodC10LnkrMip0aGlzLl92aWV3cG9ydE1hcmdpbikrdGhpcy5fdmlld3BvcnRNYXJnaW47ZWxzZXt2YXIgYz1NYXRoLm1pbih1LmJvdHRvbS10LnksdC55LXUubGVmdCksZj10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodDtyPXQueS1jLChuPTIqYyk+ZiYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihyPXQueS1mLzIpfWlmKCJlbmQiPT09ZS5vdmVybGF5WCYmIWx8fCJzdGFydCI9PT1lLm92ZXJsYXlYJiZsKXM9dS5yaWdodC10LngrdGhpcy5fdmlld3BvcnRNYXJnaW4sbz10LngtdS5sZWZ0O2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFsfHwiZW5kIj09PWUub3ZlcmxheVgmJmwpYT10Lngsbz11LnJpZ2h0LXQueDtlbHNle2M9TWF0aC5taW4odS5yaWdodC10LngsdC54LXUudG9wKTt2YXIgaD10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoO2E9dC54LWMsKG89MipjKT5oJiYhdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGE9dC54LWgvMil9cmV0dXJue3RvcDpyLGxlZnQ6YSxib3R0b206aSxyaWdodDpzLHdpZHRoOm8saGVpZ2h0Om59fSx0LnByb3RvdHlwZS5fc2V0Qm91bmRpbmdCb3hTdHlsZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTt0aGlzLl9pc0luaXRpYWxSZW5kZXJ8fHRoaXMuX2dyb3dBZnRlck9wZW58fChuLmhlaWdodD1NYXRoLm1pbihuLmhlaWdodCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodCksbi53aWR0aD1NYXRoLm1pbihuLndpZHRoLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUud2lkdGgpKTt2YXIgcj17fTtpZih0aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCkpci50b3A9ci5sZWZ0PSIwIixyLmJvdHRvbT1yLnJpZ2h0PSIiLHIud2lkdGg9ci5oZWlnaHQ9IjEwMCUiO2Vsc2V7dmFyIG89dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhIZWlnaHQsYT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heFdpZHRoO3IuaGVpZ2h0PU9iamVjdChpLmMpKG4uaGVpZ2h0KSxyLnRvcD1PYmplY3QoaS5jKShuLnRvcCksci5ib3R0b209T2JqZWN0KGkuYykobi5ib3R0b20pLHIud2lkdGg9T2JqZWN0KGkuYykobi53aWR0aCksci5sZWZ0PU9iamVjdChpLmMpKG4ubGVmdCksci5yaWdodD1PYmplY3QoaS5jKShuLnJpZ2h0KSxyLmFsaWduSXRlbXM9ImNlbnRlciI9PT1lLm92ZXJsYXlYPyJjZW50ZXIiOiJlbmQiPT09ZS5vdmVybGF5WD8iZmxleC1lbmQiOiJmbGV4LXN0YXJ0IixyLmp1c3RpZnlDb250ZW50PSJjZW50ZXIiPT09ZS5vdmVybGF5WT8iY2VudGVyIjoiYm90dG9tIj09PWUub3ZlcmxheVk/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsbyYmKHIubWF4SGVpZ2h0PU9iamVjdChpLmMpKG8pKSxhJiYoci5tYXhXaWR0aD1PYmplY3QoaS5jKShhKSl9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT1uLEkodGhpcy5fYm91bmRpbmdCb3guc3R5bGUscil9LHQucHJvdG90eXBlLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzPWZ1bmN0aW9uKCl7SSh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSx7dG9wOiIwIixsZWZ0OiIwIixyaWdodDoiMCIsYm90dG9tOiIwIixoZWlnaHQ6IiIsd2lkdGg6IiIsYWxpZ25JdGVtczoiIixqdXN0aWZ5Q29udGVudDoiIn0pfSx0LnByb3RvdHlwZS5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcz1mdW5jdGlvbigpe0kodGhpcy5fcGFuZS5zdHlsZSx7dG9wOiIiLGxlZnQ6IiIsYm90dG9tOiIiLHJpZ2h0OiIiLHBvc2l0aW9uOiIifSl9LHQucHJvdG90eXBlLl9zZXRPdmVybGF5RWxlbWVudFN0eWxlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3RoaXMuX2hhc0V4YWN0UG9zaXRpb24oKT8oSShuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVkoZSx0KSksSShuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVgoZSx0KSkpOm4ucG9zaXRpb249InN0YXRpYyI7dmFyIHI9IiIsaT10aGlzLl9nZXRPZmZzZXQoZSwieCIpLG89dGhpcy5fZ2V0T2Zmc2V0KGUsInkiKTtpJiYocis9InRyYW5zbGF0ZVgoIitpKyJweCkgIiksbyYmKHIrPSJ0cmFuc2xhdGVZKCIrbysicHgpIiksbi50cmFuc2Zvcm09ci50cmltKCksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zJiZ0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heEhlaWdodCYmKG4ubWF4SGVpZ2h0PSIiKSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMmJnRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4V2lkdGgmJihuLm1heFdpZHRoPSIiKSxJKHRoaXMuX3BhbmUuc3R5bGUsbil9LHQucHJvdG90eXBlLl9nZXRFeGFjdE92ZXJsYXlZPWZ1bmN0aW9uKHQsZSl7dmFyIG49e3RvcDpudWxsLGJvdHRvbTpudWxsfSxyPXRoaXMuX2dldE92ZXJsYXlQb2ludChlLHRoaXMuX292ZXJsYXlSZWN0LHQpO3JldHVybiB0aGlzLl9pc1B1c2hlZCYmKHI9dGhpcy5fcHVzaE92ZXJsYXlPblNjcmVlbihyLHRoaXMuX292ZXJsYXlSZWN0KSksImJvdHRvbSI9PT10Lm92ZXJsYXlZP24uYm90dG9tPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQtKHIueSt0aGlzLl9vdmVybGF5UmVjdC5oZWlnaHQpKyJweCI6bi50b3A9T2JqZWN0KGkuYykoci55KSxufSx0LnByb3RvdHlwZS5fZ2V0RXhhY3RPdmVybGF5WD1mdW5jdGlvbih0LGUpe3ZhciBuPXtsZWZ0Om51bGwscmlnaHQ6bnVsbH0scj10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihyPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4ocix0aGlzLl9vdmVybGF5UmVjdCkpLCJyaWdodCI9PSh0aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIpP24ucmlnaHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLShyLngrdGhpcy5fb3ZlcmxheVJlY3Qud2lkdGgpKyJweCI6bi5sZWZ0PU9iamVjdChpLmMpKHIueCksbn0sdC5wcm90b3R5cGUuX2dldFNjcm9sbFZpc2liaWxpdHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5zY3JvbGxhYmxlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOngodCxuKSxpc09yaWdpbk91dHNpZGVWaWV3OncodCxuKSxpc092ZXJsYXlDbGlwcGVkOngoZSxuKSxpc092ZXJsYXlPdXRzaWRlVmlldzp3KGUsbil9fSx0LnByb3RvdHlwZS5fc3VidHJhY3RPdmVyZmxvd3M9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtTWF0aC5tYXgoZSwwKX0sdCl9LHQucHJvdG90eXBlLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxlPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57dG9wOm4udG9wK3RoaXMuX3ZpZXdwb3J0TWFyZ2luLGxlZnQ6bi5sZWZ0K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHJpZ2h0Om4ubGVmdCt0LXRoaXMuX3ZpZXdwb3J0TWFyZ2luLGJvdHRvbTpuLnRvcCtlLXRoaXMuX3ZpZXdwb3J0TWFyZ2luLHdpZHRoOnQtMip0aGlzLl92aWV3cG9ydE1hcmdpbixoZWlnaHQ6ZS0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2lufX0sdC5wcm90b3R5cGUuX2lzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfSx0LnByb3RvdHlwZS5faGFzRXhhY3RQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnN8fHRoaXMuX2lzUHVzaGVkfSx0LnByb3RvdHlwZS5fZ2V0T2Zmc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIngiPT09ZT9udWxsPT10Lm9mZnNldFg/dGhpcy5fb2Zmc2V0WDp0Lm9mZnNldFg6bnVsbD09dC5vZmZzZXRZP3RoaXMuX29mZnNldFk6dC5vZmZzZXRZfSx0LnByb3RvdHlwZS5fdmFsaWRhdGVQb3NpdGlvbnM9ZnVuY3Rpb24oKXtpZighdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zLmxlbmd0aCl0aHJvdyBFcnJvcigiRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5OiBBdCBsZWFzdCBvbmUgcG9zaXRpb24gaXMgcmVxdWlyZWQuIik7dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7Zygib3JpZ2luWCIsdC5vcmlnaW5YKSx5KCJvcmlnaW5ZIix0Lm9yaWdpblkpLGcoIm92ZXJsYXlYIix0Lm92ZXJsYXlYKSx5KCJvdmVybGF5WSIsdC5vdmVybGF5WSl9KX0sdH0oKTtmdW5jdGlvbiBJKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvKXt0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9W10sdGhpcy5fcG9zaXRpb25TdHJhdGVneT1uZXcgVChuLHIsaSxvKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSkud2l0aFZpZXdwb3J0TWFyZ2luKDApLHRoaXMud2l0aEZhbGxiYWNrUG9zaXRpb24odCxlKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfaXNSdGwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0RGlyZWN0aW9uKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvblBvc2l0aW9uQ2hhbmdlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb25DaGFuZ2VzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHQpLHRoaXMuX2RpcmVjdGlvbiYmKHQuc2V0RGlyZWN0aW9uKHRoaXMuX2RpcmVjdGlvbiksdGhpcy5fZGlyZWN0aW9uPW51bGwpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCl9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfSx0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZUxhc3RQb3NpdGlvbj1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucmVhcHBseUxhc3RQb3NpdGlvbigpfSx0LnByb3RvdHlwZS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnM9ZnVuY3Rpb24odCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl9LHQucHJvdG90eXBlLndpdGhGYWxsYmFja1Bvc2l0aW9uPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW5ldyBmdW5jdGlvbih0LGUsbixyKXt0aGlzLm9mZnNldFg9bix0aGlzLm9mZnNldFk9cix0aGlzLm9yaWdpblg9dC5vcmlnaW5YLHRoaXMub3JpZ2luWT10Lm9yaWdpblksdGhpcy5vdmVybGF5WD1lLm92ZXJsYXlYLHRoaXMub3ZlcmxheVk9ZS5vdmVybGF5WX0odCxlLG4scik7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5wdXNoKGkpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyh0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpLHRoaXN9LHQucHJvdG90eXBlLndpdGhEaXJlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5zZXREaXJlY3Rpb24odCk6dGhpcy5fZGlyZWN0aW9uPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aE9mZnNldFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aERlZmF1bHRPZmZzZXRYKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhPZmZzZXRZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhEZWZhdWx0T2Zmc2V0WSh0KSx0aGlzfSx0LnByb3RvdHlwZS53aXRoTG9ja2VkUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aExvY2tlZFBvc2l0aW9uKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhQb3NpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz10LnNsaWNlKCksdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyksdGhpc30sdC5wcm90b3R5cGUuc2V0T3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0KSx0aGlzfSx0fSgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY3NzUG9zaXRpb249InN0YXRpYyIsdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PSIiLHRoaXMuX2FsaWduSXRlbXM9IiIsdGhpcy5fanVzdGlmeUNvbnRlbnQ9IiIsdGhpcy5fd2lkdGg9IiIsdGhpcy5faGVpZ2h0PSIifXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDb25maWcoKTt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fd2lkdGgmJiFlLndpZHRoJiZ0LnVwZGF0ZVNpemUoe3dpZHRoOnRoaXMuX3dpZHRofSksdGhpcy5faGVpZ2h0JiYhZS5oZWlnaHQmJnQudXBkYXRlU2l6ZSh7aGVpZ2h0OnRoaXMuX2hlaWdodH0pLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIiKX0sdC5wcm90b3R5cGUudG9wPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX3RvcE9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9yaWdodE9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmJvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LWVuZCIsdGhpc30sdC5wcm90b3R5cGUucmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIix0aGlzfSx0LnByb3RvdHlwZS53aWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0fSk6dGhpcy5fd2lkdGg9dCx0aGlzfSx0LnByb3RvdHlwZS5oZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfSx0LnByb3RvdHlwZS5jZW50ZXJIb3Jpem9udGFsbHk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLmxlZnQodCksdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuY2VudGVyVmVydGljYWxseT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMudG9wKHQpLHRoaXMuX2FsaWduSXRlbXM9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZih0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpe3ZhciB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LnN0eWxlLG49dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKTt0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD0iMTAwJSI9PT1uLndpZHRoPyIwIjp0aGlzLl9sZWZ0T2Zmc2V0LHQubWFyZ2luVG9wPSIxMDAlIj09PW4uaGVpZ2h0PyIwIjp0aGlzLl90b3BPZmZzZXQsdC5tYXJnaW5Cb3R0b209dGhpcy5fYm90dG9tT2Zmc2V0LHQubWFyZ2luUmlnaHQ9dGhpcy5fcmlnaHRPZmZzZXQsZS5qdXN0aWZ5Q29udGVudD0iMTAwJSI9PT1uLndpZHRoPyJmbGV4LXN0YXJ0Ijp0aGlzLl9qdXN0aWZ5Q29udGVudCxlLmFsaWduSXRlbXM9IjEwMCUiPT09bi5oZWlnaHQ/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9fSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7fSx0fSgpLFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fZG9jdW1lbnQ9ZSx0aGlzLl9wbGF0Zm9ybT1ufXJldHVybiB0LnByb3RvdHlwZS5nbG9iYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGp9LHQucHJvdG90eXBlLmNvbm5lY3RlZFRvPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbmV3IEEoZSxuLHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCl9LHQucHJvdG90eXBlLmZsZXhpYmxlQ29ubmVjdGVkVG89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBUKHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCx0aGlzLl9wbGF0Zm9ybSl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKG8uZSksT2JqZWN0KHIuVikoYS5kKSxPYmplY3Qoci5WKShoLmEsOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxNPTAsTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSxzLHUpe3RoaXMuc2Nyb2xsU3RyYXRlZ2llcz10LHRoaXMuX292ZXJsYXlDb250YWluZXI9ZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bix0aGlzLl9wb3NpdGlvbkJ1aWxkZXI9cix0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9aSx0aGlzLl9pbmplY3Rvcj1vLHRoaXMuX25nWm9uZT1hLHRoaXMuX2RvY3VtZW50PXMsdGhpcy5fZGlyZWN0aW9uYWxpdHk9dX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCksbj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChlKSxyPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChuKSxpPW5ldyBtKHQpO3JldHVybiBpLmRpcmVjdGlvbj1pLmRpcmVjdGlvbnx8dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWUsbmV3IGsocixlLG4saSx0aGlzLl9uZ1pvbmUsdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLHRoaXMuX2RvY3VtZW50KX0sdC5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25CdWlsZGVyfSx0LnByb3RvdHlwZS5fY3JlYXRlUGFuZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuaWQ9ImNkay1vdmVybGF5LSIrTSsrLGUuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktcGFuZSIpLHQuYXBwZW5kQ2hpbGQoZSksZX0sdC5wcm90b3R5cGUuX2NyZWF0ZUhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKHQpLHR9LHQucHJvdG90eXBlLl9jcmVhdGVQb3J0YWxPdXRsZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoci5nKSksbmV3IGQuYih0LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IpfSx0fSgpLFI9bmV3IHIubygiY2RrLWNvbm5lY3RlZC1vdmVybGF5LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIEQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBMPWZ1bmN0aW9uKCl7fX0sZWloczpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9e2U6e319fSxnSTNCOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiNmJsRiIpLGk9bigiVDFETSIpLG89bigiaXNieSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIU9iamVjdChvLmEpKHQpJiZ0LXBhcnNlRmxvYXQodCkrMT49MH12YXIgcz1uKCJua1k3Iik7ZnVuY3Rpb24gdSh0LGUsbil7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIG89LTE7cmV0dXJuIGEoZSk/bz1OdW1iZXIoZSk8MT8xOk51bWJlcihlKTpPYmplY3Qocy5hKShlKSYmKG49ZSksT2JqZWN0KHMuYSkobil8fChuPWkuYSksbmV3IHIuYShmdW5jdGlvbihlKXt2YXIgcj1hKHQpP3Q6K3Qtbi5ub3coKTtyZXR1cm4gbi5zY2hlZHVsZShsLHIse2luZGV4OjAscGVyaW9kOm8sc3Vic2NyaWJlcjplfSl9KX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQuaW5kZXgsbj10LnBlcmlvZCxyPXQuc3Vic2NyaWJlcjtpZihyLm5leHQoZSksIXIuY2xvc2VkKXtpZigtMT09PW4pcmV0dXJuIHIuY29tcGxldGUoKTt0LmluZGV4PWUrMSx0aGlzLnNjaGVkdWxlKHQsbil9fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSl9LGdJY1k6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4oIm1yU0ciKTt2YXIgcj1uKCJDY25HIik7bigiVk5yNCIpLG4oIjAvdVEiKSxuKCI2N1kvIiksbigiWllqdCIpO3ZhciBpPW5ldyByLm8oIk5nVmFsdWVBY2Nlc3NvciIpfSxoOURxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiB0LmNhbGwodGhpcyl8fHRoaXN9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLHRoaXN9LGV9KG4oInB1Z1QiKS5hKTtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiByLnNjaGVkdWxlcj1lLHIud29yaz1uLHIucGVuZGluZz0hMSxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDt2YXIgbj10aGlzLmlkLHI9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPW4mJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQocixuLGUpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1lLHRoaXMuaWQ9dGhpcy5pZHx8dGhpcy5yZXF1ZXN0QXN5bmNJZChyLHRoaXMuaWQsZSksdGhpc30sZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxzZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCx0aGlzKSxuKX0sZS5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQ9ZnVuY3Rpb24odCxlLG4pe2lmKHZvaWQgMD09PW4mJihuPTApLG51bGwhPT1uJiZ0aGlzLmRlbGF5PT09biYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJuIGU7Y2xlYXJJbnRlcnZhbChlKX0sZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7dmFyIG49dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKG4pcmV0dXJuIG47ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9LGUucHJvdG90eXBlLl9leGVjdXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITEscj12b2lkIDA7dHJ5e3RoaXMud29yayh0KX1jYXRjaCh0KXtuPSEwLHI9ISF0JiZ0fHxuZXcgRXJyb3IodCl9aWYobilyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLHJ9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaWQsZT10aGlzLnNjaGVkdWxlcixuPWUuYWN0aW9ucyxyPW4uaW5kZXhPZih0aGlzKTt0aGlzLndvcms9bnVsbCx0aGlzLnN0YXRlPW51bGwsdGhpcy5wZW5kaW5nPSExLHRoaXMuc2NoZWR1bGVyPW51bGwsLTEhPT1yJiZuLnNwbGljZShyLDEpLG51bGwhPXQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZSx0LG51bGwpKSx0aGlzLmRlbGF5PW51bGx9LGV9KGkpfSxoVVdQOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuKCJtclNHIiksbigiQ2NuRyIpLG4oIklwMFIiKSxuKCJPemZCIik7dmFyIHI9ZnVuY3Rpb24oKXt9fSxpTHhROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj0hMSxpPXtQcm9taXNlOnZvaWQgMCxzZXQgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyh0KXtyPXR9LGdldCB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKCl7cmV0dXJuIHJ9fX0saWhZWTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO3ZhciByPWZ1bmN0aW9uKCl7fSxpPWZ1bmN0aW9uKCl7fSxvPSIqIjtmdW5jdGlvbiBhKHQsZSl7cmV0dXJue3R5cGU6NyxuYW1lOnQsZGVmaW5pdGlvbnM6ZSxvcHRpb25zOnt9fX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHt0eXBlOjQsc3R5bGVzOmUsdGltaW5nczp0fX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHt0eXBlOjMsc3RlcHM6dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCkse3R5cGU6MixzdGVwczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gYyh0KXtyZXR1cm57dHlwZTo2LHN0eWxlczp0LG9mZnNldDpudWxsfX1mdW5jdGlvbiBmKHQsZSxuKXtyZXR1cm57dHlwZTowLG5hbWU6dCxzdHlsZXM6ZSxvcHRpb25zOm59fWZ1bmN0aW9uIGgodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1udWxsKSx7dHlwZToxLGV4cHI6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fWZ1bmN0aW9uIGQodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLHt0eXBlOjksb3B0aW9uczp0fX1mdW5jdGlvbiBwKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49bnVsbCkse3R5cGU6MTEsc2VsZWN0b3I6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fWZ1bmN0aW9uIG0odCl7UHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4odCl9dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ZSYmKGU9MCksdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9dCtlfXJldHVybiB0LnByb3RvdHlwZS5fb25GaW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRvbmVGbnM9W10pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfSx0LnByb3RvdHlwZS50cmlnZ2VyTWljcm90YXNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczttKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX29uRmluaXNoKCl9KX0sdC5wcm90b3R5cGUuX29uU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDt2YXIgbj0wLHI9MCxpPTAsbz10aGlzLnBsYXllcnMubGVuZ3RoOzA9PW8/bShmdW5jdGlvbigpe3JldHVybiBlLl9vbkZpbmlzaCgpfSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5vbkRvbmUoZnVuY3Rpb24oKXsrK249PW8mJmUuX29uRmluaXNoKCl9KSx0Lm9uRGVzdHJveShmdW5jdGlvbigpeysrcj09byYmZS5fb25EZXN0cm95KCl9KSx0Lm9uU3RhcnQoZnVuY3Rpb24oKXsrK2k9PW8mJmUuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUudG90YWxUaW1lKX0sMCl9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbml0KCl9KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9vblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBsYXkoKX0pfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdXNlKCl9KX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3RhcnQoKX0pfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9vbkRlc3Ryb3koKX0sdC5wcm90b3R5cGUuX29uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc2V0KCl9KSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LnRvdGFsVGltZT9NYXRoLm1pbigxLGUvdC50b3RhbFRpbWUpOjE7dC5zZXRQb3NpdGlvbihuKX0pfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0UG9zaXRpb24oKTt0PU1hdGgubWluKG4sdCl9KSx0fSx0LnByb3RvdHlwZS5iZWZvcmVEZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksdj0iISJ9LGlzYnk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RofX0sbExBUDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBPfSk7dmFyIHI9bigiSXAwUiIpLGk9bigiQ2NuRyIpLG89bigiSzlJYSIpLGE9bigicHVnVCIpLHM9bigiRi9YTCIpLHU9bigiWVNoMiIpLGw9bigieE15RSIpLGM9bigiR2kzaSIpLGY9bigiVm5ELyIpLGg9bigiNjdZLyIpLGQ9bigidDlmWiIpLHA9bigibXJTRyIpLG09bigiZFdaZyIpO24oIm42Z0ciKTt2YXIgeT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9vcmlnaW49InByb2dyYW0iLGV9cmV0dXJuIE9iamVjdChwLmIpKGUsdCksZS5wcm90b3R5cGUuc2V0Rm9jdXNPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9LGUucHJvdG90eXBlLnNldEFjdGl2ZUl0ZW09ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuc2V0QWN0aXZlSXRlbS5jYWxsKHRoaXMsZSksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uZm9jdXModGhpcy5fb3JpZ2luKX0sZX0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5faXRlbXM9dCx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9LTEsdGhpcy5fd3JhcD0hMSx0aGlzLl9sZXR0ZXJLZXlTdHJlYW09bmV3IG8uYSx0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb249YS5hLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX3NraXBQcmVkaWNhdGVGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNhYmxlZH0sdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpcy50YWJPdXQ9bmV3IG8uYSx0aGlzLmNoYW5nZT1uZXcgby5hLHQgaW5zdGFuY2VvZiBpLkImJnQuY2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7aWYoZS5fYWN0aXZlSXRlbSl7dmFyIG49dC50b0FycmF5KCkuaW5kZXhPZihlLl9hY3RpdmVJdGVtKTtuPi0xJiZuIT09ZS5fYWN0aXZlSXRlbUluZGV4JiYoZS5fYWN0aXZlSXRlbUluZGV4PW4pfX0pfXJldHVybiB0LnByb3RvdHlwZS5za2lwUHJlZGljYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9za2lwUHJlZGljYXRlRm49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoV3JhcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwPSEwLHRoaXN9LHQucHJvdG90eXBlLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fdmVydGljYWw9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ob3Jpem9udGFsPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFR5cGVBaGVhZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHZvaWQgMD09PXQmJih0PTIwMCksdGhpcy5faXRlbXMubGVuZ3RoJiZ0aGlzLl9pdGVtcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmdldExhYmVsfSkpdGhyb3cgRXJyb3IoIkxpc3RLZXlNYW5hZ2VyIGl0ZW1zIGluIHR5cGVhaGVhZCBtb2RlIG11c3QgaW1wbGVtZW50IHRoZSBgZ2V0TGFiZWxgIG1ldGhvZC4iKTtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXRoaXMuX2xldHRlcktleVN0cmVhbS5waXBlKE9iamVjdChsLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9wcmVzc2VkTGV0dGVycy5wdXNoKHQpfSksT2JqZWN0KGMuYSkodCksT2JqZWN0KGYuYSkoZnVuY3Rpb24oKXtyZXR1cm4gZS5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjB9KSxPYmplY3QoaC5hKShmdW5jdGlvbigpe3JldHVybiBlLl9wcmVzc2VkTGV0dGVycy5qb2luKCIiKX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWUuX2dldEl0ZW1zQXJyYXkoKSxyPTE7cjxuLmxlbmd0aCsxO3IrKyl7dmFyIGk9KGUuX2FjdGl2ZUl0ZW1JbmRleCtyKSVuLmxlbmd0aCxvPW5baV07aWYoIWUuX3NraXBQcmVkaWNhdGVGbihvKSYmMD09PW8uZ2V0TGFiZWwoKS50b1VwcGVyQ2FzZSgpLnRyaW0oKS5pbmRleE9mKHQpKXtlLnNldEFjdGl2ZUl0ZW0oaSk7YnJlYWt9fWUuX3ByZXNzZWRMZXR0ZXJzPVtdfSksdGhpc30sdC5wcm90b3R5cGUuc2V0QWN0aXZlSXRlbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hY3RpdmVJdGVtSW5kZXg7dGhpcy51cGRhdGVBY3RpdmVJdGVtKHQpLHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCE9PWUmJnRoaXMuY2hhbmdlLm5leHQodGhpcy5fYWN0aXZlSXRlbUluZGV4KX0sdC5wcm90b3R5cGUub25LZXlkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZTtzd2l0Y2goZSl7Y2FzZSB1Lms6cmV0dXJuIHZvaWQgdGhpcy50YWJPdXQubmV4dCgpO2Nhc2UgdS5iOmlmKHRoaXMuX3ZlcnRpY2FsKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgdS5sOmlmKHRoaXMuX3ZlcnRpY2FsKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIHUuaTppZigibHRyIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31pZigicnRsIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgdS5nOmlmKCJsdHIiPT09dGhpcy5faG9yaXpvbnRhbCl7dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31pZigicnRsIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47ZGVmYXVsdDpyZXR1cm4gdm9pZCh0LmtleSYmMT09PXQua2V5Lmxlbmd0aD90aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dCh0LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTooZT49dS5hJiZlPD11Lm18fGU+PXUubiYmZTw9dS5oKSYmdGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpfXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHQucHJldmVudERlZmF1bHQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmVJdGVtSW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbUluZGV4fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlSXRlbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNldEZpcnN0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KDAsMSl9LHQucHJvdG90eXBlLnNldExhc3RJdGVtQWN0aXZlPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5faXRlbXMubGVuZ3RoLTEsLTEpfSx0LnByb3RvdHlwZS5zZXROZXh0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwP3RoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoMSl9LHQucHJvdG90eXBlLnNldFByZXZpb3VzSXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwJiZ0aGlzLl93cmFwP3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSl9LHQucHJvdG90eXBlLnVwZGF0ZUFjdGl2ZUl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLG49Im51bWJlciI9PXR5cGVvZiB0P3Q6ZS5pbmRleE9mKHQpO3RoaXMuX2FjdGl2ZUl0ZW1JbmRleD1uLHRoaXMuX2FjdGl2ZUl0ZW09ZVtuXX0sdC5wcm90b3R5cGUudXBkYXRlQWN0aXZlSXRlbUluZGV4PWZ1bmN0aW9uKHQpe3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KX0sdC5wcm90b3R5cGUuX3NldEFjdGl2ZUl0ZW1CeURlbHRhPWZ1bmN0aW9uKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSW5XcmFwTW9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLG49MTtuPD1lLmxlbmd0aDtuKyspe3ZhciByPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCpuK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbcl0pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShyKX19LHQucHJvdG90eXBlLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlPWZ1bmN0aW9uKHQpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCt0LHQpfSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSXRlbUJ5SW5kZXg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9nZXRJdGVtc0FycmF5KCk7aWYoblt0XSl7Zm9yKDt0aGlzLl9za2lwUHJlZGljYXRlRm4oblt0XSk7KWlmKCFuW3QrPWVdKXJldHVybjt0aGlzLnNldEFjdGl2ZUl0ZW0odCl9fSx0LnByb3RvdHlwZS5fZ2V0SXRlbXNBcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIGkuQj90aGlzLl9pdGVtcy50b0FycmF5KCk6dGhpcy5faXRlbXN9LHR9KCkpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3BsYXRmb3JtPXR9cmV0dXJuIHQucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfSx0LnByb3RvdHlwZS5pc1Zpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiEhKHQub2Zmc2V0V2lkdGh8fHQub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDbGllbnRSZWN0cyYmdC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KHQpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKHQpLnZpc2liaWxpdHl9LHQucHJvdG90eXBlLmlzVGFiYmFibGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTt2YXIgZT1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuZnJhbWVFbGVtZW50fWNhdGNoKHQpe3JldHVybiBudWxsfX0odC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpO2lmKGUpe3ZhciBuPWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZigtMT09PWIoZSkpcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYib2JqZWN0Ij09PW4pcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYhdGhpcy5pc1Zpc2libGUoZSkpcmV0dXJuITF9dmFyIHI9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGk9Yih0KTtpZih0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpcmV0dXJuLTEhPT1pO2lmKCJpZnJhbWUiPT09cilyZXR1cm4hMTtpZigiYXVkaW8iPT09cil7aWYoIXQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKXJldHVybiExO2lmKHRoaXMuX3BsYXRmb3JtLkJMSU5LKXJldHVybiEwfWlmKCJ2aWRlbyI9PT1yKXtpZighdC5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJnRoaXMuX3BsYXRmb3JtLlRSSURFTlQpcmV0dXJuITE7aWYodGhpcy5fcGxhdGZvcm0uQkxJTkt8fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gpcmV0dXJuITB9cmV0dXJuKCJvYmplY3QiIT09cnx8IXRoaXMuX3BsYXRmb3JtLkJMSU5LJiYhdGhpcy5fcGxhdGZvcm0uV0VCS0lUKSYmISh0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPSJpbnB1dCI9PT1lJiZ0LnR5cGU7cmV0dXJuInRleHQiPT09bnx8InBhc3N3b3JkIj09PW58fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWV9KHQpKSYmdC50YWJJbmRleD49MH0sdC5wcm90b3R5cGUuaXNGb2N1c2FibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiFmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImlucHV0Ij09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSh0KSYmImhpZGRlbiI9PXQudHlwZX0odCkmJihmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8ImJ1dHRvbiI9PT1lfHwidGV4dGFyZWEiPT09ZX0odCl8fGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4iYSI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0odCkmJnQuaGFzQXR0cmlidXRlKCJocmVmIil9KHQpfHx0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fHYodCkpfSh0KSYmIXRoaXMuaXNEaXNhYmxlZCh0KSYmdGhpcy5pc1Zpc2libGUodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKG0uYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiB2KHQpe2lmKCF0Lmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dm9pZCAwPT09dC50YWJJbmRleClyZXR1cm4hMTt2YXIgZT10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtyZXR1cm4iLTMyNzY4IiE9ZSYmISghZXx8aXNOYU4ocGFyc2VJbnQoZSwxMCkpKX1mdW5jdGlvbiBiKHQpe2lmKCF2KHQpKXJldHVybiBudWxsO3ZhciBlPXBhcnNlSW50KHQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGUpPy0xOmV9dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSl7dm9pZCAwPT09aSYmKGk9ITEpLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jaGVja2VyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9lbmFibGVkPSEwLGl8fHRoaXMuYXR0YWNoQW5jaG9ycygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2VuYWJsZWQ9dCx0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fc3RhcnRBbmNob3IudGFiSW5kZXg9dGhpcy5fZW5kQW5jaG9yLnRhYkluZGV4PXRoaXMuX2VuYWJsZWQ/MDotMSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9zdGFydEFuY2hvci5wYXJlbnROb2RlJiZ0aGlzLl9zdGFydEFuY2hvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl9lbmRBbmNob3ImJnRoaXMuX2VuZEFuY2hvci5wYXJlbnROb2RlJiZ0aGlzLl9lbmRBbmNob3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbmRBbmNob3IpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsfSx0LnByb3RvdHlwZS5hdHRhY2hBbmNob3JzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zdGFydEFuY2hvcnx8KHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpKSx0aGlzLl9lbmRBbmNob3J8fCh0aGlzLl9lbmRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCkpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX3N0YXJ0QW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixmdW5jdGlvbigpe3QuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCl9KSx0Ll9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGZ1bmN0aW9uKCl7dC5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCl9KSx0Ll9lbGVtZW50LnBhcmVudE5vZGUmJih0Ll9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQuX3N0YXJ0QW5jaG9yLHQuX2VsZW1lbnQpLHQuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodC5fZW5kQW5jaG9yLHQuX2VsZW1lbnQubmV4dFNpYmxpbmcpKX0pfSx0LnByb3RvdHlwZS5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5fZXhlY3V0ZU9uU3RhYmxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUodC5mb2N1c0luaXRpYWxFbGVtZW50KCkpfSl9KX0sdC5wcm90b3R5cGUuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCkpfSl9KX0sdC5wcm90b3R5cGUuX2dldFJlZ2lvbkJvdW5kYXJ5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltjZGstZm9jdXMtcmVnaW9uLSIrdCsiXSwgW2Nka0ZvY3VzUmVnaW9uIit0KyJdLCBbY2RrLWZvY3VzLSIrdCsiXSIpLG49MDtuPGUubGVuZ3RoO24rKyllW25dLmhhc0F0dHJpYnV0ZSgiY2RrLWZvY3VzLSIrdCk/Y29uc29sZS53YXJuKCJGb3VuZCB1c2Ugb2YgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ2Nkay1mb2N1cy0iK3QrIicsIHVzZSAnY2RrRm9jdXNSZWdpb24iK3QrIicgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMC4iLGVbbl0pOmVbbl0uaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtcmVnaW9uLSIrdCkmJmNvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtcmVnaW9uLSIrdCsiJywgdXNlICdjZGtGb2N1c1JlZ2lvbiIrdCsiJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDcuMC4wLiIsZVtuXSk7cmV0dXJuInN0YXJ0Ij09dD9lLmxlbmd0aD9lWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmUubGVuZ3RoP2VbZS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX0sdC5wcm90b3R5cGUuZm9jdXNJbml0aWFsRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtyZXR1cm4gdD8odC5oYXNBdHRyaWJ1dGUoImNkay1mb2N1cy1pbml0aWFsIikmJmNvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtaW5pdGlhbCcsIHVzZSAnY2RrRm9jdXNJbml0aWFsJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDcuMC4wIix0KSx0LmZvY3VzKCksITApOnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpfSx0LnByb3RvdHlwZS5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIHQmJnQuZm9jdXMoKSwhIXR9LHQucHJvdG90eXBlLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gdCYmdC5mb2N1cygpLCEhdH0sdC5wcm90b3R5cGUuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW25dKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZVtuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbbl0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuX2NyZWF0ZUFuY2hvcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LnRhYkluZGV4PXRoaXMuX2VuYWJsZWQ/MDotMSx0LmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSx0LmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10cmFwLWFuY2hvciIpLHR9LHQucHJvdG90eXBlLl9leGVjdXRlT25TdGFibGU9ZnVuY3Rpb24odCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP3QoKTp0aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoZC5hKSgxKSkuc3Vic2NyaWJlKHQpfSx0fSgpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZG9jdW1lbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxuZXcgXyh0LHRoaXMuX2NoZWNrZXIsdGhpcy5fbmdab25lLHRoaXMuX2RvY3VtZW50LGUpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKShnKSxPYmplY3QoaS5WKShpLngpLE9iamVjdChpLlYpKHIuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX25nWm9uZT10LHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fb3JpZ2luPW51bGwsdGhpcy5fd2luZG93Rm9jdXNlZD0hMSx0aGlzLl9lbGVtZW50SW5mbz1uZXcgTWFwLHRoaXMuX3VucmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt9LHRoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudD0wfXJldHVybiB0LnByb3RvdHlwZS5tb25pdG9yPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT0hMSksIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCk7aWYodGhpcy5fZWxlbWVudEluZm8uaGFzKHQpKXt2YXIgcj10aGlzLl9lbGVtZW50SW5mby5nZXQodCk7cmV0dXJuIHIuY2hlY2tDaGlsZHJlbj1lLHIuc3ViamVjdC5hc09ic2VydmFibGUoKX12YXIgaT17dW5saXN0ZW46ZnVuY3Rpb24oKXt9LGNoZWNrQ2hpbGRyZW46ZSxzdWJqZWN0Om5ldyBvLmF9O3RoaXMuX2VsZW1lbnRJbmZvLnNldCh0LGkpLHRoaXMuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpO3ZhciBhPWZ1bmN0aW9uKGUpe3JldHVybiBuLl9vbkZvY3VzKGUsdCl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uX29uQmx1cihlLHQpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsYSwhMCksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIix1LCEwKX0pLGkudW5saXN0ZW49ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixhLCEwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHUsITApfSxpLnN1YmplY3QuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLnN0b3BNb25pdG9yaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2VsZW1lbnRJbmZvLmdldCh0KTtlJiYoZS51bmxpc3RlbigpLGUuc3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3NldENsYXNzZXModCksdGhpcy5fZWxlbWVudEluZm8uZGVsZXRlKHQpLHRoaXMuX2RlY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpKX0sdC5wcm90b3R5cGUuZm9jdXNWaWE9ZnVuY3Rpb24odCxlKXt0aGlzLl9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZShlKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LnN0b3BNb25pdG9yaW5nKG4pfSl9LHQucHJvdG90eXBlLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXt2YXIgZT1mdW5jdGlvbigpe3QuX2xhc3RUb3VjaFRhcmdldD1udWxsLHQuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJrZXlib2FyZCIpfSxuPWZ1bmN0aW9uKCl7dC5fbGFzdFRvdWNoVGFyZ2V0fHx0Ll9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZSgibW91c2UiKX0scj1mdW5jdGlvbihlKXtudWxsIT10Ll90b3VjaFRpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHQuX3RvdWNoVGltZW91dElkKSx0Ll9sYXN0VG91Y2hUYXJnZXQ9ZS50YXJnZXQsdC5fdG91Y2hUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll9sYXN0VG91Y2hUYXJnZXQ9bnVsbH0sNjUwKX0saT1mdW5jdGlvbigpe3QuX3dpbmRvd0ZvY3VzZWQ9ITAsdC5fd2luZG93Rm9jdXNUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll93aW5kb3dGb2N1c2VkPSExfSl9O3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbiwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsciwhT2JqZWN0KG0uYykoKXx8e3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsaSl9KSx0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSwhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixuLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixyLCFPYmplY3QobS5jKSgpfHx7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixpKSxjbGVhclRpbWVvdXQodC5fd2luZG93Rm9jdXNUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0Ll90b3VjaFRpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHQuX29yaWdpblRpbWVvdXRJZCl9fX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzPWZ1bmN0aW9uKHQsZSxuKXtuP3QuY2xhc3NMaXN0LmFkZChlKTp0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLl9zZXRDbGFzc2VzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpJiYodGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLWZvY3VzZWQiLCEhZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGsta2V5Ym9hcmQtZm9jdXNlZCIsImtleWJvYXJkIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1tb3VzZS1mb2N1c2VkIiwibW91c2UiPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09ZSkpfSx0LnByb3RvdHlwZS5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLl9vcmlnaW49dCxlLl9vcmlnaW5UaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLl9vcmlnaW49bnVsbH0pfSl9LHQucHJvdG90eXBlLl93YXNDYXVzZWRCeVRvdWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGFyZ2V0O3JldHVybiB0aGlzLl9sYXN0VG91Y2hUYXJnZXQgaW5zdGFuY2VvZiBOb2RlJiZlIGluc3RhbmNlb2YgTm9kZSYmKGU9PT10aGlzLl9sYXN0VG91Y2hUYXJnZXR8fGUuY29udGFpbnModGhpcy5fbGFzdFRvdWNoVGFyZ2V0KSl9LHQucHJvdG90eXBlLl9vbkZvY3VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpO2lmKG4mJihuLmNoZWNrQ2hpbGRyZW58fGU9PT10LnRhcmdldCkpe3ZhciByPXRoaXMuX29yaWdpbjtyfHwocj10aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOnRoaXMuX3dhc0NhdXNlZEJ5VG91Y2godCk/InRvdWNoIjoicHJvZ3JhbSIpLHRoaXMuX3NldENsYXNzZXMoZSxyKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxyKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49cn19LHQucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9lbGVtZW50SW5mby5nZXQoZSk7IW58fG4uY2hlY2tDaGlsZHJlbiYmdC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmZS5jb250YWlucyh0LnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhlKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxudWxsKSl9LHQucHJvdG90eXBlLl9lbWl0T3JpZ2luPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Lm5leHQoZSl9KX0sdC5wcm90b3R5cGUuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudD1mdW5jdGlvbigpezE9PSsrdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50JiZ0aGlzLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycygpfSx0LnByb3RvdHlwZS5fZGVjcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50PWZ1bmN0aW9uKCl7LS10aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnR8fCh0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe30pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKShpLngpLE9iamVjdChpLlYpKG0uYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBPKHQpe3JldHVybiAwPT09dC5idXR0b25zfX0sbHpsajpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiQ2NuRyIpLGk9KG4oIkZWU3kiKSxuKCJGenFjIiksbigiV2Y0cCIpLHIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWNhcmR7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6MnB4fS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYXJkIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlfVtkaXI9cnRsXSAubWF0LWNhcmQgLm1hdC1kaXZpZGVyLWhvcml6b250YWx7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1jYXJkIC5tYXQtZGl2aWRlci1ob3Jpem9udGFsLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOnN0YXRpYzttYXJnaW46MH0ubWF0LWNhcmQubWF0LWNhcmQtZmxhdHtib3gtc2hhZG93Om5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1jYXJke291dGxpbmU6c29saWQgMXB4fX0ubWF0LWNhcmQtYWN0aW9ucywubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLXRpdGxle2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToxNnB4fS5tYXQtY2FyZC1hY3Rpb25ze21hcmdpbi1sZWZ0Oi0xNnB4O21hcmdpbi1yaWdodDotMTZweDtwYWRkaW5nOjhweCAwfS5tYXQtY2FyZC1hY3Rpb25zLWFsaWduLWVuZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtY2FyZC1pbWFnZXt3aWR0aDpjYWxjKDEwMCUgKyA0OHB4KTttYXJnaW46MCAtMjRweCAxNnB4IC0yNHB4fS5tYXQtY2FyZC14bC1pbWFnZXt3aWR0aDoyNDBweDtoZWlnaHQ6MjQwcHg7bWFyZ2luOi04cHh9Lm1hdC1jYXJkLWZvb3RlcntkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4IC0yNHB4IC0yNHB4fS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbnttYXJnaW46MCA0cHh9Lm1hdC1jYXJkLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tYXQtY2FyZC1oZWFkZXItdGV4dHttYXJnaW46MCA4cHh9Lm1hdC1jYXJkLWF2YXRhcntoZWlnaHQ6NDBweDt3aWR0aDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2ZsZXgtc2hyaW5rOjB9Lm1hdC1jYXJkLWxnLWltYWdlLC5tYXQtY2FyZC1tZC1pbWFnZSwubWF0LWNhcmQtc20taW1hZ2V7bWFyZ2luOi04cHggMH0ubWF0LWNhcmQtdGl0bGUtZ3JvdXB7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbjowIC04cHh9Lm1hdC1jYXJkLXNtLWltYWdle3dpZHRoOjgwcHg7aGVpZ2h0OjgwcHh9Lm1hdC1jYXJkLW1kLWltYWdle3dpZHRoOjExMnB4O2hlaWdodDoxMTJweH0ubWF0LWNhcmQtbGctaW1hZ2V7d2lkdGg6MTUycHg7aGVpZ2h0OjE1MnB4fUBtZWRpYSAobWF4LXdpZHRoOjU5OXB4KXsubWF0LWNhcmR7cGFkZGluZzoyNHB4IDE2cHh9Lm1hdC1jYXJkLWFjdGlvbnN7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6LThweH0ubWF0LWNhcmQtaW1hZ2V7d2lkdGg6Y2FsYygxMDAlICsgMzJweCk7bWFyZ2luOjE2cHggLTE2cHh9Lm1hdC1jYXJkLXRpdGxlLWdyb3Vwe21hcmdpbjowfS5tYXQtY2FyZC14bC1pbWFnZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1oZWFkZXJ7bWFyZ2luOi04cHggMCAwIDB9Lm1hdC1jYXJkLWZvb3RlcnttYXJnaW4tbGVmdDotMTZweDttYXJnaW4tcmlnaHQ6LTE2cHh9fS5tYXQtY2FyZC1jb250ZW50PjpmaXJzdC1jaGlsZCwubWF0LWNhcmQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0ubWF0LWNhcmQtY29udGVudD46bGFzdC1jaGlsZDpub3QoLm1hdC1jYXJkLWZvb3RlciksLm1hdC1jYXJkPjpsYXN0LWNoaWxkOm5vdCgubWF0LWNhcmQtZm9vdGVyKXttYXJnaW4tYm90dG9tOjB9Lm1hdC1jYXJkLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LTI0cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC1hY3Rpb25zOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotMTZweDtwYWRkaW5nLWJvdHRvbTowfS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uOmZpcnN0LWNoaWxkLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1zdWJ0aXRsZTpub3QoOmZpcnN0LWNoaWxkKSwubWF0LWNhcmQtdGl0bGU6bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLXRvcDotNHB4fS5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXN1YnRpdGxlOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotOHB4fSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gci5pYigyLFtyLlhhKG51bGwsMCksci5YYShudWxsLDEpXSxudWxsLG51bGwpfXZhciBhPXIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIHModCl7cmV0dXJuIHIuaWIoMixbci5YYShudWxsLDApLCh0KCkoKSxyLk9hKDEsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlci10ZXh0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLHIuWGEobnVsbCwxKSxyLlhhKG51bGwsMildLG51bGwsbnVsbCl9fSxtQ2hGOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSxtVnNhOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiQ2NuRyIpO24oIjRjMzUiKSxuKCJpaFlZIiksbigibXJTRyIpLG4oImxMQVAiKSxuKCJXZjRwIiksbigiSzlJYSIpLG4oInAwaWIiKSxuKCJGL1hMIiksbigiaDlEcSIpLG4oInB1Z1QiKSxuKCJuNmdHIiksbigiWVNoMiIpLG4oIlZuRC8iKSxuKCJ0OWZaIiksbigiTUdCUyIpLG4oInpvdG0iKSxuKCI2N1kvIiksbigiMC91USIpLG4oInAwU2oiKSxuKCJueTI0IiksbigiVDFETSIpLG4oIkZGT28iKSxuKCI2MGlVIiksbigiZURrUCIpLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW5ldyByLm8oIm1hdC1tZW51LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBhPWZ1bmN0aW9uKCl7fX0sbXJTRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgcj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX07ZnVuY3Rpb24gaSh0LGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9cih0LGUpLHQucHJvdG90eXBlPW51bGw9PT1lP09iamVjdC5jcmVhdGUoZSk6KG4ucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyBuKX12YXIgbz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgaSBpbiBlPWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmKHRbaV09ZVtpXSk7cmV0dXJuIHR9O2Z1bmN0aW9uIGEodCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fWZ1bmN0aW9uIHModCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIHIsaSxvPW4uY2FsbCh0KSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKHI9by5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaCh0KXtpPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gdSgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KHMoYXJndW1lbnRzW2VdKSk7cmV0dXJuIHR9fSxuNmdHOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbnVsbCE9dCYmIiIrdCE9ImZhbHNlIn1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLGZ1bmN0aW9uKHQpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KHQpKSYmIWlzTmFOKE51bWJlcih0KSl9KHQpP051bWJlcih0KTplfWZ1bmN0aW9uIG8odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbnVsbD09dD8iIjoic3RyaW5nIj09dHlwZW9mIHQ/dDp0KyJweCJ9bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KX0sbmtZNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnNjaGVkdWxlfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LG55MjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIk1HQlMiKSxvPW4oInpvdG0iKTtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBzKHQpKX19dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMubm90aWZpZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyB1KHQpLHI9T2JqZWN0KG8uYSkobix0aGlzLm5vdGlmaWVyKTtyZXR1cm4gciYmIXIuY2xvc2VkPyhuLmFkZChyKSxlLnN1YnNjcmliZShuKSk6bn0sdH0oKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUpfHx0aGlzfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbigpe30sZX0oaS5hKX0scDBTajpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIklVVGIiKSxpPW4oIlBVOEwiKSxvPW4oIkc1SjEiKSxhPW4oIm5rWTciKSxzPW4oIkYvWEwiKSx1PW4oIjAvdVEiKSxsPW4oIlR4amciKTtmdW5jdGlvbiBjKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10W3QubGVuZ3RoLTFdO09iamVjdChhLmEpKG4pP3QucG9wKCk6bj1udWxsO3ZhciBjPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gMT09PXQubGVuZ3RofHwyPT09dC5sZW5ndGgmJk9iamVjdChhLmEpKHRbMV0pP09iamVjdCh1LmEpKHRbMF0pOk9iamVjdChsLmEpKCkocy5hLmFwcGx5KHZvaWQgMCx0KSl9KDEhPT1jfHxuP2M+MD9PYmplY3Qoci5hKSh0LG4pOk9iamVjdChvLmIpKG4pOk9iamVjdChpLmEpKHRbMF0pLGUpfX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pfSxwMGliOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCJua1k3Iiksbz1uKCJabjhEIiksYT1uKCJJVVRiIik7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscz1udWxsLHU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gT2JqZWN0KGkuYSkodSk/KHM9dC5wb3AoKSx0Lmxlbmd0aD4xJiYibnVtYmVyIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJihuPXQucG9wKCkpKToibnVtYmVyIj09dHlwZW9mIHUmJihuPXQucG9wKCkpLG51bGw9PT1zJiYxPT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIHIuYT90WzBdOk9iamVjdChvLmEpKG4pKE9iamVjdChhLmEpKHQscykpfX0scE1uUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigiWllDaSIpLG89ci5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5pYigwLFsodCgpKCksci5PYSgwLDE2Nzc3MjE2LG51bGwsbnVsbCwxLCJyb3V0ZXItb3V0bGV0IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxyLk5hKDEsMjEyOTkyLG51bGwsMCxpLm4sW2kuYixyLk4sci5qLFs4LG51bGxdLHIuaF0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9dmFyIHM9ci5LYSgibmctY29tcG9uZW50IixpLnIsZnVuY3Rpb24odCl7cmV0dXJuIHIuaWIoMCxbKHQoKSgpLHIuT2EoMCwwLG51bGwsbnVsbCwxLCJuZy1jb21wb25lbnQiLFtdLG51bGwsbnVsbCxudWxsLGEsbykpLHIuTmEoMSw0OTE1MixudWxsLDAsaS5yLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9LHt9LHt9LFtdKX0scFpoTTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ZnVuY3Rpb24oKXt9fSxwc1cwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJ6b3RtIiksbz1uKCJNR0JTIiksYT1uKCI2N1kvIikscz1uKCIwL3VRIik7ZnVuY3Rpb24gdSh0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24ocil7cmV0dXJuIHIucGlwZSh1KGZ1bmN0aW9uKG4scil7cmV0dXJuIE9iamVjdChzLmEpKHQobixyKSkucGlwZShPYmplY3QoYS5hKShmdW5jdGlvbih0LGkpe3JldHVybiBlKG4sdCxyLGkpfSkpfSxuKSl9OigibnVtYmVyIj09dHlwZW9mIGUmJihuPWUpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IGwodCxuKSl9KX12YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT1lJiYoZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHRoaXMucHJvamVjdD10LHRoaXMuY29uY3VycmVudD1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBjKHQsdGhpcy5wcm9qZWN0LHRoaXMuY29uY3VycmVudCkpfSx0fSgpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dm9pZCAwPT09ciYmKHI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5wcm9qZWN0PW4saS5jb25jdXJyZW50PXIsaS5oYXNDb21wbGV0ZWQ9ITEsaS5idWZmZXI9W10saS5hY3RpdmU9MCxpLmluZGV4PTAsaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU8dGhpcy5jb25jdXJyZW50P3RoaXMuX3RyeU5leHQodCk6dGhpcy5idWZmZXIucHVzaCh0KX0sZS5wcm90b3R5cGUuX3RyeU5leHQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmluZGV4Kys7dHJ5e2U9dGhpcy5wcm9qZWN0KHQsbil9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmFjdGl2ZSsrLHRoaXMuX2lubmVyU3ViKGUsdCxuKX0sZS5wcm90b3R5cGUuX2lubmVyU3ViPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmFkZChPYmplY3QoaS5hKSh0aGlzLHQsZSxuKSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaGFzQ29tcGxldGVkPSEwLDA9PT10aGlzLmFjdGl2ZSYmMD09PXRoaXMuYnVmZmVyLmxlbmd0aCYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1ZmZlcjt0aGlzLnJlbW92ZSh0KSx0aGlzLmFjdGl2ZS0tLGUubGVuZ3RoPjA/dGhpcy5fbmV4dChlLnNoaWZ0KCkpOjA9PT10aGlzLmFjdGl2ZSYmdGhpcy5oYXNDb21wbGV0ZWQmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0oby5hKX0scHVnVDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImlzYnkiKSxpPW4oIk1jU28iKSxvPW4oIjJCZGoiKSxhPW4oIkVobWsiKSxzPW4oImVpaHMiKSx1PW4oIm1yU0ciKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7dmFyIHI9dC5jYWxsKHRoaXMsbj9uLmxlbmd0aCsiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4gICIrbi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSsxKyIpICIrdC50b1N0cmluZygpfSkuam9pbigiXG4gICIpOiIiKXx8dGhpcztyZXR1cm4gci5lcnJvcnM9bixyLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihyLGUucHJvdG90eXBlKSxyfXJldHVybiB1LmIoZSx0KSxlfShFcnJvcik7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbCx0JiYodGhpcy5fdW5zdWJzY3JpYmU9dCl9dmFyIGU7cmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQsZT0hMTtpZighdGhpcy5jbG9zZWQpe3ZhciBuPXRoaXMuX3BhcmVudCx1PXRoaXMuX3BhcmVudHMsYz10aGlzLl91bnN1YnNjcmliZSxoPXRoaXMuX3N1YnNjcmlwdGlvbnM7dGhpcy5jbG9zZWQ9ITAsdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbDtmb3IodmFyIGQ9LTEscD11P3UubGVuZ3RoOjA7bjspbi5yZW1vdmUodGhpcyksbj0rK2Q8cCYmdVtkXXx8bnVsbDtpZihPYmplY3Qoby5hKShjKSYmT2JqZWN0KGEuYSkoYykuY2FsbCh0aGlzKT09PXMuYSYmKGU9ITAsdD10fHwocy5hLmUgaW5zdGFuY2VvZiBsP2Yocy5hLmUuZXJyb3JzKTpbcy5hLmVdKSksT2JqZWN0KHIuYSkoaCkpZm9yKGQ9LTEscD1oLmxlbmd0aDsrK2Q8cDspe3ZhciBtPWhbZF07aWYoT2JqZWN0KGkuYSkobSkmJk9iamVjdChhLmEpKG0udW5zdWJzY3JpYmUpLmNhbGwobSk9PT1zLmEpe2U9ITAsdD10fHxbXTt2YXIgeT1zLmEuZTt5IGluc3RhbmNlb2YgbD90PXQuY29uY2F0KGYoeS5lcnJvcnMpKTp0LnB1c2goeSl9fWlmKGUpdGhyb3cgbmV3IGwodCl9fSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7aWYoIWV8fGU9PT10LkVNUFRZKXJldHVybiB0LkVNUFRZO2lmKGU9PT10aGlzKXJldHVybiB0aGlzO3ZhciBuPWU7c3dpdGNoKHR5cGVvZiBlKXtjYXNlImZ1bmN0aW9uIjpuPW5ldyB0KGUpO2Nhc2Uib2JqZWN0IjppZihuLmNsb3NlZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIG4udW5zdWJzY3JpYmUpcmV0dXJuIG47aWYodGhpcy5jbG9zZWQpcmV0dXJuIG4udW5zdWJzY3JpYmUoKSxuO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuLl9hZGRQYXJlbnQpe3ZhciByPW47KG49bmV3IHQpLl9zdWJzY3JpcHRpb25zPVtyXX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHRlYXJkb3duICIrZSsiIGFkZGVkIHRvIFN1YnNjcmlwdGlvbi4iKX1yZXR1cm4odGhpcy5fc3Vic2NyaXB0aW9uc3x8KHRoaXMuX3N1YnNjcmlwdGlvbnM9W10pKS5wdXNoKG4pLG4uX2FkZFBhcmVudCh0aGlzKSxufSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3Vic2NyaXB0aW9ucztpZihlKXt2YXIgbj1lLmluZGV4T2YodCk7LTEhPT1uJiZlLnNwbGljZShuLDEpfX0sdC5wcm90b3R5cGUuX2FkZFBhcmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJlbnQsbj10aGlzLl9wYXJlbnRzO2UmJmUhPT10P24/LTE9PT1uLmluZGV4T2YodCkmJm4ucHVzaCh0KTp0aGlzLl9wYXJlbnRzPVt0XTp0aGlzLl9wYXJlbnQ9dH0sdC5FTVBUWT0oKGU9bmV3IHQpLmNsb3NlZD0hMCxlKSx0fSgpO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29uY2F0KGUgaW5zdGFuY2VvZiBsP2UuZXJyb3JzOmUpfSxbXSl9fSxxQWxTOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiZFdaZyIpLGk9bigiQ2NuRyIpLG89bigiYm5lNSIpLGE9bigiRi9YTCIpLHM9bigiSzlJYSIpLHU9bigiNmJsRiIpLGw9bigicDBpYiIpLGM9bigiVDFETSIpLGY9bigibXJTRyIpLGg9bigiRWhtayIpLGQ9bigiZWlocyIpLHA9bigiTUdCUyIpLG09bigiem90bSIpLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZHVyYXRpb25TZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBnKHQsdGhpcy5kdXJhdGlvblNlbGVjdG9yKSl9LHR9KCksZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuZHVyYXRpb25TZWxlY3Rvcj1uLHIuaGFzVmFsdWU9ITEscn1yZXR1cm4gZi5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7aWYodGhpcy52YWx1ZT10LHRoaXMuaGFzVmFsdWU9ITAsIXRoaXMudGhyb3R0bGVkKXt2YXIgZT1PYmplY3QoaC5hKSh0aGlzLmR1cmF0aW9uU2VsZWN0b3IpKHQpO2lmKGU9PT1kLmEpdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihkLmEuZSk7ZWxzZXt2YXIgbj1PYmplY3QobS5hKSh0aGlzLGUpOyFufHxuLmNsb3NlZD90aGlzLmNsZWFyVGhyb3R0bGUoKTp0aGlzLmFkZCh0aGlzLnRocm90dGxlZD1uKX19fSxlLnByb3RvdHlwZS5jbGVhclRocm90dGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52YWx1ZSxlPXRoaXMuaGFzVmFsdWUsbj10aGlzLnRocm90dGxlZDtuJiYodGhpcy5yZW1vdmUobiksdGhpcy50aHJvdHRsZWQ9bnVsbCxuLnVuc3Vic2NyaWJlKCkpLGUmJih0aGlzLnZhbHVlPW51bGwsdGhpcy5oYXNWYWx1ZT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCkpfSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuY2xlYXJUaHJvdHRsZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuY2xlYXJUaHJvdHRsZSgpfSxlfShwLmEpLHY9bigiZ0kzQiIpO2Z1bmN0aW9uIGIodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9Yy5hKSxuPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdCh2LmEpKHQsZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IHkobikpfTt2YXIgbn12YXIgXz1uKCJWbkQvIik7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gU30pO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX25nWm9uZT10LHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fc2Nyb2xsZWQ9bmV3IHMuYSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmVsZW1lbnRTY3JvbGxlZCgpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLl9zY3JvbGxlZC5uZXh0KHQpfSk7dGhpcy5zY3JvbGxDb250YWluZXJzLnNldCh0LG4pfSx0LnByb3RvdHlwZS5kZXJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQodCk7ZSYmKGUudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKHQpKX0sdC5wcm90b3R5cGUuc2Nyb2xsZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj91LmEuY3JlYXRlKGZ1bmN0aW9uKG4pe2UuX2dsb2JhbFN1YnNjcmlwdGlvbnx8ZS5fYWRkR2xvYmFsTGlzdGVuZXIoKTt2YXIgcj10PjA/ZS5fc2Nyb2xsZWQucGlwZShiKHQpKS5zdWJzY3JpYmUobik6ZS5fc2Nyb2xsZWQuc3Vic2NyaWJlKG4pO3JldHVybiBlLl9zY3JvbGxlZENvdW50KyssZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKCksZS5fc2Nyb2xsZWRDb3VudC0tLGUuX3Njcm9sbGVkQ291bnR8fGUuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6T2JqZWN0KGEuYSkoKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5kZXJlZ2lzdGVyKG4pfSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuYW5jZXN0b3JTY3JvbGxlZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHQpO3JldHVybiB0aGlzLnNjcm9sbGVkKGUpLnBpcGUoT2JqZWN0KF8uYSkoZnVuY3Rpb24odCl7cmV0dXJuIXR8fG4uaW5kZXhPZih0KT4tMX0pKX0sdC5wcm90b3R5cGUuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goZnVuY3Rpb24ocixpKXtlLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGksdCkmJm4ucHVzaChpKX0pLG59LHQucHJvdG90eXBlLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5uYXRpdmVFbGVtZW50LHI9dC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtkb3tpZihuPT1yKXJldHVybiEwfXdoaWxlKG49bi5wYXJlbnRFbGVtZW50KTtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2FkZEdsb2JhbExpc3RlbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChvLmEpKHdpbmRvdy5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3Njcm9sbGVkLm5leHQoKX0pfSl9LHQucHJvdG90eXBlLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcj1mdW5jdGlvbigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiYmKHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVikoaS54KSxPYmplY3QoaS5WKShyLmEpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZhciByPXRoaXM7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX3Njcm9sbD1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgcy5hLHRoaXMuX3Njcm9sbExpc3RlbmVyPWZ1bmN0aW9uKHQpe3JldHVybiByLl9lbGVtZW50U2Nyb2xsZWQubmV4dCh0KX19cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdC5fc2Nyb2xsTGlzdGVuZXIpfSksdGhpcy5fc2Nyb2xsLnJlZ2lzdGVyKHRoaXMpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3Njcm9sbC5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX3Njcm9sbExpc3RlbmVyJiZ0aGlzLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fc2Nyb2xsTGlzdGVuZXIpfSx0LnByb3RvdHlwZS5lbGVtZW50U2Nyb2xsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5nZXRFbGVtZW50UmVmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWZ9LHR9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fY2hhbmdlPXQuaXNCcm93c2VyP2UucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KGwuYSkoT2JqZWN0KG8uYSkod2luZG93LCJyZXNpemUiKSxPYmplY3Qoby5hKSh3aW5kb3csIm9yaWVudGF0aW9uY2hhbmdlIikpfSk6T2JqZWN0KGEuYSkoKSx0aGlzLl9pbnZhbGlkYXRlQ2FjaGU9dGhpcy5jaGFuZ2UoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gbi5fdXBkYXRlVmlld3BvcnRTaXplKCl9KX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9pbnZhbGlkYXRlQ2FjaGUudW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRTaXplPWZ1bmN0aW9uKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTt2YXIgdD17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLHR9LHQucHJvdG90eXBlLmdldFZpZXdwb3J0UmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLGU9dGhpcy5nZXRWaWV3cG9ydFNpemUoKSxuPWUud2lkdGgscj1lLmhlaWdodDtyZXR1cm57dG9wOnQudG9wLGxlZnQ6dC5sZWZ0LGJvdHRvbTp0LnRvcCtyLHJpZ2h0OnQubGVmdCtuLGhlaWdodDpyLHdpZHRoOm59fSx0LnByb3RvdHlwZS5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTt2YXIgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotdC50b3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wfHx3aW5kb3cuc2Nyb2xsWXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8MCxsZWZ0Oi10LmxlZnR8fGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdHx8d2luZG93LnNjcm9sbFh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHwwfX0sdC5wcm90b3R5cGUuY2hhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0yMCksdD4wP3RoaXMuX2NoYW5nZS5waXBlKGIodCkpOnRoaXMuX2NoYW5nZX0sdC5wcm90b3R5cGUuX3VwZGF0ZVZpZXdwb3J0U2l6ZT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dpZHRoOndpbmRvdy5pbm5lcldpZHRoLGhlaWdodDp3aW5kb3cuaW5uZXJIZWlnaHR9Ont3aWR0aDowLGhlaWdodDowfX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVikoci5hKSxPYmplY3QoaS5WKShpLngpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksQz17cHJvdmlkZTpPLGRlcHM6W1tuZXcgaS55LG5ldyBpLkgsT10sci5hLGkueF0sdXNlRmFjdG9yeTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIHR8fG5ldyBPKGUsbil9fSxTPWZ1bmN0aW9uKCl7fX0scmYzMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9ZnVuY3Rpb24odCxlKXt0aGlzLnBhZ2VOYW1lPXQsdGhpcy5jaHVua1VSTD1lLHRoaXMuY2h1bmtMb2FkZWQ9ITF9LGk9W25ldyByKCIvc3VwcG9ydCIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzkvOTEvVC0tR09fUGFyaXMtU2FjbGF5LS1zdXBwb3J0X2NodW5rLmJhc2U2NC50eHQiKSxuZXcgcigiL3RlYW0iLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy83Lzc0L1QtLUdPX1BhcmlzLVNhY2xheS0tdGVhbV9jaHVuay5iYXNlNjQudHh0IiksbmV3IHIoIi9sYWJub3RlYm9vayIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzAvMDIvVC0tR09fUGFyaXMtU2FjbGF5LS1sYWJub3RlYm9va19jaHVuay5iYXNlNjQudHh0IildfSwidC9OYSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gTX0pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBGfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBEfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gQn0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB6fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIFV9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBQfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJDY25HIiksbz1uKCJGL1hMIiksYT1uKCI2YmxGIikscz1uKCJQaGpuIiksdT1uKCJWbkQvIiksbD1uKCI2N1kvIiksYz1uKCJJcDBSIiksZj1mdW5jdGlvbigpe30saD1mdW5jdGlvbigpe30sZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLm5vcm1hbGl6ZWROYW1lcz1uZXcgTWFwLHRoaXMubGF6eVVwZGF0ZT1udWxsLHQ/dGhpcy5sYXp5SW5pdD0ic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXtlLmhlYWRlcnM9bmV3IE1hcCx0LnNwbGl0KCJcbiIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5pbmRleE9mKCI6Iik7aWYobj4wKXt2YXIgcj10LnNsaWNlKDAsbiksaT1yLnRvTG93ZXJDYXNlKCksbz10LnNsaWNlKG4rMSkudHJpbSgpO2UubWF5YmVTZXROb3JtYWxpemVkTmFtZShyLGkpLGUuaGVhZGVycy5oYXMoaSk/ZS5oZWFkZXJzLmdldChpKS5wdXNoKG8pOmUuaGVhZGVycy5zZXQoaSxbb10pfX0pfTpmdW5jdGlvbigpe2UuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9dFtuXSxpPW4udG9Mb3dlckNhc2UoKTsic3RyaW5nIj09dHlwZW9mIHImJihyPVtyXSksci5sZW5ndGg+MCYmKGUuaGVhZGVycy5zZXQoaSxyKSxlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobixpKSl9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyh0LnRvTG93ZXJDYXNlKCkpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dGhpcy5pbml0KCk7dmFyIGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH0sdC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSl8fG51bGx9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJzIn0pfSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImQifSl9LHQucHJvdG90eXBlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWU9ZnVuY3Rpb24odCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIHQ/dGhpcy5jb3B5RnJvbSh0aGlzLmxhenlJbml0KTp0aGlzLmxhenlJbml0KCksdGhpcy5sYXp5SW5pdD1udWxsLHRoaXMubGF6eVVwZGF0ZSYmKHRoaXMubGF6eVVwZGF0ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5VXBkYXRlKHQpfSksdGhpcy5sYXp5VXBkYXRlPW51bGwpKX0sdC5wcm90b3R5cGUuY29weUZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmluaXQoKSxBcnJheS5mcm9tKHQuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goZnVuY3Rpb24obil7ZS5oZWFkZXJzLnNldChuLHQuaGVhZGVycy5nZXQobikpLGUubm9ybWFsaXplZE5hbWVzLnNldChuLHQubm9ybWFsaXplZE5hbWVzLmdldChuKSl9KX0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQ7cmV0dXJuIG4ubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIHQ/dGhpcy5sYXp5SW5pdDp0aGlzLG4ubGF6eVVwZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFtlXSksbn0sdC5wcm90b3R5cGUuYXBwbHlVcGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjp2YXIgbj10LnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmKG49W25dKSwwPT09bi5sZW5ndGgpcmV0dXJuO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZSh0Lm5hbWUsZSk7dmFyIGk9KCJhIj09PXQub3A/dGhpcy5oZWFkZXJzLmdldChlKTp2b2lkIDApfHxbXTtpLnB1c2guYXBwbHkoaSxPYmplY3Qoci5kKShuKSksdGhpcy5oZWFkZXJzLnNldChlLGkpO2JyZWFrO2Nhc2UiZCI6dmFyIG89dC52YWx1ZTtpZihvKXt2YXIgYT10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCFhKXJldHVybjswPT09KGE9YS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTE9PT1vLmluZGV4T2YodCl9KSkubGVuZ3RoPyh0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKSk6dGhpcy5oZWFkZXJzLnNldChlLGEpfWVsc2UgdGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHQoZS5ub3JtYWxpemVkTmFtZXMuZ2V0KG4pLGUuaGVhZGVycy5nZXQobikpfSl9LHR9KCkscD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmVuY29kZUtleT1mdW5jdGlvbih0KXtyZXR1cm4gbSh0KX0sdC5wcm90b3R5cGUuZW5jb2RlVmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCl9LHQucHJvdG90eXBlLmRlY29kZUtleT1mdW5jdGlvbih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfSx0LnByb3RvdHlwZS5kZWNvZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfSx0fSgpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC8lNDAvZ2ksIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZ2ksIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lM0IvZ2ksIjsiKS5yZXBsYWNlKC8lMkIvZ2ksIisiKS5yZXBsYWNlKC8lM0QvZ2ksIj0iKS5yZXBsYWNlKC8lM0YvZ2ksIj8iKS5yZXBsYWNlKC8lMkYvZ2ksIi8iKX12YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBlLG4saSxvPXRoaXM7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9dC5lbmNvZGVyfHxuZXcgcCx0LmZyb21TdHJpbmcpe2lmKHQuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD0oZT10LmZyb21TdHJpbmcsbj10aGlzLmVuY29kZXIsaT1uZXcgTWFwLGUubGVuZ3RoPjAmJmUuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiPSIpLG89T2JqZWN0KHIuYykoLTE9PWU/W24uZGVjb2RlS2V5KHQpLCIiXTpbbi5kZWNvZGVLZXkodC5zbGljZSgwLGUpKSxuLmRlY29kZVZhbHVlKHQuc2xpY2UoZSsxKSldLDIpLGE9b1swXSxzPW9bMV0sdT1pLmdldChhKXx8W107dS5wdXNoKHMpLGkuc2V0KGEsdSl9KSxpKX1lbHNlIHQuZnJvbU9iamVjdD8odGhpcy5tYXA9bmV3IE1hcCxPYmplY3Qua2V5cyh0LmZyb21PYmplY3QpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5mcm9tT2JqZWN0W2VdO28ubWFwLnNldChlLEFycmF5LmlzQXJyYXkobik/bjpbbl0pfSkpOnRoaXMubWFwPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuaGFzKHQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dGhpcy5pbml0KCk7dmFyIGU9dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBlP2VbMF06bnVsbH0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5nZXQodCl8fG51bGx9LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfSx0LnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJhIn0pfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJkIn0pfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChmdW5jdGlvbihlKXt2YXIgbj10LmVuY29kZXIuZW5jb2RlS2V5KGUpO3JldHVybiB0Lm1hcC5nZXQoZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuKyI9Iit0LmVuY29kZXIuZW5jb2RlVmFsdWUoZSl9KS5qb2luKCImIil9KS5qb2luKCImIil9LHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0KHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBuLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxuLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChbZV0pLG59LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO251bGw9PT10aGlzLm1hcCYmKHRoaXMubWFwPW5ldyBNYXApLG51bGwhPT10aGlzLmNsb25lRnJvbSYmKHRoaXMuY2xvbmVGcm9tLmluaXQoKSx0aGlzLmNsb25lRnJvbS5rZXlzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5tYXAuc2V0KGUsdC5jbG9uZUZyb20ubWFwLmdldChlKSl9KSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChmdW5jdGlvbihlKXtzd2l0Y2goZS5vcCl7Y2FzZSJhIjpjYXNlInMiOnZhciBuPSgiYSI9PT1lLm9wP3QubWFwLmdldChlLnBhcmFtKTp2b2lkIDApfHxbXTtuLnB1c2goZS52YWx1ZSksdC5tYXAuc2V0KGUucGFyYW0sbik7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1lLnZhbHVlKXt0Lm1hcC5kZWxldGUoZS5wYXJhbSk7YnJlYWt9dmFyIHI9dC5tYXAuZ2V0KGUucGFyYW0pfHxbXSxpPXIuaW5kZXhPZihlLnZhbHVlKTstMSE9PWkmJnIuc3BsaWNlKGksMSksci5sZW5ndGg+MD90Lm1hcC5zZXQoZS5wYXJhbSxyKTp0Lm1hcC5kZWxldGUoZS5wYXJhbSl9fSksdGhpcy5jbG9uZUZyb209bnVsbCl9LHR9KCk7ZnVuY3Rpb24gZyh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9ZnVuY3Rpb24gdih0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJnQgaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIGIodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBGb3JtRGF0YSYmdCBpbnN0YW5jZW9mIEZvcm1EYXRhfXZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaTtpZih0aGlzLnVybD1lLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPXQudG9VcHBlckNhc2UoKSxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpjYXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8cj8odGhpcy5ib2R5PXZvaWQgMCE9PW4/bjpudWxsLGk9cik6aT1uLGkmJih0aGlzLnJlcG9ydFByb2dyZXNzPSEhaS5yZXBvcnRQcm9ncmVzcyx0aGlzLndpdGhDcmVkZW50aWFscz0hIWkud2l0aENyZWRlbnRpYWxzLGkucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9aS5yZXNwb25zZVR5cGUpLGkuaGVhZGVycyYmKHRoaXMuaGVhZGVycz1pLmhlYWRlcnMpLGkucGFyYW1zJiYodGhpcy5wYXJhbXM9aS5wYXJhbXMpKSx0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGQpLHRoaXMucGFyYW1zKXt2YXIgbz10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT1vLmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9ZTtlbHNle3ZhciBhPWUuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1lKygtMT09PWE/Ij8iOmE8ZS5sZW5ndGgtMT8iJiI6IiIpK299fWVsc2UgdGhpcy5wYXJhbXM9bmV3IHksdGhpcy51cmxXaXRoUGFyYW1zPWV9cmV0dXJuIHQucHJvdG90eXBlLnNlcmlhbGl6ZUJvZHk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOmcodGhpcy5ib2R5KXx8dih0aGlzLmJvZHkpfHxiKHRoaXMuYm9keSl8fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiB5P3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfSx0LnByb3RvdHlwZS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6Yih0aGlzLmJvZHkpP251bGw6dih0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOmcodGhpcy5ib2R5KT9udWxsOiJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5PyJ0ZXh0L3BsYWluIjp0aGlzLmJvZHkgaW5zdGFuY2VvZiB5PyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/ImFwcGxpY2F0aW9uL2pzb24iOm51bGx9LHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj1lLm1ldGhvZHx8dGhpcy5tZXRob2Qscj1lLnVybHx8dGhpcy51cmwsaT1lLnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsbz12b2lkIDAhPT1lLmJvZHk/ZS5ib2R5OnRoaXMuYm9keSxhPXZvaWQgMCE9PWUud2l0aENyZWRlbnRpYWxzP2Uud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLHM9dm9pZCAwIT09ZS5yZXBvcnRQcm9ncmVzcz9lLnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3MsdT1lLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxsPWUucGFyYW1zfHx0aGlzLnBhcmFtcztyZXR1cm4gdm9pZCAwIT09ZS5zZXRIZWFkZXJzJiYodT1PYmplY3Qua2V5cyhlLnNldEhlYWRlcnMpLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0LnNldChuLGUuc2V0SGVhZGVyc1tuXSl9LHUpKSxlLnNldFBhcmFtcyYmKGw9T2JqZWN0LmtleXMoZS5zZXRQYXJhbXMpLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0LnNldChuLGUuc2V0UGFyYW1zW25dKX0sbCkpLG5ldyB0KG4scixvLHtwYXJhbXM6bCxoZWFkZXJzOnUscmVwb3J0UHJvZ3Jlc3M6cyxyZXNwb25zZVR5cGU6aSx3aXRoQ3JlZGVudGlhbHM6YX0pfSx0fSgpLHc9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5TZW50PTBdPSJTZW50Iix0W3QuVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIix0W3QuUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNlSGVhZGVyIix0W3QuRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsdFt0LlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsdFt0LlVzZXI9NV09IlVzZXIiLHR9KHt9KSx4PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0yMDApLHZvaWQgMD09PW4mJihuPSJPSyIpLHRoaXMuaGVhZGVycz10LmhlYWRlcnN8fG5ldyBkLHRoaXMuc3RhdHVzPXZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOmUsdGhpcy5zdGF0dXNUZXh0PXQuc3RhdHVzVGV4dHx8bix0aGlzLnVybD10LnVybHx8bnVsbCx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMH19KCksTz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi50eXBlPXcuUmVzcG9uc2VIZWFkZXIsbn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9e30pLG5ldyBlKHtoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfSxlfSh4KSxDPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLnR5cGU9dy5SZXNwb25zZSxuLmJvZHk9dm9pZCAwIT09ZS5ib2R5P2UuYm9keTpudWxsLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSxuZXcgZSh7Ym9keTp2b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfSxlfSh4KSxTPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMsZSwwLCJVbmtub3duIEVycm9yIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLG4ub2s9ITEsbi5tZXNzYWdlPW4uc3RhdHVzPj0yMDAmJm4uc3RhdHVzPDMwMD8iSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAiKyhlLnVybHx8Iih1bmtub3duIHVybCkiKToiSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAiKyhlLnVybHx8Iih1bmtub3duIHVybCkiKSsiOiAiK2Uuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQsbi5lcnJvcj1lLmVycm9yfHxudWxsLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZX0oeCk7ZnVuY3Rpb24gRSh0LGUpe3JldHVybntib2R5OmUsaGVhZGVyczp0LmhlYWRlcnMsb2JzZXJ2ZTp0Lm9ic2VydmUscGFyYW1zOnQucGFyYW1zLHJlcG9ydFByb2dyZXNzOnQucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOnQucmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczp0LndpdGhDcmVkZW50aWFsc319dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuaGFuZGxlcj10fXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXRoaXM7aWYodm9pZCAwPT09biYmKG49e30pLHQgaW5zdGFuY2VvZiBfKXI9dDtlbHNle3ZhciBhO2E9bi5oZWFkZXJzIGluc3RhbmNlb2YgZD9uLmhlYWRlcnM6bmV3IGQobi5oZWFkZXJzKTt2YXIgYz12b2lkIDA7bi5wYXJhbXMmJihjPW4ucGFyYW1zIGluc3RhbmNlb2YgeT9uLnBhcmFtczpuZXcgeSh7ZnJvbU9iamVjdDpuLnBhcmFtc30pKSxyPW5ldyBfKHQsZSx2b2lkIDAhPT1uLmJvZHk/bi5ib2R5Om51bGwse2hlYWRlcnM6YSxwYXJhbXM6YyxyZXBvcnRQcm9ncmVzczpuLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpuLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFsc30pfXZhciBmPU9iamVjdChvLmEpKHIpLnBpcGUoT2JqZWN0KHMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGkuaGFuZGxlci5oYW5kbGUodCl9KSk7aWYodCBpbnN0YW5jZW9mIF98fCJldmVudHMiPT09bi5vYnNlcnZlKXJldHVybiBmO3ZhciBoPWYucGlwZShPYmplY3QodS5hKShmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEN9KSk7c3dpdGNoKG4ub2JzZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChyLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIGgucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtpZihudWxsIT09dC5ib2R5JiYhKHQuYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhbiBBcnJheUJ1ZmZlci4iKTtyZXR1cm4gdC5ib2R5fSkpO2Nhc2UiYmxvYiI6cmV0dXJuIGgucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtpZihudWxsIT09dC5ib2R5JiYhKHQuYm9keSBpbnN0YW5jZW9mIEJsb2IpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgQmxvYi4iKTtyZXR1cm4gdC5ib2R5fSkpO2Nhc2UidGV4dCI6cmV0dXJuIGgucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtpZihudWxsIT09dC5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIHQuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gdC5ib2R5fSkpO2Nhc2UianNvbiI6ZGVmYXVsdDpyZXR1cm4gaC5waXBlKE9iamVjdChsLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJvZHl9KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIGg7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVhY2hhYmxlOiB1bmhhbmRsZWQgb2JzZXJ2ZSB0eXBlICIrbi5vYnNlcnZlKyJ9Iil9fSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiREVMRVRFIix0LGUpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiR0VUIix0LGUpfSx0LnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkhFQUQiLHQsZSl9LHQucHJvdG90eXBlLmpzb25wPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLHQse3BhcmFtczoobmV3IHkpLmFwcGVuZChlLCJKU09OUF9DQUxMQkFDSyIpLG9ic2VydmU6ImJvZHkiLHJlc3BvbnNlVHlwZToianNvbiJ9KX0sdC5wcm90b3R5cGUub3B0aW9ucz1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5yZXF1ZXN0KCJPUFRJT05TIix0LGUpfSx0LnByb3RvdHlwZS5wYXRjaD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLnJlcXVlc3QoIlBBVENIIix0LEUobixlKSl9LHQucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQT1NUIix0LEUobixlKSl9LHQucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLnJlcXVlc3QoIlBVVCIsdCxFKG4sZSkpfSx0fSgpLFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5uZXh0PXQsdGhpcy5pbnRlcmNlcHRvcj1lfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50ZXJjZXB0b3IuaW50ZXJjZXB0KHQsdGhpcy5uZXh0KX0sdH0oKSxJPW5ldyBpLm8oIkhUVFBfSU5URVJDRVBUT1JTIiksQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih0LGUpe3JldHVybiBlLmhhbmRsZSh0KX0sdH0oKSxqPS9eXClcXVx9Jyw/XG4vLFA9ZnVuY3Rpb24oKXt9LE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbigpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9LHR9KCksTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy54aHJGYWN0b3J5PXR9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJKU09OUCI9PT10Lm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBjb25zdHJ1Y3QgSnNvbnAgcmVxdWVzdCB3aXRob3V0IEpzb25wQ2xpZW50TW9kdWxlIGluc3RhbGxlZC4iKTtyZXR1cm4gbmV3IGEuYShmdW5jdGlvbihuKXt2YXIgcj1lLnhockZhY3RvcnkuYnVpbGQoKTtpZihyLm9wZW4odC5tZXRob2QsdC51cmxXaXRoUGFyYW1zKSx0LndpdGhDcmVkZW50aWFscyYmKHIud2l0aENyZWRlbnRpYWxzPSEwKSx0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3JldHVybiByLnNldFJlcXVlc3RIZWFkZXIodCxlLmpvaW4oIiwiKSl9KSx0LmhlYWRlcnMuaGFzKCJBY2NlcHQiKXx8ci5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiKSwhdC5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIikpe3ZhciBpPXQuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKTtudWxsIT09aSYmci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGkpfWlmKHQucmVzcG9uc2VUeXBlKXt2YXIgbz10LnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO3IucmVzcG9uc2VUeXBlPSJqc29uIiE9PW8/bzoidGV4dCJ9dmFyIGE9dC5zZXJpYWxpemVCb2R5KCkscz1udWxsLHU9ZnVuY3Rpb24oKXtpZihudWxsIT09cylyZXR1cm4gczt2YXIgZT0xMjIzPT09ci5zdGF0dXM/MjA0OnIuc3RhdHVzLG49ci5zdGF0dXNUZXh0fHwiT0siLGk9bmV3IGQoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksbz1mdW5jdGlvbih0KXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gdCYmdC5yZXNwb25zZVVSTD90LnJlc3BvbnNlVVJMOi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KHQuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP3QuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfShyKXx8dC51cmw7cmV0dXJuIHM9bmV3IE8oe2hlYWRlcnM6aSxzdGF0dXM6ZSxzdGF0dXNUZXh0Om4sdXJsOm99KX0sbD1mdW5jdGlvbigpe3ZhciBlPXUoKSxpPWUuaGVhZGVycyxvPWUuc3RhdHVzLGE9ZS5zdGF0dXNUZXh0LHM9ZS51cmwsbD1udWxsOzIwNCE9PW8mJihsPXZvaWQgMD09PXIucmVzcG9uc2U/ci5yZXNwb25zZVRleHQ6ci5yZXNwb25zZSksMD09PW8mJihvPWw/MjAwOjApO3ZhciBjPW8+PTIwMCYmbzwzMDA7aWYoImpzb24iPT09dC5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgbCl7dmFyIGY9bDtsPWwucmVwbGFjZShqLCIiKTt0cnl7bD0iIiE9PWw/SlNPTi5wYXJzZShsKTpudWxsfWNhdGNoKHQpe2w9ZixjJiYoYz0hMSxsPXtlcnJvcjp0LHRleHQ6bH0pfX1jPyhuLm5leHQobmV3IEMoe2JvZHk6bCxoZWFkZXJzOmksc3RhdHVzOm8sc3RhdHVzVGV4dDphLHVybDpzfHx2b2lkIDB9KSksbi5jb21wbGV0ZSgpKTpuLmVycm9yKG5ldyBTKHtlcnJvcjpsLGhlYWRlcnM6aSxzdGF0dXM6byxzdGF0dXNUZXh0OmEsdXJsOnN8fHZvaWQgMH0pKX0sYz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgUyh7ZXJyb3I6dCxzdGF0dXM6ci5zdGF0dXN8fDAsc3RhdHVzVGV4dDpyLnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIn0pO24uZXJyb3IoZSl9LGY9ITEsaD1mdW5jdGlvbihlKXtmfHwobi5uZXh0KHUoKSksZj0hMCk7dmFyIGk9e3R5cGU6dy5Eb3dubG9hZFByb2dyZXNzLGxvYWRlZDplLmxvYWRlZH07ZS5sZW5ndGhDb21wdXRhYmxlJiYoaS50b3RhbD1lLnRvdGFsKSwidGV4dCI9PT10LnJlc3BvbnNlVHlwZSYmci5yZXNwb25zZVRleHQmJihpLnBhcnRpYWxUZXh0PXIucmVzcG9uc2VUZXh0KSxuLm5leHQoaSl9LHA9ZnVuY3Rpb24odCl7dmFyIGU9e3R5cGU6dy5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6dC5sb2FkZWR9O3QubGVuZ3RoQ29tcHV0YWJsZSYmKGUudG90YWw9dC50b3RhbCksbi5uZXh0KGUpfTtyZXR1cm4gci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjKSx0LnJlcG9ydFByb2dyZXNzJiYoci5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsaCksbnVsbCE9PWEmJnIudXBsb2FkJiZyLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscCkpLHIuc2VuZChhKSxuLm5leHQoe3R5cGU6dy5TZW50fSksZnVuY3Rpb24oKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwpLHQucmVwb3J0UHJvZ3Jlc3MmJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixoKSxudWxsIT09YSYmci51cGxvYWQmJnIudXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5hYm9ydCgpfX0pfSx0fSgpLFI9bmV3IGkubygiWFNSRl9DT09LSUVfTkFNRSIpLEQ9bmV3IGkubygiWFNSRl9IRUFERVJfTkFNRSIpLEw9ZnVuY3Rpb24oKXt9LEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmRvYz10LHRoaXMucGxhdGZvcm09ZSx0aGlzLmNvb2tpZU5hbWU9bix0aGlzLmxhc3RDb29raWVTdHJpbmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0VG9rZW49ZnVuY3Rpb24oKXtpZigic2VydmVyIj09PXRoaXMucGxhdGZvcm0pcmV0dXJuIG51bGw7dmFyIHQ9dGhpcy5kb2MuY29va2llfHwiIjtyZXR1cm4gdCE9PXRoaXMubGFzdENvb2tpZVN0cmluZyYmKHRoaXMucGFyc2VDb3VudCsrLHRoaXMubGFzdFRva2VuPU9iamVjdChjLnUpKHQsdGhpcy5jb29raWVOYW1lKSx0aGlzLmxhc3RDb29raWVTdHJpbmc9dCksdGhpcy5sYXN0VG9rZW59LHR9KCksVj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnRva2VuU2VydmljZT10LHRoaXMuaGVhZGVyTmFtZT1lfXJldHVybiB0LnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LnVybC50b0xvd2VyQ2FzZSgpO2lmKCJHRVQiPT09dC5tZXRob2R8fCJIRUFEIj09PXQubWV0aG9kfHxuLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8bi5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBlLmhhbmRsZSh0KTt2YXIgcj10aGlzLnRva2VuU2VydmljZS5nZXRUb2tlbigpO3JldHVybiBudWxsPT09cnx8dC5oZWFkZXJzLmhhcyh0aGlzLmhlYWRlck5hbWUpfHwodD10LmNsb25lKHtoZWFkZXJzOnQuaGVhZGVycy5zZXQodGhpcy5oZWFkZXJOYW1lLHIpfSkpLGUuaGFuZGxlKHQpfSx0fSgpLFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5iYWNrZW5kPXQsdGhpcy5pbmplY3Rvcj1lLHRoaXMuY2hhaW49bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT10aGlzLmNoYWluKXt2YXIgZT10aGlzLmluamVjdG9yLmdldChJLFtdKTt0aGlzLmNoYWluPWUucmVkdWNlUmlnaHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFQodCxlKX0sdGhpcy5iYWNrZW5kKX1yZXR1cm4gdGhpcy5jaGFpbi5oYW5kbGUodCl9LHR9KCksej1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuZGlzYWJsZT1mdW5jdGlvbigpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6Vix1c2VDbGFzczpBfV19fSx0LndpdGhPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSkse25nTW9kdWxlOnQscHJvdmlkZXJzOltlLmNvb2tpZU5hbWU/e3Byb3ZpZGU6Uix1c2VWYWx1ZTplLmNvb2tpZU5hbWV9OltdLGUuaGVhZGVyTmFtZT97cHJvdmlkZTpELHVzZVZhbHVlOmUuaGVhZGVyTmFtZX06W11dfX0sdH0oKSxCPWZ1bmN0aW9uKCl7fX0sdDlmWjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigibXJTRyIpLGk9bigiRkZPbyIpLG89bigiYjdtVyIpLGE9bigiRzVKMSIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAwPT09dD9PYmplY3QoYS5iKSgpOmUubGlmdChuZXcgdSh0KSl9fXZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBvLmF9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGwodCx0aGlzLnRvdGFsKSl9LHR9KCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIudG90YWw9bixyLmNvdW50PTAscn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy50b3RhbCxuPSsrdGhpcy5jb3VudDtuPD1lJiYodGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpLG49PT1lJiYodGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKSkpfSxlfShpLmEpfSx1NjdEOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJFbjgrIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPXRbci5hXSgpOzspe3ZhciBpPW4ubmV4dCgpO2lmKGkuZG9uZSl7ZS5jb21wbGV0ZSgpO2JyZWFrfWlmKGUubmV4dChpLnZhbHVlKSxlLmNsb3NlZClicmVha31yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbi5yZXR1cm4mJmUuYWRkKGZ1bmN0aW9uKCl7bi5yZXR1cm4mJm4ucmV0dXJuKCl9KSxlfX19LHVNYU86ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIm1yU0ciKSxpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuc3ViamVjdD1lLHIuc3Vic2NyaWJlcj1uLHIuY2xvc2VkPSExLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDt2YXIgdD10aGlzLnN1YmplY3QsZT10Lm9ic2VydmVycztpZih0aGlzLnN1YmplY3Q9bnVsbCxlJiYwIT09ZS5sZW5ndGgmJiF0LmlzU3RvcHBlZCYmIXQuY2xvc2VkKXt2YXIgbj1lLmluZGV4T2YodGhpcy5zdWJzY3JpYmVyKTstMSE9PW4mJmUuc3BsaWNlKG4sMSl9fX0sZX0obigicHVnVCIpLmEpfSx3RncxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJpaFlZIiksbz1uKCJDY25HIiksYT0obigiWllqdCIpLG4oIk5TWUwiKSkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9uZXh0QW5pbWF0aW9uSWQ9MCxyLl9yZW5kZXJlcj1lLmNyZWF0ZVJlbmRlcmVyKG4uYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246by5PLk5vbmUsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbXX19KSxyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25leHRBbmltYXRpb25JZC50b1N0cmluZygpO3RoaXMuX25leHRBbmltYXRpb25JZCsrO3ZhciBuPUFycmF5LmlzQXJyYXkodCk/T2JqZWN0KGkuaSkodCk6dDtyZXR1cm4gYyh0aGlzLl9yZW5kZXJlcixudWxsLGUsInJlZ2lzdGVyIixbbl0pLG5ldyB1KGUsdGhpcy5fcmVuZGVyZXIpfSxlfShpLmIpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5faWQ9ZSxyLl9yZW5kZXJlcj1uLHJ9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBsKHRoaXMuX2lkLHQsZXx8e30sdGhpcy5fcmVuZGVyZXIpfSxlfShpLmMpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuaWQ9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLl9yZW5kZXJlcj1yLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLnRvdGFsVGltZT0wLHRoaXMuX2NvbW1hbmQoImNyZWF0ZSIsbil9cmV0dXJuIHQucHJvdG90eXBlLl9saXN0ZW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudCwiQEAiK3RoaXMuaWQrIjoiK3QsZSl9LHQucHJvdG90eXBlLl9jb21tYW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO3JldHVybiBjKHRoaXMuX3JlbmRlcmVyLHRoaXMuZWxlbWVudCx0aGlzLmlkLHQsZSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9saXN0ZW4oImRvbmUiLHQpfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2xpc3Rlbigic3RhcnQiLHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fbGlzdGVuKCJkZXN0cm95Iix0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoImluaXQiKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydGVkfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicGxheSIpLHRoaXMuX3N0YXJ0ZWQ9ITB9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicGF1c2UiKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInJlc3RhcnQiKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgiZmluaXNoIil9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJkZXN0cm95Iil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicmVzZXQiKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiAwfSx0fSgpO2Z1bmN0aW9uIGModCxlLG4scixpKXtyZXR1cm4gdC5zZXRQcm9wZXJ0eShlLCJAQCIrbisiOiIrcixpKX12YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuZGVsZWdhdGU9dCx0aGlzLmVuZ2luZT1lLHRoaXMuX3pvbmU9bix0aGlzLl9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsdGhpcy5wcm9taXNlPVByb21pc2UucmVzb2x2ZSgwKSxlLm9uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7ZSYmZS5wYXJlbnROb2RlKHQpJiZlLnJlbW92ZUNoaWxkKHQucGFyZW50Tm9kZSx0KX19cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPXRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIodCxlKTtpZighKHQmJmUmJmUuZGF0YSYmZS5kYXRhLmFuaW1hdGlvbikpe3ZhciBpPXRoaXMuX3JlbmRlcmVyQ2FjaGUuZ2V0KHIpO3JldHVybiBpfHwoaT1uZXcgaCgiIixyLHRoaXMuZW5naW5lKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChyLGkpKSxpfXZhciBvPWUuaWQsYT1lLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7cmV0dXJuIHRoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKGEsdCksZS5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBuLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIobyxhLHQsZS5uYW1lLGUpfSksbmV3IGQodGhpcyxhLHIsdGhpcy5lbmdpbmUpfSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX0sdC5wcm90b3R5cGUuX3NjaGVkdWxlQ291bnRUYXNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbigpe3QuX21pY3JvdGFza0lkKyt9KX0sdC5wcm90b3R5cGUuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzO3Q+PTAmJnQ8dGhpcy5fbWljcm90YXNrSWQ/dGhpcy5fem9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gZShuKX0pOigwPT10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIubGVuZ3RoJiZQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbihmdW5jdGlvbigpe2kuX3pvbmUucnVuKGZ1bmN0aW9uKCl7aS5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHIuYykodCwyKTsoMCxlWzBdKShlWzFdKX0pLGkuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXX0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLnB1c2goW2Usbl0pKX0sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Ll9zY2hlZHVsZUNvdW50VGFzaygpLHQuZW5naW5lLmZsdXNoKHQuX21pY3JvdGFza0lkKX0pLHRoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfSx0fSgpLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPW4sdGhpcy5kZXN0cm95Tm9kZT10aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBlLmRlc3Ryb3lOb2RlKHQpfTpudWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRhdGEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhpcy5kZWxlZ2F0ZS5kZXN0cm95KCl9LHQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSl9LHQucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KHQpfSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCwhMSl9LHQucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUodCxlLG4pLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LCEwKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLGUsdGhpcy5kZWxlZ2F0ZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9LHQucHJvdG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpfSx0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4scil7dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLG4pfSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4peyJAIj09ZS5jaGFyQXQoMCkmJiJALmRpc2FibGVkIj09ZT90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsISFuKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUuZGlzYWJsZUFuaW1hdGlvbnM9ZnVuY3Rpb24odCxlKXt0aGlzLmVuZ2luZS5kaXNhYmxlQW5pbWF0aW9ucyh0LGUpfSx0fSgpLGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxuLHIsaSl8fHRoaXM7cmV0dXJuIG8uZmFjdG9yeT1lLG8ubmFtZXNwYWNlSWQ9bixvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXsiQCI9PWUuY2hhckF0KDApPyIuIj09ZS5jaGFyQXQoMSkmJiJALmRpc2FibGVkIj09ZT90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsbj12b2lkIDA9PT1ufHwhIW4pOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCx0LGUuc3Vic3RyKDEpLG4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSxlLnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG8sYSxzPXRoaXM7aWYoIkAiPT1lLmNoYXJBdCgwKSl7dmFyIHU9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIHR9fSh0KSxsPWUuc3Vic3RyKDEpLGM9IiI7cmV0dXJuIkAiIT1sLmNoYXJBdCgwKSYmKGw9KGk9T2JqZWN0KHIuYykoKG89bCxhPW8uaW5kZXhPZigiLiIpLFtvLnN1YnN0cmluZygwLGEpLG8uc3Vic3RyKGErMSldKSwyKSlbMF0sYz1pWzFdKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCx1LGwsYyxmdW5jdGlvbih0KXtzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKHQuX2RhdGF8fC0xLG4sdCl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSxlfShoKSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3JldHVybiB0LmNhbGwodGhpcyxlLmJvZHksbixyKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlfShhLmIpO2Z1bmN0aW9uIG0oKXtyZXR1cm4gT2JqZWN0KGEuaCkoKT9uZXcgYS5mOm5ldyBhLmR9ZnVuY3Rpb24geSgpe3JldHVybiBuZXcgYS5nfWZ1bmN0aW9uIGcodCxlLG4pe3JldHVybiBuZXcgZih0LGUsbil9dmFyIHY9bmV3IG8ubygiQW5pbWF0aW9uTW9kdWxlVHlwZSIpLGI9ZnVuY3Rpb24oKXt9fSx4TXlFOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIiksbz1uKCIrdW1LIiksYT1uKCIyQmRqIik7ZnVuY3Rpb24gcyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLmxpZnQobmV3IHUodCxlLG4pKX19dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5leHRPck9ic2VydmVyPXQsdGhpcy5lcnJvcj1lLHRoaXMuY29tcGxldGU9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgbCh0LHRoaXMubmV4dE9yT2JzZXJ2ZXIsdGhpcy5lcnJvcix0aGlzLmNvbXBsZXRlKSl9LHR9KCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBzPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBzLl90YXBOZXh0PW8uYSxzLl90YXBFcnJvcj1vLmEscy5fdGFwQ29tcGxldGU9by5hLHMuX3RhcEVycm9yPXJ8fG8uYSxzLl90YXBDb21wbGV0ZT1pfHxvLmEsT2JqZWN0KGEuYSkobik/KHMuX2NvbnRleHQ9cyxzLl90YXBOZXh0PW4pOm4mJihzLl9jb250ZXh0PW4scy5fdGFwTmV4dD1uLm5leHR8fG8uYSxzLl90YXBFcnJvcj1uLmVycm9yfHxvLmEscy5fdGFwQ29tcGxldGU9bi5jb21wbGV0ZXx8by5hKSxzfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwTmV4dC5jYWxsKHRoaXMuX2NvbnRleHQsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwRXJyb3IuY2FsbCh0aGlzLl9jb250ZXh0LHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dHJ5e3RoaXMuX3RhcENvbXBsZXRlLmNhbGwodGhpcy5fY29udGV4dCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1yZXR1cm4gdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShpLmEpfSx4VGxhOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSJ9LHkzQnk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigiK3VtSyIpO2Z1bmN0aW9uIGkoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIG8odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdD8xPT09dC5sZW5ndGg/dFswXTpmdW5jdGlvbihlKXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSh0KX0sZSl9OnIuYX19LHpVbmI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLnIoZSk7dmFyIHIsaT1uKCJDY25HIiksbz1uKCJBeXRSIiksYT1uKCJJcDBSIikscz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3RoaXMucGxhdGZvcm1JZD10LHRoaXMuYXBwSWQ9ZTt2YXIgbj1PYmplY3QoYS5xKSh0KT8iaW4gdGhlIGJyb3dzZXIiOiJvbiB0aGUgc2VydmVyIjtjb25zb2xlLmxvZygiUnVubmluZyAiK24rIiB3aXRoIGFwcElkPSIrZSl9fSgpLHU9bigiZFdaZyIpLGw9bigibXJTRyIpLGM9bigibmtZNyIpLGY9bigiaXNieSIpLGg9bigiTUdCUyIpLGQ9bigiem90bSIpLHA9bigiSVVUYiIpLG09e30seT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yZXN1bHRTZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBnKHQsdGhpcy5yZXN1bHRTZWxlY3RvcikpfSx0fSgpLGc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnJlc3VsdFNlbGVjdG9yPW4sci5hY3RpdmU9MCxyLnZhbHVlcz1bXSxyLm9ic2VydmFibGVzPVtdLHJ9cmV0dXJuIGwuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMudmFsdWVzLnB1c2gobSksdGhpcy5vYnNlcnZhYmxlcy5wdXNoKHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9ic2VydmFibGVzLGU9dC5sZW5ndGg7aWYoMD09PWUpdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO2Vsc2V7dGhpcy5hY3RpdmU9ZSx0aGlzLnRvUmVzcG9uZD1lO2Zvcih2YXIgbj0wO248ZTtuKyspe3ZhciByPXRbbl07dGhpcy5hZGQoT2JqZWN0KGQuYSkodGhpcyxyLHIsbikpfX19LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpezA9PSh0aGlzLmFjdGl2ZS09MSkmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXRoaXMudmFsdWVzLGE9dGhpcy50b1Jlc3BvbmQ/b1tuXT09PW0/LS10aGlzLnRvUmVzcG9uZDp0aGlzLnRvUmVzcG9uZDowO29bbl09ZSwwPT09YSYmKHRoaXMucmVzdWx0U2VsZWN0b3I/dGhpcy5fdHJ5UmVzdWx0U2VsZWN0b3Iobyk6dGhpcy5kZXN0aW5hdGlvbi5uZXh0KG8uc2xpY2UoKSkpfSxlLnByb3RvdHlwZS5fdHJ5UmVzdWx0U2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5yZXN1bHRTZWxlY3Rvci5hcHBseSh0aGlzLHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlfShoLmEpLHY9bigiSzlJYSIpLGI9bigiNmJsRiIpLF89bigiMkJkaiIpLHc9bigiNjdZLyIpLHg9bigibnkyNCIpLE89bigicDBTaiIpLEM9bigibjZnRyIpLFM9bmV3IFNldCxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBsYXRmb3JtPXQsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLnBsYXRmb3JtLmlzQnJvd3NlciYmd2luZG93Lm1hdGNoTWVkaWE/d2luZG93Lm1hdGNoTWVkaWEuYmluZCh3aW5kb3cpOmt9cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoTWVkaWE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGxhdGZvcm0uV0VCS0lUJiZmdW5jdGlvbih0KXtpZighUy5oYXModCkpdHJ5e3J8fCgocj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocikpLHIuc2hlZXQmJihyLnNoZWV0Lmluc2VydFJ1bGUoIkBtZWRpYSAiK3QrIiB7LmZ4LXF1ZXJ5LXRlc3R7IH19IiwwKSxTLmFkZCh0KSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KHQpLHRoaXMuX21hdGNoTWVkaWEodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKHUuYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBrKHQpe3JldHVybnttYXRjaGVzOiJhbGwiPT09dHx8IiI9PT10LG1lZGlhOnQsYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7fX19dmFyIFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5tZWRpYU1hdGNoZXI9dCx0aGlzLnpvbmU9ZSx0aGlzLl9xdWVyaWVzPW5ldyBNYXAsdGhpcy5fZGVzdHJveVN1YmplY3Q9bmV3IHYuYX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuaXNNYXRjaGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIEkoT2JqZWN0KEMuYSkodCkpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkubXFsLm1hdGNoZXN9KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1udWxsLHI9bnVsbDtyZXR1cm4gT2JqZWN0KGMuYSkodFt0Lmxlbmd0aC0xXSkmJihyPXQucG9wKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSwxPT09dC5sZW5ndGgmJk9iamVjdChmLmEpKHRbMF0pJiYodD10WzBdKSxPYmplY3QocC5hKSh0LHIpLmxpZnQobmV3IHkobikpfShJKE9iamVjdChDLmEpKHQpKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkub2JzZXJ2YWJsZX0pKS5waXBlKE9iamVjdCh3LmEpKGZ1bmN0aW9uKHQpe3JldHVybnttYXRjaGVzOnQuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5tYXRjaGVzfSl9fSkpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJRdWVyeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX3F1ZXJpZXMuaGFzKHQpKXJldHVybiB0aGlzLl9xdWVyaWVzLmdldCh0KTt2YXIgbj10aGlzLm1lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKHQpLHI9e29ic2VydmFibGU6ZnVuY3Rpb24gdChlLG4scil7cmV0dXJuIHI/dChlLG4pLnBpcGUoT2JqZWN0KHcuYSkoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChmLmEpKHQpP3IuYXBwbHkodm9pZCAwLHQpOnIodCl9KSk6bmV3IGIuYShmdW5jdGlvbih0KXt2YXIgcixpPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiB0Lm5leHQoMT09PWUubGVuZ3RoP2VbMF06ZSl9O3RyeXtyPWUoaSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5lcnJvcihlKX1pZihPYmplY3QoXy5hKShuKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbihpLHIpfX0pfShmdW5jdGlvbih0KXtuLmFkZExpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSxmdW5jdGlvbih0KXtuLnJlbW92ZUxpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSkucGlwZShPYmplY3QoeC5hKSh0aGlzLl9kZXN0cm95U3ViamVjdCksT2JqZWN0KE8uYSkobiksT2JqZWN0KHcuYSkoZnVuY3Rpb24odCl7cmV0dXJue21hdGNoZXM6dC5tYXRjaGVzfX0pKSxtcWw6bn07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KHQscikscn0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVikoRSksT2JqZWN0KGkuVikoaS54KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIEkodCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KCIsIil9KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoZSl9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSl9dmFyIEEsaixQPXtYU21hbGw6IihtYXgtd2lkdGg6IDU5OXB4KSIsU21hbGw6IihtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogOTU5cHgpIixNZWRpdW06IihtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSIsTGFyZ2U6IihtaW4td2lkdGg6IDEyODBweCkgYW5kIChtYXgtd2lkdGg6IDE5MTlweCkiLFhMYXJnZToiKG1pbi13aWR0aDogMTkyMHB4KSIsSGFuZHNldDoiKG1heC13aWR0aDogNTk5cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSwgKG1heC13aWR0aDogOTU5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFRhYmxldDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsV2ViOiIobWluLXdpZHRoOiA4NDBweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWluLXdpZHRoOiAxMjgwcHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLEhhbmRzZXRQb3J0cmFpdDoiKG1heC13aWR0aDogNTk5cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIsVGFibGV0UG9ydHJhaXQ6IihtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogODM5cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIsV2ViUG9ydHJhaXQ6IihtaW4td2lkdGg6IDg0MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiLEhhbmRzZXRMYW5kc2NhcGU6IihtYXgtd2lkdGg6IDk1OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixUYWJsZXRMYW5kc2NhcGU6IihtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixXZWJMYW5kc2NhcGU6IihtaW4td2lkdGg6IDEyODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSJ9LE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuYnJlYWtwb2ludE9ic2VydmVyPXQsdGhpcy5yb3V0ZXI9ZSx0aGlzLmNodW5rTG9hZGVyPW4sdGhpcy5zaG93U3VibWVudT0hMSx0aGlzLm9wZW5lZFNpZGVOYXY9ITAsdGhpcy5pc0hhbmRzZXQkPXRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoUC5IYW5kc2V0KS5waXBlKE9iamVjdCh3LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hdGNoZXN9KSksdGhpcy5yb3V0ZXJMaW5rQ2h1bmtQcm9jZXNzaW5nPWZ1bmN0aW9uKHQpe3Iucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZ1VuYm91bmQodCxyKX19cmV0dXJuIHQucHJvdG90eXBlLnJvdXRlckxpbmtDaHVua1Byb2Nlc3NpbmdVbmJvdW5kPWZ1bmN0aW9uKHQsZSl7ZS5jaHVua0xvYWRlci5sb2FkUGFnZUNodW5rKHQsZnVuY3Rpb24oKXtlLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHQpfSl9LHQucHJvdG90eXBlLm9wZW5TaWRlTmF2PWZ1bmN0aW9uKCl7dGhpcy5vcGVuZWRTaWRlTmF2PSEwIT09dGhpcy5vcGVuZWRTaWRlTmF2fSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sdH0oKSxOPW4oInBNblMiKSxSPW4oImx6bGoiKSxEPW4oIkZWU3kiKSxMPW4oImdJM0IiKSxGPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfSxWPSgxPT09KEE9RikubGVuZ3RoJiYoaj1BLEE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gRihqKHQpLGUpfSkse2xlZnQ6ZnVuY3Rpb24odCxlLG4scil7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PXImJihyPXQubGVuZ3RoKTtuPHI7KXt2YXIgaT1uK3I+Pj4xO0EodFtpXSxlKTwwP249aSsxOnI9aX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24odCxlLG4scil7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PXImJihyPXQubGVuZ3RoKTtuPHI7KXt2YXIgaT1uK3I+Pj4xO0EodFtpXSxlKT4wP3I9aTpuPWkrMX1yZXR1cm4gbn19KS5yaWdodCxVPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9LHo9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKWZvcihyPWk9bjsrK2E8bzspbnVsbCE9KG49dFthXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZuPj1uKWZvcihyPWk9bjsrK2E8bzspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKTtyZXR1cm5bcixpXX0sQj1BcnJheS5wcm90b3R5cGUuc2xpY2UsSD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LFc9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHE9ZnVuY3Rpb24odCxlLG4pe3Q9K3QsZT0rZSxuPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K247Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkoaSk7KytyPGk7KW9bcl09dCtyKm47cmV0dXJuIG99LFk9TWF0aC5zcXJ0KDUwKSxHPU1hdGguc3FydCgxMCksUT1NYXRoLnNxcnQoMiksSz1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvLGEscz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChyPWU8dCkmJihpPXQsdD1lLGU9aSksMD09PShhPVoodCxlLG4pKXx8IWlzRmluaXRlKGEpKXJldHVybltdO2lmKGE+MClmb3IodD1NYXRoLmNlaWwodC9hKSxlPU1hdGguZmxvb3IoZS9hKSxvPW5ldyBBcnJheShpPU1hdGguY2VpbChlLXQrMSkpOysrczxpOylvW3NdPSh0K3MpKmE7ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqYSksZT1NYXRoLmNlaWwoZSphKSxvPW5ldyBBcnJheShpPU1hdGguY2VpbCh0LWUrMSkpOysrczxpOylvW3NdPSh0LXMpL2E7cmV0dXJuIHImJm8ucmV2ZXJzZSgpLG99O2Z1bmN0aW9uIFoodCxlLG4pe3ZhciByPShlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCksbz1yL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1ZPzEwOm8+PUc/NTpvPj1RPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49WT8xMDpvPj1HPzU6bz49UT8yOjEpfWZ1bmN0aW9uIFgodCxlLG4pe3ZhciByPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxuKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5MTjEwKSksbz1yL2k7cmV0dXJuIG8+PVk/aSo9MTA6bz49Rz9pKj01Om8+PVEmJihpKj0yKSxlPHQ/LWk6aX12YXIgJD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX07QXJyYXk7dmFyIEo9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gdHQoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7clt0XT1bXX1yZXR1cm4gbmV3IGV0KHIpfWZ1bmN0aW9uIGV0KHQpe3RoaXMuXz10fWZ1bmN0aW9uIG50KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gcnQodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPUosdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fWV0LnByb3RvdHlwZT10dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmV0LG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXRoaXMuXyxvPShyPWksKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtpZihuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHQmJiFyLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTplfX0pKSxhPS0xLHM9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8czspaWYobj0odD1vW2FdKS50eXBlKWlbbl09cnQoaVtuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIGkpaVtuXT1ydChpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxzOylpZigobj0odD1vW2FdKS50eXBlKSYmKG49bnQoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgZXQodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksbz0wO288bjsrK28paVtvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihvPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDtvPG47KytvKXJbb10udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBpdD10dCxvdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsYXQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOm90LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn0sc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSksYXQuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOmF0W2VdLGxvY2FsOnR9OnR9LHV0PWZ1bmN0aW9uKHQpe3ZhciBlPXN0KHQpO3JldHVybihlLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PW90JiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1vdD9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19KShlKX07ZnVuY3Rpb24gbHQoKXt9dmFyIGN0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P2x0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19O2Z1bmN0aW9uIGZ0KCl7cmV0dXJuW119dmFyIGh0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P2Z0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19LGR0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgcHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2lmKCFwdC5tYXRjaGVzKXt2YXIgbXQ9cHQud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxwdC5tc01hdGNoZXNTZWxlY3Rvcnx8cHQubW96TWF0Y2hlc1NlbGVjdG9yfHxwdC5vTWF0Y2hlc1NlbGVjdG9yO2R0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBtdC5jYWxsKHRoaXMsdCl9fX19dmFyIHl0PWR0LGd0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfTtmdW5jdGlvbiB2dCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX12dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnZ0LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciBidD0iJCI7ZnVuY3Rpb24gX3QodCxlLG4scixpLG8pe2Zvcih2YXIgYSxzPTAsdT1lLmxlbmd0aCxsPW8ubGVuZ3RoO3M8bDsrK3MpKGE9ZVtzXSk/KGEuX19kYXRhX189b1tzXSxyW3NdPWEpOm5bc109bmV3IHZ0KHQsb1tzXSk7Zm9yKDtzPHU7KytzKShhPWVbc10pJiYoaVtzXT1hKX1mdW5jdGlvbiB3dCh0LGUsbixyLGksbyxhKXt2YXIgcyx1LGwsYz17fSxmPWUubGVuZ3RoLGg9by5sZW5ndGgsZD1uZXcgQXJyYXkoZik7Zm9yKHM9MDtzPGY7KytzKSh1PWVbc10pJiYoZFtzXT1sPWJ0K2EuY2FsbCh1LHUuX19kYXRhX18scyxlKSxsIGluIGM/aVtzXT11OmNbbF09dSk7Zm9yKHM9MDtzPGg7KytzKSh1PWNbbD1idCthLmNhbGwodCxvW3NdLHMsbyldKT8ocltzXT11LHUuX19kYXRhX189b1tzXSxjW2xdPW51bGwpOm5bc109bmV3IHZ0KHQsb1tzXSk7Zm9yKHM9MDtzPGY7KytzKSh1PWVbc10pJiZjW2Rbc11dPT09dSYmKGlbc109dSl9ZnVuY3Rpb24geHQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIE90PWZ1bmN0aW9uKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld307ZnVuY3Rpb24gQ3QodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxPdCh0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiBTdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gRXQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcga3QodCl9ZnVuY3Rpb24ga3QodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPVN0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gVHQodCxlKXtmb3IodmFyIG49RXQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiBJdCh0LGUpe2Zvcih2YXIgbj1FdCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uIEF0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBqdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIFB0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIE10KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gTnQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBSdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIER0KCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITEpLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIEx0KCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfWt0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIEZ0PXt9LFZ0PW51bGw7ZnVuY3Rpb24gVXQodCxlLG4pe3JldHVybiB0PXp0KHQsZSxuKSxmdW5jdGlvbihlKXt2YXIgbj1lLnJlbGF0ZWRUYXJnZXQ7biYmKG49PT10aGlzfHw4Jm4uY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHx0LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24genQodCxlLG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1WdDtWdD1yO3RyeXt0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUsbil9ZmluYWxseXtWdD1pfX19ZnVuY3Rpb24gQnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgbixyPTAsaT0tMSxvPWUubGVuZ3RoO3I8bzsrK3Ipbj1lW3JdLHQudHlwZSYmbi50eXBlIT09dC50eXBlfHxuLm5hbWUhPT10Lm5hbWU/ZVsrK2ldPW46dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4udHlwZSxuLmxpc3RlbmVyLG4uY2FwdHVyZSk7KytpP2UubGVuZ3RoPWk6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEh0KHQsZSxuKXt2YXIgcj1GdC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP1V0Onp0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHMsdT10aGlzLl9fb24sbD1yKGUsbyxhKTtpZih1KWZvcih2YXIgYz0wLGY9dS5sZW5ndGg7YzxmOysrYylpZigocz11W2NdKS50eXBlPT09dC50eXBlJiZzLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcixzLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcj1sLHMuY2FwdHVyZT1uKSx2b2lkKHMudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxsLG4pLHM9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6bCxjYXB0dXJlOm59LHU/dS5wdXNoKHMpOnRoaXMuX19vbj1bc119fWZ1bmN0aW9uIFd0KHQsZSxuKXt2YXIgcj1PdCh0KSxpPXIuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGk/aT1uZXcgaShlLG4pOihpPXIuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oaS5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxpLmRldGFpbD1uLmRldGFpbCk6aS5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChpKX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChGdD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHF0PVtudWxsXTtmdW5jdGlvbiBZdCh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBHdCgpe3JldHVybiBuZXcgWXQoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxxdCl9WXQucHJvdG90eXBlPUd0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6WXQsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1jdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgbyxhLHM9ZVtpXSx1PXMubGVuZ3RoLGw9cltpXT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpKG89c1tjXSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18sYyxzKSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksbFtjXT1hKTtyZXR1cm4gbmV3IFl0KHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aHQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sbz0wO288bjsrK28pZm9yKHZhciBhLHM9ZVtvXSx1PXMubGVuZ3RoLGw9MDtsPHU7KytsKShhPXNbbF0pJiYoci5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sbCxzKSksaS5wdXNoKGEpKTtyZXR1cm4gbmV3IFl0KHIsaSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9eXQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIG8sYT1lW2ldLHM9YS5sZW5ndGgsdT1yW2ldPVtdLGw9MDtsPHM7KytsKShvPWFbbF0pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGwsYSkmJnUucHVzaChvKTtyZXR1cm4gbmV3IFl0KHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3BbKytjXT10fSkscDt2YXIgbixyPWU/d3Q6X3QsaT10aGlzLl9wYXJlbnRzLG89dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYobj10LHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbn0pO2Zvcih2YXIgYT1vLmxlbmd0aCxzPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSxjPTA7YzxhOysrYyl7dmFyIGY9aVtjXSxoPW9bY10sZD1oLmxlbmd0aCxwPXQuY2FsbChmLGYmJmYuX19kYXRhX18sYyxpKSxtPXAubGVuZ3RoLHk9dVtjXT1uZXcgQXJyYXkobSksZz1zW2NdPW5ldyBBcnJheShtKTtyKGYsaCx5LGcsbFtjXT1uZXcgQXJyYXkoZCkscCxlKTtmb3IodmFyIHYsYixfPTAsdz0wO188bTsrK18paWYodj15W19dKXtmb3IoXz49dyYmKHc9XysxKTshKGI9Z1t3XSkmJisrdzxtOyk7di5fbmV4dD1ifHxudWxsfX1yZXR1cm4ocz1uZXcgWXQocyxpKSkuX2VudGVyPXUscy5fZXhpdD1sLHN9LGVudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZdCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChndCksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFl0KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoZ3QpLHRoaXMuX3BhcmVudHMpfSxtZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1NYXRoLm1pbihyLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShyKSxhPTA7YTxpOysrYSlmb3IodmFyIHMsdT1lW2FdLGw9blthXSxjPXUubGVuZ3RoLGY9b1thXT1uZXcgQXJyYXkoYyksaD0wO2g8YzsrK2gpKHM9dVtoXXx8bFtoXSkmJihmW2hdPXMpO2Zvcig7YTxyOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBZdChvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLG89aS5sZW5ndGgtMSxhPWlbb107LS1vPj0wOykocj1pW29dKSYmKGEmJmEhPT1yLm5leHRTaWJsaW5nJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsYSksYT1yKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PXh0KTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjsrK28pe2Zvcih2YXIgYSxzPW5bb10sdT1zLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHUpLGM9MDtjPHU7KytjKShhPXNbY10pJiYobFtjXT1hKTtsLnNvcnQoZSl9cmV0dXJuIG5ldyBZdChpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxlPS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0WysrZV09dGhpc30pLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLG89ci5sZW5ndGg7aTxvOysraSl7dmFyIGE9cltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Kyt0fSksdH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAscj1lLmxlbmd0aDtuPHI7KytuKWZvcih2YXIgaSxvPWVbbl0sYT0wLHM9by5sZW5ndGg7YTxzOysrYSkoaT1vW2FdKSYmdC5jYWxsKGksaS5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49c3QodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fTpuLmxvY2FsP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fSkobixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQscixuKX19OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19KSh0LGUsbnVsbD09bj8iIjpuKSk6Q3QodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fToiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fSkodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1TdCh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcj1FdCh0aGlzLm5vZGUoKSksaT0tMSxvPW4ubGVuZ3RoOysraTxvOylpZighci5jb250YWlucyhuW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9UdDpJdCkodGhpcyx0KX19OmU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7VHQodGhpcyx0KX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe0l0KHRoaXMsdCl9fSkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/QXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0pKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9qdDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goUHQpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goTXQpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1dCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1dCh0KSxyPW51bGw9PWU/TnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpjdChlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goUnQpfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9MdDpEdCl9LGRhdHVtOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbz0odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pLGE9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3Iocz1lP0h0OkJ0LG51bGw9PW4mJihuPSExKSxyPTA7cjxhOysrcil0aGlzLmVhY2gocyhvW3JdLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIHUsbD0wLGM9cy5sZW5ndGg7bDxjOysrbClmb3Iocj0wLHU9c1tsXTtyPGE7KytyKWlmKChpPW9bcl0pLnR5cGU9PT11LnR5cGUmJmkubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBXdCh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gV3QodGhpcyx0LGUpfX0pKHQsZSkpfX07dmFyIFF0PUd0LEt0PWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgWXQoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBZdChbW3RdXSxxdCl9LFp0PTA7ZnVuY3Rpb24gWHQoKXt0aGlzLl89IkAiKygrK1p0KS50b1N0cmluZygzNil9WHQucHJvdG90eXBlPShmdW5jdGlvbigpe3JldHVybiBuZXcgWHR9KS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlh0LGdldDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fOyEoZSBpbiB0KTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0W2VdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFt0aGlzLl9dPWV9LHJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fIGluIHQmJmRlbGV0ZSB0W3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciAkdD1mdW5jdGlvbih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9O2Z1bmN0aW9uIEp0KHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHRlKCl7fXZhciBlZT0iXFxzKihbKy1dP1xcZCspXFxzKiIsbmU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIscmU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLGllPS9eIyhbMC05YS1mXXszfSkkLyxvZT0vXiMoWzAtOWEtZl17Nn0pJC8sYWU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2VlLGVlLGVlXSsiXFwpJCIpLHNlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tyZSxyZSxyZV0rIlxcKSQiKSx1ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2VlLGVlLGVlLG5lXSsiXFwpJCIpLGxlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbcmUscmUscmUsbmVdKyJcXCkkIiksY2U9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW25lLHJlLHJlXSsiXFwpJCIpLGZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbbmUscmUscmUsbmVdKyJcXCkkIiksaGU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gZGUodCl7dmFyIGU7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPWllLmV4ZWModCkpP25ldyB2ZSgoZT1wYXJzZUludChlWzFdLDE2KSk+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTooZT1vZS5leGVjKHQpKT9wZShwYXJzZUludChlWzFdLDE2KSk6KGU9YWUuZXhlYyh0KSk/bmV3IHZlKGVbMV0sZVsyXSxlWzNdLDEpOihlPXNlLmV4ZWModCkpP25ldyB2ZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT11ZS5leGVjKHQpKT9tZShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1sZS5leGVjKHQpKT9tZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1jZS5leGVjKHQpKT9fZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPWZlLmV4ZWModCkpP19lKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6aGUuaGFzT3duUHJvcGVydHkodCk/cGUoaGVbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyB2ZShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHBlKHQpe3JldHVybiBuZXcgdmUodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIG1lKHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgdmUodCxlLG4scil9ZnVuY3Rpb24geWUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0ZXx8KHQ9ZGUodCkpLHQ/bmV3IHZlKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyB2ZX1mdW5jdGlvbiBnZSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eWUodCk6bmV3IHZlKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiB2ZSh0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gYmUodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBfZSh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IHhlKHQsZSxuLHIpfWZ1bmN0aW9uIHdlKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgeGUpcmV0dXJuIG5ldyB4ZSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiB0ZXx8KHQ9ZGUodCkpLCF0KXJldHVybiBuZXcgeGU7aWYodCBpbnN0YW5jZW9mIHhlKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxyPXQuYi8yNTUsaT1NYXRoLm1pbihlLG4sciksbz1NYXRoLm1heChlLG4sciksYT1OYU4scz1vLWksdT0obytpKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLXIpL3MrNioobjxyKTpuPT09bz8oci1lKS9zKzI6KGUtbikvcys0LHMvPXU8LjU/bytpOjItby1pLGEqPTYwKTpzPXU+MCYmdTwxPzA6YSxuZXcgeGUoYSxzLHUsdC5vcGFjaXR5KX0odCk6bmV3IHhlKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiB4ZSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gT2UodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfSR0KHRlLGRlLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmhleCgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLCR0KHZlLGdlLEp0KHRlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgdmUodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IHZlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiAwPD10aGlzLnImJnRoaXMucjw9MjU1JiYwPD10aGlzLmcmJnRoaXMuZzw9MjU1JiYwPD10aGlzLmImJnRoaXMuYjw9MjU1JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuIiMiK2JlKHRoaXMucikrYmUodGhpcy5nKStiZSh0aGlzLmIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKSwkdCh4ZSx3ZSxKdCh0ZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IHhlKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IHhlKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLHI9bisobjwuNT9uOjEtbikqZSxpPTIqbi1yO3JldHVybiBuZXcgdmUoT2UodD49MjQwP3QtMjQwOnQrMTIwLGksciksT2UodCxpLHIpLE9lKHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciBDZT1NYXRoLlBJLzE4MCxTZT0xODAvTWF0aC5QSSxFZT0uOTY0MjIsa2U9MSxUZT0uODI1MjEsSWU9NC8yOSxBZT02LzI5LGplPTMqQWUqQWUsUGU9QWUqQWUqQWU7ZnVuY3Rpb24gTWUodCl7aWYodCBpbnN0YW5jZW9mIE5lKXJldHVybiBuZXcgTmUodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgVWUpe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBOZSh0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKkNlO3JldHVybiBuZXcgTmUodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX10IGluc3RhbmNlb2YgdmV8fCh0PXllKHQpKTt2YXIgbixyLGk9RmUodC5yKSxvPUZlKHQuZyksYT1GZSh0LmIpLHM9UmUoKC4yMjI1MDQ1KmkrLjcxNjg3ODYqbysuMDYwNjE2OSphKS9rZSk7cmV0dXJuIGk9PT1vJiZvPT09YT9uPXI9czoobj1SZSgoLjQzNjA3NDcqaSsuMzg1MDY0OSpvKy4xNDMwODA0KmEpL0VlKSxyPVJlKCguMDEzOTMyMippKy4wOTcxMDQ1Km8rLjcxNDE3MzMqYSkvVGUpKSxuZXcgTmUoMTE2KnMtMTYsNTAwKihuLXMpLDIwMCoocy1yKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIE5lKHQsZSxuLHIpe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBSZSh0KXtyZXR1cm4gdD5QZT9NYXRoLnBvdyh0LDEvMyk6dC9qZStJZX1mdW5jdGlvbiBEZSh0KXtyZXR1cm4gdD5BZT90KnQqdDpqZSoodC1JZSl9ZnVuY3Rpb24gTGUodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBGZSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBWZSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIFVlKXJldHVybiBuZXcgVWUodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgTmV8fCh0PU1lKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgVWUoTmFOLDAsdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpTZTtyZXR1cm4gbmV3IFVlKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfSh0KTpuZXcgVWUodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIFVlKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn0kdChOZSxmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/TWUodCk6bmV3IE5lKHQsZSxuLG51bGw9PXI/MTpyKX0sSnQodGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTmUodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBOZSh0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgdmUoTGUoMy4xMzM4NTYxKihlPUVlKkRlKGUpKS0xLjYxNjg2NjcqKHQ9a2UqRGUodCkpLS40OTA2MTQ2KihuPVRlKkRlKG4pKSksTGUoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpuKSxMZSguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3Km4pLHRoaXMub3BhY2l0eSl9fSkpLCR0KFVlLFZlLEp0KHRlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFVlKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVWUodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gTWUodGhpcykucmdiKCl9fSkpO3ZhciB6ZT0tLjI5MjI3LEJlPS0uOTA2NDksSGU9MS45NzI5NCxXZT1IZSpCZSxxZT0xLjc4Mjc3KkhlLFllPTEuNzgyNzcqemUtIC0uMTQ4NjEqQmU7ZnVuY3Rpb24gR2UodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBRZSlyZXR1cm4gbmV3IFFlKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIHZlfHwodD15ZSh0KSk7dmFyIGU9dC5nLzI1NSxuPXQuYi8yNTUscj0oWWUqbitXZSoodC5yLzI1NSktcWUqZSkvKFllK1dlLXFlKSxpPW4tcixvPShIZSooZS1yKS16ZSppKS9CZSxhPU1hdGguc3FydChvKm8raSppKS8oSGUqciooMS1yKSkscz1hP01hdGguYXRhbjIobyxpKSpTZS0xMjA6TmFOO3JldHVybiBuZXcgUWUoczwwP3MrMzYwOnMsYSxyLHQub3BhY2l0eSl9KHQpOm5ldyBRZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gUWUodCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIEtlKHQsZSxuLHIsaSl7dmFyIG89dCp0LGE9byp0O3JldHVybigoMS0zKnQrMypvLWEpKmUrKDQtNipvKzMqYSkqbisoMSszKnQrMypvLTMqYSkqcithKmkpLzZ9JHQoUWUsR2UsSnQodGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBRZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBRZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqQ2UsZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLHI9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IHZlKDI1NSooZStuKigtLjE0ODYxKnIrMS43ODI3NyppKSksMjU1KihlK24qKHplKnIrQmUqaSkpLDI1NSooZStuKihIZSpyKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIFplPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gWGUodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiAkZSh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9YZSh0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6WmUoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBKZSh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9YZSh0LG4pOlplKGlzTmFOKHQpP2U6dCl9dmFyIHRuPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PSh0PSt0KT9KZTpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOlplKGlzTmFOKGUpP246ZSl9fShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD1nZSh0KSkuciwoZT1nZShlKSkuciksaT1uKHQuZyxlLmcpLG89bih0LmIsZS5iKSxhPUplKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPW8oZSksdC5vcGFjaXR5PWEoZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBlbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPWdlKGVbbl0pLG9bbl09ci5yfHwwLGFbbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBvPXQobyksYT10KGEpLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPW8odCksci5nPWEodCksci5iPXModCkscisiIn19fXZhciBubixybixvbixhbixzbj1lbihmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksaT10W3JdLG89dFtyKzFdO3JldHVybiBLZSgobi1yL2UpKmUscj4wP3Rbci0xXToyKmktbyxpLG8scjxlLTE/dFtyKzJdOjIqby1pKX19KSx1bj0oZW4oZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKTtyZXR1cm4gS2UoKG4tci9lKSplLHRbKHIrZS0xKSVlXSx0W3IlZV0sdFsocisxKSVlXSx0WyhyKzIpJWVdKX19KSxmdW5jdGlvbih0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiB0K2Uqbn19KSxsbj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csY249bmV3IFJlZ0V4cChsbi5zb3VyY2UsImciKSxmbj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvPWxuLmxhc3RJbmRleD1jbi5sYXN0SW5kZXg9MCxhPS0xLHM9W10sdT1bXTtmb3IodCs9IiIsZSs9IiI7KG49bG4uZXhlYyh0KSkmJihyPWNuLmV4ZWMoZSkpOykoaT1yLmluZGV4KT5vJiYoaT1lLnNsaWNlKG8saSksc1thXT9zW2FdKz1pOnNbKythXT1pKSwobj1uWzBdKT09PShyPXJbMF0pP3NbYV0/c1thXSs9cjpzWysrYV09cjooc1srK2FdPW51bGwsdS5wdXNoKHtpOmEseDp1bihuLHIpfSkpLG89Y24ubGFzdEluZGV4O3JldHVybiBvPGUubGVuZ3RoJiYoaT1lLnNsaWNlKG8pLHNbYV0/c1thXSs9aTpzWysrYV09aSkscy5sZW5ndGg8Mj91WzBdP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KHVbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShlKTooZT11Lmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4scj0wO3I8ZTsrK3Ipc1sobj11W3JdKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX0saG49ZnVuY3Rpb24odCxlKXt2YXIgbixyPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1yP1plKGUpOigibnVtYmVyIj09PXI/dW46InN0cmluZyI9PT1yPyhuPWRlKGUpKT8oZT1uLHRuKTpmbjplIGluc3RhbmNlb2YgZGU/dG46ZSBpbnN0YW5jZW9mIERhdGU/ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gbi5zZXRUaW1lKHQrZSpyKSxufX06QXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxpOysrbilvW25dPWhuKHRbbl0sZVtuXSk7Zm9yKDtuPHI7KytuKWFbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKWFbbl09b1tuXSh0KTtyZXR1cm4gYX19OiJmdW5jdGlvbiIhPXR5cGVvZiBlLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nfHxpc05hTihlKT9mdW5jdGlvbih0LGUpe3ZhciBuLHI9e30saT17fTtmb3IobiBpbiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZXx8KGU9e30pLGUpbiBpbiB0P3Jbbl09aG4odFtuXSxlW25dKTppW25dPWVbbl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihuIGluIHIpaVtuXT1yW25dKHQpO3JldHVybiBpfX06dW4pKHQsZSl9LGRuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQodCtlKm4pfX0scG49MTgwL01hdGguUEksbW49e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX0seW49ZnVuY3Rpb24odCxlLG4scixpLG8pe3ZhciBhLHMsdTtyZXR1cm4oYT1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89YSxlLz1hKSwodT10Km4rZSpyKSYmKG4tPXQqdSxyLT1lKnUpLChzPU1hdGguc3FydChuKm4rcipyKSkmJihuLz1zLHIvPXMsdS89cyksdCpyPGUqbiYmKHQ9LXQsZT0tZSx1PS11LGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqcG4sc2tld1g6TWF0aC5hdGFuKHUpKnBuLHNjYWxlWDphLHNjYWxlWTpzfX07ZnVuY3Rpb24gZ24odCxlLG4scil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sdT1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSxmdW5jdGlvbih0LHIsaSxvLGEscyl7aWYodCE9PWl8fHIhPT1vKXt2YXIgdT1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTp1LTQseDp1bih0LGkpfSx7aTp1LTIseDp1bihyLG8pfSl9ZWxzZShpfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrbytuKX0oby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHMsdSksZnVuY3Rpb24odCxlLG4sbyl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTpuLnB1c2goaShuKSsicm90YXRlKCIsbnVsbCxyKS0yLHg6dW4odCxlKX0pKTplJiZuLnB1c2goaShuKSsicm90YXRlKCIrZStyKX0oby5yb3RhdGUsYS5yb3RhdGUscyx1KSxmdW5jdGlvbih0LGUsbixvKXt0IT09ZT9vLnB1c2goe2k6bi5wdXNoKGkobikrInNrZXdYKCIsbnVsbCxyKS0yLHg6dW4odCxlKX0pOmUmJm4ucHVzaChpKG4pKyJza2V3WCgiK2Urcil9KG8uc2tld1gsYS5za2V3WCxzLHUpLGZ1bmN0aW9uKHQsZSxuLHIsbyxhKXtpZih0IT09bnx8ZSE9PXIpe3ZhciBzPW8ucHVzaChpKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6cy00LHg6dW4odCxuKX0se2k6cy0yLHg6dW4oZSxyKX0pfWVsc2UgMT09PW4mJjE9PT1yfHxvLnB1c2goaShvKSsic2NhbGUoIituKyIsIityKyIpIil9KG8uc2NhbGVYLG8uc2NhbGVZLGEuc2NhbGVYLGEuc2NhbGVZLHMsdSksbz1hPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEscj11Lmxlbmd0aDsrK248cjspc1soZT11W25dKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgdm49Z24oZnVuY3Rpb24odCl7cmV0dXJuIm5vbmUiPT09dD9tbjoobm58fChubj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxybj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsb249ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLG5uLnN0eWxlLnRyYW5zZm9ybT10LHQ9b24uZ2V0Q29tcHV0ZWRTdHlsZShybi5hcHBlbmRDaGlsZChubiksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscm4ucmVtb3ZlQ2hpbGQobm4pLHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHluKCt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9LCJweCwgIiwicHgpIiwiZGVnKSIpLGJuPWduKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P21uOihhbnx8KGFuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGFuLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1hbi50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT95bigodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTptbil9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gX24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dCgoZT13ZShlKSkuaCwobj13ZShuKSkuaCksaT1KZShlLnMsbi5zKSxvPUplKGUubCxuLmwpLGE9SmUoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLnM9aSh0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19ZnVuY3Rpb24gd24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dCgoZT1WZShlKSkuaCwobj1WZShuKSkuaCksaT1KZShlLmMsbi5jKSxvPUplKGUubCxuLmwpLGE9SmUoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLmM9aSh0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19ZnVuY3Rpb24geG4odCl7cmV0dXJuIGZ1bmN0aW9uIGUobil7ZnVuY3Rpb24gcihlLHIpe3ZhciBpPXQoKGU9R2UoZSkpLmgsKHI9R2UocikpLmgpLG89SmUoZS5zLHIucyksYT1KZShlLmwsci5sKSxzPUplKGUub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5zPW8odCksZS5sPWEoTWF0aC5wb3codCxuKSksZS5vcGFjaXR5PXModCksZSsiIn19cmV0dXJuIG49K24sci5nYW1tYT1lLHJ9KDEpfU1hdGgsX24oJGUpLF9uKEplKSx3bigkZSksd24oSmUpLHhuKCRlKTt2YXIgT24sQ24sU249eG4oSmUpLEVuPTAsa249MCxUbj0wLEluPTFlMyxBbj0wLGpuPTAsUG49MCxNbj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxObj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBSbigpe3JldHVybiBqbnx8KE5uKERuKSxqbj1Nbi5ub3coKStQbil9ZnVuY3Rpb24gRG4oKXtqbj0wfWZ1bmN0aW9uIExuKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBGbih0LGUsbil7dmFyIHI9bmV3IExuO3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gVm4oKXtqbj0oQW49TW4ubm93KCkpK1BuLEVuPWtuPTA7dHJ5eyFmdW5jdGlvbigpe1JuKCksKytFbjtmb3IodmFyIHQsZT1PbjtlOykodD1qbi1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tRW59KCl9ZmluYWxseXtFbj0wLGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbj1PbixyPTEvMDtuOyluLl9jYWxsPyhyPm4uX3RpbWUmJihyPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6T249ZSk7Q249dCx6bihyKX0oKSxqbj0wfX1mdW5jdGlvbiBVbigpe3ZhciB0PU1uLm5vdygpLGU9dC1BbjtlPkluJiYoUG4tPWUsQW49dCl9ZnVuY3Rpb24gem4odCl7RW58fChrbiYmKGtuPWNsZWFyVGltZW91dChrbikpLHQtam4+MjQ/KHQ8MS8wJiYoa249c2V0VGltZW91dChWbix0LU1uLm5vdygpLVBuKSksVG4mJihUbj1jbGVhckludGVydmFsKFRuKSkpOihUbnx8KEFuPU1uLm5vdygpLFRuPXNldEludGVydmFsKFVuLEluKSksRW49MSxObihWbikpKX1Mbi5wcm90b3R5cGU9Rm4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMbixyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/Um4oKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8Q249PT10aGlzfHwoQ24/Q24uX25leHQ9dGhpczpPbj10aGlzLENuPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sem4oKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsem4oKSl9fTt2YXIgQm49ZnVuY3Rpb24odCxlLG4pe3ZhciByPW5ldyBMbjtyZXR1cm4gci5yZXN0YXJ0KGZ1bmN0aW9uKG4pe3Iuc3RvcCgpLHQobitlKX0sZT1udWxsPT1lPzA6K2Usbikscn0sSG49aXQoInN0YXJ0IiwiZW5kIiwiaW50ZXJydXB0IiksV249W10scW49MCxZbj0xLEduPTIsUW49MyxLbj00LFpuPTUsWG49Niwkbj1mdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9dC5fX3RyYW5zaXRpb247aWYoYSl7aWYobiBpbiBhKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBvKHUpe3ZhciBsLGMsZixoO2lmKG4uc3RhdGUhPT1ZbilyZXR1cm4gcygpO2ZvcihsIGluIGkpaWYoKGg9aVtsXSkubmFtZT09PW4ubmFtZSl7aWYoaC5zdGF0ZT09PVFuKXJldHVybiBCbihvKTtoLnN0YXRlPT09S24/KGguc3RhdGU9WG4saC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW2xdKTorbDxlJiYoaC5zdGF0ZT1YbixoLnRpbWVyLnN0b3AoKSxkZWxldGUgaVtsXSl9aWYoQm4oZnVuY3Rpb24oKXtuLnN0YXRlPT09UW4mJihuLnN0YXRlPUtuLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxhKHUpKX0pLG4uc3RhdGU9R24sbi5vbi5jYWxsKCJzdGFydCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksbi5zdGF0ZT09PUduKXtmb3Iobi5zdGF0ZT1RbixyPW5ldyBBcnJheShmPW4udHdlZW4ubGVuZ3RoKSxsPTAsYz0tMTtsPGY7KytsKShoPW4udHdlZW5bbF0udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihyWysrY109aCk7ci5sZW5ndGg9YysxfX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgaT1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT1abiwxKSxvPS0xLGE9ci5sZW5ndGg7KytvPGE7KXJbb10uY2FsbChudWxsLGkpO24uc3RhdGU9PT1abiYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT1YbixuLnRpbWVyLnN0b3AoKSxkZWxldGUgaVtlXSxpKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259aVtlXT1uLG4udGltZXI9Rm4oZnVuY3Rpb24odCl7bi5zdGF0ZT1ZbixuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbi5kZWxheTw9dCYmbyh0LW4uZGVsYXkpfSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpIbix0d2VlbjpXbix0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpxbn0pfTtmdW5jdGlvbiBKbih0LGUpe3ZhciBuPWVyKHQsZSk7aWYobi5zdGF0ZT5xbil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIHRyKHQsZSl7dmFyIG49ZXIodCxlKTtpZihuLnN0YXRlPkduKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc3RhcnRlZCIpO3JldHVybiBufWZ1bmN0aW9uIGVyKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59ZnVuY3Rpb24gbnIodCxlLG4pe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD10cih0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24odCl7cmV0dXJuIGVyKHQscikudmFsdWVbZV19fXZhciBycj1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/dW46ZSBpbnN0YW5jZW9mIGRlP3RuOihuPWRlKGUpKT8oZT1uLHRuKTpmbikodCxlKX0saXI9UXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLG9yPTA7ZnVuY3Rpb24gYXIodCxlLG4scil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1yfWZ1bmN0aW9uIHNyKCl7cmV0dXJuKytvcn12YXIgdXI9UXQucHJvdG90eXBlO2Z1bmN0aW9uIGxyKHQpe3JldHVybit0fWFyLnByb3RvdHlwZT0oZnVuY3Rpb24odCl7cmV0dXJuIFF0KCkudHJhbnNpdGlvbih0KX0pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YXIsc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Y3QodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHMsdSxsPXJbYV0sYz1sLmxlbmd0aCxmPW9bYV09bmV3IEFycmF5KGMpLGg9MDtoPGM7KytoKShzPWxbaF0pJiYodT10LmNhbGwocyxzLl9fZGF0YV9fLGgsbCkpJiYoIl9fZGF0YV9fImluIHMmJih1Ll9fZGF0YV9fPXMuX19kYXRhX18pLGZbaF09dSwkbihmW2hdLGUsbixoLGYsZXIocyxuKSkpO3JldHVybiBuZXcgYXIobyx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWh0KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1bXSxhPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgdSxsPXJbc10sYz1sLmxlbmd0aCxmPTA7ZjxjOysrZilpZih1PWxbZl0pe2Zvcih2YXIgaCxkPXQuY2FsbCh1LHUuX19kYXRhX18sZixsKSxwPWVyKHUsbiksbT0wLHk9ZC5sZW5ndGg7bTx5OysrbSkoaD1kW21dKSYmJG4oaCxlLG4sbSxkLHApO28ucHVzaChkKSxhLnB1c2godSl9cmV0dXJuIG5ldyBhcihvLGEsZSxuKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD15dCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgbyxhPWVbaV0scz1hLmxlbmd0aCx1PXJbaV09W10sbD0wO2w8czsrK2wpKG89YVtsXSkmJnQuY2FsbChvLG8uX19kYXRhX18sbCxhKSYmdS5wdXNoKG8pO3JldHVybiBuZXcgYXIocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1NYXRoLm1pbihyLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShyKSxhPTA7YTxpOysrYSlmb3IodmFyIHMsdT1lW2FdLGw9blthXSxjPXUubGVuZ3RoLGY9b1thXT1uZXcgQXJyYXkoYyksaD0wO2g8YzsrK2gpKHM9dVtoXXx8bFtoXSkmJihmW2hdPXMpO2Zvcig7YTxyOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBhcihvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgaXIodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPXNyKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGEscz1yW29dLHU9cy5sZW5ndGgsbD0wO2w8dTsrK2wpaWYoYT1zW2xdKXt2YXIgYz1lcihhLGUpOyRuKGEsdCxuLGwscyx7dGltZTpjLnRpbWUrYy5kZWxheStjLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246Yy5kdXJhdGlvbixlYXNlOmMuZWFzZX0pfXJldHVybiBuZXcgYXIocix0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6dXIuY2FsbCxub2Rlczp1ci5ub2Rlcyxub2RlOnVyLm5vZGUsc2l6ZTp1ci5zaXplLGVtcHR5OnVyLmVtcHR5LGVhY2g6dXIuZWFjaCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/ZXIodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG89ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KX0oZSk/Sm46dHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLHQpLHM9YS5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLGEub249aX19KG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1zdCh0KSxyPSJ0cmFuc2Zvcm0iPT09bj9ibjpycjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9bih0aGlzKTtpZihudWxsIT1zKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT1zP251bGw6YT09PXImJnM9PT1pP286bz1lKHI9YSxpPXMpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1uKHRoaXMpO2lmKG51bGwhPXMpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09cz9udWxsOmE9PT1yJiZzPT09aT9vOm89ZShyPWEsaT1zKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19KShuLHIsbnIodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fSkobik6KG4ubG9jYWw/ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBvPT09bj9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBvPT09bj9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19KShuLHIsZSsiIikpfSxhdHRyVHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciByPXN0KHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKHIubG9jYWw/ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxyPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxyKGUpKX19cmV0dXJuIG4uX3ZhbHVlPWUsbn06ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxyPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZSh0LHIoZSkpfX1yZXR1cm4gbi5fdmFsdWU9ZSxufSkocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT92bjpycjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1DdCh0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksQ3QodGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PW4mJmE9PT1yP2k6aT1lKG49byxyPWEpfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19KHQpKTp0aGlzLnN0eWxlVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUN0KHRoaXMsdCkscz1uKHRoaXMpO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxzPUN0KHRoaXMsdCkpLGE9PT1zP251bGw6YT09PXImJnM9PT1pP286bz1lKHI9YSxpPXMpfX0odCxyLG5yKHRoaXMsInN0eWxlLiIrdCxlKSk6ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89Q3QodGhpcyx0KTtyZXR1cm4gbz09PW4/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSh0LHIsZSsiIiksbil9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIoKXt2YXIgcj10aGlzLGk9ZS5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKGUpe3Iuc3R5bGUuc2V0UHJvcGVydHkodCxpKGUpLG4pfX1yZXR1cm4gci5fdmFsdWU9ZSxyfSh0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fShucih0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIiwodD10aGlzLl9pZCxmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIG4gaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK24hPT10KXJldHVybjtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSkpO3ZhciB0fSx0d2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9ZXIodGhpcy5ub2RlKCksbikudHdlZW4sbz0wLGE9aS5sZW5ndGg7bzxhOysrbylpZigocj1pW29dKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP2Z1bmN0aW9uKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT10cih0aGlzLHQpLG89aS50d2VlbjtpZihvIT09bilmb3IodmFyIGE9MCxzPShyPW49bykubGVuZ3RoO2E8czsrK2EpaWYoclthXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31pLnR3ZWVuPXJ9fTpmdW5jdGlvbih0LGUsbil7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dHIodGhpcyx0KSxhPW8udHdlZW47aWYoYSE9PXIpe2k9KHI9YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSx1PTAsbD1pLmxlbmd0aDt1PGw7Kyt1KWlmKGlbdV0ubmFtZT09PWUpe2lbdV09czticmVha311PT09bCYmaS5wdXNoKHMpfW8udHdlZW49aX19KShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Sm4odGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7Sm4odGhpcyx0KS5kZWxheT1lfX0pKGUsdCkpOmVyKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHIodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7dHIodGhpcyx0KS5kdXJhdGlvbj1lfX0pKGUsdCkpOmVyKHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt0cih0aGlzLHQpLmVhc2U9ZX19KGUsdCkpOmVyKHRoaXMubm9kZSgpLGUpLmVhc2V9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsZSk6Mi1NYXRoLnBvdygyLXQsZSkpLzJ9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLE1hdGgsZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuLS10KnQqKChlKzEpKnQrZSkrMX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KTt2YXIgY3I9MipNYXRoLlBJLGZyPShmdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1jcik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZSpNYXRoLnBvdygyLDEwKi0tdCkqTWF0aC5zaW4oKHItdCkvbil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipjcil9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLGZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPWNyKTtmdW5jdGlvbiBpKHQpe3JldHVybiAxLWUqTWF0aC5wb3coMiwtMTAqKHQ9K3QpKSpNYXRoLnNpbigodCtyKS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmNyKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyksZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89Y3IpO2Z1bmN0aW9uIGkodCl7cmV0dXJuKCh0PTIqdC0xKTwwP2UqTWF0aC5wb3coMiwxMCp0KSpNYXRoLnNpbigoci10KS9uKToyLWUqTWF0aC5wb3coMiwtMTAqdCkqTWF0aC5zaW4oKHIrdCkvbikpLzJ9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipjcil9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLHt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn19KTtmdW5jdGlvbiBocih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBmci50aW1lPVJuKCksZnI7cmV0dXJuIG59ZnVuY3Rpb24gZHIodCl7cmV0dXJue3R5cGU6dH19UXQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG89dC5fX3RyYW5zaXRpb24sYT0hMDtpZihvKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLG8pKG49b1tpXSkubmFtZT09PWU/KHI9bi5zdGF0ZT5HbiYmbi5zdGF0ZTxabixuLnN0YXRlPVhuLG4udGltZXIuc3RvcCgpLHImJm4ub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgb1tpXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fSh0aGlzLHQpfSl9LFF0LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIGFyPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9c3IoKSwobj1mcikudGltZT1SbigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGEscz1yW29dLHU9cy5sZW5ndGgsbD0wO2w8dTsrK2wpKGE9c1tsXSkmJiRuKGEsdCxlLGwscyxufHxocihhLGUpKTtyZXR1cm4gbmV3IGFyKHIsdGhpcy5fcGFyZW50cyx0LGUpfSxbImUiLCJ3Il0ubWFwKGRyKSxbIm4iLCJzIl0ubWFwKGRyKSxbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLm1hcChkciksTWF0aCxNYXRoLE1hdGgsTWF0aCxBcnJheTt2YXIgcHI9TWF0aC5QSSxtcj0yKnByLHlyPW1yLTFlLTY7ZnVuY3Rpb24gZ3IoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiB2cigpe3JldHVybiBuZXcgZ3J9Z3IucHJvdG90eXBlPXZyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Z3IsbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K3IpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK3IrIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPShuPStuKS0odD0rdCksdT0ocj0rciktKGU9K2UpLGw9by10LGM9YS1lLGY9bCpsK2MqYztpZigoaT0raSk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihmPjFlLTYpaWYoTWF0aC5hYnMoYypzLXUqbCk+MWUtNiYmaSl7dmFyIGg9bi1vLGQ9ci1hLHA9cypzK3UqdSxtPWgqaCtkKmQseT1NYXRoLnNxcnQocCksZz1NYXRoLnNxcnQoZiksdj1pKk1hdGgudGFuKChwci1NYXRoLmFjb3MoKHArZi1tKS8oMip5KmcpKSkvMiksYj12L2csXz12L3k7TWF0aC5hYnMoYi0xKT4xZS02JiYodGhpcy5fKz0iTCIrKHQrYipsKSsiLCIrKGUrYipjKSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKGMqaD5sKmQpKyIsIisodGhpcy5feDE9dCtfKnMpKyIsIisodGhpcy5feTE9ZStfKnUpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSl9LGFyYzpmdW5jdGlvbih0LGUsbixyLGksbyl7dD0rdCxlPStlO3ZhciBhPShuPStuKSpNYXRoLmNvcyhyKSxzPW4qTWF0aC5zaW4ociksdT10K2EsbD1lK3MsYz0xXm8sZj1vP3ItaTppLXI7aWYobjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK24pO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIit1KyIsIitsOihNYXRoLmFicyh0aGlzLl94MS11KT4xZS02fHxNYXRoLmFicyh0aGlzLl95MS1sKT4xZS02KSYmKHRoaXMuXys9IkwiK3UrIiwiK2wpLG4mJihmPDAmJihmPWYlbXIrbXIpLGY+eXI/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK2MrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK2MrIiwiKyh0aGlzLl94MT11KSsiLCIrKHRoaXMuX3kxPWwpOmY+MWUtNiYmKHRoaXMuXys9IkEiK24rIiwiK24rIiwwLCIrICsoZj49cHIpKyIsIitjKyIsIisodGhpcy5feDE9dCtuKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrbipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbih0LGUsbixyKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK24rInYiKyArcisiaCIrLW4rIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgYnI9dnI7ZnVuY3Rpb24gX3IoKXt9ZnVuY3Rpb24gd3IodCxlKXt2YXIgbj1uZXcgX3I7aWYodCBpbnN0YW5jZW9mIF9yKXQuZWFjaChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByLGk9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytpPG87KW4uc2V0KGksdFtpXSk7ZWxzZSBmb3IoOysraTxvOyluLnNldChlKHI9dFtpXSxpLHQpLHIpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCluLnNldChhLHRbYV0pO3JldHVybiBufWZ1bmN0aW9uIHhyKCl7fV9yLnByb3RvdHlwZT13ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9yLGhhczpmdW5jdGlvbih0KXtyZXR1cm4iJCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1siJCIrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9IiQiK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpIiQiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoIiQiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBPcj13ci5wcm90b3R5cGU7eHIucHJvdG90eXBlPShmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyB4cjtpZih0IGluc3RhbmNlb2YgeHIpdC5lYWNoKGZ1bmN0aW9uKHQpe24uYWRkKHQpfSk7ZWxzZSBpZih0KXt2YXIgcj0tMSxpPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK3I8aTspbi5hZGQodFtyXSk7ZWxzZSBmb3IoOysrcjxpOyluLmFkZChlKHRbcl0scix0KSl9cmV0dXJuIG59KS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnhyLGhhczpPci5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTpPci5yZW1vdmUsY2xlYXI6T3IuY2xlYXIsdmFsdWVzOk9yLmtleXMsc2l6ZTpPci5zaXplLGVtcHR5Ok9yLmVtcHR5LGVhY2g6T3IuZWFjaH0sQXJyYXk7dmFyIENyPXt9LFNyPXt9LEVyPTM0LGtyPTEwLFRyPTEzO2Z1bmN0aW9uIElyKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrIl0ifSkuam9pbigiLCIpKyJ9Iil9dmFyIEFyPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBSZWdFeHAoJ1siJyt0KyJcblxyXSIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIHIodCxlKXt2YXIgcixpPVtdLG89dC5sZW5ndGgsYT0wLHM9MCx1PW88PTAsbD0hMTtmdW5jdGlvbiBjKCl7aWYodSlyZXR1cm4gU3I7aWYobClyZXR1cm4gbD0hMSxDcjt2YXIgZSxyLGk9YTtpZih0LmNoYXJDb2RlQXQoaSk9PT1Fcil7Zm9yKDthKys8byYmdC5jaGFyQ29kZUF0KGEpIT09RXJ8fHQuY2hhckNvZGVBdCgrK2EpPT09RXI7KTtyZXR1cm4oZT1hKT49bz91PSEwOihyPXQuY2hhckNvZGVBdChhKyspKT09PWtyP2w9ITA6cj09PVRyJiYobD0hMCx0LmNoYXJDb2RlQXQoYSk9PT1rciYmKythKSx0LnNsaWNlKGkrMSxlLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2E8bzspe2lmKChyPXQuY2hhckNvZGVBdChlPWErKykpPT09a3IpbD0hMDtlbHNlIGlmKHI9PT1UcilsPSEwLHQuY2hhckNvZGVBdChhKT09PWtyJiYrK2E7ZWxzZSBpZihyIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShpLGUpfXJldHVybiB1PSEwLHQuc2xpY2UoaSxvKX1mb3IodC5jaGFyQ29kZUF0KG8tMSk9PT1rciYmLS1vLHQuY2hhckNvZGVBdChvLTEpPT09VHImJi0tbzsocj1jKCkpIT09U3I7KXtmb3IodmFyIGY9W107ciE9PUNyJiZyIT09U3I7KWYucHVzaChyKSxyPWMoKTtlJiZudWxsPT0oZj1lKGYscysrKSl8fGkucHVzaChmKX1yZXR1cm4gaX1mdW5jdGlvbiBpKGUpe3JldHVybiBlLm1hcChvKS5qb2luKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXQ/IiI6ZS50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC8iL2csJyIiJykrJyInOnR9cmV0dXJue3BhcnNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxvPXIodCxmdW5jdGlvbih0LHIpe2lmKG4pcmV0dXJuIG4odCxyLTEpO2k9dCxuPWU/ZnVuY3Rpb24odCxlKXt2YXIgbj1Jcih0KTtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gZShuKHIpLGksdCl9fSh0LGUpOklyKHQpfSk7cmV0dXJuIG8uY29sdW1ucz1pfHxbXSxvfSxwYXJzZVJvd3M6cixmb3JtYXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbnVsbD09biYmKG49ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpciBpbiBlfHxuLnB1c2goZVtyXT1yKX0pLG59KGUpKSxbbi5tYXAobykuam9pbih0KV0uY29uY2F0KGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbyhlW3RdKX0pLmpvaW4odCl9KSkuam9pbigiXG4iKX0sZm9ybWF0Um93czpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoaSkuam9pbigiXG4iKX19fSxqcj1BcigiLCIpLnBhcnNlLFByPUFyKCJcdCIpLnBhcnNlO2Z1bmN0aW9uIE1yKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC50ZXh0KCl9dmFyIE5yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihNcil9O2Z1bmN0aW9uIFJyKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCksTnIoZSxuKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUscil9KX19ZnVuY3Rpb24gRHIodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIE5yKGUsbikudGhlbihmdW5jdGlvbihlKXtyZXR1cm4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsdCl9KX19UnIoanIpLFJyKFByKSxEcigiYXBwbGljYXRpb24veG1sIiksRHIoInRleHQvaHRtbCIpO3ZhciBMcj1EcigiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIEZyKHQsZSxuLHIpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgaSxvLGEscyx1LGwsYyxmLGgsZD10Ll9yb290LHA9e2RhdGE6cn0sbT10Ll94MCx5PXQuX3kwLGc9dC5feDEsdj10Ll95MTtpZighZClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtkLmxlbmd0aDspaWYoKGw9ZT49KG89KG0rZykvMikpP209bzpnPW8sKGM9bj49KGE9KHkrdikvMikpP3k9YTp2PWEsaT1kLCEoZD1kW2Y9Yzw8MXxsXSkpcmV0dXJuIGlbZl09cCx0O2lmKHM9K3QuX3guY2FsbChudWxsLGQuZGF0YSksdT0rdC5feS5jYWxsKG51bGwsZC5kYXRhKSxlPT09cyYmbj09PXUpcmV0dXJuIHAubmV4dD1kLGk/aVtmXT1wOnQuX3Jvb3Q9cCx0O2Rve2k9aT9pW2ZdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwobD1lPj0obz0obStnKS8yKSk/bT1vOmc9bywoYz1uPj0oYT0oeSt2KS8yKSk/eT1hOnY9YX13aGlsZSgoZj1jPDwxfGwpPT0oaD0odT49YSk8PDF8cz49bykpO3JldHVybiBpW2hdPWQsaVtmXT1wLHR9dmFyIFZyPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9bix0aGlzLngxPXIsdGhpcy55MT1pfTtmdW5jdGlvbiBVcih0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB6cih0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBCcih0LGUsbixyLGksbyl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1uLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIEhyKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LG49ZTt0PXQubmV4dDspbj1uLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgV3I9KGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgQnIobnVsbD09ZT9VcjplLG51bGw9PW4/enI6bixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P3I6ci5hZGRBbGwodCl9KS5wcm90b3R5cGU9QnIucHJvdG90eXBlO1dyLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IEJyKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkscj10aGlzLl9yb290O2lmKCFyKXJldHVybiBuO2lmKCFyLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1IcihyKSxuO2Zvcih0PVt7c291cmNlOnIsdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07cj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShlPXIuc291cmNlW2ldKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OnIudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnIudGFyZ2V0W2ldPUhyKGUpKTtyZXR1cm4gbn0sV3IuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gRnIodGhpcy5jb3ZlcihlLG4pLGUsbix0KX0sV3IuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksdT0xLzAsbD0xLzAsYz0tMS8wLGY9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4ocj0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKGk9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KGFbbl09cixzW25dPWkscjx1JiYodT1yKSxyPmMmJihjPXIpLGk8bCYmKGw9aSksaT5mJiYoZj1pKSk7Zm9yKGM8dSYmKHU9dGhpcy5feDAsYz10aGlzLl94MSksZjxsJiYobD10aGlzLl95MCxmPXRoaXMuX3kxKSx0aGlzLmNvdmVyKHUsbCkuY292ZXIoYyxmKSxuPTA7bjxvOysrbilGcih0aGlzLGFbbl0sc1tuXSx0W25dKTtyZXR1cm4gdGhpc30sV3IuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5feDAscj10aGlzLl95MCxpPXRoaXMuX3gxLG89dGhpcy5feTE7aWYoaXNOYU4obikpaT0obj1NYXRoLmZsb29yKHQpKSsxLG89KHI9TWF0aC5mbG9vcihlKSkrMTtlbHNle2lmKCEobj50fHx0Pml8fHI+ZXx8ZT5vKSlyZXR1cm4gdGhpczt2YXIgYSxzLHU9aS1uLGw9dGhpcy5fcm9vdDtzd2l0Y2gocz0oZTwocitvKS8yKTw8MXx0PChuK2kpLzIpe2Nhc2UgMDpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWwsbD1hfXdoaWxlKG89cisodSo9MiksdD4oaT1uK3UpfHxlPm8pO2JyZWFrO2Nhc2UgMTpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWwsbD1hfXdoaWxlKG89cisodSo9MiksKG49aS11KT50fHxlPm8pO2JyZWFrO2Nhc2UgMjpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWwsbD1hfXdoaWxlKHI9by0odSo9MiksdD4oaT1uK3UpfHxyPmUpO2JyZWFrO2Nhc2UgMzpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWwsbD1hfXdoaWxlKHI9by0odSo9MiksKG49aS11KT50fHxyPmUpfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1sKX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfSxXci5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRve3QucHVzaChlLmRhdGEpfXdoaWxlKGU9ZS5uZXh0KX0pLHR9LFdyLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sV3IuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvLGEscyx1LGwsYz10aGlzLl94MCxmPXRoaXMuX3kwLGg9dGhpcy5feDEsZD10aGlzLl95MSxwPVtdLG09dGhpcy5fcm9vdDtmb3IobSYmcC5wdXNoKG5ldyBWcihtLGMsZixoLGQpKSxudWxsPT1uP249MS8wOihjPXQtbixmPWUtbixoPXQrbixkPWUrbixuKj1uKTt1PXAucG9wKCk7KWlmKCEoIShtPXUubm9kZSl8fChpPXUueDApPmh8fChvPXUueTApPmR8fChhPXUueDEpPGN8fChzPXUueTEpPGYpKWlmKG0ubGVuZ3RoKXt2YXIgeT0oaSthKS8yLGc9KG8rcykvMjtwLnB1c2gobmV3IFZyKG1bM10seSxnLGEscyksbmV3IFZyKG1bMl0saSxnLHkscyksbmV3IFZyKG1bMV0seSxvLGEsZyksbmV3IFZyKG1bMF0saSxvLHksZykpLChsPShlPj1nKTw8MXx0Pj15KSYmKHU9cFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTFdPXBbcC5sZW5ndGgtMS1sXSxwW3AubGVuZ3RoLTEtbF09dSl9ZWxzZXt2YXIgdj10LSt0aGlzLl94LmNhbGwobnVsbCxtLmRhdGEpLGI9ZS0rdGhpcy5feS5jYWxsKG51bGwsbS5kYXRhKSxfPXYqditiKmI7aWYoXzxuKXt2YXIgdz1NYXRoLnNxcnQobj1fKTtjPXQtdyxmPWUtdyxoPXQrdyxkPWUrdyxyPW0uZGF0YX19cmV0dXJuIHJ9LFdyLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxuLHIsaSxvLGEscyx1LGwsYyxmLGgsZD10aGlzLl9yb290LHA9dGhpcy5feDAsbT10aGlzLl95MCx5PXRoaXMuX3gxLGc9dGhpcy5feTE7aWYoIWQpcmV0dXJuIHRoaXM7aWYoZC5sZW5ndGgpZm9yKDs7KXtpZigobD1vPj0ocz0ocCt5KS8yKSk/cD1zOnk9cywoYz1hPj0odT0obStnKS8yKSk/bT11Omc9dSxlPWQsIShkPWRbZj1jPDwxfGxdKSlyZXR1cm4gdGhpcztpZighZC5sZW5ndGgpYnJlYWs7KGVbZisxJjNdfHxlW2YrMiYzXXx8ZVtmKzMmM10pJiYobj1lLGg9Zil9Zm9yKDtkLmRhdGEhPT10OylpZihyPWQsIShkPWQubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9ZC5uZXh0KSYmZGVsZXRlIGQubmV4dCxyPyhpP3IubmV4dD1pOmRlbGV0ZSByLm5leHQsdGhpcyk6ZT8oaT9lW2ZdPWk6ZGVsZXRlIGVbZl0sKGQ9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJmQ9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFkLmxlbmd0aCYmKG4/bltoXT1kOnRoaXMuX3Jvb3Q9ZCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0sV3IucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sV3Iucm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxXci5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pLHR9LFdyLnZpc2l0PWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYSxzPVtdLHU9dGhpcy5fcm9vdDtmb3IodSYmcy5wdXNoKG5ldyBWcih1LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1zLnBvcCgpOylpZighdCh1PWUubm9kZSxyPWUueDAsaT1lLnkwLG89ZS54MSxhPWUueTEpJiZ1Lmxlbmd0aCl7dmFyIGw9KHIrbykvMixjPShpK2EpLzI7KG49dVszXSkmJnMucHVzaChuZXcgVnIobixsLGMsbyxhKSksKG49dVsyXSkmJnMucHVzaChuZXcgVnIobixyLGMsbCxhKSksKG49dVsxXSkmJnMucHVzaChuZXcgVnIobixsLGksbyxjKSksKG49dVswXSkmJnMucHVzaChuZXcgVnIobixyLGksbCxjKSl9cmV0dXJuIHRoaXN9LFdyLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24odCl7dmFyIGUsbj1bXSxyPVtdO2Zvcih0aGlzLl9yb290JiZuLnB1c2gobmV3IFZyKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgaT1lLm5vZGU7aWYoaS5sZW5ndGgpe3ZhciBvLGE9ZS54MCxzPWUueTAsdT1lLngxLGw9ZS55MSxjPShhK3UpLzIsZj0ocytsKS8yOyhvPWlbMF0pJiZuLnB1c2gobmV3IFZyKG8sYSxzLGMsZikpLChvPWlbMV0pJiZuLnB1c2gobmV3IFZyKG8sYyxzLHUsZikpLChvPWlbMl0pJiZuLnB1c2gobmV3IFZyKG8sYSxmLGMsbCkpLChvPWlbM10pJiZuLnB1c2gobmV3IFZyKG8sYyxmLHUsbCkpfXIucHVzaChlKX1mb3IoO2U9ci5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LFdyLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxXci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX0sTWF0aCxNYXRoLnNxcnQoNSk7dmFyIHFyPWZ1bmN0aW9uKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLHI9dC5zbGljZSgwLG4pO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKG4rMSldfSxZcj1mdW5jdGlvbih0KXtyZXR1cm4odD1xcihNYXRoLmFicyh0KSkpP3RbMV06TmFOfSxHcj0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC1cKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gUXIodCl7cmV0dXJuIG5ldyBLcih0KX1mdW5jdGlvbiBLcih0KXtpZighKGU9R3IuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTt0aGlzLmZpbGw9ZVsxXXx8IiAiLHRoaXMuYWxpZ249ZVsyXXx8Ij4iLHRoaXMuc2lnbj1lWzNdfHwiLSIsdGhpcy5zeW1ib2w9ZVs0XXx8IiIsdGhpcy56ZXJvPSEhZVs1XSx0aGlzLndpZHRoPWVbNl0mJitlWzZdLHRoaXMuY29tbWE9ISFlWzddLHRoaXMucHJlY2lzaW9uPWVbOF0mJitlWzhdLnNsaWNlKDEpLHRoaXMudHJpbT0hIWVbOV0sdGhpcy50eXBlPWVbMTBdfHwiIn1Rci5wcm90b3R5cGU9S3IucHJvdG90eXBlLEtyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyhudWxsPT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsobnVsbD09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBacixYciwkcixKcix0aT1mdW5jdGlvbih0KXt0OmZvcih2YXIgZSxuPXQubGVuZ3RoLHI9MSxpPS0xO3I8bjsrK3Ipc3dpdGNoKHRbcl0pe2Nhc2UiLiI6aT1lPXI7YnJlYWs7Y2FzZSIwIjowPT09aSYmKGk9ciksZT1yO2JyZWFrO2RlZmF1bHQ6aWYoaT4wKXtpZighK3Rbcl0pYnJlYWsgdDtpPTB9fXJldHVybiBpPjA/dC5zbGljZSgwLGkpK3Quc2xpY2UoZSsxKTp0fSxlaT1mdW5jdGlvbih0LGUpe3ZhciBuPXFyKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIHI9blswXSxpPW5bMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK3I6ci5sZW5ndGg+aSsxP3Iuc2xpY2UoMCxpKzEpKyIuIityLnNsaWNlKGkrMSk6cituZXcgQXJyYXkoaS1yLmxlbmd0aCsyKS5qb2luKCIwIil9LG5pPXsiJSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQoZSl9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBlaSgxMDAqdCxlKX0scjplaSxzOmZ1bmN0aW9uKHQsZSl7dmFyIG49cXIodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXSxvPWktKFpyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSkrMSxhPXIubGVuZ3RoO3JldHVybiBvPT09YT9yOm8+YT9yK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9yLnNsaWNlKDAsbykrIi4iK3Iuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrcXIodCxNYXRoLm1heCgwLGUrby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX0scmk9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGlpPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO1hyPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj10Lmdyb3VwaW5nJiZ0LnRob3VzYW5kcz8oZT10Lmdyb3VwaW5nLG49dC50aG91c2FuZHMsZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9dC5sZW5ndGgsbz1bXSxhPTAscz1lWzBdLHU9MDtpPjAmJnM+MCYmKHUrcysxPnImJihzPU1hdGgubWF4KDEsci11KSksby5wdXNoKHQuc3Vic3RyaW5nKGktPXMsaStzKSksISgodSs9cysxKT5yKSk7KXM9ZVthPShhKzEpJWUubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbihuKX0pOnJpLGk9dC5jdXJyZW5jeSxvPXQuZGVjaW1hbCxhPXQubnVtZXJhbHM/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbK2VdfSl9fSh0Lm51bWVyYWxzKTpyaSxzPXQucGVyY2VudHx8IiUiO2Z1bmN0aW9uIHUodCl7dmFyIGU9KHQ9UXIodCkpLmZpbGwsbj10LmFsaWduLHU9dC5zaWduLGw9dC5zeW1ib2wsYz10Lnplcm8sZj10LndpZHRoLGg9dC5jb21tYSxkPXQucHJlY2lzaW9uLHA9dC50cmltLG09dC50eXBlOyJuIj09PW0/KGg9ITAsbT0iZyIpOm5pW21dfHwobnVsbD09ZCYmKGQ9MTIpLHA9ITAsbT0iZyIpLChjfHwiMCI9PT1lJiYiPSI9PT1uKSYmKGM9ITAsZT0iMCIsbj0iPSIpO3ZhciB5PSIkIj09PWw/aVswXToiIyI9PT1sJiYvW2JveFhdLy50ZXN0KG0pPyIwIittLnRvTG93ZXJDYXNlKCk6IiIsZz0iJCI9PT1sP2lbMV06L1slcF0vLnRlc3QobSk/czoiIix2PW5pW21dLGI9L1tkZWZncHJzJV0vLnRlc3QobSk7ZnVuY3Rpb24gXyh0KXt2YXIgaSxzLGwsXz15LHc9ZztpZigiYyI9PT1tKXc9dih0KSt3LHQ9IiI7ZWxzZXt2YXIgeD0odD0rdCk8MDtpZih0PXYoTWF0aC5hYnModCksZCkscCYmKHQ9dGkodCkpLHgmJjA9PSt0JiYoeD0hMSksXz0oeD8iKCI9PT11P3U6Ii0iOiItIj09PXV8fCIoIj09PXU/IiI6dSkrXyx3PSgicyI9PT1tP2lpWzgrWnIvM106IiIpK3crKHgmJiIoIj09PXU/IikiOiIiKSxiKWZvcihpPS0xLHM9dC5sZW5ndGg7KytpPHM7KWlmKDQ4PihsPXQuY2hhckNvZGVBdChpKSl8fGw+NTcpe3c9KDQ2PT09bD9vK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKSt3LHQ9dC5zbGljZSgwLGkpO2JyZWFrfX1oJiYhYyYmKHQ9cih0LDEvMCkpO3ZhciBPPV8ubGVuZ3RoK3QubGVuZ3RoK3cubGVuZ3RoLEM9TzxmP25ldyBBcnJheShmLU8rMSkuam9pbihlKToiIjtzd2l0Y2goaCYmYyYmKHQ9cihDK3QsQy5sZW5ndGg/Zi13Lmxlbmd0aDoxLzApLEM9IiIpLG4pe2Nhc2UiPCI6dD1fK3QrdytDO2JyZWFrO2Nhc2UiPSI6dD1fK0MrdCt3O2JyZWFrO2Nhc2UiXiI6dD1DLnNsaWNlKDAsTz1DLmxlbmd0aD4+MSkrXyt0K3crQy5zbGljZShPKTticmVhaztkZWZhdWx0OnQ9QytfK3Qrd31yZXR1cm4gYSh0KX1yZXR1cm4gZD1udWxsPT1kPzY6L1tncHJzXS8udGVzdChtKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGQpKSxfLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LF99cmV0dXJue2Zvcm1hdDp1LGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPXUoKCh0PVFyKHQpKS50eXBlPSJmIix0KSkscj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihZcihlKS8zKSkpLGk9TWF0aC5wb3coMTAsLXIpLG89aWlbOCtyLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihpKnQpK299fX19KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pLCRyPVhyLmZvcm1hdCxKcj1Yci5mb3JtYXRQcmVmaXg7dmFyIG9pPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhaX07ZnVuY3Rpb24gYWkoKXt0aGlzLnJlc2V0KCl9YWkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphaSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe3VpKHNpLHQsdGhpcy50KSx1aSh0aGlzLHNpLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1zaS50OnRoaXMucz1zaS50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBzaT1uZXcgYWk7ZnVuY3Rpb24gdWkodCxlLG4pe3ZhciByPXQucz1lK24saT1yLWU7dC50PWUtKHItaSkrKG4taSl9dmFyIGxpPU1hdGguUEksY2k9bGkvMixmaT0yKmxpLGhpPWxpLzE4MCxkaT0oTWF0aCxNYXRoLmF0YW4pLHBpPU1hdGguYXRhbjIsbWk9TWF0aC5jb3MseWk9KE1hdGgsTWF0aCxNYXRoLE1hdGgsTWF0aCxNYXRoLnNpbiksZ2k9KE1hdGgsTWF0aC5zcXJ0KTtmdW5jdGlvbiB2aSh0KXtyZXR1cm4gdD4xP2NpOnQ8LTE/LWNpOk1hdGguYXNpbih0KX1mdW5jdGlvbiBiaSh0LGUpe3JldHVyblt0PmxpP3QtZmk6dDwtbGk/dCtmaTp0LGVdfWZ1bmN0aW9uIF9pKCl7fWZ1bmN0aW9uIHdpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPW1pKGUpLGk9bWkobiksbz10KHIqaSk7cmV0dXJuW28qaSp5aShlKSxvKnlpKG4pXX19ZnVuY3Rpb24geGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9Z2koZSplK24qbiksaT10KHIpLG89eWkoaSksYT1taShpKTtyZXR1cm5bcGkoZSpvLHIqYSksdmkociYmbipvL3IpXX19ZnVuY3Rpb24gT2kodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBDaSh0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixyPW4mJm4ubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KWUrPW5bcl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIFNpKHQsZSl7dmFyIG4scixpLG8sYSxzPW5ldyBJaSh0KSx1PSt0LnZhbHVlJiYocy52YWx1ZT10LnZhbHVlKSxsPVtzXTtmb3IobnVsbD09ZSYmKGU9RWkpO249bC5wb3AoKTspaWYodSYmKG4udmFsdWU9K24uZGF0YS52YWx1ZSksKGk9ZShuLmRhdGEpKSYmKGE9aS5sZW5ndGgpKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShhKSxvPWEtMTtvPj0wOy0tbylsLnB1c2gocj1uLmNoaWxkcmVuW29dPW5ldyBJaShpW29dKSksci5wYXJlbnQ9bixyLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gcy5lYWNoQmVmb3JlKFRpKX1mdW5jdGlvbiBFaSh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBraSh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gVGkodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBJaSh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1NYXRoLG9pKCksb2koKSxvaSgpLGJpLmludmVydD1iaSxvaSgpLG9pKCksb2koKSxvaSgpLG9pKCksX2kucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpfaSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSxtaSgzMCpoaSksd2koZnVuY3Rpb24odCl7cmV0dXJuIGdpKDIvKDErdCkpfSkuaW52ZXJ0PXhpKGZ1bmN0aW9uKHQpe3JldHVybiAyKnZpKHQvMil9KSx3aShmdW5jdGlvbih0KXtyZXR1cm4odD0oZT10KT4xPzA6ZTwtMT9saTpNYXRoLmFjb3MoZSkpJiZ0L3lpKHQpO3ZhciBlfSkuaW52ZXJ0PXhpKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksT2kuaW52ZXJ0PU9pLHhpKGRpKSx4aSh2aSkseGkoZnVuY3Rpb24odCl7cmV0dXJuIDIqZGkodCl9KSxJaS5wcm90b3R5cGU9U2kucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJaSxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihDaSl9LGVhY2g6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbz10aGlzLGE9W29dO2Rve2ZvcihlPWEucmV2ZXJzZSgpLGE9W107bz1lLnBvcCgpOylpZih0KG8pLG49by5jaGlsZHJlbilmb3Iocj0wLGk9bi5sZW5ndGg7cjxpOysrcilhLnB1c2gobltyXSl9d2hpbGUoYS5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpPXRoaXMsbz1baV0sYT1bXTtpPW8ucG9wKCk7KWlmKGEucHVzaChpKSxlPWkuY2hpbGRyZW4pZm9yKG49MCxyPWUubGVuZ3RoO248cjsrK24pby5wdXNoKGVbbl0pO2Zvcig7aT1hLnBvcCgpOyl0KGkpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dGhpcyxpPVtyXTtyPWkucG9wKCk7KWlmKHQociksZT1yLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4paS5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0rdChlLmRhdGEpfHwwLHI9ZS5jaGlsZHJlbixpPXImJnIubGVuZ3RoOy0taT49MDspbis9cltpXS52YWx1ZTtlLnZhbHVlPW59KX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pfSxwYXRoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLG49ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gdDt2YXIgbj10LmFuY2VzdG9ycygpLHI9ZS5hbmNlc3RvcnMoKSxpPW51bGw7Zm9yKHQ9bi5wb3AoKSxlPXIucG9wKCk7dD09PWU7KWk9dCx0PW4ucG9wKCksZT1yLnBvcCgpO3JldHVybiBpfShlLHQpLHI9W2VdO2UhPT1uOylyLnB1c2goZT1lLnBhcmVudCk7Zm9yKHZhciBpPXIubGVuZ3RoO3QhPT1uOylyLnNwbGljZShpLDAsdCksdD10LnBhcmVudDtyZXR1cm4gcn0sYW5jZXN0b3JzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfSxkZXNjZW5kYW50czpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLmNoaWxkcmVufHx0LnB1c2goZSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKG4pe24hPT10JiZlLnB1c2goe3NvdXJjZTpuLnBhcmVudCx0YXJnZXQ6bn0pfSksZX0sY29weTpmdW5jdGlvbigpe3JldHVybiBTaSh0aGlzKS5lYWNoQmVmb3JlKGtpKX19LEFycmF5O3ZhciBBaT1mdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSx1PWEubGVuZ3RoLGw9dC52YWx1ZSYmKHItZSkvdC52YWx1ZTsrK3M8dTspKG89YVtzXSkueTA9bixvLnkxPWksby54MD1lLG8ueDE9ZSs9by52YWx1ZSpsfTtPYmplY3QuY3JlYXRlKElpLnByb3RvdHlwZSk7dmFyIGppPWZ1bmN0aW9uKHQsZSxuLHIsaSl7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbixzPS0xLHU9YS5sZW5ndGgsbD10LnZhbHVlJiYoaS1uKS90LnZhbHVlOysrczx1Oykobz1hW3NdKS54MD1lLG8ueDE9cixvLnkwPW4sby55MT1uKz1vLnZhbHVlKmx9LFBpPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBNaSh0LGUsbixyLGksbyl7Zm9yKHZhciBhLHMsdSxsLGMsZixoLGQscCxtLHksZz1bXSx2PWUuY2hpbGRyZW4sYj0wLF89MCx3PXYubGVuZ3RoLHg9ZS52YWx1ZTtiPHc7KXt1PWktbixsPW8tcjtkb3tjPXZbXysrXS52YWx1ZX13aGlsZSghYyYmXzx3KTtmb3IoZj1oPWMseT1jKmMqKG09TWF0aC5tYXgobC91LHUvbCkvKHgqdCkpLHA9TWF0aC5tYXgoaC95LHkvZik7Xzx3OysrXyl7aWYoYys9cz12W19dLnZhbHVlLHM8ZiYmKGY9cykscz5oJiYoaD1zKSx5PWMqYyptLChkPU1hdGgubWF4KGgveSx5L2YpKT5wKXtjLT1zO2JyZWFrfXA9ZH1nLnB1c2goYT17dmFsdWU6YyxkaWNlOnU8bCxjaGlsZHJlbjp2LnNsaWNlKGIsXyl9KSxhLmRpY2U/QWkoYSxuLHIsaSx4P3IrPWwqYy94Om8pOmppKGEsbixyLHg/bis9dSpjL3g6aSxvKSx4LT1jLGI9X31yZXR1cm4gZ30oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbixyLGksbyl7TWkoZSx0LG4scixpLG8pfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KShQaSksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbixyLGksbyl7aWYoKGE9dC5fc3F1YXJpZnkpJiZhLnJhdGlvPT09ZSlmb3IodmFyIGEscyx1LGwsYyxmPS0xLGg9YS5sZW5ndGgsZD10LnZhbHVlOysrZjxoOyl7Zm9yKHU9KHM9YVtmXSkuY2hpbGRyZW4sbD1zLnZhbHVlPTAsYz11Lmxlbmd0aDtsPGM7KytsKXMudmFsdWUrPXVbbF0udmFsdWU7cy5kaWNlP0FpKHMsbixyLGkscis9KG8tcikqcy52YWx1ZS9kKTpqaShzLG4scixuKz0oaS1uKSpzLnZhbHVlL2QsbyksZC09cy52YWx1ZX1lbHNlIHQuX3NxdWFyaWZ5PWE9TWkoZSx0LG4scixpLG8pLGEucmF0aW89ZX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufShQaSk7dmFyIE5pPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9LFJpPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0oTmkpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciByLGk7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIG87aWYobnVsbCE9cilvPXIscj1udWxsO2Vsc2UgZG97cj0yKmUoKS0xLG89MiplKCktMSxpPXIqcitvKm99d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrbipvKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19cmV0dXJuIG4uc291cmNlPXQsbn0oTmkpKSxEaT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9Umkuc291cmNlKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIG4uc291cmNlPXQsbn0oTmkpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49MCxyPTA7cjx0OysrciluKz1lKCk7cmV0dXJuIG59fXJldHVybiBuLnNvdXJjZT10LG59KE5pKSksTGk9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1EaS5zb3VyY2UoZSkodCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4oKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufShOaSksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLWUoKSkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0oTmkpLEFycmF5LnByb3RvdHlwZSksRmk9TGkubWFwLFZpPUxpLnNsaWNlLFVpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0semk9ZnVuY3Rpb24odCl7cmV0dXJuK3R9LEJpPVswLDFdO2Z1bmN0aW9uIEhpKHQsZSl7cmV0dXJuKGUtPXQ9K3QpP2Z1bmN0aW9uKG4pe3JldHVybihuLXQpL2V9OlVpKGUpfWZ1bmN0aW9uIFdpKHQsZSxuLHIpe3ZhciBpPXRbMF0sbz10WzFdLGE9ZVswXSxzPWVbMV07cmV0dXJuIG88aT8oaT1uKG8saSksYT1yKHMsYSkpOihpPW4oaSxvKSxhPXIoYSxzKSksZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0KSl9fWZ1bmN0aW9uIHFpKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9LTE7Zm9yKHRbaV08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylvW3NdPW4odFtzXSx0W3MrMV0pLGFbc109cihlW3NdLGVbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPVYodCxlLDEsaSktMTtyZXR1cm4gYVtuXShvW25dKGUpKX19dmFyIFlpPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXRbMF0sbz10W3QubGVuZ3RoLTFdLGE9WChpLG8sbnVsbD09ZT8xMDplKTtzd2l0Y2goKG49UXIobnVsbD09bj8iLGYiOm4pKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKG8pKTtyZXR1cm4gbnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihZcihlKS8zKSkpLVlyKE1hdGguYWJzKHQpKSl9KGEscykpfHwobi5wcmVjaXNpb249ciksSnIobixzKTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsIT1uLnByZWNpc2lvbnx8aXNOYU4ocj1mdW5jdGlvbih0LGUpe3JldHVybiB0PU1hdGguYWJzKHQpLGU9TWF0aC5hYnMoZSktdCxNYXRoLm1heCgwLFlyKGUpLVlyKHQpKSsxfShhLE1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKG8pKSkpfHwobi5wcmVjaXNpb249ci0oImUiPT09bi50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihyPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLC1ZcihNYXRoLmFicyh0KSkpfShhKSl8fChuLnByZWNpc2lvbj1yLTIqKCIlIj09PW4udHlwZSkpfXJldHVybiAkcihuKX07ZnVuY3Rpb24gR2koKXt2YXIgdD1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvPUJpLGE9Qmkscz1obix1PSExO2Z1bmN0aW9uIGwoKXtyZXR1cm4gbj1NYXRoLm1pbihvLmxlbmd0aCxhLmxlbmd0aCk+Mj9xaTpXaSxyPWk9bnVsbCxjfWZ1bmN0aW9uIGMoZSl7cmV0dXJuKHJ8fChyPW4obyxhLHU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dChlPStlLG49K24pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9ZT8wOnQ+PW4/MTpyKHQpfX19KHQpOnQscykpKSgrZSl9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybihpfHwoaT1uKGEsbyxIaSx1P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/ZTp0Pj0xP246cih0KX19fShlKTplKSkpKCt0KX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89RmkuY2FsbCh0LHppKSxsKCkpOm8uc2xpY2UoKX0sYy5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1WaS5jYWxsKHQpLGwoKSk6YS5zbGljZSgpfSxjLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9VmkuY2FsbCh0KSxzPWRuLGwoKX0sYy5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXQsbCgpKTp1fSxjLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsbCgpKTpzfSxsKCl9KEhpLHVuKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGU9dCxHaSgpLmRvbWFpbihlLmRvbWFpbigpKS5yYW5nZShlLnJhbmdlKCkpLmludGVycG9sYXRlKGUuaW50ZXJwb2xhdGUoKSkuY2xhbXAoZS5jbGFtcCgpKTt2YXIgZX0sZnVuY3Rpb24odCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBLKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWWkoZSgpLHQsbil9LHQubmljZT1mdW5jdGlvbihuKXtudWxsPT1uJiYobj0xMCk7dmFyIHIsaT1lKCksbz0wLGE9aS5sZW5ndGgtMSxzPWlbb10sdT1pW2FdO3JldHVybiB1PHMmJihyPXMscz11LHU9cixyPW8sbz1hLGE9ciksKHI9WihzLHUsbikpPjA/cj1aKHM9TWF0aC5mbG9vcihzL3IpKnIsdT1NYXRoLmNlaWwodS9yKSpyLG4pOnI8MCYmKHI9WihzPU1hdGguY2VpbChzKnIpL3IsdT1NYXRoLmZsb29yKHUqcikvcixuKSkscj4wPyhpW29dPU1hdGguZmxvb3Iocy9yKSpyLGlbYV09TWF0aC5jZWlsKHUvcikqcixlKGkpKTpyPDAmJihpW29dPU1hdGguY2VpbChzKnIpL3IsaVthXT1NYXRoLmZsb29yKHUqcikvcixlKGkpKSx0fSx0fSh0KX12YXIgUWk9bmV3IERhdGUsS2k9bmV3IERhdGU7ZnVuY3Rpb24gWmkodCxlLG4scil7ZnVuY3Rpb24gaShlKXtyZXR1cm4gdChlPW5ldyBEYXRlKCtlKSksZX1yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LGkucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9aSh0KSxuPWkuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LGkub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LGkucmFuZ2U9ZnVuY3Rpb24obixyLG8pe3ZhciBhLHM9W107aWYobj1pLmNlaWwobiksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKG48ciYmbz4wKSlyZXR1cm4gcztkb3tzLnB1c2goYT1uZXcgRGF0ZSgrbikpLGUobixvKSx0KG4pfXdoaWxlKGE8biYmbjxyKTtyZXR1cm4gc30saS5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIFppKGZ1bmN0aW9uKGUpe2lmKGU+PWUpZm9yKDt0KGUpLCFuKGUpOyllLnNldFRpbWUoZS0xKX0sZnVuY3Rpb24odCxyKXtpZih0Pj10KWlmKHI8MClmb3IoOysrcjw9MDspZm9yKDtlKHQsLTEpLCFuKHQpOyk7ZWxzZSBmb3IoOy0tcj49MDspZm9yKDtlKHQsMSksIW4odCk7KTt9KX0sbiYmKGkuY291bnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gUWkuc2V0VGltZSgrZSksS2kuc2V0VGltZSgrciksdChRaSksdChLaSksTWF0aC5mbG9vcihuKFFpLEtpKSl9LGkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9pLmZpbHRlcihyP2Z1bmN0aW9uKGUpe3JldHVybiByKGUpJXQ9PTB9OmZ1bmN0aW9uKGUpe3JldHVybiBpLmNvdW50KDAsZSkldD09MH0pOmk6bnVsbH0pLGl9dmFyIFhpPVppKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSk7WGkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9aaShmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSxmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSxmdW5jdGlvbihlLG4pe3JldHVybihuLWUpL3R9KTpYaTpudWxsfTt2YXIgJGk9NmU0LEppPTYwNDhlNSx0bz0oWmkoZnVuY3Rpb24odCl7dC5zZXRUaW1lKDFlMypNYXRoLmZsb29yKHQvMWUzKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzFlMyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8xZTN9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pLFppKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvJGkpKiRpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSokaSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvJGl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLFppKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSokaSUzNmU1O2U8MCYmKGUrPTM2ZTUpLHQuc2V0VGltZSgzNmU1Kk1hdGguZmxvb3IoKCt0LWUpLzM2ZTUpK2UpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxaaShmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSokaSkvODY0ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpO2Z1bmN0aW9uIGVvKHQpe3JldHVybiBaaShmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKiRpKS9KaX0pfXZhciBubz1lbygwKSxybz1lbygxKSxpbz0oZW8oMiksZW8oMyksZW8oNCkpLG9vPShlbyg1KSxlbyg2KSxaaShmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsxMiooZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSxaaShmdW5jdGlvbih0KXt0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0pKTtvby5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1ppKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsbil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrbip0KX0pOm51bGx9O3ZhciBhbz1vbyxzbz0oWmkoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqJGkpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLyRpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSxaaShmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSxaaShmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS84NjRlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSk7ZnVuY3Rpb24gdW8odCl7cmV0dXJuIFppKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvSml9KX12YXIgbG89dW8oMCksY289dW8oMSksZm89KHVvKDIpLHVvKDMpLHVvKDQpKSxobz0odW8oNSksdW8oNiksWmkoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSksWmkoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7aG8uZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9aaShmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLG4pe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK24qdCl9KTpudWxsfTt2YXIgcG89aG87ZnVuY3Rpb24gbW8odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIHlvKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIGdvKHQpe3JldHVybnt5OnQsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fXZhciB2byxibyxfbyx3bz17Ii0iOiIiLF86IiAiLDA6IjAifSx4bz0vXlxzKlxkKy8sT289L14lLyxDbz0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gU28odCxlLG4pe3ZhciByPXQ8MD8iLSI6IiIsaT0ocj8tdDp0KSsiIixvPWkubGVuZ3RoO3JldHVybiByKyhvPG4/bmV3IEFycmF5KG4tbysxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gRW8odCl7cmV0dXJuIHQucmVwbGFjZShDbywiXFwkJiIpfWZ1bmN0aW9uIGtvKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChFbykuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFRvKHQpe2Zvcih2YXIgZT17fSxuPS0xLHI9dC5sZW5ndGg7KytuPHI7KWVbdFtuXS50b0xvd2VyQ2FzZSgpXT1uO3JldHVybiBlfWZ1bmN0aW9uIElvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC53PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEFvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC51PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5VPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFBvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5WPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE1vKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5XPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5vKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gcj8odC55PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC55PStyWzBdKygrclswXT42OD8xOTAwOjJlMyksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRG8odCxlLG4pe3ZhciByPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gcj8odC5aPXJbMV0/MDotKHJbMl0rKHJbM118fCIwMCIpKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMbyh0LGUsbil7dmFyIHI9eG8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQubT1yWzBdLTEsbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRm8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LmQ9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVm8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiByPyh0Lm09MCx0LmQ9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVW8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lkg9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gem8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lk09K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQm8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSG8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiByPyh0Lkw9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gV28odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Lkw9TWF0aC5mbG9vcihyWzBdLzFlMyksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcW8odCxlLG4pe3ZhciByPU9vLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByP24rclswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gWW8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQuUT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHbyh0LGUsbil7dmFyIHI9eG8uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPTFlMyorclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRbyh0LGUpe3JldHVybiBTbyh0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uIEtvKHQsZSl7cmV0dXJuIFNvKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIFpvKHQsZSl7cmV0dXJuIFNvKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBYbyh0LGUpe3JldHVybiBTbygxK3RvLmNvdW50KGFvKHQpLHQpLGUsMyl9ZnVuY3Rpb24gJG8odCxlKXtyZXR1cm4gU28odC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIEpvKHQsZSl7cmV0dXJuICRvKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gdGEodCxlKXtyZXR1cm4gU28odC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBlYSh0LGUpe3JldHVybiBTbyh0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIG5hKHQsZSl7cmV0dXJuIFNvKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gcmEodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIGlhKHQsZSl7cmV0dXJuIFNvKG5vLmNvdW50KGFvKHQpLHQpLGUsMil9ZnVuY3Rpb24gb2EodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP2lvKHQpOmlvLmNlaWwodCksU28oaW8uY291bnQoYW8odCksdCkrKDQ9PT1hbyh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBhYSh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBzYSh0LGUpe3JldHVybiBTbyhyby5jb3VudChhbyh0KSx0KSxlLDIpfWZ1bmN0aW9uIHVhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBsYSh0LGUpe3JldHVybiBTbyh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gY2EodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStTbyhlLzYwfDAsIjAiLDIpK1NvKGUlNjAsIjAiLDIpfWZ1bmN0aW9uIGZhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gaGEodCxlKXtyZXR1cm4gU28odC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gZGEodCxlKXtyZXR1cm4gU28odC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIHBhKHQsZSl7cmV0dXJuIFNvKDErc28uY291bnQocG8odCksdCksZSwzKX1mdW5jdGlvbiBtYSh0LGUpe3JldHVybiBTbyh0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24geWEodCxlKXtyZXR1cm4gbWEodCxlKSsiMDAwIn1mdW5jdGlvbiBnYSh0LGUpe3JldHVybiBTbyh0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHZhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gYmEodCxlKXtyZXR1cm4gU28odC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBfYSh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gd2EodCxlKXtyZXR1cm4gU28obG8uY291bnQocG8odCksdCksZSwyKX1mdW5jdGlvbiB4YSh0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ9bj49NHx8MD09PW4/Zm8odCk6Zm8uY2VpbCh0KSxTbyhmby5jb3VudChwbyh0KSx0KSsoND09PXBvKHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uIE9hKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIENhKHQsZSl7cmV0dXJuIFNvKGNvLmNvdW50KHBvKHQpLHQpLGUsMil9ZnVuY3Rpb24gU2EodCxlKXtyZXR1cm4gU28odC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEVhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBrYSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gVGEoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gSWEodCl7cmV0dXJuK3R9ZnVuY3Rpb24gQWEodCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX0hZnVuY3Rpb24odCl7dm89ZnVuY3Rpb24oZSl7dmFyIG49dC5kYXRlVGltZSxyPXQuZGF0ZSxpPXQudGltZSxvPXQucGVyaW9kcyxhPXQuZGF5cyxzPXQuc2hvcnREYXlzLHU9dC5tb250aHMsbD10LnNob3J0TW9udGhzLGM9a28obyksZj1UbyhvKSxoPWtvKGEpLGQ9VG8oYSkscD1rbyhzKSxtPVRvKHMpLHk9a28odSksZz1Ubyh1KSx2PWtvKGwpLGI9VG8obCksXz17YTpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gbFt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOlFvLGU6UW8sZjpKbyxIOktvLEk6Wm8sajpYbyxMOiRvLG06dGEsTTplYSxwOmZ1bmN0aW9uKHQpe3JldHVybiBvWysodC5nZXRIb3VycygpPj0xMildfSxROklhLHM6QWEsUzpuYSx1OnJhLFU6aWEsVjpvYSx3OmFhLFc6c2EseDpudWxsLFg6bnVsbCx5OnVhLFk6bGEsWjpjYSwiJSI6VGF9LHc9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGxbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpmYSxlOmZhLGY6eWEsSDpoYSxJOmRhLGo6cGEsTDptYSxtOmdhLE06dmEscDpmdW5jdGlvbih0KXtyZXR1cm4gb1srKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0sUTpJYSxzOkFhLFM6YmEsdTpfYSxVOndhLFY6eGEsdzpPYSxXOkNhLHg6bnVsbCxYOm51bGwseTpTYSxZOkVhLFo6a2EsIiUiOlRhfSx4PXthOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1wLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1tW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWguZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PWRbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUsbil7dmFyIHI9di5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09YltyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj15LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT1nW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBTKHQsbixlLHIpfSxkOkZvLGU6Rm8sZjpXbyxIOlVvLEk6VW8sajpWbyxMOkhvLG06TG8sTTp6byxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1jLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucD1mW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LFE6WW8sczpHbyxTOkJvLHU6QW8sVTpqbyxWOlBvLHc6SW8sVzpNbyx4OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gUyh0LHIsZSxuKX0sWDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIFModCxpLGUsbil9LHk6Um8sWTpObyxaOkRvLCIlIjpxb307ZnVuY3Rpb24gTyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLG8sYT1bXSxzPS0xLHU9MCxsPXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8bDspMzc9PT10LmNoYXJDb2RlQXQocykmJihhLnB1c2godC5zbGljZSh1LHMpKSxudWxsIT0oaT13b1tyPXQuY2hhckF0KCsrcyldKT9yPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1yPyIgIjoiMCIsKG89ZVtyXSkmJihyPW8obixpKSksYS5wdXNoKHIpLHU9cysxKTtyZXR1cm4gYS5wdXNoKHQuc2xpY2UodSxzKSksYS5qb2luKCIiKX19ZnVuY3Rpb24gQyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLG89Z28oMTkwMCk7aWYoUyhvLHQsbis9IiIsMCkhPW4ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIG8pcmV0dXJuIG5ldyBEYXRlKG8uUSk7aWYoInAiaW4gbyYmKG8uSD1vLkglMTIrMTIqby5wKSwiViJpbiBvKXtpZihvLlY8MXx8by5WPjUzKXJldHVybiBudWxsOyJ3ImluIG98fChvLnc9MSksIloiaW4gbz8ocj0oaT0ocj15byhnbyhvLnkpKSkuZ2V0VVRDRGF5KCkpPjR8fDA9PT1pP2NvLmNlaWwocik6Y28ocikscj1zby5vZmZzZXQociw3KihvLlYtMSkpLG8ueT1yLmdldFVUQ0Z1bGxZZWFyKCksby5tPXIuZ2V0VVRDTW9udGgoKSxvLmQ9ci5nZXRVVENEYXRlKCkrKG8udys2KSU3KToocj0oaT0ocj1lKGdvKG8ueSkpKS5nZXREYXkoKSk+NHx8MD09PWk/cm8uY2VpbChyKTpybyhyKSxyPXRvLm9mZnNldChyLDcqKG8uVi0xKSksby55PXIuZ2V0RnVsbFllYXIoKSxvLm09ci5nZXRNb250aCgpLG8uZD1yLmdldERhdGUoKSsoby53KzYpJTcpfWVsc2UoIlciaW4gb3x8IlUiaW4gbykmJigidyJpbiBvfHwoby53PSJ1ImluIG8/by51JTc6IlciaW4gbz8xOjApLGk9IloiaW4gbz95byhnbyhvLnkpKS5nZXRVVENEYXkoKTplKGdvKG8ueSkpLmdldERheSgpLG8ubT0wLG8uZD0iVyJpbiBvPyhvLncrNiklNys3Km8uVy0oaSs1KSU3Om8udys3Km8uVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBvPyhvLkgrPW8uWi8xMDB8MCxvLk0rPW8uWiUxMDAseW8obykpOmUobyl9fWZ1bmN0aW9uIFModCxlLG4scil7Zm9yKHZhciBpLG8sYT0wLHM9ZS5sZW5ndGgsdT1uLmxlbmd0aDthPHM7KXtpZihyPj11KXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KGErKykpKXtpZihpPWUuY2hhckF0KGErKyksIShvPXhbaSBpbiB3bz9lLmNoYXJBdChhKyspOmldKXx8KHI9byh0LG4scikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1uLmNoYXJDb2RlQXQocisrKSlyZXR1cm4tMX1yZXR1cm4gcn1yZXR1cm4gXy54PU8ocixfKSxfLlg9TyhpLF8pLF8uYz1PKG4sXyksdy54PU8ocix3KSx3Llg9TyhpLHcpLHcuYz1PKG4sdykse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1PKHQrPSIiLF8pO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPUModCs9IiIsbW8pO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1PKHQrPSIiLHcpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPUModCx5byk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fSgpLGJvPXZvLnV0Y0Zvcm1hdCxfbz12by51dGNQYXJzZX0oe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KSxEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ3x8Ym8oIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLCtuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIil8fF9vKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTt2YXIgamE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxuPW5ldyBBcnJheShlKSxyPTA7cjxlOyluW3JdPSIjIit0LnNsaWNlKDYqciw2Kisrcik7cmV0dXJuIG59LFBhPShqYSgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksamEoIjdmYzk3ZmJlYWVkNGZkYzA4NmZmZmY5OTM4NmNiMGYwMDI3ZmJmNWIxNzY2NjY2NiIpLGphKCIxYjllNzdkOTVmMDI3NTcwYjNlNzI5OGE2NmE2MWVlNmFiMDJhNjc2MWQ2NjY2NjYiKSxqYSgiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4IiksamEoImZiYjRhZWIzY2RlM2NjZWJjNWRlY2JlNGZlZDlhNmZmZmZjY2U1ZDhiZGZkZGFlY2YyZjJmMiIpLGphKCJiM2UyY2RmZGNkYWNjYmQ1ZThmNGNhZTRlNmY1YzlmZmYyYWVmMWUyY2NjY2NjY2MiKSxqYSgiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5IiksamEoIjY2YzJhNWZjOGQ2MjhkYTBjYmU3OGFjM2E2ZDg1NGZmZDkyZmU1YzQ5NGIzYjNiMyIpLGphKCI4ZGQzYzdmZmZmYjNiZWJhZGFmYjgwNzI4MGIxZDNmZGI0NjJiM2RlNjlmY2NkZTVkOWQ5ZDliYzgwYmRjY2ViYzVmZmVkNmYiKSxmdW5jdGlvbih0KXtyZXR1cm4gc24odFt0Lmxlbmd0aC0xXSl9KTtmdW5jdGlvbiBNYSh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX1QYShuZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoamEpKSxTbihHZSgzMDAsLjUsMCksR2UoLTI0MCwuNSwxKSksU24oR2UoLTEwMCwuNzUsLjM1KSxHZSg4MCwxLjUsLjgpKSxTbihHZSgyNjAsLjc1LC4zNSksR2UoODAsMS41LC44KSksR2UoKSxnZSgpLE1hdGgsTWF0aCxNYShqYSgiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLE1hKGphKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksTWEoamEoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxNYShqYSgiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpO3ZhciBOYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LFJhPU1hdGguYWJzLERhPU1hdGguYXRhbjIsTGE9TWF0aC5jb3MsRmE9TWF0aC5tYXgsVmE9TWF0aC5taW4sVWE9TWF0aC5zaW4semE9TWF0aC5zcXJ0LEJhPTFlLTEyLEhhPU1hdGguUEksV2E9SGEvMixxYT0yKkhhO2Z1bmN0aW9uIFlhKHQpe3JldHVybiB0Pj0xP1dhOnQ8PS0xPy1XYTpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gR2EodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gUWEodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gS2EodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBaYSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBYYSh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiAkYSh0LGUsbixyLGksbyxhKXt2YXIgcz10LW4sdT1lLXIsbD0oYT9vOi1vKS96YShzKnMrdSp1KSxjPWwqdSxmPS1sKnMsaD10K2MsZD1lK2YscD1uK2MsbT1yK2YseT0oaCtwKS8yLGc9KGQrbSkvMix2PXAtaCxiPW0tZCxfPXYqditiKmIsdz1pLW8seD1oKm0tcCpkLE89KGI8MD8tMToxKSp6YShGYSgwLHcqdypfLXgqeCkpLEM9KHgqYi12Kk8pL18sUz0oLXgqdi1iKk8pL18sRT0oeCpiK3YqTykvXyxrPSgteCp2K2IqTykvXyxUPUMteSxJPVMtZyxBPUUteSxqPWstZztyZXR1cm4gVCpUK0kqST5BKkEraipqJiYoQz1FLFM9aykse2N4OkMsY3k6Uyx4MDE6LWMseTAxOi1mLHgxMTpDKihpL3ctMSkseTExOlMqKGkvdy0xKX19dmFyIEphPWZ1bmN0aW9uKCl7dmFyIHQ9R2EsZT1RYSxuPU5hKDApLHI9bnVsbCxpPUthLG89WmEsYT1YYSxzPW51bGw7ZnVuY3Rpb24gdSgpe3ZhciB1LGwsYyxmPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLVdhLHA9by5hcHBseSh0aGlzLGFyZ3VtZW50cyktV2EsbT1SYShwLWQpLHk9cD5kO2lmKHN8fChzPXU9YnIoKSksaDxmJiYobD1oLGg9ZixmPWwpLGg+QmEpaWYobT5xYS1CYSlzLm1vdmVUbyhoKkxhKGQpLGgqVWEoZCkpLHMuYXJjKDAsMCxoLGQscCwheSksZj5CYSYmKHMubW92ZVRvKGYqTGEocCksZipVYShwKSkscy5hcmMoMCwwLGYscCxkLHkpKTtlbHNle3ZhciBnLHYsYj1kLF89cCx3PWQseD1wLE89bSxDPW0sUz1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLEU9Uz5CYSYmKHI/K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnphKGYqZitoKmgpKSxrPVZhKFJhKGgtZikvMiwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFQ9ayxJPWs7aWYoRT5CYSl7dmFyIEE9WWEoRS9mKlVhKFMpKSxqPVlhKEUvaCpVYShTKSk7KE8tPTIqQSk+QmE/KHcrPUEqPXk/MTotMSx4LT1BKTooTz0wLHc9eD0oZCtwKS8yKSwoQy09MipqKT5CYT8oYis9aio9eT8xOi0xLF8tPWopOihDPTAsYj1fPShkK3ApLzIpfXZhciBQPWgqTGEoYiksTT1oKlVhKGIpLE49ZipMYSh4KSxSPWYqVWEoeCk7aWYoaz5CYSl7dmFyIEQ9aCpMYShfKSxMPWgqVWEoXyksRj1mKkxhKHcpLFY9ZipVYSh3KTtpZihtPEhhKXt2YXIgVT1PPkJhP2Z1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyl7dmFyIHU9Ri1QLGw9Vi1NLGM9YS1ELGY9cy1MLGg9KGMqKE0tTCktZiooUC1EKSkvKGYqdS1jKmwpO3JldHVybltQK2gqdSxNK2gqbF19KDAsMCwwLDAsMCwwLE4sUik6W04sUl0sej1QLVVbMF0sQj1NLVVbMV0sSD1ELVVbMF0sVz1MLVVbMV0scT0xL1VhKCgoYz0oeipIK0IqVykvKHphKHoqeitCKkIpKnphKEgqSCtXKlcpKSk+MT8wOmM8LTE/SGE6TWF0aC5hY29zKGMpKS8yKSxZPXphKFVbMF0qVVswXStVWzFdKlVbMV0pO1Q9VmEoaywoZi1ZKS8ocS0xKSksST1WYShrLChoLVkpLyhxKzEpKX19Qz5CYT9JPkJhPyhnPSRhKEYsVixQLE0saCxJLHkpLHY9JGEoRCxMLE4sUixoLEkseSkscy5tb3ZlVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxJPGs/cy5hcmMoZy5jeCxnLmN5LEksRGEoZy55MDEsZy54MDEpLERhKHYueTAxLHYueDAxKSwheSk6KHMuYXJjKGcuY3gsZy5jeSxJLERhKGcueTAxLGcueDAxKSxEYShnLnkxMSxnLngxMSksIXkpLHMuYXJjKDAsMCxoLERhKGcuY3krZy55MTEsZy5jeCtnLngxMSksRGEodi5jeSt2LnkxMSx2LmN4K3YueDExKSwheSkscy5hcmModi5jeCx2LmN5LEksRGEodi55MTEsdi54MTEpLERhKHYueTAxLHYueDAxKSwheSkpKToocy5tb3ZlVG8oUCxNKSxzLmFyYygwLDAsaCxiLF8sIXkpKTpzLm1vdmVUbyhQLE0pLGY+QmEmJk8+QmE/VD5CYT8oZz0kYShOLFIsRCxMLGYsLVQseSksdj0kYShQLE0sRixWLGYsLVQseSkscy5saW5lVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxUPGs/cy5hcmMoZy5jeCxnLmN5LFQsRGEoZy55MDEsZy54MDEpLERhKHYueTAxLHYueDAxKSwheSk6KHMuYXJjKGcuY3gsZy5jeSxULERhKGcueTAxLGcueDAxKSxEYShnLnkxMSxnLngxMSksIXkpLHMuYXJjKDAsMCxmLERhKGcuY3krZy55MTEsZy5jeCtnLngxMSksRGEodi5jeSt2LnkxMSx2LmN4K3YueDExKSx5KSxzLmFyYyh2LmN4LHYuY3ksVCxEYSh2LnkxMSx2LngxMSksRGEodi55MDEsdi54MDEpLCF5KSkpOnMuYXJjKDAsMCxmLHgsdyx5KTpzLmxpbmVUbyhOLFIpfWVsc2Ugcy5tb3ZlVG8oMCwwKTtpZihzLmNsb3NlUGF0aCgpLHUpcmV0dXJuIHM9bnVsbCx1KyIifHxudWxsfXJldHVybiB1LmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLUhhLzI7cmV0dXJuW0xhKHIpKm4sVWEocikqbl19LHUuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpOYSgrZSksdSk6dH0sdS5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTplfSx1LmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTpufSx1LnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSgrdCksdSk6cn0sdS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmEoK3QpLHUpOml9LHUuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSgrdCksdSk6b30sdS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTphfSx1LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsdSk6c30sdX07ZnVuY3Rpb24gdHModCl7dGhpcy5fY29udGV4dD10fXRzLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciBlcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHRzKHQpfTtmdW5jdGlvbiBucyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBycyh0KXtyZXR1cm4gdFsxXX12YXIgaXM9ZnVuY3Rpb24oKXt2YXIgdD1ucyxlPXJzLG49TmEoITApLHI9bnVsbCxpPWVzLG89bnVsbDtmdW5jdGlvbiBhKGEpe3ZhciBzLHUsbCxjPWEubGVuZ3RoLGY9ITE7Zm9yKG51bGw9PXImJihvPWkobD1icigpKSkscz0wO3M8PWM7KytzKSEoczxjJiZuKHU9YVtzXSxzLGEpKT09PWYmJigoZj0hZik/by5saW5lU3RhcnQoKTpvLmxpbmVFbmQoKSksZiYmby5wb2ludCgrdCh1LHMsYSksK2UodSxzLGEpKTtpZihsKXJldHVybiBvPW51bGwsbCsiInx8bnVsbH1yZXR1cm4gYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TmEoK2UpLGEpOnR9LGEueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSxhKTplfSxhLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSghIXQpLGEpOm59LGEuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxudWxsIT1yJiYobz1pKHIpKSxhKTppfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1vPW51bGw6bz1pKHI9dCksYSk6cn0sYX0sb3M9ZnVuY3Rpb24oKXt2YXIgdD1ucyxlPW51bGwsbj1OYSgwKSxyPXJzLGk9TmEoITApLG89bnVsbCxhPWVzLHM9bnVsbDtmdW5jdGlvbiB1KHUpe3ZhciBsLGMsZixoLGQscD11Lmxlbmd0aCxtPSExLHk9bmV3IEFycmF5KHApLGc9bmV3IEFycmF5KHApO2ZvcihudWxsPT1vJiYocz1hKGQ9YnIoKSkpLGw9MDtsPD1wOysrbCl7aWYoIShsPHAmJmkoaD11W2xdLGwsdSkpPT09bSlpZihtPSFtKWM9bCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxmPWwtMTtmPj1jOy0tZilzLnBvaW50KHlbZl0sZ1tmXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9bSYmKHlbbF09K3QoaCxsLHUpLGdbbF09K24oaCxsLHUpLHMucG9pbnQoZT8rZShoLGwsdSk6eVtsXSxyPytyKGgsbCx1KTpnW2xdKSl9aWYoZClyZXR1cm4gcz1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gbCgpe3JldHVybiBpcygpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gdS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246TmEoK24pLGU9bnVsbCx1KTp0fSx1LngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TmEoK2UpLHUpOnR9LHUueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmEoK3QpLHUpOmV9LHUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSxyPW51bGwsdSk6bn0sdS55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTpufSx1LnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTpyfSx1LmxpbmVYMD11LmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBsKCkueCh0KS55KG4pfSx1LmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBsKCkueCh0KS55KHIpfSx1LmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBsKCkueChlKS55KG4pfSx1LmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSghIXQpLHUpOml9LHUuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxudWxsIT1vJiYocz1hKG8pKSx1KTphfSx1LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz1zPW51bGw6cz1hKG89dCksdSk6b30sdX07ZnVuY3Rpb24gYXModCl7dGhpcy5fY3VydmU9dH1hcy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9jdXJ2ZS5wb2ludChlKk1hdGguc2luKHQpLGUqLU1hdGguY29zKHQpKX19LEFycmF5LE1hdGguc3FydCgxLzMpLE1hdGguc2luKEhhLzEwKSxNYXRoLnNpbig3KkhhLzEwKTt2YXIgc3M9KE1hdGguc2luKHFhLzEwKSxNYXRoLmNvcyhxYS8xMCksTWF0aC5zcXJ0KDMpLE1hdGguc3FydCgzKSxNYXRoLnNxcnQoMTIpLGZ1bmN0aW9uKCl7fSk7ZnVuY3Rpb24gdXModCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK24pLzYpfWZ1bmN0aW9uIGxzKHQpe3RoaXMuX2NvbnRleHQ9dH1scy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOnVzKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OnVzKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fTt2YXIgY3M9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBscyh0KX07ZnVuY3Rpb24gZnModCxlKXt0aGlzLl9iYXNpcz1uZXcgbHModCksdGhpcy5fYmV0YT1lfWZ1bmN0aW9uIGhzKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gZHModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWZ1bmN0aW9uIHBzKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1mdW5jdGlvbiBtcyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9ZnVuY3Rpb24geXModCxlLG4pe3ZhciByPXQuX3gxLGk9dC5feTEsbz10Ll94MixhPXQuX3kyO2lmKHQuX2wwMV9hPkJhKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSx1PTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtyPShyKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvdSxpPShpKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvdX1pZih0Ll9sMjNfYT5CYSl7dmFyIGw9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsYz0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7bz0obypsK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvYyxhPShhKmwrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9jfXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyLGksbyxhLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBncyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfWZ1bmN0aW9uIHZzKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9ZnVuY3Rpb24gYnModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1mdW5jdGlvbiBfcyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gd3ModCxlLG4pe3ZhciByPXQuX3gxLXQuX3gwLGk9ZS10Ll94MSxvPSh0Ll95MS10Ll95MCkvKHJ8fGk8MCYmLTApLGE9KG4tdC5feTEpLyhpfHxyPDAmJi0wKSxzPShvKmkrYSpyKS8ocitpKTtyZXR1cm4oX3MobykrX3MoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiB4cyh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gT3ModCxlLG4pe3ZhciByPXQuX3gwLGk9dC5feDEsbz10Ll95MSxhPShpLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrYSx0Ll95MCthKmUsaS1hLG8tYSpuLGksbyl9ZnVuY3Rpb24gQ3ModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFNzKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBFcygpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIGtzKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gVHModCxlKXt2YXIgbj1lLHI9ZS5SLGk9bi5VO2k/aS5MPT09bj9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxuLlU9cixuLlI9ci5MLG4uUiYmKG4uUi5VPW4pLHIuTD1ufWZ1bmN0aW9uIElzKHQsZSl7dmFyIG49ZSxyPWUuTCxpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5MPXIuUixuLkwmJihuLkwuVT1uKSxyLlI9bn1mdW5jdGlvbiBBcyh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnMucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgcixpPXRbMF0sbz1lWzBdLGE9dFtuXS1pLHM9ZVtuXS1vLHU9LTE7Kyt1PD1uOyl0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbdV0rKDEtdGhpcy5fYmV0YSkqKGkrKHI9dS9uKSphKSx0aGlzLl9iZXRhKmVbdV0rKDEtdGhpcy5fYmV0YSkqKG8rcipzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMT09PWU/bmV3IGxzKHQpOm5ldyBmcyh0LGUpfXJldHVybiBuLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguODUpLGRzLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpocyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6aHModGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IGRzKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApLHBzLnByb3RvdHlwZT17YXJlYVN0YXJ0OnNzLGFyZWFFbmQ6c3MsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpocyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgcHModCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCksbXMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6aHModGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IG1zKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApLGdzLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6eXModGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IGdzKHQsZSk6bmV3IGRzKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSksdnMucHJvdG90eXBlPXthcmVhU3RhcnQ6c3MsYXJlYUVuZDpzcyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDp5cyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgdnModCxlKTpuZXcgcHModCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KSxicy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6eXModGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IGJzKHQsZSk6bmV3IG1zKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSksQ3MucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOk9zKHRoaXMsdGhpcy5fdDAseHModGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLE9zKHRoaXMseHModGhpcyxuPXdzKHRoaXMsdCxlKSksbik7YnJlYWs7ZGVmYXVsdDpPcyh0aGlzLHRoaXMuX3QwLG49d3ModGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9bn19fSwoKGZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRleHQ9bmV3IFNzKHQpfSkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQ3MucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtDcy5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LFNzLnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixyLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxyLG4sbyxpKX19LEVzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RXMsaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1Bcyh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KHI9bi5VKS5MPyhpPXIuUikmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uUiYmKFRzKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLElzKHRoaXMscikpOihpPXIuTCkmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uTCYmKElzKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLFRzKHRoaXMscikpLG49dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxuLHIsaT10LlUsbz10LkwsYT10LlI7aWYobj1vP2E/QXMoYSk6bzphLGk/aS5MPT09dD9pLkw9bjppLlI9bjp0aGlzLl89bixvJiZhPyhyPW4uQyxuLkM9dC5DLG4uTD1vLG8uVT1uLG4hPT1hPyhpPW4uVSxuLlU9dC5VLGkuTD10PW4uUixuLlI9YSxhLlU9bik6KG4uVT1pLGk9bix0PW4uUikpOihyPXQuQyx0PW4pLHQmJih0LlU9aSksIXIpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYoKGU9aS5SKS5DJiYoZS5DPSExLGkuQz0hMCxUcyh0aGlzLGkpLGU9aS5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLElzKHRoaXMsZSksZT1pLlIpLGUuQz1pLkMsaS5DPWUuUi5DPSExLFRzKHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9aS5MKS5DJiYoZS5DPSExLGkuQz0hMCxJcyh0aGlzLGkpLGU9aS5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLFRzKHRoaXMsZSksZT1pLkwpLGUuQz1pLkMsaS5DPWUuTC5DPSExLElzKHRoaXMsaSksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIganM9RXM7ZnVuY3Rpb24gUHModCxlLG4scil7dmFyIGk9W251bGwsbnVsbF0sbz10dS5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD10LGkucmlnaHQ9ZSxuJiZOcyhpLHQsZSxuKSxyJiZOcyhpLGUsdCxyKSwkc1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSwkc1tlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIE1zKHQsZSxuKXt2YXIgcj1bZSxuXTtyZXR1cm4gci5sZWZ0PXQscn1mdW5jdGlvbiBOcyh0LGUsbixyKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1yOnRbMF09cjoodFswXT1yLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24gUnModCxlLG4scixpKXt2YXIgbyxhPXRbMF0scz10WzFdLHU9YVswXSxsPWFbMV0sYz0wLGY9MSxoPXNbMF0tdSxkPXNbMV0tbDtpZihvPWUtdSxofHwhKG8+MCkpe2lmKG8vPWgsaDwwKXtpZihvPGMpcmV0dXJuO288ZiYmKGY9byl9ZWxzZSBpZihoPjApe2lmKG8+ZilyZXR1cm47bz5jJiYoYz1vKX1pZihvPXItdSxofHwhKG88MCkpe2lmKG8vPWgsaDwwKXtpZihvPmYpcmV0dXJuO28+YyYmKGM9byl9ZWxzZSBpZihoPjApe2lmKG88YylyZXR1cm47bzxmJiYoZj1vKX1pZihvPW4tbCxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPGMpcmV0dXJuO288ZiYmKGY9byl9ZWxzZSBpZihkPjApe2lmKG8+ZilyZXR1cm47bz5jJiYoYz1vKX1pZihvPWktbCxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPmYpcmV0dXJuO28+YyYmKGM9byl9ZWxzZSBpZihkPjApe2lmKG88YylyZXR1cm47bzxmJiYoZj1vKX1yZXR1cm4hKGM+MHx8ZjwxKXx8KGM+MCYmKHRbMF09W3UrYypoLGwrYypkXSksZjwxJiYodFsxXT1bdStmKmgsbCtmKmRdKSwhMCl9fX19fWZ1bmN0aW9uIERzKHQsZSxuLHIsaSl7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciBhLHMsdT10WzBdLGw9dC5sZWZ0LGM9dC5yaWdodCxmPWxbMF0saD1sWzFdLGQ9Y1swXSxwPWNbMV0sbT0oZitkKS8yLHk9KGgrcCkvMjtpZihwPT09aCl7aWYobTxlfHxtPj1yKXJldHVybjtpZihmPmQpe2lmKHUpe2lmKHVbMV0+PWkpcmV0dXJufWVsc2UgdT1bbSxuXTtvPVttLGldfWVsc2V7aWYodSl7aWYodVsxXTxuKXJldHVybn1lbHNlIHU9W20saV07bz1bbSxuXX19ZWxzZSBpZihzPXktKGE9KGYtZCkvKHAtaCkpKm0sYTwtMXx8YT4xKWlmKGY+ZCl7aWYodSl7aWYodVsxXT49aSlyZXR1cm59ZWxzZSB1PVsobi1zKS9hLG5dO289WyhpLXMpL2EsaV19ZWxzZXtpZih1KXtpZih1WzFdPG4pcmV0dXJufWVsc2UgdT1bKGktcykvYSxpXTtvPVsobi1zKS9hLG5dfWVsc2UgaWYoaDxwKXtpZih1KXtpZih1WzBdPj1yKXJldHVybn1lbHNlIHU9W2UsYSplK3NdO289W3IsYSpyK3NdfWVsc2V7aWYodSl7aWYodVswXTxlKXJldHVybn1lbHNlIHU9W3IsYSpyK3NdO289W2UsYSplK3NdfXJldHVybiB0WzBdPXUsdFsxXT1vLCEwfWZ1bmN0aW9uIExzKHQsZSl7dmFyIG49dC5zaXRlLHI9ZS5sZWZ0LGk9ZS5yaWdodDtyZXR1cm4gbj09PWkmJihpPXIscj1uKSxpP01hdGguYXRhbjIoaVsxXS1yWzFdLGlbMF0tclswXSk6KG49PT1yPyhyPWVbMV0saT1lWzBdKToocj1lWzBdLGk9ZVsxXSksTWF0aC5hdGFuMihyWzBdLWlbMF0saVsxXS1yWzFdKSl9ZnVuY3Rpb24gRnModCxlKXtyZXR1cm4gZVsrKGUubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIFZzKHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQ9PT10LnNpdGUpXX12YXIgVXMsenM9W107ZnVuY3Rpb24gQnModCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciByPWUuc2l0ZSxpPXQuc2l0ZSxvPW4uc2l0ZTtpZihyIT09byl7dmFyIGE9aVswXSxzPWlbMV0sdT1yWzBdLWEsbD1yWzFdLXMsYz1vWzBdLWEsZj1vWzFdLXMsaD0yKih1KmYtbCpjKTtpZighKGg+PS1udSkpe3ZhciBkPXUqdStsKmwscD1jKmMrZipmLG09KGYqZC1sKnApL2gseT0odSpwLWMqZCkvaCxnPXpzLnBvcCgpfHxuZXcgZnVuY3Rpb24oKXtrcyh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9O2cuYXJjPXQsZy5zaXRlPWksZy54PW0rYSxnLnk9KGcuY3k9eStzKStNYXRoLnNxcnQobSptK3kqeSksdC5jaXJjbGU9Zztmb3IodmFyIHY9bnVsbCxiPUpzLl87YjspaWYoZy55PGIueXx8Zy55PT09Yi55JiZnLng8PWIueCl7aWYoIWIuTCl7dj1iLlA7YnJlYWt9Yj1iLkx9ZWxzZXtpZighYi5SKXt2PWI7YnJlYWt9Yj1iLlJ9SnMuaW5zZXJ0KHYsZyksdnx8KFVzPWcpfX19fWZ1bmN0aW9uIEhzKHQpe3ZhciBlPXQuY2lyY2xlO2UmJihlLlB8fChVcz1lLk4pLEpzLnJlbW92ZShlKSx6cy5wdXNoKGUpLGtzKGUpLHQuY2lyY2xlPW51bGwpfXZhciBXcz1bXTtmdW5jdGlvbiBxcyh0KXt2YXIgZT1Xcy5wb3AoKXx8bmV3IGZ1bmN0aW9uKCl7a3ModGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfTtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiBZcyh0KXtIcyh0KSxYcy5yZW1vdmUodCksV3MucHVzaCh0KSxrcyh0KX1mdW5jdGlvbiBHcyh0KXt2YXIgZT10LmNpcmNsZSxuPWUueCxyPWUuY3ksaT1bbixyXSxvPXQuUCxhPXQuTixzPVt0XTtZcyh0KTtmb3IodmFyIHU9bzt1LmNpcmNsZSYmTWF0aC5hYnMobi11LmNpcmNsZS54KTxldSYmTWF0aC5hYnMoci11LmNpcmNsZS5jeSk8ZXU7KW89dS5QLHMudW5zaGlmdCh1KSxZcyh1KSx1PW87cy51bnNoaWZ0KHUpLEhzKHUpO2Zvcih2YXIgbD1hO2wuY2lyY2xlJiZNYXRoLmFicyhuLWwuY2lyY2xlLngpPGV1JiZNYXRoLmFicyhyLWwuY2lyY2xlLmN5KTxldTspYT1sLk4scy5wdXNoKGwpLFlzKGwpLGw9YTtzLnB1c2gobCksSHMobCk7dmFyIGMsZj1zLmxlbmd0aDtmb3IoYz0xO2M8ZjsrK2MpTnMoKGw9c1tjXSkuZWRnZSwodT1zW2MtMV0pLnNpdGUsbC5zaXRlLGkpOyhsPXNbZi0xXSkuZWRnZT1QcygodT1zWzBdKS5zaXRlLGwuc2l0ZSxudWxsLGkpLEJzKHUpLEJzKGwpfWZ1bmN0aW9uIFFzKHQpe2Zvcih2YXIgZSxuLHIsaSxvPXRbMF0sYT10WzFdLHM9WHMuXztzOylpZigocj1LcyhzLGEpLW8pPmV1KXM9cy5MO2Vsc2V7aWYoISgoaT1vLVpzKHMsYSkpPmV1KSl7cj4tZXU/KGU9cy5QLG49cyk6aT4tZXU/KGU9cyxuPXMuTik6ZT1uPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfSFmdW5jdGlvbih0KXskc1t0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19KHQpO3ZhciB1PXFzKHQpO2lmKFhzLmluc2VydChlLHUpLGV8fG4pe2lmKGU9PT1uKXJldHVybiBIcyhlKSxuPXFzKGUuc2l0ZSksWHMuaW5zZXJ0KHUsbiksdS5lZGdlPW4uZWRnZT1QcyhlLnNpdGUsdS5zaXRlKSxCcyhlKSx2b2lkIEJzKG4pO2lmKG4pe0hzKGUpLEhzKG4pO3ZhciBsPWUuc2l0ZSxjPWxbMF0sZj1sWzFdLGg9dFswXS1jLGQ9dFsxXS1mLHA9bi5zaXRlLG09cFswXS1jLHk9cFsxXS1mLGc9MiooaCp5LWQqbSksdj1oKmgrZCpkLGI9bSptK3kqeSxfPVsoeSp2LWQqYikvZytjLChoKmItbSp2KS9nK2ZdO05zKG4uZWRnZSxsLHAsXyksdS5lZGdlPVBzKGwsdCxudWxsLF8pLG4uZWRnZT1Qcyh0LHAsbnVsbCxfKSxCcyhlKSxCcyhuKX1lbHNlIHUuZWRnZT1QcyhlLnNpdGUsdS5zaXRlKX19ZnVuY3Rpb24gS3ModCxlKXt2YXIgbj10LnNpdGUscj1uWzBdLGk9blsxXSxvPWktZTtpZighbylyZXR1cm4gcjt2YXIgYT10LlA7aWYoIWEpcmV0dXJuLTEvMDt2YXIgcz0obj1hLnNpdGUpWzBdLHU9blsxXSxsPXUtZTtpZighbClyZXR1cm4gczt2YXIgYz1zLXIsZj0xL28tMS9sLGg9Yy9sO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZiooYypjLygtMipsKS11K2wvMitpLW8vMikpKS9mK3I6KHIrcykvMn1mdW5jdGlvbiBacyh0LGUpe3ZhciBuPXQuTjtpZihuKXJldHVybiBLcyhuLGUpO3ZhciByPXQuc2l0ZTtyZXR1cm4gclsxXT09PWU/clswXToxLzB9dmFyIFhzLCRzLEpzLHR1LGV1PTFlLTYsbnU9MWUtMTI7ZnVuY3Rpb24gcnUodCxlKXtyZXR1cm4gZVsxXS10WzFdfHxlWzBdLXRbMF19ZnVuY3Rpb24gaXUodCxlKXt2YXIgbixyLGksbz10LnNvcnQocnUpLnBvcCgpO2Zvcih0dT1bXSwkcz1uZXcgQXJyYXkodC5sZW5ndGgpLFhzPW5ldyBqcyxKcz1uZXcganM7OylpZihpPVVzLG8mJighaXx8b1sxXTxpLnl8fG9bMV09PT1pLnkmJm9bMF08aS54KSlvWzBdPT09biYmb1sxXT09PXJ8fChRcyhvKSxuPW9bMF0scj1vWzFdKSxvPXQucG9wKCk7ZWxzZXtpZighaSlicmVhaztHcyhpLmFyYyl9aWYoZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuLHIsaT0wLG89JHMubGVuZ3RoO2k8bzsrK2kpaWYoKHQ9JHNbaV0pJiYocj0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxyOysrbilhW25dPW4sc1tuXT1Mcyh0LHR1W2Vbbl1dKTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNbZV0tc1t0XX0pLG49MDtuPHI7KytuKXNbbl09ZVthW25dXTtmb3Iobj0wO248cjsrK24pZVtuXT1zW25dfX0oKSxlKXt2YXIgYT0rZVswXVswXSxzPStlWzBdWzFdLHU9K2VbMV1bMF0sbD0rZVsxXVsxXTshZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpLG89dHUubGVuZ3RoO28tLTspRHMoaT10dVtvXSx0LGUsbixyKSYmUnMoaSx0LGUsbixyKSYmKE1hdGguYWJzKGlbMF1bMF0taVsxXVswXSk+ZXV8fE1hdGguYWJzKGlbMF1bMV0taVsxXVsxXSk+ZXUpfHxkZWxldGUgdHVbb119KGEscyx1LGwpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLG8sYSxzLHUsbCxjLGYsaCxkLHAsbSx5PSRzLmxlbmd0aCxnPSEwO2ZvcihpPTA7aTx5OysraSlpZihvPSRzW2ldKXtmb3IoYT1vLnNpdGUscz0odT1vLmhhbGZlZGdlcykubGVuZ3RoO3MtLTspdHVbdVtzXV18fHUuc3BsaWNlKHMsMSk7Zm9yKHM9MCxsPXUubGVuZ3RoO3M8bDspcD0oZD1WcyhvLHR1W3Vbc11dKSlbMF0sbT1kWzFdLGY9KGM9RnMobyx0dVt1WysrcyVsXV0pKVswXSxoPWNbMV0sKE1hdGguYWJzKHAtZik+ZXV8fE1hdGguYWJzKG0taCk+ZXUpJiYodS5zcGxpY2UocywwLHR1LnB1c2goTXMoYSxkLE1hdGguYWJzKHAtdCk8ZXUmJnItbT5ldT9bdCxNYXRoLmFicyhmLXQpPGV1P2g6cl06TWF0aC5hYnMobS1yKTxldSYmbi1wPmV1P1tNYXRoLmFicyhoLXIpPGV1P2Y6bixyXTpNYXRoLmFicyhwLW4pPGV1JiZtLWU+ZXU/W24sTWF0aC5hYnMoZi1uKTxldT9oOmVdOk1hdGguYWJzKG0tZSk8ZXUmJnAtdD5ldT9bTWF0aC5hYnMoaC1lKTxldT9mOnQsZV06bnVsbCkpLTEpLCsrbCk7bCYmKGc9ITEpfWlmKGcpe3ZhciB2LGIsXyx3PTEvMDtmb3IoaT0wLGc9bnVsbDtpPHk7KytpKShvPSRzW2ldKSYmKF89KHY9KGE9by5zaXRlKVswXS10KSp2KyhiPWFbMV0tZSkqYik8dyYmKHc9XyxnPW8pO2lmKGcpe3ZhciB4PVt0LGVdLE89W3Qscl0sQz1bbixyXSxTPVtuLGVdO2cuaGFsZmVkZ2VzLnB1c2godHUucHVzaChNcyhhPWcuc2l0ZSx4LE8pKS0xLHR1LnB1c2goTXMoYSxPLEMpKS0xLHR1LnB1c2goTXMoYSxDLFMpKS0xLHR1LnB1c2goTXMoYSxTLHgpKS0xKX19Zm9yKGk9MDtpPHk7KytpKShvPSRzW2ldKSYmKG8uaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlICRzW2ldKX0oYSxzLHUsbCl9dGhpcy5lZGdlcz10dSx0aGlzLmNlbGxzPSRzLFhzPUpzPXR1PSRzPW51bGx9ZnVuY3Rpb24gb3UodCxlLG4pe3RoaXMuaz10LHRoaXMueD1lLHRoaXMueT1ufWZ1bmN0aW9uIGF1KHQsZSxuKXt2YXIgcixpPUt0KHQpLG89TWF0aC5taW4ocGFyc2VJbnQoaS5zdHlsZSgid2lkdGgiKSkscGFyc2VJbnQoaS5zdHlsZSgiaGVpZ2h0IikpKS8yLGE9cGFyc2VJbnQoaS5zdHlsZSgid2lkdGgiKSkvMi1vLHM9cGFyc2VJbnQoaS5zdHlsZSgiaGVpZ2h0IikpLzItbyx1PU1hdGgubWF4KG4ubWluVmFsdWUsTWF0aC5taW4obi5tYXhWYWx1ZSxlKSkvbi5tYXhWYWx1ZSxsPU1hdGguZmxvb3IoMTAwKk1hdGgucmFuZG9tKCkpKzE7cj1uLndhdmVIZWlnaHRTY2FsaW5nP0dpKCkucmFuZ2UoWzAsbi53YXZlSGVpZ2h0LDBdKS5kb21haW4oWzAsNTAsMTAwXSk6R2koKS5yYW5nZShbbi53YXZlSGVpZ2h0LG4ud2F2ZUhlaWdodF0pLmRvbWFpbihbMCwxMDBdKTt2YXIgYz1uLnRleHRTaXplKm8vMixmPXBhcnNlRmxvYXQoZSkudG9GaXhlZCgyKSxoPW4udmFsdWVDb3VudFVwP24ubWluVmFsdWU6ZixkPW4uZGlzcGxheVBlcmNlbnQ/bi5jdXN0b21QZXJjZW50OiIiLHA9bi5jaXJjbGVUaGlja25lc3MqbyxtPXArbi5jaXJjbGVGaWxsR2FwKm8seT1vLW0sZz15KnIoMTAwKnUpLHY9MStuLndhdmVDb3VudCxiPTIqeS9uLndhdmVDb3VudCp2LF89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCl9O3BhcnNlRmxvYXQoZikhPXBhcnNlRmxvYXQoXyhmKSkmJihfPWZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpLnRvRml4ZWQoMSl9KSxwYXJzZUZsb2F0KGYpIT1wYXJzZUZsb2F0KF8oZikpJiYoXz1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KS50b0ZpeGVkKDIpfSk7Zm9yKHZhciB3PVtdLHg9MDt4PD00MCp2O3grKyl3LnB1c2goe3g6eC8oNDAqdikseTp4LzQwfSk7dmFyIE89R2koKS5yYW5nZShbMCwyKk1hdGguUEldKS5kb21haW4oWzAsMV0pLEM9R2koKS5yYW5nZShbMCxvXSkuZG9tYWluKFswLG9dKSxTPUdpKCkucmFuZ2UoWzAsYl0pLmRvbWFpbihbMCwxXSksRT1HaSgpLnJhbmdlKFswLGddKS5kb21haW4oWzAsMV0pLGs9R2koKS5yYW5nZShbbSsyKnkrZyxtLWddKS5kb21haW4oWzAsMV0pLFQ9R2koKS5yYW5nZShbMCxiLTIqeV0pLmRvbWFpbihbMCwxXSksST1HaSgpLnJhbmdlKFttKzIqeSxtKy43KmNdKS5kb21haW4oWzAsMV0pLEE9aS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithKyIsIitzKyIpIiksaj1KYSgpLnN0YXJ0QW5nbGUoTygwKSkuZW5kQW5nbGUoTygxKSkub3V0ZXJSYWRpdXMoQyhvKSkuaW5uZXJSYWRpdXMoQyhvLXApKTtBLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGopLnN0eWxlKCJmaWxsIixuLmNpcmNsZUNvbG9yKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIitvKyIpIik7dmFyIFA9QS5hcHBlbmQoInRleHQiKS50ZXh0KF8oaCkrZCkuYXR0cigiY2xhc3MiLCJsaXF1aWRGaWxsR2F1Z2VUZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmb250LXNpemUiLGMrInB4Iikuc3R5bGUoImZpbGwiLG4udGV4dENvbG9yKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIitJKG4udGV4dFZlcnRQb3NpdGlvbikrIikiKSxNPW9zKCkueChmdW5jdGlvbih0KXtyZXR1cm4gUyh0LngpfSkueTAoZnVuY3Rpb24odCl7cmV0dXJuIEUoTWF0aC5zaW4oMipNYXRoLlBJKm4ud2F2ZU9mZnNldCotMSsyKk1hdGguUEkqKDEtbi53YXZlQ291bnQpKzIqdC55Kk1hdGguUEkpKX0pLnkxKGZ1bmN0aW9uKHQpe3JldHVybiAyKnkrZ30pLE49QS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJjbGlwV2F2ZSIrbC50b1N0cmluZygpKSxSPU4uYXBwZW5kKCJwYXRoIikuZGF0dW0odykuYXR0cigiZCIsTSkuYXR0cigiVCIsMCksRD1BLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsInVybCgjY2xpcFdhdmUiK2wudG9TdHJpbmcoKSsiKSIpO0QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsbykuYXR0cigiY3kiLG8pLmF0dHIoInIiLHkpLnN0eWxlKCJmaWxsIixuLndhdmVDb2xvcik7dmFyIEw9RC5hcHBlbmQoInRleHQiKS50ZXh0KF8oaCkrZCkuYXR0cigiY2xhc3MiLCJsaXF1aWRGaWxsR2F1Z2VUZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmb250LXNpemUiLGMrInB4Iikuc3R5bGUoImZpbGwiLG4ud2F2ZVRleHRDb2xvcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCIrSShuLnRleHRWZXJ0UG9zaXRpb24pKyIpIik7aWYobi52YWx1ZUNvdW50VXApe3ZhciBGPWZ1bmN0aW9uKCl7dmFyIHQ9aG4oaCxmKTtyZXR1cm4gZnVuY3Rpb24oZSl7UC50ZXh0KF8odChlKSkrZCksTC50ZXh0KF8odChlKSkrZCl9fTtQLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLEYpLEwudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsRil9dmFyIFY9bSsyKnktYjtmdW5jdGlvbiBVKCl7Ui5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitUKFIuYXR0cigiVCIpKSsiLDApIiksUi50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlQW5pbWF0ZVRpbWUqKDEtUi5hdHRyKCJUIikpKS5lYXNlKGxyKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitUKDEpKyIsMCkiKS5hdHRyKCJUIiwxKS5vbigiZW5kIixmdW5jdGlvbigpe1IuYXR0cigiVCIsMCksVSgpfSl9cmV0dXJuIG4ud2F2ZVJpc2U/Ti5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIsIitrKDApKyIpIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIsIitrKHUpKyIpIikub24oInN0YXJ0IixmdW5jdGlvbigpe1IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDEsMCkiKX0pOk4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVisiLCIrayh1KSsiKSIpLG4ud2F2ZUFuaW1hdGUmJlUoKSx7dXBkYXRlKHQpe3ZhciBlPXBhcnNlRmxvYXQodCkudG9GaXhlZCgyKSxpPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpfTtwYXJzZUZsb2F0KGUpIT1wYXJzZUZsb2F0KGkoZSkpJiYoaT1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KS50b0ZpeGVkKDEpfSkscGFyc2VGbG9hdChlKSE9cGFyc2VGbG9hdChpKGUpKSYmKGk9ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCkudG9GaXhlZCgyKX0pO3ZhciBvPWZ1bmN0aW9uKCl7dmFyIGU9aG4oUC50ZXh0KCkscGFyc2VGbG9hdCh0KS50b0ZpeGVkKDIpKTtyZXR1cm4gZnVuY3Rpb24odCl7UC50ZXh0KGkoZSh0KSkrZCksTC50ZXh0KGkoZSh0KSkrZCl9fTtQLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLG8pLEwudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsbyk7dmFyIGEscz1NYXRoLm1heChuLm1pblZhbHVlLE1hdGgubWluKG4ubWF4VmFsdWUsdCkpL24ubWF4VmFsdWUsdT15KnIoMTAwKnMpLGw9R2koKS5yYW5nZShbbSsyKnkrdSxtLXVdKS5kb21haW4oWzAsMV0pKHMpLGM9R2koKS5yYW5nZShbMCxiXSkuZG9tYWluKFswLDFdKSxmPUdpKCkucmFuZ2UoWzAsdV0pLmRvbWFpbihbMCwxXSk7YT1uLndhdmVIZWlnaHRTY2FsaW5nP0xyLmFyZWEoKS54KGZ1bmN0aW9uKHQpe3JldHVybiBjKHQueCl9KS55MChmdW5jdGlvbih0KXtyZXR1cm4gZihNYXRoLnNpbigyKk1hdGguUEkqbi53YXZlT2Zmc2V0Ki0xKzIqTWF0aC5QSSooMS1uLndhdmVDb3VudCkrMip0LnkqTWF0aC5QSSkpfSkueTEoZnVuY3Rpb24odCl7cmV0dXJuIDIqeSt1fSk6TTt2YXIgaD1uLndhdmVBbmltYXRlP1QoMSk6MDtSLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlQW5pbWF0ZT9uLndhdmVBbmltYXRlVGltZSooMS1SLmF0dHIoIlQiKSk6bi53YXZlUmlzZVRpbWUpLmVhc2UobHIpLmF0dHIoImQiLGEpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2grIiwwKSIpLmF0dHIoIlQiLCIxIikub24oImVuZCIsZnVuY3Rpb24oKXtuLndhdmVBbmltYXRlJiYoUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitUKDApKyIsMCkiKSxVKCkpfSksTi50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1YrIiwiK2wrIikiKX19fWl1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aXUscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIEZzKGUsdFtuXSl9KTtyZXR1cm4gbi5kYXRhPWUuc2l0ZS5kYXRhLG59KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24obixyKXtpZihvPShpPW4uaGFsZmVkZ2VzKS5sZW5ndGgpZm9yKHZhciBpLG8sYSxzLHUsbCxjPW4uc2l0ZSxmPS0xLGg9ZVtpW28tMV1dLGQ9aC5sZWZ0PT09Yz9oLnJpZ2h0OmgubGVmdDsrK2Y8bzspYT1kLGQ9KGg9ZVtpW2ZdXSkubGVmdD09PWM/aC5yaWdodDpoLmxlZnQsYSYmZCYmcjxhLmluZGV4JiZyPGQuaW5kZXgmJigocz1jKVswXS0obD1kKVswXSkqKCh1PWEpWzFdLXNbMV0pLShzWzBdLXVbMF0pKihsWzFdLXNbMV0pPDAmJnQucHVzaChbYy5kYXRhLGEuZGF0YSxkLmRhdGFdKX0pLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJpZ2h0fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLGksbz10aGlzLGE9by5fZm91bmR8fDAscz1vLmNlbGxzLmxlbmd0aDshKGk9by5jZWxsc1thXSk7KWlmKCsrYT49cylyZXR1cm4gbnVsbDt2YXIgdT10LWkuc2l0ZVswXSxsPWUtaS5zaXRlWzFdLGM9dSp1K2wqbDtkb3tpPW8uY2VsbHNbcj1hXSxhPW51bGwsaS5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1vLmVkZ2VzW25dLHM9ci5sZWZ0O2lmKHMhPT1pLnNpdGUmJnN8fChzPXIucmlnaHQpKXt2YXIgdT10LXNbMF0sbD1lLXNbMV0sZj11KnUrbCpsO2Y8YyYmKGM9ZixhPXMuaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1hKTtyZXR1cm4gby5fZm91bmQ9cixudWxsPT1ufHxjPD1uKm4/aS5zaXRlOm51bGx9fSxvdS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm91LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBvdSh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IG91KHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sbmV3IG91KDEsMCwwKTt2YXIgc3U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5keW5fd2lkdGg9NTAwfXJldHVybiB0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdCxlO3RoaXMuZHluX3dpZHRoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkM2NvbnRhaW5lciIpLmNsaWVudFdpZHRoLHQ9S3QoIiNkM3RhcmdldCIpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKCJpZCIsImFuaW1hdGUtZ3JhZGllbnQiKS5hdHRyKCJ4MSIsIjAlIikuYXR0cigieTEiLCIwJSIpLmF0dHIoIngyIiwiMTAwJSIpLmF0dHIoInkyIiwiMCIpLmF0dHIoInNwcmVhZE1ldGhvZCIsInJlZmxlY3QiKSxlPVsiIzAwMWFmZCIsIiM2YjY3ZmMiLCIjNTM5MGUzIiwiIzM1NmNjNiIsIiM1MzkwZTMiLCIjNmI2N2ZjIiwiIzAwMWFmZCJdLHQuc2VsZWN0QWxsKCIuc3RvcCIpLmRhdGEoZSkuZW50ZXIoKS5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4vKGUubGVuZ3RoLTEpfSkuYXR0cigic3RvcC1jb2xvciIsZnVuY3Rpb24odCl7cmV0dXJuIHR9KSx0LmFwcGVuZCgiYW5pbWF0ZSIpLmF0dHIoImF0dHJpYnV0ZU5hbWUiLCJ4MSIpLmF0dHIoInZhbHVlcyIsIjAlOzEwMCUiKS5hdHRyKCJkdXIiLCI3cyIpLmF0dHIoInJlcGVhdENvdW50IiwiaW5kZWZpbml0ZSIpLHQuYXBwZW5kKCJhbmltYXRlIikuYXR0cigiYXR0cmlidXRlTmFtZSIsIngyIikuYXR0cigidmFsdWVzIiwiMTAwJTsyMDAlIikuYXR0cigiZHVyIiwiN3MiKS5hdHRyKCJyZXBlYXRDb3VudCIsImluZGVmaW5pdGUiKTt2YXIgbj17bWluVmFsdWU6MCxtYXhWYWx1ZToxMDAsY2lyY2xlVGhpY2tuZXNzOi4wNSxjaXJjbGVGaWxsR2FwOi4wNSxjaXJjbGVDb2xvcjoiIzE3OEJDQSIsd2F2ZUhlaWdodDouMDUsd2F2ZUNvdW50OjEsd2F2ZVJpc2VUaW1lOjFlMyx3YXZlQW5pbWF0ZVRpbWU6MThlMyx3YXZlUmlzZTohMCx3YXZlSGVpZ2h0U2NhbGluZzohMCx3YXZlQW5pbWF0ZTohMCx3YXZlQ29sb3I6IiMxNzhCQ0EiLHdhdmVPZmZzZXQ6MCx0ZXh0VmVydFBvc2l0aW9uOi41LHRleHRTaXplOjEsdmFsdWVDb3VudFVwOiEwLGRpc3BsYXlQZXJjZW50OiEwLHRleHRDb2xvcjoiIzA0NTY4MSIsd2F2ZVRleHRDb2xvcjoiI0E0REJmOCIsY3VzdG9tUGVyY2VudDoiJSJ9O24udmFsdWVDb3VudFVwPSEwLG4uY2lyY2xlVGhpY2tuZXNzPS4xNSxuLmNpcmNsZUNvbG9yPSIjODA4MDE1IixuLnRleHRDb2xvcj0iIzU1NTUwMCIsbi53YXZlVGV4dENvbG9yPSIjRkZGRkFBIixuLndhdmVDb2xvcj0iI0FBQUEzOSIsbi50ZXh0VmVydFBvc2l0aW9uPS44LG4ud2F2ZUFuaW1hdGVUaW1lPTFlMyxuLndhdmVIZWlnaHQ9LjA1LG4ud2F2ZUFuaW1hdGU9ITAsbi53YXZlUmlzZT0hMSxuLndhdmVIZWlnaHRTY2FsaW5nPSExLG4ud2F2ZU9mZnNldD0uMjUsbi50ZXh0U2l6ZT0uNSxuLndhdmVDb3VudD0zLG4uZGlzcGxheVBlcmNlbnQ9ITAsbi5taW5WYWx1ZT0wLG4ubWF4VmFsdWU9NjAwLG4uY3VzdG9tUGVyY2VudD0iIG5tb2wvTCI7dmFyIHI9YXUoIiNkM2lucHV0Z2F1Z2UiLDIyMCxuKTtPYmplY3QoTC5hKSgxNTAwLDE1MDApLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gci51cGRhdGUoTWF0aC5mbG9vcigxMDAqTWF0aC5yYW5kb20oKSkrMjUwKX0pO3ZhciBpPXttaW5WYWx1ZTowLG1heFZhbHVlOjEwMCxjaXJjbGVUaGlja25lc3M6LjA1LGNpcmNsZUZpbGxHYXA6LjA1LGNpcmNsZUNvbG9yOiIjMTc4QkNBIix3YXZlSGVpZ2h0Oi4wNSx3YXZlQ291bnQ6MSx3YXZlUmlzZVRpbWU6MWUzLHdhdmVBbmltYXRlVGltZToxOGUzLHdhdmVSaXNlOiEwLHdhdmVIZWlnaHRTY2FsaW5nOiEwLHdhdmVBbmltYXRlOiEwLHdhdmVDb2xvcjoiIzE3OEJDQSIsd2F2ZU9mZnNldDowLHRleHRWZXJ0UG9zaXRpb246LjUsdGV4dFNpemU6MSx2YWx1ZUNvdW50VXA6ITAsZGlzcGxheVBlcmNlbnQ6ITAsdGV4dENvbG9yOiIjMDQ1NjgxIix3YXZlVGV4dENvbG9yOiIjQTREQmY4IixjdXN0b21QZXJjZW50OiIlIn07aS52YWx1ZUNvdW50VXA9ITAsaS5jaXJjbGVUaGlja25lc3M9LjE1LGkuY2lyY2xlQ29sb3I9IiM4MDM1N2MiLGkudGV4dENvbG9yPSIjNTU1NTAwIixpLndhdmVUZXh0Q29sb3I9IiNGRkZGQUEiLGkud2F2ZUNvbG9yPSIjQUFBQTM5IixpLnRleHRWZXJ0UG9zaXRpb249LjgsaS53YXZlQW5pbWF0ZVRpbWU9MWUzLGkud2F2ZUhlaWdodD0uMDUsaS53YXZlQW5pbWF0ZT0hMCxpLndhdmVSaXNlPSExLGkud2F2ZUhlaWdodFNjYWxpbmc9ITEsaS53YXZlT2Zmc2V0PS4yNSxpLnRleHRTaXplPS41LGkud2F2ZUNvdW50PTMsaS5kaXNwbGF5UGVyY2VudD0hMCxpLm1pblZhbHVlPTAsaS5tYXhWYWx1ZT02MDAsaS5jdXN0b21QZXJjZW50PSIgbm1vbC9MIjt2YXIgbyxhLHMsdSxsLGMsZixoLGQscD1hdSgiI2Qzb3V0Z2F1Z2UiLDQ1LGkpO09iamVjdChMLmEpKDE1MDAsMTUwMCkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBwLnVwZGF0ZShNYXRoLmZsb29yKDQwKk1hdGgucmFuZG9tKCkpKzUwKX0pLHM9S3QoIiNkM2JpbW9kYWwiKSx1PUdpKCkuZG9tYWluKFszMCwxMTBdKS5yYW5nZShbNDAsMjcwXSksbD1HaSgpLmRvbWFpbihbMCwuMV0pLnJhbmdlKFsxNTAsMjBdKSxmPShjPVs3OSw1NCw3NCw2Miw4NSw1NSw4OCw4NSw1MSw4NSw1NCw4NCw3OCw0Nyw4Myw1Miw2Miw4NCw1Miw3OSw1MSw0Nyw3OCw2OSw3NCw4Myw1NSw3Niw3OCw3OSw3Myw3Nyw2Niw4MCw3NCw1Miw0OCw4MCw1OSw5MCw4MCw1OCw4NCw1OCw3Myw4Myw2NCw1Myw4Miw1OSw3NSw5MCw1NCw4MCw1NCw4Myw3MSw2NCw3Nyw4MSw1OSw4NCw0OCw4Miw2MCw5Miw3OCw3OCw2NSw3Myw4Miw1Niw3OSw3MSw2Miw3Niw2MCw3OCw3Niw4Myw3NSw4Miw3MCw2NSw3Myw4OCw3Niw4MCw0OCw4Niw2MCw5MCw1MCw3OCw2Myw3Miw4NCw3NSw1MSw4Miw2Miw4OCw0OSw4Myw4MSw0Nyw4NCw1Miw4Niw4MSw3NSw1OSw4OSw3OSw1OSw4MSw1MCw4NSw1OSw4Nyw1Myw2OSw3Nyw1Niw4OCw4MSw0NSw4Miw1NSw5MCw0NSw4Myw1Niw4OSw0Niw4Miw1MSw4Niw1Myw3OSw4MSw2MCw4Miw3Nyw3Niw1OSw4MCw0OSw5Niw1Myw3Nyw3Nyw2NSw4MSw3MSw3MCw4MSw5Myw1Myw4OSw0NSw4Niw1OCw3OCw2Niw3Niw2Myw4OCw1Miw5Myw0OSw1Nyw3Nyw2OCw4MSw4MSw3Myw1MCw4NSw3NCw1NSw3Nyw4Myw4Myw1MSw3OCw4NCw0Niw4Myw1NSw4MSw1Nyw3Niw4NCw3Nyw4MSw4Nyw3Nyw1MSw3OCw2MCw4Miw5MSw1Myw3OCw0Niw3Nyw4NCw0OSw4Myw3MSw4MCw0OSw3NSw2NCw3Niw1Myw5NCw1NSw3Niw1MCw4Miw1NCw3NSw3OCw3OSw3OCw3OCw3MCw3OSw3MCw1NCw4Niw1MCw5MCw1NCw1NCw3Nyw3OSw2NCw3NSw0Nyw4Niw2Myw4NSw4Miw1Nyw4Miw2Nyw3NCw1NCw4Myw3Myw3Myw4OCw4MCw3MSw4Myw1Niw3OSw3OCw4NCw1OCw4Myw0Myw2MCw3NSw4MSw0Niw5MCw0Niw3NF0pLmxlbmd0aCxoPWZ1bmN0aW9uKCl7dmFyIHQ9VyxlPXosbj0kO2Z1bmN0aW9uIHIocil7dmFyIGksbyxhPXIubGVuZ3RoLHM9bmV3IEFycmF5KGEpO2ZvcihpPTA7aTxhOysraSlzW2ldPXQocltpXSxpLHIpO3ZhciB1PWUocyksbD11WzBdLGM9dVsxXSxmPW4ocyxsLGMpO0FycmF5LmlzQXJyYXkoZil8fChmPVgobCxjLGYpLGY9cShNYXRoLmNlaWwobC9mKSpmLE1hdGguZmxvb3IoYy9mKSpmLGYpKTtmb3IodmFyIGg9Zi5sZW5ndGg7ZlswXTw9bDspZi5zaGlmdCgpLC0taDtmb3IoO2ZbaC0xXT5jOylmLnBvcCgpLC0taDt2YXIgZCxwPW5ldyBBcnJheShoKzEpO2ZvcihpPTA7aTw9aDsrK2kpKGQ9cFtpXT1bXSkueDA9aT4wP2ZbaS0xXTpsLGQueDE9aTxoP2ZbaV06Yztmb3IoaT0wO2k8YTsrK2kpbDw9KG89c1tpXSkmJm88PWMmJnBbVihmLG8sMCxoKV0ucHVzaChyW2ldKTtyZXR1cm4gcH1yZXR1cm4gci52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkgoZSkscik6dH0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIKFt0WzBdLHRbMV1dKSxyKTplfSxyLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP0goQi5jYWxsKHQpKTpIKHQpLHIpOm59LHJ9KCkuZG9tYWluKHUuZG9tYWluKCkpLnRocmVzaG9sZHMoNDApKGMpLGQ9KG89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQvPTcpPD0xPy43NSooMS10KnQpLzc6MH0sYT11LnRpY2tzKDQwKSxmdW5jdGlvbih0KXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW2UsZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGk9cixvPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytvPHI7KWlzTmFOKG49VSh0W29dKSk/LS1pOmErPW47ZWxzZSBmb3IoOysrbzxyOylpc05hTihuPVUoZSh0W29dKSkpPy0taTphKz1uO2lmKGkpcmV0dXJuIGEvaX0odCxmdW5jdGlvbih0KXtyZXR1cm4gbyhlLXQpfSldfSl9KShjKSxzLmluc2VydCgiZyIsIioiKS5hdHRyKCJmaWxsIiwiI2JiYiIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoaCkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4gdSh0LngwKSsxfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIGwodC5sZW5ndGgvZil9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHUodC54MSktdSh0LngwKS0xfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gbCgwKS1sKHQubGVuZ3RoL2YpfSkscy5hcHBlbmQoInBhdGgiKS5kYXR1bShkKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSkuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJkIixpcygpLmN1cnZlKGNzKS54KGZ1bmN0aW9uKHQpe3JldHVybiB1KHRbMF0pfSkueShmdW5jdGlvbih0KXtyZXR1cm4gbCh0WzFdKX0pKX0sdH0oKSx1dT1pLk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIi5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99bWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjcwMH1cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhc2hib2FyZC5jb21wb25lbnQuY3NzLm1hcCovIl1dLGRhdGE6e319KTtmdW5jdGlvbiBsdSh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDUyLCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIk1lVGhyaXggOiBDbGVhbmluZyBob3NwaXRhbCBlZmZsdWVudCBzaW5jZSAyMDE4Il0pKSwodCgpKCksaS5PYSgzLDAsbnVsbCxudWxsLDQ5LCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxSLmQsUi5hKSksaS5OYSg0LDQ5MTUyLG51bGwsMCxELmEsW10sbnVsbCxudWxsKSwodCgpKCksaS5PYSg1LDAsbnVsbCwwLDQsIm1hdC1jYXJkLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtY2FyZC1oZWFkZXIiXV0sbnVsbCxudWxsLG51bGwsUi5jLFIuYikpLGkuTmEoNiw0OTE1MixudWxsLDAsRC5jLFtdLG51bGwsbnVsbCksKHQoKSgpLGkuT2EoNywwLG51bGwsMSwyLCJtYXQtY2FyZC10aXRsZSIsW1siY2xhc3MiLCJtYXQtY2FyZC10aXRsZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLk5hKDgsMTYzODQsbnVsbCwwLEQuZSxbXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyIgT3VyIFByb2plY3QgIl0pKSwodCgpKCksaS5PYSgxMCwwLG51bGwsMCw0MiwibWF0LWNhcmQtY29udGVudCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZC1jb250ZW50IG1hdC1jYXJkLWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5OYSgxMSwxNjM4NCxudWxsLDAsRC5iLFtdLG51bGwsbnVsbCksKHQoKSgpLGkuT2EoMTIsMCxudWxsLG51bGwsNDAsImRpdiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMTMsMCxudWxsLG51bGwsMjQsImRpdiIsW1siaWQiLCJkM2NvbnRhaW5lciJdLFsic3R5bGUiLCJtYXJnaW46IGF1dG87Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDE0LDAsbnVsbCxudWxsLDIzLCI6c3ZnOnN2ZyIsW1siaGVpZ2h0IiwiNTAwIl0sWyJpZCIsImQzdGFyZ2V0Il0sWyJzdHlsZSIsImRpc3BsYXk6IGJsb2NrO21hcmdpbjogYXV0bzsiXSxbIndpZHRoIiwiNjc0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDE1LDAsbnVsbCxudWxsLDUsIjpzdmc6ZyIsW1sidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDEwMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMTYsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIzMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtMjApIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJNVFgiXSkpLCh0KCkoKSxpLk9hKDE4LDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMTUiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNzAsLTUpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJIb3NwaXRhbCBlZmZsdWVudHMiXSkpLCh0KCkoKSxpLk9hKDIwLDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2lucHV0Z2F1Z2UiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNTBweDt3aWR0aDogMTUwcHg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDIxLDAsbnVsbCxudWxsLDAsIjpzdmc6cmVjdCIsW1siaGVpZ2h0IiwiNTAiXSxbInN0eWxlIiwiZmlsbDogdHJhbnNwYXJlbnQ7IHN0cm9rZTogIzVhMDAzNkZGOyBzdHJva2Utd2lkdGg6IDVweCJdLFsid2lkdGgiLCI2NzUiXSxbIngiLCIwIl0sWyJ5IiwiMjcwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDIyLDAsbnVsbCxudWxsLDAsIjpzdmc6cmVjdCIsW1siaGVpZ2h0IiwiMTUwIl0sWyJzdHlsZSIsImZpbGw6IHRyYW5zcGFyZW50OyBzdHJva2U6ICM1YTAwMzZGRjsgc3Ryb2tlLXdpZHRoOiA1cHg7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyMywwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjUwIl0sWyJzdHlsZSIsImZpbGw6IHVybCgnI2FuaW1hdGUtZ3JhZGllbnQnKTsiXSxbIndpZHRoIiwiNjc1Il0sWyJ4IiwiMCJdLFsieSIsIjI3MCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyNCwwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjE1MCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyNSwwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjE1MCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyNiwwLG51bGwsbnVsbCw1LCI6c3ZnOmciLFtbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg0NzAsMTAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyNywwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjMwIl0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDcwLC0yMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIk1UWCJdKSksKHQoKSgpLGkuT2EoMjksMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxNSJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtNSkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIldhc3Rld2F0ZXIgb3V0cHV0Il0pKSwodCgpKCksaS5PYSgzMSwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNvdXRnYXVnZSJdLFsic3R5bGUiLCJoZWlnaHQ6IDE1MHB4O3dpZHRoOiAxNTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMzIsMCxudWxsLG51bGwsNSwiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTgwLDIwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgzMywwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0NSwxNjMpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJCYWN0ZXJpYWwgcG9wdWxhdGlvbiJdKSksKHQoKSgpLGkuT2EoMzUsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNDUsMTc1KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiQmltb2RhbCBkaXN0cmlidXRpb24iXSkpLCh0KCkoKSxpLk9hKDM3LDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2JpbW9kYWwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMzgsMCxudWxsLG51bGwsMTQsImRpdiIsW1sic3R5bGUiLCJwYWRkaW5nOiAxMHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiIE91ciBwcm9qZWN0IGlzIGEgZ2VuZXJhbC1wdXJwb3NlIGJhY3RlcmlhbCBwbGF0Zm9ybSBmb3IgZHJ1ZyBkZWdyYWRhdGlvbi4gQXMgYSBwcm9vZiBvZiBjb25jZXB0LCB3ZSBoYXZlIGNob3NlbiB0byBmb2N1cyBvbiB0aGUgY3l0b3RveGljIGRydWdzIHVzZWQgaW4gdGhlIHRyZWF0bWVudCBvZiBjYW5jZXIsIGFzIHRoZWlyIGNvbmNlbnRyYXRpb25zIGFyZSBhbGFybWluZ2x5IGhpZ2ggaW4gaG9zcGl0YWwgd2FzdGV3YXRlciBlZmZsdWVudHMuIFRocm91Z2ggYSB0b29sa2l0IG9mIGJyb2FkLSBhbmQgbmFycm93LXNwZWN0cnVtIGVuenltZXMsIHdlIGFpbSB0byBhY2hpZXZlIGNsZWFyYW5jZSBvZiB0aGUgbWFpbiBjaGVtb3RoZXJhcGV1dGljIGFnZW50cywgbGlrZSBtZXRob3RyZXhhdGUsIDUtZmx1b3JvdXJhY2lsIG9yIGRveG9ydWJpY2luLiAiXSkpLCh0KCkoKSxpLk9hKDQwLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSg0MSwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbJyBXZSBhcmUgdGFraW5nIG9uIHRocmVlIG1haW4gY2hhbGxlbmdlcyA6IGVmZmljaWVudCBlbnRyeSBvZiB0aGVzZSBtb2xlY3VsZXMgaW4gdGhlIGJhY3RlcmlhbCBjZWxsLCB0aHJvdWdoIGNoYW5uZWxzIGFuZCB0cmFuc3BvcnRlcnMgKHVyYWNpbC1saWtlIHRyYW5zcG9ydGVyIHVyYUEsIGNyeXB0aWMgZm9sYXRlLWFuYWxvZ3VlIHRyYW5zcG9ydGVyIGFiZ1QgLi4uKSwgcHJvcGVyIGRlZ3JhZGF0aW9uIHRocm91Z2ggbWV0YWJvbGl6aW5nIGVuenltZXMgKGNhcmJveHlwZXB0aWRhc2UgRzIsIGN5dG9jaHJvbWUgUDQ1MCBcdTIwMjYpLCBhbmQgbG9uZyB0ZXJtIG9wZXJhdGlvbiBvZiB0aGUgYmlvcmVhY3RvciB0aG91Z2ggYSBiaXN0YWJsZSwgInN0ZW0tY2VsbCBsaWtlIiwgcG9wdWxhdGlvbiBvZiBiYWN0ZXJpYSwgYWxsZXZpYXRpbmcgdGhlIG5lZWQgZm9yIHJlZ3VsYXIgcmVzZWVkaW5nIHdpdGggZnJlc2ggY2xvbmVzLiAnXSkpLCh0KCkoKSxpLk9hKDQzLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSg0NCwwLG51bGwsbnVsbCwxLCJoMyIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIlByb2plY3Qgc2lnbmlmaWNhbmNlIl0pKSwodCgpKCksaS5nYigtMSxudWxsLFsiIFBoYXJtYWNldXRpY2FsIGRydWdzIGFyZSBhIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHNvdXJjZSBvZiBwb2xsdXRpb24gOiBzZWxlY3RlZCB0byBiZSBiaW9sb2dpY2FsbHkgYWN0aXZlIGF0IGxvdyBjb25jZW50cmF0aW9uICYgZGVzaWduZWQgdG8gcmVzaXN0IGJpb2RlZ3JhZGF0aW9uLCBkcnVncyBjb25zdGl0dXRlIGEgY2xhc3Mgb2YgaGlnaCByZW1hbmVuY2UgcG9sbHV0YW50cyByb3V0aW5lbHkgZm91bmQgaW4gdGhlIGVudmlyb25tZW50LCBldmVuIGluIG91ciBkcmlua2luZyB3YXRlci4gIl0pKSwodCgpKCksaS5PYSg0NywwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoNDgsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyIgVGhvdWdoIHBoeXNpY2FsICYgY2hlbWljYWwgc29sdXRpb25zIGV4aXN0LCBpbiB0aGUgZm9ybSBvZiBvem9uZSBhbmQgVVYgdHJlYXRtZW50LCBvdXIgc29sdXRpb24gY2FuIG9mZmVyIHRoZSBmbGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeSBvZiBhIGJpb3JlYWN0b3ItYmFzZWQgYXBwcm9hY2guICJdKSksKHQoKSgpLGkuT2EoNTAsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDUxLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsnIE91ciAic3RlbS1jZWxsIGxpa2UiIGFwcHJvYWNoIHRvIGJhY3RlcmlhbCBwb3B1bGF0aW9uIG1ha2VzIGl0IGFuIG9wdGlvbiB3aXRoIHBvdGVudGlhbGx5IGxvd2VyIG9uZ29pbmcgY29zdHMsIGFuZCBvdXIgZGVncmFkYXRpb24gZW56eW1lcyBhbGxvdyB0YXJnZXRlZCBkZWdyYWRhdGlvbiBvZiBwYXJ0aWN1bGFybHkgcmVzaWxpZW50IG1vbGVjdWxlcyA6IGJvdGggd2Vha25lc3NlcyBvZiBjb252ZW50aW9uYWwgbWV0aG9kcyBvZiB3YXN0ZXdhdGVyIHRyZWF0bWVudC4gJ10pKV0sbnVsbCxudWxsKX12YXIgY3U9aS5LYSgiZGFzaGJvYXJkIixzdSxmdW5jdGlvbih0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEsImRhc2hib2FyZCIsW10sbnVsbCxudWxsLG51bGwsbHUsdXUpKSxpLk5hKDEsMTA5NzcyOCxudWxsLDAsc3UsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX0se30se30sW10pLGZ1PW4oInB1Z1QiKSxodT0wLGR1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX29wZW5DbG9zZUFsbEFjdGlvbnM9bmV3IHYuYSx0aGlzLmlkPSJjZGstYWNjb3JkaW9uLSIraHUrKyx0aGlzLl9tdWx0aT0hMX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtdWx0aSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tdWx0aX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX211bHRpPU9iamVjdChDLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm9wZW5BbGw9ZnVuY3Rpb24oKXt0aGlzLl9vcGVuQ2xvc2VBbGwoITApfSx0LnByb3RvdHlwZS5jbG9zZUFsbD1mdW5jdGlvbigpe3RoaXMuX29wZW5DbG9zZUFsbCghMSl9LHQucHJvdG90eXBlLl9vcGVuQ2xvc2VBbGw9ZnVuY3Rpb24odCl7dGhpcy5tdWx0aSYmdGhpcy5fb3BlbkNsb3NlQWxsQWN0aW9ucy5uZXh0KHQpfSx0fSgpLHB1PTAsbXU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuYWNjb3JkaW9uPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9leHBhbnNpb25EaXNwYXRjaGVyPW4sdGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPWZ1LmEuRU1QVFksdGhpcy5jbG9zZWQ9bmV3IGkubSx0aGlzLm9wZW5lZD1uZXcgaS5tLHRoaXMuZGVzdHJveWVkPW5ldyBpLm0sdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgaS5tLHRoaXMuaWQ9ImNkay1hY2NvcmRpb24tY2hpbGQtIitwdSsrLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyPWZ1bmN0aW9uKCl7fSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcj1uLmxpc3RlbihmdW5jdGlvbih0LGUpe3IuYWNjb3JkaW9uJiYhci5hY2NvcmRpb24ubXVsdGkmJnIuYWNjb3JkaW9uLmlkPT09ZSYmci5pZCE9PXQmJihyLmV4cGFuZGVkPSExKX0pLHRoaXMuYWNjb3JkaW9uJiYodGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPXRoaXMuX3N1YnNjcmliZVRvT3BlbkNsb3NlQWxsQWN0aW9ucygpKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJleHBhbmRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9leHBhbmRlZH0sc2V0OmZ1bmN0aW9uKHQpe3Q9T2JqZWN0KEMuYikodCksdGhpcy5fZXhwYW5kZWQhPT10JiYodGhpcy5fZXhwYW5kZWQ9dCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodCksdD8odGhpcy5vcGVuZWQuZW1pdCgpLHRoaXMuX2V4cGFuc2lvbkRpc3BhdGNoZXIubm90aWZ5KHRoaXMuaWQsdGhpcy5hY2NvcmRpb24/dGhpcy5hY2NvcmRpb24uaWQ6dGhpcy5pZCkpOnRoaXMuY2xvc2VkLmVtaXQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChDLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQuY29tcGxldGUoKSx0aGlzLmNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuZGVzdHJveWVkLmVtaXQoKSx0aGlzLmRlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyKCksdGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkKX0sdC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hMSl9LHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hMCl9LHQucHJvdG90eXBlLl9zdWJzY3JpYmVUb09wZW5DbG9zZUFsbEFjdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmFjY29yZGlvbi5fb3BlbkNsb3NlQWxsQWN0aW9ucy5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5kaXNhYmxlZHx8KHQuZXhwYW5kZWQ9ZSl9KX0sdH0oKSx5dT1mdW5jdGlvbigpe30sZ3U9bigiaWhZWSIpLHZ1PW4oIjRjMzUiKSxidT1uKCJwMGliIiksX3U9bigiVm5ELyIpLHd1PW4oInQ5ZloiKSx4dT1uKCJZU2gyIiksT3U9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5faGlkZVRvZ2dsZT0hMSxlLmRpc3BsYXlNb2RlPSJkZWZhdWx0IixlfXJldHVybiBPYmplY3QobC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaGlkZVRvZ2dsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oaWRlVG9nZ2xlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faGlkZVRvZ2dsZT1PYmplY3QoQy5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShkdSksQ3U9MCxTdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gby5fdmlld0NvbnRhaW5lclJlZj1pLG8uX2hpZGVUb2dnbGU9ITEsby5faW5wdXRDaGFuZ2VzPW5ldyB2LmEsby5faGVhZGVySWQ9Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLSIrQ3UrKyxvLmFjY29yZGlvbj1lLG99cmV0dXJuIE9iamVjdChsLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoaWRlVG9nZ2xlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpZGVUb2dnbGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9oaWRlVG9nZ2xlPU9iamVjdChDLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9nZXRIaWRlVG9nZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWNjb3JkaW9uP3RoaXMuYWNjb3JkaW9uLmhpZGVUb2dnbGU6dGhpcy5oaWRlVG9nZ2xlfSxlLnByb3RvdHlwZS5faGFzU3BhY2luZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5hY2NvcmRpb24mJiJkZWZhdWx0Ij09PSh0aGlzLmV4cGFuZGVkP3RoaXMuYWNjb3JkaW9uLmRpc3BsYXlNb2RlOnRoaXMuX2dldEV4cGFuZGVkU3RhdGUoKSl9LGUucHJvdG90eXBlLl9nZXRFeHBhbmRlZFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIn0sZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9sYXp5Q29udGVudCYmdGhpcy5vcGVuZWQucGlwZShPYmplY3QoTy5hKShudWxsKSxPYmplY3QoX3UuYSkoZnVuY3Rpb24oKXtyZXR1cm4gdC5leHBhbmRlZCYmIXQuX3BvcnRhbH0pLE9iamVjdCh3dS5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fcG9ydGFsPW5ldyB2dS5kKHQuX2xhenlDb250ZW50Ll90ZW1wbGF0ZSx0Ll92aWV3Q29udGFpbmVyUmVmKX0pfSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt0aGlzLl9pbnB1dENoYW5nZXMubmV4dCh0KX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5uZ09uRGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2lucHV0Q2hhbmdlcy5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5fYm9keUFuaW1hdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQuY2xhc3NMaXN0LG49dC5waGFzZU5hbWUscj10LnRvU3RhdGU7ImRvbmUiPT09biYmImV4cGFuZGVkIj09PXI/ZS5hZGQoIm1hdC1leHBhbmRlZCIpOiJzdGFydCI9PT1uJiYiY29sbGFwc2VkIj09PXImJmUucmVtb3ZlKCJtYXQtZXhwYW5kZWQiKX0sZX0obXUpLEV1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMucGFuZWw9dCx0aGlzLl9lbGVtZW50PWUsdGhpcy5fZm9jdXNNb25pdG9yPW4sdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9wYXJlbnRDaGFuZ2VTdWJzY3JpcHRpb249ZnUuYS5FTVBUWSx0aGlzLl9wYXJlbnRDaGFuZ2VTdWJzY3JpcHRpb249T2JqZWN0KGJ1LmEpKHQub3BlbmVkLHQuY2xvc2VkLHQuX2lucHV0Q2hhbmdlcy5waXBlKE9iamVjdChfdS5hKShmdW5jdGlvbih0KXtyZXR1cm4hKCF0LmhpZGVUb2dnbGUmJiF0LmRpc2FibGVkKX0pKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksbi5tb25pdG9yKGUubmF0aXZlRWxlbWVudCl9cmV0dXJuIHQucHJvdG90eXBlLl90b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLnBhbmVsLnRvZ2dsZSgpfSx0LnByb3RvdHlwZS5faXNFeHBhbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbmVsLmV4cGFuZGVkfSx0LnByb3RvdHlwZS5fZ2V0RXhwYW5kZWRTdGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbmVsLl9nZXRFeHBhbmRlZFN0YXRlKCl9LHQucHJvdG90eXBlLl9nZXRQYW5lbElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuaWR9LHQucHJvdG90eXBlLl9zaG93VG9nZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucGFuZWwuaGlkZVRvZ2dsZSYmIXRoaXMucGFuZWwuZGlzYWJsZWR9LHQucHJvdG90eXBlLl9rZXlkb3duPWZ1bmN0aW9uKHQpe3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgeHUuajpjYXNlIHh1LmQ6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZSgpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnRDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KX0sdH0oKSxrdT1mdW5jdGlvbigpe30sVHU9ZnVuY3Rpb24oKXt9LEl1PWZ1bmN0aW9uKCl7fSxBdT1uKCJZbGJRIiksanU9bigibExBUCIpLFB1PWkuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWV4cGFuc2lvbi1wYW5lbHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO3RyYW5zaXRpb246bWFyZ2luIDIyNW1zIGN1YmljLWJlemllciguNCwwLC4yLDEpfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWV4cGFuc2lvbi1wYW5lbHtvdXRsaW5lOnNvbGlkIDFweH19Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudHtvdmVyZmxvdzpoaWRkZW59Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudC5tYXQtZXhwYW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5e3BhZGRpbmc6MCAyNHB4IDE2cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZ3ttYXJnaW46MTZweCAwfS5tYXQtYWNjb3JkaW9uPi5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmc6Zmlyc3QtY2hpbGQsLm1hdC1hY2NvcmRpb24+OmZpcnN0LWNoaWxkOm5vdCgubWF0LWV4cGFuc2lvbi1wYW5lbCkgLm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZ3ttYXJnaW4tdG9wOjB9Lm1hdC1hY2NvcmRpb24+Lm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZzpsYXN0LWNoaWxkLC5tYXQtYWNjb3JkaW9uPjpsYXN0LWNoaWxkOm5vdCgubWF0LWV4cGFuc2lvbi1wYW5lbCkgLm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZ3ttYXJnaW4tYm90dG9tOjB9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzoxNnB4IDhweCAxNnB4IDI0cHh9Lm1hdC1hY3Rpb24tcm93IGJ1dHRvbi5tYXQtYnV0dG9ue21hcmdpbi1sZWZ0OjhweH1bZGlyPXJ0bF0gLm1hdC1hY3Rpb24tcm93IGJ1dHRvbi5tYXQtYnV0dG9ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiYm9keUV4cGFuc2lvbiIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToiY29sbGFwc2VkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoiMHB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToiZXhwYW5kZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OiIqIix2aXNpYmlsaXR5OiJ2aXNpYmxlIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6ImV4cGFuZGVkIDw9PiBjb2xsYXBzZWQiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIyNW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBNdSh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5GYSgwLG51bGwsbnVsbCwwKSldLG51bGwsbnVsbCl9ZnVuY3Rpb24gTnUodCl7cmV0dXJuIGkuaWIoMixbaS5YYShudWxsLDApLCh0KCkoKSxpLk9hKDEsMCxbWyJib2R5IiwxXV0sbnVsbCw1LCJkaXYiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50Il0sWyJyb2xlIiwicmVnaW9uIl1dLFtbMjQsIkBib2R5RXhwYW5zaW9uIiwwXSxbMSwiYXJpYS1sYWJlbGxlZGJ5IiwwXSxbOCwiaWQiLDBdXSxbW251bGwsIkBib2R5RXhwYW5zaW9uLmRvbmUiXSxbbnVsbCwiQGJvZHlFeHBhbnNpb24uc3RhcnQiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLGk9dC5jb21wb25lbnQ7cmV0dXJuIkBib2R5RXhwYW5zaW9uLmRvbmUiPT09ZSYmKHI9ITEhPT1pLl9ib2R5QW5pbWF0aW9uKG4pJiZyKSwiQGJvZHlFeHBhbnNpb24uc3RhcnQiPT09ZSYmKHI9ITEhPT1pLl9ib2R5QW5pbWF0aW9uKG4pJiZyKSxyfSxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyLDAsbnVsbCxudWxsLDMsImRpdiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5YYShudWxsLDEpLCh0KCkoKSxpLkZhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsTXUpKSxpLk5hKDUsMjEyOTkyLG51bGwsMCx2dS5hLFtpLmosaS5OXSx7cG9ydGFsOlswLCJwb3J0YWwiXX0sbnVsbCksaS5YYShudWxsLDIpXSxmdW5jdGlvbih0LGUpe3QoZSw1LDAsZS5jb21wb25lbnQuX3BvcnRhbCl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCxuLl9nZXRFeHBhbmRlZFN0YXRlKCksbi5faGVhZGVySWQsbi5pZCl9KX12YXIgUnU9aS5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMjRweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6Zm9jdXMsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye291dGxpbmU6MH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVkOmZvY3VzLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWQ6aG92ZXJ7YmFja2dyb3VuZDppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2N1cnNvcjpwb2ludGVyfS5tYXQtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleDoxO2ZsZXgtZGlyZWN0aW9uOnJvdztvdmVyZmxvdzpoaWRkZW59Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbixbZGlyPXJ0bF0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZ3JvdzoyfS5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDJweCAycHggMDtjb250ZW50OicnO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6M3B4O3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiaW5kaWNhdG9yUm90YXRlIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJjb2xsYXBzZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoMGRlZykifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToiZXhwYW5kZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoMTgwZGVnKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fSx7dHlwZTo3LG5hbWU6ImV4cGFuc2lvbkhlaWdodCIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToiY29sbGFwc2VkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoie3tjb2xsYXBzZWRIZWlnaHR9fSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOntwYXJhbXM6e2NvbGxhcHNlZEhlaWdodDoiNDhweCJ9fX0se3R5cGU6MCxuYW1lOiJleHBhbmRlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6Int7ZXhwYW5kZWRIZWlnaHR9fSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOntwYXJhbXM6e2V4cGFuZGVkSGVpZ2h0OiI2NHB4In19fSx7dHlwZToxLGV4cHI6ImV4cGFuZGVkIDw9PiBjb2xsYXBzZWQiLGFuaW1hdGlvbjp7dHlwZTozLHN0ZXBzOlt7dHlwZToxMSxzZWxlY3RvcjoiQGluZGljYXRvclJvdGF0ZSIsYW5pbWF0aW9uOnt0eXBlOjksb3B0aW9uczpudWxsfSxvcHRpb25zOntvcHRpb25hbDohMH19LHt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIn1dLG9wdGlvbnM6bnVsbH0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX1dfX0pO2Z1bmN0aW9uIER1KHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMCwic3BhbiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLWluZGljYXRvciJdXSxbWzI0LCJAaW5kaWNhdG9yUm90YXRlIiwwXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5fZ2V0RXhwYW5kZWRTdGF0ZSgpKX0pfWZ1bmN0aW9uIEx1KHQpe3JldHVybiBpLmliKDIsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMywic3BhbiIsW1siY2xhc3MiLCJtYXQtY29udGVudCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlhhKG51bGwsMCksaS5YYShudWxsLDEpLGkuWGEobnVsbCwyKSwodCgpKCksaS5GYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLER1KSksaS5OYSg1LDE2Mzg0LG51bGwsMCxhLmssW2kuTixpLktdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSw1LDAsZS5jb21wb25lbnQuX3Nob3dUb2dnbGUoKSl9LG51bGwpfXZhciBGdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLFZ1PWkuTWEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fVxuLyojIHNvdXJjZU1hcHBpbmdVUkw9c2l0ZW1hcC5jb21wb25lbnQuY3NzLm1hcCovIl1dLGRhdGE6e319KTtmdW5jdGlvbiBVdSh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDM1LCJkaXYiLFtbImlkIiwiZ2NvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiU2l0ZSBtYXBzIl0pKSwodCgpKCksaS5PYSgzLDAsbnVsbCxudWxsLDMyLCJtYXQtYWNjb3JkaW9uIixbWyJjbGFzcyIsIm1hdC1hY2NvcmRpb24iXSxbIm11bHRpIiwidHJ1ZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLk5hKDQsMTYzODQsbnVsbCwwLE91LFtdLHttdWx0aTpbMCwibXVsdGkiXX0sbnVsbCksKHQoKSgpLGkuT2EoNSwxNjc3NzIxNixudWxsLG51bGwsMTQsIm1hdC1leHBhbnNpb24tcGFuZWwiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbCJdXSxbWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzIsIm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZyIsbnVsbF1dLG51bGwsbnVsbCxOdSxQdSkpLGkuTmEoNiwxNzUzMDg4LG51bGwsMSxTdSxbWzMsT3VdLGkuaCxBdS5iLGkuTl0sbnVsbCxudWxsKSxpLmViKDMzNTU0NDMyMCwxLHtfbGF6eUNvbnRlbnQ6MH0pLGkuZGIoMjU2LG51bGwsT3Usdm9pZCAwLFtdKSwodCgpKCksaS5PYSg5LDAsbnVsbCwwLDksIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIl0sWyJyb2xlIiwiYnV0dG9uIl1dLFtbMSwiaWQiLDBdLFsxLCJ0YWJpbmRleCIsMF0sWzEsImFyaWEtY29udHJvbHMiLDBdLFsxLCJhcmlhLWV4cGFuZGVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzQwLCJAZXhwYW5zaW9uSGVpZ2h0IiwwXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJrZXlkb3duIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT1pLllhKHQsMTApLl90b2dnbGUoKSYmciksImtleWRvd24iPT09ZSYmKHI9ITEhPT1pLllhKHQsMTApLl9rZXlkb3duKG4pJiZyKSxyfSxMdSxSdSkpLGkuTmEoMTAsMTgwMjI0LG51bGwsMCxFdSxbU3UsaS5rLGp1LmIsaS5oXSxudWxsLG51bGwpLGkuYmIoMTEse2NvbGxhcHNlZEhlaWdodDowLGV4cGFuZGVkSGVpZ2h0OjF9KSxpLmJiKDEyLHt2YWx1ZTowLHBhcmFtczoxfSksKHQoKSgpLGkuT2EoMTMsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuTmEoMTQsMTYzODQsbnVsbCwwLFR1LFtdLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIiBQcm9qZWN0IGRlc2lnbiAiXSkpLCh0KCkoKSxpLk9hKDE2LDAsbnVsbCwxLDIsIm1hdC1wYW5lbC1kZXNjcmlwdGlvbiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLk5hKDE3LDE2Mzg0LG51bGwsMCxrdSxbXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyIgVGhlb3JldGljYWwgdW5kZXJwaW5uaW5nIG9mIG91ciBwcm9qZWN0ICJdKSksKHQoKSgpLGkuZ2IoLTEsMSxbIiBBQUFBQUFBQUFBQWEgIl0pKSwodCgpKCksaS5PYSgyMCwxNjc3NzIxNixudWxsLG51bGwsMTUsIm1hdC1leHBhbnNpb24tcGFuZWwiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbCJdXSxbWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzIsIm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZyIsbnVsbF1dLG51bGwsbnVsbCxOdSxQdSkpLGkuTmEoMjEsMTc1MzA4OCxudWxsLDEsU3UsW1szLE91XSxpLmgsQXUuYixpLk5dLG51bGwsbnVsbCksaS5lYigzMzU1NDQzMjAsMix7X2xhenlDb250ZW50OjB9KSxpLmRiKDI1NixudWxsLE91LHZvaWQgMCxbXSksKHQoKSgpLGkuT2EoMjQsMCxudWxsLDAsOSwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiXSxbInJvbGUiLCJidXR0b24iXV0sW1sxLCJpZCIsMF0sWzEsInRhYmluZGV4IiwwXSxbMSwiYXJpYS1jb250cm9scyIsMF0sWzEsImFyaWEtZXhwYW5kZWQiLDBdLFsxLCJhcmlhLWRpc2FibGVkIiwwXSxbMiwibWF0LWV4cGFuZGVkIixudWxsXSxbNDAsIkBleHBhbnNpb25IZWlnaHQiLDBdXSxbW251bGwsImNsaWNrIl0sW251bGwsImtleWRvd24iXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PWkuWWEodCwyNSkuX3RvZ2dsZSgpJiZyKSwia2V5ZG93biI9PT1lJiYocj0hMSE9PWkuWWEodCwyNSkuX2tleWRvd24obikmJnIpLHJ9LEx1LFJ1KSksaS5OYSgyNSwxODAyMjQsbnVsbCwwLEV1LFtTdSxpLmssanUuYixpLmhdLG51bGwsbnVsbCksaS5iYigyNix7Y29sbGFwc2VkSGVpZ2h0OjAsZXhwYW5kZWRIZWlnaHQ6MX0pLGkuYmIoMjcse3ZhbHVlOjAscGFyYW1zOjF9KSwodCgpKCksaS5PYSgyOCwwLG51bGwsMCwyLCJtYXQtcGFuZWwtdGl0bGUiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5OYSgyOSwxNjM4NCxudWxsLDAsVHUsW10sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSxudWxsLFsiIE1hdGVyaWFsIGFuZCBtZXRob2QgIl0pKSwodCgpKCksaS5PYSgzMSwwLG51bGwsMSwyLCJtYXQtcGFuZWwtZGVzY3JpcHRpb24iLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5OYSgzMiwxNjM4NCxudWxsLDAsa3UsW10sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSxudWxsLFsiIE91ciBleHBlcmltZW50YWwgZGVzaWducyAmIHJlc3VsdHMgIl0pKSwodCgpKCksaS5PYSgzNCwwLG51bGwsMSwxLCJwIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiSSdtIHZpc2libGUgYmVjYXVzZSBJIGFtIG9wZW4iXSkpXSxmdW5jdGlvbih0LGUpe3QoZSw0LDAsInRydWUiKX0sZnVuY3Rpb24odCxlKXt0KGUsNSwwLGkuWWEoZSw2KS5leHBhbmRlZCxpLllhKGUsNikuX2hhc1NwYWNpbmcoKSksdChlLDksMCxpLllhKGUsMTApLnBhbmVsLl9oZWFkZXJJZCxpLllhKGUsMTApLnBhbmVsLmRpc2FibGVkPy0xOjAsaS5ZYShlLDEwKS5fZ2V0UGFuZWxJZCgpLGkuWWEoZSwxMCkuX2lzRXhwYW5kZWQoKSxpLllhKGUsMTApLnBhbmVsLmRpc2FibGVkLGkuWWEoZSwxMCkuX2lzRXhwYW5kZWQoKSx0KGUsMTIsMCxpLllhKGUsMTApLl9nZXRFeHBhbmRlZFN0YXRlKCksdChlLDExLDAsaS5ZYShlLDEwKS5jb2xsYXBzZWRIZWlnaHQsaS5ZYShlLDEwKS5leHBhbmRlZEhlaWdodCkpKSx0KGUsMjAsMCxpLllhKGUsMjEpLmV4cGFuZGVkLGkuWWEoZSwyMSkuX2hhc1NwYWNpbmcoKSksdChlLDI0LDAsaS5ZYShlLDI1KS5wYW5lbC5faGVhZGVySWQsaS5ZYShlLDI1KS5wYW5lbC5kaXNhYmxlZD8tMTowLGkuWWEoZSwyNSkuX2dldFBhbmVsSWQoKSxpLllhKGUsMjUpLl9pc0V4cGFuZGVkKCksaS5ZYShlLDI1KS5wYW5lbC5kaXNhYmxlZCxpLllhKGUsMjUpLl9pc0V4cGFuZGVkKCksdChlLDI3LDAsaS5ZYShlLDI1KS5fZ2V0RXhwYW5kZWRTdGF0ZSgpLHQoZSwyNiwwLGkuWWEoZSwyNSkuY29sbGFwc2VkSGVpZ2h0LGkuWWEoZSwyNSkuZXhwYW5kZWRIZWlnaHQpKSl9KX12YXIgenU9aS5LYSgiYXBwLXNpdGVtYXAiLEZ1LGZ1bmN0aW9uKHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMSwiYXBwLXNpdGVtYXAiLFtdLG51bGwsbnVsbCxudWxsLFV1LFZ1KSksaS5OYSgxLDExNDY4OCxudWxsLDAsRnUsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxCdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLEh1PWkuTWEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9XG4vKiMgc291cmNlTWFwcGluZ1VSTD1wcm9qZWN0LWRldGFpbHMuY29tcG9uZW50LmNzcy5tYXAqLyJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gV3UodCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIlByb2plY3QgZGV0YWlscyJdKSksKHQoKSgpLGkuT2EoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxSLmQsUi5hKSksaS5OYSg0LDQ5MTUyLG51bGwsMCxELmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgcXU9aS5LYSgiYXBwLXByb2plY3QtZGV0YWlscyIsQnUsZnVuY3Rpb24odCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCwxLCJhcHAtcHJvamVjdC1kZXRhaWxzIixbXSxudWxsLG51bGwsbnVsbCxXdSxIdSkpLGkuTmEoMSwxMTQ2ODgsbnVsbCwwLEJ1LFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksWXU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sdH0oKSxHdT1pLk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fVxuLyojIHNvdXJjZU1hcHBpbmdVUkw9YmlvbG9neS1zZWN0aW9uLmNvbXBvbmVudC5jc3MubWFwKi8iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIFF1KHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJCaW9sb2d5Il0pKSwodCgpKCksaS5PYSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLFIuZCxSLmEpKSxpLk5hKDQsNDkxNTIsbnVsbCwwLEQuYSxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciBLdT1pLkthKCJhcHAtYmlvbG9neS1zZWN0aW9uIixZdSxmdW5jdGlvbih0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEsImFwcC1iaW9sb2d5LXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLFF1LEd1KSksaS5OYSgxLDExNDY4OCxudWxsLDAsWXUsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxadT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLFh1PWkuTWEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9XG4vKiMgc291cmNlTWFwcGluZ1VSTD1jb21wdXRpbmctc2VjdGlvbi5jb21wb25lbnQuY3NzLm1hcCovIl1dLGRhdGE6e319KTtmdW5jdGlvbiAkdSh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiTW9kZWxpbmcgJiBTb2Z0d2FyZSJdKSksKHQoKSgpLGkuT2EoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxSLmQsUi5hKSksaS5OYSg0LDQ5MTUyLG51bGwsMCxELmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgSnU9aS5LYSgiYXBwLWNvbXB1dGluZy1zZWN0aW9uIixadSxmdW5jdGlvbih0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEsImFwcC1jb21wdXRpbmctc2VjdGlvbiIsW10sbnVsbCxudWxsLG51bGwsJHUsWHUpKSxpLk5hKDEsMTE0Njg4LG51bGwsMCxadSxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLHRsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksZWw9aS5NYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH1cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWh1bWFuLXByYWN0aWNlLXNlY3Rpb24uY29tcG9uZW50LmNzcy5tYXAqLyJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gbmwodCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIkh1bWFuIFByYWN0aWNlcyJdKSksKHQoKSgpLGkuT2EoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxSLmQsUi5hKSksaS5OYSg0LDQ5MTUyLG51bGwsMCxELmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgcmw9aS5LYSgiYXBwLWh1bWFuLXByYWN0aWNlLXNlY3Rpb24iLHRsLGZ1bmN0aW9uKHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMSwiYXBwLWh1bWFuLXByYWN0aWNlLXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLG5sLGVsKSksaS5OYSgxLDExNDY4OCxudWxsLDAsdGwsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxpbD1uKCI4bU1yIiksb2w9bigiRnpxYyIpLGFsPW4oIldmNHAiKSxzbD1pLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC10b29sYmFye291dGxpbmU6c29saWQgMXB4fX0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NjRweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo2NHB4fUBtZWRpYSAobWF4LXdpZHRoOjU5OXB4KXsubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjU2cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NTZweH19Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIHVsKHQpe3JldHVybiBpLmliKDIsW2kuWGEobnVsbCwwKSxpLlhhKG51bGwsMSldLG51bGwsbnVsbCl9dmFyIGxsPW4oImJ1anQiKSxjbD1uKCJVb2RIIiksZmw9bigid0Z3MSIpLGhsPW4oIk1yK1giKSxkbD1uKCJTTXNtIikscGw9bigiYm5lNSIpLG1sPW4oIkdpM2kiKTtmdW5jdGlvbiB5bCh0KXt0aHJvdyBFcnJvcigiQSBkcmF3ZXIgd2FzIGFscmVhZHkgZGVjbGFyZWQgZm9yICdwb3NpdGlvbj1cIiIrdCsiXCInIil9dmFyIGdsPW5ldyBpLm8oIk1BVF9EUkFXRVJfREVGQVVMVF9BVVRPU0laRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMX19KSx2bD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj10LHRoaXMuX2NvbnRhaW5lcj1lfXJldHVybiB0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbkNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX0sdH0oKSxibD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvLGEpe3ZhciBzPXRoaXM7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2RvYz1hLHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPW51bGwsdGhpcy5fZW5hYmxlQW5pbWF0aW9ucz0hMSx0aGlzLl9wb3NpdGlvbj0ic3RhcnQiLHRoaXMuX21vZGU9Im92ZXIiLHRoaXMuX2Rpc2FibGVDbG9zZT0hMSx0aGlzLl9hdXRvRm9jdXM9ITAsdGhpcy5fYW5pbWF0aW9uU3RhcnRlZD1uZXcgaS5tLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLm9wZW5lZENoYW5nZT1uZXcgaS5tKCEwKSx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkPW5ldyBpLm0sdGhpcy5fbW9kZUNoYW5nZWQ9bmV3IHYuYSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3Q/KHMuX2RvYyYmKHMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPXMuX2RvYy5hY3RpdmVFbGVtZW50KSxzLl9pc0ZvY3VzVHJhcEVuYWJsZWQmJnMuX2ZvY3VzVHJhcCYmcy5fdHJhcEZvY3VzKCkpOnMuX3Jlc3RvcmVGb2N1cygpfSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7T2JqZWN0KHBsLmEpKHMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwia2V5ZG93biIpLnBpcGUoT2JqZWN0KF91LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleUNvZGU9PT14dS5lJiYhcy5kaXNhYmxlQ2xvc2V9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBzLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cy5jbG9zZSgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9KX0pfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHNldDpmdW5jdGlvbih0KXsodD0iZW5kIj09PXQ/ImVuZCI6InN0YXJ0IikhPXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249dCx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkLmVtaXQoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tb2RlPXQsdGhpcy5fbW9kZUNoYW5nZWQubmV4dCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZUNsb3NlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbG9zZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVDbG9zZT1PYmplY3QoQy5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF1dG9Gb2N1cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRm9jdXN9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hdXRvRm9jdXM9T2JqZWN0KEMuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfb3BlbmVkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KF91LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksT2JqZWN0KHcuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvcGVuZWRTdGFydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25TdGFydGVkLnBpcGUoT2JqZWN0KF91LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb21TdGF0ZSE9PXQudG9TdGF0ZSYmMD09PXQudG9TdGF0ZS5pbmRleE9mKCJvcGVuIil9KSxPYmplY3Qody5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl9jbG9zZWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGVuZWRDaGFuZ2UucGlwZShPYmplY3QoX3UuYSkoZnVuY3Rpb24odCl7cmV0dXJuIXR9KSxPYmplY3Qody5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNsb3NlZFN0YXJ0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXJ0ZWQucGlwZShPYmplY3QoX3UuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvbVN0YXRlIT09dC50b1N0YXRlJiYidm9pZCI9PT10LnRvU3RhdGV9KSxPYmplY3Qody5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl9pc0ZvY3VzVHJhcEVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGVuZWQmJiJzaWRlIiE9PXRoaXMubW9kZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fdHJhcEZvY3VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmF1dG9Gb2N1cyYmdGhpcy5fZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKS50aGVuKGZ1bmN0aW9uKGUpe2V8fCJmdW5jdGlvbiIhPXR5cGVvZiB0Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXN8fHQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9LHQucHJvdG90eXBlLl9yZXN0b3JlRm9jdXM9ZnVuY3Rpb24oKXtpZih0aGlzLmF1dG9Gb2N1cyl7dmFyIHQ9dGhpcy5fZG9jJiZ0aGlzLl9kb2MuYWN0aXZlRWxlbWVudDt0JiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModCkmJih0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZCx0aGlzLl9vcGVuZWRWaWEpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCkpLHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPW51bGwsdGhpcy5fb3BlbmVkVmlhPW51bGx9fSx0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLl9mb2N1c1RyYXAuZW5hYmxlZD10aGlzLl9pc0ZvY3VzVHJhcEVuYWJsZWR9LHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50Q2hlY2tlZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2VuYWJsZUFuaW1hdGlvbnM9ITApfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2ZvY3VzVHJhcCYmdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvcGVuZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3BlbmVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50b2dnbGUoT2JqZWN0KEMuYikodCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG9nZ2xlKCEwLHQpfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvZ2dsZSghMSl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQmJih0PSF0aGlzLm9wZW5lZCksdm9pZCAwPT09ZSYmKGU9InByb2dyYW0iKSx0aGlzLl9vcGVuZWQ9dCx0Pyh0aGlzLl9hbmltYXRpb25TdGF0ZT10aGlzLl9lbmFibGVBbmltYXRpb25zPyJvcGVuIjoib3Blbi1pbnN0YW50Iix0aGlzLl9vcGVuZWRWaWE9ZSk6KHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLl9yZXN0b3JlRm9jdXMoKSksdGhpcy5fZm9jdXNUcmFwJiYodGhpcy5fZm9jdXNUcmFwLmVuYWJsZWQ9dGhpcy5faXNGb2N1c1RyYXBFbmFibGVkKSxuZXcgUHJvbWlzZShmdW5jdGlvbih0KXtuLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdCh3dS5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3JldHVybiB0KGU/Im9wZW4iOiJjbG9zZSIpfSl9KX0sdC5wcm90b3R5cGUuX29uQW5pbWF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5lbWl0KHQpfSx0LnByb3RvdHlwZS5fb25BbmltYXRpb25FbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5mcm9tU3RhdGUsbj10LnRvU3RhdGU7KDA9PT1uLmluZGV4T2YoIm9wZW4iKSYmInZvaWQiPT09ZXx8InZvaWQiPT09biYmMD09PWUuaW5kZXhPZigib3BlbiIpKSYmdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLl9vcGVuZWQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93aWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLF9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLG8sYSl7dm9pZCAwPT09byYmKG89ITEpO3ZhciBzPXRoaXM7dGhpcy5fZGlyPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fYW5pbWF0aW9uTW9kZT1hLHRoaXMuYmFja2Ryb3BDbGljaz1uZXcgaS5tLHRoaXMuX2Rlc3Ryb3llZD1uZXcgdi5hLHRoaXMuX2RvQ2hlY2tTdWJqZWN0PW5ldyB2LmEsdGhpcy5fY29udGVudE1hcmdpbnM9e2xlZnQ6bnVsbCxyaWdodDpudWxsfSx0aGlzLl9jb250ZW50TWFyZ2luQ2hhbmdlcz1uZXcgdi5hLHQmJnQuY2hhbmdlLnBpcGUoT2JqZWN0KHguYSkodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cy5fdmFsaWRhdGVEcmF3ZXJzKCkscy5fdXBkYXRlQ29udGVudE1hcmdpbnMoKX0pLHRoaXMuX2F1dG9zaXplPW99cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbmQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5kfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYXV0b3NpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b3NpemV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hdXRvc2l6ZT1PYmplY3QoQy5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhhc0JhY2tkcm9wIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMuX2JhY2tkcm9wT3ZlcnJpZGU/IXRoaXMuX3N0YXJ0fHwic2lkZSIhPT10aGlzLl9zdGFydC5tb2RlfHwhdGhpcy5fZW5kfHwic2lkZSIhPT10aGlzLl9lbmQubW9kZTp0aGlzLl9iYWNrZHJvcE92ZXJyaWRlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYmFja2Ryb3BPdmVycmlkZT1udWxsPT10P251bGw6T2JqZWN0KEMuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9kcmF3ZXJzLmNoYW5nZXMucGlwZShPYmplY3QoTy5hKShudWxsKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fdmFsaWRhdGVEcmF3ZXJzKCksdC5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuX3dhdGNoRHJhd2VyVG9nZ2xlKGUpLHQuX3dhdGNoRHJhd2VyUG9zaXRpb24oZSksdC5fd2F0Y2hEcmF3ZXJNb2RlKGUpfSksKCF0Ll9kcmF3ZXJzLmxlbmd0aHx8dC5faXNEcmF3ZXJPcGVuKHQuX3N0YXJ0KXx8dC5faXNEcmF3ZXJPcGVuKHQuX2VuZCkpJiZ0Ll91cGRhdGVDb250ZW50TWFyZ2lucygpLHQuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZG9DaGVja1N1YmplY3QucGlwZShPYmplY3QobWwuYSkoMTApLE9iamVjdCh4LmEpKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll91cGRhdGVDb250ZW50TWFyZ2lucygpfSl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZG9DaGVja1N1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wZW4oKX0pfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbG9zZSgpfSl9LHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fYXV0b3NpemUmJnRoaXMuX2lzUHVzaGVkKCkmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0Ll9kb0NoZWNrU3ViamVjdC5uZXh0KCl9KX0sdC5wcm90b3R5cGUuX3dhdGNoRHJhd2VyVG9nZ2xlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5fYW5pbWF0aW9uU3RhcnRlZC5waXBlKE9iamVjdCh4LmEpKHRoaXMuX2RyYXdlcnMuY2hhbmdlcyksT2JqZWN0KF91LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb21TdGF0ZSE9PXQudG9TdGF0ZX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7Im9wZW4taW5zdGFudCIhPT10LnRvU3RhdGUmJiJOb29wQW5pbWF0aW9ucyIhPT1lLl9hbmltYXRpb25Nb2RlJiZlLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWRyYXdlci10cmFuc2l0aW9uIiksZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSxlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLCJzaWRlIiE9PXQubW9kZSYmdC5vcGVuZWRDaGFuZ2UucGlwZShPYmplY3QoeC5hKSh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc2V0Q29udGFpbmVyQ2xhc3ModC5vcGVuZWQpfSl9LHQucHJvdG90eXBlLl93YXRjaERyYXdlclBvc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmdC5vblBvc2l0aW9uQ2hhbmdlZC5waXBlKE9iamVjdCh4LmEpKHRoaXMuX2RyYXdlcnMuY2hhbmdlcykpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoT2JqZWN0KHd1LmEpKDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLl92YWxpZGF0ZURyYXdlcnMoKX0pfSl9LHQucHJvdG90eXBlLl93YXRjaERyYXdlck1vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiZ0Ll9tb2RlQ2hhbmdlZC5waXBlKE9iamVjdCh4LmEpKE9iamVjdChidS5hKSh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMsdGhpcy5fZGVzdHJveWVkKSkpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCksZS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX0sdC5wcm90b3R5cGUuX3NldENvbnRhaW5lckNsYXNzPWZ1bmN0aW9uKHQpe3Q/dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1kcmF3ZXItb3BlbmVkIik6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC1kcmF3ZXItb3BlbmVkIil9LHQucHJvdG90eXBlLl92YWxpZGF0ZURyYXdlcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3N0YXJ0PXRoaXMuX2VuZD1udWxsLHRoaXMuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbihlKXsiZW5kIj09ZS5wb3NpdGlvbj8obnVsbCE9dC5fZW5kJiZ5bCgiZW5kIiksdC5fZW5kPWUpOihudWxsIT10Ll9zdGFydCYmeWwoInN0YXJ0IiksdC5fc3RhcnQ9ZSl9KSx0aGlzLl9yaWdodD10aGlzLl9sZWZ0PW51bGwsdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8odGhpcy5fbGVmdD10aGlzLl9lbmQsdGhpcy5fcmlnaHQ9dGhpcy5fc3RhcnQpOih0aGlzLl9sZWZ0PXRoaXMuX3N0YXJ0LHRoaXMuX3JpZ2h0PXRoaXMuX2VuZCl9LHQucHJvdG90eXBlLl9pc1B1c2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fc3RhcnQpJiYib3ZlciIhPXRoaXMuX3N0YXJ0Lm1vZGV8fHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpJiYib3ZlciIhPXRoaXMuX2VuZC5tb2RlfSx0LnByb3RvdHlwZS5fb25CYWNrZHJvcENsaWNrZWQ9ZnVuY3Rpb24oKXt0aGlzLmJhY2tkcm9wQ2xpY2suZW1pdCgpLHRoaXMuX2Nsb3NlTW9kYWxEcmF3ZXIoKX0sdC5wcm90b3R5cGUuX2Nsb3NlTW9kYWxEcmF3ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO1t0aGlzLl9zdGFydCx0aGlzLl9lbmRdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSYmIWUuZGlzYWJsZUNsb3NlJiZ0Ll9jYW5IYXZlQmFja2Ryb3AoZSl9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlKCl9KX0sdC5wcm90b3R5cGUuX2lzU2hvd2luZ0JhY2tkcm9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9zdGFydCkmJnRoaXMuX2NhbkhhdmVCYWNrZHJvcCh0aGlzLl9zdGFydCl8fHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpJiZ0aGlzLl9jYW5IYXZlQmFja2Ryb3AodGhpcy5fZW5kKX0sdC5wcm90b3R5cGUuX2NhbkhhdmVCYWNrZHJvcD1mdW5jdGlvbih0KXtyZXR1cm4ic2lkZSIhPT10Lm1vZGV8fCEhdGhpcy5fYmFja2Ryb3BPdmVycmlkZX0sdC5wcm90b3R5cGUuX2lzRHJhd2VyT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmdC5vcGVuZWR9LHQucHJvdG90eXBlLl91cGRhdGVDb250ZW50TWFyZ2lucz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT0wLG49MDtpZih0aGlzLl9sZWZ0JiZ0aGlzLl9sZWZ0Lm9wZW5lZCYmKCJzaWRlIj09dGhpcy5fbGVmdC5tb2RlP2UrPXRoaXMuX2xlZnQuX3dpZHRoOiJwdXNoIj09dGhpcy5fbGVmdC5tb2RlJiYoZSs9cj10aGlzLl9sZWZ0Ll93aWR0aCxuLT1yKSksdGhpcy5fcmlnaHQmJnRoaXMuX3JpZ2h0Lm9wZW5lZClpZigic2lkZSI9PXRoaXMuX3JpZ2h0Lm1vZGUpbis9dGhpcy5fcmlnaHQuX3dpZHRoO2Vsc2UgaWYoInB1c2giPT10aGlzLl9yaWdodC5tb2RlKXt2YXIgcjtuKz1yPXRoaXMuX3JpZ2h0Ll93aWR0aCxlLT1yfWU9PT10aGlzLl9jb250ZW50TWFyZ2lucy5sZWZ0JiZuPT09dGhpcy5fY29udGVudE1hcmdpbnMucmlnaHR8fCh0aGlzLl9jb250ZW50TWFyZ2lucz17bGVmdDplLHJpZ2h0Om59LHRoaXMuX25nWm9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5fY29udGVudE1hcmdpbkNoYW5nZXMubmV4dCh0Ll9jb250ZW50TWFyZ2lucyl9KSl9LHR9KCksd2w9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiB0LmNhbGwodGhpcyxlLG4pfHx0aGlzfXJldHVybiBPYmplY3QobC5iKShlLHQpLGV9KHZsKSx4bD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9maXhlZEluVmlld3BvcnQ9ITEsZS5fZml4ZWRUb3BHYXA9MCxlLl9maXhlZEJvdHRvbUdhcD0wLGV9cmV0dXJuIE9iamVjdChsLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmaXhlZEluVmlld3BvcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZml4ZWRJblZpZXdwb3J0fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRJblZpZXdwb3J0PU9iamVjdChDLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZml4ZWRUb3BHYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZml4ZWRUb3BHYXB9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9maXhlZFRvcEdhcD1PYmplY3QoQy5kKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkQm90dG9tR2FwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkQm90dG9tR2FwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRCb3R0b21HYXA9T2JqZWN0KEMuZCkodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oYmwpLE9sPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QobC5iKShlLHQpLGV9KF9sKSxDbD1mdW5jdGlvbigpe30sU2w9bigicUFsUyIpLEVsPWkuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIGtsKHQpe3JldHVybiBpLmliKDIsW2kuWGEobnVsbCwwKV0sbnVsbCxudWxsKX12YXIgVGw9aS5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToidHJhbnNmb3JtIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJvcGVuLCBvcGVuLWluc3RhbnQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgwLCAwLCAwKSIsdmlzaWJpbGl0eToidmlzaWJsZSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MCxuYW1lOiJ2b2lkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6eyJib3gtc2hhZG93Ijoibm9uZSIsdmlzaWJpbGl0eToiaGlkZGVuIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6InZvaWQgPT4gb3Blbi1pbnN0YW50IixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIwbXMifSxvcHRpb25zOm51bGx9LHt0eXBlOjEsZXhwcjoidm9pZCA8PT4gb3Blbiwgb3Blbi1pbnN0YW50ID0+IHZvaWQiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpIn0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX1dfX0pO2Z1bmN0aW9uIElsKHQpe3JldHVybiBpLmliKDIsW2kuWGEobnVsbCwwKV0sbnVsbCxudWxsKX12YXIgQWw9aS5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZHJhd2VyLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjE7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZHJhd2VyLWNvbnRhaW5lcltmdWxsc2NyZWVuXXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWRyYXdlci1jb250YWluZXJbZnVsbHNjcmVlbl0ubWF0LWRyYXdlci1vcGVuZWR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZHJhd2VyLWNvbnRhaW5lci5tYXQtZHJhd2VyLWNvbnRhaW5lci1leHBsaWNpdC1iYWNrZHJvcCAubWF0LWRyYXdlci1zaWRle3otaW5kZXg6M30ubWF0LWRyYXdlci1iYWNrZHJvcHt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3otaW5kZXg6Mzt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWRyYXdlci10cmFuc2l0aW9uIC5tYXQtZHJhd2VyLWJhY2tkcm9we3RyYW5zaXRpb24tZHVyYXRpb246LjRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO3RyYW5zaXRpb24tcHJvcGVydHk6YmFja2dyb3VuZC1jb2xvcix2aXNpYmlsaXR5fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZHJhd2VyLWJhY2tkcm9we29wYWNpdHk6LjV9fS5tYXQtZHJhd2VyLWNvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30ubWF0LWRyYXdlci10cmFuc2l0aW9uIC5tYXQtZHJhd2VyLWNvbnRlbnR7dHJhbnNpdGlvbi1kdXJhdGlvbjouNHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSk7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm0sbWFyZ2luLWxlZnQsbWFyZ2luLXJpZ2h0fS5tYXQtZHJhd2Vye3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6NDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3otaW5kZXg6MztvdXRsaW5lOjA7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93LXk6YXV0bzt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlcixbZGlyPXJ0bF0gLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmR7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCBjdXJyZW50Q29sb3J9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5kLFtkaXI9cnRsXSAubWF0LWRyYXdlcntib3JkZXItbGVmdDpzb2xpZCAxcHggY3VycmVudENvbG9yO2JvcmRlci1yaWdodDpub25lfX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXNpZGV7ei1pbmRleDoyfS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke3JpZ2h0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmR7bGVmdDowO3JpZ2h0OmF1dG87dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMDAlLDAsMCl9Lm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MCA4cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAyNHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMzBweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtc2lkZW5hdi1maXhlZHtwb3NpdGlvbjpmaXhlZH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gamwodCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCwwLCJkaXYiLFtbImNsYXNzIiwibWF0LWRyYXdlci1iYWNrZHJvcCJdXSxbWzIsIm1hdC1kcmF3ZXItc2hvd24iLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT10LmNvbXBvbmVudC5fb25CYWNrZHJvcENsaWNrZWQoKSYmcikscn0sbnVsbCxudWxsKSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLGUuY29tcG9uZW50Ll9pc1Nob3dpbmdCYWNrZHJvcCgpKX0pfWZ1bmN0aW9uIFBsKHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMywibWF0LXNpZGVuYXYtY29udGVudCIsW1siY2RrU2Nyb2xsYWJsZSIsIiJdLFsiY2xhc3MiLCJtYXQtZHJhd2VyLWNvbnRlbnQgbWF0LXNpZGVuYXYtY29udGVudCJdXSxbWzQsIm1hcmdpbi1sZWZ0IiwicHgiXSxbNCwibWFyZ2luLXJpZ2h0IiwicHgiXV0sbnVsbCxudWxsLGtsLEVsKSksaS5OYSgxLDIxMjk5MixbWzEsNF1dLDAsU2wuYSxbaS5rLFNsLmMsaS54XSxudWxsLG51bGwpLGkuTmEoMiwxMDk3NzI4LG51bGwsMCx3bCxbaS5oLE9sXSxudWxsLG51bGwpLGkuWGEoMCwyKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sZnVuY3Rpb24odCxlKXt0KGUsMCwwLGkuWWEoZSwyKS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5sZWZ0LGkuWWEoZSwyKS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5yaWdodCl9KX1mdW5jdGlvbiBNbCh0KXtyZXR1cm4gaS5pYigyLFtpLmViKDY3MTA4ODY0MCwxLHtzY3JvbGxhYmxlOjB9KSwodCgpKCksaS5GYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGpsKSksaS5OYSgyLDE2Mzg0LG51bGwsMCxhLmssW2kuTixpLktdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLGkuWGEobnVsbCwwKSxpLlhhKG51bGwsMSksKHQoKSgpLGkuRmEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxQbCkpLGkuTmEoNiwxNjM4NCxudWxsLDAsYS5rLFtpLk4saS5LXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMiwwLG4uaGFzQmFja2Ryb3ApLHQoZSw2LDAsIW4uX2NvbnRlbnQpfSxudWxsKX12YXIgTmw9bigiMC9RNiIpLFJsPW4oIkxDNXAiKTtuKCJnSWNZIik7dmFyIERsPWkuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWRpdmlkZXJ7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItdG9wLXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItdG9wOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtc3R5bGU6c29saWR9Lm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjgwcHh9W2Rpcj1ydGxdIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4MHB4fS5tYXQtc3ViaGVhZGVye2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye21hcmdpbjowfS5tYXQtbGlzdCwubWF0LW5hdi1saXN0LC5tYXQtc2VsZWN0aW9uLWxpc3R7cGFkZGluZy10b3A6OHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotOHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0OHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmluaGVyaXR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDE2cHg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXJ7aGVpZ2h0OjU2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5le2hlaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZXtoZWlnaHQ6ODhweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmV7aGVpZ2h0OmF1dG99Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KnttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eXtkaXNwbGF5Om5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ7ZmxleC1zaHJpbms6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo3MnB4O3dpZHRoOmNhbGMoMTAwJSAtIDcycHgpfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbntmbGV4LXNocmluazowO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjI0cHg7Ym94LXNpemluZzpjb250ZW50LWJveDtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NjRweDt3aWR0aDpjYWxjKDEwMCUgLSA2NHB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbGlzdFtkZW5zZV0sLm1hdC1uYXYtbGlzdFtkZW5zZV0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV17cGFkZGluZy10b3A6NHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi00cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjQwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6aW5oZXJpdH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMTZweDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhcntoZWlnaHQ6NDhweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmV7aGVpZ2h0OjYwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5le2hlaWdodDo3NnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZXtoZWlnaHQ6YXV0b30ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qe21hcmdpbjowO3BhZGRpbmc6MDtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5e2Rpc3BsYXk6bm9uZX0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcntmbGV4LXNocmluazowO3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY4cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjhweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ue2ZsZXgtc2hyaW5rOjA7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtmb250LXNpemU6MjBweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlci1yYWRpdXM6NTAlO3BhZGRpbmc6NHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2MHB4O3dpZHRoOmNhbGMoMTAwJSAtIDYwcHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTttYXJnaW46MH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1uYXYtbGlzdCBhe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOmluaGVyaXR9Lm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9Lm1hdC1saXN0LW9wdGlvbjpub3QoLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gTGwodCl7cmV0dXJuIGkuaWIoMixbaS5YYShudWxsLDApXSxudWxsLG51bGwpfXZhciBGbD1pLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBWbCh0KXtyZXR1cm4gaS5pYigyLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDYsImRpdiIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtLWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMSwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbS1yaXBwbGUgbWF0LXJpcHBsZSJdLFsibWF0LXJpcHBsZSIsIiJdXSxbWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuTmEoMiwyMTI5OTIsbnVsbCwwLGFsLnEsW2kuayxpLngsdS5hLFsyLGFsLmddLFsyLGZsLmFdXSx7ZGlzYWJsZWQ6WzAsImRpc2FibGVkIl0sdHJpZ2dlcjpbMSwidHJpZ2dlciJdfSxudWxsKSxpLlhhKG51bGwsMCksKHQoKSgpLGkuT2EoNCwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtdGV4dCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlhhKG51bGwsMSksaS5YYShudWxsLDIpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwyLDAsbi5faXNSaXBwbGVEaXNhYmxlZCgpLG4uX2dldEhvc3RFbGVtZW50KCkpfSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsaS5ZYShlLDIpLnVuYm91bmRlZCl9KX12YXIgVWw9bigiWllDaSIpLHpsPW4oIjIxTGIiKSxCbD1uKCJPemZCIiksSGw9bigiTWhtKyIpLFdsPWkuTWEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siYm9keVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjJlbX0uZmlsbC10b29sYmFyLXNwYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSBhdXRvfS5zaWRlbmF2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnNpZGVuYXZbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwMHB4O2JveC1zaGFkb3c6M3B4IDAgNnB4IHJnYmEoMCwwLDAsLjI0KX0jc2l0ZW1hcGJ1dFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7d2lkdGg6MTAwJX1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHh9I3NpZGVuYXZmbGV4Y29udGVudFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEwMDBweH1cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC5jb21wb25lbnQuY3NzLm1hcCovIl1dLGRhdGE6e319KTtmdW5jdGlvbiBxbCh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEzMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1hcHAtYmFja2dyb3VuZCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgxLDAsbnVsbCxudWxsLDE3LCJtYXQtdG9vbGJhciIsW1siY2xhc3MiLCJtYXQtdG9vbGJhciJdLFsiY29sb3IiLCJhY2NlbnQiXV0sW1syLCJtYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dzIixudWxsXSxbMiwibWF0LXRvb2xiYXItc2luZ2xlLXJvdyIsbnVsbF1dLG51bGwsbnVsbCx1bCxzbCkpLGkuTmEoMiw0MjQzNDU2LG51bGwsMSxpbC5hLFtpLmssdS5hLGEuZF0se2NvbG9yOlswLCJjb2xvciJdfSxudWxsKSxpLmViKDYwMzk3OTc3NiwxLHtfdG9vbGJhclJvd3M6MX0pLCh0KCkoKSxpLk9hKDQsMCxudWxsLDAsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQub3BlblNpZGVOYXYoKSYmcikscn0sbGwuYixsbC5hKSksaS5OYSg1LDE4MDIyNCxudWxsLDAsY2wuYixbaS5rLHUuYSxqdS5iLFsyLGZsLmFdXSxudWxsLG51bGwpLCh0KCkoKSxpLk9hKDYsMCxudWxsLDAsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSg3LDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbIm1lbnUiXSkpLCh0KCkoKSxpLk9hKDksMCxudWxsLDAsMCwic3BhbiIsW1siY2xhc3MiLCJmaWxsLXRvb2xiYXItc3BhY2UiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMTAsMCxudWxsLDAsMSwic3BhbiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIk1lVGhyaVgiXSkpLCh0KCkoKSxpLk9hKDEyLDAsbnVsbCwwLDAsInNwYW4iLFtbInN0eWxlIiwid2lkdGg6MC4yZW0iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMTMsMCxudWxsLDAsMCwiaW1nIixbWyJzcmMiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy9jL2MwL1QtLUdPX1BhcmlzLVNhY2xheS0tZ28tcHMtd2hpdGUucG5nIl0sWyJzdHlsZSIsIm1heC1oZWlnaHQ6MTAwJTsgd2lkdGg6YXV0bzsgcGFkZGluZzoxZW07Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDE0LDAsbnVsbCwwLDAsInNwYW4iLFtbInN0eWxlIiwid2lkdGg6MC4yZW0iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMTUsMCxudWxsLDAsMywic3BhbiIsW1sic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7bGluZS1oZWlnaHQ6IDg1JTsgZm9udC1zaXplOiBtZWRpdW07Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJUZWFtIEdPIl0pKSwodCgpKCksaS5PYSgxNywwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIlBhcmlzU2FjbGF5Il0pKSwodCgpKCksaS5PYSgxOSwwLG51bGwsbnVsbCwxMTEsIm1hdC1zaWRlbmF2LWNvbnRhaW5lciIsW1siY2xhc3MiLCJzaWRlbmF2LWNvbnRhaW5lciBtYXQtZHJhd2VyLWNvbnRhaW5lciBtYXQtc2lkZW5hdi1jb250YWluZXIiXV0sW1syLCJtYXQtZHJhd2VyLWNvbnRhaW5lci1leHBsaWNpdC1iYWNrZHJvcCIsbnVsbF1dLG51bGwsbnVsbCxNbCxBbCkpLGkuTmEoMjAsMTQ5MDk0NCxudWxsLDIsT2wsW1syLG9sLmJdLGkuayxpLngsaS5oLGdsLFsyLGZsLmFdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDIse19kcmF3ZXJzOjF9KSxpLmViKDMzNTU0NDMyMCwzLHtfY29udGVudDowfSksKHQoKSgpLGkuT2EoMjMsMCxudWxsLDAsOTksIm1hdC1zaWRlbmF2IixbWyJjbGFzcyIsInNpZGVuYXYgbWF0LWRyYXdlciBtYXQtc2lkZW5hdiJdLFsiZml4ZWRJblZpZXdwb3J0IiwidHJ1ZSJdLFsidGFiSW5kZXgiLCItMSJdXSxbWzEsInJvbGUiLDBdLFs0MCwiQHRyYW5zZm9ybSIsMF0sWzEsImFsaWduIiwwXSxbMiwibWF0LWRyYXdlci1lbmQiLG51bGxdLFsyLCJtYXQtZHJhd2VyLW92ZXIiLG51bGxdLFsyLCJtYXQtZHJhd2VyLXB1c2giLG51bGxdLFsyLCJtYXQtZHJhd2VyLXNpZGUiLG51bGxdLFsyLCJtYXQtc2lkZW5hdi1maXhlZCIsbnVsbF0sWzQsInRvcCIsInB4Il0sWzQsImJvdHRvbSIsInB4Il1dLFtbImNvbXBvbmVudCIsIkB0cmFuc2Zvcm0uc3RhcnQiXSxbImNvbXBvbmVudCIsIkB0cmFuc2Zvcm0uZG9uZSJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNvbXBvbmVudDpAdHJhbnNmb3JtLnN0YXJ0Ij09PWUmJihyPSExIT09aS5ZYSh0LDI0KS5fb25BbmltYXRpb25TdGFydChuKSYmciksImNvbXBvbmVudDpAdHJhbnNmb3JtLmRvbmUiPT09ZSYmKHI9ITEhPT1pLllhKHQsMjQpLl9vbkFuaW1hdGlvbkVuZChuKSYmcikscn0sSWwsVGwpKSxpLk5hKDI0LDMzMjU5NTIsW1syLDRdLFsiZHJhd2VyIiw0XV0sMCx4bCxbaS5rLGp1LmMsanUuYix1LmEsaS54LFsyLGEuZF1dLHttb2RlOlswLCJtb2RlIl0sb3BlbmVkOlsxLCJvcGVuZWQiXSxmaXhlZEluVmlld3BvcnQ6WzIsImZpeGVkSW5WaWV3cG9ydCJdfSxudWxsKSxpLmFiKDEzMTA3MixhLmIsW2kuaF0pLGkuYWIoMTMxMDcyLGEuYixbaS5oXSksKHQoKSgpLGkuT2EoMjcsMCxudWxsLDAsOSwibWF0LXRvb2xiYXIiLFtbImNsYXNzIiwibWF0LXRvb2xiYXIiXSxbImNvbG9yIiwicHJpbWFyeSJdLFsic3R5bGUiLCJtYXJnaW4tdG9wOiAxNXB4OyJdXSxbWzIsIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG51bGxdLFsyLCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IixudWxsXV0sbnVsbCxudWxsLHVsLHNsKSksaS5OYSgyOCw0MjQzNDU2LG51bGwsMSxpbC5hLFtpLmssdS5hLGEuZF0se2NvbG9yOlswLCJjb2xvciJdfSxudWxsKSxpLmViKDYwMzk3OTc3Niw0LHtfdG9vbGJhclJvd3M6MX0pLCh0KCkoKSxpLmdiKC0xLDAsWyJOYXZpZ2F0aW9uICJdKSksKHQoKSgpLGkuT2EoMzEsMCxudWxsLDAsMCwic3BhbiIsW1siY2xhc3MiLCJmaWxsLXRvb2xiYXItc3BhY2UiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMzIsMCxudWxsLDAsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQub3BlblNpZGVOYXYoKSYmcikscn0sbGwuYixsbC5hKSksaS5OYSgzMywxODAyMjQsbnVsbCwwLGNsLmIsW2kuayx1LmEsanUuYixbMixmbC5hXV0sbnVsbCxudWxsKSwodCgpKCksaS5PYSgzNCwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxobC5iLGhsLmEpKSxpLk5hKDM1LDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbImtleWJvYXJkX2Fycm93X2xlZnQiXSkpLCh0KCkoKSxpLk9hKDM3LDAsbnVsbCwwLDg1LCJtYXQtbmF2LWxpc3QiLFtbImNsYXNzIiwibWF0LW5hdi1saXN0Il0sWyJyb2xlIiwibmF2aWdhdGlvbiJdXSxudWxsLG51bGwsbnVsbCxMbCxEbCkpLGkuTmEoMzgsNDkxNTIsbnVsbCwwLE5sLmUsW10sbnVsbCxudWxsKSwodCgpKCksaS5PYSgzOSwwLG51bGwsMCw3LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdXSxbW251bGwsImNsaWNrIl0sW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLG89dC5jb21wb25lbnQ7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDQwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsNDApLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PW8ucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZygiL2Rhc2hib2FyZCIpJiZyKSxyfSxWbCxGbCkpLGkuTmEoNDAsMTA5NzcyOCxudWxsLDIsTmwuYixbaS5rLFsyLE5sLmVdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDUse19saW5lczoxfSksaS5lYigzMzU1NDQzMjAsNix7X2F2YXRhcjowfSksKHQoKSgpLGkuT2EoNDMsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSg0NCw2Mzg5NzYsbnVsbCwwLGRsLmEsW2kuayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLDAsWyJkYXNoYm9hcmQiXSkpLCh0KCkoKSxpLmdiKC0xLDIsWyIgTWFpbiBwYWdlIl0pKSwodCgpKCksaS5PYSg0NywwLG51bGwsMCw3LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdXSxbW251bGwsImNsaWNrIl0sW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLG89dC5jb21wb25lbnQ7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDQ4KS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsNDgpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PW8ucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZygiL3Byb2plY3QiKSYmcikscn0sVmwsRmwpKSxpLk5hKDQ4LDEwOTc3MjgsbnVsbCwyLE5sLmIsW2kuayxbMixObC5lXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3Niw3LHtfbGluZXM6MX0pLGkuZWIoMzM1NTQ0MzIwLDgse19hdmF0YXI6MH0pLCh0KCkoKSxpLk9hKDUxLDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGhsLmIsaGwuYSkpLGkuTmEoNTIsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsiYXNzZXNzbWVudCJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBQcm9qZWN0IGRldGFpbHMiXSkpLCh0KCkoKSxpLk9hKDU1LDAsbnVsbCwwLDcsImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXSxbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITAsbz10LmNvbXBvbmVudDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1pLllhKHQsNTYpLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PWkuWWEodCw1NikuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5yb3V0ZXJMaW5rQ2h1bmtQcm9jZXNzaW5nKCIvYmlvbG9neSIpJiZyKSxyfSxWbCxGbCkpLGkuTmEoNTYsMTA5NzcyOCxudWxsLDIsTmwuYixbaS5rLFsyLE5sLmVdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDkse19saW5lczoxfSksaS5lYigzMzU1NDQzMjAsMTAse19hdmF0YXI6MH0pLCh0KCkoKSxpLk9hKDU5LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGhsLmIsaGwuYSkpLGkuTmEoNjAsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsiYmx1cl9jaXJjdWxhciJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBCaW9sb2d5Il0pKSwodCgpKCksaS5PYSg2MywwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1pLllhKHQsNjQpLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PWkuWWEodCw2NCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09aS5ZYSh0LDY3KS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LFZsLEZsKSksaS5OYSg2NCwxMDk3NzI4LG51bGwsMixObC5iLFtpLmssWzIsTmwuZV1dLG51bGwsbnVsbCksaS5lYig2MDM5Nzk3NzYsMTEse19saW5lczoxfSksaS5lYigzMzU1NDQzMjAsMTIse19hdmF0YXI6MH0pLGkuTmEoNjcsNjcxNzQ0LG51bGwsMCxVbC5sLFtVbC5rLFVsLmEsYS5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxpLlphKDY4LDEpLCh0KCkoKSxpLk9hKDY5LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGhsLmIsaGwuYSkpLGkuTmEoNzAsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsibWVtb3J5Il0pKSwodCgpKCksaS5nYigtMSwyLFsiIENvbXB1dGluZyJdKSksKHQoKSgpLGkuT2EoNzMsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDc0KS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsNzQpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PWkuWWEodCw3Nykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxWbCxGbCkpLGkuTmEoNzQsMTA5NzcyOCxudWxsLDIsTmwuYixbaS5rLFsyLE5sLmVdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDEzLHtfbGluZXM6MX0pLGkuZWIoMzM1NTQ0MzIwLDE0LHtfYXZhdGFyOjB9KSxpLk5hKDc3LDY3MTc0NCxudWxsLDAsVWwubCxbVWwuayxVbC5hLGEuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksaS5aYSg3OCwxKSwodCgpKCksaS5PYSg3OSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxobC5iLGhsLmEpKSxpLk5hKDgwLDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbImFjY2Vzc2liaWxpdHlfbmV3Il0pKSwodCgpKCksaS5nYigtMSwyLFsiIEh1bWFuIFByYWN0aWNlcyJdKSksKHQoKSgpLGkuT2EoODMsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDg0KS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsODQpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PWkuWWEodCw4Nykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxWbCxGbCkpLGkuTmEoODQsMTA5NzcyOCxudWxsLDIsTmwuYixbaS5rLFsyLE5sLmVdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDE1LHtfbGluZXM6MX0pLGkuZWIoMzM1NTQ0MzIwLDE2LHtfYXZhdGFyOjB9KSxpLk5hKDg3LDY3MTc0NCxudWxsLDAsVWwubCxbVWwuayxVbC5hLGEuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksaS5aYSg4OCwxKSwodCgpKCksaS5PYSg4OSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxobC5iLGhsLmEpKSxpLk5hKDkwLDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbInBlb3BsZSJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBPdXIgdGVhbSJdKSksKHQoKSgpLGkuT2EoOTMsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDk0KS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsOTQpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PWkuWWEodCw5Nykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxWbCxGbCkpLGkuTmEoOTQsMTA5NzcyOCxudWxsLDIsTmwuYixbaS5rLFsyLE5sLmVdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDE3LHtfbGluZXM6MX0pLGkuZWIoMzM1NTQ0MzIwLDE4LHtfYXZhdGFyOjB9KSxpLk5hKDk3LDY3MTc0NCxudWxsLDAsVWwubCxbVWwuayxVbC5hLGEuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksaS5aYSg5OCwxKSwodCgpKCksaS5PYSg5OSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxobC5iLGhsLmEpKSxpLk5hKDEwMCw2Mzg5NzYsbnVsbCwwLGRsLmEsW2kuayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLDAsWyJmb2xkZXJfc3BlY2lhbCJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBTdXBwb3J0Il0pKSwodCgpKCksaS5PYSgxMDMsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDEwNCkuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09aS5ZYSh0LDEwNCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09aS5ZYSh0LDEwNykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxWbCxGbCkpLGkuTmEoMTA0LDEwOTc3MjgsbnVsbCwyLE5sLmIsW2kuayxbMixObC5lXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3NiwxOSx7X2xpbmVzOjF9KSxpLmViKDMzNTU0NDMyMCwyMCx7X2F2YXRhcjowfSksaS5OYSgxMDcsNjcxNzQ0LG51bGwsMCxVbC5sLFtVbC5rLFVsLmEsYS5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxpLlphKDEwOCwxKSwodCgpKCksaS5PYSgxMDksMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSgxMTAsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsiYm9vayJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIkxhYiBOb3RlYm9vayJdKSksKHQoKSgpLGkuT2EoMTEzLDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsiaWQiLCJzaXRlbWFwYnV0Il0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDExNCkuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09aS5ZYSh0LDExNCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09aS5ZYSh0LDExNykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxWbCxGbCkpLGkuTmEoMTE0LDEwOTc3MjgsbnVsbCwyLE5sLmIsW2kuayxbMixObC5lXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3NiwyMSx7X2xpbmVzOjF9KSxpLmViKDMzNTU0NDMyMCwyMix7X2F2YXRhcjowfSksaS5OYSgxMTcsNjcxNzQ0LG51bGwsMCxVbC5sLFtVbC5rLFVsLmEsYS5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxpLlphKDExOCwxKSwodCgpKCksaS5PYSgxMTksMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSgxMjAsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsiYXBwcyJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBTaXRlIG1hcCJdKSksKHQoKSgpLGkuT2EoMTIzLDAsbnVsbCwxLDcsIm1hdC1zaWRlbmF2LWNvbnRlbnQiLFtbImNsYXNzIiwibWF0LWRyYXdlci1jb250ZW50IG1hdC1zaWRlbmF2LWNvbnRlbnQiXSxbImZ4TGF5b3V0Iiwicm93Il0sWyJmeExheW91dEFsaWduIiwiY2VudGVyIl1dLFtbNCwibWFyZ2luLWxlZnQiLCJweCJdLFs0LCJtYXJnaW4tcmlnaHQiLCJweCJdXSxudWxsLG51bGwsa2wsRWwpKSxpLk5hKDEyNCwxMDk3NzI4LFtbMyw0XV0sMCx3bCxbaS5oLE9sXSxudWxsLG51bGwpLGkuTmEoMTI1LDczNzI4MCxudWxsLDAsemwuZSxbQmwuaSxpLmssQmwubV0se2xheW91dDpbMCwibGF5b3V0Il19LG51bGwpLGkuTmEoMTI2LDczNzI4MCxudWxsLDAsemwuZCxbQmwuaSxpLmssWzYsemwuZV0sQmwubV0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwodCgpKCksaS5PYSgxMjcsMCxudWxsLDAsMywiZGl2IixbWyJmeEZsZXgiLCIxIDAgNTAwcHgiXSxbImlkIiwic2lkZW5hdmZsZXhjb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuTmEoMTI4LDczNzI4MCxudWxsLDAsemwuYSxbQmwuaSxpLmssWzMsemwuZV0sQmwubSxCbC5nXSx7ZmxleDpbMCwiZmxleCJdfSxudWxsKSwodCgpKCksaS5PYSgxMjksMTY3NzcyMTYsbnVsbCxudWxsLDEsInJvdXRlci1vdXRsZXQiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuTmEoMTMwLDIxMjk5MixudWxsLDAsVWwubixbVWwuYixpLk4saS5qLFs4LG51bGxdLGkuaF0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMiwwLCJhY2NlbnQiKSx0KGUsNywwKSx0KGUsMjAsMCksdChlLDI0LDAsaS5oYihlLDI0LDAsaS5ZYShlLDI1KS50cmFuc2Zvcm0obi5pc0hhbmRzZXQkKSk/Im92ZXIiOiJzaWRlIixuLm9wZW5lZFNpZGVOYXYsInRydWUiKSx0KGUsMjgsMCwicHJpbWFyeSIpLHQoZSwzNSwwKSx0KGUsNDQsMCksdChlLDUyLDApLHQoZSw2MCwwKSx0KGUsNjcsMCx0KGUsNjgsMCwiLi4vY29tcHV0aW5nIikpLHQoZSw3MCwwKSx0KGUsNzcsMCx0KGUsNzgsMCwiLi4vaHVtYW4tcHJhY3RpY2VzIikpLHQoZSw4MCwwKSx0KGUsODcsMCx0KGUsODgsMCwiLi4vdGVhbSIpKSx0KGUsOTAsMCksdChlLDk3LDAsdChlLDk4LDAsIi4uL3N1cHBvcnQiKSksdChlLDEwMCwwKSx0KGUsMTA3LDAsdChlLDEwOCwwLCIuLi9sYWJub3RlYm9vayIpKSx0KGUsMTEwLDApLHQoZSwxMTcsMCx0KGUsMTE4LDAsIi4uL3NpdGVtYXAiKSksdChlLDEyMCwwKSx0KGUsMTI1LDAsInJvdyIpLHQoZSwxMjYsMCwiY2VudGVyIiksdChlLDEyOCwwLCIxIDAgNTAwcHgiKSx0KGUsMTMwLDApfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsaS5ZYShlLDIpLl90b29sYmFyUm93cy5sZW5ndGgsIWkuWWEoZSwyKS5fdG9vbGJhclJvd3MubGVuZ3RoKSx0KGUsNCwwLGkuWWEoZSw1KS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09aS5ZYShlLDUpLl9hbmltYXRpb25Nb2RlKSx0KGUsNiwwLGkuWWEoZSw3KS5pbmxpbmUpLHQoZSwxOSwwLGkuWWEoZSwyMCkuX2JhY2tkcm9wT3ZlcnJpZGUpLHQoZSwyMywwLGkuaGIoZSwyMywwLGkuWWEoZSwyNikudHJhbnNmb3JtKG4uaXNIYW5kc2V0JCkpPyJkaWFsb2ciOiJuYXZpZ2F0aW9uIixpLllhKGUsMjQpLl9hbmltYXRpb25TdGF0ZSxudWxsLCJlbmQiPT09aS5ZYShlLDI0KS5wb3NpdGlvbiwib3ZlciI9PT1pLllhKGUsMjQpLm1vZGUsInB1c2giPT09aS5ZYShlLDI0KS5tb2RlLCJzaWRlIj09PWkuWWEoZSwyNCkubW9kZSxpLllhKGUsMjQpLmZpeGVkSW5WaWV3cG9ydCxpLllhKGUsMjQpLmZpeGVkSW5WaWV3cG9ydD9pLllhKGUsMjQpLmZpeGVkVG9wR2FwOm51bGwsaS5ZYShlLDI0KS5maXhlZEluVmlld3BvcnQ/aS5ZYShlLDI0KS5maXhlZEJvdHRvbUdhcDpudWxsKSx0KGUsMjcsMCxpLllhKGUsMjgpLl90b29sYmFyUm93cy5sZW5ndGgsIWkuWWEoZSwyOCkuX3Rvb2xiYXJSb3dzLmxlbmd0aCksdChlLDMyLDAsaS5ZYShlLDMzKS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09aS5ZYShlLDMzKS5fYW5pbWF0aW9uTW9kZSksdChlLDM0LDAsaS5ZYShlLDM1KS5pbmxpbmUpLHQoZSwzOSwwLGkuWWEoZSw0MCkuX2F2YXRhcixpLllhKGUsNDApLl9hdmF0YXIpLHQoZSw0MywwLGkuWWEoZSw0NCkuaW5saW5lKSx0KGUsNDcsMCxpLllhKGUsNDgpLl9hdmF0YXIsaS5ZYShlLDQ4KS5fYXZhdGFyKSx0KGUsNTEsMCxpLllhKGUsNTIpLmlubGluZSksdChlLDU1LDAsaS5ZYShlLDU2KS5fYXZhdGFyLGkuWWEoZSw1NikuX2F2YXRhciksdChlLDU5LDAsaS5ZYShlLDYwKS5pbmxpbmUpLHQoZSw2MywwLGkuWWEoZSw2NCkuX2F2YXRhcixpLllhKGUsNjQpLl9hdmF0YXIsaS5ZYShlLDY3KS50YXJnZXQsaS5ZYShlLDY3KS5ocmVmKSx0KGUsNjksMCxpLllhKGUsNzApLmlubGluZSksdChlLDczLDAsaS5ZYShlLDc0KS5fYXZhdGFyLGkuWWEoZSw3NCkuX2F2YXRhcixpLllhKGUsNzcpLnRhcmdldCxpLllhKGUsNzcpLmhyZWYpLHQoZSw3OSwwLGkuWWEoZSw4MCkuaW5saW5lKSx0KGUsODMsMCxpLllhKGUsODQpLl9hdmF0YXIsaS5ZYShlLDg0KS5fYXZhdGFyLGkuWWEoZSw4NykudGFyZ2V0LGkuWWEoZSw4NykuaHJlZiksdChlLDg5LDAsaS5ZYShlLDkwKS5pbmxpbmUpLHQoZSw5MywwLGkuWWEoZSw5NCkuX2F2YXRhcixpLllhKGUsOTQpLl9hdmF0YXIsaS5ZYShlLDk3KS50YXJnZXQsaS5ZYShlLDk3KS5ocmVmKSx0KGUsOTksMCxpLllhKGUsMTAwKS5pbmxpbmUpLHQoZSwxMDMsMCxpLllhKGUsMTA0KS5fYXZhdGFyLGkuWWEoZSwxMDQpLl9hdmF0YXIsaS5ZYShlLDEwNykudGFyZ2V0LGkuWWEoZSwxMDcpLmhyZWYpLHQoZSwxMDksMCxpLllhKGUsMTEwKS5pbmxpbmUpLHQoZSwxMTMsMCxpLllhKGUsMTE0KS5fYXZhdGFyLGkuWWEoZSwxMTQpLl9hdmF0YXIsaS5ZYShlLDExNykudGFyZ2V0LGkuWWEoZSwxMTcpLmhyZWYpLHQoZSwxMTksMCxpLllhKGUsMTIwKS5pbmxpbmUpLHQoZSwxMjMsMCxpLllhKGUsMTI0KS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5sZWZ0LGkuWWEoZSwxMjQpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLnJpZ2h0KX0pfXZhciBZbD1pLkthKCJhcHAtcm9vdCIsTSxmdW5jdGlvbih0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEsImFwcC1yb290IixbXSxudWxsLG51bGwsbnVsbCxxbCxXbCkpLGkuTmEoMSwxMTQ2ODgsbnVsbCwwLE0sW1QsVWwuayxIbC5hXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLEdsPW4oIlpZanQiKSxRbD1uKCJOU1lMIiksS2w9bigiZURrUCIpLFpsPW4oIm1Wc2EiKSxYbD1uKCJ0L05hIiksJGw9bigiYWVjZCIpLEpsPW4oImhVV1AiKSx0Yz1uKCIzcEpRIiksZWM9bigiVjlxKyIpLG5jPW4oIjAvdVEiKSxyYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnJvdXRlcj10LHRoaXMuY2h1bmtMb2FkZXI9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FuQWN0aXZhdGU9ZnVuY3Rpb24odCxlKXtpZigwPT1vLmEucHJvZHVjdGlvbilyZXR1cm4gT2JqZWN0KG5jLmEpKG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7dCghMCl9KSk7dmFyIG49ZS51cmw7cmV0dXJuIGNvbnNvbGUubG9nKCJDaHVua0d1YXJkIDogIituKSx0aGlzLmNodW5rTG9hZGVyLmFzeW5jTG9hZFBhZ2VDaHVuayhuKX0sdC5uZ0luamVjdGFibGVEZWY9aS5SKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KGkuVihVbC5rKSxpLlYoSGwuYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxpYz1mdW5jdGlvbigpe30sb2M9bigicFpoTSIpLGFjPWkuTGEocyxbTV0sZnVuY3Rpb24odCl7cmV0dXJuIGkuVmEoW2kuV2EoNTEyLGkuaixpLkFhLFtbOCxbTi5hLGN1LHp1LHF1LEt1LEp1LHJsLFlsXV0sWzMsaS5qXSxpLnZdKSxpLldhKDUxMjAsaS5zLGkuSmEsW1szLGkuc11dKSxpLldhKDQ2MDgsYS5tLGEubCxbaS5zLFsyLGEudF1dKSxpLldhKDUxMjAsaS5xLGkuSGEsW10pLGkuV2EoNTEyMCxpLnIsaS5JYSxbXSksaS5XYSg0NjA4LEdsLmMsR2wucixbYS5kXSksaS5XYSg2MTQ0LGkuRSxudWxsLFtHbC5jXSksaS5XYSg0NjA4LEdsLmYsR2wuZyxbXSksaS5XYSg1MTIwLEdsLmQsZnVuY3Rpb24odCxlLG4scixpLG8sYSl7cmV0dXJuW25ldyBHbC5rKHQsZSxuKSxuZXcgR2wubyhyKSxuZXcgR2wubihpLG8sYSldfSxbYS5kLGkueCxbMixpLnpdLGEuZCxhLmQsR2wuZixpLkJhXSksaS5XYSg0NjA4LEdsLmUsR2wuZSxbR2wuZCxpLnhdKSxpLldhKDEzNTY4MCxHbC5tLEdsLm0sW2EuZF0pLGkuV2EoNDYwOCxHbC5sLEdsLmwsW0dsLmUsR2wubV0pLGkuV2EoNTEyMCxRbC5hLGZsLmUsW10pLGkuV2EoNTEyMCxRbC5jLGZsLmYsW10pLGkuV2EoNDYwOCxRbC5iLGZsLmQsW2EuZCxRbC5hLFFsLmNdKSxpLldhKDUxMjAsaS5DLGZsLmcsW0dsLmwsUWwuYixpLnhdKSxpLldhKDYxNDQsR2wucCxudWxsLFtHbC5tXSksaS5XYSg0NjA4LGkuTCxpLkwsW2kueF0pLGkuV2EoNDYwOCxHbC5oLEdsLmgsW2EuZF0pLGkuV2EoNDYwOCxHbC5pLEdsLmksW2EuZF0pLGkuV2EoNDYwOCxndS5iLGZsLmMsW2kuQyxHbC5iXSksaS5XYSg0NjA4LEJsLmssQmwuaixbQmwuZCxCbC5oXSksaS5XYSg1MTIwLFVsLmgsVWwuQSxbVWwueV0pLGkuV2EoNTEyMCxpLmIsZnVuY3Rpb24odCxlLG4pe3JldHVybltCbC5uKHQsZSksbl19LFthLmQsaS56LFVsLmhdKSxpLldhKDUxMjAsVWwuYSxVbC54LFtVbC5rXSksaS5XYSg0NjA4LFVsLmQsVWwuZCxbXSksaS5XYSg2MTQ0LFVsLmYsbnVsbCxbVWwuZF0pLGkuV2EoMTM1NjgwLFVsLm8sVWwubyxbVWwuayxpLnUsaS5pLGkucCxVbC5mXSksaS5XYSg0NjA4LFVsLmUsVWwuZSxbXSksaS5XYSg0NjA4LEtsLmEsS2wuYSxbS2wuZyxLbC5jLGkuaixLbC5mLEtsLmQsaS5wLGkueCxhLmQsb2wuYl0pLGkuV2EoNTEyMCxLbC5oLEtsLmksW0tsLmFdKSxpLldhKDUxMjAsWmwuYSxabC5jLFtLbC5hXSksaS5XYSg0NjA4LFhsLmgsWGwubixbYS5kLGkueixYbC5sXSksaS5XYSg0NjA4LFhsLm8sWGwubyxbWGwuaCxYbC5tXSksaS5XYSg1MTIwLFhsLmEsZnVuY3Rpb24odCl7cmV0dXJuW3RdfSxbWGwub10pLGkuV2EoMTA3Mzc0MjMzNixhLmMsYS5jLFtdKSxpLldhKDEwMjQsaS5sLEdsLnEsW10pLGkuV2EoMTAyNCxpLncsZnVuY3Rpb24oKXtyZXR1cm5bVWwudCgpXX0sW10pLGkuV2EoNTEyLFVsLnksVWwueSxbaS5wXSksaS5XYSg1MTIsWGwuayxYbC5rLFtdKSxpLldhKDIwNDgsWGwuaSxudWxsLFtYbC5rXSksaS5XYSg1MTIsWGwuZyxYbC5nLFtYbC5pXSksaS5XYSgyMDQ4LFhsLmIsbnVsbCxbWGwuZ10pLGkuV2EoNTEyLFhsLmYsWGwuaixbWGwuYixpLnBdKSxpLldhKDUxMixYbC5jLFhsLmMsW1hsLmZdKSxpLldhKDUxMiwkbC5hLCRsLmEsW1hsLmNdKSxpLldhKDEwMjQsaS5kLGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bR2wucyh0KSxVbC56KGUpLChyPW4sZnVuY3Rpb24oKXtyZXR1cm4gci5sb2FkUGFnZUF0SW5pdCgpfSldO3ZhciByfSxbWzIsaS53XSxVbC55LCRsLmFdKSxpLldhKDUxMixpLmUsaS5lLFtbMixpLmRdXSksaS5XYSgxMzE1ODQsaS5nLGkuZyxbaS54LGkuQmEsaS5wLGkubCxpLmosaS5lXSksaS5XYSgxMDczNzQyMzM2LGkuZixpLmYsW2kuZ10pLGkuV2EoMTA3Mzc0MjMzNixHbC5hLEdsLmEsW1szLEdsLmFdXSksaS5XYSgxMDczNzQyMzM2LGZsLmIsZmwuYixbXSksaS5XYSgxMDczNzQyMzM2LG9sLmEsb2wuYSxbXSksaS5XYSgxMDczNzQyMzM2LGFsLmgsYWwuaCxbWzIsYWwuYl1dKSxpLldhKDEwNzM3NDIzMzYsaWwuYixpbC5iLFtdKSxpLldhKDEwNzM3NDIzMzYsdS5iLHUuYixbXSksaS5XYSgxMDczNzQyMzM2LGFsLnIsYWwucixbXSksaS5XYSgxMDczNzQyMzM2LGNsLmMsY2wuYyxbXSksaS5XYSgxMDczNzQyMzM2LFNsLmIsU2wuYixbXSksaS5XYSgxMDczNzQyMzM2LENsLENsLFtdKSxpLldhKDEwNzM3NDIzMzYsZGwuYixkbC5iLFtdKSxpLldhKDEwNzM3NDIzMzYsYWwuaSxhbC5pLFtdKSxpLldhKDEwNzM3NDIzMzYsYWwucCxhbC5wLFtdKSxpLldhKDEwNzM3NDIzMzYsUmwuYSxSbC5hLFtdKSxpLldhKDEwNzM3NDIzMzYsTmwuYyxObC5jLFtdKSxpLldhKDEwNzM3NDIzMzYseXUseXUsW10pLGkuV2EoMTA3Mzc0MjMzNix2dS5jLHZ1LmMsW10pLGkuV2EoMTA3Mzc0MjMzNixJdSxJdSxbXSksaS5XYSgxMDczNzQyMzM2LEJsLmUsQmwuZSxbXSksaS5XYSgxMDczNzQyMzM2LHpsLmMsemwuYyxbXSksaS5XYSgxMDczNzQyMzM2LEpsLmEsSmwuYSxbXSksaS5XYSgxMDczNzQyMzM2LHRjLmEsdGMuYSxbXSksaS5XYSgxMDczNzQyMzM2LGVjLmEsZWMuYSxbWzIsQmwubF0saS56XSksaS5XYSgxMDI0LFVsLnMsVWwudixbWzMsVWwua11dKSxpLldhKDUxMixVbC5xLFVsLmMsW10pLGkuV2EoNTEyLFVsLmIsVWwuYixbXSksaS5XYSgyNTYsVWwuZyx7dXNlSGFzaDohMH0sW10pLGkuV2EoMTAyNCxhLmgsVWwudSxbYS5wLFsyLGEuYV0sVWwuZ10pLGkuV2EoNTEyLGEuZyxhLmcsW2EuaF0pLGkuV2EoNTEyLGkuaSxpLmksW10pLGkuV2EoNTEyLGkudSxpLkksW2kuaSxbMixpLkpdXSksaS5XYSgxMDI0LFVsLmksZnVuY3Rpb24oKXtyZXR1cm5bW3twYXRoOiJkYXNoYm9hcmQiLGNvbXBvbmVudDpzdSxjYW5BY3RpdmF0ZTpbcmNdfSx7cGF0aDoic2l0ZW1hcCIsY29tcG9uZW50OkZ1LGNhbkFjdGl2YXRlOltyY119LHtwYXRoOiJsYWJub3RlYm9vay86cGFnZXBhdGgiLGxvYWRDaGlsZHJlbjoiLi93aWtpLWxpZ2h0cHJveHkvd2lraS1saWdodHByb3h5LWxheWVyLm1vZHVsZSNXaWtpTGlnaHRwcm94eUxheWVyTW9kdWxlIixjYW5BY3RpdmF0ZTpbcmNdfSx7cGF0aDoibGFibm90ZWJvb2siLGxvYWRDaGlsZHJlbjoiLi93aWtpLWxpZ2h0cHJveHkvd2lraS1saWdodHByb3h5LWxheWVyLm1vZHVsZSNXaWtpTGlnaHRwcm94eUxheWVyTW9kdWxlIixjYW5BY3RpdmF0ZTpbcmNdfSx7cGF0aDoidGVhbSIsbG9hZENoaWxkcmVuOiIuL3RlYW0tcm9zdGVyL3RlYW0tcm9zdGVyLWxheWVyLm1vZHVsZSNUZWFtUm9zdGVyTGF5ZXJNb2R1bGUiLGNhbkFjdGl2YXRlOltyY119LHtwYXRoOiJwcm9qZWN0Iixjb21wb25lbnQ6QnUsY2FuQWN0aXZhdGU6W3JjXX0se3BhdGg6ImJpb2xvZ3kiLGNvbXBvbmVudDpZdSxjYW5BY3RpdmF0ZTpbcmNdfSx7cGF0aDoiY29tcHV0aW5nIixjb21wb25lbnQ6WnUsY2FuQWN0aXZhdGU6W3JjXX0se3BhdGg6Imh1bWFuLXByYWN0aWNlcyIsY29tcG9uZW50OnRsLGNhbkFjdGl2YXRlOltyY119LHtwYXRoOiJzdXBwb3J0Iixsb2FkQ2hpbGRyZW46Ii4vc3VwcG9ydC1zZWN0aW9uL3N1cHBvcnQtc2VjdGlvbi1sYXllci5tb2R1bGUjU3VwcG9ydFNlY3Rpb25MYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W3JjXX0se3BhdGg6IiIscmVkaXJlY3RUbzoiZGFzaGJvYXJkIixwYXRoTWF0Y2g6ImZ1bGwifV1dfSxbXSksaS5XYSgxMDI0LFVsLmssVWwudyxbaS5nLFVsLnEsVWwuYixhLmcsaS5wLGkudSxpLmksVWwuaSxVbC5nLFsyLFVsLnBdLFsyLFVsLmpdXSksaS5XYSgxMDczNzQyMzM2LFVsLm0sVWwubSxbWzIsVWwuc10sWzIsVWwua11dKSxpLldhKDEwNzM3NDIzMzYsaWMsaWMsW10pLGkuV2EoMTA3Mzc0MjMzNixELmQsRC5kLFtdKSxpLldhKDEwNzM3NDIzMzYsS2wuZSxLbC5lLFtdKSxpLldhKDEwNzM3NDIzMzYsWmwuYixabC5iLFtdKSxpLldhKDEwNzM3NDIzMzYsWGwuZSxYbC5lLFtdKSxpLldhKDEwNzM3NDIzMzYsWGwuZCxYbC5kLFtdKSxpLldhKDEwNzM3NDIzMzYsb2MuYSxvYy5hLFtdKSxpLldhKDEwMjQsaS5jLGkuR2EsW10pLGkuV2EoMTA3Mzc0MjMzNixzLHMsW2kueixpLmNdKSxpLldhKDI1NixpLlosITAsW10pLGkuV2EoMjU2LGZsLmEsIkJyb3dzZXJBbmltYXRpb25zIixbXSksaS5XYSgyNTYsWGwubCwiWFNSRi1UT0tFTiIsW10pLGkuV2EoMjU2LFhsLm0sIlgtWFNSRi1UT0tFTiIsW10pXSl9KTtvLmEucHJvZHVjdGlvbiYmT2JqZWN0KGkuUykoKSxHbC5qKCkuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShhYykuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSl9LHpvdG06ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJtclNHIiksaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkucGFyZW50PWUsaS5vdXRlclZhbHVlPW4saS5vdXRlckluZGV4PXIsaS5pbmRleD0wLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMucGFyZW50Lm5vdGlmeU5leHQodGhpcy5vdXRlclZhbHVlLHQsdGhpcy5vdXRlckluZGV4LHRoaXMuaW5kZXgrKyx0aGlzKX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMucGFyZW50Lm5vdGlmeUVycm9yKHQsdGhpcyksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudC5ub3RpZnlDb21wbGV0ZSh0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGV9KG4oIkZGT28iKS5hKSxvPW4oIkZ4YjEiKTtmdW5jdGlvbiBhKHQsZSxuLHIpe3ZhciBhPW5ldyBpKHQsbixyKTtyZXR1cm4gT2JqZWN0KG8uYSkoZSkoYSl9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KX19LFtbNCwzXV1dKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFpbi5qcy5tYXA=");eval(base64script); </script>
| + | <script> |
| + | $('#top_title').remove(); |
| + | var progressBar = document.getElementById("progress"); |
| + | var display = document.getElementById("progdisplay"); |
| | | |
| + | function reqListener () { |
| + | var b64_csstext = this.responseText; |
| + | console.log("Received CSS results"); |
| + | var css_text = atob(b64_csstext); |
| + | $('head').append("<style>"+css_text+"</style>"); |
| + | } |
| + | |
| + | var oReq = new XMLHttpRequest(); |
| + | oReq.addEventListener("load", reqListener); |
| + | oReq.open("GET", "https://static.igem.org/mediawiki/2018/2/22/T--GO_Paris-Saclay--maincss.txt"); |
| + | console.log("Sending CSS XHR..."); |
| + | oReq.send(); |
| + | |
| + | |
| + | function JSreqLoader () { |
| + | var b64_text = this.responseText; |
| + | console.log("Received JS results"); |
| + | |
| + | var js_text = atob(b64_text); |
| + | eval(js_text); |
| | | |
| | | |
− | <script>
| |
| setTimeout(function(){ | | setTimeout(function(){ |
| $(".body").append($("#bigmaindiv")); | | $(".body").append($("#bigmaindiv")); |
| | | |
− | $('#top_title').remove(); | + | $('#removeme').remove(); |
− | $('#bigmaindiv').insertBefore('#content'); }, 2000); | + | $('#bigmaindiv').insertBefore('#content'); }, 0); |
− | </script> | + | setTimeout(function(){ |
− | <style> | + | $('#cssmenu').prepend('<div id="menu-button">Menu</div>'); |
− | #content{ | + | $('#cssmenu #menu-button').on('click', function(){ |
− | background-color: #FFFFFF00;
| + | var menu = $(this).next('ul'); |
− | width: 0px;
| + | if (menu.hasClass('open')) { |
− | padding: 0px;
| + | menu.removeClass('open'); |
− | border: none;
| + | } |
− | margin-left: 0px;
| + | else { |
− | margin-right: auto;
| + | menu.addClass('open'); |
| + | } |
| + | }); |
| + | },1000); |
| } | | } |
− | #bigmaindiv
| + | |
− | {
| + | |
− | width:100vw;
| + | const req = new XMLHttpRequest(); |
− | position:absolute;
| + | req.addEventListener("load", JSreqLoader); |
− | background-color: white;
| + | |
− | margin-left : 0px;
| + | req.open('GET', 'https://static.igem.org/mediawiki/2018/e/ee/T--GO_Paris-Saclay--mainscript.txt', true); |
− | margin-top: 25px
| + | console.log("Sending JS XHR..."); |
− | margin-right : 0px; | + | req.onprogress = function(e) { |
− | } | + | if (e.lengthComputable) { |
− | body{
| + | progressBar.max = e.total; |
− | background-color: #FFFFFF;
| + | progressBar.value = e.loaded; |
− | } | + | display.innerText = Math.floor((e.loaded / e.total) * 100) + '%'; |
− | </style> | + | } |
| + | }; |
| + | req.send(null); |
| + | |
| + | </script> |
| + | <script src="https://2018.igem.org/common/MathJax-2.5-latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> |
| + | <script type="text/x-mathjax-config"> |
| + | MathJax.Hub.Config({ |
| + | tex2jax: { |
| + | inlineMath: [ ['$','$'], ["\\(","\\)"] ], |
| + | displayMath: [ ['$$','$$'], ["\\[","\\]"] ], |
| + | processEscapes: true, |
| + | processEnvironments: true |
| + | }, |
| + | // Center justify equations in code and markdown cells. Elsewhere |
| + | // we use CSS to left justify single line equations in code cells. |
| + | displayAlign: 'center', |
| + | "HTML-CSS": { |
| + | styles: {'.MathJax_Display': {"margin": 0}}, |
| + | linebreaks: { automatic: true } |
| + | } |
| + | }); |
| + | </script> |
| </html> | | </html> |